regularly. Below only new and removed languages are listed, as well as
changes to languages because of Bugzilla reports.
+* Support was added for Northern Luri (lrc)
+
=== Other changes in 1.23 ===
* The rc_type field in the recentchanges table has been superseded by a new
rc_source field. The rc_source field is a string representation of the
return null;
}
-
/**
* Get all blocks that match any IP from an array of IP addresses
*
* Host for UDP profiler.
*
* The host should be running a daemon which can be obtained from MediaWiki
- * Git at:
+ * Git at:
* http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
*/
$wgUDPProfilerHost = '127.0.0.1';
}
}
-
// Analyze $serverUrl to obtain its protocol
$bits = wfParseUrl( $serverUrl );
$serverHasProto = $bits && $bits['scheme'] != '';
* @param array $limits optional array with limits(filesize, memory, time, walltime)
* this overwrites the global wgShellMax* limits.
* @param array $options Array of options:
- * - duplicateStderr: Set this to true to duplicate stderr to stdout,
+ * - duplicateStderr: Set this to true to duplicate stderr to stdout,
* including errors from limit.sh
- *
+ *
* @return string collected stdout as a string
*/
function wfShellExec( $cmd, &$retval = null, $environ = array(),
$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:
+ // 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)
//
wfRunHooks( 'ResetSessionID', array( $oldSessionId, $newSessionId ) );
}
-
/**
* Initialise php session
*
$attribs['class'] = array( 'mw-htmlform-submit' );
if ( $this->isVForm() ) {
- // mw-ui-block is necessary because the buttons aren't necessarily in an
+ // mw-ui-block is necessary because the buttons aren't necessarily in an
// immediate child div of the vform.
array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-big', 'mw-ui-primary', 'mw-ui-block' );
}
$wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
}
-
// Default value is either the suhosin limit or -1 for unlimited
if ( $wgResourceLoaderMaxQueryLength === false ) {
$maxValueLength = ini_get( 'suhosin.get.max_value_length' );
}
}
-
/**
* Redirect from Special:PermanentLink/### to index.php?oldid=###
*/
* @return Status
*/
public function doUpdateRestrictions( array $limit, array $expiry, &$cascade, $reason, User $user ) {
- global $wgCascadingRestrictionLevels;
+ global $wgCascadingRestrictionLevels, $wgContLang;
if ( wfReadOnly() ) {
return Status::newFatal( 'readonlytext', wfReadOnlyReason() );
$logAction = 'protect';
}
+ // Truncate for whole multibyte characters
+ $reason = $wgContLang->truncate( $reason, 255 );
+
if ( $id ) { // Protection of existing page
if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
return Status::newGood();
// Update the protection log
$log = new LogPage( 'protect' );
- $log->addEntry( $logAction, $this->mTitle, trim( $reason ), $params, $user );
+ $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
return Status::newGood();
}
$info = $lb->parentInfo();
if ( !$db || !$db->doneWrites() ) {
wfDebug( __METHOD__ . ": LB {$info['id']}, no writes done\n" );
+
return;
}
$pos = $db->getMasterPos();
*/
class CloneDatabase {
-
/**
* Table prefix for cloning
* @var String
* @param $dropCurrentTables bool
*/
public function __construct( DatabaseBase $db, array $tablesToClone,
- $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true )
- {
+ $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true
+ ) {
$this->db = $db;
$this->tablesToClone = $tablesToClone;
$this->newTablePrefix = $newTablePrefix;
self::changePrefix( $this->newTablePrefix );
$newTableName = $this->db->tableName( $tbl, 'raw' );
- if ( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) ) ) {
+ if ( $this->dropCurrentTables
+ && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) )
+ ) {
$this->db->dropTable( $tbl, __METHOD__ );
wfDebug( __METHOD__ . " dropping {$newTableName}\n", true );
//Dropping the oldTable because the prefix was changed
* Interface for classes that implement or wrap DatabaseBase
* @ingroup Database
*/
-interface IDatabase {}
+interface IDatabase {
+}
/**
* Database abstraction object
/**
* Clear a flag for this connection
*
- * @param $flag: same as setFlag()'s $flag param
+ * @param $flag : same as setFlag()'s $flag param
*/
public function clearFlag( $flag ) {
global $wgDebugDBTransactions;
/**
* Returns a boolean whether the flag $flag is set for this connection
*
- * @param $flag: same as setFlag()'s $flag param
+ * @param $flag : same as setFlag()'s $flag param
* @return Boolean
*/
public function getFlag( $flag ) {
* not restored on unserialize.
*/
public function __sleep() {
- throw new MWException( 'Database serialization may cause problems, since the connection is not restored on wakeup.' );
+ throw new MWException( 'Database serialization may cause problems, since ' .
+ 'the connection is not restored on wakeup.' );
}
/**
* Given a DB type, construct the name of the appropriate child class of
* DatabaseBase. This is designed to replace all of the manual stuff like:
- * $class = 'Database' . ucfirst( strtolower( $dbType ) );
+ * $class = 'Database' . ucfirst( strtolower( $dbType ) );
* as well as validate against the canonical list of DB types we have
*
* This factory function is mostly useful for when you need to connect to a
*/
final public static function factory( $dbType, $p = array() ) {
$canonicalDBTypes = array(
- 'mysql' => array( 'mysqli', 'mysql' ),
+ 'mysql' => array( 'mysqli', 'mysql' ),
'postgres' => array(),
- 'sqlite' => array(),
- 'oracle' => array(),
- 'mssql' => array(),
+ 'sqlite' => array(),
+ 'oracle' => array(),
+ 'mssql' => array(),
);
$driver = false;
'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
);
+
return new $class( $params );
} else {
return null;
if ( $this->mPHPError ) {
$error = preg_replace( '!\[<a.*</a>\]!', '', $this->mPHPError );
$error = preg_replace( '!^.*?:\s?(.*)$!', '$1', $error );
+
return $error;
} else {
return false;
$ret = $this->closeConnection();
$this->mConn = false;
+
return $ret;
} else {
return true;
# If DBO_TRX is set, start a transaction
if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
- $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' )
- {
+ $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK'
+ ) {
# Avoid establishing transactions for SHOW and SET statements too -
# that would delay transaction initializations to once connection
# is really used by application
return $arg;
case '&':
# return $this->addQuotes( file_get_contents( $arg ) );
- throw new DBUnexpectedError( $this, '& mode is not implemented. If it\'s really needed, uncomment the line above.' );
+ throw new DBUnexpectedError(
+ $this,
+ '& mode is not implemented. If it\'s really needed, uncomment the line above.'
+ );
default:
- throw new DBUnexpectedError( $this, 'Received invalid match. This should never happen!' );
+ throw new DBUnexpectedError(
+ $this,
+ 'Received invalid match. This should never happen!'
+ );
}
}
: $options['HAVING'];
$sql .= ' HAVING ' . $having;
}
+
return $sql;
}
$ob = is_array( $options['ORDER BY'] )
? implode( ',', $options['ORDER BY'] )
: $options['ORDER BY'];
+
return ' ORDER BY ' . $ob;
}
+
return '';
}
* @see DatabaseBase::select()
*/
public function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
- $options = array(), $join_conds = array() )
- {
+ $options = array(), $join_conds = array()
+ ) {
if ( is_array( $vars ) ) {
$vars = implode( ',', $this->fieldNamesWithAlias( $vars ) );
}
* @return object|bool
*/
public function selectRow( $table, $vars, $conds, $fname = __METHOD__,
- $options = array(), $join_conds = array() )
- {
+ $options = array(), $join_conds = array()
+ ) {
$options = (array)$options;
$options['LIMIT'] = 1;
$res = $this->select( $table, $vars, $conds, $fname, $options, $join_conds );
* @return Integer: row count
*/
public function estimateRowCount( $table, $vars = '*', $conds = '',
- $fname = __METHOD__, $options = array() )
- {
+ $fname = __METHOD__, $options = array()
+ ) {
$rows = 0;
$res = $this->select( $table, array( 'rowcount' => 'COUNT(*)' ), $conds, $fname, $options );
* @param $table String name of the table to UPDATE. This will be passed through
* DatabaseBase::tableName().
*
- * @param array $values An array of values to SET. For each array element,
+ * @param array $values An array of values to SET. For each array element,
* the key gives the field name, and the value gives the data
* to set that field to. The data will be quoted by
* DatabaseBase::addQuotes().
$delim, $table, $field, $conds = '', $join_conds = array()
) {
$fld = "GROUP_CONCAT($field SEPARATOR " . $this->addQuotes( $delim ) . ')';
+
return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
}
# if your database engine supports a concept similar to MySQL's
# databases you may as well.
$this->mDBname = $db;
+
return true;
}
list( $table ) = $dbDetails;
if ( $wgSharedDB !== null # We have a shared database
&& $this->mForeign == false # We're not working on a foreign database
- && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
+ && !$this->isQuotedIdentifier( $table ) # Prevent shared tables listing '`table`'
&& in_array( $table, $wgSharedTables ) # A shared table is selected
) {
$database = $wgSharedDB;
}
$retval[] = $this->tableNameWithAlias( $table, $alias );
}
+
return $retval;
}
}
$retval[] = $this->fieldNameWithAlias( $field, $alias );
}
+
return $retval;
}
}
/**
- * LIKE statement wrapper, receives a variable-length argument list with parts of pattern to match
- * containing either string literals that will be escaped or tokens returned by anyChar() or anyString().
- * Alternatively, the function could be provided with an array of aforementioned parameters.
+ * LIKE statement wrapper, receives a variable-length argument list with
+ * parts of pattern to match containing either string literals that will be
+ * escaped or tokens returned by anyChar() or anyString(). Alternatively,
+ * the function could be provided with an array of aforementioned
+ * parameters.
*
- * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns a LIKE clause that searches
- * for subpages of 'My page title'.
- * Alternatively: $pattern = array( 'My_page_title/', $dbr->anyString() ); $query .= $dbr->buildLike( $pattern );
+ * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns
+ * a LIKE clause that searches for subpages of 'My page title'.
+ * Alternatively:
+ * $pattern = array( 'My_page_title/', $dbr->anyString() );
+ * $query .= $dbr->buildLike( $pattern );
*
* @since 1.16
* @return String: fully built LIKE statement
* @throws DBUnexpectedError
*/
public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
- $fname = __METHOD__ )
- {
+ $fname = __METHOD__
+ ) {
if ( !$conds ) {
throw new DBUnexpectedError( $this,
'DatabaseBase::deleteJoin() called with empty $conds' );
*/
public function insertSelect( $destTable, $srcTable, $varMap, $conds,
$fname = __METHOD__,
- $insertOptions = array(), $selectOptions = array() )
- {
+ $insertOptions = array(), $selectOptions = array()
+ ) {
$destTable = $this->tableName( $destTable );
if ( is_array( $insertOptions ) ) {
if ( !is_numeric( $limit ) ) {
throw new DBUnexpectedError( $this, "Invalid non-numeric limit passed to limitResult()\n" );
}
+
return "$sql LIMIT "
. ( ( is_numeric( $offset ) && $offset != 0 ) ? "{$offset}," : "" )
. "{$limit} ";
*/
public function unionQueries( $sqls, $all ) {
$glue = $all ? ') UNION ALL (' : ') UNION (';
+
return '(' . implode( $glue, $sqls ) . ')';
}
if ( is_array( $cond ) ) {
$cond = $this->makeList( $cond, LIST_AND );
}
+
return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
}
if ( $tries <= 0 ) {
$this->rollback( __METHOD__ );
$this->reportQueryError( $error, $errno, $sql, $fname );
+
return false;
} else {
$this->commit( __METHOD__ );
+
return $retVal;
}
}
if ( $wait > $timeout * 1e6 ) {
wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" );
wfProfileOut( __METHOD__ );
+
return -1;
} elseif ( $wait > 0 ) {
wfDebug( "Fake slave waiting $wait us\n" );
usleep( $wait );
wfProfileOut( __METHOD__ );
+
return 1;
} else {
wfDebug( "Fake slave up to date ($wait us)\n" );
wfProfileOut( __METHOD__ );
+
return 0;
}
}
if ( !is_null( $this->mFakeSlaveLag ) ) {
$pos = new MySQLMasterPos( 'fake', microtime( true ) - $this->mFakeSlaveLag );
wfDebug( __METHOD__ . ": fake slave pos = $pos\n" );
+
return $pos;
} else {
# Stub
$this->clearFlag( DBO_TRX ); // make each query its own transaction
call_user_func( $phpCallback );
$this->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
- } catch ( Exception $e ) {}
+ } catch ( Exception $e ) {
+ }
}
} while ( count( $this->mTrxIdleCallbacks ) );
try {
list( $phpCallback ) = $callback;
call_user_func( $phpCallback );
- } catch ( Exception $e ) {}
+ } catch ( Exception $e ) {
+ }
}
} while ( count( $this->mTrxPreCommitCallbacks ) );
}
/**
- * Begin a transaction. If a transaction is already in progress, that transaction will be committed before the
- * new transaction is started.
+ * Begin a transaction. If a transaction is already in progress,
+ * that transaction will be committed before the new transaction is started.
*
- * Note that when the DBO_TRX flag is set (which is usually the case for web requests, but not for maintenance scripts),
- * any previous database query will have started a transaction automatically.
+ * Note that when the DBO_TRX flag is set (which is usually the case for web
+ * requests, but not for maintenance scripts), any previous database query
+ * will have started a transaction automatically.
*
- * Nesting of transactions is not supported. Attempts to nest transactions will cause a warning, unless the current
- * transaction was started automatically because of the DBO_TRX flag.
+ * Nesting of transactions is not supported. Attempts to nest transactions
+ * will cause a warning, unless the current transaction was started
+ * automatically because of the DBO_TRX flag.
*
* @param $fname string
* @throws DBError
* Nesting of transactions is not supported.
*
* @param $fname string
- * @param string $flush Flush flag, set to 'flush' to disable warnings about explicitly committing implicit
- * transactions, or calling commit when no transaction is in progress.
- * This will silently break any ongoing explicit transaction. Only set the flush flag if you are sure
- * that it is safe to ignore these warnings in your context.
+ * @param string $flush Flush flag, set to 'flush' to disable warnings about
+ * explicitly committing implicit transactions, or calling commit when no
+ * transaction is in progress. This will silently break any ongoing
+ * explicit transaction. Only set the flush flag if you are sure that it
+ * is safe to ignore these warnings in your context.
*/
final public function commit( $fname = __METHOD__, $flush = '' ) {
if ( !$this->mTrxAtomicLevels->isEmpty() ) {
// There are still atomic sections open. This cannot be ignored
- throw new DBUnexpectedError( $this, "Attempted to commit transaction while atomic sections are still open" );
+ throw new DBUnexpectedError(
+ $this,
+ "Attempted to commit transaction while atomic sections are still open"
+ );
}
if ( $flush != 'flush' ) {
* For caching purposes the list of all views should be stored in
* $this->allViews. The process cache can be cleared with clearViewsCache()
*
- * @param string $prefix Only show VIEWs with this prefix, eg. unit_test_
- * @param string $fname Name of calling function
+ * @param string $prefix Only show VIEWs with this prefix, eg. unit_test_
+ * @param string $fname Name of calling function
* @throws MWException
* @since 1.22
*/
* @param bool|callable $lineCallback Optional function called before reading each line
* @param bool|callable $resultCallback Optional function called for each MySQL result
* @param bool|string $fname Calling function name or false if name should be
- * generated dynamically using $filename
- * @param bool|callable $inputCallback Callback: Optional function called for each complete line sent
+ * generated dynamically using $filename
+ * @param bool|callable $inputCallback Callback: Optional function called
+ * for each complete line sent
* @throws MWException
* @throws Exception|MWException
* @return bool|string
try {
$error = $this->sourceStream( $fp, $lineCallback, $resultCallback, $fname, $inputCallback );
- }
- catch ( MWException $e ) {
+ } catch ( MWException $e ) {
fclose( $fp );
throw $e;
}
* @return bool|string
*/
public function sourceStream( $fp, $lineCallback = false, $resultCallback = false,
- $fname = __METHOD__, $inputCallback = false )
- {
+ $fname = __METHOD__, $inputCallback = false
+ ) {
$cmd = '';
while ( !feof( $fp ) ) {
if ( false === $res ) {
$err = $this->lastError();
+
return "Query \"{$cmd}\" failed with error code \"$err\".\n";
}
}
return true;
}
}
+
return false;
}
// replace /*$var*/
$ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
}
+
return $ins;
}
if ( $this->cascadingDeletes() ) {
$sql .= " CASCADE";
}
+
return $this->query( $sql, $fName );
}
$callers = array();
foreach ( $this->mTrxIdleCallbacks as $callbackInfo ) {
$callers[] = $callbackInfo[1];
-
}
$callers = implode( ', ', $callers );
trigger_error( "DB transaction callbacks still pending (from $callers)." );
* @ingroup Database
*/
class DBError extends MWException {
-
/**
* @var DatabaseBase
*/
} else {
$message = $fallback;
}
+
return wfMsgReplaceArgs( $message, $args );
}
function getHTML() {
global $wgShowDBErrorBacktrace, $wgShowHostnames, $wgShowSQLErrors;
- $sorry = htmlspecialchars( $this->msg( 'dberr-problems', 'Sorry! This site is experiencing technical difficulties.' ) );
- $again = htmlspecialchars( $this->msg( 'dberr-again', 'Try waiting a few minutes and reloading.' ) );
+ $sorry = htmlspecialchars( $this->msg(
+ 'dberr-problems',
+ 'Sorry! This site is experiencing technical difficulties.'
+ ) );
+ $again = htmlspecialchars( $this->msg(
+ 'dberr-again',
+ 'Try waiting a few minutes and reloading.'
+ ) );
if ( $wgShowHostnames || $wgShowSQLErrors ) {
$info = str_replace(
htmlspecialchars( $this->msg( 'dberr-info', '(Cannot contact the database server: $1)' ) )
);
} else {
- $info = htmlspecialchars( $this->msg( 'dberr-info-hidden', '(Cannot contact the database server)' ) );
+ $info = htmlspecialchars( $this->msg(
+ 'dberr-info-hidden',
+ '(Cannot contact the database server)'
+ ) );
}
# No database access
// Output cached page with notices on bottom and re-close body
echo "{$cache}<hr />{$this->getHTML()}</body></html>";
+
return;
}
} catch ( MWException $e ) {
function searchForm() {
global $wgSitename, $wgCanonicalServer, $wgRequest;
- $usegoogle = htmlspecialchars( $this->msg( 'dberr-usegoogle', 'You can try searching via Google in the meantime.' ) );
- $outofdate = htmlspecialchars( $this->msg( 'dberr-outofdate', 'Note that their indexes of our content may be out of date.' ) );
+ $usegoogle = htmlspecialchars( $this->msg(
+ 'dberr-usegoogle',
+ 'You can try searching via Google in the meantime.'
+ ) );
+ $outofdate = htmlspecialchars( $this->msg(
+ 'dberr-outofdate',
+ 'Note that their indexes of our content may be out of date.'
+ ) );
$googlesearch = htmlspecialchars( $this->msg( 'searchbutton', 'Search' ) );
$search = htmlspecialchars( $wgRequest->getVal( 'search' ) );
</p>
</form>
EOT;
+
return $trygoogle;
}
* @param $fname string
*/
function __construct( DatabaseBase $db, $error, $errno, $sql, $fname ) {
- $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading? See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+ $message = "A database error has occurred. Did you forget to run " .
+ "maintenance/update.php after upgrading? See: " .
+ "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
"Query: $sql\n" .
"Function: $fname\n" .
"Error: $errno $error\n";
'databaseerror-function' => 'Function: $1',
'databaseerror-error' => 'Error: $1',
);
+
return $messages[$key];
}
-
}
/**
* @ingroup Database
*/
-class DBUnexpectedError extends DBError {}
+class DBUnexpectedError extends DBError {
+}
function open( $server, $user, $password, $dbName ) {
# Test for driver support, to avoid suppressed fatal error
if ( !function_exists( 'sqlsrv_connect' ) ) {
- throw new DBConnectionError( $this, "MS Sql Server Native (sqlsrv) functions missing. You can download the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
+ throw new DBConnectionError(
+ $this,
+ "MS Sql Server Native (sqlsrv) functions missing. You can download " .
+ "the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
}
global $wgDBport;
- if ( !strlen( $user ) ) { # e.g. the class is being loaded
+ # e.g. the class is being loaded
+ if ( !strlen( $user ) ) {
return;
}
// Start NT Auth Hack
// Quick and dirty work around to provide NT Auth designation support.
- // Current solution requires installer to know to input 'ntauth' for both username and password
- // to trigger connection via NT Auth. - ugly, ugly, ugly
- // TO-DO: Make this better and add NT Auth choice to MW installer when SQL Server option is chosen.
+ // Current solution requires installer to know to input 'ntauth' for
+ // both username and password to trigger connection via NT Auth. Ugly,
+ // ugly, ugly!
+ // @todo Make this better and add NT Auth choice to MW installer when
+ // SQL Server option is chosen.
$ntAuthUserTest = strtolower( $user );
$ntAuthPassTest = strtolower( $password );
if ( $this->mConn === false ) {
wfDebug( "DB connection error\n" );
- wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+ wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
+ substr( $password, 0, 3 ) . "...\n" );
wfDebug( $this->lastError() . "\n" );
+
return false;
}
$this->mOpened = true;
+
return $this->mConn;
}
wfDebug( "SQL: [$sql]\n" );
$this->offset = 0;
- // several extensions seem to think that all databases support limits via LIMIT N after the WHERE clause
- // well, MSSQL uses SELECT TOP N, so to catch any of those extensions we'll do a quick check for a LIMIT
- // clause and pass $sql through $this->LimitToTopN() which parses the limit clause and passes the result to
- // $this->limitResult();
+ // several extensions seem to think that all databases support limits
+ // via LIMIT N after the WHERE clause well, MSSQL uses SELECT TOP N,
+ // so to catch any of those extensions we'll do a quick check for a
+ // LIMIT clause and pass $sql through $this->LimitToTopN() which parses
+ // the limit clause and passes the result to $this->limitResult();
if ( preg_match( '/\bLIMIT\s*/i', $sql ) ) {
// massage LIMIT -> TopN
$sql = $this->LimitToTopN( $sql );
// perform query
$stmt = sqlsrv_query( $this->mConn, $sql );
if ( $stmt == false ) {
- $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading? See: http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+ $message = "A database error has occurred. Did you forget " .
+ "to run maintenance/update.php after upgrading? See: " .
+ "http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
"Query: " . htmlentities( $sql ) . "\n" .
"Function: " . __METHOD__ . "\n";
// process each error (our driver will give us an array of errors unlike other providers)
// remember number of rows affected
$this->mAffectedRows = sqlsrv_rows_affected( $stmt );
- // if it is a SELECT statement, or an insert with a request to output something we want to return a row.
+ // if it is a SELECT statement, or an insert with a request to output
+ // something we want to return a row.
if ( ( preg_match( '#\bSELECT\s#i', $sql ) ) ||
- ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) ) ) {
+ ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) )
+ ) {
// this is essentially a rowset, but Mediawiki calls these 'result'
// the rowset owns freeing the statement
$res = new MssqlResult( $stmt );
// otherwise we simply return it was successful, failure throws an exception
$res = true;
}
+
return $res;
}
$res = $res->result;
}
$row = $res->fetch( 'OBJECT' );
+
return $row;
}
} else {
$strRet = "No errors found";
}
+
return $strRet;
}
$res = $res->result;
}
$row = $res->fetch( SQLSRV_FETCH_BOTH );
+
return $row;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->numrows() : 0;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->numfields() : 0;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->fieldname( $n ) : 0;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->seek( $row ) : false;
}
* @param $vars Mixed: array or string, field name(s) to be retrieved
* @param $conds Mixed: array or string, condition(s) for WHERE
* @param $fname String: calling function name (use __METHOD__) for logs/profiling
- * @param array $options associative array of options (e.g. array('GROUP BY' => 'page_title')),
- * see Database::makeSelectOptions code for list of supported stuff
- * @param $join_conds Array: Associative array of table join conditions (optional)
- * (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
- * @return Mixed: database result resource (feed to Database::fetchObject or whatever), or false on failure
+ * @param array $options associative array of options (e.g.
+ * array('GROUP BY' => 'page_title')), see Database::makeSelectOptions
+ * code for list of supported stuff
+ * @param $join_conds Array: Associative array of table join conditions
+ * (optional) (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
+ * @return Mixed: database result resource (feed to Database::fetchObject
+ * or whatever), or false on failure
*/
- function select( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() )
- {
+ function select( $table, $vars, $conds = '', $fname = __METHOD__,
+ $options = array(), $join_conds = array()
+ ) {
$sql = $this->selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
if ( isset( $options['EXPLAIN'] ) ) {
sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL ON;" );
$ret = $this->query( $sql, $fname );
sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL OFF;" );
+
return $ret;
}
+
return $this->query( $sql, $fname );
}
* @param $vars Mixed: Array or string, field name(s) to be retrieved
* @param $conds Mixed: Array or string, condition(s) for WHERE
* @param $fname String: Calling function name (use __METHOD__) for logs/profiling
- * @param array $options Associative array of options (e.g. array('GROUP BY' => 'page_title')),
+ * @param array $options Associative array of options (e.g. array('GROUP BY' => 'page_title')),
* see Database::makeSelectOptions code for list of supported stuff
* @param $join_conds Array: Associative array of table join conditions (optional)
* (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
* @return string, the SQL text
*/
- function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+ function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
+ $options = array(), $join_conds = array()
+ ) {
if ( isset( $options['EXPLAIN'] ) ) {
unset( $options['EXPLAIN'] );
}
+
return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
}
* Takes same arguments as Database::select()
* @return int
*/
- function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
- $options['EXPLAIN'] = true;// http://msdn2.microsoft.com/en-us/library/aa259203.aspx
+ function estimateRowCount( $table, $vars = '*', $conds = '',
+ $fname = __METHOD__, $options = array()
+ ) {
+ // http://msdn2.microsoft.com/en-us/library/aa259203.aspx
+ $options['EXPLAIN'] = true;
$res = $this->select( $table, $vars, $conds, $fname, $options );
$rows = -1;
$rows = $row['EstimateRows'];
}
}
+
return $rows;
}
* @return array|bool|null
*/
function indexInfo( $table, $index, $fname = __METHOD__ ) {
- # This does not return the same info as MYSQL would, but that's OK because MediaWiki never uses the
- # returned value except to check for the existance of indexes.
+ # This does not return the same info as MYSQL would, but that's OK
+ # because MediaWiki never uses the returned value except to check for
+ # the existance of indexes.
$sql = "sp_helpindex '" . $table . "'";
$res = $this->query( $sql, $fname );
if ( !$res ) {
}
}
}
+
return empty( $result ) ? false : $result;
}
$table = $this->tableName( $table );
- if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) {// Not multi row
- $arrToInsert = array( 0 => $arrToInsert );// make everything multi row compatible
+ if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) { // Not multi row
+ $arrToInsert = array( 0 => $arrToInsert ); // make everything multi row compatible
}
$allOk = true;
// We know the table we're inserting into, get its identity column
$identity = null;
- $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table ); // strip matching square brackets from table name
- $res = $this->doQuery( "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'" );
+ // strip matching square brackets from table name
+ $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table );
+ $res = $this->doQuery(
+ "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS " .
+ "WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'"
+ );
if ( $res && $res->numrows() ) {
// There is an identity for this table.
$identity = array_pop( $res->fetch( SQLSRV_FETCH_ASSOC ) );
unset( $res );
foreach ( $arrToInsert as $a ) {
- // start out with empty identity column, this is so we can return it as a result of the insert logic
+ // start out with empty identity column, this is so we can return
+ // it as a result of the insert logic
$sqlPre = '';
$sqlPost = '';
$identityClause = '';
// there is a value being passed to us, we need to turn on and off inserted identity
$sqlPre = "SET IDENTITY_INSERT $table ON;";
$sqlPost = ";SET IDENTITY_INSERT $table OFF;";
-
} else {
// we can't insert NULL into an identity column, so remove the column from the insert.
unset( $a[$k] );
}
}
}
- $identityClause = "OUTPUT INSERTED.$identity "; // we want to output an identity column as result
+
+ // we want to output an identity column as result
+ $identityClause = "OUTPUT INSERTED.$identity ";
}
$keys = array_keys( $a );
// translate MySQL INSERT IGNORE to something SQL Server can use
// example:
// MySQL: INSERT IGNORE INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
- // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1') INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
+ // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1')
+ // INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
if ( $ignoreClause ) {
$prival = $a[$keys[0]];
$sqlPre .= "IF NOT EXISTS (SELECT * FROM $table WHERE $keys[0] = '$prival')";
}
$allOk = false;
}
+
return $allOk;
}
/**
* INSERT SELECT wrapper
* $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
- * Source items may be literals rather than field names, but strings should be quoted with Database::addQuotes()
- * $conds may be "*" to copy the whole table
- * srcTable may be an array of tables.
+ * Source items may be literals rather than field names, but strings should
+ * be quoted with Database::addQuotes().
* @param string $destTable
- * @param array|string $srcTable
+ * @param array|string $srcTable May be an array of tables.
* @param array $varMap
- * @param array $conds
+ * @param array $conds May be "*" to copy the whole table.
* @param string $fname
* @param array $insertOptions
* @param array $selectOptions
*/
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
$insertOptions = array(), $selectOptions = array() ) {
- $ret = parent::insertSelect( $destTable, $srcTable, $varMap, $conds, $fname, $insertOptions, $selectOptions );
+ $ret = parent::insertSelect(
+ $destTable,
+ $srcTable,
+ $varMap,
+ $conds,
+ $fname,
+ $insertOptions,
+ $selectOptions
+ );
if ( $ret === false ) {
throw new DBQueryError( $this, $this->getErrors(), $this->lastErrno(), /*$sql*/ '', $fname );
} elseif ( $ret != null ) {
// remember number of rows affected
$this->mAffectedRows = sqlsrv_rows_affected( $ret );
+
return $ret;
}
+
return null;
}
*/
function nextSequenceValue( $seqName ) {
if ( !$this->tableExists( 'sequence_' . $seqName ) ) {
- sqlsrv_query( $this->mConn, "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)" );
+ sqlsrv_query(
+ $this->mConn,
+ "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)"
+ );
}
sqlsrv_query( $this->mConn, "INSERT INTO [sequence_$seqName] (junk) VALUES ('')" );
$ret = sqlsrv_query( $this->mConn, "SELECT TOP 1 id FROM [sequence_$seqName] ORDER BY id DESC" );
- $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );// KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
+ // KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
+ $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );
sqlsrv_free_stmt( $ret );
$this->mInsertId = $row['id'];
+
return $row['id'];
}
if ( $ret !== false ) {
$row = sqlsrv_fetch_array( $ret );
sqlsrv_free_stmt( $ret );
+
return $row['id'];
} else {
return $this->nextSequenceValue( $seqName );
if ( strtolower( $row['DATA_TYPE'] ) != 'text' ) {
$size = $row['CHARACTER_MAXIMUM_LENGTH'];
}
+
return $size;
}
) as sub2
) AS sub3
WHERE line3 BETWEEN ' . ( $offset + 1 ) . ' AND ' . ( $offset + $limit );
+
return $sql;
}
}
- // If there is a limit clause, parse it, strip it, and pass the remaining sql through limitResult()
- // with the appropriate parameters. Not the prettiest solution, but better than building a whole new parser.
- // This exists becase there are still too many extensions that don't use dynamic sql generation.
+ // If there is a limit clause, parse it, strip it, and pass the remaining
+ // SQL through limitResult() with the appropriate parameters. Not the
+ // prettiest solution, but better than building a whole new parser. This
+ // exists becase there are still too many extensions that don't use dynamic
+ // sql generation.
function LimitToTopN( $sql ) {
// Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
$pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
$row_count = $matches[4];
// offset = $matches[3] OR $matches[6]
$offset = $matches[3] or
- $offset = $matches[6] or
- $offset = false;
+ $offset = $matches[6] or
+ $offset = false;
// strip the matching LIMIT clause out
$sql = str_replace( $matches[0], '', $sql );
+
return $this->limitResult( $sql, $row_count, $offset );
}
+
return $sql;
}
if ( isset( $server_info['SQLServerVersion'] ) ) {
$version = $server_info['SQLServerVersion'];
}
+
return $version;
}
WHERE table_type='BASE TABLE' AND table_name = '$table'" );
if ( $res === false ) {
print "Error in tableExists query: " . $this->getErrors();
+
return false;
}
if ( sqlsrv_fetch( $res ) ) {
WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
if ( $res === false ) {
print "Error in fieldExists query: " . $this->getErrors();
+
return false;
}
if ( sqlsrv_fetch( $res ) ) {
WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
if ( $res === false ) {
print "Error in fieldInfo query: " . $this->getErrors();
+
return false;
}
$meta = $this->fetchRow( $res );
if ( $meta ) {
return new MssqlField( $meta );
}
+
return false;
}
throw new MWException( "The identifier '$identifier' is too long (max. 128)" );
}
if ( ( strpos( $identifier, '[' ) !== false ) || ( strpos( $identifier, ']' ) !== false ) ) {
- // It may be allowed if you quoted with double quotation marks, but that would break if QUOTED_IDENTIFIER is OFF
+ // It may be allowed if you quoted with double quotation marks, but
+ // that would break if QUOTED_IDENTIFIER is OFF
throw new MWException( "You can't use square brackers in the identifier '$identifier'" );
}
+
return "[$identifier]";
}
}
function encodeBlob( $b ) {
- // we can't have zero's and such, this is a simple encoding to make sure we don't barf
+ // we can't have zero's and such, this is a simple encoding to make sure we don't barf
return base64_encode( $b );
}
function decodeBlob( $b ) {
- // we can't have zero's and such, this is a simple encoding to make sure we don't barf
- return base64_decode( $b );
+ // we can't have zero's and such, this is a simple encoding to make sure we don't barf
+ return base64_decode( $b );
}
/**
// We can't separate explicit JOIN clauses with ',', use ' ' for those
$straightJoins = !empty( $ret ) ? implode( ',', $ret ) : "";
$otherJoins = !empty( $retJOIN ) ? implode( ' ', $retJOIN ) : "";
+
// Compile our final table clause
return implode( ' ', array( $straightJoins, $otherJoins ) );
}
public function getInfinity() {
return '3000-01-31 00:00:00.000';
}
-
} // end DatabaseMssql class
/**
*/
class MssqlField implements Field {
private $name, $tablename, $default, $max_length, $nullable, $type;
+
function __construct( $info ) {
$this->name = $info['COLUMN_NAME'];
$this->tablename = $info['TABLE_NAME'];
}
/**
- * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows into an array and maintain our
- * own cursor index into that array...This is similar to the way the Oracle driver handles this same issue
+ * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows
+ * into an array and maintain our own cursor index into that array... This is
+ * similar to the way the Oracle driver handles this same issue
*
* @ingroup Database
*/
foreach ( $rows as $row ) {
if ( $row !== null ) {
foreach ( $row as $k => $v ) {
- if ( is_object( $v ) && method_exists( $v, 'format' ) ) {// DateTime Object
+ if ( is_object( $v ) && method_exists( $v, 'format' ) ) { // DateTime Object
$row[$k] = $v->format( "Y-m-d\TH:i:s\Z" );
}
}
- $this->mRows[] = $row;// read results into memory, cursors are not supported
+ $this->mRows[] = $row; // read results into memory, cursors are not supported
}
}
$this->mRowCount = count( $this->mRows );
}
}
}
+
return $obj;
}
}
$this->mCursor++;
+
return $ret;
}
public function fieldname( $nr ) {
$arrKeys = array_keys( $this->mRows[0] );
+
return $arrKeys[$nr];
}
default:
$strType = $intType;
}
+
return $strType;
}
* @see Database
*/
class DatabaseMysql extends DatabaseMysqlBase {
-
/**
* @param $sql string
* @return resource
} else {
$ret = mysql_unbuffered_query( $sql, $this->mConn );
}
+
return $ret;
}
# Fail now
# Otherwise we get a suppressed fatal error, which is very hard to track down
if ( !extension_loaded( 'mysql' ) ) {
- throw new DBConnectionError( $this, "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n" );
+ throw new DBConnectionError(
+ $this,
+ "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n"
+ );
}
$connFlags = 0;
*/
function selectDB( $db ) {
$this->mDBname = $db;
+
return mysql_select_db( $db, $this->mConn );
}
substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError( $error );
}
"from client host " . wfHostname() . "\n" );
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError( "Error selecting database $dbName" );
}
}
$this->mOpened = true;
wfProfileOut( __METHOD__ );
+
return true;
}
// these are the only errors mysql_fetch_object can cause.
// See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
if ( $errno == 2000 || $errno == 2013 ) {
- throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() )
+ );
}
+
return $row;
}
// these are the only errors mysql_fetch_array can cause.
// See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
if ( $errno == 2000 || $errno == 2013 ) {
- throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() )
+ );
}
+
return $row;
}
wfSuppressWarnings();
$n = $this->mysqlNumRows( $res );
wfRestoreWarnings();
+
// Unfortunately, mysql_num_rows does not reset the last errno.
// We are not checking for any errors here, since
// these are no errors mysql_num_rows can cause.
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return $this->mysqlNumFields( $res );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return $this->mysqlFieldName( $res, $n );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return $this->mysqlDataSeek( $res, $row );
}
if ( $error ) {
$error .= ' (' . $this->mServer . ')';
}
+
return $error;
}
* @param $options string|array
* @return int
*/
- public function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
+ public function estimateRowCount( $table, $vars = '*', $conds = '',
+ $fname = __METHOD__, $options = array()
+ ) {
$options['EXPLAIN'] = true;
$res = $this->select( $table, $vars, $conds, $fname, $options );
if ( $res === false ) {
foreach ( $res as $plan ) {
$rows *= $plan->rows > 0 ? $plan->rows : 1; // avoid resetting to zero
}
+
return $rows;
}
return new MySQLField( $meta );
}
}
+
return false;
}
$result[] = $row;
}
}
+
return empty( $result ) ? false : $result;
}
$this->ping();
$sQuoted = $this->mysqlRealEscapeString( $s );
}
+
return $sQuoted;
}
$this->mOpened = false;
$this->mConn = false;
$this->open( $this->mServer, $this->mUser, $this->mPassword, $this->mDBname );
+
return true;
}
function getLag() {
if ( !is_null( $this->mFakeSlaveLag ) ) {
wfDebug( "getLag: fake slave lagged {$this->mFakeSlaveLag} seconds\n" );
+
return $this->mFakeSlaveLag;
}
$row->State != 'Waiting to reconnect after a failed master event read' &&
$row->State != 'Reconnecting after a failed master event read' &&
$row->State != 'Registering slave on master'
- ) {
+ ) {
# This is it, return the time (except -ve)
if ( $row->Time > 0x7fffffff ) {
return false;
}
}
}
+
return false;
}
if ( !is_null( $this->mFakeSlaveLag ) ) {
$status = parent::masterPosWait( $pos, $timeout );
wfProfileOut( __METHOD__ );
+
return $status;
}
}
wfProfileOut( __METHOD__ );
+
return $status;
}
$row = $this->fetchObject( $res );
if ( $row ) {
- $pos = isset( $row->Exec_master_log_pos ) ? $row->Exec_master_log_pos : $row->Exec_Master_Log_Pos;
+ $pos = isset( $row->Exec_master_log_pos )
+ ? $row->Exec_master_log_pos
+ : $row->Exec_Master_Log_Pos;
+
return new MySQLMasterPos( $row->Relay_Master_Log_File, $pos );
} else {
return false;
$this->delimiter = $m[1];
$newLine = '';
}
+
return parent::streamStatementEnd( $sql, $newLine );
}
$lockName = $this->addQuotes( $lockName );
$result = $this->query( "SELECT IS_FREE_LOCK($lockName) AS lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus == 1 );
}
return true;
} else {
wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
return false;
}
}
/**
- * FROM MYSQL DOCS: http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
+ * FROM MYSQL DOCS:
+ * http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
* @param $lockName string
* @param $method string
* @return bool
$lockName = $this->addQuotes( $lockName );
$result = $this->query( "SELECT RELEASE_LOCK($lockName) as lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus == 1 );
}
foreach ( $write as $table ) {
$tbl = $this->tableName( $table ) .
- ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
- ' WRITE';
+ ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
+ ' WRITE';
$items[] = $tbl;
}
foreach ( $read as $table ) {
}
$sql = "LOCK TABLES " . implode( ',', $items );
$this->query( $sql, $method );
+
return true;
}
*/
public function unlockTables( $method ) {
$this->query( "UNLOCK TABLES", $method );
+
return true;
}
*/
function getServerUptime() {
$vars = $this->getMysqlStatus( 'Uptime' );
+
return (int)$vars['Uptime'];
}
if ( !$this->tableExists( $tableName, $fName ) ) {
return false;
}
+
return $this->query( "DROP TABLE IF EXISTS " . $this->tableName( $tableName ), $fName );
}
protected function getDefaultSchemaVars() {
$vars = parent::getDefaultSchemaVars();
$vars['wgDBTableOptions'] = str_replace( 'TYPE', 'ENGINE', $GLOBALS['wgDBTableOptions'] );
- $vars['wgDBTableOptions'] = str_replace( 'CHARSET=mysql4', 'CHARSET=binary', $vars['wgDBTableOptions'] );
+ $vars['wgDBTableOptions'] = str_replace(
+ 'CHARSET=mysql4',
+ 'CHARSET=binary',
+ $vars['wgDBTableOptions']
+ );
+
return $vars;
}
/**
* Lists VIEWs in the database
*
- * @param string $prefix Only show VIEWs with this prefix, eg.
+ * @param string $prefix Only show VIEWs with this prefix, eg.
* unit_test_, or $wgDBprefix. Default: null, would return all views.
- * @param string $fname Name of calling function
+ * @param string $fname Name of calling function
* @return array
* @since 1.22
*/
array_push( $filteredViews, $viewName );
}
}
+
return $filteredViews;
}
public function isView( $name, $prefix = null ) {
return in_array( $name, $this->listViews( $prefix ) );
}
-
}
-
-
/**
* Utility class.
* @ingroup Database
if ( preg_match( '!\.(\d+)/(\d+)$!', (string)$this, $m ) ) {
return array( (int)$m[1], (int)$m[2] );
}
+
return false;
}
function hasReached( MySQLMasterPos $pos ) {
$thisPos = $this->getCoordinates();
$thatPos = $pos->getCoordinates();
+
return ( $thisPos && $thatPos && $thisPos >= $thatPos );
}
}
* @see Database
*/
class DatabaseMysqli extends DatabaseMysqlBase {
-
/**
* @param $sql string
* @return resource
} else {
$ret = $this->mConn->query( $sql, MYSQLI_USE_RESULT );
}
+
return $ret;
}
usleep( 1000 );
}
if ( $mysqli->real_connect( $realServer, $this->mUser,
- $this->mPassword, $this->mDBname, null, null, $connFlags ) )
- {
+ $this->mPassword, $this->mDBname, null, null, $connFlags )
+ ) {
return $mysqli;
}
}
*/
function selectDB( $db ) {
$this->mDBname = $db;
+
return $this->mConn->select_db( $db );
}
protected function mysqlFreeResult( $res ) {
$res->free_result();
+
return true;
}
if ( $object === null ) {
return false;
}
+
return $object;
}
if ( $array === null ) {
return false;
}
+
return $array;
}
$field->unique_key = $field->flags & MYSQLI_UNIQUE_KEY_FLAG;
$field->multiple_key = $field->flags & MYSQLI_MULTIPLE_KEY_FLAG;
$field->binary = $field->flags & MYSQLI_BINARY_FLAG;
+
return $field;
}
protected function mysqlFieldName( $res, $n ) {
$field = $res->fetch_field_direct( $n );
+
return $field->name;
}
protected function mysqlPing() {
return $this->mConn->ping();
}
-
}
function __construct( &$db, $stmt, $unique = false ) {
$this->db =& $db;
- if ( ( $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, - 1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM ) ) === false ) {
+ $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM );
+ if ( $this->nrows === false ) {
$e = oci_error( $stmt );
$db->reportQueryError( $e['message'], $e['code'], '', __METHOD__ );
$this->free();
+
return;
}
$ret[$lc] = $v;
$ret[$k] = $v;
}
+
return $ret;
}
}
function cascadingDeletes() {
return true;
}
+
function cleanupTriggers() {
return true;
}
+
function strictIPs() {
return true;
}
+
function realTimestamps() {
return true;
}
+
function implicitGroupby() {
return false;
}
+
function implicitOrderby() {
return false;
}
+
function searchableIPs() {
return true;
}
function open( $server, $user, $password, $dbName ) {
global $wgDBOracleDRCP;
if ( !function_exists( 'oci_connect' ) ) {
- throw new DBConnectionError( $this, "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+ throw new DBConnectionError(
+ $this,
+ "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n " .
+ "(Note: if you recently installed PHP, you may need to restart your webserver\n " .
+ "and database)\n" );
}
$this->close();
wfSuppressWarnings();
if ( $this->mFlags & DBO_PERSISTENT ) {
- $this->mConn = oci_pconnect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+ $this->mConn = oci_pconnect(
+ $this->mUser,
+ $this->mPassword,
+ $this->mServer,
+ $this->defaultCharset,
+ $session_mode
+ );
} elseif ( $this->mFlags & DBO_DEFAULT ) {
- $this->mConn = oci_new_connect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+ $this->mConn = oci_new_connect(
+ $this->mUser,
+ $this->mPassword,
+ $this->mServer,
+ $this->defaultCharset,
+ $session_mode
+ );
} else {
- $this->mConn = oci_connect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+ $this->mConn = oci_connect(
+ $this->mUser,
+ $this->mPassword,
+ $this->mServer,
+ $this->defaultCharset,
+ $session_mode
+ );
}
wfRestoreWarnings();
$this->doQuery( 'ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'DD-MM-YYYY HH24:MI:SS.FF6\'' );
$this->doQuery( 'ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT=\'DD-MM-YYYY HH24:MI:SS.FF6\'' );
$this->doQuery( 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=\'.,\'' );
+
return $this->mConn;
}
// you have to select data from plan table after explain
$explain_id = MWTimestamp::getLocalInstance()->format( 'dmYHis' );
- $sql = preg_replace( '/^EXPLAIN /', 'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR', $sql, 1, $explain_count );
+ $sql = preg_replace(
+ '/^EXPLAIN /',
+ 'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR',
+ $sql,
+ 1,
+ $explain_count
+ );
wfSuppressWarnings();
if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
$e = oci_error( $this->mConn );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
$e = oci_error( $stmt );
if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
}
wfRestoreWarnings();
if ( $explain_count > 0 ) {
- return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table WHERE statement_id = \'' . $explain_id . '\'' );
+ return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table ' .
+ 'WHERE statement_id = \'' . $explain_id . '\'' );
} elseif ( oci_statement_type( $stmt ) == 'SELECT' ) {
return new ORAResult( $this, $stmt, $union_unique );
} else {
$this->mAffectedRows = oci_num_rows( $stmt );
+
return true;
}
}
} else {
$e = oci_error( $this->mConn );
}
+
return $e['message'];
}
} else {
$e = oci_error( $this->mConn );
}
+
return $e['code'];
}
if ( is_numeric( $col ) ) {
$bind = $val;
$val = null;
+
return $bind;
} elseif ( $includeCol ) {
$bind = "$col = ";
if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
$e = oci_error( $this->mConn );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
foreach ( $row as $col => &$val ) {
if ( oci_bind_by_name( $stmt, ":$col", $val, -1, SQLT_CHR ) === false ) {
$e = oci_error( $stmt );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
} else {
if ( $col_type == 'BLOB' ) {
$lob[$col]->writeTemporary( $val, OCI_TEMP_BLOB );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_BLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_BLOB );
} else {
$lob[$col]->writeTemporary( $val, OCI_TEMP_CLOB );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_CLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
}
}
}
$e = oci_error( $stmt );
if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
} else {
$this->mAffectedRows = oci_num_rows( $stmt );
}
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
- $insertOptions = array(), $selectOptions = array() )
- {
+ $insertOptions = array(), $selectOptions = array()
+ ) {
$destTable = $this->tableName( $destTable );
if ( !is_array( $selectOptions ) ) {
$selectOptions = array( $selectOptions );
}
if ( ( $sequenceData = $this->getSequenceData( $destTable ) ) !== false &&
- !isset( $varMap[$sequenceData['column']] ) )
- {
+ !isset( $varMap[$sequenceData['column']] )
+ ) {
$varMap[$sequenceData['column']] = 'GET_SEQUENCE_VALUE(\'' . $sequenceData['sequence'] . '\')';
}
function tableNameInternal( $name ) {
$name = $this->tableName( $name );
+
return preg_replace( '/.*\.(.*)/', '$1', $name );
}
+
/**
* Return the next in a sequence, save the value for retrieval via insertId()
* @return null
$res = $this->query( "SELECT $seqName.nextval FROM dual" );
$row = $this->fetchRow( $res );
$this->mInsertId = $row[0];
+
return $this->mInsertId;
}
private function getSequenceData( $table ) {
if ( $this->sequenceData == null ) {
$result = $this->doQuery( "SELECT lower(asq.sequence_name),
- lower(atc.table_name),
- lower(atc.column_name)
- FROM all_sequences asq, all_tab_columns atc
- WHERE decode(atc.table_name, '{$this->mTablePrefix}MWUSER', '{$this->mTablePrefix}USER', atc.table_name) || '_' ||
- atc.column_name || '_SEQ' = '{$this->mTablePrefix}' || asq.sequence_name
- AND asq.sequence_owner = upper('{$this->mDBname}')
- AND atc.owner = upper('{$this->mDBname}')" );
+ lower(atc.table_name),
+ lower(atc.column_name)
+ FROM all_sequences asq, all_tab_columns atc
+ WHERE decode(
+ atc.table_name,
+ '{$this->mTablePrefix}MWUSER',
+ '{$this->mTablePrefix}USER',
+ atc.table_name
+ ) || '_' ||
+ atc.column_name || '_SEQ' = '{$this->mTablePrefix}' || asq.sequence_name
+ AND asq.sequence_owner = upper('{$this->mDBname}')
+ AND atc.owner = upper('{$this->mDBname}')" );
while ( ( $row = $result->fetchRow() ) !== false ) {
$this->sequenceData[$row[1]] = array(
}
}
$table = strtolower( $this->removeIdentifierQuotes( $this->tableName( $table ) ) );
+
return ( isset( $this->sequenceData[$table] ) ) ? $this->sequenceData[$table] : false;
}
# Returns the size of a text field, or -1 for "unlimited"
function textFieldSize( $table, $field ) {
$fieldInfoData = $this->fieldInfo( $table, $field );
+
return $fieldInfoData->maxLength();
}
if ( $offset === false ) {
$offset = 0;
}
+
return "SELECT * FROM ($sql) WHERE rownum >= (1 + $offset) AND rownum < (1 + $limit + $offset)";
}
if ( $b instanceof Blob ) {
$b = $b->fetch();
}
+
return $b;
}
function unionQueries( $sqls, $all ) {
$glue = ' UNION ALL ';
- return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) . 'FROM (' . implode( $glue, $sqls ) . ')';
+
+ return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) .
+ 'FROM (' . implode( $glue, $sqls ) . ')';
}
function wasDeadlock() {
return $this->lastErrno() == 'OCI-00060';
}
- function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
+ function duplicateTableStructure( $oldName, $newName, $temporary = false,
+ $fname = __METHOD__
+ ) {
$temporary = $temporary ? 'TRUE' : 'FALSE';
$newName = strtoupper( $newName );
$oldPrefix = substr( $oldName, 0, strlen( $oldName ) - strlen( $tabName ) );
$newPrefix = strtoupper( $this->mTablePrefix );
- return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', '$oldPrefix', '$newPrefix', $temporary ); END;" );
+ return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', " .
+ "'$oldPrefix', '$newPrefix', $temporary ); END;" );
}
function listTables( $prefix = null, $fname = __METHOD__ ) {
}
$owner = strtoupper( $this->mDBname );
- $result = $this->doQuery( "SELECT table_name FROM all_tables WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
+ $result = $this->doQuery( "SELECT table_name FROM all_tables " .
+ "WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
// dirty code ... i know
$endArray = array();
*/
function getServerVersion() {
//better version number, fallback on driver
- $rset = $this->doQuery( 'SELECT version FROM product_component_version WHERE UPPER(product) LIKE \'ORACLE DATABASE%\'' );
+ $rset = $this->doQuery(
+ 'SELECT version FROM product_component_version ' .
+ 'WHERE UPPER(product) LIKE \'ORACLE DATABASE%\''
+ );
if ( !( $row = $rset->fetchRow() ) ) {
return oci_server_version( $this->mConn );
}
+
return $row['version'];
}
} else {
$count = 0;
}
+
return $count != 0;
}
}
$res->free();
+
return $exists;
}
$tableWhere = '= \'' . $table . '\'';
}
- $fieldInfoStmt = oci_parse( $this->mConn, 'SELECT * FROM wiki_field_info_full WHERE table_name ' . $tableWhere . ' and column_name = \'' . $field . '\'' );
+ $fieldInfoStmt = oci_parse(
+ $this->mConn,
+ 'SELECT * FROM wiki_field_info_full WHERE table_name ' .
+ $tableWhere . ' and column_name = \'' . $field . '\''
+ );
if ( oci_execute( $fieldInfoStmt, $this->execFlags() ) === false ) {
$e = oci_error( $fieldInfoStmt );
$this->reportQueryError( $e['message'], $e['code'], 'fieldInfo QUERY', __METHOD__ );
+
return false;
}
$res = new ORAResult( $this, $fieldInfoStmt );
$this->mFieldInfoCache["$table.$field"] = $fieldInfoTemp;
}
$res->free();
+
return $fieldInfoTemp;
}
if ( is_array( $table ) ) {
throw new DBUnexpectedError( $this, 'DatabaseOracle::fieldInfo called with table array!' );
}
+
return $this->fieldInfoMulti( $table, $field );
}
$replacements = array();
- while ( ! feof( $fp ) ) {
+ while ( !feof( $fp ) ) {
if ( $lineCallback ) {
call_user_func( $lineCallback );
}
if ( $sl < 0 ) {
continue;
}
- if ( '-' == $line { 0 } && '-' == $line { 1 } ) {
+ if ( '-' == $line{0} && '-' == $line{1} ) {
continue;
}
$dollarquote = true;
}
} elseif ( !$dollarquote ) {
- if ( ';' == $line { $sl } && ( $sl < 2 || ';' != $line { $sl - 1 } ) ) {
+ if ( ';' == $line{$sl} && ( $sl < 2 || ';' != $line{$sl - 1} ) ) {
$done = true;
$line = substr( $line, 0, $sl );
}
if ( false === $res ) {
$err = $this->lastError();
+
return "Query \"{$cmd}\" failed with error code \"$err\".\n";
}
}
$done = false;
}
}
+
return true;
}
if ( $e['code'] != '1435' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
}
+
return false;
}
+
return true;
}
if ( isset( $wgContLang->mLoaded ) && $wgContLang->mLoaded ) {
$s = $wgContLang->checkTitleEncoding( $s );
}
+
return "'" . $this->strencode( $s ) . "'";
}
if ( !$this->getFlag( DBO_DDLMODE ) ) {
$s = '/*Q*/' . $s;
}
+
return $s;
}
$conds2[$col] = $val;
}
}
+
return $conds2;
}
- function selectRow( $table, $vars, $conds, $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+ function selectRow( $table, $vars, $conds, $fname = __METHOD__,
+ $options = array(), $join_conds = array()
+ ) {
if ( is_array( $conds ) ) {
$conds = $this->wrapConditionsForWhere( $table, $conds );
}
+
return parent::selectRow( $table, $vars, $conds, $fname, $options, $join_conds );
}
$startOpts .= 'DISTINCT';
}
- if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) {
+ if ( isset( $options['USE INDEX'] ) && !is_array( $options['USE INDEX'] ) ) {
$useIndex = $this->useIndexClause( $options['USE INDEX'] );
} else {
$useIndex = '';
// all deletions on these tables have transactions so final failure rollbacks these updates
$table = $this->tableName( $table );
if ( $table == $this->tableName( 'user' ) ) {
- $this->update( 'archive', array( 'ar_user' => 0 ), array( 'ar_user' => $conds['user_id'] ), $fname );
- $this->update( 'ipblocks', array( 'ipb_user' => 0 ), array( 'ipb_user' => $conds['user_id'] ), $fname );
- $this->update( 'image', array( 'img_user' => 0 ), array( 'img_user' => $conds['user_id'] ), $fname );
- $this->update( 'oldimage', array( 'oi_user' => 0 ), array( 'oi_user' => $conds['user_id'] ), $fname );
- $this->update( 'filearchive', array( 'fa_deleted_user' => 0 ), array( 'fa_deleted_user' => $conds['user_id'] ), $fname );
- $this->update( 'filearchive', array( 'fa_user' => 0 ), array( 'fa_user' => $conds['user_id'] ), $fname );
- $this->update( 'uploadstash', array( 'us_user' => 0 ), array( 'us_user' => $conds['user_id'] ), $fname );
- $this->update( 'recentchanges', array( 'rc_user' => 0 ), array( 'rc_user' => $conds['user_id'] ), $fname );
- $this->update( 'logging', array( 'log_user' => 0 ), array( 'log_user' => $conds['user_id'] ), $fname );
+ $this->update( 'archive', array( 'ar_user' => 0 ),
+ array( 'ar_user' => $conds['user_id'] ), $fname );
+ $this->update( 'ipblocks', array( 'ipb_user' => 0 ),
+ array( 'ipb_user' => $conds['user_id'] ), $fname );
+ $this->update( 'image', array( 'img_user' => 0 ),
+ array( 'img_user' => $conds['user_id'] ), $fname );
+ $this->update( 'oldimage', array( 'oi_user' => 0 ),
+ array( 'oi_user' => $conds['user_id'] ), $fname );
+ $this->update( 'filearchive', array( 'fa_deleted_user' => 0 ),
+ array( 'fa_deleted_user' => $conds['user_id'] ), $fname );
+ $this->update( 'filearchive', array( 'fa_user' => 0 ),
+ array( 'fa_user' => $conds['user_id'] ), $fname );
+ $this->update( 'uploadstash', array( 'us_user' => 0 ),
+ array( 'us_user' => $conds['user_id'] ), $fname );
+ $this->update( 'recentchanges', array( 'rc_user' => 0 ),
+ array( 'rc_user' => $conds['user_id'] ), $fname );
+ $this->update( 'logging', array( 'log_user' => 0 ),
+ array( 'log_user' => $conds['user_id'] ), $fname );
} elseif ( $table == $this->tableName( 'image' ) ) {
- $this->update( 'oldimage', array( 'oi_name' => 0 ), array( 'oi_name' => $conds['img_name'] ), $fname );
+ $this->update( 'oldimage', array( 'oi_name' => 0 ),
+ array( 'oi_name' => $conds['img_name'] ), $fname );
}
+
return parent::delete( $table, $conds, $fname );
}
if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
$e = oci_error( $this->mConn );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
foreach ( $values as $col => &$val ) {
if ( oci_bind_by_name( $stmt, ":$col", $val ) === false ) {
$e = oci_error( $stmt );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
} else {
if ( $col_type == 'BLOB' ) {
$lob[$col]->writeTemporary( $val );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, SQLT_BLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, SQLT_BLOB );
} else {
$lob[$col]->writeTemporary( $val );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_CLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
}
}
}
$e = oci_error( $stmt );
if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
} else {
$this->mAffectedRows = oci_num_rows( $stmt );
$delim, $table, $field, $conds = '', $join_conds = array()
) {
$fld = "LISTAGG($field," . $this->addQuotes( $delim ) . ") WITHIN GROUP (ORDER BY $field)";
+
return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
}
public function getInfinity() {
return '31-12-2030 12:00:00.000000';
}
-
} // end DatabaseOracle class
$n->conname = $row->conname;
$n->has_default = ( $row->atthasdef === 't' );
$n->default = $row->adsrc;
+
return $n;
}
function conname() {
return $this->conname;
}
+
/**
* @since 1.19
*/
return false;
}
}
-
}
/**
}
$old = next( $this->mCurrentState );
$new = next( $this->mNewState );
-
}
}
}
$this->didbegin = false;
/* If we are not in a transaction, we need to be for savepoint trickery */
if ( !$dbw->trxLevel() ) {
- $dbw->begin( "FOR SAVEPOINT" );
- $this->didbegin = true;
+ $dbw->begin( "FOR SAVEPOINT" );
+ $this->didbegin = true;
}
}
global $wgDebugDBTransactions;
if ( $this->dbw->doQuery( $keyword . " " . $this->id ) !== false ) {
if ( $wgDebugDBTransactions ) {
- wfDebug( sprintf ( $msg_ok, $this->id ) );
+ wfDebug( sprintf( $msg_ok, $this->id ) );
}
} else {
- wfDebug( sprintf ( $msg_failed, $this->id ) );
+ wfDebug( sprintf( $msg_failed, $this->id ) );
}
}
function cascadingDeletes() {
return true;
}
+
function cleanupTriggers() {
return true;
}
+
function strictIPs() {
return true;
}
+
function realTimestamps() {
return true;
}
+
function implicitGroupby() {
return false;
}
+
function implicitOrderby() {
return false;
}
+
function searchableIPs() {
return true;
}
+
function functionalIndexes() {
return true;
}
function hasConstraint( $name ) {
- $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n WHERE c.connamespace = n.oid AND conname = '" .
- pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
+ $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
+ "WHERE c.connamespace = n.oid AND conname = '" .
+ pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" .
+ pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
$res = $this->doQuery( $SQL );
+
return $this->numRows( $res );
}
function open( $server, $user, $password, $dbName ) {
# Test for Postgres support, to avoid suppressed fatal error
if ( !function_exists( 'pg_connect' ) ) {
- throw new DBConnectionError( $this, "Postgres functions missing, have you compiled PHP with the --with-pgsql option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+ throw new DBConnectionError(
+ $this,
+ "Postgres functions missing, have you compiled PHP with the --with-pgsql\n" .
+ "option? (Note: if you recently installed PHP, you may need to restart your\n" .
+ "webserver and database)\n"
+ );
}
global $wgDBport;
if ( !$this->mConn ) {
wfDebug( "DB connection error\n" );
- wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+ wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
+ substr( $password, 0, 3 ) . "...\n" );
wfDebug( $this->lastError() . "\n" );
throw new DBConnectionError( $this, str_replace( "\n", ' ', $phpError ) );
}
foreach ( $vars as $name => $value ) {
$s .= "$name='" . str_replace( "'", "\\'", $value ) . "' ";
}
+
return $s;
}
if ( pg_result_error( $this->mLastResult ) ) {
return false;
}
+
return $this->mLastResult;
}
protected function dumpError() {
- $diags = array( PGSQL_DIAG_SEVERITY,
- PGSQL_DIAG_SQLSTATE,
- PGSQL_DIAG_MESSAGE_PRIMARY,
- PGSQL_DIAG_MESSAGE_DETAIL,
- PGSQL_DIAG_MESSAGE_HINT,
- PGSQL_DIAG_STATEMENT_POSITION,
- PGSQL_DIAG_INTERNAL_POSITION,
- PGSQL_DIAG_INTERNAL_QUERY,
- PGSQL_DIAG_CONTEXT,
- PGSQL_DIAG_SOURCE_FILE,
- PGSQL_DIAG_SOURCE_LINE,
- PGSQL_DIAG_SOURCE_FUNCTION );
+ $diags = array(
+ PGSQL_DIAG_SEVERITY,
+ PGSQL_DIAG_SQLSTATE,
+ PGSQL_DIAG_MESSAGE_PRIMARY,
+ PGSQL_DIAG_MESSAGE_DETAIL,
+ PGSQL_DIAG_MESSAGE_HINT,
+ PGSQL_DIAG_STATEMENT_POSITION,
+ PGSQL_DIAG_INTERNAL_POSITION,
+ PGSQL_DIAG_INTERNAL_QUERY,
+ PGSQL_DIAG_CONTEXT,
+ PGSQL_DIAG_SOURCE_FILE,
+ PGSQL_DIAG_SOURCE_LINE,
+ PGSQL_DIAG_SOURCE_FUNCTION
+ );
foreach ( $diags as $d ) {
- wfDebug( sprintf( "PgSQL ERROR(%d): %s\n", $d, pg_result_error_field( $this->mLastResult, $d ) ) );
+ wfDebug( sprintf( "PgSQL ERROR(%d): %s\n",
+ $d, pg_result_error_field( $this->mLastResult, $d ) ) );
}
}
/* Check for constraint violation */
if ( $errno === '23505' ) {
parent::reportQueryError( $error, $errno, $sql, $fname, $tempIgnore );
+
return;
}
}
# @todo hashar: not sure if the following test really trigger if the object
# fetching failed.
if ( pg_last_error( $this->mConn ) ) {
- throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+ );
}
+
return $row;
}
$row = pg_fetch_array( $res );
wfRestoreWarnings();
if ( pg_last_error( $this->mConn ) ) {
- throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+ );
}
+
return $row;
}
$n = pg_num_rows( $res );
wfRestoreWarnings();
if ( pg_last_error( $this->mConn ) ) {
- throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+ );
}
+
return $n;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_num_fields( $res );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_field_name( $res, $n );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_result_seek( $res, $row );
}
return 'No database connection';
}
}
+
function lastErrno() {
if ( $this->mLastResult ) {
return pg_result_error_field( $this->mLastResult, PGSQL_DIAG_SQLSTATE );
if ( empty( $this->mLastResult ) ) {
return 0;
}
+
return pg_affected_rows( $this->mLastResult );
}
* Takes same arguments as Database::select()
* @return int
*/
- function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
+ function estimateRowCount( $table, $vars = '*', $conds = '',
+ $fname = __METHOD__, $options = array()
+ ) {
$options['EXPLAIN'] = true;
$res = $this->select( $table, $vars, $conds, $fname, $options );
$rows = -1;
$rows = $count[1];
}
}
+
return $rows;
}
return $row;
}
}
+
return false;
}
} else {
return null;
}
+
return $a;
}
foreach ( $res as $row ) {
return true;
}
+
return false;
}
/**
* INSERT SELECT wrapper
* $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
- * Source items may be literals rather then field names, but strings should be quoted with Database::addQuotes()
+ * Source items may be literals rather then field names, but strings should
+ * be quoted with Database::addQuotes()
* $conds may be "*" to copy the whole table
* srcTable may be an array of tables.
* @todo FIXME: Implement this a little better (seperate select/insert)?
* @return bool
*/
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
- $insertOptions = array(), $selectOptions = array() )
- {
+ $insertOptions = array(), $selectOptions = array() ) {
$destTable = $this->tableName( $destTable );
if ( !is_array( $insertOptions ) ) {
}
$sql = "INSERT INTO $destTable (" . implode( ',', array_keys( $varMap ) ) . ')' .
- " SELECT $startOpts " . implode( ',', $varMap ) .
- " FROM $srcTable $useIndex";
+ " SELECT $startOpts " . implode( ',', $varMap ) .
+ " FROM $srcTable $useIndex";
if ( $conds != '*' ) {
$sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
$res = $this->query( "SELECT nextval('$safeseq')" );
$row = $this->fetchRow( $res );
$this->mInsertId = $row[0];
+
return $this->mInsertId;
}
$res = $this->query( "SELECT currval('$safeseq')" );
$row = $this->fetchRow( $res );
$currval = $row[0];
+
return $currval;
}
} else {
$size = $row->size;
}
+
return $size;
}
function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
$newName = $this->addIdentifierQuotes( $newName );
$oldName = $this->addIdentifierQuotes( $oldName );
- return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName (LIKE $oldName INCLUDING DEFAULTS)", $fname );
+
+ return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName " .
+ "(LIKE $oldName INCLUDING DEFAULTS)", $fname );
}
function listTables( $prefix = null, $fname = __METHOD__ ) {
$text, $match, 0, $offset );
$offset += strlen( $match[0] );
$output[] = ( '"' != $match[1][0]
- ? $match[1]
- : stripcslashes( substr( $match[1], 1, -1 ) ) );
+ ? $match[1]
+ : stripcslashes( substr( $match[1], 1, -1 ) ) );
if ( '},' == $match[3] ) {
return $output;
}
$offset = $this->pg_array_parse( $text, $output, $limit, $offset + 1 );
}
} while ( $limit > $offset );
+
return $output;
}
function getCurrentSchema() {
$res = $this->query( "SELECT current_schema()", __METHOD__ );
$row = $this->fetchRow( $res );
+
return $row[0];
}
$res = $this->query( "SELECT current_schemas(false)", __METHOD__ );
$row = $this->fetchRow( $res );
$schemas = array();
+
/* PHP pgsql support does not support array type, "{a,b}" string is returned */
+
return $this->pg_array_parse( $row[0], $schemas );
}
function getSearchPath() {
$res = $this->query( "SHOW search_path", __METHOD__ );
$row = $this->fetchRow( $res );
+
/* PostgreSQL returns SHOW values as strings */
+
return explode( ",", $row[0] );
}
*/
$search_path = $this->getSearchPath();
array_unshift( $search_path,
- $this->addIdentifierQuotes( $desired_schema ));
+ $this->addIdentifierQuotes( $desired_schema ) );
$this->setSearchPath( $search_path );
$this->mCoreSchema = $desired_schema;
wfDebug( "Schema \"" . $desired_schema . "\" added to the search path\n" );
}
} else {
$this->mCoreSchema = $this->getCurrentSchema();
- wfDebug( "Schema \"" . $desired_schema . "\" not found, using current \"" . $this->mCoreSchema . "\"\n" );
+ wfDebug( "Schema \"" . $desired_schema . "\" not found, using current \"" .
+ $this->mCoreSchema . "\"\n" );
}
/* Commit SET otherwise it will be rollbacked on error or IGNORE SELECT */
$this->commit( __METHOD__ );
$this->numeric_version = pg_parameter_status( $this->mConn, 'server_version' );
}
}
+
return $this->numeric_version;
}
. "AND c.relkind IN ('" . implode( "','", $types ) . "')";
$res = $this->query( $SQL );
$count = $res ? $res->numRows() : 0;
+
return (bool)$count;
}
return null;
}
$rows = $res->numRows();
+
return $rows;
}
'schemaname' => $this->getCoreSchema()
)
);
+
return $exists === $rule;
}
function constraintExists( $table, $constraint ) {
$SQL = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
- "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
+ "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
$this->addQuotes( $this->getCoreSchema() ),
$this->addQuotes( $table ),
$this->addQuotes( $constraint )
return null;
}
$rows = $res->numRows();
+
return $rows;
}
function schemaExists( $schema ) {
$exists = $this->selectField( '"pg_catalog"."pg_namespace"', 1,
array( 'nspname' => $schema ), __METHOD__ );
+
return (bool)$exists;
}
function roleExists( $roleName ) {
$exists = $this->selectField( '"pg_catalog"."pg_roles"', 1,
array( 'rolname' => $roleName ), __METHOD__ );
+
return (bool)$exists;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_field_type( $res, $index );
}
if ( $b instanceof Blob ) {
$b = $b->fetch();
}
+
return pg_unescape_bytea( $b );
}
} elseif ( $s instanceof Blob ) {
return "'" . $s->fetch( $s ) . "'";
}
+
return "'" . pg_escape_string( $this->mConn, $s ) . "'";
}
$delimiter, $table, $field, $conds = '', $options = array(), $join_conds = array()
) {
$fld = "array_to_string(array_agg($field)," . $this->addQuotes( $delimiter ) . ')';
+
return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
}
if ( substr( $newLine, 0, 4 ) == '$mw$' ) {
if ( $this->delimiter ) {
$this->delimiter = false;
- }
- else {
+ } else {
$this->delimiter = ';';
}
}
+
return parent::streamStatementEnd( $sql, $newLine );
}
$result = $this->query( "SELECT (CASE(pg_try_advisory_lock($key))
WHEN 'f' THEN 'f' ELSE pg_advisory_unlock($key) END) AS lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus === 't' );
}
}
}
wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
return false;
}
/**
- * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
+ * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM
+ * PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
* @param $lockName string
* @param $method string
* @return bool
$key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
$result = $this->query( "SELECT pg_advisory_unlock($key) as lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus === 't' );
}
* @ingroup Database
*/
class DatabaseSqlite extends DatabaseBase {
-
private static $fulltextEnabled = null;
var $mAffectedRows;
throw new DBConnectionError( $this, "SQLite database not accessible" );
}
$this->openFile( $fileName );
+
return $this->mConn;
}
$this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
# Enforce LIKE to be case sensitive, just like MySQL
$this->query( 'PRAGMA case_sensitive_like = 1' );
+
return true;
}
}
*/
protected function closeConnection() {
$this->mConn = null;
+
return true;
}
self::$fulltextEnabled = stristr( $row['sql'], 'fts' ) !== false;
}
}
+
return self::$fulltextEnabled;
}
$cachedResult = 'FTS3';
}
$db->close();
+
return $cachedResult;
}
* Attaches external database to our connection, see http://sqlite.org/lang_attach.html
* for details.
*
- * @param string $name database name to be used in queries like SELECT foo FROM dbname.table
- * @param string $file database file name. If omitted, will be generated using $name and $wgSQLiteDataDir
+ * @param string $name database name to be used in queries like
+ * SELECT foo FROM dbname.table
+ * @param string $file database file name. If omitted, will be generated
+ * using $name and $wgSQLiteDataDir
* @param string $fname calling function name
*
* @return ResultWrapper
$file = self::generateFileName( $wgSQLiteDataDir, $name );
}
$file = $this->addQuotes( $file );
+
return $this->query( "ATTACH DATABASE $file AS $name", $fname );
}
$this->mAffectedRows = $r->rowCount();
$res = new ResultWrapper( $this, $r->fetchAll() );
}
+
return $res;
}
return $obj;
}
+
return false;
}
$cur = current( $r );
if ( is_array( $cur ) ) {
next( $r );
+
return $cur;
}
+
return false;
}
*/
function numRows( $res ) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
+
return count( $r );
}
*/
function numFields( $res ) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
+
return is_array( $r ) ? count( $r[0] ) : 0;
}
$r = $res instanceof ResultWrapper ? $res->result : $res;
if ( is_array( $r ) ) {
$keys = array_keys( $r[0] );
+
return $keys[$n];
}
+
return false;
}
if ( strpos( $name, 'sqlite_' ) === 0 ) {
return $name;
}
+
return str_replace( '"', '', parent::tableName( $name, $format ) );
}
return "Cannot return last error, no db connection";
}
$e = $this->mConn->errorInfo();
+
return isset( $e[2] ) ? $e[2] : '';
}
return "Cannot return last error, no db connection";
} else {
$info = $this->mConn->errorInfo();
+
return $info[1];
}
}
foreach ( $res as $row ) {
$info[] = $row->name;
}
+
return $info;
}
}
$firstPart = substr( $row->sql, 0, $indexPos );
$options = explode( ' ', $firstPart );
+
return in_array( 'UNIQUE', $options );
}
$options[$k] = '';
}
}
+
return parent::makeSelectOptions( $options );
}
*/
function makeUpdateOptions( $options ) {
$options = self::fixIgnore( $options );
+
return parent::makeUpdateOptions( $options );
}
$options[$k] = 'OR IGNORE';
}
}
+
return $options;
}
*/
function makeInsertOptions( $options ) {
$options = self::fixIgnore( $options );
+
return parent::makeInsertOptions( $options );
}
*/
function unionQueries( $sqls, $all ) {
$glue = $all ? ' UNION ALL ' : ' UNION ';
+
return implode( $glue, $sqls );
}
*/
function getServerVersion() {
$ver = $this->mConn->getAttribute( PDO::ATTR_SERVER_VERSION );
+
return $ver;
}
* @return string User-friendly database information
*/
public function getServerInfo() {
- return wfMessage( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() )->text();
+ return wfMessage( self::getFulltextSearchModule()
+ ? 'sqlite-has-fts'
+ : 'sqlite-no-fts', $this->getServerVersion() )->text();
}
/**
return new SQLiteField( $row, $tableName );
}
}
+
return false;
}
* @return string
*/
function strencode( $s ) {
- return substr( $this->addQuotes( $s ), 1, - 1 );
+ return substr( $this->addQuotes( $s ), 1, -1 );
}
/**
if ( $b instanceof Blob ) {
$b = $b->fetch();
}
+
return $b;
}
if ( count( $params ) > 0 && is_array( $params[0] ) ) {
$params = $params[0];
}
+
return parent::buildLike( $params ) . "ESCAPE '\' ";
}
public function deadlockLoop( /*...*/ ) {
$args = func_get_args();
$function = array_shift( $args );
+
return call_user_func_array( $function, $args );
}
// INT -> INTEGER
$s = preg_replace( '/\b(tiny|small|medium|big|)int(\s*\(\s*\d+\s*\)|\b)/i', 'INTEGER', $s );
// floating point types -> REAL
- $s = preg_replace( '/\b(float|double(\s+precision)?)(\s*\(\s*\d+\s*(,\s*\d+\s*)?\)|\b)/i', 'REAL', $s );
+ $s = preg_replace(
+ '/\b(float|double(\s+precision)?)(\s*\(\s*\d+\s*(,\s*\d+\s*)?\)|\b)/i',
+ 'REAL',
+ $s
+ );
// varchar -> TEXT
$s = preg_replace( '/\b(var)?char\s*\(.*?\)/i', 'TEXT', $s );
// TEXT normalization
// DROP INDEX is database-wide, not table-specific, so no ON <table> clause.
$s = preg_replace( '/\sON\s+[^\s]*/i', '', $s );
}
+
return $s;
}
$delim, $table, $field, $conds = '', $join_conds = array()
) {
$fld = "group_concat($field," . $this->addQuotes( $delim ) . ')';
+
return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
}
* @return bool|ResultWrapper
*/
function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
- $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name=" . $this->addQuotes( $oldName ) . " AND type='table'", $fname );
+ $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name=" .
+ $this->addQuotes( $oldName ) . " AND type='table'", $fname );
$obj = $this->fetchObject( $res );
if ( !$obj ) {
throw new MWException( "Couldn't retrieve structure for table $oldName" );
}
$sql = $obj->sql;
- $sql = preg_replace( '/(?<=\W)"?' . preg_quote( trim( $this->addIdentifierQuotes( $oldName ), '"' ) ) . '"?(?=\W)/', $this->addIdentifierQuotes( $newName ), $sql, 1 );
+ $sql = preg_replace(
+ '/(?<=\W)"?' . preg_quote( trim( $this->addIdentifierQuotes( $oldName ), '"' ) ) . '"?(?=\W)/',
+ $this->addIdentifierQuotes( $newName ),
+ $sql,
+ 1
+ );
if ( $temporary ) {
if ( preg_match( '/^\\s*CREATE\\s+VIRTUAL\\s+TABLE\b/i', $sql ) ) {
wfDebug( "Table $oldName is virtual, can't create a temporary duplicate.\n" );
$sql = str_replace( 'CREATE TABLE', 'CREATE TEMPORARY TABLE', $sql );
}
}
+
return $this->query( $sql, $fname );
}
if ( strpos( $table, 'sqlite_' ) !== 0 ) {
$endArray[] = $table;
}
-
}
}
return $endArray;
}
-
} // end DatabaseSqlite class
/**
*/
class SQLiteField implements Field {
private $info, $tableName;
+
function __construct( $info, $tableName ) {
$this->info = $info;
$this->tableName = $tableName;
return str_replace( "''", "'", $this->info->dflt_value );
}
}
+
return $this->info->dflt_value;
}
function type() {
return $this->info->type;
}
-
} // end SQLiteField
if ( is_null( $this->currentRow ) ) {
$this->next();
}
+
return $this->currentRow;
}
function next() {
$this->pos++;
$this->currentRow = $this->fetchObject();
+
return $this->currentRow;
}
}
/**
- * Used by DatabaseBase::buildLike() to represent characters that have special meaning in SQL LIKE clauses
- * and thus need no escaping. Don't instantiate it manually, use DatabaseBase::anyChar() and anyString() instead.
+ * Used by DatabaseBase::buildLike() to represent characters that have special
+ * meaning in SQL LIKE clauses and thus need no escaping. Don't instantiate it
+ * manually, use DatabaseBase::anyChar() and anyString() instead.
*/
class LikeMatch {
private $str;
*/
interface IORMRow {
-
/**
* Load the specified fields from the database.
*
* @return IORMTable
*/
public function getTable();
-
}
*/
interface IORMTable {
-
/**
* Returns the name of the database table objects of this type are stored in.
*
* * array
* * blob
*
- * TODO: get rid of the id field. Every row instance needs to have
- * one so this is just causing hassle at various locations by requiring an extra check for field name.
+ * @todo Get rid of the id field. Every row instance needs to have one so
+ * this is just causing hassle at various locations by requiring an extra
+ * check for field name.
*
* @since 1.20
*
* @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode)
*/
public function select( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the records matching the provided
* @return array of self
*/
public function selectObjects( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Do the actual select.
* @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode)
*/
public function rawSelect( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the records matching the provided
* @return array of array
*/
public function selectFields( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null );
+ array $options = array(), $collapse = true, $functionName = null );
/**
* Selects the the specified fields of the first matching record.
* @return IORMRow|bool False on failure
*/
public function selectRow( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the records matching the provided
* @return ResultWrapper
*/
public function rawSelectRow( array $fields, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the first record matching the provided
* @return mixed|array|bool False on failure
*/
public function selectFieldsRow( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null );
+ array $options = array(), $collapse = true, $functionName = null );
/**
* Returns if there is at least one record matching the provided conditions.
*
* @since 1.20
*
- * @return String|bool The target wiki, in a form that LBFactory understands (or false if the local wiki is used)
+ * @return String|bool The target wiki, in a form that LBFactory
+ * understands (or false if the local wiki is used)
*/
public function getTargetWiki();
/**
* Set the ID of the any foreign wiki to use as a target for database operations
*
- * @param string|bool $wiki The target wiki, in a form that LBFactory understands (or false if the local wiki shall be used)
+ * @param string|bool $wiki The target wiki, in a form that LBFactory
+ * understands (or false if the local wiki shall be used)
*
* @since 1.20
*/
* @return boolean
*/
public function canHaveField( $name );
-
}
* @ingroup Database
*/
abstract class LBFactory {
-
/**
* @var LBFactory
*/
$class = $wgLBFactoryConf['class'];
self::$instance = new $class( $wgLBFactoryConf );
}
+
return self::$instance;
}
'type' => $wgDBtype,
'load' => 1,
'flags' => $flags
- ));
+ ) );
}
return new LoadBalancer( array(
'servers' => $servers,
'masterWaitTimeout' => $wgMasterWaitTimeout
- ));
+ ) );
}
/**
$this->mainLB->parentInfo( array( 'id' => 'main' ) );
$this->chronProt->initLB( $this->mainLB );
}
+
return $this->mainLB;
}
if ( !isset( $wgExternalServers[$cluster] ) ) {
throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
}
+
return new LoadBalancer( array(
'servers' => $wgExternalServers[$cluster]
- ));
+ ) );
}
/**
$this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
$this->chronProt->initLB( $this->extLBs[$cluster] );
}
+
return $this->extLBs[$cluster];
}
*/
class DBAccessError extends MWException {
function __construct() {
- parent::__construct( "Mediawiki tried to access the database via wfGetDB(). This is not allowed." );
+ parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " .
+ "This is not allowed." );
}
}
* Configuration:
* sectionsByDB A map of database names to section names
*
- * sectionLoads A 2-d map. For each section, gives a map of server names to load ratios.
- * For example: array( 'section1' => array( 'db1' => 100, 'db2' => 100 ) )
+ * sectionLoads A 2-d map. For each section, gives a map of server names to
+ * load ratios. For example:
+ * array(
+ * 'section1' => array(
+ * 'db1' => 100,
+ * 'db2' => 100
+ * )
+ * )
*
- * serverTemplate A server info associative array as documented for $wgDBservers. The host,
- * hostName and load entries will be overridden.
+ * serverTemplate A server info associative array as documented for $wgDBservers.
+ * The host, hostName and load entries will be overridden.
*
- * groupLoadsBySection A 3-d map giving server load ratios for each section and group. For example:
- * array( 'section1' => array( 'group1' => array( 'db1' => 100, 'db2' => 100 ) ) )
+ * groupLoadsBySection A 3-d map giving server load ratios for each section and group.
+ * For example:
+ * array(
+ * 'section1' => array(
+ * 'group1' => array(
+ * 'db1' => 100,
+ * 'db2' => 100
+ * )
+ * )
+ * )
*
* groupLoadsByDB A 3-d map giving server load ratios by DB name.
*
*
* externalLoads A map of external storage cluster name to server load map
*
- * externalTemplateOverrides A set of server info keys overriding serverTemplate for external storage
+ * externalTemplateOverrides A set of server info keys overriding serverTemplate for external
+ * storage
*
- * templateOverridesByServer A 2-d map overriding serverTemplate and externalTemplateOverrides on a
- * server-by-server basis. Applies to both core and external storage.
+ * templateOverridesByServer A 2-d map overriding serverTemplate and
+ * externalTemplateOverrides on a server-by-server basis. Applies
+ * to both core and external storage.
*
* templateOverridesByCluster A 2-d map overriding the server info by external storage cluster
*
* masterTemplateOverrides An override array for all master servers.
*
- * readOnlyBySection A map of section name to read-only message. Missing or false for read/write.
+ * readOnlyBySection A map of section name to read-only message.
+ * Missing or false for read/write.
*
* @ingroup Database
*/
}
$this->lastSection = $section;
$this->lastWiki = $wiki;
+
return $section;
}
if ( isset( $this->groupLoadsByDB[$dbName] ) ) {
$groupLoads = $this->groupLoadsByDB[$dbName];
}
+
if ( isset( $this->groupLoadsBySection[$section] ) ) {
$groupLoads = array_merge_recursive( $groupLoads, $this->groupLoadsBySection[$section] );
}
- return $this->newLoadBalancer( $this->serverTemplate, $this->sectionLoads[$section], $groupLoads );
+
+ return $this->newLoadBalancer(
+ $this->serverTemplate,
+ $this->sectionLoads[$section],
+ $groupLoads
+ );
}
/**
$this->chronProt->initLB( $lb );
$this->mainLBs[$section] = $lb;
}
+
return $this->mainLBs[$section];
}
if ( isset( $this->templateOverridesByCluster[$cluster] ) ) {
$template = $this->templateOverridesByCluster[$cluster] + $template;
}
+
return $this->newLoadBalancer( $template, $this->externalLoads[$cluster], array() );
}
$this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
$this->chronProt->initLB( $this->extLBs[$cluster] );
}
+
return $this->extLBs[$cluster];
}
$lb = new LoadBalancer( array(
'servers' => $servers,
'masterWaitTimeout' => $wgMasterWaitTimeout
- ));
+ ) );
+
return $lb;
}
$serverInfo['load'] = $load;
$servers[] = $serverInfo;
}
+
return $servers;
}
$reindexed[$server][$group] = $load;
}
}
+
return $reindexed;
}
function getDBNameAndPrefix( $wiki = false ) {
if ( $wiki === false ) {
global $wgDBname, $wgDBprefix;
+
return array( $wgDBname, $wgDBprefix );
} else {
return wfSplitWikiID( $wiki );
$class = $this->mLoadMonitorClass;
$this->mLoadMonitor = new $class( $this );
}
+
return $this->mLoadMonitor;
}
# No loads for this group, return false and the caller can use some other group
wfDebug( __METHOD__ . ": no loads for group $group\n" );
wfProfileOut( __METHOD__ );
+
return false;
}
} else {
# wants us to return false.
wfDebugLog( 'connect', __METHOD__ . ": pickRandom() returned false\n" );
wfProfileOut( __METHOD__ );
+
return false;
}
}
}
wfProfileOut( __METHOD__ );
+
return $i;
}
wfDebug( __METHOD__ . ": waiting $t us\n" );
usleep( $t );
wfProfileOut( __METHOD__ );
+
return $t;
}
return reset( $conns[$i] );
}
}
+
return false;
}
if ( !$conn ) {
if ( !$open ) {
wfDebug( __METHOD__ . ": no connection open\n" );
+
return false;
} else {
$conn = $this->openConnection( $index, '' );
if ( !$conn ) {
wfDebug( __METHOD__ . ": failed to open connection\n" );
+
return false;
}
}
if ( $result == -1 || is_null( $result ) ) {
# Timed out waiting for slave, use master instead
wfDebug( __METHOD__ . ": Timed out waiting for slave #$index pos {$this->mWaitForPos}\n" );
+
return false;
} else {
wfDebug( __METHOD__ . ": Done\n" );
+
return true;
}
}
if ( $i == DB_LAST ) {
wfProfileOut( __METHOD__ );
- throw new MWException( 'Attempt to call ' . __METHOD__ . ' with deprecated server index DB_LAST' );
+ throw new MWException( 'Attempt to call ' . __METHOD__ .
+ ' with deprecated server index DB_LAST' );
} elseif ( $i === null || $i === false ) {
wfProfileOut( __METHOD__ );
- throw new MWException( 'Attempt to call ' . __METHOD__ . ' with invalid server index' );
+ throw new MWException( 'Attempt to call ' . __METHOD__ .
+ ' with invalid server index' );
}
if ( $wiki === wfWikiID() ) {
if ( $i === false ) {
$this->mLastError = 'No working slave server: ' . $this->mLastError;
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError();
}
}
$conn = $this->openConnection( $i, $wiki );
if ( !$conn ) {
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError();
}
wfProfileOut( __METHOD__ );
+
return $conn;
}
}
if ( $serverIndex === null || $refCount === null ) {
wfDebug( __METHOD__ . ": this connection was not opened as a foreign connection\n" );
+
/**
* This can happen in code like:
* foreach ( $dbs as $db ) {
* When a connection to the local DB is opened in this way, reuseConnection()
* should be ignored
*/
+
return;
}
if ( $this->mConns['foreignUsed'][$serverIndex][$wiki] !== $conn ) {
- throw new MWException( __METHOD__ . ": connection not found, has the connection been freed already?" );
+ throw new MWException( __METHOD__ . ": connection not found, has " .
+ "the connection been freed already?" );
}
$conn->setLBInfo( 'foreignPoolRefCount', --$refCount );
if ( $refCount <= 0 ) {
if ( $wiki !== false ) {
$conn = $this->openForeignConnection( $i, $wiki );
wfProfileOut( __METHOD__ );
+
return $conn;
}
if ( isset( $this->mConns['local'][$i][0] ) ) {
}
}
wfProfileOut( __METHOD__ );
+
return $conn;
}
$conn->setLBInfo( 'foreignPoolRefCount', $refCount + 1 );
}
wfProfileOut( __METHOD__ );
+
return $conn;
}
if ( !is_integer( $index ) ) {
return false;
}
+
return (bool)$this->getAnyOpenConnection( $index );
}
if ( isset( $server['fakeMaster'] ) ) {
$db->setFakeMaster( true );
}
+
return $db;
}
wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
$conn->reportConnectionError( "{$this->mLastError} ({$server})" ); // throws DBConnectionError
}
+
return false; /* not reached */
}
}
/**
- * Sets the server info structure for the given index. Entry at index $i is created if it doesn't exist
+ * Sets the server info structure for the given index. Entry at index $i
+ * is created if it doesn't exist
* @param $i
* @param $serverInfo
*/
$conn = $this->getAnyOpenConnection( $i );
if ( $conn ) {
wfDebug( "Master pos fetched from slave\n" );
+
return $conn->getSlavePos();
}
}
} else {
wfDebug( "Master pos fetched from master\n" );
+
return $masterConn->getMasterPos();
}
+
return false;
}
return $this->mAllowLagged;
}
$this->mAllowLagged = $mode;
+
return $this->mAllowLagged;
}
}
}
}
+
return $success;
}
}
}
}
+
return array( $host, $maxLag, $maxIndex );
}
$this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
array_keys( $this->mServers ), $wiki );
}
+
return $this->mLagTimes;
}
list( $db, $groups, $wiki ) = $this->params;
$this->conn = $this->lb->getConnection( $db, $groups, $wiki );
}
+
return call_user_func_array( array( $this->conn, $name ), $arguments );
}
if ( mt_rand( 0, $chance ) != 0 ) {
unset( $times['timestamp'] ); // hide from caller
wfProfileOut( __METHOD__ );
+
return $times;
}
wfIncrStats( 'lag_cache_miss_expired' );
# Cache key missing or expired
if ( $wgMemc->add( "$memcKey:lock", 1, 10 ) ) {
# Let this process alone update the cache value
- $unlocker = new ScopedCallback( function() use ( $wgMemc, $memcKey ) {
+ $unlocker = new ScopedCallback( function () use ( $wgMemc, $memcKey ) {
$wgMemc->delete( $memcKey );
} );
} elseif ( is_array( $times ) ) {
# Could not acquire lock but an old cache exists, so use it
unset( $times['timestamp'] ); // hide from caller
wfProfileOut( __METHOD__ );
+
return $times;
}
unset( $times['timestamp'] ); // hide from caller
wfProfileOut( __METHOD__ );
+
return $times;
}
if ( $status['Threads_running'] > $threshold ) {
$server = $conn->getProperty( 'mServer' );
wfLogDBError( "LB backoff from $server - Threads_running = {$status['Threads_running']}\n" );
+
return $status['Threads_connected'];
} else {
return 0;
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
interface ORMIterator extends Iterator {
-
}
*/
class ORMResult implements ORMIterator {
-
/**
* @var ResultWrapper
*/
public function valid() {
return $this->current !== false;
}
-
}
*/
class ORMRow implements IORMRow {
-
/**
* The fields of the object.
* field name (w/o prefix) => value
if ( $result !== false ) {
$this->setFields( $this->table->getFieldsFromDBResult( $result ), $override );
+
return true;
}
+
return false;
}
* @return boolean
*/
public function hasIdField() {
- return $this->hasField( 'id' )
- && !is_null( $this->getField( 'id' ) );
+ return $this->hasField( 'id' ) && !is_null( $this->getField( 'id' ) );
}
/**
$value = $this->fields[$name];
// Skip null id fields so that the DBMS can set the default.
- if ( $name === 'id' && is_null ( $value ) ) {
+ if ( $name === 'id' && is_null( $value ) ) {
continue;
}
/**
* Before removal of an object happens, @see beforeRemove gets called.
- * This method loads the fields of which the names have been returned by this one (or all fields if null is returned).
- * This allows for loading info needed after removal to get rid of linked data and the like.
+ * This method loads the fields of which the names have been returned by
+ * this one (or all fields if null is returned). This allows for loading
+ * info needed after removal to get rid of linked data and the like.
*
* @since 1.20
*
* @param array|string|null $summaryFields
*/
public function loadSummaryFields( $summaryFields = null ) {
-
}
/**
public function getTable() {
return $this->table;
}
-
}
*/
class ORMTable extends DBAccessBase implements IORMTable {
-
/**
* Cache for instances, used by the singleton method.
*
* @param string|null $rowClass
* @param string $fieldPrefix
*/
- public function __construct( $tableName = '', array $fields = array(), array $defaults = array(), $rowClass = null, $fieldPrefix = '' ) {
+ public function __construct( $tableName = '', array $fields = array(),
+ array $defaults = array(), $rowClass = null, $fieldPrefix = ''
+ ) {
$this->tableName = $tableName;
$this->fields = $fields;
$this->defaults = $defaults;
* @return ORMResult
*/
public function select( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$res = $this->rawSelect( $fields, $conditions, $options, $functionName );
+
return new ORMResult( $this, $res );
}
* @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode).
*/
public function selectObjects( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$result = $this->selectFields( $fields, $conditions, $options, false, $functionName );
$objects = array();
* @since 1.20
*
* @param null|string|array $fields
- * @param array $conditions
- * @param array $options
- * @param null|string $functionName
+ * @param array $conditions
+ * @param array $options
+ * @param null|string $functionName
*
* @return ResultWrapper
* @throws DBQueryError if the quey failed (even if the database was in ignoreErrors mode).
*/
public function rawSelect( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
if ( is_null( $fields ) ) {
$fields = array_keys( $this->getFields() );
- }
- else {
+ } else {
$fields = (array)$fields;
}
* @return array of array
*/
public function selectFields( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null ) {
+ array $options = array(), $collapse = true, $functionName = null
+ ) {
$objects = array();
$result = $this->rawSelect( $fields, $conditions, $options, $functionName );
if ( $collapse ) {
if ( count( $fields ) === 1 ) {
$objects = array_map( 'array_shift', $objects );
- }
- elseif ( count( $fields ) === 2 ) {
+ } elseif ( count( $fields ) === 2 ) {
$o = array();
foreach ( $objects as $object ) {
* @return IORMRow|bool False on failure
*/
public function selectRow( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$options['LIMIT'] = 1;
$objects = $this->select( $fields, $conditions, $options, $functionName );
* @return ResultWrapper
*/
public function rawSelectRow( array $fields, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$dbr = $this->getReadDbConnection();
$result = $dbr->selectRow(
);
$this->releaseConnection( $dbr );
+
return $result;
}
* @return mixed|array|bool False on failure
*/
public function selectFieldsRow( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null ) {
+ array $options = array(), $collapse = true, $functionName = null
+ ) {
$options['LIMIT'] = 1;
$objects = $this->selectFields( $fields, $conditions, $options, $collapse, $functionName );
) !== false; // DatabaseBase::delete does not always return true for success as documented...
$this->releaseConnection( $dbw );
+
return $result;
}
}
if ( $setDefaults && $hasDefault ) {
- $default = is_array( $defaults[$field] ) ? implode( '|', $defaults[$field] ) : $defaults[$field];
+ $default = is_array( $defaults[$field] )
+ ? implode( '|', $defaults[$field] )
+ : $defaults[$field];
$params[$field][ApiBase::PARAM_DFLT] = $default;
}
}
}
/**
- * Set the database ID to use for read operations, use DB_XXX constants or an index to the load balancer setup.
+ * Set the database ID to use for read operations, use DB_XXX constants or
+ * an index to the load balancer setup.
*
* @param integer $db
*
*
* @since 1.20
*
- * @return String|bool The target wiki, in a form that LBFactory understands (or false if the local wiki is used)
+ * @return String|bool The target wiki, in a form that LBFactory understands
+ * (or false if the local wiki is used)
*/
public function getTargetWiki() {
return $this->wiki;
/**
* Set the ID of the any foreign wiki to use as a target for database operations
*
- * @param string|bool $wiki The target wiki, in a form that LBFactory understands (or false if the local wiki shall be used)
+ * @param string|bool $wiki The target wiki, in a form that LBFactory
+ * understands (or false if the local wiki shall be used)
*
* @since 1.20
*/
*
* @since 1.20
*/
+ // @codingStandardsIgnoreStart Suppress "useless method overriding" sniffer warning
public function releaseConnection( DatabaseBase $db ) {
parent::releaseConnection( $db ); // just make it public
}
+ // @codingStandardsIgnoreEnd
/**
* Update the records matching the provided conditions by
) !== false; // DatabaseBase::update does not always return true for success as documented...
$this->releaseConnection( $dbw );
+
return $result;
}
if ( is_array( $value ) ) {
$field = $value[0];
$value = $value[1];
- }
- else {
+ } else {
$value = explode( ' ', $value, 2 );
$value[0] = $this->getPrefixedField( $value[0] );
$prefixedValues[] = implode( ' ', $value );
return $success;
}
-
}
$data[] = wfTimestamp( TS_DB );
return "<!-- diff generator: " .
- implode( " ", array_map( "htmlspecialchars", $data ) ) .
+ implode( " ", array_map( "htmlspecialchars", $data ) ) .
" -->\n";
}
}
}
-
/**
* Normalize a string if it is a valid storage path
*
*/
protected function assertWritableRepo() {}
-
/**
* Return information about the repository.
*
$dbw->commit( __METHOD__ ); // commit before anything bad can happen
}
-
wfProfileOut( __METHOD__ . '-edit' );
# Save to cache and purge the squid
class TraditionalImageGallery extends ImageGalleryBase {
-
/**
* Return a HTML representation of the image gallery
*
) . "<br />\n" :
'';
-
$galleryText = $textlink . $text . $fileSize;
$galleryText = $this->wrapGalleryText( $galleryText, $thumb );
return $output;
}
-
/**
* Add the wrapper html around the thumb's caption
*
</div></div>
-
<div id="mw-panel">
<div class="portal" id="p-logo">
<a style="background-image: url(../skins/common/images/mediawiki.png);"
return false;
}
-
UploadBase::setSessionStatus(
$this->params['filekey'],
array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
imagejpeg( $dst_image, $thumbPath, 95 );
}
-
/**
* Returns whether the current scaler supports rotation (im and gd do)
*
return $image->getWidth() * $image->getHeight();
}
-
/**
* @param $file File
* @return string
$xml = $this->preprocessToXml( $text, $flags );
}
-
// Fail if the number of elements exceeds acceptable limits
// Do not attempt to generate the DOM
$this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
/**
* ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (the one from
+ * (the one from
* http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
* @ingroup Profiler
*/
$blobs = array();
}
-
foreach ( $missing as $name ) {
$states[$name] = 'missing';
}
return call_user_func( array( self::$allowedTypes[$typeName], 'suggestTarget' ), $target, $ids );
}
-
/**
* Checks if a revision still exists in the revision table.
* If it doesn't, returns the corresponding ar_timestamp field
private $mOriginalPageOutCallback = null;
private $mLogItemCount = 0;
-
/**
* @param WikiImporter $importer
* @param $upload
$this->setCategory( $cat );
}
-
if ( !$this->category && $categoryStr ) {
$this->setHeaders();
$this->getOutput()->addWikiMsg( 'randomincategory-invalidcategory',
return true;
}
-
/**
* Verifies that it's ok to include the uploaded file
*
}
}
-
$handler = MediaHandler::getHandler( $mime );
if ( $handler ) {
$handlerStatus = $handler->verifyUpload( $this->mTempPath );
return false;
}
-
/**
* Check a whitelist of xml encodings that are known not to be interpreted differently
* by the server's xml parser (expat) and some common browsers.
'lmo' => 'lumbaart', # Lombard
'ln' => 'lingála', # Lingala
'lo' => 'ລາວ', # Laotian
+ 'lrc' => 'لوری', # Northern Luri
'loz' => 'Silozi', # Lozi
'lt' => 'lietuvių', # Lithuanian
'ltg' => 'latgaļu', # Latgalian
*/
class LanguageBs extends Language {
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{GRAMMAR:case|word}}
# Variable for ending
$ending = '';
-
# CHecking if the $word is in plural form
if ( preg_match( '/тæ$/u', $word ) ) {
$word = mb_substr( $word, 0, -1 );
* @ingroup Language
*/
-
/**
* Turkish (Türkçe)
*
'invalidtitle-knownnamespace' => "Títulu inválidu col espaciu de nomes «$2» ya'l testu «$3»",
'invalidtitle-unknownnamespace' => "Títulu inválidu col númberu $1 d'espaciu de nomes desconocíu ya'l testu «$2»",
'exception-nologin' => 'Nun anició sesión',
-'exception-nologin-text' => "Esta páxina o aición necesita qu'anicies sesión nesta wiki.",
+'exception-nologin-text' => 'Por favor, [[Special:Userlogin|anicie sesión]] pa tener accesu a esta páxina o aición.',
+'exception-nologin-text-manual' => 'Por favor, $1 pa tener accesu a esta páxina o aición.',
# Virus scanner
'virus-badscanner' => "Fallu de configuración: Escáner de virus desconocíu: ''$1''",
'mypreferences' => 'Preferencies',
'prefs-edits' => "Númberu d'ediciones:",
'prefsnologin' => 'Nun anició sesión',
+'prefsnologintext2' => "Por favor, $1 pa configurar les preferencies d'usuariu",
'changepassword' => 'Camudar la clave',
'prefs-skin' => 'Apariencia',
'skin-preview' => 'Vista previa',
corréu: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-En casu de producise más cambios, nun habrá más notificaciones a nun ser que visites esta páxina. Tamién podríes reaniciar na to llista de vixilancia los marcadores de notificación de toles páxines que tengas vixilaes.
+En casu de producise más actividá, nun habrá más notificaciones a nun ser que visites esta páxina teniendo sesión aniciada. Tamién podríes reaniciar na to llista de vixilancia los marcadores de notificación de toles páxines que tengas vixilaes.
El to abertable sistema de notificación de {{SITENAME}}
# Special:SpecialPages
'specialpages' => 'Páxines especiales',
+'specialpages-note-top' => 'Lleenda',
'specialpages-note' => '* Páxines especiales normales.
-* <span class="mw-specialpagerestricted">Páxines especiales restrinxíes.</span>
-* <span class="mw-specialpagecached">Páxines especiales en caché (seique nun tean actualizaes).</span>',
+* <span class="mw-specialpagerestricted">Páxines especiales restrinxíes.</span>',
'specialpages-group-maintenance' => 'Informes de mantenimientu',
'specialpages-group-other' => 'Otres páxines especiales',
'specialpages-group-login' => 'Entrar / crear cuenta',
* @author Gulmammad
* @author Kaganer
* @author Khan27
+ * @author Mushviq Abdulla
* @author PPerviz
* @author PrinceValiant
* @author Sortilegus
'tog-diffonly' => 'Versiyaların müqayisəsi zamanı səhifənin məzmununu göstərmə',
'tog-showhiddencats' => 'Gizli kateqoriyaları göstər',
'tog-norollbackdiff' => 'Geri qaytardıqdan sonra, edilmiş dəyişikikləri dəyişikliklər siyahısından sil',
+'tog-useeditwarning' => 'Qeyd edilməmiş dəyişikliyə sahib bir dəyişiklik səhifəsindən çıxarkən məni xəbərdar et',
'underline-always' => 'Həmişə',
'underline-never' => 'Heç vaxt',
'oct' => 'Oktyabr',
'nov' => 'Noyabr',
'dec' => 'Dekabr',
+'january-date' => '$1 Yanvar',
+'february-date' => '$1 Fevral',
+'march-date' => '$1 Mart',
+'april-date' => '$1 Aprel',
+'may-date' => '$1 May',
+'june-date' => '$1 İyun',
+'july-date' => '$1 İyul',
+'august-date' => '$1 Avqust',
+'september-date' => ' $1 Sentyabr',
+'october-date' => '$1 Oktyabr',
+'november-date' => '$1 Noyabr',
+'december-date' => '$1 Dekabr',
# Categories related messages
'pagecategories' => '$1 {{PLURAL:$1|Kateqoriya|Kateqoriya}}',
'newwindow' => '(yeni pəncərədə açılır)',
'cancel' => 'Ləğv et',
'moredotdotdot' => 'Daha...',
+'morenotlisted' => 'Bu siyahı tam deyil.',
'mypage' => 'Mənim səhifəm',
'mytalk' => 'Danışıqlarım',
'anontalk' => 'Bu IP-yə aid müzakirə',
'create-this-page' => 'Bu səhifəni yarat',
'delete' => 'Sil',
'deletethispage' => 'Bu səhifəni sil',
+'undeletethispage' => 'Bu səhifənin silmə əməliyyatını geri qaytar',
'undelete_short' => '$1 {{PLURAL:$1|dəyişikliyi|dəyişiklikləri}} bərpa et',
'viewdeleted_short' => '{{PLURAL:$1|bir silinmiş redaktəyə|$1 silinmiş redaktəyə}}',
'protect' => 'Mühafizə et',
'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)',
'newmessageslink' => 'yeni ismarıclar',
'newmessagesdifflink' => 'Sonuncu və əvvəlki versiya arasındakı fərq',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir istifadəçidən|$3 istifadəçidən}} $1 var ($2).',
+'youhavenewmessagesmanyusers' => 'Bir çox istifadəçidən $1 var ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
+'newmessagesdifflinkplural' => 'son {{PLURAL:$1|dəyişiklik|dəyişikliklər}}',
'youhavenewmessagesmulti' => '"$1"da yeni mesajınız var.',
'editsection' => 'redaktə',
'editold' => 'redaktə',
'invalidtitle-unknownnamespace' => 'Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»',
'exception-nologin' => 'No has iniciat sessió',
'exception-nologin-text' => 'Aquesta pàgina o acció requereix que iniciïs sessió a aquest wiki.',
+'exception-nologin-text-manual' => 'Si us plau, $1 per poder accedir a aquesta pàgina o acció.',
# Virus scanner
'virus-badscanner' => "Mala configuració: antivirus desconegut: ''$1''",
# Special:SpecialPages
'specialpages' => 'Pàgines especials',
+'specialpages-note-top' => 'Llegenda',
'specialpages-note' => '* Pàgines especials normals.
* <span class="mw-specialpagerestricted">Pàgines especials restringides.</span>
* <span class="mw-specialpagecached">Pàgines especials en memòria cau (poden ser obsoletes).</span>',
'invalidtitle-knownnamespace' => 'Neplatný název se jmenným prostorem „$2“ a textem „$3“',
'invalidtitle-unknownnamespace' => 'Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“',
'exception-nologin' => 'Nejste přihlášen(a)',
-'exception-nologin-text' => 'Tato stránka nebo akce vyžaduje, abyste byli na této wiki přihlášeni.',
+'exception-nologin-text' => 'Pro přístup na tuto stránku nebo k této akci se prosím [[Special:Userlogin|přihlaste]].',
+'exception-nologin-text-manual' => 'Pro přístup na tuto stránku nebo k této akci se musíte $1.',
# Virus scanner
'virus-badscanner' => "Špatná konfigurace: neznámý antivirový program: ''$1''",
'mypreferences' => 'Nastavení',
'prefs-edits' => 'Počet editací:',
'prefsnologin' => 'Nejste přihlášen(a)!',
+'prefsnologintext2' => 'Pro změnu uživatelských nastavení se musíte $1.',
'changepassword' => 'Změna hesla',
'prefs-skin' => 'Vzhled',
'skin-preview' => 'Náhled',
e-mailem: $PAGEEDITOR_EMAIL
na wiki: $PAGEEDITOR_WIKI
-Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
+Do doby, než stránku navštívíte jako přihlášený uživatel, vám další oznámení k této stránce nebudou zasílána. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
- S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
+S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
--
Změnit nastavení e-mailových oznámení můžete na
# Special:SpecialPages
'specialpages' => 'Speciální stránky',
+'specialpages-note-top' => 'Legenda',
'specialpages-note' => '* Normální speciální stránky
* <span class="mw-specialpagerestricted">Speciální stránky s vyhrazeným přístupem</span>',
'specialpages-group-maintenance' => 'Údržba',
'returnto' => 'Naase lehele $1',
'tagline' => 'Allikas: {{SITENAME}}',
'help' => 'Juhend',
-'search' => 'Otsimine',
+'search' => 'Otsing',
'searchbutton' => 'Otsi',
'go' => 'Mine',
'searcharticle' => 'Mine',
'editsection' => 'muuda',
'editold' => 'redigeeri',
'viewsourceold' => 'vaata lähteteksti',
-'editlink' => 'redigeeri',
+'editlink' => 'muuda',
'viewsourcelink' => 'vaata lähteteksti',
-'editsectionhint' => 'Redigeeri alaosa "$1"',
+'editsectionhint' => 'Muuda alaosa "$1"',
'toc' => 'Sisukord',
'showtoc' => 'näita',
'hidetoc' => 'peida',
'feed-invalid' => 'Vigane vootüüp.',
'feed-unavailable' => 'Uudisvood ei ole saadaval.',
'site-rss-feed' => '$1 RSS-toide',
-'site-atom-feed' => '$1 Atom-toide',
+'site-atom-feed' => '$1 Atom-fiid',
'page-rss-feed' => '"$1" RSS-toide',
-'page-atom-feed' => '"$1" Atom-toide',
+'page-atom-feed' => '"$1" Atom-fiid',
'red-link-title' => '$1 (pole veel kirjutatud)',
'sort-descending' => 'Järjesta laskuvalt',
'sort-ascending' => 'Järjesta tõusvalt',
'headline_sample' => 'Pealkiri',
'headline_tip' => '2. taseme pealkiri',
'nowiki_sample' => 'Sisesta vormindamata tekst',
-'nowiki_tip' => 'Ignoreeri viki vormindust',
+'nowiki_tip' => 'Ignoreeri vikivormindust',
'image_sample' => 'Näidis.jpg',
'image_tip' => 'Pilt',
'media_sample' => 'Näidis.ogg',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
'expensive-parserfunction-category' => 'Liiga palju aeglasi laiendusfunktsioone kasutavad leheküljed',
-'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur.
-Mistõttu osasid malle ei näidata.",
-'post-expand-template-inclusion-category' => 'Leheküljed, milledel on mallide väljakutsumise limiit ületatud',
+'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
+'post-expand-template-inclusion-category' => 'Leheküljed, kus mallide väljakutsumise limiit on ületatud',
'post-expand-template-argument-warning' => "'''Hoiatus:''' See lehekülg sisaldab argumendina vähemalt üht malli, mille määratud maht on liiga suur.
Need argumendid on välja jäetud.",
'post-expand-template-argument-category' => 'Malli vahele jäetud argumente sisaldavad leheküljed',
'recentchanges-feed-description' => 'Jälgi vikisse tehtud viimaseid muudatusi.',
'recentchanges-label-newpage' => 'See muudatus lõi uue lehekülje',
'recentchanges-label-minor' => 'See on pisiparandus',
-'recentchanges-label-bot' => 'Selle muudatuse sooritas robot',
+'recentchanges-label-bot' => 'Selle muudatuse tegi robot',
'recentchanges-label-unpatrolled' => 'Seda muudatust ei ole veel kontrollitud',
'rcnote' => "Allpool on esitatud {{PLURAL:$1|'''1''' muudatus|viimased '''$1''' muudatust}} viimase {{PLURAL:$2|päeva|'''$2''' päeva}} jooksul seisuga $4, kell $5.",
'rcnotefrom' => "Allpool on toodud muudatused alates: '''$2''' (näidatakse kuni '''$1''' muudatust)",
'tooltip-pt-mytalk' => 'Sinu arutelulehekülg',
'tooltip-pt-anontalk' => 'Arutelu sellelt IP-aadressilt tehtud muudatuste kohta',
'tooltip-pt-preferences' => 'Sinu eelistused',
-'tooltip-pt-watchlist' => 'Lehekülgede loend, mida jälgid muudatuste osas',
+'tooltip-pt-watchlist' => 'Lehekülgede loend, mille muudatusi jälgid',
'tooltip-pt-mycontris' => 'Sinu kaastööde loend',
'tooltip-pt-login' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
'tooltip-pt-anonlogin' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
'tooltip-pt-logout' => 'Logi välja',
'tooltip-ca-talk' => 'Selle artikli arutelu',
-'tooltip-ca-edit' => 'Saad seda lehekülge redigeerida. Palun kasuta enne salvestamist eelvaadet.',
+'tooltip-ca-edit' => 'Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.',
'tooltip-ca-addsection' => 'Lisa uus alaosa',
'tooltip-ca-viewsource' => 'See lehekülg on kaitstud.
Saad vaadata selle lähteteksti.',
'tooltip-n-randompage' => 'Mine juhuslikule leheküljele',
'tooltip-n-help' => 'Kuidas redigeerida',
'tooltip-t-whatlinkshere' => 'Kõik viki leheküljed, mis siia viitavad',
-'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, milledele on siit viidatud',
+'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, millele on siit viidatud',
'tooltip-feed-rss' => 'Selle lehekülje RSS-toide',
-'tooltip-feed-atom' => 'Selle lehekülje Atom-toide',
+'tooltip-feed-atom' => 'Selle lehekülje Atom-fiid',
'tooltip-t-contributions' => 'Kuva selle kasutaja kaastöö',
'tooltip-t-emailuser' => 'Saada sellele kasutajale e-kiri',
'tooltip-t-upload' => 'Laadi faile üles',
'tooltip-save' => 'Salvesta muudatused',
'tooltip-preview' => 'Näita tehtavaid muudatusi. Palun kasutage seda enne salvestamist!',
'tooltip-diff' => 'Näita tehtavaid muudatusi.',
-'tooltip-compareselectedversions' => 'Näita erinevusi kahe selle lehe valitud versiooni vahel.',
+'tooltip-compareselectedversions' => 'Näita erinevusi selle lehe kahe valitud versiooni vahel.',
'tooltip-watch' => 'Lisa see lehekülg oma jälgimisloendisse',
'tooltip-watchlistedit-normal-submit' => 'Eemalda leheküljed',
'tooltip-watchlistedit-raw-submit' => 'Uuenda jälgimisloendit',
# Special:SpecialPages
'specialpages' => 'Pages spéciales',
+'specialpages-note-top' => 'Légende',
'specialpages-note' => '* Pages spéciales normales.
-* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>
-* <span class="mw-specialpagecached">Pages spéciales seulement en cache (pourraient être désuètes).</span>',
+* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>',
'specialpages-group-maintenance' => 'Rapports de maintenance',
'specialpages-group-other' => 'Autres pages spéciales',
'specialpages-group-login' => "S'identifier / s'inscrire",
'prefs-rendering' => 'Napohlad',
'saveprefs' => 'Składować',
'resetprefs' => 'Njeskładowane změny zaćisnyć',
-'restoreprefs' => 'Wšě standardne nastajenja wobnowić',
+'restoreprefs' => 'Wšě standardne nastajenja wobnowić (w druhich wotrězkach)',
'prefs-editing' => 'Wobdźěłowanje',
'rows' => 'Rjadki:',
'columns' => 'Stołpiki:',
'badsig' => 'Njepłaćiwa signatura, prošu HTML přepruwować.',
'badsiglength' => 'Twoja signatura je předołha.
Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} dołha być.',
-'yourgender' => 'Splah:',
-'gender-unknown' => 'Njepodaty',
-'gender-male' => 'Muski',
-'gender-female' => 'Žónski',
+'yourgender' => 'Što chceš podać?',
+'gender-unknown' => 'Nochcu ničo wo tym podać',
+'gender-male' => 'Wón wobdźěłuje wikistrony',
+'gender-female' => 'Wona wobdźěłuje wikistrony',
'prefs-help-gender' => 'Opcionalny: wužiwa so za po splahu specifiske narěčenje přez softwaru. Tuta informacija budźe zjawna.',
'email' => 'E-mejl',
'prefs-help-realname' => '* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.',
'prefs-signature' => 'Podpis',
'prefs-dateformat' => 'Datumowy format',
'prefs-timeoffset' => 'Časowe wotchilenje',
-'prefs-advancedediting' => 'Powšitkowny',
+'prefs-advancedediting' => 'Powšitkowne nastajenja',
'prefs-editor' => 'Editor',
'prefs-preview' => 'Přehlad',
'prefs-advancedrc' => 'Rozšěrjene opcije',
via posta elettronica: $PAGEEDITOR_EMAIL
sul sito: $PAGEEDITOR_WIKI
-Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
+Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina dopo aver effettuato l\'accesso. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
- Il sistema di notifica di {{SITENAME}}, al tuo servizio
+Il sistema di notifica di {{SITENAME}}, al tuo servizio
--
Per modificare le impostazioni delle notifiche via posta elettronica, visita
# Special:SpecialPages
'specialpages' => 'Pagine speciali',
+'specialpages-note-top' => 'Legenda',
'specialpages-note' => '* Pagine speciali non riservate.
-* <span class="mw-specialpagerestricted">Pagine speciali riservate ad alcune categorie di utenti.</span>
-* <span class="mw-specialpagecached">Pagine speciali disponibili in versione cache (potrebbero essere obsolete).</span>',
+* <span class="mw-specialpagerestricted">Pagine speciali riservate ad alcune categorie di utenti.</span>',
'specialpages-group-maintenance' => 'Resoconti di manutenzione',
'specialpages-group-other' => 'Altre pagine speciali',
'specialpages-group-login' => 'Accesso / creazione utenze',
ページによっては、ブラウザーのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
'welcomeuser' => 'ようこそ、$1さん!',
'welcomecreation-msg' => 'アカウントが作成されました。
-[[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
+お好みで[[Special:Preferences|{{SITENAME}}の個人設定]]を変更できます。',
'yourname' => '利用者名:',
'userlogin-yourname' => '利用者名',
'userlogin-yourname-ph' => '利用者名を入力',
# Special:SpecialPages
'specialpages' => '特別ページ',
+'specialpages-note-top' => '凡例',
'specialpages-note' => '* 通常の特別ページ
* <span class="mw-specialpagerestricted">制限されている特別ページ</span>',
'specialpages-group-maintenance' => 'メンテナンス報告',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
'aboutsite' => 'អំពី{{SITENAME}}',
'aboutpage' => 'Project:អំពី',
-'copyright' => 'á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\99á\9f\89á\9e¶á\9e\84á\9e\8aá\9f\84á\9e\99$1។',
+'copyright' => 'á\9e\81á\9f\92á\9e\9bá\9e¹á\9e\98á\9e\9fá\9e¶á\9e\9aá\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\94á\9e¶á\9e\93á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e¢á\9e¶á\9e\87á\9f\92á\9e\89á\9e¶á\9e\94á\9e\8eá\9f\92á\9e\8c$1 á\9e\9bá\9e¾á\9e\80á\9e\9bá\9f\82á\9e\84á\9e\8fá\9f\82á\9e\98á\9e¶á\9e\93á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\96á\9e¸á\9e\93á\9f\84á\9f\87។',
'copyrightpage' => '{{ns:project}}:រក្សាសិទ្ធិ',
'currentevents' => 'ព្រឹត្តិការណ៍ថ្មីៗ',
'currentevents-url' => 'Project:ព្រឹត្តិការណ៍ថ្មីៗ',
'invalidtitle-knownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ "$2" និងអត្ថបទ "$3"',
'invalidtitle-unknownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ "$2"',
'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
-'exception-nologin-text' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9f\81á\9f\87á\9e\8fá\9e\98á\9f\92á\9e\9aá\9e¼á\9e\9cá\9e¢á\9f\84á\9e\99á\9e¢á\9f\92á\9e\93á\9e\80á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\9cá\9e·á\9e\82á\9e¸នេះ។',
+'exception-nologin-text' => 'á\9e\9fá\9e¼á\9e\98[[Special:Userlogin|lá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b]]á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\85á\9e¼á\9e\9bá\9e¢á\9e¶á\9e\93á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96នេះ។',
# Virus scanner
'virus-badscanner' => "ការកំណត់រចនាសម្ព័ន្ធមិនល្អ៖ កម្មវិធីស្កេនមេរោគមិនស្គាល់៖ ''$1''",
'gotaccount' => "បើលោកអ្នកមានគណនីសម្រាប់ប្រើហើយ សូម'''$1'''។",
'gotaccountlink' => 'កត់ឈ្មោះចូល',
'userlogin-resetlink' => 'តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?',
-'userlogin-resetpassword-link' => 'á\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80',
+'userlogin-resetpassword-link' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e á\9e¾á\9e\99?',
'helplogin-url' => 'Help:ការកត់ឈ្មោះចូល',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ជំនួយក្នុងការកត់ឈ្មោះចូល]]',
'userlogin-createanother' => 'បង្កើតគណនីមួយទៀត',
'revdelete-hide-text' => 'បិទបាំងឃ្លានៃកំណែប្រែ',
'revdelete-hide-image' => 'បិទបាំងខ្លឹមសារនៃឯកសារ',
'revdelete-hide-name' => 'បិទបាំងសកម្មភាពនិងគោលដៅ',
-'revdelete-hide-comment' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9cá\9e·á\9e\85á\9e¶á\9e\9a',
-'revdelete-hide-user' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98â\80\8bá\9e¬á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IP របស់អ្នកកែប្រែ',
+'revdelete-hide-comment' => 'á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\9aá\9e\96á\9e\93á\9f\92á\9e\99á\9e\9bá\9f\8b',
+'revdelete-hide-user' => 'á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98â\80\8bá\9e¬á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IPរបស់អ្នកកែប្រែ',
'revdelete-hide-restricted' => 'ដាក់កំហិតទិន្នន័យពីអ្នកអភិបាល ក៏ដូចជាអ្នកដទៃទៀត',
'revdelete-radio-same' => '(មិនផ្លាស់ប្ដូរ)',
-'revdelete-radio-set' => 'á\9e\94á\9e¶á\9e\91/á\9e\85á\9e¶á\9e\9f',
-'revdelete-radio-unset' => 'á\9e\91á\9f\81',
+'revdelete-radio-set' => 'á\9e\9bá\9e¶á\9e\80á\9f\8b',
+'revdelete-radio-unset' => 'á\9e\98á\9e¾á\9e\9bá\9e\83á\9e¾á\9e\89',
'revdelete-suppress' => 'លាក់ទិន្នន័យពីអ្នកថែទាំប្រព័ន្ធ ព្រមទាំងពីសមាជិកដទៃទៀតផងដែរ',
'revdelete-unsuppress' => 'ដកចេញការដាក់កំហិតលើកំណែដែលបានស្តារឡើងវិញ',
'revdelete-log' => 'មូលហេតុ៖',
'contributions' => 'ការរួមចំណែករបស់{{GENDER:$1|អ្នកប្រើប្រាស់}}',
'contributions-title' => 'ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1',
'mycontris' => 'ការរួមចំណែក',
-'contribsub2' => 'សម្រាប់ $1 ($2)',
+'contribsub2' => 'សម្រាប់{{GENDER:$3|$1}} ($2)',
'nocontribs' => 'គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។',
'uctop' => '(បច្ចុប្បន្ន)',
'month' => 'ខែ៖',
'svg-long-desc' => 'ឯកសារប្រភេទSVG $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3',
'svg-long-desc-animated' => 'ឯកសារជីវចល SVG, ជាធម្មតា $1 × $2 ភិចសែល, ទំហំឯកសារ: $3',
'svg-long-error' => 'ឯកសារ SVG គ្មានសុពលភាព៖ $1',
-'show-big-image' => 'á\9e\9aá\9e¼á\9e\94á\9e\97á\9e¶á\9e\96á\9e\96á\9f\81á\9e\89',
+'show-big-image' => 'á\9e\9aá\9e¼á\9e\94á\9e\97á\9e¶á\9e\96á\9e\8aá\9e¾á\9e\98',
'show-big-image-preview' => 'ទំហំរបស់ការមើលមុននេះ: $1។',
'show-big-image-other' => '{{PLURAL:$2|ភាពម៉ត់|ភាពម៉ត់}}ផ្សេងទៀត៖ $1។',
'show-big-image-size' => '$1 × $2 ភីកសែ',
'tagline' => '{{SITENAME}}',
'help' => '도움말',
'search' => '검색',
-'searchbutton' => '찾기',
+'searchbutton' => '검색',
'go' => '보기',
'searcharticle' => '보기',
'history' => '문서 역사',
'invalidtitle-knownnamespace' => '제목 오류: "$2" 이름공간과 "$3" 텍스트',
'invalidtitle-unknownnamespace' => '제목 오류: 알 수 없는 $1 이름공간 번호와, "$2" 텍스트',
'exception-nologin' => '로그인하지 않음',
-'exception-nologin-text' => '이 문서나 행동은 이 위키에 로그인을 해야 합니다.',
+'exception-nologin-text' => '이 행동을 하거나 이 문서에 접근하려면 [[Special:Userlogin|로그인]]하십시오.',
+'exception-nologin-text-manual' => '이 문서에 접근하거나 이 행동을 하려면 $1하십시오.',
# Virus scanner
'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
# Search results
'searchresults' => '검색 결과',
-'searchresults-title' => '"$1"에 대한 찾기 결과',
+'searchresults-title' => '"$1"에 대한 검색 결과',
'searchresulttext' => '{{SITENAME}}의 검색에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고하세요.',
'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 검색하고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
'searchsubtitleinvalid' => "'''$1''' 검색어로 검색했습니다",
'searchmenu-legend' => '검색 설정',
'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
'searchmenu-new' => "'''이 위키에 \"[[:\$1]]\" 문서를 만드세요!'''",
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾기]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾아보기]]',
'searchprofile-articles' => '본문',
'searchprofile-project' => '도움말 및 프로젝트 문서',
'searchprofile-images' => '멀티미디어',
-'searchprofile-everything' => '모든 문서 찾기',
+'searchprofile-everything' => '모든 문서',
'searchprofile-advanced' => '고급',
'searchprofile-articles-tooltip' => '$1에서 검색',
-'searchprofile-project-tooltip' => '$1에서 찾기',
+'searchprofile-project-tooltip' => '$1에서 검색',
'searchprofile-images-tooltip' => '파일 검색',
-'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기',
+'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 검색',
'searchprofile-advanced-tooltip' => '다음 설정한 이름공간에서 검색',
'search-result-size' => '$1 ({{PLURAL:$2|1 단어|$2 단어}})',
'search-result-category-size' => '{{PLURAL:$1|문서 1개|문서 $1개}}, {{PLURAL:$2|하위 분류 1개|하위 분류 $2개}}, {{PLURAL:$3|파일 1개|파일 $3개}}',
'search-interwiki-more' => '(더 보기)',
'search-relatedarticle' => '관련',
'mwsuggest-disable' => '검색 제안 비활성화',
-'searcheverything-enable' => '모든 이름공간에서 찾기',
+'searcheverything-enable' => '모든 이름공간에서 검색',
'searchrelated' => '관련',
'searchall' => '모두',
'showingresults' => "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}} 입니다.",
'showingresultsheader' => "'''$4''' 검색어에 대하여 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}를 보여 주고 있습니다",
'nonefound' => "'''참고''': 몇개의 이름공간만 기본으로 검색하는 범위입니다. 토론이나 틀 등의 모든 자료를 검색하려면 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
-'search-nonefound' => '찾기 결과가 없습니다.',
+'search-nonefound' => '검색어와 일치하는 결과가 없습니다.',
'powersearch' => '고급 검색',
-'powersearch-legend' => '고급 찾기',
+'powersearch-legend' => '고급 검색',
'powersearch-ns' => '다음 이름공간에서 검색:',
'powersearch-redir' => '넘겨주기 목록',
'powersearch-field' => '검색',
'mypreferences' => '환경 설정',
'prefs-edits' => '편집 횟수:',
'prefsnologin' => '로그인하지 않음',
+'prefsnologintext2' => '사용자 환경 설정을 설정하려면 $1하십시오.',
'changepassword' => '비밀번호 바꾸기',
'prefs-skin' => '스킨',
'skin-preview' => '미리 보기',
# MIME search
'mimesearch' => 'MIME 검색',
-'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 찾습니다.
+'mimesearch-summary' => 'MIME 유형에 해당하는 파일을 검색합니다.
다음 형태로 입력해주세요: 내용종류/하위종류, 예를 들어 <code>image/jpeg</code>',
'mimetype' => 'MIME 종류:',
'download' => '다운로드',
'querypage-disabled' => '이 특수 문서는 성능상의 이유로 비활성화되었습니다.',
# Book sources
-'booksources' => 'ì±\85 찾기',
+'booksources' => 'ì±\85 ì\9e\90ë£\8c',
'booksources-search-legend' => '책 원본 검색',
'booksources-isbn' => 'ISBN:',
'booksources-go' => '찾기',
# Special:LinkSearch
'linksearch' => '바깥 링크 검색',
-'linksearch-pat' => '찾기 패턴:',
+'linksearch-pat' => '검색 패턴:',
'linksearch-ns' => '이름공간:',
'linksearch-ok' => '검색',
'linksearch-text' => '"*.wikipedia.org"와 같이 와일드 카드를 사용할 수 있습니다.
이메일: $PAGEEDITOR_EMAIL
위키: $PAGEEDITOR_WIKI
-이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
+로그인한 상태에서 이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
{{SITENAME}} 알림 시스템
[[Special:Log/delete|삭제 기록]]에서 최근의 삭제와 되살리기 기록을 볼 수 있습니다.",
'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
'undelete-search-title' => '삭제된 문서 검색',
-'undelete-search-box' => '삭제된 문서 찾기',
+'undelete-search-box' => '삭제된 문서 검색',
'undelete-search-prefix' => '다음으로 시작하는 문서 보기:',
'undelete-search-submit' => '검색',
'undelete-no-results' => '삭제된 문서 보존에서 일지하는 문서를 찾을 수 없습니다.',
'unblocked-id' => '$1 차단이 해제되었습니다.',
'blocklist' => '차단된 사용자 목록',
'ipblocklist' => '차단된 사용자',
-'ipblocklist-legend' => '차단 중인 사용자 찾기',
+'ipblocklist-legend' => '차단된 사용자 찾기',
'blocklist-userblocks' => '계정에 대한 차단 숨기기',
'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
'blocklist-addressblocks' => '단일 IP 차단을 숨기기',
'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
'svg-long-desc-animated' => '애니메이션 SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
'svg-long-error' => '잘못된 SVG 파일: $1',
-'show-big-image' => 'ìµ\9cë\8c\80 í\95´ì\83\81ë\8f\84',
+'show-big-image' => 'ì\9b\90본 í\8c\8cì\9d¼',
'show-big-image-preview' => '미리 보기 크기: $1',
'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1',
'show-big-image-size' => '$1 × $2 픽셀',
'redirect' => '파일, 사용자나 판 ID별 넘겨주기',
'redirect-legend' => '파일이나 문서로 넘겨주기',
'redirect-summary' => '이 특수 문서는 파일(파일 이름을 지정), 문서(판 ID를 지정)나 사용자 문서(사용자 ID를 정수로 지정)로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], 혹은 [[{{#Special:Redirect}}/user/101]].',
-'redirect-submit' => '찾기',
+'redirect-submit' => '보기',
'redirect-lookup' => '찾을 종류:',
'redirect-value' => '값:',
'redirect-user' => '사용자 ID',
# Special:FileDuplicateSearch
'fileduplicatesearch' => '중복된 파일 검색',
-'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 찾습니다.',
+'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 검색합니다.',
'fileduplicatesearch-legend' => '중복 검색',
'fileduplicatesearch-filename' => '파일 이름:',
'fileduplicatesearch-submit' => '검색',
--- /dev/null
+<?php
+/** لوری (لوری)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Mogoeilor
+ */
+
+$rtl = true;
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'هوم پیوند زیرخط دار:',
+'tog-justify' => 'فاصله نيائن سی پاراگرافيا',
+'tog-hideminor' => 'قام كردن ويرايشتيا كؤچك مئن آلشتيا تازه',
+'tog-hidepatrolled' => 'قام كردن ويرايشتيا تیه دیار کرده مئن آلشتيا تازه',
+'tog-newpageshidepatrolled' => 'بلگیا تیه دیار کرده نه مئن نوم گه بلگیا تازه قام کو',
+'tog-extendwatchlist' => 'سیل برگه نه سی نشو دئن تمام آلشتیا واکو نه فقط سی بیشتر تازه باوا.',
+'tog-usenewrc' => 'دسه بنی آلشتیا وا بلگه د آلشتیا تازه و سیل برگ',
+'tog-numberheadings' => 'سربلگه خود شماره گر',
+'tog-showtoolbar' => 'نوار اوزار ويرايشت نشون بيه',
+'tog-editondblclick' => 'بلگيا نه وا دوبار پورنين ويرايشت بكيد',
+'tog-editsection' => 'ممكن بيئن ويرايشت بشخيا وا [ويرايشت]',
+'tog-editsectiononrightclick' => 'بهر ویرایشت نه وا راس کلیک کردن د بهر عنوانیا فعال کو',
+'tog-showtoc' => 'چیا مئن جدول نشو بیه',
+'tog-rememberpassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'بلگیایی که مه راس کمه و فایلیایی که مه سوار کمه اضاف کو د سیل برگه مه',
+'tog-watchdefault' => 'بلگیا و فایلایی که مه ویرایشت کمه اضاف کو د سیل برگم',
+'tog-watchmoves' => 'بلگیاو فایلیایی که مه جاوه جا کمه د سیل برگم اضاف کو',
+'tog-watchdeletion' => 'بلگیا و فایلایی که مه پاک کمه اضاف کو د سیل برگم',
+'tog-minordefault' => 'همه ویرایشتیا کؤچک نه وا پیش فرض بیئن نشو دار کو.',
+'tog-previewontop' => 'پیش سیل نه دما جعوه ویرایشت نشو بیئه',
+'tog-previewonfirst' => 'پیش سیل نه د اولین ویرایشت نشو بیئه',
+'tog-enotifusertalkpages' => 'وختی که بلگه گپسن کارور آلشت پیدا کرد منه وا ایمیل خور کو',
+'tog-shownumberswatching' => 'انازه کاروریایی که د حالت دیئنن نشو بیه',
+'tog-oldsig' => 'امضايی هيئش:',
+'tog-uselivepreview' => 'د پیش سیل زنه استفاده کو',
+'tog-watchlisthideown' => 'قام كو ويرايشت منه د',
+'tog-diffonly' => 'بلگیایی که شومل فرخیا هارن نشون نیه',
+'tog-showhiddencats' => 'دسه يا قام بيئنه نشون بيه',
+
+'underline-always' => 'هميشه',
+'underline-never' => 'هيژوخت',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'راساگه فونت شلک نه ویرایشت کو',
+'editfont-default' => 'مرورگر پیش بینی بیه',
+'editfont-sansserif' => 'سان سریف فونت',
+'editfont-serif' => 'فونت سريف',
+
+# Dates
+'sunday' => 'يه شمه',
+'monday' => 'دوشمه',
+'tuesday' => 'سه شمه',
+'wednesday' => 'چارشمه',
+'thursday' => 'پن شمه',
+'friday' => 'جمه',
+'saturday' => 'شمه',
+'sun' => 'يه شمه',
+'mon' => 'دوشمه',
+'tue' => 'سه شمه',
+'wed' => 'چارشمه',
+'thu' => 'پن شمه',
+'fri' => 'جمه',
+'sat' => 'شمه',
+'january' => 'جانويه',
+'february' => 'فبريه',
+'march' => 'مارش',
+'april' => 'آبريل',
+'may_long' => 'ما',
+'june' => 'جوئن',
+'july' => 'جولای',
+'august' => 'اگوست',
+'september' => 'سپتامر',
+'october' => 'اكتور',
+'november' => 'نوامر',
+'december' => 'دسامر',
+'january-gen' => 'جانويه',
+'february-gen' => 'فوريه',
+'march-gen' => 'مارش',
+'april-gen' => 'آوريل',
+'may-gen' => 'ما',
+'june-gen' => 'جوئن',
+'july-gen' => 'جولای',
+'august-gen' => 'اگوست',
+'september-gen' => 'سپتامر',
+'october-gen' => 'اكتور',
+'november-gen' => 'نوامر',
+'december-gen' => 'دسامر',
+'jan' => 'ژانويه',
+'feb' => 'فبريه',
+'mar' => 'مارش',
+'apr' => 'آبريل',
+'may' => 'ما',
+'jun' => 'جوئن',
+'jul' => 'جولا',
+'aug' => 'اوگوست',
+'sep' => 'سپتامر',
+'oct' => 'اكتور',
+'nov' => 'نوامر',
+'dec' => 'دسامر',
+'january-date' => 'جانويه $1',
+'february-date' => 'فوريه $1',
+'march-date' => 'مارس $1',
+'april-date' => 'آوريل $1',
+'may-date' => 'ما $1',
+'june-date' => 'جوئن $1',
+'july-date' => 'جولاي $1',
+'august-date' => 'اوت $1',
+'september-date' => 'سپتامر $1',
+'october-date' => 'اكتور $1',
+'november-date' => 'نوامر $1',
+'december-date' => 'دسامر $1',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|دسه|دسه يا}}',
+'category_header' => 'بلگيا مئن دسه "$1"',
+'subcategories' => 'زيردسه يا',
+'category-media-header' => 'رسانه د دسه "$1"',
+'category-empty' => 'ای دسه واقعن شومل هیژ بلگه ای یا رسانه ای نی',
+'hidden-categories' => '{{PLURAL:$1|دسته قام بيه|دسته يا قام بيه}}',
+'hidden-category-category' => 'دسه یا قام بیه',
+'category-subcat-count' => '{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای زیردسه, خارج د $2 کل.}}',
+'category-article-count' => '{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, خارج د $2 کل.}}',
+'listingcontinuesabbrev' => 'دماله',
+'index-category' => 'بلگيا سيائه دار',
+'noindex-category' => 'بلگيا بی سيائه',
+
+'about' => 'دباره',
+'article' => 'محتوا بلگه',
+'newwindow' => '(نيمدری تازه وا کو)',
+'cancel' => 'رد كردن',
+'moredotdotdot' => 'بيشتر',
+'morenotlisted' => 'ای ليست كامل نبيه',
+'mypage' => 'بلگه',
+'mytalk' => 'چك چنه',
+'anontalk' => 'دباره نشونی ای آی پی قصه بكيد',
+'navigation' => 'ناوگشتن',
+'and' => ' و',
+
+# Cologne Blue skin
+'qbfind' => 'فهمسن،جسن',
+'qbbrowse' => 'قرض گرتن',
+'qbedit' => 'ويرايشت',
+'qbpageoptions' => 'ای بلگه',
+'qbmyoptions' => 'بلگيا مه',
+'qbspecialpages' => 'بلگيا ويجه',
+'faq' => 'اف ای كيو',
+'faqpage' => 'پروجه:اف اي كيو',
+
+# Vector skin
+'vector-action-addsection' => 'موضوع اضاف بكيد',
+'vector-action-delete' => 'حذف بكيد',
+'vector-action-move' => 'جاوه جا بوئيت',
+'vector-action-protect' => 'حمايت بكيد',
+'vector-action-undelete' => 'حذف نبيئني',
+'vector-action-unprotect' => 'حمايت آلشت بكيد',
+'vector-view-create' => 'راس كردن',
+'vector-view-edit' => 'ويرايشت',
+'vector-view-history' => 'ديئن ويرگار',
+'vector-view-view' => 'حنن',
+'vector-view-viewsource' => 'سرچشمه نه بوينيت',
+'actions' => 'جمشت',
+'namespaces' => 'نوم جا',
+'variants' => 'آلشت ونی يا',
+
+'navigation-heading' => 'منو ناوگشتن',
+'errorpagetitle' => 'غلط',
+'returnto' => 'ورگشت وه $1.',
+'tagline' => 'د {{SITENAME}}',
+'help' => 'هومياری',
+'search' => 'پی چوری',
+'searchbutton' => 'پی جوری',
+'go' => 'رو',
+'searcharticle' => 'رو',
+'history' => 'ويرگار بلگه',
+'history_short' => 'ويرگار',
+'updatedmarker' => 'د آخرین دیئن مه روزآمد کو',
+'printableversion' => 'نسقه چاپ بيئنی',
+'permalink' => 'چسب ون هميشئی',
+'print' => 'چاپ كردن',
+'view' => 'ديئن',
+'edit' => 'ويرايشت',
+'create' => 'راس كردن',
+'editthispage' => 'ويرايشت ای بلگه',
+'create-this-page' => 'راس كردن ای بلگه',
+'delete' => 'حذف كردن',
+'deletethispage' => 'ای بلگه نه حذف بكيد',
+'undeletethispage' => 'ای بلگه نه حذف نكيد',
+'protect' => 'حمايت بكيد',
+'protect_change' => 'آلشت بكيد',
+'protectthispage' => 'ای بلگه نه حفاظت بكيد',
+'unprotect' => 'حمايت آلشت بكيد',
+'unprotectthispage' => 'حفاظت دی بلگه نه آلشت بكيد',
+'newpage' => 'بلگه نو',
+'talkpage' => 'دباره ای بلگه قصه بكيد',
+'talkpagelinktext' => 'وت و واچ',
+'specialpage' => 'بلگه ويجه',
+'personaltools' => 'اوزاريا شصقی',
+'postcomment' => 'بشه تازه',
+'articlepage' => 'ديئن محتوا بلگه',
+'talk' => 'گپ',
+'views' => 'ديئنيا',
+'toolbox' => 'اوزاريا',
+'userpage' => 'ديئن بلگه كارور',
+'projectpage' => 'ديئن بلگه پروجه',
+'imagepage' => 'ديئن بلگه فايل',
+'mediawikipage' => 'ديئن بلگه پيغوم',
+'templatepage' => 'ديئن بلگه قالو',
+'viewhelppage' => 'ديئن بلگه هومياری',
+'categorypage' => 'ديئن بلگه دسه بنی',
+'viewtalkpage' => 'ديئن چك چنه يا',
+'otherlanguages' => 'د زونيا هنی',
+'redirectedfrom' => '(ورگشتن د$1)',
+'lastmodifiedat' => 'ای بلگه تازه ايا وضع آلشت بيه د $1, د $2.',
+'viewcount' => 'ای بلگه قاول دسترسی بيه {{PLURAL:$1|once|$1 times}}.',
+'protectedpage' => 'بلگه حفاظت بيه',
+'jumpto' => 'پئرستن د',
+'jumptonavigation' => 'ناوگشتن',
+'jumptosearch' => 'پی جوری',
+'pool-errorunknown' => 'خطا ناشناس',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
+'aboutsite' => 'دباره {{SITENAME}}',
+'aboutpage' => 'پروجه:دباره',
+'copyrightpage' => '{{ns:پروجه}}:کپی رایت',
+'currentevents' => 'پيشومدل تازه باو',
+'currentevents-url' => 'پروجه:پيشومدل تازه باو',
+'disclaimers' => 'منكرون',
+'disclaimerpage' => 'پروجه:منكر بيئن كاروريا',
+'edithelp' => 'هومياری سی ويرايشت',
+'helppage' => 'هومياری:محتوا',
+'mainpage' => 'سرآسونه',
+'mainpage-description' => 'سرآسونه',
+'policy-url' => 'پروجه:خط و مش',
+'portal' => 'تلگه جمی',
+'portal-url' => 'پروجه:تلگه جمی',
+'privacy' => 'رهبرد رازداری',
+'privacypage' => 'پروجه: خط مشی راز واداشتن',
+
+'badaccess' => 'خطا :اجازه بئیر',
+'badaccess-group0' => 'شما اجازه انجوم کاری که حاستیت نارین',
+
+'versionrequired' => 'یه نسقه د نیازمنیا ویکی رسانه
+$1',
+
+'ok' => 'خوئه',
+'retrievedfrom' => 'بازيافته د"$1"',
+'youhavenewmessages' => 'شما داريت $1($2)',
+'newmessageslink' => 'پيغوما تازه',
+'newmessagesdifflink' => 'آلشت آخری',
+'youhavenewmessagesmanyusers' => 'شما $1 د خيلی كاروريا داريت ($2).',
+'newmessagesdifflinkplural' => 'آخر {{PLURAL:$1|change|changes}}',
+'youhavenewmessagesmulti' => 'شما یه گل پیغوم تازه د $1 داریتو',
+'editsection' => 'ويرايشت',
+'editold' => 'ويرايشت',
+'viewsourceold' => 'سرچشمه نه بوينيت',
+'editlink' => 'ويرايشت',
+'viewsourcelink' => 'سرچشمه نه بوينيت',
+'editsectionhint' => 'ويرايشت يه بشق:$1',
+'toc' => 'محتوايا',
+'showtoc' => 'نشو دائن',
+'hidetoc' => 'قام كردن',
+'collapsible-collapse' => 'جم كردن',
+'collapsible-expand' => 'وا كردن',
+'thisisdeleted' => 'دیئن یا ورگنين $1?',
+'viewdeleted' => 'دیئن$1?',
+'feedlinks' => 'غذا دهنه:',
+'site-rss-feed' => 'خورخو RSS سی $1',
+'site-atom-feed' => 'خور حون Atom سی $1',
+'page-rss-feed' => 'خورخو RSS سی «$1»',
+'page-atom-feed' => 'خور حون Atom سی $1',
+'red-link-title' => '$1(بلگه وجود ناره)',
+'sort-descending' => 'كم بيئن منظم',
+'sort-ascending' => 'زياد بيئن منظم',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'بلگه',
+'nstab-user' => 'بلگه كارور',
+'nstab-media' => 'بلگه رسانه',
+'nstab-special' => 'بلگيا ويجه',
+'nstab-project' => 'بلگه پروجه',
+'nstab-image' => 'فاين',
+'nstab-mediawiki' => 'پيغوم',
+'nstab-template' => 'قالو',
+'nstab-help' => 'بلگه هومياری',
+'nstab-category' => 'دسه',
+
+# Main script and global functions
+'nosuchaction' => 'چنو كاری وجود ناره',
+'nosuchspecialpage' => 'چنو بلگه خاصی وجود ناره',
+
+# General errors
+'error' => 'خطا',
+'databaseerror' => 'خطا د جاگه دونسمنيا',
+'databaseerror-textcl' => 'خطاجست گرتن پايگاه دونسمنيا پيشومد كرده',
+'databaseerror-query' => 'نوم گشتن: $1',
+'databaseerror-function' => 'تابع:$1',
+'databaseerror-error' => 'خطا: $1',
+'laggedslavemode' => 'زنهار:بلگه شايت شومل روزامديا تازه باو نبوئه',
+'readonly' => 'جاگه دونسمنيا بسه بيه',
+'missing-article' => 'پاگا داده نتونه بلگه ای با پیدا بکه بجوره.که نومش $1 و $2 هئ.
+معمولند یه سی یه که فرخ ویرگار رئته دش بیه پاک بیه.',
+'missingarticle-rev' => '(دوواره ديئن#: $1)',
+'missingarticle-diff' => '(فرخ: $1، $2)',
+'internalerror' => 'خطا داخلی',
+'internalerror_info' => 'خطا داخلی:$1',
+'filecopyerror' => 'نبوئه فایل $1 د $2 کپی بوئه',
+'filerenameerror' => 'نبوئه فایل $1 د $2 نوم آلشت بوئه',
+'filedeleteerror' => 'نبوئه فایل $1 پاک بوئه',
+'filenotfound' => 'نتونیت فایل $1 پیدا بکید',
+'formerror' => 'خطا:نبوئه فرم وه مو بئيت',
+'cannotdelete-title' => 'نبوئه بلگه $1 حذف بو',
+'badtitle' => 'موضو گن',
+'badtitletext' => 'عنوان بلگه حاسته بیه معتور نی،یا یه گل مئن زونی یا مئن ویکی عنوان غلطه.
+یه شایت شومل یکی با یا بیشتر کاراکتریا نبوئه سی ای موضوعیا استفاده بوئن',
+'viewsource' => 'سرچشمه نه بوينيت',
+'viewsource-title' => 'سرچشمه $1 بوينيت',
+'mycustomcssprotected' => 'شما حق ناریت ای بلگه سی اس اس نه ویرایشت بکید',
+'mycustomjsprotected' => 'شما حق ناریت ای بلگه جاوا اسکریپت نه ویرایشت بکید',
+'myprivateinfoprotected' => 'شما حق ناریت دونسمنیا خصوصی نه ویرایشت بکید',
+'mypreferencesprotected' => 'شما حق ناریت ویجگی یا هنی تونه ویرایشت بکید',
+'ns-specialprotected' => 'بلگیا ویجه نتونن ویرایشت بوئن',
+'exception-nologin' => 'نبوئه وارد بوئيد',
+
+# Virus scanner
+'virus-scanfailed' => 'زل گشتن شکست حرد',
+'virus-unknownscanner' => 'ويروس كش ناآشگار',
+
+# Login and logout pages
+'welcomeuser' => 'خوش اومايت،$1!',
+'yourname' => 'نوم كاروری:',
+'userlogin-yourname' => 'نوم كاروری',
+'userlogin-yourname-ph' => 'نوم كاروری تو نه وارد بكيد',
+'createacct-another-username-ph' => 'نوم كاروری ته وارد كو',
+'yourpassword' => 'پاسورد:',
+'userlogin-yourpassword' => 'رمز',
+'userlogin-yourpassword-ph' => 'رمز بزه',
+'createacct-yourpassword-ph' => 'رمزه بزه',
+'yourpasswordagain' => 'دوواره رمز بزه',
+'createacct-yourpasswordagain' => 'رمز محكم كو',
+'createacct-yourpasswordagain-ph' => 'دوواره رمز بزه',
+'remembermypassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
+'userlogin-remembermypassword' => 'منه مئن سيستم وادار',
+'userlogin-signwithsecure' => 'د وصل بيئن امن استفاده كو',
+'password-change-forbidden' => 'شما نتونید پاسوردیانه د ای ویکی آلشت بکید',
+'login' => 'اومائن',
+'nav-login-createaccount' => ' اومائن د سيستم/راس كردن حساو',
+'loginprompt' => 'شما وا کوکیانه سی اومائن د {{SITENAME}} کوکیانه فعال بکید.',
+'userlogin' => ' اومائن د سيستم/راس كردن حساو',
+'userloginnocreate' => 'اومائن',
+'logout' => 'رئتن',
+'userlogout' => 'د سيستم دراومائن',
+'notloggedin' => 'نبوئه وارد بوئيد',
+'userlogin-noaccount' => 'یه گل حساو ناریت؟',
+'userlogin-joinproject' => 'وصل بوييت {{SITENAME}}',
+'nologin' => 'حساو كاروری ناريت؟$1',
+'nologinlink' => 'يه گل حساو راست بكيد',
+'createaccount' => 'حساو راست بكيد',
+'gotaccount' => 'ایسنی حساو کاروری داریتو؟$1',
+'gotaccountlink' => 'اومائن',
+'userlogin-resetlink' => 'جزییات وامین اومائن تونه د ویر بردیته',
+'userlogin-resetpassword-link' => 'هنی رمز وارد بكيد',
+'helplogin-url' => 'هومياری:د حالت اومائن د سيستم',
+'userlogin-createanother' => 'يه گل حساوهنی راست بكيد',
+'createacct-join' => 'دونسمنيا دباره خوتونه د هار وارد بكيد',
+'createacct-another-join' => 'دونسمنیا یه گل حساو د هار وارد بکید',
+'createacct-emailrequired' => 'نشونی ايميل',
+'createacct-emailoptional' => 'نشونی ايميل',
+'createacct-email-ph' => 'نوم نشون ايميلتونه وارد بكيت',
+'createacct-another-email-ph' => 'يه گل ايميل وارد بكيت',
+'createacct-realname' => 'نوم راستكی(مژبوری نيئ)',
+'createaccountreason' => 'دليل',
+'createacct-reason' => 'دليل',
+'createacct-reason-ph' => 'سی چی شما داريتو يه گل حساو هنی راس می كيد',
+'createacct-captcha' => 'وارسی امنيت دار بين',
+'createacct-imgcaptcha-ph' => 'متنی نه كه د وارو ميئنيت وارد بكيد',
+'createacct-submit' => 'حساو خوتونه راس بكيد',
+'createacct-another-submit' => 'يه گل حساوهنی راست بكيد',
+'createacct-benefit-heading' => '{{نوم مالگه}} وه دس خلکی چی شما راس بیه.',
+'createacct-benefit-body1' => '{{جمی:$1|ویرایشت|ویرایشتا}}',
+'badretype' => 'پاسوردی که شما دئیته مطاوقت ناره',
+'userexists' => 'کارور نوم که وارد بیه د ایسه استفاده بوئه.
+لطف بکید یه گل نوم هنی انتخاو بکید',
+'loginerror' => 'خطا اومائن د سيستم',
+'createacct-error' => 'خطا راس كردن حساو',
+'createaccounterror' => 'نبوئه حساو راس بكيد:$1',
+'loginsuccesstitle' => 'اومائن د سيستم موفق بی',
+'nosuchusershort' => 'چنو کاروری وا ای نوم $1 نی ئیش.
+نیسنن تونه دوواره نئری بکیتو',
+'nouserspecified' => 'شما باید یه نوم کارور اختصاص بئیتو',
+'login-userblocked' => 'کارور قلف بیه.وامین اومائن اجازه نی ئن',
+'wrongpassword' => 'پاسورد غلط وارد بیه.
+هنی تلاش بکید',
+'wrongpasswordempty' => 'پاسوردی که دئیت حالیه.د نؤ تلاش بکیت',
+'passwordtooshort' => 'پاسورد با حداقل {{PLURAL:$1|1 character|$1 characters}} با',
+'password-name-match' => 'پاسوردتو با د نوم کاروریتو فرخ داشتوه',
+'password-login-forbidden' => 'وه کار گرتن ای پاسوردو نوم کاروری ممنو بیه.',
+'mailmypassword' => 'رمز هنی نه ايميل بكيد',
+'passwordremindertitle' => 'پاسورد موقت تازه سی {{SITENAME}}',
+'noemailcreate' => 'شما باید یه نشونی نومه معتور فراهم بکید',
+'mailerror' => 'خطا داره کل موئه:$1',
+'emailconfirmlink' => 'نشونی ايملتو نه محكم بكيد',
+'emaildisabled' => 'ای مالگه نتونه ایمیل بفرسنه',
+'accountcreated' => 'حساو راس بی',
+'createaccount-title' => 'حساو راس کرده سی {{SITENAME}}',
+'login-abort-generic' => 'اومائن وامین تو شکست حرد-شکست حرده',
+'loginlanguagelabel' => 'زون:$1',
+
+# Email sending
+'user-mail-no-addy' => 'سی کل کردن ایمیل بی نشونه ایمیل صورت گرته',
+
+# Change password dialog
+'resetpass' => 'پاسورد نه آلشت بكيت',
+'resetpass_header' => 'پاسورد حساوتونه آلشت بکید',
+'oldpassword' => 'پاسورد قدیمی:',
+'newpassword' => 'پاسورد تازه:',
+'retypenew' => 'رمز تازه نه دوواره بنیسید:',
+'resetpass_submit' => 'پاسور بنیت و وامین بیایت',
+'changepassword-success' => 'پاسورد شما وا موفقیت آلشت بی',
+'resetpass_forbidden' => 'پاسوردیا نتونن آلشت بوئن',
+'resetpass-submit-loggedin' => 'پاسورد نه آلشت بكيت',
+'resetpass-submit-cancel' => 'رد كردن',
+'resetpass-temp-password' => 'رمز موقت:',
+
+# Special:PasswordReset
+'passwordreset-legend' => 'د نۈ وارد كردن رمز',
+'passwordreset-username' => 'نوم كاروری:',
+'passwordreset-email' => 'نشونی ايميل',
+'passwordreset-emailsent' => 'پاسورد هنی سی ایمیل کل بیه.',
+
+# Special:ChangeEmail
+'changeemail' => 'ایمیل تو نه آلشت بکید',
+'changeemail-header' => 'ایمیل حساوتونه آلشت بکید',
+'changeemail-oldemail' => 'نشونی ایمیل تازه باو:',
+'changeemail-newemail' => 'نشونی ایمیل تازه',
+'changeemail-none' => '(هيش كوم)',
+'changeemail-submit' => 'آلشت کردن ایمیل',
+'changeemail-cancel' => 'رد كردن',
+
+# Edit page toolbar
+'bold_sample' => 'متن توپر بيه',
+'bold_tip' => 'متن توپر بيه',
+'italic_sample' => 'نوشته كج كوله',
+'italic_tip' => 'نوشته كج كوله',
+'link_sample' => 'عنوان لينك',
+'link_tip' => 'لینک مئن ون',
+'extlink_sample' => 'http://www.example.com نوم ديس ون',
+'extlink_tip' => 'هوم پیوند خارجی(د ویر داشتو)',
+'headline_sample' => 'سرخط نوشته',
+'headline_tip' => 'قدم 2 خط سر ون',
+'nowiki_sample' => 'د ایچه یه گل متن بی شلک وارد بکید',
+'nowiki_tip' => 'شلک ویکی نه ندید بگر',
+'image_tip' => 'فایل محاط بيه',
+'media_tip' => 'فایل هوم پیوند',
+'sig_tip' => 'امضا شما و برچسو وخت',
+'hr_tip' => 'خط افق ونه(سوا سوا دش استفاده کو)',
+
+# Edit pages
+'summary' => 'چكسته',
+'minoredit' => 'يه ويرايشت كؤچكيه',
+'watchthis' => 'ديئن ای بلگه',
+'savearticle' => 'بلگه ضبط بوئه',
+'preview' => 'پيش سيل',
+'showpreview' => 'پيش نمائش نشون بيئه',
+'showlivepreview' => 'پیش سیل زنه',
+'showdiff' => 'آلشتيانه نشون بيئه',
+'anoneditwarning' => 'زنهار شما وامین نیومایته.
+نشونی آی پی تو د ویرگار ویرایشت ای بلگه ضفط بوئه',
+'missingcommenttext' => 'لطفن د ایچه نظر بیئتو',
+'summary-preview' => 'چکسته پیش سیل:',
+'blockedtitle' => 'كارور قلف بيه',
+'blockednoreason' => 'هیژ دلیلی دئه نبیه',
+'whitelistedittext' => 'شما باید $1 سی ویرایشت بلگیا',
+'nosuchsectiontitle' => 'نبوئه بشخ پیدا بوئه',
+'loginreqtitle' => 'وامین اومائن لازمه',
+'loginreqlink' => 'اومائن',
+'accmailtitle' => 'پاسورد کل بی',
+'newarticle' => 'تازه',
+'newarticletext' => 'شما وادما هوم پیوندی هئیت که وجود ناره.
+سی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[[{{MediaWiki:Helppage}}|]] سی دونسمنی بیشتر بکید).
+ار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن مرورگر تونه بپورنیت.',
+'noarticletext' => 'د تازه یا د ای بلگه متن نی.
+شما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span>
+ [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.',
+'noarticletext-nopermission' => 'د تازه یا د ای بلگه متن نی.
+شما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span> اما شما حق ناریتو ای بلگه نه راس بکیت',
+'updated' => '(تازه بيه)',
+'note' => "'''نيسنن:'''",
+'previewnote' => 'فقط ای پیش سیل د ویرتو با.
+آلشتیاتو هنی ذخیره نبیه.',
+'continue-editing' => 'رو د راساگه ویرایشت',
+'editing' => 'د حالت ويرايشت$1',
+'creating' => 'راس كردن $1',
+'editingsection' => 'د حال ویرایشت$1(بشخ)',
+'editingcomment' => 'د حال ویرایشت$1(بشخ تازه)',
+'yourtext' => 'متن شما',
+'yourdiff' => 'فرخيا',
+'templatesused' => '{{جمی:$1|قالو|قالویا}}د ای بلگه استفاده بیه:',
+'template-protected' => '(حمايت بيه)',
+'template-semiprotected' => '(نيم-حفاظت بيه)',
+'hiddencategories' => 'ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ',
+'permissionserrors' => 'خطا اجازه دئین',
+'permissionserrorstext-withaction' => 'شما سی $2 اجازه ناریت
+سی دمال کردن{{PLURAL:$1|reason|reasons}}:',
+'recreate-moveddeleted-warn' => "'''زنهار شما بلگه ای که وادما پاک بیه هنی راس کردیته'''
+شما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.
+پاک بیئن و جمشت سی ای بلگه سی راحتی تو فراهم بیه:",
+'moveddeleted-notice' => 'ای بلگه پاک بیه.
+پاک بین و جمشت ای بلگه سی سرچشمه دئین فراهم بیه',
+'postedit-confirmation' => 'ویرایشتتو ذخیره بی',
+
+# Content models
+'content-model-wikitext' => 'ويكی متن',
+'content-model-text' => 'متن ساده',
+'content-model-javascript' => 'جاوا اسكريپت',
+'content-model-css' => 'سی اس اس',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => 'زنئار قالو شومل انازه ای یه که فره گپه.پاره ای د قالویا نه د بر نگره',
+'post-expand-template-inclusion-category' => 'بلگیا شومل قالوی ین که انازش د حد اومائه وه در',
+'post-expand-template-argument-warning' => 'زنهار ای بلگه شومل حداقل یه قالو سی چک چنه یه که انازه فره گپه.
+گپسنیا پاک بینه.',
+'post-expand-template-argument-category' => 'بلگه شومل قالو چک چنیا د بین رئته',
+
+# History pages
+'viewpagelogs' => 'سی ای بلگه بوینتو.',
+'currentrev-asof' => 'آخرين دووار ديئن چی $1',
+'revisionasof' => 'دوواره ديئن $1',
+'revision-info' => 'دوواره سیل بیه چی $1 وا $2',
+'previousrevision' => 'اصلاح دمايی',
+'nextrevision' => 'تازه ترن دوبار دیئن',
+'currentrevisionlink' => 'آخرین دوواره دیئن',
+'cur' => 'تازه باو',
+'next' => 'نيایی',
+'last' => 'دمايی',
+'page_first' => 'اولی',
+'page_last' => 'آخر',
+'history-fieldset-title' => 'ویرگار مرور ون',
+'history-show-deleted' => 'فقط پاك بيه',
+'histfirst' => 'قديمي تري',
+'histlast' => 'تازه تري',
+'historyempty' => '(حالی)',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 د
+$2',
+
+# Revision deletion
+'rev-delundel' => 'آلشت وضئيت ديئن',
+'rev-showdeleted' => 'نشو دائن',
+'revdelete-show-file-submit' => 'هری',
+'revdelete-radio-set' => 'هری',
+'revdelete-radio-unset' => 'نه',
+'revdelete-log' => 'دلیل:',
+'revdel-restore' => 'آلشت وضئيت ديئن',
+'revdel-restore-deleted' => 'پاك كردن مراجعيا',
+'revdel-restore-visible' => 'مراجعات ديئنی',
+'pagehist' => 'ويرگار بلگه',
+'deletedhist' => 'ویرگار پاک بیه',
+'revdelete-reasonotherlist' => 'دلیل هنی',
+'revdelete-edit-reasonlist' => 'دلیلیا پاک کردنه نه ویرایشت بکید',
+
+# History merging
+'mergehistory-from' => 'بلگه سرچشمه:',
+'mergehistory-into' => 'بلگه مقصد:',
+'mergehistory-reason' => 'دليل:',
+
+# Merge log
+'revertmerge' => 'بی لوئه',
+
+# Diffs
+'history-title' => 'دوواره دیئن ویرگار$1',
+'lineno' => 'خط $1:',
+'compareselectedversions' => 'دوبار دیئنیایی که انتخاو بینه مقایسه بکیتو',
+'editundo' => 'رد كردن',
+'diff-empty' => '(بی فرق)',
+'diff-multi' => '({{جمی:$1|یه گل دوواره دیئن مینجایی|$1مینجا دوواره دیئنیا}} وا {{جمی:$2|یه کارور|$2 کاروریا}} نشو دئه نی)',
+
+# Search results
+'searchresults' => 'نتيجه يا پی جوری',
+'searchresults-title' => 'نتيجه يا پی جوری سی "$1"',
+'searchsubtitleinvalid' => 'شما پی جوریت سی',
+'prevn' => 'وادما {{PLURAL:$1|$1}}',
+'nextn' => 'نيايی {{PLURAL:$1|$1}}',
+'prevn-title' => 'پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
+'nextn-title' => 'نيايی $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
+'shown-title' => 'نشون دائن $1 {{PLURAL:$1|نتيجه|نتيجه}} سی همه بلگه',
+'viewprevnext' => 'ديئن ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'گزينه يا هنی پی جوری',
+'searchmenu-exists' => "'''ایچه بلگه ای هئ وه نوم\"[[:\$1]]\" که ها د ای ویکی'''",
+'searchmenu-new' => "'''ای بلگه نه راس كو \"[[:\$1]]\" د ای ويكي!'''",
+'searchprofile-articles' => 'بلگيا محتوا',
+'searchprofile-project' => 'بلگيا هومياری پروجه',
+'searchprofile-images' => 'رسانيا جمی',
+'searchprofile-everything' => 'همه چی',
+'searchprofile-advanced' => 'پيشرفته',
+'searchprofile-articles-tooltip' => 'بگرد مئن $1',
+'searchprofile-project-tooltip' => 'بگرد مئن $1',
+'searchprofile-images-tooltip' => 'بگرد سی فايليا',
+'searchprofile-everything-tooltip' => 'همه محتوا نه پی جوری كو (شاملا بلگيا چك چنه)',
+'searchprofile-advanced-tooltip' => 'نوم جايا نوم ديار بگرد',
+'search-result-size' => '$1 ({{PLURAL:$2|بی واچه يل|واچه تكی|واچه يل|$2 واچه يل|$2 واچه}})',
+'search-result-category-size' => '{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 فایل|$3 فایلیا}})',
+'search-redirect' => '(ورگشتن $1)',
+'search-section' => '(بشق $1)',
+'search-suggest' => 'منظورت يه بی:$1',
+'search-interwiki-more' => '(بیشتر)',
+'search-relatedarticle' => 'مرتوط',
+'searchrelated' => 'مرتوط',
+'searchall' => 'همه',
+'showingresultsheader' => "{{PLURAL:$5|نتيجه '''$1''' د'''$3'''|نتيجه يا '''$1 - $2''' د'''$3'''}} سيli'''$4'''",
+'search-nonefound' => 'هیژ نتیجه یی سی پی جست تو مطاوقت نکرده',
+'powersearch' => 'پی جوری پیشبرده',
+'powersearch-legend' => 'پی جوری پیشبرده',
+'powersearch-field' => 'پی جوری سی',
+'powersearch-togglelabel' => 'چك كردن:',
+'powersearch-toggleall' => 'همه',
+'powersearch-togglenone' => 'هيش كوم',
+'search-external' => 'پی جوری د در',
+
+# Preferences page
+'preferences' => 'خصوصيات هنی',
+'mypreferences' => 'خصوصيات هنی',
+'prefs-edits' => 'شماره ویرایشتا:',
+'prefsnologin' => 'نبوئه وارد بوئيد',
+'changepassword' => 'پاسورد نه آلشت بكيت',
+'prefs-skin' => 'پوست',
+'skin-preview' => 'پیش سیل',
+'prefs-watchlist' => 'سیل برگ',
+'prefs-misc' => 'شيوسن',
+'prefs-resetpass' => 'پاسورد نه آلشت بكيت',
+'saveprefs' => 'ذخيره كردن',
+'prefs-editing' => 'د حالت ويرايشت',
+'rows' => 'رديفيا:',
+'columns' => 'ستينا:',
+'searchresultshead' => 'پی جوری',
+'timezonelegend' => 'وخت راساگه',
+'localtime' => 'وخت ولاتی:',
+'timezoneuseserverdefault' => 'وخت راساگه',
+'servertime' => 'وخت سرور:',
+'timezoneregion-africa' => 'افرقا',
+'timezoneregion-america' => 'امركا',
+'timezoneregion-antarctica' => 'قطو هار ونه',
+'timezoneregion-arctic' => 'قطو شمال',
+'timezoneregion-asia' => 'آسيا',
+'timezoneregion-atlantic' => 'جهون آو آتلانتیک',
+'timezoneregion-australia' => 'استراليا',
+'timezoneregion-europe' => 'اوروپا',
+'timezoneregion-indian' => 'جهوناو هند',
+'timezoneregion-pacific' => 'جهوناو آروم',
+'prefs-searchoptions' => 'پی جوری',
+'prefs-namespaces' => 'نوم جایا',
+'default' => 'پيش فرض',
+'prefs-files' => 'فايلا',
+'youremail' => 'ايميل:',
+'yourrealname' => 'نوم راستكی:',
+'yourlanguage' => 'زون:',
+'email' => 'پیومک برقی',
+'prefs-help-email' => 'نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت',
+'prefs-help-email-others' => 'شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.
+نشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.',
+'prefs-editor' => 'ويرايشتگر',
+'prefs-preview' => 'پیش سیل',
+
+# User rights
+'userrights-reason' => 'دليل:',
+
+# Groups
+'group' => 'گرو',
+'group-bot' => 'بتیا',
+'group-all' => '(همه)',
+
+# Special:Log/newusers
+'newuserlogpage' => 'راس بیه وا کارور',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'ای بلگه نه ويرايشت بكيد',
+
+# Recent changes
+'nchanges' => '$1 {{جمی:$1|آلشت|آلشتیا}}',
+'recentchanges' => 'تغيريا تازه',
+'recentchanges-legend' => 'گزينه يا آلشتيا تازه',
+'recentchanges-feed-description' => 'دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.',
+'recentchanges-label-newpage' => 'ای ويرايشت يه بلگه تازه راس كرده',
+'recentchanges-label-minor' => 'يه ويرايشت كؤچكيه',
+'recentchanges-label-bot' => 'ای ويرايشت نه يه بوت انجوم ديئه',
+'recentchanges-label-unpatrolled' => 'ای ويرايشت هنی تيه واداشت نبيه',
+'rcnote' => "د هار{{جمی:$1|هئ'''1''' آلشت|آخری هئ ن '''$1'''آلشتیا}}د آخر{{جمی:$2|رو|'''$2''' روزیا}}, چی $5, $4.",
+'rcnotefrom' => 'د هار آلشتیا د $2 هیئن(د بال د $1 نشون دئه بیه)',
+'rclistfrom' => 'آلشتیا تازه ایی که وا $1 شرو بیه نشونش بئه',
+'rcshowhideminor' => 'ويرايشتيا کؤچک $1',
+'rcshowhidebots' => '$1 رواتيا یا بوتيا',
+'rcshowhideliu' => '$1 کارورياداخل بيه',
+'rcshowhideanons' => '$1 کاروريا ناشناس',
+'rcshowhidepatr' => '$1 ویرایشتیا تیه پرس بیه',
+'rcshowhidemine' => 'ويرايشتيا مه$1',
+'rclinks' => 'آخرین آلشتیا $1 نشو بیه د اخرین روزیا $2',
+'diff' => 'فرخ',
+'hist' => 'ويرگار',
+'hide' => 'قام كردن',
+'show' => 'نشون دائن',
+'minoreditletter' => 'م',
+'newpageletter' => 'ن',
+'boteditletter' => 'ب',
+'rc-enhanced-expand' => 'جزيات نشون بيئه',
+'rc-enhanced-hide' => 'جزياته قام كو',
+
+# Recent changes linked
+'recentchangeslinked' => 'تغيريا مرتبط',
+'recentchangeslinked-toolbox' => 'تغيريا مرتبط',
+'recentchangeslinked-title' => 'آلشتيا مرتوط وا $1',
+'recentchangeslinked-summary' => 'ای نوم گه تازه د بلگیایی که وا بلگیا ویجه هوم پیوند بینه آلشت بیه(یا سی اندومیا دسه بنی بیه)
+بلگیا یی که هان [[Special:Watchlist|your watchlist]]و گپ بینه',
+'recentchangeslinked-page' => 'نوم بلگه:',
+'recentchangeslinked-to' => 'آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه',
+
+# Upload
+'upload' => 'بلم گير كردن فايلا',
+'uploadlogpage' => 'سوارکرد',
+'filedesc' => 'چكسته',
+'uploadedimage' => 'سوارکرد"[[$1]]"',
+
+'license' => 'ليانس دار بيئن',
+'license-header' => 'د شكل ليسانس دار بيئن',
+
+# File description page
+'file-anchor-link' => 'فايل',
+'filehist' => 'ويرگار فايل',
+'filehist-help' => 'ری ويرگاريا بپورنيت تا نسقه مرتوط بونيت.',
+'filehist-revert' => 'ورگنین',
+'filehist-current' => 'تازه باو',
+'filehist-datetime' => 'ويرگار/وخت',
+'filehist-thumb' => 'عسگ كؤچك بيه',
+'filehist-thumbtext' => 'كؤچك كردن سی نسقه چی $1',
+'filehist-user' => 'كارور',
+'filehist-dimensions' => 'بعديا',
+'filehist-comment' => 'نظر',
+'imagelinks' => 'استفاده د فايل',
+'linkstoimage' => 'دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:',
+'nolinkstoimage' => 'ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی',
+'sharedupload-desc-here' => 'فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.
+توضی دباره[$2 file description page] د هار نشو دئئه بیه',
+
+# Random page
+'randompage' => 'بلگه بختكی',
+
+# Statistics
+'statistics' => 'آماريا',
+
+# Miscellaneous special pages
+'nbytes' => '$1{{PLURAL:$1|كلی|بايت|بايت}}',
+'nmembers' => '$1 {{PLURAL:$1|اندوم|اندوميا}}',
+'prefixindex' => 'همه بلگيا وا پيشون',
+'usercreated' => '{{جنسیت:$3|راس بیه}}د $1 at $2',
+'newpages' => 'بلگيا نو',
+'move' => 'جاوه جا بوئيت',
+'pager-newer-n' => '{{جمی:$1|وانها تر 1وانها تر $1}}',
+'pager-older-n' => '{{جمی:$1|گپسالتر 1|گپسالتر $1}}',
+
+# Book sources
+'booksources' => 'سرچشمه يل كتاو',
+'booksources-search-legend' => 'پی جوری سی سرچشمه یا کتاو',
+'booksources-go' => 'رو',
+
+# Special:AllPages
+'allpages' => 'همه بلگيا',
+'alphaindexline' => '$1 د
+$2',
+'allarticles' => 'همه بلگيا',
+'allpagessubmit' => 'رو',
+
+# Special:Categories
+'categories' => 'دسه يا',
+
+# Special:LinkSearch
+'linksearch-line' => '$1 داره د $2 هوم پیوند بوئه',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(نوم گه اندومیا)',
+
+# Email user
+'emailuser' => 'ای كارور نه ايميل كو',
+
+# Watchlist
+'watchlist' => 'سیل برگ',
+'mywatchlist' => 'سیل برگ',
+'watchlistfor2' => 'سي $1 $2',
+'watch' => 'سيل كردن',
+'unwatch' => 'ديه نبيه',
+'watchlist-details' => '{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی .',
+'wlshowlast' => 'آخرین$1 ساعتیا $2و روزیا $3 نشو بیئه',
+'watchlist-options' => 'گزینیا سیل برگ',
+
+# Delete
+'actioncomplete' => 'عملكرد كامل بيه',
+'actionfailed' => 'عملكرد شكست حرده',
+'dellogpage' => 'لاگ پاك كردن',
+
+# Rollback
+'rollbacklink' => 'ورگشتن',
+
+# Protect
+'protectlogpage' => 'حفاظت کردن',
+'protectedarticle' => 'حفاظت بيه [[$1]]',
+
+# Undelete
+'undeletelink' => 'بوين/دوواره آماده با',
+'undeleteviewlink' => 'ديئن',
+
+# Namespace form on various pages
+'namespace' => 'نوم جا:',
+'invert' => 'انتخاو برعسك بوئه',
+'blanknamespace' => 'اصلی',
+
+# Contributions
+'contributions' => '{{جنس:$1|کارور}} هومیاریا',
+'contributions-title' => 'هومياري كارور سي $1',
+'mycontris' => 'هومياری',
+'contribsub2' => 'سي {{جنسيت:$3|$1}} ($2)',
+'uctop' => '(تازه باو)',
+'month' => 'د ما(یا زیتر)',
+'year' => 'د سال',
+
+'sp-contributions-newbies' => 'فقط هومیاری یایی که د حساو تازه بیه نشون بئه',
+'sp-contributions-blocklog' => 'قلف',
+'sp-contributions-uploads' => 'سواركرديا',
+'sp-contributions-talk' => 'چك چنه',
+'sp-contributions-search' => 'سی هومیاریا پی جور با',
+'sp-contributions-username' => 'نوم نشون آی پی يا نوم كاروری:',
+'sp-contributions-toponly' => 'فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه',
+'sp-contributions-submit' => 'پی جوری',
+
+# What links here
+'whatlinkshere' => 'كؤم ديس ونيا هان ايچه',
+'whatlinkshere-title' => 'بلگه ای که د $1 هوم پیوند بیه',
+'whatlinkshere-page' => 'بلگه',
+'linkshere' => "بلگیا نهایی د '''[[:$1]]''' هوم پیوند بیه",
+'nolinkshere' => "هیژ بگله ای د '''[[:$1]]''' هوم پیوند نبیه",
+'isredirect' => 'بلگه دوباره ورگشتن',
+'istemplate' => 'نشونی دئن',
+'isimage' => 'فایل هوم پیوند',
+'whatlinkshere-prev' => '{{جمی:$1|دمایی|دمایی $1}}',
+'whatlinkshere-next' => '{{جمی:$1|نهایی|نهایی $1}}',
+'whatlinkshere-links' => 'هوم پیوندیا',
+'whatlinkshere-hideredirs' => '$1 دوواره د نشونی ورگشتن',
+'whatlinkshere-hidetrans' => '$ا چن نتیجه ای',
+'whatlinkshere-hidelinks' => 'هوم پیوندیا $1',
+'whatlinkshere-hideimages' => 'فایل هوم پیوندیا $1',
+'whatlinkshere-filters' => 'فيلتريا',
+
+# Block/unblock
+'ipboptions' => '2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,حد ناره:حد ناره',
+'ipblocklist' => 'كاروريا منع بيه',
+'blocklink' => 'بسته بوئه',
+'unblocklink' => 'بی قطی',
+'change-blocklink' => 'اجازه نديئن سی آلشت',
+'contribslink' => 'هومكاری',
+'blocklogpage' => 'قلف',
+'blocklogentry' => ' [[$1]] وا یه گل وخت تموم بیئن $2 و $3 قلف بیه',
+'block-log-flags-nocreate' => 'حساو راس کردن عاجز بیه.',
+
+# Move page
+'movelogpage' => 'جاوه جا کردن',
+'revertmove' => 'لرستن',
+
+# Export
+'export' => 'وه صحرا ديئن بلگيا',
+
+# Namespace 8 related
+'allmessagesname' => 'نوم',
+'allmessagesdefault' => 'سفارشت متنی پيش فرض',
+
+# Thumbnails
+'thumbnail-more' => 'گپ كردن',
+'thumbnail_error' => 'خطا د راس بیئن بن کلئکی:$1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'بلگه كارورتو',
+'tooltip-pt-mytalk' => 'بلگه قسه كردن شما',
+'tooltip-pt-preferences' => 'اولويتيا شما',
+'tooltip-pt-watchlist' => 'نوم نوشت د بلگه يايی كه شما آلشتاشونه پيگئری ميكيد',
+'tooltip-pt-mycontris' => 'يه گل د هومياريا شما',
+'tooltip-pt-login' => 'توصيه بو كه وارد بوئين، اما مجبوری ني',
+'tooltip-pt-logout' => 'د سيستم دراومائن',
+'tooltip-ca-talk' => 'قسه دباره محتوا بلگه',
+'tooltip-ca-edit' => 'شما تونيد ای بلگه نه ويرايشت بكيد. لطف بكيد د دگمه پيش ديئن پيش د ذخيره كردن استفاده بكيد',
+'tooltip-ca-addsection' => 'بشخ تازه نه شرو كو',
+'tooltip-ca-viewsource' => 'ای بلگه حفاظت بيه.
+شما تونيت سرچمه ش بئوينيت',
+'tooltip-ca-history' => 'دوواره ديئن ای بلگه',
+'tooltip-ca-protect' => 'ای بلگه نه حفاظت بكيد',
+'tooltip-ca-delete' => 'ای بلگه نه حذف بكيد',
+'tooltip-ca-move' => 'ای بگله نه جا وه جا كو',
+'tooltip-ca-watch' => 'اضاف کردن ای بلگه وه نوم نوشت پیگئریاتو',
+'tooltip-ca-unwatch' => 'ورداشتن ای بلگه وه نوم نوشت پیگئریاتو',
+'tooltip-search' => 'پی جوری {{SITENAME}}',
+'tooltip-search-go' => 'رؤ د بلگه ای که یه نوم راستکی ها مینش الوت ار دش بوئه',
+'tooltip-search-fulltext' => 'بلگيانه سی چنو متنی بگرد',
+'tooltip-p-logo' => 'سرآسونه نه بونيت',
+'tooltip-n-mainpage' => 'سرآسونه نه بونيت',
+'tooltip-n-mainpage-description' => 'ديئن سرآسونه',
+'tooltip-n-portal' => 'دباره پروجه،ايسا ترين(تونيت) چی بكيد، كجه چيانه بجورين',
+'tooltip-n-currentevents' => 'ساوند دونسمنديايی كه هان د پيشومدل تازه باو پيدا كو',
+'tooltip-n-recentchanges' => 'يه نوم جاوند سی تغيرا تازه مئن ويكی',
+'tooltip-n-randompage' => 'سوار كرد بلگه بختكی',
+'tooltip-n-help' => 'جاگه سی فهمسن',
+'tooltip-t-whatlinkshere' => 'سيائه تمؤم بلگيایی كه ايچه چسب ون دارن',
+'tooltip-t-recentchangeslinked' => 'تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه',
+'tooltip-feed-atom' => 'تغذيه كؤچك سی ای بلگه',
+'tooltip-t-contributions' => 'یه نوم گه د هومیاریا ای کارور',
+'tooltip-t-emailuser' => 'سی ای كارور ايميل كل كو',
+'tooltip-t-upload' => 'بلم گير كردن فايلا',
+'tooltip-t-specialpages' => 'سيائه تمؤم بلگيا خاص',
+'tooltip-t-print' => 'نسقه چاپ بيئنی سی ای بلگه',
+'tooltip-t-permalink' => 'چسب ون هميشئی د دوواره بينی ای بلگه',
+'tooltip-ca-nstab-main' => 'ديئن محتوا بلگه',
+'tooltip-ca-nstab-user' => 'ديئن بلگه كارور',
+'tooltip-ca-nstab-special' => 'اي بلگه ويجه يه، شما نتونيت خود اي بلگه نه ويرايشت بكيد',
+'tooltip-ca-nstab-project' => 'ديئن بلگه پروجه',
+'tooltip-ca-nstab-image' => 'ديئن بلگه فايل',
+'tooltip-ca-nstab-template' => 'ديئن قالو',
+'tooltip-ca-nstab-category' => 'ديئن بلگه دسه بنی',
+'tooltip-minoredit' => 'یه نه د عنوان حیرده ویرایشت ثوت کو',
+'tooltip-save' => 'آلشتياتونه ذخيره بكيد',
+'tooltip-preview' => 'پیش سیل آلشتیاتو،لطفن پیش د ذخیره دش استفاده بکیتو',
+'tooltip-diff' => 'آلشتیا نه که شما د ای متن راس کردیته نشو بیئه',
+'tooltip-compareselectedversions' => 'فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت',
+'tooltip-watch' => 'ای بلگه نه د سیل برگتو اضاف بکید',
+'tooltip-rollback' => '"ورگشتن" لرستن د حالت اول سی ای بلگه که سی يه كه هومياری نيايی اصلاح بيه وا يه پورنسن',
+'tooltip-undo' => 'انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.',
+'tooltip-summary' => 'يه چكسته كؤچك وارد بكيد',
+
+# Browsing diffs
+'previousdiff' => '← ويرايشت كۈهنه تر',
+'nextdiff' => 'ويرايشت تازه تر',
+
+# Media information
+'file-info-size' => '$1 × $2 پیکسل, انازه فایل: $3, MIME نوع: $4',
+'file-nohires' => 'عسك ون بالاتري دش ني',
+'svg-long-desc' => 'اس وی جی فايل.نومنا $1 $2 پيكسل',
+'show-big-image' => 'تموم رخ ون',
+
+# Bad image list
+'bad_image_list' => 'دونسمنديانه وه ای شلگ وارد بكيت:
+
+فقط سرخط يایی که وا * شرو بوئن د وير گرته بوئن. اولی چسب ون مئن هر سرخط، باید چسب ونی وه یک عسگ گن با.
+چسب ونيا نيایی د همو سرخط، وه عنوان چيا استثنادار د وير گرته بوئن',
+
+# Metadata
+'metadata' => 'داديا فره گپ',
+'metadata-help' => 'ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه',
+'metadata-fields' => 'رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.
+چی یا هنی سی یه که پیش فرضن قام بوئن.
+*راست کو
+*مدل
+*دم وخت اصل
+*وخت آشگار
+*اف ان شماره
+*ایزو نرخ من سرعت
+*فوکالنس
+*هنرمن
+*کپی رایت
+*حالت جی پی اس
+*جی پی اس گپ حالت
+*جی پی اس همه حالت',
+
+# External editor support
+'edit-externally' => 'ای فایل سی ویرایشت وه در دیئن کاربردش استفاده بکید',
+'edit-externally-help' => '(بوینیت [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'همه شو',
+'namespacesall' => 'همه شو',
+'monthsall' => 'همه',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'آلشتیا مرتوط نه بوینیت',
+'watchlisttools-edit' => 'سیل برگ بوینیتو و ویرایشت بکید',
+'watchlisttools-raw' => 'سیل برگ نه ردیفی ویرایشت کو',
+
+# Core parser functions
+'duplicate-defaultsort' => 'زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.',
+
+# Special:SpecialPages
+'specialpages' => 'بلگيا ويجه',
+
+# External image whitelist
+'external_image_whitelist' => 'یه خط نه ول بکید چی وه<pre>',
+
+# Special:Tags
+'tag-filter' => 'فيلتر [[Special:Tags|Tag]]:',
+
+);
'invalidtitle-knownnamespace' => 'Неважечки наслов со именски простор „$2“ и текст „$3“',
'invalidtitle-unknownnamespace' => 'Неважечки наслов со именски простор бр. $1 и текст „$2“',
'exception-nologin' => 'Не сте најавени',
-'exception-nologin-text' => 'Оваа страница или постапка бара да сте најавени на викито.',
+'exception-nologin-text' => '[[Special:Userlogin|Најавете се]] за да добиете пристап до страницата или дејството.',
+'exception-nologin-text-manual' => 'Треба да сте $1 за да имате пристап до страницата или дејството.',
# Virus scanner
'virus-badscanner' => "Лоша поставка: непознат проверувач на вируси: ''$1''",
'mypreferences' => 'нагодувања',
'prefs-edits' => 'Број на уредувања:',
'prefsnologin' => 'Не сте најавени',
+'prefsnologintext2' => 'Треба да сте $1 за да можете да ги поставувате корисничките нагодувања.',
'changepassword' => 'Смени лозинка',
'prefs-skin' => 'Руво',
'skin-preview' => 'Преглед',
е-пошта: $PAGEEDITOR_EMAIL
вики: $PAGEEDITOR_WIKI
-Ð\9fовеÑ\9cе нема да добиваÑ\82е извеÑ\81Ñ\82Ñ\83ваÑ\9aа во Ñ\81лÑ\83Ñ\87аÑ\98 на дÑ\80Ñ\83ги понаÑ\82амоÑ\88ни пÑ\80омени, оÑ\81вен ако не Ñ\98а поÑ\81еÑ\82иÑ\82е оваа Ñ\81Ñ\82Ñ\80аниÑ\86а.
+Ð\9fовеÑ\9cе нема да добиваÑ\82е извеÑ\81Ñ\82Ñ\83ваÑ\9aа во Ñ\81лÑ\83Ñ\87аÑ\98 на дÑ\80Ñ\83ги понаÑ\82амоÑ\88ни акÑ\82ивноÑ\81Ñ\82и, оÑ\81вен ако не Ñ\98а поÑ\81еÑ\82иÑ\82е оваа Ñ\81Ñ\82Ñ\80аниÑ\86а додека Ñ\81Ñ\82е наÑ\98авени.
Можете и да ги поништите ознаките за известување за сите набљудувани страници на вашиот список на набљудувања.
Известителниот систем на {{SITENAME}}
# Special:SpecialPages
'specialpages' => 'Специјални страници',
+'specialpages-note-top' => 'Легенда',
'specialpages-note' => '* Нормални специјални страници.
* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>
* <span class="mw-specialpagecached">Кеширани специјални страници (може да се застарени).</span>',
'invalidtitle-knownnamespace' => 'നാമമേഖല "$2", എഴുത്ത് "$3" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
'invalidtitle-unknownnamespace' => 'അപരിചിതമായ നാമമേഖലാ സംഖ്യ $1, എഴുത്ത് "$2" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
'exception-nologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
-'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കേണ്ടതാണ്.',
+'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ ദയവായി [[Special:Userlogin|പ്രവേശിക്കുക]].',
+'exception-nologin-text-manual' => 'ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ഉപയോഗിക്കാൻ ദയവായി $1.',
# Virus scanner
'virus-badscanner' => "തെറ്റായ ക്രമീകരണങ്ങൾ: അപരിചിതമായ വൈറസ് തിരച്ചിൽ ഉപാധി : ''$1''",
'mypreferences' => 'ക്രമീകരണങ്ങൾ',
'prefs-edits' => 'ആകെ തിരുത്തുകൾ:',
'prefsnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
+'prefsnologintext2' => 'താങ്കളുടെ ഉപയോക്തൃക്രമീകരണങ്ങൾ സജ്ജീകരിക്കാൻ ദയവായി $1.',
'changepassword' => 'രഹസ്യവാക്ക് മാറ്റുക',
'prefs-skin' => 'ദൃശ്യരൂപം',
'skin-preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക',
# Special:SpecialPages
'specialpages' => 'പ്രത്യേക താളുകൾ',
+'specialpages-note-top' => 'സൂചന',
'specialpages-note' => '* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.
* <strong class="mw-specialpagerestricted">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</strong>
* <span class="mw-specialpagecached">പ്രാദേശികമായി സംഭരിച്ചുപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.</span>',
'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekend naamruimtenummer $1 en tekst "$2"',
'exception-nologin' => 'Niet aangemeld',
'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u [[Special:Userlogin|aangemeld]] zijn bij deze wiki.',
+'exception-nologin-text-manual' => 'U moet $1 om deze pagina te kunnen bekijken of de handeling uit te voeren.',
# Virus scanner
'virus-badscanner' => "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
'mypreferences' => 'Voorkeuren',
'prefs-edits' => 'Aantal bewerkingen:',
'prefsnologin' => 'Niet aangemeld',
+'prefsnologintext2' => 'U moet $1 om voorkeuren in te stellen.',
'changepassword' => 'Wachtwoord wijzigen',
'prefs-skin' => 'Vormgeving',
'skin-preview' => 'Voorvertoning',
E-mailadres: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
-Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Op uw volglijst kunt u voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
+Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Als u bent aangemeld, kunt u op uw volglijst voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
Groet van uw {{SITENAME}}-waarschuwingssysteem.
'pageinfo-length' => 'Paginalengte (in bytes)',
'pageinfo-article-id' => 'Paginanummer',
'pageinfo-language' => 'Taal voor de pagina',
+'pageinfo-content-model' => 'Paginainhoudmodel',
'pageinfo-robot-policy' => 'Indexering door robots',
'pageinfo-robot-index' => 'Toegestaan',
'pageinfo-robot-noindex' => 'Niet toegestaan',
# Special:Redirect
'redirect' => 'Doorverwijzen op bestandsnaam, gebruikersnummer of versienummer',
'redirect-legend' => 'Doorverwijzen naar een bestand of pagina',
-'redirect-summary' => 'Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven).',
+'redirect-summary' => 'Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'OK',
'redirect-lookup' => 'Opzoeken:',
'redirect-value' => 'Waarde:',
# Special:SpecialPages
'specialpages' => "Speciale pagina's",
+'specialpages-note-top' => 'Legenda',
'specialpages-note' => '* Normale speciale pagina\'s
-* <strong class="mw-specialpagerestricted">Beperkt toegankelijke speciale pagina\'s</strong>
-* <span class="mw-specialpagecached">Speciale pagina\'s met alleen gegevens uit de cache (mogelijk verouderd)</span>',
+* <span class="mw-specialpagerestricted">Beperkt toegankelijke speciale pagina\'s</span>',
'specialpages-group-maintenance' => 'Onderhoudsrapporten',
'specialpages-group-other' => "Overige speciale pagina's",
'specialpages-group-login' => 'Aanmelden / registreren',
'invalidtitle-knownnamespace' => "Títol invalid amb l'espaci de noms « $2 » e l'intitulat « $3 »",
'invalidtitle-unknownnamespace' => "Títol invalid amb lo numèro d'espaci de noms $1 e l'intitulat « $2 » desconeguts",
'exception-nologin' => 'Pas connectat',
-'exception-nologin-text' => "Aquesta pagina o aquesta accion necessita d'èsser connectada sus aqueste wiki.",
+'exception-nologin-text' => '[[Special:Userlogin|Connectatz-vos]] per poder accedir a aquesta pagina o aquesta accion.',
+'exception-nologin-text-manual' => '$1 per poder accedir a aquesta pagina o aquesta accion.',
# Virus scanner
'virus-badscanner' => "Marrida configuracion : escaner de virús desconegut : ''$1''",
'mypreferences' => 'Preferéncias',
'prefs-edits' => 'Nombre d’edicions :',
'prefsnologin' => 'Vos sètz pas identificat(ada)',
+'prefsnologintext2' => "$1 per definir las preferéncias d'utilizaire.",
'changepassword' => 'Modificacion del senhal',
'prefs-skin' => 'Aparéncia',
'skin-preview' => 'Previsualizar',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Seguit...',
'unwatching' => 'Fin del seguit...',
+'watcherrortext' => "Una error s'es producha al moment de la modificacion dels paramètres de vòstra lista de seguiment per « $1 ».",
'enotif_mailer' => 'Sistèma d’expedicion de notificacion de {{SITENAME}}',
'enotif_reset' => 'Marcar totas las paginas coma visitadas',
** Temptativa d’intimidacion o agarriment
** Abús d’utilizacion de comptes multiples
** Nom d’utilizaire inacceptable, injuriós o difamant',
+'ipb-hardblock' => 'Empachar los utilizaires connectats de modificar en utilizant aquesta adreça IP',
'ipbcreateaccount' => 'Empachar la creacion de compte',
'ipbemailban' => 'Empachar l’utilizaire de mandar de corrièrs electronics',
'ipbenableautoblock' => 'Blocar automaticament las adreças IP utilizadas per aqueste utilizaire',
'ipbotherreason' => 'Motiu diferent o suplementari',
'ipbhidename' => 'Amagar lo nom d’utilizaire de las modificacions e de las listas',
'ipbwatchuser' => "Seguir las paginas d'utilizaire e de discussion d'aqueste utilizaire",
+'ipb-disableusertalk' => "Empachar l'utilizaire de modificar sa pagina de discussion pendent lo blocatge",
'ipb-change-block' => 'Tornar blocar aqueste utilizaire amb aquestes paramètres',
'ipb-confirm' => 'Confirmar lo blocatge',
'badipaddress' => "L'adreça IP es incorrècta",
'import-invalid-interwiki' => "Impossible d'importar dempuèi lo wiki especificat.",
'import-error-edit' => 'La pagina « $1 » es pas estada importada perque sètz pas autorizat a la modificar.',
'import-error-create' => 'La pagina « $1 » es pas estada importada perque sètz pas autorizat a la crear.',
+'import-error-invalid' => 'Pagina « $1 » es pas importada perque son nom es pas valid.',
'import-options-wrong' => '{{PLURAL:$2|Marrida opcion|Marridas opcions}} : <nowiki>$1</nowiki>',
'import-rootpage-invalid' => 'La pagina raiç provesida es un títol invalid.',
'invalidtitle-knownnamespace' => "Tìtol ch'a va nen bin con lë spassi nominal «$2» e ël test «$3»",
'invalidtitle-unknownnamespace' => 'Tìtol pa bon con nùmer dë spassi nominal $1 e test «$2» sconossù',
'exception-nologin' => 'Nen rintrà ant ël sistema',
-'exception-nologin-text' => "Costa pàgina o assion a l'ha damanca ch'a sia rintrà an costa wiki.",
+'exception-nologin-text' => "Për piasì, [[Special:Userlogin|ch'a rintra ant ël sistema]] për podèj acede a costa pàgina o a costa assion.",
+'exception-nologin-text-manual' => "Për piasì, ch'a $1 për podèj acede a costa pàgina o costa assion.",
# Virus scanner
'virus-badscanner' => "Configurassion falà: antivìrus nen conossù: ''$1''",
'mypreferences' => 'Gust',
'prefs-edits' => 'Nùmer ëd modìfiche fàite:',
'prefsnologin' => "A l'é ancó pa rintrà ant ël sistema",
+'prefsnologintext2' => "Për piasì, ch'a $1 për definì ij gust d'utent.",
'changepassword' => 'Cangé la ciav',
'prefs-skin' => 'Facia',
'skin-preview' => 'Preuva',
pòsta eletrònica: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-A-i sarà pì gnun-a notìfica ëd modìfiche se chiel a vìsita nen costa pàgina. Che as visa che a peul cangeje la configurassion dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba ch\'as ten sot-euj.
+A-i sarà pì gnun-a notìfica an cas d\'àutre atività se chiel a vìsita nen costa pàgina da colegà. Che as visa che a peul cangeje la configurassion dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba ch\'as ten sot-euj.
Comunicassion dël sistema ëd notìfica da {{SITENAME}}
# Special:SpecialPages
'specialpages' => 'Pàgine Speciaj',
+'specialpages-note-top' => 'Legenda',
'specialpages-note' => '* Pàgine speciaj normaj.
-* <span class="mw-specialpagerestricted">Pàgine speciaj riservà.</span>
-* <span class="mw-specialpagecached">Pàgine speciaj mach an memòria local (a peulo esse veje).</span>',
+* <span class="mw-specialpagerestricted">Pàgine speciaj riservà.</span>',
'specialpages-group-maintenance' => 'Rapòrt ëd manutension',
'specialpages-group-other' => 'Àutre pàgine speciaj',
'specialpages-group-login' => 'Intré ant ël sistema / creé un cont',
'invalidtitle-unknownnamespace' => 'Título inválido com número de espaço nominal $1 desconhecido e texto "$2"',
'exception-nologin' => 'Não está autenticado',
'exception-nologin-text' => 'Esta página ou operação requer que esteja autenticado nesta wiki.',
+'exception-nologin-text-manual' => 'Por favor $1 para poder aceder a esta página ou acção.',
# Virus scanner
'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
# Special:SpecialPages
'specialpages' => 'Páginas especiais',
+'specialpages-note-top' => 'Legenda',
'specialpages-note' => '* Páginas especiais normais.
* <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
'specialpages-group-maintenance' => 'Relatórios de manutenção',
* {{msg-mw|Accesskey-t-specialpages}}
* {{msg-mw|Tooltip-t-specialpages}}
{{Identical|Special page}}',
-'specialpages-note-top' => 'Heading for {{msg-mw|specialpages-note}}',
+'specialpages-note-top' => 'Heading for {{msg-mw|specialpages-note}}.
+{{Identical|Legend}}',
'specialpages-note' => 'Footer note for the [[Special:SpecialPages]] page',
'specialpages-group-maintenance' => '{{doc-special-group|like=[[Special:DoubleRedirects]], [[Special:LonelyPages]] and [[Special:WantedPages]]}}',
'specialpages-group-other' => '{{doc-special-group|like=[[Special:AdminLinks]] and [[Special:BookSources]]}}',
'invalidtitle-knownnamespace' => 'Titlu invalid cu spațiul de nume „$2” și textul „$3”',
'invalidtitle-unknownnamespace' => 'Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”',
'exception-nologin' => 'Neautentificat{{GENDER:||ă}}.',
-'exception-nologin-text' => 'Această pagină sau acțiune necesită ca dumneavoastră să fiți autentificat{{GENDER:||ă}} pe acest wiki.',
+'exception-nologin-text' => 'Vă rugăm să vă [[Special:Userlogin|autentificați]] pentru a accesa această pagină sau acțiune.',
+'exception-nologin-text-manual' => 'Vă rugăm să vă $1 pentru a accesa această pagină sau acțiune.',
# Virus scanner
'virus-badscanner' => "Configurație greșită: scaner de virus necunoscut: ''$1''",
'mypreferences' => 'Preferințe',
'prefs-edits' => 'Număr de modificări:',
'prefsnologin' => 'Neautentificat',
+'prefsnologintext2' => 'Vă rugăm să vă $1 pentru a vă seta preferințele de utilizator.',
'changepassword' => 'Schimbare parolă',
'prefs-skin' => 'Aspect',
'skin-preview' => 'Previzualizare',
e-mail: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-Nu veți mai primi notificări în cazul unor viitoare modificări până când nu veți vizitați pagina. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
+Nu veți mai primi notificări în cazul unei viitoare activități până când nu veți vizitați pagina ca utilizator autentificat. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
- Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
+Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
--
Pentru a modifica setările notificării prin e-mail, vizitați
# Special:SpecialPages
'specialpages' => 'Pagini speciale',
+'specialpages-note-top' => 'Legendă',
'specialpages-note' => '* Pagini speciale normale.
-* <span class="mw-specialpagerestricted">Pagini speciale restricționate.</span>
-* <span class="mw-specialpagecached">Pagini speciale aflate doar în memoria cache (pot fi neactualizate).</span>',
+* <span class="mw-specialpagerestricted">Pagini speciale restricționate.</span>',
'specialpages-group-maintenance' => 'Întreținere',
'specialpages-group-other' => 'Alte pagini speciale',
'specialpages-group-login' => 'Autentificare / creare cont',
Do skrite vsebine bodo še vedno lahko dostopali drugi administratorji {{GRAMMAR:rodilnik|{{SITENAME}}}} in jo z uporabo istega vmesnika tudi obnovili, razen kjer bodo uveljavljene dodatne omejitve.",
'revdelete-confirm' => 'Prosim potrdite da nameravate to storiti, da se zavedate posledic in da to počnete v skladu s [[{{MediaWiki:Policy-url}}|politiko]].',
'revdelete-suppress-text' => "Zadrževanje naj bi bilo uporabljeno '''le''' v sledečih primerih:
-* Potencialni klevetniški podatki
+* Morebitni klevetniški podatki
* Neprimerni osebni podatki
-*: ''domači naslovi in telefonske številke, številke socialnega zavarovanja, etc.''",
+*: ''domači naslovi in telefonske številke, narodne številke istovetnosti itn.''",
'revdelete-legend' => 'Nastavi omejitve vidnosti',
'revdelete-hide-text' => 'Besedilo redakcije',
'revdelete-hide-image' => 'Skrij vsebino datoteke.',
'revdelete-hide-user' => 'Uporabniško ime/IP-naslov urejevalca',
'revdelete-hide-restricted' => 'Zadrži podatke od administratorjev kakor tudi od ostalih',
'revdelete-radio-same' => '(ne spremeni)',
-'revdelete-radio-set' => 'Vidno',
-'revdelete-radio-unset' => 'Skrito',
+'revdelete-radio-set' => 'Skrito',
+'revdelete-radio-unset' => 'Vidno',
'revdelete-suppress' => 'Zadrži podatke od administratorjev kakor tudi od ostalih',
'revdelete-unsuppress' => 'Odpraviti omejitve na obnovljenih redakcijah.',
'revdelete-log' => 'Razlog:',
'svg-long-desc' => 'datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
'svg-long-desc-animated' => 'animirana datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
'svg-long-error' => 'Neveljavna datoteka SVG: $1',
-'show-big-image' => 'Slika v višji ločljivosti',
+'show-big-image' => 'Izvirna datoteka',
'show-big-image-preview' => 'Velikost predogleda: $1.',
'show-big-image-other' => '{{PLURAL:$2|Druga ločljivost|Drugi ločljivosti|Druge ločljivosti}}: $1.',
'show-big-image-size' => '$1 × $2 točk',
# Separators for various lists, etc.
'percent' => '$1 %',
+'quotation-marks' => '»$1«',
# Multipage image navigation
'imgmultipageprev' => '← prejšnja stran',
# Special:SpecialPages
'specialpages' => 'Posebne strani',
+'specialpages-note-top' => 'Legenda',
'specialpages-note' => '* Navadne posebne strani.
-* <span class="mw-specialpagerestricted">Omejene posebne strani.</span>
-* <span class="mw-specialpagecached">Predpomnjene posebne strani (morda so zastarele).</span>',
+* <span class="mw-specialpagerestricted">Omejene posebne strani.</span>',
'specialpages-group-maintenance' => 'Vzdrževalna poročila',
'specialpages-group-other' => 'Ostale posebne strani',
'specialpages-group-login' => 'Prijavite se / ustvarite račun',
'tog-minordefault' => 'ప్రత్యేకంగా తెలుపనంతవరకూ నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
'tog-previewontop' => 'వ్యాసం మార్పుల మునుచూపు సవరించు పెట్టె పైన చూపు',
'tog-previewonfirst' => 'మొదటి దిద్దుబాటు చేసినపుడు వ్యాసపు మునుచూపు చూపించు',
-'tog-nocache' => 'విహారిణిలో పుటల స్థానికనకలును(కాషింగు) అచేతనం',
+'tog-nocache' => 'విహారిణిలో పుటల స్థానికనకలును(కాషింగు) అచేతనం చేయి',
'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీ లేదా దస్త్రం మారినపుడు నాకు ఈ-మెయిలు పంపు',
'tog-enotifusertalkpages' => 'నా చర్చా పేజీలో మార్పులు జరిగినపుడు నాకు ఈ-మెయిలు పంపు',
'tog-enotifminoredits' => 'పేజీలు మరియు దస్త్రాలకు జరిగే చిన్న మార్పులకు కూడా నాకు ఈ-మెయిలును పంపు',
'yourname' => 'వాడుకరి పేరు:',
'userlogin-yourname' => 'వాడుకరి పేరు',
'userlogin-yourname-ph' => 'మీ వాడుకరి పేరును ఇవ్వండి',
-'createacct-another-username-ph' => 'à°®à±\80 వాడà±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°\87à°µà±\8dà°µండి',
+'createacct-another-username-ph' => 'à°®à±\80 వాడà±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°ªà±\8dà°°à°µà±\87శపà±\86à°\9fà±\8dà°\9fండి',
'yourpassword' => 'సంకేతపదం:',
'userlogin-yourpassword' => 'సంకేతపదం',
'userlogin-yourpassword-ph' => 'మీ సంకేతపదాన్ని ఇవ్వండి',
* అనుచితమైన వ్యక్తిగత సమాచారం
* "ఇంటి చిరునామాలు, టెలిఫోను నంబర్లు, సోషల్ సెక్యూరిటీ నంబర్లు, వగైరాలు"',
'revdelete-legend' => 'సందర్శక నిబంధనలు అమర్చు',
-'revdelete-hide-text' => 'à°\95à±\82à°°à±\8dà°ªà±\81 పాఠ్యం',
+'revdelete-hide-text' => 'à°ªà±\81à°¨à°\83పరిశà±\80లన పాఠ్యం',
'revdelete-hide-image' => 'ఫైలులోని విషయాన్ని దాచు',
'revdelete-hide-name' => 'చర్యను, లక్ష్యాన్నీ దాచు',
'revdelete-hide-comment' => 'దిద్దుబాటు వ్యాఖ్యను దాచు',
* @author Felipe Aira
* @author Jojit fb
* @author Kaganer
+ * @author Namayan
* @author Sky Harbor
* @author tl.wikipedia.org sysops
* @author לערי ריינהארט
'booksources-search-legend' => 'Maghanap ng mapagkukunang aklat',
'booksources-isbn' => 'ISBN:',
'booksources-go' => 'Puntahan',
-'booksources-text' => 'Matatagpuan sa ibaba ang isang tala ng mga kawing patungo sa ibang mga websayt na nanininda ng mga bago at gamit na aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:',
+'booksources-text' => 'Matatagpuan sa ibaba ang isang tala ng mga kawil patungo sa ibang mga website na nagtitinda ng mga bago at gamit nang aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:',
'booksources-invalid-isbn' => 'Tila mukhang hindi yata katanggap-tanggap ang ibinigay na ISBN; pakisuri kung may mga kamalian ang pagkakasip/pagkakakopya mula sa orihinal na pinagmulan.',
# Special:Log
'excontentauthor' => "ang nilalaman ay: '$1' (at ang tanging nag-ambag ay si '[[Special:Contributions/$2|$2]]')",
'exbeforeblank' => "nilalaman bago nablangko: '$1'",
'exblank' => 'walang laman ang pahina',
-'delete-confirm' => 'Burahin ang "$1"',
+'delete-confirm' => 'Kaltasin ang "$1"',
'delete-legend' => 'Burahin',
'historywarning' => "'''Babala''': May kasaysayan ang pahinang buburahin mo na tinatayang may $1 {{PLURAL:$1|pagbabago|mga pagbabago}}:",
'confirmdeletetext' => 'Lubos mo nang buburahin ang pahinang ito pati ang kalahatan ng kasaysayan nito.
'proxyblockreason' => 'Hinarang ang IP address mo dahil bukas na proxy ito. Makipag-ugnayan sa iyong tagabigay ng serbisyong Internet o suportang teknikal at ipaalam sa kanila itong seryesong suliranin sa seguridad.',
'sorbs' => 'DNSBL',
'sorbsreason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito.',
-'sorbs_create_account_reason' => 'Nakatala ang iyong direksiyong IP bilang isang bukas na proxy sa DNSBL na ginagamit ng {{SITENAME}}.
-Hindi ka makakalikha ng kuwenta',
+'sorbs_create_account_reason' => 'Nakatala ang iyong IP address bilang open proxy sa DNSBL na ginagamit ng {{SITENAME}}.
+Hindi ka makakalikha ng account',
'cant-block-while-blocked' => 'Hindi mo mahahadlangan/mahaharang ang ibang mga tagagamit habang hinahadlangan ka.',
'cant-see-hidden-user' => 'Ang tagagamit na sinusubukan mong hadlangan ay naharang at naikubli na.
Dahil wala kang karapatang magkubli ng tagagamit, hindi mo makikita o mababago ang paghadlang sa tagagamit.',
'allmessagesname' => 'Pangalan',
'allmessagesdefault' => 'Tinakdang teksto',
'allmessagescurrent' => 'Kasalukuyang teksto',
-'allmessagestext' => 'Isa itong talaan ng mga mensahe ng sistema na makukuha mula sa espasyo ng pangalang MediaWiki.
+'allmessagestext' => 'Isa itong talaan ng mga mensahe ng sistema na makukuha mula sa namespace ng MediaWiki.
Pakidalaw ang [https://www.mediawiki.org/wiki/Localisation Lokalisasyong MediaWiki] at [//translatewiki.net translatewiki.net] kung ibig mong magambag sa heneriko o pangkalahatang lokalisasyon ng MediaWiki.',
'allmessagesnotsupportedDB' => "Hindi magagamit ang '''{{ns:special}}:AllMessages''' dahil hindi gumagana ang '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Salain',
'tog-watchlisthidebots' => 'Хайгаарал даңзызындан роботтарның эдиглерин чажыр',
'tog-watchlisthideminor' => 'Хайгаарал даңзызындан бичии эдиглерни чажыр',
'tog-watchlisthidepatrolled' => 'Хайгаарал даңзындан истээн өскерлиишкиннерны чажырары',
-'tog-showhiddencats' => 'ЧажÑ\8bÑ\82 бөлүкÑ\82еÑ\80ни көÑ\80гүзеÑ\80и',
+'tog-showhiddencats' => 'ЧажÑ\8bÑ\82 аңгÑ\8bлалдаÑ\80нÑ\8b көÑ\80гүзеÑ\80',
'underline-always' => 'Кезээде',
'underline-never' => 'Кажан-даа',
'nextn' => 'дараазында {{PLURAL:$1|$1}}',
'prevn-title' => 'Эрткен $1 {{PLURAL:$1|бижик|бижик}}',
'nextn-title' => 'Дараазында $1 {{PLURAL:$1|бижик|бижик}}',
-'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнелди|түңнелди}} көргүзери',
+'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнел}} көргүзер',
'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) көөрү',
'searchmenu-exists' => "'''Бо викиде \"[[:\$1]]\" деп арын бар.'''",
'searchmenu-new' => "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
'rcnotefrom' => 'Адаанда <strong>$2</strong> тура (<strong>$1</strong> чедир) өскертилгелерни санаан.',
'rclistfrom' => '$1 тура чаа өскерилгелерни көргүзер',
'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1',
-'rcshowhidebots' => 'РобоÑ\82Ñ\82аÑ\80нÑ\83 $1',
-'rcshowhideliu' => 'Ð\9aиÑ\80еÑ\80 ажÑ\8bглакÑ\87Ñ\8bлаÑ\80нÑ\8b $1',
-'rcshowhideanons' => 'Ат эвес ажыглакчыларны $1',
+'rcshowhidebots' => 'РобоÑ\82Ñ\82аÑ\80нÑ\8b $1',
+'rcshowhideliu' => 'Ð\9aиÑ\80ген киÑ\80жикÑ\87илеÑ\80ни $1',
+'rcshowhideanons' => 'Ады чок ажыглакчыларны $1',
'rcshowhidepatr' => 'истээн өскерлиишкиннерни $1',
-'rcshowhidemine' => 'Ð\9cÑ\8dÑ\8dÒ£ Ó©Ñ\81кеÑ\80лииÑ\88кинимни $1',
-'rclinks' => '$2 хүнде эрткен $1 өскерлиишкиннерни көргүзери<br />$3',
+'rcshowhidemine' => 'ÐдиглеÑ\80имни $1',
+'rclinks' => 'Сөөлгү $2 хүн иштинде болган $1 өскерлиишкиннерни көргүзер<br />$3',
'diff' => 'ылгал',
'hist' => 'төөгү',
-'hide' => 'чажырары',
-'show' => 'көÑ\80гүзеÑ\80и',
+'hide' => 'Чажырар',
+'show' => 'Ð\9aÓ©Ñ\80гүзеÑ\80',
'minoreditletter' => 'б',
'newpageletter' => 'Ч',
'boteditletter' => 'р',
'brokenredirects-delete' => 'ырадыры',
'withoutinterwiki' => 'Дыл холбаалар эвес арыннар',
-'withoutinterwiki-submit' => 'Көргүзери',
+'withoutinterwiki-submit' => 'Көргүзер',
'fewestrevisions' => 'Эң эвээш үндүрери арыннар',
'unwatching' => 'Хайгааравайн турар...',
'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
-'enotif_anon_editor' => 'аÑ\82 Ñ\8dвеÑ\81 ажÑ\8bглакÑ\87Ñ\8b $1',
+'enotif_anon_editor' => 'аÑ\82 Ñ\87ок киÑ\80жикÑ\87и $1',
'changed' => 'өскертти',
# Delete
'contribslink' => 'салыышкыннар',
'blocklogpage' => 'Кызыгаарлаашкынның журналы',
'blocklogentry' => ', [[$1]] $2 дургузунда кызыгаарлаттынган: $3',
-'block-log-flags-anononly' => 'чүгле ат эвес ажыглакчылар',
+'block-log-flags-anononly' => 'чүгле адыжок киржикчилер',
'block-log-flags-nocreate' => 'Кижилер бүрүткээри хоруглуг',
'block-log-flags-hiddenname' => 'ажыглакчының ады чажырган',
'tooltip-summary' => 'Кысказы-биле бижиңер',
# Attribution
-'anonymous' => '{{grammar:genitive|{{SITENAME}}}} ат эвес {{PLURAL:$1|ажыглакчызы|ажыглакчылары}}',
+'anonymous' => '{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}',
# Skin names
'skinname-cologneblue' => 'Cologne Blue',
'svg-long-desc' => 'tập tin SVG, $1×$2 điểm ảnh trên danh nghĩa, kích thước: $3',
'svg-long-desc-animated' => 'tập tin hình động SVG, $1×$2 điểm ảnh trên danh nghĩa, kích thước: $3',
'svg-long-error' => 'Tập tin SVG có lỗi: $1',
-'show-big-image' => 'Độ phân giải tối đa',
+'show-big-image' => 'Tập tin gốc',
'show-big-image-preview' => 'Kích thước của hình xem trước: $1.',
'show-big-image-other' => '{{PLURAL:$2|Độ phân giải|Các độ phân giải}} khác: $1.',
'show-big-image-size' => '$1×$2 điểm ảnh',
'accmailtitle' => '密码已寄出',
'accmailtext' => "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
'newarticle' => '(新页面)',
-'newarticletext' => '您进入了一个尚未创建的页面。
-要创建该页面,请在下面的编辑框中输入内容(详情参见[[{{MediaWiki:Helppage}}|帮助页]])。
-如果您误入此页,请点击浏览器中的“返回”按钮。',
+'newarticletext' => "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[[{{MediaWiki:Helppage}}|帮助页面]])。如果你是错误地到达这里,请点击你的浏览器的'''返回'''按钮。",
'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
'noarticletext-nopermission' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志],但你没有权限创建本页面。',
'gender-unknown' => '我不愿意指明(被称为“他/她”)',
'gender-male' => '他',
'gender-female' => '她',
-'prefs-help-gender' => '这是选填项目。
-软件使用其以显示正确的性别称呼。
-该信息将会公开。',
+'prefs-help-gender' => '该设置为可选项目。软件根据它的值在称呼你及对他人提及你时使用适当的语法性别。该信息会被公开。',
'email' => '电子邮件',
'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
'prefs-help-email' => '电子邮件是可选项,但是在您忘记密码时很有用。',
'zip-wrong-format' => '指定的文件不是一个 ZIP 文件。',
'zip-bad' => '该文件是已损坏或以其它方式无法读取的 ZIP 文件。
不能正确检查安全。',
-'zip-unsupported' => '该文件是 ZIP 文件,其中使用 MediaWiki 不支持的ZIP功能。
-不能正确检查安全。',
+'zip-unsupported' => '该文件是使用MediaWiki不支持的ZIP特性的ZIP文件。无法正确地检查其安全性。',
# Special:UploadStash
'uploadstash' => '上传隐藏',
$this->output( "\n" );
}
-
// Script specific parameters not defined on construction by
// Maintenance::addDefaultParams()
$scriptSpecificParams = array_diff_key(
*/
protected $db;
-
/**
* Drop the database connection $this->db and try to get a new one.
*
throw new MWException( __METHOD__ . " rotating DB failed to obtain new load balancer (" . $e->getMessage() . ")" );
}
-
// 2. The Connection, through the load balancer.
try {
$this->db = $this->lb->getConnection( DB_SLAVE, 'dump' );
}
}
-
function initProgress( $history = WikiExporter::FULL ) {
parent::initProgress();
$this->timeOfCheckpoint = $this->startTime;
return "";
}
-
/**
* May throw a database error if, say, the server dies during query.
* @param $id
require_once __DIR__ . '/commandLine.inc';
require_once __DIR__ . '/backupTextPass.inc';
-
$dumper = new TextPassDumper( $argv );
if ( !isset( $options['help'] ) ) {
$this->mSharedSupplement = true;
}
}
- $this-> { $this->mAction } ( $this->mShared );
+ $this->{ $this->mAction } ( $this->mShared );
if ( $this->mSharedSupplement ) {
$this->fetchUsed( true );
}
*/
public $findex;
-
/**
* A resource pointing to a sitemap file
*
continue;
}
-
$this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
$dbw->begin( __METHOD__ );
$err = $source->moveTo( $dest, false, $reason, !$noredirects );
$user->load();
return $user;
}
-
-
}
$maintClass = "ReassignEdits";
}
}
-
$maintClass = 'RefreshImageMetadata';
require_once RUN_MAINTENANCE_IF_MAIN;
}
}
-
$maintClass = "BatchedQueryRunner";
require_once RUN_MAINTENANCE_IF_MAIN;
$this->output( sprintf( "without session: %-10d %6.2f%%\n", $noSession, $noSession / $total * 100 ) );
$this->output( sprintf( "total: %-10d %6.2f%%\n", $total, 100 ) );
-
$this->output( "\nParser cache\n" );
$hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_hit' ) ) );
$expired = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_expired' ) ) );
$cs->check( $fix, $xml );
}
-
// ----------------------------------------------------------------------------------
/**
}
}
-
function error( $type, $msg, $ids ) {
if ( is_array( $ids ) && count( $ids ) == 1 ) {
$ids = reset( $ids );
}
$type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
-
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select(
array( 'page', 'revision', 'text' ),
require __DIR__ . '/../commandLine.inc';
-
if ( count( $args ) < 1 ) {
echo "Usage: php trackBlobs.php <cluster> [... <cluster>]\n";
echo "Adds blobs from a given ES cluster to the blob_tracking table\n";
}
}
-
/**
* This is used to check options. Only needed on construction
*
}
}
-
/** Change our users options */
private function CHANGER() {
$this->warn();
$lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
-
// Second row. Privileged actions.
$element = array();
$lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
-
// Third row. Language links.
$lines[] = $this->otherLanguages();
}
$bar = $this->sidebarAdditions( $bar );
}
-
// Fill out special sidebar items with content
$orig_bar = $bar;
$bar = array();
}
}
-
// Output the sidebar
// CologneBlue uses custom messages for some portlets, but we should keep the ids for consistency
$idToMessage = array(
<?php
}
} // end of class
-
-
print <<<EOT
ParserTest-specific options:
-
--regex="<regex>" Only run parser tests that match the given regex
--file="<filename>" File describing parser tests
--keep-uploads Re-use the same upload directory for each test, don't delete it
-
Database options:
--use-normal-tables Use normal DB tables.
--reuse-db Init DB only if tables are missing and keep after finish.
-
Debugging options:
--debug-tests Log testing activity to the PHPUnitCommand log channel.
"expected article not being created if empty"
);
-
$this->assertEdit(
'MediaWiki:January',
null,
);
}
-
/**
* Lame JSON schema validation.
*
$this->assertEquals( $result, wfArrayToCgi( $array ) );
}
-
/**
* @covers ::wfArrayToCgi
*/
$this->assertEquals( $matches, array( 'title' => "Lorem_ipsum_dolor_sit_amet,_consectetur_adipisicing_elit,_sed_do_eiusmod_tempor_incididunt_ut_labore_et_dolore_magna_aliqua._Ut_enim_ad_minim_veniam,_quis_nostrud_exercitation_ullamco_laboris_nisi_ut_aliquip_ex_ea_commodo_consequat._Duis_aute_irure_dolor_in_reprehenderit_in_voluptate_velit_esse_cillum_dolore_eu_fugiat_nulla_pariatur._Excepteur_sint_occaecat_cupidatat_non_proident,_sunt_in_culpa_qui_officia_deserunt_mollit_anim_id_est_laborum." ) );
}
-
/**
* Ensure that the php passed site of parameter values are not urldecoded
*/
$this->assertRevEquals( $orig, $rev );
}
-
/**
* @covers Revision::newFromArchiveRow
*/
}
}
-
/**
* @covers Revision::getContentFormat
*/
$this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
}
-
public function dataGetSize() {
return array(
array( "hello world.", CONTENT_MODEL_WIKITEXT, 12 ),
$this->assertEquals( "bar", $content->getText() ); // clones should be independent
}
-
/**
* Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
*
*/
public function testCleanParams( $cleanCallback, $params, $expected ) {
$method = new ReflectionMethod( 'Status', 'cleanParams' );
- $method->setAccessible(TRUE);
+ $method->setAccessible( true );
$status = new Status();
$status->cleanCallback = $cleanCallback;
);
}
-
/**
* @dataProvider provideIsCountable
* @covers WikiPage::isCountable
more stuff
";
-
public function dataReplaceSection() {
//NOTE: assume the Help namespace to contain wikitext
return array(
$this->assertTrue( $exception, "Got exception" );
}
-
/**
* @depends testLogin
*/
unlink( $filePath );
}
-
/**
* @depends testLogin
*/
unlink( $filePath );
}
-
/**
* @depends testLogin
*/
unlink( $filePaths[1] );
}
-
/**
* @depends testLogin
*/
)
);
-
public function __construct( $options = array() ) {
foreach ( array( 'dictionaryFile', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'shapesToDraw' ) as $property ) {
if ( isset( $options[$property] ) ) {
return $filenames;
}
-
/**
* Figure out how we write images. This is a factor of both format and the local system
* @param $format (a typical extension like 'svg', 'jpg', etc.)
return $filenames;
}
-
/**
* Generate data representing an image of random size (within limits),
* consisting of randomly colored and sized upward pointing triangles against a random background color
);
}
-
/**
* Based on an image specification, write such an image to disk, using the command line ImageMagick program ('convert').
*
$this->assertEquals( $expected, $quoted );
}
-
/**
* Feeds testAddIdentifierQuotes
*
class MWDebugTest extends MediaWikiTestCase {
-
protected function setUp() {
parent::setUp();
// Make sure MWDebug class is enabled
);
}
-
const TEST_WIDTH = 100;
const TEST_HEIGHT = 200;
$this->mediaPath = __DIR__ . '/../../data/media/';
-
-
$this->setMwGlobals( 'wgShowEXIF', true );
}
$this->assertEquals( $expected, $res['XMP'] );
}
-
public function testIPTCHashComparisionNoHash() {
$segments = JpegMetadataExtractor::segmentSplitter( $this->filePath . 'jpeg-xmp-psir.jpg' );
$res = JpegMetadataExtractor::doPSIR( $segments['PSIR'][0] );
$this->filePath = __DIR__ . '/../../data/media/';
-
$this->setMwGlobals( 'wgShowEXIF', true );
$this->backend = new FSFileBackend( array(
$this->assertEquals( 1, $meta['bitDepth'] );
}
-
public function testPngIndexColour() {
$meta = PNGMetadataExtractor::getMetadata( $this->filePath .
'Png-native-test.png' );
parent::tearDown();
}
-
/**
* First checks the return code
* of UploadBase::getTitle() and then the actual returned title
'Wrong CD start disk error' );
}
-
public function testCentralDirectoryGap() {
$this->readZipAssertError( 'cd-gap.zip', 'zip-bad',
'CD gap error' );
$this->assertConverted( $text, 'sr-ec', $msg );
}
-
/** Wrapper for converter::convertTo() method*/
protected function convertTo( $text, $variant ) {
return $this->getLang()
);
}
-
/**
* @dataProvider provideFormatDuration
* @covers Language::formatDuration
$this->assertConverted( $text, 'uz-cyrl', $msg );
}
-
/** Wrapper for converter::convertTo() method*/
protected function convertTo( $text, $variant ) {
return $this->getLang()->mConverter->convertTo( $text, $variant );
throw new MWException( "Could not determine revision id (" . $status->getWikiText() . ")" );
}
-
/**
* gunzips the given file and stores the result in the original file name
*
}
}
-
/**
* Step the current XML reader until node end of given name is found.
*
}
}
-
/**
* Asserts that the xml reader is at an element of given tag that contains a given text,
* and skips over the element.
$this->testCase = $testCase;
}
-
// --- Making protected functions visible for test
public function output( $out, $channel = null ) {
return call_user_func_array( array( "parent", __FUNCTION__ ), func_get_args() );
}
-
// --- Requirements for getting instance of abstract class
public function execute() {
*/
class MaintenanceTest extends MediaWikiTestCase {
-
/**
* The main Maintenance instance that is used for testing.
*
*/
private $m;
-
protected function setUp() {
parent::setUp();
$this->m = new MaintenanceFixup( $this );
parent::tearDown();
}
-
/**
* asserts the output before and after simulating shutdown
*
$this->expectOutputString( $postShutdownOutput );
}
-
// Although the following tests do not seem to be too consistent (compare for
// example the newlines within the test.*StringString tests, or the
// test.*Intermittent.* tests), the objective of these tests is not to describe
$this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
}
-
/**
* Constructs a temporary file that can be used for prefetching
*
$this->checkpointHelper( "gzip" );
}
-
/**
* Creates a stub file that is used for testing the text pass of dumps
*
*/
class BackupDumperLoggerTest extends DumpTestCase {
-
// We'll add several log entries and users for this test. The following
// variables hold the corresponding ids.
private $userId1, $userId2;
}
}
-
/**
* asserts that the xml reader is at the beginning of a log entry and skips over
* it while analyzing it.
$this->assertDumpEnd();
}
-
function testXmlDumpsBackupUseCase() {
// xmldumps-backup typically performs a single dump that that writes
// out three files
*/
private $mockInvocations = array( 'getStdin' => 0 );
-
/**
* Data for the fake stdin
*
private $textId4;
private $textId5;
-
/**
* @var Exception|null As the current MediaWikiTestCase::run is not
* robust enough to recover from thrown exceptions directly, we cannot
throw new MWException( "Could not determine text id" );
}
-
function addDBData() {
$this->tablesUsed[] = 'page';
$this->tablesUsed[] = 'revision';
}
}
-
protected function setUp() {
parent::setUp();
$this->fetchText = new SemiMockedFetchText();
}
-
/**
* Helper to relate FetchText's input and output
*/
$this->expectOutputString( $expectedOutput );
}
-
// Instead of the following functions, a data provider would be great.
// However, as data providers are evaluated /before/ addDBData, a data
// provider would not know the required ids.
);
}
-
#### Attributes for external links ##########################
private function getAttribs() {
# Sidebar text we will use everytime
return false;
}
-
/**
* Clear section name and its data
*/
return;
}
-
// Check the source file storage path
if ( !$img->exists() ) {
$redirectedLocation = false;
unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER
unset( $params['f'] ); // We're done with 'f' parameter.
-
// Get the normalized thumbnail name from the parameters...
try {
$thumbName = $img->thumbName( $params );