* DB_SLAVE is deprecated. DB_REPLICA should be used instead.
* wfUsePHP() is deprecated.
* wfFixSessionID() was removed.
+* wfShellExec() and related functions are deprecated, use Shell::command().
== Compatibility ==
MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
'MediaWiki\\MediaWikiServices' => __DIR__ . '/includes/MediaWikiServices.php',
+ 'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php',
'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php',
'MediaWiki\\Services\\CannotReplaceActiveServiceException' => __DIR__ . '/includes/services/CannotReplaceActiveServiceException.php',
'MediaWiki\\Services\\ContainerDisabledException' => __DIR__ . '/includes/services/ContainerDisabledException.php',
'MediaWiki\\Session\\SessionProviderInterface' => __DIR__ . '/includes/session/SessionProviderInterface.php',
'MediaWiki\\Session\\Token' => __DIR__ . '/includes/session/Token.php',
'MediaWiki\\Session\\UserInfo' => __DIR__ . '/includes/session/UserInfo.php',
+ 'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
+ 'MediaWiki\\Shell\\Command' => __DIR__ . '/includes/shell/Command.php',
+ 'MediaWiki\\Shell\\Result' => __DIR__ . '/includes/shell/Result.php',
+ 'MediaWiki\\Shell\\Shell' => __DIR__ . '/includes/shell/Shell.php',
'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
'MediaWiki\\Tidy\\BalanceActiveFormattingElements' => __DIR__ . '/includes/tidy/Balancer.php',
'MediaWiki\\Tidy\\BalanceElement' => __DIR__ . '/includes/tidy/Balancer.php',
"jakub-onderka/php-parallel-lint": "0.9.2",
"jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
"justinrainbow/json-schema": "~5.2",
- "mediawiki/mediawiki-codesniffer": "0.11.0",
+ "mediawiki/mediawiki-codesniffer": "0.12.0",
"monolog/monolog": "~1.22.1",
"nikic/php-parser": "2.1.0",
"nmred/kafka-php": "0.1.5",
/**
* Load up our object with user supplied data
+ * @param Config $config
*/
function __construct( Config $config ) {
$this->config = $config;
* which in turn gives User::getName().
*
* @param string|int|User|null $target
- * @return array( User|String|null, Block::TYPE_ constant|null )
+ * @return array [ User|String|null, Block::TYPE_ constant|null ]
*/
public static function parseTarget( $target ) {
# We may have been through this before
* Get the target and target type for this particular Block. Note that for autoblocks,
* this returns the unredacted name; frontend functions need to call $block->getRedactedName()
* in this situation.
- * @return array( User|String, Block::TYPE_ constant )
+ * @return array [ User|String, Block::TYPE_ constant ]
* @todo FIXME: This should be an integral part of the Block member variables
*/
public function getTargetAndType() {
/**
* @see validateBounds()
+ * @param string $name
+ * @param int $min
+ * @param int $max
*/
public function validateIntBounds( $name, $min, $max ) {
$this->validateBounds( $name, $min, $max );
use Liuggio\StatsdClient\Sender\SocketSender;
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\ProcOpenError;
use MediaWiki\Session\SessionManager;
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
use Wikimedia\ScopedCallback;
use Wikimedia\Rdbms\DBReplicationWaitError;
* @param string $args,... strings to escape and glue together,
* or a single array of strings parameter
* @return string
+ * @deprecated since 1.30 use MediaWiki\Shell::escape()
*/
function wfEscapeShellArg( /*...*/ ) {
$args = func_get_args();
- if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
- // If only one argument has been passed, and that argument is an array,
- // treat it as a list of arguments
- $args = reset( $args );
- }
-
- $first = true;
- $retVal = '';
- foreach ( $args as $arg ) {
- if ( !$first ) {
- $retVal .= ' ';
- } else {
- $first = false;
- }
-
- if ( wfIsWindows() ) {
- // Escaping for an MSVC-style command line parser and CMD.EXE
- // @codingStandardsIgnoreStart For long URLs
- // Refs:
- // * https://web.archive.org/web/20020708081031/http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
- // * https://technet.microsoft.com/en-us/library/cc723564.aspx
- // * T15518
- // * CR r63214
- // Double the backslashes before any double quotes. Escape the double quotes.
- // @codingStandardsIgnoreEnd
- $tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE );
- $arg = '';
- $iteration = 0;
- foreach ( $tokens as $token ) {
- if ( $iteration % 2 == 1 ) {
- // Delimiter, a double quote preceded by zero or more slashes
- $arg .= str_replace( '\\', '\\\\', substr( $token, 0, -1 ) ) . '\\"';
- } elseif ( $iteration % 4 == 2 ) {
- // ^ in $token will be outside quotes, need to be escaped
- $arg .= str_replace( '^', '^^', $token );
- } else { // $iteration % 4 == 0
- // ^ in $token will appear inside double quotes, so leave as is
- $arg .= $token;
- }
- $iteration++;
- }
- // Double the backslashes before the end of the string, because
- // we will soon add a quote
- $m = [];
- if ( preg_match( '/^(.*?)(\\\\+)$/', $arg, $m ) ) {
- $arg = $m[1] . str_replace( '\\', '\\\\', $m[2] );
- }
- // Add surrounding quotes
- $retVal .= '"' . $arg . '"';
- } else {
- $retVal .= escapeshellarg( $arg );
- }
- }
- return $retVal;
+ return call_user_func_array( Shell::class . '::escape', $args );
}
/**
*
* @return bool|string False or 'disabled'
* @since 1.22
+ * @deprecated since 1.30 use MediaWiki\Shell::isDisabled()
*/
function wfShellExecDisabled() {
- static $disabled = null;
- if ( is_null( $disabled ) ) {
- if ( !function_exists( 'proc_open' ) ) {
- wfDebug( "proc_open() is disabled\n" );
- $disabled = 'disabled';
- } else {
- $disabled = false;
- }
- }
- return $disabled;
+ return Shell::isDisabled() ? 'disabled' : false;
}
/**
* method. Set this to a string for an alternative method to profile from
*
* @return string Collected stdout as a string
+ * @deprecated since 1.30 use class MediaWiki\Shell\Shell
*/
function wfShellExec( $cmd, &$retval = null, $environ = [],
$limits = [], $options = []
) {
- global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
- $wgMaxShellWallClockTime, $wgShellCgroup;
-
- $disabled = wfShellExecDisabled();
- if ( $disabled ) {
+ if ( Shell::isDisabled() ) {
$retval = 1;
+ // Backwards compatibility be upon us...
return 'Unable to run external programs, proc_open() is disabled.';
}
- $includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
- $profileMethod = isset( $options['profileMethod'] ) ? $options['profileMethod'] : wfGetCaller();
-
- $envcmd = '';
- foreach ( $environ as $k => $v ) {
- if ( wfIsWindows() ) {
- /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves
- * appear in the environment variable, so we must use carat escaping as documented in
- * https://technet.microsoft.com/en-us/library/cc723564.aspx
- * Note however that the quote isn't listed there, but is needed, and the parentheses
- * are listed there but doesn't appear to need it.
- */
- $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . '&& ';
- } else {
- /* Assume this is a POSIX shell, thus required to accept variable assignments before the command
- * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01
- */
- $envcmd .= "$k=" . escapeshellarg( $v ) . ' ';
- }
- }
if ( is_array( $cmd ) ) {
- $cmd = wfEscapeShellArg( $cmd );
+ $cmd = Shell::escape( $cmd );
}
- $cmd = $envcmd . $cmd;
+ $includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
+ $profileMethod = isset( $options['profileMethod'] ) ? $options['profileMethod'] : wfGetCaller();
- $useLogPipe = false;
- if ( is_executable( '/bin/bash' ) ) {
- $time = intval( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
- if ( isset( $limits['walltime'] ) ) {
- $wallTime = intval( $limits['walltime'] );
- } elseif ( isset( $limits['time'] ) ) {
- $wallTime = $time;
- } else {
- $wallTime = intval( $wgMaxShellWallClockTime );
- }
- $mem = intval( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
- $filesize = intval( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
-
- if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
- $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
- escapeshellarg( $cmd ) . ' ' .
- escapeshellarg(
- "MW_INCLUDE_STDERR=" . ( $includeStderr ? '1' : '' ) . ';' .
- "MW_CPU_LIMIT=$time; " .
- 'MW_CGROUP=' . escapeshellarg( $wgShellCgroup ) . '; ' .
- "MW_MEM_LIMIT=$mem; " .
- "MW_FILE_SIZE_LIMIT=$filesize; " .
- "MW_WALL_CLOCK_LIMIT=$wallTime; " .
- "MW_USE_LOG_PIPE=yes"
- );
- $useLogPipe = true;
- } elseif ( $includeStderr ) {
- $cmd .= ' 2>&1';
- }
- } elseif ( $includeStderr ) {
- $cmd .= ' 2>&1';
- }
- wfDebug( "wfShellExec: $cmd\n" );
-
- // Don't try to execute commands that exceed Linux's MAX_ARG_STRLEN.
- // Other platforms may be more accomodating, but we don't want to be
- // accomodating, because very long commands probably include user
- // input. See T129506.
- if ( strlen( $cmd ) > SHELL_MAX_ARG_STRLEN ) {
- throw new Exception( __METHOD__ .
- '(): total length of $cmd must not exceed SHELL_MAX_ARG_STRLEN' );
- }
-
- $desc = [
- 0 => [ 'file', 'php://stdin', 'r' ],
- 1 => [ 'pipe', 'w' ],
- 2 => [ 'file', 'php://stderr', 'w' ] ];
- if ( $useLogPipe ) {
- $desc[3] = [ 'pipe', 'w' ];
- }
- $pipes = null;
- $scoped = Profiler::instance()->scopedProfileIn( __FUNCTION__ . '-' . $profileMethod );
- $proc = proc_open( $cmd, $desc, $pipes );
- if ( !$proc ) {
- wfDebugLog( 'exec', "proc_open() failed: $cmd" );
+ try {
+ $result = Shell::command( [] )
+ ->unsafeParams( (array)$cmd )
+ ->environment( $environ )
+ ->limits( $limits )
+ ->includeStderr( $includeStderr )
+ ->profileMethod( $profileMethod )
+ ->execute();
+ } catch ( ProcOpenError $ex ) {
$retval = -1;
return '';
}
- $outBuffer = $logBuffer = '';
- $emptyArray = [];
- $status = false;
- $logMsg = false;
-
- /* According to the documentation, it is possible for stream_select()
- * to fail due to EINTR. I haven't managed to induce this in testing
- * despite sending various signals. If it did happen, the error
- * message would take the form:
- *
- * stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
- *
- * where [4] is the value of the macro EINTR and "Interrupted system
- * call" is string which according to the Linux manual is "possibly"
- * localised according to LC_MESSAGES.
- */
- $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4;
- $eintrMessage = "stream_select(): unable to select [$eintr]";
-
- $running = true;
- $timeout = null;
- $numReadyPipes = 0;
-
- while ( $running === true || $numReadyPipes !== 0 ) {
- if ( $running ) {
- $status = proc_get_status( $proc );
- // If the process has terminated, switch to nonblocking selects
- // for getting any data still waiting to be read.
- if ( !$status['running'] ) {
- $running = false;
- $timeout = 0;
- }
- }
-
- $readyPipes = $pipes;
-
- // Clear last error
- // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
- @trigger_error( '' );
- $numReadyPipes = @stream_select( $readyPipes, $emptyArray, $emptyArray, $timeout );
- if ( $numReadyPipes === false ) {
- // @codingStandardsIgnoreEnd
- $error = error_get_last();
- if ( strncmp( $error['message'], $eintrMessage, strlen( $eintrMessage ) ) == 0 ) {
- continue;
- } else {
- trigger_error( $error['message'], E_USER_WARNING );
- $logMsg = $error['message'];
- break;
- }
- }
- foreach ( $readyPipes as $fd => $pipe ) {
- $block = fread( $pipe, 65536 );
- if ( $block === '' ) {
- // End of file
- fclose( $pipes[$fd] );
- unset( $pipes[$fd] );
- if ( !$pipes ) {
- break 2;
- }
- } elseif ( $block === false ) {
- // Read error
- $logMsg = "Error reading from pipe";
- break 2;
- } elseif ( $fd == 1 ) {
- // From stdout
- $outBuffer .= $block;
- } elseif ( $fd == 3 ) {
- // From log FD
- $logBuffer .= $block;
- if ( strpos( $block, "\n" ) !== false ) {
- $lines = explode( "\n", $logBuffer );
- $logBuffer = array_pop( $lines );
- foreach ( $lines as $line ) {
- wfDebugLog( 'exec', $line );
- }
- }
- }
- }
- }
-
- foreach ( $pipes as $pipe ) {
- fclose( $pipe );
- }
-
- // Use the status previously collected if possible, since proc_get_status()
- // just calls waitpid() which will not return anything useful the second time.
- if ( $running ) {
- $status = proc_get_status( $proc );
- }
-
- if ( $logMsg !== false ) {
- // Read/select error
- $retval = -1;
- proc_close( $proc );
- } elseif ( $status['signaled'] ) {
- $logMsg = "Exited with signal {$status['termsig']}";
- $retval = 128 + $status['termsig'];
- proc_close( $proc );
- } else {
- if ( $status['running'] ) {
- $retval = proc_close( $proc );
- } else {
- $retval = $status['exitcode'];
- proc_close( $proc );
- }
- if ( $retval == 127 ) {
- $logMsg = "Possibly missing executable file";
- } elseif ( $retval >= 129 && $retval <= 192 ) {
- $logMsg = "Probably exited with signal " . ( $retval - 128 );
- }
- }
- if ( $logMsg !== false ) {
- wfDebugLog( 'exec', "$logMsg: $cmd" );
- }
+ $retval = $result->getExitCode();
- return $outBuffer;
+ return $result->getStdout();
}
/**
* @param array $limits Optional array with limits(filesize, memory, time, walltime)
* this overwrites the global wgMaxShell* limits.
* @return string Collected stdout and stderr as a string
+ * @deprecated since 1.30 use class MediaWiki\Shell\Shell
*/
function wfShellExecWithStderr( $cmd, &$retval = null, $environ = [], $limits = [] ) {
return wfShellExec( $cmd, $retval, $environ, $limits,
}
$cmd[] = $script;
// Escape each parameter for shell
- return wfEscapeShellArg( array_merge( $cmd, $parameters ) );
+ return Shell::escape( array_merge( $cmd, $parameters ) );
}
/**
fclose( $yourtextFile );
# Check for a conflict
- $cmd = wfEscapeShellArg( $wgDiff3, '-a', '--overlap-only', $mytextName,
+ $cmd = Shell::escape( $wgDiff3, '-a', '--overlap-only', $mytextName,
$oldtextName, $yourtextName );
$handle = popen( $cmd, 'r' );
pclose( $handle );
# Merge differences
- $cmd = wfEscapeShellArg( $wgDiff3, '-a', '-e', '--merge', $mytextName,
+ $cmd = Shell::escape( $wgDiff3, '-a', '-e', '--merge', $mytextName,
$oldtextName, $yourtextName );
$handle = popen( $cmd, 'r' );
$result = '';
fclose( $newtextFile );
// Get the diff of the two files
- $cmd = "$wgDiff " . $params . ' ' . wfEscapeShellArg( $oldtextName, $newtextName );
+ $cmd = "$wgDiff " . $params . ' ' . Shell::escape( $oldtextName, $newtextName );
$h = popen( $cmd, 'r' );
if ( !$h ) {
}
/**
- * {@inheritDoc}
+ * @inheritDoc
*/
public function start() {
if ( $this->procsToStart > 0 ) {
/** @var array Array of elements in "<head>". Parser might add its own headers! */
protected $mHeadItems = [];
+ /** @var array Additional <body> classes; there are also <body> classes from other sources */
+ protected $mAdditionalBodyClasses = [];
+
/** @var array */
protected $mModules = [];
return isset( $this->mHeadItems[$name] );
}
+ /**
+ * Add a class to the <body> element
+ *
+ * @since 1.30
+ * @param string|string[] $classes One or more classes to add
+ */
+ public function addBodyClasses( $classes ) {
+ $this->mAdditionalBodyClasses = array_merge( $this->mAdditionalBodyClasses, (array)$classes );
+ }
+
/**
* @deprecated since 1.28 Obsolete - wgUseETag experiment was removed.
* @param string $tag
}
$age = time() - wfTimestamp( TS_UNIX, $mtime );
- $adaptiveTTL = max( .9 * $age, $minTTL );
+ $adaptiveTTL = max( 0.9 * $age, $minTTL );
$adaptiveTTL = min( $adaptiveTTL, $maxTTL );
$this->lowerCdnMaxage( (int)$adaptiveTTL );
$pieces[] = Html::closeElement( 'head' );
- $bodyClasses = [];
+ $bodyClasses = $this->mAdditionalBodyClasses;
$bodyClasses[] = 'mediawiki';
# Classes for LTR/RTL directionality support
*
* The schema for the data is located at:
* <https://meta.wikimedia.org/wiki/Schema:MediaWikiPingback>
+ * @return bool
*/
public function sendPingback() {
if ( !$this->acquireLock() ) {
* @see self::getLocalURL for the arguments.
* @param array|string $query
* @param string $proto Protocol type to use in URL
- * @return String. A url suitable to use in an HTTP location header.
+ * @return string A url suitable to use in an HTTP location header.
*/
public function getFullUrlForRedirect( $query = '', $proto = PROTO_CURRENT ) {
$target = $this;
* NOTE: Unlike getInternalURL(), the canonical URL includes the fragment
*
* @see self::getLocalURL for the arguments.
+ * @param string $query
+ * @param string|bool $query2
* @return string The URL
* @since 1.18
*/
* Creates a header that can be added to the output.
*
* @param string $header The header text.
+ * @param string $canonicalId
* @return string The HTML.
*/
protected function makeHeader( $header, $canonicalId ) {
}
/**
+ * @param array $data
* @return bool|array True for success, false for didn't-try, array of errors on failure
*/
public function onSubmit( $data ) {
/**
* Mark as internal. This isn't meant to be used by normal api users
+ * @return bool
*/
public function isInternal() {
return true;
/**
* Even if you don't have read rights, we still want your report.
+ * @return bool
*/
public function isReadMode() {
return false;
* Doesn't touch db, so max lag should be rather irrelavent.
*
* Also, this makes sure that reports aren't lost during lag events.
+ * @return bool
*/
public function shouldCheckMaxLag() {
return false;
/**
* Overridden to honor $this->forceDefaultParams(), if applicable
+ * @inheritDoc
* @since 1.26
*/
protected function getParameterFromSettings( $paramName, $paramSettings, $parseLimit ) {
* This class expects the result data to be in a custom format set by self::setResult()
* $result['_feed'] - an instance of one of the $wgFeedClasses classes
* $result['_feeditems'] - an array of FeedItem instances
+ * @param bool $unused
*/
public function initPrinter( $unused = false ) {
parent::initPrinter( $unused );
];
}
- /** @see ApiBase::getExamplesMessages() */
+ /** @inheritDoc */
protected function getExamplesMessages() {
return [
'action=help'
* @file
*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
/**
* API interface for page purging
$r['linkupdate'] = true;
if ( $enableParserCache ) {
- $pcache = ParserCache::singleton();
+ $pcache = MediaWikiServices::getInstance()->getParserCache();
$pcache->save( $p_result, $page, $popts );
}
}
* as the first, regardless of the values of $db and $groups
* @param string $name Name to assign to the database connection
* @param int $db One of the DB_* constants
- * @param array $groups Query groups
+ * @param string|string[] $groups Query groups
* @return IDatabase
*/
public function getNamedDB( $name, $db, $groups ) {
return $this->mQueryModule;
}
- /**
- * @see ApiBase::getParent()
- */
+ /** @inheritDoc */
public function getParent() {
return $this->getQuery();
}
* See ApiQuery::getNamedDB() for more information
* @param string $name Name to assign to the database connection
* @param int $db One of the DB_* constants
- * @param array $groups Query groups
+ * @param string|string[] $groups Query groups
* @return IDatabase
*/
public function selectNamedDB( $name, $db, $groups ) {
}
}
- /**
- * @see ApiBase::getHelpFlags()
- *
- * Corresponding messages: api-help-flag-generator
- */
+ /** @inheritDoc */
protected function getHelpFlags() {
+ // Corresponding messages: api-help-flag-generator
$flags = parent::getHelpFlags();
$flags[] = 'generator';
return $flags;
*/
class ApiQueryWatchlist extends ApiQueryGeneratorBase {
+ /** @var CommentStore */
private $commentStore;
public function __construct( ApiQuery $query, $moduleName ) {
private function extractOutputData( WatchedItem $watchedItem, array $recentChangeInfo ) {
/* Determine the title of the page that has been changed. */
- $title = Title::makeTitle(
- $watchedItem->getLinkTarget()->getNamespace(),
- $watchedItem->getLinkTarget()->getDBkey()
- );
+ $title = Title::newFromLinkTarget( $watchedItem->getLinkTarget() );
$user = $this->getUser();
/* Our output data. */
}
/**
- * @returns ApiMessage
+ * @return ApiMessage
*/
private function getApiMessage() {
$errors = $this->status->getErrorsByType( 'error' );
"apihelp-feedcontributions-summary": "返回用户贡献纲要。",
"apihelp-feedcontributions-param-feedformat": "纲要的格式。",
"apihelp-feedcontributions-param-user": "获取哪些用户的贡献。",
- "apihelp-feedcontributions-param-namespace": "è¿\87滤å\93ªäº\9bå\91½å\90\8d空间的贡献。",
+ "apihelp-feedcontributions-param-namespace": "è¿\87滤å\93ªäº\9bå\90\8då\97空间的贡献。",
"apihelp-feedcontributions-param-year": "起始年份(及更早)。",
"apihelp-feedcontributions-param-month": "起始月份(及更早)。",
"apihelp-feedcontributions-param-tagfilter": "过滤有这些标签的贡献者。",
"apihelp-feedcontributions-example-simple": "返回用户<kbd>Example</kbd>的贡献。",
"apihelp-feedrecentchanges-summary": "返回最近更改的摘要。",
"apihelp-feedrecentchanges-param-feedformat": "纲要的格式。",
- "apihelp-feedrecentchanges-param-namespace": "ç\94¨äº\8eé\99\90å\88¶ç»\93æ\9e\9cç\9a\84å\91½å\90\8d空间。",
- "apihelp-feedrecentchanges-param-invert": "é\99¤æ\89\80é\80\89å®\9aè\80\85å¤\96ç\9a\84æ\89\80æ\9c\89å\91½å\90\8d空间。",
- "apihelp-feedrecentchanges-param-associated": "å\8c\85æ\8b¬ç\9b¸å\85³ç\9a\84å\91½å\90\8d空间(讨论页或主要)。",
+ "apihelp-feedrecentchanges-param-namespace": "ç\94¨äº\8eé\99\90å\88¶ç»\93æ\9e\9cç\9a\84å\90\8då\97空间。",
+ "apihelp-feedrecentchanges-param-invert": "é\99¤æ\89\80é\80\89å®\9aè\80\85å¤\96ç\9a\84æ\89\80æ\9c\89å\90\8då\97空间。",
+ "apihelp-feedrecentchanges-param-associated": "å\8c\85æ\8b¬ç\9b¸å\85³ç\9a\84å\90\8då\97空间(讨论页或主要)。",
"apihelp-feedrecentchanges-param-days": "用于限制结果的天数。",
"apihelp-feedrecentchanges-param-limit": "所要返回结果的最大数目。",
"apihelp-feedrecentchanges-param-from": "显示自那时以来的更改。",
"apihelp-query+protectedtitles-paramvalue-prop-expiry": "添加保护将被提升时的时间戳。",
"apihelp-query+protectedtitles-paramvalue-prop-level": "添加保护级别。",
"apihelp-query+protectedtitles-example-simple": "受保护标题列表。",
- "apihelp-query+protectedtitles-example-generator": "æ\89¾å\88°ä¸»å\91½å\90\8d空间中已保护的标题的链接。",
+ "apihelp-query+protectedtitles-example-generator": "æ\89¾å\88°ä¸»å\90\8då\97空间中已保护的标题的链接。",
"apihelp-query+querypage-summary": "获取由基于QueryPage的特殊页面提供的列表。",
"apihelp-query+querypage-param-page": "特殊页面的名称。注意其区分大小写。",
"apihelp-query+querypage-param-limit": "返回的结果数。",
* structured UI.
*
* This can either be the exact filter, or a new filter that replaces it.
+ * @return bool
*/
public function isFeatureAvailableOnStructuredUi() {
return $this->displaysOnStructuredUi();
}
/**
+ * @param string $index
+ * @return string
* @since 1.16.3
*/
public function getLetterByIndex( $index ) {
}
/**
+ * @param string $index
+ * @return string
* @since 1.16.3
*/
public function getSortKeyByLetterIndex( $index ) {
}
/**
+ * @param string $index
+ * @return string
* @since 1.16.3
*/
public function getFirstLetterCount() {
/**
* Test if a code point is a CJK (Chinese, Japanese, Korean) character
+ * @param int $codepoint
+ * @return bool
* @since 1.16.3
*/
public static function isCjk( $codepoint ) {
* Escape a string for inclusion in a PHP single-quoted string literal.
*
* @param string $string string to be escaped.
- * @return String: escaped string.
+ * @return string escaped string.
* @public
* @deprecated since 1.25, use UtfNormal\Utils directly
*/
}
/**
- * @see Config::get
+ * @inheritDoc
*/
public function get( $name ) {
if ( !$this->has( $name ) ) {
}
/**
- * @see Config::has
+ * @inheritDoc
*/
public function has( $name ) {
return $this->hasWithPrefix( $this->prefix, $name );
}
/**
- * @see Config::get
+ * @inheritDoc
*/
public function get( $name ) {
if ( !$this->has( $name ) ) {
}
/**
- * @see Config::has
+ * @inheritDoc
+ * @since 1.24
*/
public function has( $name ) {
return array_key_exists( $name, $this->settings );
/**
* @see MutableConfig::set
+ * @param string $name
+ * @param mixed $value
*/
public function set( $name, $value ) {
$this->settings[$name] = $value;
}
/**
- * @see Config::get
+ * @inheritDoc
*/
public function get( $name ) {
foreach ( $this->configs as $config ) {
}
/**
- * @see Config::has
+ * @inheritDoc
*/
public function has( $name ) {
foreach ( $this->configs as $config ) {
* @since 1.21
*
* @see Content::getModel
+ * @return string
*/
public function getModel() {
return $this->model_id;
* @since 1.21
*
* @see Content::getContentHandler
+ * @return ContentHandler
*/
public function getContentHandler() {
return ContentHandler::getForContent( $this );
* @since 1.21
*
* @see Content::getDefaultFormat
+ * @return string
*/
public function getDefaultFormat() {
return $this->getContentHandler()->getDefaultFormat();
* @since 1.21
*
* @see Content::getSupportedFormats
+ * @return string[]
*/
public function getSupportedFormats() {
return $this->getContentHandler()->getSupportedFormats();
/**
* @since 1.21
*
+ * @param string|int $sectionId
* @return null
*
* @see Content::getSection
/**
* @since 1.21
*
+ * @param string|int|null|bool $sectionId
+ * @param Content $with
+ * @param string $sectionTitle
* @return null
*
* @see Content::replaceSection
/**
* @since 1.21
*
+ * @param Title $title
+ * @param User $user
+ * @param ParserOptions $popts
* @return Content $this
*
* @see Content::preSaveTransform
/**
* @since 1.21
*
+ * @param string $header
* @return Content $this
*
* @see Content::addSectionHeader
/**
* @since 1.21
*
+ * @param Title $title
+ * @param ParserOptions $popts
+ * @param array $params
* @return Content $this
*
* @see Content::preloadTransform
/**
* @since 1.21
*
+ * @param WikiPage $page
+ * @param int $flags
+ * @param int $parentRevId
+ * @param User $user
* @return Status
*
* @see Content::prepareSave
* @since 1.21
*
* @param WikiPage $page
- * @param ParserOutput $parserOutput
+ * @param ParserOutput|null $parserOutput
*
* @return LinksDeletionUpdate[]
*
protected $writer;
/**
- * @var array $schemas Map from Monolog channel to Avro schema.
+ * @param array $schemas Map from Monolog channel to Avro schema.
* Each schema can be either the JSON string or decoded into PHP
* arrays.
*/
/**
* Get the writer for the named channel
*
- * @var string $channel Name of the schema to fetch
+ * @param string $channel Name of the schema to fetch
* @return \AvroSchema|null
*/
protected function getSchema( $channel ) {
/**
* Get the writer for the named channel
*
- * @var string $channel Name of the schema
+ * @param string $channel Name of the schema
* @return int|null
*/
public function getSchemaRevisionId( $channel ) {
* @see WANObjectCacheRepear
* @param WANObjectCache $cache
* @param TitleValue $t
- * @returns string[]
+ * @return string[]
*/
public function getEventAffectedKeys( WANObjectCache $cache, TitleValue $t ) {
/** @var WikiPage[]|LocalFile[]|User[] $entities */
--- /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
+ */
+
+namespace MediaWiki;
+
+use Exception;
+
+class ProcOpenError extends Exception {
+ public function __construct() {
+ parent::__construct( 'proc_open() returned error!' );
+ }
+}
--- /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
+ */
+
+namespace MediaWiki;
+
+use Exception;
+
+/**
+ * @since 1.30
+ */
+class ShellDisabledError extends Exception {
+ public function __construct() {
+ parent::__construct( 'Unable to run external programs, proc_open() is disabled' );
+ }
+}
class ExternalStoreHttp extends ExternalStoreMedium {
/**
* @see ExternalStoreMedium::fetchFromURL()
+ * @param string $url
+ * @return string|bool
+ * @throws MWException
*/
public function fetchFromURL( $url ) {
return Http::get( $url, [], __METHOD__ );
/**
* @see ExternalStoreMedium::store()
+ * @param string $cluster
+ * @param string $data
+ * @return string|bool
+ * @throws MWException
*/
public function store( $cluster, $data ) {
throw new MWException( "ExternalStoreHttp is read-only and does not support store()." );
* The URL returned is of the form of the form mwstore://backend/container/wiki/id
*
* @see ExternalStoreMedium::fetchFromURL()
+ * @param string $url
+ * @return bool
*/
public function fetchFromURL( $url ) {
$be = FileBackendGroup::singleton()->backendFromPath( $url );
/**
* @see ExternalStoreMedium::store()
+ * @param string $backend
+ * @param string $data
+ * @return string|bool
+ * @throws MWException
*/
public function store( $backend, $data ) {
$be = FileBackendGroup::singleton()->get( $backend );
*
* @param string $function
* @param array $params
+ * @return mixed
*/
protected function translateSrcParams( $function, array $params ) {
$latest = !empty( $params['latest'] );
* @param string $name
* @param int $width
* @param int $height
- * @param array $result Out parameter that will be changed by the function.
+ * @param array &$result
* @param string $otherParams
*
* @return bool
function getCacheFields( $prefix = 'img_' ) {
static $fields = [ 'size', 'width', 'height', 'bits', 'media_type',
'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user',
- 'user_text', 'description' ];
+ 'user_text' ];
static $results = [];
if ( $prefix == '' ) {
foreach ( $fields as $field ) {
$prefixedFields[] = $prefix . $field;
}
+ $prefixedFields += CommentStore::newKey( "{$prefix}description" )->getFields();
$results[$prefix] = $prefixedFields;
}
$this->dataLoaded = true;
$this->extraDataLoaded = true;
+ $this->description = CommentStore::newKey( "{$prefix}description" )
+ // $row is probably using getFields() from self::getCacheFields()
+ ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text;
+
$array = $this->decodeRow( $row, $prefix );
foreach ( $array as $name => $value ) {
*
* This is the case for a couple files on Wikimedia servers where
* the old version is "lost".
+ * @return bool
*/
public function exists() {
$archiveName = $this->getArchiveName();
/**
* Get a FieldLayout (or subclass thereof) to wrap this field in when using OOUI output.
+ * @param string $inputField
+ * @param array $config
* @return OOUI\FieldLayout|OOUI\ActionFieldLayout
*/
protected function getFieldLayoutOOUI( $inputField, $config ) {
return '';
}
+ public function getOOUI( $value ) {
+ $this->tagFilter = ChangeTags::buildTagFilterSelector(
+ $value, true, $this->mParent->getContext() );
+ if ( $this->tagFilter ) {
+ return parent::getOOUI( $value );
+ }
+ return new OOUI\FieldLayout( new OOUI\Widget() );
+ }
+
public function getInputHTML( $value ) {
if ( $this->tagFilter ) {
// we only need the select field, HTMLForm should handle the label
}
return '';
}
+
+ public function getInputOOUI( $value ) {
+ if ( $this->tagFilter ) {
+ // we only need the select field, HTMLForm should handle the label
+ return $this->tagFilter[1];
+ }
+ return '';
+ }
}
/**
* Get a configured MultiHttpClient
* @param array $options
+ * @return MultiHttpClient
*/
public static function createMultiClient( $options = [] ) {
global $wgHTTPConnectTimeout, $wgHTTPTimeout, $wgHTTPProxy;
* so normal methods of handling errors programmatically
* like get_last_error() don't work.
* @internal
+ * @param int $errno
+ * @param string $errstr
*/
public function errorHandler( $errno, $errstr ) {
$n = count( $this->fopenErrors ) + 1;
class InstallerSessionProvider extends SessionProvider {
/**
* Pretend there is a session, to avoid MWCryptRand overhead
+ * @param WebRequest $request
+ * @return SessionInfo
*/
public function provideSessionInfo( WebRequest $request ) {
return new SessionInfo( 1, [
/**
* Yes we will treat your data with great care!
+ * @return bool
*/
public function persistsSessionId() {
return true;
/**
* Sure, you can be whoever you want, as long as you have ID 0
+ * @return bool
*/
public function canChangeUser() {
return true;
* @param string $updatekey
* @param string $patch
* @param bool $fullpath
+ * @return bool
*/
protected function updateSchema( $table, $updatekey, $patch, $fullpath = false ) {
if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
/**
* @param string $s
+ * @param string $escapeChar
* @return string
*/
protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
/**
* Convert a wildcard (as used in LIKE) to a regex
* Slashes are escaped, slash terminators included
+ * @param string $wildcard
+ * @return string
*/
protected function likeToRegex( $wildcard ) {
$r = preg_quote( $wildcard, '/' );
*
* @see getRadioSet
*
+ * @param mixed[] $params
* @return array
*/
public function getRadioElements( $params ) {
/**
* @see JobQueue::ack()
* @param Job $job
+ * @return Job|bool
*/
protected function doAck( Job $job ) {
return $this->mainQueue->doAck( $job );
/**
* @see JobQueue::delete()
+ * @return bool
* @throws MWException
*/
protected function doDelete() {
/**
* @see JobQueueAggregator::notifyQueueEmpty()
+ * @param string $wiki
+ * @param string $type
+ * @return bool
*/
abstract protected function doNotifyQueueEmpty( $wiki, $type );
/**
* @see JobQueueAggregator::notifyQueueNonEmpty()
+ * @param string $wiki
+ * @param string $type
+ * @return bool
*/
abstract protected function doNotifyQueueNonEmpty( $wiki, $type );
if ( $page->getTouched() >= $this->params['rootJobTimestamp'] || $opportunistic ) {
// Cache is suspected to be up-to-date. As long as the cache rev ID matches
// and it reflects the job's triggering change, then it is usable.
- $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
+ $parserOutput = $services->getParserCache()->getDirty( $page, $parserOptions );
if ( !$parserOutput
|| $parserOutput->getCacheRevisionId() != $revision->getId()
|| $parserOutput->getCacheTime() < $skewedTimestamp
&& $parserOutput->isCacheable()
) {
$ctime = wfTimestamp( TS_MW, (int)$start ); // cache time
- ParserCache::singleton()->save(
+ $services->getParserCache()->save(
$parserOutput, $page, $parserOptions, $ctime, $revision->getId()
);
}
* 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range
* 2001:0db8:85a3::7344 Single IP
* @param string $range IP range
- * @return array(string, string)
+ * @return array [ string, string ]
*/
public static function parseRange( $range ) {
// CIDR notation
*
* @param string $key
* @param bool &$success
+ * @return bool
*/
protected function fetchResult( $key, &$success ) {
$success = false;
* @param callable $callable
* @param array $args
* @param int $ttl
+ * @return mixed
*/
public static function call( $callable, array $args = [], $ttl = 3600 ) {
$instance = new self( $callable, $ttl );
/**
* Start xhprof profiler
+ * @return bool
*/
public static function isEnabled() {
return self::$enabled;
/**
* Start xhprof profiler
+ * @param int $flags
+ * @param array $options
+ * @throws Exception
*/
public static function enable( $flags = 0, $options = [] ) {
if ( self::isEnabled() ) {
* The resulting array is left padded with nulls, so a key
* with no parent (eg 'main()') will return [null, 'function'].
*
+ * @param string $key
* @return array
*/
public static function splitKey( $key ) {
return; // invalid storage path
}
$mtime = ConvertibleTimestamp::convert( TS_UNIX, $val['mtime'] );
- $ttl = $this->memCache->adaptiveTTL( $mtime, 7 * 86400, 300, .1 );
+ $ttl = $this->memCache->adaptiveTTL( $mtime, 7 * 86400, 300, 0.1 );
$key = $this->fileCacheKey( $path );
// Set the cache unless it is currently salted.
$this->memCache->set( $key, $val, $ttl );
* @param string $chunk the first 256 bytes of the file
* @param string $proposed the MIME type proposed by the server
*
- * @return Array: map of IE version to detected MIME type
+ * @return array map of IE version to detected MIME type
*/
public function getRealMimesFromData( $fileName, $chunk, $proposed ) {
$types = $this->getMimesFromData( $fileName, $chunk, $proposed );
* @param string $chunk the first 256 bytes of the file
* @param string $proposed the MIME type proposed by the server
*
- * @return Array: map of IE version to detected MIME type
+ * @return array map of IE version to detected MIME type
*/
public function getMimesFromData( $fileName, $chunk, $proposed ) {
$types = [];
$lSince = microtime( true ); // lock timestamp
return new ScopedCallback( function () use ( $key, $lSince, $expiry ) {
- $latency = .050; // latency skew (err towards keeping lock present)
+ $latency = 0.050; // latency skew (err towards keeping lock present)
$age = ( microtime( true ) - $lSince + $latency );
if ( ( $age + $latency ) >= $expiry ) {
$this->logger->warning( "Lock for $key held too long ($age sec)." );
protected function applyDefaultParams( $params ) {
return $params + [
'compress_threshold' => 1500,
- 'connect_timeout' => .5,
+ 'connect_timeout' => 0.5,
'debug' => false
];
}
* @return int Adaptive TTL
* @since 1.28
*/
- public function adaptiveTTL( $mtime, $maxTTL, $minTTL = 30, $factor = .2 ) {
+ public function adaptiveTTL( $mtime, $maxTTL, $minTTL = 30, $factor = 0.2 ) {
if ( is_float( $mtime ) || ctype_digit( $mtime ) ) {
$mtime = (int)$mtime; // handle fractional seconds and string integers
}
/** @var float Seconds */
protected $dbLockThreshold = 3.0;
/** @var float Seconds */
- protected $eventThreshold = .25;
+ protected $eventThreshold = 0.25;
/** @var bool */
protected $silenced = false;
const PING_TTL = 1.0;
const PING_QUERY = 'SELECT 1 AS ping';
- const TINY_WRITE_SEC = .010;
- const SLOW_WRITE_SEC = .500;
+ const TINY_WRITE_SEC = 0.010;
+ const SLOW_WRITE_SEC = 0.500;
const SMALL_WRITE_ROWS = 100;
/** @var string SQL query */
/**
* @param string $s
+ * @param string $escapeChar
* @return string
*/
protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
* we don't want to select everything into memory
*
* @see IDatabase::insertSelect()
+ * @param string $destTable
+ * @param string|array $srcTable
+ * @param array $varMap
+ * @param array $conds
+ * @param string $fname
+ * @param array $insertOptions
+ * @param array $selectOptions
+ * @param array $selectJoinConds
+ * @return bool
*/
protected function nativeInsertSelect( $destTable, $srcTable, $varMap, $conds,
$fname = __METHOD__,
* MS SQL supports more pattern operators than other databases (ex: [,],^)
*
* @param string $s
+ * @param string $escapeChar
* @return string
*/
protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
}
/**
- * @var string $table
- * @var string $field
+ * @param string $table
+ * @param string $field
* @return PostgresField|null
*/
public function fieldInfo( $table, $field ) {
$newWeight = $movAveRatio * $coefficient + ( 1 - $movAveRatio ) * $lastWeight;
// Scale from 10% to 100% of nominal weight
- $weightScales[$i] = max( $newWeight, .10 );
+ $weightScales[$i] = max( $newWeight, 0.10 );
if ( !$conn ) {
$lagTimes[$i] = false;
* and logged in users by sending the current userId of a user
* with each request with a key of "uniques" (or similar).
*
- * @param string|array $key The metric(s) to set.
- * @param float $value The value for the stats.
+ * @param string|array $key The metric(s) to set.
+ * @param float $value The value for the stats.
*
* @return array
*/
'url' => 'http://localhost:8000/',
'prefix' => 'localhost',
'domain' => 'localhost',
+ 'timeout' => null,
'forwardCookies' => false,
'HTTPProxy' => null,
], $params );
// Ensure that the url parameter has a trailing slash.
- $mparams['url'] = preg_replace(
- '#/?$#',
- '/',
- $mparams['url']
- );
+ if ( substr( $mparams['url'], -1 ) !== '/' ) {
+ $mparams['url'] .= '/';
+ }
// Ensure the correct domain format: strip protocol, port,
// and trailing slash if present. This lets us use
// $wgCanonicalServer as a default value, which is very convenient.
* Visual Editor "pretends" the V1 API is like. A previous version of
* ParsoidVirtualRESTService translated these to the "real" Parsoid v1
* API. We now translate these to the "real" Parsoid v3 API.
+ * @param array $req
+ * @param Closure $idGeneratorFunc
+ * @return array
+ * @throws Exception
*/
public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
$parts = explode( '/', $req['url'] );
/**
* Remaps Parsoid v1/v3 requests to RESTBase v1 requests.
+ * @param array $reqs
+ * @param Closure $idGeneratorFunc
+ * @return array
+ * @throws Exception
*/
public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
$result = [];
* NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
* Visual Editor "pretends" the V1 API is like. (See
* ParsoidVirtualRESTService.)
+ * @param array $req
+ * @param Closure $idGeneratorFunc
+ * @return array
+ * @throws Exception
*/
public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
$parts = explode( '/', $req['url'] );
* * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body_only' => true/false )
* * $title is optional
* * $revision is optional
+ * @param array $req
+ * @param Closure $idGeneratorFunc
+ * @return array
+ * @throws Exception
*/
public function onParsoid3Request( array $req, Closure $idGeneratorFunc ) {
$parts = explode( '/', $req['url'] );
/**
* Primary job is to initialize the XMLParser
+ * @param LoggerInterface|null $logger
*/
function __construct( LoggerInterface $logger = null ) {
if ( !function_exists( 'xml_parser_create_ns' ) ) {
/**
* Check if this instance supports using this class
+ * @return bool
*/
public static function isSupported() {
return function_exists( 'xml_parser_create_ns' ) && class_exists( 'XMLReader' );
/**
* Must use "im" for XCF
*
+ * @param string $dstPath
+ * @param bool $checkDstPath
* @return string
*/
protected function getScalerType( $dstPath, $checkDstPath = true ) {
# Allow frames by default
$outputPage->allowClickjacking();
- $parserCache = ParserCache::singleton();
+ $parserCache = MediaWikiServices::getInstance()->getParserCache();
$parserOptions = $this->getParserOptions();
# Render printable version, use printable version cache
* @todo Move this UI stuff somewhere else
*
* @see ContentHandler::getActionOverrides
+ * @return array
*/
public function getActionOverrides() {
return $this->getContentHandler()->getActionOverrides();
}
if ( $useParserCache ) {
- $parserOutput = ParserCache::singleton()->get( $this, $parserOptions );
+ $parserOutput = MediaWikiServices::getInstance()->getParserCache()
+ ->get( $this, $parserOptions );
if ( $parserOutput !== false ) {
return $parserOutput;
}
// Save it to the parser cache.
// Make sure the cache time matches page_touched to avoid double parsing.
- ParserCache::singleton()->save(
+ MediaWikiServices::getInstance()->getParserCache()->save(
$editInfo->output, $this, $editInfo->popts,
$revision->getTimestamp(), $editInfo->revid
);
* @param array|string &$error Array of errors to append to
* @param User $user The deleting user
* @param array $tags Tags to apply to the deletion action
+ * @param string $logsubtype
* @return Status Status object; if successful, $status->value is the log_id of the
* deletion log entry. If the page couldn't be deleted because it wasn't
* found, $status is a non-fatal 'cannotdelete' error
. wfMessage( 'parser-template-loop-warning', $titleText )->inContentLanguage()->text()
. '</span>';
$this->addTrackingCategory( 'template-loop-category' );
+ $this->mOutput->addWarning( wfMessage( 'template-loop-warning',
+ wfEscapeWikiText( $titleText ) )->text() );
wfDebug( __METHOD__ . ": template loop broken at '$titleText'\n" );
}
}
// finalizeAdaptiveCacheExpiry() uses TTL = MAX( m * PARSE_TIME + b, MIN_AR_TTL)
// Current values imply that m=3933.333333 and b=-333.333333
// See https://www.nngroup.com/articles/website-response-times/
- const PARSE_FAST_SEC = .100; // perceived "fast" page parse
+ const PARSE_FAST_SEC = 0.100; // perceived "fast" page parse
const PARSE_SLOW_SEC = 1.0; // perceived "slow" page parse
const FAST_AR_TTL = 60; // adaptive TTL for "fast" pages
const SLOW_AR_TTL = 3600; // adaptive TTL for "slow" pages
* return value is suitable for writing back via setText() but is not valid
* for display to the user.
*
+ * @return string
* @since 1.27
*/
public function getRawText() {
$this->mSpeculativeRevId = $id;
}
- /** @since 1.28 */
+ /**
+ * @return int|null
+ * @since 1.28
+ */
public function getSpeculativeRevIdUsed() {
return $this->mSpeculativeRevId;
}
}
/**
+ * @return array
* @since 1.25
*/
public function getIndicators() {
return $this->mModuleStyles;
}
- /** @since 1.23 */
+ /**
+ * @return array
+ * @since 1.23
+ */
public function getJsConfigVars() {
return $this->mJsConfigVars;
}
}
/**
+ * @param string $id
+ * @param string $content
* @since 1.25
*/
public function setIndicator( $id, $content ) {
* @code
* $parser->getOutput()->my_ext_foo = '...';
* @endcode
+ * @param string $name
+ * @param mixed $value
*/
public function setProperty( $name, $value ) {
$this->mProperties[$name] = $value;
*
* @param string $text
* @param int $flags
+ * @param string $tree
*/
protected function cacheSetTree( $text, $flags, $tree ) {
$config = RequestContext::getMain()->getConfig();
/**
* Like splitArg() but for a raw child array. For internal use only.
+ * @param array $children
+ * @return array
*/
public static function splitRawArg( array $children ) {
$bits = [];
/**
* Like splitExt() but for a raw child array. For internal use only.
+ * @param array $children
+ * @return array
*/
public static function splitRawExt( array $children ) {
$bits = [];
/**
* Like splitHeading() but for a raw child array. For internal use only.
+ * @param array $children
+ * @return array
*/
public static function splitRawHeading( array $children ) {
$bits = [];
/**
* Like splitTemplate() but for a raw child array. For internal use only.
+ * @param array $children
+ * @return array
*/
public static function splitRawTemplate( array $children ) {
$parts = [];
*
* @file
*/
+use MediaWiki\MediaWikiServices;
class PoolWorkArticleView extends PoolCounterWork {
/** @var WikiPage */
/** @var int */
private $revid;
+ /** @var ParserCache */
+ private $parserCache;
+
/** @var ParserOptions */
private $parserOptions;
$this->cacheable = $useParserCache;
$this->parserOptions = $parserOptions;
$this->content = $content;
- $this->cacheKey = ParserCache::singleton()->getKey( $page, $parserOptions );
+ $this->parserCache = MediaWikiServices::getInstance()->getParserCache();
+ $this->cacheKey = $this->parserCache->getKey( $page, $parserOptions );
$keyPrefix = $this->cacheKey ?: wfMemcKey( 'articleview', 'missingcachekey' );
parent::__construct( 'ArticleView', $keyPrefix . ':revid:' . $revid );
}
}
if ( $this->cacheable && $this->parserOutput->isCacheable() && $isCurrent ) {
- ParserCache::singleton()->save(
+ $this->parserCache->save(
$this->parserOutput, $this->page, $this->parserOptions, $cacheTime, $this->revid );
}
* @return bool
*/
public function getCachedWork() {
- $this->parserOutput = ParserCache::singleton()->get( $this->page, $this->parserOptions );
+ $this->parserOutput = $this->parserCache->get( $this->page, $this->parserOptions );
if ( $this->parserOutput === false ) {
wfDebug( __METHOD__ . ": parser cache miss\n" );
* @return bool
*/
public function fallback() {
- $this->parserOutput = ParserCache::singleton()->getDirty( $this->page, $this->parserOptions );
+ $this->parserOutput = $this->parserCache->getDirty( $this->page, $this->parserOptions );
if ( $this->parserOutput === false ) {
wfDebugLog( 'dirty', 'dirty missing' );
class IRCColourfulRCFeedFormatter implements RCFeedFormatter {
/**
* @see RCFeedFormatter::getLine
+ * @param array $feed
+ * @param RecentChange $rc
+ * @param string|null $actionComment
+ * @return string|null
*/
public function getLine( array $feed, RecentChange $rc, $actionComment ) {
global $wgUseRCPatrol, $wgUseNPPatrol, $wgLocalInterwikis,
/**
* Generates a notification that can be easily interpreted by a machine.
* @see RCFeedFormatter::getLine
+ * @param array $feed
+ * @param RecentChange $rc
+ * @param string|null $actionComment
+ * @return string|null
*/
public function getLine( array $feed, RecentChange $rc, $actionComment ) {
global $wgCanonicalServer, $wgServerName, $wgScriptPath;
/**
* @see FormattedRCFeed::send
+ * @param array $feed
+ * @param string $line
+ * @return bool
*/
public function send( array $feed, $line ) {
$parsed = wfParseUrl( $feed['uri'] );
class UDPRCFeedEngine extends RCFeedEngine {
/**
* @see RCFeedEngine::send
+ * @param array $feed
+ * @param string $line
+ * @return bool
*/
public function send( array $feed, $line ) {
$transport = UDPTransport::newFromString( $feed['uri'] );
/**
* Helper method for getDefinitionSummary.
+ * @param ResourceLoaderContext $context
+ * @return array
*/
protected function getFileHashes( ResourceLoaderContext $context ) {
$this->loadFromDefinition();
}
/**
+ * @param ResourceLoaderContext|null $context
* @return array
*/
public function getDependencies( ResourceLoaderContext $context = null ) {
}
/**
+ * @param ResourceLoaderContext $context
* @return array
*/
public function getPreloadLinks( ResourceLoaderContext $context ) {
protected $targets = [ 'desktop', 'mobile' ];
/**
+ * @param ResourceLoaderContext $context
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
}
/**
+ * @param ResourceLoaderContext|null $context
* @return array
*/
public function getDependencies( ResourceLoaderContext $context = null ) {
/**
* Get a list of categories, as an array with title text strings.
*
+ * @param ParserOutput $parserOutput
* @return string[]
*/
public function getCategories( ParserOutput $parserOutput ) {
/**
* Get a list of external links from ParserOutput, as an array of strings.
*
+ * @param ParserOutput $parserOutput
* @return string[]
*/
public function getExternalLinks( ParserOutput $parserOutput ) {
* Get a list of outgoing wiki links (including interwiki links), as
* an array of prefixed title strings.
*
+ * @param ParserOutput $parserOutput
* @return string[]
*/
public function getOutgoingLinks( ParserOutput $parserOutput ) {
/**
* Get a list of templates used in the ParserOutput content, as prefixed title strings
*
+ * @param ParserOutput $parserOutput
* @return string[]
*/
public function getTemplates( ParserOutput $parserOutput ) {
* might support more. The default in all implementations should be 'relevance.'
*
* @since 1.25
- * @return array(string) the valid sort directions for setSort
+ * @return string[] the valid sort directions for setSort
*/
public function getValidSorts() {
return [ 'relevance' ];
/**
* Return a result set of hits on other (multiple) wikis associated with this one
*
+ * @param int $type
* @return SearchResultSet[]
*/
function getInterwikiResults( $type = self::SECONDARY_RESULTS ) {
/**
* Check if there are results on other wikis
*
+ * @param int $type
* @return bool
*/
function hasInterwikiResults( $type = self::SECONDARY_RESULTS ) {
/**
* Move the suggestion at index $key to the first position
+ * @param string $key
*/
public function rescore( $key ) {
$removed = array_splice( $this->suggestions, $key, 1 );
/**
* @codeCoverageIgnore
+ * @inheritDoc
*/
public function preventSessionsForUser( $username ) {
BotPassword::removeAllPasswordsForUser( $username );
/**
* @note Despite the name, this seems to be intended to implement isset()
* rather than array_key_exists(). So do that.
+ * @inheritDoc
*/
public function offsetExists( $offset ) {
$data = &$this->backend->getData();
* data to detect such changes.
* @note Accessing a nonexistent key via this mechanism causes that key to
* be created with a null value, and does not raise a PHP warning.
+ * @inheritDoc
*/
public function &offsetGet( $offset ) {
$data = &$this->backend->getData();
--- /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
+ */
+
+namespace MediaWiki\Shell;
+
+use Exception;
+use MediaWiki\ProcOpenError;
+use MediaWiki\ShellDisabledError;
+use Profiler;
+
+/**
+ * Class used for executing shell commands
+ *
+ * @since 1.30
+ */
+class Command {
+ /** @var string */
+ private $command = '';
+
+ /** @var array */
+ private $limits = [];
+
+ /** @var string[] */
+ private $env = [];
+
+ /** @var string */
+ private $method;
+
+ /** @var bool */
+ private $useStderr = false;
+
+ /** @var bool */
+ private $everExecuted = false;
+
+ /**
+ * Constructor. Don't call directly, instead use Shell::command()
+ */
+ public function __construct() {
+ if ( Shell::isDisabled() ) {
+ throw new ShellDisabledError();
+ }
+ }
+
+ /**
+ * Destructor. Makes sure programmer didn't forget to execute the command after all
+ */
+ public function __destruct() {
+ if ( !$this->everExecuted ) {
+ $message = __CLASS__ . " was instantiated, but execute() was never called.";
+ if ( $this->method ) {
+ $message .= " Calling method: {$this->method}.";
+ }
+ $message .= " Command: {$this->command}";
+ trigger_error( $message, E_USER_NOTICE );
+ }
+ }
+
+ /**
+ * Adds parameters to the command. All parameters are sanitized via Shell::escape().
+ *
+ * @param string|string[] $args,...
+ * @return $this
+ */
+ public function params( /* ... */ ) {
+ $args = func_get_args();
+ if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+ // If only one argument has been passed, and that argument is an array,
+ // treat it as a list of arguments
+ $args = reset( $args );
+ }
+ $this->command .= ' ' . Shell::escape( $args );
+
+ return $this;
+ }
+
+ /**
+ * Adds unsafe parameters to the command. These parameters are NOT sanitized in any way.
+ *
+ * @param string|string[] $args,...
+ * @return $this
+ */
+ public function unsafeParams( /* ... */ ) {
+ $args = func_get_args();
+ if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+ // If only one argument has been passed, and that argument is an array,
+ // treat it as a list of arguments
+ $args = reset( $args );
+ }
+ $this->command .= implode( ' ', $args );
+
+ return $this;
+ }
+
+ /**
+ * Sets execution limits
+ *
+ * @param array $limits Optional array with limits(filesize, memory, time, walltime).
+ * This overrides the global wgMaxShell* limits.
+ * @return $this
+ */
+ public function limits( array $limits ) {
+ $this->limits = $limits;
+
+ return $this;
+ }
+
+ /**
+ * Sets environment variables which should be added to the executed command environment
+ *
+ * @param string[] $env array of variable name => value
+ * @return $this
+ */
+ public function environment( array $env ) {
+ $this->env = $env;
+
+ return $this;
+ }
+
+ /**
+ * Sets calling function for profiler. By default, the caller for execute() will be used.
+ *
+ * @param string $method
+ * @return $this
+ */
+ public function profileMethod( $method ) {
+ $this->method = $method;
+
+ return $this;
+ }
+
+ /**
+ * Controls whether stderr should be included in stdout, including errors from limit.sh.
+ * Default: don't include.
+ *
+ * @param bool $yesno
+ * @return $this
+ */
+ public function includeStderr( $yesno = true ) {
+ $this->useStderr = $yesno;
+
+ return $this;
+ }
+
+ /**
+ * Executes command. Afterwards, getExitCode() and getOutput() can be used to access execution
+ * results.
+ *
+ * @return Result
+ * @throws Exception
+ * @throws ProcOpenError
+ * @throws ShellDisabledError
+ */
+ public function execute() {
+ global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
+ $wgMaxShellWallClockTime, $wgShellCgroup;
+
+ $this->everExecuted = true;
+
+ $profileMethod = $this->method ?: wfGetCaller();
+
+ $envcmd = '';
+ foreach ( $this->env as $k => $v ) {
+ if ( wfIsWindows() ) {
+ /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves
+ * appear in the environment variable, so we must use carat escaping as documented in
+ * https://technet.microsoft.com/en-us/library/cc723564.aspx
+ * Note however that the quote isn't listed there, but is needed, and the parentheses
+ * are listed there but doesn't appear to need it.
+ */
+ $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . '&& ';
+ } else {
+ /* Assume this is a POSIX shell, thus required to accept variable assignments before the command
+ * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01
+ */
+ $envcmd .= "$k=" . escapeshellarg( $v ) . ' ';
+ }
+ }
+
+ $cmd = $envcmd . trim( $this->command );
+
+ $useLogPipe = false;
+ if ( is_executable( '/bin/bash' ) ) {
+ $time = intval( isset( $this->limits['time'] ) ? $this->limits['time'] : $wgMaxShellTime );
+ if ( isset( $this->limits['walltime'] ) ) {
+ $wallTime = intval( $this->limits['walltime'] );
+ } elseif ( isset( $this->limits['time'] ) ) {
+ $wallTime = $time;
+ } else {
+ $wallTime = intval( $wgMaxShellWallClockTime );
+ }
+ $mem = intval( isset( $this->limits['memory'] ) ? $this->limits['memory'] : $wgMaxShellMemory );
+ $filesize = intval( isset( $this->limits['filesize'] )
+ ? $this->limits['filesize']
+ : $wgMaxShellFileSize );
+
+ if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
+ $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
+ escapeshellarg( $cmd ) . ' ' .
+ escapeshellarg(
+ "MW_INCLUDE_STDERR=" . ( $this->useStderr ? '1' : '' ) . ';' .
+ "MW_CPU_LIMIT=$time; " .
+ 'MW_CGROUP=' . escapeshellarg( $wgShellCgroup ) . '; ' .
+ "MW_MEM_LIMIT=$mem; " .
+ "MW_FILE_SIZE_LIMIT=$filesize; " .
+ "MW_WALL_CLOCK_LIMIT=$wallTime; " .
+ "MW_USE_LOG_PIPE=yes"
+ );
+ $useLogPipe = true;
+ } elseif ( $this->useStderr ) {
+ $cmd .= ' 2>&1';
+ }
+ } elseif ( $this->useStderr ) {
+ $cmd .= ' 2>&1';
+ }
+ wfDebug( __METHOD__ . ": $cmd\n" );
+
+ // Don't try to execute commands that exceed Linux's MAX_ARG_STRLEN.
+ // Other platforms may be more accomodating, but we don't want to be
+ // accomodating, because very long commands probably include user
+ // input. See T129506.
+ if ( strlen( $cmd ) > SHELL_MAX_ARG_STRLEN ) {
+ throw new Exception( __METHOD__ .
+ '(): total length of $cmd must not exceed SHELL_MAX_ARG_STRLEN' );
+ }
+
+ $desc = [
+ 0 => [ 'file', 'php://stdin', 'r' ],
+ 1 => [ 'pipe', 'w' ],
+ 2 => [ 'file', 'php://stderr', 'w' ],
+ ];
+ if ( $useLogPipe ) {
+ $desc[3] = [ 'pipe', 'w' ];
+ }
+ $pipes = null;
+ $scoped = Profiler::instance()->scopedProfileIn( __FUNCTION__ . '-' . $profileMethod );
+ $proc = proc_open( $cmd, $desc, $pipes );
+ if ( !$proc ) {
+ wfDebugLog( 'exec', "proc_open() failed: $cmd" );
+ throw new ProcOpenError();
+ }
+ $outBuffer = $logBuffer = '';
+ $emptyArray = [];
+ $status = false;
+ $logMsg = false;
+
+ /* According to the documentation, it is possible for stream_select()
+ * to fail due to EINTR. I haven't managed to induce this in testing
+ * despite sending various signals. If it did happen, the error
+ * message would take the form:
+ *
+ * stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
+ *
+ * where [4] is the value of the macro EINTR and "Interrupted system
+ * call" is string which according to the Linux manual is "possibly"
+ * localised according to LC_MESSAGES.
+ */
+ $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4;
+ $eintrMessage = "stream_select(): unable to select [$eintr]";
+
+ $running = true;
+ $timeout = null;
+ $numReadyPipes = 0;
+
+ while ( $running === true || $numReadyPipes !== 0 ) {
+ if ( $running ) {
+ $status = proc_get_status( $proc );
+ // If the process has terminated, switch to nonblocking selects
+ // for getting any data still waiting to be read.
+ if ( !$status['running'] ) {
+ $running = false;
+ $timeout = 0;
+ }
+ }
+
+ $readyPipes = $pipes;
+
+ // Clear last error
+ // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
+ @trigger_error( '' );
+ $numReadyPipes = @stream_select( $readyPipes, $emptyArray, $emptyArray, $timeout );
+ if ( $numReadyPipes === false ) {
+ // @codingStandardsIgnoreEnd
+ $error = error_get_last();
+ if ( strncmp( $error['message'], $eintrMessage, strlen( $eintrMessage ) ) == 0 ) {
+ continue;
+ } else {
+ trigger_error( $error['message'], E_USER_WARNING );
+ $logMsg = $error['message'];
+ break;
+ }
+ }
+ foreach ( $readyPipes as $fd => $pipe ) {
+ $block = fread( $pipe, 65536 );
+ if ( $block === '' ) {
+ // End of file
+ fclose( $pipes[$fd] );
+ unset( $pipes[$fd] );
+ if ( !$pipes ) {
+ break 2;
+ }
+ } elseif ( $block === false ) {
+ // Read error
+ $logMsg = "Error reading from pipe";
+ break 2;
+ } elseif ( $fd == 1 ) {
+ // From stdout
+ $outBuffer .= $block;
+ } elseif ( $fd == 3 ) {
+ // From log FD
+ $logBuffer .= $block;
+ if ( strpos( $block, "\n" ) !== false ) {
+ $lines = explode( "\n", $logBuffer );
+ $logBuffer = array_pop( $lines );
+ foreach ( $lines as $line ) {
+ wfDebugLog( 'exec', $line );
+ }
+ }
+ }
+ }
+ }
+
+ foreach ( $pipes as $pipe ) {
+ fclose( $pipe );
+ }
+
+ // Use the status previously collected if possible, since proc_get_status()
+ // just calls waitpid() which will not return anything useful the second time.
+ if ( $running ) {
+ $status = proc_get_status( $proc );
+ }
+
+ if ( $logMsg !== false ) {
+ // Read/select error
+ $retval = -1;
+ proc_close( $proc );
+ } elseif ( $status['signaled'] ) {
+ $logMsg = "Exited with signal {$status['termsig']}";
+ $retval = 128 + $status['termsig'];
+ proc_close( $proc );
+ } else {
+ if ( $status['running'] ) {
+ $retval = proc_close( $proc );
+ } else {
+ $retval = $status['exitcode'];
+ proc_close( $proc );
+ }
+ if ( $retval == 127 ) {
+ $logMsg = "Possibly missing executable file";
+ } elseif ( $retval >= 129 && $retval <= 192 ) {
+ $logMsg = "Probably exited with signal " . ( $retval - 128 );
+ }
+ }
+
+ if ( $logMsg !== false ) {
+ wfDebugLog( 'exec', "$logMsg: $cmd" );
+ }
+
+ return new Result( $retval, $outBuffer );
+ }
+}
--- /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
+ */
+
+namespace MediaWiki\Shell;
+
+/**
+ * Returned by MediaWiki\Shell\Command::execute()
+ *
+ * @since 1.30
+ */
+class Result {
+ /** @var int */
+ private $exitCode;
+
+ /** @var string */
+ private $stdout;
+
+ /**
+ * @param int $exitCode
+ * @param string $stdout
+ */
+ public function __construct( $exitCode, $stdout ) {
+ $this->exitCode = $exitCode;
+ $this->stdout = $stdout;
+ }
+
+ /**
+ * Returns exit code of the process
+ *
+ * @return int
+ */
+ public function getExitCode() {
+ return $this->exitCode;
+ }
+
+ /**
+ * Returns stdout of the process
+ *
+ * @return string
+ */
+ public function getStdout() {
+ return $this->stdout;
+ }
+}
--- /dev/null
+<?php
+/**
+ * Class used for executing shell commands
+ *
+ * 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
+ */
+
+namespace MediaWiki\Shell;
+
+/**
+ * Executes shell commands
+ *
+ * @since 1.30
+ *
+ * Use call chaining with this class for expressiveness:
+ * $result = Shell::command( 'some command' )
+ * ->environment( [ 'ENVIRONMENT_VARIABLE' => 'VALUE' ] )
+ * ->limits( [ 'time' => 300 ] )
+ * ->execute();
+ *
+ * ... = $result->getExitCode();
+ * ... = $result->getStdout();
+ */
+class Shell {
+
+ /**
+ * Returns a new instance of this class
+ *
+ * @param string|string[] $command If string, a properly shell-escaped command line,
+ * or an array of unescaped arguments, in which case each value will be escaped
+ * Example: [ 'convert', '-font', 'font name' ] would produce "'convert' '-font' 'font name'"
+ * @return Command
+ */
+ public static function command( $command ) {
+ $args = func_get_args();
+ if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+ // If only one argument has been passed, and that argument is an array,
+ // treat it as a list of arguments
+ $args = reset( $args );
+ }
+ $command = new Command();
+ return $command->params( $args );
+ }
+
+ /**
+ * Check if this class is effectively disabled via php.ini config
+ *
+ * @return bool
+ */
+ public static function isDisabled() {
+ static $disabled = null;
+
+ if ( is_null( $disabled ) ) {
+ if ( !function_exists( 'proc_open' ) ) {
+ wfDebug( "proc_open() is disabled\n" );
+ $disabled = true;
+ } else {
+ $disabled = false;
+ }
+ }
+
+ return $disabled;
+ }
+
+ /**
+ * Version of escapeshellarg() that works better on Windows.
+ *
+ * Originally, this fixed the incorrect use of single quotes on Windows
+ * (https://bugs.php.net/bug.php?id=26285) and the locale problems on Linux in
+ * PHP 5.2.6+ (bug backported to earlier distro releases of PHP).
+ *
+ * @param string $args,... strings to escape and glue together, or a single array of
+ * strings parameter
+ * @return string
+ */
+ public static function escape( /* ... */ ) {
+ $args = func_get_args();
+ if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+ // If only one argument has been passed, and that argument is an array,
+ // treat it as a list of arguments
+ $args = reset( $args );
+ }
+
+ $first = true;
+ $retVal = '';
+ foreach ( $args as $arg ) {
+ if ( !$first ) {
+ $retVal .= ' ';
+ } else {
+ $first = false;
+ }
+
+ if ( wfIsWindows() ) {
+ // Escaping for an MSVC-style command line parser and CMD.EXE
+ // @codingStandardsIgnoreStart For long URLs
+ // Refs:
+ // * https://web.archive.org/web/20020708081031/http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
+ // * https://technet.microsoft.com/en-us/library/cc723564.aspx
+ // * T15518
+ // * CR r63214
+ // Double the backslashes before any double quotes. Escape the double quotes.
+ // @codingStandardsIgnoreEnd
+ $tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE );
+ $arg = '';
+ $iteration = 0;
+ foreach ( $tokens as $token ) {
+ if ( $iteration % 2 == 1 ) {
+ // Delimiter, a double quote preceded by zero or more slashes
+ $arg .= str_replace( '\\', '\\\\', substr( $token, 0, -1 ) ) . '\\"';
+ } elseif ( $iteration % 4 == 2 ) {
+ // ^ in $token will be outside quotes, need to be escaped
+ $arg .= str_replace( '^', '^^', $token );
+ } else { // $iteration % 4 == 0
+ // ^ in $token will appear inside double quotes, so leave as is
+ $arg .= $token;
+ }
+ $iteration++;
+ }
+ // Double the backslashes before the end of the string, because
+ // we will soon add a quote
+ $m = [];
+ if ( preg_match( '/^(.*?)(\\\\+)$/', $arg, $m ) ) {
+ $arg = $m[1] . str_replace( '\\', '\\\\', $m[2] );
+ }
+
+ // Add surrounding quotes
+ $retVal .= '"' . $arg . '"';
+ } else {
+ $retVal .= escapeshellarg( $arg );
+ }
+ }
+ return $retVal;
+ }
+}
/**
* Deletes all sites from the database. After calling clear(), getSites() will return an empty
* list and getSite() will return null until saveSite() or saveSites() is called.
+ * @return bool
*/
public function clear() {
$this->sites = [];
/**
* @todo is this even used?
+ * @param string $name
+ * @param string $urlaction
+ * @return array
*/
function makeArticleUrlDetails( $name, $urlaction = '' ) {
$title = Title::newFromText( $name );
/**
* Include the modules and configuration for the RCFilters app.
* Conditional on the user having the feature enabled.
+ *
+ * If it is disabled, add a <body> class marking that
*/
protected function includeRcFiltersApp() {
+ $out = $this->getOutput();
if ( $this->isStructuredFilterUiEnabled() ) {
- $out = $this->getOutput();
$jsData = $this->getStructuredFilterJsData();
$messages = [];
$messages[$key] = $this->msg( $key )->plain();
}
+ $out->addBodyClasses( 'mw-rcfilters-enabled' );
+
$out->addHTML(
ResourceLoader::makeInlineScript(
ResourceLoader::makeMessageSetScript( $messages )
'daysDefault' => $this->getDefaultDays(),
]
);
+ } else {
+ $out->addBodyClasses( 'mw-rcfilters-disabled' );
}
}
* ChangesListFilterGroup constructors.
*
* There is light processing to simplify core maintenance.
+ * @param array $definition
*/
protected function registerFiltersFromDefinitions( array $definition ) {
$autoFillPriority = -1;
/**
* @param string|null $subpage
+ * @return Title|bool
*/
public function execute( $subpage ) {
$redirect = $this->getRedirect( $subpage );
* @note This will only be run if the page is cached (ie $wgMiserMode = true)
* unless forceExistenceCheck() is true.
* @since 1.24
+ * @param Title $title
* @return bool
*/
protected function existenceCheck( Title $title ) {
/**
* @param int $ns The namespace of the article
* @param string $text The name of the article
- * @return array( int namespace, string dbkey, string pagename ) or null on error
+ * @return array|null [ int namespace, string dbkey, string pagename ] or null on error
*/
protected function getNamespaceKeyAndText( $ns, $text ) {
if ( $text == '' ) {
* @param string $par Subpage parameter passed to setup, or data value from
* the HTMLForm
* @param WebRequest $request Optionally try and get data from a request too
- * @return array( User|string|null, Block::TYPE_ constant|null )
+ * @return array [ User|string|null, Block::TYPE_ constant|null ]
*/
public static function getTargetAndType( $par, WebRequest $request = null ) {
$i = 0;
*
* @see T130058
* @todo FIXME This special page should not use LIMIT for paging
+ * @return int
*/
protected function getMaxResults() {
return max( parent::getMaxResults(), 60000 );
}
/**
- * @param stdClass $row Result row from recent changes
+ * @param stdClass $result Result row from recent changes
* @return Revision|bool
*/
protected function revisionFromRcResult( stdClass $result ) {
/**
* Under which header this special page is listed in Special:SpecialPages.
+ * @return string
*/
protected function getGroupName() {
return 'users';
* This controls js: mw.config.get( 'wgFileCanRotate' )
*
* @todo What about non-BitmapHandler handled files?
+ * @return bool
*/
public static function rotationEnabled() {
$bitmapHandler = new BitmapHandler();
* In its own function to allow subclasses to override.
* @see SpecialWantedFilesGUOverride in GlobalUsage extension.
* @since 1.24
+ * @return bool
*/
protected function likelyToHaveFalsePositives() {
return RepoGroup::singleton()->hasForeignRepos();
* Use wfFindFile so we still think file namespace pages without
* files are missing, but valid file redirects and foreign files are ok.
*
+ * @param Title $title
* @return bool
*/
protected function existenceCheck( Title $title ) {
/**
* Get a string key for the Noah's Ark algorithm
+ * @return string
*/
public function getNoahKey() {
if ( $this->noahKey === null ) {
/**
* Insert a comment at the appropriate place for inserting a node.
* @param string $value Content of the comment.
+ * @return string
* @see https://html.spec.whatwg.org/multipage/syntax.html#insert-a-comment
*/
public function insertComment( $value ) {
* Insert text at the appropriate place for inserting a node.
* @param string $value
* @param bool $isComment
+ * @return string
* @see https://html.spec.whatwg.org/multipage/syntax.html#appropriate-place-for-inserting-a-node
*/
public function insertText( $value, $isComment = false ) {
/**
* Return the adjusted current node.
+ * @param string $fragmentContext
+ * @return string
*/
public function adjustedCurrentNode( $fragmentContext ) {
return ( $fragmentContext && count( $this->elements ) === 1 ) ?
* Find and return the last element with the specified tag between the
* end of the list and the last marker on the list.
* Used when parsing <a> "in body mode".
+ * @param string $tag
+ * @return null|Node
*/
public function findElementByTag( $tag ) {
$elt = $this->tail;
/**
* Return true if validate() can be used
+ * @return bool
*/
public function supportsValidate() {
return false;
protected $alias;
/**
- * @var string $code PHP code (including <?php) to detect class names from
+ * @param string $code PHP code (including <?php) to detect class names from
* @return array List of FQCN detected within the tokens
*/
public function getClasses( $code ) {
*
* @param string $text Text to be converted
* @param string $variant The target variant code
- * @param int $startPos
+ * @param int &$startPos
* @param int $depth Depth of recursion
*
* @throws MWException
"Tokoabibi"
]
},
+ "tog-hidecategorization": "midimut kasabelih kakuniza",
+ "tog-numberheadings": "satangahan lunuk pabanggu",
+ "tog-watchlisthidecategorization": "midimut kasabelih kakuniza",
+ "tog-showhiddencats": "paazih madimutay a kakuniza",
+ "underline-always": "mahizatuay",
"underline-never": "caaytu",
+ "editfont-default": "saazih sakaluk pataayaw tu kawaw a sulyang",
+ "editfont-monospace": "malecad ilaed a kataci nu silit",
+ "editfont-sansserif": "pacabay tu telay a kataci nu sulit",
"sunday": "pilipayan",
"monday": "sakacacay a demied nu lipay",
"tuesday": "sakatusa a demied nu lipay",
"view": "ciwsace",
"view-foreign": "i $1 miciwsace",
"edit": "mikawaway-kalumyiti",
+ "edit-local": "itiniay buhci tu kamu nu mikawaway tu kalumyiti",
"create": "patizeng",
"create-local": "cunusen itiniay a buhci tu kamu",
"delete": "misipu",
"redirectpagesub": "miliyaw tazuma kasabelih",
"redirectto": "miliyaw tazuma tu:",
"lastmodifiedat": "uyni kasabelih sazikuz mikawaway tu kalumyiti i $1 $2.",
+ "protectedpage": "madiputay a kasabelih",
"jumpto": "taayaw:",
"jumptonavigation": "pasubana’ tu miidangay",
"jumptosearch": "kilim",
+ "pool-queuefull": "laylay saculuk matumestu",
+ "pool-errorunknown": "caay kapulita ku mungangaw",
"aboutsite": "mahizaay {{SITENAME}}",
"aboutpage": "Project:mahizaay",
"copyright": "anu izaw ku zuma buhci tu kamu, kasabelih aazihen a lacul i labu, pisaungay hamin $1 sapabeli tu kinli a ceding.",
"portal-url": "Project:komiyonityi sacumudan",
"privacy": "salimek a mikuwanay a kawaw",
"privacypage": "Project:salimek a mikuwanay a kawaw",
+ "badaccess": "mungangaw ku tungus",
"ok": "malucekay",
"retrievedfrom": "miala i \"$1\"",
"editsection": "mikawaway-kalumyiti",
"viewsourceold": "ciwsace sakatizeng bangu",
"editlink": "mikawaway-kalumyiti",
"viewsourcelink": "ciwsace sakatizeng bangu",
- "editsectionhint": "mikawaway tu kalumyiti tusil: $1",
+ "editsectionhint": "mikawaway-kalumyiti tusil: $1",
"toc": "dilyikotoling",
"showtoc": "paazih",
"hidetoc": "midimut",
"site-atom-feed": "$1 a Atom saangangan",
"page-atom-feed": "$1 a Atom saangangan",
"red-link-title": "$1 (kasabelih nayai’ tu)",
+ "sort-descending": "nay tabakiay katukuh adidi kasalaylay",
"nstab-main": "kasabelih",
"nstab-user": "misaungayay a kasabelih",
+ "nstab-media": "myiti kasabelih",
"nstab-special": "sazumaay a kasabelih",
"nstab-project": "cwanan kasabelih",
"nstab-image": "tangan",
"nstab-mediawiki": "palatuh",
"nstab-template": "taazihan mitudung",
+ "nstab-help": "buhci tu kamu a kasabelih",
"nstab-category": "kakuniza",
"mainpage-nstab": "saayaway a belih",
"error": "mungangaw",
+ "databaseerror": "sulu nu nasulitan mungangaw",
"databaseerror-query": "palalitemuh tu kawaw: $1",
"databaseerror-function": "sakapaluwaluway: $1",
"databaseerror-error": "mungangaw: $1",
+ "readonly": "pamutektu sulu nu nasulitan",
+ "internalerror": "ilabuay a mungangaw",
+ "internalerror_info": "ilabuay a mungangaw: $1",
"badtitle": "a’cusay a pyawti",
"badtitletext": "matuzu’ay a kasabelih pyawti u la’cusay、nayi’ ku cacan, caaysa tatenga’ay tu misiket kamu Wikiay a pyawti.\ntebanay pyawti akay amalyilu la’cusay pisaungay i pyawtayi a tatebanan nu nisulitan.",
"viewsource": "ciwsace sakatizeng bangu",
+ "actionthrottled": "makelec saungay tuway",
"exception-nologin": "caay henay patalabu",
"welcomeuser": "manamuh tu tayniay, $1!",
"yourname": "misaungayay a kalungangan:",
"yourpassword": "mima:",
"userlogin-yourpassword": "mima",
"userlogin-yourpassword-ph": "suliten nu misuay a mima",
- "createacct-yourpassword-ph": "pisulitan ku mima",
+ "createacct-yourpassword-ph": "pisuliten tu mima",
"createacct-yourpasswordagain": "malucekay tu mima",
"createacct-yourpasswordagain-ph": "pisulitan ku mima kinacacay aca",
"userlogin-remembermypassword": "i balucu’en aku patalabu setyitase",
"cannotlogin-title": "la’cus patalabu",
+ "cannotloginnow-title": "la’cus patalabu ayza",
+ "cannotcreateaccount-title": "la’cusay panganganen ku canghaw",
+ "yourdomainname": "numisuay a calay-subal(wangyi):",
"login": "patalabu",
"nav-login-createaccount": "patalabu / panganganen ku canghaw",
"logout": "katahkal",
"createaccount": "panganganen ku canghaw",
"userlogin-resetpassword-link": "maliyuh ku mima kisu haw?",
"userlogin-helplink2": "patalabu miedap",
+ "createacct-emailrequired": "imyiyo(email) puenengan",
"createacct-emailoptional": "imyiyo(email) tigami (u pili’ay sasulitan)",
"createacct-email-ph": "pisulitan ku imyiyo(email) nu misu",
"createacct-reason": "mahicaay",
"createacct-submit": "panganganen ku misuay a canghaw",
"createacct-another-submit": "panganganen ku canghaw",
+ "createacct-continue-submit": "palalid patizeng tu canghaw",
"createacct-benefit-heading": "{{SITENAME}} paanin tu nisulitan tu nu tapangay mahiza kisuan.",
- "createacct-benefit-body1": "saka{{PLURAL:$1|ku mikawaway tu kalumyiti}}",
+ "createacct-benefit-body1": "saka{{PLURAL:$1|mikawaway-kalumyiti}}",
"createacct-benefit-body2": "{{PLURAL:$1| kasabelih}}",
"createacct-benefit-body3": "cay katenesay{{PLURAL:$1|paaninay tu kalusasing}}",
+ "loginerror": "patalabu mungangaw",
+ "createacct-error": "canghaw patizeng mungangaw",
"loginsuccesstitle": "patalabutu",
"mailmypassword": "miliyaw miteka setin mima",
+ "accountcreated": "panganganen tu ku canghaw",
"loginlanguagelabel": "kamu: $1",
"pt-login": "patalabu",
"pt-login-button": "patalabu",
"pt-createaccount": "panganganen ku canghaw",
"pt-userlogout": "katahkal",
"changepassword": "misumad tu mima",
+ "resetpass_header": "misumad canghaw mima",
+ "oldpassword": "malumannay a mima",
+ "newpassword": "baluhay a mima:",
+ "botpasswords": "kikay-tademaw a mima",
+ "botpasswords-label-appid": "kalungangan nu kikay-tademaw:",
"botpasswords-label-create": "patizeng",
"botpasswords-label-update": "misabaluhay",
"botpasswords-label-cancel": "palawpes",
"botpasswords-label-delete": "masipu",
"botpasswords-label-resetpassword": "miliyaw miteka setin mima",
+ "botpasswords-label-grants": "matatungusay a tungus:",
"botpasswords-label-grants-column": "pabeli tu kinli",
+ "resetpass_forbidden": "la’cus misumad tu mima",
+ "resetpass_forbidden-reason": "la’cus misumad tu mima: $1",
"resetpass-submit-loggedin": "misumad tu mima",
"resetpass-submit-cancel": "palawpes",
+ "resetpass-temp-password": "nanunuz a mima:",
"passwordreset": "miliyaw miteka setin mima",
"passwordreset-username": "misaungayay a kalungangan:",
+ "passwordreset-domain": "calay-subal(wangyi) kalungangan:",
+ "passwordreset-email": "imyiyo(email) puenengan:",
"changeemail-none": "(nayi’)",
+ "changeemail-submit": "misumad imyiyo(email)",
+ "resettokens": "miliyaw patizeng sabuhat a mima",
"resettokens-tokens": "sabuhat:",
"bold_sample": "kibetulay a sulit",
"bold_tip": "kibetulay a sulit",
"hr_tip": "Sapisasuala (cayka yadah kawiza)",
"summary": "pecu’ nu lacul:",
"subject": "taazihan tu kawaw:",
- "minoredit": "payni mikilulay a mikawaway tu kalumyiti",
+ "minoredit": "payni mikilulay a mikawaway-kalumyiti",
"watchthis": "miazih tuyni kasabelih",
"savearticle": "misuped kasabelih",
+ "savechanges": "misuped tu sumad",
+ "publishpage": "patiyak kasabelih",
+ "publishchanges": "patiyak misumad",
"preview": "pataayaway miazih",
"showpreview": "paazih pataayaway miazih",
"showdiff": "paazih ku masumaday",
"anoneditwarning": "<strong>patalaw:</strong>caay henay kisu patalabu. anu miteka mikawaway tu kalumyiti, IP adolyise nu misu ama mitilak. anu kisu <strong>[$1 patalabu ]</strong> acasa <strong>[$2 panganganen ku canghaw ]</strong>, misuay mikawaway tu kalumyiti payni tu nu misuay misaungayay kalungangan sacuzu’ ,izaway zuma kapahayay.",
+ "subject-preview": "pataayaway miazih taazihan tu kawaw:",
+ "blockednoreason": "caay pasaheci tu mahicaay",
+ "nosuchsectiontitle": "caykatepa tu tusil",
+ "loginreqtitle": "maydih patalabu",
"loginreqlink": "patalabu",
+ "accmailtitle": "mima patigamitu",
"newarticle": "(baluhay)",
"newarticletext": "masasiket kisu tu nayi’ay tu kasabelih.\namipatizeng tina kasabelih, kaisasa mikawaway tu kalumyiti atilad misulit ku lacul (kahica nu kawaw piazih tu tatenga’ay [$1 misaungay a buhci tu kamu kasabelih ]).\namahica caay padeteng tayza tina kasabelih kisu haw, pihaymaw sapecec saazihay a <strong>tatiku</strong> pipenecan.",
"noarticletext": "kina kasabelih inayi’ lacul ayza,kapah tu kisu i zumaay a kasabelih [[Special:Search/{{PAGENAME}}| mikilim kina kasabelih pyawti ]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mikilim sasuala nasulitan nakawawan ] caay sa[{{fullurl:{{FULLPAGENAME}}|action=edit}} patizeng kina kasabelih ]</span>.",
"noarticletext-nopermission": "tina kasabelih ayza inayi’ lacul,\nkapah tu kisu i zuma kasabelih [[Special:Search/{{PAGENAME}}| kilim kina kasabelih pyawti ]],acasa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} kilim sasuala nasulitan nakawawan ]</span>,uyzasa inayi’ ku tungus patizeng tina kasabelih.",
- "updated": "(misabaluhay)",
+ "updated": "(misabaluh tuway)",
+ "continue-editing": "taayaw mikawaway-kalumyiti nikatatapal",
"editing": "mikawaway tu kalumyiti $1 ayza",
"creating": "patizeng ayza $1",
"editingsection": "mikawaway tu kalumyiti ayza $1 (tusil)",
+ "yourtext": "numisuay a sulit",
+ "storedversion": "misupedtu tu sumad",
"yourdiff": "sasizuma",
"templatesused": "uyni kasabelih pisaungay tu isasaay {{PLURAL:$1|taazihan mitudung}}:",
"template-protected": "(madiputay)",
"template-semiprotected": "(madiputay a kasabelih - satizep mikawaway tu kalumyiti)",
"hiddencategories": "kina kasabelih tungusay nu {{PLURAL:$1|1 midimut kakuniza }}mamikawaw:",
+ "permissionserrors": "mungangaw ku tungus",
"permissionserrorstext-withaction": "namakay isasaay {{PLURAL:$1|mahicaay}}, inayi’ kisu situngus miteka $2 miteka tuway misaungay:",
"moveddeleted-notice": "kina kasabelih masipu tu.\nisasa nipabeli kina kasabelihay a masipu atu milimad nasulitan nakawawan, taneng miazih tu tatenga’ay.",
+ "edit-conflict": "mikawaway-kalumyiti sasula’cus",
+ "defaultmessagetext": "pataayaw tu kawaw palatuh a sulit",
+ "invalid-content-data": "lacul kalunasulitan la’cus",
"content-model-text": "sulit a dada’",
"content-json-empty-object": "inayi’ay a tuutuud",
"content-json-empty-array": "inayi’ay a papazengan tu nisulitan",
"next": "nuzikuzan",
"last": "ayaway",
"page_last": "sazikuzay a kasabelih",
+ "history-fieldset-title": "mikilim masumad nu ayaway",
"histfirst": "sakasumamadan",
"histlast": "sabaluhay",
"historyempty": "(inayi’)",
+ "history-feed-title": "masumad nu ayaway a nazipa’an",
"history-feed-item-nocomment": "$1 i $2",
+ "rev-delundel": "misumad ku maazihay",
"rev-showdeleted": "paazih",
"revdelete-show-file-submit": "hang",
+ "revdelete-legend": "misetin paazih a kelec",
+ "revdelete-hide-text": "masumad nu ayaway a sulit",
+ "revdelete-hide-image": "midimut lacul nu tangan",
"revdelete-hide-comment": "pecu’ nu lacul mikawaway-kalumyiti",
+ "revdelete-radio-same": "(amana misumad)",
"revdelete-radio-set": "midimut",
"revdelete-log": "mahicaay:",
+ "revdel-restore": "misumad ku maazihay",
"pagehist": "kasabelih nazipa’an",
+ "deletedhist": "masiputu tu nazipa’an",
+ "revdelete-reasonotherlist": "zuma a mahicaay",
+ "revdelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
+ "revdelete-offender": "masumad nu ayaway masacudaday:",
+ "mergehistory-from": "saangangan kasabelih:",
+ "mergehistory-into": "pabalucu’an kasabelih:",
"mergehistory-reason": "mahicaay:",
+ "mergelog": "mikabu tu nasulitan nazipa’an",
+ "revertmerge": "palawpes makabuay",
"history-title": "\"$1\" masumaday a nazipa’an",
"difference-title": "\"$1\" misumad laeday sasizuma",
"lineno": "silsil $1:",
"editundo": "patiku",
+ "diff-empty": "(inayi’ sasizuma)",
"diff-multi-sameuser": "(malecaday misaungayay {{PLURAL:$1| ilaed izaw ku $1 a sumad}}inayi’ paazih)",
"searchresults": "heci nu makatepa",
"searchresults-title": "$1 heci nu makatepa",
+ "titlematches": "kasabelih satangah matatungus",
+ "textmatches": "kasabelih lacul matatungus",
"prevn": "ayaw saka {{PLURAL:$1|$1}}",
"nextn": "zikuzan saka {{PLURAL:$1|$1}}",
"prev-page": "ayaway a belih",
"search-section": "(tusil $1)",
"search-suggest": "u tuzu’ nu misu ku:$1 haw?",
"search-interwiki-more": "(yadah)",
+ "search-interwiki-more-results": "sayadahay a heci",
"search-relatedarticle": "mahizaay",
"searchall": "hamin",
"search-showingresults": "{{PLURAL:$4|saka <strong>$1</strong> a heci, pulung <strong>$3</strong>|saka <strong>$1-$2</strong> a heci, pulung <strong>$3</strong>}}",
"search-external": "mikilim i hekal",
"preferences": "setin tu kanamuhan",
"mypreferences": "setin tu kanamuhan",
+ "prefs-edits": "kinapina ku mikawaway-kalumyiti:",
"prefs-skin": "nuhekalan",
"skin-preview": "pataayaway miazih",
"datedefault": "sulyang nu pataayaw tu kawaw",
+ "prefs-labs": "mitanam henay a sasahicaan",
"prefs-rc": "capi a demaiday a sumad",
"prefs-watchlist": "miazihay a piazihan tu sulit",
+ "prefs-editwatchlist": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
"prefs-misc": "zuma",
"prefs-resetpass": "misumad tu mima",
+ "prefs-email": "imyiyo(email) mapili’ay",
"prefs-rendering": "nuhekalan",
"saveprefs": "suped",
"prefs-editing": "mikawaway-kalumyiti",
"searchresultshead": "kilim",
"stub-threshold-sample-link": "maaziahan",
"stub-threshold-disabled": "mapasatezep",
+ "localtime": "itiniay a tuki:",
+ "servertime": "sefuci-kikay a tuki:",
"timezoneregion-africa": "Afilika",
"timezoneregion-america": "Amilikaco",
"timezoneregion-antarctica": "Nancico",
"timezoneregion-arctic": "Sasaamisan",
"timezoneregion-asia": "Yaco",
"timezoneregion-australia": "Awco",
- "timezoneregion-europe": "Oco",
+ "timezoneregion-europe": "Ouco",
"timezoneregion-indian": "Intuyang-bayu’",
"timezoneregion-pacific": "Taypinyang-bayu’",
"prefs-searchoptions": "kilim",
"prefs-namespaces": "pangangananay a salaedan",
"default": "pataayaw tu kawaw",
"prefs-custom-css": "pakuniza misanga’ CSS",
+ "prefs-registration": "pangangan a demiad:",
+ "yourrealname": "tatengaay a ngangan:",
"yourlanguage": "kamu:",
+ "yournick": "baluhay sulitan a ngangan:",
"email": "imyiyo(email)",
"prefs-info": "anganganay a cesyun",
"prefs-i18n": "masakitakiay",
"prefs-displayrc": "paazih tu mapiliay",
"prefs-tokenwatchlist": "sabuhat",
"prefs-diffs": "sasizuma",
+ "userrights": "tungus nu misaungayay",
+ "userrights-lookup-user": "mipili’ misaungayay",
+ "userrights-groupsmember": "canan a luyaluy:",
"userrights-reason": "mahicaay:",
"userrights-expiry-current": "kakatekuhan $1",
"userrights-expiry-none": "inayi’ kakatekuhan",
"userrights-expiry": "kakatekuhan:",
+ "userrights-expiry-othertime": "zuma a tatukian:",
"group": "luyaluy:",
"group-user": "misaungayay",
"group-bot": "kikay a tademaw",
"grouppage-bot": "{{ns:project}}:kikay a tademaw",
"grouppage-sysop": "{{ns:project}}:mikuwanay",
"grouppage-bureaucrat": "{{ns:project}}:situngusay a mikawaway",
+ "right-read": "miasip kasabelih",
"right-edit": "kasabelih mikawaway-kalumyiti",
+ "right-createtalk": "patizeng matatengil kasabelih",
+ "right-move": "milimad kasabelih",
+ "right-move-categorypages": "milimad kakuniza a kasabelih",
+ "right-movefile": "milimad tu tangan",
+ "right-upload": "patapabaw tu tangan",
"right-writeapi": "pisaungay suliten API",
"right-delete": "misipu tu kasabelih",
+ "right-mergehistory": "mikabu kasabelih nazipa’an",
+ "grant-group-page-interaction": "kasasukamu tu kasabelih",
+ "grant-group-file-interaction": "kasasukamu tu myiti",
+ "grant-group-email": "pabahel imyiyo(email)",
+ "grant-group-high-volume": "mileku sayadah a saungay nu binawlan",
+ "grant-group-administration": "mileku tu mikuwanay a kawaw",
+ "grant-group-other": "zuma saungay nu binawlan",
"grant-createaccount": "panganganen ku canghaw",
"grant-highvolume": "masibek mikawaway-kalumyiti",
+ "grant-privateinfo": "misuped-miala madimut kasikazan a cesyun",
+ "grant-uploadfile": "patapabaw ku baluhay a tangan",
"grant-basic": "anganganay a tungus",
"newuserlogpage": "patizeng misaungayay nasulitan nakawawan",
- "action-edit": "mikawaway tu kalumyiti uyni kasabelih",
+ "action-edit": "mikawaway-kalumyiti uyni a kasabelih",
+ "action-move-categorypages": "milimad kakuniza a kasabelih",
+ "action-movefile": "milimad tina tangan",
+ "action-upload": "patapabaw tina tangan",
"action-deleterevision": "misipu tu masumaday nu ayaway",
+ "action-deletelogentry": "masipu nasulitan nazipa’an kasacacay",
+ "action-sendemail": "pabahel imyiyo(email)",
+ "nchanges": "$1 {{PLURAL:$1|misumad}}",
"enhancedrc-history": "nazipa’an",
"recentchanges": "capi a demaiday a sumad",
"recentchanges-legend": "capi a demiad masumaday a mapiliay",
"recentchanges-legend-heading": "<strong>u tinaku nu kulit:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (piazih tu tatenga’ay [[Special:NewPages| baluhayay a kasabelih]])",
"recentchanges-submit": "paazih",
+ "rcfilters-days-show-hours": "$1 {{PLURAL:$1|tuki}}",
+ "rcfilters-quickfilters": "suped sebseb sakaluk",
+ "rcfilters-savedqueries-defaultlabel": "suped sebseb sakaluk",
+ "rcfilters-savedqueries-rename": "miliyaw miteka pangangan",
+ "rcfilters-savedqueries-setdefault": "paceken pataayaw tu kawaw",
"rcfilters-savedqueries-new-name-label": "kalungangan",
"rcfilters-savedqueries-cancel-label": "palawpes",
- "rcfilters-filterlist-title": "kilim",
+ "rcfilters-filterlist-title": "sakacucek nu misapili’",
+ "rcfilters-highlightbutton-title": "pulita sacuzu’ a heci",
+ "rcfilters-highlightmenu-title": "mipili’ tu kilit",
+ "rcfilters-filterlist-noresults": "caykatepa sakacucek nu misapili’",
+ "rcfilters-filtergroup-authorship": "paaninay a masacudaday",
"rcfilters-filter-editsbyself-label": "numisuay a mikawaway-kalumyiti",
+ "rcfilters-filter-editsbyself-description": "numisuay a paanin",
+ "rcfilters-filter-editsbyother-label": "zumaay tatemaw a sumad",
"rcfilters-filter-user-experience-level-registered-label": "pangangan tuway",
"rcfilters-filter-user-experience-level-unregistered-label": "caay henay pangangan",
"rcfilters-filter-user-experience-level-newcomer-label": "baluhayay a misaungayay",
"rcfilters-filter-user-experience-level-learner-label": "mahananamay",
+ "rcfilters-filtergroup-automated": "palunukay a paanin",
"rcfilters-filter-bots-label": "kikay a tademaw",
+ "rcfilters-filtergroup-reviewstatus": "ciwsya setyitase",
"rcfilters-filter-patrolled-label": "tayza mikibi tuway",
"rcfilters-filter-unpatrolled-label": "caay henay tayza mikibi",
"rcfilters-filtergroup-significance": "kakilulen",
"rcfilters-filter-minor-label": "cayka yadah ku misumad",
+ "rcfilters-filter-major-label": "caay mikilulay mikawaway-kalumyiti",
+ "rcfilters-filter-watchlist-watched-label": "miazih piazihan tu sulit",
+ "rcfilters-filtergroup-changetype": "misumad nikalahizaan",
+ "rcfilters-filter-pageedits-label": "mikawaway-kalumyiti nu kasabelih",
+ "rcfilters-filter-newpages-label": "patizeng kasabelih",
"rcfilters-filter-categorization-label": "kakuniza misumad",
+ "rcfilters-filter-logactions-label": "saungay a nasulitan nazipa’an",
"rcfilters-filtergroup-lastRevision": "sabaluhay masumad",
"rclistfrom": "paazih nay $3 $2 baluhayay a sumad katukuh ayza",
- "rcshowhideminor": "$1 mikilulay mikawaway tu kalumyiti",
+ "rcshowhideminor": "$1 mikilulay mikawaway-kalumyiti",
"rcshowhideminor-show": "paazih",
- "rcshowhideminor-hide": "Hide",
- "rcshowhidebots": "$1 kikay a tademaw",
+ "rcshowhideminor-hide": "midimut",
+ "rcshowhidebots": "$1 kikay-tademaw",
"rcshowhidebots-show": "paazih",
"rcshowhidebots-hide": "midimut",
"rcshowhideliu": "$1 mapangangan tuway a misaungayay",
"rcshowhideanons": "$1 paceba panganganay a misaungayay",
"rcshowhideanons-show": "paazih",
"rcshowhideanons-hide": "midimut",
+ "rcshowhidepatr": "$1 tayza mikibi mikawaway-kalumyiti",
"rcshowhidepatr-show": "paazih",
"rcshowhidepatr-hide": "midimut",
"rcshowhidemine": "$1 mikawaway tu kalumyiti nu maku",
"rcshowhidemine-show": "paazih",
"rcshowhidemine-hide": "midimut",
+ "rcshowhidecategorization": "$1 kasabelih nu kakuniza",
"rcshowhidecategorization-show": "paazih",
"rcshowhidecategorization-hide": "midimut",
"rclinks": "paazih capi a demiad $2 a demiaday a saka $1 a sumad.",
"minoreditletter": "adidi’",
"newpageletter": "baluhay",
"boteditletter": "kikay a tademaw",
+ "rc_categories_any": "amahicahica tu mipili’ay",
"rc-change-size-new": "masumadtu sa u $1 {{PLURAL:$1|wyiyincu}}",
"newsectionsummary": "/* $1 */ baluhay a tusil",
+ "rc-enhanced-expand": "paazih pulita kalunasulitan",
+ "rc-enhanced-hide": "midimut pulitaay a kalunasulitan",
"recentchangeslinked": "sasuala a sumad",
"recentchangeslinked-feed": "sasuala a sumad",
"recentchangeslinked-toolbox": "sasuala a sumad",
"recentchangeslinked-to": "Show changes to pages linked to the given page instead\nmisumad ku paazih masasiket tayza matuzu’ay kasabelih a nisumad",
"upload": "patapabaw ku tangan",
"uploadnologin": "caay henay patalabu",
+ "uploaderror": "patapabaw mungangaw",
+ "uploadlogpage": "patapabaw nasulitan nazipa’an",
"filename": "kalungangan nu tangan",
"filedesc": "pecu’ nu lacul",
"fileuploadsummary": "pecu’ nu lacul:",
+ "filereuploadsummary": "tangan misaimed:",
"filestatus": "nisanga’an niza tu tungus a kawaw setyitase:",
"filesource": "saangangan:",
+ "ignorewarnings": "sekipo sacahamin patalaw",
+ "uploadwarning": "patapabaw patalaw",
+ "savefile": "misuped tu tangan",
+ "upload-source": "saangangan a tangan",
"upload-description": "tangan sapuelac",
+ "upload-options": "patapabaw mapiliay",
+ "watchthisupload": "miazih tina tangan",
+ "upload-file-error": "ilabuay a mungangaw",
"upload-dialog-button-cancel": "palawpes",
"upload-dialog-button-back": "tatiku",
"upload-dialog-button-done": "pahezek",
"upload-form-label-infoform-description": "patahkal",
"upload-form-label-infoform-categories": "kakuniza",
"upload-form-label-infoform-date": "demiad",
+ "uploadstash": "patapabaw ku sulu nu pisipetan",
+ "uploadstash-refresh": "misabaluhay tu tangan piazihan tu sulit",
+ "invalid-chunk-offset": "la’cus atilad kakitizaan",
"img-auth-accessdenied": "kakaian misuped-miala",
+ "upload-curl-error28": "patapabaw mautang",
"license": "sapabeli tu kinli a cedang",
"license-header": "sapabeli tu kinli a cedang",
+ "nolicense": "caay henay mipili’",
+ "license-nopreview": "(amana pataayaway miazih)",
"listfiles-delete": "misipu",
"imgfile": "tangan",
- "listfiles": "tangan-tangan misiket",
+ "listfiles": "piazihan tu sulit nu tangan",
"listfiles_thumb": "sukep tu zunga",
"listfiles_date": "demiad",
"listfiles_name": "kalungangan",
"listfiles_count": "baziyong",
"listfiles-latestversion": "ayzaay a baziyong",
"listfiles-latestversion-yes": "hang",
- "listfiles-latestversion-no": "caay",
+ "listfiles-latestversion-no": "nayi’",
"file-anchor-link": "tangan",
"filehist": "tangan nu nazipa’an",
"filehist-help": "sapecec ku demiad/tuki sapiciwsace ku tuki nina demiad a tangan baziyong",
"filehist-datetime": "demiad/tuki",
"filehist-thumb": "sukep tu zunga",
"filehist-thumbtext": "nu $1 baziyongay a sukep tu zunga",
+ "filehist-nothumb": "inayi’ patapabaw",
"filehist-user": "misaungayay",
"filehist-dimensions": "ditek",
"filehist-filesize": "hacica-tabaki ku tangan",
"filehist-comment": "pacunus sakacaay kapawan",
- "imagelinks": "tangan sadama tu kawaw",
+ "imagelinks": "sakapaluwaluway nu tangan",
"linkstoimage": "isasaay {{PLURAL:$1| kasabelih misiket |saka $1 a kasabelih misiket}}katukuh tina tangan:",
"nolinkstoimage": "nayi’ ku kasabelih masasiket katukuh tini a tangan.",
"sharedupload-desc-here": "kina tangan nay $1 hakay satu pisaungay tu zuma a cwanan.\nisasaay paazih kuyniay a tangan i [$2 tangan patahkal kasabelih] a patahkalay a lacul.",
"shared-repo-from": "nay $1",
+ "shared-repo": "kapulung mizakecay a sulu nu tangan",
"upload-disallowed-here": "la’cus kisu mitahpu tuyni a tangan.",
+ "filerevert": "patiku $1",
+ "filerevert-legend": "patiku tu tangan",
"filerevert-comment": "mahicaay:",
+ "filedelete": "misipu \"$1\"",
"filedelete-legend": "misipu tu tangan",
"filedelete-comment": "mahicaay:",
"filedelete-submit": "masipu",
+ "filedelete-reason-otherlist": "zuma a mahicaay",
+ "filedelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
+ "filedelete-maintenance-title": "la’cus masipu tu tangan",
"download": "patasasa'",
+ "listredirects": "miliyaw patatuzu’ piazihan tu sulit",
+ "listduplicatedfiles": "misaliyaw tu tangan piazihan tu sulit",
"randompage": "kakibalucu’ ay a kasabelih",
+ "randomincategory": "kakibalucu’ kakuniza a kasabelih",
+ "randomincategory-legend": "kakibalucu’ kakuniza a kasabelih",
"randomincategory-submit": "mileku",
+ "randomredirect": "kakibalucu’ miliyaw patatuzu’",
"statistics": "sausi",
+ "statistics-header-pages": "kasabelih sausi",
"statistics-header-edits": "sausi mikawaway-kalumyiti",
+ "statistics-header-hooks": "zuma a sausi",
"statistics-articles": "lacul kasabelih",
+ "statistics-users-active": "saungay nu binawlan a misaungayay",
+ "pageswithprop-prop": "susin kalungangan:",
"pageswithprop-submit": "mileku",
"brokenredirects-delete": "misipu",
"withoutinterwiki-legend": "saayaway a sulit",
"withoutinterwiki-submit": "paazih",
"nbytes": "$1 {{PLURAL:$1|wyiyincu}}",
"ncategories": "{{PLURAL:$1|kakuniza}}",
+ "nlinks": "$1 {{PLURAL:$1|masasiket}}",
"nmembers": "$1 {{PLURAL:$1|ku mamikawaw}}",
+ "nrevisions": "$1 {{PLURAL:$1|masumad nu ayaway}}",
+ "nimagelinks": "{{PLURAL:$1|kasabelih}}",
+ "lonelypages": "masipulu’ a kasabelih",
+ "uncategorizedtemplates": "sapi kakuniza taazihan mitudung",
+ "wantedcategories": "maydihay a kakuniza",
+ "wantedpages": "maydihay a kasabelih",
+ "wantedfiles": "maydihay a tangan",
+ "wantedtemplates": "maydihay a taazihan mitudung",
"prefixindex-submit": "paazih",
+ "shortpages": "ma’ngadisay a kasabelih",
+ "longpages": "mangasiway a kasabelih",
+ "deadendpages": "inayi’ masasiket kasabelih",
+ "protectedpages": "madiputay a kasabelih",
+ "protectedpages-timestamp": "demiad tatukian",
"protectedpages-page": "kasabelih",
"protectedpages-expiry": "kakatekuhan",
+ "protectedpages-performer": "midiput misaungayay",
+ "protectedpages-params": "midiput tu aazihen a sulyang",
"protectedpages-reason": "mahicaay",
"protectedpages-submit": "paazih tu kasabelih",
+ "protectedtitles": "madiputay a satangahan",
"protectedtitles-submit": "paazih tu satangahan",
+ "listusers": "misaungayay a piazihan tu sulit",
+ "listusers-desc": "pisaungay nay tabakiay katukuh adidi’ kasalaylay",
"newpages": "baluhay kasabelih",
"newpages-submit": "paazih",
+ "newpages-username": "misaungayay a kalungangan:",
+ "ancientpages": "samalumanay a kasabelih",
"move": "milimad",
"notargettitle": "inayi’ ku pabalucu’an",
"pager-older-n": "{{PLURAL:$1| kusa malumanay}}",
"suppress": "malangat",
+ "apihelp": "buhci tu kamu nu API",
+ "apisandbox": "bunac haku nu API",
"apisandbox-fullscreen": "micuwat tu sapat",
+ "apisandbox-submit": "miawaw tu milunguc",
"apisandbox-reset": "palawpis",
"apisandbox-retry": "miliyaw mitaneng",
"apisandbox-helpurls": "buhci tu kamu masasiket",
"apisandbox-examples": "tinaku",
"apisandbox-dynamic-parameters": "zuma aazihen a sulyang",
"apisandbox-dynamic-parameters-add-label": "micunus aazihen a sulyang:",
+ "apisandbox-dynamic-parameters-add-placeholder": "kalungangan nu aazihen a sulyang",
+ "apisandbox-deprecated-parameters": "mapasatezepay a aazihen a sulyang",
+ "apisandbox-fetch-token": "lunuk suliten mima-sacukcuk",
+ "apisandbox-submit-invalid-fields-title": "izaw tu ku langat la’cus",
"apisandbox-results": "heci",
"apisandbox-continue": "palalid",
"apisandbox-continue-clear": "palawpis",
"booksources": "nu cudad atu laculaculan",
"booksources-search-legend": "mikilim ku cudad atu laculaculan",
"booksources-search": "kilim",
+ "specialloguserlabel": "mileku-misaungayay:",
"log": "nasulitan nakawawan",
"logeventslist-submit": "paazih",
+ "all-logs-page": "sacahamin pabinawlan nasulitan nazipa’an",
"checkbox-select": "mipili’: $1",
"checkbox-all": "hamin",
"checkbox-none": "nayi’",
"allpagessubmit": "mileku",
"categories": "kakuniza",
"categories-submit": "paazih",
+ "linksearch": "ihekal masasiket mikilim",
+ "linksearch-pat": "mikilim aazihen a sulit:",
"linksearch-ns": "pangangananay a salaedan:",
"linksearch-ok": "kilim",
"listusers-submit": "paazih",
+ "listusers-noresult": "caykatepa misaungayay.",
+ "listusers-blocked": "(malangat tuway)",
+ "activeusers-noresult": "caykatepa misaungayay.",
"listgrouprights-group": "luyaluy",
+ "listgrouprights-rights": "kinli",
+ "listgrouprights-members": "(sakawaway piazihan tu sulit)",
+ "listgrouprights-addgroup-all": "micunus sacahamin a luyaluy",
+ "listgrouprights-removegroup-all": "misipu sacahamin luyaluy",
+ "listgrouprights-namespaceprotection-header": "pangangananay a salaedan mikelec",
"listgrants": "pabeli tu kinli",
"listgrants-rights": "kinli",
+ "trackingcategories": "mikilul nazikuzan kakuniza",
+ "trackingcategories-desc": "kakuniza milisimet a tatungus",
+ "trackingcategories-disabled": "mapasatezep kakuniza tuway",
+ "mailnologin": "inayi’ pabahel puenengan",
+ "usermaildisabled": "mapasatezep imyiyo(email)",
+ "emailusername": "misaungayay a kalungangan:",
"emailusernamesubmit": "patayzaan",
- "emailfrom": "nay:",
+ "emailfrom": "patigamiay:",
"emailto": "katukuh:",
"emailsubject": "taazihan tu kawaw:",
"emailmessage": "palatuh:",
"mywatchlist": "miazihay a piazihan tu sulit",
"watchnologin": "caay henay patalabu",
"watch": "miazih",
+ "watchthispage": "miazih tuyni kasabelih",
+ "unwatch": "palawpes aazihan",
+ "unwatchthispage": "pahanhan miazih",
+ "notanarticle": "caay ku lacul nu kasabelih",
"watchlist-hide": "midimut",
"wlshowhideminor": "cayka yadah ku misumad",
"wlshowhidebots": "kikay a tademaw",
+ "wlshowhideliu": "napangangan a misaungayay",
+ "wlshowhideanons": "paceba panganganay a misaungayay",
+ "wlshowhidepatr": "tayza mikibi mikawaway-kalumyiti",
+ "wlshowhidemine": "numakuay a mikawaway-kalumyiti",
+ "wlshowhidecategorization": "kasabelih nu kakuniza",
+ "unwatching": "palawpes aazihan...",
+ "enotif_anon_editor": "paceba panganganay a misaungayay $1",
+ "enotif_minoredit": "payni mikilulay a mikawaway-kalumyiti",
"deletepage": "misipu tu kasabelih",
"confirm": "malucekaytu",
"delete-confirm": "misipu \"$1\"",
"dellogpage": "masipu ku nasulitan nakawawan",
"deletionlog": "masipu nasulitan nazipa’an",
"deletecomment": "mahicaay:",
+ "deletereasonotherlist": "zuma a mahicaay",
+ "rollback": "panukasan mikawaway-kalumyiti",
"rollbacklink": "panukasan",
"rollbacklinkcount": "patiku {{PLURAL:$1|mikawaway tu kalumyiti}}",
+ "rollbackfailed": "patiku mungangaw",
+ "sessionfailure-title": "kasasiket mungangaw",
+ "changecontentmodel": "misumad lacul tatudungen misanga’",
+ "changecontentmodel-title-label": "kasabelih satangahan",
+ "changecontentmodel-model-label": "tatudungen misanga’ nu baluhay a lacul",
"changecontentmodel-reason-label": "mahicaay:",
"protectlogpage": "midiput nasulitan nakawawan",
"protect-legend": "malucekay tu midiputay",
"protectcomment": "mahicaay:",
"protectexpiry": "kakatekuhan:",
+ "protect_expiry_invalid": "la’cusay a kakatekuhan",
+ "protect_expiry_old": "Expiration time is in the past.",
+ "protect-level-sysop": "mahasa mikuwanay a cacay",
"protect-summary-cascade": "patatusul",
"protect-expiring": "kakatekuhan $1 (UTC)",
+ "protect-expiring-local": "kakatekuhan katukuh i $1",
"protect-expiry-indefinite": "inayi’ u sungliw",
+ "protect-othertime": "zuma a tatukian:",
+ "protect-otherreason-op": "zuma a mahicaay",
+ "protect-edit-reasonlist": "midiput a mahicaay nu mikawaway-kalumyiti",
"restriction-type": "pabeli tu kinli mahasa:",
+ "restriction-level": "kelec kasaselal:",
+ "minimum-size": "makaadidi’ay a sausi",
+ "maximum-size": "sakatabakiay a sausi:",
+ "pagesize": "(wyiyincu)",
"restriction-edit": "mikawaway-kalumyiti",
"restriction-move": "milimad",
"restriction-create": "patizeng",
"restriction-level-sysop": "maenapay a diput",
"restriction-level-autoconfirmed": "madiputay a kasabelih - satizep mikawaway tu kalumyiti",
"restriction-level-all": "amahicahicaay a kasalelal",
+ "undelete-fieldset-title": "patiku misumad nu ayaway",
"undeletebtn": "patiku",
"undeletecomment": "mahicaay:",
"undelete-search-submit": "kilim",
"uctop": "(ayza)",
"month": "sazikuzay demiad nabuladan:",
"year": "sazikuzay demiad mihcaan:",
+ "sp-contributions-newbies-sub": "paanin nu baluhay a canghaw",
"sp-contributions-blocklog": "milangat tu nasulitan nakawawan",
"sp-contributions-uploads": "patapabaw",
"sp-contributions-logs": "nasulitan nakawawan",
"sp-contributions-talk": "sasukamu",
+ "sp-contributions-search": "mikilim tu paanin",
+ "sp-contributions-hideminor": "midimut mikilulay mikawaway-kalumyiti",
"sp-contributions-submit": "kilim",
"whatlinkshere": "masasiket katukuh uyniyay a kasabelih",
"whatlinkshere-title": "masasiket tazumaay a \"$1\" kasabelih",
"whatlinkshere-page": "Kasabelih:",
"linkshere": "isasaay a kasabelih masasiket tazuma tu <strong>[[:$1]]</strong>:",
"isredirect": "miliyaw tazuma kasabelih",
- "istemplate": "nicaliwan",
+ "istemplate": "palaculen tu kasabelih",
"isimage": "tangan-tangan misiket",
"whatlinkshere-prev": "saka {{PLURAL:$1|nuayaway}}",
"whatlinkshere-next": "saka {{PLURAL:$1|nuzikuzan}}",
"whatlinkshere-hidetrans": "$1 nicaliwan",
"whatlinkshere-hidelinks": "$1 masasiket",
"whatlinkshere-hideimages": "$1 tangan-tangan misiket",
- "whatlinkshere-filters": "kilim",
+ "whatlinkshere-filters": "sakacucek nu misapili’",
"whatlinkshere-submit": "mileku",
+ "block": "milangat misaungayay",
+ "blockip-legend": "milangat misaungayay",
"ipbexpiry": "kakatekuhan:",
"ipbreason": "mahicaay:",
+ "ipbsubmit": "milangat tina misaungayay",
+ "ipbother": "zuma a tatukian:",
"ipb-confirm": "malucekay tu langat",
"blockipsuccesssub": "milangat malahci",
+ "ipb-edit-dropdown": "malangat a mahicaay nu mikawaway-kalumyiti",
"ipb-blocklist-duration-left": "$1 pakawili",
+ "ipusubmit": "misipu tina langat",
"autoblocklist-submit": "kilim",
+ "blocklist-userblocks": "midimut canghaw malangat",
+ "blocklist-tempblocks": "midimut nanunuz malangat",
+ "blocklist-timestamp": "demiad tatukian",
"blocklist-target": "pabalucu’an",
"blocklist-expiry": "kakatekuhan",
+ "blocklist-by": "milangat a mikuwanay",
"blocklist-params": "milangat tu aazihen a sulyang",
"blocklist-reason": "mahicaay",
"ipblocklist-submit": "kilim",
+ "ipblocklist-localblock": "milangat itiniay",
"infiniteblock": "inayi’ u sungliw",
- "blocklink": "malangat",
+ "noautoblockblock": "mapasatezep lunuk milangat",
+ "emailblock": "mapasatezep imyiyo(email)",
+ "blocklink": "milangat",
"change-blocklink": "misumad tu langat",
"contribslink": "paanin",
+ "emaillink": "pabahel imyiyo(email)",
"blocklogpage": "milangat tu nasulitan nakawawan",
+ "block-log-flags-noautoblock": "mapasatezep lunuk milangat",
+ "block-log-flags-noemail": "mapasatezep imyiyo(email)",
+ "lockdb": "pamutek tu sulu nu kalunasulitan",
+ "lockbtn": "pamutek tu sulu nu kalunasulitan",
+ "move-page": "milimad $1",
+ "move-page-legend": "milimad kasabelih",
+ "newtitle": "baluhay satangahan:",
+ "movepagebtn": "milimad kasabelih",
+ "pagemovedsub": "milimad malaheci tuway",
"movelogpage": "milimad ku nasulitan nakawawan",
"movereason": "mahicaay:",
"export": "patahkal ku kasabelih",
+ "exportall": "patahkal sacahamin kasabelih",
"export-submit": "patahkal",
+ "export-download": "misuped sapatangan",
"export-templates": "yamalyilu taazihan mitudung",
+ "allmessages": "sisetyimo palatuh",
"allmessagesname": "kalungangan",
+ "allmessagesdefault": "pataayaw tu kawaw palatuh a sulit",
"allmessages-filter-legend": "kilim",
"allmessages-filter-unmodified": "caay henay misumad",
"allmessages-filter-all": "hamin",
"allmessages-filter-modified": "masumad tuway",
+ "allmessages-prefix": "ahizan saayaway a sulit mikilim:",
"allmessages-language": "kamu:",
"allmessages-filter-submit": "mileku",
"allmessages-filter-translate": "mibelih",
"thumbnail-more": "patabaki(micuwat)",
"filemissing": "tangan mahedaw",
"import": "pacumuden kasabelih",
+ "import-interwiki-sourcepage": "saangangan kasabelih:",
+ "import-interwiki-templates": "yamalyilu sacahamin taazihan mitudung",
"import-interwiki-submit": "pacumud",
"import-upload-filename": "kalungangan nu tangan:",
"import-comment": "pacunus sakacaay kapawan:",
+ "import-revision-count": "$1 {{PLURAL:$1|masumad nu ayaway}}",
+ "importsuccess": "pahezek tuway pacumud!",
"importlogpage": "pacumuden nasulitan nazipa’an",
"tooltip-pt-userpage": "{{GENDER:|misaungayay nu misu}} kasabelih",
"tooltip-pt-mytalk": "{{GENDER:|misuay }}sasukamu a kasabelih",
"tooltip-pt-logout": "katahkal",
"tooltip-pt-createaccount": "taneng kami pauuh kisuan panganganen tu cacay canghaw atu patalabu, anu caay ku tabakiay a pisaungay.",
"tooltip-ca-talk": "matatengil tu mahizaay lacul nu kasabelih",
- "tooltip-ca-edit": "mikawaway tu kalumyiti uyni kasabelih",
+ "tooltip-ca-edit": "mikawaway-kalumyiti uyni a kasabelih",
"tooltip-ca-viewsource": "uyni kasabelih madiputay tuway.\nkapah kisu miciwsace tuyni kasabelih sakatizeng bangu",
"tooltip-ca-history": "uyini kasabelih nasawniay a sumad",
"tooltip-ca-move": "milimad tina kasabelih",
"tooltip-ca-nstab-template": "ciwsace taazihan mitudung",
"tooltip-ca-nstab-category": "ciwsace kakuniza a kasabelih",
"tooltip-save": "misuped misuay a pisumad",
+ "tooltip-publish": "patiyak tu sumad nu misu",
"tooltip-preview": "kay iayaw nu pisuped miazih tu nu misuay nisumad.",
"tooltip-diff": "paazih hica sa kisu labuay a nisumadan",
"tooltip-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
+ "tooltip-watchlistedit-normal-submit": "misipu satangahan",
+ "tooltip-upload": "miteka patapabaw",
"tooltip-rollback": "sapecec \"patiku\" misiket, kapah patiku tayza nuayawanay a paanin tu nisulitan tina kasabelih mikawaway tu kalumyiti",
"tooltip-undo": "\"patiku\" kapah tu patiku tuyni mikawaway tu kalumyiti payni pataayaway miazih muse miwawah mikawaway tu kalumyiti aazihan cudad, saka caay cayaw nu labu micunus mahicaay.",
+ "tooltip-preferences-save": "pisuped tu setin nu kanamuhan",
"tooltip-summary": "kapisulitan apuyu’ay a pecu’ nu lacul",
"others": "zuma",
+ "creditspage": "kasabelih kasakumi nu misayingaay",
"simpleantispam-label": "sapi tena’ babakahen a sulit kinsa.\nyu <strong>amana</strong> misulit kuyni pisinga’an!",
"pageinfo-header-basic": "anganganay a cesyun",
"pageinfo-header-edits": "nazipa’an nu mikawaway-kalumyiti",
+ "pageinfo-header-restrictions": "kasabelih midiput",
+ "pageinfo-header-properties": "susin nu kasabelih",
"pageinfo-display-title": "paazih tu satangahan",
+ "pageinfo-article-id": "kasabelih ID",
+ "pageinfo-language": "kasabelih lacul a kamu",
"pageinfo-language-change": "misumad",
+ "pageinfo-content-model": "kasabelih a lacul tatudungen misanga’",
"pageinfo-content-model-change": "misumad",
"pageinfo-robot-noindex": "amana",
+ "pageinfo-watchers": "kasabelih miazihay a nikayadah",
+ "pageinfo-firstuser": "kasabelih patizengay",
+ "pageinfo-firsttime": "patizeng demiad nu kasabelih",
+ "pageinfo-lastuser": "capiay a mikawaway-kalumyiti",
+ "pageinfo-lasttime": "capiay a demiad nu mikawaway-kalumyiti",
+ "pageinfo-edits": "pulung nikayadah nu mikawaway-kalumyiti",
+ "pageinfo-authors": "papina nu masacudaday",
+ "pageinfo-recent-authors": "capiay masacudaday a nikayadah",
"pageinfo-toolboxlink": "kasabelih cesyun",
"pageinfo-redirectsto-info": "katinengan",
"pageinfo-contentpage-yes": "hang",
"pageinfo-protect-cascading-yes": "hang",
+ "pageinfo-protect-cascading-from": "patatusul midiput namakay",
"pageinfo-category-info": "kakuniza a cesyun",
+ "pageinfo-category-total": "papina nu sakawaway",
+ "pageinfo-category-pages": "kasabelih nikayadah",
+ "pageinfo-category-subcats": "sailuc-kasasizuma nikayadah",
+ "pageinfo-category-files": "tangan nikayadah",
+ "markaspatrolleddiff": "silusi natayza mikibi tuway",
+ "markedaspatrolled": "silusi natayza mikibi tuway",
+ "patrol-log-page": "tayza mikibi nasulitan nazipa’an",
+ "log-show-hide-patrol": "$1 tayza mikibi nasulitan nazipa’an",
+ "log-show-hide-tag": "$1 aazihen a paya nasulitan nazipa’an",
"confirm-markpatrolled-button": "malucekay",
"previousdiff": "← malumanay a mikawaway tu kalumyiti",
"nextdiff": "baluhayay mikawaway tu kalumyit →",
+ "thumbsize": "sukep tu zunga hacica-tabaki:",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ku kasabelih}}",
"file-info-size": "$1 × $2 syangsu, hacica ku tabaki nu tangan: $3, MIME kakuniza: $4",
"file-info-size-pages": "$1 × $2 syangsu, hacica ku tabaki nu tangan:$3,MIME kakuniza: $4, $5 {{PLURAL:$5|ku kasabelih}}",
"file-info-png-frames": "$1 {{PLURAL:$1|misabacu}}",
"newimages": "baluhay tangan a sulu nu zunga",
"newimages-legend": "kilim",
+ "noimages": "inayi’ amahicahica tu zunga.",
+ "gallery-slideshow-toggle": "ketun mibalic sukep tu zunga",
"ilsubmit": "kilim",
"bydate": "ahizan tu demiad",
+ "minutes": "{{PLURAL:$1|$1 widi}}",
+ "hours": "{{PLURAL:$1|$1 tuki}}",
"days": "$1 {{PLURAL:$1|a demiad}}",
"ago": "ayaw nu $1",
"just-now": "nasawni",
+ "monday-at": "sakacacay a demiad nu lipay i$1",
+ "friday-at": "sakalima a demied nu lipay i $1",
+ "saturday-at": "sakaenem a demiad nu lipay i $1",
"metadata": "pulita tu kalunasulitan",
"metadata-help": "uyni tangan labuay amin yamalyilu zuma cesyun, uyni a cesyun akay nay suewyi sasasing asaca sapisekyin i tapang asaca suwyihwa saayaw katukuh pahzekan a nakawawan mapacunusay. anu nay tangan saayaway setyitase masumadtu, hatizaay pulita kalunasulitan akay la’cus mileku mabetil a misumad tu tangan.",
"metadata-fields": "i tini palatuh patahkal i labuay a EXIF pulita tu kalunasulitanay a kakitizaan, yamalyilu i zunga paazih kasabelih, sapipulita tu cudad nu nasulitan malepi’ paazih palatuh.\nzumaay a pulita tu cudad pataayaw tu kawaw midimut.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "ahebal",
- "exif-imagelength": "u takalaw",
+ "exif-imagelength": "takalaw sulyang",
+ "exif-bitspersample": "paysyangsuay a wyiyin",
"exif-compression": "piepian mipecec a sasakawawen",
+ "exif-photometricinterpretation": "pacamel-palacul tu syangsu",
"exif-orientation": "papayzaan",
+ "exif-samplesperpixel": "syangsu nikayadah",
"exif-planarconfiguration": "kalunasulitan misilsil",
"exif-xresolution": "sasuala katingalaw",
"exif-yresolution": "mitelekay katingalaw",
+ "exif-stripoffsets": "iga kalunasulitan kakitizaan",
+ "exif-rowsperstrip": "cacay ku kaus papina ku tusil",
+ "exif-whitepoint": "sangelacay hacica-kulit",
"exif-primarychromaticities": "sausi sulyang nu kulit",
+ "exif-referenceblackwhite": "umeniay-sangelacay miazih tu tatenga’ay nikayadah",
"exif-datetime": "tangan misumaday a demiad atu tuki",
"exif-imagedescription": "satangahan nu iga",
- "exif-make": "sasasing misanga’ay tu kalutuud",
- "exif-model": "sasasing silosi nu nisanga’an",
+ "exif-make": "sasasing-kikay misanga’ tu kalutuuday",
+ "exif-model": "sasasing nu nisanga’an a banggu",
"exif-software": "pisaungay zwanti",
"exif-artist": "masacudaday",
+ "exif-copyright": "nizaay nisanga’an tu tungus a kawaw",
"exif-exifversion": "Exif baziyong / sapad",
"exif-colorspace": "kalukulit salaedan",
+ "exif-componentsconfiguration": "paysyangsu yamalyilu",
+ "exif-compressedbitsperpixel": "iga piepian mipecec a muse",
"exif-pixelxdimension": "zunga nu hacica-ahebal",
"exif-pixelydimension": "zunga nu hacica-takalaw",
+ "exif-usercomment": "misaungayay a buhci tu kamu",
"exif-datetimeoriginal": "kalunasulitan masangaay’ a demiad atu tuki",
"exif-datetimedigitized": "suwyihwaay a demiad atu tuki",
"exif-exposuretime": "mapaedil a lawad",
"exif-exposureprogram": "mapaedil a muse",
+ "exif-spectralsensitivity": "edil-selal saahemi’han",
+ "exif-isospeedratings": "ISO suli",
+ "exif-maxaperturevalue": "satabakiay a likat-mulu i lala’ nu kitakit",
+ "exif-subjectdistance": "ilaed nu satangahan",
+ "exif-meteringmode": "miditek tu edil a muse",
"exif-lightsource": "katahkalan nu likat",
"exif-flash": "sabelabelatay a tinghuy",
"exif-focallength": "saed nu sapisasing",
+ "exif-subjectarea": "sausi a kakitizaan",
+ "exif-flashenergy": "sabelabelatay a tinghuy u icelang",
+ "exif-subjectlocation": "kakitizaan nu satangahan",
"exif-exposureindex": "mapaedil a sulyang",
+ "exif-sensingmethod": "mise nu nikasumad nay edil",
"exif-filesource": "saangangan nu tangan",
+ "exif-scenetype": "makaazihay nikalahizaan",
+ "exif-customrendered": "pakuniza misanga’ iga",
"exif-whitebalance": "sapalalen nu salengacay",
+ "exif-scenecapturetype": "makaazihay masasing nikalahizaan",
+ "exif-gaincontrol": "makaazihay misimaw",
"exif-contrast": "e-contrast",
"exif-saturation": "matumesay a sulyang",
+ "exif-devicesettingdescription": "sakaluk setin sapuelac",
+ "exif-gpslatituderef": "pyiwyi asaca nanwyi",
+ "exif-gpslongituderef": "tongcing asaca sicing",
+ "exif-gpsaltituderef": "nutakalaw namakay bayu’ miazih tu tatenga’ay a sulyang",
+ "exif-gpssatellites": "sapiditekay a zizuisi",
+ "exif-gpsstatus": "pizawis sakaluk setyitase",
+ "exif-gpsmeasuremode": "miditek a muse",
+ "exif-gpsdop": "miditek a tatungus",
+ "exif-gpsspeedref": "saduba’ kalamkam a sacacaycacay",
+ "exif-gpsdestlatitude": "pabalucu’an a wyitu",
+ "exif-gpsdestlongituderef": "pabalucu’an a cintu",
+ "exif-gpsdatestamp": "GPS a demiad",
"exif-keywords": "aazihen dulit",
+ "exif-worldregioncreated": "zunga masasing a kakitizaan",
+ "exif-provinceorstatecreated": "yakuwanan a sasing",
+ "exif-citycreated": "yatukay a sasing",
"exif-countrydest": "paazih tu kanatal",
+ "exif-countrycodedest": "paazih kanatal a kodo",
+ "exif-provinceorstatedest": "paazih seng asaca cou",
+ "exif-citydest": "paazihay a tukay",
"exif-objectname": "sapuyuay a ngangan",
+ "exif-specialinstructions": "sazumaay buhci tu kamu",
"exif-headline": "satangahan",
+ "exif-credit": "misanga’/nipabeli’ay",
"exif-source": "saangangan",
+ "exif-editstatus": "zunga setyitase nu binawlan sapuelac",
"exif-urgency": "hacica ku kalah",
+ "exif-locationdest": "patahkal kahicelaan",
+ "exif-locationdestcode": "kakitizaan kodo sapuelac",
"exif-contact": "patakusan a cesyun",
"exif-writer": "misacudaday",
"exif-languagecode": "kamu",
+ "exif-iimversion": "IIM baziyong",
"exif-iimcategory": "kakuniza",
+ "exif-iimsupplementalcategory": "micunus kakuniza",
"exif-datetimereleased": "patiyak i",
"exif-identifier": "mapulitaay a kodo",
+ "exif-lens": "pisaungay tu cingtou",
+ "exif-serialnumber": "sasasing salaylay a banggu",
+ "exif-cameraownername": "sasasing nizaay",
"exif-label": "aazihen paya",
+ "exif-rightscertificate": "nisanga’an niza tu tungus a kawaw nu makuwanay a pincen",
"exif-copyrighted": "nisanga’an niza tu tungus a kawaw setyitase",
"exif-usageterms": "mamaala a cedang",
+ "exif-webstatement": "nabalucu'an nu i telay nisanga’an niza tu tungus a kawaw",
+ "exif-morepermissionsurl": "paliyuh pabeli tu kinli a cesyun",
"exif-disclaimer": "caay pimuku tu sikining",
"exif-contentwarning": "lacul mipatalaw",
+ "exif-intellectualgenre": "kasacacay nikalahizaan",
+ "exif-subjectnewscode": "kodo nu satangahan",
"exif-event": "sapuelac tu sikikawaw",
+ "exif-organisationinimage": "sapuelac nu mikumi",
+ "exif-personinimage": "sapuelac tu tademaw",
+ "exif-originalimageheight": "takalaway nu caayhen masait",
"exif-compression-1": "caay henay piepian mipecec",
+ "exif-copyrighted-true": "madiput nu nisanga’an niza tu tungus a kawaw",
+ "exif-copyrighted-false": "caay kapulita nu nisanga’an niza tu tungus a kawaw setyitase",
+ "exif-unknowndate": "caay kapulita ku demiad",
"exif-orientation-1": "tatungus",
"exif-orientation-2": "mabelih tu zazay",
"exif-orientation-4": "mabelih tu mitelekay",
"exif-planarconfiguration-1": "pu’nel-kizemu a kese",
+ "exif-planarconfiguration-2": "kimpi’ a kese",
+ "exif-colorspace-65535": "caay henay masitudung ku kulit",
"exif-componentsconfiguration-0": "inayi’",
"exif-exposureprogram-0": "caay henay misaheci",
"exif-exposureprogram-1": "palima",
+ "exif-exposureprogram-2": "tatungus a muse",
"exif-exposureprogram-3": "likat maluayaw",
+ "exif-exposureprogram-4": "kiyata maluayaw",
"exif-subjectdistance-value": "$1 mi",
+ "exif-meteringmode-2": "pikuwanan pacunus lalet",
+ "exif-meteringmode-5": "muse",
"exif-meteringmode-255": "zuma",
- "exif-lightsource-1": "edil",
+ "exif-lightsource-1": "likat",
"exif-lightsource-2": "inkwang a tinghuy",
"exif-lightsource-4": "sabelabelatay a tinghuy",
"exif-lightsource-9": "cilalah a demiad",
"exif-lightsource-10": "kenutan",
"exif-lightsource-11": "iduutay",
+ "exif-lightsource-255": "zuma katahkalan nu likat",
+ "exif-flash-fired-0": "sabelabelatay a tinghui caay henay miwawah",
+ "exif-flash-fired-1": "sabelabelatay a tinghui miwawah tuway",
"exif-flash-mode-3": "lunuk muse",
+ "exif-flash-function-1": "inayi’ sasahicaan nu sabelabelatay a tinghui",
+ "exif-flash-redeye-1": "muse nu kasatezep tu sumanahay a mata",
"exif-focalplaneresolutionunit-2": "incun",
+ "exif-sensingmethod-1": "caay henay misaheci",
"exif-filesource-3": "sulyangay a sasasing",
+ "exif-scenetype-1": "besuc han misasingay a zunga",
+ "exif-customrendered-0": "habutuday a laylay",
"exif-customrendered-1": "pakuniza misanga’ay a laylay",
"exif-exposuremode-0": "lunuk mapaedil",
+ "exif-exposuremode-1": "lima-saungay mapaedil",
+ "exif-exposuremode-2": "lunuk laup mapacedil",
+ "exif-whitebalance-0": "lunuk sapalalen nu salengacay",
+ "exif-whitebalance-1": "lima-saungay sapalalen nu salengacay",
"exif-scenecapturetype-0": "tatungus",
"exif-scenecapturetype-1": "makaazihay",
"exif-scenecapturetype-2": "sassing nu tademaw",
"exif-contrast-1": "pu’nel",
"exif-contrast-2": "takalaw",
"exif-saturation-0": "tatungus",
+ "exif-saturation-1": "caykatumesay a kulit",
"exif-saturation-2": "takalaw atu matumes ku kulit",
"exif-sharpness-0": "tatungus",
"exif-sharpness-1": "pu’nel",
"exif-sharpness-2": "takalaw",
+ "exif-subjectdistancerange-1": "ciyuci",
"exif-subjectdistancerange-2": "pakatepalay a azih",
"exif-subjectdistancerange-3": "pakabatatay a azih",
"exif-gpslatitude-n": "pyiwyi",
"exif-gpslatitude-s": "nanwyi",
"exif-gpslongitude-e": "tongcing",
"exif-gpslongitude-w": "sicing",
+ "exif-gpsstatus-a": "miditek miteka henay ayza",
+ "exif-gpsstatus-v": "miditek masasiketay a sausi",
"exif-gpsmeasuremode-2": "tusa-wei miditek",
"exif-gpsmeasuremode-3": "tulu-wei miditek",
+ "exif-gpsspeed-k": "paytuki a kungli",
+ "exif-gpsspeed-m": "paytuki a inli",
"exif-gpsdestdistance-k": "kungli",
"exif-gpsdestdistance-m": "inli",
"exif-gpsdestdistance-n": "hayli",
"exif-objectcycle-a": "namalamam a cacay",
"exif-objectcycle-p": "nakalahukan a cacay",
+ "exif-objectcycle-b": "namalanam atu namalahuk",
+ "exif-gpsdirection-t": "tatengaay tatuzu’an",
+ "exif-gpsdirection-m": "tatuzu'an nu tyice",
"exif-ycbcrpositioning-2": "palecad miala tu maaziahan",
"exif-dc-contributor": "paaninay tu kalusasing",
"exif-dc-date": "demiad",
"exif-dc-publisher": "insacay",
+ "exif-dc-relation": "mahizaay u myiti",
"exif-dc-rights": "kinli",
+ "exif-dc-source": "saangangan a myiti",
+ "exif-dc-type": "myiti nikalahizaan",
"exif-rating-rejected": "kakaian",
+ "exif-iimcategory-clj": "mungangaw atu hulic",
+ "exif-iimcategory-fin": "kyizay atu syubay",
"exif-iimcategory-edu": "pasubana’ay a kawaw",
"exif-iimcategory-evn": "liwliw",
"exif-iimcategory-hth": "kapah ku uzip",
"exif-iimcategory-hum": "u zazan nu tademaw",
"exif-iimcategory-lab": "makawaw",
+ "exif-iimcategory-lif": "nikauzip atu pahanhanan",
+ "exif-iimcategory-pol": "cengcey",
+ "exif-iimcategory-rel": "papazaan atu papayzaan",
+ "exif-iimcategory-sci": "kagak atu keci",
+ "exif-iimcategory-soi": "binawlan a munday",
"exif-iimcategory-spo": "wundukay",
"exif-iimcategory-wea": "demidad",
"exif-urgency-normal": "tatungus ($1)",
+ "exif-urgency-high": "takalaw ($1)",
"namespacesall": "hamin",
"monthsall": "hamin",
+ "recreate": "miliyaw miteka patizeng",
"confirm_purge_button": "malucekay",
"confirm-watch-button": "malucekay",
"confirm-unwatch-button": "malucekay",
"quotation-marks": "\"$1\"",
"imgmultipagenext": "zikuzan a belih →",
"imgmultigo": "mileku!",
+ "img-lang-default": "(pataayaw tu kawaw a kamu)",
"img-lang-go": "mileku",
"ascending_abbrev": "masalaylay adidi’ay katukuh tabakiay",
"descending_abbrev": "masalaylay tabakiay katukuh adidi’ay",
"table_pager_next": "zikuzan a belih",
"table_pager_last": "sazikuzay a kasabelih",
+ "table_pager_limit_label": "paybelih a sulit:",
"table_pager_limit_submit": "mileku",
+ "table_pager_empty": "inayi’ ku heci",
+ "autosumm-blank": "nayi’ ku cacan a kasabelih",
+ "autosumm-newblank": "patizeng nayi’ ku cacan a kasabelih",
+ "watchlistedit-normal-title": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
+ "watchlistedit-normal-submit": "misipu satangahan",
+ "watchlistedit-clear-title": "misipu miazihay a piazihan tu sulit",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| sasukamu ]])",
"timezone-local": "itizaay",
"version": "baziyong",
+ "version-skins": "malacul tu nuhekalan",
"version-specialpages": "sazumaay a kasabelih",
+ "version-parserhooks": "kulawid nu saheciay sakaluk",
"version-other": "zuma",
+ "version-mediahandlers": "myiti saungayay a sakaluk",
"version-hooks": "kulawid",
"version-hook-name": "kalawid a kalungangan",
"version-hook-subscribedby": "pangangan",
+ "version-no-ext-name": "[caay henay pangangan]",
"version-skin-colheader-name": "nuhekalan",
"version-ext-colheader-version": "baziyong",
"version-ext-colheader-license": "sapabeli tu kinli a cedang",
"version-ext-colheader-description": "patahkal",
"version-ext-colheader-credits": "masacudaday",
"version-poweredby-others": "zuma",
+ "version-software": "malacul tu ku zwanti",
"version-software-product": "nasang’ay a tuutuud",
"version-software-version": "baziyong",
+ "version-entrypoints": "sacumud URL",
"version-entrypoints-header-url": "URL",
"version-libraries-library": "sulu nu cengse",
"version-libraries-version": "baziyong",
"version-libraries-description": "patahkal",
"version-libraries-authors": "masacudaday",
"redirect-submit": "mileku",
+ "redirect-page": "kasabelih ID",
"redirect-file": "kalungangan nu tangan",
+ "redirect-logid": "nasulitan nazipa’an ID",
+ "redirect-not-exists": "caykatepa ku sulyang",
+ "fileduplicatesearch": "mikilim masaliyaw a tangan",
"fileduplicatesearch-filename": "kalungangan nu tangan:",
"fileduplicatesearch-submit": "kilim",
"specialpages": "sazumaay a kasabelih",
+ "specialpages-group-maintenance": "aazihen a cudad nu midiputay",
+ "specialpages-group-other": "sazumaay cidek a kasabelih",
"specialpages-group-login": "patalabu / panganganen ku canghaw",
"specialpages-group-highuse": "sawsawniay a kasabelih",
+ "specialpages-group-pages": "piazihan tu sulit nu kasabelih",
+ "specialpages-group-pagetools": "kasabelih sakaluk",
+ "specialpages-group-wiki": "kalunasulitan atu sakaluk",
+ "specialpages-group-developer": "saayaway miteka a misakakawaway sakaluk",
"blankpage": "salengacay a kasabelih",
"tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
"tag-filter-submit": "kilim",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2)",
+ "tag-mw-contentmodelchange": "lacul tatudungen misanga’ misumad",
+ "tags-tag": "aazihen a paya kalungangan",
"tags-source-header": "saangangan",
"tags-actions-header": "saungay",
"tags-active-yes": "hang",
"tags-active-no": "caay",
+ "tags-source-extension": "nay misaheci nu zwanti",
+ "tags-source-none": "caytu pisaungay",
"tags-delete": "masipu",
"tags-activate": "miteka’",
"tags-deactivate": "mapasatezep",
+ "tags-hitcount": "$1 {{PLURAL:$1|misumad}}",
+ "tags-create-heading": "patizeng baluhay aazihen a paya",
+ "tags-create-tag-name": "aazihen a paya kalungangan:",
"tags-create-reason": "mahicaay:",
"tags-create-submit": "patizeng",
"tags-delete-title": "misipu tu aazihen a paya",
"tags-activate-submit": "miteka’",
"tags-deactivate-title": "mapasatezep tu aazihen a paya",
"tags-deactivate-reason": "mahicaay:",
+ "tags-edit-title": "aazihen a paya mikawaway-kalumyiti",
+ "tags-edit-manage-link": "aazihen a paya nu kuwan",
+ "tags-edit-new-tags": "baluhay aazihen a paya:",
+ "tags-edit-chosen-placeholder": "mipili’ hatizaay aazihen a paya",
"tags-edit-reason": "mahicaay:",
"comparepages": "sasutili’ay a kasabelih",
+ "compare-page1": "sakacacay a belih",
+ "compare-page2": "sakatusa a belih",
+ "compare-rev1": "misumad nu ayaway 1",
+ "compare-rev2": "misumad nu ayaway 2",
"compare-submit": "sasutili’ay",
"diff-form": "sasizuma",
"permanentlink": "saluimengay misiket",
"htmlform-submit": "patayzaan",
+ "htmlform-reset": "patiku masumaday",
"htmlform-selectorother-other": "zuma",
"htmlform-no": "caay",
"htmlform-yes": "hang",
"htmlform-user-not-exists": "<strong>$1</strong> inayi’",
"logentry-delete-delete": "$1 {{GENDER:$2|masiputu}} kasabelih $3",
"restore-count-files": "{{PLURAL:$1|1 tangan}}",
+ "revdelete-content-hid": "madimut tu ku lacul",
+ "revdelete-content-unhid": "palawpes midimut tu lacul",
"logentry-move-move": "$1 {{GENDER:$2|milimad tuway}} kasabelih $3 katukuh $4",
"logentry-newusers-create": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
"logentry-upload-upload": "$1 {{GENDER:$2|masayacay tuway}} $3",
+ "log-name-tag": "aazihen a paya nasulitan nazipa’an",
"rightsnone": "(nayi’)",
"feedback-back": "tatiku",
"feedback-cancel": "palawpes",
"feedback-close": "pahezek",
+ "feedback-external-bug-report-button": "munday nu patubeli",
"feedback-message": "palatuh:",
"feedback-subject": "taazihan tu kawaw:",
"feedback-submit": "patayzaan",
+ "feedback-thanks-title": "kukay tisuwanan!",
"searchsuggest-search": "kilim {{SITENAME}}",
+ "api-error-unknownerror": "caay kapulita ku mungangaw: \"$1\".",
"duration-seconds": "$1 {{PLURAL:$1|a beti}}",
+ "duration-hours": "$1 {{PLURAL:$1|tuki}}",
"duration-weeks": "$1 {{PLURAL:$1|a lipas}}",
"duration-years": "$1 {{PLURAL:$1|a mihca}}",
+ "duration-centuries": "$1 {{PLURAL:$1|lasubu a mihca}}",
+ "duration-millennia": "$1 {{PLURAL:$1|malebut a mihca}}",
"limitreport-cputime-value": "$1 {{PLURAL:$1|a beti}}",
+ "limitreport-walltime": "tatengaay pisaungay a lawad-tuki",
"limitreport-walltime-value": "$1 {{PLURAL:$1|a beti}}",
+ "limitreport-expansiondepth": "satakalaw micuwat ilabu",
"expandtemplates": "micuwat tu taazihan a mitudung",
+ "expand_templates_input": "suliten:",
"expand_templates_output": "heci",
"expand_templates_ok": "malucekay",
+ "expand_templates_remove_comments": "misipu buhci tu kamu",
"expand_templates_preview": "pataayaway miazih",
+ "pagelanguage": "misumad kasabelih a kamu",
"pagelang-language": "kamu",
+ "pagelang-select-lang": "mipili’ tu kamu",
"pagelang-reason": "mahicaay:",
"pagelang-submit": "patayzaan",
+ "right-pagelang": "misumad kasabelih a kamu",
+ "action-pagelang": "misumad kasabelih a kamu",
+ "log-name-pagelang": "kamu misumad a nasulitan nazipa’an",
+ "mediastatistics": "myiti sausi cesyun",
+ "mediastatistics-table-extensions": "kapah saungay a mikilulay a ngangan nu tangan",
+ "mediastatistics-table-count": "tangan nikayadah",
"mediastatistics-table-totalbytes": "pulung sausi nu hacica-tabaki",
"mediastatistics-header-bitmap": "pacepacekan a zunga",
"mediastatistics-header-audio": "ludihang",
"mediastatistics-header-video": "yiga",
+ "mediastatistics-header-multimedia": "payadahay malocimyidiy",
"mediastatistics-header-office": "zimusiw",
"mediastatistics-header-executable": "kapah tu mileku",
+ "mediastatistics-header-archive": "piepian mipecec tuway a kese",
"mediastatistics-header-total": "sacahamin a tangan",
+ "json-error-syntax": "sakilul nu kamu mungangaw",
+ "headline-anchor-title": "misasiket tina tusil",
"special-characters-group-latin": "u sulit nu Latin",
+ "special-characters-group-latinextended": "lalad tu sulit nu Lating",
+ "special-characters-group-ipa": "nu kanatalay a silusi nu ngiha’",
"special-characters-group-symbols": "sawantan",
"special-characters-group-greek": "u sulit nu Sila",
+ "special-characters-group-greekextended": "lalad tu sulit-bacu nu Sila",
"special-characters-group-cyrillic": "u sulit nu Selafu",
"special-characters-group-arabic": "u sulit nu Alapu",
+ "special-characters-group-arabicextended": "lalad tu sulit nu Alapo",
"special-characters-group-hebrew": "u kamu nu Hipulay",
"special-characters-group-bangla": "u sulit nu Muncyala",
+ "special-characters-group-tamil": "u sulit nu tanmil",
+ "special-characters-group-telugu": "u sulit nu telaku",
+ "special-characters-group-sinhala": "u sulit nu sencialo",
+ "special-characters-group-gujarati": "u sulit nu Kucilat",
"special-characters-group-devanagari": "Devanagari a kamu",
"special-characters-group-thai": "u sulit nu Tayko",
"special-characters-group-lao": "u sulit nu Liau",
"special-characters-title-endash": "apuyu’ay a pucehaw",
"special-characters-title-emdash": "tanaya’ay a pucehaw",
"special-characters-title-minus": "selep a bacu",
+ "mw-widgets-dateinput-no-date": "caayhen mipili’ tu demiad",
+ "mw-widgets-mediasearch-noresults": "caykatepa ku heci.",
+ "mw-widgets-titleinput-description-new-page": "kasabelih nayai’ tu",
"mw-widgets-categoryselector-add-category-placeholder": "micunus tu kakuniza...",
- "mw-widgets-usersmultiselect-placeholder": "ngalepen tu cunus...",
+ "mw-widgets-usersmultiselect-placeholder": "micunus sangaleben...",
+ "randomrootpage": "kakibalucu’ lamitay kasabelih",
+ "log-action-filter-block": "milangat nikalahizaan:",
+ "log-action-filter-delete": "misipu nikalahizaan:",
+ "log-action-filter-import": "pacumud nikalahizaan:",
+ "log-action-filter-move": "milimad nikalahizaan:",
+ "log-action-filter-patrol": "tayza mikibi nikalahizaan:",
+ "log-action-filter-protect": "midiput nikalahizaan:",
+ "log-action-filter-upload": "nikalahizaan nu patapabaw:",
"log-action-filter-all": "hamin",
- "log-action-filter-block-block": "malangat",
+ "log-action-filter-block-block": "milangat",
"log-action-filter-block-reblock": "milangat tu sapisumad",
+ "log-action-filter-delete-delete": "misipu kasabelih",
+ "log-action-filter-delete-delete_redir": "miliyaw patatuzu’ mipakutay tu sulit",
+ "log-action-filter-delete-restore": "kasabelih milawpes tu sipu",
+ "log-action-filter-delete-event": "misipu nasulitan nazipa’an",
+ "log-action-filter-delete-revision": "misumad nu ayaway a sipu",
+ "log-action-filter-managetags-create": "patizeng aazihen paya",
+ "log-action-filter-managetags-delete": "misipu aazihen a paya",
+ "log-action-filter-managetags-activate": "aazihen a paya miteka",
"log-action-filter-newusers-autocreate": "lunuk patizeng",
+ "log-action-filter-patrol-patrol": "lima-saungay tayza mikibi",
"log-action-filter-patrol-autopatrol": "lunuk tayza mikibi",
"log-action-filter-protect-protect": "midiput",
+ "log-action-filter-protect-modify": "midiput tu misumaday",
+ "log-action-filter-protect-unprotect": "mihulak midiputay",
+ "log-action-filter-protect-move_prot": "midiputay milimad tuway",
+ "log-action-filter-rights-rights": "lima-saungay misumad",
"log-action-filter-rights-autopromote": "lunuk misumad",
+ "log-action-filter-suppress-event": "nasulitan nazipa’an satezep paazih",
+ "log-action-filter-suppress-revision": "masumad nu ayaway satezep paazih",
+ "log-action-filter-suppress-delete": "kasabelih satezep paazih",
"log-action-filter-upload-upload": "baluhay a patapabaw",
+ "log-action-filter-upload-overwrite": "miliyaw patapabaw",
+ "authmanager-authplugin-setpass-failed-title": "misumad mima mungangaw",
+ "authmanager-authplugin-setpass-bad-domain": "la’cusay a calay-subal(wangyi).",
"authmanager-email-label": "imyiyo(email)",
+ "authmanager-email-help": "imyiyo(email) puenengan",
+ "authmanager-realname-label": "tatengaay a ngangan",
+ "authmanager-provider-temporarypassword": "nanunuz a mima",
+ "authprovider-confirmlink-request-label": "manakanca masasiket tu canghaw",
"authprovider-resetpass-skip-label": "sekipo",
- "changecredentials": "misumad tu sapangangan"
+ "authform-wrongtoken": "mima-sacukcuk mungangaw",
+ "specialpage-securitylevel-not-allowed-title": "amana",
+ "cannotauth-not-allowed-title": "caykataneng ku tungus",
+ "changecredentials": "misumad tu sapangangan",
+ "removecredentials": "misipu sapangangan",
+ "credentialsform-provider": "pincen nikalahizaan:",
+ "credentialsform-account": "canghaw kalungangan:",
+ "linkaccounts": "masasiket tu canghaw",
+ "linkaccounts-submit": "masasiket tu canghaw",
+ "revid": "masumad nu ayaway $1",
+ "pageid": "kasabelih ID $1"
}
"credentialsform-provider": "Тып уліковых зьвестак:",
"credentialsform-account": "Назва рахунку:",
"cannotlink-no-provider-title": "Няма рахункаў для далучэньня",
- "cannotlink-no-provider": "Няма рахункаў для далучэньня."
+ "cannotlink-no-provider": "Няма рахункаў для далучэньня.",
+ "linkaccounts": "Далучэньне рахункаў",
+ "linkaccounts-success-text": "Рахунак быў далучаны."
}
"parser-template-loop-warning": "Template loop detected: [[$1]]",
"template-loop-category": "Pages with template loops",
"template-loop-category-desc": "The page contains a template loop, ie. a template which calls itself recursively.",
+ "template-loop-warning": "<strong>Warning:</strong> This page calls [[:$1]] which causes a template loop (an infinite recursive call).",
"parser-template-recursion-depth-warning": "Template recursion depth limit exceeded ($1)",
"language-converter-depth-warning": "Language converter depth limit exceeded ($1)",
"node-count-exceeded-category": "Pages where node count is exceeded",
"rcfilters-filter-watchlistactivity-unseen-label": "تغییرات دیده نشده",
"rcfilters-filter-watchlistactivity-unseen-description": "تغییرات در صفحاتی که شما تغییرات رخ داده در آنها را مشاهده نکردید.",
"rcfilters-filter-watchlistactivity-seen-label": "تغییرات دیدهشده",
+ "rcfilters-filter-watchlistactivity-seen-description": "تغییرات صفحاتی که شما بازدید کردید از زمانی که تغییرات اعمال شدهاست.",
"rcfilters-filtergroup-changetype": "نوع تغییرات",
"rcfilters-filter-pageedits-label": "ویرایشهای صفحه",
"rcfilters-filter-pageedits-description": "ویرایشهای محتوای ویکی، بحثها، توضیحات رده...",
"rcfilters-liveupdates-button-title-off": "نمایش تغییرات جدید همچنان که رخ میدهند",
"rcfilters-watchlist-markseen-button": "نشانهگذاری تمام تغییرات بهعنوان خواندهشده",
"rcfilters-watchlist-edit-watchlist-button": "ویرایش فهرست صفحههای پیگیریهایتان",
+ "rcfilters-watchlist-showupdated": "تغییرات صفحاتی که شما بازدید نکردید از زمانی که تغییرات رخ داده به صورت <strong>پررنگ</strong>، با نشانگر توپر.",
"rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شدهاست|نشان داده شدهاند}}).",
"rclistfromreset": "از نو کردن انتخاب تاریخ",
"rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
"sp-contributions-newonly": "فقط نمایش ویرایشهایی که ایجاد صفحه هستند",
"sp-contributions-hideminor": "پنهان کردن ویرایشهای جزئی",
"sp-contributions-submit": "جستجو",
+ "sp-contributions-outofrange": "قادر به نمایش نتیجهای نیست. محدوده IP درخواست شده بزرگتر از حد CIDR /$1 است.",
"whatlinkshere": "پیوندها به این صفحه",
"whatlinkshere-title": "صفحههایی که به «$1» پیوند دارند",
"whatlinkshere-page": "صفحه:",
"uploadlogpage": "יומן העלאות",
"uploadlogpagetext": "להלן רשימה של העלאות הקבצים האחרונות שבוצעו.\nראו את [[Special:NewFiles|גלריית הקבצים החדשים]] להצגה ויזואלית שלהם.",
"filename": "שם הקובץ",
- "filedesc": "<div style=\"direction: rtl;\">תקציר</div>",
+ "filedesc": "תקציר",
"fileuploadsummary": "תיאור:",
"filereuploadsummary": "השינויים בקובץ:",
"filestatus": "מעמד זכויות יוצרים:",
"upload-curl-error28": "הסתיים זמן ההמתנה להעלאה",
"upload-curl-error28-text": "לאתר לקח זמן רב מדי לענות. אנא בדקו שהאתר זמין, המתינו מעט ונסו שוב. ייתכן שתרצו לנסות בזמן פחות עמוס.",
"license": "רישיון:",
- "license-header": "<div style=\"direction: rtl;\">רישיון</div>",
+ "license-header": "רישיון",
"nolicense": "אין",
"licenses-edit": "עריכת אפשרויות רישיון",
"license-nopreview": "(תצוגה מקדימה לא זמינה)",
"createacct-yourpassword-ph": "Unesite zaporku",
"yourpasswordagain": "Ponovno upišite zaporku",
"createacct-yourpasswordagain": "Potvrdi zaporku",
- "createacct-yourpasswordagain-ph": "Unesite zaporku ponovno",
+ "createacct-yourpasswordagain-ph": "Unesite zaporku ponovo",
"userlogin-remembermypassword": "Zapamti me",
"userlogin-signwithsecure": "Rabi sigurnu vezu",
"cannotlogin-title": "Prijava nije moguća",
"notloggedin": "Niste prijavljeni",
"userlogin-noaccount": "Nemate suradnički račun?",
"userlogin-joinproject": "Pridružite se {{SITENAME}}",
- "createaccount": "Otvori novi suradnički račun",
+ "createaccount": "Stvori račun",
"userlogin-resetpassword-link": "Zaboravili ste zaporku?",
"userlogin-helplink2": "Pomoć pri prijavi",
"userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nRabite donji obrazac da biste se prijavili kao drugi suradnik.",
"createaccountmail-help": "Može se rabiti da se nekome stvori račun bez da se sazna zaporka.",
"createacct-realname": "Stvarno ime (neobvezatno)",
"createacct-reason": "Razlog",
- "createacct-reason-ph": "Zašto stvarate drugi račun",
+ "createacct-reason-ph": "Zašto stvarate još jedan račun?",
"createacct-reason-help": "Poruka koja se prikazuje u evidenciji stvaranja suradničkih računa",
"createacct-submit": "Stvorite svoj suradnički račun",
"createacct-another-submit": "Otvori račun",
"createacct-benefit-heading": "{{SITENAME}} su stvorili ljudi poput Vas.",
"createacct-benefit-body1": "{{PLURAL:$1|uređivanje|uređivanja}}",
"createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
- "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavnih suradnika}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavna suradnika|nedavnih suradnika}}",
"badretype": "Unesene zaporke nisu istovjetne.",
"usernameinprogress": "Stvaranje računa za ovo suradničko ime upravo je u tijeku.\nMolimo, pričekajte.",
"userexists": "Uneseno suradničko ime već je u upotrebi.\nUnesite neko drugo ime.",
"recentchanges-submit": "Megjelenítés",
"rcfilters-tag-remove": "$1 eltávolítása",
"rcfilters-legend-heading": "<strong>Rövidítések listája:</strong>",
+ "rcfilters-other-review-tools": "<strong>Egyéb hasznos hivatkozások</strong>",
+ "rcfilters-group-results-by-page": "Csoportosítás eredményei lapok szerint",
"rcfilters-grouping-title": "Csoportosítás",
"rcfilters-activefilters": "Aktív szűrők",
"rcfilters-advancedfilters": "Haladó szűrők",
"rcfilters-highlighted-filters-list": "Kiemelve: $1",
"rcfilters-quickfilters": "Mentett szűrők",
"rcfilters-quickfilters-placeholder-title": "Nincs mentett hivatkozás",
+ "rcfilters-quickfilters-placeholder-description": "Hogy elmentsd szűrőid beállításait és később újra használhasd őket, kattints a könyvjelző ikonra az „aktív szűrők” mezőben, feljebb.",
"rcfilters-savedqueries-defaultlabel": "Mentett szűrők",
"rcfilters-savedqueries-rename": "Átnevezés",
"rcfilters-savedqueries-setdefault": "Beállítás alapértelmezettként",
"rcfilters-empty-filter": "Nincs aktív szűrő. Minden közreműködés látható.",
"rcfilters-filterlist-title": "Szűrők",
"rcfilters-filterlist-whatsthis": "Hogy működnek?",
- "rcfilters-filterlist-feedbacklink": "Visszajelzés küldése az új (beta) szűrőkről",
+ "rcfilters-filterlist-feedbacklink": "Mond el nekünk, mit gondolsz az (új) szűrőkről",
"rcfilters-highlightbutton-title": "Kiemelt találatok",
"rcfilters-highlightmenu-title": "Válassz egy színt",
"rcfilters-highlightmenu-help": "Válassz színt ennek a tulajdonságnak kijelöléséhez",
"rcfilters-filterlist-noresults": "Nem található szűrő",
"rcfilters-noresults-conflict": "Nincs találat, mert a keresési kritériumok konfliktusban vannak",
"rcfilters-state-message-subset": "Ennek a szűrőnek nincs hatása, mert az eredményét {{PLURAL:$2|tartalmazza a következő, nagyobb szűrő|tartalmazzák a következő, nagyobb szűrők}} (próbáld meg kiemelni a megkülönböztetéshez): $1",
- "rcfilters-state-message-fullcoverage": "Az összes szűrő kijelölése egy csoportban ugyanaz, mint ha semmit nem választanál ki, így ennek a szűrőnek nincs hatása. A csoport tartalmazza: $1",
+ "rcfilters-state-message-fullcoverage": "Az összes szűrő kijelölése ebben a csoportban ugyanaz, mintha semmit nem választanál ki, így ennek a szűrőnek nincs hatása. A csoport tartalmazza: $1",
"rcfilters-filtergroup-authorship": "Hozzájárulás szerzője",
"rcfilters-filter-editsbyself-label": "Saját változtatásaid",
"rcfilters-filter-editsbyself-description": "A te hozzájárulásaid.",
"rcfilters-filter-watchlist-watchednew-description": "A figyelőlistádon szereplő lapokon az utolsó látogatásod után történt változtatások.",
"rcfilters-filter-watchlist-notwatched-label": "Figyelőlistán nem szereplők",
"rcfilters-filter-watchlist-notwatched-description": "Minden változtatás, kivéve a figyelőlistádon szereplő lapoké.",
+ "rcfilters-filtergroup-watchlistactivity": "Figyelőlista aktivitás",
+ "rcfilters-filter-watchlistactivity-unseen-label": "Még nem látott változtatások",
"rcfilters-filtergroup-changetype": "Változtatás típusa",
"rcfilters-filter-pageedits-label": "Lapszerkesztések",
"rcfilters-filter-pageedits-description": "A wiki tartalom szerkesztése, beszélgetések, kategória leírások...",
"rcfilters-filter-previousrevision-description": "Minden változtatás a legutóbbiak kivételével",
"rcfilters-filter-excluded": "Kizárva",
"rcfilters-tag-prefix-namespace-inverted": "<strong>:nem</strong> $1",
+ "rcfilters-exclude-button-off": "A kiválasztottak kizárása",
+ "rcfilters-exclude-button-on": "A kiválasztottak kizárva",
"rcfilters-view-advanced-filters-label": "Haladó szűrők",
"rcfilters-view-tags": "Megjelölt szerkesztések",
"rcfilters-view-namespaces-tooltip": "Találatok szűrése névtér szerint",
"rcfilters-view-return-to-default-tooltip": "Vissza a főszűrőmenübe.",
"rcfilters-liveupdates-button": "Élő frissítések",
"rcfilters-liveupdates-button-title-on": "Élő frissítések kikapcsolása",
+ "rcfilters-liveupdates-button-title-off": "A legfrissebb változtatások mutatása, amint megtörténnek",
"rcfilters-watchlist-markseen-button": "Összes változtatás megjelölése olvasottként",
+ "rcfilters-watchlist-edit-watchlist-button": "A figyelőlistád szerkesztése",
"rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
"rclistfromreset": "Dátumválasztás visszaállítása",
"rclistfrom": "$3, $2 után történt változtatások megtekintése",
"Belkacem77",
"Mhenni",
"Slimane AMIRI",
- "SlimaneAmiri"
+ "SlimaneAmiri",
+ "Sayem AtVkm"
]
},
"tog-underline": "Aderrer n iseɣwan:",
"rcfilters-filter-editsbyself-label": "Asnifel-ik",
"rcfilters-filter-editsbyself-description": "Ittekkiyen-ik",
"rcfilters-filter-editsbyother-label": "Asnifel n wiyaḍ",
+ "rcfilters-filter-editsbyother-description": "Akk ibeddilen slid wid iynek(m).",
+ "rcfilters-filtergroup-userExpLevel": "Asekles n iseqdacen aked tarmit",
"rcfilters-filter-user-experience-level-registered-label": "Yeqqen",
"rcfilters-filter-user-experience-level-registered-description": "Imaẓragen uqqinen.",
"rcfilters-filter-user-experience-level-unregistered-label": "Ur yeqqin ara",
"rcfilters-filter-user-experience-level-unregistered-description": "Imaẓragen ur yeqqinen ara.",
"rcfilters-filter-user-experience-level-newcomer-label": "Inebgawen imaynuten",
+ "rcfilters-filter-user-experience-level-newcomer-description": "Imaẓragen uqqinen s udun n 10 ibeddilen aked 4 n ussan n urmud.",
"rcfilters-filter-user-experience-level-learner-label": "Inelmaden",
+ "rcfilters-filter-user-experience-level-learner-description": "Imaẓragen uqqinen idegi tarmit tezga-d ger \"Iseqdacen imaynuten\" aked \"Iseqdacen imazzayen\".",
"rcfilters-filter-user-experience-level-experienced-label": "Iseqdacen s tirmitin",
+ "rcfilters-filter-user-experience-level-experienced-description": "Imaẓragen uqqinen s ugar n 500 ibeddilen aked 30 n ussan n urmud.",
"rcfilters-filtergroup-automated": "Ittekkiyen iwurmanen",
"rcfilters-filter-bots-label": "Aṛubut",
+ "rcfilters-filter-bots-description": "Ibeddilen yettwagan s ifecka iwurmanen.",
"rcfilters-filter-humans-label": "Amdan (mačči d aṛubut)",
+ "rcfilters-filter-humans-description": "Ibeddilen yettwagan s imaẓragen inalsen.",
+ "rcfilters-filtergroup-significance": "Anamek",
+ "rcfilters-filter-watchlistactivity-seen-label": "Wali ibeddilen",
+ "rcfilters-filtergroup-changetype": "Anaw ubeddil",
+ "rcfilters-filter-pageedits-label": "Ibeddilen n usebter",
+ "rcfilters-filter-categorization-label": "Ibeddilen n taggayt",
"rcnotefrom": "Ddaw-a{{PLURAL:$5|d abeddel|d ibeddilen}} si <strong>$3, $4</strong> (arama <strong>$1</strong> ad d-yettwaseknen).",
"rclistfrom": "Ssken ibeddlen imaynuten seg $3 $2",
"rcshowhideminor": "$1 ibeddlen ifessasen",
},
"tog-underline": "Джибериулени черт:",
"tog-hideminor": "Джангы тюрлениулени тизмесинде гитче тюрлениулени кёргюзме",
- "tog-hidepatrolled": "Джангы тюрлениулени тизмесинде тинтилген тюрлениулени кёргюзме",
+ "tog-hidepatrolled": "Джангы тюрлениулени тизмесинден тинтилген тюрлениулени джашыр",
"tog-newpageshidepatrolled": "Джангы бетлени тизмесинде тинтилген бетлени кёргюзме",
"tog-extendwatchlist": "Кёзде тургъан тизмени, къуру ахыр тюл, бютеу тюрлениулени кёрюр ючюн кенгерт",
"tog-usenewrc": "Ахыр тюрлениуледе эм кёздеги тизмеде бетлени тюрлениулерин къауумлашдыр",
"anontalk": "Бу IP-адресге сюзюу бет",
"navigation": "Навигация",
"and": " эм",
- "qbfind": "Излеу",
- "qbbrowse": "Къарау",
- "qbedit": "Тюрлендир",
- "qbpageoptions": "Бу бет",
- "qbmyoptions": "Бетлерим",
"faq": "FAQ",
- "faqpage": "Project:FAQ",
"actions": "Этиуле",
"namespaces": "Атланы аламы",
"variants": "Вариантла",
"edit-local": "Локал айгъакълауну тюрлендириу",
"create": "Къура",
"create-local": "Локал айгъакълау къош",
- "editthispage": "Бу бетни тюрлендир",
- "create-this-page": "Бу бетни къура",
"delete": "Кетер",
- "deletethispage": "Бу бетни кетер",
- "undeletethispage": "Бу бетни ызына сал",
"undelete_short": "{{PLURAL:$1|Бир тюрлендириуню$1 тюрлендириуню}} ызына сал",
"viewdeleted_short": "{{PLURAL:$1|Бир кетерилген тюрлендириуню|$1 кетерилген тюрлендириуню}} кёрюу",
"protect": "Джакъла",
"protect_change": "тюрлендир",
- "protectthispage": "Бу бетни джакъла",
"unprotect": "Джакълауну тюрлендир",
- "unprotectthispage": "Бу бетни джакълауун тюрлендир",
"newpage": "Джангы бет",
- "talkpage": "Бу бетни сюз",
"talkpagelinktext": "сюзюу",
"specialpage": "Къуллукъ бет",
"personaltools": "Энчи адырла",
- "articlepage": "Статьягъа къарау",
"talk": "Сюзюу",
"views": "Къараула",
"toolbox": "Адырла",
- "userpage": "Къошулуучуну энчи бетине къарау",
- "projectpage": "Проектни бетине къара",
+ "tool-link-userrights": "{{GENDER:$1|Къошулуучуну}} группаларын тюрлендир",
+ "tool-link-emailuser": "Бу {{GENDER:$1|къошулуучугъа}} email джибер",
"imagepage": "Файлны бетине къара",
"mediawikipage": "Билдириуню бетине къара",
"templatepage": "Шаблонну бетине къара",
"nstab-template": "Шаблон",
"nstab-help": "Болушлукъ бет",
"nstab-category": "Категория",
+ "mainpage-nstab": "Баш бет",
"nosuchaction": "Быллай амал джокъду",
"nosuchactiontext": "URL-да белгиленнген амал терсди.\nСиз URL-ну терс джазгъан болурсуз, неда терс джибериу бла кёчгенсиз.\nБу {{SITENAME}} проектде да хатаны кёргюзюрге боллукъду.",
"nosuchspecialpage": "Быллай къуллукъ бет джокъду",
"rightslogtext": "Бу къошулуучуну хакъларыны тюрлениуюню журналыды",
"action-read": "бу бетни окъуу",
"action-edit": "бу бетни тюрлендириу",
- "action-createpage": "бетни къурау",
- "action-createtalk": "сюзюу бетни къурау",
+ "action-createpage": "бу бетни къура",
+ "action-createtalk": "бу сюзюу бетни къурау",
"action-createaccount": "бу тергеу джазыуну (аккаунтну) къурау",
"action-minoredit": "бу тюрлениуню гитче кибик белгилеу",
"action-move": "бу бетни атын тюрлендириу",
"action-upload_by_url": "URL адресден бу файлны джюклеу",
"action-writeapi": "API хайырландырыу тюрлендириулеге",
"action-delete": "бу бетни кетериу",
- "action-deleterevision": "беÑ\82ни бÑ\83 веÑ\80Ñ\81иÑ\8fÑ\81ын кетериу",
- "action-deletedhistory": "бу бетни кетерилген тарихине къарау",
+ "action-deleterevision": "беÑ\82ни веÑ\80Ñ\81иÑ\8fлаÑ\80ын кетериу",
+ "action-deletedhistory": "бетни кетерилген тарихине къарау",
"action-browsearchive": "кетерилген бетлени излеу",
- "action-undelete": "бу бетни ызына салыу",
- "action-suppressrevision": "бу джашырылгъан версиясына бетни къарау эм ызына салыу",
+ "action-undelete": "бетни ызына салыу",
+ "action-suppressrevision": "бетни джашырылгъан версияларына къарау эм ызына салыу",
"action-suppressionlog": "бу энчи журналгъа къарау",
"action-block": "Къошулуучуну блок этиу, тюрлендириуле этерге къоймау",
"action-protect": "бу бетни джакълау дараджасын тюрлендириу",
"action-rollback": "бетни ахыр тюрлендирген къошулуучуну тюрлендириулерин дженгил ызына алыу",
- "action-import": "бу бетни башха викиден импорт этиу",
- "action-importupload": "бу бетни джюкленнген файлдан импорт этиу",
+ "action-import": "бетлени башха викиден импорт этиу",
+ "action-importupload": "бетлени джюкленнген файлдан импорт этиу",
"action-patrol": "башхаланы тюрлендириулерин патруль этилиннгенлеча белгилеу",
"action-autopatrol": "кесими тюрлендириулерими патруль этилиннгенлеча белгилеу",
"action-unwatchedpages": "киши кёзюнде тутмагъан бетлени тизмесине къарау",
"action-sendemail": "E-mail джибериу",
"action-editmywatchlist": "кёзде тургъан тизменги тюрлендириу",
"action-viewmywatchlist": "кёзде тургъан тизменги кёрюу",
- "nchanges": "$1 {{PLURAL:$1|тюрлениу|тюрлениу}}",
+ "nchanges": "$1 {{PLURAL:$1|тюрлениу}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ахыр кере киргенден бери}}",
"enhancedrc-history": "тарих",
"recentchanges": "Ахыр тюрлениуле",
"recentchanges-legend-heading": "<strong>Легенда: </strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле",
+ "rcfilters-other-review-tools": "<strong>Башха тинтиу адырла</strong>",
+ "rcfilters-activefilters": "Актив фильтрле",
+ "rcfilters-limit-shownum": "Ахыр {{PLURAL:$1|тюрлениуню}} кёргюзт",
+ "rcfilters-quickfilters-placeholder-title": "Сакъланнган джибериуле алкъын джокъдула",
+ "rcfilters-savedqueries-defaultlabel": "Сакъланнган фильтрле",
+ "rcnotefrom": "Тюбюрекде <strong>$3, $4</strong> башлаб (<strong>$1</strong> дери) {{PLURAL:$5|тюрлендириу}} кёрюнедиле",
"rclistfrom": "$3 $2 башлаб джангы тюрлениулени кёргюз",
"rcshowhideminor": "гитче тюрлениулени $1",
"rcshowhideminor-show": "кёргюз",
"newpageletter": "Дж",
"boteditletter": "б",
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|кёзюнде тутуучу къошулуучу}}]",
- "rc_categories": "Категориялагъа юлеш («|» бла айыр)",
- "rc_categories_any": "Ð\9aÑ\8aайсы да",
+ "rc_categories": "Къуру бу категорияладан («|» бла айыр):",
+ "rc_categories_any": "Сайланнгандан кÑ\8aайÑ\81Ñ\8bсы да",
"rc-change-size": "$1",
"rc-change-size-new": "Тюрлениуден сора ёлчеми: $1 {{PLURAL:$1|байт}}",
"newsectionsummary": "/* $1 */ Джангы бёлюм",
"reuploaddesc": "Джюклеу формасына ызына къайт",
"upload-tryagain": "Тюрлетилген файл ангылатыуну джибер",
"uploadnologin": "Сиситемагъа кирмегенсиз",
- "uploadnologintext": "Файлла джюклер ючюн [[Special:UserLogin|системагъа кирирге]] керексиз.",
+ "uploadnologintext": "Файлла джюклер ючюн $1 керекди.",
"upload_directory_missing": "Джюклеу директория ($1) табылмайды эмда веб-сервер бла къуралалмайды.",
"upload_directory_read_only": "Веб-сервер файл джюкленнегн ($1) папкагъа джазыу эркинлиги джокъду.",
"uploaderror": "Джюклеуню хатасы",
"upload-recreate-warning": "'''Эс бёлюгюз. Быллай аты бла файл кетерилген этгенди неда аты тюрленилиннгенди.'''\n\nБу бетге кетериуле бла ат тюрлендириулени журналы тюбюрекде бериледи:",
"uploadtext": "Файл джюклер ючюн тюбюндеги форманы хайырлан.\nАлландан джюкленнген файлланы кёрюр неда излер ючюн [[Special:FileList|джюкленнген файлланы тизмесине]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла.\n\nБетге файл салыр ючюн байлмыгъызда тюбюндеги формаларыны бирин хайырланыгъыз;\n* Файлны бютеу ёлчемини салыр ючюн: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''\n* Сол къыйрда бир тёртгюл ичинде, тюбюндеда ангылатыуу бла, 200 пиксел ёлчеми бла хайырландырыргъа излей эсегиз: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|тюбюнде ангылатыу]]</nowiki></code>'''\n* Файлны кёргюзмей, файлгъа дижбиреиу берирге излей эсегиз: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''",
- "upload-permitted": "Эркинлик берилген файлланы типлери: $1.",
- "upload-preferred": "Изленнген файлланы типлери: $1.",
- "upload-prohibited": "Джасакъ этилген файлланы типлери: $1.",
+ "upload-permitted": "Эркинлик берилген файлланы {{PLURAL:$2|типи|типлери}}: $1.",
+ "upload-preferred": "Изленнген файлланы {{PLURAL:$2|типи|типлери}}: $1.",
+ "upload-prohibited": "Джасакъ этилген файлланы {{PLURAL:$2|типи|типлери}}: $1.",
"uploadlogpage": "Джюклеулени журналы",
"uploadlogpagetext": "Тюбюнде эм ахыр къошулгъан файлланы тизмеси барды.\nДагъыда [[Special:NewFiles|dosyalджангы файлланы галереясына]] къара, анда джангы джюклеулени юсюнден билгиле толу кёрюгюзюлгендиле.",
"filename": "Файлны аты",
"filetype-mime-mismatch": "«.$1» файл MIME-типге ($2) келишмейди.",
"filetype-badmime": "«$1» MIME типли файлланы джюклениуюне эркинлик берлимейди.",
"filetype-bad-ie-mime": "Internet Explorer, буну эркинлик берилмеген эмда потенциал заран берлик «$1» файл тип кибик таныгъаны ючюн бу файл джюклениллик тюлдю.",
- "filetype-unwanted-type": "'''\".$1\"''' изленмеген файл типиди.\nИзленнген {{PLURAL:$3|1=файл тип|файл типле}} $2.",
- "filetype-banned-type": "'''«.$1»''' — {{PLURAL:$4|1=джасакъланнган файл типди|джасакъланнган файл типледиле}}.\nЭркинлик берилген {{PLURAL:$3|1=файл тип|файл типле}}: $2.",
+ "filetype-unwanted-type": "'''«.$1»''' — изленмеген файл типди.\nИзленнген {{PLURAL:$3|1=файл тип|файл типле}} — $2.",
+ "filetype-banned-type": "'''«.$1»''' — {{PLURAL:$4|1=джасакъланнган файл типди|джасакъланнган файл типледиле}}.\nЭркинлик берилген {{PLURAL:$3|1=файл тип|файл типле}} — $2.",
"filetype-missing": "Файлны кенглешиуу джокъду (сёз ючюн, «.jpg» кибик)",
"empty-file": "Сиз ийген файл бошду.",
"file-too-large": "Сиз ийген файл асыры уллуду.",
"alllogstext": "{{SITENAME}} ючюн бютеу бар болгъан журналланы бирлешген тизмеси.\nЖурнал типини, къошулуучу атны (уллу-гитче харифге кёре) неда тийилген бетни (ол да уллу-гитче харифге кёре) элерге боллукъсуз.",
"logempty": "Журналлагъа келишген билги джокъду.",
"log-title-wildcard": "Бу символладан башланнган башлыкъланы изле",
+ "checkbox-select": "Сайлау: $1",
+ "checkbox-all": "Барын да",
+ "checkbox-none": "Бирин да",
+ "checkbox-invert": "Инвертле",
"allpages": "Бютеу бетле",
"nextpage": "Эндиги бет ($1)",
"prevpage": "Алдагъы бет ($1)",
"tooltip-search": "Бу сёзню изле",
"tooltip-search-go": "Тамам быллай аты болгъан бетге кёч",
"tooltip-search-fulltext": "Бу текст болгъан бетлени таб",
- "tooltip-p-logo": "Баш бет",
+ "tooltip-p-logo": "Баш бетге кёчюу",
"tooltip-n-mainpage": "Баш бетге кёчюу",
"tooltip-n-mainpage-description": "Баш бетге кёчюу",
"tooltip-n-portal": "Проектни юсюнден, сизни не этерге боллугъугъузню юсюнден, хар не къайда болгъаныны юсюнден",
"confirmrecreate-noreason": "Сиз тюрлендириуле этген заманда [[User:$1|$1]] ([[User talk:$1|сюзюу]]) къошулуучу бу бетни кетергенди. Бетни кертиси бла ызына салыргъа излегенигизни бегитигиз.",
"recreate": "Джанландыр",
"unit-pixel": "пикс.",
+ "confirm-purge-title": "Бу бетни кэшы ариула",
"confirm_purge_button": "OK",
- "confirm-purge-top": "Бу бетни кеши кетерилсинми?",
+ "confirm-purge-top": "Бу бетни кэшы ариулансынмы?",
"confirm-purge-bottom": "Бетни кеши кетерилгенден сора, андан сора келген версиясы кёргюзюллюкдю.",
"confirm-watch-button": "ОК",
"confirm-unwatch-button": "ОК",
"fileduplicatesearch-result-n": "«$1» файлны {{PLURAL:$2|1 келишген дубликаты|$2 келишген дубликаты}} барды.",
"fileduplicatesearch-noresults": "«$1» деген файл табылмады.",
"specialpages": "Къуллукъ бетле",
- "specialpages-note": "* Тюз къуллукъ бетле.\n* <span class=\"mw-specialpagerestricted\">Кирирге эркинлик чекленнген къуллукъ бетле.</span>",
"specialpages-group-maintenance": "Техника баджарыуну отчетлары",
"specialpages-group-other": "Башха къуллукъ бетле",
"specialpages-group-login": "Системагъа кириу / Аккаунт къурау",
"compare-rev2": "Экинчи версия",
"compare-submit": "Тенглешдир",
"compare-title-not-exists": "Белгиленнген башлыкъ джокъду.",
+ "diff-form": "'''форма'''",
"dberr-problems": "Кечериксиз! Бу сайтда техника джаны бла проблемала чыкъгъандыла.",
"dberr-again": "Талай минутну сакълаб, джангыдан кириб кёрюгюз.",
"dberr-info": "(билги базаны сервери бла байлам къурулалмайды: $1)",
"rcfilters-liveupdates-button-title-off": "Nei Ännerunge weisen esoubal wéi se gemaach ginn",
"rcfilters-watchlist-markseen-button": "All Ännerungen als gesi markéieren",
"rcfilters-watchlist-edit-watchlist-button": "Ännert Är Lëscht vun iwwerwaachte säiten",
+ "rcfilters-watchlist-showupdated": "Ännerungen op Säiten déi Dir net besicht hutt zanter d'Ännerunge gemaach goufen si <strong>fett</strong> geschriwwen.",
"rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
"rclistfrom": "Nei Ännerunge vum $3 $2 u weisen",
"rcshowhideminor": "Kleng Ännerunge $1",
"viewsource": "Ber código-fuonte",
"actionthrottled": "Acion lhemitada",
"viewsourcetext": "Tu puodes ber i copiar l código desta páigina.",
+ "translateinterface": "Pa poner ó altarar traduçones pa todas las wikis, cunsidre outelizar la [https://translatewiki.net/wiki/Main_Page?setlang=mwl translatewiki.net], un porjeto çtinado a la traduçon de l MediaWiki.",
"virus-scanfailed": "la berificaçon falhou (código $1)",
"virus-unknownscanner": "antibírus çcoincido:",
"yourname": "Nome de outelizador(a):",
"filesource": "Fuonte:",
"ignorewarnings": "Eignorar qualquiera abiso",
"savefile": "Grabar fexeiro",
+ "uploaddisabled": "Ambio de fexeiros zatibado.",
"watchthisupload": "Begiar este fexeiro",
+ "upload-dialog-title": "Cargar fexeiro",
"upload-curl-error28": "Ultrapassado l tiempo lhemite pa l ambio de l fexeiro",
"license": "Lhicença:",
"license-header": "Lhicença",
"deletecomment": "Rezon:",
"deleteotherreason": "Rezon adicional:",
"deletereasonotherlist": "Outra rezon",
+ "deletereason-dropdown": "* Motibos d'eliminaçon quemuns\n** Spam\n** Bandalismo\n** Biolaçon de dreitos d'outor\n** Pedido de l'outor\n** Ancaminamiento ambálido",
"rollbacklink": "retornar",
"protectlogpage": "Registro de porteçon",
"protectedarticle": "porteger \"[[$1]]\"",
"year": "De l anho (i atrasados):",
"sp-contributions-newbies": "Percurar solo an las cuntribuiçones de nuobas cuontas",
"sp-contributions-newbies-sub": "Pa cuontas nuobas",
- "sp-contributions-blocklog": "Registro de bloqueios",
+ "sp-contributions-blocklog": "registro de bloqueios",
"sp-contributions-talk": "cumbersa",
"sp-contributions-search": "Percurar cuntribuiçones",
"sp-contributions-username": "Morada de IP ó outelizador:",
"unblocklink": "zbloquiar",
"change-blocklink": "altarar bloqueio",
"contribslink": "cuntribs",
- "blocklogpage": "Registro de l bloqueio",
+ "blocklogpage": "Registro de bloqueios",
"blocklogentry": "\"[[$1]]\" fui bloquiado cun un tiempo de balidade de $2 $3",
"unblocklogentry": "zbloqueste $1",
"block-log-flags-nocreate": "criaçon de cuontas zatibada",
"tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरूको संख्या देखाउने",
"tog-oldsig": "वर्तमान हस्ताक्षर:",
"tog-fancysig": "मेरो दस्तखतलाई विकि पाठको रुपमा लिने (स्वत लिङ्क बिना)",
- "tog-uselivepreview": "पà¥\8dरतà¥\8dयà¤\95à¥\8dष पà¥\82रà¥\8dवरà¥\81प पà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\81हà¥\8bस",
+ "tog-uselivepreview": "पà¥\83षà¥\8dठपà¥\81नरà¥\8dà¤à¤°à¤£ नà¤\97रà¥\80à¤\95न पà¥\82रà¥\8dवावलà¥\8bà¤\95नहरà¥\82 दà¥\87à¤\96ाà¤\89नà¥\81हà¥\8bसà¥\8d",
"tog-forceeditsummary": "खाली सम्पादन शीर्षक प्रविष्टि गरेमा मलाई सोध्ने",
"tog-watchlisthideown": "मेरा सम्पादनहरू निगनारी सूचीबाट लुकाउने",
"tog-watchlisthidebots": "बोट सम्पादनहरू निगरानी सूचीबाट लुकाउने",
"userlogin-resetpassword-link": "पासवर्ड भुल्नुभयो?",
"userlogin-helplink2": "प्रवेश गर्नको लागि सहयोग",
"userlogin-loggedin": "तपाईं {{GENDER:$1|$1}}को रूपमा प्रवेश (लग इन) भइ सक्नु भयो ।\nअर्को प्रयोगकर्ताको रूपमा प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर्नुहोस् ।",
+ "userlogin-reauth": "तपाईं {{GENDER:$1|$1}} नै हो भनी प्रमाणित गर्न तपाईंले पुनः लगइन गर्नुपर्दछ।",
"userlogin-createanother": "अर्को खाता खोल्नुहोस्",
"createacct-emailrequired": "इमेल ठेगाना",
"createacct-emailoptional": "इमेल ठेगाना (ऐच्छिक)",
"createacct-reason-ph": "किन तपाईं नयाँ खाता खोलिरहनु भएको हो ?",
"createacct-submit": "तपाईंको खाता सिर्जना गर्नुहोस",
"createacct-another-submit": "खाता खोल्नुहोस्",
+ "createacct-continue-submit": "खाता निर्माणलाई निरन्तरता दिनुहोस्",
+ "createacct-another-continue-submit": "खाता निर्माणलाई निरन्तरता दिनुहोस्",
"createacct-benefit-heading": "{{SITENAME}} तपाईं जस्तै मानिसहरूद्वारा सिर्जना गरिएको हो ।",
"createacct-benefit-body1": "{{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
"createacct-benefit-body2": "{{PLURAL:$1|पृष्ठ|पृष्ठहरू}}",
"changepassword-success": "तपाईंको पासवर्ड सफलतापूर्वक परिवर्तन भयो!",
"changepassword-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेश (लग इन)को निम्ति प्रयास गर्नुभएको छ। \nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
"botpasswords": "बोट पासवर्ड",
+ "botpasswords-disabled": "बोट पासवर्डहरू असक्षम गरिएका छन्।",
"botpasswords-createnew": "नयाँ बोटको लागि पासवर्ड बनाउने",
"botpasswords-label-appid": "बोट नाम",
"botpasswords-label-create": "बनाउनुहोस्",
"passwordreset-emailtext-user": "{{SITENAME}} को $1 प्रयोगकर्ताले {{SITENAME}} ($4)को लागि खाता विवरणको निम्ति एउटा अनुस्मारकको अनुरोध गरेको छ । निम्न प्रयोगकर्ता {{PLURAL:$3|खाता यस इमेल ठेगानासित सम्बन्धित छ|खाताहरू यस इमेल ठेगानासित सम्बन्धित छन् ।}}:\n\n$2\n\n{{PLURAL:$3|यो अस्थाई पासवर्डको|यी अस्थाई पासवर्डहरूको}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस् ।",
"passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
"passwordreset-emailsentemail": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
+ "passwordreset-invalidemail": "अमान्य इमेल ठेगाना",
"changeemail": "इमेल ठेगाना परिवर्तन गर्नुहोस",
"changeemail-header": "खाताको इमेल ठेगाना परिवर्तन गर्नुहोस",
"changeemail-no-info": "यस पृष्ठमा सिधै जानको लागि प्रवेश गर्नु पर्ने हुन्छ ।",
"sig_tip": "तपाईंको समयछाप सहितको दस्तखत",
"hr_tip": "क्षितिजिय रेखा (कम प्रयोग गर्नुहोस्)",
"summary": "सारांश:",
- "subject": "विषय/शीर्षक:",
+ "subject": "विषय:",
"minoredit": "यो सानो सम्पादन हो",
"watchthis": "यो पृष्ठ अवलोकन गर्नुहोस्",
"savearticle": "सङ्ग्रह गर्ने",
"selfredirect": "<strong>चेतावनी:</strong> तपाईं यस पृष्ठलाई आफुमा पुनः निर्देशित गर्दै हुनुहुन्छ।\nहुनसक्छ तपाईं अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गर्दै हुनुहुन्छ, वा गलत पृष्ठको सम्पादन गर्दै हुनुहुन्छ।\nतपाईं पुनः एकपटक \"$1\" क्लिक गर्नुहुन्छ, पुनः निर्देशित त्यसै पनि बनाइनेछ।",
"missingcommenttext": "कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।",
"missingcommentheader": "<strong>याद गर्नुहोस् :</strong> तपाईंले टिप्पणीमा विषय /शीर्ष पंक्ति दिनुभएको छैन ।\nतपाईंले फेरि \"$1\" थिच्नु भएमा , तपाईंको सम्पादन यसै रुपमा सङ्ग्रहित हुनेछ ।",
- "summary-preview": "साराà¤\82श पूर्वालोकन:",
- "subject-preview": "विषय/शीर्षपंक्ति पूर्वरुप:",
+ "summary-preview": "समà¥\8dपादन साराà¤\82शà¤\95à¥\8b पूर्वालोकन:",
+ "subject-preview": "विषयको पूर्वावलोकन:",
"previewerrortext": "तपाईंको परिवर्तनको पूर्वावलोकन बनाउन खोज्दा समस्या आएको छ ।",
"blockedtitle": "प्रयोककर्तालाई रोक लगाइएको छ",
"blockedtext": "'''तपाईंको प्रयोगकर्ता नाम या आइ पी ठेगानालाई रोक लगाइएको छ ।'''\n\nरोक लगाउने $1.\nरोक लगाउनाको कारण ''$2''.\n\n* रोक सुरू हुने : $8\n* रोक सकिने: $6\n* रोकबाट लक्षित: $7\n\nतपाईंले $1 वा अरु कुनै [[{{MediaWiki:Grouppage-sysop}}|प्रवन्धक]] सँग रोकको बारेमा छलफल गर्न सम्पर्क गर्न सक्नुहुन्छ ।\nतपाईँले 'प्रयोगकर्तालाई इ-मेल गर्ने ' सुविधा मान्य इमेल ठेगाना [[Special:Preferences|अभिरुचीहरू]]मा नखुलाए सम्म प्रयोगगर्न पाउनुहुने छैन र यसको प्रयोग गर्नबाट रोक लगाइएको छैन ।\nतपाईंको IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तपाईँको प्रश्नमा सबै जानकारी खुलाउनुहोला ।",
"page_last": "अन्तिम",
"histlegend": "अन्तर चयन:संशोधनहरूको तुलनाको लागि रेडियो बाकसमा क्लिक गरेर इण्टर गर्नुहोस् अथवा तल दिएको बटनमा थिच्नुहोस् <br />\nलिजेंड: (चालू): '''({{int:cur}})''' = अवतरणको बीचमा अन्तर, '''({{int:last}})''' = पहिलाका अवतरणको बीचमा अन्तर, '''{{int:minoreditletter}}''' = सानो परिवर्तन।",
"history-fieldset-title": "संशोधनका लागि खोजी गर्नुहोस्",
- "history-show-deleted": "मेटिएका मात्र",
+ "history-show-deleted": "सà¤\82शà¥\8bधन मà¥\87à¤\9fिà¤\8fà¤\95ा मातà¥\8dर",
"histfirst": "पुरानो",
"histlast": "नयाँ",
"historysize": "({{PLURAL:$1|१ बाइट |$1 बाइटहरू}})",
"revdelete-unsuppress": "पुनर्स्थापित पुनरावृत्तिबाट बन्देज हटाउने",
"revdelete-log": "कारण :",
"revdelete-submit": "{{PLURAL:$1|छानिएको संशोधन|छानिएका संशोधनहरु}}मा प्रयोग गर्ने",
- "revdelete-success": "'''संशोधन दृश्यता सफलतापूर्वक अद्यतन भयो।'''",
+ "revdelete-success": "संशोधन दृश्यता अद्यतन भयो।",
"revdelete-failure": "'''संशोधन दृश्यता अद्यतन गर्न सकिएन:'''\n$1",
"logdelete-success": "'''लग दृष्टि सफलतापूर्वक मिलाइयो ।'''",
"logdelete-failure": "'''लग दृष्टि मिलाउन सकिएन :'''\n$1",
"prefs-help-prefershttps": "यो अभिरूची तपाईंको अर्को प्रवेश (लग इन) बाट लागु हुनेछ ।",
"prefswarning-warning": "तपाईंले आफ्नो अभिरूचीमा गर्नुभएको परिवर्तन अहिले सम्म सङ्ग्रह गरिएको छैन। यदि तपाईं \"$1\" मा क्लिक नगरी यस पृष्ठबाट बाहिर जानुभयो भने तपाईंको अभिरूची अपडेट गर्न सकिदैन।",
"prefs-tabs-navigation-hint": "सुझाव: तपाईं ट्याबसहरूमा ट्याबसको बीच आवागमन गर्नका लागि देब्रे वा दाहिने तीर साँचोको प्रयोग गर्न सक्नुहुन्छ।",
- "userrights": "प्रयोगकर्ता अधिकार व्यवस्थापन",
+ "userrights": "प्रयोगकर्ता अधिकारहरू",
"userrights-lookup-user": "प्रयोगकर्ता समूह व्यवस्थापन गर्नुहोस",
"userrights-user-editname": "प्रयोगकर्ता नाम दिनुहोस् :",
"editusergroup": "प्रयोगकर्ता समूह सम्पादन गर्नुहोस्",
"passwordreset-emailelement": "↓Brukarnamn: \n$1\n\nMellombels passord: \n$2",
"passwordreset-emailsentemail": "Ein e-post for attendestilling av passord er vorten send",
"changeemail": "Endre eller fjern e-postadresse",
- "changeemail-header": "↓Endre kontoen si e-postadresse",
+ "changeemail-header": "Fyll ut dette skjemaet for å endre e-postadressa di. Ynskjer du å fjerne tilknytinga ei e-postadresse har til kontoen din, lat feltet for ny e-postadresse stå tomt når du sender inn skjemaet.",
"changeemail-no-info": "↓Du må vera pålogga for å få tilgang direkte til denne sida.",
- "changeemail-oldemail": "↓Noverande e-postadresse:",
+ "changeemail-oldemail": "Gjeldande e-postadresse:",
"changeemail-newemail": "Ny e-postadresse:",
+ "changeemail-newemail-help": "Dette feltet skal stå tomt om du ynskjer å fjerne e-postadressa di. Du kan ikkje nullstille eit gløymt passord og kan heller ikkje ta imot e-postar frå denne wikien om e-postadressa er fjerna.",
"changeemail-none": "↓(ingen)",
"changeemail-password": "{{SITENAME}}-passordet ditt:",
- "changeemail-submit": "↓Endre e-post",
+ "changeemail-submit": "Endre e-post",
"changeemail-throttled": "Du har freista for mange gonger å logga inn. Du lyt venta $1 før du kan freista på nytt.",
"bold_sample": "Halvfeit skrift",
"bold_tip": "Halvfeit skrift",
"Macofe",
"Amire80",
"Matma Rex",
- "Ibrahim khashrowdi"
+ "Ibrahim khashrowdi",
+ "Baloch Khan"
]
},
"tog-underline": "کرښنې تړنې:",
"anontalk": "خبرې اترې",
"navigation": "گرځښت",
"and": " او",
- "qbfind": "موندل",
- "qbbrowse": "سپړل",
- "qbedit": "سمول",
- "qbpageoptions": "همدا مخ",
- "qbmyoptions": "زما پاڼې",
"faq": "ډ-ځ-پ",
- "faqpage": "Project:ډ-ځ-پ",
"actions": "کړنې",
"namespaces": "نوم-تشيالونه",
"variants": "ډولونه",
"searcharticle": "ورځه",
"history": "د مخ پېښليک",
"history_short": "پېښليک",
+ "history_small": "تاریخ",
"updatedmarker": "زما د وروستي راتگ نه راپدېخوا اوسمهاله شوی",
"printableversion": "چاپي بڼه",
"permalink": "تلپاتې تړنه",
"edit-local": "سيمه ايزې څرگندونې سمول",
"create": "جوړول",
"create-local": "سيمه ايزې څرگندونې ورگډول",
- "editthispage": "همدا مخ سمول",
- "create-this-page": "همدا مخ ليکل",
"delete": "ړنگول",
- "deletethispage": "دا مخ ړنگول",
- "undeletethispage": "دا مخ ناړنگول",
"undelete_short": "{{PLURAL:$1|يو سمون|$1 سمونې}} ناړنگول",
"viewdeleted_short": "{{PLURAL:$1|يو ړنگ شوی سمون|$1 ړنگ شوي سمونونه}} کتل",
"protect": "ژغورل",
"protect_change": "بدلون",
- "protectthispage": "همدا مخ ژغورل",
"unprotect": "ژغورنه بدلول",
- "unprotectthispage": "د دې مخ ژغورنه بدلول",
"newpage": "نوی مخ",
- "talkpage": "د دې مخ په اړه خبرې اترې کول",
"talkpagelinktext": "خبرې اترې",
"specialpage": "ځانگړی مخ",
"personaltools": "شخصي اوزار",
- "articlepage": "د مخ مېنځپانگه ښکاره کول",
"talk": "خبرې اترې",
"views": "کتنې",
"toolbox": "اوزارونه",
- "userpage": "د کارن پاڼه کتل",
- "projectpage": "د پروژې مخ کتل",
+ "tool-link-userrights": "د{{GENDER:$1|کارن}} ګروپونه بدل کړي",
+ "tool-link-userrights-readonly": "د{{GENDER:$1|کارن}} ګروپونه ښکاره کړي",
+ "tool-link-emailuser": "دې {{GENDER:$1|کارن}} ته برېښناليک لېږل",
"imagepage": "د دوتنې مخ کتل",
"mediawikipage": "پيغام مخ کتل",
"templatepage": "د کينډۍ مخ کتل",
"virus-scanfailed": "ځيرڅارنه بريالۍ نه شوه (کوډ $1)",
"virus-unknownscanner": "ناڅرگند ضدويروس:",
"logouttext": "'''اوس تاسې د غونډال څخه ووتلئ.'''\n\nدا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
+ "cannotlogoutnow-title": "وس نسم کولاي بهر تري ووځم",
"welcomeuser": "$1، ښه راغلې!",
"welcomecreation-msg": "گڼون مو جوړ شو.\nد [[Special:Preferences|{{SITENAME}} غوره توبونه]] بدلول مو مه هېروۍ.",
"yourname": "کارن-نوم:",
"createacct-yourpasswordagain-ph": "پټنوم مو بيا وټاپئ",
"userlogin-remembermypassword": "غونډال کې مې ننوتلی وساته",
"userlogin-signwithsecure": "خوندي اړيکتيا کارول",
+ "cannotloginnow-title": "نسم کولای چې دننه سم",
"cannotcreateaccount-title": "گڼونونه نه شي جوړېدای",
"yourdomainname": "ستاسې شپول:",
"password-change-forbidden": "تاسې په دې ويکي باندې خپل پټنوم نه شی بدلولی.",
"botpasswords-label-update": "اوسمهالول",
"botpasswords-label-cancel": "ناگارل",
"botpasswords-label-delete": "ړنگول",
+ "botpasswords-label-resetpassword": "پټوم بدل کړي",
+ "botpasswords-label-grants": "تطبیق وړ ګرانټ:",
"resetpass_forbidden": "پټنومونه مو نه شي بدلېدلای",
"resetpass-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
"resetpass-submit-loggedin": "پټنوم بدلول",
"editusergroup": "{{GENDER:$1|کارن}} ډلې سمول",
"editinguser": "د <strong>[[User:$1|$1]]</strong> {{GENDER:$1|کارن}} رښتې بدلول $2",
"userrights-editusergroup": "کارن ډلې سمول",
+ "userrights-viewusergroup": "د{{GENDER:$1|کارن}} ګروپونه ښکاره کړي",
"saveusergroups": "{{GENDER:$1|کارن}} ډلې خوندي کول",
"userrights-groupsmember": "غړی د:",
"userrights-groupsmember-auto": "ضمني غړی د:",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
"recentchanges-legend-plusminus": "(<em>±123</em>)",
"recentchanges-submit": "ښکاره کول",
+ "rcfilters-tag-remove": "لرې کړئ'$1'",
+ "rcfilters-savedqueries-rename": "نوم بدلول",
"rcfilters-filterlist-title": "چاڼگران",
"rcfilters-filter-user-experience-level-newcomer-label": "نوي راغلي",
"rcfilters-filter-user-experience-level-learner-label": "زده کوونکي",
"unblocked-range": "له $1 بنديز ليرې شو",
"unblocked-ip": "له [[Special:Contributions/$1|$1]] څخه بنديز ليرې شو.",
"blocklist": "بنديز لگېدلي کارنان",
+ "autoblocklist-submit": "پلټل",
"ipblocklist": "بنديز لگېدلي کارنان",
"ipblocklist-legend": "يو بنديز شوی کارن موندل",
"blocklist-userblocks": "گڼون بنديزونه پټول",
"patrol-log-header": "دا د څارل شويو مخکتنو يو يادښت دی.",
"log-show-hide-patrol": "د څارنې يادښت $1",
"log-show-hide-tag": "نښلن يادښت $1",
+ "confirm-markpatrolled-button": "ښه",
"deletedrevision": "د $1 زړه ړنگه شوې بڼه",
"filedeleteerror-short": "د دوتنې د ړنگولو ستونزه: $1",
"filedeleteerror-long": "د دوتنې په ړنگولو کې تېروتنې پېښې شوې:\n\n$1",
"fileduplicatesearch-noresults": "د \"$1\" په نوم دوتنه و نه موندل شوه.",
"specialpages": "ځانگړي مخونه",
"specialpages-note-top": "څرگندونې",
- "specialpages-note": "* نورماله ځانگړي مخونه.\n* <strong class=\"mw-specialpagerestricted\">محدوده ځانگړي مخونه.</strong>",
"specialpages-group-maintenance": "د څارنې راپورونه",
"specialpages-group-other": "نور ځانگړي مخونه",
"specialpages-group-login": "ننوتل / گڼون جوړول",
"authmanager-realname-label": "اصلي نوم",
"authmanager-realname-help": "د کارن اصلي نوم",
"authprovider-resetpass-skip-label": "تېرېدل",
+ "specialpage-securitylevel-not-allowed-title": "اجازه نسته",
"changecredentials-submit": "بدلول",
"removecredentials-submit": "غورځول",
"credentialsform-account": "گڼون نوم:"
"parser-template-loop-warning": "Parameters:\n* $1 - page title",
"template-loop-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with template loops will be listed.",
"template-loop-category-desc": "Pages with template loops category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Template-loop-category}}",
+ "template-loop-warning": "This message is displayed in edit preview when a template loop is detected on the previewed page.\n\nParameters:\n* $1 - the full title of template which causes the template loop.",
"parser-template-recursion-depth-warning": "Parameters:\n* $1 - limit value of recursion depth",
"language-converter-depth-warning": "Error message shown when a page uses too deeply nested language conversion syntax. Parameters:\n* $1 - the value of the depth limit",
"node-count-exceeded-category": "This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the node-count of the preprocessor exceeds the limit.\n\nSee also:\n* {{msg-mw|Node-count-exceeded-warning}}",
"Санюн Вадик",
"MustangDSG",
"Valeri'swiki",
- "Marat-avgust"
+ "Marat-avgust",
+ "Ernác"
]
},
"tog-underline": "Подчёркивание ссылок:",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "Показать",
"rcfilters-tag-remove": "Удалить '$1'",
- "rcfilters-legend-heading": "<strong>СпиÑ\81ок Ñ\81окÑ\80аÑ\89ений:</strong>",
+ "rcfilters-legend-heading": "<strong>Ð\9aÑ\8aÑ\8bÑ\81Ñ\85аÑ\80Ñ\82Ñ\8bÑ\83ланÑ\8b Ñ\82измеÑ\81и:</strong>",
"rcfilters-other-review-tools": "<strong>Другие инструменты проверки</strong>",
"rcfilters-group-results-by-page": "Группировать результаты по странице",
"rcfilters-grouping-title": "Группировка",
"tog-watchuploads": "منھنجا نوان چاڙهيل فائيلس نظر ۾ فھرست ۾ شامل ڪريو",
"tog-watchrollback": "انهن صفحن کي منهنجي نظر ۾ فھرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي",
"tog-minordefault": "سمورين تبديلين کي بنان چئي معمولي ترميم تصور ڪريو",
- "tog-previewontop": "ترميمي دٻيءَ مٿان پيش نگاهہ ڏيکاريو",
- "tog-previewonfirst": "پهرين ترميم تي پيش نگاهہ ڏيکاريو",
+ "tog-previewontop": "ترميمي دٻيءَ مٿان پيش نگاھ ڏيکاريو",
+ "tog-previewonfirst": "پهرين ترميم تي پيش نگاھ ڏيکاريو",
"tog-enotifwatchlistpages": "منهنجي نظر ۾ فھرست اندر شامل ڪنهن صفحي يا فائيل ۾ تبديل پيش اچي مون کي برقٽپال اماڻيو",
"tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برقٽپال اماڻيو",
"tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برقٽپال ڪريو",
"tog-norollbackdiff": "واپس ورائڻ کان پوءِ تفاوت نہ ڏيکاريو",
"tog-useeditwarning": "مونکي خبردار ڪريو جڏهن مان هڪ ترميم وارو صفحو بغير تبديلين سانڍڻ جي ڇڏيان",
"tog-prefershttps": "هميشہ محفوظ ڪنيڪشن استعمال ڪريو جڏهن داخل ٿيل هجو",
- "underline-always": "هميشہ",
+ "underline-always": "سدائين",
"underline-never": "ڪڏهن بہ نہ",
"underline-default": "پيش طَي چَم يا جھانگُو",
"editfont-style": "ايراضي جو فونٽ اسٽائيل سنواريو:",
"category_header": "\"$1\" زمري جا صفحا",
"subcategories": "ذيلي زمرا",
"category-media-header": " \"$1\" زمري اندر ذريعات",
- "category-empty": "''فيالوقت هن زمري ۾ ڪي بہ صفحا يا ذريعات شامل ناهن.''",
+ "category-empty": "<em>فيالوقت هن زمري ۾ ڪي بہ صفحا يا ذريعات شامل ناهن.</em>",
"hidden-categories": "{{PLURAL:$1|لڪيل زمرو|لڪيل زمرا}}",
"hidden-category-category": "لڪل زمرا",
"category-subcat-count": "{{PLURAL:$2|ھن زمري ۾ رڳو ھيٺيون ذيلي زمرو آهي.|هن زمري ۾ ڪل $2 مان ھيٺيان {{PLURAL:$1|subcategory|$1 ذيلي زمرا}} آھن.}}",
"article": "موادي صفحو",
"newwindow": "(نئين دريءَ ۾ کلندو)",
"cancel": "رد",
- "moredotdotdot": "اڃا...",
+ "moredotdotdot": "وڌيڪ...",
"morenotlisted": "ھي فھرست نامڪمل بہ ٿي سگھي ٿي.",
- "mypage": "منهنجو صفحو",
+ "mypage": "صفحو",
"mytalk": "بحث",
"anontalk": "بحث",
"navigation": "رھنمائي",
"help": "مدد",
"search": "ڳولا",
"searchbutton": "ڳوليو",
- "go": "کوليو",
+ "go": "هلو",
"searcharticle": "وڃو",
"history": "صفحي جي سوانح",
"history_short": "سوانح",
"undelete_short": "اڻڊاهيو {{PLURAL:$1|هڪ ترميم|$1 ترميمون}}",
"viewdeleted_short": "ڏسو {{PLURAL:$1|هڪ ڊاٺل ترميم|$1 ڊاٺل ترميمون}}",
"protect": "تحفظيو",
- "protect_change": "تبديل ڪريو",
+ "protect_change": "مٽايو",
"unprotect": "تحفظ بدلايو",
"newpage": "نئون صفحو",
"talkpagelinktext": "بحث",
"talk": "بحث",
"views": "ڏيٺون",
"toolbox": "اوزارَ",
- "tool-link-userrights": "{{GENDER:$1|Ù\8aÙ\88زر}} گرÙ\88Ú¾ تبدÙ\8aÙ\84 ڪريو",
+ "tool-link-userrights": "{{GENDER:$1|Ù\88اھپ}} گرÙ\88Ú¾ Ù\85ٽايو",
"tool-link-userrights-readonly": "{{GENDER:$1|يوزر}} گروھ ڏسو",
- "tool-link-emailuser": "Ú¾Ù\86 {{GENDER:$1|Ù\8aÙ\88زر}} ڏانھن برقٽپال موڪليو",
- "imagepage": "ذريعاتي صفحو ڏسو",
+ "tool-link-emailuser": "Ú¾Ù\86 {{GENDER:$1|Ù\88اھپ}} ڏانھن برقٽپال موڪليو",
+ "imagepage": "فائيل صفحو ڏسو",
"mediawikipage": "نياپي جو صفحو ڏسو",
"templatepage": "سانچي جو صفحو ڏسو",
- "viewhelppage": "امدادي صفحو ڏسو",
+ "viewhelppage": "مددي صفحو ڏسو",
"categorypage": "زمراتي صفحو ڏسو",
"viewtalkpage": "بحث ڏسو",
"otherlanguages": "ٻين ٻولين ۾",
"poolcounter-usage-error": "استعمال جي خرابي: $1",
"aboutsite": "{{SITENAME}} بابت",
"aboutpage": "Project:بابت",
- "copyright": "ڪجھہ ٻيو ڄاڻايل نہ هجڻ جي صورت ۾ سمورو مواد $1 تحت ميسر ڪجي ٿو.",
+ "copyright": "ڪجھ ٻيو ڄاڻايل نہ هجڻ جي صورت ۾ سمورو مواد $1 تحت ميسر ڪجي ٿو.",
"copyrightpage": "{{ns:project}}:تاليف جا حق",
"currentevents": "ھاڻوڪا واقعا",
"currentevents-url": "Project:ھاڻوڪا واقعا",
"portal-url": "Project:نياتي باب",
"privacy": "ذاتيات پاليسي",
"privacypage": "Project:ذاتيات پاليسي",
- "badaccess": "اجازتÙ\86اÙ\85Û\81 چُڪَ",
+ "badaccess": "اجازتÙ\8a چُڪَ",
"versionrequired": "ذريعاتوڪي جو ورزن $1 درڪار",
"versionrequiredtext": "هيءُ صفحو استعمال ڪرڻ لاءِ ذريعاتوڪي جو ورزن $1 درڪار آهي. وڌيڪ ڄاڻڻ لاءِ [[Special:Version|ورزن بابت صفحو]] ڏسو.",
"ok": "ٺيڪ",
"retrievedfrom": "\"$1\" تان ورتل",
- "youhavenewmessages": "توهان لاءِ $1 ($2) آهن.",
+ "youhavenewmessages": "{{PLURAL:$3|توھان وٽ}} $1 ($2) آھن.",
"youhavenewmessagesmanyusers": "توهان لاءِ ڪيترن ئي يُوزرس ($2) طرفان $1 آيل آهن.",
"newmessageslinkplural": "{{PLURAL:$1|ھڪ نئون پيغام|999=نوان پيغام}}",
"newmessagesdifflinkplural": "آخري {{PLURAL:$1|تبديلي|999=تبديليون}}",
"confirmable-confirm": "ڇا{{GENDER:$1|توهانکي}} پڪ آهي؟",
"confirmable-yes": "ها",
"confirmable-no": "نہ",
- "thisisdeleted": "$1 کي ڏسڻ يا بحالڻ چاهيندا؟",
- "viewdeleted": "$1 Ú\8fسÙ\86دا؟",
- "restorelink": "{{PLURAL:$1|Ù\87ÚªÚ\99Ù\8a Ú\8aاٺÙ\84 ترÙ\85Ù\8aÙ\85|$1 Ú\8aاٺل ترميمون}}",
+ "thisisdeleted": "$1 کي ڏسندئو يا بحاليندئو؟",
+ "viewdeleted": "$1 Ú\8fسÙ\86دئÙ\88؟",
+ "restorelink": "{{PLURAL:$1|Ù\87ÚªÚ\99Ù\8a Ú\8aاٿÙ\84 ترÙ\85Ù\8aÙ\85|$1 Ú\8aاٿل ترميمون}}",
"feedlinks": "روان رسد:",
- "site-rss-feed": "$1 آر ايس ايس روان رسد",
+ "site-rss-feed": "$1 آرايسايس روان رسد",
"site-atom-feed": "$1 اڻو روان رسد",
"page-rss-feed": "\"$1\" RSS برق مواد",
"page-atom-feed": "\"$1\" اڻو روان رسد",
"nstab-image": "فائيل",
"nstab-mediawiki": "نياپو",
"nstab-template": "سانچو",
- "nstab-help": "امدادي صفحو",
+ "nstab-help": "مددي صفحو",
"nstab-category": "زمرو",
"mainpage-nstab": "مک صفحو",
"nosuchaction": "اهڙو ڪو بہ عمل نہ آهي",
"changepassword-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
"botpasswords": "بوٽ جو ڳجھولفظ",
"botpasswords-disabled": "بوٽ ڳجھالفظ ناقابلِڪار ڪيل آھن.",
+ "botpasswords-label-appid": "باٽ جو نالو:",
"botpasswords-label-create": "سرجيو",
"botpasswords-label-update": "تجديد",
"botpasswords-label-cancel": "رد",
"prefs-diffs": "تفاوت",
"prefs-help-prefershttps": "هيءَ ترجيح توهان جي ايند داخل ٿيڻ تي عمل ۾ ايندي.",
"userrights": "يُوزر حق",
- "userrights-lookup-user": "ÚªÙ\88 Ù\8aÙ\88زر چونڊيو",
+ "userrights-lookup-user": "ÚªÙ\88 Ù\88اھپ چونڊيو",
"userrights-user-editname": "يُوزرنانءُ ڄاڻايو:",
- "editusergroup": "Ù\8aÙ\88زر گروھ اتاريو",
+ "editusergroup": "Ù\88اھپ گروھ اتاريو",
"userrights-editusergroup": "{{GENDER:$1|يوزر}} گروھ سنواريو",
- "saveusergroups": "{{GENDER:$1|Ù\8aÙ\88زر}} گروھ سانڍيو",
+ "saveusergroups": "{{GENDER:$1|Ù\88اھپ}} گروھ سانڍيو",
"userrights-groupsmember": "برڪن:",
"userrights-groupsmember-auto": "رڪن واجبي:",
"userrights-reason": "سبب:",
"right-import": "ٻين وڪيز کان صفحا درآمديو",
"right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
"right-mergehistory": "صفحن جي سوانح سنواريو",
- "right-userrights": "سÚ\80 Ù\8aÙ\88زر ØÙ\82 ترÙ\85Ù\8aÙ\85 Úªريو",
+ "right-userrights": "سÚ\80 Ù\88اھپ ØÙ\82 سÙ\86Ù\88اريو",
"right-userrights-interwiki": "هن وڪي جي يوزرس جا حق ترميم ڪريو",
"right-siteadmin": "اعدادخانو بنديو ۽ کوليو",
"right-override-export-depth": "5ئين اونهائيءَ تائين ڳنڍيل صفحن سميت صفحا برآمديو",
"grant-basic": "بنيادي حقَ",
"grant-viewdeleted": "ڊَٺَلَ فائيلَ ۽ صفحا ڏسو",
"grant-viewmywatchlist": "پنهنجي نظرھيٺ فھرست ڏسو",
- "newuserlogpage": "Ù\8aÙ\88زر تخليق لاگ",
+ "newuserlogpage": "Ù\88اھپ تخليق لاگ",
"rightslog": "يُوزر حق لاگ",
"action-read": "هي صفحو پڙهو",
"action-edit": "هن صفحي کي سسنواريو",
"action-createpage": "ھي صفحو تخليق ڪريو",
"action-createtalk": "ھي مباحثي صفحو تخليق ڪريو",
- "action-createaccount": "هي يوزر کاتو تخليق ڪريو",
+ "action-createaccount": "ھي واھپ کاتو سرجيو",
"action-history": "هن صفحي جي سوانح ڏسو",
"action-minoredit": "هن ترميم کي معمولي طور نشان لڳايو",
"action-move": "هيءَُ صفحو چوريو",
"action-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
"action-unwatchedpages": "اڻ ڏٺل صفحن جي فھرست ڏسو",
"action-mergehistory": "هن صفحي جي سوانح ضم ڪريو",
- "action-userrights": "سÚ\80 Ù\8aÙ\88زر ØÙ\82 ترÙ\85Ù\8aÙ\85 Úªريو",
+ "action-userrights": "سÚ\80 Ù\88اھپ ØÙ\82 سÙ\86Ù\88اريو",
"action-userrights-interwiki": "ٻين وڪيز جي يوزرس جا حق ترميم ڪريو",
"action-siteadmin": "اعدادخاني کي بند ڪريو يا کوليو",
"action-sendemail": "برقٽپال اماڻيو",
"sp-deletedcontributions-contribs": "ڀاڱيداريون",
"linksearch-ns": "نانءُپولار",
"linksearch-ok": "ڳوليو",
- "listusersfrom": "تÙ\8a شرÙ\88ع ÚªÙ\86دÚ\99 Ù\8aÙ\88زر ڏيکاريو:",
+ "listusersfrom": "تÙ\8a شرÙ\88ع ÚªÙ\86دÚ\99 Ù\88اھپ ڏيکاريو:",
"listusers-submit": "ڏيکاريو",
"listusers-noresult": "ڪو بہ يُوزر نہ لڌو",
"listusers-blocked": "(بندشيل)",
"activeusers-excludegroups": "گروھن سان تعلق رکندڙ گروھ ڇڏيو:",
"activeusers-noresult": "ڪي بہ يُوزرس نہ لڌا.",
"activeusers-submit": "سرگرم يُوزرس ڏيکاريو",
- "listgrouprights": "Ù\8aÙ\88زر گرÙ\88Ù¾ جا ØÙ\82",
+ "listgrouprights": "Ù\88اھپ گرÙ\88Ú¾ جا ØÙ\82",
"listgrouprights-group": "گروهہ:",
"listgrouprights-rights": "حق",
"listgrouprights-members": "(رڪنن جي فھرست)",
"trackingcategories-nodesc": "ڪا به تشريح موجود نه آهي.",
"trackingcategories-disabled": "زمرو ناقابلِ ڪار بڻايل آهي.",
"emailuser": "هن واھپ کي برق ٽپال اماڻيو",
- "emailuser-title-target": "Ú¾Ù\86 {{GENDER:$1|Ù\8aÙ\88زر}} ڏانھن برقٽپال موڪليو",
+ "emailuser-title-target": "Ú¾Ù\86 {{GENDER:$1|Ù\88اھپ}} ڏانھن برقٽپال موڪليو",
"emailuser-title-notarget": "واھپ ڏانھن برقٽپال اماڻيو",
- "usermaildisabled": "Ù\8aÙ\88زر اÙ\8aÙ\85Ù\8aÙ\84 Ù\86اÙ\82ابÙ\84Ù\90 ڪار بڻيل",
+ "usermaildisabled": "Ù\88اھپ برÙ\82ٽپاÙ\84 Ù\86اÙ\82ابÙ\84Ù\90ڪار بڻيل",
"usermaildisabledtext": "توهان هن وڪي تي ٻين يوزرس ڏانهن ايميل نٿا موڪلي سگھو",
"noemailtitle": "برقٽپال پتو ناھي",
"noemailtext": "هن واھپ ڪو بہ قابلِڪار برقٽپال پتو نہ ڄاڻايو آهي.",
"tooltip-invert": "هن دٻي تي نشان لڳايو صحفن ۾ تبديليون لڪائڻ لاءِ چونڊيل نانءَپولار مان (۽ لاڳاپيل نانءُپولار جيڪڏهن نشان لڳل)",
"namespace_association": "منسلڪ نانءُپولار",
"blanknamespace": "(مُک)",
- "contributions": "{{GENDER:$1|Ù\8aÙ\88زر}} جون ڀاڱيداريون",
+ "contributions": "{{GENDER:$1|Ù\88اھپ}} جون ڀاڱيداريون",
"contributions-title": "يُوزر ڀاڱيداريون براءِ $1",
"mycontris": "ڀاڱيداريون",
"anoncontribs": "ڀاڱيداريون",
"import-upload-filename": "فائيل نانءُ:",
"import-comment": "تاثر:",
"importlogpage": "درآمد لاگ",
- "tooltip-pt-userpage": "{{GENDER:|تÙ\88ھاÙ\86جÙ\88 Ù\8aÙ\88زر}} صفحو",
- "tooltip-pt-mytalk": "{{GENDER:|تÙ\88ھاÙ\86جÙ\88}} Ù\8aÙ\88زر صفحو",
+ "tooltip-pt-userpage": "{{GENDER:|تÙ\88ھاÙ\86جÙ\88 Ù\88اھپ}} صفحو",
+ "tooltip-pt-mytalk": "{{GENDER:|تÙ\88ھاÙ\86جÙ\88}} Ù\88اھپ صفحو",
"tooltip-pt-preferences": "{{GENDER:|توھانجون}} ترجيحون",
"tooltip-pt-watchlist": "صفحن جي فھرست جيڪي توھان تبديلين لاءِ نظر ۾ رکيا آھن",
"tooltip-pt-mycontris": "{{GENDER:|توھانجي}} ڀاڱيدارين جي فھرست",
"tooltip-t-recentchangeslinked": "ويجھڙائيءَ ۾ صفحن ۾ ٿيل تبديليون هن صفحي سان ڳنڍيل آهن",
"tooltip-feed-atom": "هن صفحي لاءِ ايٽم فيڊ",
"tooltip-t-contributions": "{{GENDER:$1|ھن يوزر}} جي ڀاڱيدارين جي فھرست",
- "tooltip-t-emailuser": "{{GENDER:$1|Ú¾Ù\86 Ù\8aÙ\88زر}} ڏانھن برقٽپال موڪليو",
+ "tooltip-t-emailuser": "{{GENDER:$1|Ú¾Ù\86 Ù\88اھپ}} ڏانھن برقٽپال موڪليو",
"tooltip-t-upload": "فائيل چاڙهيو",
"tooltip-t-specialpages": "سڀني خاص صفحن جي فھرست",
"tooltip-t-print": "هن صفحي جو ڇاپائتو پرت",
"tooltip-rollback": "\"واپس ورايو\" ھن صفحي ۾ پوئين ڀاڱيدار جي ڪيل ترميم(ن) کي ھڪ ٽڙڪ سان اڻڪري ٿو",
"tooltip-preferences-save": "ترجيحون سانڍيو",
"tooltip-summary": "ننڍو خلاصو ڏيو",
- "anonymous": "گمنام {{PLURAL:$1|يوزر|يوزرس}} جو {{SITENAME}}",
+ "anonymous": "{{SITENAME}} جا گمنام {{PLURAL:$1|واھپ|واھپَ}}",
"simpleantispam-label": "اينٽي-اسپام روڪ.\nھن کي <strong>نہ</strong> ڀريو!",
"pageinfo-toolboxlink": "صفحي جي معلومات",
"pageinfo-contentpage-yes": "ها",
"logentry-delete-delete": "$1 {{GENDER:$2|ڊاٿو}} صفحو $3",
"revdelete-uname-hid": "يُوزرنانءُ لڪل",
"logentry-move-move": "$1 {{GENDER:$2|چوريو}} صفحو $3 ڏانهن $4",
- "logentry-newusers-create": "Ù\8aÙ\88زر کاتو $1 {{GENDER:$2|سرجيو ويو}}",
+ "logentry-newusers-create": "Ù\88اھپ کاتو $1 {{GENDER:$2|سرجيو ويو}}",
"logentry-upload-upload": "$1 {{GENDER:$2|چاڙهيو}} $3",
"rightsnone": "(ڪو بہ نہ)",
"feedback-back": "پوئتي",
"rollbacklinkcount-morethan": "врати више од $1 {{PLURAL:$1|измене|измене|измена}}",
"rollbackfailed": "Неуспешно враћање",
"cantrollback": "Не могу да вратим измену.\nПоследњи аутор је уједно и једини.",
- "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); неко други је већ изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) није успело; неко други је у међувремену изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Опис измене: <em>$1</em>.",
"revertpage": "Враћене измене [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]",
"revertpage-nouser": "Враћене су измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
"rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmene|izmene|izmena}}",
"rollbackfailed": "Neuspešno vraćanje",
"cantrollback": "Ne mogu da vratim izmenu.\nPoslednji autor je ujedno i jedini.",
- "alreadyrolled": "Vraćanje poslednje izmene stranice [[:$1]] od strane {{GENDER:$2|korisnika|korisnice|korisnika}} [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko drugi je već izmenio ili vratio stranicu.\n\nPoslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "alreadyrolled": "Vraćanje poslednje izmene stranice [[:$1]] od strane {{GENDER:$2|korisnika|korisnice|korisnika}} [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nije uspelo; neko drugi je u međuvremenu izmenio ili vratio stranicu.\n\nPoslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Opis izmene: <em>$1</em>.",
"revertpage": "Vraćene izmene [[Special:Contribs/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu korisnika [[User:$1|$1]]",
"revertpage-nouser": "Vraćene su izmene skrivenog korisnika na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]",
"sharedupload": "Ieu koropak téh ti $1 nu bisa jadi dipaké ku proyék-proyék lianna.",
"sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
"filepage-nofile": "Taya berkas nu ngaranna kieu.",
+ "filepage-nofile-link": "Taya berkan nu ngaranna kieu, tapi anjeun bisa [$1 ngunjalkeunna].",
"uploadnewversion-linktext": "ngamuatkeun vérsi anyar koropak ieu",
"shared-repo-from": "ti $1",
"shared-repo": "hiji répositori réréongan",
"filerevert-submit": "Balikkeun",
"filerevert-success": "'''[[Media:$1|$1]]''' geus dipulangkeun ka [vérsi $4, $3, $2].",
"filerevert-badversion": "Euweuh vérsi lokal tiheula ti koropak ieu kalawan cap waktu anu dimaksud.",
+ "filerevert-identical": "Vérsi berkas ayeuna geus idéntik jeung berkas nu dipilih.",
"filedelete": "Ngahapus $1",
"filedelete-legend": "Ngahapus gambar",
"filedelete-intro": "Anjeun rék ngahapus koropak '''[[Media:$1|$1]]''' katut sagala jujutanana.",
"sp-contributions-newbies": "Témbongkeun kontribusi ti akun anyar wungkul",
"sp-contributions-newbies-sub": "Pikeun akun anyar",
"sp-contributions-blocklog": "log peungpeuk",
- "sp-contributions-deleted": "kontribusi nu dihapus",
+ "sp-contributions-suppresslog": "kontribusi {{GENDER:$1|pamaké}} nu disamunikeun",
+ "sp-contributions-deleted": "kontribusi {{GENDER:$1|pamaké}} nu dipupus",
"sp-contributions-uploads": "unggahan",
"sp-contributions-logs": "log",
"sp-contributions-talk": "obrolan",
- "sp-contributions-userrights": "ngatur hak pamaké",
+ "sp-contributions-userrights": "Ménéjemén hak aksés {{GENDER:$1|pamaké}}",
"sp-contributions-blocked-notice": "Ieu pamaké keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
"sp-contributions-blocked-notice-anon": "Ieu alamat IP keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
"sp-contributions-search": "Paluruh kontribusi",
"blocklist-userblocks": "Sumputkeun peungpeukan akun",
"blocklist-tempblocks": "Sumputkeun peungpeukan saheulaanan",
"blocklist-addressblocks": "Sumputkeun pameungpeukan IP tunggal",
+ "blocklist-rangeblocks": "Nyumputkeun hontalan peungpeuk",
"blocklist-timestamp": "Cap titimangsa",
"blocklist-target": "Udagan",
"blocklist-expiry": "Kadaluwarsa",
"change-blocklink": "Robah status blokir",
"contribslink": "kontribusi",
"emaillink": "kirim surélék",
- "autoblocker": "Otomatis dipeungpeuk kusabab alamat IP anjeun dipaké ku \"[[User:$1|$1]]\".\nAlesan: \"$2\"",
+ "autoblocker": "Otomatis dipeungpeuk kusabab alamat IP anjeun dipaké ku \"[[User:$1|$1]]\".\nAlesan nu dibikeun pikeun pameungpeukan nyaéta: \"$2\"",
"blocklogpage": "Log_peungpeuk",
"blocklog-showlog": "Ieu pamaké saméméhna geus kungsi dipeungpeuk.\nPikeun rujukan, logna dipidangkeun di handap ieu:",
"blocklogentry": "meungpeuk [[$1]] nepi ka $2 $3",
"range_block_disabled": "Pangabisa kuncén pikeun nyieun sarupaning peungpeuk geus ditumpurkeun.",
"ipb_expiry_invalid": "Wanci daluwarsa teu bener.",
"ipb_expiry_old": "Waktu kadaluwarsana mah baheula.",
+ "ipb_expiry_temp": "Pameungpeukan sandiasma nu samunikeun kudu permanén.",
"ipb_already_blocked": "\"$1\" geus dipeungpeuk",
"ipb-needreblock": "$1 geus dipeungpeuk. Rék dirobah sétinganana?",
"ipb-otherblocks-header": "{{PLURAL:$1|Peungpeuk|Peungpeuk}} lianna",
"delete_and_move_confirm": "Enya, hapus kaca éta",
"delete_and_move_reason": "Hapus sangkan bisa mindahkeun",
"selfmove": "Judul sumber jeung tujuanana sarua, lain gé mindahkeun atuh!",
+ "immobile-source-namespace": "Teu bisa ngalihkeun kaca dina ngaranspasi \"$1\".",
+ "immobile-target-namespace": "Teu bisa ngalihkeun kaca ka ngaranspasi \"$1\".",
"immobile-target-namespace-iw": "Tutumbu interwiki teu bisa dipaké salaku tujul pamindahan.",
"immobile-source-page": "Ieu kaca teu bisa dipindahkeun.",
"immobile-target-page": "Teu bisa mindahkeun ka judul nu ditujul.",
"djvu_page_error": "Kaca DjVu teu kawadahan",
"djvu_no_xml": "Hanteu bisa nyokot XML pikeun berkas DjVu",
"thumbnail-temp-create": "Teu bisa nyieun berkas leutik témporer",
+ "thumbnail-dest-create": "Teu bisa nyimpen berkas leutik ka tujuan",
"thumbnail_invalid_params": "Kasalahan paraméter miniatur",
"thumbnail_toobigimagearea": "Berkas kalawan diménsi leuwih badag batan $1",
"thumbnail_dest_directory": "Diréktori nu dituju teu bisa dijieun",
"import-interwiki-submit": "Impor",
"import-mapping-default": "Impor ka lokasi standar",
"import-mapping-namespace": "Impor ka ngaranspasi:",
+ "import-mapping-subpage": "Impor minangka subkaca ti kaca di handap:",
"import-upload-filename": "Ngaran berkas:",
"import-comment": "Ringkesan:",
- "importtext": "Mangga ékspor koropakna ti sumber nu dipaké ku wiki migunakeun fungsi Special:Export, simpen na piringan anjeun, teras muatkeun di dieu.",
+ "importtext": "Mangga ékspor koropakna ti sumber nu dipaké ku wiki ngagunakeun [[Special:Export|fungsi ékspor]], simpen na piringan anjeun, teras muatkeun di dieu.",
"importstart": "Ngimpor kaca...",
"import-revision-count": "$1 {{PLURAL:$1|vérsi heubeul}}",
"importnopages": "henteu aya kaca keur diimpor.",
+ "imported-log-entries": "Geus diimpor $1 {{PLURAL:$1|saéntri log|éntri log}}.",
"importfailed": "Ngimpor gagal: $1",
"importunknownsource": "Tipeu sumber impor teu dipikawanoh",
"importcantopen": "Teu bisa muka koropak impor",
"importbadinterwiki": "Tutumbu antarwiki awon",
"importsuccess": "Ngimpor geus hasil!",
- "importnosources": "Teu aya sumber impor transwiki nu geus dijieun tur ngamuat jujutan sacara langsung geus dinon-aktifkeun.",
+ "importnosources": "Taya wiki ti nu diimpor nu geus dijieun sarta pamuatan jujuta sacara langsung geus di non-aktifkeun.",
"importnofile": "Euweuh koropak impor nu dimuat.",
"importuploaderrorsize": "Koropak impor gagal dimuat. Ukuranana ngaleuwihan wates nu diwenangkeun.",
"importuploaderrorpartial": "Koropak impor gagal dimuat sagemblengna.",
"exif-fixtureidentifier": "Ngaran fikstur",
"exif-locationdest": "Lokasi nu digambarkeun",
"exif-locationdestcode": "Kodeu lokasi nu digambarkeun",
+ "exif-contact": "Informasi kontak",
"exif-writer": "Nu nulis",
"exif-languagecode": "Basa",
"exif-iimversion": "Vérsi IIM",
"exif-lightsource-19": "Cahya baku C",
"exif-lightsource-24": "Tungsten studio ISO",
"exif-lightsource-255": "Sumber cahya séjén",
+ "exif-flash-fired-0": "Lampu kilat teu hurung",
"exif-flash-fired-1": "Buricak hurung",
"exif-flash-mode-3": "modeu otomatis",
"exif-focalplaneresolutionunit-2": "inci",
"blankpage": "Kaca kosong",
"intentionallyblankpage": "Ieu kaca ngahaja dikosongkeun.",
"external_image_whitelist": " #Antepkeun ieu baris sakumaha ayana<pre>\n#Paké fragmén éxprési régulér (ukur bagian anu aya di antara //) di handap\n#Ieu fragmén bakal dicocogkeun jeung URL gambar-gambar éksternal\n#Fragmén anu cocog bakal dipidangkeun minangka gambar, lamun henteu nu katémbong ukur tutumbuna #Baris nu dimimitian ku # bakal dianggap koméntar\n#Ieu teu ngabédakeun gedé leutikna aksara\n#Teundeun sakabéh fragmén éxprési régulér luhureun ieu baris. Antepkeun ieu baris sakumaha ayana</pre>",
+ "tags": "Tag parobahan valid",
"tag-filter": "Saringan [[Special:Tags|tag]]:",
"tag-filter-submit": "Saring",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+ "tag-mw-contentmodelchange": "parobahan modél kontén",
"tags-title": "Tag",
"tags-tag": "Ngaran tag",
"tags-source-header": "Sumber",
"tags-deactivate-reason": "Alesan:",
"tags-deactivate-submit": "Pareuman",
"tags-edit-title": "Édit tag",
+ "tags-edit-manage-link": "Kokola tag",
"tags-edit-existing-tags": "Tag nu aya:",
"tags-edit-existing-tags-none": "<em>Taya</em>",
"tags-edit-new-tags": "Tag anyar:",
"tags-edit-chosen-no-results": "Euweuh tag nu luyu",
"tags-edit-reason": "Alesan:",
"tags-edit-revision-submit": "Larapkeun parobahan kana {{PLURAL:$1|ieu révisi|$1 révisi}}",
+ "tags-edit-success": "Parobahan dilarapkeun.",
"comparepages": "Bandinkeun kaca",
"compare-page1": "Kaca 1",
"compare-page2": "Kaca 2",
"htmlform-float-invalid": "Niléy anu diasupkeun lain angka.",
"htmlform-int-toolow": "Niléy anu diasupkeun kurang ti $1 anu pangleutikna",
"htmlform-int-toohigh": "Niléy anu diasupkeun leuwih ti $1 anu panggedéna",
+ "htmlform-required": "Ieu niléy diperlukeun",
"htmlform-submit": "Kirim",
"htmlform-reset": "Bolaykeun parobahan",
"htmlform-selectorother-other": "Lianna",
"htmlform-date-placeholder": "TTTT-BB-HH",
"htmlform-time-placeholder": "JJ:MM:DD",
"htmlform-datetime-placeholder": "TTTT-BB-HH JJ:MM:DD",
+ "htmlform-title-not-creatable": "\"$1\" lain mangrupa judul kaca nu bisa dijieun",
"htmlform-title-not-exists": "$1 euweuh.",
"htmlform-user-not-exists": "<strong>$1</strong> taya.",
"logentry-delete-delete": "$1 {{GENDER:$2|ngahapus}} kaca $3",
"logentry-upload-upload": "$1 {{GENDER:$2|ngamuat}} $3",
"log-name-tag": "Log tag",
"rightsnone": "(euweuh)",
+ "rightslogentry-temporary-group": "$1 (samentara, nika $2)",
"feedback-adding": "Nambahkeun eupan balik kana kaca...",
"feedback-back": "Balik deui",
"feedback-cancel": "Bolay",
"feedback-useragent": "Agén pamaké:",
"searchsuggest-search": "Paluruh {{SITENAME}}",
"searchsuggest-containing": "ngandung...",
+ "api-error-badtoken": "Kasalahan internal: Token goréng.",
"duration-seconds": "$1 {{PLURAL:$1|detik|detik}}",
"duration-minutes": "$1 {{PLURAL:$1|menit|menit}}",
"duration-hours": "$1 {{PLURAL:$1|jam|jam}}",
"authmanager-realname-label": "Ngaran asli",
"authmanager-realname-help": "Ngaran asli pamaké",
"authmanager-provider-password": "Oténtikasi dumasar kecap sandi",
+ "authmanager-provider-temporarypassword": "Kecap sandi samentara",
+ "authprovider-confirmlink-success-line": "$1: Numbukeun ngahasil.",
"authprovider-resetpass-skip-label": "Liwatan",
"authprovider-resetpass-skip-help": "Liwatan pamulangan kecap sandi",
"authform-newtoken": "Token leungit. $1",
"cannotauth-not-allowed": "Anjeun teu diidinan pikeun maké ieu kaca",
"changecredentials": "Robah krédensial",
"changecredentials-submit": "Robah krédensial",
+ "changecredentials-invalidsubpage": "$1 téh jinis krédensial nu teu sah.",
"removecredentials": "Pupus krédensial",
"removecredentials-submit": "Pupus krédensial",
"removecredentials-success": "Krédensial Anda geus dipupus.",
"restrictionsfield-help": "Hiji alamat IP atawa pantengan CIDR per baris. Pikeun ngahurungkeun sakumna, paké:\n<pre>0.0.0.0/0\n::/0</pre>",
"revid": "révisi $1",
"pageid": "ID kaca $1",
+ "rawhtml-notallowed": "Tag <html> teu bisa dipaké di luar kaca normal.",
"gotointerwiki": "Ninggalkeun{{SITENAME}}",
"gotointerwiki-invalid": "Judul nu ditangtukeun teu sah.",
"undelete-cantedit": "Anjeun teu bisa ngabolaykeun pamupusan ieu kaca lantaran anjeun teu bisa ngédit ieu kaca.",
"sp-contributions-search": "Maghanap ng ambag",
"sp-contributions-username": "IP Address o bansag:",
"sp-contributions-toponly": "Ipakita lang ang mga pamamatnugot na mga huling rebisyon",
+ "sp-contributions-newonly": "Ipakita lang ang mga pamamatnugot na mga nalikhang pahina",
"sp-contributions-submit": "Hanapin",
"sp-contributions-explain": "",
"whatlinkshere": "Mga nakaturo dito",
"and": "和",
"faq": "常见问题",
"actions": "操作",
- "namespaces": "å\91½å\90\8d空间",
+ "namespaces": "å\90\8då\97空间",
"variants": "变种",
"navigation-heading": "导航菜单",
"errorpagetitle": "错误",
"unwatchthispage": "停止监视",
"notanarticle": "非内容页面",
"notvisiblerev": "上次由不同用户所作的版本已经删除",
- "watchlist-details": "æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表ä¸æ\9c\89{{PLURAL:$1|$1个页é\9d¢}}ï¼\88å¤\96å\8a 讨论页)。",
+ "watchlist-details": "æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表ä¸æ\9c\89{{PLURAL:$1|$1个页é\9d¢}}ï¼\88å\8c\85å\90«讨论页)。",
"wlheader-enotif": "已启用电子邮件通知。",
"wlheader-showupdated": "您上次访问后发生更改的页面<strong>加粗</strong>显示。",
"wlnote": "下面是{{PLURAL:$2|过去<strong>$2</strong>小时}}的{{PLURAL:$1|最后<strong>$1</strong>个更改}},截至$3 $4。",
"unwatchthispage": "停止監視",
"notanarticle": "非內容的頁面",
"notvisiblerev": "最後一次由其他使用者所作的修訂已經被刪除",
- "watchlist-details": "您的監視清單上共有 $1 個頁面 (不包含對話頁面)。",
+ "watchlist-details": "您的監視清單上共有 $1 個頁面(包含對話頁面)。",
"wlheader-enotif": "已開啟電子郵件通知功能。",
"wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
"wlnote": "以下為自 $3 $4 之前的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
* This function has the same parameters as wfGetDB()
*
* @param int $db DB index (DB_REPLICA/DB_MASTER)
- * @param array $groups; default: empty array
- * @param string|bool $wiki; default: current wiki
+ * @param array $groups default: empty array
+ * @param string|bool $wiki default: current wiki
* @return IMaintainableDatabase
*/
protected function getDB( $db, $groups = [], $wiki = false ) {
/**
* Imports the site described by the parameters (see self::__construct()) passed to this
* maintenance sccript into the sites table of MediaWiki.
+ * @return bool
*/
public function execute() {
$siteStore = MediaWikiServices::getInstance()->getSiteStore();
require_once __DIR__ . '/Maintenance.php';
+use MediaWiki\MediaWikiServices;
+
/**
* @ingroup Maintenance
*/
$scanned = 0;
$withcache = 0;
$withdiff = 0;
+ $parserCache = MediaWikiServices::getInstance()->getParserCache();
while ( $pages-- > 0 ) {
$row = $dbr->selectRow( 'page', '*',
[
$parserOptions = $page->makeParserOptions( 'canonical' );
- $parserOutputOld = ParserCache::singleton()->get( $page, $parserOptions );
+ $parserOutputOld = $parserCache->get( $page, $parserOptions );
if ( $parserOutputOld ) {
$t1 = microtime( true );
/**
* Check whether a function or method includes a call to wfDeprecated(),
* indicating that it is a hard-deprecated interface.
+ * @param PhpParser\Node $node
+ * @return bool
*/
public function isHardDeprecated( PhpParser\Node $node ) {
if ( !$node->stmts ) {
/**
* gzwrite() / fwrite() wrapper
*
- * @param resource $handle
+ * @param resource &$handle
* @param string $str
*/
function write( &$handle, $str ) {
/**
* gzclose() / fclose() wrapper
*
- * @param resource $handle
+ * @param resource &$handle
*/
function close( &$handle ) {
if ( $this->compress ) {
* comment ID field.
* Blanks the old fields while migrating.
*
- * @param string $oldTable Table to migrate
+ * @param string $table Table to migrate
* @param string $primaryKey Primary key of the table.
* @param string $oldField Old comment field name
* @param string $newPrimaryKey Primary key of the new table.
/**
* Dumb stuff to run a mode.
+ * @return bool
*/
public function run() {
if ( !$this->mReady ) {
<exclude name="MediaWiki.Usage.DbrQueryUsage.DbrQueryFound" />
<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
<exclude name="MediaWiki.Usage.SuperGlobalsUsage.SuperGlobals" />
+ <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
+ <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
+ <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
</rule>
<rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
<properties>
'liveUpdate',
{
limit: 1,
- peek: 1, // bypasses all UI
+ // temporarily disabled ( T173613#3591657 )
+ // peek: 1, // bypasses all UI
from: this.changesListModel.getNextFrom()
}
);
}
.fancycaptcha-captcha-container {
- background-color: #f8f8f8;
- border: 1px solid #c9c9c9;
- padding: 10px;
- text-align: center;
+ background-color: #f8f9fa;
margin-bottom: 15px;
+ border: 1px solid #c8ccd1;
+ border-radius: 2px;
+ padding: 8px;
+ text-align: center;
}
.mw-createacct-captcha-assisted {
/* Put a border around the fancycaptcha-image-container. */
.fancycaptcha-captcha-and-reload {
- border: 1px solid #c9c9c9;
+ border: 1px solid #c8ccd1;
+ border-radius: 2px 2px 0 0;
/* Other display formats end up too wide */
display: table-cell;
width: 270px;
background-color: #fff;
}
+.fancycaptcha-captcha-container .mw-ui-input {
+ margin-top: -1px;
+ border-color: #c8ccd1;
+ border-radius: 0 0 2px 2px;
+}
+
/* Make the fancycaptcha-image-container full-width within its parent. */
.fancycaptcha-image-container {
width: 100%;
/**
* Asserts that the cookie jar does not have the given cookie.
- * @param string $expectedName Cookie name
+ * @param string $name Cookie name
* @param CookieJar $cookieJar
*/
protected function assertNotHasCookie( $name, CookieJar $cookieJar ) {
/**
* This should be called before the table prefix is changed
+ * @param IDatabase $db
+ * @param bool|string $filter
*/
function __construct( $db, $filter = false ) {
$this->db = $db;
/**
* Show a warning to the user
+ * @param string $message
*/
public function warning( $message ) {
echo "$message\n";
/**
* Mark a test skipped
+ * @param string $test
+ * @param string $subtest
*/
public function skipped( $test, $subtest ) {
if ( $this->showProgress ) {
/**
* Serialize the XML DOM for comparison purposes. This does not generate HTML.
+ * @return string
*/
protected function serialize() {
return strtr( $this->doc->saveXML( $this->body ),
/**
* Ensure a given setup stage has been done, throw an exception if it has
* not.
+ * @param string $funcName
+ * @param string|null $funcName2
*/
protected function checkSetupDone( $funcName, $funcName2 = null ) {
if ( !$this->setupDone[$funcName]
/**
* Determine whether the current parser has the hooks registered in it
* that are required by a file read by TestFileReader.
+ * @param array $requirements
+ * @return bool
*/
public function meetsRequirements( $requirements ) {
foreach ( $requirements as $requirement ) {
// get a reference to the mock object.
MessageCache::singleton()->getParser();
$restore = $this->executeSetupSnippets( [ 'wgParser' => new ParserTestMockParser ] );
- $status = $page->doEditContent(
- ContentHandler::makeContent( $text, $title ),
- '',
- EDIT_NEW | EDIT_INTERNAL
- );
- $restore();
+ try {
+ $status = $page->doEditContent(
+ ContentHandler::makeContent( $text, $title ),
+ '',
+ EDIT_NEW | EDIT_INTERNAL
+ );
+ } finally {
+ $restore();
+ }
if ( !$status->isOK() ) {
throw new MWException( $status->getWikiText( false, false, 'en' ) );
/**
* Mark a test skipped
+ * @param string $test
+ * @param string $reason
*/
public function skipped( $test, $reason ) {
$this->testCase->markTestSkipped( "SKIPPED: $reason" );
/**
* Determine if there is a usable tidy.
+ * @param bool $useConfiguration
*/
public function __construct( $useConfiguration = false ) {
global $IP, $wgUseTidy, $wgTidyBin, $wgTidyInternal, $wgTidyConfig,
*
* @param Config|null $bootstrapConfig The bootstrap config to use with the new
* MediaWikiServices.
+ * @return MediaWikiServices
*/
protected static function resetGlobalServices( Config $bootstrapConfig = null ) {
$oldServices = MediaWikiServices::getInstance();
*
* @since 1.20
*
- * @param array $array
+ * @param array &$array
*/
protected function objectAssociativeSort( array &$array ) {
uasort(
*
* @since 1.20
*
- * @param mixed $r The array to remove string keys from.
+ * @param mixed &$r The array to remove string keys from.
*/
protected static function stripStringKeys( &$r ) {
if ( !is_array( $r ) ) {
/**
* Used as a marker to prevent wfResetOutputBuffers from breaking PHPUnit.
+ * @param string $buffer
* @return string
*/
public static function wfResetOutputBuffersBarrier( $buffer ) {
* - string 'modules' Pipe-separated list of module names
* - string|null 'only' "scripts" (unwrapped script), "styles" (stylesheet), or null
* (mw.loader.implement).
+ * @param ResourceLoader|null $rl
* @return ResourceLoaderContext
*/
protected function getResourceLoaderContext( $options = [], ResourceLoader $rl = null ) {
[ -30281104, TS_MW, '19690115123456', 'Negative TS_UNIX to TS_MW' ],
[ $t, TS_UNIX, 979562096, 'TS_UNIX to TS_UNIX' ],
[ $t, TS_DB, '2001-01-15 12:34:56', 'TS_UNIX to TS_DB' ],
- [ $t + .01, TS_MW, '20010115123456', 'TS_UNIX float to TS_MW' ],
+ [ $t + 0.01, TS_MW, '20010115123456', 'TS_UNIX float to TS_MW' ],
[ $t, TS_ISO_8601_BASIC, '20010115T123456Z', 'TS_ISO_8601_BASIC to TS_DB' ],
/**
* Returns SQL queries grouped by '; '
* Clear the list of queries that have been done so far.
+ * @return string
*/
public function getLastSqls() {
$lastSqls = implode( '; ', $this->lastSqls );
public static function provideAdaptiveTTL() {
return [
- [ 3600, 900, 30, .2, 720 ],
- [ 3600, 500, 30, .2, 500 ],
- [ 3600, 86400, 800, .2, 800 ],
- [ false, 86400, 800, .2, 800 ],
- [ null, 86400, 800, .2, 800 ]
+ [ 3600, 900, 30, 0.2, 720 ],
+ [ 3600, 500, 30, 0.2, 500 ],
+ [ 3600, 86400, 800, 0.2, 800 ],
+ [ false, 86400, 800, 0.2, 800 ],
+ [ null, 86400, 800, 0.2, 800 ]
];
}
$tp->setLogger( $logger );
$tp->setExpectation( 'queries', 2, __METHOD__ );
- $tp->recordQueryCompletion( "SQL 1", microtime( true ) - .01, false, 0 );
- $tp->recordQueryCompletion( "SQL 2", microtime( true ) - .01, false, 0 );
- $tp->recordQueryCompletion( "SQL 3", microtime( true ) - .01, false, 0 ); // warn
- $tp->recordQueryCompletion( "SQL 4", microtime( true ) - .01, false, 0 ); // warn
+ $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 0.01, false, 0 );
+ $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 0.01, false, 0 );
+ $tp->recordQueryCompletion( "SQL 3", microtime( true ) - 0.01, false, 0 ); // warn
+ $tp->recordQueryCompletion( "SQL 4", microtime( true ) - 0.01, false, 0 ); // warn
}
public function testWriteQueryCount() {
$tp->setLogger( $logger );
$tp->setExpectation( 'writes', 2, __METHOD__ );
- $tp->recordQueryCompletion( "SQL 1", microtime( true ) - .01, false, 0 );
- $tp->recordQueryCompletion( "SQL 2", microtime( true ) - .01, false, 0 );
- $tp->recordQueryCompletion( "SQL 3", microtime( true ) - .01, false, 0 );
- $tp->recordQueryCompletion( "SQL 4", microtime( true ) - .01, false, 0 );
+ $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 0.01, false, 0 );
+ $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 0.01, false, 0 );
+ $tp->recordQueryCompletion( "SQL 3", microtime( true ) - 0.01, false, 0 );
+ $tp->recordQueryCompletion( "SQL 4", microtime( true ) - 0.01, false, 0 );
$tp->transactionWritingIn( 'srv1', 'db1', '123' );
- $tp->recordQueryCompletion( "SQL 1w", microtime( true ) - .01, true, 2 );
- $tp->recordQueryCompletion( "SQL 2w", microtime( true ) - .01, true, 5 );
- $tp->recordQueryCompletion( "SQL 3w", microtime( true ) - .01, true, 3 );
- $tp->recordQueryCompletion( "SQL 4w", microtime( true ) - .01, true, 1 );
+ $tp->recordQueryCompletion( "SQL 1w", microtime( true ) - 0.01, true, 2 );
+ $tp->recordQueryCompletion( "SQL 2w", microtime( true ) - 0.01, true, 5 );
+ $tp->recordQueryCompletion( "SQL 3w", microtime( true ) - 0.01, true, 3 );
+ $tp->recordQueryCompletion( "SQL 4w", microtime( true ) - 0.01, true, 1 );
$tp->transactionWritingOut( 'srv1', 'db1', '123', 1, 1 );
}
}
$db->setLBInfo( 'clusterMasterHost', 'db1052' );
$lagEst = $db->getLag();
- $this->assertGreaterThan( $lag - .010, $lagEst, "Correct heatbeat lag" );
- $this->assertLessThan( $lag + .010, $lagEst, "Correct heatbeat lag" );
+ $this->assertGreaterThan( $lag - 0.010, $lagEst, "Correct heatbeat lag" );
+ $this->assertLessThan( $lag + 0.010, $lagEst, "Correct heatbeat lag" );
}
public static function provideLagAmounts() {
--- /dev/null
+<?php
+
+use MediaWiki\Shell\Command;
+
+/**
+ * @group Shell
+ */
+class CommandTest extends PHPUnit_Framework_TestCase {
+ /**
+ * @expectedException PHPUnit_Framework_Error_Notice
+ */
+ public function testDestruct() {
+ if ( defined( 'HHVM_VERSION' ) ) {
+ $this->markTestSkipped( 'destructors are unreliable in HHVM' );
+ }
+ $command = new Command();
+ $command->params( 'true' );
+ }
+
+ private function requirePosix() {
+ if ( wfIsWindows() ) {
+ $this->markTestSkipped( 'This test requires a POSIX environment.' );
+ }
+ }
+
+ /**
+ * @dataProvider provideExecute
+ */
+ public function testExecute( $commandInput, $expectedExitCode, $expectedOutput ) {
+ $this->requirePosix();
+
+ $command = new Command();
+ $result = $command
+ ->params( $commandInput )
+ ->execute();
+
+ $this->assertSame( $expectedExitCode, $result->getExitCode() );
+ $this->assertSame( $expectedOutput, $result->getStdout() );
+ }
+
+ public function provideExecute() {
+ return [
+ 'success status' => [ 'true', 0, '' ],
+ 'failure status' => [ 'false', 1, '' ],
+ 'output' => [ [ 'echo', '-n', 'x', '>', 'y' ], 0, 'x > y' ],
+ ];
+ }
+
+ public function testEnvironment() {
+ $this->requirePosix();
+
+ $command = new Command();
+ $result = $command
+ ->params( [ 'printenv', 'FOO' ] )
+ ->environment( [ 'FOO' => 'bar' ] )
+ ->execute();
+ $this->assertSame( "bar\n", $result->getStdout() );
+ }
+
+ public function testOutput() {
+ global $IP;
+
+ $this->requirePosix();
+
+ $command = new Command();
+ $result = $command
+ ->params( [ 'ls', "$IP/index.php" ] )
+ ->execute();
+ $this->assertSame( "$IP/index.php", trim( $result->getStdout() ) );
+
+ $command = new Command();
+ $result = $command
+ ->params( [ 'ls', 'index.php', 'no-such-file' ] )
+ ->includeStderr()
+ ->execute();
+ $this->assertRegExp( '/^.+no-such-file.*$/m', $result->getStdout() );
+ }
+
+ public function testT69870() {
+ $commandLine = wfIsWindows()
+ // 333 = 331 + CRLF
+ ? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) )
+ : 'printf "%-333333s" "*"';
+
+ // Test several times because it involves a race condition that may randomly succeed or fail
+ for ( $i = 0; $i < 10; $i++ ) {
+ $command = new Command();
+ $output = $command->unsafeParams( $commandLine )
+ ->execute()
+ ->getStdout();
+ $this->assertEquals( 333333, strlen( $output ) );
+ }
+ }
+}
--- /dev/null
+<?php
+
+use MediaWiki\Shell\Shell;
+
+/**
+ * @group Shell
+ */
+class ShellTest extends PHPUnit_Framework_TestCase {
+ public function testIsDisabled() {
+ $this->assertInternalType( 'bool', Shell::isDisabled() ); // sanity
+ }
+
+ /**
+ * @dataProvider provideEscape
+ */
+ public function testEscape( $args, $expected ) {
+ if ( wfIsWindows() ) {
+ $this->markTestSkipped( 'This test requires a POSIX environment.' );
+ }
+ $this->assertSame( $expected, call_user_func_array( [ Shell::class, 'escape' ], $args ) );
+ }
+
+ public function provideEscape() {
+ return [
+ 'simple' => [ [ 'true' ], "'true'" ],
+ 'with args' => [ [ 'convert', '-font', 'font name' ], "'convert' '-font' 'font name'" ],
+ 'array' => [ [ [ 'convert', '-font', 'font name' ] ], "'convert' '-font' 'font name'" ],
+ ];
+ }
+}
* @param User|null $user The user which should be used in the context of this special page
*
* @throws Exception
- * @return array( string, WebResponse ) A two-elements array containing the HTML output
+ * @return array [ string, WebResponse ] A two-elements array containing the HTML output
* generated by the special page as well as the response object.
*/
public function executeSpecialPage(
* @param User|null $user The user which should be used in the context of this special page
*
* @throws Exception
- * @return array( string, WebResponse ) A two-elements array containing the HTML output
+ * @return array [ string, WebResponse ] A two-elements array containing the HTML output
* generated by the special page as well as the response object.
*/
protected function executeSpecialPage(
/**
* Creates an empty Content object of the type supported by this ContentHandler.
+ * @return DummyContentForTesting
*/
public function makeEmptyContent() {
return new DummyContentForTesting( '' );
/**
* Creates an empty Content object of the type supported by this ContentHandler.
+ * @return DummyNonTextContent
*/
public function makeEmptyContent() {
return new DummyNonTextContent( '' );
/**
* August 22 – The theft of the Mona Lisa is discovered in the Louvre."
* T22281
+ * @return int
*/
public function getSize() {
return 1911;
* @param string $msg Message to log
*/
protected static function debug( $msg ) {
- return wfDebugLog( 'tests-parser', wfGetCaller() . ' ' . $msg );
+ wfDebugLog( 'tests-parser', wfGetCaller() . ' ' . $msg );
}
}