* (T188472) The 'comma' value for $wgArticleCountMethod is no longer supported for
performance reasons, and installations with this setting will now work as if it
was configured with 'any'.
-* (T185753) MediaWiki now defaults to using RemexHtml to tidy up user input, rather than
- being off by default. If you wish to disable HTML tidying entirely, set $wgTidyConfig
- to null; if you wish to use the old, deprecated Tidy external binary, both
- set $wgTidyConfig to null and also set $wgUseTidy to true.
* $wgLogAutopatrol now defaults to false instead of true.
=== New features in 1.31 ===
returned regardless.
=== Action API internal changes in 1.31 ===
-* …
+* ApiBase::getProfileDBTime was removed (deprecated since 1.25)
+* ApiBase::getModuleProfileName was removed (deprecated since 1.25)
+* ApiBase::getProfileTime was removed (deprecated since 1.25)
=== Languages updated in 1.31 ===
MediaWiki supports over 350 languages. Many localisations are updated
/**
* Configuration for HTML postprocessing tool. Set this to a configuration
- * array to enable an external tool. By default, we now use the RemexHtml
- * library; historically, Dave Raggett's "HTML Tidy" was typically used.
- * See https://www.w3.org/People/Raggett/tidy/
+ * array to enable an external tool. Dave Raggett's "HTML Tidy" is typically
+ * used. See https://www.w3.org/People/Raggett/tidy/
*
* If this is null and $wgUseTidy is true, the deprecated configuration
* parameters will be used instead.
* - tidyBin: For RaggettExternal, the path to the tidy binary.
* - tidyCommandLine: For RaggettExternal, additional command line options.
*/
-$wgTidyConfig = [ 'driver' => 'RemexHtml' ];
+$wgTidyConfig = null;
/**
* Set this to true to use the deprecated tidy configuration parameters.
* @file
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
/**
* The TitleArray class only exists to provide the newFromResult method at pre-
*/
abstract class TitleArray implements Iterator {
/**
- * @param ResultWrapper $res A SQL result including at least page_namespace and
+ * @param IResultWrapper $res A SQL result including at least page_namespace and
* page_title -- also can have page_id, page_len, page_is_redirect,
* page_latest (if those will be used). See Title::newFromRow.
* @return TitleArrayFromResult
}
/**
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
* @return TitleArrayFromResult
*/
protected static function newFromResult_internal( $res ) {
* @file
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
class TitleArrayFromResult extends TitleArray implements Countable {
- /** @var ResultWrapper */
+ /** @var IResultWrapper */
public $res;
public $key;
}
/**
- * @param bool|ResultWrapper $row
+ * @param bool|IResultWrapper $row
* @return void
*/
protected function setCurrent( $row ) {
return false;
}
- /**
- * @deprecated since 1.25, always returns empty string
- * @param IDatabase|bool $db
- * @return string
- */
- public function getModuleProfileName( $db = false ) {
- wfDeprecated( __METHOD__, '1.25' );
- return '';
- }
-
/**
* @deprecated since 1.25
*/
wfDeprecated( __METHOD__, '1.25' );
}
- /**
- * @deprecated since 1.25, always returns 0
- * @return float
- */
- public function getProfileTime() {
- wfDeprecated( __METHOD__, '1.25' );
- return 0;
- }
-
/**
* @deprecated since 1.25
*/
wfDeprecated( __METHOD__, '1.25' );
}
- /**
- * @deprecated since 1.25, always returns 0
- * @return float
- */
- public function getProfileDBTime() {
- wfDeprecated( __METHOD__, '1.25' );
- return 0;
- }
-
/**
* Call wfTransactionalTimeLimit() if this request was POSTed
* @since 1.26
"apihelp-query+exturlusage-param-namespace": "Espazo de nomes a enumerar.",
"apihelp-query+exturlusage-param-limit": "Cantas páxinas devolver.",
"apihelp-query+exturlusage-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
- "apihelp-query+exturlusage-example-simple": "Mostrar páxinas ligando a <kbd>https://www.mediawiki.org</kbd>.",
+ "apihelp-query+exturlusage-example-simple": "Amosar páxinas que ligan con <kbd>https://www.mediawiki.org</kbd>.",
"apihelp-query+filearchive-summary": "Enumerar secuencialmente todos os ficheiros borrados.",
"apihelp-query+filearchive-param-from": "Título da imaxe coa que comezar a enumeración.",
"apihelp-query+filearchive-param-to": "Título da imaxe coa que rematar a enumeración.",
public function query( $sql, $fname = __METHOD__, $tempIgnore = false ) {
$this->assertTransactionStatus( $sql, $fname );
+ # Avoid fatals if close() was called
+ $this->assertOpen();
+
$priorWritesPending = $this->writesOrCallbacksPending();
$this->lastQuery = $sql;
$this->queryLogger->debug( "{$this->dbName} {$commentedSql}" );
}
- # Avoid fatals if close() was called
- $this->assertOpen();
-
# Send the query to the server and fetch any corresponding errors
$ret = $this->doProfiledQuery( $sql, $commentedSql, $isNonTempWrite, $fname );
$lastError = $this->lastError();
* @ingroup Pager
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
/**
* Result object for the query. Warning: seek before use.
*
- * @var ResultWrapper
+ * @var IResultWrapper
*/
public $mResult;
}
/**
- * @return ResultWrapper The result wrapper.
+ * @return IResultWrapper The result wrapper.
*/
function getResult() {
return $this->mResult;
* @param bool $isFirst False if there are rows before those fetched (i.e.
* if a "previous" link would make sense)
* @param int $limit Exact query limit
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
- function extractResultInfo( $isFirst, $limit, ResultWrapper $res ) {
+ function extractResultInfo( $isFirst, $limit, IResultWrapper $res ) {
$numRows = $res->numRows();
if ( $numRows ) {
# Remove any table prefix from index field
* @param string $offset Index offset, inclusive
* @param int $limit Exact query limit
* @param bool $descending Query direction, false for ascending, true for descending
- * @return ResultWrapper
+ * @return IResultWrapper
*/
public function reallyDoQuery( $offset, $limit, $descending ) {
list( $tables, $fields, $conds, $fname, $options, $join_conds ) =
/**
* Pre-process results; useful for performing batch existence checks, etc.
*
- * @param ResultWrapper $result
+ * @param IResultWrapper $result
*/
protected function preprocessResults( $result ) {
}
/**
* @throws MWException
* @param array $m
- * @return HTML|string
+ * @return string HTML
*/
public function magicLinkCallback( $m ) {
if ( isset( $m[1] ) && $m[1] !== '' ) {
/* these are used extensively in SkinTemplate, but also some other places */
/**
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @return string
*/
static function makeMainPageUrl( $urlaction = '' ) {
* URL with the protocol specified.
*
* @param string $name Name of the Special page
- * @param string $urlaction Query to append
+ * @param string|string[] $urlaction Query to append
* @param string|null $proto Protocol to use or null for a local URL
* @return string
*/
/**
* @param string $name
* @param string $subpage
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @return string
*/
static function makeSpecialUrlSubpage( $name, $subpage, $urlaction = '' ) {
/**
* @param string $name
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @return string
*/
static function makeI18nUrl( $name, $urlaction = '' ) {
/**
* @param string $name
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @return string
*/
static function makeUrl( $name, $urlaction = '' ) {
/**
* this can be passed the NS number as defined in Language.php
* @param string $name
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @param int $namespace
* @return string
*/
/**
* these return an array with the 'href' and boolean 'exists'
* @param string $name
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @return array
*/
static function makeUrlDetails( $name, $urlaction = '' ) {
/**
* Make URL details where the article exists (or at least it's convenient to think so)
* @param string $name Article name
- * @param string $urlaction
+ * @param string|string[] $urlaction
* @return array
*/
static function makeKnownUrlDetails( $name, $urlaction = '' ) {
*/
use MediaWiki\Logger\LoggerFactory;
use Wikimedia\Rdbms\DBQueryTimeoutError;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Get the database result for this special page instance. Used by ApiFeedRecentChanges.
*
- * @return bool|ResultWrapper Result or false
+ * @return bool|IResultWrapper Result or false
*/
public function getRows() {
$opts = $this->getOptions();
* @param array $query_options Array of query options; see IDatabase::select $options
* @param array $join_conds Array of join conditions; see IDatabase::select $join_conds
* @param FormOptions $opts
- * @return bool|ResultWrapper Result or false
+ * @return bool|IResultWrapper Result or false
*/
protected function doMainQuery( $tables, $fields, $conds,
$query_options, $join_conds, FormOptions $opts
/**
* Send output to the OutputPage object, only called if not used feeds
*
- * @param ResultWrapper $rows Database rows
+ * @param IResultWrapper $rows Database rows
* @param FormOptions $opts
*/
public function webOutput( $rows, $opts ) {
/**
* Build and output the actual changes list.
*
- * @param ResultWrapper $rows Database rows
+ * @param IResultWrapper $rows Database rows
* @param FormOptions $opts
*/
abstract public function outputChangesList( $rows, $opts );
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* @param OutputPage $out OutputPage to print to
* @param Skin $skin User skin to use [unused]
* @param IDatabase $dbr (read) connection to use
- * @param ResultWrapper $res Result pointer
+ * @param IResultWrapper $res Result pointer
* @param int $num Number of available result rows
* @param int $offset Paging offset
*/
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* This should be done for live data and cached data.
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
public function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\DBError;
* Run the query and return the result
* @param int|bool $limit Numerical limit or false for no limit
* @param int|bool $offset Numerical offset or false for no offset
- * @return ResultWrapper
+ * @return IResultWrapper
* @since 1.18
*/
public function reallyDoQuery( $limit, $offset = false ) {
* Somewhat deprecated, you probably want to be using execute()
* @param int|bool $offset
* @param int|bool $limit
- * @return ResultWrapper
+ * @return IResultWrapper
*/
public function doQuery( $offset = false, $limit = false ) {
if ( $this->isCached() && $this->isCacheable() ) {
* Fetch the query results from the query cache
* @param int|bool $limit Numerical limit or false for no limit
* @param int|bool $offset Numerical offset or false for no offset
- * @return ResultWrapper
+ * @return IResultWrapper
* @since 1.18
*/
public function fetchFromCache( $limit, $offset = false ) {
* @param OutputPage $out OutputPage to print to
* @param Skin $skin User skin to use
* @param IDatabase $dbr Database (read) connection to use
- * @param ResultWrapper $res Result pointer
+ * @param IResultWrapper $res Result pointer
* @param int $num Number of available result rows
* @param int $offset Paging offset
*/
/**
* Do any necessary preprocessing of the result object.
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
}
* title and optional the namespace field) and executes the batch. This operation will pre-cache
* LinkCache information like page existence and information for stub color and redirect hints.
*
- * @param ResultWrapper $res The ResultWrapper object to process. Needs to include the title
+ * @param IResultWrapper $res The ResultWrapper object to process. Needs to include the title
* field and namespace field, if the $ns parameter isn't set.
* @param null $ns Use this namespace for the given titles in the ResultWrapper object,
* instead of the namespace value of $res.
*/
- protected function executeLBFromResultWrapper( ResultWrapper $res, $ns = null ) {
+ protected function executeLBFromResultWrapper( IResultWrapper $res, $ns = null ) {
if ( !$res->numRows() ) {
return;
}
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
/**
* Cache page existence for performance
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Cache page content model for performance
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Cache page content model and gender distinction for performance
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
if ( !$res->numRows() ) {
* @author Brion Vibber
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Pre-fill the link cache
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @author Brian Wolff
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Pre-fill the link cache
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @author Rob Church <robchur@gmail.com>
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Cache page existence for performance
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
if ( !$res->numRows() ) {
* @author Brian Wolff
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* @param OutputPage $out
* @param Skin $skin (deprecated presumably)
* @param IDatabase $dbr
- * @param ResultWrapper $res Results from query
+ * @param IResultWrapper $res Results from query
* @param int $num Number of results
* @param int $offset Paging offset (Should always be 0 in our case)
*/
* Initialize total values so we can figure out percentages later.
*
* @param IDatabase $dbr
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
public function preprocessResults( $dbr, $res ) {
$this->executeLBFromResultWrapper( $res );
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
/**
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Pre-fill the link cache
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @author Rob Church <robchur@gmail.com>
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Pre-fill the link cache
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Fetch user page links and cache their existence
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @author Rob Church <robchur@gmail.com>
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Pre-cache page existence to speed up link generation
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
public function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
/**
/**
* Build and output the actual changes list.
*
- * @param ResultWrapper $rows Database rows
+ * @param IResultWrapper $rows Database rows
* @param FormOptions $opts
*/
public function outputChangesList( $rows, $opts ) {
*
* @deprecated since 1.31
*
- * @param ResultWrapper &$rows Database rows
+ * @param IResultWrapper &$rows Database rows
* @param FormOptions $opts
*/
function filterByCategories( &$rows, FormOptions $opts ) {
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
/**
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function preprocessResults( $db, $res ) {
$this->executeLBFromResultWrapper( $res );
* @ingroup SpecialPage
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
/**
* Special page allowing users with the appropriate permissions to view
/**
* Generic list of deleted pages
*
- * @param ResultWrapper $result
+ * @param IResultWrapper $result
* @return bool
*/
private function showList( $result ) {
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* Pre-cache page existence to speed up link generation
*
* @param IDatabase $db
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
public function preprocessResults( $db, $res ) {
if ( !$res->numRows() ) {
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
/**
* Build and output the actual changes list.
*
- * @param ResultWrapper $rows Database rows
+ * @param IResultWrapper $rows Database rows
* @param FormOptions $opts
*/
public function outputChangesList( $rows, $opts ) {
* @ingroup Pager
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
class BlockListPager extends TablePager {
/**
* Do a LinkBatch query to minimise database load when generating all these links
- * @param ResultWrapper $result
+ * @param IResultWrapper $result
*/
function preprocessResults( $result ) {
# Do a link batch query
* @ingroup Pager
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
use Wikimedia\Rdbms\IDatabase;
* @param string $offset Index offset, inclusive
* @param int $limit Exact query limit
* @param bool $descending Query direction, false for ascending, true for descending
- * @return ResultWrapper
+ * @return IResultWrapper
*/
function reallyDoQuery( $offset, $limit, $descending ) {
list( $tables, $fields, $conds, $fname, $options, $join_conds ) = $this->buildQueryInfo(
* @ingroup Pager
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
class DeletedContribsPager extends IndexPager {
* @param string $offset Index offset, inclusive
* @param int $limit Exact query limit
* @param bool $descending Query direction, false for ascending, true for descending
- * @return ResultWrapper
+ * @return IResultWrapper
*/
function reallyDoQuery( $offset, $limit, $descending ) {
$data = [ parent::reallyDoQuery( $offset, $limit, $descending ) ];
* @ingroup Pager
*/
use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\Rdbms\FakeResultWrapper;
class ImageListPager extends TablePager {
*
* Note: This will throw away some results
*
- * @param ResultWrapper $res1
- * @param ResultWrapper $res2
+ * @param IResultWrapper $res1
+ * @param IResultWrapper $res2
* @param int $limit
* @param bool $ascending See note about $asc in $this->reallyDoQuery
* @return FakeResultWrapper $res1 and $res2 combined
* @file
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
abstract class UserArray implements Iterator {
/**
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
* @return UserArrayFromResult
*/
static function newFromResult( $res ) {
}
/**
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
* @return UserArrayFromResult
*/
protected static function newFromResult_internal( $res ) {
* @file
*/
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
class UserArrayFromResult extends UserArray implements Countable {
- /** @var ResultWrapper */
+ /** @var IResultWrapper */
public $res;
/** @var int */
public $current;
/**
- * @param ResultWrapper $res
+ * @param IResultWrapper $res
*/
function __construct( $res ) {
$this->res = $res;
* @param string $details HTML safe text between brackets
* @param bool $oppositedm Add the direction mark opposite to your
* language, to display text properly
- * @return HTML escaped string
+ * @return string HTML escaped
*/
function specialList( $page, $details, $oppositedm = true ) {
if ( !$details ) {
"savearticle-start": "Захаваць старонку…",
"savechanges-start": "Захаваць зьмены…",
"publishpage-start": "Апублікаваць старонку…",
+ "publishchanges-start": "Апублікаваць зьмены…",
"preview": "Папярэдні прагляд",
"showpreview": "Праглядзець",
"showdiff": "Паказаць зьмены",
"grant-editmycssjs": "Рэдагаваньне вашага CSS/JSON/JavaScript",
"grant-editmyoptions": "Рэдагаваньне вашых наладаў удзельніка",
"grant-editmywatchlist": "Рэдагаваньне вашага сьпісу назіраньня",
- "grant-editpage": "Рэдагаваць існыя старонкі",
+ "grant-editpage": "Рэдагаваньне існых старонак",
"grant-editprotected": "Рэдагаваць абароненыя старонкі",
"grant-highvolume": "Рэдагаваньне з высокай інтэнсіўнасьцю",
"grant-oversight": "Хаваньне ўдзельнікаў і вэрсіяў старонак",
"recentchanges-legend": "Настройки на списъка с последни промени",
"recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''{{int:diff}}''' = разлика на текущата версия,\n'''{{int:hist}}''' = история на версиите",
"recentchanges-noresult": "За дадения период не бяха намерени промени, които да отговарят на критериите.",
+ "recentchanges-timeout": "Времето за търсене изтече. Моля, опитайте да търсите с различни параметри.",
+ "recentchanges-network": "Поради техническа грешка, резултатите не могат да бъдат заредени. Моля, опитайте да презаредите страницата.",
+ "recentchanges-notargetpage": "Въведете име на страница отгоре, за да видите промени, свързани с нея.",
"recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
"recentchanges-label-newpage": "Нова страница",
"recentchanges-label-minor": "Това е малка промяна",
"rcfilters-savedqueries-apply-and-setdefault-label": "Създаване на филтър по подразбиране",
"rcfilters-savedqueries-cancel-label": "Отказ",
"rcfilters-savedqueries-add-new-title": "Съхраняване на текущите настройки на филтрите",
+ "rcfilters-savedqueries-already-saved": "Тези филтри вече са съхранени. Променете настройките си, за да създадете нов Запазен филтър.",
"rcfilters-restore-default-filters": "Възстановяване на филтрите по подразбиране",
"rcfilters-clear-all-filters": "Изчистване на всички филтри",
"rcfilters-show-new-changes": "Преглед на най-новите промени",
"rcfilters-highlightmenu-title": "Изберете цвят",
"rcfilters-highlightmenu-help": "Изберете цвят за отбелязване на свойството",
"rcfilters-filterlist-noresults": "Не са намерени филтри",
+ "rcfilters-noresults-conflict": "Няма намерени резултати, тъй като критериите за търсене са в противоречие",
+ "rcfilters-state-message-fullcoverage": "Избирането на всички филтри в тази група е същото като избирането на николко, така че този филтър няма да има ефект. Групата включва: $1",
"rcfilters-filtergroup-authorship": "Авторство на редакциите",
"rcfilters-filter-editsbyself-label": "Ваши редакции",
"rcfilters-filter-editsbyself-description": "Ваши редакции.",
"rcfilters-filter-watchlist-notwatched-description": "Всички, освен промените в страници от списъка за наблюдение.",
"rcfilters-filtergroup-watchlistactivity": "Активност по списъка за наблюдение",
"rcfilters-filter-watchlistactivity-unseen-label": "Невидяни промени",
+ "rcfilters-filter-watchlistactivity-unseen-description": "Промени по страници, които не сте посетили откакто са настъпили промените.",
"rcfilters-filter-watchlistactivity-seen-label": "Видени промени",
+ "rcfilters-filter-watchlistactivity-seen-description": "Промени по страници, които сте посетили откакто са настъпили промените.",
"rcfilters-filtergroup-changetype": "Вид на промяната",
"rcfilters-filter-pageedits-label": "Редакции на страници",
"rcfilters-filter-pageedits-description": "Редакции на съдържанието, беседи, описания на категории...",
"rcfilters-filter-categorization-description": "Записи от добавяне или премахване на страници от категории.",
"rcfilters-filter-logactions-label": "Записани в дневника действия",
"rcfilters-filter-logactions-description": "Административни действия, създавания на сметки, изтривания на страници, качвания...",
+ "rcfilters-hideminor-conflicts-typeofchange": "Определени видове промени не могат да бъдат отбелязвани като „малки“, така че този филтър противоречи със следните филтри за Вид на промяната: $1",
"rcfilters-filtergroup-lastRevision": "Текущи версии",
"rcfilters-filter-lastrevision-label": "Текуща версия",
"rcfilters-filter-lastrevision-description": "Само последната промяна на страница.",
"rcfilters-view-return-to-default-tooltip": "Назад към главното меню на филтрите",
"rcfilters-view-tags-help-icon-tooltip": "Научете повече за Етикетираните редакции",
"rcfilters-liveupdates-button": "Обновяване на живо",
+ "rcfilters-liveupdates-button-title-on": "Изключване на обновяването в реално време",
"rcfilters-liveupdates-button-title-off": "Показване на новите промени в реално време",
"rcfilters-watchlist-markseen-button": "Отбелязване на всички промени като видени",
"rcfilters-watchlist-edit-watchlist-button": "Редактиране на списъка за наблюдение",
+ "rcfilters-watchlist-showupdated": "Промени по страници, които не сте посетили откакто са внесени промените, са в <strong>получер</strong>, с удебелени маркери.",
"rcfilters-preference-label": "Скриване на подобрената версия на Последни промени",
"rcfilters-preference-help": "Премахва новия дизайн на интерфейса от 2017 г. и всички инструменти, добавени тогава и след това.",
+ "rcfilters-filter-showlinkedfrom-label": "Показване на промени на страници, към които има връзка от",
+ "rcfilters-filter-showlinkedfrom-option-label": "<strong>Страници, към които има връзка от</strong> избраната страница",
+ "rcfilters-filter-showlinkedto-label": "Показване на промени на страници, сочещи към",
+ "rcfilters-filter-showlinkedto-option-label": "<strong>Страници, сочещи към</strong> избраната страница",
+ "rcfilters-target-page-placeholder": "Въведете име на страница (или категория)",
"rcnotefrom": "{{PLURAL:$5|Дадена е промяната|Дадени са промените}} от <strong>$3, $4</strong> (до <strong>$1</strong> показани).",
"rclistfromreset": "Нулиране на избора на дата",
"rclistfrom": "Показване на промени, като се започва от $3 $2",
"recentchanges-page-added-to-category": "[[:$1]] е добавена към категория",
"recentchanges-page-added-to-category-bundled": "[[:$1]] е добавена към категория, [[Special:WhatLinksHere/$1|към страницата сочат други страници]]",
"recentchanges-page-removed-from-category": "[[:$1]] е премахната от категория",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] е премахната от категория, [[Special:WhatLinksHere/$1|тази страница е включена в други страници]]",
"autochange-username": "Автоматична промяна на МедияУики",
"upload": "Качи файл",
"uploadbtn": "Качване на файл",
"userjspreview": "'''Recordeu que només estau provant/previsualitzant el vostre JavaScript, encara no ho heu desat!'''",
"sitecsspreview": "'''Adoneu-vos que esteu veient una vista prèvia d'aquest full d'estil CSS.'''\n'''Encara no s'ha desat!'''",
"sitejspreview": "'''Tingueu present que esteu previsualitzant aquest codi Javascript.'''\n'''Encara no s'ha desat!'''",
- "userinvalidconfigtitle": "'''Atenció:''' No existeix l'aparença «$1». Recordeu que les subpàgines personalitzades amb extensions .css i .js utilitzen el títol en minúscules, per exemple, {{ns:user}}:NOM/vector.css no és el mateix que {{ns:user}}:NOM/Vector.css.",
+ "userinvalidconfigtitle": "<strong>Atenció:</strong> no existeix l’aparença «$1».\nLes subpàgines personals amb extensions .css, .json i .js utilitzen el títol en minúscules; per exemple, {{ns:user}}:NOM/vector.css no és el mateix que {{ns:user}}:NOM/Vector.css.",
"updated": "(Actualitzat)",
"note": "'''Nota:'''",
"previewnote": "<strong>Recordeu que això és només una previsualització.</strong>\nEls vostres canvis encara no s’han desat!",
"savechanges": "Ӏалашбе хийцамаш",
"publishpage": "АгӀо кхолла",
"publishchanges": "АгӀо дӀаязъян",
+ "savearticle-start": "Ӏалашъе агӀо:",
+ "savechanges-start": "Ӏалашбе хийцамаш...",
+ "publishpage-start": "Арахеца агӀо…",
+ "publishchanges-start": "Арахеца хийцамаш…",
"preview": "Хьалххе хьажар",
"showpreview": "Хьалха хьажар",
"showdiff": "Бина болу хийцамашка хьажар",
"password-login-forbidden": "The use of this username and password has been forbidden.",
"mailmypassword": "Reset password",
"passwordremindertitle": "New temporary password for {{SITENAME}}",
- "passwordremindertext": "Someone (probably you, from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
+ "passwordremindertext": "Someone (from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
"noemail": "There is no email address recorded for user \"$1\".",
"noemailcreate": "You need to provide a valid email address.",
"passwordsent": "A new password has been sent to the email address registered for \"$1\".\nPlease log in again after you receive it.",
"longpageerror": "<strong>Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.</strong>\nIt cannot be saved.",
"readonlywarning": "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>\nYou may wish to copy and paste your text into a text file and save it for later.\n\nThe system administrator who locked it offered this explanation: $1",
"protectedpagewarning": "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>\nThe latest log entry is provided below for reference:",
- "semiprotectedpagewarning": "<strong>Note:</strong> This page has been protected so that only registered users can edit it.\nThe latest log entry is provided below for reference:",
+ "semiprotectedpagewarning": "<strong>Note:</strong> This page has been protected so that only autoconfirmed users can edit it.\nThe latest log entry is provided below for reference:",
"cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with [[Special:ListGroupRights|specific rights]] can edit it because it is transcluded in the following cascade-protected {{PLURAL:$1|page|pages}}:",
"titleprotectedwarning": "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>\nThe latest log entry is provided below for reference:",
"templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
"fix-double-redirects": "Update any redirects that point to the original title",
"move-leave-redirect": "Leave a redirect behind",
"protectedpagemovewarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.\nThe latest log entry is provided below for reference:",
- "semiprotectedpagemovewarning": "<strong>Note:</strong> This page has been protected so that only registered users can move it.\nThe latest log entry is provided below for reference:",
+ "semiprotectedpagemovewarning": "<strong>Note:</strong> This page has been protected so that only autoconfirmed users can move it.\nThe latest log entry is provided below for reference:",
"move-over-sharedrepo": "[[:$1]] exists on a shared repository. Moving a file to this title will override the shared file.",
"file-exists-sharedrepo": "The filename chosen is already in use on a shared repository.\nPlease choose another name.",
"export": "Export pages",
"userjspreview": "<strong>¡Recuerda que solo estás previsualizando tu JavaScript de usuario.\n¡Aún no se ha guardado!</strong>",
"sitecsspreview": "<strong>Recuerda que solo estás previsualizando este CSS.\n¡Aún no se ha guardado!</strong>",
"sitejspreview": "<strong>Recuerda que solo estás previsualizando este código JavaScript.\n¡Aún no se ha guardado!</strong>",
- "userinvalidconfigtitle": "<strong>Advertencia:</strong> no existe la apariencia «$1».\nRecuerda que las páginas personalizadas .css y .js tienen un título en minúsculas. Por ejemplo, se usa {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
+ "userinvalidconfigtitle": "<strong>Atención:</strong> no existe la apariencia «$1».\nLas páginas de archivos .css, .json y .js personalizados comienzan por minúscula; p. ej., se usa «{{ns:user}}:Ejemplo/vector.css» en vez de «{{ns:user}}:Ejemplo/Vector.css».",
"updated": "(Actualizado)",
"note": "<strong>Nota:</strong>",
"previewnote": "<strong>Recuerda que esto no es más que una previsualización.</strong>\nAún no se han guardado tus cambios.",
"apisandbox-dynamic-error-exists": "Ya existe un parámetro llamado \"$1\".",
"apisandbox-deprecated-parameters": "Parámetros desaconsejados",
"apisandbox-fetch-token": "Auto-llenar el token",
+ "apisandbox-add-multi": "Añadir",
"apisandbox-submit-invalid-fields-title": "Algunos campos no son válidos",
"apisandbox-submit-invalid-fields-message": "Corrige los campos señalados e inténtalo de nuevo.",
"apisandbox-results": "Resultados",
"cascadeprotected": "این صفحه در مقابل ویرایش محافظت شدهاست چون در {{PLURAL:$1|صفحهٔ|صفحههای}} محافظتشدهٔ زیر که گزینهٔ «آبشاری» در {{PLURAL:$1|آن|آنها}} انتخاب شده قرار گرفتهاست:\n$2",
"namespaceprotected": "شما اجازهٔ ویرایش صفحههای فضای نام '''$1''' را ندارید.",
"customcssprotected": "شما اجازهٔ ویرایش این صفحهٔ سیاساس را ندارید، زیرا حاوی تنظیمهای شخصی یک کاربر دیگر است.",
+ "customjsonprotected": "شما اجازهٔ ویرایش در این صفحهٔ JSON را ندارید چون دارای تنظیمات شخصی کاربران است.",
"customjsprotected": "شما اجازهٔ ویرایش این صفحهٔ جاوااسکریپت را ندارید، زیرا حاوی تنظیمهای شخصی یک کاربر دیگر است.",
"mycustomcssprotected": "شما دارای مجوز ویرایش این صفحهٔ سیاساس نیستید.",
"mycustomjsprotected": "شما دارای مجوز ویرایش این صفحهٔ جاوااسکریپت نیستید.",
"wrongpasswordempty": "Et voi antaa tyhjää salasanaa.",
"passwordtooshort": "Salasanan täytyy olla vähintään {{PLURAL:$1|yhden merkin pituinen|$1 merkkiä pitkä}}.",
"passwordtoolong": "Salasanat saavat olla enintään $1 {{PLURAL:$1|merkin}} pituisia.",
- "passwordtoopopular": "Tavanomaisen kaltaisia salasanoja ei saa käyttää. Valitse parempi ja yksilöllisempi salasana.",
+ "passwordtoopopular": "Tavanomaisen kaltaisia salasanoja ei saa käyttää. Valitse salasana, joka on vaikeampi arvata.",
"password-name-match": "Salasanasi täytyy olla eri kuin käyttäjätunnuksesi.",
"password-login-forbidden": "Tämän käyttäjänimen ja salasanan käyttö on estetty.",
"mailmypassword": "Hanki uusi salasana",
"savechanges": "Tallenna muutokset",
"publishpage": "Julkaise sivu",
"publishchanges": "Julkaise muutokset",
+ "savearticle-start": "Tallenna sivu",
+ "savechanges-start": "Tallenna muutokset",
+ "publishpage-start": "Julkaise sivu",
+ "publishchanges-start": "Julkaise muutokset",
"preview": "Esikatselu",
"showpreview": "Esikatsele",
"showdiff": "Näytä muutokset",
"userjspreview": "'''Tämä on JavaScriptin esikatselu.'''",
"sitecsspreview": "'''Huomaa, että tämä on vasta CSS:n esikatselu.''' \n'''Muutoksia ei ole vielä tallennettu.'''",
"sitejspreview": "'''Huomaa, että tämä on vasta JavaScript-koodin esikatselu.'''\n'''Muutoksia ei ole vielä tallennettu.'''",
- "userinvalidconfigtitle": "'''Varoitus:''' Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/vector.css eikä {{ns:user}}:Matti Meikäläinen/Vector.css.",
+ "userinvalidconfigtitle": "<strong>Varoitus:</strong> Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css-, -json- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/vector.css eikä {{ns:user}}:Matti Meikäläinen/Vector.css.",
"updated": "(Päivitetty)",
"note": "'''Huomautus:'''",
"previewnote": "'''Tämä on vasta sivun esikatselu.'''\nTekemiäsi muutoksia ei ole vielä tallennettu.",
"right-editcontentmodel": "Muokata sivun sisältömallia (content model)",
"right-editinterface": "Muokata käyttöliittymätekstejä",
"right-editusercss": "Muokata toisten käyttäjien CSS-tiedostoja",
+ "right-edituserjson": "Muokkaa toisten käyttäjien JSON-tiedostoja",
"right-edituserjs": "Muokata toisten käyttäjien JavaScript-tiedostoja",
"right-editmyusercss": "Muokata omia CSS-tiedostoja",
+ "right-editmyuserjson": "Muokkaa omia JSON-tiedostoja",
"right-editmyuserjs": "Muokata omia JavaScript-tiedostoja",
"right-viewmywatchlist": "Nähdä oma tarkkailulista",
"right-editmywatchlist": "Muokata omaa tarkkailulistaasi. (Jotkut toiminnot lisäävät edelleen sivuja listallesi ilmankin tätä oikeutta.)",
"grant-createaccount": "Luoda käyttäjätunnuksia",
"grant-createeditmovepage": "Luoda, muokata ja siirtää sivuja",
"grant-delete": "Poistaa sivuja, yksittäisiä versioita ja lokimerkintöjä",
- "grant-editinterface": "Muokata järjestelmäviesti-nimiavaruutta ja käyttäjien CSS/JavaScript-sivuja",
- "grant-editmycssjs": "Muokata käyttäjän omia CSS/JavaScript-sivuja",
+ "grant-editinterface": "Muokata järjestelmäviesti-nimiavaruutta ja käyttäjien CSS/JSON/JavaScript-sivuja",
+ "grant-editmycssjs": "Muokata käyttäjän omia CSS/JSON/JavaScript-sivuja",
"grant-editmyoptions": "Muokata käyttäjän omia asetuksia",
"grant-editmywatchlist": "Muokata tarkkailulistaasi",
"grant-editpage": "Muokata olemassa olevia sivuja",
"apisandbox-dynamic-error-exists": "Parametri nimellä ”$1” on jo olemassa.",
"apisandbox-deprecated-parameters": "Käytöstä poistuneet parametrit",
"apisandbox-fetch-token": "Lisää token automaattisesti",
+ "apisandbox-add-multi": "Lisää",
"apisandbox-submit-invalid-fields-title": "Jotkin kentät ovat epäkelpoja",
"apisandbox-submit-invalid-fields-message": "Korjaa merkityt kentät ja yritä uudestaan.",
"apisandbox-results": "Tulokset",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|tavu|tavua}}",
"limitreport-templateargumentsize": "Mallineen argumenttien koko<br />(template argument size)",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|tavu|tavua}}",
- "limitreport-expansiondepth": " Highest expansion depth",
+ "limitreport-expansiondepth": " Suurin laajennussyvyys.",
"limitreport-expensivefunctioncount": "Vaativien jäsenninfunktioiden lukumäärä",
"expandtemplates": "Laajenna mallineet",
"expand_templates_intro": "Tämä toimintosivu ottaa syötteeksi wikitekstiä ja laajentaa kaikki siinä olevat mallineet rekursiivisesti.\nSe myös laajentaa tuetut parserifunktiot kuten\n<code><nowiki>{{</nowiki>#language:...}}</code> ja -muuttujat kuten\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nKäytännössä se laajentaa melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.",
"apisandbox-dynamic-error-exists": "Un paramètre nommé \"$1\" existe déjà.",
"apisandbox-deprecated-parameters": "Paramètres désuets",
"apisandbox-fetch-token": "Auto-remplissage du jeton",
+ "apisandbox-add-multi": "Ajouter",
"apisandbox-submit-invalid-fields-title": "Certains champs ne sont pas valides",
"apisandbox-submit-invalid-fields-message": "Veuillez corriger les champs marqués et essayez de nouveau.",
"apisandbox-results": "Résultats",
"아라",
"Soul Train",
"Macofe",
- "Matma Rex"
+ "Matma Rex",
+ "Fitoschido"
]
},
"tog-underline": "Solegnér los lims :",
"userjspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés èprovar prèvêre voutron code JavaScript.\nIl est p’oncor étâ encartâ !</strong>",
"sitecsspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.\nEl est p’oncor étâye encartâye !</strong>",
"sitejspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.\nIl est p’oncor étâ encartâ !</strong>",
- "userinvalidconfigtitle": "<strong>Atencion :</strong> ègziste gins d’habelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont de titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
+ "userinvalidconfigtitle": "<strong>Atencion :</strong> ègziste gins d’habelyâjo « $1 ».\nRapelâd-vos que les pâges a sè avouéc èxtensions .css, .json et .js emplèyont de titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
"updated": "(Betâ a jorn)",
"note": "<strong>Nota :</strong>",
"previewnote": "<strong>Rapelâd-vos qu’o est ren qu’un apèrçu.</strong>\nVoutros changements sont p’oncor étâs encartâs !",
"translateinterface": "Pou ajouté oben modifyé dé amòrfwazaj pou tout wiki, souplé, itilizé [https://translatewiki.net/ translatewiki.net], projè-a di lokalizasyon lengwistik di MediaWiki.",
"cascadeprotected": "Sa paj protéjé kont modifikasyon-yan pas li sa transkliz pa {{PLURAL:$1|paj-a ki ka swiv, ki té protéjé|paj-ya ki ka swiv, ki té protéjé}} ké lòpsyon « protèksyon an kaskad » aktivé :\n$2",
"namespaceprotected": "Zòt pa gen pèrmisyon-an di modifyé paj-ya di lèspas di non « <strong>$1</strong> ».",
+ "customcssprotected": "Zòt pa gen pèrmisyon-an di modifyé sa féy di stil CSS, pas li ka kontni paramèt pèrsonèl di rounòt itilizatò.",
+ "customjsonprotected": "Zòt pa gen drwè di modifyé sa paj JSON pas li ka kontni paramèt pèrsonèl di rounòt itilizatò.",
+ "customjsprotected": "Zòt pa gen pèrmisyon-an di modifyé sa paj di JavaScript, pas li ka kontni paramèt pèrsonèl di rounòt itilizatò.",
+ "mycustomcssprotected": "Zòt pa gen drwè di modifyé sa paj CSS.",
+ "mycustomjsonprotected": "Zòt pa gen drwè di modifyé sa paj JSON.",
+ "mycustomjsprotected": "Zòt pa gen drwè di modifyé sa paj JavaScript.",
+ "myprivateinfoprotected": "Zòt pa gen drwè di modifyé zòt enfòrmasyon pèrsonèl.",
+ "mypreferencesprotected": "Zòt pa gen drwè di modifyé zòt préférans.",
+ "ns-specialprotected": "Paj spésyal-ya pa pouvé sa modifyé.",
+ "titleprotected": "Sa tit té protéjé kont tout kréyasyon pa [[User:$1|$1]].\nMotif fourni sa <em>$2</em>.",
+ "filereadonlyerror": "Enposib di modifyé fiché-a « $1 » pas répèrtwar-a di fiché « $2 » sa an lèktir sèl.\n\nAdministratò sistèm ki li vérouyé té fourni sa motif : « $3 ».",
+ "invalidtitle-knownnamespace": "Tit pa valid ké lèspas di non « $2 » é entitilé-a « $3 »",
+ "invalidtitle-unknownnamespace": "Tit pa valid ké niméro-a di lèspas di non $1 enkonèt é entitilé-a « $2 »",
+ "exception-nologin": "Pa konèkté",
+ "exception-nologin-text": "Souplé, konèkté zòt kò pou aksédé à sa paj oben sa aksyon.",
+ "exception-nologin-text-manual": "Souplé zòt $1 pou aksédé à sa paj oben sa aksyon.",
+ "virus-badscanner": "Movèz konfigirasyon : analizò di viris enkonèt : <em>$1</em>",
+ "virus-scanfailed": "échèk di analiz-a (kod $1)",
+ "virus-unknownscanner": "antiviris enkonèt :",
+ "logouttext": "<strong>Zòt atchwèlman dékonèkté.</strong>\n\nNoté ki sèrtenn paj pouvé fika òkò afiché kou si zòt toujou konèkté, jouk zòt désidé di éfasé kach-a di zòt navigatò.",
+ "cannotlogoutnow-title": "Enposib di konèkté so kò atchwèlman",
+ "cannotlogoutnow-text": "Dékonèksyon-an pa posib an itilizan $1.",
+ "welcomeuser": "Bèlvini, $1 !",
+ "welcomecreation-msg": "Zòt kont té kréyé.\nZòt pouvé modifyé [[Special:Preferences|zòt préférans]] pou {{SITENAME}} si zòt swété.",
+ "yourname": "Non di itilizatò :",
"userlogin-yourname": "Non di itilizatò",
"userlogin-yourname-ph": "Antré zòt non di itilizatò",
+ "createacct-another-username-ph": "Antré non-an di itilizatò",
+ "yourpassword": "Mo di pas :",
"userlogin-yourpassword": "Mo di pas",
"userlogin-yourpassword-ph": "Antré zòt mo di pas",
"createacct-yourpassword-ph": "Antré oun mo di pas",
+ "yourpasswordagain": "Konfirmé mo di pas :",
"createacct-yourpasswordagain": "Konfirmé mo di pas",
"createacct-yourpasswordagain-ph": "Antré òkò menm mo di pas",
"userlogin-remembermypassword": "Gardé mo sésyon aktiv",
+ "userlogin-signwithsecure": "Itilizé roun konèksyon sékirizé",
+ "cannotlogin-title": "Enposib di konèkté so kò",
+ "cannotlogin-text": "Konèksyon-an pa posib",
+ "cannotloginnow-title": "Enposib di konèkté so kò atchwèlman",
+ "cannotloginnow-text": "Konèksyon-an pa posib an itilizan $1.",
+ "cannotcreateaccount-title": "Kréyasyon di kont enposib",
+ "cannotcreateaccount-text": "Kréyasyon-an dirèk di kont itilizatò pa aktivé asou sa wiki.",
+ "yourdomainname": "Zòt domenn :",
+ "password-change-forbidden": "Zòt pa pouvé modifyé mo di pas asou sa wiki.",
+ "externaldberror": "Swé roun érò prodjwi so kò asou baz di doné di otantifikasyon, swé zòt pa otorizé à mété à jou zòt kont èkstèrn.",
"login": "Konèksyon",
+ "login-security": "Vérifyé zòt idantité",
+ "nav-login-createaccount": "Kréyé roun kont oben konèkté so kò",
+ "logout": "Dékonèkté so kò",
+ "userlogout": "Dékonèksyon",
+ "notloggedin": "Pa konèkté",
"userlogin-noaccount": "Zòt pa gen roun kont ?",
"userlogin-joinproject": "Roujwenn {{SITENAME}}",
"createaccount": "Kréyé roun kont",
"userlogin-resetpassword-link": "Zòt bliyé zòt mo di pas ?",
"userlogin-helplink2": "Èd pou konèkté so kò",
+ "userlogin-loggedin": "Zòt ja konèkté an tan ki $1.\nItilizé fòrmilèr-a ki anba pou konèkté zòt kò ké rounòt kont itilizatò.",
+ "userlogin-reauth": "Zòt divèt roukonèkté zòt kò pou vérifyé ki zòt sa {{GENDER:$1|$1}}.",
+ "userlogin-createanother": "Kréyé rounòt kont",
+ "createacct-emailrequired": "Adrès di kouryé",
"createacct-emailoptional": "Adrès di kouryé (fakiltativ)",
"createacct-email-ph": "Zòt adrès di kouryé",
+ "createacct-another-email-ph": "Antré adrès-a di kouryé",
+ "createaccountmail": "Itilizé roun mo di pas aléyatwar tanporèr é voyé li pou adrès-a di kouryé spésifyé",
+ "createaccountmail-help": "Pé sa itilizé pou kréyé roun kont pou rounòt moun san konèt mo di pas.",
+ "createacct-realname": "Non réyèl (fakiltatif)",
+ "createacct-reason": "Motif",
+ "createacct-reason-ph": "Poukisa zòt kréyé rounòt kont",
+ "createacct-reason-help": "Mésaj afiché annan journal di kréyasyon di kont",
"createacct-submit": "Kréyé zòt kont",
+ "createacct-another-submit": "Kréyé kont-a",
+ "createacct-continue-submit": "Kontinwé kréyasyon-an di kont",
+ "createacct-another-continue-submit": "Kontinwé kréyasyon-an di kont",
"createacct-benefit-heading": "{{SITENAME}} sa ékri pa dé moun kou zòt.",
"createacct-benefit-body1": "modifikasyon{{PLURAL:$1|}}",
"createacct-benefit-body2": "paj{{PLURAL:$1|}}",
"createacct-benefit-body3": "{{PLURAL:$1|kontribitò résant}}",
+ "badretype": "Mo di pas ki zòt sézi pa ka korèsponn.",
+ "usernameinprogress": "Oun kréyasyon di kont pou sa non d'itilizatò ja an kour.\nSouplé, pasyanté.",
+ "userexists": "Non d'itilizatò sézi ja itilizé.\nSouplé, chwézi roun non diféran.",
+ "loginerror": "Érò di konèksyon",
+ "createacct-error": "Érò lò kréyasyon-an di kont",
+ "createaccounterror": "Enposib di kréyé kont-a : $1",
+ "nocookiesnew": "Kont itilizatò té kréyé, mè zòt pa konèkté.\n{{SITENAME}} ka itilizé dé témwen (''cookies'') pou konsèrvé konèksyon-an mè zòt dézaktivé yé.\nSouplé, aktivé yé é roukonèkté zòt kò ké menm non é menm mo di pas.",
+ "nocookieslogin": "{{SITENAME}} itilizé dé témwen (''cookies'') pou konsèrvé konèksyon-an mè zòt dézaktivé yé.\nSouplé, aktivé yé é roukonèkté zòt kò.",
+ "nocookiesfornew": "Kont itilizatò pa té kréyé, pas nou pa té pouvé idantifyé so lorijin.\nVérifyé ki zòt aktivé témwen-yan (''cookies''), roucharjé paj-a é éséyé òkò.",
+ "createacct-loginerror": "Kont-a té byen kréyé mè zòt pa pouvé konèkté zòt kò otomatikman.\nSouplé, [[Special:UserLogin|konèkté zòt kò manwèlman]].",
+ "noname": "Zòt pa sézi roun non d'itilizatò valid.",
+ "loginsuccesstitle": "Konèkté",
+ "mailmypassword": "Réyinisyalizé mo di pas",
+ "noemailcreate": "Zòt divèt fourni roun adrès di kouryé valid",
+ "accountcreated": "Kont kréyé",
"loginlanguagelabel": "Lanng : $1",
"pt-login": "Konèkté so kò",
"pt-login-button": "Konèkté so kò",
"savechanges": "Gardar os cambios",
"publishpage": "Publicar a páxina",
"publishchanges": "Publicar os cambios",
+ "savearticle-start": "Gardar a páxina…",
+ "savechanges-start": "Gardar os cambios…",
+ "publishpage-start": "Publicar a páxina…",
+ "publishchanges-start": "Publicar os cambios…",
"preview": "Vista previa",
"showpreview": "Mostrar a vista previa",
"showdiff": "Mostrar os cambios",
"blocked-notice-logextract": "Este usuario está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
"clearyourcache": "<strong>Nota:</strong> Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* <strong>Firefox/Safari:</strong> Prema <em>Maiúsculas</em> á vez que en <em>Recargar</em>, ou prema en <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> nos Mac).\n* <strong>Google Chrome:</strong> Prema en <em>Ctrl-Maiús-R</em> (<em>⌘-Maiús-R</em> nos Mac).\n* <strong>Internet Explorer:</strong> Prema <em>Ctrl</em> ao tempo que fai clic en <em>Refrescar</em>, ou prema en <em>Ctrl-F5</em>.\n* <strong>Opera:</strong> Vaia a <em>Menú → Configuración</em> (<em>Opera → Preferencias</em> nos Mac) e logo a <em>Privacidade e seguridade → Limpar os datos de navegación → Ficheiros e imaxes na caché</em>.",
"usercssyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo CSS antes de gardalo.",
+ "userjsonyoucanpreview": "<strong>Consello:</strong> use o botón «{{int:showpreview}}» para probar o seu novo código JSON antes de gardalo.",
"userjsyoucanpreview": "<strong>Nota:</strong> Use o botón \"{{int:showpreview}}\" para verificar o novo JavaScript antes de gardalo.",
"usercsspreview": "'''Lembre que só está vendo a vista previa do seu CSS de usuario.'''\n'''Este aínda non foi gardado!'''",
+ "userjsonpreview": "<strong>Lembre que tan só está probando/previsualizando a súa configuración de usuario JSON.\nAínda non foi gardada!</strong>",
"userjspreview": "'''Lembre que só está probando/previsualizando o seu JavaScript de usuario.'''\n'''Este aínda non foi gardado!'''",
"sitecsspreview": "'''Lembre que só está vendo a vista previa deste CSS.'''\n'''Este aínda non foi gardado!'''",
+ "sitejsonpreview": "<strong>Lembre que tan só está previsualizando esta configuración JSON.\nAínda non foi gardada!</strong>",
"sitejspreview": "'''Lembre que só está vendo a vista previa deste código JavaScript.'''\n'''Este aínda non foi gardado!'''",
"userinvalidconfigtitle": "<strong>Aviso:</strong> Non hai ningunha aparencia chamada \"$1\".\nLembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo \"{{ns:user}}:Exemplo/vector.css\" no canto de \"{{ns:user}}:Exemplo/Vector.css\".",
"updated": "(Actualizado)",
"recentchangesdays": "Número de días a mostrar nos cambios recentes:",
"recentchangesdays-max": "Máximo: $1 {{PLURAL:$1|día|días}}",
"recentchangescount": "Número de edicións a mostrar por defecto:",
- "prefs-help-recentchangescount": "Isto inclúe os cambios recentes, os historiais e mais os rexistros.",
+ "prefs-help-recentchangescount": "Número máximo: 1000",
"prefs-help-watchlist-token2": "Esta é a clave secreta da fonte de novas web para a súa lista de vixilancia.\nCalquera persoa que a saiba poderá ler a súa lista de vixilancia; non comparta esta clave.\nSe o precisa, [[Special:ResetTokens|pode restablecela]].",
"savedprefs": "Gardáronse as súas preferencias.",
"savedrights": "Gardáronse os grupos de {{GENDER:$1|usuario|usuaria}} de $1.",
"default": "predeterminado",
"prefs-files": "Ficheiros",
"prefs-custom-css": "CSS personalizado",
+ "prefs-custom-json": "JSON personalizado",
"prefs-custom-js": "JavaScript personalizado",
- "prefs-common-config": "CSS/JavaScript compartido por todas as aparencias:",
+ "prefs-common-config": "CSS/JSON/JavaScript compartido por todas as aparencias:",
"prefs-reset-intro": "Pode usar esta páxina para restablecer as súas preferencias ás que veñen dadas por defecto.\nEste cambio non se poderá desfacer.",
"prefs-emailconfirm-label": "Confirmación do correo:",
"youremail": "Correo electrónico:",
"right-editcontentmodel": "Editar o modelo de contido dunha páxina",
"right-editinterface": "Editar a interface de usuario",
"right-editusercss": "Editar os ficheiros CSS doutros usuarios",
+ "right-edituserjson": "Editar ficheiros JSON doutros usuarios",
"right-edituserjs": "Editar os ficheiros JavaScript doutros usuarios",
"right-editmyusercss": "Editar os ficheiros CSS propios",
+ "right-editmyuserjson": "Editar os ficheiros JSON do propio usuario",
"right-editmyuserjs": "Editar os ficheiros JavaScript propios",
"right-viewmywatchlist": "Ver a lista de vixilancia propia",
"right-editmywatchlist": "Editar a lista de vixilancia propia. Teña en conta que algunhas accións engadirán páxinas igualmente mesmo sen este dereito.",
"grant-createaccount": "Crear contas",
"grant-createeditmovepage": "Crear, editar e mover páxinas",
"grant-delete": "Borrar páxinas, revisións e entradas de rexistro",
- "grant-editinterface": "Editar o espazo de nomes MediaWiki e o CSS/JavaScript de usuario",
- "grant-editmycssjs": "Editar o seu CSS/JavaScript de usuario",
+ "grant-editinterface": "Editar o espazo de nomes MediaWiki e o CSS/JSON/JavaScript de usuario",
+ "grant-editmycssjs": "Editar o seu CSS/JSON/JavaScript de usuario",
"grant-editmyoptions": "Editar as súas preferencias de usuario",
"grant-editmywatchlist": "Editar a súa lista de vixilancia",
"grant-editpage": "Editar páxinas existentes",
"apisandbox-dynamic-error-exists": "Xa existe un parámetro co nome \"$1\".",
"apisandbox-deprecated-parameters": "Parámetros obsoletos",
"apisandbox-fetch-token": "Encher automaticamente o identificador",
+ "apisandbox-add-multi": "Engadir",
"apisandbox-submit-invalid-fields-title": "Algúns campos non son válidos",
"apisandbox-submit-invalid-fields-message": "Por favor, amañe os campos marcados e inténteo de novo.",
"apisandbox-results": "Resultados",
"thumbnail_dest_directory": "Non se puido crear o directorio de destino",
"thumbnail_image-type": "Tipo de imaxe non soportado",
"thumbnail_gd-library": "Configuración da libraría GD incompleta: Falta a función $1",
+ "thumbnail_image-size-zero": "O tamaño do ficheiro de imaxe semella ser cero.",
"thumbnail_image-missing": "Parece que falta o ficheiro: $1",
"thumbnail_image-failure-limit": "Producíronse demasiados ($1 ou máis) intentos fallidos recentes de renderizar esta miniatura. Inténteo de novo máis tarde.",
"import": "Importar páxinas",
"watchlistedit-clear-titles": "Títulos:",
"watchlistedit-clear-submit": "Limpar a lista de vixilancia (isto é permanente!)",
"watchlistedit-clear-done": "Limpouse a súa lista de vixilancia.",
+ "watchlistedit-clear-jobqueue": "A súa lista de vixilancia está a ser eliminada. Isto pode levar algún tempoǃ",
"watchlistedit-clear-removed": "{{PLURAL:$1|Eliminouse un título|Elimináronse $1 títulos}}:",
"watchlistedit-too-many": "Hai demasiadas páxinas para mostrar.",
"watchlisttools-clear": "Limpar a lista de vixilancia",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"limitreport-expansiondepth": "Máxima profundidade de expansión",
"limitreport-expensivefunctioncount": "Número de funcións analíticas custosas",
+ "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"expandtemplates": "Expandir os modelos",
"expand_templates_intro": "Esta páxina especial toma texto wiki e expande todos os modelos dentro del recursivamente.\nTamén expande as funcións de análise como\n<code><nowiki>{{</nowiki>#language:…}}</code> e variables como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nDe feito, expande case calquera cousa entre dúas chaves.",
"expand_templates_title": "Título do contexto, para {{FULLPAGENAME}} etc.:",
"october": "Oktober",
"november": "Nopember",
"december": "Desember",
- "january-gen": "Januari",
+ "january-gen": "Januwari",
"february-gen": "Pebruari",
"march-gen": "Maret",
"april-gen": "April",
"category_header": "Halaman to delomo dalala \"$1\"",
"subcategories": "Subkategori",
"category-media-header": "Media to delomo dalala \"$1\"",
- "category-empty": "<em>Kategori botiye ja o halaman meyalo media.<em>",
- "hidden-categories": "{{PLURAL:$1|Tayadu wanto-wanto'o}}",
- "hidden-category-category": "Kategori wanto-wanto'o",
+ "category-empty": "<em>Dalala botiye ja o halaman meyalo media.<em>",
+ "hidden-categories": "{{PLURAL:$1|Dalala wanto-wanto'o}}",
+ "hidden-category-category": "Dalala wanto-wanto'o",
"category-subcat-count": "{{PLURAL:$2|Kategori boti woluwo subkategori|Kategori boti woluwo {{PLURAL:$1|subkategori|$1 subkategori}} lonto nga'amila $2.}}",
"category-subcat-count-limited": "Kategori boti woluwo {{PLURAL:$1|subkategori|$1 subkategori}}",
"category-article-count": "{{PLURAL:$2|Kategori botiye o tuwango halaman.|Woluwo {{PLURAL:$|$1 halaman}} to delomo kategori, lonto $2 nga'amila.}}",
"poolcounter-usage-error": "Tilala lopohuna:$1",
"aboutsite": "Tomimbihu {{SITENAME}}",
"aboutpage": "Proyek:Tomimbihu",
- "copyright": "Tuwango woluwo sadi-sadia odelo to tibawa $1",
+ "copyright": "Tuwanga botiya sadi-sadia odelo to tibawa $1",
"copyrightpage": "{{ns:project}}:Haku lohutu",
"currentevents": "U yilowali baharu",
"currentevents-url": "Project:U yilowali baharu",
"allarticles": "Nga'amila halaman",
"allpagessubmit": "Ntali",
"allpages-hide-redirects": "Wanto'a mopobale",
- "categories": "Kategori",
+ "categories": "Daputari Dalala",
"listgrouprights-members": "(daputari lo anggota)",
"emailuser": "Lawola surel ta ohu'uwo botiye",
"usermessage-editor": "Sistem lo tahuli",
"sitejspreview": "<strong>זו רק תצוגה מקדימה של סקריפט ה־JavaScript הזה.\nהוא עדיין לא נשמר!</strong>",
"userinvalidconfigtitle": "<strong>אזהרה:</strong> העיצוב \"$1\" אינו קיים.\nדפי <span dir=\"ltr\">.css</span>, דפי <span dir=\"ltr\"><span dir=\"ltr\">.js</span>on</span> ודפי <span dir=\"ltr\">.js</span> מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/vector.css ולא {{ns:user}}:דוגמה/Vector.css.",
"updated": "(מעודכן)",
- "note": "'''הערה:'''",
- "previewnote": "<strong>{{GENDER:|זכור|זִכרי|זִכרו}} שזו רק תצוגה מקדימה.</strong>\nהשינויים {{GENDER:|שלך|שלך|שלכם}} עדיין לא נשמרו!",
+ "note": "<strong>הערה:</strong>",
+ "previewnote": "<strong>זו רק תצוגה מקדימה.</strong>\nהשינויים שלך עדיין לא נשמרו!",
"continue-editing": "מעבר לאזור העריכה",
- "previewconflict": "תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\96×\95 ×\9eצ×\99×\92×\94 ×\9b×\99צ×\93 ×\99×\99ר×\90×\94 ×\94×\98קס×\98 ×\91×\97×\9c×\95×\9f ×\94ער×\99×\9b×\94 ×\94×¢×\9c×\99×\95×\9f, ×\90×\9d ת×\91×\97ר×\95 ×\9cש×\9e×\95ר ×\90×\95ת×\95.",
+ "previewconflict": "תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\96×\95 ×\9eצ×\99×\92×\94 ×\9b×\99צ×\93 ×\99×\99ר×\90×\94 ×\94×\98קס×\98 ×\91×\97×\9c×\95×\9f ×\94ער×\99×\9b×\94 ×\94×¢×\9c×\99×\95×\9f, ×\90×\9d ×\94×\95×\90 ×\99×\99ש×\9eר.",
"session_fail_preview": "מצטערים! לא ניתן לבצע את עריכתכם עקב אובדן מידע הכניסה.\n\nייתכן שנותקתם מהחשבון. <strong>אנא ודאו שאתם עדיין מחוברים לחשבון ונסו שוב.</strong>\nאם זה עדיין לא עובד, נסו [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס אליו שנית, וודאו שהדפדפן שלכם מאפשר קבלת עוגיות מאתר זה.",
"session_fail_preview_html": "מצטערים! לא ניתן לבצע את עריכתם עקב אובדן מידע הכניסה.\n\n<em>כיוון שב{{grammar:תחילית|{{SITENAME}}}} אפשרות השימוש ב־HTML גולמי מופעלת, התצוגה המקדימה מוסתרת כדי למנוע התקפות JavaScript.</em>\n\n<strong>אם זהו ניסיון עריכה לגיטימי, אנא נסו שוב.</strong>\nאם זה עדיין לא עובד, נסו [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס אליו שנית, וודאו שהדפדפן שלכם מאפשר קבלת עוגיות מאתר זה.",
- "token_suffix_mismatch": "'''עריכתך נדחתה כיוון שהדפדפן שלך מחק את תווי הפיסוק באסימון העריכה.'''\nהעריכה נדחתה כדי למנוע בעיות כאלה בטקסט של הדף.\nלעתים התקלה מתרחשת עקב שימוש בשירות פרוקסי אנונימי פגום.",
+ "token_suffix_mismatch": "<strong>עריכתך נדחתה כיוון שהדפדפן שלך מחק את תווי הפיסוק באסימון העריכה.</strong>\nהעריכה נדחתה כדי למנוע בעיות כאלה בטקסט של הדף.\nלעתים התקלה מתרחשת עקב שימוש בשירות פרוקסי אנונימי פגום.",
"edit_form_incomplete": "<strong>חלקים מסוימים מטופס העריכה לא הגיעו לשרת; אנא {{GENDER:|בדוק|בדקי|בדקו}} שהעריכה לא נפגעה ו{{GENDER:|נסה|נסי|נסו}} שוב.</strong>",
"editing": "עריכת הדף \"$1\"",
"creating": "יצירת הדף \"$1\"",
"yourdiff": "Diferi",
"copyrightwarning": "Voluntez memorar ke omna kontributi a {{SITENAME}} esas sub la $2 (Videz $1 por detali).\nSe vu ne deziras ke altri modifikez vua artikli od oli distributesez libere, lore voluntez ne skribar oli hike.<br />\nPublikigante vua skribajo hike, vu asertas ke olu skribesis da vu ipsa o kopiesis de libera fonto.\n'''NE SENDEZ ARTIKLI KUN ''COPYRIGHT'' SEN PERMISO!'''",
"protectedpagewarning": "<strong>Averto: Ica pagino esas protektita por ke nur uzeri kun administero-yuri povas redaktar ol.</strong>\nLa maxim recenta en-registrago provizesas:",
+ "semiprotectedpagewarning": "<strong>Noto:</strong> Ica pagino protektesis, do nur enrejistrita uzeri povos modifikar ol.\nLa lasta modifiko en lua stando ('log') montresas adinfre, quale refero:",
"templatesused": "{{PLURAL:$1|Shablono|Shabloni}} uzata en ica pagino:",
"templatesusedpreview": "{{PLURAL:$1|Shablono|Shabloni}} uzata en ica prevido:",
"templatesusedsection": "{{PLURAL:$1|Shablono|Shabloni}} uzata en ica seciono:",
"permissionserrorstext-withaction": "Vu ne darfas $2, pro la {{PLURAL:$1|kauzo|kauzi}} sequanta:",
"recreate-moveddeleted-warn": "<strong>Atencez: Vu rikreos pagino qua antee efacesis.</strong>\n\nVu mustas konsiderar se esos konvenanta o ne riskribor ol.\nPor vua konoco, la motivo dil antea efaco montresas hike:",
"moveddeleted-notice": "Ica pagino efacesis.\nL'efaco-registraro e la movo-registraro di la pagino povas videsar sequante, por konsulto.",
+ "log-fulllog": "Videz kompleta protokolo ('log')",
"edit-conflict": "Konflikto di editi.",
"postedit-confirmation-created": "La pagino kreesis.",
"postedit-confirmation-saved": "Vua redakto konservesis",
"activeusers-intro": "Yen listo pri uzeri qui laboris en la Wiki dum la lasta $1 {{PLURAL:$1|dio|dii}}.",
"activeusers-from": "Montrez uzeri komencante de:",
"activeusers-noresult": "Nula uzero trovesis.",
+ "listgrouprights": "Permisi dil grupo di uzeri",
"listgrouprights-group": "Grupo",
"listgrouprights-members": "(listo di membri)",
"mailnologin": "Ne sendar adreso",
"logentry-patrol-patrol-auto": "$1 automatale {{GENDER:$2|indikis}} ke la revizo $4 de la pagino $3 surveyesas",
"logentry-newusers-create": "La konto dil uzero $1 kreesis.",
"logentry-newusers-autocreate": "L'uzanto $1 {{GENDER:$2|kreesis}} automatale",
+ "logentry-protect-modify": "$1 {{GENDER:$2|modifikis}} la nivelo di protekto por $3 $4",
+ "logentry-protect-modify-cascade": "$1 {{GENDER:$2|modifikis}} la nivelo di protekto di $3 $4 [kaskade]",
"logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|parsendis}} nova versiono di $3",
"rightsnone": "(nula)",
"apisandbox-dynamic-error-exists": "Un parametro denominato \"$1\" esiste già.",
"apisandbox-deprecated-parameters": "Parametri sconsigliati",
"apisandbox-fetch-token": "Auto-compila il token",
+ "apisandbox-add-multi": "Aggiungi",
"apisandbox-submit-invalid-fields-title": "Alcuni campi non sono validi",
"apisandbox-submit-invalid-fields-message": "Correggi i campi evidenziati e riprova.",
"apisandbox-results": "Risultati",
"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",
+ "apisandbox-add-multi": "Derbäisetzen",
"apisandbox-submit-invalid-fields-title": "E puer Felder sinn net valabel.",
"apisandbox-submit-invalid-fields-message": "Verbessert w.e.g. déi markéiert Felder a probéiert nach eng Kéier.",
"apisandbox-results": "Resultater",
"apisandbox-dynamic-error-exists": "Er bestaat al een parameter met de naam \"$1\".",
"apisandbox-deprecated-parameters": "Verouderde parameters",
"apisandbox-fetch-token": "Het token automatisch invullen",
+ "apisandbox-add-multi": "Toevoegen",
"apisandbox-submit-invalid-fields-title": "Sommige velden zijn ongeldig",
"apisandbox-submit-invalid-fields-message": "Corrigeer de gemarkeerde velden en probeer het opnieuw.",
"apisandbox-results": "Resultaten",
"title-invalid-talk-namespace": "O título de página solicitado refere-se a uma página de discussão que não pode existir.",
"title-invalid-characters": "O título de página solicitado contém carateres inválidos: \"$1\".",
"title-invalid-relative": "O título contém um caminho relativo. Os títulos relativos (./, ../) são inválidos porque normalmente são inacessíveis quando tratados pelo navegador do utilizador.",
- "title-invalid-magic-tilde": "O título de página solicitado contém uma sequência de tis inválida (<nowiki>~~~</nowiki>).",
+ "title-invalid-magic-tilde": "O título de página solicitado contém uma sequência de tiles inválida (<nowiki>~~~</nowiki>).",
"title-invalid-too-long": "O título de página solicitado é demasiado longo. Não pode exceder $1 {{PLURAL:$1|byte|bytes}} em codificação UTF-8.",
"title-invalid-leading-colon": "O título de página solicitado contém um sinal de dois pontos (:) inválido no início.",
"perfcached": "Os seguintes dados encontram-se armazenados na cache e podem não estar atualizados. {{PLURAL:$1|Está disponível na cache um máximo de um resultado|Estão disponíveis na cache um máximo de $1 resultados}}.",
"apisandbox-dynamic-error-exists": "Um parâmetro com o nome \"$1\" já existe.",
"apisandbox-deprecated-parameters": "Parâmetros obsoletos",
"apisandbox-fetch-token": "Auto-preencher o token",
+ "apisandbox-add-multi": "Adicionar",
"apisandbox-submit-invalid-fields-title": "Alguns campos são inválidos",
"apisandbox-submit-invalid-fields-message": "Por favor, corrija os campos marcados e tente novamente.",
"apisandbox-results": "Resultados",
"viewhelppage": "Погледај страницу помоћи",
"categorypage": "Погледај страницу категорије",
"viewtalkpage": "Погледај разговор",
- "otherlanguages": "Ð\94Ñ\80Ñ\83ги Ñ\98езиÑ\86и",
+ "otherlanguages": "Ð\9dа дÑ\80Ñ\83гим Ñ\98езиÑ\86има",
"redirectedfrom": "(преусмерено са $1)",
"redirectpagesub": "Преусмерење",
"redirectto": "Преусмерава на:",
"apisandbox-dynamic-error-exists": "已存在名为“$1”的参数。",
"apisandbox-deprecated-parameters": "弃用参数",
"apisandbox-fetch-token": "自动填充令牌",
+ "apisandbox-add-multi": "添加",
"apisandbox-submit-invalid-fields-title": "一些字段无效",
"apisandbox-submit-invalid-fields-message": "请改正标记的字段并重试。",
"apisandbox-results": "结果",
$this->addOption(
'memory-limit',
'Set a specific memory limit for the script, '
- . '"max" for no limit or "default" to avoid changing it'
+ . '"max" for no limit or "default" to avoid changing it',
+ false,
+ true
);
$this->addOption( 'server', "The protocol and server name to use in URLs, e.g. " .
"http://en.wikipedia.org. This is sometimes necessary because " .
);
$last = null;
- $autopatrolls = [];
+ $autopatrols = [];
foreach ( $result as $row ) {
$last = $row->log_id;
Wikimedia\suppressWarnings();
$auto = $params['6::auto'];
if ( $auto ) {
- $autopatrolls[] = $row->log_id;
+ $autopatrols[] = $row->log_id;
}
}
return null;
}
- return [ 'rows' => $autopatrolls, 'lastId' => $last ];
+ return [ 'rows' => $autopatrols, 'lastId' => $last ];
}
private function deleteRows( array $rows ) {
var $textbox = $( document.getElementById( $( this ).attr( 'rel' ) ) );
// FIXME: Ugh, this is ugly
if ( $( this ).val() === 'other' ) {
- $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' );
+ $textbox.prop( 'readonly', false ).closest( '.config-block' ).slideDown( 'fast' );
} else {
$textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' );
}
'TestUserRegistry' => "$testDir/phpunit/includes/TestUserRegistry.php",
'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php",
'MediaWikiCoversValidator' => "$testDir/phpunit/MediaWikiCoversValidator.php",
+ 'PHPUnit4And6Compat' => "$testDir/phpunit/PHPUnit4And6Compat.php",
# tests/phpunit/includes
'RevisionDbTestBase' => "$testDir/phpunit/includes/RevisionDbTestBase.php",
'ParserTestTopLevelSuite' => "$testDir/phpunit/suites/ParserTestTopLevelSuite.php",
];
// phpcs:enable
+
+/**
+ * Alias any PHPUnit 4 era PHPUnit_... class
+ * to it's PHPUnit 6 replacement. For most classes
+ * this is a direct _ -> \ replacement, but for
+ * some others we might need to maintain a manual
+ * mapping. Once we drop support for PHPUnit 4 this
+ * should be considered deprecated and eventually removed.
+ */
+spl_autoload_register( function ( $class ) {
+ if ( strpos( $class, 'PHPUnit_' ) !== 0 ) {
+ // Skip if it doesn't start with the old prefix
+ return;
+ }
+
+ // Classes that don't map 100%
+ $map = [
+ 'PHPUnit_Framework_TestSuite_DataProvider' => 'PHPUnit\Framework\DataProviderTestSuite'
+ ];
+
+ if ( isset( $map[$class] ) ) {
+ $newForm = $map[$class];
+ } else {
+ $newForm = str_replace( '_', '\\', $class );
+ }
+
+ if ( class_exists( $newForm ) ) {
+ // If the new class name exists, alias
+ // the old name to it.
+ class_alias( $newForm, $class );
+ }
+} );
abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
+ use PHPUnit4And6Compat;
/**
* The service locator created by prepareServices(). This service locator will
}
}
- /**
- * @since 1.18
- *
- * @param string $func
- * @param array $args
- *
- * @return mixed
- * @throws MWException
- */
- public function __call( $func, $args ) {
- static $compatibility = [
- 'createMock' => 'createMock2',
- ];
-
- if ( isset( $compatibility[$func] ) ) {
- return call_user_func_array( [ $this, $compatibility[$func] ], $args );
- } else {
- throw new MWException( "Called non-existent $func method on " . static::class );
- }
- }
-
- /**
- * Return a test double for the specified class.
- *
- * @param string $originalClassName
- * @return PHPUnit_Framework_MockObject_MockObject
- * @throws Exception
- */
- private function createMock2( $originalClassName ) {
- return $this->getMockBuilder( $originalClassName )
- ->disableOriginalConstructor()
- ->disableOriginalClone()
- ->disableArgumentCloning()
- // New in phpunit-mock-objects 3.2 (phpunit 5.4.0)
- // ->disallowMockingUnknownTypes()
- ->getMock();
- }
-
private static function unprefixTable( &$tableName, $ind, $prefix ) {
$tableName = substr( $tableName, strlen( $prefix ) );
}
--- /dev/null
+<?php
+/**
+ * Copyright (C) 2018 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * 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.
+ *
+ */
+
+/**
+ * @since 1.31
+ */
+trait PHPUnit4And6Compat {
+ /**
+ * @see PHPUnit_Framework_TestCase::setExpectedException
+ *
+ * This function was renamed to expectException() in PHPUnit 6, so this
+ * is a temporary backwards-compatibility layer while we transition.
+ */
+ public function setExpectedException( $name, $message = '', $code = null ) {
+ if ( is_callable( [ $this, 'expectException' ] ) ) {
+ $this->expectException( $name );
+ if ( $message !== '' ) {
+ $this->expectExceptionMessage( $message );
+ }
+ if ( $code !== null ) {
+ $this->expectExceptionCode( $code );
+ }
+ } else {
+ parent::setExpectedException( $name, $message, $code );
+ }
+ }
+
+ /**
+ * @see PHPUnit_Framework_TestCase::getMock
+ *
+ * @return PHPUnit_Framework_MockObject_MockObject
+ */
+ public function getMock( $originalClassName, $methods = [], array $arguments = [],
+ $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true,
+ $callAutoload = true, $cloneArguments = false, $callOriginalMethods = false,
+ $proxyTarget = null
+ ) {
+ if ( is_callable( 'parent::getMock' ) ) {
+ return parent::getMock(
+ $originalClassName, $methods, $arguments, $mockClassName,
+ $callOriginalConstructor, $callOriginalClone, $callAutoload,
+ $cloneArguments, $callOriginalMethods, $proxyTarget
+ );
+ } else {
+ $builder = $this->getMockBuilder( $originalClassName )
+ ->setMethods( $methods )
+ ->setConstructorArgs( $arguments )
+ ->setMockClassName( $mockClassName )
+ ->setProxyTarget( $proxyTarget );
+ if ( $callOriginalConstructor ) {
+ $builder->enableOriginalConstructor();
+ } else {
+ $builder->disableOriginalConstructor();
+ }
+ if ( $callOriginalClone ) {
+ $builder->enableOriginalClone();
+ } else {
+ $builder->disableOriginalClone();
+ }
+ if ( $callAutoload ) {
+ $builder->enableAutoload();
+ } else {
+ $builder->disableAutoload();
+ }
+ if ( $cloneArguments ) {
+ $builder->enableArgumentCloning();
+ } else {
+ $builder->disableArgumentCloning();
+ }
+ if ( $callOriginalMethods ) {
+ $builder->enableProxyingToOriginalMethods();
+ } else {
+ $builder->disableProxyingToOriginalMethods();
+ }
+
+ return $builder->getMock();
+ }
+ }
+
+ /**
+ * Return a test double for the specified class. This
+ * is a forward port of the createMock function that
+ * was introduced in PHPUnit 5.4.
+ *
+ * @param string $originalClassName
+ * @return PHPUnit_Framework_MockObject_MockObject
+ * @throws Exception
+ */
+ public function createMock( $originalClassName ) {
+ if ( is_callable( 'parent::createMock' ) ) {
+ return parent::createMock( $originalClassName );
+ }
+ // Compat for PHPUnit <= 5.4
+ return $this->getMockBuilder( $originalClassName )
+ ->disableOriginalConstructor()
+ ->disableOriginalClone()
+ ->disableArgumentCloning()
+ // New in phpunit-mock-objects 3.2 (phpunit 5.4.0)
+ // ->disallowMockingUnknownTypes()
+ ->getMock();
+ }
+}
$this->assertFalse( MWNamespace::isMovable( NS_SPECIAL ) );
}
+ private function assertIsSubject( $ns ) {
+ $this->assertTrue( MWNamespace::isSubject( $ns ) );
+ }
+
+ private function assertIsNotSubject( $ns ) {
+ $this->assertFalse( MWNamespace::isSubject( $ns ) );
+ }
+
/**
* Please make sure to change testIsTalk() if you change the assertions below
* @covers MWNamespace::isSubject
$this->assertIsNotSubject( 101 ); # user defined
}
+ private function assertIsTalk( $ns ) {
+ $this->assertTrue( MWNamespace::isTalk( $ns ) );
+ }
+
+ private function assertIsNotTalk( $ns ) {
+ $this->assertFalse( MWNamespace::isTalk( $ns ) );
+ }
+
/**
* Reverse of testIsSubject().
* Please update testIsSubject() if you change assertions below
$this->assertSame( $actual, $expected, "NS $index" );
}
+ private function assertIsContent( $ns ) {
+ $this->assertTrue( MWNamespace::isContent( $ns ) );
+ }
+
+ private function assertIsNotContent( $ns ) {
+ $this->assertFalse( MWNamespace::isContent( $ns ) );
+ }
+
/**
* @covers MWNamespace::isContent
*/
$this->assertIsContent( NS_MAIN );
}
+ private function assertIsWatchable( $ns ) {
+ $this->assertTrue( MWNamespace::isWatchable( $ns ) );
+ }
+
+ private function assertIsNotWatchable( $ns ) {
+ $this->assertFalse( MWNamespace::isWatchable( $ns ) );
+ }
+
/**
* @covers MWNamespace::isWatchable
*/
$this->assertIsWatchable( 101 );
}
+ private function assertHasSubpages( $ns ) {
+ $this->assertTrue( MWNamespace::hasSubpages( $ns ) );
+ }
+
+ private function assertHasNotSubpages( $ns ) {
+ $this->assertFalse( MWNamespace::hasSubpages( $ns ) );
+ }
+
/**
* @covers MWNamespace::hasSubpages
*/
"Subject namespaces should not have NS_SPECIAL" );
}
+ private function assertIsCapitalized( $ns ) {
+ $this->assertTrue( MWNamespace::isCapitalized( $ns ) );
+ }
+
+ private function assertIsNotCapitalized( $ns ) {
+ $this->assertFalse( MWNamespace::isCapitalized( $ns ) );
+ }
+
/**
* Some namespaces are always capitalized per code definition
* in MWNamespace::$alwaysCapitalizedNamespaces
$this->assertFalse( MWNamespace::isNonincludable( NS_TEMPLATE ) );
}
- # ###### HELPERS ###########################################################
- function __call( $method, $args ) {
- // Call the real method if it exists
- if ( method_exists( $this, $method ) ) {
- return $this->$method( $args );
- }
-
- if ( preg_match(
- '/^assert(Has|Is|Can)(Not|)(Subject|Talk|Watchable|Content|Subpages|Capitalized)$/',
- $method,
- $m
- ) ) {
- # Interprets arguments:
- $ns = $args[0];
- $msg = isset( $args[1] ) ? $args[1] : " dummy message";
-
- # Forge the namespace constant name:
- if ( $ns === 0 ) {
- $ns_name = "NS_MAIN";
- } else {
- $ns_name = "NS_" . strtoupper( MWNamespace::getCanonicalName( $ns ) );
- }
- # ... and the MWNamespace method name
- $nsMethod = strtolower( $m[1] ) . $m[3];
-
- $expect = ( $m[2] === '' );
- $expect_name = $expect ? 'TRUE' : 'FALSE';
-
- return $this->assertEquals( $expect,
- MWNamespace::$nsMethod( $ns, $msg ),
- "MWNamespace::$nsMethod( $ns_name ) should returns $expect_name"
- );
- }
-
- throw new Exception( __METHOD__ . " could not find a method named $method\n" );
- }
-
- function assertSameSubject( $ns1, $ns2, $msg = '' ) {
- $this->assertTrue( MWNamespace::subjectEquals( $ns1, $ns2, $msg ) );
+ private function assertSameSubject( $ns1, $ns2, $msg = '' ) {
+ $this->assertTrue( MWNamespace::subjectEquals( $ns1, $ns2 ), $msg );
}
- function assertDifferentSubject( $ns1, $ns2, $msg = '' ) {
- $this->assertFalse( MWNamespace::subjectEquals( $ns1, $ns2, $msg ) );
+ private function assertDifferentSubject( $ns1, $ns2, $msg = '' ) {
+ $this->assertFalse( MWNamespace::subjectEquals( $ns1, $ns2 ), $msg );
}
}
'<editsection> should survive tidy'
],
[ '<mw:toc>foo</mw:toc>', '<mw:toc>foo</mw:toc>', '<mw:toc> should survive tidy' ],
- [ "<link foo=\"bar\" />foo", '<link foo="bar"/>foo', '<link> should survive tidy' ],
- [ "<meta foo=\"bar\" />foo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ],
+ [ "<link foo=\"bar\" />\nfoo", '<link foo="bar"/>foo', '<link> should survive tidy' ],
+ [ "<meta foo=\"bar\" />\nfoo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ],
[ $testMathML, $testMathML, '<math> should survive tidy' ],
];
}
use Page;
use User;
use XMLReader;
+use MWException;
/**
* Base TestCase for dumps