Gabriel Wicke <gwicke@wikimedia.org> <gwicke@users.mediawiki.org>
Gabriel Wicke <gwicke@wikimedia.org> <wicke@wikidev.net>
Geoffrey Mon <geofbot@gmail.com>
+Geoffrey Trang <geoffreytrang@gmail.com>
Gergő Tisza <gtisza@wikimedia.org>
Gergő Tisza <gtisza@wikimedia.org> <tgr.huwiki@gmail.com>
Giftpflanze <gifti@tools.wmflabs.org>
Matthew Britton <hugglegurch@gmail.com> <gurch@users.mediawiki.org>
Matthew Flaschen <mflaschen@wikimedia.org>
Matthew Walker <mwalker@wikimedia.org>
+MatthiasDD <Matthias_K2@gmx.de>
Matthias Mullie <git@mullie.eu>
Matthias Mullie <git@mullie.eu> <mmullie@wikimedia.org>
Matěj Grabovský <mgrabovsky@yahoo.com> <mgrabovsky@users.mediawiki.org>
physikerwelt (Moritz Schubotz) <wiki@physikerwelt.de>
PiRSquared17 <pirsquared@tools.wmflabs.org>
Platonides <platonides@gmail.com> <platonides@users.mediawiki.org>
+pppery <mapreader@olum.org>
PranavK <pranavmk98@gmail.com>
Prateek Saxena <psaxena@wikimedia.org>
Prateek Saxena <psaxena@wikimedia.org> <prtksxna@gmail.com>
Victor Vasiliev <vasilvv@mit.edu> <vasilvv@gmail.com>
Vikas S Yaligar <vikasyaligar.it@gmail.com>
Vivek Ghaisas <v.a.ghaisas@gmail.com>
+Volker E <volker.e@wikimedia.org>
wctaiwan <wctaiwan@gmail.com>
withoutaname <drevitchi@gmail.com>
X! <soxred93@gmail.com> <soxred93@users.mediawiki.org>
{{int:version-credits-summary}} <!--
-MediaWiki 1.29 is a collaborative project released under the
+MediaWiki 1.31 is a collaborative project released under the
GNU General Public License v2. We would like to recognize the
following names for their contribution to the product.
* Alex Z.
* Alexander I. Mashin
* Alexander Lehmann
+* Alexander Mashin
* Alexander Monk
* Alexander Sigachov
* Alexandre Emsenhuber
* Angela Beesley Starling
* ankur
* Antoine Musso
+* Antoni Siek
* Antonio Ospite
* apexkid
* April King
* Cindy Cicalese
* ckoerner
* Conrad Irwin
+* Cormac Parle
* cryptocoryne
* Dan Barrett
* Dan Collins
* Darkdragon09
* DaSch
* datguy
+* David Barratt
* David Baumgarten
* David Causse
* David Chan
* David Lynch
* David McCabe
* David Mudrák
+* David Sn
+* Dayllan Maza
* dcausse
* dennisroczek
* Denny Vrandecic
* Derk-Jan Hartman
* Derric Atzrott
* Derrick Coetzee
+* Deskana
* Dévai Tamás
* Devi Krishnan
* Diederik van Liere
* divadsn
+* Dmaza
* Domas Mituzas
* Douglas Gardner
* DPStokesNZ
* Eddie Greiner-Petter
* Edward Chernenko
* Edward Z. Yang
+* Egbe Eugene
* Elisabeth Bauer
* Elliott Eggleston
* Elvis Stansvik
* Emufarmers
* enigmaeth
* Entlinkt
+* Envel Le Hir
* Eranroz
* Eric Evans
* Eric Schneider
* ExplosiveHippo
* Faidon Liambotis
* Federico Leva
+* Felipe L. Ewald
* Fenzik Joseph
+* Filippo Giunchedi
* firebus
* Florian Schmidt
* fomafix
+* Framawiki
* Fran Rogers
* Fred Emmott
* FunPika
* Gary Guo
* gbt248
* Geoffrey Mon
+* GeoffreyT2000
* georggi
* Gergő Tisza
* Gero Scholz
* Giuseppe Lavagetto
* gladoscc
* glaisher
+* golopot
* Greg Maxwell
* Greg Sabino Mullane
* Gregory Szorc
* Helder
* Henning Snater
* Hojjat
+* Hoto Cocoa
* Huji
* Hydriz
* Ian Baker
+* Ian Marlier
* Ilmari Karonen
* Inez Korczyński
* IoannisKydonis
* jarry1250
* Jaska Zedlik
* Jason Richey
+* Jayprakash12345
* jeblad
* Jeff Hobson
* Jeff Janes
* Jerome Jamnicky
* Jesús Martínez Novo
* jhobs
+* jhsoby
* Jiabao
* Jidanni
* Jimmy Collins
* John N
* Jon Harald Søby
* Jon Robson
+* Jonathan
* Jonathan Wiltshire
* Jools Wills
* jsahleen
* Julian Ostrow
* Juliano F. Ravasi
+* Julien Girault
* Juliusz Gonera
* Jure Kajzer
* Justin Du
* Kartik Mistry
* Karun Dambiec
* Katie Filbert
+* KeerthanaS
* Kevin Israel
* Kghbln
* Kim Eik
* madurangasiriwardena
* Magnus Manske
* mainframe98
+* Mako Bates
* Manuel Menal
* Manuel Schneider
* Marc Ordinas i Llopis
* Marco Schuster
* MarcoAurelio
* Marcus Buck
+* Margaret Epps
* Marius Hoch
* Mark Bergsma
* Mark Clements
* Max Semenik
* Max Sikström
* mayankmadan
+* Mehmet Mert Yıldıran
* Meno25
* merl
* Merlijn S. van Deen
* nullspoon
* Nuria Ruiz
* Nx.devnull
+* Obaid Raza
* Ocean behind ears
* Od1n
* Olaf Lenz
* Pavel Selitskas
* Pcoombe
* Perside Rosalie
+* petarpetkovic
* Peter Coombe
* Peter Gehres
* Peter Hedenskog
* physikerwelt (Moritz Schubotz)
* PieRRoMaN
* Pikne
+* Piotr Miazga
* PiRSquared17
* Platonides
* Pmlineditor
* rahul21
* Raimond Spekking
* Ramunas Geciauskas
+* RazeSoldier
* Remember the dot
* René Kijewski
* Reza
* Ryan Kaldari
* Ryan Lane
* Ryan Schmidt
+* ryan10145
* S Page
* Salvatore Ingala
* Sam Reed
* Sébastien Santoro
* Sergio Santoro
* Sethakill
+* Sfic
* Shahyar
* Shane Gibbons
* Shane King
* shirayuki
* Sidhant Gupta
* Siebrand Mazeland
+* Simeon Dahl
* Simon Walker
* Smriti Singh
* Solitarius
* Subin Siby
* Subramanya Sastry
* Sumit Asthana
+* Suriyaa Kudo
* svip
* Szymon Świerkosz
* T.D. Corell
* UltrasonicNXT
* Umherirrender
* utkarsh95
+* Valerio Bozzolan
* Van de Bugger
* Viačeslav
* Victor Barbu
* Victor Porton
* Victor Vasiliev
* Ville Stadista
+* vinithegit
* vishnu
* Vitaliy Filippov
* Vivek Ghaisas
* Zhaofeng Li
* Zhengzhu Feng
* Zhuyifei1999
+* zoranzoki21
* Zppix
* محمد شعیب
<!-- END CONTRIBUTOR LIST -->
the ParserOutput::getText() post-cache transformations.
* Added a hook, UploadForm:getInitialPageText, to allow extensions to alter the
initial page text for file uploads.
-* (T181651) The info page for File pages now displays the file's base-36 SHA1
+* (T181651) The info page for File pages now displays the file's base-16 SHA1
hash value in the table of basic information.
=== External library changes in 1.31 ===
* The driver 'mysql' for MySQL, deprecated in MediaWiki 1.30, has been removed.
The driver has been deprecated since PHP 5.5 and was removed in PHP 7.0. The
default driver for MySQL has been 'mysqli' since MediaWiki 1.22.
+* The following properties of PreparedEdit were deprecated in 1.21 and have been removed:
+ * PreparedEdit->newText
+ * PreparedEdit->oldText
+ * PreparedEdit->pst
== Compatibility ==
MediaWiki 1.31 requires PHP 5.5.9 or later. Although HHVM 3.18.5 or later is supported,
'BenchmarkLruHash' => __DIR__ . '/maintenance/benchmarks/benchmarkLruHash.php',
'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php',
'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php',
+ 'BenchmarkSanitizer' => __DIR__ . '/maintenance/benchmarks/benchmarkSanitizer.php',
'BenchmarkTidy' => __DIR__ . '/maintenance/benchmarks/benchmarkTidy.php',
'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php',
'BitmapHandler' => __DIR__ . '/includes/media/Bitmap.php',
* because articles can be created such that they are hard to view or edit.
*
* In some rare cases you may wish to remove + for compatibility with old links.
- *
- * Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but
- * this breaks interlanguage links
*/
$wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+";
// being set. This is used by ConfirmEdit to display a captcha
// without any error message cruft.
} else {
- $this->hookError = $status->getWikiText();
+ $this->hookError = $this->formatStatusErrors( $status );
}
// Use the existing $status->value if the hook set it
if ( !$status->value ) {
} elseif ( !$status->isOK() ) {
# ...or the hook could be expecting us to produce an error
// FIXME this sucks, we should just use the Status object throughout
- $this->hookError = $status->getWikiText();
+ $this->hookError = $this->formatStatusErrors( $status );
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR_EXPECTED;
return false;
return true;
}
+ /**
+ * Wrap status errors in an errorbox for increased visiblity
+ *
+ * @param Status $status
+ * @return string Wikitext
+ */
+ private function formatStatusErrors( Status $status ) {
+ $errmsg = $status->getWikiText(
+ 'edit-error-short',
+ 'edit-error-long',
+ $this->context->getLanguage()
+ );
+ return <<<ERROR
+<div class="errorbox">
+{$errmsg}
+</div>
+<br clear="all" />
+ERROR;
+ }
+
/**
* Return the summary to be used for a new section.
*
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionStore;
use Wikimedia\Rdbms\LBFactory;
use LinkCache;
return $this->getService( 'RevisionStore' );
}
+ /**
+ * @since 1.31
+ * @return RevisionLookup
+ */
+ public function getRevisionLookup() {
+ return $this->getService( 'RevisionLookup' );
+ }
+
+ /**
+ * @since 1.31
+ * @return RevisionFactory
+ */
+ public function getRevisionFactory() {
+ return $this->getService( 'RevisionFactory' );
+ }
+
/**
* @since 1.31
* @return PreferencesFactory
<?php
/**
- *
- *
- * Created on Dec 29, 2015
- *
* Copyright © 2015 Geoffrey Mon <geofbot@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
use MediaWiki\Storage\MutableRevisionRecord;
use MediaWiki\Storage\RevisionAccessException;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionRecord;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\RevisionStoreRecord;
return MediaWikiServices::getInstance()->getRevisionStore();
}
+ /**
+ * @return RevisionLookup
+ */
+ protected static function getRevisionLookup() {
+ return MediaWikiServices::getInstance()->getRevisionLookup();
+ }
+
+ /**
+ * @return RevisionFactory
+ */
+ protected static function getRevisionFactory() {
+ return MediaWikiServices::getInstance()->getRevisionFactory();
+ }
+
/**
* @param bool|string $wiki The ID of the target wiki database. Use false for the local wiki.
*
* @return Revision|null
*/
public static function newFromId( $id, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionById( $id, $flags );
+ $rec = self::getRevisionLookup()->getRevisionById( $id, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
* @return Revision|null
*/
public static function newFromTitle( LinkTarget $linkTarget, $id = 0, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionByTitle( $linkTarget, $id, $flags );
+ $rec = self::getRevisionLookup()->getRevisionByTitle( $linkTarget, $id, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
* @return Revision|null
*/
public static function newFromPageId( $pageId, $revId = 0, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionByPageId( $pageId, $revId, $flags );
+ $rec = self::getRevisionLookup()->getRevisionByPageId( $pageId, $revId, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
}
}
- $rec = self::getRevisionStore()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
+ $rec = self::getRevisionFactory()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
return new Revision( $rec, self::READ_NORMAL, $title );
}
*/
public static function newFromRow( $row ) {
if ( is_array( $row ) ) {
- $rec = self::getRevisionStore()->newMutableRevisionFromArray( $row );
+ $rec = self::getRevisionFactory()->newMutableRevisionFromArray( $row );
} else {
- $rec = self::getRevisionStore()->newRevisionFromRow( $row );
+ $rec = self::getRevisionFactory()->newRevisionFromRow( $row );
}
return new Revision( $rec );
$row['user'] = $wgUser;
}
- $this->mRecord = self::getRevisionStore()->newMutableRevisionFromArray(
+ $this->mRecord = self::getRevisionFactory()->newMutableRevisionFromArray(
$row,
$queryFlags,
$this->ensureTitle( $row, $queryFlags, $title )
);
} elseif ( is_object( $row ) ) {
- $this->mRecord = self::getRevisionStore()->newRevisionFromRow(
+ $this->mRecord = self::getRevisionFactory()->newRevisionFromRow(
$row,
$queryFlags,
$this->ensureTitle( $row, $queryFlags, $title )
*/
public function getPrevious() {
$title = $this->getTitle();
- $rec = self::getRevisionStore()->getPreviousRevision( $this->mRecord, $title );
+ $rec = self::getRevisionLookup()->getPreviousRevision( $this->mRecord, $title );
return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title );
}
*/
public function getNext() {
$title = $this->getTitle();
- $rec = self::getRevisionStore()->getNextRevision( $this->mRecord, $title );
+ $rec = self::getRevisionLookup()->getNextRevision( $this->mRecord, $title );
return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title );
}
return false;
}
- $record = self::getRevisionStore()->getKnownCurrentRevision( $title, $revId );
+ $record = self::getRevisionLookup()->getKnownCurrentRevision( $title, $revId );
return $record ? new Revision( $record ) : false;
}
}
return $store;
},
+ 'RevisionLookup' => function ( MediaWikiServices $services ) {
+ return $services->getRevisionStore();
+ },
+
+ 'RevisionFactory' => function ( MediaWikiServices $services ) {
+ return $services->getRevisionStore();
+ },
+
'BlobStoreFactory' => function ( MediaWikiServices $services ) {
global $wgContLang;
return new BlobStoreFactory(
if ( $title->inNamespace( NS_FILE ) ) {
$fileObj = wfFindFile( $title );
if ( $fileObj !== false ) {
- $output = $fileObj->getSha1();
+ // Convert the base-36 sha1 value obtained from database to base-16
+ $output = Wikimedia\base_convert( $fileObj->getSha1(), 36, 16, 40 );
$pageInfo['header-basic'][] = [
$this->msg( 'pageinfo-file-hash' ),
$output
<?php
/**
- *
- *
- * Created on Sep 5, 2006
- *
* Copyright © 2006, 2010 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
protected function parseMultiValue( $valueName, $value, $allowMultiple, $allowedValues,
$allSpecifier = null, $limit1 = null, $limit2 = null
) {
- if ( ( trim( $value ) === '' || trim( $value ) === "\x1f" ) && $allowMultiple ) {
+ if ( ( $value === '' || $value === "\x1f" ) && $allowMultiple ) {
return [];
}
$limit1 = $limit1 ?: self::LIMIT_SML1;
<?php
/**
- *
- *
- * Created on Sep 4, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Jan 29, 2015
- *
* Copyright © 2015 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on August 26, 2014
- *
* Copyright © 2014 Petr Bena (benapetr@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Jun 30, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 25, 2008
- *
* Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on August 16, 2007
- *
* Copyright © 2007 Iker Labarga "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on June 1, 2008
- *
* Copyright © 2008 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 05, 2007
- *
* Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on June 06, 2011
- *
* Copyright © 2011 Sam Reed
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 13, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on March 5, 2011
- *
* Copyright © 2011 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 19, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 19, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 19, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 22, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 22, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Feb 2, 2009
- *
* Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 19, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Aug 29, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Dec 22, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- * Created on January 3rd, 2013
- *
* 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
<?php
/**
- *
- *
- * Created on Sep 19, 2006
- *
* Copyright © 2006-2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
* Daniel Cannon (cannon dot danielc at gmail dot com)
*
<?php
/**
- *
- *
- * Created on Jan 4, 2008
- *
* Copyright © 2008 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Sep 4, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Dec 29, 2015
- *
* Copyright © 2015 Geoffrey Mon <geofbot@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Dec 27, 2012
- *
* Copyright © 2012 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 31, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Apr 15, 2012
- *
* Copyright © 2012 Szymon Świerkosz beau@adres.pl
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 24, 2006
- *
* Copyright © 2006, 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Dec 01, 2007
- *
* Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Dec 01, 2007
- *
* Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
/**
* API for MediaWiki 1.14+
*
- * Created on Sep 2, 2008
- *
* Copyright © 2008 Soxred93 soxred93@gmail.com,
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 1, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 7, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on December 12, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Oct 3, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* Heavily based on ApiQueryDeletedrevs,
/**
* API for MediaWiki 1.12+
*
- * Created on Mar 16, 2008
- *
* Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
* based on ApiQueryAllPages.php
*
<?php
/**
- *
- *
- * Created on July 7, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Dec 1, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 25, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Sep 27, 2015
- *
* Copyright © 2015 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on July 7, 2007
- *
* Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 16, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
/**
* API module to handle links table back-queries
*
- * Created on Aug 19, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 7, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 10, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on May 13, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on May 13, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on June 14, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
/**
* Query the list of contributors to a page
*
- * Created on Nov 14, 2013
- *
* Copyright © 2013 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Oct 3, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* Heavily based on ApiQueryDeletedrevs,
<?php
/**
- *
- *
- * Created on Jul 2, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 25, 2008
- *
* Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 27, 2008
- *
* Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on July 7, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on May 13, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
/**
* API for MediaWiki 1.12+
*
- * Created on May 10, 2010
- *
* Copyright © 2010 Sam Reed
* Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
* based on ApiQueryAllPages.php
<?php
/**
- *
- *
- * Created on Sep 7, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
/**
* API for MediaWiki 1.17+
*
- * Created on May 14, 2010
- *
* Copyright © 2010 Sam Reed
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
/**
* API for MediaWiki 1.17+
*
- * Created on May 14, 2010
- *
* Copyright © 2010 Sam Reed
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
<?php
/**
- *
- *
- * Created on July 6, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on May 13, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 25, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
/**
* API for MediaWiki 1.17+
*
- * Created on May 14, 2011
- *
* Copyright © 2011 Sam Reed
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
<?php
/**
- *
- *
- * Created on May 13, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on May 12, 2007
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 16, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on January 21, 2013
- *
* Copyright © 2013 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Aug 7, 2010
- *
* Copyright © 2010 soxred93, Bryan Tong Minh
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on December 31, 2012
- *
* Copyright © 2012 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Feb 13, 2009
- *
* Copyright © 2009 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Dec 22, 2010
- *
* Copyright © 2010 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Monday, January 28, 2008
- *
* Copyright © 2008 Brent Garber
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 19, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 7, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 3, 2014 as a split from ApiQueryRevisions
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on July 30, 2007
- *
* Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 25, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Jul 9, 2009
- *
* Copyright © 2009
*
* This program is free software; you can redistribute it and/or modify
/**
* Module to fetch tokens via action=query&meta=tokens
*
- * Created on August 8, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 16, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on July 30, 2007
- *
* Copyright © 2007 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on July 30, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 25, 2006
- *
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Oct 4, 2008
- *
* Copyright © 2008 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Jun 25, 2013
- *
* Copyright © 2013 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Jun 20, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Feb 25, 2015
- *
* Copyright © 2015 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
/**
* API for MediaWiki 1.14+
*
- * Created on Jun 18, 2012
- *
* Copyright © 2012 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on January 1, 2017
- *
* Copyright © 2017 Justin Du "<justin.d128@gmail.com>"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Jul 29, 2011
- *
* Copyright © 2011 John Du Hart john@johnduhart.me
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Sep 7, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Jul 3, 2007
- *
* Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Aug 21, 2008
- *
* Copyright © 2008 - 2010 Bryan Tong Minh <Bryan.TongMinh@Gmail.com>
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- *
- *
- * Created on Jan 4, 2008
- *
* Copyright © 2008 Yuri Astrakhan "<Firstname><Lastname>@gmail.com",
*
* This program is free software; you can redistribute it and/or modify
"apihelp-opensearch-param-suggest": "کاری نکنید اگر <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> false است.",
"apihelp-opensearch-param-format": "فرمت خروجی.",
"apihelp-opensearch-example-te": "یافتن صفحههایی که با <kbd>Te</kbd> آغاز میشوند",
+ "apihelp-options-summary": "تغییر ترجیحات کاربر جاری",
"apihelp-options-param-reset": "ترجیحات را به مقادیر پیش فرض سایت بازمی گرداند.",
"apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
"apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشتهها",
}
/**
- * Set the IContextSource object
- *
* @since 1.18
* @param IContextSource $context
*/
}
/**
- * Get the Config object
- *
* @since 1.23
* @return Config
*/
}
/**
- * Get the WebRequest object
- *
* @since 1.18
* @return WebRequest
*/
}
/**
- * Get the Title object
- *
* @since 1.18
* @return Title|null
*/
}
/**
- * Get the OutputPage object
- *
* @since 1.18
* @return OutputPage
*/
}
/**
- * Get the User object
- *
* @since 1.18
* @return User
*/
}
/**
- * Get the Language object
- *
* @since 1.19
* @return Language
*/
}
/**
- * Get the Skin object
- *
* @since 1.18
* @return Skin
*/
}
/**
- * Get the Timing object
- *
* @since 1.27
* @return Timing
*/
}
/**
- * Get the Stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @since 1.25
}
/**
- * Set the SiteConfiguration object
- *
- * @param Config $s
+ * @param Config $config
*/
- public function setConfig( Config $s ) {
- $this->config = $s;
+ public function setConfig( Config $config ) {
+ $this->config = $config;
}
/**
- * Get the Config object
- *
* @return Config
*/
public function getConfig() {
}
/**
- * Get the stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @return IBufferingStatsdDataFactory
}
/**
- * Get the timing object
- *
* @return Timing
*/
public function getTiming() {
}
/**
- * Set the WebRequest object
- *
- * @param WebRequest $r
+ * @param WebRequest $request
*/
- public function setRequest( WebRequest $r ) {
- $this->request = $r;
+ public function setRequest( WebRequest $request ) {
+ $this->request = $request;
}
/**
- * Get the WebRequest object
- *
* @return WebRequest
*/
public function getRequest() {
}
/**
- * Set the Title object
- *
- * @param Title $t
+ * @param Title $title
*/
- public function setTitle( Title $t ) {
- $this->title = $t;
+ public function setTitle( Title $title ) {
+ $this->title = $title;
}
/**
- * Get the Title object
- *
* @return Title|null
*/
public function getTitle() {
}
/**
- * Set the WikiPage object
- *
* @since 1.19
- * @param WikiPage $p
+ * @param WikiPage $wikiPage
*/
- public function setWikiPage( WikiPage $p ) {
- $this->wikipage = $p;
+ public function setWikiPage( WikiPage $wikiPage ) {
+ $this->wikipage = $wikiPage;
}
/**
}
/**
- * Set the OutputPage object
- *
- * @param OutputPage $o
+ * @param OutputPage $output
*/
- public function setOutput( OutputPage $o ) {
- $this->output = $o;
+ public function setOutput( OutputPage $output ) {
+ $this->output = $output;
}
/**
- * Get the OutputPage object
- *
* @return OutputPage
*/
public function getOutput() {
}
/**
- * Set the User object
- *
- * @param User $u
+ * @param User $user
*/
- public function setUser( User $u ) {
- $this->user = $u;
+ public function setUser( User $user ) {
+ $this->user = $user;
}
/**
- * Get the User object
- *
* @return User
*/
public function getUser() {
}
/**
- * Set the Language object
- *
- * @param Language|string $l Language instance or language code
+ * @param Language|string $language Language instance or language code
* @throws MWException
* @since 1.19
*/
- public function setLanguage( $l ) {
- if ( $l instanceof Language ) {
- $this->lang = $l;
- } elseif ( is_string( $l ) ) {
- $l = RequestContext::sanitizeLangCode( $l );
- $obj = Language::factory( $l );
+ public function setLanguage( $language ) {
+ if ( $language instanceof Language ) {
+ $this->lang = $language;
+ } elseif ( is_string( $language ) ) {
+ $language = RequestContext::sanitizeLangCode( $language );
+ $obj = Language::factory( $language );
$this->lang = $obj;
} else {
throw new MWException( __METHOD__ . " was passed an invalid type of data." );
}
/**
- * Get the Language object
- *
* @return Language
* @since 1.19
*/
}
/**
- * Set the Skin object
- *
- * @param Skin $s
+ * @param Skin $skin
*/
- public function setSkin( Skin $s ) {
- $this->skin = clone $s;
+ public function setSkin( Skin $skin ) {
+ $this->skin = clone $skin;
$this->skin->setContext( $this );
}
/**
- * Get the Skin object
- *
* @return Skin
*/
public function getSkin() {
* shutdown by separate persistence handler objects, for example.
*/
interface IContextSource extends MessageLocalizer {
+
/**
- * Get the WebRequest object
- *
* @return WebRequest
*/
public function getRequest();
/**
- * Get the Title object
- *
* @return Title|null
*/
public function getTitle();
public function getWikiPage();
/**
- * Get the OutputPage object
- *
* @return OutputPage
*/
public function getOutput();
/**
- * Get the User object
- *
* @return User
*/
public function getUser();
/**
- * Get the Language object
- *
* @return Language
* @since 1.19
*/
public function getLanguage();
/**
- * Get the Skin object
- *
* @return Skin
*/
public function getSkin();
public function getConfig();
/**
- * Get the stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @since 1.25
public function getStats();
/**
- * Get the timing object
- *
* @since 1.27
* @return Timing
*/
*/
interface MutableContext {
+
/**
- * Set the Config object
- *
* @param Config $config
*/
public function setConfig( Config $config );
/**
- * Set the WebRequest object
- *
- * @param WebRequest $r
+ * @param WebRequest $request
*/
- public function setRequest( WebRequest $r );
+ public function setRequest( WebRequest $request );
/**
- * Set the Title object
- *
- * @param Title $t
+ * @param Title $title
*/
- public function setTitle( Title $t );
+ public function setTitle( Title $title );
/**
- * Set the WikiPage object
- *
- * @param WikiPage $p
+ * @param WikiPage $wikiPage
*/
- public function setWikiPage( WikiPage $p );
+ public function setWikiPage( WikiPage $wikiPage );
/**
- * Set the OutputPage object
- *
- * @param OutputPage $o
+ * @param OutputPage $output
*/
- public function setOutput( OutputPage $o );
+ public function setOutput( OutputPage $output );
/**
- * Set the User object
- *
- * @param User $u
+ * @param User $user
*/
- public function setUser( User $u );
+ public function setUser( User $user );
/**
- * Set the Language object
- *
- * @param Language|string $l Language instance or language code
+ * @param Language|string $language Language instance or language code
*/
- public function setLanguage( $l );
+ public function setLanguage( $language );
/**
- * Set the Skin object
- *
- * @param Skin $s
+ * @param Skin $skin
*/
- public function setSkin( Skin $s );
+ public function setSkin( Skin $skin );
}
}
/**
- * Set the WebRequest object
- *
- * @param WebRequest $r
+ * @param WebRequest $request
*/
- public function setRequest( WebRequest $r ) {
- $this->request = $r;
+ public function setRequest( WebRequest $request ) {
+ $this->request = $request;
}
/**
- * Get the WebRequest object
- *
* @return WebRequest
*/
public function getRequest() {
}
/**
- * Get the Stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @return IBufferingStatsdDataFactory
}
/**
- * Get the timing object
- *
* @return Timing
*/
public function getTiming() {
}
/**
- * Set the Title object
- *
* @param Title|null $title
*/
public function setTitle( Title $title = null ) {
}
/**
- * Get the Title object
- *
* @return Title|null
*/
public function getTitle() {
}
/**
- * Set the WikiPage object
- *
* @since 1.19
- * @param WikiPage $p
+ * @param WikiPage $wikiPage
*/
- public function setWikiPage( WikiPage $p ) {
- $pageTitle = $p->getTitle();
+ public function setWikiPage( WikiPage $wikiPage ) {
+ $pageTitle = $wikiPage->getTitle();
if ( !$this->hasTitle() || !$pageTitle->equals( $this->getTitle() ) ) {
$this->setTitle( $pageTitle );
}
// Defer this to the end since setTitle sets it to null.
- $this->wikipage = $p;
+ $this->wikipage = $wikiPage;
}
/**
}
/**
- * @param OutputPage $o
+ * @param OutputPage $output
*/
- public function setOutput( OutputPage $o ) {
- $this->output = $o;
+ public function setOutput( OutputPage $output ) {
+ $this->output = $output;
}
/**
- * Get the OutputPage object
- *
* @return OutputPage
*/
public function getOutput() {
}
/**
- * Set the User object
- *
- * @param User $u
+ * @param User $user
*/
- public function setUser( User $u ) {
- $this->user = $u;
+ public function setUser( User $user ) {
+ $this->user = $user;
}
/**
- * Get the User object
- *
* @return User
*/
public function getUser() {
}
/**
- * Set the Language object
- *
- * @param Language|string $l Language instance or language code
+ * @param Language|string $language Language instance or language code
* @throws MWException
* @since 1.19
*/
- public function setLanguage( $l ) {
- if ( $l instanceof Language ) {
- $this->lang = $l;
- } elseif ( is_string( $l ) ) {
- $l = self::sanitizeLangCode( $l );
- $obj = Language::factory( $l );
+ public function setLanguage( $language ) {
+ if ( $language instanceof Language ) {
+ $this->lang = $language;
+ } elseif ( is_string( $language ) ) {
+ $language = self::sanitizeLangCode( $language );
+ $obj = Language::factory( $language );
$this->lang = $obj;
} else {
throw new MWException( __METHOD__ . " was passed an invalid type of data." );
}
/**
- * Set the Skin object
- *
- * @param Skin $s
+ * @param Skin $skin
*/
- public function setSkin( Skin $s ) {
- $this->skin = clone $s;
+ public function setSkin( Skin $skin ) {
+ $this->skin = clone $skin;
$this->skin->setContext( $this );
}
/**
- * Get the Skin object
- *
* @return Skin
*/
public function getSkin() {
*/
public $oldContent;
- /**
- * $newContent in text form
- *
- * @var string
- * @deprecated since 1.21
- */
- public $newText;
-
- /**
- * $oldContent in text from
- *
- * @var string
- * @deprecated since 1.21
- */
- public $oldText;
-
- /**
- * $pstContent in text form
- *
- * @var string
- * @deprecated since 1.21
- */
- public $pst;
}
/**
* Set how wide each image will be, in pixels.
*
- * @param int $num Integer > 0; invalid numbers will be ignored
+ * @param string $num Number. Unit other than 'px is invalid. Invalid numbers
+ * and those below 0 are ignored.
*/
public function setWidths( $num ) {
- if ( $num > 0 ) {
- $this->mWidths = (int)$num;
+ $parsed = Parser::parseWidthParam( $num, false );
+ if ( isset( $parsed['width'] ) && $parsed['width'] > 0 ) {
+ $this->mWidths = $parsed['width'];
}
}
/**
* Set how high each image will be, in pixels.
*
- * @param int $num Integer > 0; invalid numbers will be ignored
+ * @param string $num Number. Unit other than 'px is invalid. Invalid numbers
+ * and those below 0 are ignored.
*/
public function setHeights( $num ) {
- if ( $num > 0 ) {
- $this->mHeights = (int)$num;
+ $parsed = Parser::parseWidthParam( $num, false );
+ if ( isset( $parsed['width'] ) && $parsed['width'] > 0 ) {
+ $this->mHeights = $parsed['width'];
}
}
"config-license-cc-0": "''Creative Commons'' „Zero“ (Gemeinfreiheit)",
"config-license-gfdl": "GNU-Lizenz für freie Dokumentation 1.3 oder höher",
"config-license-pd": "Gemeinfreiheit",
- "config-license-cc-choose": "Eine benutzerdefinierte Creative-Commons-Lizenz auswählen",
+ "config-license-cc-choose": "Eine andere Creative-Commons-Lizenz auswählen",
"config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz.]\nDies trägt dazu bei, ein Gefühl von Gemeinschaft zu schaffen, und ermutigt zu längerfristiger Mitarbeit.\nHingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig.\n\nSofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die Lizenz {{int:config-license-cc-by-sa}} gewählt werden.\n\nDie Wikipedia nutzte vormals die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist eine gültige Lizenz, die allerdings schwer zu verstehen ist.\nEs ist zudem schwierig, gemäß dieser Lizenz lizenzierte Inhalte wiederzuverwenden.",
"config-email-settings": "E-Mail-Einstellungen",
"config-enable-email": "Ausgehende E-Mails ermöglichen",
"config-install-mainpage-failed": "قادر به درج صفحهٔ اصلی نمیباشد:$1",
"config-install-done": "'''تبریک!'''\nبا موفقیت مدیاویکی را نصب کردید.\nبرنامه نصبکننده پرونده <code>LocalSettings.php</code> را درست کرد.\nکه شامل تمام تنظیمات میباشد.\n\nشما نیاز به دریافت آن دارید و آن را در پایهٔ نصب ویکی قرار دهید (همان پوشهٔ index.php). دریافت باید به صورت خودکار شروع شدهباشد.\n\nاگر دریافت شروع نشد یا اگر آن را لغو کردید با کلیک روی پیوند زیر میتوانید آن را دریافت کنید:\n\n$3\n\n'''توجه داشته باشید:''' اگر این را الآن انجام ندهید، این پرونده تولیدشده در صورتی که نصب را بدون دریافت آن تمام کردید بعداً در اختیار شما قرار نخواهد گرفت.\n\nوقتی انجام شد شما میتوانید '''[$2 وارد ویکی شوید]'''.",
"config-install-done-path": "<strong>تبریک!</strong>\nمدیاویکی با موفقیت نصب گردید.\nبرنامه نصبکننده یک پرونده <code>LocalSettings.php</code> ایجاد کرده است که شامل تمام تنظیمات میباشد.\n\nلازم است شما آن را دریافت کرده و در <code>$4</code> قرار دهید. اِن دریافت می باِست به صورت خودکار شروع شدهباشد.\n\nاگر دریافت شروع نشده بود و یا آن را لغو کرده اید با کلیک روی پیوند زیر میتوانید آن را دریافت کنید:\n\n$3\n\n<strong>توجه:</strong> اگر این کار را هم اکنون انجام ندهید و بدون دریافت آن از برنامه نصب خارج شويد، این پرونده تنظیمات تولیدشده در آینده در اختیار شما قرار نخواهد داشت.\n\nوقتی که آن کار را انجام داديد، میتوانید <strong>[$2 وارد ويکی خودتان شويد]</strong>.",
+ "config-install-success": "مدیاویکی به صورت موفقیتآمیز نصب شد. شما میتوانید\nاز <$1$2> برای دیدن ویکیتان بازدید کنید.\nاگر پرسشی داشتید، فهرست سوالهای متداول ما را مطالعه کنید:\n<https://www.mediawiki.org/wiki/Manual:FAQ> یا از یکی از انجمنهای پشیبانی ما که در آن صفحه فهرست شدهاند استفاده کنید.",
"config-download-localsettings": "دریافت <code>LocalSettings.php</code>",
"config-help": "راهنما",
"config-help-tooltip": "برای گسترش کلیک کنید",
},
"config-desc": "Инсталација за Медијавики",
"config-title": "Инсталација Медијавикија $1",
- "config-information": "Информације",
+ "config-information": "Информација",
+ "config-localsettings-key": "Кључ за уградњу:",
"config-session-error": "Грешка при започињању сесије: $1",
"config-session-expired": "Ваши подаци о сесији су истекли.\nСесије су подешене да трају $1.\nЊихов рок можете повећати постављањем <code>session.gc_maxlifetime</code> у php.ini.\nПоново покрените инсталацију.",
"config-no-session": "Ваши подаци о сесији су изгубљени!\nПроверите Ваш php.ini и обезбедите да је <code>session.save_path</code> постављен на одговарајући директоријум.",
"config-back": "← Назад",
"config-continue": "Настави →",
"config-page-language": "Језик",
- "config-page-welcome": "Ð\94обÑ\80о доÑ\88ли на Ð\9cедиÑ\98аÐ\92ики!",
+ "config-page-welcome": "Ð\94обÑ\80о доÑ\88ли на Ð\9cедиÑ\98авики!",
"config-page-dbconnect": "Повезивање са базом података",
"config-page-upgrade": "Надоградња постојеће инсталације",
"config-page-dbsettings": "Подешавања базе података",
"config-page-name": "Назив",
- "config-page-options": "Поставке",
+ "config-page-options": "Подешавања",
"config-page-install": "Инсталирај",
"config-page-complete": "Завршено!",
"config-page-restart": "Поновно покретање инсталације",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] је инсталиран",
"config-db-type": "Тип базе података:",
"config-db-host": "Хост базе података",
+ "config-db-wiki-settings": "Идентификуј овај вики",
"config-db-name": "Назив базе података:",
- "config-db-password": "Лозинка за базу података:",
+ "config-db-name-oracle": "Шема базе података:",
+ "config-db-username": "Корисничко име базе података:",
+ "config-db-password": "Лозинка базе података:",
+ "config-db-port": "Порт базе података:",
+ "config-db-schema": "Шема за Медијавики:",
"config-type-mysql": "MySQL (или компактибилан)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-mysql-myisam": "MyISAM",
"config-mysql-utf8": "UTF-8",
"config-mssql-auth": "Тип провере идентитета:",
- "config-mssql-sqlauth": "Провера идентитета за SQL Server",
- "config-mssql-windowsauth": "Провера идентитета Windows-а",
+ "config-mssql-sqlauth": "Провера идентитета SQL Server-а",
+ "config-mssql-windowsauth": "Провера идентитета Виндоуса",
"config-site-name": "Име викија:",
- "config-admin-name": "Ð\9aорисничко име:",
+ "config-admin-name": "Ð\92аÑ\88е корисничко име:",
"config-admin-password": "Лозинка:",
"config-admin-email": "Имејл адреса:",
- "config-optional-skip": "Ð\94оÑ\81адно ми Ñ\98е, Ñ\85аÑ\98де да инÑ\81Ñ\82алиÑ\80амо вики.",
+ "config-optional-skip": "Ð\94оÑ\81адно ми Ñ\98е, Ñ\81амо инÑ\81Ñ\82алиÑ\80аÑ\98 вики.",
"config-profile-no-anon": "Неопходно је отворити налог",
"config-profile-fishbowl": "Само овлашћени корисници",
"config-profile-private": "Приватна вики",
"config-skins": "Теме",
"config-install-step-done": "готово",
"config-install-step-failed": "није успело",
+ "config-install-extensions": "Обухвата екстензије",
+ "config-install-schema": "Прављење шеме",
+ "config-install-tables": "Прављење табела",
+ "config-install-keys": "Генеришем тајне кључеве",
"config-install-mainpage-exists": "Главна страна већ постоји, прескакање",
+ "config-install-mainpage-failed": "Не могу да убацим главну страну: „$1”",
"config-download-localsettings": "Преузми <code>LocalSettings.php</code>",
"config-help": "помоћ",
"config-help-tooltip": "кликните да проширите",
+ "config-nofile": "Не могу да пронађем датотеку „$1”. Није ли она била избрисана?",
"config-skins-screenshots": "„$1” (снимци екрана: $2)",
"config-screenshot": "снимак екрана",
"mainpagetext": "<strong>Медијавики је успешно инсталиран.</strong>",
foreach ( $this->inclusive as $func => $stats ) {
foreach ( $stats as $name => $value ) {
if ( $value instanceof RunningStat ) {
- $total = $value->m1 * $value->n;
+ $total = $value->getMean() * $value->getCount();
$percent = ( isset( $main[$name] ) && $main[$name] )
? 100 * $total / $main[$name]
: 0;
$this->inclusive[$func][$name] = [
'total' => $total,
'min' => $value->min,
- 'mean' => $value->m1,
+ 'mean' => $value->getMean(),
'max' => $value->max,
'variance' => $value->m2,
'percent' => $percent,
* @since 1.18
*/
final public static function factory( $dbType, $p = [] ) {
- static $canonicalDBTypes = [
- 'mysql' => [ 'mysqli' ],
- 'postgres' => [],
- 'sqlite' => [],
- 'oracle' => [],
- 'mssql' => [],
- ];
- static $classAliases = [
- 'DatabaseMssql' => DatabaseMssql::class,
- 'DatabaseMysqli' => DatabaseMysqli::class,
- 'DatabaseSqlite' => DatabaseSqlite::class,
- 'DatabasePostgres' => DatabasePostgres::class
+ // For database types with built-in support, the below maps type to IDatabase
+ // implementations. For types with multipe driver implementations (PHP extensions),
+ // an array can be used, keyed by extension name. In case of an array, the
+ // optional 'driver' parameter can be used to force a specific driver. Otherwise,
+ // we auto-detect the first available driver. For types without built-in support,
+ // an class named "Database<Type>" us used, eg. DatabaseFoo for type 'foo'.
+ static $builtinTypes = [
+ 'mssql' => DatabaseMssql::class,
+ 'mysql' => [ 'mysqli' => DatabaseMysqli::class ],
+ 'sqlite' => DatabaseSqlite::class,
+ 'postgres' => DatabasePostgres::class,
];
- $driver = false;
$dbType = strtolower( $dbType );
- if ( isset( $canonicalDBTypes[$dbType] ) && $canonicalDBTypes[$dbType] ) {
- $possibleDrivers = $canonicalDBTypes[$dbType];
- if ( !empty( $p['driver'] ) ) {
- if ( in_array( $p['driver'], $possibleDrivers ) ) {
- $driver = $p['driver'];
- } else {
- throw new InvalidArgumentException( __METHOD__ .
- " type '$dbType' does not support driver '{$p['driver']}'" );
- }
+ $class = false;
+ if ( isset( $builtinTypes[$dbType] ) ) {
+ $possibleDrivers = $builtinTypes[$dbType];
+ if ( is_string( $possibleDrivers ) ) {
+ $class = $possibleDrivers;
} else {
- foreach ( $possibleDrivers as $posDriver ) {
- if ( extension_loaded( $posDriver ) ) {
- $driver = $posDriver;
- break;
+ if ( !empty( $p['driver'] ) ) {
+ if ( !isset( $possibleDrivers[$p['driver']] ) ) {
+ throw new InvalidArgumentException( __METHOD__ .
+ " type '$dbType' does not support driver '{$p['driver']}'" );
+ } else {
+ $class = $possibleDrivers[$p['driver']];
+ }
+ } else {
+ foreach ( $possibleDrivers as $posDriver => $possibleClass ) {
+ if ( extension_loaded( $posDriver ) ) {
+ $class = $possibleClass;
+ break;
+ }
}
}
}
} else {
- $driver = $dbType;
+ $class = 'Database' . ucfirst( $dbType );
}
- if ( $driver === false || $driver === '' ) {
+ if ( $class === false ) {
throw new InvalidArgumentException( __METHOD__ .
" no viable database extension found for type '$dbType'" );
}
- $class = 'Database' . ucfirst( $driver );
- if ( isset( $classAliases[$class] ) ) {
- $class = $classAliases[$class];
- }
-
if ( class_exists( $class ) && is_subclass_of( $class, IDatabase::class ) ) {
// Resolve some defaults for b/c
$p['host'] = isset( $p['host'] ) ? $p['host'] : false;
$edit->newContent = $content;
$edit->oldContent = $this->getContent( Revision::RAW );
- // NOTE: B/C for hooks! don't use these fields!
- $edit->newText = $edit->newContent
- ? ContentHandler::getContentText( $edit->newContent )
- : '';
- $edit->oldText = $edit->oldContent
- ? ContentHandler::getContentText( $edit->oldContent )
- : '';
- $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialFormat ) : '';
-
if ( $edit->output ) {
$edit->output->setCacheTime( wfTimestampNow() );
}
if ( $argA == 'nowiki' ) {
// {{filepath: | option [| size] }}
$isNowiki = true;
- $parsedWidthParam = $parser->parseWidthParam( $argB );
+ $parsedWidthParam = Parser::parseWidthParam( $argB );
} else {
// {{filepath: [| size [|option]] }}
- $parsedWidthParam = $parser->parseWidthParam( $argA );
+ $parsedWidthParam = Parser::parseWidthParam( $argA );
$isNowiki = ( $argB == 'nowiki' );
}
# Special case; width and height come in one variable together
if ( $type === 'handler' && $paramName === 'width' ) {
- $parsedWidthParam = $this->parseWidthParam( $value );
+ $parsedWidthParam = self::parseWidthParam( $value );
if ( isset( $parsedWidthParam['width'] ) ) {
$width = $parsedWidthParam['width'];
if ( $handler->validateParam( 'width', $width ) ) {
* Parsed a width param of imagelink like 300px or 200x300px
*
* @param string $value
+ * @param bool $parseHeight
*
* @return array
* @since 1.20
*/
- public function parseWidthParam( $value ) {
+ public static function parseWidthParam( $value, $parseHeight = true ) {
$parsedWidthParam = [];
if ( $value === '' ) {
return $parsedWidthParam;
$m = [];
# (T15500) In both cases (width/height and width only),
# permit trailing "px" for backward compatibility.
- if ( preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
+ if ( $parseHeight && preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
$width = intval( $m[1] );
$height = intval( $m[2] );
$parsedWidthParam['width'] = $width;
* the usual skin elements but still using CSS, JS, and such via OutputPage and
* ResourceLoader.
*
- * Created on Sep 08, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
* the usual skin elements but still using CSS, JS, and such via OutputPage and
* ResourceLoader.
*
- * Created on Sep 08, 2014
- *
* Copyright © 2014 Wikimedia Foundation and contributors
*
* This program is free software; you can redistribute it and/or modify
public function getFinalGroupName() {
$name = $this->getName();
- // Allow overbidding the group from the wiki side
+ // Allow overriding the group from the wiki side
$msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
if ( !$msg->isBlank() ) {
$group = $msg->text();
* Date input widget.
*
* @since 1.29
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license MIT
*/
class DateInputWidget extends \OOUI\TextInputWidget {
/**
* Date-time input widget.
*
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license MIT
*/
class DateTimeInputWidget extends \OOUI\InputWidget {
/**
* Select and input widget.
*
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @copyright 2011-2017 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license MIT
*/
class SelectWithInputWidget extends \OOUI\Widget {
/**
* Widget to select multiple users.
*
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license MIT
*/
class UsersMultiselectWidget extends \OOUI\Widget {
"specialpage-securitylevel-not-allowed-title": "Nie toegestaan",
"cannotauth-not-allowed-title": "Geen toegang",
"cannotauth-not-allowed": "U word nie toegelaat om die bladsy te gebruik nie",
- "credentialsform-account": "Gebruikersnaam:"
+ "credentialsform-account": "Gebruikersnaam:",
+ "edit-error-short": "Fout: $1",
+ "edit-error-long": "Foute:\n\n$1"
}
"doubleredirects": "تحويلات مزدوجة",
"doubleredirectstext": "هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.\nكل سطر يحتوي على وصلات للتحويلة الأولى والثانية وهدف التحويلة الثانية، والذي عادة ما يشير إلى صفحة الهدف \"الحقيقية\"، التي من المفترض أن تحول إليها التحويلة الأولى.\nالمدخلات <del>المشطوبة</del> صححت.",
"double-redirect-fixed-move": "نُقلت [[$1]].\nحُدّثت تلقائيا وهي الآن تحويلة إلى [[$2]].",
- "double-redirect-fixed-maintenance": "تصحيح تلقائي لتحويلة مزدوجة من [[$1]] إلى [[$2]] في مهمة صيانة.",
+ "double-redirect-fixed-maintenance": "تصحيح تلقائي لتحويلة مزدوجة من [[$1]] إلى [[$2]] في مهمة صيانة",
"double-redirect-fixer": "مصلح التحويل",
"brokenredirects": "تحويلات مكسورة",
"brokenredirectstext": "التحويلات التالية تصل لصفحات غير موجودة:",
"restrictionsfield-badip": "عنوان أيبي أو نطاق غير صحيح: $1",
"restrictionsfield-label": "نطاقات الأيبي المسموح بها:",
"restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم:\n<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "خطأ: $1",
+ "edit-error-long": "الأخطاء:\n\n$1",
"revid": "المراجعة $1",
"pageid": "معرف الصفحة $1",
"rawhtml-notallowed": "لا يمكن استخدام وسوم <html> خارج الصفحات العادية.",
"restrictionsfield-badip": "Direición o rangu IP inválidu: $1",
"restrictionsfield-label": "Rangos d'IP permitíos:",
"restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Error: $1",
+ "edit-error-long": "Errores:\n\n$1",
"revid": "revisión $1",
"pageid": "ID de páxina $1",
"rawhtml-notallowed": "Les etiquetes <html> nun pueden usase fuera de les páxines normales.",
"changecredentials-submit": "Иҫәп мәғлүмәттәрен үҙгәртеү",
"removecredentials": "Иҫәп мәғлүмәттәрен юйырға",
"removecredentials-submit": "Иҫәп мәғлүмәттәрен юйырға",
- "credentialsform-account": "Иҫәп яҙмаһы исеме:"
+ "credentialsform-account": "Иҫәп яҙмаһы исеме:",
+ "edit-error-short": "Хата: $1"
}
"grouppage-sysop": "{{ns:project}}:Адміністрацыя",
"grouppage-bureaucrat": "{{ns:project}}:Бюракраты",
"grouppage-suppress": "{{ns:project}}:Падаўляльнікі_вэрсіяў",
- "right-read": "прагляд старонак",
- "right-edit": "рэдагаваньне старонак",
- "right-createpage": "стварэньне старонак (акрамя старонак абмеркаваньняў)",
- "right-createtalk": "стварэньне старонак абмеркаваньня",
- "right-createaccount": "стварэньне новых рахункаў удзельніка",
+ "right-read": "Ð\9fрагляд старонак",
+ "right-edit": "Рэдагаваньне старонак",
+ "right-createpage": "Стварэньне старонак (акрамя старонак абмеркаваньняў)",
+ "right-createtalk": "Стварэньне старонак абмеркаваньня",
+ "right-createaccount": "Стварэньне новых рахункаў удзельнікаў",
"right-autocreateaccount": "Аўтаматычны ўваход з вонкавага рахунку ўдзельніка",
"right-minoredit": "пазначэньне рэдагаваньняў як дробныя",
"right-move": "перанос старонак",
"lockmanager-fail-closelock": "Немагчыма закрыць файл блякаваньня для «$1».",
"lockmanager-fail-deletelock": "Немагчыма выдаліць файл блякаваньня для «$1».",
"lockmanager-fail-acquirelock": "Немагчыма здабыць блякаваньне для «$1».",
- "lockmanager-fail-openlock": "Немагчыма адкрыць файл блякаваньня для «$1».",
+ "lockmanager-fail-openlock": "Немагчыма адкрыць файл блякаваньня для «$1». Упэўніцеся, што вашая тэчка для загрузкі наладжаная слушна і што ваш вэб-сэрвэр мае дазвол на запіс у гэтую тэчку. Глядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory для дадатковых зьвестак.",
"lockmanager-fail-releaselock": "Немагчыма зьняць блякаваньне для «$1».",
"lockmanager-fail-db-bucket": "Немагчыма скантактавацца з дастатковай колькасьцю базаў блякавньняў на ўчастку $1.",
"lockmanager-fail-db-release": "Немагчыма зьняць блякаваньні для базы зьвестак $1.",
"restrictionsfield-badip": "Няслушны IP-адрас ці дыяпазон: $1",
"restrictionsfield-label": "Дазволеныя IP-дыяпазоны:",
"restrictionsfield-help": "Адзін IP-адрас ці CIDR-дыяпазон на радок. Каб дазволіць усё, ужывайце:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Памылка: $1",
+ "edit-error-long": "Памылкі:\n\n$1",
"revid": "вэрсія $1",
"pageid": "Ідэнтыфікатар старонкі $1",
"rawhtml-notallowed": "<html>-тэгі ня могуць быць выкарыстаныя па-за звычайнымі старонкамі.",
"linkaccounts-success-text": "Сметката беше свързана.",
"linkaccounts-submit": "Свързване на сметки",
"restrictionsfield-badip": "Невалиден IP-адрес или интервал от адреси: $1",
+ "edit-error-short": "Грешка: $1",
+ "edit-error-long": "Грешки:\n\n$1",
"revid": "версия $1"
}
"tog-shownumberswatching": "धियान रखे वाला प्रयोगकर्ता लोग के संख्या देखावल जाव",
"tog-oldsig": "राउर वर्तमान दसखत:",
"tog-fancysig": "दसखत के विकी पाठ के रुप में उपयोग करीं (बिना ऑटोमेटिक कड़ी के)",
- "tog-uselivepreview": "लà¤\97ातार à¤\9dलà¤\95 (लाà¤\87व पà¥\8dरà¥\80वà¥\8dयà¥\82) à¤\87सà¥\8dतà¥\87माल à¤\95à¤\87ल à¤\9cाव",
+ "tog-uselivepreview": "पनà¥\8dना à¤\95à¥\87 रà¥\80लà¥\8bड à¤\95à¤\87लà¥\87 बिना à¤à¥\80 à¤\9dलà¤\95 दà¥\87à¤\96ावल à¤\9cाय",
"tog-forceeditsummary": "संपादन सारांश ना भरल गइल होखे त हमके सूचित कइल जाय",
"tog-watchlisthideown": "धियानसूची से हमार खुद के संपादन छिपावल जाय",
"tog-watchlisthidebots": "धियानसूची से बॉट संपादन छिपावल जाय",
"anonpreviewwarning": "''रउआँ खाता में प्रवेश नइखीं भइल। सहेजब तब ए पन्ना के संपादन इतिहास में राउर आईपी पता दर्ज हो जाई।\"",
"missingsummary": "'''याद दियावल जात बा:'''रउआँ एगो संपादन सारांश नइखीं दिहले। अगर फिर \"$1\" पर क्लिक करब, त राउर संपादन एकरे बिना सहेजा जाई।",
"selfredirect": "<strong>चेतावनी:</strong> आप ई पन्ना के खुदे एही पर अनुप्रेषण क रहल बानी।\nया त आप अनुप्रेषण खातिर गलत लक्ष्य देत बानी, या आप गलत पन्ना के संपादन करत बानी।\nएक बेर अउरी \"$1\" क्लिक करब त, ओइसहूँ ई अनुप्रेषण बना दिहल जाई।",
- "missingcommenttext": "नà¥\80à¤\9aà¥\87 à¤\8fà¤\97à¥\8b à¤\9fिपà¥\8dपणà¥\80 à¤à¤°à¥\80à¤\82।",
+ "missingcommenttext": "एगो टिप्पणी भरीं।",
"missingcommentheader": "'''याद दियावल जात बा:''' रउआँ एह कमेंट खातिर कौनों बिसय नइखीं दिहले। अगर आप \"$1\" पर क्लिक करब तब राउर संपादन एकरे बिना सहेजा जाई।",
"summary-preview": "संपादन सारांश क झलक:",
"subject-preview": "बिसय के झलक:",
"watching": "ध्यानसूची में जाते हुए",
"unwatching": "ध्यानसूची से हटते हुए",
"enotif_reset": "सगरी पन्ना सभ देखल चिन्हित करीं",
+ "enotif_impersonal_salutation": "{{SITENAME}} प्रयोगकर्ता",
+ "enotif_subject_deleted": "$2 पन्ना $1 के हटा {{GENDER:$2|दिहलें|दिहली}}",
+ "enotif_minoredit": "ई एगो छोट संपादन बा",
"created": "बनावल गईल",
+ "deletepage": "पन्ना हटाईं",
+ "confirm": "कन्फर्म",
+ "excontent": "सामग्री रहल: \"$1\"",
+ "exbeforeblank": "खाली करे से पहिले सामग्री: \"$1\"",
+ "delete-confirm": "$1 के हटाईं",
+ "delete-legend": "हटाईं",
"actioncomplete": "काम पुरा भइल",
"dellogpage": "हटवले के लिस्ट",
"rollbacklink": "रोलबैक",
"rollbacklinkcount": "रोलबैक $1 {{PLURAL:$1|संपादन|संपादन सब}}",
+ "changecontentmodel-title-label": "पन्ना टाइटिल",
+ "changecontentmodel-model-label": "नया बिसयसूची माडल",
+ "changecontentmodel-reason-label": "कारण:",
+ "changecontentmodel-submit": "बदलीं",
+ "logentry-contentmodel-change-revertlink": "वापस लीं",
"protectlogpage": "सुरक्षा लॉग",
"protectlogtext": "नीचे पन्ना सुरक्षा में भइल बदलावकुल के सूची बा।\nहाल में सुरक्षित पन्नन के सूची खातिर [[Special:ProtectedPages|सुरक्षित पन्नन के सूची]] देखीं।",
"protectedarticle": "\"[[$1]]\" सुरक्षित कइल गइल",
"imgmultigo": "जाईं!",
"imgmultigoto": "$1 पन्ना पर जाईं",
"autoredircomment": "पन्ना [[$1]] पर अनुप्रेषित कइल गइल",
+ "autosumm-new": "पन्ना बनावल गइल \"$1\" के साथ",
"watchlisttools-clear": "धियानसूची साफ करीं",
"watchlisttools-view": "प्रासंगिक बदलाव देखीं",
"watchlisttools-edit": "धियानसूची देखीं आ संपादित करीं",
"specialpages-group-wiki": "डेटा अउर औजार",
"tag-filter": "[[Special:Tags|टैग]] छननी:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग|टैग कुल}}]]: $2)",
+ "tag-mw-new-redirect": "नाया अनुप्रेषण",
"tags-active-yes": "हँऽ",
"tags-active-no": "ना",
"tags-hitcount": "$1 {{PLURAL:$1|बदलाव}}",
"subject-preview": "বিষয়ের প্রাকদর্শন:",
"previewerrortext": "আপনার পরিবর্তনগুলি প্রাকদর্শন করার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে।",
"blockedtitle": "ব্যবহারকারীকে বাধা দেয়া হয়েছে",
- "blockedtext": "<strong>আপনার ব্যবহারকারী নাম বা আইপি ঠিকানাটিকে সম্পাদনায় বাধাদান করা হয়েছে।</strong>\n\n$1 এই বাধাটি প্রদান করেছেন। বাধার কারণ হিসেবে বলা হয়েছে:<em>$2</em>।\n\n* বাধা শুরুর সময়:$8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনি $1 অথবা [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] কারও সাথে এই বাধা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি \"(ব্যবহারকারীকে) ইমেইল করুন\" সুবিধাটি ব্যবহার করতে পারবেন না। তবে [[Special:Preferences|আপনার পছন্দ তালিকাতে]] যদি একটি বৈধ ইমেইল ঠিকানা নির্দিষ্ট করা হয়ে থাকে এবং সুবিধাটি ব্যবহারে যদি আপনাকে বাধা না দেওয়া হয়ে থাকে, তবে আপনি সুবিধাটি ব্যবহার করতে পারবেন।\n\nআপনার বর্তমান আইপি ঠিকানা হল $3, এবং আপনার বাধা নং হল #$5।\n\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
- "autoblockedtext": "à¦\86পনার à¦\86à¦\87পি ঠিà¦\95ানাà¦\9fিà¦\95à§\87 সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 সমà§\8dপাদনায় বাধাদান à¦\95রা হয়à§\87à¦\9bà§\87 à¦\95ারণ à¦\8fমন à¦\86রà§\87à¦\95à¦\9cন বà§\8dযবহারà¦\95ারà§\80 à¦\8fà¦\9fি বà§\8dযবহার à¦\95রà§\87à¦\9bà§\87ন, যাà¦\95à§\87 $1 বাধা দিয়à§\87à¦\9bà§\87ন।\nযà§\87 à¦\95ারণà§\87 বাধা দà§\87à¦\93য়া হয়à§\87à¦\9bà§\87 সà§\87à¦\9fি হল:\n\n:<em>$2</em>\n\n* বাধা শà§\81রà§\81র সময়: $8\n* বাধা শà§\87ষà§\87র সময়: $6\n* যাà¦\95à§\87 বাধাদান à¦\95রা হয়à§\87à¦\9bà§\87: $7\n\nà¦\86পনি $1-à¦\8fর সাথà§\87 à¦\95িà¦\82বা à¦\85নà§\8dয যà§\87à¦\95à§\8bন [[{{MediaWiki:Grouppage-sysop}}|পà§\8dরশাসà¦\95à§\87র]] সাথà§\87 যà§\8bà¦\97াযà§\8bà¦\97 à¦\95রà§\87 à¦\8fà¦\87 বাধা সà¦\82à¦\95à§\8dরানà§\8dত বিষয়à§\87 à¦\86লà§\8bà¦\9aনা à¦\95রতà§\87 পারà§\87ন।\n\nলà¦\95à§\8dষà§\8dয à¦\95রà§\81ন, যদি à¦\86পনি \"à¦\8fà¦\87 বà§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦\87-মà§\87à¦\87ল à¦\95রà§\81ন\" সà§\81বিধাà¦\9fি বà§\8dযবহার à¦\95রতà§\87 à¦\9aান, তবà§\87 [[Special:Preferences|à¦\86পনার পà¦\9bনà§\8dদ তালিà¦\95াতà§\87]] যদি à¦\8fà¦\95à¦\9fি বà§\88ধ à¦\87মà§\87à¦\87ল ঠিà¦\95ানা নিরà§\8dদিষà§\8dà¦\9f থাà¦\95তà§\87 হবà§\87 à¦\8fবà¦\82 à¦\86পনার সà§\87à¦\9fি বà§\8dযবহারà§\87 à¦\95à§\8bন বাধা থাà¦\95তà§\87 পারবà§\87 না।\n\nà¦\86পনার বরà§\8dতমান à¦\86à¦\87পি ঠিà¦\95ানা হà¦\9aà§\8dà¦\9bà§\87 $3, à¦\8fবà¦\82 বাধা নà¦\82 হল #$5।\n\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
+ "blockedtext": "<strong>আপনার ব্যবহারকারী নাম বা আইপি ঠিকানাটিকে সম্পাদনায় বাধাদান করা হয়েছে।</strong>\n\n$1 এই বাধাটি প্রদান করেছেন। বাধার কারণ হিসেবে বলা হয়েছে:<em>$2</em>।\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনি $1 অথবা অন্য [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] সাথে এই বাধা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি \"ইমেইল করুন\" বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না যদি না আপনার [[Special:Preferences|অ্যাকাউন্টের পছন্দসমূহে]] একটি বৈধ ইমেইল ঠিকানা নির্দিষ্ট না করা হয়ে থাকে এবং আপনাকে এটি ব্যবহার করা থেকে অবরুদ্ধ না করা হয়ে থাকে।\n\nআপনার বর্তমান আইপি ঠিকানা হল $3, এবং আপনার বাধা নং হল #$5।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
+ "autoblockedtext": "à¦\86পনার à¦\86à¦\87পি ঠিà¦\95ানাà¦\9fিà¦\95à§\87 সà§\8dবয়à¦\82à¦\95à§\8dরিয়à¦à¦¾à¦¬à§\87 সমà§\8dপাদনায় বাধাদান à¦\95রা হয়à§\87à¦\9bà§\87 à¦\95ারণ à¦\8fমন à¦\86রà§\87à¦\95à¦\9cন বà§\8dযবহারà¦\95ারà§\80 à¦\8fà¦\9fি বà§\8dযবহার à¦\95রà§\87à¦\9bà§\87ন, যাà¦\95à§\87 $1 বাধা দিয়à§\87à¦\9bà§\87ন।\nযà§\87 à¦\95ারণà§\87 বাধা দà§\87à¦\93য়া হয়à§\87à¦\9bà§\87 সà§\87à¦\9fি হল:\n\n:<em>$2</em>\n\n* বাধা শà§\81রà§\81র সময়: $8\n* বাধা শà§\87ষà§\87র সময়: $6\n* যাà¦\95à§\87 বাধাদান à¦\95রা হয়à§\87à¦\9bà§\87: $7\n\nà¦\86পনি $1-à¦\8fর সাথà§\87 à¦\95িà¦\82বা à¦\85নà§\8dয যà§\87à¦\95à§\8bন [[{{MediaWiki:Grouppage-sysop}}|পà§\8dরশাসà¦\95à§\87র]] সাথà§\87 যà§\8bà¦\97াযà§\8bà¦\97 à¦\95রà§\87 à¦\8fà¦\87 বাধা সà¦\82à¦\95à§\8dরানà§\8dত বিষয়à§\87 à¦\86লà§\8bà¦\9aনা à¦\95রতà§\87 পারà§\87ন।\n\nলà¦\95à§\8dষà§\8dয à¦\95রà§\81ন, à¦\86পনি \"à¦\8fà¦\87 বà§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦\87-মà§\87à¦\87ল à¦\95রà§\81ন\" বà§\88শিষà§\8dà¦\9fà§\8dযà¦\9fি বà§\8dযবহার à¦\95রতà§\87 পারবà§\87ন না যদি না à¦\86পনার [[Special:Preferences|à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র পà¦\9bনà§\8dদসমà§\82হà§\87]] à¦\8fà¦\95à¦\9fি বà§\88ধ à¦\87মà§\87à¦\87ল ঠিà¦\95ানা নিবনà§\8dধিত না থাà¦\95à§\87 à¦\8fবà¦\82 à¦\86পনাà¦\95à§\87 à¦\8fà¦\9fি বà§\8dযবহার à¦\95রা থà§\87à¦\95à§\87 à¦\85বরà§\81দà§\8dধ না à¦\95রা হয়à§\87 থাà¦\95à§\87।\n\nà¦\86পনার বরà§\8dতমান à¦\86à¦\87পি ঠিà¦\95ানা হà¦\9aà§\8dà¦\9bà§\87 $3, à¦\8fবà¦\82 বাধা নà¦\82 হল #$5।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
"systemblockedtext": "আপনার ব্যবহারকারী নাম অথবা আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে মিডিয়াউইকি দ্বারা বাধাদান করা হয়েছে। যে কারণটি দেওয়া হয়েছে, সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনার বর্তমান আইপি ঠিকানাটি হল $3।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
"blockednoreason": "কোন কারণ দেওয়া হয়নি",
"whitelistedittext": "পাতায় সম্পাদনা করতে অনুগ্রহ করে $1 করুন।",
"blocklist-params": "বাধাদানের প্যারামিটার",
"blocklist-reason": "কারণ",
"ipblocklist-submit": "অনুসন্ধান",
- "ipblocklist-localblock": "সà§\8dথানà§\80য় বà§\8dলà¦\95",
+ "ipblocklist-localblock": "সà§\8dথানà§\80য় বাধা",
"ipblocklist-otherblocks": "অন্যান্য {{PLURAL:$1|বাধাঁ|বাধাঁসমূহ}}",
"infiniteblock": "অসীম",
"expiringblock": "$1 তারিখের $2 এ মেয়াদোত্তীর্ণ হবে",
"ipb_expiry_old": "মেয়াদোত্তীর্ণের সময় অতীত হয়েছে।",
"ipb_expiry_temp": "লুকানো ব্যবহারকারীনাম বাধা চিরস্থায়ী হতে হবে।",
"ipb_hide_invalid": "এই অ্যাকাউন্ট বাধা দেয়া সম্ভব নয়; এটি {{PLURAL:$1|একের অধিক|$1টি}} সম্পাদনা করেছে।",
- "ipb_already_blocked": "\"$1\" à¦\87তিমধà§\8dযà§\87 বà§\8dলà¦\95",
+ "ipb_already_blocked": "\"$1\" à¦\87তিমধà§\8dযà§\87 বাধাপà§\8dরাপà§\8dত।",
"ipb-needreblock": "$1 ইতিমধ্যেই বাধাপ্রাপ্ত আছেন। আপনি কি সেটিংস পরিবর্তন করতে চান?",
"ipb-otherblocks-header": "অন্যান্য {{PLURAL:$1|বাধা|বাধাসমূহ}}",
"unblock-hideuser": "আপনি এই ব্যবহারকারীকে বাধা মুক্ত করতে পারবেন না, কারণ এই ব্যবহারকারীদের ব্যবহারকারী নাম লুকানো রয়েছে।",
"softblockrangesreason": "বেনামী অবদান আপনার আইপি ঠিকানা থেকে অনুমোদিত নয় ($1)। দয়া করে প্রবেশ করুন।",
"xffblockreason": "X-Forwarded-For হেডারে থাকা আইপি ঠিকানাটি ব্লক করা হয়েছে, হয় এটি আপনার নিজের অথবা আপনার ব্যবহৃত প্রক্সি সার্ভারের আইপি ঠিকানা। ব্লক করার কারণ হল: $1",
"cant-see-hidden-user": "আপনি যে ব্যবহারকারীকে ব্লক বা লুকিয়ে রাখতে চাচ্ছেন তাকে আগে থেকেই ব্লক বা লুকিয়ে রাখা হয়েছে। এছাড়া আপনার Hideuser অধিকার নেই, তাই আপনি ব্যবহারকারীর অবস্থা পরিবর্তন করতে পারবেন না।",
- "ipbblocked": "à¦\86পনি à¦\85নà§\8dয à¦\95à§\8bন বà§\8dযবহারà¦\95রà§\80à¦\95à§\87 বà§\8dলà¦\95 বা à¦\86নবà§\8dলà¦\95 à¦\95রতà§\87 পারবà§\87ন না, à¦\95ারণ à¦\86পনি নিà¦\9cà§\87à¦\87 বà§\8dলà¦\95 রয়à§\87à¦\9bà§\87ন",
+ "ipbblocked": "à¦\86পনি à¦\85নà§\8dয à¦\95à§\8bন বà§\8dযবহারà¦\95রà§\80à¦\95à§\87 বাধাদান বা বাধা বাতিল à¦\95রতà§\87 পারবà§\87ন না, à¦\95ারণ à¦\86পনি নিà¦\9cà§\87à¦\87 à¦\85বরà§\81দà§\8dধ রয়à§\87à¦\9bà§\87ন।",
"ipbnounblockself": "আপনি নিজেকে আনব্লক করতে পারবেন না",
"lockdb": "ডাটাবেজ অবরুদ্ধ করা হোক",
"unlockdb": "ডাটাবেজ খুলে দেওয়া হোক",
"restrictionsfield-badip": "আইপি ঠিকানা অথবা পরিসীমা অবৈধ: $1",
"restrictionsfield-label": "অনুমোদিত আইপি পরিসীমা:",
"restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে ব্যবহার করুন: :<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "ত্রুটি: $1",
+ "edit-error-long": "ত্রুটিসমূহ:\n\n$1",
"revid": "সংশোধন $1",
"pageid": "পাতার আইডি $1",
"rawhtml-notallowed": "<html> ট্যাগ স্বাভাবিক পৃষ্ঠাগুলির বাহিরে ব্যবহার করা যাবে না।",
"uncategorizedimages": "Fitxers sense categoria",
"uncategorizedtemplates": "Plantilles sense categoria",
"uncategorized-categories-exceptionlist": " # Conté una llista de categories no no s'haurien de mencionar a Special:UncategorizedCategories. Una per línia, començant amb «*». Les línies que comencin amb un altre caràcter (incloent l'espai en blanc) són ignorades. Utilitzeu «#» per a comentaris.",
- "unusedcategories": "Categories sense cap ús",
+ "unusedcategories": "Categories no utilitzades",
"unusedimages": "Fitxers no utilitzats",
"wantedcategories": "Categories demanades",
"wantedpages": "Pàgines demanades",
"userjsispublic": "Tingueu en compte que les subpàgines de JavaScript no haurien de contenir dades confidencials perquè poden ser visibles per altres usuaris.",
"restrictionsfield-badip": "Adreça o interval d'IP no vàlid: $1",
"restrictionsfield-label": "Intervals d'IP permesos:",
+ "edit-error-short": "Error: $1",
+ "edit-error-long": "Errors:\n\n$1",
"revid": "revisió $1",
"pageid": "ID de pàgina $1",
"gotointerwiki": "A punt d’abandonar {{SITENAME}}",
"recentchanges-submit": "نیشانی بدە",
"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-days-show-days": "$1 {{PLURAL:$1|ڕۆژ}}",
"rcfilters-quickfilters": "پاڵوێنە پاشەکەوتکراوەکان",
"rcfilters-savedqueries-defaultlabel": "پاڵوێنە پاشەکەوتکراوەکان",
+ "rcfilters-savedqueries-setdefault": "بە بنەڕەتی کارای بکە",
+ "rcfilters-savedqueries-new-name-label": "ناو",
+ "rcfilters-savedqueries-new-name-placeholder": "وەسفی کاری پاڵوێنەکە بکە",
+ "rcfilters-savedqueries-apply-label": "دروستکردنی پاڵوێنە",
+ "rcfilters-savedqueries-cancel-label": "ھەڵوەشاندنەوە",
+ "rcfilters-savedqueries-add-new-title": "پاشەکەوتکردنی ھەڵبژاردەکانی پاڵوێنەکەی ئێستا",
+ "rcfilters-restore-default-filters": "ھێنانەوەی پاڵوێنە بنچینەییەکان",
"rcfilters-clear-all-filters": "ھەموو فیلتەرەکان بسڕەوە",
+ "rcfilters-show-new-changes": "نیشاندانی نوێترین دەستکارییەکان",
"rcfilters-search-placeholder": "پاڵاوتنی گۆڕانکارییە نوێیەکان (بگەڕێ یان دەست بە نووسین بکە)",
- "rcfilters-filterlist-title": "فیلتەرەکان",
+ "rcfilters-empty-filter": "ھیچ پاڵوێنەیەک چالاک نییە. ھەموو بەشدارییەکان نیشان دەدرێن.",
+ "rcfilters-filterlist-title": "پاڵێوکەکان",
"rcfilters-filterlist-whatsthis": "ئەمە چۆن کاردەکات؟",
+ "rcfilters-filterlist-feedbacklink": "ڕای خۆتمان پێ بڵێ لەسەر ئەم ئامرازە نوێیانە",
+ "rcfilters-highlightbutton-title": "ئەنجامەکان ڕووناک بکە",
"rcfilters-highlightmenu-title": "ڕەنگێکی نوێ ھەڵبژێرە",
+ "rcfilters-filtergroup-authorship": "بەشدارییەکان",
"rcfilters-filter-editsbyself-label": "گۆڕانکارییەکانت",
"rcfilters-filter-editsbyself-description": "بەشدارییەکانی خۆت.",
"rcfilters-filter-editsbyother-label": "گۆڕانکارییەکانی کەسانی تر",
"rcfilters-filter-editsbyother-description": "ھەموو گۆڕانکارییەکان بێجگە لەوەی خۆت",
+ "rcfilters-filtergroup-userExpLevel": "ئەزموونی بەکارھێنەران",
"rcfilters-filter-user-experience-level-registered-label": "تۆمارکراو",
"rcfilters-filter-user-experience-level-registered-description": "ئەو بەکارھێنەرانەی لە ژوورەوەن",
"rcfilters-filter-user-experience-level-unregistered-label": "تۆمارنەکراوەکان",
"rcfilters-filter-user-experience-level-unregistered-description": "ئەو بەکارھێنەرانەی لە ژوورەوە نین",
"rcfilters-filter-user-experience-level-newcomer-label": "تازەکاران",
"rcfilters-filter-user-experience-level-newcomer-description": "کەمتر لە ١٠ دەستکاری و ٤ ڕۆژ لە چالاک بوون",
+ "rcfilters-filter-user-experience-level-learner-label": "خوێندکاران",
+ "rcfilters-filter-user-experience-level-learner-description": "ئەو بەکارھێنەرە تۆمارکراوانەی ئاستی ئەزموونەکەیان دەکەوێتە نێوان «تازەکاران» و «بەکارھێنەرانی پێشکەوتوو.»",
"rcfilters-filter-user-experience-level-experienced-label": "بەکارھێنەرانی پێشکەوتوو",
"rcfilters-filter-user-experience-level-experienced-description": "زیاتر لە ٣٠ ڕۆژ لە چالاکی و ٥٠٠ دەستکاری",
+ "rcfilters-filtergroup-automated": "دەستکارییە خۆگەڕەکان",
"rcfilters-filter-bots-label": "بۆت",
+ "rcfilters-filter-bots-description": "ئەو دەستکارییانەی بە ئامرازە خۆگەڕەکان کراون",
"rcfilters-filter-humans-label": "مرۆڤ (بۆت نییە)",
"rcfilters-filter-humans-description": "دەستکارییەکانی لەلایەن مرۆڤەکانەوە ئەنجام دراون",
"rcfilters-filter-patrolled-label": "پاسدراو",
"rcfilters-filter-patrolled-description": "ئەو دەستکارییانەی وەک پاسدراو دیاریکراون",
"rcfilters-filter-unpatrolled-label": "پاسنەدراوەکان",
"rcfilters-filter-unpatrolled-description": "ئەو دەستکارییانەی وەک پاسدراو دیارینەکراون",
+ "rcfilters-filtergroup-significance": "بەسوود",
"rcfilters-filter-minor-label": "دەستکارییە بچووکەکان",
"rcfilters-filter-minor-description": "ئەو دەستکارییانەی کە دەستکاریکەر وەک بچووک ناوی بردووە",
"rcfilters-filter-major-label": "دەستکارییە نا-بچووکەکان",
"rcfilters-filtergroup-watchlist": "پەڕەکانی لە پێڕستی چاودێریتن",
"rcfilters-filter-watchlist-watched-label": "لە پێرستی چاودێری",
"rcfilters-filter-watchlist-watched-description": "گۆڕانکاری لە پەڕەکانی کە لە پێڕستی چاودێریتن.",
+ "rcfilters-filter-watchlist-watchednew-label": "گۆڕانکارییە نوێکانی پێڕستی چاودێری",
"rcfilters-filter-watchlist-notwatched-label": "لە پێڕستی چاودێریت نییە",
+ "rcfilters-filter-watchlist-notwatched-description": "ھەمووشتێک جگە لە گۆڕانکاریی پەڕەکانی پێڕستی چاودێرییەکەت.",
+ "rcfilters-filter-watchlistactivity-unseen-label": "گۆڕانکارییە نەبینراوەکان",
+ "rcfilters-filter-watchlistactivity-unseen-description": "گۆڕانکاریی ئەو پەڕانەی سەردانت نەکردوون لەوەتەی گۆڕانکارییان تێدا کراوە.",
+ "rcfilters-filter-watchlistactivity-seen-label": "گۆڕانکارییە بینراوەکان",
"rcfilters-filtergroup-changetype": "جۆری گۆڕانکاری",
"rcfilters-filter-pageedits-label": "دەستکارییەکانی پەڕە",
+ "rcfilters-filter-pageedits-description": "دەستکارییەکانی ناوەڕۆکی ویکیپیدیا، لێدوانەکان، وەسفی پۆلەکان...",
"rcfilters-filter-newpages-label": "دروستکردنی پەڕەکان",
+ "rcfilters-filter-newpages-description": "ئەو دەستکارییانەی پەڕەی نوێ دروست دەکەن.",
"rcfilters-filter-categorization-label": "گۆڕانکاری پۆلەکان",
"rcfilters-filter-logactions-label": "کردارە لۆگییەکان",
+ "rcfilters-filter-logactions-description": "کردارە بەڕێوەبەرییەکان، دروستکردنی ھەژمارەکان، سڕینەوەی پەڕەکان، بارکردنەکان...",
+ "rcfilters-filtergroup-lastRevision": "دوایین پێداچوونەوەکان",
+ "rcfilters-filter-lastrevision-label": "دوایین پێداچوونەوە",
+ "rcfilters-filter-lastrevision-description": "تەنیا دوایین گۆڕانکاری سەر پەڕەکان.",
+ "rcfilters-filter-previousrevision-label": "دوایین گۆڕانکاری نا",
+ "rcfilters-filter-previousrevision-description": "ھەموو ئەو گۆڕانکارییەی «نوێترین وەشان» نین.",
+ "rcfilters-view-tags": "دەستکارییە تاگکراوەکان",
+ "rcfilters-view-tags-help-icon-tooltip": "زیاتر بزانە لەسەر دەستکارییە تاگکراوەکان",
+ "rcfilters-liveupdates-button": "نوێکردنەوەی زیندوو",
"rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە <strong>$3، $4</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
"rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2",
"rcshowhideminor": "دەستکارییە بچووکەکان $1",
"restrictionsfield-badip": "Neplatná IP adresa nebo rozsah: $1",
"restrictionsfield-label": "Povolené rozsahy IP adres:",
"restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Chyba: $1",
+ "edit-error-long": "Chyby:\n\n$1",
"revid": "revize $1",
"pageid": "Stránka s ID $1",
"rawhtml-notallowed": "Značky <html> nelze používat mimo běžné stránky.",
"removecredentials-invalidsubpage": "$1 er ikke en gyldig type for akkreditiver.",
"removecredentials-success": "Dine akkreditiver er blevet fjernet.",
"credentialsform-provider": "Akkreditivtype:",
- "credentialsform-account": "Kontonavn:"
+ "credentialsform-account": "Kontonavn:",
+ "edit-error-short": "Fejl: $1"
}
"lockmanager-fail-closelock": "Die Sperrdatei für „$1“ konnte nicht geschlossen werden.",
"lockmanager-fail-deletelock": "Die Sperrdatei für „$1“ konnte nicht gelöscht werden.",
"lockmanager-fail-acquirelock": "Die Sperre für „$1“ konnte nicht abgerufen werden.",
- "lockmanager-fail-openlock": "Die Sperrdatei für „$1“ konnte nicht geöffnet werden.",
+ "lockmanager-fail-openlock": "Die Sperrdatei für „$1“ konnte nicht geöffnet werden. Stelle sicher, dass dein Hochladerepositorium korrekt konfiguriert ist und dein Webserver eine Berechtigung zum Beschreiben dieses Repositoriums hat. Siehe https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory für weitere Informationen.",
"lockmanager-fail-releaselock": "Die Sperre für „$1“ konnte nicht freigegeben werden.",
"lockmanager-fail-db-bucket": "Es konnte mit Sammelabruf $1 keine ausreichende Anzahl an Verbindungen zu Sperrdatenbanken hergestellt werden.",
"lockmanager-fail-db-release": "Die Sperren auf Datenbank $1 konnten nicht freigegeben werden.",
"restrictionsfield-badip": "Ungültige IP-Adresse oder ungültiger IP-Adressbereich: $1",
"restrictionsfield-label": "Erlaubte IP-Adressbereiche:",
"restrictionsfield-help": "Eine IP-Adresse oder ein CIDR-Bereich pro Zeile. Um alles zu aktivieren, verwende:\n<pre>\n0.0.0.0/0\n::/0\n</pre>",
+ "edit-error-short": "Fehler: $1",
+ "edit-error-long": "Fehler:\n\n$1",
"revid": "Version $1",
"pageid": "Seitenkennung $1",
"rawhtml-notallowed": "<html>-Tags können nicht außerhalb von normalen Seiten verwendet werden.",
"youremail": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
"username": "{{GENDER:$1|Όνομα χρήστη}}:",
"prefs-memberingroups": "{{GENDER:$2|Μέλος}} της {{PLURAL:$1|ομάδας|ομάδων}}:",
- "group-membership-link-with-expiry": "$1 (μέχρι τις $3 στις $4)",
+ "group-membership-link-with-expiry": "$1 (μέχρι τις $2)",
"prefs-registration": "Χρόνος εγγραφής:",
"yourrealname": "Πραγματικό όνομα:",
"yourlanguage": "Γλώσσα:",
"userrights-nodatabase": "Η βάση δεδομένων $1 δεν υπάρχει ή δεν είναι τοπική.",
"userrights-changeable-col": "Ομάδες που μπορείτε να αλλάξετε",
"userrights-unchangeable-col": "Ομάδες που δεν μπορείτε να αλλάξετε",
- "userrights-expiry-current": "Λήγει στις $2 στις $3",
+ "userrights-expiry-current": "Λήγει $1",
"userrights-expiry-none": "Δεν λήγει",
"userrights-expiry": "Λήγει:",
"userrights-expiry-existing": "Υπάρχουσα ώρα λήξης: $3, $2",
"rcfilters-activefilters": "Ενεργά φίλτρα",
"rcfilters-advancedfilters": "Σύνθετα Φίλτρα",
"rcfilters-limit-title": "Αλλαγές προς εμφάνιση",
- "rcfilters-limit-and-date-label": "{{PLURAL:$1|αλλαγή|$1 αλλαγές}}, $2",
+ "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|αλλαγή|αλλαγές}}, $2",
"rcfilters-date-popup-title": "Χρονική περίοδος αναζήτησης",
"rcfilters-days-title": "Πρόσφατες ημέρες",
"rcfilters-hours-title": "Πρόσφατες ώρες",
"recentchangeslinked-feed": "Σχετικές αλλαγές",
"recentchangeslinked-toolbox": "Σχετικές αλλαγές",
"recentchangeslinked-title": "Αλλαγές σχετικές με το «$1»",
- "recentchangeslinked-summary": "Εισαγάγετε ένα όνομα σελίδας για να δείτε τις αλλαγές σε σελίδες που συνδέονται ή από αυτή τη σελίδα. Για να δείτε τα μέλη μιας κατηγορίας, εισαγάγετε Κατηγορία:Όνομα κατηγορίας.)\nΑλλαγές σε σελίδες στην [[Special:Watchlist|λίστα παρακολούθησής]] σας είναι '''έντονες'''.",
+ "recentchangeslinked-summary": "Εισαγάγετε ένα όνομα σελίδας για να δείτε τις αλλαγές σε σελίδες που συνδέονται ή από αυτή τη σελίδα. (Για να δείτε τα μέλη μιας κατηγορίας, εισαγάγετε Κατηγορία:Όνομα κατηγορίας.)\nΑλλαγές σε σελίδες στην [[Special:Watchlist|λίστα παρακολούθησής]] σας είναι <strong>έντονες</strong>.",
"recentchangeslinked-page": "Όνομα σελίδας:",
"recentchangeslinked-to": "Εμφάνιση αλλαγών σε σελίδες συνδεδεμένες με την δεδομένη σελίδα αντί αυτής",
"recentchanges-page-added-to-category": "Η σελίδα [[:$1]] προστέθηκε στην κατηγορία",
"fileexists-forbidden": "Ένα αρχείο με αυτό το όνομα υπάρχει ήδη˙ εάν ακόμη θέλετε να επιφορτώσωτε αυτό το αρχείο παρακαλώ πηγαίνετε πίσω και επιφορτώστε το υπό ένα νέο όνομα. [[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Ένα αρχείο με αυτό το όνομα υπάρχει ήδη στο χώρο φύλαξης κοινών αρχείων.\nΕάν θέλετε παρ' όλ' αυτά να επιφορτώσετε το δικό σας αρχείο, παρακαλούμε πηγαίνετε πίσω και χρησιμοποιήστε ένα νέο όνομα. [[File:$1|thumb|center|$1]]",
"fileexists-no-change": "Το ανεβασμένο αρχείο είναι ένα ακριβές αντίγραφο της τρέχουσας έκδοσης του <strong>[[:$1]]</strong>.",
- "fileexists-duplicate-version": "Το ανεβασμένο αρχείο είναι ένα ακριβές αντίγραφο {{{{PLURAL:$2|παλιότερης έκδοσης|παλιότερων εκδόσεων}} του <strong>[[:$1]]</strong>.",
+ "fileexists-duplicate-version": "Το ανεβασμένο αρχείο είναι ένα ακριβές αντίγραφο {{PLURAL:$2|παλιότερης έκδοσης|παλιότερων εκδόσεων}} του <strong>[[:$1]]</strong>.",
"file-exists-duplicate": "Αυτό το αρχείο είναι διπλότυπο {{PLURAL:$1|αυτού του αρχείου|αυτών των αρχείων}}:",
"file-deleted-duplicate": "Αρχείο παρόμοιο με αυτό εδώ ([[:$1]]) έχει προηγουμένως διαγραφεί. Θα πρέπει να ελέγξετε το ιστορικό διαγραφής του πριν να προχωρήσετε στην επαναφόρτωσή του.",
"file-deleted-duplicate-notitle": "Ένα αρχείο πανομοιότυπο με αυτό έχει προηγουμένως διαγραφεί, και ο τίτλος έχει κατασταλεί.\nΘα πρέπει να ζητήσετε από κάποιον με την δυνατότητα προβολής κατεσταλμένου αρχείου δεδομένων για να εξετάσει την κατάσταση προτού προχωρήσετε σε επαναφόρτωση του.",
"listfiles_size": "Μέγεθος",
"listfiles_description": "Περιγραφή",
"listfiles_count": "Εκδόσεις",
- "listfiles-show-all": "Συμπερίληψη παλαιών εκδόσεων των εικόνων",
+ "listfiles-show-all": "Συμπερίληψη παλαιών εκδόσεων αρχείων",
"listfiles-latestversion": "Τρέχουσα έκδοση",
"listfiles-latestversion-yes": "Ναι",
"listfiles-latestversion-no": "Όχι",
"doubleredirects": "Διπλές ανακατευθύνσεις",
"doubleredirectstext": "Αυτή η σελίδα καταγράφει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. \nΚάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη ανακατεύθυνση, όπως επίσης και προς τον προορισμό της δεύτερης ανακατεύθυνσης, η οποία και είναι συνήθως η «πραγματική» σελίδα προορισμού στην οποία πρέπει να δείχνει η πρώτη ανακατεύθυνση. \nΤα <del>διαγεγραμμένα</del> λήμματα έχουν επιλυθεί.",
"double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί.\nΕνημερώθηκε αυτόματα και τώρα είναι ανακατεύθυνση στην [[$2]].",
- "double-redirect-fixed-maintenance": "Αυτόματη διόρθωση διπλής ανακατεύθυνσης από [[$1]] σε [[$2]] σε εργασία συντήρησης.",
+ "double-redirect-fixed-maintenance": "Αυτόματη διόρθωση διπλής ανακατεύθυνσης από [[$1]] σε [[$2]] σε εργασία συντήρησης",
"double-redirect-fixer": "Διορθωτής ανακατευθύνσεων",
"brokenredirects": "Λανθασμένες ανακατευθύνσεις",
"brokenredirectstext": "Οι παρακάτω ανακατευθύνσεις οδηγούν σε σελίδες που δεν υπάρχουν:",
"lockmanager-fail-closelock": "Could not close lock file for \"$1\".",
"lockmanager-fail-deletelock": "Could not delete lock file for \"$1\".",
"lockmanager-fail-acquirelock": "Could not acquire lock for \"$1\".",
- "lockmanager-fail-openlock": "Could not open lock file for \"$1\".",
+ "lockmanager-fail-openlock": "Could not open lock file for \"$1\". Make sure your upload directory is configured correctly and your web server has permission to write to that directory. See https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory for more information.",
"lockmanager-fail-releaselock": "Could not release lock for \"$1\".",
"lockmanager-fail-db-bucket": "Could not contact enough lock databases in bucket $1.",
"lockmanager-fail-db-release": "Could not release locks on database $1.",
"restrictionsfield-badip": "Invalid IP address or range: $1",
"restrictionsfield-label": "Allowed IP ranges:",
"restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Error: $1",
+ "edit-error-long": "Errors:\n\n$1",
"revid": "revision $1",
"pageid": "page ID $1",
"rawhtml-notallowed": "<html> tags cannot be used outside of normal pages.",
"restrictionsfield-badip": "Malvalida IP-adreso de la intervalo: $1",
"restrictionsfield-label": "Permesita IP-intervalo:",
"restrictionsfield-help": "Unu IP-adreso aŭ CIDR-intervalo per linio. Por permesigi ĉion, uzu:<pre>0.0.0.0/0</code>\n<code>::/0</pre>",
+ "edit-error-short": "Eraro: $1",
+ "edit-error-long": "Eraroj\n\n$1",
"revid": "revizio $1",
"pageid": "Identigilo de paĝo $1"
}
"lockmanager-fail-closelock": "No se pudo cerrar la referencia para el archivo de bloqueo de \"$1\".",
"lockmanager-fail-deletelock": "No se pudo eliminar el archivo de bloqueo para \"$1\".",
"lockmanager-fail-acquirelock": "No pudo adquirir el bloqueo para \"$1\".",
- "lockmanager-fail-openlock": "No se pudo abrir el archivo de bloqueo para \"$1\".",
+ "lockmanager-fail-openlock": "No se pudo abrir el archivo de bloqueo para \"$1\". Por favor verifica que el directorio de subidas está configurado correctamente y que tu servidor web tiene permisos de escritura en ese directorio. Ver https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory para más información.",
"lockmanager-fail-releaselock": "No se pudo liberar el bloqueo de \"$1\".",
"lockmanager-fail-db-bucket": "No se pudo contactar con las suficientes bases de datos del conjunto $1.",
"lockmanager-fail-db-release": "No se pudieron liberar los bloqueos registrados en la base de datos $1.",
"listduplicatedfiles": "Lista de archivos con duplicados",
"listduplicatedfiles-summary": "Esta es una lista de archivos donde la versión más reciente es un duplicado de la versión más reciente de un archivo con otro nombre. Solo se tienen en cuenta archivos locales.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] tiene [[$3|{{PLURAL:$2|un duplicado|$2 duplicados}}]].",
- "unusedtemplates": "Plantillas sin uso",
+ "unusedtemplates": "Plantillas no utilizadas",
"unusedtemplatestext": "Aquí se enumeran todas las páginas en el espacio de nombres {{ns:template}} que no están incluidas en otras páginas. Recuerda mirar lo que enlaza a las plantillas antes de borrarlas.",
"unusedtemplateswlh": "otros enlaces",
"randompage": "Página aleatoria",
"doubleredirects": "Redirecciones dobles",
"doubleredirectstext": "Esta página contiene una lista de páginas que redirigen a otras páginas de redirección.\nCada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo «real» al que la primera redirección debería apuntar.\nLas entradas <del>tachadas</del> han sido resueltas.",
"double-redirect-fixed-move": "[[$1]] se ha trasladado.\nSe actualizó automáticamente y ahora redirecciona a [[$2]].",
- "double-redirect-fixed-maintenance": "Corrigiendo automáticamente la doble redirección desde [[$1]] a [[$2]] en un trabajo de mantenimiento.",
+ "double-redirect-fixed-maintenance": "Corrección automática de redirección doble de [[$1]] a [[$2]] mediante una tarea de mantenimiento",
"double-redirect-fixer": "Corrector de redirecciones",
"brokenredirects": "Redirecciones incorrectas",
"brokenredirectstext": "Las siguientes redirecciones enlazan a páginas que no existen:",
"uncategorizedimages": "Archivos sin categorizar",
"uncategorizedtemplates": "Plantillas sin categorizar",
"uncategorized-categories-exceptionlist": "# Contiene una lista de categorías que no deberían figurar en Special:UncategorizedCategories. Una categoría por línea, empezando por «*». Las líneas que empiecen por otro carácter (espacios en blanco incluidos) se ignorarán. Usa «#» para añadir comentarios.",
- "unusedcategories": "Categorías sin uso",
- "unusedimages": "Archivos sin uso",
+ "unusedcategories": "Categorías no utilizadas",
+ "unusedimages": "Archivos no utilizados",
"wantedcategories": "Categorías requeridas",
"wantedpages": "Páginas requeridas",
"wantedpages-summary": "Lista de páginas inexistentes con el mayor número de enlaces a ellas, excluyendo páginas que son solo redirecciones a ellas. Para ver una lista de páginas inexistentes con redirecciones apuntando a ellas, consulta [[{{#special:BrokenRedirects}}|la lista de redirecciones rotas]].",
"restrictionsfield-badip": "Dirección o intervalo IP no válidos: $1",
"restrictionsfield-label": "Intervalos de IP permitidos:",
"restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activarlo todo, utiliza <pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Error: $1",
+ "edit-error-long": "Errores:\n\n$1",
"revid": "revisión $1",
"pageid": "ID de página $1",
"rawhtml-notallowed": "No se pueden emplear las etiquetas <html> si no es en las páginas normales.",
"restrictionsfield-badip": "Vigane IP-aadress või -aadressivahemik: $1",
"restrictionsfield-label": "Lubatud IP-aadressivahemikud:",
"restrictionsfield-help": "Üks IP-aadress või CIDR-vahemik rea kohta. Et lubada kõik, kasuta järgmist süntaksit:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Tõrge: $1",
+ "edit-error-long": "Tõrked:\n\n$1",
"revid": "redaktsioon $1",
"pageid": "lehekülje identifikaator $1",
"rawhtml-notallowed": "<html>-silte ei saa kasutada mujal kui harilikel lehekülgedel.",
"doubleredirects": "Birbideratze bikoitzak",
"doubleredirectstext": "Lerro bakoitzean lehen eta bigarren birzuzenketetarako loturak ikus daitezke, eta baita edukia daukan edo eduki beharko lukeen orrialderako lotura ere. Lehen birzuzenketak azken honetara <del>zuzendu</del> beharko luke.",
"double-redirect-fixed-move": "«[[$1]]» orria mugitu da.\nAutomatikoki eguneratu da, eta orain «[[$2]]» orrira darama.",
- "double-redirect-fixed-maintenance": "«[[$1]]» orritik «[[$2]]» orrira egindako birbideratze bikoitza automatikoki konpondua, mantentze lanak egitean.",
+ "double-redirect-fixed-maintenance": "[[$1]] orritik [[$2]] orrira egindako birbideratze bikoitza automatikoki konpondua, mantentze lanak egitean.",
"double-redirect-fixer": "Birbideratze zuzentzailea",
"brokenredirects": "Hautsitako birzuzenketak",
"brokenredirectstext": "Ondorengo birbideratze hauek existitzen ez diren orrietara bideratuta daude:",
"recentchanges-noresult": "در فاصله زمانی ارائه شده هیچ تغییری با این معیارهای صورت نگرفته است",
"recentchanges-timeout": "این جستجو زمانش تمام شد. اگر مایلید کلیدواژههای دیگری را جستجو کنید.",
"recentchanges-network": "به دلیل خطای فنی، نتیجهای بدست نیامد. لطفاً برای تازهسازی صفحخ مجدداُ تلاش کنید.",
+ "recentchanges-notargetpage": "نام صفحه را در بالا وارد کنید تا تغییرات مرتبط با آن صفحه را مشاهده کنید.",
"recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پیگیری کنید.",
"recentchanges-label-newpage": "این ویرایش صفحهای تازه ایجاد کرد",
"recentchanges-label-minor": "این یک ویرایش جزئی است",
"rcfilters-advancedfilters": "پالایههای پیشرفته",
"rcfilters-limit-title": "تعداد تغییرات برای نمایش",
"rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|تغییر|تغییر}}, $2",
+ "rcfilters-date-popup-title": "دوره زمانی برای جستجو",
"rcfilters-days-title": "روزهای اخیر",
"rcfilters-hours-title": "ساعتهای اخیر",
"rcfilters-days-show-days": "$1 {{PLURAL:$1|روز|روز}}",
"rcfilters-watchlist-showupdated": "تغییرات صفحاتی که شما بازدید نکردید از زمانی که تغییرات رخ داده به صورت <strong>پررنگ</strong>، با نشانگر توپر.",
"rcfilters-preference-label": "مخفی کردن نسخه بهبود یافته تغییرات اخیر",
"rcfilters-preference-help": "تغییرات رابط کاربری که در سال ۲۰۱۷ اضافه شده است را بر میگرداند.",
+ "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": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شدهاست|نشان داده شدهاند}}).",
"rclistfromreset": "از نو کردن انتخاب تاریخ",
"rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
"doubleredirects": "تغییرمسیرهای دوتایی",
"doubleredirectstext": "این صفحه فهرستی از صفحههای تغییرمسیری را ارائه میکند که به صفحهٔ تغییرمسیر دیگری اشاره میکنند.\nهر سطر دربردارندهٔ پیوندهایی به تغییرمسیر اول و دوم و همچنین مقصد تغییرمسیر دوم است، که معمولاً صفحهٔ مقصد واقعی است و نخستین تغییرمسیر باید به آن اشاره کند.\nموارد <del>خط خورده</del> درست شدهاند.",
"double-redirect-fixed-move": "[[$1]] انتقال داده شدهاست.\n\nبه صورت خودکار بهروز شدهاست و تغییرمسیری به [[$2]] داده شد.",
- "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری.",
+ "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری",
"double-redirect-fixer": "تعمیرکار تغییرمسیرها",
"brokenredirects": "تغییرمسیرهای خراب",
"brokenredirectstext": "تغییرمسیرهای زیر به یک صفحهٔ ناموجود پیوند دارند:",
"import-mapping-subpage": "درونریزی به عنوان زیرصفحهٔ صفحهٔ:",
"import-upload-filename": "نام پرونده:",
"import-upload-username-prefix": "پیشوند میانویکی:",
+ "import-assign-known-users": "نسبت دادن ویرایشها به کاربران محلی در صورتی که نام به صورت محلی وجود دارد",
"import-comment": "توضیح:",
"importtext": "لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برونبری]] دریافت کنید.\nسپس آن را روی دستگاهتان ذخیره کنید و اینجا بارگذاری نمایید.",
"importstart": "در حال درونریزی صفحات...",
"imported-log-entries": "$1 {{PLURAL:$1|مورد سیاهه|مورد سیاهه}} درون ریزی شد.",
"importfailed": "درونریزی صفحات شکست خورد: <nowiki>$1</nowiki>",
"importunknownsource": "نوع مأخذ درونریزی معلوم نیست",
+ "importnoprefix": "پیشوند میانویکی پشتیبانی نمیشود",
"importcantopen": "پروندهٔ درونریزی صفحات باز نشد",
"importbadinterwiki": "پیوند میانویکی نادرست",
"importsuccess": "درونریزی با موفقیت انجام شد!",
"pageinfo-category-subcats": "تعداد زیرردهها",
"pageinfo-category-files": "تعداد پروندهها",
"pageinfo-user-id": "شناسه کاربر",
+ "pageinfo-file-hash": "مقدار هش",
"markaspatrolleddiff": "برچسب گشت بزن",
"markaspatrolledtext": "به این صفحه برچسب گشت بزن",
"markaspatrolledtext-file": "انتخاب این نسخهٔ پرونده به عنوان گشت خورده",
"autosumm-replace": "جایگزینی صفحه با '$1'",
"autoredircomment": "تغییرمسیر به [[$1]]",
"autosumm-removed-redirect": "تغییرمسیر به [[$1]] حذف شد",
+ "autosumm-changed-redirect-target": "تغییر هدف تغییرمسیر از [[$1]] به [[$2]]",
"autosumm-new": "صفحهای تازه حاوی «$1» ایجاد کرد",
"autosumm-newblank": "ایجاد صفحه خالی",
"size-bytes": "$1 {{PLURAL:$1|بایت}}",
"restrictionsfield-badip": "نشانی یا بازهٔ آیپی نامعتبر: $1",
"restrictionsfield-label": "بازههای آیپی مجاز:",
"restrictionsfield-help": "یک نشانی آیپی یا بازهٔ سیآیدیار در هر خط وارد کنید. برای فعال کردن همهچیز، این مقدار را استفاده کنید: <code>0.0.0.0/0</code><br /><code>::/0</code>",
+ "edit-error-short": "خطا: $1",
+ "edit-error-long": "خطاها:\n\n$1",
"revid": "نسخهٔ $1",
"pageid": "شناسهٔ صفحهٔ $1",
"rawhtml-notallowed": "برچسبهای <html> را نمیتوان خارج از صفحههای معمولی استفاده کرد.",
"restrictionsfield-badip": "Virheellinen IP-osoite tai alue: $1",
"restrictionsfield-label": "Sallitut IP-alueet:",
"restrictionsfield-help": "Yksi IP-osoite tai CIDR-alue per rivi. Ottaaksesi kaiken käyttöön, käytä:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "$1",
+ "edit-error-long": "Virheet:\n\n$1",
"revid": "versio $1",
"pageid": "sivun tunnistenumero $1",
"rawhtml-notallowed": "<html> komentoa ei voida käyttää normaalien sivujen ulkopuolella.",
"lockmanager-fail-closelock": "Impossible de fermer le fichier de verrou pour « $1 ».",
"lockmanager-fail-deletelock": "Impossible de supprimer le fichier de verrou pour « $1 ».",
"lockmanager-fail-acquirelock": "Impossible d'obtenir le verrou pour « $1 ».",
- "lockmanager-fail-openlock": "Impossible d'ouvrir le fichier de verrou pour « $1» .",
+ "lockmanager-fail-openlock": "Impossible d’ouvrir le fichier de verrou pour « $1 » . Assurez-vous que votre répertoire de téléchargement est configuré correctement et que votre serveur web a le droit d’y écrire. Voyez https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory pour plus d’information.",
"lockmanager-fail-releaselock": "Impossible de relâcher le verrou pour « $1 ».",
"lockmanager-fail-db-bucket": "Impossible de contacter suffisamment de bases de données de verrouillage dans le godet $1.",
"lockmanager-fail-db-release": "Impossible de relâcher les verrous sur la base de données $1.",
"restrictionsfield-badip": "Adresse IP ou plage non valide : $1",
"restrictionsfield-label": "Plages IP autorisées :",
"restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Erreur : $1",
+ "edit-error-long": "Erreurs :\n\n$1",
"revid": "version $1",
"pageid": "ID de page $1",
"rawhtml-notallowed": "Les balises <html> ne peuvent pas être utilisées en dehors des pages normales.",
"restrictionsfield-badip": "Enderezo IP ou rango de IP non válido: $1",
"restrictionsfield-label": "Rangos de IP permitidos:",
"restrictionsfield-help": "Un único enderezo IP ou rango CIDR por liña. Para habilitalos todos, utiliceː\n<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Erro: $1",
+ "edit-error-long": "Erros:\n\n$1",
"revid": "revisión $1",
"pageid": "identificador de páxina $1",
"rawhtml-notallowed": "As marcas <html> non poden usarse fóra das páxinas normais.",
"mytalk": "שיחה",
"anontalk": "שיחה",
"navigation": "ניווט",
- "and": " וגם",
+ "and": " ו",
"faq": "שאלות ותשובות",
"actions": "פעולות",
"namespaces": "מרחבי שם",
"restrictionsfield-badip": "כתובת או טווח כתובות IP בלתי תקין: $1",
"restrictionsfield-label": "טווחי כתובות IP מותרים:",
"restrictionsfield-help": "כתובת IP אחת או טווח CIDR אחד בשורה. כדי לאפשר את הכול, ניתן להשתמש ב:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "שגיאה: $1",
+ "edit-error-long": "שגיאות:\n\n$1",
"revid": "גרסה $1",
"pageid": "מזהה דף $1",
"rawhtml-notallowed": "לא ניתן להשתמש בתגיות <html> מחוץ לדפים רגילים.",
"Rajatkatiyar10",
"Dcljr",
"Bhatakati aatma",
- "Shypoetess"
+ "Shypoetess",
+ "Innocentbunny"
]
},
- "tog-underline": "लिà¤\82à¤\95 रà¥\87à¤\96ाà¤\82à¤\95ित à¤\95रà¥\87à¤\82:",
- "tog-hideminor": "हाल मà¥\87à¤\82 हà¥\81à¤\8f परिवरà¥\8dतनà¥\8bà¤\82 मà¥\87à¤\82 à¤\9bà¥\8bà¤\9fà¥\87 बदलाव छिपाएँ",
+ "tog-underline": "à¤\95ड़à¥\80 रà¥\87à¤\96ाà¤\82à¤\95न:",
+ "tog-hideminor": "हाल मà¥\87à¤\82 हà¥\81à¤\8f परिवरà¥\8dतनà¥\8bà¤\82 मà¥\87à¤\82 लà¤\98à¥\81 परिवरà¥\8dतन छिपाएँ",
"tog-hidepatrolled": "हाल में हुए परिवर्तनों में परीक्षित बदलाव छिपाएँ",
"tog-newpageshidepatrolled": "नये पृष्ठ की सूची में परीक्षित पृष्ठों को छिपाएँ",
"tog-hidecategorization": "पृष्ठों का श्रेणीकरण छिपाएं",
"rcfilters-filter-showlinkedfrom-option-label": "<strong>से जुड़े पृष्ठ</strong> चयनित पृष्ठ",
"rcfilters-filter-showlinkedto-label": "लिंक करने वाले पृष्ठों पर परिवर्तन दिखाएं",
"rcfilters-filter-showlinkedto-option-label": "<strong>से जुड़ने वाले पृष्ठ</strong> चयनित पृष्ठ",
- "rcfilters-target-page-placeholder": "पृष्ठ का नाम दर्ज करें",
+ "rcfilters-target-page-placeholder": "पृष्ठ(अथवा श्रेणी) का नाम भरें",
"rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
"rclistfromreset": "चुने दिनांक पहले जैसा करें",
"rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
"pageinfo-category-subcats": "उपश्रेणियों की संख्या",
"pageinfo-category-files": "फ़ाइलों की संख्या",
"pageinfo-user-id": "सदस्य पता",
+ "pageinfo-file-hash": "हैश मान",
"markaspatrolleddiff": "जाँचा हुआ चिन्हित करें",
"markaspatrolledtext": "इस पृष्ठ को जाँचा हुआ चिन्हित करें",
"markaspatrolledtext-file": "इस फ़ाइल संस्करण को जांचा हुआ चिन्हित करें",
"version-poweredby-others": "अन्य",
"version-poweredby-translators": "translatewiki.net अनुवादक",
"version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
- "version-license-info": "मà¥\80डियाविà¤\95ि मà¥\81à¤\95à¥\8dत सà¥\89फ़à¥\8dà¤\9fवà¥\87यर हà¥\88; à¤\86प à¤\89सà¤\95ा पà¥\81नà¤\83 वितरण à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82 à¤\94र/या à¤\89सà¥\87 सà¤\82शà¥\8bधित à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82 à¤\9cà¥\88सा à¤\95ि à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\87 à¤\85à¤\82तरà¤\97त फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन दà¥\8dवारा पà¥\8dरà¤\95ाशित à¤\95िया à¤\97या था; या तà¥\8b लाà¤\87सà¥\87à¤\82स à¤\95ा à¤\85वतरण २, या (à¤\86पà¤\95à¥\87 विà¤\95लà¥\8dप à¤\95à¥\87 à¤\85नà¥\81सार) à¤\95à¥\8bà¤\88 à¤\94र à¤\85वतरण।\n\nमà¥\80डियाविà¤\95ि à¤\87स à¤\86शा à¤\95à¥\87 साथ वितरित à¤\95िया à¤\97या हà¥\88 à¤\95ि यह à¤\89पयà¥\81à¤\95à¥\8dत हà¥\88, पर वारà¤\82à¤\9fà¥\80 à¤\95à¥\87 बिना; à¤\9cिसमà¥\87à¤\82 वà¥\8dयापारिà¤\95 मापदà¤\82ड वालà¥\80 वारà¤\82à¤\9fà¥\80 à¤à¥\80 नहà¥\80à¤\82 हà¥\88 à¤\94र न हà¥\80 à¤\95िसà¥\80 लà¤\95à¥\8dषà¥\8dय à¤\95à¥\87 लिà¤\8f परà¥\8dयापà¥\8dत हà¥\8bनà¥\87 à¤\95ा पà¥\8dरावधान हà¥\88। à¤\94र à¤\9cानà¤\95ारà¥\80 à¤\95à¥\87 लिà¤\8f दà¥\87à¤\96िà¤\8f à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स।\n\nà¤\86पà¤\95à¥\8b à¤\87स पà¥\8dरà¥\8bà¤\97à¥\8dराम à¤\95à¥\87 साथ [{{SERVER}}{{SCRIPTPATH}}/COPYING à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\80 à¤\8fà¤\95 पà¥\8dरति] मिल à¤\9aà¥\81à¤\95à¥\80 हà¥\8bà¤\97à¥\80; यदि नहà¥\80à¤\82 तà¥\8b समà¥\8dपरà¥\8dà¤\95 à¤\95à¥\80à¤\9cिà¤\8f फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन, à¤\87à¤\82à¤\95., 51 फ़à¥\8dरà¥\88à¤\82à¤\95लिन सà¥\8dà¤\9fà¥\8dरà¥\80à¤\9f, पाà¤\81à¤\9aवà¥\80à¤\82 मà¤\82à¤\9c़िल, बà¥\8bस्टन, एम०ए० 02110-1301, यू०एस०ए० या [//www.gnu.org/licenses/old-licenses/gpl-2.0.html इसे ऑनलाइन पढ़ें].",
+ "version-license-info": "मà¥\80डियाविà¤\95ि मà¥\81à¤\95à¥\8dत सà¥\89फ़à¥\8dà¤\9fवà¥\87यर हà¥\88; à¤\86प à¤\89सà¤\95ा पà¥\81नà¤\83 वितरण à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82 à¤\94र/à¤\85थवा à¤\89सà¥\87 à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\87 à¤\85à¤\82तरà¤\97त सà¤\82शà¥\8bधित à¤\95र सà¤\95तà¥\87 हà¥\88à¤\82, à¤\9cà¥\88सा à¤\95à¥\80 फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन दà¥\8dवारा पà¥\8dरà¤\95ाशित à¤\95िया à¤\97या था; या तà¥\8b लाà¤\87सà¥\87à¤\82स à¤\95ा à¤\85वतरण २, या (à¤\86पà¤\95à¥\87 विà¤\95लà¥\8dप à¤\95à¥\87 à¤\85नà¥\81सार) à¤\89सà¤\95à¥\87 बाद à¤\95à¥\87 à¤\95à¥\8bà¤\88 à¤à¥\80 à¤\85नà¥\8dय à¤\85वतरण।\n\nमà¥\80डियाविà¤\95ि à¤\87स à¤\86शा à¤\95à¥\87 साथ वितरित à¤\95िया à¤\97या हà¥\88 à¤\95ि यह à¤\89पयà¥\81à¤\95à¥\8dत हà¥\88, पर वारà¤\82à¤\9fà¥\80 à¤\95à¥\87 बिना; à¤\9cिसमà¥\87à¤\82 वà¥\8dयापारिà¤\95 मापदà¤\82ड वालà¥\80 वारà¤\82à¤\9fà¥\80 à¤à¥\80 नहà¥\80à¤\82 हà¥\88 à¤\94र न हà¥\80 à¤\95िसà¥\80 लà¤\95à¥\8dषà¥\8dय à¤\95à¥\87 लिà¤\8f परà¥\8dयापà¥\8dत हà¥\8bनà¥\87 à¤\95ा पà¥\8dरावधान हà¥\88। à¤\85धिà¤\95 à¤\9cानà¤\95ारà¥\80 à¤\95à¥\87 लिà¤\8f à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स दà¥\87à¤\96ियà¥\87।\n\nà¤\86पà¤\95à¥\8b à¤\87स पà¥\8dरà¥\8bà¤\97à¥\8dराम à¤\95à¥\87 साथ [{{SERVER}}{{SCRIPTPATH}}/COPYING à¤\9cà¥\87०à¤\8fन०यà¥\82० साधारण सारà¥\8dवà¤\9cनिà¤\95 लाà¤\87सà¥\87à¤\82स à¤\95à¥\80 à¤\8fà¤\95 पà¥\8dरति] मिल à¤\9aà¥\81à¤\95à¥\80 हà¥\8bà¤\97à¥\80; यदि नहà¥\80à¤\82 तà¥\8b समà¥\8dपरà¥\8dà¤\95 à¤\95à¥\80à¤\9cिà¤\8f फ़à¥\8dरà¥\80 लाà¤\87सà¥\87à¤\82स फ़ाà¤\89नà¥\8dडà¥\87शन, à¤\87à¤\82à¤\95., 51 फ़à¥\8dरà¥\88à¤\82à¤\95लिन सà¥\8dà¤\9fà¥\8dरà¥\80à¤\9f, पाà¤\81à¤\9aवà¥\80à¤\82 मà¤\82à¤\9c़िल, बà¥\89स्टन, एम०ए० 02110-1301, यू०एस०ए० या [//www.gnu.org/licenses/old-licenses/gpl-2.0.html इसे ऑनलाइन पढ़ें].",
"version-software": "इन्स्टॉल की हुई प्रणाली",
"version-software-product": "प्रोडक्ट",
"version-software-version": "अवतरण",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
"tag-mw-contentmodelchange": "सामग्री मॉडल परिवर्तन",
"tag-mw-contentmodelchange-description": "पृष्ठ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel सामग्री मॉडल को परिवर्तित करें] के संपादन।",
- "tag-mw-new-redirect": "नया पà¥\81नà¥\8dनà¤\83 पà¥\8dरà¥\87षित लà¤\95à¥\8dषà¥\8dय",
+ "tag-mw-new-redirect": "नया à¤\85नà¥\81पà¥\8dरà¥\87षण",
"tag-mw-new-redirect-description": "बदलाव जो एक नया रीडायरेक्ट बनाते हैं या पुनर्निर्देशन के लिए एक पृष्ठ बदलते हैं",
"tag-mw-removed-redirect": "हटाया गया पुनर्निर्देशन",
"tag-mw-removed-redirect-description": "संपादन जो किसी मौजूदा रीडायरेक्ट को गैर रीडायरेक्ट में बदलता है",
"tag-mw-replace-description": "संपादन जिसने 90% से अधिक पृष्ट की सामग्री को हटा दिया",
"tag-mw-rollback": "प्रत्यापन्न",
"tag-mw-rollback-description": "संपादन जो रोलबैक लिंक का उपयोग करके पिछला संपादन वापस रोल करता है",
- "tag-mw-undo": "किए हुए कार्य को पूर्वत करना",
+ "tag-mw-undo": "à¤\95िà¤\8f हà¥\81à¤\8f à¤\95ारà¥\8dय à¤\95à¥\8b पà¥\82रà¥\8dववत à¤\95रना",
"tag-mw-undo-description": "संपादन जो पिछले लिंक का उपयोग करके पिछले संपादन को पूर्वत करता है",
"tags-title": "चिप्पियाँ",
"tags-intro": "यह पृष्ठ अर्थ सहित वह चिप्पियाँ दर्शाता है जिनका कोई तंत्रांश किसी संपादन पर निशान लगाने के लिए इस्तेमाल कर सकता है।",
"limitreport-expansiondepth": "उच्चतम विस्तार गहराई",
"limitreport-expensivefunctioncount": "महंगे पार्सर फंक्शनों की संख्या",
"expandtemplates": "साँचा विस्तार",
- "expand_templates_intro": "यह विशà¥\87ष पà¥\83षà¥\8dठपाठà¤\87नपà¥\81à¤\9f लà¥\87ता हà¥\88 à¤\94र सà¤à¥\80 साà¤\81à¤\9aà¥\8bà¤\82 à¤\95à¥\8b विसà¥\8dतà¥\83त à¤\95रता हà¥\88।\nयह <code><nowiki>{{</nowiki>#language:â\80¦}}</code> à¤\9cà¥\88सà¥\87 पारà¥\8dसर फà¤\82à¤\95à¥\8dशनà¥\8bà¤\82 à¤\94र\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> à¤\9cà¥\88सà¥\87 वà¥\87रियà¥\87बलà¥\8bà¤\82 à¤\95à¥\8b à¤à¥\80 विसà¥\8dतà¥\83त à¤\95रता हà¥\88।\nयह दà¥\8bहरà¥\87 à¤\95à¥\8bषà¥\8dठà¤\95à¥\8bà¤\82 मà¥\87à¤\82 दिया लगभग सब कुछ विस्तृत करता है।",
+ "expand_templates_intro": "यह विशà¥\87ष पà¥\83षà¥\8dठविà¤\95िपाठà¥\8dय à¤\87नपà¥\81à¤\9f लà¥\87ता हà¥\88 à¤\94र à¤\89सà¤\95à¥\87 à¤à¥\80तर à¤\95à¥\87 सà¤à¥\80 साà¤\81à¤\9aà¥\8bà¤\82 à¤\95à¥\8b विसà¥\8dतà¥\83त à¤\95रता हà¥\88।\nयह <code><nowiki>{{</nowiki>#language:â\80¦}}</code> à¤\9cà¥\88सà¥\87 पारà¥\8dसर फ़à¤\82à¤\95à¥\8dशनà¥\8dस à¤\94र\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> à¤\9cà¥\88सà¥\87 परिवरà¥\8dतनशà¥\80ल मानà¥\8bà¤\82 à¤\95ा à¤à¥\80 विसà¥\8dतà¥\8dरण à¤\95रता हà¥\88।\nयह दà¥\8bहरà¥\87 à¤\95à¥\8bषà¥\8dठà¤\95à¥\8bà¤\82 मà¥\87à¤\82 पà¥\8dरà¥\87षित लगभग सब कुछ विस्तृत करता है।",
"expand_templates_title": "कन्टेक्स्ट शीर्षक, जैसे {{FULLPAGENAME}} आदि के लिए:",
- "expand_templates_input": "à¤\87नपà¥\81à¤\9f पाठ:",
+ "expand_templates_input": "विà¤\95िपाठà¥\8dय à¤\87नपà¥\81à¤\9f à¤\95रà¥\87à¤\82:",
"expand_templates_output": "परिणाम",
"expand_templates_xml_output": "XML आउटपुट",
"expand_templates_html_output": "सीधे-साधा एचटीएमएल आउटपुट",
"expand_templates_preview": "झलक",
"expand_templates_preview_fail_html": "<strong>अगर यह वैध पूर्ववावलोकन प्रयास है, तो फिर से प्रयास कीजिए।</strong>\nअगर इससे काम न बने तो [[Special:UserLogout|सत्रांत होकर]] पुनः से लॉग इन करें और जाँच करें की आपका ब्राउज़र इस साइट पर कुकीज को अनुमत करता है।",
"expand_templates_preview_fail_html_anon": "<em>चूँकि {{SITENAME}} सीधे-साधे रूप से एचटीएमएल-सक्षम है और आप लॉग्ड इन नहीं है, पूर्वावलोकन छिपा हुआ है ताकि सम्भावित जावास्क्रिप्ट हमले को रोका सके।</em>\n\n<strong>अगर यह वैध पूर्वावलोकन प्रयास है तो कृपया [[Special:UserLogin|लॉग इन करके]] फिर से प्रयास कीजिए।</strong>",
- "expand_templates_input_missing": "आपको कम से कम कुछ पाठ्य प्रदान करने पड़ेंगे।",
+ "expand_templates_input_missing": "à¤\86पà¤\95à¥\8b à¤\95म सà¥\87 à¤\95म à¤\95à¥\81à¤\9b विà¤\95à¥\80पाठà¥\8dय पà¥\8dरदान à¤\95रनà¥\87 पड़à¥\87à¤\82à¤\97à¥\87।",
"pagelanguage": "पृष्ठ भाषा बदलें",
"pagelang-name": "पृष्ठ",
"pagelang-language": "भाषा",
"restrictionsfield-badip": "अमान्य आईपी पते या सीमा: $1",
"restrictionsfield-label": "अनुमत आईपी सीमा:",
"restrictionsfield-help": "एक आईपी पता या सीडीआरएल सीमा प्रति पंक्ति में लिखें। सभी को सक्रिय करने के लिए <pre>0.0.0.0/0::/0</pre> का उपयोग करें।",
+ "edit-error-short": "त्रुटि: $1",
+ "edit-error-long": "त्रुटि:\n\n$1",
"revid": "अवतरण $1",
"pageid": "पेज आईडी $1",
"rawhtml-notallowed": "<html> टैग का उपयोग सामान्य पन्नों के बाहर नहीं किया जा सकता है।",
"logentry-import-interwiki": "$1 {{GENDER:$2|uvezao|uvezla}} je $3 s drugog wikija",
"logentry-import-interwiki-details": "$1 {{GENDER:$2|uvezao|uvezla}} je $3 sa $5 ($4 {{PLURAL:$4|izmjena|izmjene|izmjena}})",
"logentry-merge-merge": "$1 je {{GENDER:$2|spojio|spojila}} $3 s $4 (izmjene do $5)",
- "logentry-move-move": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4",
+ "logentry-move-move": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4",
"logentry-move-move-noredirect": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4 bez preusmjeravanja",
"logentry-move-move_redir": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4 preko preusmjeravanja",
"logentry-move-move_redir-noredirect": "$1 je {{GENDER:$2|premjestio|premjestila}} stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja",
"restrictionsfield-badip": "Érvénytelen IP-cím vagy -tartomány: $1",
"restrictionsfield-label": "Engedélyezett IP-tartományok:",
"restrictionsfield-help": "Egy IP-cím vagy CIDR-tartomány soronként. Minden engedélyezéséhez használd a következő tartományokat:\n<pre>\n0.0.0.0/0\n::/0\n</pre>",
+ "edit-error-short": "Hiba: $1",
+ "edit-error-long": "Hibák:\n\n$1",
"revid": "$1 változat",
"pageid": "$1 lapazonosító",
"rawhtml-notallowed": "<html> címkék nem használhatók normál lapokon kívül.",
"uncategorized-categories-exceptionlist": " # Contine un lista de categorias que non debe esser mentionate sur Special:UncategorizedCategories. Un per linea, comenciante con \"*\". Lineas que comencia con un altere character (incluse spatios) es ignorate. Usa \"#\" for commentos.",
"unusedcategories": "Categorias non usate",
"unusedimages": "Imagines non usate",
- "wantedcategories": "Categorias plus demandate",
- "wantedpages": "Paginas plus demandate",
+ "wantedcategories": "Categorias desirate",
+ "wantedpages": "Paginas desirate",
"wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas verso le quales solmente redirectiones liga. Pro un lista del paginas non existente verso le quales redirectiones liga, vide [[{{#special:BrokenRedirects}}|le lista de redirectiones rupte]].",
"wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
"wantedfiles": "Files desirate",
"restrictionsfield-badip": "Adresse o intervallo IP non valide: $1",
"restrictionsfield-label": "Intervallos IP permittite:",
"restrictionsfield-help": "Un adresse IP o intervallo CIDR per linea. Pro activar toto, usa:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Error: $1",
+ "edit-error-long": "Errores:\n\n$1",
"revid": "version $1",
"pageid": "ID de pagina $1",
"rawhtml-notallowed": "Etiquettas <html> non pote esser usate foras de paginas normal.",
"Tusholi"
]
},
- "tog-underline": "ТIаÑ\85Ñ\8cожаÑ\8fÑ\80га кIала така хьакхар:",
- "tog-hideminor": "Къайладаккха з|амига дола хувцамаш керда хувцамашта юкъера",
+ "tog-underline": "ТIаÑ\82овжама кIала така хьакхар:",
+ "tog-hideminor": "Къайладаккха зӏамига дола хувцамаш керда хувцамашта юкъера",
"tog-hidepatrolled": "Къайладаккха ха дера чакхдаьнна дола (патрулированные) хувцамаш керда хувцамашта юкъера",
"tog-newpageshidepatrolled": "Къайлаяьккха ха дера чакхъянна йола (патрулированные) оагIонаш керда оагIонашта юкъера",
"tog-hidecategorization": "Къайлаяха оагӀонай категореш",
"tog-watchlisthideminor": "Са зем бара хьаязъяьр чура зIамига хувцамаш къайладаха",
"tog-watchlisthideliu": "Шоаш хьабайзийта доакъошхоша хувцамаш къайладаха зем бара хьаязъяьр чура",
"tog-watchlisthideanons": "ЦIийоацача доакъошхоша хувцамаш къайладаха зем бара хьаязъяьр чура",
- "tog-watchlisthidepatrolled": "Ха даь дола хувцамаш къайладаха зем бара хьаязъяьр чура",
- "tog-watchlisthidecategorization": "Ð\9aÑ\8aайлаÑ\8fккÑ\85а оагÓ\80онай каÑ\82егоÑ\80еÑ\88",
+ "tog-watchlisthidepatrolled": "Ха даь дола хувцамаш къайладаха зéма хьаязъяьра чу",
+ "tog-watchlisthidecategorization": "Ð\9eагÓ\80онаÑ\88Ñ\82а оагIаÑ\82аÑ\88 Ñ\82оÑ\85аÑ\80 кÑ\8aайладаккÑ\85а",
"tog-ccmeonemails": "Сона хьатIаахийта аз доакъашхошта дIадахийта дола каьхатий кепаш",
"tog-diffonly": "Ма гойта оагIон чулоацам ши верси вIашидистара кIал",
- "tog-showhiddencats": "Ð\93ойÑ\82а кÑ\8aайла каÑ\82егоÑ\80еш",
- "tog-useeditwarning": "Хоамбе хьадаь хувцамаш дӀа ца яздеш аз болх дӀаберзабеча ханахь",
+ "tog-showhiddencats": "Ð\93ойÑ\82а кÑ\8aайла оагIаÑ\82аш",
+ "tog-useeditwarning": "Хоамбе хьадаь хувцамаш дӀа а ца яздеш аз болх дӀаберзабеча хана",
"underline-always": "Даиман",
"underline-never": "ЦIаккха",
"underline-default": "Браузера гIирсаш тоаяраш лелае",
"sunday": "кIиранди",
"monday": "оршот",
"tuesday": "шинара",
- "wednesday": "Ð\9aхаьра",
+ "wednesday": "кхаьра",
"thursday": "éра",
"friday": "пӀаьраска",
"saturday": "шоатта",
"sun": "кIиранди",
- "mon": "Ð\9eÑ\80Ñ\88",
- "tue": "Шин",
+ "mon": "оÑ\80Ñ\88оÑ\82",
+ "tue": "шинара",
"wed": "кхаьра",
"thu": "ера",
- "fri": "Ð\9fI",
+ "fri": "пIаÑ\8cÑ\80аÑ\81ка",
"sat": "шоатта",
"january": "АгIой",
"february": "Саь-кур",
"anontalk": "Дувца оттадар",
"navigation": "Навигаци",
"and": " а",
- "faq": "Ð\9aТХ",
+ "faq": "Ð\9aÐ\9bХ",
"actions": "Ардамаш",
"namespaces": "ЦIерий аренаш",
"variants": "Эршаш",
"badaccess-groups": "ДIадийха ардам кхоачашде могаш ба алхха доакъашхой {{PLURAL:$2|1=тоабан «$1»|укх тоабаш чура: $1}}",
"versionrequired": "Эшаш я $1 версех йола MediaWiki",
"versionrequiredtext": "Укх оагIонца болх бергболаш $1 версех йола MediaWiki эша. Хьажа [[Special:Version|програмни Iалашдарах бола хоамага]].",
- "ok": "Мега",
+ "ok": "Мег",
"retrievedfrom": "Хьаст — «$1»",
"youhavenewmessages": "{{PLURAL:$3|Хьога денад}} $1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|Хьога кхаьчад}} $1 {{PLURAL:$3|1=$3 доакъашхочунгара|$3 доакъашхоштагара|1=кхыволча доакъашхочунгара}} ($2).",
"showtoc": "хьахьокха",
"hidetoc": "хьулде",
"collapsible-collapse": "дIахьулде",
- "collapsible-expand": "доаржаде",
- "confirmable-yes": "XӀа-а",
+ "collapsible-expand": "хьадоаржаде",
+ "confirmable-yes": "XӀау",
"confirmable-no": "A",
"thisisdeleted": "БIаргтоха е юхаметтаоттае $1?",
"viewdeleted": "Хьажа $1?",
"yourpasswordagain": "Юхаязде къайладIоагIа:",
"createacct-yourpasswordagain": "Бакъйе пароль",
"createacct-yourpasswordagain-ph": "Кхы цхьаькхаза Ӏочуязъе пароль",
- "userlogin-remembermypassword": "Ража чу виса",
+ "userlogin-remembermypassword": "Ражача чувиса",
"yourdomainname": "Хьа нана-цIа:",
"login": "Чувала/яла",
"nav-login-createaccount": "Шоаш довзийтар / Дагара йоазув кхоллар",
"logout": "Аравала/яла",
"userlogout": "Аравала/яла",
- "notloggedin": "Ð\9eаÑ\88 Ñ\88оаÑ\88 довзийÑ\82адаÑ\86 Ñ\81иÑ\81Ñ\82еман",
- "userlogin-noaccount": "Ð\94оакÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\83Ñ\87еÑ\82а Ñ\8fздаÑ\80 диÑ\86е Ñ\85Ñ\8cа?",
- "userlogin-joinproject": "ДIахоттале {{SITENAME}}аца",
+ "notloggedin": "РажаÑ\87а Ñ\87Ñ\83даÑ\8cннадаÑ\86 Ñ\88о",
+ "userlogin-noaccount": "Ð\94агаÑ\80а йоазÑ\83в деÑ\86е Ñ\85Ñ\8cога?",
+ "userlogin-joinproject": "ДIахоттале {{SITENAME}} яхача проекта",
"createaccount": "Дагара йоазув хьакхолла",
"userlogin-resetpassword-link": "Тӏеракхосса езий хьа пароль?",
- "userlogin-helplink2": "Раже чувалара новкъостал",
+ "userlogin-helplink2": "Ражеча чувалара новкъостал",
"userlogin-createanother": "Кхыдола дагара йоазув хьакхолла",
"createacct-emailoptional": "Электронни поштан цӀай (ца яздича мегаш да)",
"createacct-email-ph": "Ӏочуязде хьай электронни поштан цӀай",
"linkstoimage": "{{PLURAL:$1|1=ТIехьайоагIача $1 оагIо тIахьожаву|ТIехьайоагIача $1 оагIонаш тIахьожаву}} укх файла тIа:",
"linkstoimage-more": "$1-ннел дуккхагIа {{PLURAL:$1|оагIув}} я укх файла тIахьожавеш.\nУкх хьаязъяьра чу белгалъяй цу файла {{PLURAL:$1|алхха $1 тIахьожаярг}}.\nТIакхача йиш я иштта [[Special:WhatLinksHere/$2|бIарчча хьаязъяьра]].",
"nolinkstoimage": "Укх файла тӏатовжаш оагӏонаш яц.",
- "linkstoimage-redirect": "$1 (Ñ\84айлови дÓ\80а-Ñ\81аÑ\85Ñ\8cожадар) $2",
+ "linkstoimage-redirect": "$1 (Ñ\84айлови дÓ\80а-Ñ\85Ñ\8cа Ñ\85Ñ\8cожавар) $2",
"sharedupload": "Ер файл $1 чура я, из пайда эцаш лелае мегаш я кхыйола проекташ чу.",
"sharedupload-desc-here": "Ер файл $1 чура я, иштта кхыйола проекташ чу пайда эца аьттув болаш я.\nЦун [$2 сурт оттадара оагIон] хоам кIалхахь хьабоалабаьб.",
"filepage-nofile": "Ишта цӀи йола файл йоацаш я.",
"whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайоагIа|хьалхайоагIараш}} $1",
"whatlinkshere-next": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
"whatlinkshere-links": "← тӏатовжамаш",
- "whatlinkshere-hideredirs": "$1 дÓ\8fа-Ñ\81аÑ\85Ñ\8cожадаÑ\8cраш",
+ "whatlinkshere-hideredirs": "$1 дÓ\80а-Ñ\85Ñ\8cа Ñ\85Ñ\8cожавараш",
"whatlinkshere-hidetrans": "$1 юкъедоаладаьраш",
"whatlinkshere-hidelinks": "$1 тӏатовжамаш",
"whatlinkshere-hideimages": "$1 файлай тIахьожаяргаш",
"exif-languagecode": "Мотт",
"exif-iimcategory": "Категори",
"exif-orientation-1": "гIаьхьа",
+ "exif-exposureprogram-1": "Кара",
"exif-scenecapturetype-1": "Ландшафт",
"exif-scenecapturetype-2": "Сага сурт",
"exif-iimcategory-edu": "Дешарца Iомадар",
"logentry-delete-restore": "$1 доакъашхочо {{GENDER:$2|юхаметтаоттаяьй}} $3 яха оагIув ($4)",
"logentry-delete-revision": "$1 цIи йолча доакъашхочо {{GENDER:$2|хийцай}} $3 яхача оагIон {{PLURAL:$5|$5 версин|1=версин}} гуш хилар: $4",
"revdelete-content-hid": "чулоацам къайлабаьккхаб",
- "logentry-move-move": "$1 доакъашхочо $3 яхача оагӏон {{GENDER:$2|цӀи хийцай}} $4 яхача цӏерах",
+ "logentry-move-move": "$1 доакъашхочо $3 яхача оагӏон {{GENDER:$2|цӀи хийцай}} укх цӏерах → $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀи хийцай}} $3 → $4 дӀа-сахьожадар ца дуташ.",
"logentry-move-move_redir": "$1 доакъашхочо $3 яхача оагIон {{GENDER:$2|цIи хийцай}} укхунах → $4 дӀа-сахьожадара тIагIолла.",
"logentry-patrol-patrol-auto": "$1 ше-ше {{GENDER:$2|ха даь техкай}} $3 оагIон верси $4",
"title-invalid-interwiki": "La demandita pagino-titulo kontenas inter-wiki-ala ligilo, olqua ne povas uzesar en tituli.",
"title-invalid-talk-namespace": "La demandita pagino-titulo referas a diskuto-pagino, qua ne existas.",
"title-invalid-characters": "La demandita pagino-titulo kontenas ne-valida literi: \"$1\".",
- "perfcached": "La sequanta datumi esas kashizita* e li povus ne aktualigesar nuntempe. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
+ "title-invalid-magic-tilde": "La pagino demandata kontenas nevalida 'magiala' intersequo di tildi =>(<nowiki>~~~</nowiki>).",
+ "title-invalid-too-long": "La pagino demandata esas tre longa. Ol mustas esar min longa kam $1 {{PLURAL:$1|byte|bytes}} segun la kodexado UTF-8.",
+ "title-invalid-leading-colon": "La pagino demandata kontenas nevalida bi-punto en lua komenco.",
+ "perfcached": "La sequanta datumi esas en la memorio dil komputero, e povas esar aktualigita. Admaxime {{PLURAL:$1|un rezulto|$1 rezulti}} esas disponebla che la 'cache' dil komputero.",
+ "perfcachedts": "La sequanta datumi esas en la memorio dil komputero, ed aktualigesis lastafoye ye $1. Admaxime {{PLURAL:$4|un rezulto|$4 rezulti}} esas disponebla che la memorio 'cache'.",
+ "querypage-no-updates": "Ica pagino ne povas aktualigesar.\nLa datumi en ol ne rinovigesos.",
"viewsource": "Vidar font-kodo",
"viewsource-title": "Videz la fonto/fonti por $1",
"actionthrottled": "Agado limitizita",
+ "actionthrottledtext": "Por preventar trouzo kun vandala skopo, tu ne povas facar ica agado plurafoye dum kurta periodo di tempo, e tu superiris ica limito.\nVoluntez probar ol itere, pos kelka minuti.",
"protectedpagetext": "Ta pagino protektesis por preventar redaktadi od altra agi.",
"viewsourcetext": "Vu povas vidar ed kopiar la fonto-kodexo di ta pagino.",
"viewyourtext": "Vu darfas vidar e kopiar la fonto di <strong>vua redakti</strong> ad ita pagino.",
"protectedinterface": "Ita pagino provizas 'interface' texto por la programaro en ita wiki, ed esas protektita por preventar mis-uzo.\nPor introduktar o chanjar tradukaji di la wiki-i, voluntez vizitar [https://translatewiki.net/ translatewiki.net], la projeto qua provizas tradukaji a MediaWiki.",
"editinginterface": "<strong>Averto:</strong> Vu redaktas pagino qua uzesas por provizar 'interface' texto di la programaro.\nChanji a ta pagino chanjos la aspekto di pagini por altra uzeri di ta wiki.",
"translateinterface": "Por introduktar o chanjar tradukaji en omna wiki-i, voluntez uzar [https://translatewiki.net/ translatewiki.net], la komuna projeto MediaWiki.",
+ "cascadeprotected": "Ica pagino protektesis kontre l'editado pro ke lua kontenajo transskribesas en la sequanta {{PLURAL:$1|pagino, qua esas|pagini, qui esas}} protektita kande selektesis por ol la formo di \"protekto en kaskado\":\n$2",
"namespaceprotected": "Vu ne es permisita redaktar pagini en la nomaro <strong>$1</strong>.",
"customcssprotected": "Vu ne es permisita redaktar ita CSS pagino nam ol kontenas personal ajustaji di altra uzero.",
"customjsprotected": "Vu ne es permisita redaktar ita JavaScript pagino nam ol kontenas personal ajustaji di altra uzero.",
"titleprotected": "Ita titulo es protektita de kreado da [[User:$1|$1]].\nLa motivo es <em>$2</em>.",
"filereadonlyerror": "La dosiero \"$1\" ne es modifikebla nam la depozeyo di dosieri \"$2\" esas nur lektebla.\n\nLa sistem-administrero qua klozis ol ofris ita klarigo: \"$3\".",
"invalidtitle-knownnamespace": "Ne-valida titulo kun nomaro \"$2\" e texto \"$3\"",
+ "invalidtitle-unknownnamespace": "Nevalida titulo kun nekonocata nombro di limitilo 'namespace' $1 e texto \"$2\"",
"exception-nologin": "Vu ne eniris",
"exception-nologin-text": "Voluntez enirar konto por acesar la pagino od ago.",
"exception-nologin-text-manual": "Voluntez $1 por acesar ta pagino od ago.",
"nosuchusershort": "Esas nula uzero \"$1\".\nKontrolez la espelado.",
"nouserspecified": "Vu mustas specigar uzantonomo.",
"login-userblocked": "Ta uzero es interdiktita. Enirado ne permisesas.",
- "wrongpassword": "La skribita pasovorto esis nekorekta. Voluntez probar itere.",
+ "wrongpassword": "La skribita pasovorto ne esas korekta.\nVoluntez probar itere.",
"wrongpasswordempty": "Vu ne skribis pasovorto. Probez nove.",
"passwordtooshort": "Pasovorti mustas kontenar adminime {{PLURAL:$1|1 signo|$1 signi}}.",
"passwordtoolong": "Pasovorti ne mustas esar plu longa kam {{PLURAL:$1|1 litero|$1 literi}}.",
"password-login-forbidden": "La uzo di ita uzeronomo e pasovorto es interdiktita.",
"mailmypassword": "Sendez nova pasovorto per e-posto",
"passwordremindertitle": "Nova provizora pasovorto por {{SITENAME}}",
+ "passwordremindertext": "Ulu (probable tu, del IP-adreso $1) solicitis nova pasovorto de {{SITENAME}} ($4). Provizora pasovorto por l'uzero \"$2\" kreesis e sendesis a \"$3\". Se to esis tua volunto, tu mustas facar 'log in' e selektar nova pasovorto nun.\nTua tempala pasovorto expiros en {{PLURAL:$5|un dio|$5 dii}}.\n\nSe altra persono facis la demando, o se tu rimemoris tua anciena pasovorto e ne bezonas modifikar ol, tu povas ignorar ica mesajo e durar l'uzo di tua anciena pasovorto.",
"noemail": "Ne esas e-adreso konservita por la uzero \"$1\".",
"noemailcreate": "Tu mustas informar valida e-posto",
"passwordsent": "Nova pasovorto sendesis a la e-adreso registragita por \"$1\".\nVoluntez enirar altrafoye pos recevar ol.",
"eauthentsent": "E-posto por konfirmar l'informi sendesis a la e-posto indikita da vu.\nAnte ke altra e-posto sendesos a vua konto, vu mustos sequar l'instrukti mencionata en la e-posto, por konfirmar ke la konto fakte esas vua.",
"throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
"mailerror": "Eroro sendante posto: $1",
- "acct_creation_throttle_hit": "Vizitanti ad ica wiki uzante vua IP adreso kreis {{PLURAL:$1|1 konto|$1 konti}} ye la antea dio (24 hori), qua esas la maximo permisata. Konseque, vizitanti uzante ca IP adreso ne pluse povas krear konti prezente.",
+ "acct_creation_throttle_hit": "Viziteri di ica wiki uzante vua IP-adreso kreis {{PLURAL:$1|1 konto|$1 konti}} dum la sequanta $2, quo esas la maxima quanto permisata dum ta periodo. Konseque, viziteri uzante ica IP-adreso ne pluse povas krear nova konti prezente.",
"emailauthenticated": "Vua e-postal adreso autentikigesis ye $2, ye $3.",
"emailnotauthenticated": "Vua e-postal adreso ne ja autentikigesas.\nNula mesaji sendesos por irga di la sequanta funcioni.",
"noemailprefs": "Prizentez e-postal adreso en vua preferaji por disponar ita funcioni.",
"emailconfirmlink": "Konfirmez vua adreso di e-posto",
+ "invalidemailaddress": "La e-posto informata ne povas aceptesar, pro ke ol semblas havar nevalida formato.\nVoluntez skribar korekte la e-posto, od efacar l'informo.",
"cannotchangeemail": "E-posto-adreso dil konto ne povas chanjesar ye ta wikio.",
"emaildisabled": "Ita ret-sito ne povas sendar e-mesaji.",
"accountcreated": "Konto kreesis",
"login-abort-generic": "Vua eniro-probo faliis - Cesigita",
"login-migrated-generic": "Vua konto esas migrata, e vua uzeronomo ne plus existas che ita wikio.",
"loginlanguagelabel": "Linguo: $1",
+ "suspicious-userlogout": "Vua demando pri ekiro ('log out') refuzesis, pro ke ol semblas sendesir de retnavigilo krevita, o de 'proxy' antee konservita.",
"pt-login": "Enirar",
"pt-login-button": "Enirar",
"pt-login-continue-button": "Durez enirar",
"botpasswords-label-delete": "Efacar",
"botpasswords-label-resetpassword": "Sendez nova pasovorto per e-posto",
"botpasswords-label-grants": "Uzebla grantaji:",
+ "botpasswords-label-grants-column": "Permisita",
+ "botpasswords-bad-appid": "La nomo \"$1\" por la bot-programo esas nevalida.",
+ "botpasswords-updated-title": "La pasovorto dil 'bot' aktualigesis",
"resetpass-submit-loggedin": "Chanjar pasovorto",
"resetpass-submit-cancel": "Anular",
"resetpass-wrong-oldpass": "Nevalida provizora od aktuala pasovorto.\nForsan vu ja chanjis vua pasovorto o demandis nova provizora pasovorto.",
"resetpass-temp-emailed": "Vu eniris uzante provizora pasovorto.\nPor parkompletigar enirado, vu mustas krear nova pasovorto hike:",
"resetpass-temp-password": "Provizora pasovorto:",
"passwordreset": "Sendez nova pasovorto per e-posto",
+ "passwordreset-text-one": "Garnisez ica formulario por recevar provizora pasovorto per vua e-posto.",
"passwordreset-username": "Uzantonomo:",
+ "passwordreset-domain": "Interreto-domeno:",
+ "passwordreset-email": "E-postal adreso:",
+ "passwordreset-emailtitle": "Detali pri la konto en {{SITENAME}}",
+ "passwordreset-emailtext-ip": "Ulu (probable vu, de la IP-adresO $1) demandis la remplaso di la pasovorto por {{SITENAME}} ($4). La sequanta {{PLURAL:$3|konto|konti}} esas asociita kun ta adreso di e-posto:\n\n$2\n\nIca tempala {{PLURAL:$3| pasovorto|pasovorti}} perdos la valideso pos {{PLURAL:$5|un dio|$5 dii}}.\nTu mustas facar 'log in' e selektar nova pasovorto nemediate. Se altra persono facis ica demando, o se vu rimemoris l'antea pasovorto e ne pluse bezonas modifikor ol, vu povas ignorar ica mesajo e durar l'uzo dil antea pasovorto.",
+ "passwordreset-emailelement": "Uzantonomo:\n$1\n\nProvizora pasovorto:\n$2",
+ "passwordreset-emailsentemail": "Se ica e-posto esas asociita kun vua konto, do la nova pasovorto sendesos a vu per e-posto.",
"passwordreset-invalidemail": "Ne-valida e-posto-adreso",
"passwordreset-nodata": "Nek uzeronomo nek e-posto-adreso esis provizita",
"changeemail": "Chanjar od efacar e-postal adreso",
"anoneditwarning": "<strong>Averto:</strong> Vu ne eniris.\nVua IP-adreso esos videbla publike se vu redaktos. Se vu <strong>[$1 enirus]</strong> od <strong>[$2 kreus konto]</strong>, vua redakti atribuesos a vua uzeronomo, kune kun altra bonaji.",
"anonpreviewwarning": "<em>Vu ne eniris. Konservar chanji registragos vua IP-adreso en la redakto-historio di ta pagino.</em>",
"missingcommenttext": "Voluntez, skribez komento sube.",
- "summary-preview": "Prevido di la rezumo:",
+ "summary-preview": "Previdado di la rezumo:",
+ "subject-preview": "Previdado di la temo:",
+ "previewerrortext": "Eventis eroro kande on probis krear previdado pri vua modifikuri.",
"blockedtitle": "La uzero esas blokusita",
"blockedtext": "<strong>Vua uzantonomo od IP-adreso blokusesis.</strong>\n\n$1 blokusis vu.\nLa motivo esis <em>$2</em>.\n\n* Komenco di la blokuso: $8\n* Fino di la blokuso: $6\n* Motivo dil blokuso: $7\n\nVu povas kontaktar $1 od altra [[{{MediaWiki:Grouppage-sysop}}|administrero]] por diskutar la blokuso.\nVu ne povas uzar \"email this user\" por sendar e-posto ecepte se valida email indikesis en tua [[Special:Preferences|preferaji dil uzanto]], e se vu ne blokusesis por uzar ol.\nVua nuna IP-adreso esas $3, e la ID dil blokuso esas #$5.\nVoluntez inkluzor omna detali adsupre en omna demandi quin vu facos.",
+ "autoblockedtext": "<strong>Vua uzantonomo od IP-adreso blokusesis.</strong>\n\n$1 blokusis vu.\nLa motivo esis <em>$2</em>.\n\n* Komenco di la blokuso: $8\n* Fino di la blokuso: $6\n* Motivo dil blokuso: $7\n\nVu povas kontaktar $1 od altra [[{{MediaWiki:Grouppage-sysop}}|administrero]] por diskutar la blokuso.\nVu ne povas uzar \"email this user\" por sendar e-posto ecepte se valida email indikesis en tua [[Special:Preferences|preferaji dil uzanto]], e se vu ne blokusesis por uzar ol.\nVua nuna IP-adreso esas $3, e la ID dil blokuso esas #$5.\nVoluntez inkluzor omna detali adsupre en omna demandi quin vu facos.",
"blockednoreason": "nula motivo donesis",
"whitelistedittext": "Vu mustas $1 por redaktar pagini.",
"nosuchsectiontitle": "On ne povis trovar la seciono",
"recentchangeslinked-feed": "Skyldar breytingar",
"recentchangeslinked-toolbox": "Skyldar breytingar",
"recentchangeslinked-title": "Breytingar tengdar \"$1\"",
- "recentchangeslinked-summary": "Þetta er listi yfir nýlega gerðar breytingar á síðum sem tengt er í frá tilgreindri síðu (eða á meðlimum úr tilgreindum flokki).\nSíður á [[Special:Watchlist|vaktlistanum þínum]] eru '''feitletraðar'''.",
+ "recentchangeslinked-summary": "Settu inn heiti á síðu til að sjá breytingar á síðum sem tengt er í frá þeirri síðu. (Til að sjá meðlimi í ákveðnum flokki, settu inn Flokkur:Nafn á flokki). \nBreytingar á síðum á [[Special:Watchlist|vaktlistanum þínum]] eru <strong>feitletraðar</strong>.",
"recentchangeslinked-page": "Síðutitill:",
"recentchangeslinked-to": "Sýna breytingar á síðum sem tengjast uppgefinni síðu í staðinn",
"recentchanges-page-added-to-category": "[[:$1]] bætt við flokk",
"pageinfo-article-id": "Einkennisnúmer síðunnar",
"pageinfo-language": "Tungumál síðunnar",
"pageinfo-language-change": "breyta",
+ "pageinfo-content-model": "Efnislíkan síðu",
"pageinfo-content-model-change": "breyta",
"pageinfo-robot-policy": "Attriðaskráning af vélmennum",
"pageinfo-robot-index": "Heimilað",
"version-libraries-license": "Notkunarleyfi",
"version-libraries-description": "Lýsing",
"version-libraries-authors": "Höfundar",
+ "redirect": "Endurbeining miðað við skrá, notanda, síðu, útgáfu eða innskráningarauðkenni",
"redirect-submit": "Áfram",
"redirect-lookup": "Fletta upp:",
"redirect-value": "Gildi:",
"Greis",
"Pierpao",
"Sakretsu",
- "Yiyi"
+ "Yiyi",
+ "Manvydasz"
]
},
"tog-underline": "Sottolinea i collegamenti:",
"lockmanager-fail-closelock": "Non riuscita chiusura del file di blocco per \"$1\".",
"lockmanager-fail-deletelock": "Non riuscita cancellazione del file di blocco per \"$1\".",
"lockmanager-fail-acquirelock": "Non riuscita acquisizione blocco per \"$1\".",
- "lockmanager-fail-openlock": "Non riuscita apertura del file di blocco per \"$1\".",
+ "lockmanager-fail-openlock": "Non riuscita apertura del file di blocco per \"$1\". Assicurati che la cartella per i caricamenti sia configurata correttamente e il web server abbia i permessi per scriverci. Vedi https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory per ulteriori informazioni.",
"lockmanager-fail-releaselock": "Non riuscito rilascio del blocco per \"$1\".",
"lockmanager-fail-db-bucket": "Impossibile contattare i necessari database di blocco nel bucket $1.",
"lockmanager-fail-db-release": "Impossibile revocare i blocchi sul database $1.",
"restrictionsfield-badip": "Indirizzo IP o intervallo non valido: $1",
"restrictionsfield-label": "Intervalli IP consentiti:",
"restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Errore: $1",
+ "edit-error-long": "Errori:\n\n$1",
"revid": "versione $1",
"pageid": "ID della pagina $1",
"rawhtml-notallowed": "I tag <html> non possono essere utilizzati al di fuori delle normali pagine.",
"doubleredirects": "二重転送",
"doubleredirectstext": "このページでは、転送ページへの転送ページを列挙します。\n最初の転送ページ、その転送先にある転送ページ、さらにその転送先にあるページ、それぞれへのリンクを各行に表示しています。多くの場合は最終的な転送先が「正しい」転送先であり、最初の転送ページの転送先は最終的な転送先に直接向けるべきです。\n<del>取り消し線</del>が入った項目は解決済みです。",
"double-redirect-fixed-move": "[[$1]]を移動しました。\n自動的に更新され、今後は[[$2]]に転送されます。",
- "double-redirect-fixed-maintenance": "メンテナンス作業の一環として[[$1]]から[[$2]]への二重転送を自動的に修正します。",
+ "double-redirect-fixed-maintenance": "メンテナンス作業の一環として[[$1]]から[[$2]]への二重転送を自動的に修正します",
"double-redirect-fixer": "転送修正係",
"brokenredirects": "迷子のリダイレクト",
"brokenredirectstext": "以下は、存在しないページへのリダイレクトの一覧です:",
"restrictionsfield-badip": "無効な IP アドレス、またはその範囲: $1",
"restrictionsfield-label": "許可する IP の範囲:",
"restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合: <pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "エラー: $1",
+ "edit-error-long": "エラー:\n\n\n\n$1",
"revid": "版 $1",
"pageid": "ページID $1",
"rawhtml-notallowed": "<html>タグは通常ページ以外では使用できません。",
"restriction-level-all": "모두",
"undelete": "삭제된 문서 보기",
"undeletepage": "삭제된 문서를 보거나 되살리기",
- "undeletepagetitle": "'''아래는 [[:$1|$1]] 판의 삭제된 판입니다'''.",
+ "undeletepagetitle": "<strong>아래 내용은 [[:$1|$1]] 문서의 삭제된 판입니다</strong>.",
"viewdeletedpage": "삭제된 문서 보기",
"undeletepagetext": "다음 {{PLURAL:$1|문서는 삭제되었지만|문서 $1개는 삭제되었지만}} 아직 보관되어 있고 되살릴 수 있습니다.\n보관된 문서는 주기적으로 삭제될 것입니다.",
"undelete-fieldset-title": "문서 되살리기",
"watchlistedit-raw-done": "주시문서 목록을 새로 고쳤습니다.",
"watchlistedit-raw-added": "{{PLURAL:$1|문서 1개|문서 $1개}}를 추가했습니다:",
"watchlistedit-raw-removed": "{{PLURAL:$1|문서 1개|문서 $1개}}를 제거했습니다:",
- "watchlistedit-clear-title": "주시문서 목록 지우기",
- "watchlistedit-clear-legend": "주시문서 목록 지우기",
+ "watchlistedit-clear-title": "주시문서 목록 비우기",
+ "watchlistedit-clear-legend": "주시문서 목록 비우기",
"watchlistedit-clear-explain": "모든 문서가 주시문서 목록에서 제거됩니다",
"watchlistedit-clear-titles": "제목:",
"watchlistedit-clear-submit": "주시목록 문서 지우기 (이는 영구적입니다!)",
"restrictionsfield-badip": "유효하지 않은 IP 주소나 대역: $1",
"restrictionsfield-label": "허용된 IP 대역:",
"restrictionsfield-help": "줄 단위의 하나의 IP 주소 또는 CIDR 대역입니다. 모든 곳에 적용하려면, 다음을 사용하세요:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "오류: $1",
+ "edit-error-long": "오류:\n\n$1",
"revid": "$1 판",
"pageid": "페이지 ID $1",
"rawhtml-notallowed": "<html> 태그는 일반 페이지 밖에서는 사용할 수 없습니다.",
"password-change-forbidden": "Dir däerft op dëser Wiki Passwierder net änneren.",
"externaldberror": "Entweder ass e Feeler bei der externer Authentifizéierung geschitt, oder Dir däerft Ären externe Benotzerkont net aktualiséieren.",
"login": "Aloggen",
- "login-security": "Iwwerpréift Är Idnetitéit",
+ "login-security": "Iwwerpréift Är Identitéit",
"nav-login-createaccount": "Aloggen / Benotzerkont uleeën",
"logout": "Ofmellen",
"userlogout": "Ausloggen",
"doubleredirects": "Duebel Viruleedungen",
"doubleredirectstext": "Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden.\nAn all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d'Zil vun der zweeter Viruleedung, déi normalerweis déi \"richteg\" Zilsäit ass, op déi déi éischt Viruleedung hilinke soll.\n<del>Duerchgestrachen</del> Linke goufe scho sou verännert datt déi duebel Viruleedung opgeléist ass.",
"double-redirect-fixed-move": "[[$1]] gouf geréckelt.\nD'Säit gouf automatesch aktualiséiert an et ass elo eng Viruleedung op [[$2]].",
- "double-redirect-fixed-maintenance": "Duebel Viruleedung vu(n) [[$1]] op [[$2]] gouf automatesch an engem 'maintenance job' gefléckt.",
+ "double-redirect-fixed-maintenance": "Duebel Viruleedung vu(n) [[$1]] op [[$2]] gouf automatesch an engem 'maintenance job' gefléckt",
"double-redirect-fixer": "Verbesserung vu Viruleedungen",
"brokenredirects": "Futtis Viruleedungen",
"brokenredirectstext": "Dës Viruleedunge linken op Säiten déi et net gëtt.",
"userjsispublic": "DEnkt drun: Op JavaScript-Ënnersäite solle keng vertraulech Informatioune stoe well se vun anere Benotzer kënne gesi ginn.",
"restrictionsfield-badip": "Net valabel IP-Adress oder Beräich: $1",
"restrictionsfield-label": "Zougeloossen IP-Beräicher:",
+ "edit-error-short": "Feeler: $1",
+ "edit-error-long": "Feeler:\n\n$1",
"revid": "Versioun $1",
"gotointerwiki": "{{SITENAME}} verloossen",
"gotointerwiki-invalid": "De spezifizéierten Titel ass net valabel.",
"Macofe",
"Nemo bis",
"S4b1nuz E.656",
- "Luensu1959"
+ "Luensu1959",
+ "Feipìn"
]
},
"tog-underline": "Sotolìnnia i colegaménti",
- "tog-hideminor": "Ascondi e modìfiche minoî inte ùrtime modìfiche",
+ "tog-hideminor": "Ascondi e modìfiche minôri inte ùrtime modìfiche",
"tog-hidepatrolled": "Ascondi e modìfiche verificæ inte ùrtime modìfiche",
- "tog-newpageshidepatrolled": "Ascondi e pàgine verificæ da l'elénco de pàgine ciù recénti",
+ "tog-newpageshidepatrolled": "Ascondi e pàgine verifichæ da l'elénco de pàgine ciù recénti",
"tog-hidecategorization": "Ascondi a categorizasión de pàgine",
- "tog-extendwatchlist": "mostra tùtte e modìfiche di öservæ speciâli, no sôlo l'ùrtima",
- "tog-usenewrc": "Amùggia pe pà gina e modìfiche inte ùrtime modìfiche e sotta öservaçión",
+ "tog-extendwatchlist": "mostra tùtte e modìfiche di òservæ speciâli, no solo l'ùrtima",
+ "tog-usenewrc": "Amùggia pe pà gina e modìfiche inte ùrtime modìfiche e sotta òservaçión",
"tog-numberheadings": "Numeraçión aotomàtica di tìtoli de seçión",
- "tog-showtoolbar": "Fanni védde a bâra di strumenti de modìfica",
+ "tog-showtoolbar": "Mostra a bâra di strumenti de modìfica",
"tog-editondblclick": "Modìfica de pàgine tràmite dóggio clic",
"tog-editsectiononrightclick": "Permetti de modificâ e seçioìn co-o clic drîto in sciô tìtolo",
"tog-watchcreations": "Azonzi e pàgine che mi crêo e i files che càrego a-i öservæ speciâli",
- "tog-watchdefault": "Azonzi e pàgine e i files che mi modìffico a-a mæ lista sotta öservaçión",
- "tog-watchmoves": "Azonzi e pà gine e i files che mescio a-a mæ lista sotta öservaçión",
- "tog-watchdeletion": "Azonzi e pàgine e i files che scancello a-a mæ lista sotta öservaçión",
- "tog-watchuploads": "Azonzi i nêuvi files che mi métto sotta öservaçión",
- "tog-watchrollback": "Azonzi a-a mæ lista sotta öservaçión e pàgine dôve ò fæto in rollback",
+ "tog-watchdefault": "Azonzi e pàgine e i file che mi modìffico a-a mæ lista sotta òservaçión",
+ "tog-watchmoves": "Azonzi e pà gine e i files che mescio a-a mæ lista sotta òservaçión",
+ "tog-watchdeletion": "Azonzi e pàgine e i file che scancèllo a-a mæ lista sotta òservaçión",
+ "tog-watchuploads": "Azonzi i nêuvi files che mi métto sotta òservaçión",
+ "tog-watchrollback": "Azonzi a-a mæ lista sotta òservaçión e pàgine dôve ò fæto in rollback",
"tog-minordefault": "Indica de longo cómme menô tùtte e modìfiche",
"tog-previewontop": "Mostra l'anteprìmma de d'âto a-a cazélla de modìfica",
"tog-previewonfirst": "Mostra l'anteprìmma in sciâ prìmma modìfica",
- "tog-enotifwatchlistpages": "Famme savéi via e-mail quande 'na pàgina ò in file inta mæ lista de öservaçión a vegne cangiâ.",
+ "tog-enotifwatchlistpages": "Famme savéi via e-mail quande 'na pàgina ò 'n file inta mæ lista de òservaçión a vegne cangiâ.",
"tog-enotifusertalkpages": "Màndime 'n'e-mail se gh'é de modìfiche inta mæ pàgina de discusción.",
"tog-enotifminoredits": "Màndime 'n'email ascì pe-e modìfiche menoî de pàgine e di files",
"tog-enotifrevealaddr": "Mostra o mæ indirìsso inte emails de notìfica",
"tog-fancysig": "Tratta a firma cómme wikitesto (sénsa n'ingancio aotomàtico)",
"tog-uselivepreview": "Abìlita a fonçión de l'anteprìmma in diretta",
"tog-forceeditsummary": "Domàndame a confèrma se o cànpo de l'ògetto o l'é vêuo",
- "tog-watchlisthideown": "Ascondi e mæ modìfiche da-a lista sotta öservaçión",
- "tog-watchlisthidebots": "Ascondi e modìfiche di bot da-a lista sotta öservaçión",
- "tog-watchlisthideminor": "Ascondi e modìfiche minoî da-a lista sotta öservaçión",
- "tog-watchlisthideliu": "Ascondi e modìfiche di uténti intræ da-a lista sotta öservaçión",
+ "tog-watchlisthideown": "Ascondi e mæ modìfiche da-a lista sotta òservaçión",
+ "tog-watchlisthidebots": "Ascondi e modìfiche di bot da-a lista sotta òservaçión",
+ "tog-watchlisthideminor": "Ascondi e modìfiche minôri da-a lista sotta òservaçión",
+ "tog-watchlisthideliu": "Ascondi e modìfiche di uténti intræ da-a lista sotta òservaçión",
"tog-watchlistreloadautomatically": "Recàrega aotomaticaménte a lista di öservæ quande vegne cangiòu in filtro (ghe veu o JavaScript)",
- "tog-watchlisthideanons": "Ascondi e modìfiche di uténti sénsa nómme da-a lista sotta öservaçión",
- "tog-watchlisthidepatrolled": "Ascondi e modìfiche za controlæ da-a lista sotta öservaçión",
+ "tog-watchlisthideanons": "Ascondi e modìfiche di uténti sénsa nómme da-a lista sotta òservaçión",
+ "tog-watchlisthidepatrolled": "Ascondi e modìfiche za controlæ da-a lista sotta òservaçión",
"tog-watchlisthidecategorization": "Ascondi a categorizasión de pàgine",
"tog-ccmeonemails": "Màndime 'na còpia de e-mails che mi mando a-i âtri uténti",
"tog-diffonly": "No mostrâ o contegnûo da pàgina sotta o confronto fra verscioìn",
"about": "Informaçioìn",
"article": "Vôxe",
"newwindow": "(O s'arve inte 'n âtro barcon)",
- "cancel": "Scancella",
+ "cancel": "Scancélla",
"moredotdotdot": "Âtro...",
"morenotlisted": "Questa lista a poriæ ese incompleta.",
"mypage": "Pàgina",
"tagline": "Da {{SITENAME}}",
"help": "Agiùtto",
"search": "Riçèrca",
- "search-ignored-headings": " #<!-- lascia questa riga esattamente comm'a l'è --> <pre>\n# Elenco de intestaçioin che saian ignoræ da-a riçerca.\n# E modifiche a questa paggina saian effettive non apen-a a paggina a saiâ indiçizâ.\n# Ti poeu forçâ a re-indiçizzaçion de 'na paggina effettoando una modifica nulla.\n# A scintasci a l'è a seguente:\n# * Tutto da-o carattere \"#\" a-a fin da riga o l'è un commento\n# * Tutte e righe non voeue son e intestaçioin esatte da ignorâ, maiuscolo/minuscolo e tutto\nNotte\nVoxe correlæ\nCollegamenti esterni\n #</pre> <!-- lascia questa riga esattamente comm'a l'è -->",
+ "search-ignored-headings": " #<!-- lascia questa riga ezatamente com'a l'é --> <pre>\n# Elenco de intestaçioin che saian ignoræ da-a riçerca.\n# E modifiche a questa pagina saian effetive non apenn-a a pagina a saiâ indicizâ.\n# Ti peu forsâ a re-indicizaçion de 'na pagina efetoando 'na modifica nulla.\n# A scintasci a l'è a segoente:\n# * Tutto da-o carattere \"#\" a-a fin da riga o l'è un commento\n# * Tutte e righe non veue són e intestaçioin ezatte da ignorâ, maioscolo/minuscolo e tutto\nNòtte\nVôxe corelæ\nColegamenti estèrni\n #</pre> <!-- lascia quésta riga ezattamente com'a l'è -->",
"searchbutton": "Riçèrca",
"go": "Vanni",
"searcharticle": "Vanni",
- "history": "Stöia da pàgina",
+ "history": "Cronologîa da pàgina",
"history_short": "Stöia",
"history_small": "Stoia",
"updatedmarker": "modificâ da-a mæ urtima vixita",
"tool-link-userrights": "Modiffica groppi {{GENDER:$1|utente}}",
"tool-link-userrights-readonly": "Vixualizza groppi {{GENDER:$1|utente}}",
"tool-link-emailuser": "Manda un'e-mail a questo {{GENDER:$1|utente}}",
- "imagepage": "Vizualizza a paggina do file",
+ "imagepage": "Mostra a pagina do file",
"mediawikipage": "Vizualizza o messaggio",
"templatepage": "Vizualizza o modello",
- "viewhelppage": "Vizualizza a paggina d'agiutto",
- "categorypage": "Veddi a paggina da categoria",
- "viewtalkpage": "Amia a paggina de discuscion",
+ "viewhelppage": "Móstra a pagina d'agiutto",
+ "categorypage": "Veddi a pagina da categorîa",
+ "viewtalkpage": "Amîa a pagina de discusción",
"otherlanguages": "In âtre léngoe",
"redirectedfrom": "(Rendirissou da $1)",
- "redirectpagesub": "Paggina de rindirissamento",
+ "redirectpagesub": "Pagina de rindirissamento",
"redirectto": "Rendirissa a:",
"lastmodifiedat": "Sta pagina a l'è stæta cangiâ l'urtima votta o $1 a $2.",
- "viewcount": "'Sta paggina a l'è stæta vista {{PLURAL:$1|solo 'na vòtta|$1 vòtte}}.",
+ "viewcount": "Questa pagina a l'è stæta vista {{PLURAL:$1|solo 'na vòtta|$1 vòtte}}.",
"protectedpage": "Pàgina protètta",
"jumpto": "Vanni a:",
"jumptonavigation": "navegaçión",
- "jumptosearch": "çerca",
- "view-pool-error": "Scuza ma a-o momento i server sono stracarreghi.\nTroppi utenti çercan d' amiâ sta paggina.\nAspeta quarche menuto primma de çercâ torna d'accede a sta pagina.\n\n$1",
+ "jumptosearch": "çèrca",
+ "view-pool-error": "Ne rincresce, a-o momento i server sono soviacareghi.\nTròppi utenti çercan d'amiâ sta pagina.\nAspeta quarche menûto primma de çercâ d'acedde torna a sta pagina.\n\n$1",
"generic-pool-error": "Scuza ma a-o momento i server sono stracarreghi.\nTroppi utenti çercan d' amiâ sta risorsa.\nAspeta quarche menuto primma de çercâ torna d'accede a sta risorsa.",
"pool-timeout": "Tempo descheito aspêtando o sblocco",
"pool-queuefull": "A coa do pool a l'è pin-a",
"badaccess-group0": "No ti g'hæ o permisso pe fâ quest'assion.",
"badaccess-groups": "L'assion che ti vêu fâ a l'è permissa solo a i ûtenti {{PLURAL:$2|do gruppo|de un de sti gruppi}}: $1.",
"versionrequired": "Ghe voeu a verscion $1 de MediaWiki",
- "versionrequiredtext": "Pe doeuviâ sta paggina ghe voeu a verscion $1 do software MediaWiki. Amia [[Special:Version|l'appoxita paggina]].",
+ "versionrequiredtext": "Pe deuviâ sta pagina ghe veu a versción $1 do software MediaWiki. Amîa [[Special:Version|l'appoxita paggina]].",
"ok": "D'accòrdio",
"retrievedfrom": "Estræto da \"$1\"",
"youhavenewmessages": "Ti gh'æ $1 ($2).",
"site-atom-feed": "Feed Atom de $1",
"page-rss-feed": "Feed RSS pe \"$1\"",
"page-atom-feed": "Feed Atom pe \"$1\"",
- "red-link-title": "$1 (ancon da scrîve)",
+ "red-link-title": "$1 (a pàgina no esiste)",
"sort-descending": "Ordine decrescente",
"sort-ascending": "Ordine crescente",
"nstab-main": "Pàgina",
"mainpage-nstab": "Pàgina prinçipâ",
"nosuchaction": "No se poeu",
"nosuchactiontext": "L'açion specificâ inta URL a no l'è vallida.\nÒ che t'hæ scrito mâ, ò che donque l'ea sbaliou l'ingancio.\nÒ magara gh'è 'na cammoa into software dœuviou da {{SITENAME}}.",
- "nosuchspecialpage": "Sta paggina speciale a no gh'è",
- "nospecialpagetext": "<strong>A paggina speciale domandâ a no l'è stæta riconosciua.</strong>\n\nA lista de paggine speciale vallide a se treuva in [[Special:SpecialPages|Lista de paggine speciale]].",
+ "nosuchspecialpage": "Sta pagina speciale a no gh'é",
+ "nospecialpagetext": "<strong>A paggina speciale domandâ a no l'è stæta riconosciûa.</strong>\n\nA lista de pagine speciale valide a se treuva in [[Special:SpecialPages|Lista de paggine speciale]].",
"error": "Errô",
"databaseerror": "Errô do database",
"databaseerror-text": "L'è ocorso un errô inte 'na çerchia in sciô database. \nO porriæ indicâ un bug into software.",
"databaseerror-function": "Fonsion: $1",
"databaseerror-error": "Errô: $1",
"transaction-duration-limit-exceeded": "Pe evitâ un ato ritardo de replica, questa opiaçion a l'è stæta interotta perché a duata do tempo de scrittua ($1) a l'ha superou o limmite de $2 {{PLURAL:$2|segondo|segondi}}.\nSe t'ê aproeuvo a cangiâ tante cose inte'na votta sola, proeuva invece a cangiâ poche cose in tante votte.",
- "laggedslavemode": "'''Attension:''' a paggina a porriæ no riportâ i aggiornamenti ciù reçenti.",
+ "laggedslavemode": "'''Atension:''' a pagina a poriéva no riportâ i agiornamenti ciù recenti.",
"readonly": "Database bloccòu",
"enterlockreason": "Scrivi o motivo do blocco, e 'na stimma de quande o saiâ rimosso",
"readonlytext": "Po-u momento o database o l'è bloccou a-e neuve azonte e modiffiche, foscia pe 'na manutension ordenaia do database, doppo a quæ o saiâ torna accescibile.\n\nL'amministratô ch'o l'ha misso o blocco o l'ha dæto sta spiegassion: $1",
"unexpected": "Valô imprevisto: \"$1\"=\"$2\".",
"formerror": "Errô: imposcibbile inviâ o formulaio",
"badarticleerror": "L'açion che ti te veu fâ a non l'è permissa in sta pagina.",
- "cannotdelete": "Non se peu scassâ a paggina ò o file \"$1\" . O porriæ ese za stæto scassòu da quarchedun atro.",
- "cannotdelete-title": "Imposcibbile scassâ a paggina \"$1\"",
+ "cannotdelete": "Non se peu scasâ a pagina ò o file \"$1\" . O poriéva êse za stæto scasòu da quarchedun atro.",
+ "cannotdelete-title": "Imposcibile scasâ a pagina \"$1\"",
"delete-hook-aborted": "A scassaxon a l'è stæta annullâ dall'hook.\nO no l'ha dæto arcun-a spiegassion.",
- "no-null-revision": "No l'è stæto poscibbile creâ una verscion nulla pe-a paggina \"$1\"",
+ "no-null-revision": "No l'è stæto poscibile creâ una verscion nulla pe-a pagina \"$1\"",
"badtitle": "O tìtolo o no l'è corretto.",
- "badtitletext": "O tittolo da paggina çercâ o l'è vêuo, sballiòu o con caratteri no accettæ, oppû o deriva da 'n errô inti collegamenti inter-lengoa o inter-wiki.",
- "title-invalid-empty": "O tittolo da paggina domandâ o l'è veuo ò o contene solo che-o nomme de un namespace.",
- "title-invalid-utf8": "O tittolo da paggina domandâ o conten una sequensa UTF-8 non vallida.",
- "title-invalid-interwiki": "O tittolo da paggina domandâ o conten un ingancio interwiki ch'o no poeu ese doeuviòu inti tittoli.",
- "title-invalid-talk-namespace": "O tittolo da paggina domandâ o fa rifeimento a 'na paggina de discusscion ch'a no peu existe.",
- "title-invalid-characters": "O tittolo da paggina domandâ o conten di caratteri invallidi: \"$1\".",
+ "badtitletext": "O titolo da pagina çercâ o l'è vêuo, sbaliòu o con caratteri no acetæ, opûre o deriva da 'n erô inti colegamenti inter-lengoa o inter-wiki.",
+ "title-invalid-empty": "O titolo da pagina domandâ o l'è veuo ò o contegne solo che-o nomme de'n namespace.",
+ "title-invalid-utf8": "O titolo da pagina domandâ o contegne 'na sequensa UTF-8 non valida.",
+ "title-invalid-interwiki": "O titolo da pagina domandâ o contegne un ingancio interwiki ch'o no peu ese adeuviòu inti titoli.",
+ "title-invalid-talk-namespace": "O titolo da pagina domandâ o fa rifeimento a 'na pagina de discusción ch'a no peu existe.",
+ "title-invalid-characters": "O titolo da pagina domandâ o contegne di caratteri no validi: \"$1\".",
"title-invalid-relative": "O tittolo o conten un percorso relativo (./, ../). Tæ tittoli no son vallidi, perché risultian soventi irazonzibbili quande gestii da-o navegatô de l'utente.",
- "title-invalid-magic-tilde": "O tittolo da paggina domandâ o no l'è vallido in quante o conten a succescion speciale de tirde (<nowiki>~~~</nowiki>).",
- "title-invalid-too-long": "O tittolo da paggina domandâ o l'è troppo longo. O no peu ese ciù longo de {{PLURAL:$1|byte}} in codifica UTF-8.",
- "title-invalid-leading-colon": "O tittolo da paggina domandâ o no l'è vallido perchè o comensa con doî ponti.",
+ "title-invalid-magic-tilde": "O titolo da pagina domandâ o no l'è valido in quante o contegne a sucesión speciale de tirde (<nowiki>~~~</nowiki>).",
+ "title-invalid-too-long": "O titolo da pagina domandâ o l'è troppo longo. O no peu ese ciù longo de {{PLURAL:$1|byte}} inta codifica UTF-8.",
+ "title-invalid-leading-colon": "O titolo da pagina domandâ o no l'è valido perché o l'incomensa con doî ponti.",
"perfcached": "I dæti chì apreuvo son estræti da 'na coppia ''cache'' do database, e porrieivan no ese agiornæ. Un mascimo de {{PLURAL:$1|un risultou o l'è disponibbile|$1 risultæ son disponibbili}} into cache.",
"perfcachedts": "I dæti chì apreuvo son estræti da una coppia ''cache'' do database, o quæ urtimo agiornamento o remonta a-o $1. Un mascimo de {{PLURAL:$4|un risultou o l'è disponibbile|$4 risultæ son disponibili}} into cache.",
- "querypage-no-updates": "I aggiornamenti da paggina son temporaniamente sospeixi. I dæti in essa contegnui no saian aggiornæ.",
+ "querypage-no-updates": "I agiornamenti da pagina son temporaniamente sospeixi. I dæti in lé contegnui no saian aggiornæ.",
"viewsource": "Veddi a fonte",
"viewsource-title": "Visualizza sorgente de $1",
"actionthrottled": "Assion ritardâ",
"actionthrottledtext": "Comme mesua de segueça contra o spam, l'esecuçion de çerte açioin a l'è limitâ a un nummero mascimo de votte inte 'n determinòu periodo de tempo, limmite che ti t'hæ superòu. Se prega de riprovâ tra quarche menuto.",
- "protectedpagetext": "Sta paggina a l'è stæta protezûa pe impedîne a modiffica ò di atre açioin.",
- "viewsourcetext": "L'è poscibbile amiâ e copiâ a sorgente de sta paggina.",
- "viewyourtext": "L'è poscibbile amiâ e copiâ a sorgente de <strong>teu modiffiche</strong> a sta paggina.",
- "protectedinterface": "Sta paggina a conten un elemento ch'o fa parte de l'interfaccia utente do software de sto scito e a l'è protetta pe evitâ poscibbili abuxi.\nPe azonze o modificâ e tradussioin vallide insce tutti i wiki, deuvia [https://translatewiki.net/ translatewiki.net], o progetto de localizzassion de MediaWiki.",
- "editinginterface": "<strong>Attension:</strong> o scrito de sta paggina o fa parte de l'interfaccia utente do software de questo scito. Tutte e modiffiche apportæ a questa paggina se riflettan in scî messaggi visualizzæ pe tutti i utenti in sce questo wiki.",
+ "protectedpagetext": "Sta pagina a l'è stæta protezûa pe impedîne a modifica ò atre açioin.",
+ "viewsourcetext": "L'è poscibile amiâ e copiâ a sorgente de sta pagina.",
+ "viewyourtext": "L'è poscibile amiâ e copiâ a sorgente de <strong>teu modifiche</strong> a sta pagina.",
+ "protectedinterface": "Sta pagina a contegne un elemento ch'o fa parte de l'interfaccia utente do software de sto scito e a l'è protetta pe evitâ poscibili abuxi.\nPe azonze o modificâ e tradusioìn valide insce tutti i wiki, deuvia [https://translatewiki.net/ translatewiki.net], o progetto de localizasión de MediaWiki.",
+ "editinginterface": "<strong>Atensión:</strong> o scrîto de sta pagina o fa parte de l'interfaccia utente do software de questo scito. Tutte e modifiche aportæ a questa pagina se riflèttan in scî mesaggi visualizæ pe tutti i utenti in sce questa wiki.",
"translateinterface": "Pe azonze ò modificâ e tradussioin vallide insce tutti i wiki, deuvia [https://translatewiki.net/ translatewiki.net], o progetto MediaWiki pe-a localizzassion.",
- "cascadeprotected": "Insce sta paggina no l'è poscibbile effettuâ modiffiche perché a l'è inclusa {{PLURAL:$1|inta paggina indicâ de seguito, ch'a l'è stæta protetta|inte paggine indicæ de seguito, ch'en stæte protette}} selessionando a protession \"ricorsciva\":\n$2",
+ "cascadeprotected": "Insce sta pagina no l'è poscibile efetoâ modifiche perché a l'è incluza {{PLURAL:$1|inta pagina indicâ dòppo, ch'a l'è stæta protètta|inte pagine indichæ de seguito, che son stæte protètte}} selesionando a protesion \"ricorsciva\":\n$2",
"namespaceprotected": "No ti g'hæ i permissi necessai pe modificâ e paggine do namespace '''$1'''.",
"customcssprotected": "No ti g'hæ i permissi pe cangiâ sta pagina CSS percose a conten e impostaçioin personale de 'n atro utente.",
"customjsprotected": "No ti gh'æ i permessi pe cangiâ sta pagina de JavaScript percose a contegne e impostaçioin personæ de 'n atro utente",
- "mycustomcssprotected": "No ti g'hæ i permissi pe cangiâ sta paggina CSS.",
- "mycustomjsprotected": "No ti g'hæ o permisso pe modificâ sta paggina JavaScript .",
+ "mycustomcssprotected": "No ti g'hæ i permissi pe cangiâ sta pagina CSS.",
+ "mycustomjsprotected": "No ti g'hæ o permisso pe modificâ sta pagina JavaScript.",
"myprivateinfoprotected": "No ti g'hæ o permisso pe modificâ i teu dæti personali.",
"mypreferencesprotected": "No ti g'hæ o permisso pe modificâ e teu preferense.",
"ns-specialprotected": "No se pœu modificâ e paggine speciali",
"welcomeuser": "Benvegnuo, $1!",
"welcomecreation-msg": "L'utensa a l'è stæta creâ correttamente.\nSe ti veu ti peu personalizzâ e [[Special:Preferences|preferençe de {{SITENAME}}]].",
"yourname": "Nomme",
- "userlogin-yourname": "Nómme uténte:",
- "userlogin-yourname-ph": "Scrivi o teu nomme utente",
+ "userlogin-yourname": "Nómme uténte",
+ "userlogin-yourname-ph": "Inserisci o teu nómme uténte",
"createacct-another-username-ph": "Scrivi o teu nomme utente",
"yourpassword": "Pòula segretta:",
- "userlogin-yourpassword": "Pòula segretta:",
+ "userlogin-yourpassword": "Ciâve",
"userlogin-yourpassword-ph": "Scrivi a tu poula segretta.",
"createacct-yourpassword-ph": "Scrivi 'na poula segretta.",
"yourpasswordagain": "Riscrivi a pòula segrétta:",
"notloggedin": "No t'ê introu",
"userlogin-noaccount": "No ti t'ê ancon registrou?",
"userlogin-joinproject": "Registrite insce {{SITENAME}}",
- "createaccount": "Crea 'n nêuvo account",
+ "createaccount": "Registrati",
"userlogin-resetpassword-link": "T'hæ miga ascordou a teu poula segretta?",
"userlogin-helplink2": "Agiutto pe intrâ",
"userlogin-loggedin": "Ti t'ê zà connesso comme {{GENDER:$1|$1}}.\nUsa o formulaio sottostante pe accede comme 'n atro utente.",
"createacct-reason": "Raxon",
"createacct-reason-ph": "Perché t'ê apreuvo a creâ un'atra utensa",
"createacct-reason-help": "Messaggio vixualizou into registro da creaçion de l'utença",
- "createacct-submit": "Crea a to utensa",
+ "createacct-submit": "Crea a teu utensa",
"createacct-another-submit": "Crea utensa",
"createacct-continue-submit": "Continnoa a creaçion de l'utença",
"createacct-another-continue-submit": "Continnoa a creaçion de l'utença",
"createacct-benefit-heading": "{{SITENAME}} o l'è realizzou da de gente comme ti.",
"createacct-benefit-body1": "{{PLURAL:$1|modìfica|modìfiche}}",
"createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgine}}",
- "createacct-benefit-body3": "{{PLURAL:$1|contribuiou|contribuioei}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|contribûtô recénte|contribûtoî recénti}}",
"badretype": "E paròlle d'ordine che t'hæ scrîo son despægie.",
"usernameinprogress": "A creassion de 'n utensa con questo nomme a l'è zà in corso.\nSe prega de aspêtâ.",
"userexists": "O nomme ûtente inserîo o l'è za doeuviao.<br />\nÇernine 'n âtro.",
"resetpass-expired": "A to poula segretta a l'è descheita. Pe piaxei impòstine un-a neuva pe intrâ.",
"resetpass-expired-soft": "A to poula segretta a l'è descheita e a g'ha da ese reimpostâ. Pe piaxei çèrnine un-a neuva òua ò clicca in sce \"{{int:authprovider-resetpass-skip-label}}\" pe reimpostâla ciu tardi.",
"resetpass-validity-soft": "A to poula segretta a no l'è vallida: $1\n\nPe piaxei çèrnine un-a neuva òua, ò clicca in sce \"{{int:authprovider-resetpass-skip-label}}\" pe reimpostala ciu tardi.",
- "passwordreset": "Reimposta a poula segretta",
+ "passwordreset": "Reimposta ciâve",
"passwordreset-text-one": "Compilla sto formulaio pe riçeive a teu poula segretta temporannia via e-mail.",
"passwordreset-text-many": "{{PLURAL:$1|Compilla un di campi pe riçeive una poula segretta temporannia via e-mail.}}",
"passwordreset-disabled": "A reimpostaçion de poule segrette a l'è stæta disabilitâ in sce sta wiki",
"media_tip": "Ingancio a file moltimediâ",
"sig_tip": "Firma con dæta e ôa",
"hr_tip": "Linnia orizontâ",
- "summary": "Oggetto:",
+ "summary": "Ògetto:",
"subject": "Sogetto:",
"minoredit": "Quésta a l'é 'na modìfica minô",
"watchthis": "Metti sotta oservaçion",
"action-purge": "aggiornâ questa paggina",
"nchanges": "$1 {{PLURAL:$1|modiffica|modiffiche}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'urtima vixita}}",
- "enhancedrc-history": "cronologia",
+ "enhancedrc-history": "cronologîa",
"recentchanges": "Ùrtime modìfiche",
"recentchanges-legend": "Opçioin di ùrtimi cangiaménti",
"recentchanges-summary": "Questa pagina a te mostra i cangiamenti ciu reçenti a-i contegnui do scito.",
"recentchanges-submit": "Fanni vedde",
"rcfilters-activefilters": "Filtri attivi",
"rcfilters-advancedfilters": "Filtri avançæ",
- "rcfilters-quickfilters": "Sarva e impostaçioin do filtro",
- "rcfilters-quickfilters-placeholder-title": "Nesciun ingancio sarvou ancon",
+ "rcfilters-quickfilters": "Sarva e impostaçioìn do filtro",
+ "rcfilters-quickfilters-placeholder-title": "Nisciun ingancio ancón sarvòu",
"rcfilters-quickfilters-placeholder-description": "Pe sarvâ e impostaçioin do to filtro e doeuviâle torna ciu tardi, clicca l'icona segnalibbro inte l'area \"Filtri attivi\" chì de sotta",
"rcfilters-savedqueries-defaultlabel": "Filtri sarvæ",
"rcfilters-savedqueries-rename": "Rinommina",
"rcfilters-savedqueries-unsetdefault": "Rimoeuvi comme predefinio",
"rcfilters-savedqueries-remove": "Leva",
"rcfilters-savedqueries-new-name-label": "Nomme",
- "rcfilters-savedqueries-apply-label": "Sarva impostaçioin",
+ "rcfilters-savedqueries-apply-label": "Sarva impostaçioìn",
"rcfilters-savedqueries-cancel-label": "Anulla",
"rcfilters-savedqueries-add-new-title": "Sarva e impostaçioin attoale do filtro",
"rcfilters-restore-default-filters": "Ripristina i filtri predefinii",
"rcfilters-clear-all-filters": "Netezza tutti i filtri",
- "rcfilters-search-placeholder": "Filtra i urtime modiffiche (navega ò comença a digitâ)",
+ "rcfilters-search-placeholder": "Filtra e urtime modifiche (navega ò comença a digitâ)",
"rcfilters-invalid-filter": "Filtro non vallido",
"rcfilters-empty-filter": "Nisciun filtro attivo. Se ghe vedde tutti i contributi.",
"rcfilters-filterlist-title": "Filtri",
- "rcfilters-filterlist-whatsthis": "Cos'o l'è sto chì?",
- "rcfilters-filterlist-feedbacklink": "Lascia un commento in sciâ noeuva fonçionalitæ sperimentale",
+ "rcfilters-filterlist-whatsthis": "C\81ómme fonsion-an?",
+ "rcfilters-filterlist-feedbacklink": "Dinne cöse ti ne pensi de quésti (neuvi) strumenti del filtro",
"rcfilters-highlightbutton-title": "Evidençia risultæ",
"rcfilters-highlightmenu-title": "Seleçion-a un cô",
"rcfilters-highlightmenu-help": "Seleçion-a un cô pe evidençiâ sta propietæ",
"rcfilters-filterlist-noresults": "Nisciun filtro atrovou",
"rcfilters-noresults-conflict": "Nisciun risultou trovou percose i critei de çerchia son in conflito",
"rcfilters-state-message-subset": "Sto filtro chì o no g'ha effetto percose i so risultæ son incluxi con quelli {{PLURAL:$2|do seguente filtro ciu ampio|di seguenti filtri ciu ampi}} (proeuva a evidençiâli pe distinguili): $1",
- "rcfilters-state-message-fullcoverage": "A seleçion de tutti i filtri inte 'n groppo l'è comme no seleçionâne manc'un, coscì che sto filtro o no fa effetto. O groppo o l'includde: $1",
+ "rcfilters-state-message-fullcoverage": "Seleçionâ tutti i filtri inte quésto gruppo l'è comme no seleçionâne nisciun, coscì che sto filtro o no l'à de effetto. O gruppo o l'includde: $1",
"rcfilters-filtergroup-authorship": "Aotô do contributo",
"rcfilters-filter-editsbyself-label": "E to modiffiche",
"rcfilters-filter-editsbyself-description": "I to contributi.",
"rcfilters-filter-editsbyother-label": "E modiffiche di atri",
"rcfilters-filter-editsbyother-description": "Tutte e modiffiche sarvo e to.",
- "rcfilters-filtergroup-userExpLevel": "Livello d'esperiença (solo pe i utenti registræ)",
- "rcfilters-filter-user-experience-level-registered-label": "Registrou",
- "rcfilters-filter-user-experience-level-registered-description": "Contributoî conessi.",
- "rcfilters-filter-user-experience-level-unregistered-label": "Non registrou",
- "rcfilters-filter-user-experience-level-unregistered-description": "Contributoî non conessi.",
+ "rcfilters-filtergroup-userExpLevel": "Livèllo d'esperiença (solo pe i utenti registræ)",
+ "rcfilters-filter-user-experience-level-registered-label": "Registròu",
+ "rcfilters-filter-user-experience-level-registered-description": "Contributoî conesci.",
+ "rcfilters-filter-user-experience-level-unregistered-label": "Non registròu",
+ "rcfilters-filter-user-experience-level-unregistered-description": "Contributoî non conesci.",
"rcfilters-filter-user-experience-level-newcomer-label": "Noeuvi utenti",
- "rcfilters-filter-user-experience-level-newcomer-description": "Meno de 10 modiffiche e 4 giorni d'attivitæ.",
+ "rcfilters-filter-user-experience-level-newcomer-description": "Meno de 10 modifiche e 4 giórni d'attivitæ.",
"rcfilters-filter-user-experience-level-learner-label": "Prinçipianti",
- "rcfilters-filter-user-experience-level-learner-description": "Con ciu esperiença di \"Noeuvi arrivæ\" ma meno che i \"Utenti esperti\".",
+ "rcfilters-filter-user-experience-level-learner-description": "Con ciu esperiença di \"Neuvi arrivæ\" ma meno che i \"Utenti asperti\".",
"rcfilters-filter-user-experience-level-experienced-label": "Utenti con esperiença",
"rcfilters-filter-user-experience-level-experienced-description": "Ciù de 30 giorni d'attivitæ e 500 modiffiche.",
"rcfilters-filtergroup-automated": "Contributi aotomattichi",
"rcfilters-typeofchange-conflicts-hideminor": "Questo filtro \"Tipo di modifica\" o l'è in conflito co-o filtro \"Modiffiche minoî\". Çerti tipi de modiffiche no poeuan ese indicæ comme \"minoî\".",
"rcfilters-filtergroup-lastRevision": "Urtima revixon",
"rcfilters-filter-lastrevision-label": "Urtima revixon",
- "rcfilters-filter-lastrevision-description": "I urtime modiffiche a 'na paggina.",
- "rcfilters-filter-previousrevision-label": "Verscioin precedente",
- "rcfilters-filter-previousrevision-description": "Tutte e modiffiche che no son l'urtima modiffica a-a paggina.",
+ "rcfilters-filter-lastrevision-description": "Solo e modiffiche ciu recenti a 'na pagina.",
+ "rcfilters-filter-previousrevision-label": "No l'urtima versción",
+ "rcfilters-filter-previousrevision-description": "Tutte e modifiche che no son \"l'urtima revixón\".",
"rcfilters-filter-excluded": "Escluzo",
"rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
"rcfilters-view-tags": "Modiffiche etichettæ",
"recentchangeslinked-feed": "Cangiamenti correlæ",
"recentchangeslinked-toolbox": "Cangiaménti corelæ",
"recentchangeslinked-title": "Modiffiche correlæ a \"$1\"",
- "recentchangeslinked-summary": "Sta pàgina a fâ védde i cangiaménti ciù recénti a-e pàgine colegæ a questa.\nE pàgine che t'æ in öservaçión inti [[Special:Watchlist|öservæ speciâli]] son in '''grascetto'''.",
+ "recentchangeslinked-summary": "Scrivi o nomme de 'na pagina pe vèdde i cangiamenti a-e pagine coleghæ a ò da quésta pagina. (Pe védde i menbri de 'na catgorîa, scrive Category:Nomme da catgorîa). Cangiamenti e-e pagine insce [[Special:Watchlist|your Watchlist]] són in <strong>bold</strong>.",
"recentchangeslinked-page": "Nómme da pàgina:",
"recentchangeslinked-to": "Fanni védde sôlo i cangiaménti a-e pàggine conligæ a-a pàggina specificâ",
"recentchanges-page-added-to-category": "[[:$1]] azonto a-a categoria",
"uploadlogpage": "Log di file caregæ",
"uploadlogpagetext": "De sotta gh'è una lista di urtimi file caregæ.\nConsultâ a [[Special:NewFiles|galleria di noeuvi file]] pe 'na vixon d'insemme.",
"filename": "Nomme do file",
- "filedesc": "Detaggi",
+ "filedesc": "Detàggi",
"fileuploadsummary": "Detaggi do file:",
"filereuploadsummary": "Cangiamenti a-o file:",
"filestatus": "Informaçioin in sciô copyright:",
"magiclink-tracking-isbn-desc": "Sta paggina a l'adoeuvia di inganci maggichi ISBN. Amia [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sciu comme exeguî a migraçion.",
"specialloguserlabel": "Açion effettuâ da:",
"speciallogtitlelabel": "Açion effettuâ sciu (tittolo da paggina ò {{ns:user}}:Nomme utente):",
- "log": "Log",
+ "log": "Regìstri",
"logeventslist-submit": "Mostra",
"all-logs-page": "Tùtti i regìstri pùblici",
"alllogstext": "Presentaçion combinaa de tutti i registri de {{SITENAME}}.\nL'è poscibile restrenze i critei de riçerca seleçionando o tipo de registro, l'utente ch'o l'ha eseguio l'açion, e/ò a pagina interessâ (entrambi i campi son senscibbili a-o maiuscolo/minuscolo).",
"emailuserfooter": "Questa email a l'è stæta {{GENDER:$1|inviâ}} da $1 a {{GENDER:$2|$2}} a traverso a fonçion \"{{int:emailuser}}\" insce {{SITENAME}}. Se {{GENDER:$2|ti ghe rispondi}}, a to email de risposta a saiâ spedia direttamente {{GENDER:$1|a-o|a-a}} mittente originâ, rivelando{{GENDER:$1|ghe}} o {{GENDER:$2|to}} adresso de posta elettronica.",
"usermessage-summary": "Messaggio de scistema",
"usermessage-editor": "Messaggê de scistema",
- "watchlist": "Sotta osservassion",
- "mywatchlist": "Sotta oservaçion",
+ "watchlist": "Òservòi speciâli",
+ "mywatchlist": "òservòi speciâli",
"watchlistfor2": "Pe $1 $2",
"nowatchlist": "A lista di öservæ speciali a l'è voeua.",
"watchlistanontext": "Pe vixualizzâ e modificâ l'elenco di öservæ l'è necessaio eseguî l'accesso.",
"blanknamespace": "(Prinçipâ)",
"contributions": "Contribuçioin {{GENDER:$1|utente}}",
"contributions-title": "Contribuçioìn de $1",
- "mycontris": "Contribuçioin",
- "anoncontribs": "Contribuçioin",
+ "mycontris": "contribûti",
+ "anoncontribs": "contribûti",
"contribsub2": "Pe {{GENDER:$3|$1}} ($2)",
"contributions-userdoesnotexist": "L'utença \"$1\" a no l'è registrâ.",
"nocontribs": "Cangi che soddisfan i critei de riçerca no se n'è atrovou.",
"sp-contributions-newbies": "Fanni védde sôlo e contribuçioìn di nêuvi utenti",
"sp-contributions-newbies-sub": "Pe i nêuvi ûtenti",
"sp-contributions-newbies-title": "Contribuçioin di noeuvi utenti",
- "sp-contributions-blocklog": "Blòcchi",
+ "sp-contributions-blocklog": "blòcchi",
"sp-contributions-suppresslog": "contributi {{GENDER:$1|utente}} soppresci",
"sp-contributions-deleted": "contributi {{GENDER:$1|utente}} scassæ",
"sp-contributions-uploads": "caregaménti",
"blocklist-nousertalk": "o no poeu modificâ a proppia pagina de discuscion",
"ipblocklist-empty": "A lista di blocchi a l'è veua.",
"ipblocklist-no-results": "L'adreçço IP ô o nomme utente domandou o no l'è bloccou.",
- "blocklink": "Blocca",
+ "blocklink": "blòcca",
"unblocklink": "sblòcca",
"change-blocklink": "càngia blòcco",
"contribslink": "Contribuçioìn",
"javascripttest": "Sperimentaçion JavaScript",
"javascripttest-pagetext-unknownaction": "Açion sconosciua \"$1\".",
"javascripttest-qunit-intro": "Amia insce mediawiki.org a [$1 documentaçion riguardante i test].",
- "tooltip-pt-userpage": "A {{GENDER:|to}} pagina utente",
+ "tooltip-pt-userpage": "A {{GENDER:|teu}} pàgina uténte",
"tooltip-pt-anonuserpage": "A paggina utente de questo adreçço IP che t'ê aproeuvo a modificâ comme",
"tooltip-pt-mytalk": "A {{GENDER:|teu}} pàgina de discusción",
"tooltip-pt-anontalk": "Discuscioin insce e modiffiche fæte da questo adreçço IP",
"tooltip-ca-nstab-mediawiki": "Veddi o messaggio de scistema",
"tooltip-ca-nstab-template": "Veddi o template",
"tooltip-ca-nstab-help": "Veddi a paggina d'agiûtto",
- "tooltip-ca-nstab-category": "Veddi a paggina da categorîa",
+ "tooltip-ca-nstab-category": "Véddi a pàgina da categorîa",
"tooltip-minoredit": "Marchilo comme cangiaménto minô",
"tooltip-save": "Sarva i cangiaménti",
"tooltip-publish": "Pubbrica e to modiffiche",
"pageinfo-not-current": "Spiaxente, ma l'è imposcibbile fornî quest'informaçion pe de vege verscioin.",
"pageinfo-header-basic": "Informaçion de base",
"pageinfo-header-edits": "Cronologia de modiffiche",
- "pageinfo-header-restrictions": "Proteçion da paggina",
+ "pageinfo-header-restrictions": "Proteçión da pàgina",
"pageinfo-header-properties": "Propiêtæ da pàgina",
"pageinfo-display-title": "Tittolo vixualizzou",
"pageinfo-default-sort": "Criteio d'ordenamento predefinio",
"pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|non redirect}})",
"pageinfo-firstuser": "Creatô da pàgina",
"pageinfo-firsttime": "Dæta de creaçion da paggina",
- "pageinfo-lastuser": "Urtimo contributô",
+ "pageinfo-lastuser": "Ùrtimo contributô",
"pageinfo-lasttime": "Dæta de l'urtima modiffica",
"pageinfo-edits": "Nummero totale de modiffiche",
"pageinfo-authors": "Nummero totale di aotoî distinti",
"permissionserrorstext": "Jūs neturite teisių tai daryti dėl {{PLURAL:$1|šios priežasties|šių priežasčių}}:",
"permissionserrorstext-withaction": "Jūs neturite leidimo $2 dėl {{PLURAL:$1|šios priežasties|šių priežasčių}}:",
"contentmodelediterror": "Jūs negalite redaguoti šios versijos, nes jos turinio modelis yra <code>$1</code>, kuris skiriasi nuo dabartinio puslapio turinio modelio, kuris yra <code>$2</code>.",
- "recreate-moveddeleted-warn": "'''Dėmesio: Jūs atkuriate puslapį, kuris anksčiau buvo ištrintas.'''\n\nTurėtumėte nuspręsti, ar reikėtų toliau redaguoti šį puslapį.\nJūsų patogumui čia pateikiamas šio puslapio šalinimų ir perkėlimų sąrašas:",
+ "recreate-moveddeleted-warn": "<strong>Dėmesio: Jūs atkuriate puslapį, kuris anksčiau buvo ištrintas.</strong>\n\nTurėtumėte nuspręsti, ar reikėtų toliau redaguoti šį puslapį.\nJūsų patogumui čia pateikiamas šio puslapio šalinimų ir perkėlimų sąrašas:",
"moveddeleted-notice": "Šis puslapis buvo ištrintas.\nŽemiau pateikiamas puslapio šalinimų, apsaugojimų, ir pervadinimų sąrašas.",
"moveddeleted-notice-recent": "Atsiprašome, šis puslapis buvo neseniai ištrintas (per pastarąsias 24 valandas). Žemiau pateikiama detali puslapio ištrynimo, rakinimo ir perkėlimo istorija.",
"log-fulllog": "Rodyti visą istoriją",
"search-file-match": "(atitinka rinkmenos turinį)",
"search-suggest": "Galbūt norėjote ieškoti: $1",
"search-rewritten": "Rodomi $1 rezultatai. Vietoje to ieškoti $2.",
- "search-interwiki-caption": "Dukterinių projektų rezultatai",
+ "search-interwiki-caption": "Kitų projektų rezultatai",
"search-interwiki-default": "Rezultatai iš $1:",
"search-interwiki-more": "(daugiau)",
"search-interwiki-more-results": "daugiau rezultatų",
"prefs-editwatchlist-clear": "Išvalyti stebimųjų sąrašą",
"prefs-watchlist-days": "Dienos rodomos stebimųjų sąraše:",
"prefs-watchlist-days-max": "Daugiausiai 7 {{PLURAL:$1|diena|dienos|dienų}}",
- "prefs-watchlist-edits": "Kiek daugiausia keitimų rodyti išplėstiniame stebimųjų sąraše:",
+ "prefs-watchlist-edits": "Kiek daugiausia keitimų rodyti stebimųjų sąraše:",
"prefs-watchlist-edits-max": "Didžiausias skaičius: 1000",
"prefs-watchlist-token": "Stebimųjų sąrašo raktas:",
"prefs-misc": "Įvairūs nustatymai",
"recentchangesdays-max": "(daugiausiai $1 {{PLURAL:$1|diena|dienos|dienų}})",
"recentchangescount": "Numatytasis rodomas keitimų skaičius:",
"prefs-help-recentchangescount": "Į tai įeina naujausi keitimai, puslapių istorijos ir specialiųjų veiksmų sąrašai.",
- "prefs-help-watchlist-token2": "Tai yra slaptas jūsų stebimųjų sąrašo raktas, skirtas žiniatinkliui.\nKiekvienas, kurį jį žino, gali skaityti jūsų stebimųjų puslapių sąrašą, taigi, juo nesidalinkite.\nJei reikia jį anuliuoti, [[Special:ResetTokens|spauskite čia]].",
+ "prefs-help-watchlist-token2": "Tai yra slaptas jūsų stebimųjų sąrašo raktas, skirtas žiniatinkliui.\nKiekvienas, kuris jį žino, gali skaityti jūsų stebimųjų puslapių sąrašą, taigi, juo nesidalinkite.\nJei norite, [[Special:ResetTokens|galite jį anuliuoti]].",
"savedprefs": "Nustatymai sėkmingai išsaugoti.",
"savedrights": "Naudotojo {{GENDER:$1|$1}} grupės buvo išsaugotos.",
"timezonelegend": "Laiko juosta:",
"email-blacklist-label": "Neleisti šiems vartotojams siųsti man el. laiškų:",
"prefs-searchoptions": "Paieška",
"prefs-namespaces": "Vardų sritys",
- "default": "pagal nutylėjimą",
+ "default": "numatytasis",
"prefs-files": "Failai",
"prefs-custom-css": "Asmeninis CSS",
"prefs-custom-js": "Asmeninis JavaSript",
"group-all": "(visi)",
"group-user-member": "{{GENDER:$1|naudotojas|naudotoja}}",
"group-autoconfirmed-member": "{{GENDER:$1|automatiškai patvirtintas naudotojas|automatiškai patvirtinta naudotoja}}",
- "group-bot-member": "Robotas",
- "group-sysop-member": "Administratorius",
- "group-bureaucrat-member": "Biurokratas",
+ "group-bot-member": "{{GENDER:$1|robotas}}",
+ "group-sysop-member": "{{GENDER:$1|administratorius|administratorė}}",
+ "group-bureaucrat-member": "{{GENDER:$1|biurokratas|biurokratė}}",
"group-suppress-member": "{{GENDER:$1|slopintojas|slopintoja}}",
"grouppage-user": "{{ns:project}}:Naudotojai",
"grouppage-autoconfirmed": "{{ns:project}}:Automatiškai patvirtinti naudotojai",
"recentchanges-legend": "Naujausių keitimų parinktys",
"recentchanges-summary": "Žemiau pateikiamas naujausių šio projekto pakeitimų sąrašas.",
"recentchanges-noresult": "Per nurodytą laiką atliktų keitimų, atitinkančių nurodytas sąlygas, nėra.",
- "recentchanges-feed-description": "Sekite pačius naujausius projekto keitimus šiame šaltinyje.",
+ "recentchanges-timeout": "Šios paieškos laikas baigėsi. Pabandykite ieškoti su kitais paieškos nustatymais.",
+ "recentchanges-network": "Dėl techninės klaidos, nepavyko įkelti rezultatų. Prašome pabandyti perkrauti puslapį.",
+ "recentchanges-feed-description": "Sekite pačius naujausius projekto keitimus šiame puslapyje.",
"recentchanges-label-newpage": "Šiuo keitimu sukurtas naujas puslapis",
"recentchanges-label-minor": "Tai smulkus pakeitimas",
"recentchanges-label-bot": "Šį keitimą atliko automatinė programa",
"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-legend-heading": "<strong>Santrumpų sąrašas:</strong>",
"rcfilters-other-review-tools": "Kiti peržiūros įrankiai",
+ "rcfilters-group-results-by-page": "Grupuoti rezultatus pagal puslapį",
"rcfilters-activefilters": "Aktyvūs filtrai",
"rcfilters-advancedfilters": "Detalūs filtrai",
+ "rcfilters-limit-title": "Rodyti rezultatų",
+ "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}, $2",
+ "rcfilters-date-popup-title": "Paieškos laikotarpis",
+ "rcfilters-days-title": "Pastarosios dienos",
+ "rcfilters-hours-title": "Pastarosios valandos",
+ "rcfilters-days-show-days": "$1 {{PLURAL:$1|dienos|dienų}}",
+ "rcfilters-days-show-hours": "$1 {{PLURAL:$1|valandos|valandų}}",
+ "rcfilters-highlighted-filters-list": "Paryškinta: $1",
"rcfilters-quickfilters": "Išsaugoti filtrai",
"rcfilters-quickfilters-placeholder-title": "Nėra išsaugotų filtrų",
+ "rcfilters-quickfilters-placeholder-description": "Norėdami išsaugoti filtravimo nustatymus ir vėliau juos naudoti, spustelėkite žymės piktogramą, esančią aktyvių filtrų srityje.",
"rcfilters-savedqueries-defaultlabel": "Išsaugoti filtrai",
"rcfilters-savedqueries-rename": "Pervadinti",
"rcfilters-savedqueries-setdefault": "Nustatyti kaip numatytą",
"rcfilters-savedqueries-unsetdefault": "Pašalinti kaip numatytą",
"rcfilters-savedqueries-remove": "Pašalinti",
"rcfilters-savedqueries-new-name-label": "Pavadinimas",
- "rcfilters-savedqueries-new-name-placeholder": "Apibūdinkite šio filtro tikslą.",
+ "rcfilters-savedqueries-new-name-placeholder": "Apibūdinkite šio filtro tikslą",
"rcfilters-savedqueries-apply-label": "Sukurti filtrą",
+ "rcfilters-savedqueries-apply-and-setdefault-label": "Sukurti numatytąjį filtrą",
"rcfilters-savedqueries-cancel-label": "Atšaukti",
- "rcfilters-savedqueries-add-new-title": "Išsaugoti dabartinius filtro nustatymus",
+ "rcfilters-savedqueries-add-new-title": "Išsaugoti dabartinius filtravimo nustatymus",
"rcfilters-restore-default-filters": "Atstatyti numatytuosius filtrus",
"rcfilters-clear-all-filters": "Valyti visus filtrus",
- "rcfilters-search-placeholder": "Filtruoti naujausius pakeitimus (naršykite arba pradėkite rašyti)",
+ "rcfilters-show-new-changes": "Rodyti naujausius keitimus",
+ "rcfilters-search-placeholder": "Filtruoti pakeitimus (naudokitės meniu arba ieškokite filtro pavadinimo)",
"rcfilters-invalid-filter": "Negalimas filtras",
- "rcfilters-empty-filter": "Nėra aktyvių filtrų. Rodomi visi indeliai.",
+ "rcfilters-empty-filter": "Nėra aktyvių filtrų. Rodomi visi indėliai.",
"rcfilters-filterlist-title": "Filtrai",
"rcfilters-filterlist-whatsthis": "Kaip tai veikia?",
"rcfilters-filterlist-feedbacklink": "Pateikite atsiliepimą apie šiuos (naujus) filtravimo įrankius",
"rcfilters-highlightmenu-help": "Pasirinkite spalvą šio elemento paryškinimui",
"rcfilters-filterlist-noresults": "Nerastas toks filtras",
"rcfilters-noresults-conflict": "Nerasta jokių rezultatų, nes paieškos kriterijai konfliktuoja",
+ "rcfilters-filtergroup-authorship": "Indėlio autorius",
"rcfilters-filter-editsbyself-label": "Jūsų keitimai",
"rcfilters-filter-editsbyself-description": "Jūsų keitimai.",
"rcfilters-filter-editsbyother-label": "Kitų keitimai",
"rcfilters-filter-editsbyother-description": "Visi keitimai, išskyrus jūsų.",
- "rcfilters-filtergroup-userExpLevel": "Patirties lygis (tik registruotiems vartotojams)",
+ "rcfilters-filtergroup-userExpLevel": "Vartotojo registracija ir patirtis",
"rcfilters-filter-user-experience-level-registered-label": "Registruoti",
"rcfilters-filter-user-experience-level-registered-description": "Prisijungę naudotojai.",
"rcfilters-filter-user-experience-level-unregistered-label": "Neregistruoti",
"rcfilters-filter-user-experience-level-unregistered-description": "Naudotojai, kurie nėra prisijungę.",
"rcfilters-filter-user-experience-level-newcomer-label": "Naujokai",
- "rcfilters-filter-user-experience-level-newcomer-description": "Mažiau nei 10 keitimų ir 4 dienų aktyvumo.",
+ "rcfilters-filter-user-experience-level-newcomer-description": "Registruoti naudotojai, turintys mažiau nei 10 keitimų ir 4 aktyvias dienas.",
"rcfilters-filter-user-experience-level-learner-label": "Mokiniai",
+ "rcfilters-filter-user-experience-level-learner-description": "Registruoti naudotojai, kurių patirties lygis yra tarp „Naujokų“ ir „Patyrusių vartotojų“",
"rcfilters-filter-user-experience-level-experienced-label": "Patyrę vartotojai",
- "rcfilters-filter-user-experience-level-experienced-description": "Daugiau nei 30 dienų veiklos ir 500 keitimų.",
+ "rcfilters-filter-user-experience-level-experienced-description": "Registruoti naudotojai, turintys daugiau nei 500 keitimų ir 30 dienų veiklos.",
"rcfilters-filtergroup-automated": "Automatiniai indeliai",
- "rcfilters-filter-bots-label": "Robotas",
+ "rcfilters-filter-bots-label": "Roboto",
"rcfilters-filter-bots-description": "Keitimai, atlikti automatinių įrankių.",
"rcfilters-filter-humans-label": "Žmogaus (ne roboto)",
"rcfilters-filter-humans-description": "Keitimai atlikti žmonių.",
"rcfilters-filter-unpatrolled-description": "Pakeitimai pažymėti kaip nestebimi.",
"rcfilters-filtergroup-significance": "Reikšmė",
"rcfilters-filter-minor-label": "Smulkūs pakeitimai",
- "rcfilters-filter-minor-description": "Keitimai, kuriuos autorius pažymėjo kaip mažus.",
+ "rcfilters-filter-minor-description": "Keitimai, kuriuos autorius pažymėjo kaip smulkius.",
"rcfilters-filter-major-label": "Nesmulkūs pakeitimai",
"rcfilters-filter-major-description": "Keitimai, nepažymėti kaip smulkūs.",
- "rcfilters-filtergroup-watchlist": "Puslapiai, įtraukti į stebimų sąrašą",
- "rcfilters-filter-watchlist-watched-label": "Stebimų sąraše",
- "rcfilters-filter-watchlist-watched-description": "Pakeitimai puslapiuose, jūsų Stebimųjų sąraše.",
- "rcfilters-filter-watchlist-watchednew-label": "Nauji Stebimųjų sąrašo pakeitimai",
- "rcfilters-filter-watchlist-notwatched-label": "Nėra Stebimųjų sąraše",
+ "rcfilters-filtergroup-watchlist": "Stebimi puslapiai",
+ "rcfilters-filter-watchlist-watched-label": "Stebimųjų sąraše",
+ "rcfilters-filter-watchlist-watched-description": "Pakeitimai puslapiuose, iš jūsų stebimųjų sąrašo.",
+ "rcfilters-filter-watchlist-watchednew-label": "Nauji stebimųjų sąrašo pakeitimai",
+ "rcfilters-filter-watchlist-watchednew-description": "Pakeitimai stebimuose puslapiuose, kuriuose neapsilankėte nuo tada, kai pakeitimai buvo paskelbti.",
+ "rcfilters-filter-watchlist-notwatched-label": "Nėra stebimųjų sąraše",
+ "rcfilters-filter-watchlist-notwatched-description": "Visi keitimai, išskyrus keitimus puslapiuose iš stebimųjų sąrašo.",
+ "rcfilters-filtergroup-watchlistactivity": "Stebimųjų sąrašo veikla",
"rcfilters-filter-watchlistactivity-unseen-label": "Neperžiūrėti pakeitimai",
+ "rcfilters-filter-watchlistactivity-unseen-description": "Pakeitimai puslapiuose, kuriuose neapsilankėte nuo tada, kai pakeitimai buvo paskelbti.",
"rcfilters-filter-watchlistactivity-seen-label": "Peržiūrėti pakeitimai",
+ "rcfilters-filter-watchlistactivity-seen-description": "Pakeitimai puslapiuose, kuriuose apsilankėte nuo tada, kai pakeitimai buvo paskelbti.",
"rcfilters-filtergroup-changetype": "Pakeitimo tipas",
"rcfilters-filter-pageedits-label": "Puslapių keitimai",
+ "rcfilters-filter-pageedits-description": "Keitimai viki turinyje, aptarimuose, kategorijų aprašymuose…",
"rcfilters-filter-newpages-label": "Puslapių sukūrimai",
"rcfilters-filter-newpages-description": "Keitimai, kurie sukuria naujus puslapius.",
"rcfilters-filter-categorization-label": "Kategorijų pakeitimai",
- "rcfilters-filter-categorization-description": "Įrašai puslapių, kurie yra pridedami ar pašalinami iš kategorijų.",
- "rcfilters-filter-logactions-label": "Įrašyti veiksmai",
+ "rcfilters-filter-categorization-description": "Keitimai, kuriais puslapiai yra pridedami ar pašalinami iš kategorijų.",
+ "rcfilters-filter-logactions-label": "Įrašyti į sąrašą veiksmai",
+ "rcfilters-filter-logactions-description": "Administravimo veiksmai, paskyrų sukūrimai, puslapių trynimai, įkėlimai…",
"rcfilters-filtergroup-lastRevision": "Naujausios versijos",
"rcfilters-filter-lastrevision-label": "Naujausia versija",
"rcfilters-filter-lastrevision-description": "Tik naujausias puslapio keitimas.",
- "rcfilters-filter-previousrevision-description": "Visi keitimai, kurie nėra naujausi puslapio keitimai.",
+ "rcfilters-filter-previousrevision-label": "Ne naujausia versija",
+ "rcfilters-filter-previousrevision-description": "Visi keitimai, kurie nėra „paskutinė versija“.",
+ "rcfilters-filter-excluded": "Įkelta",
+ "rcfilters-tag-prefix-namespace-inverted": "<strong>:ne</strong> $1",
+ "rcfilters-exclude-button-off": "Įkelti pasirinktus",
+ "rcfilters-exclude-button-on": "Įkeliami pasirinktieji",
"rcfilters-view-tags": "Pažymėti keitimai",
- "rcfilters-view-tags-help-icon-tooltip": "Sužinoti daugiau apie Pažymėtus pakeitimus",
+ "rcfilters-view-namespaces-tooltip": "Rodyti rezultatus pagal vardų sritį",
+ "rcfilters-view-tags-tooltip": "Rodyti rezultatus naudojančius keitimo žymes",
+ "rcfilters-view-return-to-default-tooltip": "Grįžti į pagrindinį filtravimo meniu",
+ "rcfilters-view-tags-help-icon-tooltip": "Sužinoti daugiau apie pažymėtus pakeitimus",
"rcfilters-liveupdates-button": "Gyvi atnaujinimai",
"rcfilters-liveupdates-button-title-on": "Išjungti gyvus atnaujinimus",
+ "rcfilters-liveupdates-button-title-off": "Įkelti naujus keitimus, kai jie įvyksta",
"rcfilters-watchlist-markseen-button": "Pažymėti visus pakeitimus kaip peržiūrėtus",
"rcfilters-watchlist-edit-watchlist-button": "Redaguoti stebimųjų sąrašą",
"rcfilters-watchlist-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra <strong>paryškinti</strong>.",
"rcfilters-preference-label": "Slėpti patobulintą naujausių pakeitimų versiją",
"rcfilters-filter-showlinkedfrom-label": "Rodyti pakeitimus puslapiuose, iš kurių esate nukreipti",
- "rcfilters-target-page-placeholder": "Įveskite puslapio pavadinimą",
+ "rcfilters-target-page-placeholder": "Įveskite puslapio pavadinimą (arba kategoriją)",
"rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant <strong>$3, $4</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
"rclistfromreset": "Nustatyti duomenų pasirinkimą iš naujo",
"rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
"show": "Rodyti",
"minoreditletter": "S",
"newpageletter": "N",
- "boteditletter": "r",
+ "boteditletter": "a",
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|stebintis naudotojas|stebintys naudotojai|stebinčių naudotojų}}]",
"rc_categories": "Riboti kategorijoms (atskirkite su „|“)",
"rc_categories_any": "Bet kuris iš pasirinktųjų",
"recentchangeslinked-feed": "Susiję keitimai",
"recentchangeslinked-toolbox": "Susiję keitimai",
"recentchangeslinked-title": "Su „$1“ susiję keitimai",
- "recentchangeslinked-summary": "Tai paskutinių keitimų, atliktų puslapiuose, į kuriuos yra nuoroda iš nurodyto puslapio (arba į nurodytos kategorijos narius), sąrašas.\nPuslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra '''paryškinti'''.",
+ "recentchangeslinked-summary": "Įveskite puslapio pavadinimą, jei norite žiūrėti keitimus, atliktus puslapiuose, į kuriuos yra nuoroda į arba iš nurodyto puslapio. (Jei norite žiūrėti nurodytos kategorijos narius, įveskite Kategorija:Kategorijos pavadinimas). Puslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra <strong>paryškinti</strong>.",
"recentchangeslinked-page": "Puslapio pavadinimas:",
"recentchangeslinked-to": "Rodyti su duotuoju puslapiu susijusių puslapių pakeitimus",
"recentchanges-page-added-to-category": "[[:$1]] pridėta prie kategorijos",
- "recentchanges-page-added-to-category-bundled": "[[:$1]] ir [[Special:WhatLinksHere/$1|{{PLURAL:$2|vienas puslapis|$2 puslapiai}}]] pridėti prie kategorijos",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] pridėti prie kategorijos, [[Special:WhatLinksHere/$1|šis puslapis yra įtrauktas su kitais puslapiais]]",
"recentchanges-page-removed-from-category": "[[:$1]] pašalinta iš kategorijos",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]] ir {{PLURAL:$2|vienas puslapis|$2 puslapiai}} pašalinti iš kategorijos",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] pašalinti iš kategorijos, [[Special:WhatLinksHere/$1|šis puslapis yra įtrauktas kartu su kitais puslapiais]]",
"autochange-username": "MediaWiki automatinis pakeitimas",
"upload": "Įkelti rinkmeną",
"uploadbtn": "Įkelti rinkmeną",
"doubleredirects": "Dvigubi peradresavimai",
"doubleredirectstext": "Šiame puslapyje yra puslapių, kurie nukreipia į kitus peradresavimo puslapius, sąrašas.\nKiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, taip pat antrojo peradresavimo paskirtis, kuris paprastai yra „tikrasis“ paskirties puslapis, į kurį pirmasis peradresavimas ir turėtų rodyti.\n<del>Išbraukti</del> įrašai yra išspręsti.",
"double-redirect-fixed-move": "[[$1]] buvo pervardytas; dabar tai peradresavimas į [[$2]].",
- "double-redirect-fixed-maintenance": "Tvarkomas dvigubas peradresavimas iš [[$1]] į [[$2]].",
+ "double-redirect-fixed-maintenance": "Tvarkomas dvigubas peradresavimas iš [[$1]] į [[$2]]",
"double-redirect-fixer": "Peradresavimų tvarkyklė",
"brokenredirects": "Peradresavimai į niekur",
"brokenredirectstext": "Šie peradresavimo puslapiai nurodo į neegzistuojančius puslapius:",
"sp-contributions-uploads": "įkėlimai",
"sp-contributions-logs": "specialiųjų veiksmų sąrašas",
"sp-contributions-talk": "aptarimas",
- "sp-contributions-userrights": "naudotojų teisių valdymas",
+ "sp-contributions-userrights": "{{GENDER:$1|naudotojų}} teisių valdymas",
"sp-contributions-blocked-notice": "Šis naudotojas šiuo metu užblokuotas.\nPateikiamas paskutinis blokavimo istorijos įrašas.",
"sp-contributions-blocked-notice-anon": "Šis IP adresas yra užblokuotas.\nPaskutinis blokavimo įrašas pateikiamas žemiau:",
"sp-contributions-search": "Ieškoti įnašų",
"emaillink": "siųsti el. laišką",
"autoblocker": "Jūs buvote automatiškai užblokuotas, nes jūsų IP adresą neseniai naudojo „[[User:$1|$1]]“. Nurodyta naudotojo $1 blokavimo priežastis: „$2“.",
"blocklogpage": "Blokavimų sąrašas",
- "blocklog-showlog": "Šis naudotojas buvo užblokuotas.\nPateikiamas paskutinis blokavimo istorijos įrašas.",
+ "blocklog-showlog": "Šis naudotojas jau yra buvęs užblokuotas.\nPateikiamas paskutinis blokavimo istorijos įrašas.",
"blocklog-showsuppresslog": "Šis naudotojas buvo užblokuotas ir paslėptas anksčiau.\nŽemiau yra pateiktas slėpimų žurnalas:",
"blocklogentry": "užblokavo [[$1]], blokavimo laikas - $2 $3",
"reblock-logentry": "pakeisti [[$1]] blokavimo nustatymai, naujas blokavimo laikas – $2 $3",
"lastmodifiedatby": "Šį puslapį paskutinį kartą redagavo $2, $1, $3.",
"othercontribs": "Paremta $1 darbu.",
"others": "kiti",
- "siteusers": "{{SITENAME}} {{PLURAL:$2|naudotojas|naudotojai}} $1",
+ "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|naudotojas|naudotoja}}|naudotojai}} $1",
"anonusers": "{{SITENAME}} {{PLURAL:$2|anoniminis naudotojas|anoniminiai naudotojai}} $1",
"creditspage": "Puslapio kūrėjai",
"nocredits": "Kūrėjų informacija negalima šiam puslapiui.",
"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-blank-description": "Keitimai, ištrinantys visą puslapio turinį",
+ "tag-mw-replace": "Pakeista",
+ "tag-mw-rollback": "Atmesti",
"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.",
"feedback-thanks": "Ačiū! Jūsų atsiliepimas buvo užregistruotas puslapyje „[$2 $1]“.",
"feedback-thanks-title": "Ačiū!",
"feedback-useragent": "Vartotojo veiksnys:",
- "searchsuggest-search": "Ieškoti",
+ "searchsuggest-search": "Ieškoti {{SITENAME}}",
"searchsuggest-containing": "turintys",
"api-error-badtoken": "Vidinė klaida: blogai atpažinimo ženklas.",
"api-error-emptypage": "Kurti naujus, tuščius puslapius neleidžiama.",
"limitreport-expansiondepth": "Didžiausias plėtimosi gylis",
"limitreport-expensivefunctioncount": "Brangaus analizatoriaus funkcijos skaičius",
"expandtemplates": "Išplėsti šablonus",
- "expand_templates_intro": "Šis specialus puslapis pasirenką tekstą ir išplečia visus rekursyviai.\nJis taip pat išplečia palaikomas analizatoriaus funkcijas kaip\n<code><nowiki>{{</nowiki>#language:…}}</code> ir kintamuosius kaip\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nTiesą sakant, jis išplečia beveik viską dvigubuose skliaustuose.",
+ "expand_templates_intro": "Šis specialus puslapis pasirenką vikitekstą ir išplečia visus rekursyviai.\nJis taip pat išplečia palaikomas analizatoriaus funkcijas kaip\n<code><nowiki>{{</nowiki>#language:…}}</code> ir kintamuosius kaip\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nTiesą sakant, jis išplečia beveik viską dvigubuose skliaustuose.",
"expand_templates_title": "Aplinkybės pavadinimas, {{FULLPAGENAME}} ir pan.:",
"expand_templates_input": "Įvesti vikitekstą:",
"expand_templates_output": "Rezultatas",
"log-action-filter-patrol-autopatrol": "Automatinis patikrinimas",
"log-action-filter-protect-protect": "Apsauga",
"log-action-filter-protect-modify": "Apsaugos keitimas",
+ "log-action-filter-protect-unprotect": "Atrakinimas",
"log-action-filter-protect-move_prot": "Apsauga perkelta",
"log-action-filter-rights-rights": "Rankinis keitimas",
"log-action-filter-rights-autopromote": "Automatinis keitimas",
"linkaccounts-submit": "Susieti paskyras",
"unlinkaccounts": "Atsieti paskyras",
"unlinkaccounts-success": "Paskyra buvo atsieta.",
+ "edit-error-short": "Klaida: $1",
+ "edit-error-long": "Klaidos:\n\n$1",
"revid": "apžvalga $1",
"pageid": "puslapio ID $1",
"rawhtml-notallowed": "<html> negali būti naudojamos ne normaliuose puslapiuose.",
"gotointerwiki": "Išeinama iš {{SITENAME}}",
"gotointerwiki-invalid": "Nurodytas pavadinimas negalimas.",
+ "pagedata-title": "Puslapio duomenys",
"pagedata-bad-title": "Negalimas pavadinimas: $1."
}
"specialpage-securitylevel-not-allowed-title": "Nav atļauts",
"cannotauth-not-allowed-title": "Atļauja liegta",
"credentialsform-account": "Konta nosaukums:",
+ "edit-error-short": "Kļūda: $1",
+ "edit-error-long": "Kļūdas:\n\n$1",
"revid": "versija $1",
"pageid": "lapas ID $1",
"gotointerwiki-invalid": "Norādītais nosaukums ir nederīgs.",
"doubleredirects": "Двојни пренасочувања",
"doubleredirectstext": "Оваа страница ги прикажува пренасочувачките страници до други пренасочувачки страници.\nСекој ред содржи врски кон првото и второто пренасочување, како и целта на второто пренасочување, кое обично ја посочува <i>вистинската</i> целна страница кон која првото пренасочување би требало да насочува.\n<del>Пречкртаните</del> ставки треба да се разрешат.",
"double-redirect-fixed-move": "Страницата „[[$1]]“ е преместена.\nСега е самоподновена и пренасочува кон [[$2]].",
- "double-redirect-fixed-maintenance": "Самоисправка на двојно пренасочување од [[$1]] на [[$2]] во задача за одржување.",
+ "double-redirect-fixed-maintenance": "Самоисправка на двојно пренасочување од [[$1]] на [[$2]] во задача за одржување",
"double-redirect-fixer": "Исправувач на пренасочувања",
"brokenredirects": "Прекинати пренасочувања",
"brokenredirectstext": "Следните пренасочувања водат до непостоечки страници.",
"restrictionsfield-badip": "Неважечки IP-дијапазон на адреси: $1",
"restrictionsfield-label": "Допуштени IP-опсези:",
"restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
+ "edit-error-short": "Грешка: $1",
+ "edit-error-long": "Грешки:\n\n$1",
"revid": "преработка $1",
"pageid": "назнака на страницата $1",
"rawhtml-notallowed": "<html>-ознаките не може да се користат вон нормалните страници.",
"log-action-filter-rights-rights": "मानवी बदल",
"log-action-filter-suppress-block": "रोधामार्फत सदस्य दाबणे",
"changecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
- "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा"
+ "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
+ "edit-error-short": "त्रुटी: $1",
+ "edit-error-long": "त्रुटी:$1"
}
"recentchangeslinked-feed": "Altaraçones relacionadas",
"recentchangeslinked-toolbox": "Altaraçones relacionadas",
"recentchangeslinked-title": "Altaraçones que ténen a ber cun \"$1\"",
- "recentchangeslinked-summary": "Esta páigina special amostra las redadeiras altaraçones de páiginas que téngan ua lhigaçon a outra (ó de nembros dua catadorie speceficada).\nLas páiginas que steian ne ls [[Special:Watchlist|tous begiados]] son amostradas an <strong>negrito</strong>.",
+ "recentchangeslinked-summary": "Scriba l nome dua páigina pa ber las altaraçones an todas las páiginas que téngan lhigaçones pa eilha ó pa las quales la páigina oufrecida ténen lhigaçones (pa ber ls nembros dua catadorie, scriba Catadorie:Nome de la catadorie). Las mudanças na sue [[Special:Watchlist|lhista de páiginas begiadas]] son amostradas an <strong>negro</strong>.",
"recentchangeslinked-page": "Nome de la páigina:",
"recentchangeslinked-to": "Amostrar antes altaraçones a páiginas que téngan a ber cula páigina dada",
"upload": "Cargar fexeiro",
"Candalua",
"Macofe",
"V6rg",
- "Nemo bis"
+ "Nemo bis",
+ "S4b1nuz E.656"
]
},
"tog-underline": "Sottolinia 'e jonte:",
"feedback-thanks": "Grazie! 'O feedback vuosto s'è mpizzato dint' 'a paggena \"[$2 $1]\".",
"feedback-thanks-title": "Ve ringraziammo!",
"feedback-useragent": "Aggente utente:",
- "searchsuggest-search": "Truova",
+ "searchsuggest-search": "Truova dint'ô {{SITENAME}}",
"searchsuggest-containing": "tène...",
"api-error-badtoken": "Errore interno: 'O token nun è buono.",
"api-error-emptypage": "'A criazione 'e paggene nuove abbacante nun è permessa.",
"lockmanager-fail-closelock": "Kunne ikke lukke låsefilen for «$1».",
"lockmanager-fail-deletelock": "Kunne ikke slette låsefilen for «$1».",
"lockmanager-fail-acquirelock": "Kunne ikke skaffe lås for «$1».",
- "lockmanager-fail-openlock": "Kunne ikke åpne låsefilen for «$1».",
+ "lockmanager-fail-openlock": "Kunne ikke åpne låsefilen for «$1». Sjekk at opplastingsmappa er konfigurert riktig og at nettjeneren din har tillatelse til å skrive til den mappa. Se https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory for mer informasjon.",
"lockmanager-fail-releaselock": "Kunne ikke frigi låsen for «$1».",
"lockmanager-fail-db-bucket": "Kunne ikke kontakte nok låsedatabaser i bøtten $1.",
"lockmanager-fail-db-release": "Kunne ikke frigi låser på databasen $1.",
"doubleredirects": "Doble omdirigeringer",
"doubleredirectstext": "Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.\nHver rad inneholder lenker til første og andre omdirigering, samt målet for den andre omdirigeringen, som vanligvis er den «virkelige» målsiden som den første omdirigeringen burde peke til.\n<del>Gjennomstrøkne</del> sider har blitt fikset.",
"double-redirect-fixed-move": "[[$1]] har blitt flyttet.\nDen ble automatisk oppdatert og er nå en omdirigering til [[$2]].",
- "double-redirect-fixed-maintenance": "Fikser automatisk dobbel omdirigering fra [[$1]] til [[$2]] som en del av en vedlikeholdsoppgave.",
+ "double-redirect-fixed-maintenance": "Fikser automatisk dobbel omdirigering fra [[$1]] til [[$2]] som en del av en vedlikeholdsoppgave",
"double-redirect-fixer": "Omdirigeringsfikser",
"brokenredirects": "Brutte omdirigeringer",
"brokenredirectstext": "Følgende omdirigeringer peker til ikkeeksisterende sider:",
"restrictionsfield-badip": "Ugyldig IP-adresse eller intervall: $1",
"restrictionsfield-label": "Tillatte IP-intervaller:",
"restrictionsfield-help": "Én IP-adresse eller CIDR-intervall per linje. For å slå på alt, bruk: <pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Feil: $1",
+ "edit-error-long": "Feil:\n\n$1",
"revid": "revisjon $1",
"pageid": "side-ID $1",
"rawhtml-notallowed": "<html>-tagger kan ikke brukes utenfor normale sider.",
"action-unwatchedpages": "अवलोकन नगरिएका पृष्ठहरूको सूची हेर्ने",
"action-mergehistory": "यस पृष्ठको इतिहासलाई मिसाउने",
"action-userrights": "सबै प्रयोगकर्ताका अधिकारहरू सम्पादन गर्ने",
- "action-userrights-interwiki": "à¤\85रà¥\81 विà¤\95िका प्रयोगकर्ताहरूको प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
+ "action-userrights-interwiki": "à¤\85रà¥\82 विà¤\95à¥\80का प्रयोगकर्ताहरूको प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
"action-siteadmin": "डेटाबेस बन्दगर्ने वा खोल्ने",
"action-sendemail": "इमेलहरु पठाउने",
"action-editmywatchlist": "तपाईंको निगरानी सूची सम्पादन गर्नुहोस्",
"enhancedrc-history": "इतिहास",
"recentchanges": "नयाँ परिवर्तनहरू",
"recentchanges-legend": "हालैको परिवर्तन विकल्पहरू",
- "recentchanges-summary": "विà¤\95िà¤\95ा à¤à¤°à¥\8dà¤\96रà¤\95ा परिवरà¥\8dतनहरà¥\82लाà¤\88 यस पà¥\83षà¥\8dठमा पहिलà¥\8dयाà¤\89नà¥\87",
+ "recentchanges-summary": "विà¤\95à¥\80à¤\95ा à¤à¤°à¥\8dà¤\96रà¤\95ा परिवरà¥\8dतनहरà¥\82लाà¤\88 यस पà¥\83षà¥\8dठमा हà¥\87रà¥\8dन सà¤\95िनà¥\8dà¤\9b",
"recentchanges-noresult": "दिइएको मापदण्ड अवधिमा मिल्दो कुनै परिवर्तन छैन।",
"recentchanges-feed-description": "यो फिडमा रहेको विकीको सवैभन्दा अन्तिम परिवर्तनहरुको जानकारी राख्नुहोस्",
"recentchanges-label-newpage": "यो सम्पादनले नयाँ पृष्ठ निर्माण गरेको छ",
"statistics-header-hooks": "अन्य तथ्याङ्कहरू",
"statistics-articles": "सामग्री पृष्ठहरू",
"statistics-pages": "पृष्ठहरू",
- "statistics-pages-desc": "विà¤\95िà¤\95ा सबà¥\88 पà¥\83षà¥\8dठहरà¥\82, वारà¥\8dतापà¤\95ा पà¥\83षà¥\8dठहरà¥\82समà¥\87त, रिडाà¤\87रà¥\87à¤\95à¥\8dà¤\9f, à¤\87तà¥\8dयादि ।",
+ "statistics-pages-desc": "विà¤\95à¥\80à¤\95ा सबà¥\88 पà¥\83षà¥\8dठहरà¥\82, वारà¥\8dतापà¤\95ा पà¥\83षà¥\8dठहरà¥\82समà¥\87त, रिडाà¤\87रà¥\87à¤\95à¥\8dà¤\9f, à¤\87तà¥\8dयादि।",
"statistics-files": "उर्ध्वभरण गरिएका फाइलहरू",
"statistics-edits": "{{SITENAME}} स्थापना भए देखिको पृष्ठ सम्पादन",
"statistics-edits-average": "प्रतिपृष्ठ औसत सम्पादन",
"lockmanager-fail-closelock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te sluiten.",
"lockmanager-fail-deletelock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te verwijderen.",
"lockmanager-fail-acquirelock": "Het was niet mogelijk \"$1\" te vergrendelen.",
- "lockmanager-fail-openlock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te openen.",
+ "lockmanager-fail-openlock": "Het was niet mogelijk het vergrendelingsbestand voor \"$1\" te openen. Verzeker uzelf ervan dat de uploadmap goed ingesteld is en uw webserver toestemming heeft om naar die map the schrijven. Zie https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory voor meer informatie.",
"lockmanager-fail-releaselock": "Het was niet mogelijk vergrendeling van \"$1\" op te heffen.",
"lockmanager-fail-db-bucket": "Het was niet mogelijk om in contact te komen met voldoende vergrendelingsdatabases in de bucket $1.",
"lockmanager-fail-db-release": "Het was niet mogelijk om de vergrendeling voor de database $1 op te heffen.",
"exif-compression-2": "CCITT Groep 3 1-dimensionale aangepaste \"Huffman run length\"-codering",
"exif-compression-3": "CCITT Groep 3 faxcodering",
"exif-compression-4": "CCITT Groep 4 faxcodering",
+ "exif-compression-6": "JPEG (oud)",
"exif-copyrighted-true": "Auteursrechtelijk beschermd",
"exif-copyrighted-false": "Auteursrechtelijke status niet ingesteld",
"exif-photometricinterpretation-0": "Zwart en wit (Wit is 0)",
"exif-photometricinterpretation-1": "Zwart-wit (zwart is 0)",
"exif-photometricinterpretation-3": "Palet",
+ "exif-photometricinterpretation-4": "Transparantiemasker",
+ "exif-photometricinterpretation-5": "Gescheiden (waarschijnlijk CMYK)",
"exif-unknowndate": "Datum onbekend",
"exif-orientation-1": "Normaal",
"exif-orientation-2": "Horizontaal gespiegeld",
"restrictionsfield-badip": "Ongeldig IP-adres of range: $1",
"restrictionsfield-label": "Toegestane IP-ranges:",
"restrictionsfield-help": "Een IP-adres of CIDR bereik per lijn. Om alles toe te staan, gebruik:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Fout: $1",
+ "edit-error-long": "Fouten:\n\n$1",
"revid": "versie $1",
"pageid": "Pagina-ID $1",
"rawhtml-notallowed": "<html> tags kunnen alleen op normale pagina's geplaatst worden.",
"undo-success": "Endringa kan angrast.\nSjå på samanlikninga under for å stadfesta at dette er det du ynskjer å gjera. Deretter kan du lagra desse endringane for å fullføra angringa.",
"undo-failure": "Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjorde i mellomtida.",
"undo-norev": "Endringa kunne ikkje fjernast fordi han ikkje finst eller vart sletta",
+ "undo-nochange": "Det ser ut til at endringa alt er fjerna.",
"undo-summary": "Rullar attende versjon $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]])",
"cantcreateaccount-text": "Kontooppretting frå denne IP-adressa ('''$1''') er blokkert av [[User:$3|$3]].\n\nGrunnen som vart gjeven av $3 er ''$2''",
"viewpagelogs": "Vis loggane for sida",
"exbeforeblank": "innhaldet før sida vart tømd var: «$1»",
"delete-confirm": "Slett «$1»",
"delete-legend": "Slett",
- "historywarning": "<strong>Åtvaring:<strong> Sida du held på å slette har ein historikk med $1 {{PLURAL:$1|versjon|versjonar}}:",
+ "historywarning": "<strong>Åtvaring:</strong> Sida du held på å slette har ein historikk med $1 {{PLURAL:$1|versjon|versjonar}}:",
"historyaction-submit": "Vis",
"confirmdeletetext": "Du held på å varig slette ei side eller eit bilete saman med heile den tilhøyrande historikken frå databasen. Stadfest at du verkeleg vil gjere dette, at du skjønar konsekvensane, og at du gjer dette i tråd med [[{{MediaWiki:Policy-url}}|retningslinene]].",
"actioncomplete": "Ferdig",
"restrictionsfield-badip": "Nieprawidłowy adres IP lub zakres adresów: $1",
"restrictionsfield-label": "Dozwolone zakresy adresów IP:",
"restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Błąd: $1",
+ "edit-error-long": "Błędy:\n\n$1",
"revid": "wersja $1",
"pageid": "ID strony: $1",
"rawhtml-notallowed": "Znaczniki <html> nie mogą być stosowane poza zwykłymi stronami.",
"Saanvel",
"Satdeep gill",
"Abbas dhothar",
- "Saraiki"
+ "Saraiki",
+ "BukhariSaeed"
]
},
"tog-underline": "جوڑ تھلے لین:",
"currentrev": "ہن آلی تبدیلی",
"currentrev-asof": "$1 ویلے دا صفحہ",
"revisionasof": "دی تبدیلیاں $1",
- "revision-info": " $1 دی دہرائی توں {{جنس:$6|$2}}$7",
+ "revision-info": "$1 دی دہرائی توں {{GENDER:$6|$2}}$7",
"previousrevision": "← اوس توں پچھلا کم",
"nextrevision": "نویں تبدیلی →",
"currentrevisionlink": "موجودہ حالت",
"revdelete-uname-unhid": "ورتن والے دا ناں ںئیں لکیا",
"revdelete-restricted": "مکھیاں تے روکاں لگیاں",
"revdelete-unrestricted": "مکھیاں تے روکاں لتھیاں",
- "logentry-move-move": "$1 {{جنس:$2|پلٹی}} صفہ $3 توں $4",
+ "logentry-move-move": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 اک ڑیڈائرکٹ چھڈے بنا",
"logentry-move-move_redir": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 ریڈائرکٹ",
"logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 اک ریڈائرکٹ دے بنا کسے ریڈائرکٹ دتیاں",
"timezoneregion-indian": "هندی سمندر",
"timezoneregion-pacific": "غلی سمندر",
"allowemail": "د نورو کارنانو لخوا د برېښليک رالېږل چارن کړه",
+ "email-allow-new-users-label": "د نویو کارنانو لخوا د برېښناليک راليږلو ته اجازه ورکړئ",
+ "email-blacklist-label": "دا کارنان ماته د بریښنالیک رالیږلو څخه منع کړي:",
"prefs-searchoptions": "پلټنه",
"prefs-namespaces": "نوم-تشيالونه",
"default": "تلواليز",
"sp-newimages-showfrom": "هغه نوې دوتنې چې په $1 په $2 بجو پيلېږي ښکاره کول",
"minutes-abbrev": "$1 دقیقي",
"hours-abbrev": "$1 گ",
+ "days-abbrev": "$1 ورځې",
"seconds": "{{PLURAL:$1|$1 ثانيه|$1 ثانيې}}",
"minutes": "{{PLURAL:$1|$1 دقيقه|$1 دقيقې}}",
"hours": "{{PLURAL:$1|يو ساعت|$1 ساعتونه}}",
"lockmanager-fail-closelock": "Não foi possível encerrar a referência de bloqueio para \"$1\".",
"lockmanager-fail-deletelock": "Não foi possível eliminar a referência de bloqueio para \"$1\".",
"lockmanager-fail-acquirelock": "Não foi possível obter uma referência de bloqueio para \"$1\".",
- "lockmanager-fail-openlock": "Não foi possível abrir a referência de bloqueio para \"$1\".",
+ "lockmanager-fail-openlock": "Não foi possível abrir a referência de bloqueio para \"$1\". Certifique-se de que seu diretório de upload esteja configurado corretamente e seu servidor web tenha permissão para gravar nesse diretório. Veja https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory para maiores informações.",
"lockmanager-fail-releaselock": "Não foi possível liberar o bloqueio para \"$1\".",
"lockmanager-fail-db-bucket": "Não foi possível contatar suficientemente bloqueio das bases de dados no bucket $1 .",
"lockmanager-fail-db-release": "Não foi possível liberar os bloqueios para \"$1\".",
"doubleredirects": "Redirecionamentos duplos",
"doubleredirectstext": "Esta página lista as páginas que redirecionam para outros redirecionamentos.\nCada linha contém links para o primeiro e o segundo redirecionamentos, juntamente com o alvo do segundo redirecionamento, que é geralmente a verdadeira página de destino, para a qual o primeiro redirecionamento deveria apontar.\nEntradas <del>riscadas</del> foram resolvidas.",
"double-redirect-fixed-move": "[[$1]] foi movido\nEle foi atualizado automaticamente e agora é um redirecionamento para [[$2]]",
- "double-redirect-fixed-maintenance": "Corrigindo automaticamente o redirecionamento duplo de [[$1]] para [[$2]] em uma tarefa de manutenção.",
+ "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção",
"double-redirect-fixer": "Corretor de redirecionamentos",
"brokenredirects": "Redirecionamentos quebrados",
"brokenredirectstext": "Os seguintes redirecionamentos ligam para páginas inexistentes:",
"restrictionsfield-badip": "Endereço IP ou intervalo inválido: $1",
"restrictionsfield-label": "Intervalos IP permitidos:",
"restrictionsfield-help": "Um endereço IP ou intervalo CIDR por linha. Para ativar tudo, use\n<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Erro: $1",
+ "edit-error-long": "Erros:\n$1",
"revid": "revisão $1",
"pageid": "ID da página $1",
"rawhtml-notallowed": "As tags <html> não podem ser usadas fora das páginas normais.",
"restrictionsfield-badip": "Endereço IP (ou gama de endereços IP) inválido: $1",
"restrictionsfield-label": "Gamas de endereços IP permitidas:",
"restrictionsfield-help": "Um endereço IP ou uma gama CIDR por linha. Para ativar todos,\nuse: <pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Erro: $1",
+ "edit-error-long": "Erros:\n\n$1",
"revid": "revisão $1",
"pageid": "identificador de página $1",
"rawhtml-notallowed": "As etiquetas <html> não podem ser utilizadas fora de páginas normais.",
"anonpreviewwarning": "See also:\n* {{msg-mw|Anoneditwarning}}",
"missingsummary": "The text \"edit summary\" is in {{msg-mw|Summary}}.\n\nSee also:\n* {{msg-mw|Missingcommentheader}}\n* {{msg-mw|Savearticle}}\n\nParameters:\n* $1 – The label of the save button – one of {{msg-mw|savearticle}} or {{msg-mw|savechanges}} on save-labelled wiki, or {{msg-mw|publishpage}} or {{msg-mw|publishchanges}} on publish-labelled wikis.",
"selfredirect": "Notice displayed once after the user tries to create a redirect to the same article.\n\nParameters:\n* $1 – The label of the save button – one of {{msg-mw|savearticle}} or {{msg-mw|savechanges}} on save-labelled wiki, or {{msg-mw|publishpage}} or {{msg-mw|publishchanges}} on publish-labelled wikis.",
- "missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
+ "missingcommenttext": "This message is shown when the user tries to save a textbox created by the new section links, and the textbox is empty. \"Comment\" refers to the content that is supposed to be posted in the new section, usually a talk page comment.",
"missingcommentheader": "Edit summary that is shown if you enable \"Prompt me when entering a blank summary\" and add a new section without headline to a talk page.\n\nParameters:\n* $1 – The label of the save button – one of {{msg-mw|savearticle}} or {{msg-mw|savechanges}} on save-labelled wiki, or {{msg-mw|publishpage}} or {{msg-mw|publishchanges}} on publish-labelled wikis.\n\n\"Subject\" is {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Missingsummary}}\n* {{msg-mw|Savearticle}}",
"summary-preview": "Preview of the edit summary, shown under the edit summary itself.\nShould match: {{msg-mw|summary}}.",
"subject-preview": "Used as label for preview of the section title when adding a new section on a talk page.\n\nShould match {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Summary-preview}}\n\n{{Identical|Subject}}",
"pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
"pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
"pageinfo-user-id": "The numeric ID for a user\n{{Identical|User ID}}",
- "pageinfo-file-hash": "Base-36 SHA-1 value of the file",
+ "pageinfo-file-hash": "Base-16 SHA-1 value of the file",
"markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
"markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
"markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",
"semicolon-separator": "{{optional}}",
"comma-separator": "{{optional}}\n\nWarning: languages have different usages of punctuation, and sometimes they are swapped (e.g. openining and closing quotation marks, or full stop and colon in Armenian), or change their form (the full stop in Chinese and Japanese, the prefered \"colon\" in Armenian used in fact as the regular full stop, the comma in Arabic, Armenian, and Chinese...)\n\nTheir spacing (before or after) may also vary across languages (for example French requires a non-breaking space, preferably narrow if the browser supports NNBSP, on the inner side of some punctuations like quotation/question/exclamation marks, colon, and semicolons).",
"colon-separator": "{{optional}}\nChange it only if your language uses another character for ':' or it needs an extra space before the colon.",
- "autocomment-prefix": "{{optional}}",
+ "autocomment-prefix": "{{notranslate}}",
"pipe-separator": "{{optional}}",
"word-separator": "{{optional}}\nThis is a string which is (usually) put between words of the language. It is used, e.g. when messages are concatenated (appended to each other). Note that you must express a space as html entity &#32; because the editing and updating process strips leading and trailing spaces from messages.\n\nMost languages use a space, but some Asian languages, such as Thai and Chinese, do not.",
"ellipsis": "{{optional}}",
"restrictionsfield-badip": "An error message shown when one entered an invalid IP address or range in a restrictions field (such as Special:BotPassword). $1 is the IP address.",
"restrictionsfield-label": "Field label shown for restriction fields (e.g. on Special:BotPassword).",
"restrictionsfield-help": "Placeholder text displayed in restriction fields (e.g. on Special:BotPassword).",
+ "edit-error-short": "Error message. Parameters:\n* $1 - the error details\nSee also:\n* {{msg-mw|edit-error-long}}\n{{Identical|Error}}",
+ "edit-error-long": "Error message. Parameters:\n* $1 - the error details\nSee also:\n* {{msg-mw|edit-error-short}}\n{{Identical|Error}}",
"revid": "Used to format a revision ID number in text. Parameters:\n* $1 - Revision ID number.\n{{Identical|Revision}}",
"pageid": "Used to format a page ID number in text. Parameters:\n* $1 - Page ID number.",
"rawhtml-notallowed": "Error message given when $wgRawHtml = true; is set and a user uses an <html> tag in a system message or somewhere other than a normal page.",
"Helpau",
"Staspotanin2",
"Edible Melon",
- "Adam-Yourist"
+ "Adam-Yourist",
+ "MaksimPinigin"
]
},
"tog-underline": "Подчёркивание ссылок:",
"doubleredirects": "Двойные перенаправления",
"doubleredirectstext": "На этой странице представлен список перенаправлений на другие перенаправления.\nКаждая строка содержит ссылки на первое и второе перенаправления, а также целевую страницу второго перенаправления, в которой обычно указывается название страницы, куда должно ссылаться первое перенаправление.\n<del>Зачёркнутые</del> записи были исправлены.",
"double-redirect-fixed-move": "Страница [[$1]] была перемещена.\nОна автоматически обновлена и теперь она перенаправляет на страницу [[$2]].",
- "double-redirect-fixed-maintenance": "Автоматическое исправление двойного перенаправления с [[$1]] на [[$2]] в работе по техническому обслуживанию.",
+ "double-redirect-fixed-maintenance": "Автоматическое исправление двойного перенаправления с [[$1]] на [[$2]] в работе по техническому обслуживанию",
"double-redirect-fixer": "Исправитель перенаправлений",
"brokenredirects": "Разорванные перенаправления",
"brokenredirectstext": "Следующие перенаправления указывают на несуществующие страницы:",
"rollback": "Откатить изменения",
"rollbacklink": "откатить",
"rollbacklinkcount": "откатить $1 {{PLURAL:$1|правку|правки|правок}}",
- "rollbacklinkcount-morethan": "откатить больше, чем $1 {{PLURAL:$1|правку|правки|правок}}",
+ "rollbacklinkcount-morethan": "откатить более $1 {{PLURAL:$1|правки|правок}}",
"rollbackfailed": "Ошибка при совершении отката",
"rollback-missingparam": "Отсутствуют обязательные параметры по запросу.",
"rollback-missingrevision": "Не удалось загрузить данные версии.",
"restrictionsfield-badip": "Недопустимый IP-адрес или диапазон адресов: $1",
"restrictionsfield-label": "Разрешённые диапазоны IP-адресов:",
"restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Ошибка: $1",
+ "edit-error-long": "Ошибки:\n\n$1",
"revid": "версия $1",
"pageid": "ID страницы $1",
"rawhtml-notallowed": "<html> теги могут быть использованы только в пределах обычных страниц.",
"parser-template-loop-warning": "Халыыптар бэйэ бэйлэригэр сигэниилэрэ (петля) булулунна: [[$1]]",
"template-loop-category": "Халыыптара бэйэ бэйэлэригэр сигэнэр сирэйдэр",
"template-loop-category-desc": "Бу сирэй халыыба бэйэтин ыҥырар, ол аата бэйэтин холбуу сатыыр эбит.",
+ "template-loop-warning": "<strong>Сэрэтии:</strong> Бу сирэй халыыпка хат эргийэн кэлиини оҥорор сирэйи ([[:$1]]) ыҥырар эбит (бүппэт рекурсия).",
"parser-template-recursion-depth-warning": "($1) халыып рекурсиятын муҥура бүппүт (Превышен предел глубины рекурсии)",
"language-converter-depth-warning": "Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)",
"node-count-exceeded-category": "Түмүктэрин ахсаана аһара барбыт сирэйдэр",
"recentchangesdays-max": "(улааппыта $1 күн)",
"recentchangescount": "Саҥа уларытыылар көрдөрүллэр ахсааннара:",
"prefs-help-recentchangescount": "Бу саҥа көннөрүүлэри, сирэй устуоруйаларын уонна сурунааллары көрдөрөр.",
- "prefs-help-watchlist-token2": "Бу кэтиир тиһигиҥ ситим-ханаалын кистэлэҥ күлүүһэ.\nБу күлүүһүнэн ким баҕарар эн кэтиир тиһиккин көрүөн сөп, онон кимиэхэ да биэримэ. [[Special:ResetTokens|Маны баттаан уларытыаххын сөп]].",
+ "prefs-help-watchlist-token2": "Бу кэтиир испииһэгиҥ ситим-ханаалын кистэлэҥ күлүүһэ.\nБу күлүүһүнэн ким баҕарар эн испииһэккин көрүөн сөп, онон кимиэхэ да биэримэ. Хаһан баҕарар [[Special:ResetTokens|маны баттаан уларытыаххын]] сөп.",
"savedprefs": "Эн туруорууларыҥ олохтоннулар.",
"savedrights": "{{GENDER:$1|$1}} кыттааччы бөлөҕө бигэргэннэ.",
"timezonelegend": "Олохтоох кэм:",
"rcfilters-hours-title": "Тиһэх чаастар",
"rcfilters-days-show-days": "$1 хонук",
"rcfilters-days-show-hours": "$1 чаас",
+ "rcfilters-highlighted-filters-list": "Тыктарыллыбыт: $1",
"rcfilters-quickfilters": "Бигэргэммит сиидэлэр",
- "rcfilters-quickfilters-placeholder-title": "Ð\91игÑ\8dÑ\80гÑ\8dммиÑ\82 Ñ\81игэ билигин суох",
+ "rcfilters-quickfilters-placeholder-title": "Ð\91игÑ\8dÑ\80гÑ\8dммиÑ\82 Ñ\81иидэ билигин суох",
"rcfilters-quickfilters-placeholder-description": "Сиидэ туруорууларын кэлин туһанарга, \"Холбоммут сиидэ\" хонуутугар кыбытык ойуутун баттаа.",
"rcfilters-savedqueries-defaultlabel": "Бигэргэммит сиидэлэр",
"rcfilters-savedqueries-rename": "Аатын уларыт",
"rcfilters-restore-default-filters": "Анаан этиллибэтэҕинэ турар сиидэлэри холбоо",
"rcfilters-clear-all-filters": "Сиидэлэри барытын суох гын",
"rcfilters-show-new-changes": "Тиһэх уларытыылар",
- "rcfilters-search-placeholder": "Сиидэлэри кэнники уларытыы (көр биитэр киллэр)",
+ "rcfilters-search-placeholder": "Сиидэлэр уларыйыылара (талбаны туһан биитэр сиидэ аатынан көрдөө)",
"rcfilters-invalid-filter": "Сатаммат сиидэ",
"rcfilters-empty-filter": "Холбоммут сиидэ суох. Улартыы барыта көстөр.",
"rcfilters-filterlist-title": "Сиидэ",
"rcfilters-filterlist-whatsthis": "Бу тугуй?",
- "rcfilters-filterlist-feedbacklink": "Саҥа (беÑ\82а) Ñ\81иидÑ\8dлÑ\8dÑ\80 Ñ\82Ñ\83Ñ\81Ñ\82аÑ\80Ñ\8bнан суруй",
+ "rcfilters-filterlist-feedbacklink": "Ð\91Ñ\83 (Ñ\81аҥа) Ñ\81иидÑ\8dлÑ\8dÑ\80 Ñ\82Ñ\83Ñ\81Ñ\82аÑ\80Ñ\8bнан биһиÑ\8dÑ\85Ñ\8d суруй",
"rcfilters-highlightbutton-title": "Түмүгүн бэлиэтээ",
"rcfilters-highlightmenu-title": "Өҥүн тал",
"rcfilters-highlightmenu-help": "Өҥүн талан, көстөр гын",
"rcfilters-filter-editsbyself-description": "Бэйэҥ уларытыыларыҥ.",
"rcfilters-filter-editsbyother-label": "Атыттар уларытыылара",
"rcfilters-filter-editsbyother-description": "Атыттар уларытыылара (Эйиэниттэн ураты).",
- "rcfilters-filtergroup-userExpLevel": "Ð\9aÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ñ\83опÑ\83Ñ\82Ñ\83н Ñ\82аһÑ\8bмÑ\8bнан (бÑ\8dлиÑ\8dÑ\82Ñ\8dммиÑ\82Ñ\82Ñ\8dÑ\80гÑ\8d Ñ\8dÑ\80Ñ\8d)",
+ "rcfilters-filtergroup-userExpLevel": "Ð\91Ñ\8dлиÑ\8dÑ\82Ñ\8dммиÑ\82инÑ\8dн Ñ\83онна Ñ\83опÑ\83Ñ\82Ñ\83н Ñ\82аһÑ\8bмÑ\8bнан",
"rcfilters-filter-user-experience-level-registered-label": "Бэлиэтэммиттэр",
"rcfilters-filter-user-experience-level-registered-description": "Киирбит эрэдээктэрдэр.",
"rcfilters-filter-user-experience-level-unregistered-label": "Бэлиэтэммэтэхтэр",
"rcfilters-filter-user-experience-level-unregistered-description": "Киирбэтэх эрэдээктэрдэр.",
"rcfilters-filter-user-experience-level-newcomer-label": "Саҥа киирбиттэр",
- "rcfilters-filter-user-experience-level-newcomer-description": "Ð\9eÑ\82ой Ñ\81аҥалаÑ\80: 10 көннөрүүттэн аҕыйаҕы оҥорбуттар уонна бэлиэтэмиттэрэ 4 хоно иликтэр.",
+ "rcfilters-filter-user-experience-level-newcomer-description": "Ð\91Ñ\8dлиÑ\8dÑ\82Ñ\8dммиÑ\82Ñ\82Ñ\8dÑ\80 гÑ\8bнан баÑ\80ан 10 көннөрүүттэн аҕыйаҕы оҥорбуттар уонна бэлиэтэмиттэрэ 4 хоно иликтэр.",
"rcfilters-filter-user-experience-level-learner-label": "Үөрэнээччилэр",
"rcfilters-filter-user-experience-level-learner-description": "\"Саҕалааччыттан\" элбэх, \"уопуттаахтан\" аҕыйах уопуттаах.",
"rcfilters-filter-user-experience-level-experienced-label": "Уопуттаах кыттааччылар",
- "rcfilters-filter-user-experience-level-experienced-description": "30 хонуктан ордук үлэлээбит уонна 500 көннөрүүнү оҥорбуттар.",
+ "rcfilters-filter-user-experience-level-experienced-description": "30 хонуктан ордук үлэлээбит уонна 500 көннөрүүттэн элбэҕи оҥорбуттар.",
"rcfilters-filtergroup-automated": "Аптамаат көннөрүүлэр",
"rcfilters-filter-bots-label": "Оруобат",
"rcfilters-filter-bots-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": "Ис хоһоонун, ырытыылары, категорияны ойуулааһыны эҥин уларытыы...",
"uploaded-script-svg": "Хачайдаммыт SVG-билэҕэ сценарийы өйүүр куттааллаах «$1» элэмиэн көһүннэ.",
"uploaded-hostile-svg": "Хачайдаммыт SVG-билэ истиилин элэмиэнигэр кутталлаах CSS-куод көһүннэ.",
"uploaded-event-handler-on-svg": "SVG-билэлэргэ <code>$1=\"$2\"</code> сабыытыйаны таҥастааччы атрибууттарын туруоруу көҥүллэммэт.",
- "uploaded-href-attribute-svg": "Манна көстүбүт <code><$1 $2=\"$3\"></code> SVG-билэ сигэҕэ аналлаах href-атрибуттарыгар, маннык эрэ көүллэнэр: http:// биитэр https://.",
+ "uploaded-href-attribute-svg": "<a> элэмиэн манна эрэ data сигэнэр (href) кыахтаах: (угуллубут билэ), http:// биитэр https:// сигэлэр биитэр фрагмент (#, ол докумуоҥҥа). Атын элэмиэннэргэ, холобур <image> элэмиэҥҥэ, data: уонна фрагмент эрэ көҥүллэнэр. Ойууну SVG экспортыыр кэмҥэр уган көр. Булулунна <code><$1 $2=\"$3\"></code>.",
"uploaded-href-unsafe-target-svg": "Хачайдаммыт SVG-билэҕэ кутталлаах сигэ көһүннэ <code><$1 $2=\"$3\"></code>.",
"uploaded-animate-svg": "«Animate» тиэк көһүннэ, кини «from»-атрибут көмөтүнэн <code><$1 $2=\"$3\"></code> хачайдаммыт SVG-билэҕэ сигэни уларытыан сөп.",
"uploaded-setting-event-handler-svg": "Дьайыы таҥастыыр тэрил атрибуутун уларытар бобуллубут, киллэриллибит SVG-билэҕэ <code><$1 $2=\"$3\"></code> куод көстүбүт.",
"doubleredirects": "Хос көһөрөөһүн",
"doubleredirectstext": "Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр.\nХас устуруока аайы бастакы уонна иккис утаарыга сигэ баар, ону таһынан иккис утаарыыга баар сирэй аадырыһа (аата) баар, ол аата бастакы утаарыы дьиҥинэн ханна утаарыахтааҕа көстөр.\n<del>Сотуллубут</del> суруктар көннөрүллүбүттэр.",
"double-redirect-fixed-move": "[[$1]] сирэй аата уларытыллыбыт.\nАптамаатынан саҥардыллыбыт уонна бу сирэйгэ утаарар [[$2]].",
- "double-redirect-fixed-maintenance": "[[$1]] сирэйтэн [[$2]] сирэйгэ хос утаарыыны көннөрүү оҥоһулла сылдьар.",
+ "double-redirect-fixed-maintenance": "[[$1]] сирэйтэн [[$2]] сирэйгэ хос утаарыыны көннөрүү оҥоһулла сылдьар",
"double-redirect-fixer": "Утаарыылары көннөрөөччү",
"brokenredirects": "Быстыбыт көһөрүүлэр",
"brokenredirectstext": "Бу утаарыы сирэйдэрэ суох ыстатыйаларга сигэнэллэр (ыыталлар):",
"emailccsubject": "Эн суругуҥ куоппуйата $1: $2",
"emailsent": "Сурук барда",
"emailsenttext": "Эн суругуҥ ыытылынна.",
- "emailuserfooter": "Бу сурук {{GENDER:$2|$2}} кыттааччыга {{GENDER:$1|$1}} кыттааччыттан «Сурукта ыыт» (\"{{int:emailuser}}\") диэн тэрил көмөтүнэн {{SITENAME}} ситим-сиртэн ыытыллыбыт. {{GENDER:$2|Эн}} электрон аадырыһыҥ ыыппыт {{GENDER:$1|киһигэр}} көстүөҕэ.",
+ "emailuserfooter": "Бу сурук {{GENDER:$2|$2}} кыттааччыга {{GENDER:$1|$1}} кыттааччыттан «Сурукта ыыт» (\"{{int:emailuser}}\") диэн тэрил көмөтүнэн {{SITENAME}} ситим-сиртэн ыытыллыбыт. Өскөтө {{GENDER:$2|Эн}} киниэхэ суруйдаххына, электрон аадырыһыҥ {{GENDER:$1|киһигэр}} көстүөҕэ.",
"usermessage-summary": "Тиһилик биллэриитин хааллар.",
"usermessage-editor": "Тиһилик биллэрээччитэ",
"watchlist": "Кэтэбилим тиһигэ",
"enotif_body_intro_moved": "$PAGEEDITDATE «{{SITENAME}}» бырайыак «$1» ааттаах сирэйин бу {{gender:$2|кыттааччы|кыттааччы}} аатын уларыппыт - $2, билиҥҥи барылын манна көр: $3",
"enotif_body_intro_restored": "$PAGEEDITDATE «{{SITENAME}}» бырайыак «$1» ааттаах сирэйин бу {{gender:$2|кыттааччы|кыттааччы}} соппут - $2, билиҥҥи барылын манна көр: $3",
"enotif_body_intro_changed": "$PAGEEDITDATE «{{SITENAME}}» бырайыак «$1» ааттаах сирэйин бу {{gender:$2|кыттааччы|кыттааччы}} айбыт - $2, билиҥҥи барылын манна көр: $3",
- "enotif_lastvisited": "Бутэһик киирииҥ кэнниттэн оҥоһуллубут уларыйыылары барытын көрөргө манна киир: $1.",
+ "enotif_lastvisited": "Бүтэһик киирииҥ кэнниттэн оҥоһуллубут уларыйыылары барытын көрөргө манна киир: $1.",
"enotif_lastdiff": "Уларытыыны манна көр: $1",
"enotif_anon_editor": "ааттамматах кыттааччы $1",
"enotif_body": "Аламай күн сырдыгынан, $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nУларытыы кылгас ис хоһооно: $PAGESUMMARY $PAGEMINOREDIT\n\nУларыппыт киһиэхэ суруйуоххун сөп:\nэл. почта: $PAGEEDITOR_EMAIL\nбиики: $PAGEEDITOR_WIKI\n\nБу сирэйи бэлиэтэммит ааккынан киирэн көрбөтөххүнэ уларыйбытын туһунан биллэриилэр кэлиэхтэрэ суоҕа. Биллэриилэри аналлаах сирэйгэ отой арааран кэбиһиэххин эмиэ сөп.\n\n Бары үтүөнү кытта, {{SITENAME}} биллэрэр тиһигэ\n\n--\nБиллэрии кэлэрин салайыы\n{{canonicalurl:{{#special:Preferences}}}}\n\nКэтиир тиһиги уларытыы\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nКэтиир тиһиктэн сирэйдэри сотуу\n$UNWATCHURL\n\nКөмө\n$HELPPAGE",
"changecontentmodel-emptymodels-title": "Ис хоһоононун холобура суох",
"changecontentmodel-emptymodels-text": "[[:$1]] иһинээҕитэ ханнык да атын көрүҥҥэ уларыйар кыаҕа суох эбит.",
"log-name-contentmodel": "Иһинээҕитин киэбин уларытыы сурунаала",
- "log-description-contentmodel": "СиÑ\80Ñ\8dй иһинÑ\8dÑ\8dÒ\95иÑ\82ин киÑ\8dбин кÑ\8bÑ\82Ñ\82а Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85",
+ "log-description-contentmodel": "Ð\9cанна Ñ\81иÑ\80Ñ\8dй иһинÑ\8dÑ\8dÒ\95иÑ\82ин киÑ\8dбин Ñ\83лаÑ\80Ñ\8bйÑ\8bÑ\8bÑ\82Ñ\8bн кÑ\8bÑ\82Ñ\82а Ñ\81иÑ\82имнÑ\8dÑ\8dÑ\85 Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bÑ\8bлаÑ\80 көÑ\81Ñ\82өллөÑ\80.",
"logentry-contentmodel-new": "$1 $3 диэн сирэйи маны туһанан «$5» {{GENDER:$2|айбыт}}",
"logentry-contentmodel-change": "$1 кыттааччы $3 сирэй иһинээҕитин мадьыалын мантан «$4» манна «$5» {{GENDER:$2|уларыппыт}}",
"logentry-contentmodel-change-revertlink": "төннөрүү",
"delete_and_move_text": "==Сотуохха наада==\n\nМаннык ааттаах сирэй [[:$1|«$1»]] бэлиэр баар. Эн ону суох гынан баран аатын уларытаары гынаҕын дуо?",
"delete_and_move_confirm": "Сөп, бу сирэйи суох гын",
"delete_and_move_reason": "Аатын уларытаары сотулунна \"[[$1]]\"",
- "selfmove": "Аатын уларытар сатаммат. Эргэ уонна саҥа аата биирдэр.",
+ "selfmove": "Аатын уларытар сатаммата; \nэргэ уонна саҥа аата биирдэр.",
"immobile-source-namespace": "\"$1\" аат далыгар баар сирэйдэр ааттарын уларытар кыах суох.",
"immobile-target-namespace": "\"$1\" аат далыгар сирэйи көһөрөр кыах суох",
"immobile-target-namespace-iw": "Интервики сигэтэ ааты уларытыыга туһаныллыбат.",
"import-nonewrevisions": "Биир да уларытыы импортаммата (бу иннинэ таҥастаммыттар, биитэр алҕастаах буолан көтүтүллүбүттэр).",
"xml-error-string": "$1 - $2 строка, $3 колонка ($4 байт): $5",
"import-upload": "XML-дааннайдары киллэр",
- "import-token-mismatch": "Арахсан хаалбыт. \n\nБаҕар тахсан хаалбытыҥ буолуо. <strong>Бэлиэтэммит ааккынан киирэн олороргун тургутан баран хатылаан көр.</strong>.\nӨскөтө син биир көмөлөспөтөҕүнэ [[Special:UserLogout|тахсан баран]] төттөрү киирэн көр уонна браузерыҥ куукалары ыларын тургут.",
+ "import-token-mismatch": "Арахсан хаалбыт. \n\nБаҕар тахсан хаалбытыҥ буолуо. <strong>Бэлиэтэммит ааккынан киирэн олороргун тургутан баран хатылаан көр.</strong>.\nӨскөтө син биир сатамматаҕына [[Special:UserLogout|тахсан баран]] төттөрү киирэн көр уонна браузерыҥ кууканы ыларын тургут.",
"import-invalid-interwiki": "Бу биикиттэн импорт оҥорор сатаммат(а).",
"import-error-edit": "«$1» сирэй көһөрүллүбэтэ, тоҕо диэтэххэ кинини уларытарыҥ көҥүллэммэт эбит.",
"import-error-create": "«$1» сирэй киллэриллибэтэ, тоҕо диэтэххэ кинини айарыҥ сатаммат эбит.",
"autosumm-blank": "Бу сирэй ыраастаныллыбыт",
"autosumm-replace": "Сирэй иһэ уларытыллыбыт: '$1'",
"autoredircomment": "Утаарыы: [[$1]]",
- "autosumm-removed-redirect": "Сотуллубут утаарыы: $1",
- "autosumm-changed-redirect-target": "Утаарыы мантан $1 манна $2 уларыйда",
+ "autosumm-removed-redirect": "Сотуллубут утаарыы: [[$1]]",
+ "autosumm-changed-redirect-target": "Утаарыы мантан [[$1]] манна [[$2]] уларыйда",
"autosumm-new": "'$1' ыйааһыннаах саҥа сирэй оҥоһулунна",
"autosumm-newblank": "Кураанах сирэй оҥоһулунна",
"size-bytes": "$1 байт",
"version-poweredby-others": "атыттар",
"version-poweredby-translators": "translatewiki.net тылбаасчыттара",
"version-credits-summary": "[[Special:Version|MediaWiki]] сайдыытыгар үлэлэрин иһин манна ахтыллыбыт дьоҥҥо махтанабыт.",
- "version-license-info": "MediaWiki көҥүл Ñ\82аÑ\80Ò\95анаÑ\80 бÑ\8bÑ\80агÑ\8bÑ\80ааммалаÑ\80га кииÑ\80Ñ\8dÑ\80, кинини көмпүүÑ\82Ñ\8dÑ\80 аһаÒ\95аÑ\81 бÑ\8bÑ\80агÑ\8bÑ\80ааммалаÑ\80Ñ\8bн пÑ\83ондаÑ\82Ñ\8bн GNU General Public License Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bнан көҥүл Ñ\82аÑ\80Ò\95аÑ\82аÑ\80гÑ\8bÑ\82 Ñ\83онна/Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80гÑ\8bÑ\82 көҥүллÑ\8dнÑ\8dÑ\80; иккиÑ\81 Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 онÑ\82он Ñ\85ойÑ\83ккÑ\83 Ñ\85аннÑ\8bк баÒ\95аÑ\80аÑ\80 баÑ\80Ñ\8bлÑ\8bÑ\82Ñ\82ан Ñ\81аÒ\95алаан.\n\nMediaWiki Ñ\82Ñ\83һалааÑ\85 бÑ\83оллÑ\83н диÑ\8dн Ñ\82аÑ\80Ò\95аÑ\82Ñ\8bллаÑ\80, ол Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и Ð\90ТЫЫÐ\9bÐ\90Ð\9dÐ\90РСЫÐ\90Ð\9dÐ\9dÐ\90ÒºÐ\90 Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ð¥Ð\90Ð\9dÐ\9dЫÐ\9a ÐРРЧÐ\9eÐ\9fЧУ СÐ\9eРУÐ\9aÐ\9aÐ\90 СӨÐ\9f ТҮÐ\91ÐÒºÐ\98Ð\98ТРбигÑ\8dÑ\80гÑ\8dÑ\82иллибÑ\8dÑ\82 (гаÑ\80анÑ\82иÑ\8fÑ\82а Ñ\81Ñ\83оÑ\85). Сиһилии GNU General Public License Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bн көÑ\80Ò¯Ò¥.\n\n[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License копиÑ\8fÑ\82Ñ\8bн] бÑ\83 бÑ\8bÑ\80агÑ\8bÑ\80аамманÑ\8b кÑ\8bÑ\82Ñ\82а Ñ\8bлÑ\8bаÑ\85Ñ\82ааÑ\85 Ñ\8dÑ\82игиÑ\82, ол Ñ\81аÑ\82аммаÑ\82аÑ\85 бÑ\83оллаÒ\95Ñ\8bна Free Software Foundation, Inc. Ñ\82Ñ\8dÑ\80илÑ\82Ñ\8dÒ\95Ñ\8d Ñ\81Ñ\83Ñ\80Ñ\83кÑ\82а Ñ\81Ñ\83Ñ\80Ñ\83йÑ\83Ò¥, бÑ\83 аадÑ\8bÑ\80Ñ\8bÑ\81ка: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html Ñ\81аайка кииÑ\80Ñ\8dн ааÒ\95Ñ\8bÒ¥].",
+ "version-license-info": "MediaWiki көҥүл Ñ\82аÑ\80Ò\95анаÑ\80 бÑ\8bÑ\80агÑ\8bÑ\80аама. Ð\9eнон GNU General Public License (иккиÑ\81 Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 онÑ\82он Ñ\85ойÑ\83ккÑ\83 Ñ\85аннÑ\8bк баÒ\95аÑ\80аÑ\80 баÑ\80Ñ\8bлÑ\8bÑ\82Ñ\82ан Ñ\81аÒ\95алаан) Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bнан көҥүл Ñ\82аÑ\80Ò\95аÑ\82аÑ\80 Ñ\83онна/Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 көҥүллÑ\8dнÑ\8dÑ\80.\n\nMediaWiki Ñ\82Ñ\83һалааÑ\85 бÑ\83оллÑ\83н диÑ\8dн Ñ\82аÑ\80Ò\95аÑ\82Ñ\8bллаÑ\80, ол Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и <strong>Ð\90ТЫЫÐ\9bÐ\90Ð\9dÐ\90РСЫÐ\90Ð\9dÐ\9dÐ\90ÒºÐ\90</strong> Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 <strong>Ð¥Ð\90Ð\9dÐ\9dЫÐ\9a ÐРРЧÐ\9eÐ\9fЧУ СÐ\9eРУÐ\9aÐ\9aÐ\90 СӨÐ\9f ТҮÐ\91ÐÒºÐ\98Ð\98ТÐ</strong> <em>бигÑ\8dÑ\80гÑ\8dÑ\82иллибÑ\8dÑ\82</em> (гаÑ\80анÑ\82иÑ\8fÑ\82а Ñ\81Ñ\83оÑ\85). Сиһилии GNU General Public License Ñ\83Ñ\81Ñ\83лÑ\83обÑ\83йаÑ\82Ñ\8bн көÑ\80.\n\n[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License кÑ\83опÑ\83йаÑ\82Ñ\8bн] бÑ\83 бÑ\8bÑ\80агÑ\8bÑ\80ааманÑ\8b кÑ\8bÑ\82Ñ\82а Ñ\8bлÑ\8bаÑ\85Ñ\82ааÑ\85 Ñ\8dÑ\82иҥ, ол Ñ\81аÑ\82аммаÑ\82аÑ\85 бÑ\83оллаÒ\95Ñ\8bна Free Software Foundation, Inc. Ñ\82Ñ\8dÑ\80илÑ\82Ñ\8dÒ\95Ñ\8d Ñ\81Ñ\83Ñ\80Ñ\83кÑ\82а Ñ\81Ñ\83Ñ\80Ñ\83й, бÑ\83 аадÑ\8bÑ\80Ñ\8bÑ\81ка: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Ñ\8dбÑ\8dÑ\82Ñ\8dÑ\80 манна кииÑ\80Ñ\8dн [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ааÑ\85].",
"version-software": "Туруоруллубут бырагырааммалар",
"version-software-product": "Бородуукта",
"version-software-version": "Барыл (торум)",
"tags-create-reason": "Төрүөтэ:",
"tags-create-submit": "Оҥоруу",
"tags-create-no-name": "Бэлиэ аатын суруйуохтааххын.",
- "tags-create-invalid-chars": "Бэлиэ аатыгар сопутуой (<code>,</code>) эбэтэр слэш (<code>/</code>) буолуохтаах.",
+ "tags-create-invalid-chars": "Бэлиэ аатыгар сопутуой (<code>,</code>), паайп (<code>|</code>), эбэтэр слэш (<code>/</code>) суох буолуохтаах.",
"tags-create-invalid-title-chars": "Тиэк аатыгар сирэй баһыгар туттуллуо суохтаах бэлиэ киириэ суохтаах",
"tags-create-already-exists": "«$1» тиэк хайыы-үйэ баар эбит.",
"tags-create-warnings-above": "«$1» тиэги оҥорорго маннык {{PLURAL:$2|сэрэтии көһүннэ|сэрэтиилэр көһүннүлэр}}:",
"compare-invalid-title": "Суруллубут аат туттуллара сатаммат.",
"compare-title-not-exists": "Ыйбыт аатыҥ суох эбит.",
"compare-revision-not-exists": "Ыйбыт барылыҥ суох эбит.",
- "diff-form": "'''тас көстүүтэ, быһыыта'''",
+ "diff-form": "Уратылар",
"diff-form-oldid": "Торум урукку нүөмэрэ (булгуччута суох)",
"diff-form-revid": "Уратылаах торум нүөмэрэ",
"diff-form-submit": "Уратылары көрдөр",
"limitreport-expansiondepth": "Кэҥэтии дириҥин муҥутуур кээмэйэ",
"limitreport-expensivefunctioncount": "Анализатор \"сыаналаах\" функцияларын ахсаана",
"expandtemplates": "Халыыптары тэнитии",
- "expand_templates_intro": "Бу аналлаах сирэй тиэкис туох баар халыыптарын тэнитэн көрдөрөр.\nПарсер функциялара эмиэ тэнитиллэллэр. \n<code><nowiki>{{</nowiki>#language:...}}</code> уонна переменнайдар <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. \nУопсайынан, бу барыта хос фигурнай ускуопка иһигэр баар.",
+ "expand_templates_intro": "Бу аналлаах сирэй тиэкис туох баар халыыптарын тэнитэн көрдөрөр.\nПарсер функциялара эмиэ тэнитиллэллэр. \n<code><nowiki>{{#language:...}}</code> уонна переменнайдар <code><nowiki>{{CURRENTDAY}}</code>. \nУопсайынан, бу барыта хос фигурнай ускуопка иһигэр баар.",
"expand_templates_title": "{{FULLPAGENAME}} сирэй аата уонна да атын сибидиэнньэлэр:",
"expand_templates_input": "Киирэр сурук:",
"expand_templates_output": "Түмүк",
"expand_templates_preview": "Холоон көрүү",
"expand_templates_preview_fail_html": "<em>raw HTML холбоно сылдьар {{SITENAME}} ситим-сир сиэссийэтин сүтэрэн кэбиспит буолан, эрдэ көрүү сатаммат, бу JavaScript-атаакаттан көмүскэнэр ньыма.</em>\n\n<strong>Эрдэ көрөрүҥ буортуну аҕалбат буоллаҕына хатылаан көр.</strong>\nСин биир сатамматаҕына [[Special:UserLogout|үлэҕин түмүктээ]] уонна хат киирэн көр.",
"expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} ситим-сиргэ «сиикэй» HTML холбоммут буолан уонна эн ааккын эппэтэх буолаҥҥын эрдэ көрүү сатаммат, бу JavaScript-атаакаттан көмүскэнии.</em>\n\n<strong>Өскөтүн туох да куһаҕаны оҥоруоххун баҕарбат буоллаххына, [[Special:UserLogin|киир]] уонна хатылаа.",
- "expand_templates_input_missing": "Ðһиги Ñ\85аннÑ\8bк Ñ\8dмиÑ\82 Ñ\82иÑ\8dкиһи Ñ\82Ñ\83Ñ\80Ñ\83оÑ\80.",
+ "expand_templates_input_missing": "ТÑ\83гÑ\83 Ñ\8dмиÑ\82 Ñ\81Ñ\83Ñ\80Ñ\83йÑ\83оÑ\85Ñ\82ааÑ\85Ñ\85Ñ\8bн.",
"pagelanguage": "Сирэй тылын уларытыы",
"pagelang-name": "Сирэй",
"pagelang-language": "Омугун тыла",
"restrictionsfield-badip": "IP эбэтэр IP-лар диапазоннара сатаммат: $1",
"restrictionsfield-label": "Көҥүллэммит IP диапазона:",
"restrictionsfield-help": "Устуруокаҕа биирдии IP-аадырыс эбэтэр CIDR-диапазон. Барытын көҥүллүүргэ маны туһан:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Алҕас: $1",
+ "edit-error-long": "Алҕас:\n\n$1",
"revid": "$1 торум",
"pageid": "$1 сирэй нүөмэрэ",
"rawhtml-notallowed": "<html> тиэктэр көннөрү сирэйдэр эрэ истэригэр туттулаллар.",
"undelete-cantedit": "Сөргүтэриҥ табыллыбата, тоҕо диэтэххэ бу сирэйи уларытар быраабыҥ суох эбит.",
"undelete-cantcreate": "Бу сирэйи сөргүтэриҥ табыллыбата, тоҕо диэтэххэ сотуллубут, саҥаны буоллаҕына оҥорор кыаҕыҥ суох эбит.",
"pagedata-title": "Сирэй туһунан",
+ "pagedata-text": "Бу сирэй сирэйдэр тустарынан кэпсиир алтыһааны көрдөрөр. URL-га сирэй аатын суруй. \n* Иһинээҕитэ эн көмпүүтэриҥ Accept диэнин туһанан көрдөрүллүө. Ол аата сирэй туһунан информация хайдах көстөрө көмпүүтэриҥ хайдах нарыламмытыттан тутулуктаах.",
+ "pagedata-not-acceptable": "Сөп түбэһэр формаат көстүбэтэ. MIME маннык көрүҥнэрэ сөп түбэһэллэр: $1",
"pagedata-bad-title": "Алҕастаах аат: $1."
}
"Srdjan m",
"Conquistador",
"Xð",
- "Сербијана"
+ "Сербијана",
+ "Acamicamacaraca"
]
},
"tog-underline": "Podvuci linkove:",
"uploadlogpage": "Registar postavljanja",
"uploadlogpagetext": "Ispod je popis najnovijih postavljanja datoteka.\nVidi [[Special:NewFiles|galeriju novih datoteka]] za slikovitiji pregled.",
"filename": "Ime fajla / Име датотеке",
- "filedesc": "Sažetak - СажеÑ\82ак",
- "fileuploadsummary": "Sažetak / СажеÑ\82ак:",
+ "filedesc": "Sažetak - Ð\9eпиÑ\81",
+ "fileuploadsummary": "Sažetak / Ð\9eпиÑ\81:",
"filereuploadsummary": "Izmjene datoteke:",
"filestatus": "Status autorskih prava:",
"filesource": "Izvor / Извор",
"delete-legend": "Obriši",
"historywarning": "<strong>Upozorenje</strong>: Stranica koju želite da obrišete ima historiju sa otprilike $1 {{PLURAL:$1|revizijom|revizije|revizija}}:",
"confirmdeletetext": "Upravo ćete obrisati stranicu sa svom njenom historijom.\nMolimo da potvrdite da ćete to učiniti, da razumijete posljedice te da to činite u skladu sa [[{{MediaWiki:Policy-url}}|pravilima]].",
- "actioncomplete": "Akcija završena\n\nАкција завршена",
+ "actioncomplete": "Radnja završena\n\nРадња завршена",
"actionfailed": "Akcija nije uspjela",
"deletedtext": "\"$1\" je obrisan/a.\nV. $2 za registar nedavnih brisanja.",
"dellogpage": "Evidencija brisanja",
"ipb-disableusertalk": "Onemogući ovog korisnika da uređuje svoju vlastitu stranicu za razgovor dok je blokiran",
"ipb-change-block": "Ponovno blokiraj korisnika sa ovim postavkama",
"ipb-confirm": "Potvrdite blokiranje",
- "badipaddress": "Neodgovarajuća IP adresa / Неодговарајућа ИП адреса",
+ "badipaddress": "Neodgovarajuća IP adresa / Неодговарајућа IP адреса",
"blockipsuccesssub": "Blokiranje je uspjelo",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran}}.<br />\nBlokiranja možete da pogledate [[Special:BlockList|ovde]].",
"ipb-blockingself": "Ovom akcijom ćete blokirati sebe! Da li ste sigurni da to želite?",
{
"@metadata": {
"authors": [
- "Saraiki"
+ "Saraiki",
+ "BukhariSaeed"
]
},
"tog-underline": "لنک ہیٹھ لکیر",
"currentrev": "موجودہ حالت",
"currentrev-asof": "حالیہ نسخہ بمطابق $1",
"revisionasof": "دی تبدیلیاں $1",
- "revision-info": " $1 دی دہرائی توں {{جنس:$6|$2}}$7",
+ "revision-info": "$1 دی دہرائی توں {{GENDER:$6|$2}}$7",
"previousrevision": "→ پراݨا نسخہ",
"nextrevision": "نویں تبدیلی →",
"currentrevisionlink": "موجودہ حالت",
"restrictionsfield-badip": "Neveljaven IP-naslov ali obseg: $1",
"restrictionsfield-label": "Dovoljeni IP-obsegi:",
"restrictionsfield-help": "En IP-naslov ali CIDR-območje na vrstico. Da omogočite vse, uporabite:\n<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Napaka: $1",
+ "edit-error-long": "Napake:\n\n$1",
"revid": "redakcija $1",
"pageid": "ID strani $1",
"rawhtml-notallowed": "Oznak <html> ni možno uporabljati izven normalnih strani.",
]
},
"tog-underline": "Подвлачење веза:",
- "tog-hideminor": "СакÑ\80иÑ\98 маÑ\9aе измене Ñ\83 Ñ\81пиÑ\81кÑ\83 скорашњих измена",
- "tog-hidepatrolled": "СакÑ\80иÑ\98 паÑ\82Ñ\80олиÑ\80ане измене Ñ\83 Ñ\81пиÑ\81кÑ\83 скорашњих измена",
+ "tog-hideminor": "СакÑ\80иÑ\98 маÑ\9aе измене Ñ\81а Ñ\81пиÑ\81ка скорашњих измена",
+ "tog-hidepatrolled": "СакÑ\80иÑ\98 паÑ\82Ñ\80олиÑ\80ане измене Ñ\81а Ñ\81пиÑ\81ка скорашњих измена",
"tog-newpageshidepatrolled": "Сакриј патролиране странице са списка нових страница",
"tog-hidecategorization": "Сакриј категоризацију страница",
"tog-extendwatchlist": "Прошири списак надгледања за приказ свих измена, не само скорашњих",
"tog-showtoolbar": "Прикажи траку с алаткама за уређивање",
"tog-editondblclick": "Уређивање страница двоструким кликом",
"tog-editsectiononrightclick": "Уређивање одељака десним кликом на њихове наслове",
- "tog-watchcreations": "Додај странице које направим и датотеке које пошаљем у списак надгледања",
- "tog-watchdefault": "Додај странице и датотеке које изменим у списак надгледања",
- "tog-watchmoves": "Додај странице и датотеке које преместим у списак надгледања",
- "tog-watchdeletion": "Додај странице и датотеке које обришем у списак надгледања",
- "tog-watchuploads": "Додај датотеке које отпремим у списак надгледања",
- "tog-watchrollback": "Додај странице на којима сам вратио измене у списак надгледања",
+ "tog-watchcreations": "Додај странице које направим и датотеке које пошаљем у мој списак надгледања",
+ "tog-watchdefault": "Додај странице и датотеке које изменим у мој списак надгледања",
+ "tog-watchmoves": "Додај странице и датотеке које преместим у мој списак надгледања",
+ "tog-watchdeletion": "Додај странице и датотеке које обришем у мој списак надгледања",
+ "tog-watchuploads": "Додај датотеке које отпремим у мој списак надгледања",
+ "tog-watchrollback": "Додај странице на којима сам вратио измене у мој списак надгледања",
"tog-minordefault": "Означавај све измене као мање",
- "tog-previewontop": "Прикажи преглед пре оквира за уређивање",
+ "tog-previewontop": "Прикажи претпреглед пре оквира за уређивање",
"tog-previewonfirst": "Прикажи преглед на првој измени",
- "tog-enotifwatchlistpages": "Пошаљи ми имејл када се промени страница/датотека коју надгледам",
- "tog-enotifusertalkpages": "Ð\9fоÑ\88аÑ\99и ми имеÑ\98л када Ñ\81е пÑ\80омени моÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86а за Ñ\80азговоÑ\80",
+ "tog-enotifwatchlistpages": "Пошаљи ми имејл када се страница или датотека коју надгледам измени",
+ "tog-enotifusertalkpages": "Ð\9fоÑ\88аÑ\99и ми имеÑ\98л када Ñ\81е моÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86а за Ñ\80азговоÑ\80 измени",
"tog-enotifminoredits": "Пошаљи ми имејл и за мање измене у страницама и датотекама",
"tog-enotifrevealaddr": "Прикажи моју имејл адресу у порукама обавештења",
"tog-shownumberswatching": "Прикажи број корисника који надгледају",
- "tog-oldsig": "ТекÑ\83Ñ\9bи потпис:",
+ "tog-oldsig": "Ð\92аÑ\88 Ñ\82Ñ\80енÑ\83Ñ\82ни потпис:",
"tog-fancysig": "Сматрај потпис као викитекст (без самоповезивања)",
- "tog-uselivepreview": "Прикажи преглед без освежавања стране",
+ "tog-uselivepreview": "Прикажи претпреглед без освежавања стране",
"tog-forceeditsummary": "Упозори ме када не унесем опис измене",
"tog-watchlisthideown": "Сакриј моје измене са списка надгледања",
"tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
"tog-watchlisthideminor": "Сакриј мање измене са списка надгледања",
"tog-watchlisthideliu": "Сакриј измене пријављених корисника са списка надгледања",
"tog-watchlistreloadautomatically": "Аутоматски освежи списак надгледања кад год се филтер измени (потребан JavaScript)",
- "tog-watchlistunwatchlinks": "Ð\94одаÑ\98 дÑ\83гме за Ñ\83кÑ\99Ñ\83Ñ\87еÑ\9aе/иÑ\81кÑ\99Ñ\83Ñ\87еÑ\9aе надгледаÑ\9aа Ñ\81вакоÑ\98 Ñ\81Ñ\82Ñ\80ани на Ñ\81пиÑ\81кÑ\83 надгледаÑ\9aа (поÑ\82Ñ\80ебан Ð\88аваÑ\81кÑ\80ипÑ\82 за еÑ\84екаÑ\82 Ñ\83кÑ\99Ñ\83Ñ\87и/иÑ\81кÑ\99Ñ\83Ñ\87и)",
+ "tog-watchlistunwatchlinks": "Ð\94одаÑ\98 везе за диÑ\80екÑ\82но додаваÑ\9aе/Ñ\83клаÑ\9aаÑ\9aе Ñ\81Ñ\82авки Ñ\81а Ñ\81пиÑ\81ка надгледаÑ\9aа (поÑ\82Ñ\80ебан Ð\88аваСкÑ\80ипÑ\82)",
"tog-watchlisthideanons": "Сакриј измене анонимних корисника са списка надгледања",
"tog-watchlisthidepatrolled": "Сакриј патролиране измене са списка надгледања",
"tog-watchlisthidecategorization": "Сакриј категоризацију страница",
"tog-ccmeonemails": "Пошаљи ми копије имејлова које пошаљем другим корисницима",
"tog-diffonly": "Не приказуј садржај странице испод разлика",
- "tog-showhiddencats": "Скривене категорије",
+ "tog-showhiddencats": "Ð\9fÑ\80икажи Ñ\81кривене категорије",
"tog-norollbackdiff": "Не приказуј разлику након извршеног враћања",
- "tog-useeditwarning": "УпозоÑ\80и ме када напÑ\83Ñ\88Ñ\82ам Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\81а неÑ\81аÑ\87Ñ\83ваним пÑ\80оменама",
+ "tog-useeditwarning": "УпозоÑ\80и ме када напÑ\83Ñ\88Ñ\82ам Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\81а неÑ\81аÑ\87Ñ\83ваним изменама",
"tog-prefershttps": "Увек користи сигурну конекцију када сам пријављен.",
- "underline-always": "Увек подвлачи",
- "underline-never": "Никад не подвлачи",
+ "underline-always": "Увек",
+ "underline-never": "Никад",
"underline-default": "Према теми или прегледачу",
"editfont-style": "Изглед фонта у уређивачком оквиру:",
"editfont-monospace": "Сразмерно широк фонт",
"category-file-count-limited": "{{PLURAL:$1|1=Следећа датотека је|Следеће $1 датотеке су|Следећих $1 датотека је}} у овој категорији.",
"listingcontinuesabbrev": "наст.",
"index-category": "Пописане странице",
- "noindex-category": "Ð\9dеиндекÑ\81иÑ\80ане странице",
+ "noindex-category": "Ð\9dепопиÑ\81ане странице",
"broken-file-category": "Странице с неисправним везама до датотека",
"about": "О нама",
"article": "Страница са садржајем",
"newwindow": "(отвара се у новом прозору)",
"cancel": "Откажи",
"moredotdotdot": "Више…",
- "morenotlisted": "Ð\9eваÑ\98 Ñ\81пиÑ\81ак ниÑ\98е комплеÑ\82ан.",
+ "morenotlisted": "Ð\9eваÑ\98 Ñ\81пиÑ\81ак можда ниÑ\98е поÑ\82пÑ\83н.",
"mypage": "Страница",
"mytalk": "Разговор",
"anontalk": "Разговор",
"navigation-heading": "Навигациони мени",
"errorpagetitle": "Грешка",
"returnto": "Назад на $1.",
- "tagline": "Извор: {{SITENAME}}",
+ "tagline": "Из {{SITENAME}}",
"help": "Помоћ",
- "search": "Ð\9fÑ\80еÑ\82Ñ\80ага",
+ "search": "Ð\9fÑ\80еÑ\82Ñ\80ажи",
"searchbutton": "Претражи",
"go": "Иди",
"searcharticle": "Иди",
"talk": "Разговор",
"views": "Прегледи",
"toolbox": "Алатке",
- "tool-link-userrights": "УÑ\80еди {{GENDER:$1|корисничке}} групе",
- "tool-link-userrights-readonly": "{{GENDER:$1|Корисничке}} групе",
- "tool-link-emailuser": "Пошаљи {{GENDER:$1|имејл}}",
+ "tool-link-userrights": "Ð\9fÑ\80омени {{GENDER:$1|корисничке}} групе",
+ "tool-link-userrights-readonly": "Погледај {{GENDER:$1|корисничке}} групе",
+ "tool-link-emailuser": "Пошаљи имејл {{GENDER:$1|кориснику|корисници}}",
"imagepage": "Погледај страницу датотеке",
"mediawikipage": "Погледај страницу поруке",
"templatepage": "Погледај страницу шаблона",
"viewhelppage": "Погледај страницу помоћи",
- "categorypage": "Ð\9fогледаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 каÑ\82егоÑ\80иÑ\98а",
+ "categorypage": "Ð\9fогледаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 каÑ\82егоÑ\80иÑ\98е",
"viewtalkpage": "Погледај разговор",
"otherlanguages": "На другим језицима",
"redirectedfrom": "(преусмерено са $1)",
"pool-timeout": "Истек времена чека на закључавање",
"pool-queuefull": "Ред је пун захтева",
"pool-errorunknown": "Непозната грешка",
- "pool-servererror": "Услуга бројача пула није доступна ($1).",
+ "pool-servererror": "Услуга бројача редова није доступна ($1).",
"poolcounter-usage-error": "Грешка при употреби: $1",
"aboutsite": "О пројекту {{SITENAME}}",
"aboutpage": "Project:О нама",
"title-invalid-utf8": "Тражени назив странице садржи неважећи UTF-8 знак.",
"title-invalid-interwiki": "Тражени наслов странице садржи унутрашњу вики везу која не може бити кориштена у насловима.",
"title-invalid-talk-namespace": "Тражени наслов странице се односи на страницу за разговор која не може постојати.",
- "title-invalid-characters": "ТÑ\80ажени наÑ\81лов има неважеÑ\9bе каÑ\80акÑ\82еÑ\80е: „$1“.",
+ "title-invalid-characters": "ТÑ\80ажени наÑ\81лов има неважеÑ\9bе знакове: „$1“.",
"title-invalid-relative": "Наслов има релативну путању. Релативни наслови страница (./, ../) нису важећи јер ће често бити недоступни у корисничком прегледачу.",
"title-invalid-magic-tilde": "Тражени наслов странице садржи неважећи след магичног знака тилда (<nowiki>~~~</nowiki>).",
"title-invalid-too-long": "Тражени назив странице је предугачак. Не сме бити дужи од $1 {{PLURAL:$1|бајта|бајтова}} у UTF-8 кодирању.",
"actionthrottledtext": "У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.",
"protectedpagetext": "Ова страница је закључана за измене и друге радње.",
"viewsourcetext": "Можете читати и копирати изворник ове странице.",
- "viewyourtext": "Можете да погледате и копирате изворни текст <strong>ваших измена</strong> на овој страници.",
+ "viewyourtext": "Можете да погледате и копирате изворник <strong>ваших измена</strong> на овој страници.",
"protectedinterface": "Ова страница садржи текст интерфејса за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе било којег викија, посетите [https://translatewiki.net/ translatewiki.net], пројекат за локализацију Медијавикија.",
"editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
"translateinterface": "Да додате или промените преводе за све викије, посетите [https://translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
"cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
- "namespaceprotected": "Немате дозволу да уређујете странице у именском простору <strong>$1</strong>.",
+ "namespaceprotected": "Немате дозволу да уређујете странице у именском простору: <strong>$1</strong>.",
"customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи лична подешавања другог корисника.",
- "customjsprotected": "Немате дозволу да мењате ову страницу јаваскрипта јер садржи личне поставке другог корисника.",
+ "customjsprotected": "Немате дозволу да мењате ову страницу JavaScript јер садржи лична подешавања другог корисника.",
"mycustomcssprotected": "Немате дозволу за мењање ове CSS странице.",
"mycustomjsprotected": "Немате дозволу за мењање ове JavaScript странице.",
"myprivateinfoprotected": "Немате дозволу за мењање ваших личних информација.",
"exception-nologin": "Нисте пријављени",
"exception-nologin-text": "Пријавите се да бисте приступили овој страници или радњи.",
"exception-nologin-text-manual": "Морате бити $1 да бисте приступили овој страници или радњи.",
- "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: ''$1''",
+ "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: <em>$1</em>",
"virus-scanfailed": "неуспешно скенирање (код $1)",
"virus-unknownscanner": "непознати антивирус:",
- "logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
+ "logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију Вашег прегледача.",
"cannotlogoutnow-title": "Одјава тренутно није могућа",
"cannotlogoutnow-text": "Одјава није могућа током употребе $1.",
"welcomeuser": "Добро дошли, $1!",
"userlogin-yourpassword": "Лозинка",
"userlogin-yourpassword-ph": "Унесите вашу лозинку",
"createacct-yourpassword-ph": "Унесите лозинку",
- "yourpasswordagain": "Потврда лозинке:",
- "createacct-yourpasswordagain": "Потврдите лозинку",
- "createacct-yourpasswordagain-ph": "Унесите лозинку још једном",
+ "yourpasswordagain": "Поново унеси лозинку:",
+ "createacct-yourpasswordagain": "Потврди лозинку",
+ "createacct-yourpasswordagain-ph": "Унесите лозинку поново",
"userlogin-remembermypassword": "Остави ме пријављеног/у",
"userlogin-signwithsecure": "Користите сигурну конекцију",
"cannotlogin-title": "Пријава није могућа",
"userlogin-reauth": "Морате се поново пријавити да би верификовали да сте {{GENDER:$1|$1}}.",
"userlogin-createanother": "Отвори још један налог",
"createacct-emailrequired": "Имејл адреса",
- "createacct-emailoptional": "Ð\98меÑ\98л адÑ\80еÑ\81а (опÑ\86ионо)",
+ "createacct-emailoptional": "Ð\98меÑ\98л адÑ\80еÑ\81а (необавезно)",
"createacct-email-ph": "Унесите Вашу имејл адресу",
"createacct-another-email-ph": "Унесите имејл адресу",
"createaccountmail": "Користите привремену, случајно створену лозинку и пошаљите на наведену имејл адресу",
- "createacct-realname": "Ð\9fÑ\80аво име (опÑ\86ионо)",
+ "createacct-realname": "Ð\9fÑ\80аво име (необавезно)",
"createacct-reason": "Разлог",
"createacct-reason-ph": "Зашто правите још један налог?",
"createacct-submit": "Отвори налог",
"createacct-benefit-body2": "{{PLURAL:$1|страница|странице|страница}}",
"createacct-benefit-body3": "недавно {{PLURAL:$1|активни корисник|активна корисника|активних корисника}}",
"badretype": "Унете лозинке се не поклапају.",
- "usernameinprogress": "Налог за ово корисничко име се већ прави, молимо сачекајте.",
+ "usernameinprogress": "Налог за ово корисничко име се већ прави, сачекајте.",
"userexists": "Корисничко име је заузето. Изаберите друго.",
"loginerror": "Грешка при пријављивању",
"createacct-error": "Дошло је до грешке при отварању налога",
"nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "Унели сте неисправно корисничко име.",
"loginsuccesstitle": "Успешно пријављивање",
- "loginsuccess": "'''Пријављени сте као „$1“.'''",
+ "loginsuccess": "<strong>Пријављени сте на {{SITENAME}} као „$1”.</strong>",
"nosuchuser": "Не постоји корисник с именом „$1“.\nКорисничка имена су осетљива на мала и велика слова.\nПроверите да ли сте га добро унели или [[Special:CreateAccount|отворите нови налог]].",
"nosuchusershort": "Корисник с именом „$1“ не постоји.\nПроверите да ли сте правилно написали.",
"nouserspecified": "Морате навести корисничко име.",
"password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
"mailmypassword": "Ресетуј лозинку",
"passwordremindertitle": "{{SITENAME}} — привремена лозинка",
- "passwordremindertext": "Неко, вероватно ви, са ИП адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
+ "passwordremindertext": "Неко, вероватно ви, са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
"noemail": "Не постоји имејл адреса за {{GENDER:$1|корисника|корисницу}} $1.",
"noemailcreate": "Морате навести исправну имејл адресу.",
"passwordsent": "Нова лозинка је послата на имејл адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
"eauthentsent": "На наведену имејл адресу је послат потврдни код.\nПре него што пошаљемо даљње поруке, пратите упутства с имејла да бисте потврдили да сте Ви отворили налог.",
"throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
"mailerror": "Грешка при слању поруке: $1",
- "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.",
+ "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу IP адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове IP адресе тренутно не могу отворити више налога.",
"emailauthenticated": "Ваша имејл адреса је потврђена $2 у $3.",
- "emailnotauthenticated": "Ваша имејл адреса још није потврђена.\nИмејл неће бити послат ни у једном од следећих случајева.",
+ "emailnotauthenticated": "Ваша имејл адреса још увек није потврђена.\nИмејл неће бити послат ни у једном од следећих случајева.",
"noemailprefs": "Унесите имејл адресу како би ове могућности радиле.",
"emailconfirmlink": "Потврдите своју имејл адресу",
"invalidemailaddress": "Имејл адреса не може бити прихваћена јер је неисправног облика.\nУнесите исправну адресу или оставите празно поље.",
"botpasswords-label-delete": "Обриши",
"botpasswords-label-resetpassword": "Ресетуј лозинку",
"botpasswords-label-grants-column": "Одобрено",
- "botpasswords-bad-appid": "â\80\9e$1â\80\9d ниÑ\98е валидан назив бота.",
+ "botpasswords-bad-appid": "â\80\9e$1â\80\9d ниÑ\98е иÑ\81пÑ\80аван назив бота.",
"botpasswords-insert-failed": "Неуспешно додавање бота \"$1\". Да ли је већ додат?",
"botpasswords-update-failed": "Није могуће ажурирати бота \"$1\". Да ли је обрисан?",
"botpasswords-created-title": "Направљена лозинка бота",
"resetpass-abort-generic": "Промену лозинке је спречио додатак.",
"resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
"resetpass-expired-soft": "Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните „{{int:authprovider-resetpass-skip-label}}“ да је поставите касније.",
- "resetpass-validity-soft": "Ð\92аÑ\88а лозинка ниÑ\98е ваÑ\99ана: $1\n\nМолимо изаберите нову или кликните „{{int:authprovider-resetpass-skip-label}}“ да ресетујете касније.",
+ "resetpass-validity-soft": "Ð\92аÑ\88а лозинка ниÑ\98е иÑ\81пÑ\80авна: $1\n\nМолимо изаберите нову или кликните „{{int:authprovider-resetpass-skip-label}}“ да ресетујете касније.",
"passwordreset": "Обнављање лозинке",
"passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на имејл.",
"passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на имејл.}}",
"passwordreset-domain": "Домен:",
"passwordreset-email": "Имејл адреса:",
"passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
- "passwordreset-emailtext-ip": "Неко (вероватно Ви, са ИП адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
+ "passwordreset-emailtext-ip": "Неко (вероватно Ви, са IP адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
"passwordreset-emailtext-user": "{{GENDER:$1|Корисник је затражио|Корисница је затражила}} подсетник о подацима за пријаву на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
"passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
"passwordreset-emailsentemail": "Ако је ово имејл адреса повезана са Вашим налогом, подсетник о лозинци ће бити послат на имејл.",
"resettokens-no-tokens": "Нема жетона за ресетовање.",
"resettokens-tokens": "Жетони:",
"resettokens-token-label": "$1 (тренутна вредност: $2)",
- "resettokens-watchlist-token": "Жетон за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
+ "resettokens-watchlist-token": "Жетон за веб довод (Atom/RSS) [[Special:Watchlist|измена на страницама у вашем списку надгледања]]",
"resettokens-done": "Жетони су ресетовани",
"resettokens-resetbutton": "Ресетуј изабране жетоне",
"bold_sample": "Подебљан текст",
"bold_tip": "Подебљан текст",
- "italic_sample": "Искошени текст",
- "italic_tip": "Искошени текст",
+ "italic_sample": "Искошен текст",
+ "italic_tip": "Искошен текст",
"link_sample": "Наслов везе",
"link_tip": "Унутрашња веза",
- "extlink_sample": "http://www.example.com/ наслов везе",
+ "extlink_sample": "http://www.пример.com наслов везе",
"extlink_tip": "Спољашња веза (с префиксом http://)",
"headline_sample": "Текст наслова",
"headline_tip": "Поднаслов (ниво 2)",
"nowiki_sample": "Убаците необликован текст овде",
"nowiki_tip": "Занемари вики обликовање",
"image_sample": "Пример.jpg",
- "image_tip": "УгÑ\80аÑ\92ивање датотеке",
+ "image_tip": "УбаÑ\86ивање датотеке",
"media_sample": "Пример.ogg",
"media_tip": "Веза",
"sig_tip": "Ваш потпис са тренутним временом",
- "hr_tip": "Ð\92одоÑ\80авна линиÑ\98а (коÑ\80иÑ\81Ñ\82иÑ\82и ретко)",
+ "hr_tip": "Ð\92одоÑ\80авна линиÑ\98а (коÑ\80иÑ\81Ñ\82иÑ\82е ретко)",
"summary": "Опис измене:",
"subject": "Тема:",
"minoredit": "Ово је мања измена",
"preview": "Претпреглед",
"showpreview": "Прикажи претпреглед",
"showdiff": "Прикажи измене",
- "blankarticle": "<strong>Упозорење:</strong> Страница коју правите је празна.\nАко још једном притиснете „$1”, страница ће бити направљена без икаквог садржаја.",
- "anoneditwarning": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9dисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong>, поред осталих погодности које добијате Ваше измене ће бити приписиване Вашем корисничком имену.",
+ "blankarticle": "<strong>Упозорење:</strong> страница коју правите је празна.\nАко још једном притиснете „$1”, страница ће бити направљена без икаквог садржаја.",
+ "anoneditwarning": "<strong>УпозоÑ\80еÑ\9aе:</strong> нисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong>, поред осталих погодности које добијате Ваше измене ће бити приписиване Вашем корисничком имену.",
"anonpreviewwarning": "<em>Нисте пријављени. Ако објавите страницу, Ваша IP адреса ће бити јавно видљива у њеној историји измена и другде.</em>",
- "missingsummary": "'''Подсетник:''' Нисте унели опис измене.\nАко поново кликнете на „$1”, Ваша измена ће бити сачувана без описа.",
- "selfredirect": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9fреусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница за преусмерење погрешна или уређујете погрешну страницу.\nАко још једном притиснете „$1”, преусмерење ће свеједно бити направљено.",
+ "missingsummary": "<strong>Подсетник:</strong> нисте унели опис измене.\nАко поново кликнете на „$1”, Ваша измена ће бити сачувана без описа.",
+ "selfredirect": "<strong>УпозоÑ\80еÑ\9aе:</strong> преусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница за преусмерење погрешна или уређујете погрешну страницу.\nАко још једном притиснете „$1”, преусмерење ће свеједно бити направљено.",
"missingcommenttext": "Молимо унесите коментар.",
- "missingcommentheader": "<strong>Ð\9dапомена:</strong> Ð\9dисте унели наслов теме овог коментара.\nАко поново кликнете на „$1”, измена ће бити сачувана без наслова.",
+ "missingcommentheader": "<strong>Ð\9dапомена:</strong> нисте унели наслов теме овог коментара.\nАко поново кликнете на „$1”, измена ће бити сачувана без наслова.",
"summary-preview": "Преглед описа измене:",
"subject-preview": "Преглед теме:",
"previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
"blockedtitle": "Корисник је блокиран",
- "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
- "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
+ "blockedtext": "<strong>Ваше корисничко име или IP адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана IP адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
+ "autoblockedtext": "Ваша IP адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана IP адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
"blockednoreason": "разлог није наведен",
"whitelistedittext": "За уређивање странице је потребно да будете $1.",
"confirmedittext": "Морате да потврдите своју имејл адресу пре уређивања страница.\nПоставите и потврдите имејл адресу преко [[Special:Preferences|подешавања]].",
"accmailtext": "Лозинка за {{GENDER:$1|корисника|корисницу}} [[User talk:$1|$1]] је послата на $2. Након пријаве, лозинка се може променити [[Special:ChangePassword|овде]].",
"newarticle": "(нови)",
"newarticletext": "Дошли сте на страницу која још не постоји.\nДа бисте је направили, почните да куцате у прозор испод овог текста (погледајте [$1 страницу за помоћ]).\nАко сте овде дошли грешком, вратите се на претходну страницу.",
- "anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану ИП адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
+ "anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану IP адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
"noarticletext": "На овој страници тренутно нема садржаја.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{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}}}} дневнику брисања].",
"sitecsspreview": "'''Ово је само преглед CSS-а.'''\n'''Страница још није сачувана!'''",
"sitejspreview": "'''Ово је само преглед јаваскрипта.'''\n'''Страница још није сачувана!'''",
"userinvalidcssjstitle": "<strong>Упозорење:</strong> не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
- "updated": "(Ð\90журирано)",
+ "updated": "(ажурирано)",
"note": "<strong>Напомена:</strong>",
"previewnote": "<strong>Не заборавите да је ово само претпреглед.</strong>\nВаше измене још нису сачуване!",
"continue-editing": "Иди на уређивачки оквир",
"previewconflict": "Овај преглед осликава како ће текст у текстуалном оквиру изгледати.",
"session_fail_preview": "Извињавамо се! Нисмо могли да обрадимо Вашу измену због губитка података сесије.\n\nМожда сте одјављени. <strong>Проверите да ли сте пријављени и покушајте поново</strong>.\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите, те проверите да ли су на Вашем претраживачу дозвољени колачићи са овог сајта.",
- "session_fail_preview_html": "Нисмо могли да обрадимо вашу измену због губитка података сесије.\n\n<em>Будући да је на овом викију омогућен унос HTML ознака, преглед је сакривен као мера предострожности против напада преко јаваскрипта.</em>\n\n<strong>Ако сте покушали да направите праву измену, покушајте поново.<strong>\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите и проверите да ли Ваш претраживач дозвољава колачиће са овог сајта.",
+ "session_fail_preview_html": "Нисмо могли да обрадимо вашу измену због губитка података сесије.\n\n<em>Будући да је на овом викију омогућен унос HTML ознака, преглед је сакривен као мера предострожности против напада преко јаваскрипта.</em>\n\n<strong>Ако сте покушали да направите праву измену, покушајте поново.<strong>\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите и проверите да ли Ваш прегледач дозвољава колачиће са овог сајта.",
"token_suffix_mismatch": "'''Ваша измена је одбачена јер је ваш прегледач убацио знакове интерпункције у новчић уређивања.\nТо се понекад догађа када се користи неисправан посредник.'''",
"edit_form_incomplete": "<strong>Неки делови обрасца за уређивање нису стигли до сервера. Проверите да ли су ваше измене непромењене и покушајте поново.</strong>",
"editing": "Уређујете $1",
"content-model-json": "JSON",
"content-json-empty-object": "Празан објекат",
"content-json-empty-array": "Празан низ",
- "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86е коÑ\98е коÑ\80иÑ\81Ñ\82е невалидне самозатварајуће HTML тагове",
+ "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86е коÑ\98е коÑ\80иÑ\81Ñ\82е неиÑ\81пÑ\80авне самозатварајуће HTML тагове",
"duplicate-args-warning": "<strong>Упозорење:</strong> [[:$1]] позива [[:$2]] са више од једне вредности за параметар „$3“. Само последња наведена вредност ће бити коришћена.",
"duplicate-args-category": "Странице с дуплираним аргументима код позива шаблона",
"duplicate-args-category-desc": "Страница садржи позиве шаблона који користе двоструке аргументе, као што су <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
"undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
"cantcreateaccount-text": "Отварање налога с ове ИП адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
- "cantcreateaccount-range-text": "Отварање налога са ИП адреса у распону <strong>$1</strong>, који укључује и вашу ИП адресу (<strong>$4</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+ "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону <strong>$1</strong>, који укључује и вашу IP адресу (<strong>$4</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
"viewpagelogs": "Погледај дневнике ове странице",
"nohistory": "Не постоји историја измена ове странице.",
"currentrev": "Текућа измена",
"last": "разл",
"page_first": "прва",
"page_last": "последња",
- "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мала измена",
+ "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мања измена",
"history-fieldset-title": "Преглед измена",
"history-show-deleted": "Само обрисане измене",
"histfirst": "најстарије",
"mergehistory-done": "$3 {{PLURAL:$3|измена странице $1 је спојена|измене странице $1 су спојене|измена странице $1 је спојено}} у [[:$2]].",
"mergehistory-fail": "Не могу да спојим историје. Проверите страницу и временске параметре.",
"mergehistory-fail-bad-timestamp": "Временска ознака није исправна.",
- "mergehistory-fail-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е валидна.",
- "mergehistory-fail-invalid-dest": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е валидна.",
+ "mergehistory-fail-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е иÑ\81пÑ\80авна.",
+ "mergehistory-fail-invalid-dest": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а ниÑ\98е иÑ\81пÑ\80авна.",
"mergehistory-fail-permission": "Немате овлашћење за спајање историје.",
"mergehistory-fail-self-merge": "Изворна и одредишна страница не могу бити исте.",
"mergehistory-fail-toobig": "Није могуће спојити историје јер више од $1 {{PLURAL:$1|измене ће бити премештене|измена ће бити премештено}}.",
"prefs-resetpass": "Промени лозинку",
"prefs-changeemail": "Промени или уклони имејл адресу",
"prefs-setemail": "Постави имејл адресу",
- "prefs-email": "Поставке имејла",
+ "prefs-email": "Подешавања имејла",
"prefs-rendering": "Изглед",
"saveprefs": "Сачувај",
"restoreprefs": "Врати све на подразумевано (у свим одељцима)",
"prefs-advancedediting": "Главна подешавања",
"prefs-editor": "Уређивач",
"prefs-preview": "Претпреглед",
- "prefs-advancedrc": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
+ "prefs-advancedrc": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
"prefs-opt-out": "Онемогућавање побољшања",
- "prefs-advancedrendering": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
- "prefs-advancedsearchoptions": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
- "prefs-advancedwatchlist": "Ð\9dапÑ\80едне поÑ\81Ñ\82авке",
- "prefs-displayrc": "Поставке приказа",
- "prefs-displaywatchlist": "Поставке приказа",
+ "prefs-advancedrendering": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
+ "prefs-advancedsearchoptions": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
+ "prefs-advancedwatchlist": "Ð\9dапÑ\80една подеÑ\88аваÑ\9aа",
+ "prefs-displayrc": "Подешавања приказа",
+ "prefs-displaywatchlist": "Подешавања приказа",
"prefs-tokenwatchlist": "Жетон",
"prefs-diffs": "Разлике",
"prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
"right-editmyuserjs": "уређивање сопствених JavaScript датотека",
"right-viewmywatchlist": "види сопствени списак надгледања",
"right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
- "right-viewmyprivateinfo": "Ð\92идите своје личне податке (нпр. имејл адресу, право име)",
- "right-editmyprivateinfo": "Уређивање сопствених личних података (нпр. имејл адреса, право име)",
+ "right-viewmyprivateinfo": "видите своје личне податке (нпр. имејл адресу, право име)",
+ "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. имејл адреса, право име)",
"right-editmyoptions": "уређивање сопствених подешавања",
"right-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
"right-markbotedits": "означавање враћених измена као измене бота",
"rcfilters-clear-all-filters": "Уклони све филтере",
"rcfilters-show-new-changes": "Погледајте најновије измене",
"rcfilters-search-placeholder": "Филтрирај скорашње измене (употребите мени или потражите име филтра)",
- "rcfilters-invalid-filter": "Ð\9dевалидан филтер",
+ "rcfilters-invalid-filter": "Ð\9dеиÑ\81пÑ\80аван филтер",
"rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
"rcfilters-filterlist-title": "Филтери",
"rcfilters-filterlist-whatsthis": "Како ово функционише?",
"rcfilters-filter-categorization-label": "Измјене категорија",
"rcfilters-filter-categorization-description": "Записи о страницама додатим или уклоњеним из категорија.",
"rcfilters-filter-logactions-label": "Радње забележене у дневницима",
- "rcfilters-filter-logactions-description": "Административне акције, стварање налога, брисање страница, отпремања…",
+ "rcfilters-filter-logactions-description": "Административне радње, стварање налога, брисање страница, отпремања…",
"rcfilters-hideminor-conflicts-typeofchange-global": "Филтер за „мање” измене је у сукобу са једним или више филтера типа измена, зато што одређени типови измена не могу да се означе као „мање”. Сукобљени филтери су означени у подручју Активни филтери, изнад.",
"rcfilters-hideminor-conflicts-typeofchange": "Одређени типови измена не могу да се означе као „мање”, тако да је овај филтер у сукобу са следећим филтерима типа измена: $1",
"rcfilters-typeofchange-conflicts-hideminor": "Овај филтер типа измене је у сукобу са филтером за „мање” измене. Одређени типови измена не могу да се означе као „мање”.",
"destfilename": "Назив:",
"upload-maxfilesize": "Максимална величина датотеке: $1",
"upload-description": "Опис датотеке",
- "upload-options": "Поставке отпремања",
+ "upload-options": "Подешавања отпремања",
"watchthisupload": "Надгледај ову датотеку",
"filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
"filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
"uploadstash-errclear": "Чишћење датотека није успело.",
"uploadstash-refresh": "Освежи списак датотека",
"uploadstash-bad-path": "Путања не постоји.",
- "uploadstash-bad-path-invalid": "Ð\9fÑ\83Ñ\82аÑ\9aе ниÑ\98е валидна.",
+ "uploadstash-bad-path-invalid": "Ð\9fÑ\83Ñ\82аÑ\9aа ниÑ\98е иÑ\81пÑ\80авна.",
"uploadstash-bad-path-unknown-type": "Непознат тип „$1“.",
"invalid-chunk-offset": "Неисправна полазна тачка",
"img-auth-accessdenied": "Приступ је одбијен",
"img-auth-nologinnWL": "Нисте пријављени и „$1” није на списку дозвољених.",
"img-auth-nofile": "Датотека „$1“ не постоји.",
"img-auth-isdir": "Покушавате да приступите фасцикли „$1“.\nДозвољен је само приступ датотекама.",
- "img-auth-streaming": "Учитавање „$1“.",
+ "img-auth-streaming": "Учитавам „$1“...",
"img-auth-public": "Сврха img_auth.php је да прослеђује датотеке из приватних викија.\nОвај вики је постављен као јавни.\nРади сигурности, img_auth.php је онемогућен.",
"img-auth-noread": "Корисник нема приступ за читање „$1“.",
"http-invalid-url": "Неисправна адреса: $1",
"nopagetext": "Тражена страница не постоји.",
"pager-newer-n": "{{PLURAL:$1|новији 1|новија $1|новијих $1}}",
"pager-older-n": "{{PLURAL:$1|старији 1|старија $1|старијих $1}}",
- "suppress": "РевизиÑ\98а",
+ "suppress": "Ð\98змена",
"querypage-disabled": "Ова посебна страница је онемогућена ради побољшања перформанси.",
"apihelp": "API помоћ",
"apihelp-no-such-module": "Модул „$1“ није пронађен.",
"apisandbox-submit": "Пошаљи захтев",
"apisandbox-reset": "Очисти",
"apisandbox-retry": "Покушај поново",
- "apisandbox-loading": "Учитавање информација за API модул \"$1\"",
+ "apisandbox-loading": "Учитавам информације за API модул „$1”...",
"apisandbox-load-error": "Дошло је до грешке приликом учитавања информација за API модул \"$1\": $2",
"apisandbox-no-parameters": "Овај API модул нема параметре.",
"apisandbox-helpurls": "Линкови за помоћ",
"apisandbox-dynamic-error-exists": "Параметар под називом \"$1\" већ постоји.",
"apisandbox-deprecated-parameters": "Застарели параметри",
"apisandbox-fetch-token": "Аутоматски попуни токен",
- "apisandbox-submit-invalid-fields-title": "Ð\9dека поÑ\99а ниÑ\81Ñ\83 валидна",
+ "apisandbox-submit-invalid-fields-title": "Ð\9dека поÑ\99а ниÑ\81Ñ\83 иÑ\81пÑ\80авна",
"apisandbox-submit-invalid-fields-message": "Молимо Вас поправите означена поља и покушајте поново.",
"apisandbox-results": "Резултати",
"apisandbox-sending-request": "Слање API захтева...",
"enotif_lastvisited": "За све измене од ваше последње посете, погледајте $1.",
"enotif_lastdiff": "Да видите ову измену, погледајте $1.",
"enotif_anon_editor": "анониман корисник $1",
- "enotif_body": "Поштовани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите поставке обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили поставке имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили поставке списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
+ "enotif_body": "Поштовани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите подешавања обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили подешавања имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили подешавања списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
"enotif_minoredit": "Ово је мања измена",
"created": "направљена",
"changed": "измењена",
"block": "Блокирај корисника",
"unblock": "Деблокирање корисника",
"blockip": "Блокирај {{GENDER:$1|корисника|корисницу}}",
- "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене ИП адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване). Можете блокирати опсеге ИП адреса помоћу [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] синтаксе, највећи дозвољени опсег за IPv4 је /$1 односно /$2 за IPv6.",
- "ipaddressorusername": "ИП адреса или корисничко име:",
+ "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене IP адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване). Можете блокирати опсеге IP адреса помоћу [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] синтаксе, највећи дозвољени опсег за IPv4 је /$1 односно /$2 за IPv6.",
+ "ipaddressorusername": "IP адреса или корисничко име:",
"ipbexpiry": "Истиче:",
"ipbreason": "Разлог:",
"ipbreason-dropdown": "*Најчешћи разлози за блокирање\n** Уношење лажних информација\n** Уклањање садржаја са страница\n** Постављање веза до спољашњих сајтова\n** Уношење бесмислица у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
"ipb-disableusertalk": "Онемогући кориснику да уређује своју страницу за разговор",
"ipb-change-block": "Поново блокирај корисника с овим поставкама",
"ipb-confirm": "Потврди блокирање",
- "badipaddress": "Неисправна ИП адреса",
+ "badipaddress": "Неисправна IP адреса",
"blockipsuccesssub": "Блокирање је успело",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] је {{GENDER:$1|блокиран|блокирана|блокиран}}.<br />\nБлокирања можете да погледате [[Special:BlockList|овде]].",
"ipb-blockingself": "Овом радњом ћете блокирати себе! Јесте ли сигурни да то желите?",
"emailblock": "имејл је онемогућен",
"blocklist-nousertalk": "забрањено уређивање сопствене странице за разговор",
"ipblocklist-empty": "Списак блокирања је празан.",
- "ipblocklist-no-results": "Тражена ИП адреса или корисничко име није блокирано.",
+ "ipblocklist-no-results": "Тражена IP адреса или корисничко име није блокирано.",
"blocklink": "блокирај",
"unblocklink": "деблокирај",
"change-blocklink": "промени блокаду",
"ipb-otherblocks-header": "{{PLURAL:$1|Друге блокаде}}",
"unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
"ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
- "ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
- "ip_range_invalid": "Неисправан распон ИП адреса.",
+ "ipb_blocked_as_range": "Грешка: IP адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
+ "ip_range_invalid": "Неисправан распон IP адреса.",
"ip_range_toolarge": "Опсежна блокирања већа од /$1 нису дозвољена.",
"proxyblocker": "Блокер посредника",
"proxyblockreason": "Ваша ИП адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
"version-libraries-description": "Опис",
"version-libraries-authors": "Аутори",
"redirect": "Преусмерење на датотеку, корисника, страницу, измену или дневник (ID)",
- "redirect-summary": "Ова специјална страница преусмерава до датотеке (са датим именом датотеке), странице (са датим ID-ом измене или ID-ом странице), корисничке странице (са датим нумеричким корисничким ID-ом), или уноса у дневнику (са датим дневничким ID-ом). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
+ "redirect-summary": "Ова посебна страница преусмерава до датотеке (са датим именом датотеке), странице (са датим ID-ом измене или ID-ом странице), корисничке странице (са датим нумеричким корисничким ID-ом), или уноса у дневнику (са датим дневничким ID-ом). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
"redirect-submit": "Иди",
"redirect-lookup": "Тип вредности:",
"redirect-value": "Вредност:",
"logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
"logentry-newusers-byemail": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3 и лозинка је послата на имејл",
"logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
- "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} поставке заштите са $4 на $3",
+ "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} подешавања заштите са $4 на $3",
"logentry-protect-unprotect": "$1 je {{GENDER:$2|скинуо|скинула}} заштиту са странице $3",
"logentry-protect-protect": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4",
"logentry-protect-protect-cascade": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4 [преносива заштита]",
"feedback-bugornote": "Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].\nУ супротном, послужите се једноставним обрасцем испод. Ваш коментар ће стајати на страници „[$3 $2]“, заједно с корисничким именом и прегледачем који користите.",
"feedback-cancel": "Откажи",
"feedback-close": "Урађено",
- "feedback-external-bug-report-button": "Ð\9fÑ\80иÑ\98ави баг",
+ "feedback-external-bug-report-button": "Ð\9fÑ\80иÑ\98ави гÑ\80еÑ\88кÑ\83",
"feedback-dialog-title": "Пошаљи повратну информацију",
"feedback-error1": "Грешка: непрепознат резултат од АПИ-ја",
"feedback-error2": "Грешка: уређивање није успело",
"usercssispublic": "Напомена: CSS подстранице не би требале садржавати поверљиве информације будући да су видљиве другим корисницима.",
"rawhtml-notallowed": "<html> тагови не могу да се користе ван нормалних страница.",
"gotointerwiki": "Напуштам пројекат {{SITENAME}}",
- "gotointerwiki-invalid": "Ð\9eдабÑ\80ани наÑ\81лов Ñ\98е невалидан.",
+ "gotointerwiki-invalid": "Ð\9eдабÑ\80ани наÑ\81лов Ñ\98е неиÑ\81пÑ\80аван.",
"gotointerwiki-external": "Управо ћете да напустите пројекат {{SITENAME}} да бисте на засебном веб-сајту посетили [[$2]].\n\n'''[$1 Продужи на $1]'''",
"undelete-cantedit": "Не можете повратити ову страницу јер немате дозволу да је уређујете.",
"undelete-cantcreate": "Не можете повратити ову страницу јер нема постојеће странице са овим именом и немате дозволу да направите ову страницу.",
"Obsuser",
"Zoranzoki21",
"Prevodim",
- "Bugoslav"
+ "Bugoslav",
+ "Acamicamacaraca"
]
},
"tog-underline": "Podvlačenje veza:",
"right-editmyuserjs": "uređivanje sopstvenih JavaScript datoteka",
"right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
"right-editmywatchlist": "uređivanje sopstvenog spiska nadgledanja; neke preduzete radnje će svejedno dodati stranice na spisak i bez ovog prava",
- "right-viewmyprivateinfo": "Vidite svoje lične podatke (npr. imejl adresu, pravo ime)",
- "right-editmyprivateinfo": "Уređivanje sopstvenih ličnih podataka (npr. imejl adresa, pravo ime)",
+ "right-viewmyprivateinfo": "vidite svoje lične podatke (npr. imejl adresu, pravo ime)",
+ "right-editmyprivateinfo": "uređivanje sopstvenih ličnih podataka (npr. imejl adresa, pravo ime)",
"right-editmyoptions": "uređivanje sopstvenih podešavanja",
"right-rollback": "brzo vraćanje izmena poslednjeg korisnika koji je menjao određenu stranicu",
"right-markbotedits": "označavanje vraćenih izmena kao izmene bota",
"upload-disallowed-here": "Du kan inte skriva över denna fil.",
"filerevert": "Återställ $1",
"filerevert-legend": "Återställ fil",
- "filerevert-intro": "Du återställer '''[[Media:$1|$1]]''' till [$4 versionen från $2 kl. $3].",
+ "filerevert-intro": "Du håller på att återställa filen <strong>[[Media:$1|$1]]</strong> till [$4 versionen från $2 kl. $3].",
"filerevert-comment": "Anledning:",
"filerevert-defaultcomment": "Återställd till versionen från $1, kl. $2 ($3)",
"filerevert-submit": "Återställ",
"doubleredirects": "Dubbla omdirigeringar",
"doubleredirectstext": "Det här är en lista över sidor som omdirigerar till andra omdirigeringssidor. \nVarje rad innehåller länkar till den första och andra omdirigeringssidan, samt till målet för den andra omdirigeringen. Målet för den andra omdirigeringen är ofta den \"riktiga\" sidan som den första omdirigeringen egentligen ska leda till.\n<del>Överstrukna</del> poster har åtgärdats.",
"double-redirect-fixed-move": "[[$1]] har flyttats.\nDen uppdaterades automatiskt och är nu en omdirigering till [[$2]].",
- "double-redirect-fixed-maintenance": "Fixar automatiskt dubbel omdirigering från [[$1]] till [[$2]] i ett underhållsjobb.",
+ "double-redirect-fixed-maintenance": "Fixar automatiskt dubbel omdirigering från [[$1]] till [[$2]] i ett underhållsjobb",
"double-redirect-fixer": "Omdirigeringsrättaren",
"brokenredirects": "Trasiga omdirigeringar",
"brokenredirectstext": "Följande omdirigeringar länkar till ej existerande sidor:",
"diff-form": "Skillnader",
"diff-form-oldid": "Gammalt versions-ID (valfritt)",
"diff-form-revid": "Versions-ID för diff",
- "diff-form-submit": "Visa differenser",
+ "diff-form-submit": "Visa skillnad",
"permanentlink": "Permanent länk",
"permanentlink-revid": "Sidversions-ID",
"permanentlink-submit": "Gå till sidversion",
"restrictionsfield-badip": "Ogiltig IP-adress eller intervall: $1",
"restrictionsfield-label": "Tillåtna IP-intervall:",
"restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
+ "edit-error-short": "Fel: $1",
+ "edit-error-long": "Fel:\n\n$1",
"revid": "sidversion $1",
"pageid": "sid-ID $1",
"rawhtml-notallowed": "<html>-taggar kan inte användas utanför normala sidor.",
"currentevents": "Рӯйдодҳои кунунӣ",
"currentevents-url": "Лоиҳа:Рӯйдодҳои кунунӣ",
"disclaimers": "Такзибнома",
- "disclaimerpage": "Project:Такзибномаи умумӣ",
+ "disclaimerpage": "Википедия:Такзибномаи умумӣ",
"edithelp": "Роҳнамои вироиш",
"mainpage": "Саҳифаи аслӣ",
"mainpage-description": "Саҳифаи аслӣ",
"grant-group-watchlist-interaction": "โต้ตอบกับรายการเฝ้าดูของคุณ",
"grant-group-email": "ส่งอีเมล",
"grant-group-customization": "การปรับแต่งและการตั้งค่า",
+ "grant-group-administration": "ดำเนินปฏิบัติการบริหาร",
"grant-group-private-information": "เข้าถึงข้อมูลส่วนตัวเกี่ยวกับตัวคุณ",
"grant-group-other": "กิจกรรมเบ็ดเตล็ด",
"grant-blockusers": "บล็อกและปลดบล็อกผู้ใช้ต่าง ๆ",
"rcfilters-activefilters": "ตัวกรองที่ทำงาน",
"rcfilters-advancedfilters": "ตัวกรองขั้นสูง",
"rcfilters-limit-title": "ผลลัพธ์ที่แสดง",
- "rcfilters-limit-and-date-label": "$1 การเปลี่ยนแปลง $2",
+ "rcfilters-limit-and-date-label": "$1 การเปลี่ยนแปลง, $2",
"rcfilters-date-popup-title": "ระยะเวลาที่ค้นหา",
"rcfilters-days-title": "วันล่าสุด",
"rcfilters-hours-title": "ชั่วโมงล่าสุด",
"rcfilters-preference-help": "ย้อนกลับการออกแบบอินเตอร์เฟซใหม่ปี 2560 และอุปกรณ์ทั้งหมดที่เพิ่มเข้ามาหลังจากนั้น",
"rcfilters-filter-showlinkedfrom-label": "แสดงการเปลี่ยนแปลงในหน้าที่ลิงก์มาจาก",
"rcfilters-filter-showlinkedfrom-option-label": "<strong>หน้าที่ลิงก์มา</strong>จากหน้าที่เลือก",
- "rcfilters-filter-showlinkedto-label": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\99หà¸\99à¹\89าà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cมา",
+ "rcfilters-filter-showlinkedto-label": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\99หà¸\99à¹\89าà¸\97ีà¹\88ลิà¸\87à¸\81à¹\8cà¹\84à¸\9b",
"rcfilters-filter-showlinkedto-option-label": "<strong>หน้าที่ลิงก์ไป</strong>หน้าที่เลือก",
"rcfilters-target-page-placeholder": "กรอกชื่อหน้า (หรือหมวดหมู่)",
"rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$3, $4</strong> (แสดงมากสุด <strong>$1</strong>)",
"version-version": "($1)",
"version-no-ext-name": "[ไม่มีชื่อ]",
"version-license": "สัญญาอนุญาตมีเดียวิกิ",
+ "version-ext-license": "ใบอนุญาต",
+ "version-ext-colheader-name": "ส่วนขยาย",
+ "version-skin-colheader-name": "สกิน",
+ "version-ext-colheader-version": "รุ่น",
+ "version-ext-colheader-license": "ใบอนุญาต",
+ "version-ext-colheader-description": "คำอธิบาย",
+ "version-ext-colheader-credits": "ผู้ประพันธ์",
+ "version-license-title": "ใบอนุญาตสำหรับ $1",
+ "version-license-not-found": "ไม่พบสารสนเทศใบอนุญาตลงรายละเอียดสำหรับส่วนขยายนี้",
+ "version-credits-title": "ข้อความให้เกียรติเจ้าของงานสำหรับ $1",
+ "version-credits-not-found": "ไม่พบสารสนเทศข้อความให้เกียรติเจ้าของงานลงรายละเอียดสำหรับส่วนขยายนี้",
"version-poweredby-credits": "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
"version-poweredby-others": "ผู้อื่น",
"version-poweredby-translators": "ผู้แปล translatewiki.net",
- "version-license-info": "มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาต หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)\n\nมีเดียวิกิมีถูกแจกจ่ายด้วยหวังว่าจะเป็นประโยชน์ แต่ไม่มีการรับประกันใด ๆ ทั้งสิ้น ไม่มีแม้การรับประกันโดยนัยเพื่อการค้า หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูรายละเอียดเพิ่มเติมที่สัญญาอนุญาตสาธารณะทั่วไปของกนู\n\nคุณควรได้รับ[{{SERVER}}{{SCRIPTPATH}}/COPYING สำเนาของสัญญาอนุญาตสาธารณะทั่วไปของกนู]พร้อมกับโปรแกรมนี้ หากไม่พบ กรุณาเขียนจดหมายถึงบริษัทมูลนิธิซอฟต์แวร์เสรี ที่อยู่ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA หรือ[//www.gnu.org/licenses/old-licenses/gpl-2.0.html อ่านออนไลน์]",
+ "version-credits-summary": "เราใคร่ขอตระหนักถึงบุคคลเหล่านี้สำหรับการเข้ามีส่วนร่วมต่อ[[Special:Version|มีเดียวิกิ]]",
+ "version-license-info": "มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่มูลนิธิซอฟต์แวร์เสรีเผยแพร่ ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาตฯ หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)\n\nมีเดียวิกิแจกจ่ายด้วยหวังว่าจะเป็นประโยชน์ แต่<em>ไม่มีการรับประกันใด ๆ ทั้งสิ้น</em> ไม่มีแม้คำรับรองแสดงเจตนาเป็นนัยเพื่อ<strong>การค้า</strong>หรือ<strong>ความเหมาะสมสำหรับความมุ่งหมายเฉพาะ</strong> ดูรายละเอียดเพิ่มเติมที่สัญญาอนุญาตสาธารณะทั่วไปของกนู\n\nคุณควรได้รับ[{{SERVER}}{{SCRIPTPATH}}/COPYING สำเนาของสัญญาอนุญาตสาธารณะทั่วไปของกนู]พร้อมกับโปรแกรมนี้ หากไม่พบ กรุณาเขียนถึงบริษัทมูลนิธิซอฟต์แวร์เสรี จำกัด ที่อยู่ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA หรือ[//www.gnu.org/licenses/old-licenses/gpl-2.0.html อ่านออนไลน์]",
"version-software": "ซอฟต์แวร์ที่ติดตั้ง",
"version-software-product": "ผลิตภัณฑ์",
"version-software-version": "รุ่น",
+ "version-entrypoints": "ยูอาร์แอลจุดเข้า",
+ "version-entrypoints-header-entrypoint": "จุดเข้า",
+ "version-entrypoints-header-url": "ยูอาร์แอล",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath เส้นทางบทความ]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath เส้นทางสคริปต์]",
+ "version-libraries": "คลังที่ติดตั้ง",
+ "version-libraries-library": "คลัง",
+ "version-libraries-version": "รุ่น",
+ "version-libraries-license": "ใบอนุญาต",
+ "version-libraries-description": "คำอธิบาย",
+ "version-libraries-authors": "ผู้ประพันธ์",
"redirect": "การเปลี่ยนทางตามชื่อไฟล์ รหัสประจำผู้ใช้ หน้า รุ่นหรือปูม",
"redirect-summary": "หน้าพิเศษนี้เปลี่ยนทางไปยังไฟล์ (ระบุเป็นชื่อไฟล์) หน้า (ระบุเป็นรหัสรุ่นหรือรหัสหน้า) หรือหน้าผู้ใช้ (ระบุเป็นรหัสผู้ใช้ตัวเลข) การใช้งาน: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] หรือ [[{{#Special:Redirect}}/logid/186]]",
"redirect-submit": "ไป",
"duration-decades": "$1 ทศวรรษ",
"duration-centuries": "$1 ศตวรรษ",
"duration-millennia": "$1 สหัสวรรษ",
+ "limitreport-title": "ข้อมูลบันทึกตัวแจงส่วน:",
+ "limitreport-cputime": "การใช้เวลาของซีพียู",
+ "limitreport-cputime-value": "$1 วินาที",
+ "limitreport-walltime": "การใช้เวลาจริง",
+ "limitreport-walltime-value": "$1 วินาที",
+ "limitreport-ppvisitednodes": "จำนวนปมที่เข้าชมแล้วของตัวประมวลก่อน",
+ "limitreport-ppgeneratednodes": "จำนวนปมที่สร้างแล้วของตัวประมวลก่อน",
+ "limitreport-postexpandincludesize": "ขนาดเมื่อรวมขยายแล้ว",
+ "limitreport-postexpandincludesize-value": "$1/$2 ไบต์",
+ "limitreport-templateargumentsize": "ขนาดอาร์กิวเมนต์แม่แบบ",
+ "limitreport-templateargumentsize-value": "$1/$2 ไบต์",
+ "limitreport-expansiondepth": "ความลึกการขยายสูงสุด",
"expandtemplates": "ขยายแม่แบบ",
"expand_templates_output": "ผลลัพธ์",
"expand_templates_ok": "ตกลง",
"log-action-filter-suppress-event": "การระงับปูม",
"log-action-filter-upload-upload": "อัปโหลดใหม่",
"log-action-filter-upload-overwrite": "อัปโหลดใหม่",
+ "edit-error-short": "ข้อผิดพลาด: $1",
+ "edit-error-long": "ข้อผิดพลาด: $1",
"revid": "รุ่นแก้ไข $1",
"pageid": "เลขประจำหน้า $1",
"gotointerwiki": "กำลังออกจาก {{SITENAME}}",
"LR Guanzon"
]
},
- "tog-underline": "Pagsasalungguhit ng link:",
+ "tog-underline": "Pagsasalungguhit ng kawing:",
"tog-hideminor": "Itago ang mga maliliit na pagbabago mula sa mga huling pagbabago",
"tog-hidepatrolled": "Itago ang mga napatrolyang pagbabago mula sa mga huling pagbabago",
"tog-newpageshidepatrolled": "Itago ang mga napatrolyang pahina mula talaan ng bagong pahina",
"history_small": "kasaysayan",
"updatedmarker": "isinapanahon mula noong huli kong pagdalaw",
"printableversion": "Bersiyong maililimbag",
- "permalink": "Permanenteng link",
+ "permalink": "Permanenteng kawing",
"print": "Ilimbag",
"view": "Tingnan",
"view-foreign": "Tingnan sa $1",
"pagetitle": "$1 - {{SITENAME}}",
"pagetitle-view-mainpage": "{{SITENAME}}",
"backlinksubtitle": "← $1",
- "retrievedfrom": "Ikinuha mula sa \"$1\"",
- "youhavenewmessages": "Mayroon kang $1 ($2).",
- "youhavenewmessagesfromusers": "{{PLURAL:$4|Mayroon kang}} $1 magmula sa {{PLURAL:$3|ibang tagagamit|$3 mga tagagamit}} ($2).",
- "youhavenewmessagesmanyusers": "Mayroon kang $1 magmula sa maraming mga tagagamit ($2).",
+ "retrievedfrom": "Kinuha mula sa \"$1\"",
+ "youhavenewmessages": "{{PLURAL:$3|Mayroon kang}} $1 ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Mayroon kang}} $1 mula sa {{PLURAL:$3|ibang tagagamit|$3 mga tagagamit}} ($2).",
+ "youhavenewmessagesmanyusers": "Mayroon kang $1 mula sa maraming tagagamit ($2).",
"newmessageslinkplural": "{{PLURAL:$1|isang bagong mensahe|999=bagong mensahe}}",
"newmessagesdifflinkplural": "huling {{PLURAL:$1|pagbabago|999=mga pagbabago}}",
"youhavenewmessagesmulti": "Mayroon kang mga bagong mensahe sa $1",
"nosuchusershort": "Walang tagagamit na may pangalang \"$1\".\nPakitingnan ang iyong pagbabaybay.",
"nouserspecified": "Kailangang tukuyin mo ang isang pangalang pantagagamit.",
"login-userblocked": "Hinarang ang tagagamit na ito. Hindi pinahihintulutan ang paglalagda.",
- "wrongpassword": "Mali ang ipinasok na password.\nPakisubok muli.",
+ "wrongpassword": "Mali ang ipinasok na password o pangalan ng tagagamit.\nPakisubok muli.",
"wrongpasswordempty": "Walang laman ang ipinasok na password.\nPakisubok muli.",
"passwordtooshort": "Ang mga password ay dapat mayroong {{PLURAL:$1|1 panitik|$1 panitik}} (karakter).",
"passwordtoolong": "Ang mga password ay hindi maaaring mas mahaba sa {{PLURAL:$1|1 panitik|$1 panitik}}.",
"anoneditwarning": "<stromg>Babala:</strong> Hindi ka nakalagda.\nMakikita ng publiko ang iyong IP address kung gagawa ka ng mga pagbabago. Kung <strong>[$1 mag-login]</strong> ka o <strong>[$2 lumikha ng account]</strong>, maiuugnay ang iyong mga pagbabago sa iyong account, kasama ang ibang pakinabang.",
"anonpreviewwarning": "''Hindi ka nakalagda. Itatala sa inyong pagtatala ang inyong direksiyong IP sa kasaysayan ng pagbabago ng pahinang ito.''",
"missingsummary": "'''Paalala:''' Hindi ka nagbigay ng buod ng pagbabago.\nKapag pinindot mo uli ang Sagip, masasagip ang pagbabago mo na wala nito.",
- "missingcommenttext": "Magbigay ng isang kumento/puna sa ibaba.",
+ "missingcommenttext": "Maaaring magbigay ng komento.",
"missingcommentheader": "'''Paalala:''' Hindi ka nagbigay ng isang paksa/paulo para sa punang ito.\nKapag pinindot mo uli ang \"$1\", masasagip ang pagbabago mo na wala nito.",
"summary-preview": "Paunang tingin sa buod:",
"subject-preview": "Paunang tingin sa paksa:",
"continue-editing": "Pumunta sa pook ng pamamatnugot",
"previewconflict": "Ipinamamalas ng paunang tinging ito ang teksto sa loob ng pangitaas na pook-patnugutan ng teksto ayon sa lilitaw na anyo nito kapag pinili mo ang pagsagip.",
"session_fail_preview": "Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.\n\nIkaw ay maaaring nailagda palabas. <strong>Maaaring patunayan na ikaw ay nakalagda pa rin at subukang muli</strong>.\nKung hindi ito gumana, subukang [[Special:UserLogout|umalis sa pagkalagda]] at bumalik muli, at tingnan kung ang iyong browser ay pumapayag sa mga cookie mula sa site na ito.",
- "session_fail_preview_html": "'''Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.'''\n\n''Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.''\n\n'''Kung lehitimong pagbabago ito, paki-ulit muli.'''\nKung hindi pa rin ito gumagana, subukang [[Special:UserLogout|mag-logout]] at mag-login muli.",
+ "session_fail_preview_html": "Paumanhin! Hindi namin maproseso ang iyong pagbabago hinggil sa pagkawala ng datos ng sesyon.\n\n<em>Dahil naka-andar ang hilaw na HTML sa {{SITENAME}}, nakatago ang paunang tingin bilang pag-iingat sa mga paglusob ng JavaScript.</em>\n\n<strong>Kung lehitimong pagbabago ito, paki-ulit muli.</strong>\nKung hindi pa rin ito gumagana, subukang [[Special:UserLogout|mag-logout]] at mag-login muli, at pakitingnan kung pinapayagan ng iyong browser ang mga cookie mula sa site na ito.",
"token_suffix_mismatch": "'''Hindi tinanggap ang iyong pagbabago dahil sinira ng kliyente ang mga karakter na bantas sa ''token'' ng mamatnugot.\nTinanggihan ang pagbabago upang maiwasan ang korapsyon ng teksto ng artikulo.\nKadalasang nangyayari ito kapag gumagamit ka ng masurot na serbisyo ng hindi-nakikilalang apoderadong (''anonymous proxy'') nasa web.",
"edit_form_incomplete": "'''Ilan sa mga bahagi ng pormularyong pampatnugot ay hindi nakarating sa tagapaghain; suriing muli na ang iyong mga pagbabago ay buo at subukang muli.'''",
"editing": "Binabago ang $1",
"mw-widgets-dateinput-placeholder-month": "TTTT-BB",
"date-range-from": "Mula sa petsang:",
"randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina",
+ "edit-error-long": "Mga kamalian:",
"gotointerwiki-invalid": "Di-wasto ang tinukoy na pamagat."
}
"recentchanges-legend-heading": "<strong>Gösterge:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
"recentchanges-submit": "Göster",
+ "rcfilters-other-review-tools": "Diğer inceleme araçları",
"rcfilters-group-results-by-page": "Sayfalandırılmış grup sonuçları",
"rcfilters-activefilters": "Etkin süzgeçler",
"rcfilters-advancedfilters": "Gelişmiş süzgeçler",
+ "rcfilters-limit-title": "Gösterilecek sonuçlar",
+ "rcfilters-days-title": "Son günler",
+ "rcfilters-hours-title": "Son saatler",
"rcfilters-quickfilters": "Kaydedilmiş süzgeçler",
"rcfilters-quickfilters-placeholder-title": "Henüz hiçbir süzgeç kaydedilmedi",
"rcfilters-quickfilters-placeholder-description": "Süzgeç ayarlarınızı kaydetmek ve sonrasında bunları kullanmak için, aşağıda Aktif Süzgeçler alanındaki yer imi simgesine tıklayın.",
"pageswithprop-legend": "Сторінки з перевизначеними властивостями",
"pageswithprop-text": "Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.",
"pageswithprop-prop": "Назва властивості:",
- "pageswithprop-reverse": "Сортувати у зворотньому порядку",
+ "pageswithprop-reverse": "Сортувати у зворотному порядку",
"pageswithprop-sortbyvalue": "Сортувати за значенням властивості",
"pageswithprop-submit": "Перейти",
"pageswithprop-prophidden-long": "довге значення текстової властивості приховано ($1)",
"restrictionsfield-badip": "Недійсна IP-адреса або діапазон: $1",
"restrictionsfield-label": "Дозволені діапазони IP-адрес:",
"restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Помилка: $1",
+ "edit-error-long": "Помилки:\n\n$1",
"revid": "версія $1",
"pageid": "ID сторінки $1",
"rawhtml-notallowed": "Теги <html> не можна використовувати за межами звичайних сторінок.",
"Abuaneeqa",
"Saraiki",
"BukhariSaeed",
- "Zainab Meher"
+ "Zainab Meher",
+ "Sayam Asjad"
]
},
"tog-underline": "ربط کی خط کشیدگی:",
"mergehistory-fail-no-change": "ضم تاریخچہ نے کسی بھی نسخے کو ضم نہیں کیا۔ براہ کرم صفحہ اور وقت کے پیرامیٹر کو دوبارہ جانچ لیں۔",
"mergehistory-fail-permission": "ناکافی اختیارات برائے ضم تاریخچہ۔",
"mergehistory-fail-self-merge": "ماخذ و مقصود صفحات یکساں ہیں۔",
+ "mergehistory-fail-timestamps-overlap": "ماخذ کی نظر ثانیوں کی منزل پر نظر ثانی کرنے کے بعد اوورپپ.",
"mergehistory-fail-toobig": "تاریخچے کو ضم نہیں کیا جا سکتا، کیونکہ {{PLURAL:$1|نسخے|نسخوں}} کی مقررہ حد $1 سے تجاوز کرنا ہوگا۔",
"mergehistory-no-source": "مآخذ صفحہ $1 موجود نہیں.",
"mergehistory-no-destination": "مقصود صفحہ $1 موجود نہیں.",
"userrights-expiry-options": "1 دن:1 day,1 ہفتہ:1 week,1 مہینہ:1 month,3 مہینے:3 months,6 مہینے:6 months,1 سال:1 year",
"userrights-invalid-expiry": "گروہ «$1» کا وقت اختتام درست نہیں ہے۔",
"userrights-expiry-in-past": "گروہ «$1» کا وقت اختتام بیت چکا ہے۔",
+ "userrights-cannot-shorten-expiry": "آپ \"$1\" گروپ میں رکنیت ختم کرنے کے لۓ آگے بڑھا سکتے ہیں. صرف اس صارف کو اس گروہ کو شامل کرنے اور ہٹانے کی اجازت کے لۓ اختتامی وقت آگے بڑھا سکتا ہے.",
"userrights-conflict": "اختیارات کی تبدیلی میں تنازع! براہ کرم نظر ثانی کریں اور اپنی تبدیلیوں کی تصدیق کریں۔",
"group": "حلقہ:",
"group-user": "صارفین",
"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": "ذیل میں <strong>$2</strong> سے کی گئی {{PLURAL:$5|تبدیلی|تبدیلیاں}} <strong>$1</strong> تک دکھائی جا رہی ہیں۔",
"rclistfromreset": "انتخاب تاریخ کی ترتیب نو",
"upload-scripted-dtd": "SVG فائل کو اپلوڈ نہیں کیا جاسکتا جس ميں ایک غیر معیاری DTD کا اظہار ہو۔",
"uploaded-script-svg": "اپلوڈ کردہ SVG فائل میں scriptable عنصر \"$1\" ملا۔",
"uploaded-hostile-svg": "اپلوڈ کردہ ایس وی جی فائل کے اسٹائل عنصر میں غیر محفوظ سی ایس ایس دریافت ہوئی ہے۔",
+ "uploaded-event-handler-on-svg": "ایونٹ ہینڈلر صفات <code> $1 = \"$2\" </code> کو ترتیب دینے کی اجازت نہیں ہے کہ SVG فائلوں میں.",
+ "uploaded-setting-href-svg": "والدین \"عنصر\" ٹیگ کا استعمال کرتے ہوئے \"href\" شامل کرنے کے لئے والدین عنصر کو منسوب کیا جاتا ہے.",
"uploadscriptednamespace": "اس ایس وی جی فائل میں غیر قانونی نام فضا \"<nowiki>$1</nowiki>\" موجود ہے۔",
"uploadinvalidxml": "اپلوڈ کردہ فائل میں موجود ایکس ایم ایل کا تجزیہ نہیں کیا جا سکا۔",
"uploadvirus": "اس فائل میں وائرس موجود ہے!\nتفصیلات: $1",
"backend-fail-maxsize": "فائل $1 کی معلومات نہیں لکھی جا سکی کیونکہ اس کا حجم {{PLURAL:$2|ایک بائٹ|$2 بائٹ}} سے زیادہ ہے۔",
"backend-fail-readonly": "فی الحال ذخیرہ کا پس منظر $1 فقط خواندگی حالت میں ہے۔ اس کی وجہ حسب ذیل ہے:\n\n\n<em>«$2»</em>",
"backend-fail-synced": "اس وقت فائل $1 داخلی ذخیرہ کے پس منظر کے اندر ناپائیدار حالت میں ہے۔",
+ "filejournal-fail-dbconnect": "\"$1\" اسٹوریج بیک اپ کے لئے جرنل ڈیٹا بیس سے منسلک نہیں ہوسکتا.",
+ "filejournal-fail-dbquery": "\"$1\" اسٹوریج بیک اپ کے لئے جرنل ڈیٹا بیس کو اپ ڈیٹ نہیں کیا جا سکا.",
"lockmanager-notlocked": "«$1» کو کھولا نہیں جا سکا؛ کیونکہ یہ مقفل نہیں ہے۔",
"lockmanager-fail-closelock": "«$1» کا فائل لاک بند نہیں کیا جا سکا۔",
"lockmanager-fail-deletelock": "«$1» کا فائل لاک حذف نہیں کیا جا سکا۔",
"lockmanager-fail-acquirelock": "«$1» کا قفل حاصل نہیں کیا جا سکا۔",
"lockmanager-fail-openlock": "«$1» کا فائل لاک کھولا نہیں جا سکا۔",
"lockmanager-fail-releaselock": "«$1» کا قفل کھولا نہ جا سکا۔",
+ "lockmanager-fail-db-bucket": "$1 بالٹی میں کافی تالا ڈیٹا بیس سے رابطہ نہیں کیا جا سکا.",
"lockmanager-fail-db-release": "$1 ڈیٹابیس سے قفل نہیں ہٹائے جا سکے۔",
"lockmanager-fail-svr-acquire": "$1 سرور کے قفل حاصل نہیں کیے جا سکے۔",
"lockmanager-fail-svr-release": "$1 سرور کے قفل ہٹائے نہیں جا سکے۔",
"zip-file-open-error": "مواد کی جانچ کے لیے زپ فائل کھولنے کے دوران میں کوئی نقص واقع ہوا۔",
"zip-wrong-format": "یہ زپ فائل نہیں تھی۔",
+ "zip-bad": "فائل ایک بدعنوانی یا دوسری صورت میں غیر قابل رسائی زپ فائل ہے.\nیہ سیکورٹی کیلئے مناسب طریقے سے جانچ نہیں کیا جا سکتا.",
"uploadstash": "پوشیدہ اپلوڈ کریں",
"uploadstash-summary": "اس صفحہ کے ذریعہ ان فائلوں تک رسائی حاصل ہوگی جو اپلوڈ ہو چکی ہیں یا ہو رہی ہیں لیکن اب تک ویکی پر شائع نہیں ہوئیں۔ یہ فائلیں محض اپلوڈ کنندہ صارفین ہی کو نظر آتی ہیں۔",
"uploadstash-clear": "پوشیدہ فائلوں کو صاف کریں",
"uploadstash-bad-path-invalid": "راہ درست نہیں ہے۔",
"uploadstash-bad-path-unknown-type": "نامعلوم قسم \"$1\"",
"uploadstash-bad-path-unrecognized-thumb-name": "غیر معروف نام تصغیر",
+ "uploadstash-file-not-found": "اسکرین میں کلیدی \"$1\" نہیں مل سکا.",
+ "uploadstash-file-not-found-missing-content-type": "لاپتہ مواد کی قسم ہیڈر.",
"uploadstash-no-extension": "توسیع نہیں ہے۔",
"uploadstash-zero-length": "فائل کا طول صفر ہے۔",
"invalid-chunk-offset": "آفسیٹ کا قطعہ نادرست ہے",
"pageswithprop-legend": "صفحات مع خاصیت صفحہ",
"pageswithprop-text": "اس صفحہ میں ان تمام صفحات کی فہرست موجود ہے جس کسی مخصوص خاصیت صفحہ کو استعمال کر رہے ہیں۔",
"pageswithprop-prop": "نام خاصیت:",
+ "pageswithprop-reverse": "ریورس آرڈر میں ترتیب دیں",
+ "pageswithprop-sortbyvalue": "پراپرٹی کی قیمت کی طرف سے ترتیب دیں",
"pageswithprop-submit": "ٹھیک",
"pageswithprop-prophidden-long": "طویل متن کی خاصیت کی پوشیدہ قدر ($1)",
"pageswithprop-prophidden-binary": "ثنائی خاصیت کی پوشیدہ قدر ($1)",
"apisandbox-sending-request": "اے پی آئی درخواست بھیجی جا رہی ہے۔۔۔",
"apisandbox-loading-results": "اے پی آئی کے نتائج موصول ہو رہے ہیں۔۔۔",
"apisandbox-results-error": "اے پی آئی کوئری کا جواب لوڈ ہونے کے دوران میں نقص واقع ہوا: $1",
+ "apisandbox-request-selectformat-label": "درخواست کے اعداد و شمار کے طور پر دکھائیں:",
"apisandbox-request-url-label": "درخواست کا ربط:",
"apisandbox-request-json-label": "JSON درخواست:",
"apisandbox-request-time": "درخواست کا وقت: {{PLURAL:$1|$1 ملی سیکنڈ}}",
"restrictionsfield-badip": "Địa chỉ hoặc dải IP không hợp lệ: $1.",
"restrictionsfield-label": "Các dải IP được cho phép:",
"restrictionsfield-help": "Mỗi dòng một địa chỉ IP hoặc dải CIDR. Để kích hoạt tất cả mọi địa chỉ IP, sử dụng:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Lỗi: $1",
+ "edit-error-long": "Lỗi:\n\n$1",
"revid": "phiên bản $1",
"pageid": "số trang $1",
"rawhtml-notallowed": "Không thể sử dụng thẻ <html> bên ngoài trang bình thường.",
"tog-extendwatchlist": "Ragrandi l' djivêye po mostrer tos les candjmints, nén seulmint les dierins",
"tog-usenewrc": "Relére par pådje dins les dierins candjmints et l' djivêye des shuvous (i fåt JavaScript)",
"tog-numberheadings": "Limerotaedje otomatike des tites",
- "tog-showtoolbar": "Mostrer l' bår d' usteyes e môde candjmint (JavaScript)",
- "tog-editondblclick": "Candjî les pådjes avou on dobe-clitch (JavaScript)",
- "tog-editsectiononrightclick": "Candjî les seccions avou on dobe-clitch sol tite (JavaScript)",
- "tog-watchcreations": "Mete les pådjes ki dj' askepeye dins l' djivêye des pådjes shuvowes",
- "tog-watchdefault": "Shuve les årtikes ki dj' fwai ou ki dj' candje",
- "tog-watchmoves": "Radjouter a m' djivêye des shuvous les pådjes ki dji displaece",
- "tog-watchdeletion": "Radjouter a m' djivêye des shuvous les pådjes ki dji disface",
+ "tog-showtoolbar": "Mostrer l' bår d' usteyes e môde candjmint",
+ "tog-editondblclick": "Candjî les pådjes avou on dobe-clitch",
+ "tog-editsectiononrightclick": "Candjî les seccions avou on dobe-clitch so les tites",
+ "tog-watchcreations": "Radjouter a m' djivêye des shuvous les pådjes ki dj' askepeye et les fitchîs ki dj' eberwete",
+ "tog-watchdefault": "Radjouter a m' djivêye des shuvous les pådjes et les fitchîs ki dj' candje",
+ "tog-watchmoves": "Radjouter a m' djivêye des shuvous les pådjes et les fitchîs ki dji displaece",
+ "tog-watchdeletion": "Radjouter a m' djivêye des shuvous les pådjes et les fitchîs ki dji disface",
+ "tog-watchuploads": "Radjouter a m' djivêye des shuvous les fitchîs ki dj' eberwete",
+ "tog-watchrollback": "Radjouter a m' djivêye des shuvous les pådjes wice ki dj' a disfé on candjmint",
"tog-minordefault": "Prémete mes candjmints come mineurs",
"tog-previewontop": "Prévey l' årtike å dzeu del boesse d' aspougnaedje",
"tog-previewonfirst": "Prévey l' årtike å prumî candjmint",
- "tog-enotifwatchlistpages": "M' emiler cwand ene pådje shuvowe candje",
- "tog-enotifusertalkpages": "M' emiler cwand l' pådje di copene da minne candje",
- "tog-enotifminoredits": "M' emiler eto po les ptits candjmints",
+ "tog-enotifwatchlistpages": "M' emiler cwand ene pådje u on fitchî d' èm djivêye des shuvous candje",
+ "tog-enotifusertalkpages": "M' emiler cwand m' pådje di copene da minne candje",
+ "tog-enotifminoredits": "M' emiler eto po les ptits candjmints des pådjes u des fitchîs",
"tog-enotifrevealaddr": "Mostrer mi adresse emile dins les emiles di notifiaedje",
"tog-shownumberswatching": "Mostrer l' nombe d' uzeus ki shuvèt l' pådje",
"tog-oldsig": "Siné pol moumint:",
"welcomeuser": "Bénvnowe, $1!",
"yourname": "Vosse no d' elodjaedje:",
"userlogin-yourname": "No d' uzeu",
+ "userlogin-yourname-ph": "Tapez vosse no d' uzeu",
"yourpassword": "Vosse sicret",
"userlogin-yourpassword": "Sicret",
"yourpasswordagain": "Ritapez vosse sicret",
"rightslog": "Djournå des droets des uzeus",
"rightslogtext": "Çouchal, c' est on djournå des candjmints des droets des uzeus.",
"action-read": "lére cisse pådje ci",
- "action-edit": "candjî l' pådje",
+ "action-edit": "candjî cisse pådje ci",
"action-createpage": "ahiver des pådjes",
"action-createtalk": "ahiver des pådjes di copinaedje",
"action-createaccount": "ahiver ci conte d' uzeu ci",
"action-protect": "candjî les liveas d' protedjaedje del pådje",
"action-autopatrol": "aveur vosse candjmint marké come ricoridjî",
"nchanges": "$1 {{PLURAL:$1|candjmint|candjmints}}",
+ "enhancedrc-history": "Istwere",
"recentchanges": "Dierins candjmints",
"recentchanges-legend": "Tchuzes po les dierins candjmints",
"recentchanges-summary": "Shuvoz chal les dierins candjmints k' i gn a yeu dsu {{SITENAME}}.",
"uploadnewversion-linktext": "Eberweter ene nouve modêye di ci fitchî ci",
"shared-repo-from": "vént d' $1",
"shared-repo": "on depot pårtaedjî",
+ "upload-disallowed-here": "Vos n' ploz nén språtchî ci fitchî ci.",
"filerevert": "Rimete come divant $1",
"filerevert-legend": "Rapexhî l' fitchî",
"filerevert-intro": "Vos estoz k' alez rapexhî l' fitchî <strong>[[Media:$1|$1]]</strong> al [$4 modêye do $3, a $2].",
"contributions": "Ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}}",
"contributions-title": "Djivêye des ovraedjes di l' {{GENDER:$1|uzeu|uzeuse}} $1",
"mycontris": "Mi ovraedje",
+ "anoncontribs": "Mi ovraedje",
"contribsub2": "Po l' uzeu $1 ($2)",
"nocontribs": "Nou candjmint di trové ki corespondreut a ç' critere la.",
"uctop": "(dierinne)",
"feedback-message": "Messaedje",
"feedback-subject": "Sudjet",
"feedback-submit": "Evoyî",
- "searchsuggest-search": "Cweri",
+ "searchsuggest-search": "Cweri so {{SITENAME}}",
"searchsuggest-containing": "ki contént...",
"api-error-emptypage": "C' est nén permetou d' ahiver ene novele pådje et l' leyî vude.",
"api-error-stashfailed": "Aroke divintrinne : li sierveu a pierdou les dnêyes provizweres",
"special-characters-group-thai": "Thai",
"special-characters-group-lao": "Lao",
"special-characters-group-khmer": "Khmer",
- "randomrootpage": "Ojúewé ìtẹ́dìí àrìnàkò"
+ "randomrootpage": "Ojúewé ìtẹ́dìí àrìnàkò",
+ "edit-error-short": "Àṣìṣe: $1",
+ "edit-error-long": "Àwọn àsìṣe:\n\n\n$1"
}
"lockmanager-fail-closelock": "无法关闭“$1”的锁文件。",
"lockmanager-fail-deletelock": "无法删除“$1”的锁文件。",
"lockmanager-fail-acquirelock": "无法为“$1”获取锁。",
- "lockmanager-fail-openlock": "无法打开“$1”的锁文件。",
+ "lockmanager-fail-openlock": "无法打开“$1”的锁定文件。请确保您的上传目录正确配置,并且您的web服务器有权限写入至那个目录。参见https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory获取更多信息。",
"lockmanager-fail-releaselock": "无法为“$1”释放锁。",
"lockmanager-fail-db-bucket": "不能在$1池中联系到足够锁数据库。",
"lockmanager-fail-db-release": "不能在数据库$1上释放锁。",
"restrictionsfield-badip": "无效的IP地址或段:$1",
"restrictionsfield-label": "允许的IP段:",
"restrictionsfield-help": "每行一个IP地址或CIDR段。要启用任何地址或地址段,可使用:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "错误:$1",
+ "edit-error-long": "错误:\n\n$1",
"revid": "修订版本$1",
"pageid": "页面ID$1",
"rawhtml-notallowed": "<html>标签不能在一般页面以外使用。",
"doubleredirects": "雙重的重新導向",
"doubleredirectstext": "此頁列出重新導向至另一個重新導向頁面的頁面。每一列都包含第一次和第二次重新導向頁面的連結,以及第二次重新導向之後的目標,第二次重新導向之後的目標通常是「實際」的目標頁面,也是第一個重新導向頁面應該指向的頁面。\n<del>刪節線</del> 代表該項目的問題已經解決。",
"double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
- "double-redirect-fixed-maintenance": "在維護作業時自動修正雙重的重新導向自 [[$1]] 至 [[$2]]。",
+ "double-redirect-fixed-maintenance": "在維護作業時自動修正雙重的重新導向自 [[$1]] 至 [[$2]]",
"double-redirect-fixer": "重新導向修正者",
"brokenredirects": "損壞的重新導向",
"brokenredirectstext": "以下的重新導向頁面連結的頁面不存在:",
"restrictionsfield-badip": "無效的 IP 位址或範圍:$1",
"restrictionsfield-label": "允許的 IP 範圍:",
"restrictionsfield-help": "一個 IP 位址或 CIDR 範圍一行,要開啟所有範圍可使用:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "錯誤:$1",
+ "edit-error-long": "錯誤:\n\n$1",
"revid": "修訂 $1",
"pageid": "頁面 ID $1",
"rawhtml-notallowed": "<html> 標籤無法在一般頁面之外使用。",
$this->fatalError( $err, intval( $die ) );
}
$this->outputChanneled( false );
- if ( PHP_SAPI == 'cli' || PHP_SAPI == 'phpdbg' ) {
+ if (
+ ( PHP_SAPI == 'cli' || PHP_SAPI == 'phpdbg' ) &&
+ !defined( 'MW_PHPUNIT_TEST' )
+ ) {
fwrite( STDERR, $err . "\n" );
} else {
print $err;
* @ingroup Benchmark
*/
+use Wikimedia\RunningStat;
+
// @codeCoverageIgnoreStart
require_once __DIR__ . '/../Maintenance.php';
// @codeCoverageIgnoreEnd
}
// Run benchmarks
- $times = [];
+ $stat = new RunningStat();
for ( $i = 0; $i < $count; $i++ ) {
$t = microtime( true );
call_user_func_array( $bench['function'], $bench['args'] );
if ( $verbose ) {
$this->verboseRun( $i );
}
- $times[] = $t;
- }
-
- // Collect metrics
- sort( $times, SORT_NUMERIC );
- $min = $times[0];
- $max = end( $times );
- if ( $count % 2 ) {
- $median = $times[ ( $count - 1 ) / 2 ];
- } else {
- $median = ( $times[$count / 2] + $times[$count / 2 - 1] ) / 2;
+ $stat->addObservation( $t );
}
- $total = array_sum( $times );
- $mean = $total / $count;
// Name defaults to name of called function
if ( is_string( $key ) ) {
$this->addResult( [
'name' => $name,
- 'count' => $count,
- 'total' => $total,
- 'min' => $min,
- 'median' => $median,
- 'mean' => $mean,
- 'max' => $max,
+ 'count' => $stat->getCount(),
+ // Get rate per second from mean (in ms)
+ 'rate' => 1.0 / ( $stat->getMean() / 1000.0 ),
+ 'total' => $stat->getMean() * $stat->getCount(),
+ 'mean' => $stat->getMean(),
+ 'max' => $stat->max,
+ 'stddev' => $stat->getStdDev(),
'usage' => [
'mem' => memory_get_usage( true ),
'mempeak' => memory_get_peak_usage( true ),
public function addResult( $res ) {
$ret = sprintf( "%s\n %' 6s: %d\n",
$res['name'],
- 'times',
+ 'count',
$res['count']
);
-
- foreach ( [ 'total', 'min', 'median', 'mean', 'max' ] as $metric ) {
- $ret .= sprintf( " %' 6s: %6.2fms\n",
+ $ret .= sprintf( " %' 6s: %8.1f/s\n",
+ 'rate',
+ $res['rate']
+ );
+ foreach ( [ 'total', 'mean', 'max', 'stddev' ] as $metric ) {
+ $ret .= sprintf( " %' 6s: %8.2fms\n",
$metric,
$res[$metric]
);
+++ /dev/null
-This directory hold several benchmarking scripts used as a proof of speed
-or to track PHP performances over time.
-
-To get somehow accurate result, you might want to bound the PHP process
-to a specific CPU with `taskset` and raise its priority with `nice`. Example:
-
- $ taskset 1 nice -n-10 php bench_wfIsWindows.php
-
-australia-untidy.html.gz contains representative input text for
-benchmarkTidy.php. It needs to be decompressed before use.
--- /dev/null
+This directory hold several benchmarking scripts used track performances of
+MediaWiki and/or PHP.
+
+## Consistency
+
+On Linux, use of `taskset` and `nice` can help get more consistent results.
+
+For example:
+
+ $ taskset 1 nice -n-10 php bench_wfIsWindows.php
+
+## Fixtures
+
+* australia-untidy.html.gz: Representative input text for benchmarkTidy.php.
+ It needs to be decompressed before use.
public function __construct() {
parent::__construct();
$this->addDescription( 'Benchmarks HashBagOStuff and MapCacheLRU.' );
- $this->addOption( 'construct', 'Run construct only', false, false );
- $this->addOption( 'fill', 'Run fill only', false, false );
+ $this->addOption( 'method', 'One of "construct" or "set". Default: [All]', false, true );
}
public function execute() {
// 1000 keys (1...500, 500...1)
$keys = array_merge( $exampleKeys, array_reverse( $exampleKeys ) );
- $fill = $this->hasOption( 'fill' ) || !$this->hasOption( 'construct' );
- $construct = $this->hasOption( 'construct' ) || !$this->hasOption( 'fill' );
+ $method = $this->getOption( 'method' );
$benches = [];
- if ( $construct ) {
- $benches['HashBagOStuff-construct'] = [
+ if ( !$method || $method === 'construct' ) {
+ $benches['HashBagOStuff::__construct'] = [
'function' => function () use ( $max ) {
$obj = new HashBagOStuff( [ 'maxKeys' => $max ] );
},
];
- $benches['MapCacheLRU-construct'] = [
+ $benches['MapCacheLRU::__construct'] = [
'function' => function () use ( $max ) {
$obj = new MapCacheLRU( $max );
},
];
}
- if ( $fill ) {
- // For the fill bechmark, ensure object creation is not measured.
+ if ( !$method || $method === 'set' ) {
+ // For the set bechmark, do object creation in setup (not measured)
$hObj = null;
- $benches['HashBagOStuff-fill'] = [
+ $benches['HashBagOStuff::set'] = [
'setup' => function () use ( &$hObj, $max ) {
$hObj = new HashBagOStuff( [ 'maxKeys' => $max ] );
},
}
];
$mObj = null;
- $benches['MapCacheLRU-fill'] = [
+ $benches['MapCacheLRU::set'] = [
'setup' => function () use ( &$mObj, $max ) {
$mObj = new MapCacheLRU( $max );
},
--- /dev/null
+<?php
+/**
+ * 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 Benchmark
+ */
+
+require_once __DIR__ . '/Benchmarker.php';
+
+/**
+ * Maintenance script that benchmarks Sanitizer methods.
+ *
+ * @ingroup Benchmark
+ */
+class BenchmarkSanitizer extends Benchmarker {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Benchmark for Sanitizer methods.' );
+ $this->addOption( 'method', 'One of "validateEmail", "encodeAttribute", '
+ . '"safeEncodeAttribute", "removeHTMLtags", or "stripAllTags". '
+ . 'Default: (All)', false, true );
+ }
+
+ public function execute() {
+ $textWithHtmlSm = 'Before <wrap><in>and</in> another <unclose> <in>word</in></wrap>.';
+ $textWithHtmlLg = str_repeat(
+ // 28K (28 chars * 1000)
+ wfRandomString( 3 ) . ' <tag>' . wfRandomString( 5 ) . '</tag> ' . wfRandomString( 7 ),
+ 1000
+ );
+
+ $method = $this->getOption( 'method' );
+ $benches = [];
+
+ if ( !$method || $method === 'validateEmail' ) {
+ $benches['Sanitizer::validateEmail (valid)'] = function () {
+ Sanitizer::validateEmail( 'user@example.org' );
+ };
+ $benches['Sanitizer::validateEmail (invalid)'] = function () {
+ Sanitizer::validateEmail( 'username@example! org' );
+ };
+ }
+ if ( !$method || $method === 'encodeAttribute' ) {
+ $benches['Sanitizer::encodeAttribute (simple)'] = function () {
+ Sanitizer::encodeAttribute( 'simple' );
+ };
+ $benches['Sanitizer::encodeAttribute (special)'] = function () {
+ Sanitizer::encodeAttribute( ":'\"\n https://example" );
+ };
+ }
+ if ( !$method || $method === 'safeEncodeAttribute' ) {
+ $benches['Sanitizer::safeEncodeAttribute (simple)'] = function () {
+ Sanitizer::safeEncodeAttribute( 'simple' );
+ };
+ $benches['Sanitizer::safeEncodeAttribute (special)'] = function () {
+ Sanitizer::safeEncodeAttribute( ":'\"\n https://example" );
+ };
+ }
+ if ( !$method || $method === 'removeHTMLtags' ) {
+ $sm = strlen( $textWithHtmlSm );
+ $lg = round( strlen( $textWithHtmlLg ) / 1000 ) . 'K';
+ $benches["Sanitizer::removeHTMLtags (input: $sm)"] = function () use ( $textWithHtmlSm ) {
+ Sanitizer::removeHTMLtags( $textWithHtmlSm );
+ };
+ $benches["Sanitizer::removeHTMLtags (input: $lg)"] = function () use ( $textWithHtmlLg ) {
+ Sanitizer::removeHTMLtags( $textWithHtmlLg );
+ };
+ }
+ if ( !$method || $method === 'stripAllTags' ) {
+ $sm = strlen( $textWithHtmlSm );
+ $lg = round( strlen( $textWithHtmlLg ) / 1000 ) . 'K';
+ $benches["Sanitizer::stripAllTags (input: $sm)"] = function () use ( $textWithHtmlSm ) {
+ Sanitizer::stripAllTags( $textWithHtmlSm );
+ };
+ $benches["Sanitizer::stripAllTags (input: $lg)"] = function () use ( $textWithHtmlLg ) {
+ Sanitizer::stripAllTags( $textWithHtmlLg );
+ };
+ }
+
+ $this->bench( $benches );
+ }
+}
+
+$maintClass = BenchmarkSanitizer::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
],
'mediawiki.special.preferences' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'scripts' => [
'resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js',
'resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js',
],
],
'mediawiki.special.preferences.styles' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
],
'mediawiki.special.recentchanges' => [
rvdifftotext: $textbox.textSelection( 'getContents' ),
rvdifftotextpst: true,
rvprop: '',
- rvsection: section === '' ? undefined : section
+ rvsection: section === '' ? undefined : section,
+ uselang: mw.config.get( 'wgUserLanguage' )
} );
// Wait for the summary before showing the diff so the page doesn't jump twice
mw.hook( 'RcFilters.popup.open' ).fire();
- if ( !this.getMenu().getSelectedItem() ) {
+ if ( !this.getMenu().findSelectedItem() ) {
// If there are no selected items, scroll menu to top
// This has to be in a setTimeout so the menu has time
// to be positioned and fixed
*/
mw.rcfilters.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
var nextItem,
- currentItem = this.findHighlightedItem() || this.getSelectedItem();
+ currentItem = this.findHighlightedItem() || this.findSelectedItem();
// Call parent
mw.rcfilters.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );
$wgMainStash = 'hash';
// Use memory job queue
$wgJobTypeConf = [
- 'default' => [ 'class' => 'JobQueueMemory', 'order' => 'fifo' ],
+ 'default' => [ 'class' => JobQueueMemory::class, 'order' => 'fifo' ],
];
$wgUseDatabaseMessages = false; # Set for future resets
// Assume UTC for testing purposes
$wgLocaltimezone = 'UTC';
- $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
+ $wgLocalisationCacheConf['storeClass'] = LCStoreNull::class;
// Do not bother updating search tables
- $wgSearchType = 'SearchEngineDummy';
+ $wgSearchType = SearchEngineDummy::class;
// Generic MediaWiki\Session\SessionManager configuration for tests
// We use CookieSessionProvider because things might be expecting
// Set up null lock managers
$setup['wgLockManagers'] = [ [
'name' => 'fsLockManager',
- 'class' => 'NullLockManager',
+ 'class' => NullLockManager::class,
], [
'name' => 'nullLockManager',
- 'class' => 'NullLockManager',
+ 'class' => NullLockManager::class,
] ];
$reset = function () {
LockManagerGroup::destroySingletons();
return new RepoGroup(
[
- 'class' => 'MockLocalRepo',
+ 'class' => MockLocalRepo::class,
'name' => 'local',
'url' => 'http://example.com/images',
'hashLevels' => 2,
</ul>
!! end
+!! test
+Gallery (without px units)
+!! wikitext
+<gallery widths="70" heights="40">
+File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional">
+ <li class="gallerybox" style="width: 105px"><div style="width: 105px">
+ <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
+ <div class="gallerytext">
+ </div>
+ </div></li>
+</ul>
+
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"widths":"70","heights":"40"},"body":{"extsrc":"\nFile:Foobar.jpg\n"}}'>
+<li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><figure-inline typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></figure-inline></div><div class="gallerytext"></div></li>
+</ul>
+!! end
+
+!! test
+Gallery (with invalid units)
+!! wikitext
+<gallery widths="70em" heights="40em">
+File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional">
+ <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
+ <div class="gallerytext">
+ </div>
+ </div></li>
+</ul>
+
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"widths":"70em","heights":"40em"},"body":{"extsrc":"\nFile:Foobar.jpg\n"}}'>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><figure-inline typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></figure-inline></div><div class="gallerytext"></div></li>
+</ul>
+!! end
+
!! test
Gallery with link that has fragment
!! options
* which we can't allow, as that would open a new connection for mysql.
* Replace with a HashBag. They would not be going to persist anyway.
*/
- $hashCache = [ 'class' => 'HashBagOStuff', 'reportDupes' => false ];
+ $hashCache = [ 'class' => HashBagOStuff::class, 'reportDupes' => false ];
$objectCaches = [
CACHE_DB => $hashCache,
CACHE_ACCEL => $hashCache,
$defaultOverrides->set( 'ObjectCaches', $objectCaches );
$defaultOverrides->set( 'MainCacheType', CACHE_NONE );
- $defaultOverrides->set( 'JobTypeConf', [ 'default' => [ 'class' => 'JobQueueMemory' ] ] );
+ $defaultOverrides->set( 'JobTypeConf', [ 'default' => [ 'class' => JobQueueMemory::class ] ] );
// Use a fast hash algorithm to hash passwords.
$defaultOverrides->set( 'PasswordDefault', 'A' );
'skin' => $options['skin'],
'target' => 'phpunit',
] );
- $ctx = $this->getMockBuilder( 'ResourceLoaderContext' )
+ $ctx = $this->getMockBuilder( ResourceLoaderContext::class )
->setConstructorArgs( [ $resourceLoader, $request ] )
->setMethods( [ 'getDirection' ] )
->getMock();
|| ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory )
)
) {
- $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
+ $wgLocalisationCacheConf['storeClass'] = LCStoreNull::class;
}
}
] );
/** @var PHPUnit_Framework_MockObject_MockObject|User $userMock */
- $userMock = $this->getMock( 'User', [ 'getEditCount' ] );
+ $userMock = $this->getMock( User::class, [ 'getEditCount' ] );
if ( $requirement > 0 ) {
$userMock->expects( $this->once() )
->method( 'getEditCount' )
);
$this->assertInstanceOf(
- 'Block',
+ Block::class,
$userBlock,
"'$username' block block object should be existent"
);
$ep->importFormData( $req );
$this->setExpectedException(
- 'MWException',
+ MWException::class,
'This content model is not supported: testing'
);
<?php
-/** tests for includes/Html.php */
class HtmlTest extends MediaWikiTestCase {
'name' => 'AnotherName',
'licenses' => $str,
] );
- $this->assertThat( $lc, $this->isInstanceOf( 'Licenses' ) );
+ $this->assertThat( $lc, $this->isInstanceOf( Licenses::class ) );
}
}
* @covers ListToggle::__construct
*/
public function testConstruct() {
- $output = $this->getMockBuilder( 'OutputPage' )
+ $output = $this->getMockBuilder( OutputPage::class )
->setMethods( null )
->disableOriginalConstructor()
->getMock();
$listToggle = new ListToggle( $output );
- $this->assertInstanceOf( 'ListToggle', $listToggle );
+ $this->assertInstanceOf( ListToggle::class, $listToggle );
$this->assertContains( 'mediawiki.checkboxtoggle', $output->getModules() );
$this->assertContains( 'mediawiki.checkboxtoggle.styles', $output->getModuleStyles() );
}
* @covers ListToggle::getHTML
*/
public function testGetHTML() {
- $output = $this->createMock( 'OutputPage' );
+ $output = $this->createMock( OutputPage::class );
$output->expects( $this->any() )
->method( 'msg' )
->will( $this->returnCallback( function ( $key ) {
* @file
*/
-/**
- * Test class for MWNamespace.
- * @todo FIXME: this test file is a mess
- */
class MWNamespaceTest extends MediaWikiTestCase {
+
protected function setUp() {
parent::setUp();
] );
}
-# ### START OF TESTS #########################################################
-
/**
* @todo Write more texts, handle $wgAllowImageMoving setting
* @covers MWNamespace::isMovable
*/
public function testIsMovable() {
$this->assertFalse( MWNamespace::isMovable( NS_SPECIAL ) );
- # @todo FIXME: Write more tests!!
}
/**
$this->assertNull( MWNamespace::getAssociated( NS_SPECIAL ) );
}
- /**
- * @todo Implement testExists().
- */
- /*
- public function testExists() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
/**
* Test MWNamespace::equals
* Note if we add a namespace registration system with keys like 'MAIN'
);
}
- /**
- * @todo Implement testGetCanonicalNamespaces().
- */
- /*
- public function testGetCanonicalNamespaces() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
- /**
- * @todo Implement testGetCanonicalName().
- */
- /*
- public function testGetCanonicalName() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
- /**
- * @todo Implement testGetCanonicalIndex().
- */
- /*
- public function testGetCanonicalIndex() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
- /**
- * @todo Implement testGetValidNamespaces().
- */
- /*
- public function testGetValidNamespaces() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
public function provideHasTalkNamespace() {
return [
[ NS_MEDIA, false ],
$expectedOutput, // The expected output
$desc // Description
) {
- $user = $this->createMock( 'User' );
+ $user = $this->createMock( User::class );
$user->expects( $this->any() )
->method( 'getOption' )
->with( 'timecorrection' )
$expectedOutput, // The expected output
$desc // Description
) {
- $user = $this->createMock( 'User' );
+ $user = $this->createMock( User::class );
$user->expects( $this->any() )
->method( 'getOption' )
->with( 'timecorrection' )
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\SqlBlobStore;
public function testGetInstance() {
$services = MediaWikiServices::getInstance();
- $this->assertInstanceOf( 'MediaWiki\\MediaWikiServices', $services );
+ $this->assertInstanceOf( MediaWikiServices::class, $services );
}
public function testForceGlobalInstance() {
$newServices = $this->newMediaWikiServices();
$oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
- $this->assertInstanceOf( 'MediaWiki\\MediaWikiServices', $oldServices );
+ $this->assertInstanceOf( MediaWikiServices::class, $oldServices );
$this->assertNotSame( $oldServices, $newServices );
$theServices = MediaWikiServices::getInstance();
$newServices = $this->newMediaWikiServices();
$oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
- $lbFactory = $this->getMockBuilder( 'LBFactorySimple' )
+ $lbFactory = $this->getMockBuilder( \Wikimedia\Rdbms\LBFactorySimple::class )
->disableOriginalConstructor()
->getMock();
'Test',
function () use ( &$serviceCounter ) {
$serviceCounter++;
- $service = $this->createMock( 'MediaWiki\Services\DestructibleService' );
+ $service = $this->createMock( MediaWiki\Services\DestructibleService::class );
$service->expects( $this->once() )->method( 'destroy' );
return $service;
}
$services->defineService(
'Test',
function () {
- $service = $this->createMock( 'MediaWiki\Services\DestructibleService' );
+ $service = $this->createMock( MediaWiki\Services\DestructibleService::class );
$service->expects( $this->never() )->method( 'destroy' );
return $service;
}
'SearchEngineConfig' => [ 'SearchEngineConfig', SearchEngineConfig::class ],
'SkinFactory' => [ 'SkinFactory', SkinFactory::class ],
'DBLoadBalancerFactory' => [ 'DBLoadBalancerFactory', Wikimedia\Rdbms\LBFactory::class ],
- 'DBLoadBalancer' => [ 'DBLoadBalancer', 'LoadBalancer' ],
+ 'DBLoadBalancer' => [ 'DBLoadBalancer', Wikimedia\Rdbms\LoadBalancer::class ],
'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ],
'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ],
'CryptRand' => [ 'CryptRand', CryptRand::class ],
'BlobStore' => [ 'BlobStore', BlobStore::class ],
'_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ],
'RevisionStore' => [ 'RevisionStore', RevisionStore::class ],
+ 'RevisionLookup' => [ 'RevisionLookup', RevisionLookup::class ],
'HttpRequestFactory' => [ 'HttpRequestFactory', HttpRequestFactory::class ],
];
}
public function testIsValidMergeRevisionLimit() {
$limit = MergeHistory::REVISION_LIMIT;
- $mh = $this->getMockBuilder( 'MergeHistory' )
+ $mh = $this->getMockBuilder( MergeHistory::class )
->setMethods( [ 'getRevisionCount' ] )
->setConstructorArgs( [
Title::newFromText( 'Test' ),
$this->assertSame( $params, $message->getParams() );
$this->assertEquals( $expectedLang, $message->getLanguage() );
- $messageSpecifier = $this->getMockForAbstractClass( 'MessageSpecifier' );
+ $messageSpecifier = $this->getMockForAbstractClass( MessageSpecifier::class );
$messageSpecifier->expects( $this->any() )
->method( 'getKey' )->will( $this->returnValue( $key ) );
$messageSpecifier->expects( $this->any() )
* @covers ::wfMessage
*/
public function testWfMessage() {
- $this->assertInstanceOf( 'Message', wfMessage( 'mainpage' ) );
- $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
+ $this->assertInstanceOf( Message::class, wfMessage( 'mainpage' ) );
+ $this->assertInstanceOf( Message::class, wfMessage( 'i-dont-exist-evar' ) );
}
/**
* @covers Message::newFromKey
*/
public function testNewFromKey() {
- $this->assertInstanceOf( 'Message', Message::newFromKey( 'mainpage' ) );
- $this->assertInstanceOf( 'Message', Message::newFromKey( 'i-dont-exist-evar' ) );
+ $this->assertInstanceOf( Message::class, Message::newFromKey( 'mainpage' ) );
+ $this->assertInstanceOf( Message::class, Message::newFromKey( 'i-dont-exist-evar' ) );
}
/**
$msg = unserialize( serialize( $msg ) );
$this->assertSame( '(<a>foo</a>)', $msg->parse() );
$title = TestingAccessWrapper::newFromObject( $msg )->title;
- $this->assertInstanceOf( 'Title', $title );
+ $this->assertInstanceOf( Title::class, $title );
$this->assertSame( 'Testing', $title->getFullText() );
$msg = new Message( 'mainpage' );
'wgResourceLoaderDebug' => false,
'wgLoadScript' => 'http://127.0.0.1:8080/w/load.php',
] );
- $class = new ReflectionClass( 'OutputPage' );
+ $class = new ReflectionClass( OutputPage::class );
$method = $class->getMethod( 'makeResourceLoaderLink' );
$method->setAccessible( true );
$ctx = new RequestContext();
$ctx = new RequestContext();
$ctx->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'fallback' ) );
$ctx->setLanguage( 'en' );
- $outputPage = $this->getMockBuilder( 'OutputPage' )
+ $outputPage = $this->getMockBuilder( OutputPage::class )
->setConstructorArgs( [ $ctx ] )
->setMethods( [ 'isUserCssPreview', 'buildCssLinksArray' ] )
->getMock();
*/
public function testVaryHeaders( $calls, $vary, $key ) {
// get rid of default Vary fields
- $outputPage = $this->getMockBuilder( 'OutputPage' )
+ $outputPage = $this->getMockBuilder( OutputPage::class )
->setConstructorArgs( [ new RequestContext() ] )
->setMethods( [ 'getCacheVaryCookies' ] )
->getMock();
'page_title' => 'Test2'
]
] );
- $outputPage = $this->getMockBuilder( 'OutputPage' )
+ $outputPage = $this->getMockBuilder( OutputPage::class )
->setConstructorArgs( [ new RequestContext() ] )
->setMethods( [ 'addCategoryLinksToLBAndGetResult' ] )
->getMock();
'wgCapitalLinkOverrides' => [ self::NS_NONCAP => false ],
] );
- $this->originalHandlers = TestingAccessWrapper::newFromClass( 'Hooks' )->handlers;
- TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = [];
+ $this->originalHandlers = TestingAccessWrapper::newFromClass( Hooks::class )->handlers;
+ TestingAccessWrapper::newFromClass( Hooks::class )->handlers = [];
// Clear caches so that our new namespace appears
MWNamespace::clearCaches();
parent::tearDown();
- TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = $this->originalHandlers;
+ TestingAccessWrapper::newFromClass( Hooks::class )->handlers = $this->originalHandlers;
SpecialPageFactory::resetList();
}
public function provideGetContentHandler() {
// NOTE: we expect the help namespace to always contain wikitext
return [
- [ 'hello world', 'Help:Hello', null, null, 'WikitextContentHandler' ],
- [ 'hello world', 'User:hello/there.css', null, null, 'CssContentHandler' ],
- [ serialize( 'hello world' ), 'Dummy:Hello', null, null, 'DummyContentHandlerForTesting' ],
+ [ 'hello world', 'Help:Hello', null, null, WikitextContentHandler::class ],
+ [ 'hello world', 'User:hello/there.css', null, null, CssContentHandler::class ],
+ [ serialize( 'hello world' ), 'Dummy:Hello', null, null, DummyContentHandlerForTesting::class ],
];
}
*/
public function testTitleObjectStringConversion() {
$title = Title::newFromText( "text" );
- $this->assertInstanceOf( 'Title', $title, "Title creation" );
+ $this->assertInstanceOf( Title::class, $title, "Title creation" );
$this->assertEquals( "Text", $title, "Automatic string conversion" );
$title = Title::newFromText( "text", NS_MEDIA );
* @covers Status::newFatal
*/
public function testNewFatalWithMessage() {
- $message = $this->getMockBuilder( 'Message' )
+ $message = $this->getMockBuilder( Message::class )
->disableOriginalConstructor()
->getMock();
}
protected function getMockMessage( $key = 'key', $params = [] ) {
- $message = $this->getMockBuilder( 'Message' )
+ $message = $this->getMockBuilder( Message::class )
->disableOriginalConstructor()
->getMock();
$message->expects( $this->atLeastOnce() )
* @covers Status::cleanParams
*/
public function testCleanParams( $cleanCallback, $params, $expected ) {
- $method = new ReflectionMethod( 'Status', 'cleanParams' );
+ $method = new ReflectionMethod( Status::class, 'cleanParams' );
$method->setAccessible( true );
$status = new Status();
$status->cleanCallback = $cleanCallback;
Status $status, $expectedParams = [], $expectedKey, $expectedWrapper
) {
$message = $status->getMessage( null, null, 'qqx' );
- $this->assertInstanceOf( 'Message', $message );
+ $this->assertInstanceOf( Message::class, $message );
$this->assertEquals( $expectedParams, self::sanitizedMessageParams( $message ),
'Message::getParams' );
$this->assertEquals( $expectedKey, $message->getKey(), 'Message::getKey' );
$message = $status->getMessage( 'wrapper-short', 'wrapper-long' );
- $this->assertInstanceOf( 'Message', $message );
+ $this->assertInstanceOf( Message::class, $message );
$this->assertEquals( $expectedWrapper, $message->getKey(), 'Message::getKey with wrappers' );
$this->assertCount( 1, $message->getParams(), 'Message::getParams with wrappers' );
$message = $status->getMessage( 'wrapper' );
- $this->assertInstanceOf( 'Message', $message );
+ $this->assertInstanceOf( Message::class, $message );
$this->assertEquals( 'wrapper', $message->getKey(), 'Message::getKey with wrappers' );
$this->assertCount( 1, $message->getParams(), 'Message::getParams with wrappers' );
$message = $status->getMessage( false, 'wrapper' );
- $this->assertInstanceOf( 'Message', $message );
+ $this->assertInstanceOf( Message::class, $message );
$this->assertEquals( 'wrapper', $message->getKey(), 'Message::getKey with wrappers' );
$this->assertCount( 1, $message->getParams(), 'Message::getParams with wrappers' );
}
* @covers Status::getErrorMessage
*/
public function testGetErrorMessage() {
- $method = new ReflectionMethod( 'Status', 'getErrorMessage' );
+ $method = new ReflectionMethod( Status::class, 'getErrorMessage' );
$method->setAccessible( true );
$status = new Status();
$key = 'foo';
/** @var Message $message */
$message = $method->invoke( $status, array_merge( [ $key ], $params ) );
- $this->assertInstanceOf( 'Message', $message );
+ $this->assertInstanceOf( Message::class, $message );
$this->assertEquals( $key, $message->getKey() );
$this->assertEquals( $params, $message->getParams() );
}
* @covers Status::getErrorMessageArray
*/
public function testGetErrorMessageArray() {
- $method = new ReflectionMethod( 'Status', 'getErrorMessageArray' );
+ $method = new ReflectionMethod( Status::class, 'getErrorMessageArray' );
$method->setAccessible( true );
$status = new Status();
$key = 'foo';
$this->assertInternalType( 'array', $messageArray );
$this->assertCount( 2, $messageArray );
foreach ( $messageArray as $message ) {
- $this->assertInstanceOf( 'Message', $message );
+ $this->assertInstanceOf( Message::class, $message );
$this->assertEquals( $key, $message->getKey() );
$this->assertEquals( $params, $message->getParams() );
}
[ 'gzip', 'object' ],
'2®Àþ2',
];
+ yield 'T184749 (windows-1252 encoding), string in string out' => [
+ 'windows-1252',
+ iconv( 'utf-8', 'windows-1252', "sammansättningar" ),
+ [],
+ 'sammansättningar',
+ ];
+ yield 'T184749 (windows-1252 encoding), string in string out with gzip' => [
+ 'windows-1252',
+ gzdeflate( iconv( 'utf-8', 'windows-1252', "sammansättningar" ) ),
+ [ 'gzip' ],
+ 'sammansättningar',
+ ];
}
/**
public function provideBlobs() {
yield [ '' ];
yield [ 'someText' ];
+ yield [ "sammansättningar" ];
}
/**
$this->assertSame( $blob, $store->getBlob( $address ) );
}
+ /**
+ * @dataProvider provideBlobs
+ * @covers \MediaWiki\Storage\SqlBlobStore::storeBlob
+ * @covers \MediaWiki\Storage\SqlBlobStore::getBlob
+ */
+ public function testSimpleStoreGetBlobSimpleRoundtripWindowsLegacyEncoding( $blob ) {
+ $store = $this->getBlobStore( 'windows-1252' );
+ $address = $store->storeBlob( $blob );
+ $this->assertSame( $blob, $store->getBlob( $address ) );
+ }
+
+ /**
+ * @dataProvider provideBlobs
+ * @covers \MediaWiki\Storage\SqlBlobStore::storeBlob
+ * @covers \MediaWiki\Storage\SqlBlobStore::getBlob
+ */
+ public function testSimpleStoreGetBlobSimpleRoundtripWindowsLegacyEncodingGzip( $blob ) {
+ $store = $this->getBlobStore( 'windows-1252', true );
+ $address = $store->storeBlob( $blob );
+ $this->assertSame( $blob, $store->getBlob( $address ) );
+ }
+
}
$this->assertEquals( 'rrr', $tp->processTemplate( 'recurse', $data ) );
$tp->enableRecursivePartials( false );
- $this->setExpectedException( 'Exception' );
+ $this->setExpectedException( Exception::class );
$tp->processTemplate( 'recurse', $data );
}
use MediaWikiCoversValidator;
private function getMockResultWrapper( $row = null, $numRows = 1 ) {
- $resultWrapper = $this->getMockBuilder( 'ResultWrapper' )
+ $resultWrapper = $this->getMockBuilder( Wikimedia\Rdbms\ResultWrapper::class )
->disableOriginalConstructor();
$resultWrapper = $resultWrapper->getMock();
$this->assertEquals( $resultWrapper, $object->res );
$this->assertSame( 0, $object->key );
- $this->assertInstanceOf( 'Title', $object->current );
+ $this->assertInstanceOf( Title::class, $object->current );
$this->assertEquals( $namespace, $object->current->mNamespace );
$this->assertEquals( $title, $object->current->mTextform );
}
$title = 'foo';
$row = $this->getRowWithTitle( $namespace, $title );
$object = $this->getTitleArrayFromResult( $this->getMockResultWrapper( $row ) );
- $this->assertInstanceOf( 'Title', $object->current() );
+ $this->assertInstanceOf( Title::class, $object->current() );
$this->assertEquals( $namespace, $object->current->mNamespace );
$this->assertEquals( $title, $object->current->mTextform );
}
*/
public function testGetOtherPage( $text, $expected ) {
if ( $expected === null ) {
- $this->setExpectedException( 'MWException' );
+ $this->setExpectedException( MWException::class );
}
$title = Title::newFromText( $text );
*/
public function testSecureAndSplitValid( $text ) {
$this->secureAndSplitGlobals();
- $this->assertInstanceOf( 'Title', Title::newFromText( $text ), "Valid: $text" );
+ $this->assertInstanceOf( Title::class, Title::newFromText( $text ), "Valid: $text" );
}
/**
$this->setContentLang( $contLang );
$title = Title::newFromText( $titleText );
- $this->assertInstanceOf( 'Title', $title,
+ $this->assertInstanceOf( Title::class, $title,
"Test must be passed a valid title text, you gave '$titleText'"
);
$this->assertEquals( $expected,
protected function mockWebRequest( $data = [] ) {
// Cannot use PHPUnit getMockBuilder() as it does not support
// overriding protected properties afterwards
- $reflection = new ReflectionClass( 'WebRequest' );
+ $reflection = new ReflectionClass( WebRequest::class );
$req = $reflection->newInstanceWithoutConstructor();
$prop = $reflection->getProperty( 'data' );
* @covers Xml::expandAttributes
*/
public function testExpandAttributesException() {
- $this->setExpectedException( 'MWException' );
+ $this->setExpectedException( MWException::class );
Xml::expandAttributes( 'string' );
}
'disabled' => false,
'view' => true,
'edit' => true,
- 'revisiondelete' => 'SpecialPageAction',
+ 'revisiondelete' => SpecialPageAction::class,
'dummy' => true,
'string' => 'NamedDummyAction',
'declared' => 'NonExistingClassName',
$generator = new MockApiQueryBase( 'generator' );
$manager = self::getManager( '', $allModules, [ 'mock1', 'mock2' ] );
- $this->assertSame( 'ApiMain', $manager->getSource() );
+ $this->assertSame( ApiMain::class, $manager->getSource() );
$this->assertSame( false, $manager->isGeneratorDone() );
$this->assertSame( $allModules, $manager->getRunModules() );
$manager->addContinueParam( $allModules[0], 'm1continue', [ 1, 2 ] );
public function testCheckDirectApiEditingDisallowed_forNonTextContent() {
$this->setExpectedException(
- 'ApiUsageException',
+ ApiUsageException::class,
'Direct editing via API is not supported for content model ' .
'testing used by Dummy:ApiEditPageTest_nonTextPageEdit'
);
libxml_use_internal_errors( true );
$sxe = simplexml_load_string( $req->getContent() );
$this->assertNotInternalType( "bool", $sxe );
- $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
+ $this->assertThat( $sxe, $this->isInstanceOf( SimpleXMLElement::class ) );
$this->assertNotInternalType( "null", $sxe->login[0] );
$a = $sxe->login[0]->attributes()->result[0];
$priv = TestingAccessWrapper::newFromObject( $api );
$priv->mInternalMode = false;
- $module = $this->getMockBuilder( 'ApiBase' )
+ $module = $this->getMockBuilder( ApiBase::class )
->setConstructorArgs( [ $api, 'mock' ] )
->setMethods( [ 'getConditionalRequestData' ] )
->getMockForAbstractClass();
$priv = TestingAccessWrapper::newFromObject( $api );
$priv->mInternalMode = false;
- $module = $this->getMockBuilder( 'ApiBase' )
+ $module = $this->getMockBuilder( ApiBase::class )
->setConstructorArgs( [ $api, 'mock' ] )
->setMethods( [ 'getConditionalRequestData' ] )
->getMockForAbstractClass();
)->inLanguage( 'en' )->useDatabase( false )->text();
$dbex = new DBQueryError(
- $this->createMock( 'IDatabase' ),
+ $this->createMock( \Wikimedia\Rdbms\IDatabase::class ),
'error', 1234, 'SELECT 1', __METHOD__ );
$dbtrace = wfMessage( 'api-exception-trace',
get_class( $dbex ),
'plain class' => [
'login',
'action',
- 'ApiLogin',
+ ApiLogin::class,
null,
],
'with factory' => [
'login',
'action',
- 'ApiLogin',
+ ApiLogin::class,
[ $this, 'newApiLogin' ],
],
'with closure' => [
'logout',
'action',
- 'ApiLogout',
+ ApiLogout::class,
function ( ApiMain $main, $action ) {
return new ApiLogout( $main, $action );
},
'simple' => [
[
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
],
'action',
],
'with factories' => [
[
'login' => [
- 'class' => 'ApiLogin',
+ 'class' => ApiLogin::class,
'factory' => [ $this, 'newApiLogin' ],
],
'logout' => [
- 'class' => 'ApiLogout',
+ 'class' => ApiLogout::class,
'factory' => function ( ApiMain $main, $action ) {
return new ApiLogout( $main, $action );
},
public function getModuleProvider() {
$modules = [
- 'feedrecentchanges' => 'ApiFeedRecentChanges',
- 'feedcontributions' => [ 'class' => 'ApiFeedContributions' ],
+ 'feedrecentchanges' => ApiFeedRecentChanges::class,
+ 'feedcontributions' => [ 'class' => ApiFeedContributions::class ],
'login' => [
- 'class' => 'ApiLogin',
+ 'class' => ApiLogin::class,
'factory' => [ $this, 'newApiLogin' ],
],
'logout' => [
- 'class' => 'ApiLogout',
+ 'class' => ApiLogout::class,
'factory' => function ( ApiMain $main, $action ) {
return new ApiLogout( $main, $action );
},
'legacy entry' => [
$modules,
'feedrecentchanges',
- 'ApiFeedRecentChanges',
+ ApiFeedRecentChanges::class,
],
'just a class' => [
$modules,
'feedcontributions',
- 'ApiFeedContributions',
+ ApiFeedContributions::class,
],
'with factory' => [
$modules,
'login',
- 'ApiLogin',
+ ApiLogin::class,
],
'with closure' => [
$modules,
'logout',
- 'ApiLogout',
+ ApiLogout::class,
],
];
}
*/
public function testGetModule_null() {
$modules = [
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
];
$moduleManager = $this->getModuleManager();
*/
public function testGetNames() {
$fooModules = [
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
];
$barModules = [
- 'feedcontributions' => [ 'class' => 'ApiFeedContributions' ],
- 'feedrecentchanges' => [ 'class' => 'ApiFeedRecentChanges' ],
+ 'feedcontributions' => [ 'class' => ApiFeedContributions::class ],
+ 'feedrecentchanges' => [ 'class' => ApiFeedRecentChanges::class ],
];
$moduleManager = $this->getModuleManager();
*/
public function testGetNamesWithClasses() {
$fooModules = [
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
];
$barModules = [
- 'feedcontributions' => [ 'class' => 'ApiFeedContributions' ],
- 'feedrecentchanges' => [ 'class' => 'ApiFeedRecentChanges' ],
+ 'feedcontributions' => [ 'class' => ApiFeedContributions::class ],
+ 'feedrecentchanges' => [ 'class' => ApiFeedRecentChanges::class ],
];
$moduleManager = $this->getModuleManager();
$allNamesWithClasses = $moduleManager->getNamesWithClasses();
$allModules = array_merge( $fooModules, [
- 'feedcontributions' => 'ApiFeedContributions',
- 'feedrecentchanges' => 'ApiFeedRecentChanges',
+ 'feedcontributions' => ApiFeedContributions::class,
+ 'feedrecentchanges' => ApiFeedRecentChanges::class,
] );
$this->assertArrayEquals( $allModules, $allNamesWithClasses );
}
*/
public function testGetModuleGroup() {
$fooModules = [
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
];
$barModules = [
- 'feedcontributions' => [ 'class' => 'ApiFeedContributions' ],
- 'feedrecentchanges' => [ 'class' => 'ApiFeedRecentChanges' ],
+ 'feedcontributions' => [ 'class' => ApiFeedContributions::class ],
+ 'feedrecentchanges' => [ 'class' => ApiFeedRecentChanges::class ],
];
$moduleManager = $this->getModuleManager();
*/
public function testGetGroups() {
$fooModules = [
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
];
$barModules = [
- 'feedcontributions' => [ 'class' => 'ApiFeedContributions' ],
- 'feedrecentchanges' => [ 'class' => 'ApiFeedRecentChanges' ],
+ 'feedcontributions' => [ 'class' => ApiFeedContributions::class ],
+ 'feedrecentchanges' => [ 'class' => ApiFeedRecentChanges::class ],
];
$moduleManager = $this->getModuleManager();
*/
public function testGetClassName() {
$fooModules = [
- 'login' => 'ApiLogin',
- 'logout' => 'ApiLogout',
+ 'login' => ApiLogin::class,
+ 'logout' => ApiLogout::class,
];
$barModules = [
- 'feedcontributions' => [ 'class' => 'ApiFeedContributions' ],
- 'feedrecentchanges' => [ 'class' => 'ApiFeedRecentChanges' ],
+ 'feedcontributions' => [ 'class' => ApiFeedContributions::class ],
+ 'feedrecentchanges' => [ 'class' => ApiFeedRecentChanges::class ],
];
$moduleManager = $this->getModuleManager();
$moduleManager->addModules( $barModules, 'bar' );
$this->assertEquals(
- 'ApiLogin',
+ ApiLogin::class,
$moduleManager->getClassName( 'login' )
);
$this->assertEquals(
- 'ApiLogout',
+ ApiLogout::class,
$moduleManager->getClassName( 'logout' )
);
$this->assertEquals(
- 'ApiFeedContributions',
+ ApiFeedContributions::class,
$moduleManager->getClassName( 'feedcontributions' )
);
$this->assertEquals(
- 'ApiFeedRecentChanges',
+ ApiFeedRecentChanges::class,
$moduleManager->getClassName( 'feedrecentchanges' )
);
$this->assertFalse(
}
private function replaceSearchEngineConfig() {
- $config = $this->getMockBuilder( 'SearchEngineConfig' )
+ $config = $this->getMockBuilder( SearchEngineConfig::class )
->disableOriginalConstructor()
->getMock();
$this->setService( 'SearchEngineConfig', $config );
}
private function replaceSearchEngine() {
- $engine = $this->getMockBuilder( 'SearchEngine' )
+ $engine = $this->getMockBuilder( SearchEngine::class )
->disableOriginalConstructor()
->getMock();
- $engineFactory = $this->getMockBuilder( 'SearchEngineFactory' )
+ $engineFactory = $this->getMockBuilder( SearchEngineFactory::class )
->disableOriginalConstructor()
->getMock();
$engineFactory->expects( $this->any() )
protected function setUp() {
parent::setUp();
- $this->mUserMock = $this->getMockBuilder( 'User' )
+ $this->mUserMock = $this->getMockBuilder( User::class )
->disableOriginalConstructor()
->getMock();
*/
public static function provideGeneralEncoding() {
$options = [
- 'class' => 'ApiFormatRaw',
+ 'class' => ApiFormatRaw::class,
'factory' => function ( ApiMain $main ) {
return new ApiFormatRaw( $main, new ApiFormatJson( $main, 'json' ) );
}
'{"mime":"text/plain","text":"some text","error":"some error"}',
[],
[
- 'class' => 'ApiFormatRaw',
+ 'class' => ApiFormatRaw::class,
'factory' => function ( ApiMain $main ) use ( &$apiMain ) {
$apiMain = $main;
$printer = new ApiFormatRaw( $main, new ApiFormatJson( $main, 'json' ) );
<?php
/**
- *
- * Created on Feb 6, 2013
- *
* Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
<?php
/**
- * Created on Jan 1, 2013
- *
* Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
$this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
}
+ public function testTitlesWithWhitespaces() {
+ $data = $this->doApiRequest( [
+ 'action' => 'query',
+ 'titles' => ' '
+ ] );
+
+ $this->assertArrayHasKey( 'query', $data[0] );
+ $this->assertArrayHasKey( 'pages', $data[0]['query'] );
+ $this->assertEquals( 1, count( $data[0]['query']['pages'] ) );
+ $this->assertArrayHasKey( -1, $data[0]['query']['pages'] );
+ $this->assertArrayHasKey( 'invalid', $data[0]['query']['pages'][-1] );
+ }
+
/**
* Test the ApiBase::titlePartToKey function
*
<?php
/**
- * Created on Feb 10, 2013
- *
* Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
$provider = $this->getMockForAbstractClass( AbstractAuthenticationProvider::class );
$providerPriv = TestingAccessWrapper::newFromObject( $provider );
- $obj = $this->getMockForAbstractClass( 'Psr\Log\LoggerInterface' );
+ $obj = $this->getMockForAbstractClass( \Psr\Log\LoggerInterface::class );
$provider->setLogger( $obj );
$this->assertSame( $obj, $providerPriv->logger, 'setLogger' );
$provider->setManager( $obj );
$this->assertSame( $obj, $providerPriv->manager, 'setManager' );
- $obj = $this->getMockForAbstractClass( 'Config' );
+ $obj = $this->getMockForAbstractClass( \Config::class );
$provider->setConfig( $obj );
$this->assertSame( $obj, $providerPriv->config, 'setConfig' );
$providerPriv = TestingAccessWrapper::newFromObject( $provider );
$obj = $providerPriv->getPasswordFactory();
- $this->assertInstanceOf( 'PasswordFactory', $obj );
+ $this->assertInstanceOf( \PasswordFactory::class, $obj );
$this->assertSame( $obj, $providerPriv->getPasswordFactory() );
}
$providerPriv = TestingAccessWrapper::newFromObject( $provider );
$obj = $providerPriv->getPassword( null );
- $this->assertInstanceOf( 'Password', $obj );
+ $this->assertInstanceOf( \Password::class, $obj );
$obj = $providerPriv->getPassword( 'invalid' );
- $this->assertInstanceOf( 'Password', $obj );
+ $this->assertInstanceOf( \Password::class, $obj );
}
public function testGetNewPasswordExpiry() {
if ( $canChangeUser !== null ) {
$methods[] = 'canChangeUser';
}
- $provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( $methods )
->getMock();
$provider->expects( $this->any() )->method( '__toString' )
$p->expects( $this->atMost( 1 ) )->method( 'postAuthentication' )
->willReturnCallback( function ( $user, $response ) use ( $constraint, $p ) {
if ( $user !== null ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( 'UTSysop', $user->getName() );
}
$this->assertInstanceOf( AuthenticationResponse::class, $response );
->willReturnCallback( function ( $user, $creator, $response )
use ( $constraint, $p, $username )
{
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( $username, $user->getName() );
$this->assertSame( 'UTSysop', $creator->getName() );
$this->assertInstanceOf( AuthenticationResponse::class, $response );
// Set up lots of mocks...
$mock = $this->getMockForAbstractClass(
- "MediaWiki\\Auth\\PrimaryAuthenticationProvider", []
+ \MediaWiki\Auth\PrimaryAuthenticationProvider::class, []
);
$mock->expects( $this->any() )->method( 'getUniqueId' )
->will( $this->returnValue( 'primary' ) );
// Test addToDatabase fails
$session->clear();
- $user = $this->getMockBuilder( 'User' )
+ $user = $this->getMockBuilder( \User::class )
->setMethods( [ 'addToDatabase' ] )->getMock();
$user->expects( $this->once() )->method( 'addToDatabase' )
->will( $this->returnValue( \Status::newFatal( 'because' ) ) );
$backoffKey = wfMemcKey( 'AuthManager', 'autocreate-failed', md5( $username ) );
$this->assertFalse( $cache->get( $backoffKey ), 'sanity check' );
$session->clear();
- $user = $this->getMockBuilder( 'User' )
+ $user = $this->getMockBuilder( \User::class )
->setMethods( [ 'addToDatabase' ] )->getMock();
$user->expects( $this->once() )->method( 'addToDatabase' )
->will( $this->throwException( new \Exception( 'Excepted' ) ) );
// Test addToDatabase fails because the user already exists.
$session->clear();
- $user = $this->getMockBuilder( 'User' )
+ $user = $this->getMockBuilder( \User::class )
->setMethods( [ 'addToDatabase' ] )->getMock();
$user->expects( $this->once() )->method( 'addToDatabase' )
->will( $this->returnCallback( function () use ( $username, &$user ) {
$p->postCalled = false;
$p->expects( $this->atMost( 1 ) )->method( 'postAccountLink' )
->willReturnCallback( function ( $user, $response ) use ( $constraint, $p ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( 'UTSysop', $user->getName() );
$this->assertInstanceOf( AuthenticationResponse::class, $response );
$this->assertThat( $response->status, $constraint );
);
}
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
public function testOnUserSaveSettings() {
$user = \User::newFromName( 'UTSysop' );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'updateExternalDB' )
->with( $this->identicalTo( $user ) );
public function testOnUserGroupsChanged() {
$user = \User::newFromName( 'UTSysop' );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'updateExternalDBGroups' )
->with(
public function testOnUserLoggedIn() {
$user = \User::newFromName( 'UTSysop' );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->exactly( 2 ) )->method( 'updateUser' )
->with( $this->identicalTo( $user ) );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
\Hooks::run( 'UserLoggedIn', [ $user ] );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'updateUser' )
->will( $this->returnCallback( function ( &$user ) {
public function testOnLocalUserCreated() {
$user = \User::newFromName( 'UTSysop' );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->exactly( 2 ) )->method( 'initUser' )
->with( $this->identicalTo( $user ), $this->identicalTo( false ) );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
\Hooks::run( 'LocalUserCreated', [ $user, false ] );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'initUser' )
->will( $this->returnCallback( function ( &$user ) {
}
public function testGetUniqueId() {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$this->assertSame(
* @param bool $allowPasswordChange
*/
public function testGetAuthenticationRequests( $action, $response, $allowPasswordChange ) {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->any() )->method( 'allowPasswordChange' )
->will( $this->returnValue( $allowPasswordChange ) );
$req->action = AuthManager::ACTION_LOGIN;
$reqs = [ PasswordAuthenticationRequest::class => $req ];
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'authenticate' ] )
->getMock();
$plugin->expects( $this->never() )->method( 'authenticate' );
$req->username = 'foo';
$req->password = 'bar';
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'authenticate' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )
$provider->beginPrimaryAuthentication( $reqs )
);
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'authenticate' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )
$provider->beginPrimaryAuthentication( $reqs )
);
- $pluginUser = $this->getMockBuilder( 'AuthPluginUser' )
+ $pluginUser = $this->getMockBuilder( \AuthPluginUser::class )
->setMethods( [ 'isLocked' ] )
->disableOriginalConstructor()
->getMock();
$pluginUser->expects( $this->once() )->method( 'isLocked' )
->will( $this->returnValue( true ) );
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'getUserInstance', 'authenticate' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )
$provider->beginPrimaryAuthentication( $reqs )
);
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'authenticate' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )
$provider->beginPrimaryAuthentication( $reqs )
);
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'authenticate', 'strict' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )
$this->assertSame( AuthenticationResponse::FAIL, $ret->status );
$this->assertSame( 'wrongpassword', $ret->message->getKey() );
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'authenticate', 'strictUserAuth' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )
$this->assertSame( AuthenticationResponse::FAIL, $ret->status );
$this->assertSame( 'wrongpassword', $ret->message->getKey() );
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'domainList', 'validDomain', 'setDomain', 'userExists', 'authenticate' ] )
->getMock();
$plugin->expects( $this->any() )->method( 'domainList' )
}
public function testTestUserExists() {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'userExists' )
->with( $this->equalTo( 'Foo' ) )
$this->assertTrue( $provider->testUserExists( 'foo' ) );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'userExists' )
->with( $this->equalTo( 'Foo' ) )
}
public function testTestUserCanAuthenticate() {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'userExists' )
->with( $this->equalTo( 'Foo' ) )
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$this->assertFalse( $provider->testUserCanAuthenticate( 'foo' ) );
- $pluginUser = $this->getMockBuilder( 'AuthPluginUser' )
+ $pluginUser = $this->getMockBuilder( \AuthPluginUser::class )
->disableOriginalConstructor()
->getMock();
$pluginUser->expects( $this->once() )->method( 'isLocked' )
->will( $this->returnValue( true ) );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'userExists' )
->with( $this->equalTo( 'Foo' ) )
->will( $this->returnValue( true ) );
$plugin->expects( $this->once() )->method( 'getUserInstance' )
->with( $this->callback( function ( $user ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertEquals( 'Foo', $user->getName() );
return true;
} ) )
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$this->assertFalse( $provider->testUserCanAuthenticate( 'foo' ) );
- $pluginUser = $this->getMockBuilder( 'AuthPluginUser' )
+ $pluginUser = $this->getMockBuilder( \AuthPluginUser::class )
->disableOriginalConstructor()
->getMock();
$pluginUser->expects( $this->once() )->method( 'isLocked' )
->will( $this->returnValue( false ) );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'userExists' )
->with( $this->equalTo( 'Foo' ) )
->will( $this->returnValue( true ) );
$plugin->expects( $this->once() )->method( 'getUserInstance' )
->with( $this->callback( function ( $user ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertEquals( 'Foo', $user->getName() );
return true;
} ) )
}
public function testProviderRevokeAccessForUser() {
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'userExists', 'setPassword' ] )
->getMock();
$plugin->expects( $this->once() )->method( 'userExists' )->willReturn( true );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$provider->providerRevokeAccessForUser( 'foo' );
- $plugin = $this->getMockBuilder( 'AuthPlugin' )
+ $plugin = $this->getMockBuilder( \AuthPlugin::class )
->setMethods( [ 'domainList', 'userExists', 'setPassword' ] )
->getMock();
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [ 'D1', 'D2', 'D3' ] );
}
public function testProviderAllowsPropertyChange() {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->any() )->method( 'allowPropChange' )
->will( $this->returnCallback( function ( $prop ) {
*/
public function testProviderAllowsAuthenticationDataChange( $type, $allow, $expect ) {
$domains = $type instanceof PasswordDomainAuthenticationRequest ? [ 'foo', 'bar' ] : [];
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( $domains );
$plugin->expects( $allow === null ? $this->never() : $this->once() )
->method( 'allowPasswordChange' )->will( $this->returnValue( $allow ) );
}
public function testProviderChangeAuthenticationData() {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->never() )->method( 'setPassword' );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$req->username = 'foo';
$req->password = 'bar';
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'setPassword' )
->with( $this->callback( function ( $u ) {
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$provider->providerChangeAuthenticationData( $req );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )->method( 'setPassword' )
->with( $this->callback( function ( $u ) {
$this->assertSame( 'authmanager-authplugin-setpass-failed-message', $e->msg );
}
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )
->will( $this->returnValue( [ 'Domain1', 'Domain2' ] ) );
$plugin->expects( $this->any() )->method( 'validDomain' )
* @param string $expect
*/
public function testAccountCreationType( $can, $expect ) {
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->once() )
->method( 'canCreateAccounts' )->will( $this->returnValue( $can ) );
public function testTestForAccountCreation() {
$user = \User::newFromName( 'foo' );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
$this->assertEquals(
$req->action = AuthManager::ACTION_CREATE;
$reqs = [ PasswordAuthenticationRequest::class => $req ];
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->any() )->method( 'canCreateAccounts' )
->will( $this->returnValue( false ) );
);
}
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->any() )->method( 'canCreateAccounts' )
->will( $this->returnValue( true ) );
$req->username = 'foo';
$req->password = 'bar';
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->any() )->method( 'canCreateAccounts' )
->will( $this->returnValue( true ) );
$provider->beginPrimaryAccountCreation( $user, $user, $reqs )
);
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
$plugin->expects( $this->any() )->method( 'canCreateAccounts' )
->will( $this->returnValue( true ) );
$this->assertSame( AuthenticationResponse::FAIL, $ret->status );
$this->assertSame( 'authmanager-authplugin-create-fail', $ret->message->getKey() );
- $plugin = $this->createMock( 'AuthPlugin' );
+ $plugin = $this->createMock( \AuthPlugin::class );
$plugin->expects( $this->any() )->method( 'canCreateAccounts' )
->will( $this->returnValue( true ) );
$plugin->expects( $this->any() )->method( 'domainList' )
$ret = $mock->describeCredentials();
$this->assertInternalType( 'array', $ret );
$this->assertArrayHasKey( 'provider', $ret );
- $this->assertInstanceOf( 'Message', $ret['provider'] );
+ $this->assertInstanceOf( \Message::class, $ret['provider'] );
$this->assertArrayHasKey( 'account', $ret );
- $this->assertInstanceOf( 'Message', $ret['account'] );
+ $this->assertInstanceOf( \Message::class, $ret['account'] );
}
public function testLoadRequestsFromSubmission() {
$this->assertType( 'array', $data, "Field $field" );
$this->assertArrayHasKey( 'type', $data, "Field $field" );
$this->assertArrayHasKey( 'label', $data, "Field $field" );
- $this->assertInstanceOf( 'Message', $data['label'], "Field $field, label" );
+ $this->assertInstanceOf( \Message::class, $data['label'], "Field $field, label" );
if ( $data['type'] !== 'null' ) {
$this->assertArrayHasKey( 'help', $data, "Field $field" );
- $this->assertInstanceOf( 'Message', $data['help'], "Field $field, help" );
+ $this->assertInstanceOf( \Message::class, $data['help'], "Field $field, help" );
}
if ( isset( $data['optional'] ) ) {
$this->assertArrayHasKey( 'options', $data, "Field $field" );
$this->assertType( 'array', $data['options'], "Field $field, options" );
foreach ( $data['options'] as $val => $msg ) {
- $this->assertInstanceOf( 'Message', $msg, "Field $field, option $val" );
+ $this->assertInstanceOf( \Message::class, $msg, "Field $field, option $val" );
}
break;
case 'checkbox':
);
$status = $provider->testUserForCreation( $blockedUser, AuthManager::AUTOCREATE_SOURCE_SESSION );
- $this->assertInstanceOf( 'StatusValue', $status );
+ $this->assertInstanceOf( \StatusValue::class, $status );
$this->assertFalse( $status->isOK() );
$this->assertTrue( $status->hasMessage( 'cantcreateaccount-text' ) );
$status = $provider->testUserForCreation( $blockedUser, false );
- $this->assertInstanceOf( 'StatusValue', $status );
+ $this->assertInstanceOf( \StatusValue::class, $status );
$this->assertFalse( $status->isOK() );
$this->assertTrue( $status->hasMessage( 'cantcreateaccount-text' ) );
}
$this->assertEquals( AuthenticationResponse::FAIL, $ret->status );
$status = $provider->testUserForCreation( $newuser, AuthManager::AUTOCREATE_SOURCE_SESSION );
- $this->assertInstanceOf( 'StatusValue', $status );
+ $this->assertInstanceOf( \StatusValue::class, $status );
$this->assertFalse( $status->isOK() );
$this->assertTrue( $status->hasMessage( 'cantcreateaccount-range-text' ) );
$status = $provider->testUserForCreation( $newuser, false );
- $this->assertInstanceOf( 'StatusValue', $status );
+ $this->assertInstanceOf( \StatusValue::class, $status );
$this->assertFalse( $status->isOK() );
$this->assertTrue( $status->hasMessage( 'cantcreateaccount-range-text' ) );
}
public function testBeginSecondaryAccountCreation() {
$authManager = new AuthManager( new \FauxRequest(), new \HashConfig() );
- $creator = $this->getMockBuilder( 'User' )->getMock();
- $userWithoutEmail = $this->getMockBuilder( 'User' )->getMock();
+ $creator = $this->getMockBuilder( \User::class )->getMock();
+ $userWithoutEmail = $this->getMockBuilder( \User::class )->getMock();
$userWithoutEmail->expects( $this->any() )->method( 'getEmail' )->willReturn( '' );
$userWithoutEmail->expects( $this->any() )->method( 'getInstanceForUpdate' )->willReturnSelf();
$userWithoutEmail->expects( $this->never() )->method( 'sendConfirmationMail' );
- $userWithEmailError = $this->getMockBuilder( 'User' )->getMock();
+ $userWithEmailError = $this->getMockBuilder( \User::class )->getMock();
$userWithEmailError->expects( $this->any() )->method( 'getEmail' )->willReturn( 'foo@bar.baz' );
$userWithEmailError->expects( $this->any() )->method( 'getInstanceForUpdate' )->willReturnSelf();
$userWithEmailError->expects( $this->any() )->method( 'sendConfirmationMail' )
->willReturn( \Status::newFatal( 'fail' ) );
- $userExpectsConfirmation = $this->getMockBuilder( 'User' )->getMock();
+ $userExpectsConfirmation = $this->getMockBuilder( \User::class )->getMock();
$userExpectsConfirmation->expects( $this->any() )->method( 'getEmail' )
->willReturn( 'foo@bar.baz' );
$userExpectsConfirmation->expects( $this->any() )->method( 'getInstanceForUpdate' )
->willReturnSelf();
$userExpectsConfirmation->expects( $this->once() )->method( 'sendConfirmationMail' )
->willReturn( \Status::newGood() );
- $userNotExpectsConfirmation = $this->getMockBuilder( 'User' )->getMock();
+ $userNotExpectsConfirmation = $this->getMockBuilder( \User::class )->getMock();
$userNotExpectsConfirmation->expects( $this->any() )->method( 'getEmail' )
->willReturn( 'foo@bar.baz' );
$userNotExpectsConfirmation->expects( $this->any() )->method( 'getInstanceForUpdate' )
* @return LegacyHookPreAuthenticationProvider
*/
protected function getProvider() {
- $request = $this->getMockBuilder( 'FauxRequest' )
+ $request = $this->getMockBuilder( \FauxRequest::class )
->setMethods( [ 'getIP' ] )->getMock();
$request->expects( $this->any() )->method( 'getIP' )->will( $this->returnValue( '127.0.0.42' ) );
if ( $msgForLoginUserMigrated !== null ) {
$h->will( $this->returnCallback(
function ( $user, &$msg ) use ( $username, $msgForLoginUserMigrated ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( $username, $user->getName() );
$msg = $msgForLoginUserMigrated;
return false;
} else {
$h->will( $this->returnCallback(
function ( $user, &$msg ) use ( $username ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( $username, $user->getName() );
return true;
}
function ( $user, $pass, &$abort, &$msg )
use ( $username, $password, $abortForAbortLogin, $msgForAbortLogin )
{
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( $username, $user->getName() );
if ( $password !== null ) {
$this->assertSame( $password, $pass );
} else {
$h2->will( $this->returnCallback(
function ( $user, $pass, &$abort, &$msg ) use ( $username, $password ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( $username, $user->getName() );
if ( $password !== null ) {
$this->assertSame( $password, $pass );
if ( $failMsg === null ) {
$this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
} else {
- $this->assertInstanceOf( 'StatusValue', $status, 'should fail (type)' );
+ $this->assertInstanceOf( \StatusValue::class, $status, 'should fail (type)' );
$this->assertFalse( $status->isOk(), 'should fail (ok)' );
$errors = $status->getErrors();
$this->assertEquals( $failMsg, $errors[0]['message'], 'should fail (message)' );
->will( $this->returnCallback( function ( $user, &$error, &$abortStatus )
use ( $msg, $status )
{
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( 'User', $user->getName() );
$error = $msg;
$abortStatus = $status;
$this->hook( 'AbortNewAccount', $this->never() );
$this->hook( 'AbortAutoAccount', $this->once() )
->will( $this->returnCallback( function ( $user, &$abortError ) use ( $testUser, $error ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( \User::class, $user );
$this->assertSame( $testUser->getName(), $user->getName() );
$abortError = $error;
return $error === null;
if ( $failMsg === null ) {
$this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
} else {
- $this->assertInstanceOf( 'StatusValue', $status, 'should fail (type)' );
+ $this->assertInstanceOf( \StatusValue::class, $status, 'should fail (type)' );
$this->assertFalse( $status->isOk(), 'should fail (ok)' );
$errors = $status->getErrors();
$this->assertEquals( $failMsg, $errors[0]['message'], 'should fail (message)' );
$ret = $req->describeCredentials();
$this->assertInternalType( 'array', $ret );
$this->assertArrayHasKey( 'provider', $ret );
- $this->assertInstanceOf( 'Message', $ret['provider'] );
+ $this->assertInstanceOf( \Message::class, $ret['provider'] );
$this->assertSame( 'authmanager-provider-password', $ret['provider']->getKey() );
$this->assertArrayHasKey( 'account', $ret );
- $this->assertInstanceOf( 'Message', $ret['account'] );
+ $this->assertInstanceOf( \Message::class, $ret['account'] );
$this->assertSame( [ 'UTSysop' ], $ret['account']->getParams() );
}
}
$ret = $req->describeCredentials();
$this->assertInternalType( 'array', $ret );
$this->assertArrayHasKey( 'provider', $ret );
- $this->assertInstanceOf( 'Message', $ret['provider'] );
+ $this->assertInstanceOf( \Message::class, $ret['provider'] );
$this->assertSame( 'authmanager-provider-password-domain', $ret['provider']->getKey() );
$this->assertArrayHasKey( 'account', $ret );
- $this->assertInstanceOf( 'Message', $ret['account'] );
+ $this->assertInstanceOf( \Message::class, $ret['account'] );
$this->assertSame( 'authmanager-account-password-domain', $ret['account']->getKey() );
$this->assertSame( [ 'UTSysop', 'd2' ], $ret['account']->getParams() );
}
$ret = $req->describeCredentials();
$this->assertInternalType( 'array', $ret );
$this->assertArrayHasKey( 'provider', $ret );
- $this->assertInstanceOf( 'Message', $ret['provider'] );
+ $this->assertInstanceOf( \Message::class, $ret['provider'] );
$this->assertSame( 'authmanager-provider-temporarypassword', $ret['provider']->getKey() );
$this->assertArrayHasKey( 'account', $ret );
- $this->assertInstanceOf( 'Message', $ret['account'] );
+ $this->assertInstanceOf( \Message::class, $ret['account'] );
$this->assertSame( [ 'UTSysop' ], $ret['account']->getParams() );
}
}
$user = \User::newFromName( 'RandomUser' );
$creator = \User::newFromName( $creatorname );
if ( $hook ) {
- $mock = $this->getMockBuilder( 'stdClass' )
+ $mock = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'onExemptFromAccountCreationThrottle' ] )
->getMock();
$mock->expects( $this->any() )->method( 'onExemptFromAccountCreationThrottle' )
*/
protected function getMockLocalisationCache() {
global $IP;
- $lc = $this->getMockBuilder( 'LocalisationCache' )
+ $lc = $this->getMockBuilder( \LocalisationCache::class )
->setConstructorArgs( [ [ 'store' => 'detect' ] ] )
->setMethods( [ 'getMessagesDirs' ] )
->getMock();
public function setUp() {
parent::setUp();
self::$notifyCallCounter = 0;
- self::$mockRecentChange = self::getMock( 'RecentChange' );
+ self::$mockRecentChange = self::getMock( RecentChange::class );
$this->setContentLang( 'qqx' );
}
}
protected function getSpecialPage() {
- return $this->getMockBuilder( 'ChangesListSpecialPage' )
+ return $this->getMockBuilder( ChangesListSpecialPage::class )
->setConstructorArgs( [
'ChangesListSpecialPage',
'',
* @dataProvider provideModifyQuery
*/
protected function modifyQueryHelper( $groupDefinition, $input ) {
- $ctx = $this->createMock( 'IContextSource' );
- $dbr = $this->createMock( 'IDatabase' );
+ $ctx = $this->createMock( IContextSource::class );
+ $dbr = $this->createMock( Wikimedia\Rdbms\IDatabase::class );
$tables = $fields = $conds = $query_options = $join_conds = [];
$group = new ChangesListStringOptionsFilterGroup( $groupDefinition );
);
$cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false );
- $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
+ $this->assertInstanceOf( RCCacheEntry::class, $cacheEntry );
$this->assertEquals( false, $cacheEntry->watched, 'watched' );
$this->assertEquals( '21:21', $cacheEntry->timestamp, 'timestamp' );
);
$cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false );
- $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
+ $this->assertInstanceOf( RCCacheEntry::class, $cacheEntry );
$this->assertEquals( false, $cacheEntry->watched, 'watched' );
$this->assertEquals( '21:21', $cacheEntry->timestamp, 'timestamp' );
);
$cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false );
- $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry );
+ $this->assertInstanceOf( RCCacheEntry::class, $cacheEntry );
$this->assertEquals( false, $cacheEntry->watched, 'watched' );
$this->assertEquals( '21:21', $cacheEntry->timestamp, 'timestamp' );
public function testGivenNonString_normalizeThrowsInvalidArgumentException( $nonString ) {
$normalizer = new ComposerVersionNormalizer();
- $this->setExpectedException( 'InvalidArgumentException' );
+ $this->setExpectedException( InvalidArgumentException::class );
$normalizer->normalizeSuffix( $nonString );
}
*/
public function testRegisterInvalid() {
$factory = new ConfigFactory();
- $this->setExpectedException( 'InvalidArgumentException' );
+ $this->setExpectedException( InvalidArgumentException::class );
$factory->register( 'invalid', 'Invalid callback' );
}
$this->assertNotSame( $bar, $newBar, 'don\'t salvage if callbacks differ' );
// the new factory doesn't have quux defined, so the quux instance should not be salvaged
- $this->setExpectedException( 'ConfigException' );
+ $this->setExpectedException( ConfigException::class );
$newFactory->makeConfig( 'quux' );
}
$factory->register( 'unittest', 'GlobalVarConfig::newInstance' );
$conf = $factory->makeConfig( 'unittest' );
- $this->assertInstanceOf( 'Config', $conf );
+ $this->assertInstanceOf( Config::class, $conf );
$this->assertSame( $conf, $factory->makeConfig( 'unittest' ) );
}
$factory = new ConfigFactory();
$factory->register( '*', 'GlobalVarConfig::newInstance' );
$conf = $factory->makeConfig( 'unittest' );
- $this->assertInstanceOf( 'Config', $conf );
+ $this->assertInstanceOf( Config::class, $conf );
}
/**
*/
public function testMakeConfigWithNoBuilders() {
$factory = new ConfigFactory();
- $this->setExpectedException( 'ConfigException' );
+ $this->setExpectedException( ConfigException::class );
$factory->makeConfig( 'nobuilderregistered' );
}
$factory->register( 'unittest', function () {
return true; // Not a Config object
} );
- $this->setExpectedException( 'UnexpectedValueException' );
+ $this->setExpectedException( UnexpectedValueException::class );
$factory->makeConfig( 'unittest' );
}
// NOTE: the global config factory returned here has been overwritten
// for operation in test mode. It may not reflect LocalSettings.
$factory = MediaWikiServices::getInstance()->getConfigFactory();
- $this->assertInstanceOf( 'Config', $factory->makeConfig( 'main' ) );
+ $this->assertInstanceOf( Config::class, $factory->makeConfig( 'main' ) );
}
}
*/
public function testNewInstance() {
$config = GlobalVarConfig::newInstance();
- $this->assertInstanceOf( 'GlobalVarConfig', $config );
+ $this->assertInstanceOf( GlobalVarConfig::class, $config );
$this->maybeStashGlobal( 'wgBaz' );
$GLOBALS['wgBaz'] = 'somevalue';
// Check prefix is set to 'wg'
$this->maybeStashGlobal( $var );
$GLOBALS[$var] = $rand;
$config = new GlobalVarConfig( $prefix );
- $this->assertInstanceOf( 'GlobalVarConfig', $config );
+ $this->assertInstanceOf( GlobalVarConfig::class, $config );
$this->assertEquals( $rand, $config->get( 'GlobalVarConfigTest' ) );
}
public function testGet( $name, $prefix, $expected ) {
$config = new GlobalVarConfig( $prefix );
if ( $expected === false ) {
- $this->setExpectedException( 'ConfigException', 'GlobalVarConfig::get: undefined option:' );
+ $this->setExpectedException( ConfigException::class, 'GlobalVarConfig::get: undefined option:' );
}
$this->assertEquals( $config->get( $name ), $expected );
}
*/
public function testNewInstance() {
$conf = HashConfig::newInstance();
- $this->assertInstanceOf( 'HashConfig', $conf );
+ $this->assertInstanceOf( HashConfig::class, $conf );
}
/**
*/
public function testConstructor() {
$conf = new HashConfig();
- $this->assertInstanceOf( 'HashConfig', $conf );
+ $this->assertInstanceOf( HashConfig::class, $conf );
// Test passing arguments to the constructor
$conf2 = new HashConfig( [
'one' => '1',
] );
$this->assertEquals( '1', $conf->get( 'one' ) );
- $this->setExpectedException( 'ConfigException', 'HashConfig::get: undefined option' );
+ $this->setExpectedException( ConfigException::class, 'HashConfig::get: undefined option' );
$conf->get( 'two' );
}
$this->assertEquals( 'bar', $multi->get( 'foo' ) );
$this->assertEquals( 'foo', $multi->get( 'bar' ) );
- $this->setExpectedException( 'ConfigException', 'MultiConfig::get: undefined option:' );
+ $this->setExpectedException( ConfigException::class, 'MultiConfig::get: undefined option:' );
$multi->get( 'notset' );
}
12312 => 'testing',
],
'wgContentHandlers' => [
- CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler',
- CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
- CONTENT_MODEL_JSON => 'JsonContentHandler',
- CONTENT_MODEL_CSS => 'CssContentHandler',
- CONTENT_MODEL_TEXT => 'TextContentHandler',
- 'testing' => 'DummyContentHandlerForTesting',
+ CONTENT_MODEL_WIKITEXT => WikitextContentHandler::class,
+ CONTENT_MODEL_JAVASCRIPT => JavaScriptContentHandler::class,
+ CONTENT_MODEL_JSON => JsonContentHandler::class,
+ CONTENT_MODEL_CSS => CssContentHandler::class,
+ CONTENT_MODEL_TEXT => TextContentHandler::class,
+ 'testing' => DummyContentHandlerForTesting::class,
'testing-callbacks' => function ( $modelId ) {
return new DummyContentHandlerForTesting( $modelId );
}
$this->assertNull( $text );
}
- /*
- public static function makeContent( $text, Title $title, $modelId = null, $format = null ) {}
- */
-
public static function dataMakeContent() {
return [
[ 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ],
$this->assertSame( $tag, 'mw-contentmodelchange' );
}
- /*
- public function testSupportsSections() {
- $this->markTestIncomplete( "not yet implemented" );
- }
- */
-
/**
* @covers ContentHandler::supportsCategories
*/
public function provideGetModelForID() {
return [
- [ CONTENT_MODEL_WIKITEXT, 'WikitextContentHandler' ],
- [ CONTENT_MODEL_JAVASCRIPT, 'JavaScriptContentHandler' ],
- [ CONTENT_MODEL_JSON, 'JsonContentHandler' ],
- [ CONTENT_MODEL_CSS, 'CssContentHandler' ],
- [ CONTENT_MODEL_TEXT, 'TextContentHandler' ],
- [ 'testing', 'DummyContentHandlerForTesting' ],
- [ 'testing-callbacks', 'DummyContentHandlerForTesting' ],
+ [ CONTENT_MODEL_WIKITEXT, WikitextContentHandler::class ],
+ [ CONTENT_MODEL_JAVASCRIPT, JavaScriptContentHandler::class ],
+ [ CONTENT_MODEL_JSON, JsonContentHandler::class ],
+ [ CONTENT_MODEL_CSS, CssContentHandler::class ],
+ [ CONTENT_MODEL_TEXT, TextContentHandler::class ],
+ [ 'testing', DummyContentHandlerForTesting::class ],
+ [ 'testing-callbacks', DummyContentHandlerForTesting::class ],
];
}
}
private function newSearchEngine() {
- $searchEngine = $this->getMockBuilder( 'SearchEngine' )
+ $searchEngine = $this->getMockBuilder( SearchEngine::class )
->getMock();
$searchEngine->expects( $this->any() )
* @covers ContentHandler::getDataForSearchIndex
*/
public function testDataIndexFields() {
- $mockEngine = $this->createMock( 'SearchEngine' );
+ $mockEngine = $this->createMock( SearchEngine::class );
$title = Title::newFromText( 'Not_Main_Page', NS_MAIN );
$page = new WikiPage( $title );
] );
$ch = new CssContentHandler();
$content = $ch->makeRedirectContent( Title::newFromText( $title ) );
- $this->assertInstanceOf( 'CssContent', $content );
+ $this->assertInstanceOf( CssContent::class, $content );
$this->assertEquals( $expected, $content->serialize( CONTENT_FORMAT_CSS ) );
}
}
public function testIndexMapping() {
- $mockEngine = $this->createMock( 'SearchEngine' );
+ $mockEngine = $this->createMock( SearchEngine::class );
$mockEngine->expects( $this->atLeastOnce() )
->method( 'makeSearchFieldMapping' )
->willReturnCallback( function ( $name, $type ) {
$mockField =
- $this->getMockBuilder( 'SearchIndexFieldDefinition' )
+ $this->getMockBuilder( SearchIndexFieldDefinition::class )
->setMethods( [ 'getMapping' ] )
->setConstructorArgs( [ $name, $type ] )
->getMock();
'file_text' => 1,
];
foreach ( $map as $name => $field ) {
- $this->assertInstanceOf( 'SearchIndexField', $field );
+ $this->assertInstanceOf( SearchIndexField::class, $field );
$this->assertEquals( $name, $field->getName() );
unset( $expect[$name] );
}
] );
$ch = new JavaScriptContentHandler();
$content = $ch->makeRedirectContent( Title::newFromText( $title ) );
- $this->assertInstanceOf( 'JavaScriptContent', $content );
+ $this->assertInstanceOf( JavaScriptContent::class, $content );
$this->assertEquals( $expected, $content->serialize( CONTENT_FORMAT_JAVASCRIPT ) );
}
}
private function getMockTitle() {
- return $this->getMockBuilder( 'Title' )
+ return $this->getMockBuilder( Title::class )
->disableOriginalConstructor()
->getMock();
}
private function getMockUser() {
- return $this->getMockBuilder( 'User' )
+ return $this->getMockBuilder( User::class )
->disableOriginalConstructor()
->getMock();
}
private function getMockParserOptions() {
- return $this->getMockBuilder( 'ParserOptions' )
+ return $this->getMockBuilder( ParserOptions::class )
->disableOriginalConstructor()
->getMock();
}
public function testFillParserOutput( $data, $expected ) {
$obj = new JsonContent( FormatJson::encode( $data ) );
$parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
- $this->assertInstanceOf( 'ParserOutput', $parserOutput );
+ $this->assertInstanceOf( ParserOutput::class, $parserOutput );
$this->assertEquals( $expected, $parserOutput->getText() );
}
}
public function testFieldsForIndex() {
$handler = new TextContentHandler();
- $mockEngine = $this->createMock( 'SearchEngine' );
+ $mockEngine = $this->createMock( SearchEngine::class );
$mockEngine->expects( $this->atLeastOnce() )
->method( 'makeSearchFieldMapping' )
->willReturnCallback( function ( $name, $type ) {
$mockField =
- $this->getMockBuilder( 'SearchIndexFieldDefinition' )
+ $this->getMockBuilder( SearchIndexFieldDefinition::class )
->setConstructorArgs( [ $name, $type ] )
->getMock();
$mockField->expects( $this->atLeastOnce() )->method( 'getMapping' )->willReturn( [
$fields = $handler->getFieldsForSearchIndex( $mockEngine );
$mappedFields = [];
foreach ( $fields as $name => $field ) {
- $this->assertInstanceOf( 'SearchIndexField', $field );
+ $this->assertInstanceOf( SearchIndexField::class, $field );
/**
* @var $field SearchIndexField
*/
if ( $expectedNative === false ) {
$this->assertFalse( $converted, "conversion to $model was expected to fail!" );
} else {
- $this->assertInstanceOf( 'Content', $converted );
+ $this->assertInstanceOf( Content::class, $converted );
$this->assertEquals( $expectedNative, $converted->getNativeData() );
}
}
$this->assertSame( $expected, $tag );
}
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {}
- */
-
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetUndoContent( Revision $current, Revision $undo,
- Revision $undoafter = null
- ) {
- }
- */
-
/**
* @covers WikitextContentHandler::getDataForSearchIndex
*/
public function testDataIndexFieldsFile() {
- $mockEngine = $this->createMock( 'SearchEngine' );
+ $mockEngine = $this->createMock( SearchEngine::class );
$title = Title::newFromText( 'Somefile.jpg', NS_FILE );
$page = new WikiPage( $title );
[ "WikitextContentTest_testGetSecondaryDataUpdates_1",
CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
[
- 'LinksUpdate' => [
+ LinksUpdate::class => [
'mRecursive' => true,
'mLinks' => []
]
[ "WikitextContentTest_testGetSecondaryDataUpdates_2",
CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
[
- 'LinksUpdate' => [
+ LinksUpdate::class => [
'mRecursive' => true,
'mLinks' => [
[ 'World_test_21344' => 0 ]
return [
[ "WikitextContentTest_testGetSecondaryDataUpdates_1",
CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
- [ 'LinksDeletionUpdate' => [] ]
+ [ LinksDeletionUpdate::class => [] ]
],
[ "WikitextContentTest_testGetSecondaryDataUpdates_2",
CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
- [ 'LinksDeletionUpdate' => [] ]
+ [ LinksDeletionUpdate::class => [] ]
],
// @todo more...?
];
use Wikimedia\Rdbms\Blob;
use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\DatabaseSqlite;
+use Wikimedia\Rdbms\ResultWrapper;
class DatabaseSqliteMock extends DatabaseSqlite {
private $lastQuery;
$db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
- $this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Database creation" );
+ $this->assertInstanceOf( ResultWrapper::class, $databaseCreation, "Database creation" );
$insertion = $db->insert( 'a', [ 'a_1' => 10 ], __METHOD__ );
$this->assertTrue( $insertion, "Insertion worked" );
$db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
- $this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Failed to create table a" );
+ $this->assertInstanceOf( ResultWrapper::class, $databaseCreation, "Failed to create table a" );
$res = $db->select( 'a', '*' );
$this->assertEquals( 0, $db->numFields( $res ), "expects to get 0 fields for an empty table" );
$insertion = $db->insert( 'a', [ 'a_1' => 10 ], __METHOD__ );
use Wikimedia\Rdbms\LBFactorySimple;
use Wikimedia\Rdbms\LBFactoryMulti;
+use Wikimedia\Rdbms\LoadBalancer;
use Wikimedia\Rdbms\ChronologyProtector;
+use Wikimedia\Rdbms\DatabaseMysqli;
use Wikimedia\Rdbms\MySQLMasterPos;
use Wikimedia\Rdbms\DatabaseDomain;
* @dataProvider getLBFactoryClassProvider
*/
public function testGetLBFactoryClass( $expected, $deprecated ) {
- $mockDB = $this->getMockBuilder( 'DatabaseMysqli' )
+ $mockDB = $this->getMockBuilder( DatabaseMysqli::class )
->disableOriginalConstructor()
->getMock();
$factory = new LBFactorySimple( [
'servers' => $servers,
- 'loadMonitorClass' => 'LoadMonitorNull'
+ 'loadMonitorClass' => LoadMonitorNull::class
] );
$lb = $factory->getMainLB();
'test-db1' => $wgDBserver,
'test-db2' => $wgDBserver
],
- 'loadMonitorClass' => 'LoadMonitorNull'
+ 'loadMonitorClass' => LoadMonitorNull::class
] );
$lb = $factory->getMainLB();
$now = microtime( true );
// Master DB 1
- $mockDB1 = $this->getMockBuilder( 'DatabaseMysqli' )
+ $mockDB1 = $this->getMockBuilder( DatabaseMysqli::class )
->disableOriginalConstructor()
->getMock();
$mockDB1->method( 'writesOrCallbacksPending' )->willReturn( true );
$mockDB1->method( 'lastDoneWrites' )->willReturn( $now );
$mockDB1->method( 'getMasterPos' )->willReturn( $m1Pos );
// Load balancer for master DB 1
- $lb1 = $this->getMockBuilder( 'LoadBalancer' )
+ $lb1 = $this->getMockBuilder( LoadBalancer::class )
->disableOriginalConstructor()
->getMock();
$lb1->method( 'getConnection' )->willReturn( $mockDB1 );
$lb1->method( 'getMasterPos' )->willReturn( $m1Pos );
$lb1->method( 'getServerName' )->with( 0 )->willReturn( 'master1' );
// Master DB 2
- $mockDB2 = $this->getMockBuilder( 'DatabaseMysqli' )
+ $mockDB2 = $this->getMockBuilder( DatabaseMysqli::class )
->disableOriginalConstructor()
->getMock();
$mockDB2->method( 'writesOrCallbacksPending' )->willReturn( true );
$mockDB2->method( 'lastDoneWrites' )->willReturn( $now );
$mockDB2->method( 'getMasterPos' )->willReturn( $m2Pos );
// Load balancer for master DB 2
- $lb2 = $this->getMockBuilder( 'LoadBalancer' )
+ $lb2 = $this->getMockBuilder( LoadBalancer::class )
->disableOriginalConstructor()
->getMock();
$lb2->method( 'getConnection' )->willReturn( $mockDB2 );
// (b) Second HTTP request
// Load balancer for master DB 1
- $lb1 = $this->getMockBuilder( 'LoadBalancer' )
+ $lb1 = $this->getMockBuilder( LoadBalancer::class )
->disableOriginalConstructor()
->getMock();
$lb1->method( 'getServerCount' )->willReturn( 2 );
$lb1->expects( $this->once() )
->method( 'waitFor' )->with( $this->equalTo( $m1Pos ) );
// Load balancer for master DB 2
- $lb2 = $this->getMockBuilder( 'LoadBalancer' )
+ $lb2 = $this->getMockBuilder( LoadBalancer::class )
->disableOriginalConstructor()
->getMock();
$lb2->method( 'getServerCount' )->willReturn( 2 );
'hostsByName' => [
'test-db1' => $wgDBserver,
],
- 'loadMonitorClass' => 'LoadMonitorNull',
+ 'loadMonitorClass' => LoadMonitorNull::class,
'localDomain' => new DatabaseDomain( $wgDBname, null, $wgDBprefix )
] );
}
} catch ( \Wikimedia\Rdbms\DBConnectionError $e ) {
// expected
}
- $this->assertInstanceOf( '\Wikimedia\Rdbms\DBConnectionError', $e );
+ $this->assertInstanceOf( \Wikimedia\Rdbms\DBConnectionError::class, $e );
$this->assertFalse( $db->isOpen() );
} else {
\MediaWiki\suppressWarnings();
$lb = new LoadBalancer( [
'servers' => $servers,
'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ),
- 'loadMonitorClass' => 'LoadMonitorNull'
+ 'loadMonitorClass' => LoadMonitorNull::class
] );
$dbw = $lb->getConnection( DB_MASTER );
MWDebug::appendDebugInfoToApiResult( $context, $result );
- $this->assertInstanceOf( 'ApiResult', $result );
+ $this->assertInstanceOf( ApiResult::class, $result );
$data = $result->getResultData();
$expectedKeys = [ 'mwVersion', 'phpEngine', 'phpVersion', 'gitRevision', 'gitBranch',
* @return FauxRequest
*/
private function newApiRequest( array $params, $requestUrl ) {
- $request = $this->getMockBuilder( 'FauxRequest' )
+ $request = $this->getMockBuilder( FauxRequest::class )
->setMethods( [ 'getRequestURL' ] )
->setConstructorArgs( [
$params
[ $this->anything(), $this->anything(), [ 'lines' ] ]
] );
- $formatter = $this->createMock( 'Monolog\Formatter\FormatterInterface' );
+ $formatter = $this->createMock( \Monolog\Formatter\FormatterInterface::class );
$formatter->expects( $this->any() )
->method( 'format' )
->will( $this->onConsecutiveCalls( 'words', null, 'lines' ) );
->method( 'send' )
->will( $this->returnValue( true ) );
- $formatter = $this->createMock( 'Monolog\Formatter\FormatterInterface' );
+ $formatter = $this->createMock( \Monolog\Formatter\FormatterInterface::class );
$formatter->expects( $this->any() )
->method( 'format' )
->will( $this->onConsecutiveCalls( 'words', null, 'lines' ) );
}
private function getMockDiff( $edits ) {
- $diff = $this->getMockBuilder( 'Diff' )
+ $diff = $this->getMockBuilder( Diff::class )
->disableOriginalConstructor()
->getMock();
$diff->expects( $this->any() )
}
private function getMockDiffOp( $type = null, $orig = [], $closing = [] ) {
- $diffOp = $this->getMockBuilder( 'DiffOp' )
+ $diffOp = $this->getMockBuilder( DiffOp::class )
->disableOriginalConstructor()
->getMock();
$diffOp->expects( $this->any() )
}
private function getMockWgOut() {
- $mock = $this->getMockBuilder( 'OutputPage' )
+ $mock = $this->getMockBuilder( OutputPage::class )
->disableOriginalConstructor()
->getMock();
$mock->expects( $this->once() )
class ErrorPageErrorTest extends MediaWikiTestCase {
private function getMockMessage() {
- $mockMessage = $this->getMockBuilder( 'Message' )
+ $mockMessage = $this->getMockBuilder( Message::class )
->disableOriginalConstructor()
->getMock();
$mockMessage->expects( $this->once() )
$title = 'Foo';
$params = [ 'Baz' ];
- $mock = $this->getMockBuilder( 'OutputPage' )
+ $mock = $this->getMockBuilder( OutputPage::class )
->disableOriginalConstructor()
->getMock();
$mock->expects( $this->once() )
}
private function getMockLanguage() {
- return $this->getMockBuilder( 'Language' )
+ return $this->getMockBuilder( Language::class )
->disableOriginalConstructor()
->getMock();
}
public static function provideExceptionClasses() {
return [
- [ 'Exception' ],
- [ 'MWException' ],
+ [ Exception::class ],
+ [ MWException::class ],
];
}
*/
public static function provideJsonSerializedKeys() {
$testCases = [];
- foreach ( [ 'Exception', 'MWException' ] as $exClass ) {
+ foreach ( [ Exception::class, MWException::class ] as $exClass ) {
$exTests = [
[ 'string', $exClass, 'id' ],
[ 'string', $exClass, 'file' ],
}
private function getMockWgOut() {
- $mock = $this->getMockBuilder( 'OutputPage' )
+ $mock = $this->getMockBuilder( OutputPage::class )
->disableOriginalConstructor()
->getMock();
$mock->expects( $this->once() )
'backends' => [
[
'name' => 'localmultitesting1',
- 'class' => 'FSFileBackend',
+ 'class' => FSFileBackend::class,
'containerPaths' => [
'unittest-cont1' => "{$tmpDir}/localtestingmulti1-cont1",
'unittest-cont2' => "{$tmpDir}/localtestingmulti1-cont2" ],
],
[
'name' => 'localmultitesting2',
- 'class' => 'FSFileBackend',
+ 'class' => FSFileBackend::class,
'containerPaths' => [
'unittest-cont1' => "{$tmpDir}/localtestingmulti2-cont1",
'unittest-cont2' => "{$tmpDir}/localtestingmulti2-cont2" ],
$status = Status::newGood();
$sl = $this->backend->getScopedFileLocks( $paths, LockManager::LOCK_EX, $status );
- $this->assertInstanceOf( 'ScopedLock', $sl,
+ $this->assertInstanceOf( ScopedLock::class, $sl,
"Scoped locking of files succeeded ($backendName)." );
$this->assertEquals( [], $status->getErrors(),
"Scoped locking of files succeeded ($backendName)." );
$be = TestingAccessWrapper::newFromObject( new MemoryFileBackend(
[
'name' => 'testing',
- 'class' => 'MemoryFileBackend',
+ 'class' => MemoryFileBackend::class,
'wikiId' => 'meow',
'mimeCallback' => $mimeCallback
]
'backends' => [
[ // backend 0
'name' => 'multitesting0',
- 'class' => 'MemoryFileBackend',
+ 'class' => MemoryFileBackend::class,
'isMultiMaster' => false,
'readAffinity' => true
],
[ // backend 1
'name' => 'multitesting1',
- 'class' => 'MemoryFileBackend',
+ 'class' => MemoryFileBackend::class,
'isMultiMaster' => true
]
]
'backends' => [
[ // backend 0
'name' => 'multitesting0',
- 'class' => 'MemoryFileBackend',
+ 'class' => MemoryFileBackend::class,
'isMultiMaster' => false
],
[ // backend 1
'name' => 'multitesting1',
- 'class' => 'MemoryFileBackend',
+ 'class' => MemoryFileBackend::class,
'isMultiMaster' => true
]
],
$this->backend = TestingAccessWrapper::newFromObject(
new SwiftFileBackend( [
'name' => 'local-swift-testing',
- 'class' => 'SwiftFileBackend',
+ 'class' => SwiftFileBackend::class,
'wikiId' => 'unit-testing',
'lockManager' => LockManagerGroup::singleton()->get( 'fsLockManager' ),
'swiftAuthUrl' => 'http://127.0.0.1:8080/auth', // unused
}
protected function getMocks() {
- $dbMock = $this->getMockBuilder( 'DatabaseMysqli' )
+ $dbMock = $this->getMockBuilder( Wikimedia\Rdbms\DatabaseMysqli::class )
->disableOriginalClone()
->disableOriginalConstructor()
->getMock();
- $backendMock = $this->getMockBuilder( 'FSFileBackend' )
+ $backendMock = $this->getMockBuilder( FSFileBackend::class )
->setConstructorArgs( [ [
'name' => $this->backendName,
'wikiId' => wfWikiID()
] ] )
->getMock();
- $wrapperMock = $this->getMockBuilder( 'FileBackendDBRepoWrapper' )
+ $wrapperMock = $this->getMockBuilder( FileBackendDBRepoWrapper::class )
->setMethods( [ 'getDB' ] )
->setConstructorArgs( [ [
'backend' => $backendMock,
'containerPaths' => []
] )
] );
- $this->assertInstanceOf( 'FileRepo', $f );
+ $this->assertInstanceOf( FileRepo::class, $f );
}
}
]
] );
- $dbMock = $this->getMockBuilder( 'DatabaseMysqli' )
+ $dbMock = $this->getMockBuilder( Wikimedia\Rdbms\DatabaseMysqli::class )
->disableOriginalConstructor()
->getMock();
new FakeResultWrapper( [] ) // filearchive
) );
- $repoMock = $this->getMockBuilder( 'LocalRepo' )
+ $repoMock = $this->getMockBuilder( LocalRepo::class )
->setMethods( [ 'getMasterDB' ] )
->setConstructorArgs( [ [
'name' => 'migratefilerepolayouttest',
->method( 'getMasterDB' )
->will( $this->returnValue( $dbMock ) );
- $this->migratorMock = $this->getMockBuilder( 'MigrateFileRepoLayout' )
+ $this->migratorMock = $this->getMockBuilder( MigrateFileRepoLayout::class )
->setMethods( [ 'getRepo' ] )->getMock();
$this->migratorMock
->expects( $this->any() )
function testForEachForeignRepo() {
$this->setUpForeignRepo();
- $fakeCallback = $this->createMock( 'RepoGroupTestHelper' );
+ $fakeCallback = $this->createMock( RepoGroupTestHelper::class );
$fakeCallback->expects( $this->once() )->method( 'callback' );
RepoGroup::singleton()->forEachForeignRepo(
[ $fakeCallback, 'callback' ], [ [] ] );
$this->setMwGlobals( 'wgForeignFileRepos', [] );
RepoGroup::destroySingleton();
FileBackendGroup::destroySingleton();
- $fakeCallback = $this->createMock( 'RepoGroupTestHelper' );
+ $fakeCallback = $this->createMock( RepoGroupTestHelper::class );
$fakeCallback->expects( $this->never() )->method( 'callback' );
RepoGroup::singleton()->forEachForeignRepo(
[ $fakeCallback, 'callback' ], [ [] ] );
private function setUpForeignRepo() {
global $wgUploadDirectory;
$this->setMwGlobals( 'wgForeignFileRepos', [ [
- 'class' => 'ForeignAPIRepo',
+ 'class' => ForeignAPIRepo::class,
'name' => 'wikimediacommons',
'backend' => 'wikimediacommons-backend',
'apibase' => 'https://commons.wikimedia.org/w/api.php',
$this->setMwGlobals( 'wgThumbnailBuckets', $data['buckets'] );
$this->setMwGlobals( 'wgThumbnailMinimumBucketDistance', $data['minimumBucketDistance'] );
- $fileMock = $this->getMockBuilder( 'File' )
+ $fileMock = $this->getMockBuilder( File::class )
->setConstructorArgs( [ 'fileMock', false ] )
->setMethods( [ 'getWidth' ] )
->getMockForAbstractClass();
* @covers File::getThumbnailSource
*/
public function testGetThumbnailSource( $data ) {
- $backendMock = $this->getMockBuilder( 'FSFileBackend' )
+ $backendMock = $this->getMockBuilder( FSFileBackend::class )
->setConstructorArgs( [ [ 'name' => 'backendMock', 'wikiId' => wfWikiID() ] ] )
->getMock();
- $repoMock = $this->getMockBuilder( 'FileRepo' )
+ $repoMock = $this->getMockBuilder( FileRepo::class )
->setConstructorArgs( [ [ 'name' => 'repoMock', 'backend' => $backendMock ] ] )
->setMethods( [ 'fileExists', 'getLocalReference' ] )
->getMock();
->method( 'getLocalReference' )
->will( $this->returnValue( $fsFile ) );
- $handlerMock = $this->getMockBuilder( 'BitmapHandler' )
+ $handlerMock = $this->getMockBuilder( BitmapHandler::class )
->setMethods( [ 'supportsBucketing' ] )->getMock();
$handlerMock->expects( $this->any() )
->method( 'supportsBucketing' )
->will( $this->returnValue( $data['supportsBucketing'] ) );
- $fileMock = $this->getMockBuilder( 'File' )
+ $fileMock = $this->getMockBuilder( File::class )
->setConstructorArgs( [ 'fileMock', $repoMock ] )
->setMethods( [ 'getThumbnailBucket', 'getLocalRefPath', 'getHandler' ] )
->getMockForAbstractClass();
public function testGenerateBucketsIfNeeded( $data ) {
$this->setMwGlobals( 'wgThumbnailBuckets', $data['buckets'] );
- $backendMock = $this->getMockBuilder( 'FSFileBackend' )
+ $backendMock = $this->getMockBuilder( FSFileBackend::class )
->setConstructorArgs( [ [ 'name' => 'backendMock', 'wikiId' => wfWikiID() ] ] )
->getMock();
- $repoMock = $this->getMockBuilder( 'FileRepo' )
+ $repoMock = $this->getMockBuilder( FileRepo::class )
->setConstructorArgs( [ [ 'name' => 'repoMock', 'backend' => $backendMock ] ] )
->setMethods( [ 'fileExists', 'getLocalReference' ] )
->getMock();
- $fileMock = $this->getMockBuilder( 'File' )
+ $fileMock = $this->getMockBuilder( File::class )
->setConstructorArgs( [ 'fileMock', $repoMock ] )
->setMethods( [ 'getWidth', 'getBucketThumbPath', 'makeTransformTmpFile',
'generateAndSaveThumb', 'getHandler' ] )
->getMockForAbstractClass();
- $handlerMock = $this->getMockBuilder( 'JpegHandler' )
+ $handlerMock = $this->getMockBuilder( JpegHandler::class )
->setMethods( [ 'supportsBucketing' ] )->getMock();
$handlerMock->expects( $this->any() )
->method( 'supportsBucketing' )
->method( 'getHandler' )
->will( $this->returnValue( $handlerMock ) );
- $reflectionMethod = new ReflectionMethod( 'File', 'generateBucketsIfNeeded' );
+ $reflectionMethod = new ReflectionMethod( File::class, 'generateBucketsIfNeeded' );
$reflectionMethod->setAccessible( true );
$fileMock->expects( $this->any() )
$file = wfLocalFile( "File:Some_file_that_probably_doesn't exist.png" );
$this->assertThat(
$file,
- $this->isInstanceOf( 'LocalFile' ),
+ $this->isInstanceOf( LocalFile::class ),
'wfLocalFile() returns LocalFile for valid Titles'
);
}
try {
new HTMLCheckMatrix( [] );
} catch ( MWException $e ) {
- $this->assertInstanceOf( 'HTMLFormFieldRequiredOptionsException', $e );
+ $this->assertInstanceOf( HTMLFormFieldRequiredOptionsException::class, $e );
return;
}
$this->assertFalse( $lookup->fetch( 'xyz' ), 'unknown prefix' );
$interwiki = $lookup->fetch( 'de' );
- $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertInstanceOf( Interwiki::class, $interwiki );
$this->assertSame( $interwiki, $lookup->fetch( 'de' ), 'in-process caching' );
$this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
$this->assertTrue( $lookup->isValidInterwiki( 'zz' ), 'known prefix is valid' );
$interwiki = $lookup->fetch( 'de' );
- $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertInstanceOf( Interwiki::class, $interwiki );
$this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
$this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
$interwiki = $lookup->fetch( 'zz' );
- $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertInstanceOf( Interwiki::class, $interwiki );
$this->assertSame( 'http://zzwiki.org/wiki/', $interwiki->getURL(), 'getURL' );
$this->assertSame( false, $interwiki->isLocal(), 'isLocal' );
$this->assertTrue( $lookup->isValidInterwiki( 'zz' ), 'known prefix is valid' );
$interwiki = $lookup->fetch( 'de' );
- $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertInstanceOf( Interwiki::class, $interwiki );
$this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
$this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
$interwiki = $lookup->fetch( 'zz' );
- $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertInstanceOf( Interwiki::class, $interwiki );
$this->assertSame( 'http://zzwiki.org/wiki/', $interwiki->getURL(), 'getURL' );
$this->assertSame( false, $interwiki->isLocal(), 'isLocal' );
$this->assertFalse( $interwikiLookup->fetch( 'xyz' ), 'unknown prefix' );
$interwiki = $interwikiLookup->fetch( 'de' );
- $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertInstanceOf( Interwiki::class, $interwiki );
$this->assertSame( $interwiki, $interwikiLookup->fetch( 'de' ), 'in-process caching' );
$this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
*/
private function newJobQueue() {
return JobQueue::factory( [
- 'class' => 'JobQueueMemory',
+ 'class' => JobQueueMemory::class,
'wiki' => wfWikiID(),
'type' => 'null',
] );
public function testJobFromSpecInternal() {
$queue = $this->newJobQueue();
$job = $queue->jobFromSpecInternal( $this->newJobSpecification() );
- $this->assertInstanceOf( 'Job', $job );
+ $this->assertInstanceOf( Job::class, $job );
$this->assertSame( 'null', $job->getType() );
$this->assertArrayHasKey( 'customParameter', $job->getParams() );
$this->assertSame( 'Custom title', $job->getTitle()->getText() );
}
$baseConfig = $wgJobTypeConf[$name];
} else {
- $baseConfig = [ 'class' => 'JobQueueDBSingle' ];
+ $baseConfig = [ 'class' => JobQueueDBSingle::class ];
}
$baseConfig['type'] = 'null';
$baseConfig['wiki'] = wfWikiID();
$j = $queue->pop();
// Make sure ack() of the twin did not delete the sibling data
- $this->assertType( 'NullJob', $j );
+ $this->assertType( NullJob::class, $j );
}
/**
}
public function provideTestToString() {
- $mockToStringObj = $this->getMockBuilder( 'stdClass' )
+ $mockToStringObj = $this->getMockBuilder( stdClass::class )
->setMethods( [ '__toString' ] )->getMock();
$mockToStringObj->expects( $this->any() )
->method( '__toString' )
public function getMockJob( $params ) {
$mock = $this->getMockForAbstractClass(
- 'Job',
+ Job::class,
[ 'someCommand', new Title(), $params ],
'SomeJob'
);
$this->assertJson( $json );
$st = FormatJson::parse( $json );
- $this->assertInstanceOf( 'Status', $st );
+ $this->assertInstanceOf( Status::class, $st );
$this->assertTrue( $st->isGood() );
$this->assertEquals( $expected, $st->getValue() );
$st = FormatJson::parse( $json, FormatJson::FORCE_ASSOC );
- $this->assertInstanceOf( 'Status', $st );
+ $this->assertInstanceOf( Status::class, $st );
$this->assertTrue( $st->isGood() );
$this->assertEquals( $value, $st->getValue() );
}
}
$st = FormatJson::parse( $value, FormatJson::TRY_FIXING );
- $this->assertInstanceOf( 'Status', $st );
+ $this->assertInstanceOf( Status::class, $st );
if ( $expected === false ) {
$this->assertFalse( $st->isOK(), 'Expected isOK() == false' );
} else {
*/
public function testParseErrors( $value ) {
$st = FormatJson::parse( $value );
- $this->assertInstanceOf( 'Status', $st );
+ $this->assertInstanceOf( Status::class, $st );
$this->assertFalse( $st->isOK() );
}
*/
public function testParseStripComments( $json, $expect ) {
$st = FormatJson::parse( $json, FormatJson::STRIP_COMMENTS );
- $this->assertInstanceOf( 'Status', $st );
+ $this->assertInstanceOf( Status::class, $st );
$this->assertTrue( $st->isGood() );
$this->assertEquals( $expect, $st->getValue() );
}
* @dataProvider provideToString
*/
public function testToString( $params, $expected ) {
- $class = new ReflectionClass( 'DeferredStringifier' );
+ $class = new ReflectionClass( DeferredStringifier::class );
$ds = $class->newInstanceArgs( $params );
$this->assertEquals( $expected, (string)$ds );
}
* way as the original underlying callable.
*/
public function testReturnValuePassedThrough() {
- $mock = $this->getMockBuilder( 'stdClass' )
+ $mock = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'reverse' ] )->getMock();
$mock->expects( $this->any() )
->method( 'reverse' )
* @requires function apc_store/apcu_store
*/
public function testCallableMemoized() {
- $observer = $this->getMockBuilder( 'stdClass' )
+ $observer = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'computeSomething' ] )->getMock();
$observer->expects( $this->once() )
->method( 'computeSomething' )
*/
public function testClosureExpansionDisabled() {
$obj = ObjectFactory::getObjectFromSpec( [
- 'class' => 'ObjectFactoryTestFixture',
+ 'class' => ObjectFactoryTestFixture::class,
'args' => [
function () {
return 'wrapped';
*/
public function testClosureExpansionEnabled() {
$obj = ObjectFactory::getObjectFromSpec( [
- 'class' => 'ObjectFactoryTestFixture',
+ 'class' => ObjectFactoryTestFixture::class,
'args' => [
function () {
return 'wrapped';
$this->assertSame( 'wrapped', $obj->setterArgs[0] );
$obj = ObjectFactory::getObjectFromSpec( [
- 'class' => 'ObjectFactoryTestFixture',
+ 'class' => ObjectFactoryTestFixture::class,
'args' => [ function () {
return 'unwrapped';
}, ],
*/
public function testGetObjectFromClass( $args ) {
$obj = ObjectFactory::getObjectFromSpec( [
- 'class' => 'ObjectFactoryTestFixture',
+ 'class' => ObjectFactoryTestFixture::class,
'args' => $args,
] );
$this->assertSame( $args, $obj->args );
* @covers Xhprof::enable
*/
public function testEnable() {
- $xhprof = new ReflectionClass( 'Xhprof' );
+ $xhprof = new ReflectionClass( Xhprof::class );
$enabled = $xhprof->getProperty( 'enabled' );
$enabled->setAccessible( true );
$enabled->setValue( true );
$this->assertEquals( count( $ids ), $calls, "Values cached" );
// Mock the BagOStuff to assure only one getMulti() call given process caching
- $localBag = $this->getMockBuilder( 'HashBagOStuff' )
+ $localBag = $this->getMockBuilder( HashBagOStuff::class )
->setMethods( [ 'getMulti' ] )->getMock();
$localBag->expects( $this->exactly( 1 ) )->method( 'getMulti' )->willReturn( [
WANObjectCache::VALUE_KEY_PREFIX . 'k1' => 'val-id1',
}
public function testMcRouterSupport() {
- $localBag = $this->getMockBuilder( 'EmptyBagOStuff' )
+ $localBag = $this->getMockBuilder( EmptyBagOStuff::class )
->setMethods( [ 'set', 'delete' ] )->getMock();
$localBag->expects( $this->never() )->method( 'set' );
$localBag->expects( $this->never() )->method( 'delete' );
use Wikimedia\Rdbms\DatabaseDomain;
use Wikimedia\Rdbms\MySQLMasterPos;
use Wikimedia\Rdbms\DatabaseMysqlBase;
+use Wikimedia\Rdbms\DatabaseMysqli;
use Wikimedia\Rdbms\Database;
/**
}
private function getMockForViews() {
- $db = $this->getMockBuilder( 'DatabaseMysqli' )
+ $db = $this->getMockBuilder( DatabaseMysqli::class )
->disableOriginalConstructor()
->setMethods( [ 'fetchRow', 'query' ] )
->getMock();
* @covers Wikimedia\Rdbms\DatabaseMysqlBase::getLagFromPtHeartbeat
*/
public function testPtHeartbeat( $lag ) {
- $db = $this->getMockBuilder( 'DatabaseMysqli' )
+ $db = $this->getMockBuilder( DatabaseMysqli::class )
->disableOriginalConstructor()
->setMethods( [
'getLagDetectionMethod', 'getHeartbeatData', 'getMasterServerInfo' ] )
$this->setMwGlobals( [
'wgLogTypes' => [ 'phpunit' ],
- 'wgLogActionsHandlers' => [ 'phpunit/test' => 'LogFormatter',
- 'phpunit/param' => 'LogFormatter' ],
+ 'wgLogActionsHandlers' => [ 'phpunit/test' => LogFormatter::class,
+ 'phpunit/param' => LogFormatter::class ],
'wgUser' => User::newFromName( 'Testuser' ),
] );
// Register LogHandler, see $wgNewUserLog in Setup.php
$this->mergeMwGlobalArrayValue( 'wgLogActionsHandlers', [
- 'newusers/newusers' => 'NewUsersLogFormatter',
- 'newusers/create' => 'NewUsersLogFormatter',
- 'newusers/create2' => 'NewUsersLogFormatter',
- 'newusers/byemail' => 'NewUsersLogFormatter',
- 'newusers/autocreate' => 'NewUsersLogFormatter',
+ 'newusers/newusers' => NewUsersLogFormatter::class,
+ 'newusers/create' => NewUsersLogFormatter::class,
+ 'newusers/create2' => NewUsersLogFormatter::class,
+ 'newusers/byemail' => NewUsersLogFormatter::class,
+ 'newusers/autocreate' => NewUsersLogFormatter::class,
] );
}
$this->setMwGlobals( 'wgHooks', [] );
// Register LogHandler, see $wgPageLanguageUseDB in Setup.php
$this->mergeMwGlobalArrayValue( 'wgLogActionsHandlers', [
- 'pagelang/pagelang' => 'PageLangLogFormatter',
+ 'pagelang/pagelang' => PageLangLogFormatter::class,
] );
}
*/
public function testConstructor() {
$ma = new MailAddress( 'foo@bar.baz', 'UserName', 'Real name' );
- $this->assertInstanceOf( 'MailAddress', $ma );
+ $this->assertInstanceOf( MailAddress::class, $ma );
}
/**
if ( wfIsWindows() ) {
$this->markTestSkipped( 'This test only works on non-Windows platforms' );
}
- $user = $this->createMock( 'User' );
+ $user = $this->createMock( User::class );
$user->expects( $this->any() )->method( 'getName' )->will(
$this->returnValue( 'UserName' )
);
);
$ma = MailAddress::newFromUser( $user );
- $this->assertInstanceOf( 'MailAddress', $ma );
+ $this->assertInstanceOf( MailAddress::class, $ma );
$this->setMwGlobals( 'wgEnotifUseRealName', true );
$this->assertEquals( 'Real name <foo@bar.baz>', $ma->toString() );
$this->setMwGlobals( 'wgEnotifUseRealName', false );
$file = new FakeDimensionFile( [ 4000, 4000 ] );
$handler = new BitmapHandler;
$params = [ 'width' => '3700' ]; // Still bigger than max size.
- $this->assertEquals( 'TransformTooBigImageAreaError',
+ $this->assertEquals( TransformTooBigImageAreaError::class,
get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
}
$file->mustRender = true;
$handler = new BitmapHandler;
$params = [ 'width' => '5000' ]; // Still bigger than max size.
- $this->assertEquals( 'TransformTooBigImageAreaError',
+ $this->assertEquals( TransformTooBigImageAreaError::class,
get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
}
*/
public function testResolveMultivalueValue( $input, $output ) {
$formatMetadata = new FormatMetadata();
- $class = new ReflectionClass( 'FormatMetadata' );
+ $class = new ReflectionClass( FormatMetadata::class );
$method = $class->getMethod( 'resolveMultivalueValue' );
$method->setAccessible( true );
$actualInput = $method->invoke( $formatMetadata, $input );
$this->assertEquals( $expected, $meta['Copyright']['x-default'] );
}
- /**
- * Test extraction of pHYs tags, which can tell what the
- * actual resolution of the image is (aka in dots per meter).
- */
- /*
- public function testPngPhysTag() {
- $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
- 'Png-native-test.png' );
-
- $this->assertArrayHasKey( 'text', $meta );
- $meta = $meta['text'];
-
- $this->assertEquals( '2835/100', $meta['XResolution'] );
- $this->assertEquals( '2835/100', $meta['YResolution'] );
- $this->assertEquals( 3, $meta['ResolutionUnit'] ); // 3 = cm
- }
- */
-
/**
* Given a normal static PNG, check the animation metadata returned.
*/
* @covers MemcachedBagOStuff::validateKeyEncoding
*/
public function testValidateKeyEncodingThrowsException( $key ) {
- $this->setExpectedException( 'Exception' );
+ $this->setExpectedException( Exception::class );
$this->cache->validateKeyEncoding( $key );
}
private function setCacheConfig( $arr = [] ) {
$defaults = [
- CACHE_NONE => [ 'class' => 'EmptyBagOStuff' ],
- CACHE_DB => [ 'class' => 'SqlBagOStuff' ],
+ CACHE_NONE => [ 'class' => EmptyBagOStuff::class ],
+ CACHE_DB => [ 'class' => SqlBagOStuff::class ],
CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
// Mock ACCEL with 'hash' as being installed.
// This makes tests deterministic regardless of APC.
- CACHE_ACCEL => [ 'class' => 'HashBagOStuff' ],
- 'hash' => [ 'class' => 'HashBagOStuff' ],
+ CACHE_ACCEL => [ 'class' => HashBagOStuff::class ],
+ 'hash' => [ 'class' => HashBagOStuff::class ],
];
$this->setMwGlobals( 'wgObjectCaches', $arr + $defaults );
}
$this->setCacheConfig( [
// Mock APC not being installed (T160519, T147161)
- CACHE_ACCEL => [ 'class' => 'EmptyBagOStuff' ]
+ CACHE_ACCEL => [ 'class' => EmptyBagOStuff::class ]
] );
$this->assertInstanceOf(
$this->setCacheConfig( [
// Mock APC not being installed (T160519, T147161)
- CACHE_ACCEL => [ 'class' => 'EmptyBagOStuff' ]
+ CACHE_ACCEL => [ 'class' => EmptyBagOStuff::class ]
] );
$this->assertInstanceOf(
public function setUp() {
parent::setUp();
$this->client =
- $this->getMockBuilder( 'MultiHttpClient' )
+ $this->getMockBuilder( MultiHttpClient::class )
->setConstructorArgs( [ [] ] )
->setMethods( [ 'run' ] )
->getMock();
protected function setUp() {
parent::setUp();
- $cache = $this->getMockBuilder( 'RedisBagOStuff' )
+ $cache = $this->getMockBuilder( RedisBagOStuff::class )
->disableOriginalConstructor()
->getMock();
$this->cache = TestingAccessWrapper::newFromObject( $cache );
);
$page = new WikiPage( $page->getTitle() );
- $this->assertEquals( 'JavaScriptContentHandler', get_class( $page->getContentHandler() ) );
+ $this->assertEquals( JavaScriptContentHandler::class, get_class( $page->getContentHandler() ) );
}
}
# sanity check, because this test seems to fail for no reason for some people.
$c = $page->getContent();
- $this->assertEquals( 'WikitextContent', get_class( $c ) );
+ $this->assertEquals( WikitextContent::class, get_class( $c ) );
# now, test the actual redirect
$t = $page->getRedirectTarget();
public function testWikiPageFactory() {
$title = Title::makeTitle( NS_FILE, 'Someimage.png' );
$page = WikiPage::factory( $title );
- $this->assertEquals( 'WikiFilePage', get_class( $page ) );
+ $this->assertEquals( WikiFilePage::class, get_class( $page ) );
$title = Title::makeTitle( NS_CATEGORY, 'SomeCategory' );
$page = WikiPage::factory( $title );
- $this->assertEquals( 'WikiCategoryPage', get_class( $page ) );
+ $this->assertEquals( WikiCategoryPage::class, get_class( $page ) );
$title = Title::makeTitle( NS_MAIN, 'SomePage' );
$page = WikiPage::factory( $title );
- $this->assertEquals( 'WikiPage', get_class( $page ) );
+ $this->assertEquals( WikiPage::class, get_class( $page ) );
}
/**
* @dataProvider getDateCondProvider
*/
public function testGetDateCond( $inputYear, $inputMonth, $inputDay, $expected ) {
- $pager = $this->getMockForAbstractClass( 'RangeChronologicalPager' );
+ $pager = $this->getMockForAbstractClass( RangeChronologicalPager::class );
$this->assertEquals(
$expected,
wfTimestamp( TS_MW, $pager->getDateCond( $inputYear, $inputMonth, $inputDay ) )
* @dataProvider getDateRangeCondProvider
*/
public function testGetDateRangeCond( $start, $end, $expected ) {
- $pager = $this->getMockForAbstractClass( 'RangeChronologicalPager' );
+ $pager = $this->getMockForAbstractClass( RangeChronologicalPager::class );
$this->assertArrayEquals( $expected, $pager->getDateRangeCond( $start, $end ) );
}
* @dataProvider getDateRangeCondInvalidProvider
*/
public function testGetDateRangeCondInvalid( $start, $end ) {
- $pager = $this->getMockForAbstractClass( 'RangeChronologicalPager' );
+ $pager = $this->getMockForAbstractClass( RangeChronologicalPager::class );
$this->assertEquals( null, $pager->getDateRangeCond( $start, $end ) );
}
* @covers ReverseChronologicalPager::getDateCond
*/
public function testGetDateCond() {
- $pager = $this->getMockForAbstractClass( 'ReverseChronologicalPager' );
+ $pager = $this->getMockForAbstractClass( ReverseChronologicalPager::class );
$timestamp = MWTimestamp::getInstance();
$db = wfGetDB( DB_MASTER );
protected $mPreprocessors;
protected static $classNames = [
- 'Preprocessor_DOM',
- 'Preprocessor_Hash'
+ Preprocessor_DOM::class,
+ Preprocessor_Hash::class
];
protected function setUp() {
class BcryptPasswordTest extends PasswordTestCase {
protected function getTypeConfigs() {
return [ 'bcrypt' => [
- 'class' => 'BcryptPassword',
+ 'class' => BcryptPassword::class,
'cost' => 9,
] ];
}
protected function getTypeConfigs() {
return [
'both' => [
- 'class' => 'EncryptedPassword',
+ 'class' => EncryptedPassword::class,
'underlying' => 'pbkdf2',
'secrets' => [
md5( 'secret1' ),
'cipher' => 'aes-256-cbc',
],
'secret1' => [
- 'class' => 'EncryptedPassword',
+ 'class' => EncryptedPassword::class,
'underlying' => 'pbkdf2',
'secrets' => [
md5( 'secret1' ),
'cipher' => 'aes-256-cbc',
],
'secret2' => [
- 'class' => 'EncryptedPassword',
+ 'class' => EncryptedPassword::class,
'underlying' => 'pbkdf2',
'secrets' => [
md5( 'secret2' ),
'cipher' => 'aes-256-cbc',
],
'pbkdf2' => [
- 'class' => 'Pbkdf2Password',
+ 'class' => Pbkdf2Password::class,
'algo' => 'sha256',
'cost' => '10',
'length' => '64',
protected function getTypeConfigs() {
return [
'testLargeLayeredTop' => [
- 'class' => 'LayeredParameterizedPassword',
+ 'class' => LayeredParameterizedPassword::class,
'types' => [
'testLargeLayeredBottom',
'testLargeLayeredBottom',
],
],
'testLargeLayeredBottom' => [
- 'class' => 'Pbkdf2Password',
+ 'class' => Pbkdf2Password::class,
'algo' => 'sha512',
'cost' => 1024,
'length' => 512,
],
'testLargeLayeredFinal' => [
- 'class' => 'BcryptPassword',
+ 'class' => BcryptPassword::class,
'cost' => 5,
]
];
class MWOldPasswordTest extends PasswordTestCase {
protected function getTypeConfigs() {
return [ 'A' => [
- 'class' => 'MWOldPassword',
+ 'class' => MWOldPassword::class,
] ];
}
class MWSaltedPasswordTest extends PasswordTestCase {
protected function getTypeConfigs() {
return [ 'B' => [
- 'class' => 'MWSaltedPassword',
+ 'class' => MWSaltedPassword::class,
] ];
}
class PasswordFactoryTest extends MediaWikiTestCase {
public function testRegister() {
$pf = new PasswordFactory;
- $pf->register( 'foo', [ 'class' => 'InvalidPassword' ] );
+ $pf->register( 'foo', [ 'class' => InvalidPassword::class ] );
$this->assertArrayHasKey( 'foo', $pf->getTypes() );
}
public function testSetDefaultType() {
$pf = new PasswordFactory;
- $pf->register( '1', [ 'class' => 'InvalidPassword' ] );
- $pf->register( '2', [ 'class' => 'InvalidPassword' ] );
+ $pf->register( '1', [ 'class' => InvalidPassword::class ] );
+ $pf->register( '2', [ 'class' => InvalidPassword::class ] );
$pf->setDefaultType( '1' );
$this->assertSame( '1', $pf->getDefaultType() );
$pf->setDefaultType( '2' );
public function testInit() {
$config = new HashConfig( [
'PasswordConfig' => [
- 'foo' => [ 'class' => 'InvalidPassword' ],
+ 'foo' => [ 'class' => InvalidPassword::class ],
],
'PasswordDefault' => 'foo'
] );
public function testNewFromCiphertext() {
$pf = new PasswordFactory;
- $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] );
+ $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] );
$pw = $pf->newFromCiphertext( ':B:salt:d529e941509eb9e9b9cfaeae1fe7ca23' );
$this->assertInstanceOf( MWSaltedPassword::class, $pw );
}
*/
public function testNewFromCiphertextErrors( $hash ) {
$pf = new PasswordFactory;
- $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] );
+ $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] );
$pf->newFromCiphertext( $hash );
}
public function testNewFromType() {
$pf = new PasswordFactory;
- $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] );
+ $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] );
$pw = $pf->newFromType( 'B' );
$this->assertInstanceOf( MWSaltedPassword::class, $pw );
}
*/
public function testNewFromTypeError() {
$pf = new PasswordFactory;
- $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] );
+ $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] );
$pf->newFromType( 'bogus' );
}
public function testNewFromPlaintext() {
$pf = new PasswordFactory;
- $pf->register( 'A', [ 'class' => 'MWOldPassword' ] );
- $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] );
+ $pf->register( 'A', [ 'class' => MWOldPassword::class ] );
+ $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] );
$pf->setDefaultType( 'A' );
- $this->assertInstanceOf( 'InvalidPassword', $pf->newFromPlaintext( null ) );
- $this->assertInstanceOf( 'MWOldPassword', $pf->newFromPlaintext( 'password' ) );
- $this->assertInstanceOf( 'MWSaltedPassword',
+ $this->assertInstanceOf( InvalidPassword::class, $pf->newFromPlaintext( null ) );
+ $this->assertInstanceOf( MWOldPassword::class, $pf->newFromPlaintext( 'password' ) );
+ $this->assertInstanceOf( MWSaltedPassword::class,
$pf->newFromPlaintext( 'password', $pf->newFromType( 'B' ) ) );
}
public function testNeedsUpdate() {
$pf = new PasswordFactory;
- $pf->register( 'A', [ 'class' => 'MWOldPassword' ] );
- $pf->register( 'B', [ 'class' => 'MWSaltedPassword' ] );
+ $pf->register( 'A', [ 'class' => MWOldPassword::class ] );
+ $pf->register( 'B', [ 'class' => MWSaltedPassword::class ] );
$pf->setDefaultType( 'A' );
$this->assertFalse( $pf->needsUpdate( $pf->newFromType( 'A' ) ) );
}
public function testNewInvalidPassword() {
- $this->assertInstanceOf( 'InvalidPassword', PasswordFactory::newInvalidPassword() );
+ $this->assertInstanceOf( InvalidPassword::class, PasswordFactory::newInvalidPassword() );
}
}
$passwordFactory = new PasswordFactory();
$invalid = $passwordFactory->newFromPlaintext( null );
- $this->assertInstanceOf( 'InvalidPassword', $invalid );
+ $this->assertInstanceOf( InvalidPassword::class, $invalid );
}
}
protected function getTypeConfigs() {
return [
'pbkdf2' => [
- 'class' => 'Pbkdf2Password',
+ 'class' => Pbkdf2Password::class,
'algo' => 'sha256',
'cost' => '10000',
'length' => '128',
class Pbkdf2PasswordTest extends PasswordTestCase {
protected function getTypeConfigs() {
return [ 'pbkdf2' => [
- 'class' => 'Pbkdf2Password',
+ 'class' => Pbkdf2Password::class,
'algo' => 'sha256',
'cost' => '10000',
'length' => '128',
'maxqueue' => 100,
];
- $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' )
+ $poolCounter = $this->getMockBuilder( PoolCounterAbstractMock::class )
->setConstructorArgs( [ $poolCounterConfig, 'testCounter', 'someKey' ] )
// don't mock anything - the proper syntax would be setMethods(null), but due
// to a PHPUnit bug that does not work with getMockForAbstractClass()
->setMethods( [ 'idontexist' ] )
->getMockForAbstractClass();
- $this->assertInstanceOf( 'PoolCounter', $poolCounter );
+ $this->assertInstanceOf( PoolCounter::class, $poolCounter );
}
public function testConstructWithSlots() {
'maxqueue' => 100,
];
- $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' )
+ $poolCounter = $this->getMockBuilder( PoolCounterAbstractMock::class )
->setConstructorArgs( [ $poolCounterConfig, 'testCounter', 'key' ] )
->setMethods( [ 'idontexist' ] ) // don't mock anything
->getMockForAbstractClass();
- $this->assertInstanceOf( 'PoolCounter', $poolCounter );
+ $this->assertInstanceOf( PoolCounter::class, $poolCounter );
}
public function testHashKeyIntoSlots() {
- $poolCounter = $this->getMockBuilder( 'PoolCounterAbstractMock' )
+ $poolCounter = $this->getMockBuilder( PoolCounterAbstractMock::class )
// don't mock anything - the proper syntax would be setMethods(null), but due
// to a PHPUnit bug that does not work with getMockForAbstractClass()
->setMethods( [ 'idontexist' ] )
* @covers MachineReadableRCFeedFormatter::getLine
*/
public function testNotify() {
- $feed = $this->getMockBuilder( 'RCFeedEngine' )
- ->setConstructorArgs( [ [ 'formatter' => 'JSONRCFeedFormatter' ] ] )
+ $feed = $this->getMockBuilder( RCFeedEngine::class )
+ ->setConstructorArgs( [ [ 'formatter' => JSONRCFeedFormatter::class ] ] )
->setMethods( [ 'send' ] )
->getMock();
'wgRCFeeds' => [
'myfeed' => [
'uri' => 'test://localhost:1234',
- 'formatter' => 'JSONRCFeedFormatter',
+ 'formatter' => JSONRCFeedFormatter::class,
],
],
'wgRCEngines' => [
public function testExtractCredits() {
$processor = new ExtensionProcessor();
$processor->extractInfo( $this->dir, self::$default, 1 );
- $this->setExpectedException( 'Exception' );
+ $this->setExpectedException( Exception::class );
$processor->extractInfo( $this->dir, self::$default, 1 );
}
'autoloaderPaths' => []
];
$registry = new ExtensionRegistry();
- $class = new ReflectionClass( 'ExtensionRegistry' );
+ $class = new ReflectionClass( ExtensionRegistry::class );
$method = $class->getMethod( 'exportExtractedData' );
$method->setAccessible( true );
$method->invokeArgs( $registry, [ $info ] );
],
] );
- $this->setExpectedException( 'UnexpectedValueException' );
+ $this->setExpectedException( UnexpectedValueException::class );
$checker->checkArray( [
'FakeExtension' => [
'FakeDependency' => 'not really valid',
parent::setUp();
// MediaWiki tests defaults $wgMainWANCache to CACHE_NONE.
// Use hash instead so that caching is observed
- $this->wanCache = $this->getMockBuilder( 'WANObjectCache' )
+ $this->wanCache = $this->getMockBuilder( WANObjectCache::class )
->setConstructorArgs( [ [
'cache' => new HashBagOStuff(),
'pool' => 'test',
}
protected function makeBlobStore( $methods = null, $rl = null ) {
- $blobStore = $this->getMockBuilder( 'MessageBlobStore' )
+ $blobStore = $this->getMockBuilder( MessageBlobStore::class )
->setConstructorArgs( [ $rl ] )
->setMethods( $methods )
->getMock();
return [
[
[
- 'class' => 'ResourceLoaderImageModule',
+ 'class' => ResourceLoaderImageModule::class,
'prefix' => 'oo-ui-icon',
'variants' => self::$commonImageVariants,
'images' => self::$commonImageData,
],
[
[
- 'class' => 'ResourceLoaderImageModule',
+ 'class' => ResourceLoaderImageModule::class,
'selectorWithoutVariant' => '.mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
'selectorWithVariant' =>
'.mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
}
private function getImageMock( ResourceLoaderContext $context, $dataUriReturnValue ) {
- $image = $this->getMockBuilder( 'ResourceLoaderImage' )
+ $image = $this->getMockBuilder( ResourceLoaderImage::class )
->disableOriginalConstructor()
->getMock();
$image->method( 'getDataUri' )
* @covers ResourceLoaderModule::expandRelativePaths
*/
public function testPlaceholderize() {
- $getRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'getRelativePaths' );
+ $getRelativePaths = new ReflectionMethod( ResourceLoaderModule::class, 'getRelativePaths' );
$getRelativePaths->setAccessible( true );
- $expandRelativePaths = new ReflectionMethod( 'ResourceLoaderModule', 'expandRelativePaths' );
+ $expandRelativePaths = new ReflectionMethod( ResourceLoaderModule::class, 'expandRelativePaths' );
$expandRelativePaths->setAccessible( true );
$this->setMwGlobals( [
*/
public function testNonDefaultSkin() {
$module = new ResourceLoaderOOUIImageModule( [
- 'class' => 'ResourceLoaderOOUIImageModule',
+ 'class' => ResourceLoaderOOUIImageModule::class,
'name' => 'icons',
'rootPath' => 'tests/phpunit/data/resourceloader/oouiimagemodule',
] );
function () {
}
);
- $r = new ReflectionMethod( 'ExtensionRegistry', 'exportExtractedData' );
+ $r = new ReflectionMethod( ExtensionRegistry::class, 'exportExtractedData' );
$r->setAccessible( true );
$r->invoke( ExtensionRegistry::getInstance(), [
'globals' => [],
'msg' => 'Version falls back gracefully if getVersionHash throws',
'modules' => [
'test.fail' => (
- ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' )
+ ( $mock = $this->getMockBuilder( ResourceLoaderTestModule::class )
->setMethods( [ 'getVersionHash' ] )->getMock() )
&& $mock->method( 'getVersionHash' )->will(
$this->throwException( new Exception )
'msg' => 'Use version from getVersionHash',
'modules' => [
'test.version' => (
- ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' )
+ ( $mock = $this->getMockBuilder( ResourceLoaderTestModule::class )
->setMethods( [ 'getVersionHash' ] )->getMock() )
&& $mock->method( 'getVersionHash' )->willReturn( '1234567' )
) ? $mock : $mock
'msg' => 'Re-hash version from getVersionHash if too long',
'modules' => [
'test.version' => (
- ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' )
+ ( $mock = $this->getMockBuilder( ResourceLoaderTestModule::class )
->setMethods( [ 'getVersionHash' ] )->getMock() )
&& $mock->method( 'getVersionHash' )->willReturn( '12345678' )
) ? $mock : $mock
*/
public function testRegisterInvalidName() {
$resourceLoader = new EmptyResourceLoader();
- $this->setExpectedException( 'MWException', "name 'test!invalid' is invalid" );
+ $this->setExpectedException( MWException::class, "name 'test!invalid' is invalid" );
$resourceLoader->register( 'test!invalid', new ResourceLoaderTestModule() );
}
*/
public function testRegisterInvalidType() {
$resourceLoader = new EmptyResourceLoader();
- $this->setExpectedException( 'MWException', 'ResourceLoader module info type error' );
+ $this->setExpectedException( MWException::class, 'ResourceLoader module info type error' );
$resourceLoader->register( 'test', new stdClass() );
}
*/
public function testAddSourceDupe() {
$rl = new ResourceLoader;
- $this->setExpectedException( 'MWException', 'ResourceLoader duplicate source addition error' );
+ $this->setExpectedException(
+ MWException::class, 'ResourceLoader duplicate source addition error'
+ );
$rl->addSource( 'foo', 'https://example.org/w/load.php' );
$rl->addSource( 'foo', 'https://example.com/w/load.php' );
}
*/
public function testAddSourceInvalid() {
$rl = new ResourceLoader;
- $this->setExpectedException( 'MWException', 'with no "loadScript" key' );
+ $this->setExpectedException( MWException::class, 'with no "loadScript" key' );
$rl->addSource( 'foo', [ 'x' => 'https://example.org/w/load.php' ] );
}
ResourceLoader::clearCache();
$this->setMwGlobals( 'wgResourceLoaderDebug', true );
- $rl = TestingAccessWrapper::newFromClass( 'ResourceLoader' );
+ $rl = TestingAccessWrapper::newFromClass( ResourceLoader::class );
$this->assertEquals(
$case['expected'],
$rl->makeLoaderImplementScript(
* @covers ResourceLoader::makeLoaderImplementScript
*/
public function testMakeLoaderImplementScriptInvalid() {
- $this->setExpectedException( 'MWException', 'Invalid scripts error' );
- $rl = TestingAccessWrapper::newFromClass( 'ResourceLoader' );
+ $this->setExpectedException( MWException::class, 'Invalid scripts error' );
+ $rl = TestingAccessWrapper::newFromClass( ResourceLoader::class );
$rl->makeLoaderImplementScript(
'test', // name
123, // scripts
'foo' => self::getSimpleModuleMock( 'foo();' ),
'ferry' => self::getFailFerryMock(),
'bar' => self::getSimpleModuleMock( 'bar();' ),
- 'startup' => [ 'class' => 'ResourceLoaderStartUpModule' ],
+ 'startup' => [ 'class' => ResourceLoaderStartUpModule::class ],
] );
$context = $this->getResourceLoaderContext(
[
*/
public function testConstructor( $params ) {
$module = new ResourceLoaderWikiModule( $params );
- $this->assertInstanceOf( 'ResourceLoaderWikiModule', $module );
+ $this->assertInstanceOf( ResourceLoaderWikiModule::class, $module );
}
public static function provideConstructor() {
* @dataProvider provideIsKnownEmpty
*/
public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
- $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+ $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->setMethods( [ 'getTitleInfo', 'getGroup' ] )
->getMock();
$module->expects( $this->any() )
$module->expects( $this->any() )
->method( 'getGroup' )
->will( $this->returnValue( $group ) );
- $context = $this->getMockBuilder( 'ResourceLoaderContext' )
+ $context = $this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor()
->getMock();
$this->assertEquals( $expected, $module->isKnownEmpty( $context ) );
];
$expected = $titleInfo;
- $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+ $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
->setMethods( [ 'getPages' ] )
->getMock();
$module->method( 'getPages' )->willReturn( $pages );
// Can't mock static methods
$module::$returnFetchTitleInfo = $titleInfo;
- $context = $this->getMockBuilder( 'ResourceLoaderContext' )
+ $context = $this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor()
->getMock();
];
$expected = $titleInfo;
- $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+ $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
->setMethods( [ 'getPages' ] )
->getMock();
$module->method( 'getPages' )->willReturn( $pages );
$titleInfo = [];
// Set up objects
- $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+ $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
->setMethods( [ 'getPages' ] ) ->getMock();
$module->method( 'getPages' )->willReturn( $pages );
$module::$returnFetchTitleInfo = $titleInfo;
*/
public function testGetContent( $expected, $title ) {
$context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
- $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+ $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->setMethods( [ 'getContentObj' ] ) ->getMock();
$module->expects( $this->any() )
->method( 'getContentObj' )->willReturn( null );
public function testGetContentForRedirects() {
// Set up context and module object
$context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
- $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+ $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->setMethods( [ 'getPages', 'getContentObj' ] )
->getMock();
$module->expects( $this->any() )
$this->search = MediaWikiServices::getInstance()->newSearchEngine();
$this->search->setNamespaces( [] );
- $this->originalHandlers = TestingAccessWrapper::newFromClass( 'Hooks' )->handlers;
- TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = [];
+ $this->originalHandlers = TestingAccessWrapper::newFromClass( Hooks::class )->handlers;
+ TestingAccessWrapper::newFromClass( Hooks::class )->handlers = [];
SpecialPageFactory::resetList();
}
public function tearDown() {
parent::tearDown();
- TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = $this->originalHandlers;
+ TestingAccessWrapper::newFromClass( Hooks::class )->handlers = $this->originalHandlers;
SpecialPageFactory::resetList();
}
* @covers PrefixSearch::searchBackend
*/
public function testSearchBackend( array $case ) {
- $search = $stub = $this->getMockBuilder( 'SearchEngine' )
+ $search = $stub = $this->getMockBuilder( SearchEngine::class )
->setMethods( [ 'completionSearchBackend' ] )->getMock();
$return = SearchSuggestionSet::fromStrings( $case['provision'] );
/**
* @var $mockEngine SearchEngine
*/
- $mockEngine = $this->getMockBuilder( 'SearchEngine' )
+ $mockEngine = $this->getMockBuilder( SearchEngine::class )
->setMethods( [ 'makeSearchFieldMapping' ] )->getMock();
$mockFieldBuilder = function ( $name, $type ) {
$mockField =
- $this->getMockBuilder( 'SearchIndexFieldDefinition' )->setConstructorArgs( [
+ $this->getMockBuilder( SearchIndexFieldDefinition::class )->setConstructorArgs( [
$name,
$type
] )->getMock();
$fields = $mockEngine->getSearchIndexFields();
$this->assertArrayHasKey( 'language', $fields );
$this->assertArrayHasKey( 'category', $fields );
- $this->assertInstanceOf( 'SearchIndexField', $fields['testField'] );
+ $this->assertInstanceOf( SearchIndexField::class, $fields['testField'] );
$mapping = $fields['testField']->getMapping( $mockEngine );
$this->assertArrayHasKey( 'testData', $mapping );
}
public function addAugmentors( &$setAugmentors, &$rowAugmentors ) {
- $setAugmentor = $this->createMock( 'ResultSetAugmentor' );
+ $setAugmentor = $this->createMock( ResultSetAugmentor::class );
$setAugmentor->expects( $this->once() )
->method( 'augmentAll' )
->willReturnCallback( function ( SearchResultSet $resultSet ) {
} );
$setAugmentors['testSet'] = $setAugmentor;
- $rowAugmentor = $this->createMock( 'ResultAugmentor' );
+ $rowAugmentor = $this->createMock( ResultAugmentor::class );
$rowAugmentor->expects( $this->exactly( 2 ) )
->method( 'augment' )
->willReturnCallback( function ( SearchResult $result ) {
$name = 'TestService92834576';
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+ $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class );
$services->getService( $name );
}
$name = 'TestService92834576';
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+ $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class );
$services->peekService( $name );
}
return $theService;
} );
- $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' );
+ $this->setExpectedException( MediaWiki\Services\ServiceAlreadyDefinedException::class );
$services->defineService( $name, function () use ( $theService ) {
return $theService;
];
// loading the same file twice should fail, because
- $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' );
+ $this->setExpectedException( MediaWiki\Services\ServiceAlreadyDefinedException::class );
$services->loadWiringFiles( $wiringFiles );
}
$theService = new stdClass();
$name = 'TestService92834576';
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+ $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class );
$services->redefineService( $name, function () use ( $theService ) {
return $theService;
// create the service, so it can no longer be redefined
$services->getService( $name );
- $this->setExpectedException( 'MediaWiki\Services\CannotReplaceActiveServiceException' );
+ $this->setExpectedException( MediaWiki\Services\CannotReplaceActiveServiceException::class );
$services->redefineService( $name, function () use ( $theService ) {
return $theService;
public function testDisableService() {
$services = $this->newServiceContainer( [ 'Foo' ] );
- $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
+ $destructible = $this->getMockBuilder( MediaWiki\Services\DestructibleService::class )
->getMock();
$destructible->expects( $this->once() )
->method( 'destroy' );
$this->assertContains( 'Bar', $services->getServiceNames() );
$this->assertContains( 'Qux', $services->getServiceNames() );
- $this->setExpectedException( 'MediaWiki\Services\ServiceDisabledException' );
+ $this->setExpectedException( MediaWiki\Services\ServiceDisabledException::class );
$services->getService( 'Qux' );
}
$theService = new stdClass();
$name = 'TestService92834576';
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+ $this->setExpectedException( MediaWiki\Services\NoSuchServiceException::class );
$services->redefineService( $name, function () use ( $theService ) {
return $theService;
public function testDestroy() {
$services = $this->newServiceContainer();
- $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
+ $destructible = $this->getMockBuilder( MediaWiki\Services\DestructibleService::class )
->getMock();
$destructible->expects( $this->once() )
->method( 'destroy' );
// destroy the container
$services->destroy();
- $this->setExpectedException( 'MediaWiki\Services\ContainerDisabledException' );
+ $this->setExpectedException( MediaWiki\Services\ContainerDisabledException::class );
$services->getService( 'Bar' );
}
public function testNewSessionInfoForRequest() {
$provider = $this->getProvider();
$user = static::getTestSysop()->getUser();
- $request = $this->getMockBuilder( 'FauxRequest' )
+ $request = $this->getMockBuilder( \FauxRequest::class )
->setMethods( [ 'getIP' ] )->getMock();
$request->expects( $this->any() )->method( 'getIP' )
->will( $this->returnValue( '127.0.0.1' ) );
$provider->setLogger( $logger );
$user = static::getTestSysop()->getUser();
- $request = $this->getMockBuilder( 'FauxRequest' )
+ $request = $this->getMockBuilder( \FauxRequest::class )
->setMethods( [ 'getIP' ] )->getMock();
$request->expects( $this->any() )->method( 'getIP' )
->will( $this->returnValue( '127.0.0.1' ) );
], $logger->getBuffer() );
$logger->clearBuffer();
- $request2 = $this->getMockBuilder( 'FauxRequest' )
+ $request2 = $this->getMockBuilder( \FauxRequest::class )
->setMethods( [ 'getIP' ] )->getMock();
$request2->expects( $this->any() )->method( 'getIP' )
->will( $this->returnValue( '10.0.0.1' ) );
);
$msg = $provider->whyNoSession();
- $this->assertInstanceOf( 'Message', $msg );
+ $this->assertInstanceOf( \Message::class, $msg );
$this->assertSame( 'sessionprovider-nocookies', $msg->getKey() );
}
);
TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
- $mock = $this->getMockBuilder( 'stdClass' )
+ $mock = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'onUserSetCookies' ] )
->getMock();
$mock->expects( $this->never() )->method( 'onUserSetCookies' );
}
protected function getSentRequest() {
- $sentResponse = $this->getMockBuilder( 'FauxResponse' )
+ $sentResponse = $this->getMockBuilder( \FauxResponse::class )
->setMethods( [ 'headersSent', 'setCookie', 'header' ] )->getMock();
$sentResponse->expects( $this->any() )->method( 'headersSent' )
->will( $this->returnValue( true ) );
$sentResponse->expects( $this->never() )->method( 'setCookie' );
$sentResponse->expects( $this->never() )->method( 'header' );
- $sentRequest = $this->getMockBuilder( 'FauxRequest' )
+ $sentRequest = $this->getMockBuilder( \FauxRequest::class )
->setMethods( [ 'response' ] )->getMock();
$sentRequest->expects( $this->any() )->method( 'response' )
->will( $this->returnValue( $sentResponse ) );
TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
// Anonymous user
- $mock = $this->getMockBuilder( 'stdClass' )
+ $mock = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'onUserSetCookies' ] )->getMock();
$mock->expects( $this->never() )->method( 'onUserSetCookies' );
$this->mergeMwGlobalArrayValue( 'wgHooks', [ 'UserSetCookies' => [ $mock ] ] );
$this->assertFalse( $provider->canChangeUser() );
$msg = $provider->whyNoSession();
- $this->assertInstanceOf( 'Message', $msg );
+ $this->assertInstanceOf( \Message::class, $msg );
$this->assertSame( 'sessionprovider-nocookies', $msg->getKey() );
}
}
protected function getSentRequest() {
- $sentResponse = $this->getMockBuilder( 'FauxResponse' )
+ $sentResponse = $this->getMockBuilder( \FauxResponse::class )
->setMethods( [ 'headersSent', 'setCookie', 'header' ] )
->getMock();
$sentResponse->expects( $this->any() )->method( 'headersSent' )
$sentResponse->expects( $this->never() )->method( 'setCookie' );
$sentResponse->expects( $this->never() )->method( 'header' );
- $sentRequest = $this->getMockBuilder( 'FauxRequest' )
+ $sentRequest = $this->getMockBuilder( \FauxRequest::class )
->setMethods( [ 'response' ] )->getMock();
$sentRequest->expects( $this->any() )->method( 'response' )
->will( $this->returnValue( $sentResponse ) );
$data = [ 'foo' => 'bar' ];
$ex = new MetadataMergeException();
- $this->assertInstanceOf( 'UnexpectedValueException', $ex );
+ $this->assertInstanceOf( \UnexpectedValueException::class, $ex );
$this->assertSame( [], $ex->getContext() );
$ex2 = new MetadataMergeException( 'Message', 42, $ex, $data );
$reset[] = $this->getResetter( $rProp );
$this->setMwGlobals( [
- 'wgSessionProviders' => [ [ 'class' => 'DummySessionProvider' ] ],
+ 'wgSessionProviders' => [ [ 'class' => \DummySessionProvider::class ] ],
'wgObjectCacheSessionExpiry' => 2,
] );
$this->assertSame( self::SESSIONID, $backend->getId() );
$this->assertSame( $id, $backend->getSessionId() );
$this->assertSame( $this->provider, $backend->getProvider() );
- $this->assertInstanceOf( 'User', $backend->getUser() );
+ $this->assertInstanceOf( User::class, $backend->getUser() );
$this->assertSame( 'UTSysop', $backend->getUser()->getName() );
$this->assertSame( $info->wasPersisted(), $backend->isPersistent() );
$this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() );
$this->assertSame( self::SESSIONID, $backend->getId() );
$this->assertSame( $id, $backend->getSessionId() );
$this->assertSame( $this->provider, $backend->getProvider() );
- $this->assertInstanceOf( 'User', $backend->getUser() );
+ $this->assertInstanceOf( User::class, $backend->getUser() );
$this->assertTrue( $backend->getUser()->isAnon() );
$this->assertSame( $info->wasPersisted(), $backend->isPersistent() );
$this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() );
public function testResetId() {
$id = session_id();
- $builder = $this->getMockBuilder( 'DummySessionProvider' )
+ $builder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'persistsSessionId', 'sessionIdWasReset' ] );
$this->provider = $builder->getMock();
}
public function testPersist() {
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'persistSession' ] )->getMock();
$this->provider->expects( $this->once() )->method( 'persistSession' );
$backend = $this->getBackend();
}
public function testUnpersist() {
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'unpersistSession' ] )->getMock();
$this->provider->expects( $this->once() )->method( 'unpersistSession' );
$backend = $this->getBackend();
public function testSetUser() {
$user = static::getTestSysop()->getUser();
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'canChangeUser' ] )->getMock();
$this->provider->expects( $this->any() )->method( 'canChangeUser' )
->will( $this->returnValue( false ) );
->setMethods( [ 'onSessionMetadata' ] )->getMock();
$neverHook->expects( $this->never() )->method( 'onSessionMetadata' );
- $builder = $this->getMockBuilder( 'DummySessionProvider' )
+ $builder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'persistSession', 'unpersistSession' ] );
$neverProvider = $builder->getMock();
$testData = [ 'foo' => 'foo!', 'bar', [ 'baz', null ] ];
// Not persistent
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'persistSession' ] )->getMock();
$this->provider->expects( $this->never() )->method( 'persistSession' );
$this->onSessionMetadataCalled = false;
$this->assertNotEquals( 0, $wrap->expires );
// Persistent
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'persistSession' ] )->getMock();
$this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
$this->onSessionMetadataCalled = false;
$this->assertNotEquals( 0, $wrap->expires );
// Not persistent, not expiring
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'persistSession' ] )->getMock();
$this->provider->expects( $this->never() )->method( 'persistSession' );
$this->onSessionMetadataCalled = false;
}
public function testGetAllowedUserRights() {
- $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $this->provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'getAllowedUserRights' ] )
->getMock();
$this->provider->expects( $this->any() )->method( 'getAllowedUserRights' )
'SessionCacheType' => 'testSessionStore',
'ObjectCacheSessionExpiry' => 100,
'SessionProviders' => [
- [ 'class' => 'DummySessionProvider' ],
+ [ 'class' => \DummySessionProvider::class ],
]
] );
$this->logger = new \TestLogger( false, function ( $m ) {
$id2 = '';
$idEmpty = 'empty-session-------------------';
- $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
+ $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods(
[ 'provideSessionInfo', 'newSessionInfo', '__toString', 'describe', 'unpersistSession' ]
);
// Failure to create an empty session
$manager = $this->getManager();
- $provider = $this->getMockBuilder( 'DummySessionProvider' )
+ $provider = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString' ] )
->getMock();
$provider->expects( $this->any() )->method( 'provideSessionInfo' )
$pmanager = TestingAccessWrapper::newFromObject( $manager );
$request = new \FauxRequest();
- $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
+ $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'provideSessionInfo', 'newSessionInfo', '__toString' ] );
$expectId = null;
$user = User::newFromName( 'UTSysop' );
$manager = $this->getManager();
- $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
+ $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'invalidateSessionsForUser', '__toString' ] );
$provider1 = $providerBuilder->getMock();
public function testGetVaryHeaders() {
$manager = $this->getManager();
- $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
+ $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'getVaryHeaders', '__toString' ] );
$provider1 = $providerBuilder->getMock();
public function testGetVaryCookies() {
$manager = $this->getManager();
- $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
+ $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'getVaryCookies', '__toString' ] );
$provider1 = $providerBuilder->getMock();
$manager = TestingAccessWrapper::newFromObject( $realManager );
$this->config->set( 'SessionProviders', [
- [ 'class' => 'DummySessionProvider' ],
+ [ 'class' => \DummySessionProvider::class ],
] );
$providers = $manager->getProviders();
$this->assertArrayHasKey( 'DummySessionProvider', $providers );
$this->assertSame( $realManager, $provider->getManager() );
$this->config->set( 'SessionProviders', [
- [ 'class' => 'DummySessionProvider' ],
- [ 'class' => 'DummySessionProvider' ],
+ [ 'class' => \DummySessionProvider::class ],
+ [ 'class' => \DummySessionProvider::class ],
] );
$manager->sessionProviders = null;
try {
$manager = TestingAccessWrapper::newFromObject( $this->getManager() );
$manager->setLogger( new \Psr\Log\NullLogger() );
- $mock = $this->getMockBuilder( 'stdClass' )
+ $mock = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'shutdown' ] )->getMock();
$mock->expects( $this->once() )->method( 'shutdown' );
public function testPreventSessionsForUser() {
$manager = $this->getManager();
- $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
+ $providerBuilder = $this->getMockBuilder( \DummySessionProvider::class )
->setMethods( [ 'preventSessionsForUser', '__toString' ] );
$provider1 = $providerBuilder->getMock();
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( $user->getToken( true ), $userinfo->getToken() );
- $this->assertInstanceOf( 'User', $userinfo->getUser() );
+ $this->assertInstanceOf( User::class, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
- $this->assertInstanceOf( 'User', $userinfo2->getUser() );
+ $this->assertInstanceOf( User::class, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( $user->getToken( true ), $userinfo->getToken() );
- $this->assertInstanceOf( 'User', $userinfo->getUser() );
+ $this->assertInstanceOf( User::class, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
- $this->assertInstanceOf( 'User', $userinfo2->getUser() );
+ $this->assertInstanceOf( User::class, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( '', $userinfo->getToken() );
- $this->assertInstanceOf( 'User', $userinfo->getUser() );
+ $this->assertInstanceOf( User::class, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( '', $userinfo2->getToken() );
- $this->assertInstanceOf( 'User', $userinfo2->getUser() );
+ $this->assertInstanceOf( User::class, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$sites = $store->getSites();
- $this->assertInstanceOf( 'SiteList', $sites );
+ $this->assertInstanceOf( SiteList::class, $sites );
/**
* @var Site $site
*/
foreach ( $sites as $site ) {
- $this->assertInstanceOf( 'Site', $site );
+ $this->assertInstanceOf( Site::class, $site );
}
foreach ( $testSites as $site ) {
$this->assertTrue( $store->saveSites( $sites ) );
$site = $store->getSite( 'ertrywuutr' );
- $this->assertInstanceOf( 'Site', $site );
+ $this->assertInstanceOf( Site::class, $site );
$this->assertEquals( 'en', $site->getLanguageCode() );
$site = $store->getSite( 'sdfhxujgkfpth' );
- $this->assertInstanceOf( 'Site', $site );
+ $this->assertInstanceOf( Site::class, $site );
$this->assertEquals( 'nl', $site->getLanguageCode() );
}
* @covers CachingSiteStore::reset
*/
public function testReset() {
- $dbSiteStore = $this->getMockBuilder( 'SiteStore' )
+ $dbSiteStore = $this->getMockBuilder( SiteStore::class )
->disableOriginalConstructor()
->getMock();
$sites = $store->getSites();
- $this->assertInstanceOf( 'SiteList', $sites );
+ $this->assertInstanceOf( SiteList::class, $sites );
/**
* @var Site $site
*/
foreach ( $sites as $site ) {
- $this->assertInstanceOf( 'Site', $site );
+ $this->assertInstanceOf( Site::class, $site );
}
foreach ( $expectedSites as $site ) {
$this->assertTrue( $store->saveSites( $sites ) );
$site = $store->getSite( 'ertrywuutr' );
- $this->assertInstanceOf( 'Site', $site );
+ $this->assertInstanceOf( Site::class, $site );
$this->assertEquals( 'en', $site->getLanguageCode() );
$this->assertTrue( is_int( $site->getInternalId() ) );
$this->assertTrue( $site->getInternalId() >= 0 );
$site = $store->getSite( 'sdfhxujgkfpth' );
- $this->assertInstanceOf( 'Site', $site );
+ $this->assertInstanceOf( Site::class, $site );
$this->assertEquals( 'nl', $site->getLanguageCode() );
$this->assertTrue( is_int( $site->getInternalId() ) );
$this->assertTrue( $site->getInternalId() >= 0 );
}
private function getSiteLookup( SiteList $sites ) {
- $siteLookup = $this->getMockBuilder( 'SiteLookup' )
+ $siteLookup = $this->getMockBuilder( SiteLookup::class )
->disableOriginalConstructor()
->getMock();
use MediaWikiCoversValidator;
public function testConstructor_InvalidArgument() {
- $this->setExpectedException( 'InvalidArgumentException' );
+ $this->setExpectedException( InvalidArgumentException::class );
new SiteExporter( 'Foo' );
}
}
private function newSiteStore( SiteList $sites ) {
- $store = $this->getMockBuilder( 'SiteStore' )->getMock();
+ $store = $this->getMockBuilder( SiteStore::class )->getMock();
$store->expects( $this->once() )
->method( 'saveSites' )
use MediaWikiCoversValidator;
private function newSiteImporter( array $expectedSites, $errorCount ) {
- $store = $this->getMockBuilder( 'SiteStore' )->getMock();
+ $store = $this->getMockBuilder( SiteStore::class )->getMock();
$store->expects( $this->once() )
->method( 'saveSites' )
->method( 'getSites' )
->will( $this->returnValue( new SiteList() ) );
- $errorHandler = $this->getMockBuilder( 'Psr\Log\LoggerInterface' )->getMock();
+ $errorHandler = $this->getMockBuilder( Psr\Log\LoggerInterface::class )->getMock();
$errorHandler->expects( $this->exactly( $errorCount ) )
->method( 'error' );
}
public function testImportFromXML_malformed() {
- $this->setExpectedException( 'Exception' );
+ $this->setExpectedException( Exception::class );
- $store = $this->getMockBuilder( 'SiteStore' )->getMock();
+ $store = $this->getMockBuilder( SiteStore::class )->getMock();
$importer = new SiteImporter( $store );
$importer->importFromXML( 'THIS IS NOT XML' );
}
* @covers Site::unserialize
*/
public function testSerialization( Site $site ) {
- $this->assertInstanceOf( 'Serializable', $site );
+ $this->assertInstanceOf( Serializable::class, $site );
$serialization = serialize( $site );
$newInstance = unserialize( $serialization );
- $this->assertInstanceOf( 'Site', $newInstance );
+ $this->assertInstanceOf( Site::class, $newInstance );
$this->assertEquals( $serialization, serialize( $newInstance ) );
}
}
private function getSiteLookup( SiteList $sites ) {
- $siteLookup = $this->getMockBuilder( 'SiteLookup' )
+ $siteLookup = $this->getMockBuilder( SiteLookup::class )
->disableOriginalConstructor()
->getMock();
return new SkinFallback();
} );
$this->assertTrue( true ); // No exception thrown
- $this->setExpectedException( 'InvalidArgumentException' );
+ $this->setExpectedException( InvalidArgumentException::class );
$factory->register( 'invalid', 'Invalid', 'Invalid callback' );
}
*/
public function testMakeSkinWithNoBuilders() {
$factory = new SkinFactory();
- $this->setExpectedException( 'SkinException' );
+ $this->setExpectedException( SkinException::class );
$factory->makeSkin( 'nobuilderregistered' );
}
$factory->register( 'unittest', 'Unittest', function () {
return true; // Not a Skin object
} );
- $this->setExpectedException( 'UnexpectedValueException' );
+ $this->setExpectedException( UnexpectedValueException::class );
$factory->makeSkin( 'unittest' );
}
} );
$skin = $factory->makeSkin( 'testfallback' );
- $this->assertInstanceOf( 'Skin', $skin );
- $this->assertInstanceOf( 'SkinFallback', $skin );
+ $this->assertInstanceOf( Skin::class, $skin );
+ $this->assertInstanceOf( SkinFallback::class, $skin );
$this->assertEquals( 'fallback', $skin->getSkinName() );
}
* @dataProvider makeListItemProvider
*/
public function testMakeListItem( $expected, $key, $item, $options, $message ) {
- $template = $this->getMockForAbstractClass( 'BaseTemplate' );
+ $template = $this->getMockForAbstractClass( BaseTemplate::class );
$this->assertEquals(
$expected,
SpecialPageFactory::resetList();
$page = SpecialPageFactory::getPage( 'testdummy' );
- $this->assertInstanceOf( 'SpecialPage', $page );
+ $this->assertInstanceOf( SpecialPage::class, $page );
$page2 = SpecialPageFactory::getPage( 'testdummy' );
$this->assertEquals( $shouldReuseInstance, $page2 === $page, "Should re-use instance:" );
* @covers SpecialPageFactory::getNames
*/
public function testGetNames() {
- $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => 'SpecialAllPages' ] );
+ $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => SpecialAllPages::class ] );
SpecialPageFactory::resetList();
$names = SpecialPageFactory::getNames();
$specialPage->getContext()->setUser( $user );
$specialPage->getContext()->setLanguage( Language::factory( 'en' ) );
- $this->setExpectedException( 'UserNotLoggedIn', $expected );
+ $this->setExpectedException( UserNotLoggedIn::class, $expected );
// $specialPage->requireLogin( [ $reason [, $title ] ] )
call_user_func_array(
/** List query pages that can not be tested automatically */
protected $manualTest = [
- 'LinkSearchPage'
+ LinkSearchPage::class
];
/**
* https://bugs.mysql.com/bug.php?id=10327
*/
protected $reopensTempTable = [
- 'BrokenRedirects',
+ BrokenRedirects::class,
];
/**
}
public function testNotLoggedIn_throwsException() {
- $this->setExpectedException( 'UserNotLoggedIn' );
+ $this->setExpectedException( UserNotLoggedIn::class );
$this->executeSpecialPage();
}
// Set a low limit
$this->setMwGlobals( 'wgMaxSigChars', 2 );
- $user = $this->createMock( 'User' );
+ $user = $this->createMock( User::class );
$user->expects( $this->any() )
->method( 'isAnon' )
->will( $this->returnValue( false ) );
);
$mockSearchEngine = $this->mockSearchEngine( $searchResults );
- $search = $this->getMockBuilder( 'SpecialSearch' )
+ $search = $this->getMockBuilder( SpecialSearch::class )
->setMethods( [ 'getSearchEngine' ] )
->getMock();
$search->expects( $this->any() )
}
protected function mockSearchEngine( $results ) {
- $mock = $this->getMockBuilder( 'SearchEngine' )
+ $mock = $this->getMockBuilder( SearchEngine::class )
->setMethods( [ 'searchText', 'searchTitle' ] )
->getMock();
*/
public function testGetQueryInfo( $msgContent, $expected ) {
$msg = new RawMessage( $msgContent );
- $mockContext = $this->getMockBuilder( 'RequestContext' )->getMock();
+ $mockContext = $this->getMockBuilder( RequestContext::class )->getMock();
$mockContext->method( 'msg' )->willReturn( $msg );
$special = new UncategorizedCategoriesPage();
$special->setContext( $mockContext );
}
public function testNotLoggedIn_throwsException() {
- $this->setExpectedException( 'UserNotLoggedIn' );
+ $this->setExpectedException( UserNotLoggedIn::class );
$this->executeSpecialPage();
}
}
public function testUnknownNamespaceError() {
- $this->setExpectedException( 'MWException' );
+ $this->setExpectedException( MWException::class );
$title = new ForeignTitle( null, 'this', 'that' );
$title->getNamespaceId();
}
* @return GenderCache
*/
private function getGenderCache() {
- $genderCache = $this->getMockBuilder( 'GenderCache' )
+ $genderCache = $this->getMockBuilder( GenderCache::class )
->disableOriginalConstructor()
->getMock();
* @dataProvider provideParseTitle_invalid
*/
public function testParseTitle_invalid( $text ) {
- $this->setExpectedException( 'MalformedTitleException' );
+ $this->setExpectedException( MalformedTitleException::class );
$codec = $this->makeCodec( 'en' );
$codec->parseTitle( $text, NS_MAIN );
* @dataProvider failureProvider
*/
public function testFailures( Title $rootPage ) {
- $this->setExpectedException( 'MWException' );
+ $this->setExpectedException( MWException::class );
new SubpageImportTitleFactory( $rootPage );
}
}
* @dataProvider badConstructorProvider
*/
public function testConstructionErrors( $ns, $text, $fragment, $interwiki ) {
- $this->setExpectedException( 'InvalidArgumentException' );
+ $this->setExpectedException( InvalidArgumentException::class );
new TitleValue( $ns, $text, $fragment, $interwiki );
}
$stash->stashFile( $this->tmpFile );
$this->fail( 'Expected UploadStashFileException not thrown' );
} catch ( UploadStashFileException $e ) {
- $this->assertInstanceOf( 'ILocalizedException', $e );
+ $this->assertInstanceOf( ILocalizedException::class, $e );
} catch ( Exception $e ) {
$this->fail( 'Unexpected exception class ' . get_class( $e ) );
}
$this->testUser = $this->getMutableTestUser();
$this->testUserName = $this->testUser->getUser()->getName();
- $mock1 = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock1 = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock1->expects( $this->any() )->method( 'isAttached' )
->will( $this->returnValue( true ) );
$mock1->expects( $this->any() )->method( 'lookupUserNames' )
->will( $this->returnValue( [ $this->testUserName => 42, 'UTDummy' => 43, 'UTInvalid' => 0 ] ) );
$mock1->expects( $this->never() )->method( 'lookupCentralIds' );
- $mock2 = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock2 = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock2->expects( $this->any() )->method( 'isAttached' )
->will( $this->returnValue( false ) );
$mock2->expects( $this->any() )->method( 'lookupUserNames' )
public function testBasics() {
$user = $this->testUser->getUser();
$bp = BotPassword::newFromUser( $user, 'BotPassword' );
- $this->assertInstanceOf( 'BotPassword', $bp );
+ $this->assertInstanceOf( BotPassword::class, $bp );
$this->assertTrue( $bp->isSaved() );
$this->assertSame( 42, $bp->getUserCentralId() );
$this->assertSame( 'BotPassword', $bp->getAppId() );
'user' => $user,
'appId' => 'DoesNotExist'
] );
- $this->assertInstanceOf( 'BotPassword', $bp );
+ $this->assertInstanceOf( BotPassword::class, $bp );
$this->assertFalse( $bp->isSaved() );
$this->assertSame( 42, $bp->getUserCentralId() );
$this->assertSame( 'DoesNotExist', $bp->getAppId() );
'restrictions' => MWRestrictions::newFromJson( '{"IPAddresses":["127.0.0.0/8"]}' ),
'grants' => [ 'test' ],
] );
- $this->assertInstanceOf( 'BotPassword', $bp );
+ $this->assertInstanceOf( BotPassword::class, $bp );
$this->assertFalse( $bp->isSaved() );
$this->assertSame( 43, $bp->getUserCentralId() );
$this->assertSame( 'DoesNotExist2', $bp->getAppId() );
'centralId' => 45,
'appId' => 'DoesNotExist'
] );
- $this->assertInstanceOf( 'BotPassword', $bp );
+ $this->assertInstanceOf( BotPassword::class, $bp );
$this->assertFalse( $bp->isSaved() );
$this->assertSame( 45, $bp->getUserCentralId() );
$this->assertSame( 'DoesNotExist', $bp->getAppId() );
'user' => $user,
'appId' => 'BotPassword'
] );
- $this->assertInstanceOf( 'BotPassword', $bp );
+ $this->assertInstanceOf( BotPassword::class, $bp );
$this->assertFalse( $bp->isSaved() );
$this->assertNull( BotPassword::newUnsaved( [
$bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
$password = $bp->getPassword();
- $this->assertInstanceOf( 'Password', $password );
+ $this->assertInstanceOf( Password::class, $password );
$this->assertTrue( $password->equals( 'foobaz' ) );
$bp->centralId = 44;
$password = $bp->getPassword();
- $this->assertInstanceOf( 'InvalidPassword', $password );
+ $this->assertInstanceOf( InvalidPassword::class, $password );
$bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
$dbw = wfGetDB( DB_MASTER );
__METHOD__
);
$password = $bp->getPassword();
- $this->assertInstanceOf( 'InvalidPassword', $password );
+ $this->assertInstanceOf( InvalidPassword::class, $password );
}
public function testInvalidateAllPasswordsForUser() {
$bp1 = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
$bp2 = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 43, 'BotPassword' ) );
- $this->assertNotInstanceOf( 'InvalidPassword', $bp1->getPassword(), 'sanity check' );
- $this->assertNotInstanceOf( 'InvalidPassword', $bp2->getPassword(), 'sanity check' );
+ $this->assertNotInstanceOf( InvalidPassword::class, $bp1->getPassword(), 'sanity check' );
+ $this->assertNotInstanceOf( InvalidPassword::class, $bp2->getPassword(), 'sanity check' );
BotPassword::invalidateAllPasswordsForUser( $this->testUserName );
- $this->assertInstanceOf( 'InvalidPassword', $bp1->getPassword() );
- $this->assertNotInstanceOf( 'InvalidPassword', $bp2->getPassword() );
+ $this->assertInstanceOf( InvalidPassword::class, $bp1->getPassword() );
+ $this->assertNotInstanceOf( InvalidPassword::class, $bp2->getPassword() );
$bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
- $this->assertInstanceOf( 'InvalidPassword', $bp->getPassword() );
+ $this->assertInstanceOf( InvalidPassword::class, $bp->getPassword() );
}
public function testRemoveAllPasswordsForUser() {
);
// Failed restriction
- $request = $this->getMockBuilder( 'FauxRequest' )
+ $request = $this->getMockBuilder( FauxRequest::class )
->setMethods( [ 'getIP' ] )
->getMock();
$request->expects( $this->any() )->method( 'getIP' )
'sanity check'
);
$status = BotPassword::login( "{$this->testUserName}@BotPassword", 'foobaz', $request );
- $this->assertInstanceOf( 'Status', $status );
+ $this->assertInstanceOf( Status::class, $status );
$this->assertTrue( $status->isGood() );
$session = $status->getValue();
$this->assertInstanceOf( MediaWiki\Session\Session::class, $session );
$this->assertFalse( $bp->save( 'update', $passwordHash ) );
$this->assertTrue( $bp->save( 'insert', $passwordHash ) );
$bp2 = BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST );
- $this->assertInstanceOf( 'BotPassword', $bp2 );
+ $this->assertInstanceOf( BotPassword::class, $bp2 );
$this->assertEquals( $bp->getUserCentralId(), $bp2->getUserCentralId() );
$this->assertEquals( $bp->getAppId(), $bp2->getAppId() );
$this->assertEquals( $bp->getToken(), $bp2->getToken() );
$this->assertEquals( $bp->getGrants(), $bp2->getGrants() );
$pw = TestingAccessWrapper::newFromObject( $bp )->getPassword();
if ( $password === null ) {
- $this->assertInstanceOf( 'InvalidPassword', $pw );
+ $this->assertInstanceOf( InvalidPassword::class, $pw );
} else {
$this->assertTrue( $pw->equals( $password ) );
}
$this->assertTrue( $bp->save( 'update' ) );
$this->assertNotEquals( $token, $bp->getToken() );
$bp2 = BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST );
- $this->assertInstanceOf( 'BotPassword', $bp2 );
+ $this->assertInstanceOf( BotPassword::class, $bp2 );
$this->assertEquals( $bp->getToken(), $bp2->getToken() );
$pw = TestingAccessWrapper::newFromObject( $bp )->getPassword();
if ( $password === null ) {
- $this->assertInstanceOf( 'InvalidPassword', $pw );
+ $this->assertInstanceOf( InvalidPassword::class, $pw );
} else {
$this->assertTrue( $pw->equals( $password ) );
}
class CentralIdLookupTest extends MediaWikiTestCase {
public function testFactory() {
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$this->setMwGlobals( [
'wgCentralIdLookupProviders' => [
- 'local' => [ 'class' => 'LocalIdLookup' ],
- 'local2' => [ 'class' => 'LocalIdLookup' ],
+ 'local' => [ 'class' => LocalIdLookup::class ],
+ 'local2' => [ 'class' => LocalIdLookup::class ],
'mock' => [ 'factory' => function () use ( $mock ) {
return $mock;
} ],
- 'bad' => [ 'class' => 'stdClass' ],
+ 'bad' => [ 'class' => stdClass::class ],
],
'wgCentralIdLookupProvider' => 'mock',
] );
$local = CentralIdLookup::factory( 'local' );
$this->assertNotSame( $mock, $local );
- $this->assertInstanceOf( 'LocalIdLookup', $local );
+ $this->assertInstanceOf( LocalIdLookup::class, $local );
$this->assertSame( $local, CentralIdLookup::factory( 'local' ) );
$this->assertSame( 'local', $local->getProviderId() );
$local2 = CentralIdLookup::factory( 'local2' );
$this->assertNotSame( $local, $local2 );
- $this->assertInstanceOf( 'LocalIdLookup', $local2 );
+ $this->assertInstanceOf( LocalIdLookup::class, $local2 );
$this->assertSame( 'local2', $local2->getProviderId() );
$this->assertNull( CentralIdLookup::factory( 'unconfigured' ) );
public function testCheckAudience() {
$mock = TestingAccessWrapper::newFromObject(
- $this->getMockForAbstractClass( 'CentralIdLookup' )
+ $this->getMockForAbstractClass( CentralIdLookup::class )
);
$user = static::getTestSysop()->getUser();
$this->assertSame( $user, $mock->checkAudience( $user ) );
$user = $mock->checkAudience( CentralIdLookup::AUDIENCE_PUBLIC );
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( User::class, $user );
$this->assertSame( 0, $user->getId() );
$this->assertNull( $mock->checkAudience( CentralIdLookup::AUDIENCE_RAW ) );
}
public function testNameFromCentralId() {
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock->expects( $this->once() )->method( 'lookupCentralIds' )
->with(
$this->equalTo( [ 15 => null ] ),
* @param bool $succeeds
*/
public function testLocalUserFromCentralId( $name, $succeeds ) {
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock->expects( $this->any() )->method( 'isAttached' )
->will( $this->returnValue( true ) );
$mock->expects( $this->once() )->method( 'lookupCentralIds' )
42, CentralIdLookup::AUDIENCE_RAW, CentralIdLookup::READ_LATEST
);
if ( $succeeds ) {
- $this->assertInstanceOf( 'User', $user );
+ $this->assertInstanceOf( User::class, $user );
$this->assertSame( $name, $user->getName() );
} else {
$this->assertNull( $user );
}
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock->expects( $this->any() )->method( 'isAttached' )
->will( $this->returnValue( false ) );
$mock->expects( $this->once() )->method( 'lookupCentralIds' )
}
public function testCentralIdFromName() {
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock->expects( $this->once() )->method( 'lookupUserNames' )
->with(
$this->equalTo( [ 'FooBar' => 0 ] ),
}
public function testCentralIdFromLocalUser() {
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock->expects( $this->any() )->method( 'isAttached' )
->will( $this->returnValue( true ) );
$mock->expects( $this->once() )->method( 'lookupUserNames' )
)
);
- $mock = $this->getMockForAbstractClass( 'CentralIdLookup' );
+ $mock = $this->getMockForAbstractClass( CentralIdLookup::class );
$mock->expects( $this->any() )->method( 'isAttached' )
->will( $this->returnValue( false ) );
$mock->expects( $this->never() )->method( 'lookupUserNames' );
class UserArrayFromResultTest extends MediaWikiTestCase {
private function getMockResultWrapper( $row = null, $numRows = 1 ) {
- $resultWrapper = $this->getMockBuilder( 'ResultWrapper' )
+ $resultWrapper = $this->getMockBuilder( Wikimedia\Rdbms\ResultWrapper::class )
->disableOriginalConstructor();
$resultWrapper = $resultWrapper->getMock();
$this->assertEquals( $resultWrapper, $object->res );
$this->assertSame( 0, $object->key );
- $this->assertInstanceOf( 'User', $object->current );
+ $this->assertInstanceOf( User::class, $object->current );
$this->assertEquals( $username, $object->current->mName );
}
$username = 'addshore';
$userRow = $this->getRowWithUsername( $username );
$object = $this->getUserArrayFromResult( $this->getMockResultWrapper( $userRow ) );
- $this->assertInstanceOf( 'User', $object->current() );
+ $this->assertInstanceOf( User::class, $object->current() );
$this->assertEquals( $username, $object->current()->mName );
}
$this->assertContains( 'nukeworld', $rights );
// Add a Session that limits rights
- $mock = $this->getMockBuilder( stdclass::class )
+ $mock = $this->getMockBuilder( stdClass::class )
->setMethods( [ 'getAllowedUserRights', 'deregisterSession', 'getSessionId' ] )
->getMock();
$mock->method( 'getAllowedUserRights' )->willReturn( [ 'test', 'writetest' ] );
protected function mockDb() {
// @TODO: mock from Database
// FIXME: the constructor normally sets mAtomicLevels and mSrvCache
- $databaseMysql = $this->getMockBuilder( 'DatabaseMysqli' )
+ $databaseMysql = $this->getMockBuilder( Wikimedia\Rdbms\DatabaseMysqli::class )
->disableOriginalConstructor()
->getMock();
$databaseMysql->expects( $this->any() )
*/
public function testNewDefault() {
$ret = MWRestrictions::newDefault();
- $this->assertInstanceOf( 'MWRestrictions', $ret );
+ $this->assertInstanceOf( MWRestrictions::class, $ret );
$this->assertSame(
'{"IPAddresses":["0.0.0.0/0","::/0"]}',
$ret->toJson()
public function testArray( $data, $expect ) {
if ( $expect === true ) {
$ret = MWRestrictions::newFromArray( $data );
- $this->assertInstanceOf( 'MWRestrictions', $ret );
+ $this->assertInstanceOf( MWRestrictions::class, $ret );
$this->assertSame( $data, $ret->toArray() );
} else {
try {
public function testJson( $json, $expect ) {
if ( is_array( $expect ) ) {
$ret = MWRestrictions::newFromJson( $json );
- $this->assertInstanceOf( 'MWRestrictions', $ret );
+ $this->assertInstanceOf( MWRestrictions::class, $ret );
$this->assertSame( $expect, $ret->toArray() );
$this->assertSame( $json, $ret->toJson( false ) );
public function provideCheck() {
$ret = [];
- $mockBuilder = $this->getMockBuilder( 'FauxRequest' )
+ $mockBuilder = $this->getMockBuilder( FauxRequest::class )
->setMethods( [ 'getIP' ] );
foreach ( self::provideCheckIP() as $checkIP ) {
* @covers UIDGenerator::newTimestampedUID88
*/
public function testTimestampedUID( $method, $digitlen, $bits, $tbits, $hostbits ) {
- $id = call_user_func( [ 'UIDGenerator', $method ] );
+ $id = call_user_func( [ UIDGenerator::class, $method ] );
$this->assertEquals( true, ctype_digit( $id ), "UID made of digit characters" );
$this->assertLessThanOrEqual( $digitlen, strlen( $id ),
"UID has the right number of digits" );
$ids = [];
for ( $i = 0; $i < 300; $i++ ) {
- $ids[] = call_user_func( [ 'UIDGenerator', $method ] );
+ $ids[] = call_user_func( [ UIDGenerator::class, $method ] );
}
$lastId = array_shift( $ids );
$this->getMockNonAnonUserWithId( 1 ),
new TitleValue( 0, 'SomeDbKey' )
);
- $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+ $this->assertInstanceOf( WatchedItem::class, $watchedItem );
$this->assertEquals( 1, $watchedItem->getUser()->getId() );
$this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
$this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
$this->getMockNonAnonUserWithId( 1 ),
new TitleValue( 0, 'SomeDbKey' )
);
- $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+ $this->assertInstanceOf( WatchedItem::class, $watchedItem );
$this->assertEquals( 1, $watchedItem->getUser()->getId() );
$this->assertEquals( 'SomeDbKey', $watchedItem->getLinkTarget()->getDBkey() );
$this->assertEquals( 0, $watchedItem->getLinkTarget()->getNamespace() );
$this->assertInternalType( 'array', $watchedItems );
$this->assertCount( 2, $watchedItems );
foreach ( $watchedItems as $watchedItem ) {
- $this->assertInstanceOf( 'WatchedItem', $watchedItem );
+ $this->assertInstanceOf( WatchedItem::class, $watchedItem );
}
$this->assertEquals(
new WatchedItem( $user, new TitleValue( 0, 'Foo1' ), '20151212010101' ),
$this->getMockReadOnlyMode()
);
- $this->setExpectedException( 'InvalidArgumentException' );
+ $this->setExpectedException( InvalidArgumentException::class );
$store->getWatchedItemsForUser(
$this->getMockNonAnonUserWithId( 1 ),
[ 'sort' => 'foo' ]
];
// The mock itself
- $prefetchMock = $this->getMockBuilder( 'BaseDump' )
+ $prefetchMock = $this->getMockBuilder( BaseDump::class )
->setMethods( [ 'prefetch' ] )
->disableOriginalConstructor()
->getMock();
*/
private function checkMessage( $msg, $what ) {
$msg = ApiBase::makeMessage( $msg, self::getMain()->getContext() );
- $this->assertInstanceOf( 'Message', $msg, "$what message" );
+ $this->assertInstanceOf( Message::class, $msg, "$what message" );
$this->assertTrue( $msg->exists(), "$what message {$msg->getKey()} exists" );
}
$tmpGlobals['wgStylePath'] = '/skins';
$tmpGlobals['wgThumbnailScriptPath'] = false;
$tmpGlobals['wgLocalFileRepo'] = [
- 'class' => 'LocalRepo',
+ 'class' => LocalRepo::class,
'name' => 'local',
'url' => 'http://example.com/images',
'hashLevels' => 2,
$logger2 = LoggerFactory::getInstance( 'foo' );
$this->assertNotSame( $logger1, $logger2 );
- $this->assertInstanceOf( '\Psr\Log\LoggerInterface', $logger2 );
+ $this->assertInstanceOf( \Psr\Log\LoggerInterface::class, $logger2 );
}
/**
* @return void
*/
function wfThumbErrorText( $status, $msgText ) {
- wfThumbError( $status, htmlspecialchars( $msgText ) );
+ wfThumbError( $status, htmlspecialchars( $msgText, ENT_NOQUOTES ) );
}
/**
if ( $wgShowHostnames ) {
header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() );
$url = htmlspecialchars(
- isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : ''
+ isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '',
+ ENT_NOQUOTES
);
- $hostname = htmlspecialchars( wfHostname() );
+ $hostname = htmlspecialchars( wfHostname(), ENT_NOQUOTES );
$debug = "<!-- $url -->\n<!-- $hostname -->\n";
} else {
$debug = '';