disabled.
=== New features in 1.21 ===
-* (bug 38110) Schema changes (adding or dropping tables, indicies and
+* (bug 38110) Schema changes (adding or dropping tables, indices and
fields) can be now be done separately from from other changes that
update.php makes. This is useful in environments that use database
permissions to restrict schema changes but allow the DB user that
MediaWiki normally runs as to perform other changes that update.php
- makes. Schema changes can be run seperately. See the file UPGRADE
+ makes. Schema changes can be run separately. See the file UPGRADE
for more information.
* (bug 34876) jquery.makeCollapsible has been improved in performance.
* Added ContentHandler facility to allow extensions to support other content
* (bug 5346) Categories that are redirects will be displayed italic in
the category links section at the bottom of a page.
* (bug 43915) New maintenance script deleteEqualMessages.php.
-* You can now create checkbox option matrixes through the HTMLCheckMatrix
+* You can now create checkbox option matrices through the HTMLCheckMatrix
subclass in HTMLForm.
* WikiText now permits the use of WAI-ARIA's role="presentation" inside of
html elements and tables. This allows presentational markup, especially
oc, pl, pt, rm, ro, ru, rup, sco, sk, sl, smn, sq, sr, sv, tk, tl, tr, tt, uk,
uz, vi.
* Added 'CategoryAfterPageAdded' and 'CategoryAfterPageRemoved' hooks.
+* Added 'HistoryRevisionTools' and 'DiffRevisionTools' hooks.
* (bug 33186) Add image rotation api "imagerotate"
+* (bug 34040) Add "User rights management" link on user page toolbox.
+* (bug 45526) Add QUnit assertion helper "QUnit.assert.htmlEqual" for asserting
+ structual equality of HTML (ignoring insignificant differences like
+ quotmarks, order and whitespace in the attribute list).
=== Bug fixes in 1.21 ===
* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
extensions) performed using Git 1.7.8+ should now appear.
* (bug 42184) $wgUploadSizeWarning missing second variable
* (bug 40326) Check if files exist with a different extension during uploading
+* (bug 34798) Updated CSS for Atom/RSS recent changes feeds to match on-wiki diffs.
+* (bug 42430) Calling numRows on MySQL no longer propagates unrelated errors.
+* (bug 44719) Removed mention of non-existing maintenance/migrateCurStubs.php
+ script in includes/DefaultSettings.php
+* (bug 45143) jquery.badge: Treat non-Latin variants of zero as zero as well.
+* (bug 46151) mwdocgen.php should not ignore exit code of doxygen command.
+* (bug 41889) Fix $.tablesorter rowspan exploding for complex cases.
=== API changes in 1.21 ===
* prop=revisions can now report the contentmodel and contentformat.
* (bug 43849) ApiQueryImageInfo no longer throws exceptions with ForeignDBRepo
redirects.
* On error, any warnings generated before that error will be shown in the result.
-* action=help suports generalized submodules (modules=query+value), querymodules obsolete
+* action=help supports generalized submodules (modules=query+value), querymodules obsolete
* ApiQueryImageInfo continuation is more reliable. The only major change is
that the imagerepository property will no longer be set on page objects not
processed in the current query (i.e. non-images or those skipped due to
* ApiQueryImageInfo will now limit the number of calls to File::transform made
in any one query. If there are too many, iicontinue will be returned.
* action=query&meta=siteinfo&siprop=general will now return the regexes used for
- link trails and link prefices. Added for Parsoid support.
+ link trails and link prefixes. Added for Parsoid support.
* Added an API query module list=pageswithprop, which lists pages using a
particular page property.
* Added an API query module list=pagepropnames, which lists all page prop names
* (bug 33304) list=allpages will no longer return duplicate entries when
querying protection.
* (bug 33304) list=allpages will now find really old indefinite protections.
+* (bug 45937) meta=allmessages will report a syntactically invalid lang as a
+ proper error instead of as an uncaught exception.
=== API internal changes in 1.21 ===
* For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
* South Azerbaijani (azb) added.
* (bug 30040) Autonym for nds-nl is now 'Nedersaksies' (was 'Nedersaksisch').
+* (bug 45436) Autonym for pi (Pali) is now 'पालि' (was ''पाळि').
* (bug 34977) Now formatted numbers in Spanish use space as separator
for thousands, as mandated by the Real Academia Española.
* (bug 35031) Kurdish formatted numbers now use period and comma
* as an argument in the URL ('?action=') and with write-enabled set to the
* value of $wgEnableWriteAPI as specified in LocalSettings.php.
* It then invokes "execute()" on the ApiMain object instance, which
- * produces output in the format sepecified in the URL.
+ * produces output in the format specified in the URL.
*
* Copyright © 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
*
<?php
/**
* Version of api.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
],
"license": "GPL-2.0",
- "repositories": [
- {
- "type": "vcs",
- "url": "https://gerrit.wikimedia.org/r/p/mediawiki/core.git"
- }
- ],
"support": {
"issues": "https://bugzilla.wikimedia.org/",
"irc": "irc://irc.freenode.net/mediawiki",
$old: the ?old= param value from the url
$new: the ?new= param value from the url
+'DiffRevisionTools': Override or extend the revision tools available from the
+diff view, i.e. undo, etc.
+$rev: Revision object
+&$links: Array of HTML links
+
'DiffViewHeader': Called before diff display
$diff: DifferenceEngine object that's calling
$oldRev: Revision object of the "old" revision (may be null/invalid)
Special:Version, use this to change the list.
&$extTypes: associative array of repo URLS to viewer URLs.
+'HistoryRevisionTools': Override or extend the revision tools available from the
+page history view, i.e. undo, rollback, etc.
+$rev: Revision object
+&$links: Array of HTML links
+
'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki
image insertion. You can skip the default logic entirely by returning false, or
just modify a few things using call-by-reference.
'PageHistoryBeforeList': When a history page list is about to be constructed.
$article: the article that the history is loading for
+$context: RequestContext object
'PageHistoryLineEnding' : Right before the end <li> is added to a history line.
$row: the revision row for this line
&$tables: array of tables to be queried
&$join_conds: join conditions for the tables
&$fields: array of query fields
+$values: array of variables with watchlist options
'TestCanonicalRedirect': Called when about to force a redirect to a canonical
URL for a title when we have no other parameters on the URL. Gives a chance for
<?php
/**
* Version of img_auth.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* Actions generally fall into two groups: the show-a-form-then-do-something-with-the-input
* format (protect, delete, move, etc), and the just-do-something format (watch, rollback,
- * patrol, etc). The FormAction and FormlessAction classes respresent these two groups.
+ * patrol, etc). The FormAction and FormlessAction classes represent these two groups.
*/
abstract class Action {
/**
* Check if a given action is recognised, even if it's disabled
*
- * @param $name String: name of an action
+ * @param string $name name of an action
* @return Bool
*/
final public static function exists( $name ) {
/**
* Execute the action silently, not giving any output. Since these actions don't have
* forms, they probably won't have any data, but some (eg rollback) may do
- * @param $data Array values that would normally be in the GET request
- * @param $captureErrors Bool whether to catch exceptions and just return false
+ * @param array $data values that would normally be in the GET request
+ * @param bool $captureErrors whether to catch exceptions and just return false
* @throws ErrorPageError|Exception
* @return Bool whether execution was successful
*/
# tell the client to use a cached copy, without a way to purge it.
if ( $wgUseSquid ) {
- # Expect explicite purge of the proxy cache, but require end user agents
+ # Expect explicit purge of the proxy cache, but require end user agents
# to revalidate against the proxy on each visit.
# Surrogate-Control controls our Squid, Cache-Control downstream caches
/**
* Constructor from a page id
- * @param $id Int article ID to load
+ * @param int $id article ID to load
* @return Article|null
*/
public static function newFromID( $id ) {
/**
* Get the robot policy to be used for the current view
- * @param $action String the action= GET parameter
+ * @param string $action the action= GET parameter
* @param $pOutput ParserOutput
* @return Array the policy that should be set
* TODO: actions other than 'view'
* Revision as of \<date\>; view current revision
* \<- Previous version | Next Version -\>
*
- * @param $oldid int: revision ID of this article revision
+ * @param int $oldid revision ID of this article revision
*/
public function setOldSubtitle( $oldid = 0 ) {
if ( !wfRunHooks( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
/**
* Output deletion confirmation dialog
* @todo FIXME: Move to another file?
- * @param $reason String: prefilled reason
+ * @param string $reason prefilled reason
*/
public function confirmDelete( $reason ) {
wfDebug( "Article::confirmDelete\n" );
*
* @param $oldid mixed integer Revision ID or null
* @param $user User The relevant user
- * @return ParserOutput or false if the given revsion ID is not found
+ * @return ParserOutput or false if the given revision ID is not found
*/
public function getParserOutput( $oldid = null, User $user = null ) {
//XXX: bypasses mParserOptions and thus setParserOptions()
*
* @deprecated in 1.18; call OutputPage::redirect() directly
* @param $noRedir Boolean: add redirect=no
- * @param $sectionAnchor String: section to redirect to, including "#"
- * @param $extraQuery String: extra query params
+ * @param string $sectionAnchor section to redirect to, including "#"
+ * @param string $extraQuery extra query params
*/
public function doRedirect( $noRedir = false, $sectionAnchor = '', $extraQuery = '' ) {
wfDeprecated( __METHOD__, '1.18' );
* Use PHP's magic __get handler to handle accessing of
* raw WikiPage fields for backwards compatibility.
*
- * @param $fname String Field name
+ * @param string $fname Field name
*/
public function __get( $fname ) {
if ( property_exists( $this->mPage, $fname ) ) {
* Use PHP's magic __set handler to handle setting of
* raw WikiPage fields for backwards compatibility.
*
- * @param $fname String Field name
+ * @param string $fname Field name
* @param $fvalue mixed New value
*/
public function __set( $fname, $fvalue ) {
* Use PHP's magic __call handler to transform instance calls to
* WikiPage functions for backwards compatibility.
*
- * @param $fname String Name of called method
- * @param $args Array Arguments to the method
+ * @param string $fname Name of called method
+ * @param array $args Arguments to the method
* @return mixed
*/
public function __call( $fname, $args ) {
* you might need to munge it (for instance, for lowercase initial
* letters).
*
- * @param $username String: username.
+ * @param string $username username.
* @return bool
*/
public function userExists( $username ) {
* you might need to munge it (for instance, for lowercase initial
* letters).
*
- * @param $username String: username.
- * @param $password String: user password.
+ * @param string $username username.
+ * @param string $password user password.
* @return bool
*/
public function authenticate( $username, $password ) {
* Modify options in the login template.
*
* @param $template UserLoginTemplate object.
- * @param $type String 'signup' or 'login'. Added in 1.16.
+ * @param string $type 'signup' or 'login'. Added in 1.16.
*/
public function modifyUITemplate( &$template, &$type ) {
# Override this!
/**
* Set the domain this plugin is supposed to use when authenticating.
*
- * @param $domain String: authentication domain.
+ * @param string $domain authentication domain.
*/
public function setDomain( $domain ) {
$this->domain = $domain;
/**
* Check to see if the specific domain is a valid domain.
*
- * @param $domain String: authentication domain.
+ * @param string $domain authentication domain.
* @return bool
*/
public function validDomain( $domain ) {
* Return true if successful.
*
* @param $user User object.
- * @param $password String: password.
+ * @param string $password password.
* @return bool
*/
public function setPassword( $user, $password ) {
* Check if a user should authenticate locally if the global authentication fails.
* If either this or strict() returns true, local authentication is not used.
*
- * @param $username String: username.
+ * @param string $username username.
* @return Boolean
*/
public function strictUserAuth( $username ) {
'MagicWord' => 'includes/MagicWord.php',
'MagicWordArray' => 'includes/MagicWord.php',
'MailAddress' => 'includes/UserMailer.php',
+ 'MappedIterator' => 'includes/MappedIterator.php',
'MediaWiki' => 'includes/Wiki.php',
'MediaWiki_I18N' => 'includes/SkinTemplate.php',
'Message' => 'includes/Message.php',
/**
* autoload - take a class name and attempt to load it
*
- * @param $className String: name of class we're looking for.
+ * @param string $className name of class we're looking for.
* @return bool Returning false is important on failure as
* it allows Zend to try and look in other registered autoloaders
* as well.
* Does not return groups the user already belongs to or has once belonged.
*
* @param $user User The user to get the groups for
- * @param $event String key in $wgAutopromoteOnce (each one has groups/criteria)
+ * @param string $event key in $wgAutopromoteOnce (each one has groups/criteria)
*
* @return array Groups the user should be promoted to.
*
return true;
}
}
- # If we got here, the array presumably does not contain other condi-
- # tions; it's not recursive. Pass it off to self::checkCondition.
+ // If we got here, the array presumably does not contain other conditions;
+ // it's not recursive. Pass it off to self::checkCondition.
if ( !is_array( $cond ) ) {
$cond = array( $cond );
}
/**
* As recCheckCondition, but *not* recursive. The only valid conditions
* are those whose first element is APCOND_EMAILCONFIRMED/APCOND_EDITCOUNT/
- * APCOND_AGE. Other types will throw an exception if no extension evalu-
- * ates them.
+ * APCOND_AGE. Other types will throw an exception if no extension evaluates them.
*
- * @param $cond Array: A condition, which must not contain other conditions
+ * @param array $cond A condition, which must not contain other conditions
* @param $user User The user to check the condition against
* @throws MWException
* @return bool Whether the condition is true for the user
* user ID. Tries the user ID first, and if that doesn't work, tries
* the address.
*
- * @param $address String: IP address of user/anon
+ * @param string $address IP address of user/anon
* @param $user Integer: user id of user
* @return Block Object
* @deprecated since 1.18
/**
* Get a block from the DB, with either the given address or the given username
*
- * @param $address string The IP address of the user, or blank to skip IP blocks
- * @param $user int The user ID, or zero for anonymous users
+ * @param string $address The IP address of the user, or blank to skip IP blocks
+ * @param int $user The user ID, or zero for anonymous users
* @return Boolean: the user is blocked from editing
* @deprecated since 1.18
*/
/**
* Load a block from the database which affects the already-set $this->target:
* 1) A block directly on the given user or IP
- * 2) A rangeblock encompasing the given IP (smallest first)
+ * 2) A rangeblock encompassing the given IP (smallest first)
* 3) An autoblock on the given IP
* @param $vagueTarget User|String also search for blocks affecting this target. Doesn't
* make any sense to use TYPE_AUTO / TYPE_ID here. Leave blank to skip IP lookups.
list( $target, $type ) = self::parseTarget( $vagueTarget );
switch( $type ) {
case self::TYPE_USER:
- # Slightly wierd, but who are we to argue?
+ # Slightly weird, but who are we to argue?
$conds['ipb_address'][] = (string)$target;
break;
}
/**
- * Get a set of SQL conditions which will select rangeblocks encompasing a given range
- * @param $start String Hexadecimal IP representation
- * @param $end String Hexadecimal IP represenation, or null to use $start = $end
+ * Get a set of SQL conditions which will select rangeblocks encompassing a given range
+ * @param string $start Hexadecimal IP representation
+ * @param string $end Hexadecimal IP representation, or null to use $start = $end
* @return String
*/
public static function getRangeCond( $start, $end = null ) {
* Update a block in the DB with new parameters.
* The ID field needs to be loaded first.
*
- * @return Int number of affected rows, which should probably be 1 or something's
+ * @return Int number of affected rows, which should probably be 1 or something has
* gone slightly awry
*/
public function update() {
* blocked by this Block. This will use the recentchanges table.
*
* @param Block $block
- * @param Array &$blockIds
+ * @param array &$blockIds
* @return Array: block IDs of retroactive autoblocks made
*/
protected static function defaultRetroactiveAutoblock( Block $block, array &$blockIds ) {
* Checks whether a given IP is on the autoblock whitelist.
* TODO: this probably belongs somewhere else, but not sure where...
*
- * @param $ip String: The IP to check
+ * @param string $ip The IP to check
* @return Boolean
*/
public static function isWhitelistedFromAutoblocks( $ip ) {
/**
* Autoblocks the given IP, referring to this Block.
*
- * @param $autoblockIP String: the IP to autoblock.
+ * @param string $autoblockIP the IP to autoblock.
* @return mixed: block ID if an autoblock was inserted, false if not.
*/
public function doAutoblock( $autoblockIP ) {
/**
* Encode expiry for DB
*
- * @param $expiry String: timestamp for expiry, or
+ * @param string $expiry timestamp for expiry, or
* @param $db DatabaseBase object
* @return String
* @deprecated since 1.18; use $dbw->encodeExpiry() instead
/**
* Decode expiry which has come from the DB
*
- * @param $expiry String: Database expiry format
- * @param $timestampType Int Requested timestamp format
+ * @param string $expiry Database expiry format
+ * @param int $timestampType Requested timestamp format
* @return String
* @deprecated since 1.18; use $wgLang->formatExpiry() instead
*/
}
/**
- * Gets rid of uneeded numbers in quad-dotted/octet IP strings
+ * Gets rid of unneeded numbers in quad-dotted/octet IP strings
* For example, 127.111.113.151/24 -> 127.111.113.0/24
- * @param $range String: IP address to normalize
+ * @param string $range IP address to normalize
* @return string
* @deprecated since 1.18, call IP::sanitizeRange() directly
*/
/**
* Convert a submitted expiry time, which may be relative ("2 weeks", etc) or absolute
* ("24 May 2034"), into an absolute timestamp we can put into the database.
- * @param $expiry String: whatever was typed into the form
+ * @param string $expiry whatever was typed into the form
* @return String: timestamp or "infinity" string for th DB implementation
* @deprecated since 1.18 moved to SpecialBlock::parseExpiryInput()
*/
* @param $vagueTarget String|User|Int as above, but we will search for *any* block which
* affects that target (so for an IP address, get ranges containing that IP; and also
* get any relevant autoblocks). Leave empty or blank to skip IP-based lookups.
- * @param $fromMaster Bool whether to use the DB_MASTER database
+ * @param bool $fromMaster whether to use the DB_MASTER database
* @return Block|null (null if no relevant block could be found). The target and type
* of the returned Block will refer to the actual block which was found, which might
* not be the same as the target you gave if you used $vagueTarget!
/**
* Set the user who implemented (or will implement) this block
- * @param $user User|string Local User object or username string for foriegn users
+ * @param $user User|string Local User object or username string for foreign users
*/
public function setBlocker( $user ) {
$this->blocker = $user;
/**
* Factory function.
*
- * @param $name Array: A category name (no "Category:" prefix). It need
+ * @param array $name A category name (no "Category:" prefix). It need
* not be normalized, with spaces replaced by underscores.
* @return mixed Category, or false on a totally invalid name
*/
# NOTE: the row often results from a LEFT JOIN on categorylinks. This may result in
# all the cat_xxx fields being null, if the category page exists, but nothing
- # was ever added to the category. This case should be treated linke an empty
+ # was ever added to the category. This case should be treated link an empty
# category, if possible.
if ( $row->cat_title === null ) {
/**
* Constructor from a page id
- * @param $id Int article ID to load
+ * @param int $id article ID to load
* @return CategoryPage|null
*/
public static function newFromID( $id ) {
* @since 1.19 $context is a second, required parameter
* @param $title Title
* @param $context IContextSource
- * @param $from Array An array with keys page, subcat,
+ * @param array $from An array with keys page, subcat,
* and file for offset of results of each section (since 1.17)
- * @param $until Array An array with 3 keys for until of each section (since 1.17)
+ * @param array $until An array with 3 keys for until of each section (since 1.17)
* @param $query Array
*/
function __construct( $title, IContextSource $context, $from = array(), $until = array(), $query = array() ) {
$link = Linker::link( $title );
if ( $isRedirect ) {
// This seems kind of pointless given 'mw-redirect' class,
- // but keeping for back-compatiability with user css.
+ // but keeping for back-compatibility with user css.
$link = '<span class="redirect-in-category">' . $link . '</span>';
}
$this->articles[] = $link;
$r = '';
# @todo FIXME: Here and in the other two sections: we don't need to bother
- # with this rigamarole if the entire category contents fit on one page
+ # with this rigmarole if the entire category contents fit on one page
# and have already been retrieved. We can just use $rescnt in that
# case and save a query and some logic.
$dbcnt = $this->cat->getPageCount() - $this->cat->getSubcatCount()
* Get the paging links for a section (subcats/pages/files), to go at the top and bottom
* of the output.
*
- * @param $type String: 'page', 'subcat', or 'file'
+ * @param string $type 'page', 'subcat', or 'file'
* @return String: HTML output, possibly empty if there are no other pages
*/
private function getSectionPagingLinks( $type ) {
/**
* Create paging links, as a helper method to getSectionPagingLinks().
*
- * @param $first String The 'until' parameter for the generated URL
- * @param $last String The 'from' parameter for the genererated URL
- * @param $type String A prefix for parameters, 'page' or 'subcat' or
+ * @param string $first The 'until' parameter for the generated URL
+ * @param string $last The 'from' parameter for the generated URL
+ * @param string $type A prefix for parameters, 'page' or 'subcat' or
* 'file'
* @return String HTML
*/
* corresponds to the correct segment of the category.
*
* @param Title $title: The title (usually $this->title)
- * @param String $section: Which section
+ * @param string $section: Which section
* @throws MWException
* @return Title
*/
* category-subcat-count-limited, category-file-count,
* category-file-count-limited.
*
- * @param $rescnt Int: The number of items returned by our database query.
- * @param $dbcnt Int: The number of items according to the category table.
- * @param $type String: 'subcat', 'article', or 'file'
+ * @param int $rescnt The number of items returned by our database query.
+ * @param int $dbcnt The number of items according to the category table.
+ * @param string $type 'subcat', 'article', or 'file'
* @return String: A message giving the number of items, to output to HTML.
*/
private function getCountMessage( $rescnt, $dbcnt, $type ) {
* Initializes the instance. Do this prior to calling run().
* @param $article_ids Array of article IDs
* @param $categories FIXME
- * @param $mode String: FIXME, default 'AND'.
+ * @param string $mode FIXME, default 'AND'.
* @todo FIXME: $categories/$mode
*/
function seed( $article_ids, $categories, $mode = 'AND' ) {
/**
* This functions recurses through the parent representation, trying to match the conditions
- * @param $id int The article/category to check
- * @param $conds array The array of categories to match
- * @param $path array used to check for recursion loops
+ * @param int $id The article/category to check
+ * @param array $conds The array of categories to match
+ * @param array $path used to check for recursion loops
* @return bool Does this match the conditions?
*/
function check( $id, &$conds, $path = array() ) {
$path[] = $id;
- # Shortcut (runtime paranoia): No contitions=all matched
+ # Shortcut (runtime paranoia): No conditions=all matched
if ( count( $conds ) == 0 ) {
return true;
}
/**
* Creates HTML for the given tags
*
- * @param $tags String: Comma-separated list of tags
- * @param $page String: A label for the type of action which is being displayed,
+ * @param string $tags Comma-separated list of tags
+ * @param string $page A label for the type of action which is being displayed,
* for example: 'history', 'contributions' or 'newpages'
*
* @return Array with two items: (html, classes)
/**
* Get a short description for a tag
*
- * @param $tag String: tag
+ * @param string $tag tag
*
* @return String: Short description of the tag from "mediawiki:tag-$tag" if this message exists,
* html-escaped version of $tag otherwise
/**
* Add tags to a change given its rc_id, rev_id and/or log_id
*
- * @param $tags String|Array: Tags to add to the change
+ * @param string|array $tags Tags to add to the change
* @param $rc_id int: rc_id of the change to add the tags to
* @param $rev_id int: rev_id of the change to add the tags to
* @param $log_id int: log_id of the change to add the tags to
- * @param $params String: params to put in the ct_params field of tabel 'change_tag'
+ * @param string $params params to put in the ct_params field of table 'change_tag'
*
* @throws MWException
* @return bool: false if no changes are made, otherwise true
* Handles selecting tags, and filtering.
* Needs $tables to be set up properly, so we can figure out which join conditions to use.
*
- * @param $tables String|Array: Tabel names, see DatabaseBase::select
- * @param $fields String|Array: Fields used in query, see DatabaseBase::select
- * @param $conds String|Array: conditions used in query, see DatabaseBase::select
+ * @param string|array $tables Table names, see DatabaseBase::select
+ * @param string|array $fields Fields used in query, see DatabaseBase::select
+ * @param string|array $conds conditions used in query, see DatabaseBase::select
* @param $join_conds Array: join conditions, see DatabaseBase::select
- * @param $options Array: options, see Database::select
+ * @param array $options options, see Database::select
* @param bool|string $filter_tag Tag to select on
*
* @throws MWException When unable to determine appropriate JOIN condition for tagging
/**
* Build a text box to select a change tag
*
- * @param $selected String: tag to select by default
+ * @param string $selected tag to select by default
* @param $fullForm Boolean:
* - if false, then it returns an array of (label, form).
* - if true, it returns an entire form around the selector.
/**
* Constructor
*
- * @param $format String: feed's format (either 'rss' or 'atom')
- * @param $type String: type of feed (for cache keys)
+ * @param string $format feed's format (either 'rss' or 'atom')
+ * @param string $type type of feed (for cache keys)
*/
public function __construct( $format, $type ) {
$this->format = $format;
/**
* Get a ChannelFeed subclass object to use
*
- * @param $title String: feed's title
- * @param $description String: feed's description
- * @param $url String: url of origin page
+ * @param string $title feed's title
+ * @param string $description feed's description
+ * @param string $url url of origin page
* @return ChannelFeed subclass or false on failure
*/
public function getFeedObject( $title, $description, $url ) {
/**
* Save to feed result to $messageMemc
*
- * @param $feed String: feed's content
- * @param $timekey String: memcached key of the last modification
- * @param $key String: memcached key of the content
+ * @param string $feed feed's content
+ * @param string $timekey memcached key of the last modification
+ * @param string $key memcached key of the content
*/
public function saveToCache( $feed, $timekey, $key ) {
global $messageMemc;
* Try to load the feed result from $messageMemc
*
* @param $lastmod Integer: timestamp of the last item in the recentchanges table
- * @param $timekey String: memcached key of the last modification
- * @param $key String: memcached key of the content
+ * @param string $timekey memcached key of the last modification
+ * @param string $key memcached key of the content
* @return string|bool feed's content on cache hit or false on cache miss
*/
public function loadFromCache( $lastmod, $timekey, $key ) {
protected $message;
/**
- * Changeslist contructor
+ * Changeslist constructor
*
* @param $obj Skin or IContextSource
*/
* This first argument used to be an User object.
*
* @deprecated in 1.18; use newFromContext() instead
- * @param $unused string|User Unused
+ * @param string|User $unused Unused
* @return ChangesList|EnhancedChangesList|OldChangesList derivative
*/
public static function newFromUser( $unused ) {
/**
* Returns the appropriate flags for new page, minor change and patrolling
- * @param $flags Array Associative array of 'flag' => Bool
- * @param $nothing String to use for empty space
+ * @param array $flags Associative array of 'flag' => Bool
+ * @param string $nothing to use for empty space
* @return String
*/
protected function recentChangesFlags( $flags, $nothing = ' ' ) {
* unpatrolled edit. By default in English it will contain "N", "m", "b",
* "!" respectively, plus it will have an appropriate title and class.
*
- * @param $flag String: 'newpage', 'unpatrolled', 'minor', or 'bot'
+ * @param string $flag 'newpage', 'unpatrolled', 'minor', or 'bot'
* @return String: Raw HTML
*/
public static function flag( $flag ) {
}
/**
- * @param $s string HTML to update
+ * @param string $s HTML to update
* @param $rc_timestamp mixed
*/
public function insertDateHeader( &$s, $rc_timestamp ) {
}
/**
- * @param $s string HTML to update
+ * @param string $s HTML to update
* @param $title Title
* @param $logtype string
*/
}
/**
- * @param $s string HTML to update
+ * @param string $s HTML to update
* @param $rc RecentChange
* @param $unpatrolled
*/
}
/**
- * @param $s string HTML to update
+ * @param string $s HTML to update
* @param $rc RecentChange
* @param $unpatrolled
* @param $watched
/**
* Insert time timestamp string from $rc into $s
*
- * @param $s string HTML to update
+ * @param string $s HTML to update
* @param $rc RecentChange
*/
public function insertTimestamp( &$s, $rc ) {
}
public function insertExtra( &$s, &$rc, &$classes ) {
- ## Empty, used for subclassers to add anything special.
+ // Empty, used for subclasses to add anything special.
}
protected function showAsUnpatrolled( RecentChange $rc ) {
* Format a line using the old system (aka without any javascript).
*
* @param $rc RecentChange, passed by reference
- * @param $watched Bool (default false)
- * @param $linenumber Int (default null)
+ * @param bool $watched (default false)
+ * @param int $linenumber (default null)
*
* @return string|bool
*/
/**
* Generate HTML for an arrow or placeholder graphic
- * @param $dir String: one of '', 'd', 'l', 'r'
- * @param $alt String: text
- * @param $title String: text
+ * @param string $dir one of '', 'd', 'l', 'r'
+ * @param string $alt text
+ * @param string $title text
* @return String: HTML "<img>" tag
*/
protected function arrow( $dir, $alt = '', $title = '' ) {
}
class IcuCollation extends Collation {
+ const FIRST_LETTER_VERSION = 1;
+
var $primaryCollator, $mainCollator, $locale;
var $firstLetterData;
/**
* Additional characters (or character groups) to be considered separate
- * letters for given languages, compared to the data stored in the
+ * letters for given languages, or to be removed from the list of such
+ * letters (denoted by keys starting with '-').
+ *
+ * These are additions to (or subtractions from) the data stored in the
* first-letters-root.ser file (which among others includes full basic latin,
* cyrillic and greek alphabets).
*
// Verified by native speakers
'be' => array( "Ё" ),
'be-tarask' => array( "Ё" ),
+ 'en' => array(),
'fi' => array( "Å", "Ä", "Ö" ),
+ 'hu' => array( "Cs", "Dz", "Dzs", "Gy", "Ly", "Ny", "Ö", "Sz", "Ty", "Ü", "Zs" ),
+ 'it' => array(),
'pl' => array( "Ą", "Ć", "Ę", "Ł", "Ń", "Ó", "Ś", "Ź", "Ż" ),
+ 'pt' => array(),
'ru' => array(),
+ 'uk' => array( "Ґ", "Ь" ),
// Not verified, but likely correct
'af' => array(),
- 'ast' => array( "CH", "LL", "Ñ" ),
+ 'ast' => array( "Ch", "Ll", "Ñ" ),
'az' => array( "Ç", "Ə", "Ğ", "İ", "Ö", "Ş", "Ü" ),
'bg' => array(),
- 'br' => array( "CH", "C'H" ),
- 'bs' => array( "Ä\8c", "Ä\86", "DŽ", "Ä\90", "LJ", "NJ", "Š", "Ž" ),
+ 'br' => array( "Ch", "C'h" ),
+ 'bs' => array( "Ä\8c", "Ä\86", "Dž", "Ä\90", "Lj", "Nj", "Š", "Ž" ),
'ca' => array(),
'co' => array(),
- 'cs' => array( "Č", "CH", "Ř", "Š", "Ž" ),
- 'cy' => array( "CH", "DD", "FF", "NG", "LL", "PH", "RH", "TH" ),
+ 'cs' => array( "Č", "Ch", "Ř", "Š", "Ž" ),
+ 'cy' => array( "Ch", "Dd", "Ff", "Ng", "Ll", "Ph", "Rh", "Th" ),
'da' => array( "Æ", "Ø", "Å" ),
'de' => array(),
- 'dsb' => array( "Ä\8c", "Ä\86", "DŹ", "Ä\9a", "CH", "Ł", "Ń", "Ŕ", "Š", "Ś", "Ž", "Ź" ),
+ 'dsb' => array( "Ä\8c", "Ä\86", "Dź", "Ä\9a", "Ch", "Ł", "Ń", "Ŕ", "Š", "Ś", "Ž", "Ź" ),
'el' => array(),
- 'en' => array(),
'eo' => array( "Ĉ", "Ĝ", "Ĥ", "Ĵ", "Ŝ", "Ŭ" ),
'es' => array( "Ñ" ),
'et' => array( "Š", "Ž", "Õ", "Ä", "Ö", "Ü" ),
'fy' => array(),
'ga' => array(),
'gd' => array(),
- 'gl' => array( "CH", "LL", "Ñ" ),
- 'hr' => array( "Č", "Ć", "DŽ", "Đ", "LJ", "NJ", "Š", "Ž" ),
- 'hsb' => array( "Č", "DŹ", "Ě", "CH", "Ł", "Ń", "Ř", "Š", "Ć", "Ž" ),
- 'hu' => array( "CS", "DZ", "DZS", "GY", "LY", "NY", "Ö", "SZ", "TY", "Ü", "ZS" ),
+ 'gl' => array( "Ch", "Ll", "Ñ" ),
+ 'hr' => array( "Č", "Ć", "Dž", "Đ", "Lj", "Nj", "Š", "Ž" ),
+ 'hsb' => array( "Č", "Dź", "Ě", "Ch", "Ł", "Ń", "Ř", "Š", "Ć", "Ž" ),
'is' => array( "Á", "Ð", "É", "Í", "Ó", "Ú", "Ý", "Þ", "Æ", "Ö", "Å" ),
- 'it' => array(),
'kk' => array( "Ү", "І" ),
'kl' => array( "Æ", "Ø", "Å" ),
'ku' => array( "Ç", "Ê", "Î", "Ş", "Û" ),
'lv' => array( "Č", "Ģ", "Ķ", "Ļ", "Ņ", "Š", "Ž" ),
'mk' => array(),
'mo' => array( "Ă", "Â", "Î", "Ş", "Ţ" ),
- 'mt' => array( "Ä\8a", "Ä ", "GĦ", "Ħ", "Ż" ),
+ 'mt' => array( "Ä\8a", "Ä ", "Għ", "Ħ", "Ż" ),
'nl' => array(),
'no' => array( "Æ", "Ø", "Å" ),
'oc' => array(),
- 'pt' => array(),
'rm' => array(),
'ro' => array( "Ă", "Â", "Î", "Ş", "Ţ" ),
'rup' => array( "Ă", "Â", "Î", "Ľ", "Ń", "Ş", "Ţ" ),
'sco' => array(),
- 'sk' => array( "Ä", "Č", "CH", "Ô", "Š", "Ž" ),
+ 'sk' => array( "Ä", "Č", "Ch", "Ô", "Š", "Ž" ),
'sl' => array( "Č", "Š", "Ž" ),
'smn' => array( "Á", "Č", "Đ", "Ŋ", "Š", "Ŧ", "Ž", "Æ", "Ø", "Å", "Ä", "Ö" ),
- 'sq' => array( "Ç", "DH", "Ë", "GJ", "LL", "NJ", "RR", "SH", "TH", "XH", "ZH" ),
+ 'sq' => array( "Ç", "Dh", "Ë", "Gj", "Ll", "Nj", "Rr", "Sh", "Th", "Xh", "Zh" ),
'sr' => array(),
'sv' => array( "Å", "Ä", "Ö" ),
+ '-sv' => array( "Þ" ), // sorted as "th" in Swedish, causing unexpected output - bug 45446
'tk' => array( "Ç", "Ä", "Ž", "Ň", "Ö", "Ş", "Ü", "Ý" ),
- 'tl' => array( "Ñ", "NG" ),
+ 'tl' => array( "Ñ", "Ng" ),
'tr' => array( "Ç", "Ğ", "İ", "Ö", "Ş", "Ü" ),
'tt' => array( "Ә", "Ө", "Ү", "Җ", "Ң", "Һ" ),
- 'uk' => array( "Ґ", "Ь" ),
- 'uz' => array( "CH", "G'", "NG", "O'", "SH" ),
+ 'uz' => array( "Ch", "G'", "Ng", "O'", "Sh" ),
'vi' => array( "Ă", "Â", "Đ", "Ê", "Ô", "Ơ", "Ư" ),
);
$cacheKey = wfMemcKey( 'first-letters', $this->locale );
$cacheEntry = $cache->get( $cacheKey );
- if ( $cacheEntry ) {
+ if ( $cacheEntry && isset( $cacheEntry['version'] )
+ && $cacheEntry['version'] == self::FIRST_LETTER_VERSION )
+ {
$this->firstLetterData = $cacheEntry;
return $this->firstLetterData;
}
if ( isset ( self::$tailoringFirstLetters[$this->locale] ) ) {
$letters = wfGetPrecompiledData( "first-letters-root.ser" );
+ // Append additional characters
$letters = array_merge( $letters, self::$tailoringFirstLetters[$this->locale] );
+ // Remove unnecessary ones, if any
+ if ( isset( self::$tailoringFirstLetters[ '-' . $this->locale ] ) ) {
+ $letters = array_diff( $letters, self::$tailoringFirstLetters[ '-' . $this->locale ] );
+ }
} else {
$letters = wfGetPrecompiledData( "first-letters-{$this->locale}.ser" );
if ( $letters === false ) {
ksort( $letterMap, SORT_STRING );
$data = array(
'chars' => array_values( $letterMap ),
- 'keys' => array_keys( $letterMap )
+ 'keys' => array_keys( $letterMap ),
+ 'version' => self::FIRST_LETTER_VERSION,
);
// Reduce memory usage before caching
* Do a binary search, and return the index of the largest item that sorts
* less than or equal to the target value.
*
- * @param $valueCallback array A function to call to get the value with
+ * @param array $valueCallback A function to call to get the value with
* a given array index.
- * @param $valueCount int The number of items accessible via $valueCallback,
+ * @param int $valueCount The number of items accessible via $valueCallback,
* indexed from 0 to $valueCount - 1
- * @param $comparisonCallback array A callback to compare two values, returning
+ * @param array $comparisonCallback A callback to compare two values, returning
* -1, 0 or 1 in the style of strcmp().
- * @param $target string The target value to find.
+ * @param string $target The target value to find.
*
* @return int|bool The item index of the lower bound, or false if the target value
* sorts before all items.
/**
* Edit the text. Returns the edited text.
- * @param $ops Array of operations.
+ * @param array $ops of operations.
*
* Operations are given as an associative array, with members:
* type: One of delete, set, append or insert (required)
* setVar( $arr, 'foo/bar', 'baz', 3 ); will set
* $arr['foo']['bar']['baz'] = 3;
* @param $array array
- * @param $path string slash-delimited path
+ * @param string $path slash-delimited path
* @param $key mixed Key
* @param $value mixed Value
*/
* cookies. Used internally after a request to parse the
* Set-Cookie headers.
*
- * @param $value String: the value of the cookie
- * @param $attr Array: possible key/values:
+ * @param string $value the value of the cookie
+ * @param array $attr possible key/values:
* expires A date string
* path The path this cookie is used on
* domain Domain this cookie is used on
* @todo fixme fails to detect 3-letter top-level domains
* @todo fixme fails to detect 2-letter top-level domains for single-domain use (probably not a big problem in practice, but there are test cases)
*
- * @param $domain String: the domain to validate
- * @param $originDomain String: (optional) the domain the cookie originates from
+ * @param string $domain the domain to validate
+ * @param string $originDomain (optional) the domain the cookie originates from
* @return Boolean
*/
public static function validateCookieDomain( $domain, $originDomain = null ) {
/**
* Serialize the cookie jar into a format useful for HTTP Request headers.
*
- * @param $path String: the path that will be used. Required.
- * @param $domain String: the domain that will be used. Required.
+ * @param string $path the path that will be used. Required.
+ * @param string $domain the domain that will be used. Required.
* @return String
*/
public function serializeToHttpRequest( $path, $domain ) {
* Parse the content of an Set-Cookie HTTP Response header.
*
* @param $cookie String
- * @param $domain String: cookie's domain
+ * @param string $domain cookie's domain
* @return null
*/
public function parseCookieResponseHeader ( $cookie, $domain ) {
// Include some information about the filesystem's current state in the random state
$files = array();
- // We know this file is here so grab some info about ourself
+ // We know this file is here so grab some info about ourselves
$files[] = __FILE__;
// We must also have a parent folder, and with the usual file structure, a grandparent
/**
* Randomly hash data while mixing in clock drift data for randomness
*
- * @param $data string The data to randomly hash.
+ * @param string $data The data to randomly hash.
* @return String The hashed bytes
* @author Tim Starling
*/
$buffer = str_repeat( ' ', $bufLength );
$bufPos = 0;
- // Iterate for $duration seconds or at least $minIerations number of iterations
+ // Iterate for $duration seconds or at least $minIterations number of iterations
$iterations = 0;
$startTime = microtime( true );
$currentTime = $startTime;
* You can use MWCryptRand::wasStrong() if you wish to know if the source used
* was cryptographically strong.
*
- * @param $bytes int the number of bytes of random data to generate
- * @param $forceStrong bool Pass true if you want generate to prefer cryptographically
+ * @param int $bytes the number of bytes of random data to generate
+ * @param bool $forceStrong Pass true if you want generate to prefer cryptographically
* strong sources of entropy even if reading from them may steal
* more entropy from the system than optimal.
* @return String Raw binary random data
* You can use MWCryptRand::wasStrong() if you wish to know if the source used
* was cryptographically strong.
*
- * @param $chars int the number of hex chars of random data to generate
- * @param $forceStrong bool Pass true if you want generate to prefer cryptographically
+ * @param int $chars the number of hex chars of random data to generate
+ * @param bool $forceStrong Pass true if you want generate to prefer cryptographically
* strong sources of entropy even if reading from them may steal
* more entropy from the system than optimal.
* @return String Hexadecimal random data
/**
* Constructor
*/
- public function __construct( ) {
+ public function __construct() {
# noop
}
*
* This methods supports transactions logic by first calling beginTransaction()
* on all updates in the array, then calling doUpdate() on each, and, if all goes well,
- * then calling commitTransaction() on each update. If an error occurrs,
- * rollbackTransaction() will be called on any update object that had beginTranscation()
+ * then calling commitTransaction() on each update. If an error occurs,
+ * rollbackTransaction() will be called on any update object that had beginTransaction()
* called but not yet commitTransaction().
*
* This allows for limited transactional logic across multiple backends for storing
* secondary data.
*
- * @param $updates array a list of DataUpdate instances
+ * @param array $updates a list of DataUpdate instances
* @throws Exception|null
*/
public static function runUpdates( $updates ) {
/**
* wgConf hold the site configuration.
* Not used for much in a default install.
+ * @since 1.5
*/
$wgConf = new SiteConfiguration;
-/** MediaWiki version number */
+/**
+ * MediaWiki version number
+ * @since 1.2
+ */
$wgVersion = '1.21alpha';
-/** Name of the site. It must be changed in LocalSettings.php */
+/**
+ * Name of the site. It must be changed in LocalSettings.php
+ */
$wgSitename = 'MediaWiki';
/**
* Must be fully qualified, even if $wgServer is protocol-relative.
*
* Defaults to $wgServer, expanded to a fully qualified http:// URL if needed.
+ * @since 1.18
*/
$wgCanonicalServer = false;
* The default $wgArticlePath will be set based on this value at runtime, but if
* you have customized it, having this incorrectly set to true can cause
* redirect loops when "pretty URLs" are used.
+ * @since 1.2.1
*/
$wgUsePathInfo = ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
( strpos( PHP_SAPI, 'apache2filter' ) === false ) &&
*
* Some hosting providers use PHP 4 for *.php files, and PHP 5 for *.php5. This
* variable is provided to support those providers.
+ * @since 1.11
*/
$wgScriptExtension = '.php';
* The URL path to load.php.
*
* Defaults to "{$wgScriptPath}/load{$wgScriptExtension}".
+ * @since 1.17
*/
$wgLoadScript = false;
/**
* The URL path of the skins directory.
* Defaults to "{$wgScriptPath}/skins".
+ * @since 1.3
*/
$wgStylePath = false;
$wgStyleSheetPath = &$wgStylePath;
/**
* The URL path of the skins directory. Should not point to an external domain.
* Defaults to "{$wgScriptPath}/skins".
+ * @since 1.17
*/
$wgLocalStylePath = false;
/**
* Filesystem stylesheets directory.
* Defaults to "{$IP}/skins".
+ * @since 1.3
*/
$wgStyleDirectory = false;
/**
* The URL path of the shortcut icon.
+ * @since 1.6
*/
$wgFavicon = '/favicon.ico';
/**
* The URL path of the icon for iPhone and iPod Touch web app bookmarks.
* Defaults to no icon.
+ * @since 1.12
*/
$wgAppleTouchIcon = false;
/**
* If set, this URL is added to the start of $wgUploadPath to form a complete
* upload URL.
+ * @since 1.4
*/
$wgUploadBaseUrl = '';
* Full thumbnail URL will be like $wgUploadStashScalerBaseUrl/e/e6/Foo.jpg/123px-Foo.jpg
* where 'e6' are the first two characters of the MD5 hash of the file name.
* If $wgUploadStashScalerBaseUrl is set to false, thumbs are rendered locally as needed.
+ * @since 1.17
*/
$wgUploadStashScalerBaseUrl = false;
*
* There must be an appropriate script or rewrite rule in place to handle these
* URLs.
+ * @since 1.5
*/
$wgActionPaths = array();
* FSRepo is also supported for backwards compatibility.
*
* - name A unique name for the repository (but $wgLocalFileRepo should be 'local').
- * The name should consist of alpha-numberic characters.
+ * The name should consist of alpha-numeric characters.
* - backend A file backend name (see $wgFileBackends).
*
* For most core repos:
*
* ForeignDBRepo:
* - dbType, dbServer, dbUser, dbPassword, dbName, dbFlags
- * equivalent to the corresponding member of $wgDBservers
+ * equivalent to the corresponding member of $wgDBservers
* - tablePrefix Table prefix, the foreign wiki's $wgDBprefix
* - hasSharedCache True if the wiki's shared cache is accessible via the local $wgMemc
*
* If you leave $wgLocalFileRepo set to false, Setup will fill in appropriate values.
* Otherwise, set $wgLocalFileRepo to a repository structure as described above.
* If you set $wgUseInstantCommons to true, it will add an entry for Commons.
- * If you set $wgForeignFileRepos to an array of repostory structures, those will
+ * If you set $wgForeignFileRepos to an array of repository structures, those will
* be searched after the local file repo.
* Otherwise, you will only have access to local media files.
*
'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input',
- 'rsvg' => '$path/rsvg -w$width -h$height $input $output',
+ 'rsvg' => '$path/rsvg -w $width -h $height $input $output',
'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output',
'ImagickExt' => array( 'SvgHandler::rasterizeImagickExt' ),
);
$wgEnableAutoRotation = null;
/**
- * Internal name of virus scanner. This servers as a key to the
+ * Internal name of virus scanner. This serves as a key to the
* $wgAntivirusSetup array. Set this to NULL to disable virus scanning. If not
* null, every file uploaded will be scanned for viruses.
*/
* "command" is the full command to call the virus scanner - %f will be
* replaced with the name of the file to scan. If not present, the filename
* will be appended to the command. Note that this must be overwritten if the
- * scanner is not in the system path; in that case, plase set
+ * scanner is not in the system path; in that case, please set
* $wgAntivirusSetup[$wgAntivirus]['command'] to the desired command with full
* path.
*
* the scan to be failed. This will pass the file if $wgAntivirusRequired
* is not set.
* - An exit code mapped to AV_SCAN_ABORTED causes the function to consider
- * the file to have an usupported format, which is probably imune to
- * virusses. This causes the file to pass.
+ * the file to have an unsupported format, which is probably immune to
+ * viruses. This causes the file to pass.
* - An exit code mapped to AV_NO_VIRUS will cause the file to pass, meaning
* no virus was found.
* - All other codes (like AV_VIRUS_FOUND) will cause the function to report
'codemap' => array(
"0" => AV_NO_VIRUS, # no virus
"1" => AV_VIRUS_FOUND, # virus found
- "52" => AV_SCAN_ABORTED, # unsupported file format (probably imune)
+ "52" => AV_SCAN_ABORTED, # unsupported file format (probably immune)
"*" => AV_SCAN_FAILED, # else scan failed
),
'messagepattern' => '/.*?:(.*)/sim',
* instead of From. ($wgEmergencyContact will be used as From.)
*
* Some mailers (eg sSMTP) set the SMTP envelope sender to the From value,
- * which can cause problems with SPF validation and leak recipient addressses
+ * which can cause problems with SPF validation and leak recipient addresses
* when bounces are sent to the sender.
*/
$wgUserEmailUseReplyTo = false;
* preferences shared (preferences were stored in the user table prior to 1.16)
*
* $wgSharedTables may be customized with a list of tables to share in the shared
- * datbase. However it is advised to limit what tables you do share as many of
+ * database. However it is advised to limit what tables you do share as many of
* MediaWiki's tables may have side effects if you try to share them.
*
* $wgSharedPrefix is the table prefix for the shared database. It defaults to
* Timezone to use in the error log.
* Defaults to the wiki timezone ($wgLocaltimezone).
*
- * A list of useable timezones can found at:
+ * A list of usable timezones can found at:
* http://php.net/manual/en/timezones.php
*
* @par Examples:
* change it in their preferences.
*
* This also defines the language of pages in the wiki. The content is wrapped
- * in a html element with lang=XX attribute. This behavior can be overriden
+ * in a html element with lang=XX attribute. This behavior can be overridden
* via hooks, see Title::getPageLanguage.
*/
$wgLanguageCode = 'en';
/**
* Language cache size, or really how many languages can we handle
- * simultanously without degrading to crawl speed.
+ * simultaneously without degrading to crawl speed.
*/
$wgLangObjCacheSize = 10;
/**
* List of language codes that don't correspond to an actual language.
- * These codes are mostly leftoffs from renames, or other legacy things.
+ * These codes are mostly left-offs from renames, or other legacy things.
* This array makes them not appear as a selectable language on the installer,
* and excludes them when running the transstat.php script.
*/
* requires that the cur table be kept around for those revisions
* to remain viewable.
*
- * maintenance/migrateCurStubs.php can be used to complete the
- * migration in the background once the wiki is back online.
- *
* This option affects the updaters *only*. Any present cur stub
* revisions will be readable at runtime regardless of this setting.
*/
* Timezones can be translated by editing MediaWiki messages of type
* timezone-nameinlowercase like timezone-utc.
*
- * A list of useable timezones can found at:
+ * A list of usable timezones can found at:
* http://php.net/manual/en/timezones.php
*
* @par Examples:
* for anonymous users and new user accounts.
*
* This setting is used for most date/time displays in the software, and is
- * overrideable in user preferences. It is *not* used for signature timestamps.
+ * overridable in user preferences. It is *not* used for signature timestamps.
*
* By default, this will be set to match $wgLocaltimezone.
*/
* @par Example:
* @code
* $wgXhtmlNamespaces['svg'] = 'http://www.w3.org/2000/svg';
- * @endCode
+ * @endcode
* Normally we wouldn't have to define this in the root "<html>"
* element, but IE needs it there in some circumstances.
*
* for the icon, the following keys are used:
* - src: An absolute url to the image to use for the icon, this is recommended
* but not required, however some skins will ignore icons without an image
- * - url: The url to use in the a element arround the text or icon, if not set an a element will not be outputted
+ * - url: The url to use in the a element around the text or icon, if not set an a element will not be outputted
* - alt: This is the text form of the icon, it will be displayed without an image in
* skins like Modern or if src is not set, and will otherwise be used as
* the alt="" for the image. This key is required.
/**
* The $wgShowRollbackEditCount variable is used to show how many edits will be
- * rollback. The numeric value of the varible are the limit up to are counted.
+ * rollback. The numeric value of the variable are the limit up to are counted.
* If the value is false or 0, the edits are not counted. Disabling this will
* furthermore prevent MediaWiki from hiding some useless rollback links.
*
* class The class name
*
* preprocessorClass The preprocessor class. Two classes are currently available:
- * Preprocessor_Hash, which uses plain PHP arrays for tempoarary
+ * Preprocessor_Hash, which uses plain PHP arrays for temporary
* storage, and Preprocessor_DOM, which uses the DOM module for
* temporary storage. Preprocessor_DOM generally uses less memory;
* the speed of the two is roughly the same.
* namespaces constants (NS_USER, NS_MAIN...).
*
* Among other things, this may be useful to enforce read-restrictions
- * which may otherwise be bypassed by using the template machanism.
+ * which may otherwise be bypassed by using the template mechanism.
*/
$wgNonincludableNamespaces = array();
$wgDisableTextSearch = false;
/**
- * Set to true to have nicer highligted text in search results,
+ * Set to true to have nicer highlighted text in search results,
* by default off due to execution overhead
*/
$wgAdvancedSearchHighlighting = false;
/**
* Template for OpenSearch suggestions, defaults to API action=opensearch
*
- * Sites with heavy load would tipically have these point to a custom
+ * Sites with heavy load would typically have these point to a custom
* PHP wrapper to avoid firing up mediawiki for every keystroke
*
* Placeholders: {searchTerms}
/**
* Array of namespaces to generate a Google sitemap for when the
- * maintenance/generateSitemap.php script is run, or false if one is to be ge-
- * nerated for all namespaces.
+ * maintenance/generateSitemap.php script is run, or false if one is to be
+ * generated for all namespaces.
*/
$wgSitemapNamespaces = false;
/**
* Custom namespace priorities for sitemaps. Setting this will allow you to
- * set custom priorities to namsepaces when sitemaps are generated using the
+ * set custom priorities to namespaces when sitemaps are generated using the
* maintenance/generateSitemap.php script.
*
* This should be a map of namespace IDs to priority
/**
* Which namespaces have special treatment where they should be preview-on-open
- * Internaly only Category: pages apply, but using this extensions (e.g. Semantic MediaWiki)
+ * Internally only Category: pages apply, but using this extensions (e.g. Semantic MediaWiki)
* can specify namespaces of pages they have special treatment for
*/
$wgPreviewOnOpenNamespaces = array(
* 'version' => 1.9,
* 'path' => __FILE__,
* 'author' => 'Foo Barstein',
- * 'url' => 'http://wwww.example.com/Example%20Extension/',
+ * 'url' => 'http://www.example.com/Example%20Extension/',
* 'description' => 'An example extension',
* 'descriptionmsg' => 'exampleextension-desc',
* );
/**
* List of special pages, followed by what subtitle they should go under
* at Special:SpecialPages
+ *
+ * @deprecated 1.21 Override SpecialPage::getGroupName instead
*/
-$wgSpecialPageGroups = array(
- 'DoubleRedirects' => 'maintenance',
- 'BrokenRedirects' => 'maintenance',
- 'Lonelypages' => 'maintenance',
- 'Uncategorizedpages' => 'maintenance',
- 'Uncategorizedcategories' => 'maintenance',
- 'Uncategorizedimages' => 'maintenance',
- 'Uncategorizedtemplates' => 'maintenance',
- 'Unusedcategories' => 'maintenance',
- 'Unusedimages' => 'maintenance',
- 'Protectedpages' => 'maintenance',
- 'Protectedtitles' => 'maintenance',
- 'Unusedtemplates' => 'maintenance',
- 'Withoutinterwiki' => 'maintenance',
- 'Longpages' => 'maintenance',
- 'Shortpages' => 'maintenance',
- 'Ancientpages' => 'maintenance',
- 'Deadendpages' => 'maintenance',
- 'Wantedpages' => 'maintenance',
- 'Wantedcategories' => 'maintenance',
- 'Wantedfiles' => 'maintenance',
- 'Wantedtemplates' => 'maintenance',
- 'Unwatchedpages' => 'maintenance',
- 'Fewestrevisions' => 'maintenance',
-
- 'Userlogin' => 'login',
- 'Userlogout' => 'login',
- 'CreateAccount' => 'login',
-
- 'Recentchanges' => 'changes',
- 'Recentchangeslinked' => 'changes',
- 'Watchlist' => 'changes',
- 'Newimages' => 'changes',
- 'Newpages' => 'changes',
- 'Log' => 'changes',
- 'Tags' => 'changes',
-
- 'Upload' => 'media',
- 'Listfiles' => 'media',
- 'MIMEsearch' => 'media',
- 'FileDuplicateSearch' => 'media',
- 'Filepath' => 'media',
-
- 'Listusers' => 'users',
- 'Activeusers' => 'users',
- 'Listgrouprights' => 'users',
- 'BlockList' => 'users',
- 'Contributions' => 'users',
- 'Emailuser' => 'users',
- 'Listadmins' => 'users',
- 'Listbots' => 'users',
- 'Userrights' => 'users',
- 'Block' => 'users',
- 'Unblock' => 'users',
- 'Preferences' => 'users',
- 'ChangeEmail' => 'users',
- 'ChangePassword' => 'users',
- 'DeletedContributions' => 'users',
- 'PasswordReset' => 'users',
-
- 'Mostlinked' => 'highuse',
- 'Mostlinkedcategories' => 'highuse',
- 'Mostlinkedtemplates' => 'highuse',
- 'Mostcategories' => 'highuse',
- 'Mostimages' => 'highuse',
- 'Mostinterwikis' => 'highuse',
- 'Mostrevisions' => 'highuse',
-
- 'Allpages' => 'pages',
- 'Prefixindex' => 'pages',
- 'Listredirects' => 'pages',
- 'Categories' => 'pages',
- 'Disambiguations' => 'pages',
- 'PagesWithProp' => 'pages',
-
- 'Randompage' => 'redirects',
- 'Randomredirect' => 'redirects',
- 'Mypage' => 'redirects',
- 'Mytalk' => 'redirects',
- 'Mycontributions' => 'redirects',
- 'Search' => 'redirects',
- 'LinkSearch' => 'redirects',
-
- 'ComparePages' => 'pagetools',
- 'Movepage' => 'pagetools',
- 'MergeHistory' => 'pagetools',
- 'Revisiondelete' => 'pagetools',
- 'Undelete' => 'pagetools',
- 'Export' => 'pagetools',
- 'Import' => 'pagetools',
- 'Whatlinkshere' => 'pagetools',
-
- 'Statistics' => 'wiki',
- 'Version' => 'wiki',
- 'Lockdb' => 'wiki',
- 'Unlockdb' => 'wiki',
- 'Allmessages' => 'wiki',
- 'Popularpages' => 'wiki',
-
- 'Specialpages' => 'other',
- 'Blockme' => 'other',
- 'Booksources' => 'other',
- 'JavaScriptTest' => 'other',
-);
+$wgSpecialPageGroups = array();
/** Whether or not to sort special pages in Special:Specialpages */
/**
* Robot policies per article. These override the per-namespace robot policies.
- * Must be in the form of an array where the key part is a properly canonical-
- * ised text form title and the value is a robot policy.
+ * Must be in the form of an array where the key part is a properly canonicalised
+ * text form title and the value is a robot policy.
*
* @par Example:
* @code
*
* @since 1.21
*/
-$wgContentHandlerUseDB = false;
+$wgContentHandlerUseDB = true;
/**
* Determines which types of text are parsed as wikitext. This does not imply that these kinds
}
/**
- * Class for mananging the deferred updates.
+ * Class for managing the deferred updates.
*
* @since 1.19
*/
/**
* Do any deferred updates and clear the list
*
- * @param $commit String: set to 'commit' to commit after every update to
+ * @param string $commit set to 'commit' to commit after every update to
* prevent lock contention
*/
public static function doUpdates( $commit = '' ) {
*/
define( 'AV_NO_VIRUS', 0 ); #scan ok, no virus found
define( 'AV_VIRUS_FOUND', 1 ); #virus found!
-define( 'AV_SCAN_ABORTED', -1 ); #scan aborted, the file is probably imune
+define( 'AV_SCAN_ABORTED', -1 ); #scan aborted, the file is probably immune
define( 'AV_SCAN_FAILED', false ); #scan failed (scanner not found or error in scanner)
/**@}*/
const AS_HOOK_ERROR_EXPECTED = 212;
/**
- * Status: User is blocked from editting this page
+ * Status: User is blocked from editing this page
*/
const AS_BLOCKED_PAGE_FOR_USER = 215;
const AS_RATE_LIMITED = 221;
/**
- * Status: article was deleted while editting and param wpRecreate == false or form
+ * Status: article was deleted while editing and param wpRecreate == false or form
* was not posted
*/
const AS_ARTICLE_WAS_DELETED = 222;
/**
* Status: no edit summary given and the user has forceeditsummary set and the user is not
- * editting in his own userspace or talkspace and wpIgnoreBlankSummary == false
+ * editing in his own userspace or talkspace and wpIgnoreBlankSummary == false
*/
const AS_SUMMARY_NEEDED = 226;
const AS_OK = 230;
/**
- * Status: WikiPage::doEdit() was unsuccessfull
+ * Status: WikiPage::doEdit() was unsuccessful
*/
const AS_END = 231;
public $previewTextAfterContent = '';
public $mPreloadContent = null;
- /* $didSave should be set to true whenever an article was succesfully altered. */
+ /* $didSave should be set to true whenever an article was successfully altered. */
public $didSave = false;
public $undidRev = 0;
* "View source for ..." page displaying the source code after the error message.
*
* @since 1.19
- * @param $permErrors Array of permissions errors, as returned by
+ * @param array $permErrors of permissions errors, as returned by
* Title::getUserPermissionsErrors().
* @throws PermissionsError
*/
$this->save = false;
$this->diff = false;
$this->minoredit = false;
- $this->watchthis = $request->getBool( 'watchthis', false ); // Watch may be overriden by request parameters
+ $this->watchthis = $request->getBool( 'watchthis', false ); // Watch may be overridden by request parameters
$this->recreate = false;
// When creating a new section, we can preload a section title by passing it as the
/**
* Subpage overridable method for extracting the page content data from the
* posted form to be placed in $this->textbox1, if using customized input
- * this method should be overrided and return the page text that will be used
+ * this method should be overridden and return the page text that will be used
* for saving, preview parsing and so on...
*
* @param $request WebRequest
* section replaced in its context (using WikiPage::replaceSection())
* to the original text of the edit.
*
- * This difers from Article::getContent() that when a missing revision is
+ * This differs from Article::getContent() that when a missing revision is
* encountered the result will be null and not the
* 'missing-revision' message.
*
* Get the contents to be preloaded into the box, either set by
* an earlier setPreloadText() or by loading the given page.
*
- * @param $preload String: representing the title to preload from.
+ * @param string $preload representing the title to preload from.
*
* @return String
*
* Get the contents to be preloaded into the box, either set by
* an earlier setPreloadText() or by loading the given page.
*
- * @param $preload String: representing the title to preload from.
+ * @param string $preload representing the title to preload from.
*
* @return Content
*
* an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
* content.
*
- * @param String|null|bool $text Text to unserialize
+ * @param string|null|bool $text Text to unserialize
* @return Content The content object created from $text. If $text was false or null, false resp. null will be
* returned instead.
*
}
if ( $this->hasPresetSummary ) {
- // If a summary has been preset using &summary= we dont want to prompt for
+ // If a summary has been preset using &summary= we don't want to prompt for
// a different summary. Only prompt for a summary if the summary is blanked.
// (Bug 17416)
$this->autoSumm = md5( '' );
}
if ( $this->isConflict ) {
- // In an edit conflict bypass the overrideable content form method
+ // In an edit conflict bypass the overridable content form method
// and fallback to the raw wpTextbox1 since editconflicts can't be
// resolved between page source edits and custom ui edits using the
// custom edit ui.
* inferred by the id given to the input. You can remove them both by
* passing array( 'id' => false ) to $userInputAttrs.
*
- * @param $summary string The value of the summary input
- * @param $labelText string The html to place inside the label
- * @param $inputAttrs array of attrs to use on the input
- * @param $spanLabelAttrs array of attrs to use on the span inside the label
+ * @param string $summary The value of the summary input
+ * @param string $labelText The html to place inside the label
+ * @param array $inputAttrs of attrs to use on the input
+ * @param array $spanLabelAttrs of attrs to use on the span inside the label
*
* @return array An array in the format array( $label, $input )
*/
function getSummaryInput( $summary = "", $labelText = null, $inputAttrs = null, $spanLabelAttrs = null ) {
- // Note: the maxlength is overriden in JS to 255 and to make it use UTF-8 bytes, not characters.
+ // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
$inputAttrs = ( is_array( $inputAttrs ) ? $inputAttrs : array() ) + array(
'id' => 'wpSummary',
'maxlength' => '200',
* @param $isSubjectPreview Boolean: true if this is the section subject/title
* up top, or false if this is the comment summary
* down below the textarea
- * @param $summary String: The text of the summary to display
+ * @param string $summary The text of the summary to display
* @return String
*/
protected function showSummaryInput( $isSubjectPreview, $summary = "" ) {
* @param $isSubjectPreview Boolean: true if this is the section subject/title
* up top, or false if this is the comment summary
* down below the textarea
- * @param $summary String: the text of the summary to display
+ * @param string $summary the text of the summary to display
* @return String
*/
protected function getSummaryPreview( $isSubjectPreview, $summary = "" ) {
* The $textoverride method can be used by subclasses overriding showContentForm
* to pass back to this method.
*
- * @param $customAttribs array of html attributes to use in the textarea
- * @param $textoverride String: optional text to override $this->textarea1 with
+ * @param array $customAttribs of html attributes to use in the textarea
+ * @param string $textoverride optional text to override $this->textarea1 with
*/
protected function showTextbox1( $customAttribs = null, $textoverride = null ) {
if ( $this->wasDeletedSinceLastEdit() && $this->formtype == 'save' ) {
* Append preview output to $wgOut.
* Includes category rendering if this is a category page.
*
- * @param $text String: the HTML to be output for the preview.
+ * @param string $text the HTML to be output for the preview.
*/
protected function showPreview( $text ) {
global $wgOut;
* Returns an array of html code of the following checkboxes:
* minor and watch
*
- * @param $tabindex int Current tabindex
- * @param $checked Array of checkbox => bool, where bool indicates the checked
+ * @param int $tabindex Current tabindex
+ * @param array $checked of checkbox => bool, where bool indicates the checked
* status of the checkbox
*
* @return array
* Returns an array of html code of the following buttons:
* save, diff, preview and live
*
- * @param $tabindex int Current tabindex
+ * @param int $tabindex Current tabindex
*
* @return array
*/
/**
* Produce the stock "your edit contains spam" page
*
- * @param $match string|bool Text which triggered one or more filters
+ * @param string|bool $match Text which triggered one or more filters
* @deprecated since 1.17 Use method spamPageWithContent() instead
*/
static function spamPage( $match = false ) {
* @private
*/
function makesafe( $invalue ) {
- // Armor existing references for reversability.
+ // Armor existing references for reversibility.
$invalue = strtr( $invalue, array( "&#x" => "�" ) );
$bytesleft = 0;
$i++;
} while ( ctype_xdigit( $invalue[$i] ) && ( $i < strlen( $invalue ) ) );
- // Do some sanity checks. These aren't needed for reversability,
+ // Do some sanity checks. These aren't needed for reversibility,
// but should help keep the breakage down if the editor
// breaks one of the entities whilst editing.
if ( ( substr( $invalue, $i, 1 ) == ";" ) and ( strlen( $hexstring ) <= 6 ) ) {
$result .= substr( $invalue, $i, 1 );
}
}
- // reverse the transform that we made for reversability reasons.
+ // reverse the transform that we made for reversibility reasons.
return strtr( $result, array( "�" => "&#x" ) );
}
}
/**
* Run hook to allow extensions to modify the text of the exception
*
- * @param $name string: class name of the exception
- * @param $args array: arguments to pass to the callback functions
+ * @param string $name class name of the exception
+ * @param array $args arguments to pass to the callback functions
* @return string|null string to output or null if any hook has been called
*/
function runHooks( $name, $args = array() ) {
/**
* Get a message from i18n
*
- * @param $key string: message name
- * @param $fallback string: default message if the message cache can't be
+ * @param string $key message name
+ * @param string $fallback default message if the message cache can't be
* called by the exception
* The function also has other parameters that are arguments for the message
* @return string message with arguments replaced
/**
* Get a random ID for this error.
- * This allows to link the exception to its correspoding log entry when
+ * This allows to link the exception to its corresponding log entry when
* $wgShowExceptionDetails is set to false.
*
* @return string
/**
* Note: these arguments are keys into wfMessage(), not text!
*
- * @param $title string|Message Message key (string) for page title, or a Message object
- * @param $msg string|Message Message key (string) for error text, or a Message object
- * @param $params array with parameters to wfMessage()
+ * @param string|Message $title Message key (string) for page title, or a Message object
+ * @param string|Message $msg Message key (string) for error text, or a Message object
+ * @param array $params with parameters to wfMessage()
*/
function __construct( $title, $msg, $params = null ) {
$this->title = $title;
*/
class BadTitleError extends ErrorPageError {
/**
- * @param $msg string|Message A message key (default: 'badtitletext')
- * @param $params Array parameter to wfMessage()
+ * @param string|Message $msg A message key (default: 'badtitletext')
+ * @param array $params parameter to wfMessage()
*/
function __construct( $msg = 'badtitletext', $params = null ) {
parent::__construct( 'badtitle', $msg, $params );
* Constructor
*
* @param $httpCode Integer: HTTP status code to send to the client
- * @param $content String|Message: content of the message
- * @param $header String|Message: content of the header (\<title\> and \<h1\>)
+ * @param string|Message $content content of the message
+ * @param string|Message $header content of the header (\<title\> and \<h1\>)
*/
public function __construct( $httpCode, $content, $header = null ) {
parent::__construct( $content );
* Print a message, if possible to STDERR.
* Use this in command line mode only (see isCommandLine)
*
- * @param $message string Failure text
+ * @param string $message Failure text
*/
public static function printError( $message ) {
# NOTE: STDERR may not be available, especially if php-cgi is used from the command line (bug #15602).
* offset: non-inclusive offset at which to start the query
* limit: maximum number of rows to return
* dir: "asc" or "desc" timestamp order
- * @param $buffer Int: one of WikiExporter::BUFFER or WikiExporter::STREAM
- * @param $text Int: one of WikiExporter::TEXT or WikiExporter::STUB
+ * @param int $buffer one of WikiExporter::BUFFER or WikiExporter::STREAM
+ * @param int $text one of WikiExporter::TEXT or WikiExporter::STUB
*/
function __construct( $db, $history = WikiExporter::CURRENT,
$buffer = WikiExporter::BUFFER, $text = WikiExporter::TEXT ) {
/**
* Dumps a series of page and revision records for those pages
* in the database falling within the page_id range given.
- * @param $start Int: inclusive lower limit (this id is included)
+ * @param int $start inclusive lower limit (this id is included)
* @param $end Int: Exclusive upper limit (this id is not included)
* If 0, no upper limit.
*/
/**
* Dumps a series of page and revision records for those pages
* in the database with revisions falling within the rev_id range given.
- * @param $start Int: inclusive lower limit (this id is included)
+ * @param int $start inclusive lower limit (this id is included)
* @param $end Int: Exclusive upper limit (this id is not included)
* If 0, no upper limit.
*/
$join['revision'] = array( 'INNER JOIN', 'page_id=rev_page' );
$opts['ORDER BY'] = array( 'rev_page ASC', 'rev_id ASC' );
} else {
- # Uknown history specification parameter?
+ # Unknown history specification parameter?
wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . " given invalid history dump type." );
}
/**
* @param $timestamp string
- * @param $indent string Default to six spaces
+ * @param string $indent Default to six spaces
* @return string
*/
function writeTimestamp( $timestamp, $indent = " " ) {
/**
* @param $id
* @param $text string
- * @param $indent string Default to six spaces
+ * @param string $indent Default to six spaces
* @return string
*/
function writeContributor( $id, $text, $indent = " " ) {
}
/**
- * Base class for output stream; prints to stdout or buffer or whereever.
+ * Base class for output stream; prints to stdout or buffer or wherever.
* @ingroup Dump
*/
class DumpOutput {
* Use this for the last piece of a file written out
* at specified checkpoints (e.g. every n hours).
* @param $newname mixed File name. May be a string or an array with one element
- * @param $open bool If true, a new file with the old filename will be opened again for writing (default: false)
+ * @param bool $open If true, a new file with the old filename will be opened again for writing (default: false)
*/
function closeAndRename( $newname, $open = false ) {
}
}
/**
- * Base class for output stream; prints to stdout or buffer or whereever.
+ * Base class for output stream; prints to stdout or buffer or wherever.
* @ingroup Dump
*/
class DumpMultiWriter {
* Check whether external edit or diff should be used.
*
* @param $context IContextSource context to use
- * @param $type String can be either 'edit' or 'diff'
+ * @param string $type can be either 'edit' or 'diff'
* @return Bool
*/
public static function useExternalEngine( IContextSource $context, $type ) {
* This is part of the core code and is not overridable by specific
* plugins. It's in this class only for convenience.
*
- * @param $id int user_id
+ * @param int $id user_id
*/
final public function linkToLocal( $id ) {
$dbw = wfGetDB( DB_MASTER );
* Fallback implementation of mb_strpos, hardcoded to UTF-8.
* @param $haystack String
* @param $needle String
- * @param $offset String: optional start position
- * @param $encoding String: optional encoding; ignored
+ * @param string $offset optional start position
+ * @param string $encoding optional encoding; ignored
* @return int
*/
public static function mb_strpos( $haystack, $needle, $offset = 0, $encoding = '' ) {
* Fallback implementation of mb_strrpos, hardcoded to UTF-8.
* @param $haystack String
* @param $needle String
- * @param $offset String: optional start position
- * @param $encoding String: optional encoding; ignored
+ * @param string $offset optional start position
+ * @param string $encoding optional encoding; ignored
* @return int
*/
public static function mb_strrpos( $haystack, $needle, $offset = 0, $encoding = '' ) {
/**
* Constructor
*
- * @param $title String|Title Item's title
+ * @param string|Title $title Item's title
* @param $description String
- * @param $url String: URL uniquely designating the item.
- * @param $date String: Item's date
- * @param $author String: Author's user name
+ * @param string $url URL uniquely designating the item.
+ * @param string $date Item's date
+ * @param string $author Author's user name
* @param $comments String
*/
function __construct( $title, $description, $url, $date = '', $author = '', $comments = '' ) {
/**
* Encode $string so that it can be safely embedded in a XML document
*
- * @param $string String: string to encode
+ * @param string $string string to encode
* @return String
*/
public function xmlEncode( $string ) {
/**
* set the unique id of an item
*
- * @param $uniqueId String: unique id for the item
+ * @param string $uniqueId unique id for the item
* @param $rssIsPermalink Boolean: set to true if the guid (unique id) is a permalink (RSS feeds only)
*/
public function setUniqueId( $uniqueId, $rssIsPermalink = false ) {
/**
* Quickie hack... strip out wikilinks to more legible form from the comment.
*
- * @param $text String: wikitext
+ * @param string $text wikitext
* @return String
*/
public static function stripComment( $text ) {
}
/**
- * Ouput an RSS 2.0 header
+ * Output an RSS 2.0 header
*/
function outHeader() {
global $wgVersion;
}
/**
- * Ouput an RSS 2.0 footer
+ * Output an RSS 2.0 footer
*/
function outFooter() {
?>
}
/**
- * Atom 1.0 requires a unique, opaque IRI as a unique indentifier
+ * Atom 1.0 requires a unique, opaque IRI as a unique identifier
* for every feed we create. For now just use the URL, but who
* can tell if that's right? If we put options on the feed, do we
* have to change the id? Maybe? Maybe not.
}
/**
- * Outputs the footer for Atom 1.0 feed (basicly '\</feed\>').
+ * Outputs the footer for Atom 1.0 feed (basically '\</feed\>').
*/
function outFooter() {?>
</feed><?php
* If the feed should be purged; $timekey and $key will be removed from
* $messageMemc
*
- * @param $timekey String: cache key of the timestamp of the last item
- * @param $key String: cache key of feed's content
+ * @param string $timekey cache key of the timestamp of the last item
+ * @param string $key cache key of feed's content
*/
public static function checkPurge( $timekey, $key ) {
global $wgRequest, $wgUser, $messageMemc;
/**
* Check whether feeds can be used and that $type is a valid feed type
*
- * @param $type String: feed type, as requested by the user
+ * @param string $type feed type, as requested by the user
* @return Boolean
*/
public static function checkFeedOutput( $type ) {
* @param $oldid Integer: old revision's id
* @param $newid Integer: new revision's id
* @param $timestamp Integer: new revision's timestamp
- * @param $comment String: new revision's comment
- * @param $actiontext String: text of the action; in case of log event
+ * @param string $comment new revision's comment
+ * @param string $actiontext text of the action; in case of log event
* @return String
*/
public static function formatDiffRow( $title, $oldid, $newid, $timestamp, $comment, $actiontext = '' ) {
global $wgFeedDiffCutoff, $wgLang;
wfProfileIn( __METHOD__ );
- # log enties
+ // log entries
$completeText = '<p>' . implode( ' ',
array_filter(
array(
// NOTE: Check permissions for anonymous users, not current user.
// No "privileged" version should end up in the cache.
- // Most feed readers will not log in anway.
+ // Most feed readers will not log in anyway.
$anon = new User();
$accErrors = $title->getUserPermissionsErrors( 'read', $anon, true );
* Might be 'cleaner' to use DOM or XSLT or something,
* but *gack* it's a pain in the ass.
*
- * @param $text String: diff's HTML output
+ * @param string $text diff's HTML output
* @return String: modified HTML
*/
public static function applyDiffStyle( $text ) {
$styles = array(
'diff' => 'background-color: white; color:black;',
- 'diff-otitle' => 'background-color: white; color:black;',
- 'diff-ntitle' => 'background-color: white; color:black;',
- 'diff-addedline' => 'background: #cfc; color:black; font-size: smaller;',
- 'diff-deletedline' => 'background: #ffa; color:black; font-size: smaller;',
- 'diff-context' => 'background: #eee; color:black; font-size: smaller;',
- 'diffchange' => 'color: red; font-weight: bold; text-decoration: none;',
+ 'diff-otitle' => 'background-color: white; color:black; text-align: center;',
+ 'diff-ntitle' => 'background-color: white; color:black; text-align: center;',
+ 'diff-addedline' => 'color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;',
+ 'diff-deletedline' => 'color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;',
+ 'diff-context' => 'background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;',
+ 'diffchange' => 'font-weight: bold; text-decoration: none;',
);
foreach( $styles as $class => $style ) {
*
* @param $title Title object
* @param File $file: file object
- * @param $oldimage String: archive name
- * @param $reason String: reason of the deletion
+ * @param string $oldimage archive name
+ * @param string $reason reason of the deletion
* @param $suppress Boolean: whether to mark all deleted versions as restricted
* @param $user User object performing the request
* @throws MWException
* showing an appropriate message depending upon whether
* it's a current file or an old version
*
- * @param $message String: message base
+ * @param string $message message base
* @return String
*/
private function prepareMessage( $message ) {
/**
* Verify the given option name exist.
*
- * @param $name String: option name
+ * @param string $name option name
* @param $strict Boolean: throw an exception when the option does not exist (default false)
* @throws MWException
* @return Boolean: true if option exist, false otherwise
/**
* Use to set the value of an option.
*
- * @param $name String: option name
+ * @param string $name option name
* @param $value Mixed: value for the option
* @param $force Boolean: whether to set the value when it is equivalent to the default value for this option (default false).
* @return null
* Get the value for the given option name.
* Internally use getValueReal()
*
- * @param $name String: option name
+ * @param string $name option name
* @return Mixed
*/
public function getValue( $name ) {
/**
* @todo Document
- * @param $option Array: array structure describing the option
+ * @param array $option array structure describing the option
* @return Mixed. Value or the default value if it is null
*/
protected function getValueReal( $option ) {
/**
* Delete the option value.
* This will make future calls to getValue() return the default value.
- * @param $name String: option name
+ * @param string $name option name
* @return null
*/
public function reset( $name ) {
/**
* @todo Document
- * @param $names Array: array of option names
+ * @param array $names array of option names
* @return null
*/
public function consumeValues( /*Array*/ $names ) {
* Validate and set an option integer value
* The value will be altered to fit in the range.
*
- * @param $name String: option name
- * @param $min Int: minimum value
- * @param $max Int: maximum value
+ * @param string $name option name
+ * @param int $min minimum value
+ * @param int $max maximum value
* @throws MWException
* @exception MWException Option is not of type int
* @return null
private static $viewers = false;
/**
- * @param $dir string The root directory of the repo where the .git dir can be found
+ * @param string $dir The root directory of the repo where the .git dir can be found
*/
public function __construct( $dir ) {
$this->basedir = "{$dir}/.git";
/**
* Check if a string looks like a hex encoded SHA1 hash
*
- * @param $str string The string to check
+ * @param string $str The string to check
* @return bool Whether or not the string looks like a SHA1
*/
public static function isSHA1( $str ) {
* @param $key String|Int
* @param $value Mixed
* @param $default Mixed
- * @param $changed Array to alter
+ * @param array $changed to alter
* @throws MWException
*/
function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) {
/**
* Insert array into another array after the specified *KEY*
*
- * @param $array Array: The array.
- * @param $insert Array: The array to insert.
+ * @param array $array The array.
+ * @param array $insert The array to insert.
* @param $after Mixed: The key to insert after
* @return Array
*/
}
/**
- * Get a random string containing a number of pesudo-random hex
+ * Get a random string containing a number of pseudo-random hex
* characters.
* @note This is not secure, if you are trying to generate some sort
* of token please use MWCryptRand instead.
*
- * @param $length int The length of the string to generate
+ * @param int $length The length of the string to generate
* @return String
* @since 1.20
*/
* "days=7&limit=100". Options in the first array override options in the second.
* Options set to null or false will not be output.
*
- * @param $array1 Array ( String|Array )
- * @param $array2 Array ( String|Array )
+ * @param array $array1 ( String|Array )
+ * @param array $array2 ( String|Array )
* @param $prefix String
* @return String
*/
/**
* This is the logical opposite of wfArrayToCgi(): it accepts a query string as
- * its argument and returns the same string in array form. This allows compa-
- * tibility with legacy functions that accept raw query strings instead of nice
+ * its argument and returns the same string in array form. This allows compatibility
+ * with legacy functions that accept raw query strings instead of nice
* arrays. Of course, keys and values are urldecode()d.
*
- * @param $query String: query string
+ * @param string $query query string
* @return array Array version of input
*/
function wfCgiToArray( $query ) {
* @todo this won't work with current-path-relative URLs
* like "subdir/foo.html", etc.
*
- * @param $url String: either fully-qualified or a local path + query
+ * @param string $url either fully-qualified or a local path + query
* @param $defaultProto Mixed: one of the PROTO_* constants. Determines the
* protocol to use if $url or $wgServer is
* protocol-relative
* @todo Need to integrate this into wfExpandUrl (bug 32168)
*
* @since 1.19
- * @param $urlParts Array URL parts, as output from wfParseUrl
+ * @param array $urlParts URL parts, as output from wfParseUrl
* @return string URL assembled from its component parts
*/
function wfAssembleUrl( $urlParts ) {
*
* @todo Need to integrate this into wfExpandUrl (bug 32168)
*
- * @param $urlPath String URL path, potentially containing dot-segments
+ * @param string $urlPath URL path, potentially containing dot-segments
* @return string URL path with all dot-segments removed
*/
function wfRemoveDotSegments( $urlPath ) {
/**
* Returns a regular expression of url protocols
*
- * @param $includeProtocolRelative bool If false, remove '//' from the returned protocol list.
+ * @param bool $includeProtocolRelative If false, remove '//' from the returned protocol list.
* DO NOT USE this directly, use wfUrlProtocolsWithoutProtRel() instead
* @return String
*/
* 2) Handles protocols that don't use :// (e.g., mailto: and news: , as well as protocol-relative URLs) correctly
* 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2))
*
- * @param $url String: a URL to parse
+ * @param string $url a URL to parse
* @return Array: bits of the URL in an associative array, per PHP docs
*/
function wfParseUrl( $url ) {
/**
* Check whether a given URL has a domain that occurs in a given set of domains
- * @param $url string URL
- * @param $domains array Array of domains (strings)
+ * @param string $url URL
+ * @param array $domains Array of domains (strings)
* @return bool True if the host part of $url ends in one of the strings in $domains
*/
function wfMatchesDomainList( $url, $domains ) {
* $wgDebugComments - if on, some debug items may appear in comments in the HTML output.
*
* @param $text String
- * @param $logonly Bool: set true to avoid appearing in HTML when $wgDebugComments is set
+ * @param bool $logonly set true to avoid appearing in HTML when $wgDebugComments is set
*/
function wfDebug( $text, $logonly = false ) {
global $wgDebugLogFile, $wgProfileOnly, $wgDebugRawPage, $wgDebugLogPrefix;
/**
* Send a line giving PHP memory usage.
*
- * @param $exact Bool: print exact values instead of kilobytes (default: false)
+ * @param bool $exact print exact values instead of kilobytes (default: false)
*/
function wfDebugMem( $exact = false ) {
$mem = memory_get_usage();
*
* @param $logGroup String
* @param $text String
- * @param $public Bool: whether to log the event in the public log if no private
+ * @param bool $public whether to log the event in the public log if no private
* log file is specified, (default true)
*/
function wfDebugLog( $logGroup, $text, $public = true ) {
/**
* Log for database errors
*
- * @param $text String: database error message.
+ * @param string $text database error message.
*/
function wfLogDBError( $text ) {
global $wgDBerrorLog, $wgDBerrorLogTZ;
* Throws a warning that $function is deprecated
*
* @param $function String
- * @param $version String|bool: Version of MediaWiki that the function was deprecated in (Added in 1.19).
- * @param $component String|bool: Added in 1.19.
- * @param $callerOffset integer: How far up the callstack is the original
+ * @param string|bool $version Version of MediaWiki that the function was deprecated in (Added in 1.19).
+ * @param string|bool $component Added in 1.19.
+ * @param $callerOffset integer: How far up the call stack is the original
* caller. 2 = function that called the function that called
* wfDeprecated (Added in 1.20)
*
* Send a warning either to the debug log or in a PHP error depending on
* $wgDevelopmentWarnings
*
- * @param $msg String: message to send
+ * @param string $msg message to send
* @param $callerOffset Integer: number of items to go back in the backtrace to
* find the correct caller (1 = function calling wfWarn, ...)
* @param $level Integer: PHP error level; only used when $wgDevelopmentWarnings
* send lines to the specified port, prefixed by the specified prefix and a space.
*
* @param $text String
- * @param $file String filename
+ * @param string $file filename
* @throws MWException
*/
function wfErrorLog( $text, $file ) {
*
* @deprecated since 1.18
*
- * @param $key String: lookup key for the message, usually
+ * @param string $key lookup key for the message, usually
* defined in languages/Language.php
*
* Parameters to the message, which can be used to insert variable text into
*
* @deprecated since 1.18
*
- * @param $key String: lookup key for the message, usually
+ * @param string $key lookup key for the message, usually
* defined in languages/Language.php
* @return String
*/
*
* @deprecated since 1.18
*
- * @param $key String: key to get.
+ * @param string $key key to get.
* @param $args
* @param $useDB Boolean
* @param $forContent Mixed: Language code, or false for user lang, true for content lang.
*
* @param $key String
* @param $useDB Bool
- * @param $langCode String: Code of the language to get the message for, or
+ * @param string $langCode Code of the language to get the message for, or
* behaves as a content language switch if it is a boolean.
* @param $transform Boolean: whether to parse magic words, etc.
* @return string
*
* @deprecated since 1.18
*
- * @param $key String: key of the message
- * @param $options Array: processing rules. Can take the following options:
+ * @param string $key key of the message
+ * @param array $options processing rules. Can take the following options:
* <i>parse</i>: parses wikitext to HTML
* <i>parseinline</i>: parses wikitext to HTML and removes the surrounding
* p's added by parser or tidy
* <i>content</i>: fetch message for content language instead of interface
* Also can accept a single associative argument, of the form 'language' => 'xx':
* <i>language</i>: Language object or language code to fetch message for
- * (overriden by <i>content</i>).
+ * (overridden by <i>content</i>).
* Behavior for conflicting options (e.g., parse+parseinline) is undefined.
*
* @return String
/**
* Since wfMsg() and co suck, they don't return false if the message key they
* looked up didn't exist but a XHTML string, this function checks for the
- * nonexistance of messages by checking the MessageCache::get() result directly.
+ * nonexistence of messages by checking the MessageCache::get() result directly.
*
* @deprecated since 1.18. Use Message::isDisabled().
*
* Throw a debugging exception. This function previously once exited the process,
* but now throws an exception instead, with similar results.
*
- * @param $msg String: message shown when dying.
+ * @param string $msg message shown when dying.
* @throws MWException
*/
function wfDebugDieBacktrace( $msg = '' ) {
*
* With Zend Optimizer 3.2.0 loaded, this causes segfaults under somewhat
* murky circumstances, which may be triggered in part by stub objects
- * or other fancy talkin'.
+ * or other fancy talking'.
*
* Will return an empty array if Zend Optimizer is detected or if
* debug_backtrace is disabled, otherwise the output from
* debug_backtrace() (trimmed).
*
- * @param $limit int This parameter can be used to limit the number of stack frames returned
+ * @param int $limit This parameter can be used to limit the number of stack frames returned
*
* @return array of backtrace information
*/
* Return a string consisting of callers in the stack. Useful sometimes
* for profiling specific points.
*
- * @param $limit int The maximum depth of the stack frame to return, or false for
+ * @param int $limit The maximum depth of the stack frame to return, or false for
* the entire stack.
* @return String
*/
* @param $offset String
* @param $limit Integer
* @param $link String
- * @param $query String: optional URL query parameter string
- * @param $atend Bool: optional param for specified if this is the last page
+ * @param string $query optional URL query parameter string
+ * @param bool $atend optional param for specified if this is the last page
* @return String
* @deprecated in 1.19; use Language::viewPrevNext() instead
*/
/**
* Make a list item, used by various special pages
*
- * @param $page String Page link
- * @param $details String Text between brackets
+ * @param string $page Page link
+ * @param string $details Text between brackets
* @param $oppositedm Boolean Add the direction mark opposite to your
* language, to display text properly
* @return String
* Obtain the offset and limit values from the request string;
* used in special pages
*
- * @param $deflimit Int default limit if none supplied
- * @param $optionname String Name of a user preference to check against
+ * @param int $deflimit default limit if none supplied
+ * @param string $optionname Name of a user preference to check against
* @return array
*
*/
* is achieved by substituting certain characters with HTML entities.
* As required by the callers, "<nowiki>" is not used.
*
- * @param $text String: text to be escaped
+ * @param string $text text to be escaped
* @return String
*/
function wfEscapeWikiText( $text ) {
}
/**
- * Get the current unix timetstamp with microseconds. Useful for profiling
+ * Get the current unix timestamp with microseconds. Useful for profiling
* @return Float
*/
function wfTime() {
* factors
*
* @param $accept String
- * @param $def String default
+ * @param string $def default
* @return Array
*/
function wfAcceptToPrefs( $accept, $def = '*/*' ) {
* array of type to preference (preference is a float between 0.0 and 1.0).
* Wildcards in the types are acceptable.
*
- * @param $cprefs Array: client's acceptable type list
- * @param $sprefs Array: server's offered types
+ * @param array $cprefs client's acceptable type list
+ * @param array $sprefs server's offered types
* @return string
*
* @todo FIXME: Doesn't handle params like 'text/plain; charset=UTF-8'
/**
* Make directory, and make all parent directories if they don't exist
*
- * @param $dir String: full path to directory to create
+ * @param string $dir full path to directory to create
* @param $mode Integer: chmod value to use, default is $wgDirectoryMode
- * @param $caller String: optional caller param for debugging.
+ * @param string $caller optional caller param for debugging.
* @throws MWException
* @return bool
*/
* Wrapper function for PHP's dl(). This doesn't work in most situations from
* PHP 5.3 onward, and is usually disabled in shared environments anyway.
*
- * @param $extension String A PHP extension. The file suffix (.so or .dll)
+ * @param string $extension A PHP extension. The file suffix (.so or .dll)
* should be omitted
- * @param $fileName String Name of the library, if not $extension.suffix
+ * @param string $fileName Name of the library, if not $extension.suffix
* @return Bool - Whether or not the extension is loaded
*/
function wfDl( $extension, $fileName = null ) {
* @param varargs
* @return String
*/
-function wfEscapeShellArg( ) {
+function wfEscapeShellArg() {
wfInitShellLocale();
$args = func_get_args();
/**
* Execute a shell command, with time and memory limits mirrored from the PHP
* configuration if supported.
- * @param $cmd String Command line, properly escaped for shell.
+ * @param string $cmd Command line, properly escaped for shell.
* @param &$retval null|Mixed optional, will receive the program's exit code.
* (non-zero is usually failure)
- * @param $environ Array optional environment variables which should be
+ * @param array $environ optional environment variables which should be
* added to the executed command environment.
- * @param $limits Array optional array with limits(filesize, memory, time, walltime)
+ * @param array $limits optional array with limits(filesize, memory, time, walltime)
* this overwrites the global wgShellMax* limits.
* @return string collected stdout as a string (trailing newlines stripped)
*/
* Generate a shell-escaped command line string to run a MediaWiki cli script.
* Note that $parameters should be a flat array and an option with an argument
* should consist of two consecutive items in the array (do not use "--option value").
- * @param $script string MediaWiki cli script path
- * @param $parameters Array Arguments and options to the script
- * @param $options Array Associative array of options:
+ * @param string $script MediaWiki cli script path
+ * @param array $parameters Arguments and options to the script
+ * @param array $options Associative array of options:
* 'php': The path to the php executable
* 'wrapper': Path to a PHP wrapper to handle the maintenance script
* @return Array
* Returns unified plain-text diff of two texts.
* Useful for machine processing of diffs.
*
- * @param $before String: the text before the changes.
- * @param $after String: the text after the changes.
- * @param $params String: command-line options for the diff command.
+ * @param string $before the text before the changes.
+ * @param string $after the text after the changes.
+ * @param string $params command-line options for the diff command.
* @return String: unified diff of $before and $after
*/
function wfDiff( $before, $after, $params = '-u' ) {
* We'll consider it so always, as we don't want '\s' in our Unix paths either.
*
* @param $path String
- * @param $suffix String: to remove if present
+ * @param string $suffix to remove if present
* @return String
*/
function wfBaseName( $path, $suffix = '' ) {
* May explode on non-matching case-insensitive paths,
* funky symlinks, etc.
*
- * @param $path String: absolute destination path including target filename
- * @param $from String: Absolute source path, directory only
+ * @param string $path absolute destination path including target filename
+ * @param string $from Absolute source path, directory only
* @return String
*/
function wfRelativePath( $path, $from ) {
* Create an object with a given name and an array of construct parameters
*
* @param $name String
- * @param $p Array: parameters
+ * @param array $p parameters
* @return object
* @deprecated since 1.18, warnings in 1.18, removal in 1.20
*/
}
/**
- * Check if there is sufficent entropy in php's built-in session generation
+ * Check if there is sufficient entropy in php's built-in session generation
* @return bool true = there is sufficient entropy
*/
function wfCheckEntropy() {
* belongs to. May contain a single string if the query is only
* in one group.
*
- * @param $wiki String: the wiki ID, or false for the current wiki
+ * @param string $wiki the wiki ID, or false for the current wiki
*
* Note: multiple calls to wfGetDB(DB_SLAVE) during the course of one request
* will always return the same object, unless the underlying connection or load
/**
* Get a load balancer object.
*
- * @param $wiki String: wiki ID, or false for the current wiki
+ * @param string $wiki wiki ID, or false for the current wiki
* @return LoadBalancer
*/
function wfGetLB( $wiki = false ) {
* Find a file.
* Shortcut for RepoGroup::singleton()->findFile()
*
- * @param $title String or Title object
- * @param $options array Associative array of options:
+ * @param string $title or Title object
+ * @param array $options Associative array of options:
* time: requested time for an archived image, or false for the
* current version. An image object will be returned which was
* created at the specified time.
* extensions; this is a wrapper around $wgScriptExtension etc.
* except for 'index' and 'load' which use $wgScript/$wgLoadScript
*
- * @param $script String: script filename, sans extension
+ * @param string $script script filename, sans extension
* @return String
*/
function wfScript( $script = 'index' ) {
* characters before hashing.
* @return string
* @codeCoverageIgnore
- * @deprecated since 1.20; Please use MWCryptRand for security purposes and wfRandomString for pesudo-random strings
- * @warning This method is NOT secure. Additionally it has many callers that use it for pesudo-random purposes.
+ * @deprecated since 1.20; Please use MWCryptRand for security purposes and wfRandomString for pseudo-random strings
+ * @warning This method is NOT secure. Additionally it has many callers that use it for pseudo-random purposes.
*/
function wfGenerateToken( $salt = '' ) {
wfDeprecated( __METHOD__, '1.20' );
* Get the normalised IETF language tag
* See unit test for examples.
*
- * @param $code String: The language code.
+ * @param string $code The language code.
* @return String: The language code which complying with BCP 47 standards.
*/
function wfBCP47( $code ) {
/**
* Call hook functions defined in $wgHooks
*
- * @param $event String: event name
- * @param $args Array: parameters passed to hook functions
+ * @param string $event event name
+ * @param array $args parameters passed to hook functions
* @return Boolean True if no handler aborted the hook
*/
function wfRunHooks( $event, $args = array() ) {
/**
* Wrapper around php's unpack.
*
- * @param $format String: The format string (See php's docs)
+ * @param string $format The format string (See php's docs)
* @param $data: A binary string of binary data
- * @param $length integer or false: The minimun length of $data. This is to
+ * @param $length integer or false: The minimum length of $data. This is to
* prevent reading beyond the end of $data. false to disable the check.
*
* Also be careful when using this function to read unsigned 32 bit integer
* * Any subsequent links on the same line are considered to be exceptions,
* i.e. articles where the image may occur inline.
*
- * @param $name string the image name to check
+ * @param string $name the image name to check
* @param $contextTitle Title|bool the page on which the image occurs, if known
- * @param $blacklist string wikitext of a file blacklist
+ * @param string $blacklist wikitext of a file blacklist
* @return bool
*/
function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
/**
* Build a new HTMLForm from an array of field attributes
- * @param $descriptor Array of Field constructs, as described above
+ * @param array $descriptor of Field constructs, as described above
* @param $context IContextSource available since 1.18, will become compulsory in 1.18.
* Obviates the need to call $form->setTitle()
- * @param $messagePrefix String a prefix to go in front of default messages
+ * @param string $messagePrefix a prefix to go in front of default messages
*/
public function __construct( $descriptor, /*IContextSource*/ $context = null, $messagePrefix = '' ) {
if ( $context instanceof IContextSource ) {
/**
* Set format in which to display the form
- * @param $format String the name of the format to use, must be one of
+ * @param string $format the name of the format to use, must be one of
* $this->availableDisplayFormats
* @throws MWException
* @since 1.20
/**
* Initialise a new Object for the field
* @param $fieldname string
- * @param $descriptor string input Descriptor, as described above
+ * @param string $descriptor input Descriptor, as described above
* @throws MWException
* @return HTMLFormField subclass
*/
}
/**
- * Validate all the fields, and call the submision callback
+ * Validate all the fields, and call the submission callback
* function if everything is kosher.
* @throws MWException
* @return Mixed Bool true == Successful submission, Bool false
/**
* Set a callback to a function to do something with the form
* once it's been successfully validated.
- * @param $cb String function name. The function will be passed
+ * @param string $cb function name. The function will be passed
* the output from HTMLForm::filterDataForSubmit, and must
* return Bool true on success, Bool false if no submission
* was attempted, or String HTML output to display on error.
/**
* Set the introductory message, overwriting any existing message.
- * @param $msg String complete text of message to display
+ * @param string $msg complete text of message to display
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function setIntro( $msg ) {
/**
* Set the introductory message, overwriting any existing message.
* @since 1.19
- * @param $msg String complete text of message to display
+ * @param string $msg complete text of message to display
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function setPreText( $msg ) {
/**
* Add introductory text.
- * @param $msg String complete text of message to display
+ * @param string $msg complete text of message to display
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function addPreText( $msg ) {
/**
* Add header text, inside the form.
- * @param $msg String complete text of message to display
- * @param $section string The section to add the header to
+ * @param string $msg complete text of message to display
+ * @param string $section The section to add the header to
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function addHeaderText( $msg, $section = null ) {
/**
* Set header text, inside the form.
* @since 1.19
- * @param $msg String complete text of message to display
+ * @param string $msg complete text of message to display
* @param $section The section to add the header to
* @return HTMLForm $this for chaining calls (since 1.20)
*/
/**
* Add footer text, inside the form.
- * @param $msg String complete text of message to display
- * @param $section string The section to add the footer text to
+ * @param string $msg complete text of message to display
+ * @param string $section The section to add the footer text to
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function addFooterText( $msg, $section = null ) {
/**
* Set footer text, inside the form.
* @since 1.19
- * @param $msg String complete text of message to display
- * @param $section string The section to add the footer text to
+ * @param string $msg complete text of message to display
+ * @param string $section The section to add the footer text to
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function setFooterText( $msg, $section = null ) {
/**
* Add text to the end of the display.
- * @param $msg String complete text of message to display
+ * @param string $msg complete text of message to display
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function addPostText( $msg ) {
/**
* Set text at the end of the display.
- * @param $msg String complete text of message to display
+ * @param string $msg complete text of message to display
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function setPostText( $msg ) {
/**
* Add a hidden field to the output
- * @param $name String field name. This will be used exactly as entered
- * @param $value String field value
+ * @param string $name field name. This will be used exactly as entered
+ * @param string $value field value
* @param $attribs Array
* @return HTMLForm $this for chaining calls (since 1.20)
*/
/**
* Add a button to the form
- * @param $name String field name.
- * @param $value String field value
- * @param $id String DOM id for the button (default: null)
+ * @param string $name field name.
+ * @param string $value field value
+ * @param string $id DOM id for the button (default: null)
* @param $attribs Array
* @return HTMLForm $this for chaining calls (since 1.20)
*/
/**
* Wrap the form innards in an actual "<form>" element
- * @param $html String HTML contents to wrap.
+ * @param string $html HTML contents to wrap.
* @return String wrapped HTML.
*/
function wrapForm( $html ) {
/**
* Format a stack of error messages into a single HTML string
- * @param $errors Array of message keys/values
+ * @param array $errors of message keys/values
* @return String HTML, a "<ul>" list of errors
*/
public static function formatErrors( $errors ) {
/**
* Set the text for the submit button
- * @param $t String plaintext.
+ * @param string $t plaintext.
* @return HTMLForm $this for chaining calls (since 1.20)
*/
function setSubmitText( $t ) {
/**
* Set the text for the submit button to a message
* @since 1.19
- * @param $msg String message key
+ * @param string $msg message key
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function setSubmitTextMsg( $msg ) {
}
/**
- * @param $name String Submit button name
+ * @param string $name Submit button name
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function setSubmitName( $name ) {
}
/**
- * @param $name String Tooltip for the submit button
+ * @param string $name Tooltip for the submit button
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function setSubmitTooltip( $name ) {
}
/**
- * @param $id String DOM id for the form
+ * @param string $id DOM id for the form
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function setId( $id ) {
/**
* Prompt the whole form to be wrapped in a "<fieldset>", with
* this text as its "<legend>" element.
- * @param $legend String HTML to go inside the "<legend>" element.
+ * @param string $legend HTML to go inside the "<legend>" element.
* Will be escaped
* @return HTMLForm $this for chaining calls (since 1.20)
*/
* Prompt the whole form to be wrapped in a "<fieldset>", with
* this message as its "<legend>" element.
* @since 1.19
- * @param $msg String message key
+ * @param string $msg message key
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function setWrapperLegendMsg( $msg ) {
/**
* Set the prefix for various default messages
* @todo currently only used for the "<fieldset>" legend on forms
- * with multiple sections; should be used elsewhre?
+ * with multiple sections; should be used elsewhere?
* @param $p String
* @return HTMLForm $this for chaining calls (since 1.20)
*/
/**
* @todo Document
* @param $fields array[]|HTMLFormField[] array of fields (either arrays or objects)
- * @param $sectionName string ID attribute of the "<table>" tag for this section, ignored if empty
- * @param $fieldsetIDPrefix string ID prefix for the "<fieldset>" tag of each subsection, ignored if empty
+ * @param string $sectionName ID attribute of the "<table>" tag for this section, ignored if empty
+ * @param string $fieldsetIDPrefix ID prefix for the "<fieldset>" tag of each subsection, ignored if empty
* @return String
*/
public function displaySection( $fields, $sectionName = '', $fieldsetIDPrefix = '' ) {
/**
* Stop a reset button being shown for this form
- * @param $suppressReset Bool set to false to re-enable the
+ * @param bool $suppressReset set to false to re-enable the
* button again
* @return HTMLForm $this for chaining calls (since 1.20)
*/
* This function must be implemented to return the HTML to generate
* the input object itself. It should not implement the surrounding
* table cells/rows, or labels/help messages.
- * @param $value String the value to set the input to; eg a default
+ * @param string $value the value to set the input to; eg a default
* text for a text input.
* @return String valid HTML.
*/
/**
* Get a translated interface message
*
- * This is a wrapper arround $this->mParent->msg() if $this->mParent is set
+ * This is a wrapper around $this->mParent->msg() if $this->mParent is set
* and wfMessage() otherwise.
*
* Parameters are the same as wfMessage().
* Override this function to add specific validation checks on the
* field input. Don't forget to call parent::validate() to ensure
* that the user-defined callback mValidationCallback is still run
- * @param $value String the value the field was submitted with
- * @param $alldata Array the data collected from the form
+ * @param string $value the value the field was submitted with
+ * @param array $alldata the data collected from the form
* @return Mixed Bool true on success, or String error to display.
*/
function validate( $value, $alldata ) {
/**
* Initialise the object
- * @param $params array Associative Array. See HTMLForm doc for syntax.
+ * @param array $params Associative Array. See HTMLForm doc for syntax.
* @throws MWException
*/
function __construct( $params ) {
/**
* Get the complete table row for the input, including help text,
* labels, and whatever.
- * @param $value String the value to set the input to.
+ * @param string $value the value to set the input to.
* @return String complete HTML table row.
*/
function getTableRow( $value ) {
* Get the complete div for the input, including help text,
* labels, and whatever.
* @since 1.20
- * @param $value String the value to set the input to.
+ * @param string $value the value to set the input to.
* @return String complete HTML table row.
*/
public function getDiv( $value ) {
* Get the complete raw fields for the input, including help text,
* labels, and whatever.
* @since 1.20
- * @param $value String the value to set the input to.
+ * @param string $value the value to set the input to.
* @return String complete HTML table row.
*/
public function getRaw( $value ) {
- list( $errors, $errorClass ) = $this->getErrorsAndErrorClass( $value );
+ list( $errors, ) = $this->getErrorsAndErrorClass( $value );
$inputHtml = $this->getInputHTML( $value );
$helptext = $this->getHelpTextHtmlRaw( $this->getHelpText() );
$cellAttributes = array();
/**
* Determine form errors to display and their classes
* @since 1.20
- * @param $value String the value of the input
+ * @param string $value the value of the input
* @return Array
*/
public function getErrorsAndErrorClass( $value ) {
/**
* flatten an array of options to a single array, for instance,
* a set of "<options>" inside "<optgroups>".
- * @param $options array Associative Array with values either Strings
+ * @param array $options Associative Array with values either Strings
* or Arrays
* @return Array flattened input
*/
* The value of each option is a combination of the row tag and column tag.
* mParams['rows'] is an array with row labels as keys and row tags as values.
* mParams['columns'] is an array with column labels as keys and column tags as values.
- * @param $value Array of the options that should be checked
+ * @param array $value of the options that should be checked
* @return String
*/
function getInputHTML( $value ) {
* We override this function since the label should always be on a separate
* line above the options in the case of a checkbox matrix, i.e. it's always
* a "vertical-label".
- * @param $value String the value to set the input to
+ * @param string $value the value to set the input to
* @return String complete HTML table row
*/
function getTableRow( $value ) {
/**
* Build a drop-down box from a textual list.
- * @param $string String message text
- * @param $otherName String name of "other reason" option
+ * @param string $string message text
+ * @param string $otherName name of "other reason" option
* @return Array
* TODO: this is copied from Xml::listDropDown(), deprecate/avoid duplication?
*/
var $mOldId, $mHash, $mRef;
/**
- * @param $hash string the content hash of the text
+ * @param string $hash the content hash of the text
* @param $oldid Integer the old_id for the CGZ object
*/
function __construct( $hash = '', $oldid = 0 ) {
*
* @since 1.21
*
- * @param $name String: the name of the hook to clear.
+ * @param string $name the name of the hook to clear.
*
* @throws MWException if not in testing mode.
*/
*
* @since 1.18
*
- * @param $name String: name of hook
+ * @param string $name name of hook
* @param $callback Mixed: callback function to attach
*/
public static function register( $name, $callback ) {
*
* @since 1.18
*
- * @param $name String: name of hook
+ * @param string $name name of hook
* @return Boolean: true if the hook has a function registered to it
*/
public static function isRegistered( $name ) {
*
* @throws MWException
* @throws FatalError
- * @param $name String: name of the hook
+ * @param string $name name of the hook
*
* @return array
*/
/**
* Call hook functions defined in Hooks::register
*
- * @param $event String: event name
+ * @param string $event event name
* @param $args Array: parameters passed to hook functions
*
* @throws MWException
*
* @since 1.18
*
- * @param $errno int Unused
- * @param $errstr String: error message
+ * @param int $errno Unused
+ * @param string $errstr error message
* @throws MWHookException
* @return Boolean: false
*/
* content model. If $wgWellFormedXml is false, then a few bytes will be
* shaved off the HTML output as well.
*
- * @param $element string The element's name, e.g., 'a'
- * @param $attribs array Associative array of attributes, e.g., array(
+ * @param string $element The element's name, e.g., 'a'
+ * @param array $attribs Associative array of attributes, e.g., array(
* 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
* further documentation.
- * @param $contents string The raw HTML contents of the element: *not*
+ * @param string $contents The raw HTML contents of the element: *not*
* escaped!
* @return string Raw HTML
*/
* it returns the empty string when that's guaranteed to be safe.
*
* @since 1.17
- * @param $element string Name of the element, e.g., 'a'
+ * @param string $element Name of the element, e.g., 'a'
* @return string A closing tag, if required
*/
public static function closeElement( $element ) {
* only guarantees that the output array should be functionally identical
* to the input array (currently per the HTML 5 draft as of 2009-09-06).
*
- * @param $element string Name of the element, e.g., 'a'
- * @param $attribs array Associative array of attributes, e.g., array(
+ * @param string $element Name of the element, e.g., 'a'
+ * @param array $attribs Associative array of attributes, e.g., array(
* 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
* further documentation.
* @return array An array of attributes functionally identical to $attribs
* // gives '<em class="bar quux"></em>'
* @endcode
*
- * @param $attribs array Associative array of attributes, e.g., array(
+ * @param array $attribs Associative array of attributes, e.g., array(
* 'href' => 'http://www.mediawiki.org/' ). Values will be HTML-escaped.
* A value of false means to omit the attribute. For boolean attributes,
* you can omit the key, e.g., array( 'checked' ) instead of
if ( in_array( $key, $spaceSeparatedListAttributes ) ) {
// Apply some normalization and remove duplicates
- // Convert into correct array. Array can contain space-seperated
+ // Convert into correct array. Array can contain space-separated
// values. Implode/explode to get those into the main array as well.
if ( is_array( $value ) ) {
// If input wasn't an array, we can skip this step
if ( !isset( $value[$v] ) ) {
// As a special case don't set 'foo' if a
// separate 'foo' => true/false exists in the array
- // keys should be authoritive
+ // keys should be authoritative
$newValue[] = $v;
}
} elseif ( $v ) {
* @todo do some useful escaping as well, like if $contents contains
* literal "</script>" or (for XML) literal "]]>".
*
- * @param $contents string JavaScript
+ * @param string $contents JavaScript
* @return string Raw HTML
*/
public static function inlineScript( $contents ) {
* (if any). TODO: do some useful escaping as well, like if $contents
* contains literal "</style>" (admittedly unlikely).
*
- * @param $contents string CSS
+ * @param string $contents CSS
* @param $media mixed A media type string, like 'screen'
* @return string Raw HTML
*/
* @param $name string name attribute
* @param $value mixed value attribute
* @param $type string type attribute
- * @param $attribs array Associative array of miscellaneous extra
+ * @param array $attribs Associative array of miscellaneous extra
* attributes, passed to Html::element()
* @return string Raw HTML
*/
*
* @param $name string name attribute
* @param $value string value attribute
- * @param $attribs array Associative array of miscellaneous extra
+ * @param array $attribs Associative array of miscellaneous extra
* attributes, passed to Html::element()
* @return string Raw HTML
*/
*
* @param $name string name attribute
* @param $value string value attribute
- * @param $attribs array Associative array of miscellaneous extra
+ * @param array $attribs Associative array of miscellaneous extra
* attributes, passed to Html::element()
* @return string Raw HTML
*/
* - label: text for label to add before the field
* - exclude: [optional] Array of namespace ids to exclude
* - disable: [optional] Array of namespace ids for which the option should be disabled in the selector
- * @param $selectAttribs array HTML attributes for the generated select element.
+ * @param array $selectAttribs HTML attributes for the generated select element.
* - id: [optional], default: 'namespace'
* - name: [optional], default: 'namespace'
* @return string HTML code to select a namespace.
// Value is provided by user, the name shown is localized for the user.
$options[$params['all']] = wfMessage( 'namespacesall' )->text();
}
- // Add all namespaces as options (in the content langauge)
+ // Add all namespaces as options (in the content language)
$options += $wgContLang->getFormattedNamespaces();
// Convert $options to HTML and filter out namespaces below 0
}
if ( $nsId === NS_MAIN ) {
// For other namespaces use use the namespace prefix as label, but for
- // main we don't use "" but the user message descripting it (e.g. "(Main)" or "(Article)")
+ // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)")
$nsName = wfMessage( 'blanknamespace' )->text();
} elseif ( is_int( $nsId ) ) {
$nsName = $wgContLang->convertNamespace( $nsId );
* Constructs the opening html-tag with necessary doctypes depending on
* global variables.
*
- * @param $attribs array Associative array of miscellaneous extra
+ * @param array $attribs Associative array of miscellaneous extra
* attributes, passed to Html::element() of html tag.
* @return string Raw HTML
*/
/**
* Get HTML for an info box with an icon.
*
- * @param $text String: wikitext, get this with wfMessage()->plain()
- * @param $icon String: icon name, file in skins/common/images
- * @param $alt String: alternate text for the icon
- * @param $class String: additional class name to add to the wrapper div
+ * @param string $text wikitext, get this with wfMessage()->plain()
+ * @param string $icon icon name, file in skins/common/images
+ * @param string $alt alternate text for the icon
+ * @param string $class additional class name to add to the wrapper div
* @param $useStylePath
*
* @return string
/**
* Perform an HTTP request
*
- * @param $method String: HTTP method. Usually GET/POST
- * @param $url String: full URL to act on. If protocol-relative, will be expanded to an http:// URL
- * @param $options Array: options to pass to MWHttpRequest object.
+ * @param string $method HTTP method. Usually GET/POST
+ * @param string $url full URL to act on. If protocol-relative, will be expanded to an http:// URL
+ * @param array $options options to pass to MWHttpRequest object.
* Possible keys for the array:
* - timeout Timeout length in seconds
* - postData An array of key-value pairs or a url-encoded form data
/**
* Check if the URL can be served by localhost
*
- * @param $url String: full url to check
+ * @param string $url full url to check
* @return Boolean
*/
public static function isLocalURL( $url ) {
public $status;
/**
- * @param $url String: url to use. If protocol-relative, will be expanded to an http:// URL
- * @param $options Array: (optional) extra params to pass (see Http::request())
+ * @param string $url url to use. If protocol-relative, will be expanded to an http:// URL
+ * @param array $options (optional) extra params to pass (see Http::request())
*/
protected function __construct( $url, $options = array() ) {
global $wgHTTPTimeout;
/**
* Generate a new request object
- * @param $url String: url to use
- * @param $options Array: (optional) extra params to pass (see Http::request())
+ * @param string $url url to use
+ * @param array $options (optional) extra params to pass (see Http::request())
* @throws MWException
* @return CurlHttpRequest|PhpHttpRequest
* @see MWHttpRequest::__construct
}
/**
- * Set the refererer header
+ * Set the referrer header
*/
public function setReferer( $url ) {
$this->setHeader( 'Referer', $url );
/**
* Parses the headers, including the HTTP status code and any
- * Set-Cookie headers. This function expectes the headers to be
+ * Set-Cookie headers. This function expects the headers to be
* found in an array in the member variable headerList.
*/
protected function parseHeader() {
* SIIT IPv4-translated addresses are rejected.
* Note: canonicalize() tries to convert translated addresses to IPv4.
*
- * @param $ip String: possible IP address
+ * @param string $ip possible IP address
* @return Boolean
*/
public static function isIPAddress( $ip ) {
* Given a string, determine if it as valid IP in IPv6 only.
* Note: Unlike isValid(), this looks for networks too.
*
- * @param $ip String: possible IP address
+ * @param string $ip possible IP address
* @return Boolean
*/
public static function isIPv6( $ip ) {
* Given a string, determine if it as valid IP in IPv4 only.
* Note: Unlike isValid(), this looks for networks too.
*
- * @param $ip String: possible IP address
+ * @param string $ip possible IP address
* @return Boolean
*/
public static function isIPv4( $ip ) {
* IPv6 addresses in octet notation are expanded to 8 words.
* IPv4 addresses are just trimmed.
*
- * @param $ip String: IP address in quad or octet form (CIDR or not).
+ * @param string $ip IP address in quad or octet form (CIDR or not).
* @return String
*/
public static function sanitizeIP( $ip ) {
$ip
);
}
- // Remove leading zereos from each bloc as needed
+ // Remove leading zeros from each bloc as needed
$ip = preg_replace( '/(^|:)0+(' . RE_IPV6_WORD . ')/', '$1$2', $ip );
return $ip;
}
*
* A bare IPv6 address is accepted despite the lack of square brackets.
*
- * @param $both string The string with the host and port
+ * @param string $both The string with the host and port
* @return array
*/
public static function splitHostAndPort( $both ) {
/**
* Convert an IPv4 or IPv6 hexadecimal representation back to readable format
*
- * @param $hex String: number, with "v6-" prefix if it is IPv6
+ * @param string $hex number, with "v6-" prefix if it is IPv6
* @return String: quad-dotted (IPv4) or octet notation (IPv6)
*/
public static function formatHex( $hex ) {
* function for an IPv6 address will be prefixed with "v6-", a non-
* hexadecimal string which sorts after the IPv4 addresses.
*
- * @param $ip String: quad dotted/octet IP address.
+ * @param string $ip quad dotted/octet IP address.
* @return String
*/
public static function toHex( $ip ) {
/**
* Given an IPv6 address in octet notation, returns a pure hex string.
*
- * @param $ip String: octet ipv6 IP address.
+ * @param string $ip octet ipv6 IP address.
* @return String: pure hex (uppercase)
*/
private static function IPv6ToRawHex( $ip ) {
* Like ip2long() except that it actually works and has a consistent error return value.
* Comes from ProxyTools.php
*
- * @param $ip String: quad dotted IP address.
+ * @param string $ip quad dotted IP address.
* @return Mixed: string/int/false
*/
public static function toUnsigned( $ip ) {
* Convert a network specification in CIDR notation
* to an integer network and a number of bits
*
- * @param $range String: IP with CIDR prefix
+ * @param string $range IP with CIDR prefix
* @return array(int or string, int)
*/
public static function parseCIDR( $range ) {
* 2001:0db8:85a3::7344/96 CIDR
* 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range
* 2001:0db8:85a3::7344 Single IP
- * @param $range String: IP range
+ * @param string $range IP range
* @return array(string, string)
*/
public static function parseRange( $range ) {
/**
* Determine if a given IPv4/IPv6 address is in a given CIDR network
*
- * @param $addr String: the address to check against the given range.
- * @param $range String: the range to check the given address against.
+ * @param string $addr the address to check against the given range.
+ * @param string $range the range to check the given address against.
* @return Boolean: whether or not the given address is in the given range.
*/
public static function isInRange( $addr, $range ) {
* This currently only checks a few IPV4-to-IPv6 related cases. More
* unusual representations may be added later.
*
- * @param $addr String: something that might be an IP address
+ * @param string $addr something that might be an IP address
* @return String: valid dotted quad IPv4 address or null
*/
public static function canonicalize( $addr ) {
}
/**
- * Gets rid of uneeded numbers in quad-dotted/octet IP strings
+ * Gets rid of unneeded numbers in quad-dotted/octet IP strings
* For example, 127.111.113.151/24 -> 127.111.113.0/24
- * @param $range String: IP address to normalize
+ * @param string $range IP address to normalize
* @return string
*/
public static function sanitizeRange( $range ) {
/**
* Set the caption (as plain text)
*
- * @param $caption string Caption
+ * @param string $caption Caption
*/
function setCaption( $caption ) {
$this->mCaption = htmlspecialchars( $caption );
/**
* Set the caption (as HTML)
*
- * @param $caption String: Caption
+ * @param string $caption Caption
*/
public function setCaptionHtml( $caption ) {
$this->mCaption = $caption;
* Note -- if taking from user input, you should probably run through
* Sanitizer::validateAttributes() first.
*
- * @param $attribs Array of HTML attribute pairs
+ * @param array $attribs of HTML attribute pairs
*/
function setAttributes( $attribs ) {
$this->mAttribs = $attribs;
* @return string
*/
function toHTML() {
- global $wgLang;
-
if ( $this->mPerRow > 0 ) {
$maxwidth = $this->mPerRow * ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING + self::GB_BORDERS );
$oldStyle = isset( $this->mAttribs['style'] ) ? $this->mAttribs['style'] : '';
$output .= "\n\t<li class='gallerycaption'>{$this->mCaption}</li>";
}
+ $lang = $this->getLang();
$params = array(
'width' => $this->mWidths,
'height' => $this->mHeights
if( $this->mShowBytes ) {
if( $img ) {
- $fileSize = htmlspecialchars( $wgLang->formatSize( $img->getSize() ) );
+ $fileSize = htmlspecialchars( $lang->formatSize( $img->getSize() ) );
} else {
$fileSize = wfMessage( 'filemissing' )->escaped();
}
$textlink = $this->mShowFilename ?
Linker::link(
$nt,
- htmlspecialchars( $wgLang->truncate( $nt->getText(), $this->mCaptionLength ) ),
+ htmlspecialchars( $lang->truncate( $nt->getText(), $this->mCaptionLength ) ),
array(),
array(),
array( 'known', 'noclasses' )
# http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
# Weird double wrapping (the extra div inside the li) needed due to FF2 bug
- # Can be safely removed if FF2 falls completely out of existance
+ # Can be safely removed if FF2 falls completely out of existence
$output .=
"\n\t\t" . '<li class="gallerybox" style="width: ' . ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING ) . 'px">'
. '<div style="width: ' . ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING ) . 'px">'
: false;
}
+ /**
+ * Determines the correct language to be used for this image gallery
+ * @return Language object
+ */
+ private function getLang() {
+ global $wgLang;
+ return $this->mParser
+ ? $this->mParser->getTargetLanguage()
+ : $wgLang;
+ }
+
} //class
/**
* Constructor from a page id
- * @param $id Int article ID to load
+ * @param int $id article ID to load
* @return ImagePage|null
*/
public static function newFromID( $id ) {
$diff = $request->getVal( 'diff' );
$diffOnly = $request->getBool( 'diffonly', $this->getContext()->getUser()->getOption( 'diffonly' ) );
- if ( $this->getTitle()->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) {
+ if ( $this->getTitle()->getNamespace() != NS_FILE || ( $diff !== null && $diffOnly ) ) {
parent::view();
return;
}
$this->loadFile();
if ( $this->getTitle()->getNamespace() == NS_FILE && $this->mPage->getFile()->getRedirected() ) {
- if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || isset( $diff ) ) {
+ if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || $diff !== null ) {
// mTitle is the same as the redirect target so ask Article
// to perform the redirect for us.
$request->setVal( 'diffonly', 'true' );
*
* @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
*
- * @param $metadata Array: the array containing the EXIF data
+ * @param array $metadata the array containing the EXIF data
* @return String The metadata table. This is treated as Wikitext (!)
*/
protected function makeMetadataTable( $metadata ) {
# @todo FIXME: Why is this using escapeId for a class?!
$class = Sanitizer::escapeId( $v['id'] );
if ( $type == 'collapsed' ) {
- $class .= ' collapsable';
+ $class .= ' collapsable'; // sic
}
$r .= "<tr class=\"$class\">\n";
$r .= "<th>{$v['name']}</th>\n";
if ( $width > $maxWidth || $height > $maxHeight ) {
# Calculate the thumbnail size.
# First case, the limiting factor is the width, not the height.
- if ( $width / $height >= $maxWidth / $maxHeight ) { // FIXME: Possible divison by 0. bug 36911
- $height = round( $height * $maxWidth / $width ); // FIXME: Possible divison by 0. bug 36911
+ if ( $width / $height >= $maxWidth / $maxHeight ) { // FIXME: Possible division by 0. bug 36911
+ $height = round( $height * $maxWidth / $width ); // FIXME: Possible division by 0. bug 36911
$width = $maxWidth;
# Note that $height <= $maxHeight now.
} else {
- $newwidth = floor( $width * $maxHeight / $height ); // FIXME: Possible divison by 0. bug 36911
- $height = round( $height * $newwidth / $width ); // FIXME: Possible divison by 0. bug 36911
+ $newwidth = floor( $width * $maxHeight / $height ); // FIXME: Possible division by 0. bug 36911
+ $height = round( $height * $newwidth / $width ); // FIXME: Possible division by 0. bug 36911
$width = $newwidth;
# Note that $height <= $maxHeight now, but might not be identical
# because of rounding.
$nofile = 'filepage-nofile';
}
// Note, if there is an image description page, but
- // no image, then this setRobotPolicy is overriden
+ // no image, then this setRobotPolicy is overridden
// by Article::View().
$out->setRobotPolicy( 'noindex,nofollow' );
$out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
/**
* Creates an thumbnail of specified size and returns an HTML link to it
- * @param $params array Scaler parameters
+ * @param array $params Scaler parameters
* @param $width int
* @param $height int
* @return string
}
/**
- * Returns the corrosponding $wgImageLimits entry for the selected user option
+ * Returns the corresponding $wgImageLimits entry for the selected user option
*
* @param $user User
- * @param $optionName string Name of a option to check, typically imagesize or thumbsize
+ * @param string $optionName Name of a option to check, typically imagesize or thumbsize
* @return array
* @since 1.21
*/
} else {
// set namespace to 'all', so the namespace check in processTitle() can passed
$this->setTargetNamespace( null );
- $this->mTargetRootPage = $title->getPrefixedDBKey();
+ $this->mTargetRootPage = $title->getPrefixedDBkey();
}
}
}
* @param $title Title
* @param $origTitle Title
* @param $revCount Integer
- * @param $sucCount Int: number of revisions for which callback returned true
- * @param $pageInfo Array: associative array of page information
+ * @param int $sucCount number of revisions for which callback returned true
+ * @param array $pageInfo associative array of page information
*/
private function pageOutCallback( $title, $origTitle, $revCount, $sucCount, $pageInfo ) {
if( isset( $this->mPageOutCallback ) ) {
}
if ( $status->isGood() ) {
- wfDebug( __METHOD__ . ": Succesful\n" );
+ wfDebug( __METHOD__ . ": Successful\n" );
return true;
} else {
wfDebug( __METHOD__ . ': failed: ' . $status->getXml() . "\n" );
static function newFromUpload( $fieldname = "xmlimport" ) {
$upload =& $_FILES[$fieldname];
- if( !isset( $upload ) || !$upload['name'] ) {
+ if( $upload === null || !$upload['name'] ) {
return Status::newFatal( 'importnofile' );
}
if( !empty( $upload['error'] ) ) {
*
* require( MWInit::extSetupPath( 'ParserFunctions/ParserFunctions.php' ) );
*
- * @param $extRel string The path relative to the extensions directory, as defined by
+ * @param string $extRel The path relative to the extensions directory, as defined by
* $wgExtensionsDirectory.
*
* @return string
}
/**
- * Determine wether a method exists within a class, using a method which works
+ * Determine whether a method exists within a class, using a method which works
* under HipHop.
*
* Note that under HipHop when method_exists is given a string for it's class
/**
* Constructor
*
- * @param $str String: license name??
+ * @param string $str license name??
*/
function __construct( $str ) {
list( $text, $template ) = explode( '|', strrev( $str ), 2 );
* Check whether $content contains a link to $filterEntry
*
* @param $content Content: content to check
- * @param $filterEntry String: domainparts, see makeRegex() for more details
+ * @param string $filterEntry domainparts, see makeRegex() for more details
* @return Integer: 0 if no match or 1 if there's at least one match
*/
static function matchEntry( Content $content, $filterEntry ) {
/**
* Builds a regex pattern for $filterEntry.
*
- * @param $filterEntry String: URL, if it begins with "*.", it'll be
+ * @param string $filterEntry URL, if it begins with "*.", it'll be
* replaced to match any subdomain
* @return String: regex pattern, for preg_match()
*/
*
* Asterisks in any other location are considered invalid.
*
- * @param $filterEntry String: domainparts
+ * @param string $filterEntry domainparts
* @param $prot String: protocol
* @return Array to be passed to DatabaseBase::buildLike() or false on error
*/
// Reverse the labels in the hostname, convert to lower case
// For emails reverse domainpart only
if ( $prot == 'mailto:' && strpos( $host, '@' ) ) {
- // complete email adress
+ // complete email address
$mailparts = explode( '@', $host );
$domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
$host = $domainpart . '@' . $mailparts[0];
$like = array( "$prot$host", $db->anyString() );
} elseif ( $prot == 'mailto:' ) {
- // domainpart of email adress only. do not add '.'
+ // domainpart of email address only. do not add '.'
$host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
$like = array( "$prot$host", $db->anyString() );
} else {
/**
* Filters an array returned by makeLikeArray(), removing everything past first pattern placeholder.
*
- * @param $arr array: array to filter
+ * @param array $arr array to filter
* @return array filtered array
*/
public static function keepOneWildcard( $arr ) {
const TOOL_LINKS_EMAIL = 2;
/**
- * Get the appropriate HTML attributes to add to the "a" element of an ex-
- * ternal link, as created by [wikisyntax].
+ * Get the appropriate HTML attributes to add to the "a" element of an
+ * external link, as created by [wikisyntax].
*
- * @param $class String: the contents of the class attribute; if an empty
+ * @param string $class the contents of the class attribute; if an empty
* string is passed, which is the default value, defaults to 'external'.
* @return string
* @deprecated since 1.18 Just pass the external class directly to something using Html::expandAttributes
}
/**
- * Get the appropriate HTML attributes to add to the "a" element of an in-
- * terwiki link.
+ * Get the appropriate HTML attributes to add to the "a" element of an interwiki link.
*
- * @param $title String: the title text for the link, URL-encoded (???) but
+ * @param string $title the title text for the link, URL-encoded (???) but
* not HTML-escaped
- * @param $unused String: unused
- * @param $class String: the contents of the class attribute; if an empty
+ * @param string $unused unused
+ * @param string $class the contents of the class attribute; if an empty
* string is passed, which is the default value, defaults to 'external'.
* @return string
*/
}
/**
- * Get the appropriate HTML attributes to add to the "a" element of an in-
- * ternal link.
+ * Get the appropriate HTML attributes to add to the "a" element of an internal link.
*
- * @param $title String: the title text for the link, URL-encoded (???) but
+ * @param string $title the title text for the link, URL-encoded (???) but
* not HTML-escaped
- * @param $unused String: unused
- * @param $class String: the contents of the class attribute, default none
+ * @param string $unused unused
+ * @param string $class the contents of the class attribute, default none
* @return string
*/
static function getInternalLinkAttributes( $title, $unused = null, $class = '' ) {
}
/**
- * Get the appropriate HTML attributes to add to the "a" element of an in-
- * ternal link, given the Title object for the page we want to link to.
+ * Get the appropriate HTML attributes to add to the "a" element of an internal
+ * link, given the Title object for the page we want to link to.
*
* @param $nt Title
- * @param $unused String: unused
- * @param $class String: the contents of the class attribute, default none
+ * @param string $unused unused
+ * @param string $class the contents of the class attribute, default none
* @param $title Mixed: optional (unescaped) string to use in the title
* attribute; if false, default to the name of the page we're linking to
* @return string
* the link text. This is raw HTML and will not be escaped. If null,
* defaults to the prefixed text of the Title; or if the Title is just a
* fragment, the contents of the fragment.
- * @param $customAttribs array A key => value array of extra HTML attri-
- * butes, such as title and class. (href is ignored.) Classes will be
+ * @param array $customAttribs A key => value array of extra HTML attributes,
+ * such as title and class. (href is ignored.) Classes will be
* merged with the default classes, while other attributes will replace
* default attributes. All passed attribute values will be HTML-escaped.
* A false attribute value means to suppress that attribute.
* @param $query array The query string to append to the URL
* you're linking to, in key => value array form. Query keys and values
* will be URL-encoded.
- * @param $options string|array String or array of strings:
+ * @param string|array $options String or array of strings:
* 'known': Page is known to exist, so don't check if it does.
* 'broken': Page is known not to exist, so don't check if it does.
* 'noclasses': Don't add any classes automatically (includes "new",
* Returns the Url used to link to a Title
*
* @param $target Title
- * @param $query Array: query parameters
+ * @param array $query query parameters
* @param $options Array
* @return String
*/
* @return string
*/
private static function linkText( $target ) {
- # We might be passed a non-Title by make*LinkObj(). Fail gracefully.
+ // We might be passed a non-Title by make*LinkObj(). Fail gracefully.
if ( !$target instanceof Title ) {
return '';
}
- # If the target is just a fragment, with no title, we return the frag-
- # ment text. Otherwise, we return the title text itself.
+ // If the target is just a fragment, with no title, we return the fragment
+ // text. Otherwise, we return the title text itself.
if ( $target->getPrefixedText() === '' && $target->getFragment() !== '' ) {
return htmlspecialchars( $target->getFragment() );
}
* despite $query not being used.
*
* @param $nt Title
- * @param $html String [optional]
- * @param $query String [optional]
- * @param $trail String [optional]
- * @param $prefix String [optional]
+ * @param string $html [optional]
+ * @param string $query [optional]
+ * @param string $trail [optional]
+ * @param string $prefix [optional]
*
*
* @return string
* a value indicating that the title object is invalid.
*
* @param $context IContextSource context to use to get the messages
- * @param $namespace int Namespace number
- * @param $title string Text of the title, without the namespace part
+ * @param int $namespace Namespace number
+ * @param string $title Text of the title, without the namespace part
* @return string
*/
public static function getInvalidTitleDescription( IContextSource $context, $namespace, $title ) {
* @param $parser Parser object
* @param $title Title object of the file (not the currently viewed page)
* @param $file File object, or false if it doesn't exist
- * @param $frameParams Array: associative array of parameters external to the media handler.
+ * @param array $frameParams associative array of parameters external to the media handler.
* Boolean parameters are indicated by presence or absence, the value is arbitrary and
* will often be false.
* thumbnail If present, downscale and frame
* caption HTML for image caption.
* link-url URL to link to
* link-title Title object to link to
- * link-target Value for the target attribue, only with link-url
+ * link-target Value for the target attribute, only with link-url
* no-link Boolean, suppress description link
*
- * @param $handlerParams Array: associative array of media handler parameters, to be passed
+ * @param array $handlerParams associative array of media handler parameters, to be passed
* to transform(). Typical keys are "width" and "page".
- * @param $time String: timestamp of the file, set as false for current
- * @param $query String: query params for desc url
+ * @param string $time timestamp of the file, set as false for current
+ * @param string $query query params for desc url
* @param $widthOption: Used by the parser to remember the user preference thumbnailsize
* @since 1.20
* @return String: HTML for an image, with links, wrappers, etc.
if ( isset( $fp['thumbnail'] ) || isset( $fp['framed'] ) || isset( $fp['frameless'] ) || !$hp['width'] ) {
global $wgThumbLimits, $wgThumbUpright;
- if ( !isset( $widthOption ) || !isset( $wgThumbLimits[$widthOption] ) ) {
+ if ( $widthOption === null || !isset( $wgThumbLimits[$widthOption] ) ) {
$widthOption = User::getDefaultOption( 'thumbsize' );
}
'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false,
'img-class' => $fp['class'] );
if ( isset( $fp['border'] ) ) {
+ // TODO: BUG? Both values are identical
$params['img-class'] .= ( $params['img-class'] !== '' ) ? ' thumbborder' : 'thumbborder';
}
$params = self::getImageLinkMTOParams( $fp, $query, $parser ) + $params;
/**
* Get the link parameters for MediaTransformOutput::toHtml() from given
* frame parameters supplied by the Parser.
- * @param $frameParams array The frame parameters
- * @param $query string An optional query string to add to description page links
+ * @param array $frameParams The frame parameters
+ * @param string $query An optional query string to add to description page links
* @return array
*/
private static function getImageLinkMTOParams( $frameParams, $query = '', $parser = null ) {
* Make a "broken" link to an image
*
* @param $title Title object
- * @param $label String: link label (plain text)
- * @param $query String: query string
+ * @param string $label link label (plain text)
+ * @param string $query query string
* @param $unused1 Unused parameter kept for b/c
* @param $unused2 Unused parameter kept for b/c
* @param $time Boolean: a file of a certain timestamp was requested
* Get the URL to upload a certain file
*
* @param $destFile Title object of the file to upload
- * @param $query String: urlencoded query string to prepend
+ * @param string $query urlencoded query string to prepend
* @return String: urlencoded URL
*/
protected static function getUploadUrl( $destFile, $query = '' ) {
* Create a direct link to a given uploaded file.
*
* @param $title Title object.
- * @param $html String: pre-sanitized HTML
- * @param $time string: MW timestamp of file creation time
+ * @param string $html pre-sanitized HTML
+ * @param string $time MW timestamp of file creation time
* @return String: HTML
*/
public static function makeMediaLinkObj( $title, $html = '', $time = false ) {
*
* @param $title Title object.
* @param $file File|bool mixed File object or false
- * @param $html String: pre-sanitized HTML
+ * @param string $html pre-sanitized HTML
* @return String: HTML
*
* @todo Handle invalid or missing images better.
/**
* Make an external link
- * @param $url String: URL to link to
- * @param $text String: text of link
+ * @param string $url URL to link to
+ * @param string $text text of link
* @param $escape Boolean: do we escape the link text?
- * @param $linktype String: type of external link. Gets added to the classes
- * @param $attribs Array of extra attributes to <a>
+ * @param string $linktype type of external link. Gets added to the classes
+ * @param array $attribs of extra attributes to <a>
* @param $title Title|null Title object used for title specific link attributes
* @return string
*/
/**
* Make user link (or user contributions for unregistered users)
* @param $userId Integer: user id in database.
- * @param $userName String: user name in database.
- * @param $altUserName String: text to display instead of the user name (optional)
+ * @param string $userName user name in database.
+ * @param string $altUserName text to display instead of the user name (optional)
* @return String: HTML fragment
* @since 1.19 Method exists for a long time. $altUserName was added in 1.19.
*/
* Generate standard user tool links (talk, contributions, block link, etc.)
*
* @param $userId Integer: user identifier
- * @param $userText String: user name or IP address
+ * @param string $userText user name or IP address
* @param $redContribsWhenNoEdits Boolean: should the contributions link be
* red if the user has no edits?
* @param $flags Integer: customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK and Linker::TOOL_LINKS_EMAIL)
/**
* Alias for userToolLinks( $userId, $userText, true );
* @param $userId Integer: user identifier
- * @param $userText String: user name or IP address
+ * @param string $userText user name or IP address
* @param $edits Integer: user edit count (optional, for performance)
* @return String
*/
/**
* @param $userId Integer: user id in database.
- * @param $userText String: user name in database.
+ * @param string $userText user name in database.
* @return String: HTML fragment with user talk link
*/
public static function userTalkLink( $userId, $userText ) {
/**
* @param $userId Integer: userid
- * @param $userText String: user name in database.
+ * @param string $userText user name in database.
* @return String: HTML fragment with block link
*/
public static function blockLink( $userId, $userText ) {
/**
* @param $userId Integer: userid
- * @param $userText String: user name in database.
+ * @param string $userText user name in database.
* @return String: HTML fragment with e-mail user link
*/
public static function emailLink( $userId, $userText ) {
* add a separator where needed and format the comment itself with CSS
* Called by Linker::formatComment.
*
- * @param $comment String: comment text
+ * @param string $comment comment text
* @param $title Title|null An optional title object used to links to sections
* @param $local Boolean: whether section links should refer to local page
* @return String: formatted comment
* is ignored
*
* @todo FIXME: Doesn't handle sub-links as in image thumb texts like the main parser
- * @param $comment String: text to format links in
+ * @param string $comment text to format links in
* @param $title Title|null An optional title object used to links to sections
* @param $local Boolean: whether section links should refer to local page
* @return String
public static function commentBlock( $comment, $title = null, $local = false ) {
// '*' used to be the comment inserted by the software way back
// in antiquity in case none was provided, here for backwards
- // compatability, acc. to brion -ævar
+ // compatibility, acc. to brion -ævar
if ( $comment == '' || $comment == '*' ) {
return '';
} else {
/**
* Wraps the TOC in a table and provides the hide/collapse javascript.
*
- * @param $toc String: html of the Table Of Contents
+ * @param string $toc html of the Table Of Contents
* @param $lang String|Language|false: Language for the toc title, defaults to user language
* @return String: full html of the TOC
*/
* Generate a table of contents from a section tree
* Currently unused.
*
- * @param $tree array Return value of ParserOutput::getSections()
+ * @param array $tree Return value of ParserOutput::getSections()
* @return String: HTML fragment
*/
public static function generateTOC( $tree ) {
* Create a headline for content
*
* @param $level Integer: the level of the headline (1-6)
- * @param $attribs String: any attributes for the headline, starting with
+ * @param string $attribs any attributes for the headline, starting with
* a space and ending with '>'
* This *must* be at least '>' for no attribs
- * @param $anchor String: the anchor to give the headline (the bit after the #)
- * @param $html String: html for the text of the header
- * @param $link String: HTML to add for the section edit link
+ * @param string $anchor the anchor to give the headline (the bit after the #)
+ * @param string $html html for the text of the header
+ * @param string $link HTML to add for the section edit link
* @param $legacyAnchor Mixed: a second, optional anchor to give for
* backward compatibility (false to omit)
*
* is set and the user is the only contributor of the page.
*
* @param $rev Revision object
- * @param $verify Bool Try to verfiy that this revision can really be rolled back
+ * @param bool $verify Try to verify that this revision can really be rolled back
* @return integer|bool|null
*/
public static function getRollbackEditCount( $rev, $verify ) {
/**
* Returns HTML for the "hidden categories on this page" list.
*
- * @param $hiddencats Array of hidden categories from Article::getHiddenCategories
+ * @param array $hiddencats of hidden categories from Article::getHiddenCategories
* or similar
* @return String: HTML output
*/
* Format a size in bytes for output, using an appropriate
* unit (B, KB, MB or GB) according to the magnitude in question
*
- * @param $size int Size to format
+ * @param int $size Size to format
* @return String
*/
public static function formatSize( $size ) {
* isn't always, because sometimes the accesskey needs to go on a different
* element than the id, for reverse-compatibility, etc.)
*
- * @param $name String: id of the element, minus prefixes.
+ * @param string $name id of the element, minus prefixes.
* @param $options Mixed: null or the string 'withaccess' to add an access-
* key hint
* @return String: contents of the title attribute (which you must HTML-
* the id but isn't always, because sometimes the accesskey needs to go on
* a different element than the id, for reverse-compatibility, etc.)
*
- * @param $name String: id of the element, minus prefixes.
+ * @param string $name id of the element, minus prefixes.
* @return String: contents of the accesskey attribute (which you must HTML-
* escape), or false for no accesskey attribute
*/
/**
* Creates a (show/hide) link for deleting revisions/log entries
*
- * @param $query Array: query parameters to be passed to link()
+ * @param array $query query parameters to be passed to link()
* @param $restricted Boolean: set to true to use a "<strong>" instead of a "<span>"
* @param $delete Boolean: set to true to use (show/hide) rather than (show)
*
* This function is a shortcut to makeBrokenLinkObj(Title::newFromText($title),...). Do not call
* it if you already have a title object handy. See makeBrokenLinkObj for further documentation.
*
- * @param $title String: The text of the title
- * @param $text String: Link text
- * @param $query String: Optional query part
- * @param $trail String: Optional trail. Alphabetic characters at the start of this string will
+ * @param string $title The text of the title
+ * @param string $text Link text
+ * @param string $query Optional query part
+ * @param string $trail Optional trail. Alphabetic characters at the start of this string will
* be included in the link text. Other characters will be appended after
* the end of the link.
* @return string
* @param $nt Title: the title object to make the link from, e.g. from
* Title::newFromText.
* @param $text String: link text
- * @param $query String: optional query part
- * @param $trail String: optional trail. Alphabetic characters at the start of this string will
+ * @param string $query optional query part
+ * @param string $trail optional trail. Alphabetic characters at the start of this string will
* be included in the link text. Other characters will be appended after
* the end of the link.
- * @param $prefix String: optional prefix. As trail, only before instead of after.
+ * @param string $prefix optional prefix. As trail, only before instead of after.
* @return string
*/
static function makeLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
* @param $text String: text to replace the title
* @param $query String: link target
* @param $trail String: text after link
- * @param $prefix String: text before link text
- * @param $aprops String: extra attributes to the a-element
+ * @param string $prefix text before link text
+ * @param string $aprops extra attributes to the a-element
* @param $style String: style to apply - if empty, use getInternalLinkAttributesObj instead
* @return string the a-element
*/
*
* @param $title Title object of the target page
* @param $text String: Link text
- * @param $query String: Optional query part
- * @param $trail String: Optional trail. Alphabetic characters at the start of this string will
+ * @param string $query Optional query part
+ * @param string $trail Optional trail. Alphabetic characters at the start of this string will
* be included in the link text. Other characters will be appended after
* the end of the link.
- * @param $prefix String: Optional prefix
+ * @param string $prefix Optional prefix
* @return string
*/
static function makeBrokenLinkObj( $title, $text = '', $query = '', $trail = '', $prefix = '' ) {
* @param $trail String: optional trail. Alphabetic characters at the start of this string will
* be included in the link text. Other characters will be appended after
* the end of the link.
- * @param $prefix String: Optional prefix
+ * @param string $prefix Optional prefix
* @return string
*/
static function makeColouredLinkObj( $nt, $colour, $text = '', $query = '', $trail = '', $prefix = '' ) {
* Use PHP's magic __call handler to transform instance calls to a dummy instance
* into static calls to the new Linker for backwards compatibility.
*
- * @param $fname String Name of called method
- * @param $args Array Arguments to the method
+ * @param string $fname Name of called method
+ * @param array $args Arguments to the method
* @return mixed
*/
public function __call( $fname, $args ) {
/**
* Update all the appropriate counts in the category table.
- * @param $added array associative array of category name => sort key
- * @param $deleted array associative array of category name => sort key
+ * @param array $added associative array of category name => sort key
+ * @param array $deleted associative array of category name => sort key
*/
function updateCategoryCounts( $added, $deleted ) {
$a = WikiPage::factory( $this->mTitle );
/**
* Get an array of category insertions
*
- * @param $existing array mapping existing category names to sort keys. If both
+ * @param array $existing mapping existing category names to sort keys. If both
* match a link in $this, the link will be omitted from the output
*
* @return array
/**
* Get an array of interlanguage link insertions
*
- * @param $existing Array mapping existing language codes to titles
+ * @param array $existing mapping existing language codes to titles
*
* @return array
*/
/**
* Update all the appropriate counts in the category table.
- * @param $added array associative array of category name => sort key
- * @param $deleted array associative array of category name => sort key
+ * @param array $added associative array of category name => sort key
+ * @param array $deleted associative array of category name => sort key
*/
function updateCategoryCounts( $added, $deleted ) {
$a = WikiPage::factory( $this->mTitle );
--- /dev/null
+<?php
+/**
+ * Convenience class for generating iterators from iterators.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Convenience class for generating iterators from iterators.
+ *
+ * @since 1.21
+ */
+class MappedIterator implements Iterator {
+ /** @var Iterator */
+ protected $baseIterator;
+ /** @var Closure */
+ protected $vCallback;
+
+ /**
+ * Build an new iterator from a base iterator by having the former wrap the
+ * later, returning the result of "value" callback for each current() invocation.
+ * The callback takes the result of current() on the base iterator as an argument.
+ * The keys of the base iterator are reused verbatim.
+ *
+ * @param Iterator|Array $iter
+ * @param Closure $vCallback
+ * @throws MWException
+ */
+ public function __construct( $iter, Closure $vCallback ) {
+ if ( is_array( $iter ) ) {
+ $this->baseIterator = new ArrayIterator( $iter );
+ } elseif ( $iter instanceof Iterator ) {
+ $this->baseIterator = $iter;
+ } else {
+ throw new MWException( "Invalid base iterator provided." );
+ }
+ $this->vCallback = $vCallback;
+ }
+
+ /**
+ * @return void
+ */
+ public function rewind() {
+ $this->baseIterator->rewind();
+ }
+
+ /**
+ * @return Mixed|null Returns null if out of range
+ */
+ public function current() {
+ if ( !$this->baseIterator->valid() ) {
+ return null; // out of range
+ }
+ return call_user_func_array( $this->vCallback, array( $this->baseIterator->current() ) );
+ }
+
+ /**
+ * @return Mixed|null Returns null if out of range
+ */
+ public function key() {
+ if ( !$this->baseIterator->valid() ) {
+ return null; // out of range
+ }
+ return $this->baseIterator->key();
+ }
+
+ /**
+ * @return void
+ */
+ public function next() {
+ $this->baseIterator->next();
+ }
+
+ /**
+ * @return bool
+ */
+ public function valid() {
+ return $this->baseIterator->valid();
+ }
+}
*/
/**
- * The Message class provides methods which fullfil two basic services:
+ * The Message class provides methods which fulfil two basic services:
* - fetching interface messages
* - processing messages into a variety of formats
*
- * First implemented with MediaWiki 1.17, the Message class is intented to
+ * First implemented with MediaWiki 1.17, the Message class is intended to
* replace the old wfMsg* functions that over time grew unusable.
* @see https://www.mediawiki.org/wiki/Manual:Messages_API for equivalences
* between old and new functions.
* Constructor.
* @since 1.17
* @param $key: message key, or array of message keys to try and use the first non-empty message for
- * @param $params Array message parameters
+ * @param array $params message parameters
* @return Message: $this
*/
public function __construct( $key, $params = array() ) {
/**
* Factory function that is just wrapper for the real constructor. It is
- * intented to be used instead of the real constructor, because it allows
+ * intended to be used instead of the real constructor, because it allows
* chaining method calls, while new objects don't.
* @since 1.17
- * @param $key String: message key
+ * @param string $key message key
* @param Varargs: parameters as Strings
* @return Message: $this
*/
}
/**
- * Returns the message text as-is, only parameters are subsituted.
+ * Returns the message text as-is, only parameters are substituted.
* @since 1.17
* @return String: Unescaped untransformed message text.
*/
}
/**
- * Substitutes any paramaters into the message text.
+ * Substitutes any parameters into the message text.
* @since 1.17
- * @param $message String: the message text
- * @param $type String: either before or after
+ * @param string $message the message text
+ * @param string $type either before or after
* @return String
*/
protected function replaceParameters( $message, $type = 'before' ) {
/**
* Extracts the parameter type and preprocessed the value if needed.
* @since 1.18
- * @param $param String|Array: Parameter as defined in this class.
+ * @param string|array $param Parameter as defined in this class.
* @return Tuple(type, value)
*/
protected function extractParam( $param ) {
/**
* Wrapper for what ever method we use to parse wikitext.
* @since 1.17
- * @param $string String: Wikitext message contents
+ * @param string $string Wikitext message contents
* @return string Wikitext parsed into HTML
*/
protected function parseText( $string ) {
/**
* Wrapper for what ever method we use to {{-transform wikitext.
* @since 1.17
- * @param $string String: Wikitext message contents
+ * @param string $string Wikitext message contents
* @return string Wikitext with {{-constructs replaced with their values.
*/
protected function transformText( $string ) {
* Call the parent constructor, then store the key as
* the message.
*
- * @param $key string Message to use
- * @param $params array Parameters for the message
+ * @param string $key Message to use
+ * @param array $params Parameters for the message
* @see Message::__construct
*/
public function __construct( $key, $params = array() ) {
* A message blob is a JSON object containing the interface messages for a
* certain resource in a certain language. These message blobs are cached
* in the msg_resource table and automatically invalidated when one of their
- * consistuent messages or the resource itself is changed.
+ * constituent messages or the resource itself is changed.
*/
class MessageBlobStore {
* Get the message blobs for a set of modules
*
* @param $resourceLoader ResourceLoader object
- * @param $modules array Array of module objects keyed by module name
- * @param $lang string Language code
+ * @param array $modules Array of module objects keyed by module name
+ * @param string $lang Language code
* @return array An array mapping module names to message blobs
*/
public static function get( ResourceLoader $resourceLoader, $modules, $lang ) {
* present, it is not regenerated; instead, the preexisting blob
* is fetched and returned.
*
- * @param $name String: module name
+ * @param string $name module name
* @param $module ResourceLoaderModule object
- * @param $lang String: language code
+ * @param string $lang language code
* @return mixed Message blob or false if the module has no messages
*/
public static function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) {
/**
* Update the message blob for a given module in a given language
*
- * @param $name String: module name
+ * @param string $name module name
* @param $module ResourceLoaderModule object
- * @param $lang String: language code
+ * @param string $lang language code
* @return String Regenerated message blob, or null if there was no blob for the given module/language pair
*/
public static function updateModule( $name, ResourceLoaderModule $module, $lang ) {
/**
* Update a single message in all message blobs it occurs in.
*
- * @param $key String: message key
+ * @param string $key message key
*/
public static function updateMessage( $key ) {
try {
/**
* Create an update queue for updateMessage()
*
- * @param $key String: message key
- * @param $prevUpdates Array: updates queue to refresh or null to build a fresh update queue
+ * @param string $key message key
+ * @param array $prevUpdates updates queue to refresh or null to build a fresh update queue
* @return Array: updates queue
*/
private static function getUpdatesForMessage( $key, $prevUpdates = null ) {
/**
* Reencode a message blob with the updated value for a message
*
- * @param $blob String: message blob (JSON object)
- * @param $key String: message key
- * @param $lang String: language code
+ * @param string $blob message blob (JSON object)
+ * @param string $key message key
+ * @param string $lang language code
* @return Message blob with $key replaced with its new value
*/
private static function reencodeBlob( $blob, $key, $lang ) {
* Modules whose blobs are not in the database are silently dropped.
*
* @param $resourceLoader ResourceLoader object
- * @param $modules Array of module names
- * @param $lang String: language code
+ * @param array $modules of module names
+ * @param string $lang language code
* @throws MWException
* @return array Array mapping module names to blobs
*/
* Generate the message blob for a given module in a given language.
*
* @param $module ResourceLoaderModule object
- * @param $lang String: language code
+ * @param string $lang language code
* @return String: JSON object
*/
private static function generateMessageBlob( ResourceLoaderModule $module, $lang ) {
*/
var $mMimeTypeAliases = null;
- /** map of mime types to file extensions (as a space seprarated list)
+ /** map of mime types to file extensions (as a space separated list)
*/
var $mMimeToExt = null;
- /** map of file extensions types to mime types (as a space seprarated list)
+ /** map of file extensions types to mime types (as a space separated list)
*/
var $mExtToMime = null;
* @return MimeMagic
*/
public static function &singleton() {
- if ( !isset( self::$instance ) ) {
+ if ( self::$instance === null ) {
self::$instance = new MimeMagic;
}
return self::$instance;
* If $mime is "application/x-opc+zip" and isMatchingExtension( $ext, $mime )
* gives true, return the result of guessTypesForExtension($ext).
*
- * @param $mime String: the mime type, typically guessed from a file's content.
- * @param $ext String: the file extension, as taken from the file name
+ * @param string $mime the mime type, typically guessed from a file's content.
+ * @param string $ext the file extension, as taken from the file name
*
* @return string the mime type
*/
/**
* Mime type detection. This uses detectMimeType to detect the mime type
* of the file, but applies additional checks to determine some well known
- * file formats that may be missed or misinterpreter by the default mime
+ * file formats that may be missed or misinterpreted by the default mime
* detection (namely XML based formats like XHTML or SVG, as well as ZIP
* based formats like OPC/ODF files).
*
- * @param $file String: the file to check
+ * @param string $file the file to check
* @param $ext Mixed: the file extension, or true (default) to extract it from the filename.
* Set it to false to ignore the extension. DEPRECATED! Set to false, use
* improveTypeFromExtension($mime, $ext) later to improve mime type.
* header data. Currently works for OpenDocument and OpenXML types...
* If can't tell, returns 'application/zip'.
*
- * @param $header String: some reasonably-sized chunk of file header
+ * @param string $header some reasonably-sized chunk of file header
* @param $tail String: the tail of the file
* @param $ext Mixed: the file extension, or true to extract it from the filename.
* Set it to false (default) to ignore the extension. DEPRECATED! Set to false,
* Internal mime type detection. Detection is done using an external
* program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo
* extension and mime_content_type are tried (in this order), if they
- * are available. If the dections fails and $ext is not false, the mime
+ * are available. If the detections fails and $ext is not false, the mime
* type is guessed from the file extension, using guessTypesForExtension.
*
* If the mime type is still unknown, getimagesize is used to detect the
* mime type if the file is an image. If no mime type can be determined,
* this function returns 'unknown/unknown'.
*
- * @param $file String: the file to check
+ * @param string $file the file to check
* @param $ext Mixed: the file extension, or true (default) to extract it from the filename.
* Set it to false to ignore the extension. DEPRECATED! Set to false, use
* improveTypeFromExtension($mime, $ext) later to improve mime type.
# NOTE: this function is available since PHP 4.3.0, but only if
# PHP was compiled with --with-mime-magic or, before 4.3.2, with --enable-mime-magic.
#
- # On Windows, you must set mime_magic.magicfile in php.ini to point to the mime.magic file bundeled with PHP;
+ # On Windows, you must set mime_magic.magicfile in php.ini to point to the mime.magic file bundled with PHP;
# sometimes, this may even be needed under linus/unix.
#
# Also note that this has been DEPRECATED in favor of the fileinfo extension by PECL, see above.
* @todo analyse file if need be
* @todo look at multiple extension, separately and together.
*
- * @param $path String: full path to the image file, in case we have to look at the contents
+ * @param string $path full path to the image file, in case we have to look at the contents
* (if null, only the mime type is used to determine the media type code).
- * @param $mime String: mime type. If null it will be guessed using guessMimeType.
+ * @param string $mime mime type. If null it will be guessed using guessMimeType.
*
* @return (int?string?) a value to be used with the MEDIATYPE_xxx constants.
*/
* File extensions are represented by a string starting with a dot (.) to
* distinguish them from mime types.
*
- * This funktion relies on the mapping defined by $this->mMediaTypes
+ * This function relies on the mapping defined by $this->mMediaTypes
* @access private
* @return int|string
*/
* Get the MIME types that various versions of Internet Explorer would
* detect from a chunk of the content.
*
- * @param $fileName String: the file name (unused at present)
- * @param $chunk String: the first 256 bytes of the file
- * @param $proposed String: the MIME type proposed by the server
+ * @param string $fileName the file name (unused at present)
+ * @param string $chunk the first 256 bytes of the file
+ * @param string $proposed the MIME type proposed by the server
* @return Array
*/
public function getIEMimeTypes( $fileName, $chunk, $proposed ) {
/**
* Can pages in the given namespace be moved?
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return bool
*/
public static function isMovable( $index ) {
/**
* Is the given namespace is a subject (non-talk) namespace?
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return bool
* @since 1.19
*/
/**
* Is the given namespace a talk namespace?
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return bool
*/
public static function isTalk( $index ) {
/**
* Get the talk namespace index for a given namespace
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return int
*/
public static function getTalk( $index ) {
* Get the subject namespace index for a given namespace
* Special namespaces (NS_MEDIA, NS_SPECIAL) are always the subject.
*
- * @param $index Int: Namespace index
+ * @param int $index Namespace index
* @return int
*/
public static function getSubject( $index ) {
* For talk namespaces, returns the subject (non-talk) namespace
* For subject (non-talk) namespaces, returns the talk namespace
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return int or null if no associated namespace could be found
*/
public static function getAssociated( $index ) {
* of this function rather than directly doing comparison will make
* sure that code will not potentially break.
*
- * @param $ns1 int The first namespace index
- * @param $ns2 int The second namespae index
+ * @param int $ns1 The first namespace index
+ * @param int $ns2 The second namespace index
*
* @return bool
* @since 1.19
* eg: NS_USER and NS_USER wil return true, as well
* NS_USER and NS_USER_TALK will return true.
*
- * @param $ns1 int The first namespace index
- * @param $ns2 int The second namespae index
+ * @param int $ns1 The first namespace index
+ * @param int $ns2 The second namespace index
*
* @return bool
* @since 1.19
/**
* Returns the canonical (English) name for a given index
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return string or false if no canonical definition.
*/
public static function getCanonicalName( $index ) {
* Returns the index for a given canonical name, or NULL
* The input *must* be converted to lower case first
*
- * @param $name String: namespace name
+ * @param string $name namespace name
* @return int
*/
public static function getCanonicalIndex( $name ) {
/**
* Can this namespace ever have a talk namespace?
*
- * @param $index Int: namespace index
+ * @param int $index namespace index
* @return bool
*/
public static function canTalk( $index ) {
* Does this namespace contain content, for the purposes of calculating
* statistics, etc?
*
- * @param $index Int: index to check
+ * @param int $index index to check
* @return bool
*/
public static function isContent( $index ) {
/**
* Does the namespace allow subpages?
*
- * @param $index int Index to check
+ * @param int $index Index to check
* @return bool
*/
public static function hasSubpages( $index ) {
/**
* Is the namespace first-letter capitalized?
*
- * @param $index int Index to check
+ * @param int $index Index to check
* @return bool
*/
public static function isCapitalized( $index ) {
* genders. Not all languages make a distinction here.
*
* @since 1.18
- * @param $index int Index to check
+ * @param int $index Index to check
* @return bool
*/
public static function hasGenderDistinction( $index ) {
* It is not possible to use pages from this namespace as template?
*
* @since 1.20
- * @param $index int Index to check
+ * @param int $index Index to check
* @return bool
*/
public static function isNonincludable( $index ) {
* This does not mean that all pages in that namespace have the model
*
* @since 1.21
- * @param $index int Index to check
+ * @param int $index Index to check
* @return null|string default model name for the given namespace, if set
*/
public static function getNamespaceContentModel( $index ) {
*/
function wfGzipHandler( $s ) {
if( !function_exists( 'gzencode' ) ) {
- wfDebug( __FUNCTION__ . "() skipping compression (gzencode unavaible)\n" );
+ wfDebug( __FUNCTION__ . "() skipping compression (gzencode unavailable)\n" );
return $s;
}
if( headers_sent() ) {
var $mScripts = '';
/**
- * Inline CSS styles. Use addInlineStyle() sparsingly
+ * Inline CSS styles. Use addInlineStyle() sparingly
*/
var $mInlineStyles = '';
/**
* Redirect to $url rather than displaying the normal page
*
- * @param $url String: URL
- * @param $responsecode String: HTTP status code
+ * @param string $url URL
+ * @param string $responsecode HTTP status code
*/
public function redirect( $url, $responsecode = '302' ) {
# Strip newlines as a paranoia check for header injection in PHP<5.1.2
* Add a new "<meta>" tag
* To add an http-equiv meta tag, precede the name with "http:"
*
- * @param $name String tag name
- * @param $val String tag value
+ * @param string $name tag name
+ * @param string $val tag value
*/
function addMeta( $name, $val ) {
array_push( $this->mMetatags, array( $name, $val ) );
/**
* Add a keyword or a list of keywords in the page header
*
- * @param $text String or array of strings
+ * @param string $text or array of strings
*/
function addKeyword( $text ) {
if( is_array( $text ) ) {
*
* Note: use setCanonicalUrl() for rel=canonical.
*
- * @param $linkarr Array: associative array of attributes.
+ * @param array $linkarr associative array of attributes.
*/
function addLink( $linkarr ) {
array_push( $this->mLinktags, $linkarr );
/**
* Add a new \<link\> with "rel" attribute set to "meta"
*
- * @param $linkarr Array: associative array mapping attribute names to their
+ * @param array $linkarr associative array mapping attribute names to their
* values, both keys and values will be escaped, and the
* "rel" attribute will be automatically added
*/
/**
* Add raw HTML to the list of scripts (including \<script\> tag, etc.)
*
- * @param $script String: raw HTML
+ * @param string $script raw HTML
*/
function addScript( $script ) {
$this->mScripts .= $script . "\n";
/**
* Register and add a stylesheet from an extension directory.
*
- * @param $url String path to sheet. Provide either a full url (beginning
+ * @param string $url path to sheet. Provide either a full url (beginning
* with 'http', etc) or a relative path from the document root
* (beginning with '/'). Otherwise it behaves identically to
* addStyle() and draws from the /skins folder.
/**
* Add a JavaScript file out of skins/common, or a given relative path.
*
- * @param $file String: filename in skins/common or complete on-server path
+ * @param string $file filename in skins/common or complete on-server path
* (/foo/bar.js)
- * @param $version String: style version of the file. Defaults to $wgStyleVersion
+ * @param string $version style version of the file. Defaults to $wgStyleVersion
*/
public function addScriptFile( $file, $version = null ) {
global $wgStylePath, $wgStyleVersion;
/**
* Add a self-contained script tag with the given contents
*
- * @param $script String: JavaScript text, no "<script>" tags
+ * @param string $script JavaScript text, no "<script>" tags
*/
public function addInlineScript( $script ) {
$this->mScripts .= Html::inlineScript( "\n$script\n" ) . "\n";
* Filter an array of modules to remove insufficiently trustworthy members, and modules
* which are no longer registered (eg a page is cached before an extension is disabled)
* @param $modules Array
- * @param $position String if not null, only return modules with this position
+ * @param string $position if not null, only return modules with this position
* @param $type string
* @return Array
*/
/**
* Get the list of modules to include on this page
*
- * @param $filter Bool whether to filter out insufficiently trustworthy modules
- * @param $position String if not null, only return modules with this position
+ * @param bool $filter whether to filter out insufficiently trustworthy modules
+ * @param string $position if not null, only return modules with this position
* @param $param string
* @return Array of module names
*/
/**
* Add or replace an header item to the output
*
- * @param $name String: item name
- * @param $value String: raw HTML
+ * @param string $name item name
+ * @param string $value raw HTML
*/
public function addHeadItem( $name, $value ) {
$this->mHeadItems[$name] = $value;
/**
* Check if the header item $name is already set
*
- * @param $name String: item name
+ * @param string $name item name
* @return Boolean
*/
public function hasHeadItem( $name ) {
/**
* Set the value of the ETag HTTP header, only used if $wgUseETag is true
*
- * @param $tag String: value of "ETag" header
+ * @param string $tag value of "ETag" header
*/
function setETag( $tag ) {
$this->mETag = $tag;
/**
* Override the last modified timestamp
*
- * @param $timestamp String: new timestamp, in a format readable by
+ * @param string $timestamp new timestamp, in a format readable by
* wfTimestamp()
*/
public function setLastModified( $timestamp ) {
/**
* Set the robot policy for the page: <http://www.robotstxt.org/meta.html>
*
- * @param $policy String: the literal string to output as the contents of
+ * @param string $policy the literal string to output as the contents of
* the meta tag. Will be parsed according to the spec and output in
* standardized form.
* @return null
* Set the index policy for the page, but leave the follow policy un-
* touched.
*
- * @param $policy string Either 'index' or 'noindex'.
+ * @param string $policy Either 'index' or 'noindex'.
* @return null
*/
public function setIndexPolicy( $policy ) {
* Set the follow policy for the page, but leave the index policy un-
* touched.
*
- * @param $policy String: either 'follow' or 'nofollow'.
+ * @param string $policy either 'follow' or 'nofollow'.
* @return null
*/
public function setFollowPolicy( $policy ) {
* Set the new value of the "action text", this will be added to the
* "HTML title", separated from it with " - ".
*
- * @param $text String: new value of the "action text"
+ * @param string $text new value of the "action text"
*/
public function setPageTitleActionText( $text ) {
$this->mPageTitleActionText = $text;
}
/**
- * Replace the subtile with $str
+ * Replace the subtitle with $str
*
- * @param $str String|Message: new value of the subtitle. String should be safe HTML.
+ * @param string|Message $str new value of the subtitle. String should be safe HTML.
*/
public function setSubtitle( $str ) {
$this->clearSubtitle();
* Add $str to the subtitle
*
* @deprecated in 1.19; use addSubtitle() instead
- * @param $str String|Message to add to the subtitle
+ * @param string|Message $str to add to the subtitle
*/
public function appendSubtitle( $str ) {
$this->addSubtitle( $str );
/**
* Add $str to the subtitle
*
- * @param $str String|Message to add to the subtitle. String should be safe HTML.
+ * @param string|Message $str to add to the subtitle. String should be safe HTML.
*/
public function addSubtitle( $str ) {
if ( $str instanceof Message ) {
* for the new version
* @see addFeedLink()
*
- * @param $val String: query to append to feed links or false to output
+ * @param string $val query to append to feed links or false to output
* default links
*/
public function setFeedAppendQuery( $val ) {
/**
* Add a feed link to the page header
*
- * @param $format String: feed type, should be a key of $wgFeedClasses
- * @param $href String: URL
+ * @param string $format feed type, should be a key of $wgFeedClasses
+ * @param string $href URL
*/
public function addFeedLink( $format, $href ) {
global $wgAdvertisedFeedTypes;
/**
* Add new language links
*
- * @param $newLinkArray array Associative array mapping language code to the page
+ * @param array $newLinkArray Associative array mapping language code to the page
* name
*/
public function addLanguageLinks( $newLinkArray ) {
/**
* Reset the language links and add new language links
*
- * @param $newLinkArray array Associative array mapping language code to the page
+ * @param array $newLinkArray Associative array mapping language code to the page
* name
*/
public function setLanguageLinks( $newLinkArray ) {
/**
* Add an array of categories, with names in the keys
*
- * @param $categories Array mapping category name => sort key
+ * @param array $categories mapping category name => sort key
*/
public function addCategoryLinks( $categories ) {
global $wgContLang;
/**
* Reset the category links (but not the category list) and add $categories
*
- * @param $categories Array mapping category name => sort key
+ * @param array $categories mapping category name => sort key
*/
public function setCategoryLinks( $categories ) {
$this->mCategoryLinks = array();
/**
* Show what level of JavaScript / CSS untrustworthiness is allowed on this page
* @see ResourceLoaderModule::$origin
- * @param $type String ResourceLoaderModule TYPE_ constant
+ * @param string $type ResourceLoaderModule TYPE_ constant
* @return Int ResourceLoaderModule ORIGIN_ class constant
*/
public function getAllowedModules( $type ) {
}
/**
- * As for setAllowedModules(), but don't inadvertantly make the page more accessible
+ * As for setAllowedModules(), but don't inadvertently make the page more accessible
* @param $type String
* @param $level Int ResourceLoaderModule class constant
*/
/**
* Prepend $text to the body HTML
*
- * @param $text String: HTML
+ * @param string $text HTML
*/
public function prependHTML( $text ) {
$this->mBodytext = $text . $this->mBodytext;
/**
* Append $text to the body HTML
*
- * @param $text String: HTML
+ * @param string $text HTML
*/
public function addHTML( $text ) {
$this->mBodytext .= $text;
* @param $interface Boolean: is this text in the user interface language?
*/
public function addWikiText( $text, $linestart = true, $interface = true ) {
- $title = $this->getTitle(); // Work arround E_STRICT
+ $title = $this->getTitle(); // Work around E_STRICT
if ( !$title ) {
throw new MWException( 'Title is null' );
}
/**
* Add wikitext with a custom Title object
*
- * @param $text String: wikitext
+ * @param string $text wikitext
* @param $title Title object
* @param $linestart Boolean: is this the start of a line?
*/
/**
* Add wikitext with a custom Title object and tidy enabled.
*
- * @param $text String: wikitext
+ * @param string $text wikitext
* @param $title Title object
* @param $linestart Boolean: is this the start of a line?
*/
/**
* Add wikitext with tidy enabled
*
- * @param $text String: wikitext
+ * @param string $text wikitext
* @param $linestart Boolean: is this the start of a line?
*/
public function addWikiTextTidy( $text, $linestart = true ) {
/**
* Add wikitext with a custom Title object
*
- * @param $text String: wikitext
+ * @param string $text wikitext
* @param $title Title object
* @param $linestart Boolean: is this the start of a line?
* @param $tidy Boolean: whether to use tidy
/**
* Add an HTTP header that will influence on the cache
*
- * @param $header String: header name
+ * @param string $header header name
* @param $option Array|null
* @todo FIXME: Document the $option parameter; it appears to be for
* X-Vary-Options but what format is acceptable?
}
/**
- * Get the message associed with the HTTP response code $code
+ * Get the message associated with the HTTP response code $code
*
* @param $code Integer: status code
* @return String or null: message or null if $code is not in the list of
/**
* Actually output something with print().
*
- * @param $ins String: the string to output
+ * @param string $ins the string to output
*/
public function out( $ins ) {
print $ins;
* indexing, clear the current text and redirect, set the page's title
* and optionally an custom HTML title (content of the "<title>" tag).
*
- * @param $pageTitle String|Message will be passed directly to setPageTitle()
- * @param $htmlTitle String|Message will be passed directly to setHTMLTitle();
+ * @param string|Message $pageTitle will be passed directly to setPageTitle()
+ * @param string|Message $htmlTitle will be passed directly to setHTMLTitle();
* optional, if not passed the "<title>" attribute will be
* based on $pageTitle
*/
*
* @param $title Mixed: message key (string) for page title, or a Message object
* @param $msg Mixed: message key (string) for page text, or a Message object
- * @param $params Array: message parameters; ignored if $msg is a Message object
+ * @param array $params message parameters; ignored if $msg is a Message object
*/
public function showErrorPage( $title, $msg, $params = array() ) {
if( !$title instanceof Message ) {
/**
* Output a standard permission error page
*
- * @param $errors Array: error message keys
- * @param $action String: action that was denied or null if unknown
+ * @param array $errors error message keys
+ * @param string $action action that was denied or null if unknown
*/
public function showPermissionsErrorPage( $errors, $action = null ) {
// For some action (read, edit, create and upload), display a "login to do this action"
/**
* Display an error page noting that a given permission bit is required.
* @deprecated since 1.18, just throw the exception directly
- * @param $permission String: key required
+ * @param string $permission key required
* @throws PermissionsError
*/
public function permissionRequired( $permission ) {
/**
* Format a list of error messages
*
- * @param $errors Array of arrays returned by Title::getUserPermissionsErrors
- * @param $action String: action that was denied or null if unknown
+ * @param array $errors of arrays returned by Title::getUserPermissionsErrors
+ * @param string $action action that was denied or null if unknown
* @return String: the wikitext error-messages, formatted into a list.
*/
public function formatPermissionsErrorMessage( $errors, $action = null ) {
}
/**
- * Turn off regular page output and return an error reponse
+ * Turn off regular page output and return an error response
* for when rate limiting has triggered.
*/
public function rateLimited() {
* Add a "return to" link pointing to a specified title
*
* @param $title Title to link
- * @param $query Array query string parameters
- * @param $text String text of the link (input is not escaped)
+ * @param array $query query string parameters
+ * @param string $text text of the link (input is not escaped)
* @param $options Options array to pass to Linker
*/
public function addReturnTo( $title, $query = array(), $text = null, $options = array() ) {
*
* @param $unused
* @param $returnto Title or String to return to
- * @param $returntoquery String: query string for the return to link
+ * @param string $returntoquery query string for the return to link
*/
public function returnToMain( $unused = null, $returnto = null, $returntoquery = null ) {
if ( $returnto == null ) {
/**
* TODO: Document
* @param $modules Array/string with the module name(s)
- * @param $only String ResourceLoaderModule TYPE_ class constant
+ * @param string $only ResourceLoaderModule TYPE_ class constant
* @param $useESI boolean
- * @param $extraQuery Array with extra query parameters to add to each request. array( param => value )
+ * @param array $extraQuery with extra query parameters to add to each request. array( param => value )
* @param $loadCall boolean If true, output an (asynchronous) mw.loader.load() call rather than a "<script src='...'>" tag
* @return string html "<script>" and "<style>" tags
*/
}
// Special handling for the user group; because users might change their stuff
// on-wiki like user pages, or user preferences; we need to find the highest
- // timestamp of these user-changable modules so we can ensure cache misses on change
+ // timestamp of these user-changeable modules so we can ensure cache misses on change
// This should NOT be done for the site group (bug 27564) because anons get that too
// and we shouldn't be putting timestamps in Squid-cached HTML
$version = null;
'wgCanonicalNamespace' => $nsname,
'wgCanonicalSpecialPageName' => $canonicalName,
'wgNamespaceNumber' => $title->getNamespace(),
- 'wgPageName' => $title->getPrefixedDBKey(),
+ 'wgPageName' => $title->getPrefixedDBkey(),
'wgTitle' => $title->getText(),
'wgCurRevisionId' => $latestRevID,
'wgArticleId' => $pageID,
'wgDefaultDateFormat' => $lang->getDefaultDateFormat(),
'wgMonthNames' => $lang->getMonthNamesArray(),
'wgMonthNamesShort' => $lang->getMonthAbbreviationsArray(),
- 'wgRelevantPageName' => $relevantTitle->getPrefixedDBKey(),
+ 'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
);
if ( $user->isLoggedIn() ) {
$vars['wgUserId'] = $user->getId();
$vars['wgIsMainPage'] = true;
}
if ( $this->mRedirectedFrom ) {
- $vars['wgRedirectedFrom'] = $this->mRedirectedFrom->getPrefixedDBKey();
+ $vars['wgRedirectedFrom'] = $this->mRedirectedFrom->getPrefixedDBkey();
}
// Allow extensions to add their custom variables to the mw.config map.
}
/**
- * @param $addContentType bool: Whether "<meta>" specifying content type should be returned
+ * @param bool $addContentType Whether "<meta>" specifying content type should be returned
*
* @return array in format "link name or number => 'link html'".
*/
/**
* @param $unused
- * @param $addContentType bool: Whether "<meta>" specifying content type should be returned
+ * @param bool $addContentType Whether "<meta>" specifying content type should be returned
*
* @return string HTML tag links to be put in the header.
*/
/**
* Generate a "<link rel/>" for a feed.
*
- * @param $type String: feed type
- * @param $url String: URL to the feed
- * @param $text String: value of the "title" attribute
+ * @param string $type feed type
+ * @param string $url URL to the feed
+ * @param string $text value of the "title" attribute
* @return String: HTML fragment
*/
private function feedLink( $type, $url, $text ) {
* Add a local or specified stylesheet, with the given media options.
* Meant primarily for internal use...
*
- * @param $style String: URL to the file
- * @param $media String: to specify a media type, 'screen', 'printable', 'handheld' or any.
- * @param $condition String: for IE conditional comments, specifying an IE version
- * @param $dir String: set to 'rtl' or 'ltr' for direction-specific sheets
+ * @param string $style URL to the file
+ * @param string $media to specify a media type, 'screen', 'printable', 'handheld' or any.
+ * @param string $condition for IE conditional comments, specifying an IE version
+ * @param string $dir set to 'rtl' or 'ltr' for direction-specific sheets
*/
public function addStyle( $style, $media = '', $condition = '', $dir = '' ) {
$options = array();
/**
* Adds inline CSS styles
* @param $style_css Mixed: inline CSS
- * @param $flip String: Set to 'flip' to flip the CSS if needed
+ * @param string $flip Set to 'flip' to flip the CSS if needed
*/
public function addInlineStyle( $style_css, $flip = 'noflip' ) {
if( $flip === 'flip' && $this->getLanguage()->isRTL() ) {
* @return string
*/
public function buildCssLinks() {
- global $wgUseSiteCss, $wgAllowUserCss, $wgAllowUserCssPrefs,
- $wgLang, $wgContLang;
+ global $wgUseSiteCss, $wgAllowUserCss, $wgAllowUserCssPrefs, $wgContLang;
$this->getSkin()->setupSkinUserCss( $this );
// If needed, Janus it first. This is user-supplied CSS, so it's
// assumed to be right for the content language directionality.
$previewedCSS = $this->getRequest()->getText( 'wpTextbox1' );
- if ( $wgLang->getDir() !== $wgContLang->getDir() ) {
+ if ( $this->getLanguage()->getDir() !== $wgContLang->getDir() ) {
$previewedCSS = CSSJanus::transform( $previewedCSS, true, false );
}
$otherTags .= Html::inlineStyle( $previewedCSS );
/**
* Generate \<link\> tags for stylesheets
*
- * @param $style String: URL to the file
- * @param $options Array: option, can contain 'condition', 'dir', 'media'
+ * @param string $style URL to the file
+ * @param array $options option, can contain 'condition', 'dir', 'media'
* keys
* @return String: HTML fragment
*/
/**
* Transform "media" attribute based on request parameters
*
- * @param $media String: current value of the "media" attribute
+ * @param string $media current value of the "media" attribute
* @return String: modified value of the "media" attribute, or null to skip
* this stylesheet
*/
// Example supported values for $media: 'screen', 'only screen', 'screen and (min-width: 982px)' ),
// Example NOT supported value for $media: '3d-glasses, screen, print and resolution > 90dpi'
//
- // If it's a print request, we never want any kind of screen styesheets
+ // If it's a print request, we never want any kind of screen stylesheets
// If it's a handheld request (currently the only other choice with a switch),
// we don't want simple 'screen' but we might want screen queries that
// have a max-width or something, so we'll pass all others on and let the
* Include jQuery core. Use this to avoid loading it multiple times
* before we get a usable script loader.
*
- * @param $modules Array: list of jQuery modules which should be loaded
+ * @param array $modules list of jQuery modules which should be loaded
* @return Array: the list of modules which were not loaded.
* @since 1.16
* @deprecated since 1.17
/**
* Display something vaguely comprehensible in the event of a totally unrecoverable error.
- * Does not assume access to *anything*; no globals, no autloader, no database, no localisation.
+ * Does not assume access to *anything*; no globals, no autoloader, no database, no localisation.
* Safe for PHP4 (and putting this here means that WebStart.php and GlobalSettings.php
* no longer need to be).
*
* Calling this function kills execution immediately.
*
- * @param $type String Which entry point we are protecting. One of:
+ * @param string $type Which entry point we are protecting. One of:
* - index.php
* - load.php
* - api.php
*/
function wfPHPVersionError( $type ) {
$mwVersion = '1.21';
- $phpVersion = PHP_VERSION;
- $message = "MediaWiki $mwVersion requires at least PHP version 5.3.2, you are using PHP $phpVersion.";
- if( $type == 'index.php' ) {
+ $minimumVersionPHP = '5.3.2';
+
+ $phpVersion = phpversion();
+ $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
+ $message = "MediaWiki $mwVersion requires at least PHP version $minimumVersionPHP, you are using PHP $phpVersion.";
+ if ( $type == 'cli' ) {
+ $finalOutput = "You are using PHP version $phpVersion but MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher. ABORTING.\n" .
+ "Check if you have a newer php executable with a different name, such as php5.\n";
+ } elseif ( $type == 'index.php' ) {
+ $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
$encLogo = htmlspecialchars(
- str_replace( '//', '/', pathinfo( $_SERVER['SCRIPT_NAME'], PATHINFO_DIRNAME ) . '/'
- ) . 'skins/common/images/mediawiki.png'
+ str_replace( '//', '/', $pathinfo['dirname'] . '/' ) .
+ 'skins/common/images/mediawiki.png'
);
- header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 );
+ header( "$protocol 500 MediaWiki configuration Error" );
header( 'Content-type: text/html; charset=UTF-8' );
// Don't cache error pages! They cause no end of trouble...
header( 'Cache-control: none' );
- header( 'Pragma: nocache' );
+ header( 'Pragma: no-cache' );
$finalOutput = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
} else {
// So nothing thinks this is JS or CSS
$finalOutput = ( $type == 'load.php' ) ? "/* $message */" : $message;
- if( $type != 'cli' ) {
- header( $_SERVER['SERVER_PROTOCOL'] . ' 500 MediaWiki configuration Error', true, 500 );
- }
+ header( "$protocol 500 MediaWiki configuration Error" );
}
echo( "$finalOutput\n" );
die( 1 );
* Extract some useful data from the result object for use by
* the navigation bar, put it into $this
*
- * @param $offset String: index offset, inclusive
+ * @param string $offset index offset, inclusive
* @param $limit Integer: exact query limit
* @param $res ResultWrapper
*/
* Do a query with specified parameters, rather than using the object
* context
*
- * @param $offset String: index offset, inclusive
+ * @param string $offset index offset, inclusive
* @param $limit Integer: exact query limit
* @param $descending Boolean: query direction, false for ascending, true for descending
* @return ResultWrapper
/**
* Build variables to use by the database wrapper.
*
- * @param $offset String: index offset, inclusive
+ * @param string $offset index offset, inclusive
* @param $limit Integer: exact query limit
* @param $descending Boolean: query direction, false for ascending, true for descending
* @return array
/**
* Make a self-link
*
- * @param $text String: text displayed on the link
- * @param $query Array: associative array of paramter to be in the query string
- * @param $type String: value of the "rel" attribute
+ * @param string $text text displayed on the link
+ * @param array $query associative array of parameter to be in the query string
+ * @param string $type value of the "rel" attribute
*
* @return String: HTML fragment
*/
protected function getExtraSortFields() { return array(); }
/**
- * Return the default sorting direction: false for ascending, true for de-
- * scending. You can also have an associative array of ordertype => dir,
+ * Return the default sorting direction: false for ascending, true for
+ * descending. You can also have an associative array of ordertype => dir,
* if multiple order types are supported. In this case getIndexField()
* must return an array, and the keys of that must exactly match the keys
* of this.
/**
* If this supports multiple order type messages, give the message key for
- * enabling each one in getNavigationBar. The return type is an associa-
- * tive array whose keys must exactly match the keys of the array returned
+ * enabling each one in getNavigationBar. The return type is an associative
+ * array whose keys must exactly match the keys of the array returned
* by getIndexField(), and whose values are message keys.
*
* @return Array
*
* @protected
*
- * @param $field String The column
- * @param $value String The cell contents
+ * @param string $field The column
+ * @param string $value The cell contents
* @return Array of attr => value
*/
function getCellAttrs( $field, $value ) {
* Resubmits all defined elements of the query string, except for a
* blacklist, passed in the $blacklist parameter.
*
- * @param $blacklist Array parameters from the request query which should not be resubmitted
+ * @param array $blacklist parameters from the request query which should not be resubmitted
* @return String: HTML fragment
*/
function getHiddenFields( $blacklist = array() ) {
*
* @protected
*
- * @param $name String: the database field name
- * @param $value String: the value retrieved from the database
+ * @param string $name the database field name
+ * @param string $value the value retrieved from the database
*/
abstract function formatValue( $name, $value );
/**
* Add a new path pattern to the path router
*
- * @param $path string|array The path pattern to add
- * @param $params array The params for this path pattern
- * @param $options array The options for this path pattern
+ * @param string|array $path The path pattern to add
+ * @param array $params The params for this path pattern
+ * @param array $options The options for this path pattern
*/
public function add( $path, $params = array(), $options = array() ) {
if ( is_array( $path ) ) {
/**
* Parse a path and return the query matches for the path
*
- * @param $path string The path to parse
+ * @param string $path The path to parse
* @return Array The array of matches for the path
*/
public function parse( $path ) {
<?php
/**
- * Form to edit user perferences.
+ * Form to edit user preferences.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* @param $user User
* @param $context IContextSource
* @param $formClass string
- * @param $remove Array: array of items to remove
+ * @param array $remove array of items to remove
* @return HtmlForm
*/
static function getFormObject( $user, IContextSource $context, $formClass = 'PreferencesForm', array $remove = array() ) {
*
* @deprecated in 1.20; use User::setEmailWithConfirmation() instead.
* @param $user User
- * @param $newaddr string New email address
+ * @param string $newaddr New email address
* @return Array (true on success or Status on failure, info string)
*/
public static function trySetUserEmail( User $user, $newaddr ) {
*
* @param $search String
* @param $limit Integer
- * @param $namespaces Array: used if query is not explicitely prefixed
+ * @param array $namespaces used if query is not explicitly prefixed
* @return Array of strings
*/
public static function titleSearch( $search, $limit, $namespaces = array() ) {
/**
* Prefix search special-case for Special: namespace.
*
- * @param $search String: term
+ * @param string $search term
* @param $limit Integer: max number of items to return
* @return Array
*/
* be automatically capitalized by Title::secureAndSpit()
* later on depending on $wgCapitalLinks)
*
- * @param $namespaces Array: namespaces to search in
- * @param $search String: term
+ * @param array $namespaces namespaces to search in
+ * @param string $search term
* @param $limit Integer: max number of items to return
* @return Array of title strings
*/
/**
* Show the input form with optional error message
*
- * @param $err String: error message or null if there's no error
+ * @param string $err error message or null if there's no error
*/
function show( $err = null ) {
global $wgOut;
/**
* Build protection level selector
*
- * @param $action String: action to protect
- * @param $selected String: current protection level
+ * @param string $action action to protect
+ * @param string $selected current protection level
* @return String: HTML fragment
*/
function buildSelector( $action, $selected ) {
/**
* Prepare the label for a protection selector option
*
- * @param $permission String: permission required
+ * @param string $permission permission required
* @return String
*/
private function getOptionLabel( $permission ) {
}
/**
- * Checks if an IP is a trusted proxy providor.
- * Useful to tell if X-Fowarded-For data is possibly bogus.
+ * Checks if an IP is a trusted proxy provider.
+ * Useful to tell if X-Forwarded-For data is possibly bogus.
* Squid cache servers for the site are whitelisted.
*
* @param $ip String
/**
* For back-compat, subclasses may return a raw SQL query here, as a string.
- * This is stronly deprecated; getQueryInfo() should be overridden instead.
+ * This is strongly deprecated; getQueryInfo() should be overridden instead.
* @throws MWException
* @return string
*/
}
/**
- * Sometime we dont want to build rss / atom feeds.
+ * Sometime we don't want to build rss / atom feeds.
*
* @return Boolean
*/
/**
* Obtain the recent change with a given rc_id value
*
- * @param $rcid Int rc_id value to retrieve
+ * @param int $rcid rc_id value to retrieve
* @return RecentChange
*/
public static function newFromId( $rcid ) {
/**
* Find the first recent change matching some specific conditions
*
- * @param $conds Array of conditions
+ * @param array $conds of conditions
* @param $fname Mixed: override the method name in profiling/logs
* @return RecentChange
*/
/**
* Send some text to UDP.
* @see RecentChange::cleanupForIRC
- * @param $line String: text to send
- * @param $address String: defaults to $wgRC2UDPAddress.
- * @param $prefix String: defaults to $wgRC2UDPPrefix.
- * @param $port Int: defaults to $wgRC2UDPPort. (Since 1.17)
+ * @param string $line text to send
+ * @param string $address defaults to $wgRC2UDPAddress.
+ * @param string $prefix defaults to $wgRC2UDPPrefix.
+ * @param int $port defaults to $wgRC2UDPPort. (Since 1.17)
* @return Boolean: success
*/
public static function sendToUDP( $line, $address = '', $prefix = '', $port = '' ) {
}
/**
- * Remove newlines, carriage returns and decode html entites
+ * Remove newlines, carriage returns and decode html entities
* @param $text String
* @return String
*/
/**
* Get an attribute value
*
- * @param $name String Attribute name
+ * @param string $name Attribute name
* @return mixed
*/
public function getAttribute( $name ) {
}
/**
- * Return the value of a select() page conds array for the paeg table.
+ * Return the value of a select() page conds array for the page table.
* This will assure that the revision(s) are not orphaned from live pages.
* @since 1.19
* @return Array
}
/**
- * @param $field int one of DELETED_* bitfield constants
+ * @param int $field one of DELETED_* bitfield constants
*
* @return Boolean
*/
* field must be included
*
* @param $row Object: the text data
- * @param $prefix String: table prefix (default 'old_')
- * @param $wiki String|false: the name of the wiki to load the revision text from
+ * @param string $prefix table prefix (default 'old_')
+ * @param string|false $wiki the name of the wiki to load the revision text from
* (same as the the wiki $row was loaded from) or false to indicate the local
* wiki (this is the default). Otherwise, it must be a symbolic wiki database
* identifier as understood by the LoadBalancer class.
*
* @param $dbw DatabaseBase
* @param $pageId Integer: ID number of the page to read from
- * @param $summary String: revision's summary
+ * @param string $summary revision's summary
* @param $minor Boolean: whether the revision should be considered as minor
* @return Revision|null on error
*/
}
/**
- * Get the date, formatted in user's languae
+ * Get the date, formatted in user's language
* @return String
*/
public function formatDate() {
}
/**
- * Get the time, formatted in user's languae
+ * Get the time, formatted in user's language
* @return String
*/
public function formatTime() {
* @private
* @param $text String
* @param $processCallback Callback to do any variable or parameter replacements in HTML attribute values
- * @param $args Array for the processing callback
- * @param $extratags Array for any extra tags to include
- * @param $removetags Array for any tags (default or extra) to exclude
+ * @param array $args for the processing callback
+ * @param array $extratags for any extra tags to include
+ * @param array $removetags for any tags (default or extra) to exclude
* @return string
*/
static function removeHTMLtags( $text, $processCallback = null, $args = array(), $extratags = array(), $removetags = array() ) {
wfProfileIn( __METHOD__ );
// Base our staticInitialised variable off of the global config state so that if the globals
- // are changed (like in the secrewed up test system) we will re-initialise the settings.
+ // are changed (like in the screwed up test system) we will re-initialise the settings.
$globalContext = implode( '-', compact( 'wgHtml5', 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
if ( !$staticInitialised || $staticInitialised != $globalContext ) {
isset( $htmlpairs[$t] ) ) {
$badtag = true;
} elseif ( isset( $htmlsingleonly[$t] ) ) {
- # Hack to force empty tag for uncloseable elements
+ # Hack to force empty tag for unclosable elements
$brace = '/>';
} elseif ( isset( $htmlsingle[$t] ) ) {
# Hack to not close $htmlsingle tags
*
* - Discards attributes not on a whitelist for the given element
* - Unsafe style attributes are discarded
- * - Invalid id attributes are reencoded
+ * - Invalid id attributes are re-encoded
*
* @param $attribs Array
* @param $element String
*
* - Discards attributes not the given whitelist
* - Unsafe style attributes are discarded
- * - Invalid id attributes are reencoded
+ * - Invalid id attributes are re-encoded
*
* @param $attribs Array
- * @param $whitelist Array: list of allowed attribute names
+ * @param array $whitelist list of allowed attribute names
* @return Array
*
* @todo Check for legal values where the DTD limits things.
* @see http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute
* HTML5 definition of id attribute
*
- * @param $id String: id to escape
+ * @param string $id id to escape
* @param $options Mixed: string or array of strings (default is array()):
* 'noninitial': This is a non-initial fragment of an id, not a full id,
* so don't pay attention if the first character isn't valid at the
}
/**
- * Given HTML input, escape with htmlspecialchars but un-escape entites.
+ * Given HTML input, escape with htmlspecialchars but un-escape entities.
* This allows (generally harmless) entities like   to survive.
*
- * @param $html String to escape
+ * @param string $html to escape
* @return String: escaped input
*/
static function escapeHtmlAllowEntities( $html ) {
* This is useful for page titles, not for text to be displayed,
* MediaWiki allows HTML entities to escape normalization as a feature.
*
- * @param $text String (already normalized, containing entities)
+ * @param string $text (already normalized, containing entities)
* @return String (still normalized, without entities)
*/
public static function decodeCharReferencesAndNormalize( $text ) {
}
if ( $wgHtml5 && $wgAllowMicrodataAttributes ) {
- # add HTML5 microdata tages as pecified by http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#the-microdata-model
+ # add HTML5 microdata tags as specified by http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#the-microdata-model
$common = array_merge( $common, array(
'itemid', 'itemprop', 'itemref', 'itemscope', 'itemtype'
) );
* Warning: this return value must be further escaped for literal
* inclusion in HTML output as of 1.10!
*
- * @param $text String: HTML fragment
+ * @param string $text HTML fragment
* @return String
*/
static function stripAllTags( $text ) {
*
* @since 1.18
*
- * @param $addr String E-mail address
+ * @param string $addr E-mail address
* @return Bool
*/
public static function validateEmail( $addr ) {
}
$testIncludes = array(); // array containing all the includes needed for this test
- $testGlobalConfigs = array(); // an array containg all the global configs needed for this test
+ $testGlobalConfigs = array(); // an array containing all the global configs needed for this test
$testResourceFiles = array(); // an array containing all the resource files needed for this test
$callback = $wgSeleniumTestConfigs[$setupTestSuiteName];
call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
}
$testIncludes = array(); // array containing all the includes needed for this test
- $testGlobalConfigs = array(); // an array containg all the global configs needed for this test
+ $testGlobalConfigs = array(); // an array containing all the global configs needed for this test
$testResourceFiles = array(); // an array containing all the resource files needed for this test
$callback = $wgSeleniumTestConfigs[$testSuiteName];
call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
/**
* Retrieves a configuration setting for a given wiki.
- * @param $settingName String ID of the setting name to retrieve
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $params Array List of parameters. $.'key' is replaced by $value in all returned data.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param string $settingName ID of the setting name to retrieve
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $params List of parameters. $.'key' is replaced by $value in all returned data.
+ * @param array $wikiTags The tags assigned to the wiki.
* @return Mixed the value of the setting requested.
*/
public function get( $settingName, $wiki, $suffix = null, $params = array(), $wikiTags = array() ) {
/**
* Really retrieves a configuration setting for a given wiki.
*
- * @param $settingName String ID of the setting name to retrieve.
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $params Array: array of parameters.
+ * @param string $settingName ID of the setting name to retrieve.
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param array $params array of parameters.
* @return Mixed the value of the setting requested.
*/
protected function getSetting( $settingName, $wiki, /*array*/ $params ) {
/**
* Gets all settings for a wiki
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $params Array List of parameters. $.'key' is replaced by $value in all returned data.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $params List of parameters. $.'key' is replaced by $value in all returned data.
+ * @param array $wikiTags The tags assigned to the wiki.
* @return Array Array of settings requested.
*/
public function getAll( $wiki, $suffix = null, $params = array(), $wikiTags = array() ) {
/**
* Retrieves a configuration setting for a given wiki, forced to a boolean.
- * @param $setting String ID of the setting name to retrieve
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param string $setting ID of the setting name to retrieve
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $wikiTags The tags assigned to the wiki.
* @return bool The value of the setting requested.
*/
public function getBool( $setting, $wiki, $suffix = null, $wikiTags = array() ) {
/**
* Retrieves the value of a given setting, and places it in a variable passed by reference.
- * @param $setting String ID of the setting name to retrieve
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $var array Reference The variable to insert the value into.
- * @param $params Array List of parameters. $.'key' is replaced by $value in all returned data.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param string $setting ID of the setting name to retrieve
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $var Reference The variable to insert the value into.
+ * @param array $params List of parameters. $.'key' is replaced by $value in all returned data.
+ * @param array $wikiTags The tags assigned to the wiki.
*/
public function extractVar( $setting, $wiki, $suffix, &$var, $params = array(), $wikiTags = array() ) {
$value = $this->get( $setting, $wiki, $suffix, $params, $wikiTags );
/**
* Retrieves the value of a given setting, and places it in its corresponding global variable.
- * @param $setting String ID of the setting name to retrieve
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $params Array List of parameters. $.'key' is replaced by $value in all returned data.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param string $setting ID of the setting name to retrieve
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $params List of parameters. $.'key' is replaced by $value in all returned data.
+ * @param array $wikiTags The tags assigned to the wiki.
*/
public function extractGlobal( $setting, $wiki, $suffix = null, $params = array(), $wikiTags = array() ) {
$params = $this->mergeParams( $wiki, $suffix, $params, $wikiTags );
/**
* Retrieves the values of all settings, and places them in their corresponding global variables.
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $params Array List of parameters. $.'key' is replaced by $value in all returned data.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $params List of parameters. $.'key' is replaced by $value in all returned data.
+ * @param array $wikiTags The tags assigned to the wiki.
*/
public function extractAllGlobals( $wiki, $suffix = null, $params = array(), $wikiTags = array() ) {
$params = $this->mergeParams( $wiki, $suffix, $params, $wikiTags );
* by self::$siteParamsCallback for backward compatibility
* Values returned by self::getWikiParams() have the priority.
*
- * @param $wiki String Wiki ID of the wiki in question.
- * @param $suffix String The suffix of the wiki in question.
- * @param $params Array List of parameters. $.'key' is replaced by $value in
+ * @param string $wiki Wiki ID of the wiki in question.
+ * @param string $suffix The suffix of the wiki in question.
+ * @param array $params List of parameters. $.'key' is replaced by $value in
* all returned data.
- * @param $wikiTags Array The tags assigned to the wiki.
+ * @param array $wikiTags The tags assigned to the wiki.
* @return array
*/
protected function mergeParams( $wiki, $suffix, /*array*/ $params, /*array*/ $wikiTags ) {
/**
* Find the number of users in a given user group.
- * @param $group String: name of group
+ * @param string $group name of group
* @return Integer
*/
static function numberingroup( $group ) {
/**
* @param $type string
- * @param $sign string ('+' or '-')
+ * @param string $sign ('+' or '-')
* @return string
*/
private function getTypeCacheKey( $type, $sign ) {
/**
* Reduce pending delta counters after updates have been applied
- * @param Array $pd Result of getPendingDeltas(), used for DB update
+ * @param array $pd Result of getPendingDeltas(), used for DB update
* @return void
*/
protected function removePendingDeltas( array $pd ) {
* @param $database DatabaseBase|bool
* - Boolean: whether to use the master DB
* - DatabaseBase: database connection to use
- * @param $options Array of options, may contain the following values
+ * @param array $options of options, may contain the following values
* - update Boolean: whether to update the current stats (true) or write fresh (false) (default: false)
* - views Boolean: when true, do not update the number of page views (default: true)
* - activeUsers Boolean: whether to update the number of active users (default: false)
* Normalize a skin preference value to a form that can be loaded.
* If a skin can't be found, it will fall back to the configured
* default (or the old 'Classic' skin if that's broken).
- * @param $key String: 'monobook', 'standard', etc.
+ * @param string $key 'monobook', 'standard', etc.
* @return string
*/
static function normalizeKey( $key ) {
/**
* Factory method for loading a skin of a given type
- * @param $key String: 'monobook', 'standard', etc.
+ * @param string $key 'monobook', 'standard', etc.
* @return Skin
*/
static function &newFromKey( $key ) {
require_once( "{$wgStyleDirectory}/{$skinName}.php" );
}
- # Check if we got if not failback to default skin
+ # Check if we got if not fallback to default skin
if ( !MWInit::classExists( $className ) ) {
# DO NOT die if the class isn't found. This breaks maintenance
# scripts and can cause a user account to be unrecoverable
}
/**
- * Render the array as a serie of links.
- * @param $tree Array: categories tree returned by Title::getParentCategoryTree
+ * Render the array as a series of links.
+ * @param array $tree categories tree returned by Title::getParentCategoryTree
* @return String separated by >, terminate with "\n"
*/
function drawCategoryBrowser( $tree ) {
}
/**
- * Renders a $wgFooterIcons icon acording to the method's arguments
- * @param $icon Array: The icon to build the html for, see $wgFooterIcons for the format of this array
- * @param $withImage Bool|String: Whether to use the icon's image or output a text-only footericon
+ * Renders a $wgFooterIcons icon according to the method's arguments
+ * @param array $icon The icon to build the html for, see $wgFooterIcons for the format of this array
+ * @param bool|String $withImage Whether to use the icon's image or output a text-only footericon
* @return String HTML
*/
function makeFooterIcon( $icon, $withImage = 'withImage' ) {
* Return a fully resolved style path url to images or styles stored in the common folder.
* This method returns a url resolved using the configured skin style path
* and includes the style version inside of the url.
- * @param $name String: The name or path of a skin resource file
+ * @param string $name The name or path of a skin resource file
* @return String The fully resolved style path url including styleversion
*/
function getCommonStylePath( $name ) {
}
/**
- * Return a fully resolved style path url to images or styles stored in the curent skins's folder.
+ * Return a fully resolved style path url to images or styles stored in the current skins's folder.
* This method returns a url resolved using the configured skin style path
* and includes the style version inside of the url.
- * @param $name String: The name or path of a skin resource file
+ * @param string $name The name or path of a skin resource file
* @return String The fully resolved style path url including styleversion
*/
function getSkinStylePath( $name ) {
* If $proto is set to null, make a local URL. Otherwise, make a full
* URL with the protocol specified.
*
- * @param $name string Name of the Special page
- * @param $urlaction string Query to append
+ * @param string $name Name of the Special page
+ * @param string $urlaction Query to append
* @param $proto Protocol to use or null for a local URL
* @return String
*/
/**
* Make URL details where the article exists (or at least it's convenient to think so)
- * @param $name String Article name
+ * @param string $name Article name
* @param $urlaction String
* @return Array
*/
/**
* Get a cached notice
*
- * @param $name String: message name, or 'default' for $wgSiteNotice
+ * @param string $name message name, or 'default' for $wgSiteNotice
* @return String: HTML fragment
*/
private function getCachedNotice( $name ) {
*
* @param $nt Title The title being linked to (may not be the same as
* $wgTitle, if the section is included from a template)
- * @param $section string The designation of the section being pointed to,
+ * @param string $section The designation of the section being pointed to,
* to be included in the link, like "§ion=$section"
- * @param $tooltip string The tooltip to use for the link: will be escaped
+ * @param string $tooltip The tooltip to use for the link: will be escaped
* and wrapped in the 'editsectionhint' message
* @param $lang string Language code
* @return string HTML to use for edit link
* Use PHP's magic __call handler to intercept legacy calls to the linker
* for backwards compatibility.
*
- * @param $fname String Name of called method
- * @param $args Array Arguments to the method
+ * @param string $fname Name of called method
+ * @param array $args Arguments to the method
* @throws MWException
* @return mixed
*/
* roughly equivalent to PHPTAL 0.7.
*
* @param $classname String
- * @param $repository string: subdirectory where we keep template files
+ * @param string $repository subdirectory where we keep template files
* @param $cache_dir string
* @return QuickTemplate
* @private
$tpl->set( 'helppage', $this->msg( 'helppage' )->text() );
*/
$tpl->set( 'searchaction', $this->escapeSearchLink() );
- $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBKey() );
+ $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBkey() );
$tpl->set( 'search', trim( $request->getVal( 'search' ) ) );
$tpl->setRef( 'stylepath', $wgStylePath );
$tpl->setRef( 'articlepath', $wgArticlePath );
* Format language name for use in sidebar interlanguage links list.
* By default it is capitalized.
*
- * @param $name string Language name, e.g. "English" or "español"
+ * @param string $name Language name, e.g. "English" or "español"
* @return string
* @private
*/
}
/**
- * Output a boolean indiciating if buildPersonalUrls should output separate
+ * Output a boolean indicating if buildPersonalUrls should output separate
* login and create account links or output a combined link
* By default we simply return a global config setting that affects most skins
* This is setup as a method so that like with $wgLogo and getLogo() a skin
* variants: Used to list the language variants for the page
*
* Each section's value is a key/value array of links for that section.
- * The links themseves have these common keys:
+ * The links themselves have these common keys:
* - class: The css classes to apply to the tab
* - text: The text to display on the tab
* - href: The href for the tab to point to
# We don't want to give the watch tab an accesskey if the
# page is being edited, because that conflicts with the
# accesskey on the watch checkbox. We also don't want to
- # give the edit tab an accesskey, because that's fairly su-
- # perfluous and conflicts with an accesskey (Ctrl-E) often
+ # give the edit tab an accesskey, because that's fairly
+ # superfluous and conflicts with an accesskey (Ctrl-E) often
# used for editing in Safari.
if ( in_array( $action, array( 'edit', 'submit' ) ) ) {
if ( isset( $content_navigation['views']['edit'] ) ) {
$nav_urls['log'] = false;
$nav_urls['blockip'] = false;
$nav_urls['emailuser'] = false;
+ $nav_urls['userrights'] = false;
// A print stylesheet is attached to all pages, but nobody ever
// figures that out. :) Add a link...
'href' => self::makeSpecialUrlSubpage( 'Emailuser', $rootUser )
);
}
+
+ $sur = new UserrightsPage;
+ if ( $sur->userCanExecute( $this->getUser() ) ) {
+ $nav_urls['userrights'] = array(
+ 'href' => self::makeSpecialUrlSubpage( 'Userrights', $rootUser )
+ );
+ }
}
wfProfileOut( __METHOD__ );
/**
* Get a Message object with its context set
*
- * @param $name string message name
+ * @param string $name message name
* @return Message
*/
public function getMsg( $name ) {
/**
* Create an array of common toolbox items from the data in the quicktemplate
* stored by SkinTemplate.
- * The resulting array is built acording to a format intended to be passed
+ * The resulting array is built according to a format intended to be passed
* through makeListItem to generate the html.
* @return array
*/
$toolbox['feeds']['links'][$key]['class'] = 'feedlink';
}
}
- foreach ( array( 'contributions', 'log', 'blockip', 'emailuser', 'upload', 'specialpages' ) as $special ) {
+ foreach ( array( 'contributions', 'log', 'blockip', 'emailuser', 'userrights', 'upload', 'specialpages' ) as $special ) {
if ( isset( $this->data['nav_urls'][$special] ) && $this->data['nav_urls'][$special] ) {
$toolbox[$special] = $this->data['nav_urls'][$special];
$toolbox[$special]['id'] = "t-$special";
/**
* Create an array of personal tools items from the data in the quicktemplate
* stored by SkinTemplate.
- * The resulting array is built acording to a format intended to be passed
+ * The resulting array is built according to a format intended to be passed
* through makeListItem to generate the html.
* This is in reality the same list as already stored in personal_urls
* however it is reformatted so that you can just pass the individual items
* Makes a link, usually used by makeListItem to generate a link for an item
* in a list used in navigation lists, portlets, portals, sidebars, etc...
*
- * @param $key string usually a key from the list you are generating this
+ * @param string $key usually a key from the list you are generating this
* link from.
- * @param $item array contains some of a specific set of keys.
+ * @param array $item contains some of a specific set of keys.
*
* The text of the link will be generated either from the contents of the
* "text" key in the $item array, if a "msg" key is present a message by
*
* If you don't want an accesskey, set $item['tooltiponly'] = true;
*
- * @param $options array can be used to affect the output of a link.
+ * @param array $options can be used to affect the output of a link.
* Possible options are:
* - 'text-wrapper' key to specify a list of elements to wrap the text of
* a link in. This should be an array of arrays containing a 'tag' and
* preferred method is now to add a SpecialPage_initList hook.
* @deprecated since 1.18
*
- * @param $name String the page to remove
+ * @param string $name the page to remove
*/
static function removePage( $name ) {
wfDeprecated( __METHOD__, '1.18' );
/**
* Check if a given name exist as a special page or as a special page alias
*
- * @param $name String: name of a special page
+ * @param string $name name of a special page
* @return Boolean: true if a special page exists with this name
* @deprecated since 1.18 call SpecialPageFactory method directly
*/
* Get a localised Title object for a specified special page name
*
* @param $name String
- * @param $subpage String|Bool subpage string, or false to not use a subpage
- * @param $fragment String the link fragment (after the "#")
+ * @param string|Bool $subpage subpage string, or false to not use a subpage
+ * @param string $fragment the link fragment (after the "#")
* @throws MWException
* @return Title object
*/
* Get a localised Title object for a page name with a possibly unvalidated subpage
*
* @param $name String
- * @param $subpage String|Bool subpage string, or false to not use a subpage
+ * @param string|Bool $subpage subpage string, or false to not use a subpage
* @return Title object or null if the page doesn't exist
*/
public static function getSafeTitleFor( $name, $subpage = false ) {
* If you override execute(), you can recover the default behavior with userCanExecute()
* and displayRestrictionError()
*
- * @param $name String: name of the special page, as seen in links and URLs
- * @param $restriction String: user right required, e.g. "block" or "delete"
- * @param $listed Bool: whether the page is listed in Special:Specialpages
+ * @param string $name name of the special page, as seen in links and URLs
+ * @param string $restriction user right required, e.g. "block" or "delete"
+ * @param bool $listed whether the page is listed in Special:Specialpages
* @param $function Callback|Bool: function called by execute(). By default it is constructed from $name
- * @param $file String: file which is included by execute(). It is also constructed from $name by default
- * @param $includable Bool: whether the page can be included in normal pages
+ * @param string $file file which is included by execute(). It is also constructed from $name by default
+ * @param bool $includable whether the page can be included in normal pages
*/
public function __construct(
$name = '', $restriction = '', $listed = true,
/**
* Do the real work for the constructor, mainly so __call() can intercept
* calls to SpecialPage()
- * @param $name String: name of the special page, as seen in links and URLs
- * @param $restriction String: user right required, e.g. "block" or "delete"
- * @param $listed Bool: whether the page is listed in Special:Specialpages
+ * @param string $name name of the special page, as seen in links and URLs
+ * @param string $restriction user right required, e.g. "block" or "delete"
+ * @param bool $listed whether the page is listed in Special:Specialpages
* @param $function Callback|Bool: function called by execute(). By default it is constructed from $name
- * @param $file String: file which is included by execute(). It is also constructed from $name by default
- * @param $includable Bool: whether the page can be included in normal pages
+ * @param string $file file which is included by execute(). It is also constructed from $name by default
+ * @param bool $includable whether the page can be included in normal pages
*/
private function init( $name, $restriction, $listed, $function, $file, $includable ) {
$this->mName = $name;
* Use PHP's magic __call handler to get calls to the old PHP4 constructor
* because PHP E_STRICT yells at you for having __construct() and SpecialPage()
*
- * @param $fName String Name of called method
- * @param $a Array Arguments to the method
+ * @param string $fName Name of called method
+ * @param array $a Arguments to the method
* @throws MWException
* @deprecated since 1.17, call parent::__construct()
*/
/**
* Outputs a summary message on top of special pages
* Per default the message key is the canonical name of the special page
- * May be overriden, i.e. by extensions to stick with the naming conventions
+ * May be overridden, i.e. by extensions to stick with the naming conventions
* for message keys: 'extensionname-xxx'
*
- * @param $summaryMessageKey String: message key of the summary
+ * @param string $summaryMessageKey message key of the summary
*/
function outputHeader( $summaryMessageKey = '' ) {
global $wgContLang;
// RequestContext passes context to wfMessage, and the language is set from
// the context, but setting the language for Message class removes the
// interface message status, which breaks for example usernameless gender
- // invokations. Restore the flag when not including special page in content.
+ // invocations. Restore the flag when not including special page in content.
if ( $this->including() ) {
$message->setInterfaceMessageFlag( false );
}
$this->getOutput()->addFeedLink( $format, $url );
}
}
+
+ /**
+ * Get the group that the special page belongs in on Special:SpecialPage
+ * Use this method, instead of getGroupName to allow customization
+ * of the group name from the wiki side
+ *
+ * @return string Group of this special page
+ * @since 1.21
+ */
+ public function getFinalGroupName() {
+ global $wgSpecialPageGroups;
+ $name = $this->getName();
+ $group = '-';
+
+ // Allow overbidding the group from the wiki side
+ $msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
+ if ( !$msg->isBlank() ) {
+ $group = $msg->text();
+ } else {
+ // Than use the group from this object
+ $group = $this->getGroupName();
+
+ // Group '-' is used as default to have the chance to determine,
+ // if the special pages overrides this method,
+ // if not overridden, $wgSpecialPageGroups is checked for b/c
+ if ( $group === '-' && isset( $wgSpecialPageGroups[$name] ) ) {
+ $group = $wgSpecialPageGroups[$name];
+ }
+ }
+
+ // never give '-' back, change to 'other'
+ if ( $group === '-' ) {
+ $group = 'other';
+ }
+
+ return $group;
+ }
+
+ /**
+ * Under which header this special page is listed in Special:SpecialPages
+ * See messages 'specialpages-group-*' for valid names
+ * This method defaults to group 'other'
+ *
+ * @return string
+ * @since 1.21
+ */
+ protected function getGroupName() {
+ // '-' used here to determine, if this group is overridden or has a hardcoded 'other'
+ // Needed for b/c in getFinalGroupName
+ return '-';
+ }
}
/**
/**
* Basic SpecialPage workflow: get a form, send it to the user; get some data back,
*
- * @param $par String Subpage string if one was specified
+ * @param string $par Subpage string if one was specified
*/
public function execute( $par ) {
$this->setParameter( $par );
// Query parameters that can be passed through redirects
protected $mAllowedRedirectParams = array();
- // Query parameteres added by redirects
+ // Query parameters added by redirects
protected $mAddedRedirectParams = array();
public function execute( $par ) {
* If the special page is a redirect, then get the Title object it redirects to.
* False otherwise.
*
- * @param $par String Subpage string
+ * @param string $par Subpage string
* @return Title|bool
*/
abstract public function getRedirect( $par );
}
/**
* SpecialMypage, SpecialMytalk and SpecialMycontributions special pages
- * are used to get user independant links pointing to the user page, talk
+ * are used to get user independent links pointing to the user page, talk
* page and list of contributions.
* This can let us cache a single copy of any generated content for all
* users.
/**
* Initialise and return the list of special page aliases. Returns an object with
* properties which can be accessed $obj->pagename - each property is an array of
- * aliases; the first in the array is the cannonical alias. All registered special
+ * aliases; the first in the array is the canonical alias. All registered special
* pages are guaranteed to have a property entry, and for that property array to
* contain at least one entry (English fallbacks will be added if necessary).
* @return Object
*
* @param $page Mixed: SpecialPage or string
* @param $group String
+ * @deprecated 1.21 Override SpecialPage::getGroupName
*/
public static function setGroup( $page, $group ) {
+ wfDeprecated( __METHOD__, '1.21' );
+
global $wgSpecialPageGroups;
$name = is_object( $page ) ? $page->getName() : $page;
$wgSpecialPageGroups[$name] = $group;
*
* @param $page SpecialPage
* @return String
+ * @deprecated 1.21 Use SpecialPage::getFinalGroupName
*/
public static function getGroup( &$page ) {
- $name = $page->getName();
+ wfDeprecated( __METHOD__, '1.21' );
- global $wgSpecialPageGroups;
- static $specialPageGroupsCache = array();
- if ( isset( $specialPageGroupsCache[$name] ) ) {
- return $specialPageGroupsCache[$name];
- }
- $msg = wfMessage( 'specialpages-specialpagegroup-' . strtolower( $name ) );
- if ( !$msg->isBlank() ) {
- $group = $msg->text();
- } else {
- $group = isset( $wgSpecialPageGroups[$name] )
- ? $wgSpecialPageGroups[$name]
- : '-';
- }
- if ( $group == '-' ) {
- $group = 'other';
- }
- $specialPageGroupsCache[$name] = $group;
- return $group;
+ return $page->getFinalGroupName();
}
/**
* Check if a given name exist as a special page or as a special page alias
*
- * @param $name String: name of a special page
+ * @param string $name name of a special page
* @return Boolean: true if a special page exists with this name
*/
public static function exists( $name ) {
/**
* Find the object with a given name and return it (or NULL)
*
- * @param $name String Special page name, may be localised and/or an alias
+ * @param string $name Special page name, may be localised and/or an alias
* @return SpecialPage|null SpecialPage object or null if the page doesn't exist
*/
public static function getPage( $name ) {
public function __construct( $withTransaction = true ) {
global $wgAntiLockFlags;
- parent::__construct( );
+ parent::__construct();
if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
$this->mOptions = array();
/**
* Factory function for fatal errors
*
- * @param $message String|Message: message name or object
+ * @param string|Message $message message name or object
* @return Status
*/
static function newFatal( $message /*, parameters...*/ ) {
/**
* Add a new warning
*
- * @param $message String|Message: message name or object
+ * @param string|Message $message message name or object
*/
function warning( $message /*, parameters... */ ) {
$params = array_slice( func_get_args(), 1 );
* Add an error, do not set fatal flag
* This can be used for non-fatal errors
*
- * @param $message String|Message: message name or object
+ * @param string|Message $message message name or object
*/
function error( $message /*, parameters... */ ) {
$params = array_slice( func_get_args(), 1 );
* Add an error and set OK to false, indicating that the operation
* as a whole was fatal
*
- * @param $message String|Message: message name or object
+ * @param string|Message $message message name or object
*/
function fatal( $message /*, parameters... */ ) {
$params = array_slice( func_get_args(), 1 );
/**
* Get the error list as a wikitext formatted list
*
- * @param $shortContext String: a short enclosing context message name, to
+ * @param string $shortContext a short enclosing context message name, to
* be used when there is a single error
- * @param $longContext String: a long enclosing context message name, for a list
+ * @param string $longContext a long enclosing context message name, for a list
* @return String
*/
function getWikiText( $shortContext = false, $longContext = false ) {
* Note, due to the lack of tools for comparing Message objects, this
* function will not work when using a Message object as a parameter.
*
- * @param $msg String: message name
+ * @param string $msg message name
* @return Boolean
*/
function hasMessage( $msg ) {
* Headers sent include: Content-type, Content-Length, Last-Modified,
* and Content-Disposition.
*
- * @param $fname string Full name and path of the file to stream
- * @param $headers array Any additional headers to send
- * @param $sendErrors bool Send error messages if errors occur (like 404)
+ * @param string $fname Full name and path of the file to stream
+ * @param array $headers Any additional headers to send
+ * @param bool $sendErrors Send error messages if errors occur (like 404)
* @throws MWException
* @return bool Success
*/
* (b) cancels any PHP output buffering and automatic gzipping of output
* (c) sends Content-Length header based on HTTP_IF_MODIFIED_SINCE check
*
- * @param $path string Storage path or file system path
- * @param $info Array|bool File stat info with 'mtime' and 'size' fields
- * @param $headers Array Additional headers to send
- * @param $sendErrors bool Send error messages if errors occur (like 404)
+ * @param string $path Storage path or file system path
+ * @param array|bool $info File stat info with 'mtime' and 'size' fields
+ * @param array $headers Additional headers to send
+ * @param bool $sendErrors Send error messages if errors occur (like 404)
* @return int|bool READY_STREAM, NOT_MODIFIED, or false on failure
*/
public static function prepareForStream(
/**
* Determine the file type of a file based on the path
*
- * @param $filename string Storage path or file system path
- * @param $safe bool Whether to do retroactive upload blacklist checks
+ * @param string $filename Storage path or file system path
+ * @param bool $safe Whether to do retroactive upload blacklist checks
* @return null|string
*/
public static function contentTypeFromPath( $filename, $safe = true ) {
static function isUtf8( $value, $disableMbstring = false ) {
if ( preg_match( '/[\x80-\xff]/', $value ) === 0 ) {
- # no high bit set, this is pure ASCII which is defacto
+ # no high bit set, this is pure ASCII which is de facto
# valid UTF-8
return true;
}
* start, so e.g. /*\/ is not considered to be both the start and end of a
* comment. /*\/xy/*\/ is considered to be a single comment with contents /xy/.
*
- * @param $startDelim String: start delimiter
- * @param $endDelim String: end delimiter
+ * @param string $startDelim start delimiter
+ * @param string $endDelim end delimiter
* @param $callback Callback: function to call on each match
* @param $subject String
- * @param $flags String: regular expression flags
+ * @param string $flags regular expression flags
* @throws MWException
* @return string
*/
*
* preg_replace( "!$startDelim(.*)$endDelim!$flags", $replace, $subject )
*
- * @param $startDelim String: start delimiter regular expression
- * @param $endDelim String: end delimiter regular expression
- * @param $replace String: replacement string. May contain $1, which will be
+ * @param string $startDelim start delimiter regular expression
+ * @param string $endDelim end delimiter regular expression
+ * @param string $replace replacement string. May contain $1, which will be
* replaced by the text between the delimiters
- * @param $subject String to search
- * @param $flags String: regular expression flags
+ * @param string $subject to search
+ * @param string $flags regular expression flags
* @return String: The string with the matches replaced
*/
static function delimiterReplace( $startDelim, $endDelim, $replace, $subject, $flags = '' ) {
/**
* Set an element of the replacement array
* @param $from string
- * @param $to stromg
+ * @param $to string
*/
function setPair( $from, $to ) {
$this->data[$from] = $to;
/**
* Constructor.
*
- * @param $global String: name of the global variable.
- * @param $class String: name of the class of the real object.
- * @param $params Array: parameters to pass to contructor of the real
+ * @param string $global name of the global variable.
+ * @param string $class name of the class of the real object.
+ * @param array $params parameters to pass to constructor of the real
* object.
*/
function __construct( $global = null, $class = null, $params = array() ) {
}
/**
- * Returns a bool value whetever $obj is a stub object. Can be used to break
+ * Returns a bool value whenever $obj is a stub object. Can be used to break
* a infinite loop when unstubbing an object.
*
* @param $obj Object to check.
* This function will also call the function with the same name in the real
* object.
*
- * @param $name String: name of the function called
- * @param $args Array: arguments
+ * @param string $name name of the function called
+ * @param array $args arguments
* @return mixed
*/
function _call( $name, $args ) {
* Function called by PHP if no function with that name exists in this
* object.
*
- * @param $name String: name of the function called
- * @param $args Array: arguments
+ * @param string $name name of the function called
+ * @param array $args arguments
* @return mixed
*/
function __call( $name, $args ) {
* This is public, for the convenience of external callers wishing to access
* properties, e.g. eval.php
*
- * @param $name String: name of the method called in this object.
- * @param $level Integer: level to go in the stact trace to get the function
+ * @param string $name name of the method called in this object.
+ * @param $level Integer: level to go in the stack trace to get the function
* who called this function.
* @throws MWException
*/
*
* @since 1.20
*
- * @param $timestamp bool|string Timestamp to set, or false for current time
+ * @param bool|string $timestamp Timestamp to set, or false for current time
*/
public function __construct( $timestamp = false ) {
$this->setTimestamp( $timestamp );
*
* @since 1.20
*
- * @param $ts string|bool Timestamp to store, or false for now
+ * @param string|bool $ts Timestamp to store, or false for now
* @throws TimestampException
*/
public function setTimestamp( $ts = false ) {
*
* @since 1.20
*
- * @param $style int Constant Output format for timestamp
+ * @param int $style Constant Output format for timestamp
* @throws TimestampException
* @return string The formatted timestamp
*/
/**
* Create a new Title from a prefixed DB key
*
- * @param $key String the database key, which has underscores
+ * @param string $key the database key, which has underscores
* instead of spaces, possibly including namespace and
* interwiki prefixes
* @return Title, or NULL on an error
* Create a new Title from text, such as what one would find in a link. De-
* codes any HTML entities in the text.
*
- * @param $text String the link text; spaces, prefixes, and an
+ * @param string $text the link text; spaces, prefixes, and an
* initial ':' indicating the main namespace are accepted.
- * @param $defaultNamespace Int the namespace to use if none is speci-
- * fied by a prefix. If you want to force a specific namespace even if
+ * @param int $defaultNamespace the namespace to use if none is specified
+ * by a prefix. If you want to force a specific namespace even if
* $text might begin with a namespace prefix, use makeTitle() or
* makeTitleSafe().
* @throws MWException
* Create a new Title from URL-encoded text. Ensures that
* the given title's length does not exceed the maximum.
*
- * @param $url String the title, as might be taken from a URL
+ * @param string $url the title, as might be taken from a URL
* @return Title the new object, or NULL on an error
*/
public static function newFromURL( $url ) {
/**
* Create a new Title from an article ID
*
- * @param $id Int the page_id corresponding to the Title to create
- * @param $flags Int use Title::GAID_FOR_UPDATE to use master
+ * @param int $id the page_id corresponding to the Title to create
+ * @param int $flags use Title::GAID_FOR_UPDATE to use master
* @return Title the new object, or NULL on an error
*/
public static function newFromID( $id, $flags = 0 ) {
/**
* Make an array of titles from an array of IDs
*
- * @param $ids Array of Int Array of IDs
+ * @param array $ids of Int Array of IDs
* @return Array of Titles
*/
public static function newFromIDs( $ids ) {
* For convenience, spaces are converted to underscores so that
* eg user_text fields can be used directly.
*
- * @param $ns Int the namespace of the article
- * @param $title String the unprefixed database key form
- * @param $fragment String the link fragment (after the "#")
- * @param $interwiki String the interwiki prefix
+ * @param int $ns the namespace of the article
+ * @param string $title the unprefixed database key form
+ * @param string $fragment the link fragment (after the "#")
+ * @param string $interwiki the interwiki prefix
* @return Title the new object
*/
public static function &makeTitle( $ns, $title, $fragment = '', $interwiki = '' ) {
* The parameters will be checked for validity, which is a bit slower
* than makeTitle() but safer for user-provided data.
*
- * @param $ns Int the namespace of the article
- * @param $title String database key form
- * @param $fragment String the link fragment (after the "#")
- * @param $interwiki String interwiki prefix
+ * @param int $ns the namespace of the article
+ * @param string $title database key form
+ * @param string $fragment the link fragment (after the "#")
+ * @param string $interwiki interwiki prefix
* @return Title the new object, or NULL on an error
*/
public static function makeTitleSafe( $ns, $title, $fragment = '', $interwiki = '' ) {
* This will only return the very next target, useful for
* the redirect table and other checks that don't need full recursion
*
- * @param $text String: Text with possible redirect
+ * @param string $text Text with possible redirect
* @return Title: The corresponding Title
* @deprecated since 1.21, use Content::getRedirectTarget instead.
*/
* This will recurse down $wgMaxRedirects times or until a non-redirect target is hit
* in order to provide (hopefully) the Title of the final destination instead of another redirect
*
- * @param $text String Text with possible redirect
+ * @param string $text Text with possible redirect
* @return Title
* @deprecated since 1.21, use Content::getUltimateRedirectTarget instead.
*/
* The last element in the array is the final destination after all redirects
* have been resolved (up to $wgMaxRedirects times)
*
- * @param $text String Text with possible redirect
+ * @param string $text Text with possible redirect
* @return Array of Titles, with the destination last
* @deprecated since 1.21, use Content::getRedirectChain instead.
*/
/**
* Get the prefixed DB key associated with an ID
*
- * @param $id Int the page_id of the article
+ * @param int $id the page_id of the article
* @return Title an object representing the article, or NULL if no such article was found
*/
public static function nameOf( $id ) {
* Get a string representation of a title suitable for
* including in a search index
*
- * @param $ns Int a namespace index
- * @param $title String text-form main part
+ * @param int $ns a namespace index
+ * @param string $title text-form main part
* @return String a stripped-down title string ready for the search index
*/
public static function indexTitle( $ns, $title ) {
/**
* Make a prefixed DB key from a DB key and a namespace index
*
- * @param $ns Int numerical representation of the namespace
- * @param $title String the DB key form the title
- * @param $fragment String The link fragment (after the "#")
- * @param $interwiki String The interwiki prefix
+ * @param int $ns numerical representation of the namespace
+ * @param string $title the DB key form the title
+ * @param string $fragment The link fragment (after the "#")
+ * @param string $interwiki The interwiki prefix
* @return String the prefixed form of the title
*/
public static function makeName( $ns, $title, $fragment = '', $interwiki = '' ) {
/**
* Escape a text fragment, say from a link, for a URL
*
- * @param $fragment string containing a URL or link fragment (after the "#")
+ * @param string $fragment containing a URL or link fragment (after the "#")
* @return String: escaped string
*/
static function escapeFragmentForURL( $fragment ) {
/**
* Convenience method for checking a title's content model name
*
- * @param String $id The content model ID (use the CONTENT_MODEL_XXX constants).
+ * @param string $id The content model ID (use the CONTENT_MODEL_XXX constants).
* @return Boolean true if $this->getContentModel() == $id
*/
public function hasContentModel( $id ) {
/**
* Returns true if this title resolves to the named special page
*
- * @param $name String The special page name
+ * @param string $name The special page name
* @return boolean
*/
public function isSpecial( $name ) {
* Please make use of this instead of comparing to getNamespace()
* This function is much more resistant to changes we may make
* to namespaces than code that makes direct comparisons.
- * @param $ns int The namespace
+ * @param int $ns The namespace
* @return bool
* @since 1.19
*/
* is either NS_USER or NS_USER_TALK since both of them have NS_USER
* as their subject namespace.
*
- * This is MUCH simpler than individually testing for equivilance
+ * This is MUCH simpler than individually testing for equivalence
* against both NS_USER and NS_USER_TALK, and is also forward compatible.
* @since 1.19
* @param $ns int
* Is this the mainpage?
* @note Title::newFromText seems to be sufficiently optimized by the title
* cache that we don't need to over-optimize by doing direct comparisons and
- * acidentally creating new bugs where $title->equals( Title::newFromText() )
+ * accidentally creating new bugs where $title->equals( Title::newFromText() )
* ends up reporting something differently than $title->isMainPage();
*
* @since 1.18
|| $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) );
#NOTE: this hook is also called in ContentHandler::getDefaultModel. It's called here again to make sure
- # hook funktions can force this method to return true even outside the mediawiki namespace.
+ # hook functions can force this method to return true even outside the mediawiki namespace.
wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ) );
* Deprecated for public use, use Title::makeTitle() with fragment parameter.
* Still in active use privately.
*
- * @param $fragment String text
+ * @param string $fragment text
*/
public function setFragment( $fragment ) {
$this->mFragment = str_replace( '_', ' ', substr( $fragment, 1 ) );
* Prefix some arbitrary text with the namespace or interwiki prefix
* of this object
*
- * @param $name String the text
+ * @param string $name the text
* @return String the prefixed text
* @private
*/
* # returns: Title{User:Foo/Bar/Baz/Asdf}
* @endcode
*
- * @param $text String The subpage name to add to the title
+ * @param string $text The subpage name to add to the title
* @return Title Subpage title
* @since 1.20
*/
* second argument named variant. This was deprecated in favor
* of passing an array of option with a "variant" key
* Once $query2 is removed for good, this helper can be dropped
- * andthe wfArrayToCgi moved to getLocalURL();
+ * and the wfArrayToCgi moved to getLocalURL();
*
* @since 1.19 (r105919)
* @param $query
* with action=render, $wgServer is prepended.
*
- * @param $query string|array an optional query string,
+ * @param string|array $query an optional query string,
* not used for interwiki links. Can be specified as an associative array as well,
* e.g., array( 'action' => 'edit' ) (keys and values will be URL-escaped).
* Some query patterns will trigger various shorturl path replacements.
*
* May provide false positives, but should never provide a false negative.
*
- * @param $action String action that permission needs to be checked for
+ * @param string $action action that permission needs to be checked for
* @param $user User to check (since 1.19); $wgUser will be used if not
* provided.
* @return Bool
/**
* Can $user perform $action on this page?
*
- * @param $action String action that permission needs to be checked for
+ * @param string $action action that permission needs to be checked for
* @param $user User to check (since 1.19); $wgUser will be used if not
* provided.
- * @param $doExpensiveQueries Bool Set this to false to avoid doing
+ * @param bool $doExpensiveQueries Set this to false to avoid doing
* unnecessary queries.
* @return Bool
*/
*
* @todo FIXME: This *does not* check throttles (User::pingLimiter()).
*
- * @param $action String action that permission needs to be checked for
+ * @param string $action action that permission needs to be checked for
* @param $user User to check
- * @param $doExpensiveQueries Bool Set this to false to avoid doing unnecessary
+ * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary
* queries by skipping checks for cascading protections and user blocks.
- * @param $ignoreErrors Array of Strings Set this to a list of message keys
+ * @param array $ignoreErrors of Strings Set this to a list of message keys
* whose corresponding errors may be ignored.
* @return Array of arguments to wfMessage to explain permissions problems.
*/
/**
* Permissions checks that fail most often, and which are easiest to test.
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User user to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
/**
* Add the resulting error code to the errors array
*
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $result Mixed result of errors
*
* @return Array list of errors
/**
* Check various permission hooks
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User user to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
/**
* Check permissions on special pages & namespaces
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User user to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
/**
* Check CSS/JS sub-page permissions
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User user to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
* page. The user must possess all required rights for this
* action.
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User user to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
/**
* Check restrictions on cascading pages.
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
/**
* Check action permissions not already checked in checkQuickPermissions
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
}
/**
- * Check that the user isn't blocked from editting.
+ * Check that the user isn't blocked from editing.
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
/**
* Check that the user is allowed to read this page.
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $user User to check
- * @param $errors Array list of current errors
+ * @param array $errors list of current errors
* @param $doExpensiveQueries Boolean whether or not to perform expensive queries
* @param $short Boolean short circuit on first error
*
# Time to check the whitelist
# Only do these checks is there's something to check against
$name = $this->getPrefixedText();
- $dbName = $this->getPrefixedDBKey();
+ $dbName = $this->getPrefixedDBkey();
// Check for explicit whitelisting with and without underscores
if ( in_array( $name, $wgWhitelistRead, true ) || in_array( $dbName, $wgWhitelistRead, true ) ) {
* Get a description array when the user doesn't have the right to perform
* $action (i.e. when User::isAllowed() returns false)
*
- * @param $action String the action to check
+ * @param string $action the action to check
* @param $short Boolean short circuit on first error
* @return Array list of errors
*/
* which checks ONLY that previously checked by userCan (i.e. it leaves out
* checks on wfReadOnly() and blocks)
*
- * @param $action String action that permission needs to be checked for
+ * @param string $action action that permission needs to be checked for
* @param $user User to check
- * @param $doExpensiveQueries Bool Set this to false to avoid doing unnecessary queries.
- * @param $short Bool Set this to true to stop after the first permission error.
+ * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary queries.
+ * @param bool $short Set this to true to stop after the first permission error.
* @return Array of arrays of the arguments to wfMessage to explain permissions problems.
*/
protected function getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries = true, $short = false ) {
*
* @deprecated in 1.19; will be removed in 1.20. Use WikiPage::doUpdateRestrictions() instead.
* @param $create_perm String Permission required for creation
- * @param $reason String Reason for protection
- * @param $expiry String Expiry timestamp
+ * @param string $reason Reason for protection
+ * @param string $expiry Expiry timestamp
* @return boolean true
*/
public function updateTitleProtection( $create_perm, $reason, $expiry ) {
/**
* Is this page "semi-protected" - the *only* protection is autoconfirm?
*
- * @param $action String Action to check (default: edit)
+ * @param string $action Action to check (default: edit)
* @return Bool
*/
public function isSemiProtected( $action = 'edit' ) {
/**
* Does the title correspond to a protected article?
*
- * @param $action String the action the page is protected from,
+ * @param string $action the action the page is protected from,
* by default checks all actions.
* @return Bool
*/
/**
* Cascading protection: Get the source of any cascading restrictions on this page.
*
- * @param $getPages Bool Whether or not to retrieve the actual pages
+ * @param bool $getPages Whether or not to retrieve the actual pages
* that the restrictions have come from.
* @return Mixed Array of Title objects of the pages from which cascading restrictions
* have come, false for none, or true if such restrictions exist, but $getPages
/**
* Accessor/initialisation for mRestrictions
*
- * @param $action String action that permission needs to be checked for
+ * @param string $action action that permission needs to be checked for
* @return Array of Strings the array of groups allowed to edit this article
*/
public function getRestrictions( $action ) {
* Loads a string into mRestrictions array
*
* @param $res Resource restrictions as an SQL result.
- * @param $oldFashionedRestrictions String comma-separated list of page
+ * @param string $oldFashionedRestrictions comma-separated list of page
* restrictions from page table (pre 1.10)
*/
private function loadRestrictionsFromResultWrapper( $res, $oldFashionedRestrictions = null ) {
* and page_restrictions table for this existing page.
* Public for usage by LiquidThreads.
*
- * @param $rows array of db result objects
- * @param $oldFashionedRestrictions string comma-separated list of page
+ * @param array $rows of db result objects
+ * @param string $oldFashionedRestrictions comma-separated list of page
* restrictions from page table (pre 1.10)
*/
public function loadRestrictionsFromRows( $rows, $oldFashionedRestrictions = null ) {
/**
* Load restrictions from the page_restrictions table
*
- * @param $oldFashionedRestrictions String comma-separated list of page
+ * @param string $oldFashionedRestrictions comma-separated list of page
* restrictions from page table (pre 1.10)
*/
public function loadRestrictions( $oldFashionedRestrictions = null ) {
/**
* Get all subpages of this page.
*
- * @param $limit Int maximum number of subpages to fetch; -1 for no limit
+ * @param int $limit maximum number of subpages to fetch; -1 for no limit
* @return mixed TitleArray, or empty array if this page's namespace
* doesn't allow subpages
*/
* Get the article ID for this Title from the link cache,
* adding it if necessary
*
- * @param $flags Int a bit field; may be Title::GAID_FOR_UPDATE to select
+ * @param int $flags a bit field; may be Title::GAID_FOR_UPDATE to select
* for update
* @return Int the ID
*/
* Is this an article that is a redirect page?
* Uses link cache, adding it if necessary
*
- * @param $flags Int a bit field; may be Title::GAID_FOR_UPDATE to select for update
+ * @param int $flags a bit field; may be Title::GAID_FOR_UPDATE to select for update
* @return Bool
*/
public function isRedirect( $flags = 0 ) {
* What is the length of this page?
* Uses link cache, adding it if necessary
*
- * @param $flags Int a bit field; may be Title::GAID_FOR_UPDATE to select for update
+ * @param int $flags a bit field; may be Title::GAID_FOR_UPDATE to select for update
* @return Int
*/
public function getLength( $flags = 0 ) {
/**
* What is the page_latest field for this page?
*
- * @param $flags Int a bit field; may be Title::GAID_FOR_UPDATE to select for update
+ * @param int $flags a bit field; may be Title::GAID_FOR_UPDATE to select for update
* @throws MWException
* @return Int or 0 if the page doesn't exist
*/
* loading of the new page_id. It's also called from
* WikiPage::doDeleteArticleReal()
*
- * @param $newid Int the new Article ID
+ * @param int $newid the new Article ID
*/
public function resetArticleID( $newid ) {
$linkCache = LinkCache::singleton();
/**
* Capitalize a text string for a title if it belongs to a namespace that capitalizes
*
- * @param $text String containing title to capitalize
- * @param $ns int namespace index, defaults to NS_MAIN
+ * @param string $text containing title to capitalize
+ * @param int $ns namespace index, defaults to NS_MAIN
* @return String containing capitalized title
*/
public static function capitalize( $text, $ns = NS_MAIN ) {
* WARNING: do not use this function on arbitrary user-supplied titles!
* On heavily-used templates it will max out the memory.
*
- * @param $options Array: may be FOR UPDATE
- * @param $table String: table name
- * @param $prefix String: fields prefix
+ * @param array $options may be FOR UPDATE
+ * @param string $table table name
+ * @param string $prefix fields prefix
* @return Array of Title objects linking here
*/
public function getLinksTo( $options = array(), $table = 'pagelinks', $prefix = 'pl' ) {
* WARNING: do not use this function on arbitrary user-supplied titles!
* On heavily-used templates it will max out the memory.
*
- * @param $options Array: may be FOR UPDATE
+ * @param array $options may be FOR UPDATE
* @return Array of Title the Title objects linking here
*/
public function getTemplateLinksTo( $options = array() ) {
* WARNING: do not use this function on arbitrary user-supplied titles!
* On heavily-used templates it will max out the memory.
*
- * @param $options Array: may be FOR UPDATE
- * @param $table String: table name
- * @param $prefix String: fields prefix
+ * @param array $options may be FOR UPDATE
+ * @param string $table table name
+ * @param string $prefix fields prefix
* @return Array of Title objects linking here
*/
public function getLinksFrom( $options = array(), $table = 'pagelinks', $prefix = 'pl' ) {
* WARNING: do not use this function on arbitrary user-supplied titles!
* On heavily-used templates it will max out the memory.
*
- * @param $options Array: may be FOR UPDATE
+ * @param array $options may be FOR UPDATE
* @return Array of Title the Title objects used here
*/
public function getTemplateLinksFrom( $options = array() ) {
* Returns true if ok, or a getUserPermissionsErrors()-like array otherwise
*
* @param $nt Title the new title
- * @param $auth Bool indicates whether $wgUser's permissions
+ * @param bool $auth indicates whether $wgUser's permissions
* should be checked
- * @param $reason String is the log summary of the move, used for spam checking
+ * @param string $reason is the log summary of the move, used for spam checking
* @return Mixed True on success, getUserPermissionsErrors()-like array on failure
*/
public function isValidMoveOperation( &$nt, $auth = true, $reason = '' ) {
* Move a title to a new location
*
* @param $nt Title the new title
- * @param $auth Bool indicates whether $wgUser's permissions
+ * @param bool $auth indicates whether $wgUser's permissions
* should be checked
- * @param $reason String the reason for the move
- * @param $createRedirect Bool Whether to create a redirect from the old title to the new title.
+ * @param string $reason the reason for the move
+ * @param bool $createRedirect Whether to create a redirect from the old title to the new title.
* Ignored if the user doesn't have the suppressredirect right.
* @return Mixed true on success, getUserPermissionsErrors()-like array on failure
*/
* source page or nonexistent
*
* @param $nt Title the page to move to, which should be a redirect or nonexistent
- * @param $reason String The reason for the move
- * @param $createRedirect Bool Whether to leave a redirect at the old title. Does not check
+ * @param string $reason The reason for the move
+ * @param bool $createRedirect Whether to leave a redirect at the old title. Does not check
* if the user has the suppressredirect right
* @throws MWException
*/
* Move this page's subpages to be subpages of $nt
*
* @param $nt Title Move target
- * @param $auth bool Whether $wgUser's permissions should be checked
- * @param $reason string The reason for the move
- * @param $createRedirect bool Whether to create redirects from the old subpages to
+ * @param bool $auth Whether $wgUser's permissions should be checked
+ * @param string $reason The reason for the move
+ * @param bool $createRedirect Whether to create redirects from the old subpages to
* the new ones Ignored if the user doesn't have the 'suppressredirect' right
* @return mixed array with old page titles as keys, and strings (new page titles) or
* arrays (errors) as values, or an error array with numeric indices if no pages
/**
* Get a tree of parent categories
*
- * @param $children Array with the children in the keys, to check for circular refs
+ * @param array $children with the children in the keys, to check for circular refs
* @return Array Tree of parent categories
*/
public function getParentCategoryTree( $children = array() ) {
/**
* Get the revision ID of the previous revision
*
- * @param $revId Int Revision ID. Get the revision that was before this one.
- * @param $flags Int Title::GAID_FOR_UPDATE
+ * @param int $revId Revision ID. Get the revision that was before this one.
+ * @param int $flags Title::GAID_FOR_UPDATE
* @return Int|Bool Old revision ID, or FALSE if none exists
*/
public function getPreviousRevisionID( $revId, $flags = 0 ) {
/**
* Get the revision ID of the next revision
*
- * @param $revId Int Revision ID. Get the revision that was after this one.
- * @param $flags Int Title::GAID_FOR_UPDATE
+ * @param int $revId Revision ID. Get the revision that was after this one.
+ * @param int $flags Title::GAID_FOR_UPDATE
* @return Int|Bool Next revision ID, or FALSE if none exists
*/
public function getNextRevisionID( $revId, $flags = 0 ) {
/**
* Get the first revision of the page
*
- * @param $flags Int Title::GAID_FOR_UPDATE
+ * @param int $flags Title::GAID_FOR_UPDATE
* @return Revision|Null if page doesn't exist
*/
public function getFirstRevision( $flags = 0 ) {
/**
* Get the oldest revision timestamp of this page
*
- * @param $flags Int Title::GAID_FOR_UPDATE
+ * @param int $flags Title::GAID_FOR_UPDATE
* @return String: MW timestamp
*/
public function getEarliestRevTime( $flags = 0 ) {
* Get the number of revisions between the given revision.
* Used for diffs and other things that really need it.
*
- * @param $old int|Revision Old revision or rev ID (first before range)
- * @param $new int|Revision New revision or rev ID (first after range)
+ * @param int|Revision $old Old revision or rev ID (first before range)
+ * @param int|Revision $new New revision or rev ID (first after range)
* @return Int Number of revisions between these revisions.
*/
public function countRevisionsBetween( $old, $new ) {
* Get the number of authors between the given revisions or revision IDs.
* Used for diffs and other things that really need it.
*
- * @param $old int|Revision Old revision or rev ID (first before range by default)
- * @param $new int|Revision New revision or rev ID (first after range by default)
- * @param $limit int Maximum number of authors
- * @param $options string|array (Optional): Single option, or an array of options:
+ * @param int|Revision $old Old revision or rev ID (first before range by default)
+ * @param int|Revision $new New revision or rev ID (first after range by default)
+ * @param int $limit Maximum number of authors
+ * @param string|array $options (Optional): Single option, or an array of options:
* 'include_old' Include $old in the range; $new is excluded.
* 'include_new' Include $new in the range; $old is excluded.
* 'include_both' Include both $old and $new in the range.
// Use always content language to avoid loading hundreds of languages
// to get the link color.
global $wgContLang;
- list( $name, $lang ) = MessageCache::singleton()->figureMessage( $wgContLang->lcfirst( $this->getText() ) );
+ list( $name, ) = MessageCache::singleton()->figureMessage( $wgContLang->lcfirst( $this->getText() ) );
$message = wfMessage( $name )->inLanguage( $wgContLang )->useDatabase( false );
return $message->exists();
}
/**
* Updates page_touched for this page; called from LinksUpdate.php
*
- * @return Bool true if the update succeded
+ * @return Bool true if the update succeeded
*/
public function invalidateCache() {
global $wgMemc;
/**
* Generate strings used for xml 'id' names in monobook tabs
*
- * @param $prepend string defaults to 'nstab-'
+ * @param string $prepend defaults to 'nstab-'
* @return String XML 'id' name
*/
public function getNamespaceKey( $prepend = 'nstab-' ) {
global $wgContLang;
// Gets the subject namespace if this title
$namespace = MWNamespace::getSubject( $this->getNamespace() );
- // Checks if cononical namespace name exists for namespace
+ // Checks if canonical namespace name exists for namespace
if ( MWNamespace::exists( $this->getNamespace() ) ) {
// Uses canonical namespace name
$namespaceKey = MWNamespace::getCanonicalName( $namespace );
/**
* Get all extant redirects to this Title
*
- * @param $ns Int|Null Single namespace to consider; NULL to consider all namespaces
+ * @param int|Null $ns Single namespace to consider; NULL to consider all namespaces
* @return Array of Title redirects to this title
*/
public function getRedirectsHere( $ns = null ) {
public function isValidRedirectTarget() {
global $wgInvalidRedirectTargets;
- // invalid redirect targets are stored in a global array, but explicity disallow Userlogout here
+ // invalid redirect targets are stored in a global array, but explicitly disallow Userlogout here
if ( $this->isSpecial( 'Userlogout' ) ) {
return false;
}
* prefix. This will be fed to Collation::getSortKey() to get a
* binary sortkey that can be used for actual sorting.
*
- * @param $prefix string The prefix to be used, specified using
+ * @param string $prefix The prefix to be used, specified using
* {{defaultsort:}} or like [[Category:Foo|prefix]]. Empty for no
* prefix.
* @return string
* Classes to walk into a list of Title objects.
*
* Note: this entire file is a byte-for-byte copy of UserArray.php with
- * s/User/Title/. If anyone can figure out how to do this nicely with inheri-
- * tance or something, please do so.
+ * s/User/Title/. If anyone can figure out how to do this nicely with
+ * inheritance or something, please do so.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/** @var Array */
protected $fileHandles = array(); // cache file handles
- const QUICK_RAND = 1; // get randomness from fast and unsecure sources
+ const QUICK_RAND = 1; // get randomness from fast and insecure sources
protected function __construct() {
$idFile = wfTempDir() . '/mw-' . __CLASS__ . '-UID-nodeid';
}
/**
- * @param $time array (UIDGenerator::millitime(), clock sequence)
+ * @param array $time (UIDGenerator::millitime(), clock sequence)
* @return string 88 bits
*/
protected function getTimestampedID88( array $info ) {
}
/**
- * @param $info array (UIDGenerator::milltime(), counter, clock sequence)
+ * @param array $info (UIDGenerator::millitime(), counter, clock sequence)
* @return string 128 bits
*/
protected function getTimestampedID128( array $info ) {
* than any previous (time,counter) value for the given clock sequence.
* This is useful for making UIDs sequential on a per-node bases.
*
- * @param $lockFile string Name of a local lock file
+ * @param string $lockFile Name of a local lock file
* @param $clockSeqSize integer The number of possible clock sequence values
* @param $counterSize integer The number of possible counter values
* @return Array (result of UIDGenerator::millitime(), counter, clock sequence)
* Wait till the current timestamp reaches $time and return the current
* timestamp. This returns false if it would have to wait more than 10ms.
*
- * @param $time array Result of UIDGenerator::millitime()
+ * @param array $time Result of UIDGenerator::millitime()
* @return Array|bool UIDGenerator::millitime() result or false
*/
protected function timeWaitUntil( array $time ) {
}
/**
- * @param $time array Result of UIDGenerator::millitime()
+ * @param array $time Result of UIDGenerator::millitime()
* @return string 46 MSBs of "milliseconds since epoch" in binary (rolls over in 4201)
*/
protected function millisecondsSinceEpochBinary( array $time ) {
* This is slightly less efficient than newFromId(), so use newFromId() if
* you have both an ID and a name handy.
*
- * @param $name String Username, validated by Title::newFromText()
- * @param $validate String|Bool Validate username. Takes the same parameters as
+ * @param string $name Username, validated by Title::newFromText()
+ * @param string|Bool $validate Validate username. Takes the same parameters as
* User::getCanonicalName(), except that true is accepted as an alias
* for 'valid', for BC.
*
/**
* Static factory method for creation from a given user ID.
*
- * @param $id Int Valid user ID
+ * @param int $id Valid user ID
* @return User The corresponding User object
*/
public static function newFromId( $id ) {
*
* If the code is invalid or has expired, returns NULL.
*
- * @param $code String Confirmation code
+ * @param string $code Confirmation code
* @return User object, or null
*/
public static function newFromConfirmationCode( $code ) {
* Create a new user object using data from session or cookies. If the
* login credentials are invalid, the result is an anonymous user.
*
- * @param $request WebRequest object to use; $wgRequest will be used if
- * ommited.
+ * @param $request WebRequest object to use; $wgRequest will be used if omitted.
* @return User object
*/
public static function newFromSession( WebRequest $request = null ) {
* user_name and user_real_name are not provided because the whole row
* will be loaded once more from the database when accessing them.
*
- * @param $row Array A row from the user table
- * @param $data Array Further data to load into the object (see User::loadFromRow for valid keys)
+ * @param array $row A row from the user table
+ * @param array $data Further data to load into the object (see User::loadFromRow for valid keys)
* @return User
*/
public static function newFromRow( $row, $data = null ) {
/**
* Get the username corresponding to a given user ID
- * @param $id Int User ID
+ * @param int $id User ID
* @return String|bool The corresponding username
*/
public static function whoIs( $id ) {
/**
* Get the real name of a user given their user ID
*
- * @param $id Int User ID
+ * @param int $id User ID
* @return String|bool The corresponding user's real name
*/
public static function whoIsReal( $id ) {
/**
* Get database id given a user name
- * @param $name String Username
+ * @param string $name Username
* @return Int|Null The corresponding user's ID, or null if user is nonexistent
*/
public static function idFromName( $name ) {
* addresses like this, if we allowed accounts like this to be created
* new users could get the old edits of these anonymous users.
*
- * @param $name String to match
+ * @param string $name to match
* @return Bool
*/
public static function isIP( $name ) {
* Is the input a valid username?
*
* Checks if the input is a valid username, we don't want an empty string,
- * an IP address, anything that containins slashes (would mess up subpages),
+ * an IP address, anything that contains slashes (would mess up subpages),
* is longer than the maximum allowed username size or doesn't begin with
* a capital letter.
*
- * @param $name String to match
+ * @param string $name to match
* @return Bool
*/
public static function isValidUserName( $name ) {
* If an account already exists in this form, login will be blocked
* by a failure to pass this function.
*
- * @param $name String to match
+ * @param string $name to match
* @return Bool
*/
public static function isUsableName( $name ) {
* Additional blacklisting may be added here rather than in
* isValidUserName() to avoid disrupting existing accounts.
*
- * @param $name String to match
+ * @param string $name to match
* @return Bool
*/
public static function isCreatableName( $name ) {
/**
* Is the input a valid password for this user?
*
- * @param $password String Desired password
+ * @param string $password Desired password
* @return Bool
*/
public function isValidPassword( $password ) {
/**
* Given unvalidated password input, return error message on failure.
*
- * @param $password String Desired password
+ * @param string $password Desired password
* @return mixed: true on success, string or array of error message on failure
*/
public function getPasswordValidity( $password ) {
* to be liberal enough for wide use. Some invalid addresses will still
* pass validation here.
*
- * @param $addr String E-mail address
+ * @param string $addr E-mail address
* @return Bool
* @deprecated since 1.18 call Sanitizer::isValidEmail() directly
*/
/**
* Given unvalidated user input, return a canonical username, or false if
* the username is invalid.
- * @param $name String User input
- * @param $validate String|Bool type of validation to use:
+ * @param string $name User input
+ * @param string|Bool $validate type of validation to use:
* - false No validation
* - 'valid' Valid for batch processes
* - 'usable' Valid for batch processes and login
/**
* Count the number of edits of a user
*
- * @param $uid Int User ID to check
+ * @param int $uid User ID to check
* @return Int the user's edit count
*
* @deprecated since 1.21 in favour of User::getEditCount
/**
* Return whether an item has been loaded.
*
- * @param $item String: item to check. Current possibilities:
+ * @param string $item item to check. Current possibilities:
* - id
* - name
* - realname
- * @param $all String: 'all' to check if the whole object has been loaded
+ * @param string $all 'all' to check if the whole object has been loaded
* or any other string to check if only the item is available (e.g.
* for optimisation)
* @return Boolean
/**
* Initialize this object from a row from the user table.
*
- * @param $row Array Row from the user table to load.
- * @param $data Array Further user data to load into the object
+ * @param array $row Row from the user table to load.
+ * @param array $data Further user data to load into the object
*
* user_groups Array with groups out of the user_groups table
* user_properties Array with properties out of the user_properties table
* will not be re-added automatically. The user will also not lose the
* group if they no longer meet the criteria.
*
- * @param $event String key in $wgAutopromoteOnce (each one has groups/criteria)
+ * @param string $event key in $wgAutopromoteOnce (each one has groups/criteria)
*
* @return array Array of groups the user has been promoted to.
*
* Clear various cached data stored in this object. The cache of the user table
* data (i.e. self::$mCacheVars) is not cleared unless $reloadFrom is given.
*
- * @param $reloadFrom bool|String Reload user and user_groups table data from a
+ * @param bool|String $reloadFrom Reload user and user_groups table data from a
* given source. May be "name", "id", "defaults", "session", or false for
* no reload.
*/
/**
* Get a given default option value.
*
- * @param $opt String Name of option to retrieve
+ * @param string $opt Name of option to retrieve
* @return String Default option value
*/
public static function getDefaultOption( $opt ) {
/**
* Get blocking information
- * @param $bFromSlave Bool Whether to check the slave database first. To
+ * @param bool $bFromSlave Whether to check the slave database first. To
* improve performance, non-critical checks are done
* against slaves. Check when actually saving should be
* done against master.
/**
* Whether the given IP is in a DNS blacklist.
*
- * @param $ip String IP to check
- * @param $checkWhitelist Bool: whether to check the whitelist first
+ * @param string $ip IP to check
+ * @param bool $checkWhitelist whether to check the whitelist first
* @return Bool True if blacklisted.
*/
public function isDnsBlacklisted( $ip, $checkWhitelist = false ) {
/**
* Whether the given IP is in a given DNS blacklist.
*
- * @param $ip String IP to check
- * @param $bases String|Array of Strings: URL of the DNS blacklist
+ * @param string $ip IP to check
+ * @param string|array $bases of Strings: URL of the DNS blacklist
* @return Bool True if blacklisted.
*/
public function inDnsBlacklist( $ip, $bases ) {
* @note When using a shared cache like memcached, IP-address
* last-hit counters will be shared across wikis.
*
- * @param $action String Action to enforce; 'edit' if unspecified
+ * @param string $action Action to enforce; 'edit' if unspecified
* @return Bool True if a rate limiter was tripped
*/
public function pingLimiter( $action = 'edit' ) {
/**
* Check if user is blocked
*
- * @param $bFromSlave Bool Whether to check the slave database instead of the master
+ * @param bool $bFromSlave Whether to check the slave database instead of the master
* @return Bool True if blocked, false otherwise
*/
public function isBlocked( $bFromSlave = true ) { // hacked from false due to horrible probs on site
/**
* Get the block affecting the user, or null if the user is not blocked
*
- * @param $bFromSlave Bool Whether to check the slave database instead of the master
+ * @param bool $bFromSlave Whether to check the slave database instead of the master
* @return Block|null
*/
public function getBlock( $bFromSlave = true ) {
* Check if user is blocked from editing a particular article
*
* @param $title Title to check
- * @param $bFromSlave Bool whether to check the slave database instead of the master
+ * @param bool $bFromSlave whether to check the slave database instead of the master
* @return Bool
*/
function isBlockedFrom( $title, $bFromSlave = false ) {
/**
* Check if user is blocked on all wikis.
* Do not use for actual edit permission checks!
- * This is intented for quick UI checks.
+ * This is intended for quick UI checks.
*
- * @param $ip String IP address, uses current client if none given
+ * @param string $ip IP address, uses current client if none given
* @return Bool True if blocked, false otherwise
*/
public function isBlockedGlobally( $ip = '' ) {
/**
* Set the user and reload all fields according to a given ID
- * @param $v Int User ID to reload
+ * @param int $v User ID to reload
*/
public function setId( $v ) {
$this->mId = $v;
* address for an anonymous user to something other than the current
* remote IP.
*
- * @note User::newFromName() has rougly the same function, when the named user
+ * @note User::newFromName() has roughly the same function, when the named user
* does not exist.
- * @param $str String New user name to set
+ * @param string $str New user name to set
*/
public function setName( $str ) {
$this->load();
* Internal uncached check for new messages
*
* @see getNewtalk()
- * @param $field String 'user_ip' for anonymous users, 'user_id' otherwise
- * @param $id String|Int User's IP address for anonymous users, User ID otherwise
- * @param $fromMaster Bool true to fetch from the master, false for a slave
+ * @param string $field 'user_ip' for anonymous users, 'user_id' otherwise
+ * @param string|Int $id User's IP address for anonymous users, User ID otherwise
+ * @param bool $fromMaster true to fetch from the master, false for a slave
* @return Bool True if the user has new messages
*/
protected function checkNewtalk( $field, $id, $fromMaster = false ) {
/**
* Add or update the new messages flag
- * @param $field String 'user_ip' for anonymous users, 'user_id' otherwise
- * @param $id String|Int User's IP address for anonymous users, User ID otherwise
+ * @param string $field 'user_ip' for anonymous users, 'user_id' otherwise
+ * @param string|Int $id User's IP address for anonymous users, User ID otherwise
* @param $curRev Revision new, as yet unseen revision of the user talk page. Ignored if null.
* @return Bool True if successful, false otherwise
*/
/**
* Clear the new messages flag for the given user
- * @param $field String 'user_ip' for anonymous users, 'user_id' otherwise
- * @param $id String|Int User's IP address for anonymous users, User ID otherwise
+ * @param string $field 'user_ip' for anonymous users, 'user_id' otherwise
+ * @param string|Int $id User's IP address for anonymous users, User ID otherwise
* @return Bool True if successful, false otherwise
*/
protected function deleteNewtalk( $field, $id ) {
/**
* Update the 'You have new messages!' status.
- * @param $val Bool Whether the user has new messages
+ * @param bool $val Whether the user has new messages
* @param $curRev Revision new, as yet unseen revision of the user talk page. Ignored if null or !$val.
*/
public function setNewtalk( $val, $curRev = null ) {
/**
* Validate the cache for this account.
- * @param $timestamp String A timestamp in TS_MW format
+ * @param string $timestamp A timestamp in TS_MW format
*
* @return bool
*/
* wipes it, so the account cannot be logged in until
* a new password is set, for instance via e-mail.
*
- * @param $str String New password to set
+ * @param string $str New password to set
* @throws PasswordError on failure
*
* @return bool
/**
* Set the password and reset the random token unconditionally.
*
- * @param $str string|null New password to set or null to set an invalid
+ * @param string|null $str New password to set or null to set an invalid
* password hash meaning that the user will not be able to log in
* through the web interface.
*/
/**
* Get the user's current token.
- * @param $forceCreation bool Force the generation of a new token if the user doesn't have one (default=true for backwards compatibility)
+ * @param bool $forceCreation Force the generation of a new token if the user doesn't have one (default=true for backwards compatibility)
* @return String Token
*/
public function getToken( $forceCreation = true ) {
* Set the random token (used for persistent authentication)
* Called from loadDefaults() among other places.
*
- * @param $token String|bool If specified, set the token to this value
+ * @param string|bool $token If specified, set the token to this value
*/
public function setToken( $token = false ) {
$this->load();
/**
* Set the password for a password reminder or new account email
*
- * @param $str String New password to set
- * @param $throttle Bool If true, reset the throttle timestamp to the present
+ * @param string $str New password to set
+ * @param bool $throttle If true, reset the throttle timestamp to the present
*/
public function setNewpassword( $str, $throttle = true ) {
$this->load();
/**
* Set the user's e-mail address
- * @param $str String New e-mail address
+ * @param string $str New e-mail address
*/
public function setEmail( $str ) {
$this->load();
* Set the user's e-mail address and a confirmation mail if needed.
*
* @since 1.20
- * @param $str String New e-mail address
+ * @param string $str New e-mail address
* @return Status
*/
public function setEmailWithConfirmation( $str ) {
/**
* Set the user's real name
- * @param $str String New real name
+ * @param string $str New real name
*/
public function setRealName( $str ) {
$this->load();
/**
* Get the user's current setting for a given option.
*
- * @param $oname String The option to check
- * @param $defaultOverride String A default value returned if the option does not exist
- * @param $ignoreHidden Bool = whether to ignore the effects of $wgHiddenPrefs
+ * @param string $oname The option to check
+ * @param string $defaultOverride A default value returned if the option does not exist
+ * @param bool $ignoreHidden = whether to ignore the effects of $wgHiddenPrefs
* @return String User's current value for the option
* @see getBoolOption()
* @see getIntOption()
/**
* Get the user's current setting for a given option, as a boolean value.
*
- * @param $oname String The option to check
+ * @param string $oname The option to check
* @return Bool User's current value for the option
* @see getOption()
*/
/**
* Get the user's current setting for a given option, as a boolean value.
*
- * @param $oname String The option to check
- * @param $defaultOverride Int A default value returned if the option does not exist
+ * @param string $oname The option to check
+ * @param int $defaultOverride A default value returned if the option does not exist
* @return Int User's current value for the option
* @see getOption()
*/
/**
* Set the given option for a user.
*
- * @param $oname String The option to set
+ * @param string $oname The option to set
* @param $val mixed New value to set
*/
public function setOption( $oname, $val ) {
*
* @see User::listOptionKinds
* @param $context IContextSource
- * @param $options array assoc. array with options keys to check as keys. Defaults to $this->mOptions.
+ * @param array $options assoc. array with options keys to check as keys. Defaults to $this->mOptions.
* @return array the key => kind mapping data
*/
public function getOptionKinds( IContextSource $context, $options = null ) {
* Supported values are everything that can be reported by getOptionKinds()
* and 'all', which forces a reset of *all* preferences and overrides everything else.
*
- * @param $resetKinds array|string which kinds of preferences to reset. Defaults to
+ * @param array|string $resetKinds which kinds of preferences to reset. Defaults to
* array( 'registered', 'registered-multiselect', 'registered-checkmatrix', 'unused' )
* for backwards-compatibility.
* @param $context IContextSource|null context source used when $resetKinds
* Get the list of implicit group memberships this user has.
* This includes all explicit groups, plus 'user' if logged in,
* '*' for all accounts, and autopromoted groups
- * @param $recache Bool Whether to avoid the cache
+ * @param bool $recache Whether to avoid the cache
* @return Array of String internal group names
*/
public function getEffectiveGroups( $recache = false ) {
* Get the list of implicit group memberships this user has.
* This includes 'user' if logged in, '*' for all accounts,
* and autopromoted groups
- * @param $recache Bool Whether to avoid the cache
+ * @param bool $recache Whether to avoid the cache
* @return Array of String internal group names
*/
public function getAutomaticGroups( $recache = false ) {
/**
* Add the user to the given group.
* This takes immediate effect.
- * @param $group String Name of the group to add
+ * @param string $group Name of the group to add
*/
public function addGroup( $group ) {
if( wfRunHooks( 'UserAddGroup', array( $this, &$group ) ) ) {
/**
* Remove the user from the given group.
* This takes immediate effect.
- * @param $group String Name of the group to remove
+ * @param string $group Name of the group to remove
*/
public function removeGroup( $group ) {
$this->load();
/**
* Set this user's options from an encoded string
- * @param $str String Encoded options to import
+ * @param string $str Encoded options to import
*
* @deprecated in 1.19 due to removal of user_options from the user table
*/
/**
* Set a cookie on the user's client. Wrapper for
* WebResponse::setCookie
- * @param $name String Name of the cookie to set
- * @param $value String Value to set
- * @param $exp Int Expiration time, as a UNIX time value;
+ * @param string $name Name of the cookie to set
+ * @param string $value Value to set
+ * @param int $exp Expiration time, as a UNIX time value;
* if 0 or not specified, use the default $wgCookieExpiration
* @param $secure Bool
* true: Force setting the secure attribute when setting the cookie
/**
* Clear a cookie on the user's client
- * @param $name String Name of the cookie to clear
+ * @param string $name Name of the cookie to clear
*/
protected function clearCookie( $name ) {
$this->setCookie( $name, '', time() - 86400 );
*
* @param $request WebRequest object to use; $wgRequest will be used if null
* is passed.
- * @param $secure bool Whether to force secure/insecure cookies or use default
+ * @param bool $secure Whether to force secure/insecure cookies or use default
*/
public function setCookies( $request = null, $secure = null ) {
if ( $request === null ) {
/**
* Add a user to the database, return the user object
*
- * @param $name String Username to add
- * @param $params Array of Strings Non-default parameters to save to the database as user_* fields:
+ * @param string $name Username to add
+ * @param array $params of Strings Non-default parameters to save to the database as user_* fields:
* - password The user's password hash. Password logins will be disabled if this is omitted.
* - newpassword Hash for a temporary password that has been mailed to the user
* - email The user's email address
/**
* Check to see if the given clear-text password is one of the accepted passwords
- * @param $password String: user password.
+ * @param string $password user password.
* @return Boolean: True if the given password is correct, otherwise False.
*/
public function checkPassword( $password ) {
* Alias for getEditToken.
* @deprecated since 1.19, use getEditToken instead.
*
- * @param $salt String|Array of Strings Optional function-specific data for hashing
+ * @param string|array $salt of Strings Optional function-specific data for hashing
* @param $request WebRequest object to use or null to use $wgRequest
* @return String The new edit token
*/
*
* @since 1.19
*
- * @param $salt String|Array of Strings Optional function-specific data for hashing
+ * @param string|array $salt of Strings Optional function-specific data for hashing
* @param $request WebRequest object to use or null to use $wgRequest
* @return String The new edit token
*/
* Generate a looking random token for various uses.
*
* @return String The new random token
- * @deprecated since 1.20; Use MWCryptRand for secure purposes or wfRandomString for pesudo-randomness
+ * @deprecated since 1.20; Use MWCryptRand for secure purposes or wfRandomString for pseudo-randomness
*/
public static function generateToken() {
return MWCryptRand::generateHex( 32 );
* user's own login session, not a form submission from a third-party
* site.
*
- * @param $val String Input value to compare
- * @param $salt String Optional function-specific data for hashing
+ * @param string $val Input value to compare
+ * @param string $salt Optional function-specific data for hashing
* @param $request WebRequest object to use or null to use $wgRequest
* @return Boolean: Whether the token matches
*/
* Check given value against the token value stored in the session,
* ignoring the suffix.
*
- * @param $val String Input value to compare
- * @param $salt String Optional function-specific data for hashing
+ * @param string $val Input value to compare
+ * @param string $salt Optional function-specific data for hashing
* @param $request WebRequest object to use or null to use $wgRequest
* @return Boolean: Whether the token matches
*/
* Generate a new e-mail confirmation token and send a confirmation/invalidation
* mail to the user's given address.
*
- * @param $type String: message to send, either "created", "changed" or "set"
+ * @param string $type message to send, either "created", "changed" or "set"
* @return Status object
*/
public function sendConfirmationMail( $type = 'created' ) {
* Send an e-mail to this user's account. Does not check for
* confirmed status or validity.
*
- * @param $subject String Message subject
- * @param $body String Message body
- * @param $from String Optional From address; if unspecified, default $wgPasswordSender will be used
- * @param $replyto String Reply-To address
+ * @param string $subject Message subject
+ * @param string $body Message body
+ * @param string $from Optional From address; if unspecified, default $wgPasswordSender will be used
+ * @param string $replyto Reply-To address
* @return Status
*/
public function sendMail( $subject, $body, $from = null, $replyto = null ) {
/**
* Return a URL the user can use to confirm their email address.
- * @param $token String Accepts the email confirmation token
+ * @param string $token Accepts the email confirmation token
* @return String New token URL
*/
private function confirmationTokenUrl( $token ) {
/**
* Return a URL the user can use to invalidate their email address.
- * @param $token String Accepts the email confirmation token
+ * @param string $token Accepts the email confirmation token
* @return String New token URL
*/
private function invalidationTokenUrl( $token ) {
* also sometimes can get corrupted in some browsers/mailers
* (bug 6957 with Gmail and Internet Explorer).
*
- * @param $page String Special page
- * @param $token String Token
+ * @param string $page Special page
+ * @param string $token Token
* @return String Formatted URL
*/
protected function getTokenUrl( $page, $token ) {
/**
* Set the e-mail authentication timestamp.
- * @param $timestamp String TS_MW timestamp
+ * @param string $timestamp TS_MW timestamp
*/
function setEmailAuthenticationTimestamp( $timestamp ) {
$this->load();
/**
* Get the permissions associated with a given list of groups
*
- * @param $groups Array of Strings List of internal group names
+ * @param array $groups of Strings List of internal group names
* @return Array of Strings List of permission key names for given groups combined
*/
public static function getGroupPermissions( $groups ) {
/**
* Get all the groups who have a given permission
*
- * @param $role String Role to check
+ * @param string $role Role to check
* @return Array of Strings List of internal group names with the given permission
*/
public static function getGroupsWithPermission( $role ) {
/**
* Check, if the given group has the given permission
*
- * @param $group String Group to check
- * @param $role String Role to check
+ * @param string $group Group to check
+ * @param string $role Role to check
* @return bool
*/
public static function groupHasPermission( $group, $role ) {
/**
* Get the localized descriptive name for a group, if it exists
*
- * @param $group String Internal group name
+ * @param string $group Internal group name
* @return String Localized descriptive group name
*/
public static function getGroupName( $group ) {
/**
* Get the localized descriptive name for a member of a group, if it exists
*
- * @param $group String Internal group name
- * @param $username String Username for gender (since 1.19)
+ * @param string $group Internal group name
+ * @param string $username Username for gender (since 1.19)
* @return String Localized name for group member
*/
public static function getGroupMember( $group, $username = '#' ) {
/**
* Get the title of a page describing a particular group
*
- * @param $group String Internal group name
+ * @param string $group Internal group name
* @return Title|Bool Title of the page if it exists, false otherwise
*/
public static function getGroupPage( $group ) {
* Create a link to the group in HTML, if available;
* else return the group name.
*
- * @param $group String Internal name of the group
- * @param $text String The text of the link
+ * @param string $group Internal name of the group
+ * @param string $text The text of the link
* @return String HTML link to the group
*/
public static function makeGroupLinkHTML( $group, $text = '' ) {
* Create a link to the group in Wikitext, if available;
* else return the group name.
*
- * @param $group String Internal name of the group
- * @param $text String The text of the link
+ * @param string $group Internal name of the group
+ * @param string $text The text of the link
* @return String Wikilink to the group
*/
public static function makeGroupLinkWiki( $group, $text = '' ) {
/**
* Returns an array of the groups that a particular group can add/remove.
*
- * @param $group String: the group to check for whether it can add/remove
+ * @param string $group the group to check for whether it can add/remove
* @return Array array( 'add' => array( addablegroups ),
* 'remove' => array( removablegroups ),
* 'add-self' => array( addablegroups to self),
/**
* Get the description of a given right
*
- * @param $right String Right to query
+ * @param string $right Right to query
* @return String Localized description of the right
*/
public static function getRightDescription( $right ) {
/**
* Make an old-style password hash
*
- * @param $password String Plain-text password
- * @param $userId String User ID
+ * @param string $password Plain-text password
+ * @param string $userId User ID
* @return String Password hash
*/
public static function oldCrypt( $password, $userId ) {
/**
* Make a new-style password hash
*
- * @param $password String Plain-text password
+ * @param string $password Plain-text password
* @param bool|string $salt Optional salt, may be random or the user ID.
* If unspecified or false, will generate one automatically
* Compare a password hash with a plain-text password. Requires the user
* ID if there's a chance that the hash is an old-style hash.
*
- * @param $hash String Password hash
- * @param $password String Plain-text password to compare
- * @param $userId String|bool User ID for old-style password salt
+ * @param string $hash Password hash
+ * @param string $password Plain-text password to compare
+ * @param string|bool $userId User ID for old-style password salt
*
* @return Boolean
*/
* Add a newuser log entry for this user.
* Before 1.19 the return value was always true.
*
- * @param $action string|bool: account creation type.
+ * @param string|bool $action account creation type.
* - String, one of the following values:
* - 'create' for an anonymous user creating an account for himself.
* This will force the action's performer to be the created user itself,
* - false will be converted to 'create' if this object is the same as
* $wgUser and to 'create2' otherwise
*
- * @param $reason String: user supplied reason
+ * @param string $reason user supplied reason
*
* @return int|bool True if not $wgNewUserLog; otherwise ID of log item or 0 on failure
*/
/**
* Load the user options either from cache, the database or an array
*
- * @param $data array Rows for the current user out of the user_properties table
+ * @param array $data Rows for the current user out of the user_properties table
*/
protected function loadOptions( $data = null ) {
global $wgContLang;
*/
class MailAddress {
/**
- * @param $address string|User string with an email address, or a User object
- * @param $name String: human-readable name if a string address is given
- * @param $realName String: human-readable real name if a string address is given
+ * @param string|User $address string with an email address, or a User object
+ * @param string $name human-readable name if a string address is given
+ * @param string $realName human-readable real name if a string address is given
*/
function __construct( $address, $name = null, $realName = null ) {
if ( is_object( $address ) && $address instanceof User ) {
/**
* Creates a single string from an associative array
*
- * @param $headers array Associative Array: keys are header field names,
+ * @param array $headers Associative Array: keys are header field names,
* values are ... values.
- * @param $endl String: The end of line character. Defaults to "\n"
+ * @param string $endl The end of line character. Defaults to "\n"
*
* Note RFC2822 says newlines must be CRLF (\r\n)
* but php mail naively "corrects" it and requires \n for the "correction" to work
*
* @param $to MailAddress: recipient's email (or an array of them)
* @param $from MailAddress: sender's email
- * @param $subject String: email's subject.
- * @param $body String: email's text or Array of two strings to be the text and html bodies
+ * @param string $subject email's subject.
+ * @param string $body email's text or Array of two strings to be the text and html bodies
* @param $replyto MailAddress: optional reply-to email (default: null).
- * @param $contentType String: optional custom Content-Type (default: text/plain; charset=UTF-8)
+ * @param string $contentType optional custom Content-Type (default: text/plain; charset=UTF-8)
* @throws MWException
* @return Status object
*/
if ( is_array( $body ) ) {
// we are sending a multipart message
- wfDebug( "Assembling mulitpart mime email\n" );
+ wfDebug( "Assembling multipart mime email\n" );
if ( !stream_resolve_include_path( 'Mail/mime.php' ) ) {
wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" );
}
* Set the mail error message in self::$mErrorString
*
* @param $code Integer: error number
- * @param $string String: error message
+ * @param string $string error message
*/
static function errorHandler( $code, $string ) {
self::$mErrorString = preg_replace( '/^mail\(\)(\s*\[.*?\])?: /', '', $string );
return;
}
- // Build a list of users to notfiy
+ // Build a list of users to notify
$watchers = array();
if ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) {
$dbw = wfGetDB( DB_MASTER );
*
* @param $editor User object
* @param $title Title object
- * @param $timestamp string Edit timestamp
- * @param $summary string Edit summary
+ * @param string $timestamp Edit timestamp
+ * @param string $summary Edit summary
* @param $minorEdit bool
- * @param $oldid int Revision ID
- * @param $watchers array of user IDs
+ * @param int $oldid Revision ID
+ * @param array $watchers of user IDs
* @param string $pageStatus
* @throws MWException
*/
* @see newFromId()
* @see newFromName()
* @param $db DatabaseBase: db connection
- * @param $database String: database name
- * @param $name String: user name
+ * @param string $database database name
+ * @param string $name user name
* @param $id Integer: user ID
*/
private function __construct( $db, $database, $name, $id ) {
/**
* Confirm the selected database name is a valid local interwiki database name.
*
- * @param $database String: database name
+ * @param string $database database name
* @return Boolean
*/
public static function validDatabase( $database ) {
/**
* Same as User::whoIs()
*
- * @param $database String: database name
+ * @param string $database database name
* @param $id Integer: user ID
* @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases
* @return String: user name or false if the user doesn't exist
/**
* Factory function; get a remote user entry by ID number.
*
- * @param $database String: database name
+ * @param string $database database name
* @param $id Integer: user ID
* @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases
* @return UserRightsProxy or null if doesn't exist
/**
* Factory function; get a remote user entry by name.
*
- * @param $database String: database name
- * @param $name String: user name
+ * @param string $database database name
+ * @param string $name user name
* @param $ignoreInvalidDB Boolean: if true, don't check if $database is in $wgLocalDatabases
* @return UserRightsProxy or null if doesn't exist
*/
<?php
/**
- * Deal with importing all those nasssty globals and things
+ * Deal with importing all those nasty globals and things
*
* Copyright © 2003 Brion Vibber <brion@pobox.com>
* http://www.mediawiki.org/
* If the REQUEST_URI is not provided we'll fall back on the PATH_INFO
* provided by the server if any and use that to set a 'title' parameter.
*
- * @param $want string: If this is not 'all', then the function
+ * @param string $want If this is not 'all', then the function
* will return an empty array if it determines that the URL is
* inside a rewrite path.
*
* @return string
*/
public static function detectProtocol() {
- list( $proto, $stdPort ) = self::detectProtocolAndStdPort();
+ list( $proto, ) = self::detectProtocolAndStdPort();
return $proto;
}
* URL rewriting function; tries to extract page title and,
* optionally, one other fixed parameter value from a URL path.
*
- * @param $path string: the URL path given from the client
- * @param $bases array: one or more URLs, optionally with $1 at the end
- * @param $key string: if provided, the matching key in $bases will be
+ * @param string $path the URL path given from the client
+ * @param array $bases one or more URLs, optionally with $1 at the end
+ * @param string $key if provided, the matching key in $bases will be
* passed on as the value of this URL parameter
* @return array of URL variables to interpolate; empty if no match
*/
* Recursively strips slashes from the given array;
* used for undoing the evil that is magic_quotes_gpc.
*
- * @param $arr array: will be modified
- * @param $topLevel bool Specifies if the array passed is from the top
+ * @param array $arr will be modified
+ * @param bool $topLevel Specifies if the array passed is from the top
* level of the source. In PHP5 magic_quotes only escapes the first level
* of keys that belong to an array.
* @return array the original array
* selected by a drop-down menu). For freeform input, see getText().
*
* @param $name String
- * @param $default String: optional default (or NULL)
+ * @param string $default optional default (or NULL)
* @return String
*/
public function getVal( $name, $default = null ) {
/**
* Set an arbitrary value into our get/post data.
*
- * @param $key String: key name to use
+ * @param string $key key name to use
* @param $value Mixed: value to set
* @return Mixed: old value if one was present, null otherwise
*/
/**
* Unset an arbitrary value from our get/post data.
*
- * @param $key String: key name to use
+ * @param string $key key name to use
* @return Mixed: old value if one was present, null otherwise
*/
public function unsetVal( $key ) {
* If no source and no default, returns NULL.
*
* @param $name String
- * @param $default Array: optional default (or NULL)
+ * @param array $default optional default (or NULL)
* @return Array
*/
public function getArray( $name, $default = null ) {
* If an array is returned, contents are guaranteed to be integers.
*
* @param $name String
- * @param $default Array: option default (or NULL)
+ * @param array $default option default (or NULL)
* @return Array of ints
*/
public function getIntArray( $name, $default = null ) {
*/
public function getCheck( $name ) {
# Checkboxes and buttons are only present when clicked
- # Presence connotes truth, abscense false
+ # Presence connotes truth, absence false
return $this->getVal( $name, null ) !== null;
}
* be required - e.g. Esperanto x-coding).
*
* @param $name String
- * @param $default String: optional
+ * @param string $default optional
* @return String
*/
public function getText( $name, $default = '' ) {
/**
* Get a cookie from the $_COOKIE jar
*
- * @param $key String: the name of the cookie
- * @param $prefix String: a prefix to use for the cookie name, if not $wgCookiePrefix
+ * @param string $key the name of the cookie
+ * @param string $prefix a prefix to use for the cookie name, if not $wgCookiePrefix
* @param $default Mixed: what to return if the value isn't found
* @return Mixed: cookie value or $default if the cookie not set
*/
/**
* Take an arbitrary query and rewrite the present URL to include it
- * @param $query String: query string fragment; do not include initial '?'
+ * @param string $query query string fragment; do not include initial '?'
*
* @return String
*/
* HTML-safe version of appendQuery().
* @deprecated: Deprecated in 1.20, warnings in 1.21, remove in 1.22.
*
- * @param $query String: query string fragment; do not include initial '?'
+ * @param string $query query string fragment; do not include initial '?'
* @return String
*/
public function escapeAppendQuery( $query ) {
/**
* Appends or replaces value of query variables.
*
- * @param $array Array of values to replace/add to query
- * @param $onlyquery Bool: whether to only return the query string and not
+ * @param array $array of values to replace/add to query
+ * @param bool $onlyquery whether to only return the query string and not
* the complete URL
* @return String
*/
* Offset must be positive but is not capped.
*
* @param $deflimit Integer: limit to use if no input and the user hasn't set the option.
- * @param $optionname String: to specify an option other than rclimit to pull from.
+ * @param string $optionname to specify an option other than rclimit to pull from.
* @return array first element is limit, second is offset
*/
public function getLimitOffset( $deflimit = 50, $optionname = 'rclimit' ) {
/**
* Get a request header, or false if it isn't set
- * @param $name String: case-insensitive header name
+ * @param string $name case-insensitive header name
*
* @return string|bool False on failure
*/
/**
* Get data from $_SESSION
*
- * @param $key String: name of key in $_SESSION
+ * @param string $key name of key in $_SESSION
* @return Mixed
*/
public function getSessionData( $key ) {
/**
* Set session data
*
- * @param $key String: name of key in $_SESSION
+ * @param string $key name of key in $_SESSION
* @param $data Mixed
*/
public function setSessionData( $key, $data ) {
public function setIP( $ip ) {
$this->ip = $ip;
}
-
- /**
- * Export the resolved user IP, HTTP headers, and session ID.
- * The result will be reasonably sized to allow for serialization.
- *
- * @return Array
- * @since 1.21
- */
- public function exportUserSession() {
- return array(
- 'ip' => $this->getIP(),
- 'headers' => $this->getAllHeaders(),
- 'sessionId' => session_id()
- );
- }
}
/**
* Constructor. Should only be called by WebRequest
*
* @param $request WebRequest The associated request
- * @param $key string Key in $_FILES array (name of form field)
+ * @param string $key Key in $_FILES array (name of form field)
*/
public function __construct( $request, $key ) {
$this->request = $request;
private $session = array();
/**
- * @param $data Array of *non*-urlencoded key => value pairs, the
+ * @param array $data of *non*-urlencoded key => value pairs, the
* fake GET/POST values
- * @param $wasPosted Bool: whether to treat the data as POST
+ * @param bool $wasPosted whether to treat the data as POST
* @param $session Mixed: session array or null
* @throws MWException
*/
/**
* Output a HTTP header, wrapper for PHP's
* header()
- * @param $string String: header to output
- * @param $replace Bool: replace current similar header
+ * @param string $string header to output
+ * @param bool $replace replace current similar header
* @param $http_response_code null|int Forces the HTTP response code to the specified value.
*/
public function header( $string, $replace = true, $http_response_code = null ) {
/**
* Set the browser cookie
- * @param $name String: name of cookie
- * @param $value String: value to give cookie
- * @param $expire Int: Unix timestamp (in seconds) when the cookie should expire.
+ * @param string $name name of cookie
+ * @param string $value value to give cookie
+ * @param int $expire Unix timestamp (in seconds) when the cookie should expire.
* 0 (the default) causes it to expire $wgCookieExpiration seconds from now.
- * @param $prefix String: Prefix to use, if not $wgCookiePrefix (use '' for no prefix)
- * @param $domain String: Cookie domain to use, if not $wgCookieDomain
+ * @param string $prefix Prefix to use, if not $wgCookiePrefix (use '' for no prefix)
+ * @param string $domain Cookie domain to use, if not $wgCookieDomain
* @param $forceSecure Bool:
* true: force the cookie to be set with the secure attribute
* false: force the cookie to be set without the secure attribute
/**
* Stores a HTTP header
- * @param $string String: header to output
- * @param $replace Bool: replace current similar header
+ * @param string $string header to output
+ * @param bool $replace replace current similar header
* @param $http_response_code null|int Forces the HTTP response code to the specified value.
*/
public function header( $string, $replace = true, $http_response_code = null ) {
/**
* @todo document. It just ignore optional parameters.
*
- * @param $name String: name of cookie
- * @param $value String: value to give cookie
- * @param $expire Int: number of seconds til cookie expires (Default: 0)
+ * @param string $name name of cookie
+ * @param string $value value to give cookie
+ * @param int $expire number of seconds til cookie expires (Default: 0)
* @param $prefix TODO DOCUMENT (Default: null)
* @param $domain TODO DOCUMENT (Default: null)
* @param $forceSecure TODO DOCUMENT (Default: null)
}
}
-# bug 15461: Make IE8 turn off content sniffing. Everbody else should ignore this
+# bug 15461: Make IE8 turn off content sniffing. Everybody else should ignore this
# We're adding it here so that it's *always* set, even for alternate entry
# points and when $wgOut gets disabled or overridden.
header( 'X-Content-Type-Options: nosniff' );
// Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
} elseif ( $request->getVal( 'action', 'view' ) == 'view' && !$request->wasPosted()
&& ( $request->getVal( 'title' ) === null ||
- $title->getPrefixedDBKey() != $request->getVal( 'title' ) )
+ $title->getPrefixedDBkey() != $request->getVal( 'title' ) )
&& !count( $request->getValueNames( array( 'action', 'title' ) ) )
&& wfRunHooks( 'TestCanonicalRedirect', array( $request, $title, $output ) ) )
{
*/
class WikiErrorMsg extends WikiError {
/**
- * @param $message String: wiki message name
+ * @param string $message wiki message name
* @param ... parameters to pass to wfMsg()
*
* @deprecated since 1.17
/**
* @return bool
*/
- public function isRedirect( ) {
+ public function isRedirect() {
$this->loadFile();
if ( $this->mFile->isLocal() ) {
return parent::isRedirect();
/**
* Get a WikiReference object for $wikiID
*
- * @param $wikiID String: wiki'd id (generally database name)
+ * @param string $wikiID wiki'd id (generally database name)
* @return WikiReference object or null if the wiki was not found
*/
public static function getWiki( $wikiID ) {
* Convenience to get the wiki's display name
*
* @todo We can give more info than just the wiki id!
- * @param $wikiID String: wiki'd id (generally database name)
+ * @param string $wikiID wiki'd id (generally database name)
* @return string|int Wiki's name or $wiki_id if the wiki was not found
*/
public static function getWikiName( $wikiID ) {
/**
* Convenience to get a link to a user page on a foreign wiki
*
- * @param $wikiID String: wiki'd id (generally database name)
- * @param $user String: user name (must be normalised before calling this function!)
- * @param $text String: link's text; optional, default to "User:$user"
+ * @param string $wikiID wiki'd id (generally database name)
+ * @param string $user user name (must be normalised before calling this function!)
+ * @param string $text link's text; optional, default to "User:$user"
* @return String: HTML link or false if the wiki was not found
*/
public static function foreignUserLink( $wikiID, $user, $text=null ) {
/**
* Convenience to get a link to a page on a foreign wiki
*
- * @param $wikiID String: wiki'd id (generally database name)
- * @param $page String: page name (must be normalised before calling this function!)
- * @param $text String: link's text; optional, default to $page
+ * @param string $wikiID wiki'd id (generally database name)
+ * @param string $page page name (must be normalised before calling this function!)
+ * @param string $text link's text; optional, default to $page
* @return String: HTML link or false if the wiki was not found
*/
public static function makeForeignLink( $wikiID, $page, $text=null ) {
/**
* Convenience to get a url to a page on a foreign wiki
*
- * @param $wikiID String: wiki'd id (generally database name)
- * @param $page String: page name (must be normalised before calling this function!)
+ * @param string $wikiID wiki'd id (generally database name)
+ * @param string $page page name (must be normalised before calling this function!)
* @return String: URL or false if the wiki was not found
*/
public static function getForeignURL( $wikiID, $page ) {
* Helper function for getUrl()
*
* @todo FIXME: This may be generalized...
- * @param $page String: page name (must be normalised before calling this function!)
+ * @param string $page page name (must be normalised before calling this function!)
* @return String: Url fragment
*/
private function getLocalUrl( $page ) {
/**
* Get a canonical (i.e. based on $wgCanonicalServer) URL to a page on this foreign wiki
*
- * @param $page String: page name (must be normalised before calling this function!)
+ * @param string $page page name (must be normalised before calling this function!)
* @return String: Url
*/
public function getCanonicalUrl( $page ) {
* Get a URL based on $wgServer, like Title::getFullUrl() would produce
* when called locally on the wiki.
*
- * @param $page String: page name (must be normalized before calling this function!)
+ * @param string $page page name (must be normalized before calling this function!)
* @return String: URL
*/
public function getFullUrl( $page ) {
/**
* Constructor from a page id
*
- * @param $id Int article ID to load
- * @param $from string|int one of the following values:
+ * @param int $id article ID to load
+ * @param string|int $from one of the following values:
* - "fromdb" or WikiPage::READ_NORMAL to select from a slave database
* - "fromdbmaster" or WikiPage::READ_LATEST to select from the master database
*
* @since 1.20
* @param $row object: database row containing at least fields returned
* by selectFields().
- * @param $from string|int: source of $data:
+ * @param string|int $from source of $data:
* - "fromdb" or WikiPage::READ_NORMAL: from a slave DB
* - "fromdbmaster" or WikiPage::READ_LATEST: from the master DB
* - "forupdate" or WikiPage::READ_LOCKING: from the master DB using SELECT FOR UPDATE
$data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
} elseif ( $from === self::READ_NORMAL ) {
$data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
- // Use a "last rev inserted" timestamp key to dimish the issue of slave lag.
+ // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
// Note that DB also stores the master position in the session and checks it.
$touched = $this->getCachedLastEditTime();
if ( $touched ) { // key set
* @since 1.20
* @param $data object: database row containing at least fields returned
* by selectFields()
- * @param $from string|int One of the following:
+ * @param string|int $from One of the following:
* - "fromdb" or WikiPage::READ_NORMAL if the data comes from a slave DB
* - "fromdbmaster" or WikiPage::READ_LATEST if the data comes from the master DB
* - "forupdate" or WikiPage::READ_LOCKING if the data comes from from
*/
public function loadFromRow( $data, $from ) {
$lc = LinkCache::singleton();
+ $lc->clearLink( $this->mTitle );
if ( $data ) {
$lc->addGoodLinkObjFromRow( $this->mTitle, $data );
*
* @return bool
*/
- public function isRedirect( ) {
+ public function isRedirect() {
$content = $this->getContent();
if ( !$content ) return false;
/**
* Set the page timestamp (use only to avoid DB queries)
- * @param $ts string MW timestamp of last article revision
+ * @param string $ts MW timestamp of last article revision
* @return void
*/
public function setTimestamp( $ts ) {
$content = $this->getContent();
}
- if ( !$content || $content->isRedirect( ) ) {
+ if ( !$content || $content->isRedirect() ) {
return false;
}
/**
* Get the last N authors
* @param $num Integer: number of revisions to get
- * @param $revLatest String: the latest rev_id, selected from the master (optional)
+ * @param string $revLatest the latest rev_id, selected from the master (optional)
* @return array Array of authors, duplicates not removed
*/
public function getLastNAuthors( $num, $revLatest = 0 ) {
/**
* @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
- * @param $text String: new text of the section
- * @param $sectionTitle String: new section's subject, only if $section is 'new'
- * @param $edittime String: revision timestamp or null to use the current revision
+ * @param string $text new text of the section
+ * @param string $sectionTitle new section's subject, only if $section is 'new'
+ * @param string $edittime revision timestamp or null to use the current revision
* @throws MWException
* @return String new complete article text, or null if error
*
/**
* @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
* @param $sectionContent Content: new content of the section
- * @param $sectionTitle String: new section's subject, only if $section is 'new'
- * @param $edittime String: revision timestamp or null to use the current revision
+ * @param string $sectionTitle new section's subject, only if $section is 'new'
+ * @param string $edittime revision timestamp or null to use the current revision
*
* @throws MWException
* @return Content new complete article content, or null if error
* Change an existing article or create a new article. Updates RC and all necessary caches,
* optionally via the deferred update array.
*
- * @param $text String: new text
- * @param $summary String: edit summary
+ * @param string $text new text
+ * @param string $summary edit summary
* @param $flags Integer bitfield:
* EDIT_NEW
* Article is known or assumed to be non-existent, create a new one
* optionally via the deferred update array.
*
* @param $content Content: new content
- * @param $summary String: edit summary
+ * @param string $summary edit summary
* @param $flags Integer bitfield:
* EDIT_NEW
* Article is known or assumed to be non-existent, create a new one
*
* @param $revision Revision object
* @param $user User object that did the revision
- * @param $options Array of options, following indexes are used:
+ * @param array $options of options, following indexes are used:
* - changed: boolean, whether the revision changed the content (default true)
* - created: boolean, whether the revision created the page (default false)
* - oldcountable: boolean or null (default null):
* The article must already exist; link tables etc
* are not updated, caches are not flushed.
*
- * @param $text String: text submitted
+ * @param string $text text submitted
* @param $user User The relevant user
- * @param $comment String: comment submitted
+ * @param string $comment comment submitted
* @param $minor Boolean: whereas it's a minor modification
*
* @deprecated since 1.21, use doEditContent() instead.
*
* @param $content Content: content submitted
* @param $user User The relevant user
- * @param $comment String: comment submitted
+ * @param string $comment comment submitted
* @param $serialisation_format String: format for storing the content in the database
* @param $minor Boolean: whereas it's a minor modification
*/
* Update the article's restriction field, and leave a log entry.
* This works for protection both existing and non-existing pages.
*
- * @param $limit Array: set of restriction keys
+ * @param array $limit set of restriction keys
* @param $reason String
* @param &$cascade Integer. Set to false if cascading protection isn't allowed.
- * @param $expiry Array: per restriction type expiration
+ * @param array $expiry per restriction type expiration
* @param $user User The user updating the restrictions
* @return Status
*/
$changed = true;
}
- // If nothing's changed, do nothing
+ // If nothing has changed, do nothing
if ( !$changed ) {
return Status::newGood();
}
*
* Deletes the article with database consistency, writes logs, purges caches
*
- * @param $reason string delete reason for deletion log
+ * @param string $reason delete reason for deletion log
* @param $suppress boolean suppress all revisions and log the deletion in
* the suppression log instead of the deletion log
- * @param $id int article ID
+ * @param int $id article ID
* @param $commit boolean defaults to true, triggers transaction end
* @param &$error Array of errors to append to
* @param $user User The deleting user
*
* @since 1.19
*
- * @param $reason string delete reason for deletion log
+ * @param string $reason delete reason for deletion log
* @param $suppress boolean suppress all revisions and log the deletion in
* the suppression log instead of the deletion log
- * @param $id int article ID
+ * @param int $id article ID
* @param $commit boolean defaults to true, triggers transaction end
* @param &$error Array of errors to append to
* @param $user User The deleting user
/**
* Do some database updates after deletion
*
- * @param $id Int: page_id value of the page being deleted (B/C, currently unused)
+ * @param int $id page_id value of the page being deleted (B/C, currently unused)
* @param $content Content: optional page content to be used when determining the required updates.
* This may be needed because $this->getContent() may already return null when the page proper was deleted.
*/
* performs permissions checks on $user, then calls commitRollback()
* to do the dirty work
*
- * @todo: seperate the business/permission stuff out from backend code
+ * @todo: separate the business/permission stuff out from backend code
*
- * @param $fromP String: Name of the user whose edits to rollback.
- * @param $summary String: Custom summary. Set to default summary if empty.
- * @param $token String: Rollback token.
+ * @param string $fromP Name of the user whose edits to rollback.
+ * @param string $summary Custom summary. Set to default summary if empty.
+ * @param string $token Rollback token.
* @param $bot Boolean: If true, mark all reverted edits as bot.
*
- * @param $resultDetails Array: contains result-specific array of additional values
+ * @param array $resultDetails contains result-specific array of additional values
* 'alreadyrolled' : 'current' (rev)
* success : 'summary' (str), 'current' (rev), 'target' (rev)
*
* rollback to the DB. Therefore, you should only call this function direct-
* ly if you want to use custom permissions checks. If you don't, use
* doRollback() instead.
- * @param $fromP String: Name of the user whose edits to rollback.
- * @param $summary String: Custom summary. Set to default summary if empty.
+ * @param string $fromP Name of the user whose edits to rollback.
+ * @param string $summary Custom summary. Set to default summary if empty.
* @param $bot Boolean: If true, mark all reverted edits as bot.
*
- * @param $resultDetails Array: contains result-specific array of additional values
+ * @param array $resultDetails contains result-specific array of additional values
* @param $guser User The user performing the rollback
* @return array
*/
/**
* Return an applicable autosummary if one exists for the given edit.
- * @param $oldtext String|null: the previous text of the page.
- * @param $newtext String|null: The submitted text of the page.
- * @param $flags Int bitmask: a bitmask of flags submitted for the edit.
+ * @param string|null $oldtext the previous text of the page.
+ * @param string|null $newtext The submitted text of the page.
+ * @param int $flags bitmask: a bitmask of flags submitted for the edit.
* @return string An appropriate autosummary, or an empty string.
*
* @deprecated since 1.21, use ContentHandler::getAutosummary() instead
* Update all the appropriate counts in the category table, given that
* we've added the categories $added and deleted the categories $deleted.
*
- * @param $added array The names of categories that were added
- * @param $deleted array The names of categories that were deleted
+ * @param array $added The names of categories that were added
+ * @param array $deleted The names of categories that were deleted
*/
public function updateCategoryCounts( $added, $deleted ) {
$ns = $this->mTitle->getNamespace();
* so we can do things like signatures and links-in-context.
*
* @deprecated in 1.19; use Parser::preSaveTransform() instead
- * @param $text String article contents
+ * @param string $text article contents
* @param $user User object: user doing the edit
* @param $popts ParserOptions object: parser options, default options for
* the user loaded if null given
* Update the article's restriction field, and leave a log entry.
*
* @deprecated since 1.19
- * @param $limit Array: set of restriction keys
+ * @param array $limit set of restriction keys
* @param $reason String
* @param &$cascade Integer. Set to false if cascading protection isn't allowed.
- * @param $expiry Array: per restriction type expiration
+ * @param array $expiry per restriction type expiration
* @param $user User The user updating the restrictions
* @return bool true on success
*/
* Strings are assumed to not contain XML-illegal characters; special
* characters (<, >, &) are escaped but illegals are not touched.
*
- * @param $element String: element name
- * @param $attribs Array: Name=>value pairs. Values will be escaped.
- * @param $contents String: NULL to make an open tag only; '' for a contentless closed tag (default)
- * @param $allowShortTag Bool: whether '' in $contents will result in a contentless closed tag
+ * @param string $element element name
+ * @param array $attribs Name=>value pairs. Values will be escaped.
+ * @param string $contents NULL to make an open tag only; '' for a contentless closed tag (default)
+ * @param bool $allowShortTag whether '' in $contents will result in a contentless closed tag
* @return string
*/
public static function element( $element, $attribs = null, $contents = '', $allowShortTag = true ) {
* to set the XML attributes : attributename="value".
* The values are passed to Sanitizer::encodeAttribute.
* Return null if no attributes given.
- * @param $attribs Array of attributes for an XML element
+ * @param array $attribs of attributes for an XML element
* @throws MWException
* @return null|string
*/
* is passed.
*
* @param $element String:
- * @param $attribs Array: Name=>value pairs. Values will be escaped.
- * @param $contents String: NULL to make an open tag only; '' for a contentless closed tag (default)
+ * @param array $attribs Name=>value pairs. Values will be escaped.
+ * @param string $contents NULL to make an open tag only; '' for a contentless closed tag (default)
* @return string
*/
public static function elementClean( $element, $attribs = array(), $contents = '' ) {
/**
* This opens an XML element
*
- * @param $element String name of the element
- * @param $attribs array of attributes, see Xml::expandAttributes()
+ * @param string $element name of the element
+ * @param array $attribs of attributes, see Xml::expandAttributes()
* @return string
*/
public static function openElement( $element, $attribs = null ) {
/**
* Shortcut to close an XML element
- * @param $element String element name
+ * @param string $element element name
* @return string
*/
public static function closeElement( $element ) { return "</$element>"; }
* Same as Xml::element(), but does not escape contents. Handy when the
* content you have is already valid xml.
*
- * @param $element String element name
- * @param $attribs array of attributes
- * @param $contents String content of the element
+ * @param string $element element name
+ * @param array $attribs of attributes
+ * @param string $contents content of the element
* @return string
*/
public static function tags( $element, $attribs = null, $contents ) {
* @param $selected Mixed: Namespace which should be pre-selected
* @param $all Mixed: Value of an item denoting all namespaces, or null to omit
* @param $element_name String: value of the "name" attribute of the select tag
- * @param $label String: optional label to add to the field
+ * @param string $label optional label to add to the field
* @return string
* @deprecated since 1.19
*/
* Create a date selector
*
* @param $selected Mixed: the month which should be selected, default ''
- * @param $allmonths String: value of a special item denoting all month. Null to not include (default)
- * @param $id String: Element identifier
+ * @param string $allmonths value of a special item denoting all month. Null to not include (default)
+ * @param string $id Element identifier
* @return String: Html string containing the month selector
*/
public static function monthSelector( $selected = '', $allmonths = null, $id = 'month' ) {
/**
* Shortcut to make a span element
- * @param $text String content of the element, will be escaped
- * @param $class String class name of the span element
- * @param $attribs array other attributes
+ * @param string $text content of the element, will be escaped
+ * @param string $class class name of the span element
+ * @param array $attribs other attributes
* @return string
*/
public static function span( $text, $class, $attribs = array() ) {
/**
* Shortcut to make a specific element with a class attribute
- * @param $text string content of the element, will be escaped
- * @param $class string class name of the span element
- * @param $tag string element name
- * @param $attribs array other attributes
+ * @param string $text content of the element, will be escaped
+ * @param string $class class name of the span element
+ * @param string $tag element name
+ * @param array $attribs other attributes
* @return string
*/
public static function wrapClass( $text, $class, $tag = 'span', $attribs = array() ) {
/**
* Convenience function to build an HTML text input field
- * @param $name String value of the name attribute
- * @param $size int value of the size attribute
+ * @param string $name value of the name attribute
+ * @param int $size value of the size attribute
* @param $value mixed value of the value attribute
- * @param $attribs array other attributes
+ * @param array $attribs other attributes
* @return string HTML
*/
public static function input( $name, $size = false, $value = false, $attribs = array() ) {
/**
* Convenience function to build an HTML password input field
- * @param $name string value of the name attribute
- * @param $size int value of the size attribute
+ * @param string $name value of the name attribute
+ * @param int $size value of the size attribute
* @param $value mixed value of the value attribute
- * @param $attribs array other attributes
+ * @param array $attribs other attributes
* @return string HTML
*/
public static function password( $name, $size = false, $value = false, $attribs = array() ) {
/**
* Convenience function to build an HTML checkbox
- * @param $name String value of the name attribute
- * @param $checked Bool Whether the checkbox is checked or not
- * @param $attribs Array other attributes
+ * @param string $name value of the name attribute
+ * @param bool $checked Whether the checkbox is checked or not
+ * @param array $attribs other attributes
* @return string HTML
*/
public static function check( $name, $checked = false, $attribs=array() ) {
/**
* Convenience function to build an HTML radio button
- * @param $name String value of the name attribute
- * @param $value String value of the value attribute
- * @param $checked Bool Whether the checkbox is checked or not
- * @param $attribs Array other attributes
+ * @param string $name value of the name attribute
+ * @param string $value value of the value attribute
+ * @param bool $checked Whether the checkbox is checked or not
+ * @param array $attribs other attributes
* @return string HTML
*/
public static function radio( $name, $value, $checked = false, $attribs = array() ) {
/**
* Convenience function to build an HTML form label
- * @param $label String text of the label
+ * @param string $label text of the label
* @param $id
- * @param $attribs Array an attribute array. This will usuall be
+ * @param array $attribs an attribute array. This will usually be
* the same array as is passed to the corresponding input element,
* so this function will cherry-pick appropriate attributes to
* apply to the label as well; only class and title are applied.
/**
* Convenience function to build an HTML text input field with a label
- * @param $label String text of the label
- * @param $name String value of the name attribute
- * @param $id String id of the input
- * @param $size Int|Bool value of the size attribute
- * @param $value String|Bool value of the value attribute
- * @param $attribs array other attributes
+ * @param string $label text of the label
+ * @param string $name value of the name attribute
+ * @param string $id id of the input
+ * @param int|Bool $size value of the size attribute
+ * @param string|Bool $value value of the value attribute
+ * @param array $attribs other attributes
* @return string HTML
*/
public static function inputLabel( $label, $name, $id, $size=false, $value=false, $attribs = array() ) {
/**
* Convenience function to build an HTML submit button
- * @param $value String: label text for the button
- * @param $attribs Array: optional custom attributes
+ * @param string $value label text for the button
+ * @param array $attribs optional custom attributes
* @return string HTML
*/
public static function submitButton( $value, $attribs = array() ) {
/**
* Convenience function to build an HTML drop-down list item.
- * @param $text String: text for this item
- * @param $value String: form submission value; if empty, use text
+ * @param string $text text for this item
+ * @param string $value form submission value; if empty, use text
* @param $selected boolean: if true, will be the default selected item
- * @param $attribs array: optional additional HTML attributes
+ * @param array $attribs optional additional HTML attributes
* @return string HTML
*/
public static function option( $text, $value=null, $selected = false,
/**
* Shortcut for creating fieldsets.
*
- * @param $legend string|bool Legend of the fieldset. If evaluates to false, legend is not added.
- * @param $content string Pre-escaped content for the fieldset. If false, only open fieldset is returned.
- * @param $attribs array Any attributes to fieldset-element.
+ * @param string|bool $legend Legend of the fieldset. If evaluates to false, legend is not added.
+ * @param string $content Pre-escaped content for the fieldset. If false, only open fieldset is returned.
+ * @param array $attribs Any attributes to fieldset-element.
*
* @return string
*/
/**
* Shortcut for creating textareas.
*
- * @param $name string The 'name' for the textarea
- * @param $content string Content for the textarea
- * @param $cols int The number of columns for the textarea
- * @param $rows int The number of rows for the textarea
- * @param $attribs array Any other attributes for the textarea
+ * @param string $name The 'name' for the textarea
+ * @param string $content Content for the textarea
+ * @param int $cols The number of columns for the textarea
+ * @param int $rows The number of rows for the textarea
+ * @param array $attribs Any other attributes for the textarea
*
* @return string
*/
* for JavaScript source code.
* Illegal control characters are assumed not to be present.
*
- * @param $string String to escape
+ * @param string $string to escape
* @return String
*/
public static function escapeJsString( $string ) {
* Create a call to a JavaScript function. The supplied arguments will be
* encoded using Xml::encodeJsVar().
*
- * @param $name String The name of the function to call, or a JavaScript expression
+ * @param string $name The name of the function to call, or a JavaScript expression
* which evaluates to a function object which is called.
- * @param $args Array of arguments to pass to the function.
+ * @param array $args of arguments to pass to the function.
*
* @since 1.17
*
* Check if a string is well-formed XML.
* Must include the surrounding tag.
*
- * @param $text String: string to test.
+ * @param string $text string to test.
* @return bool
*
* @todo Error position reporting return
* Replace " > and < with their respective HTML entities ( ",
* >, <)
*
- * @param $in String: text that might contain HTML tags.
+ * @param string $in text that might contain HTML tags.
* @return string Escaped string
*/
public static function escapeTagsOnly( $in ) {
/**
* Generate a form (without the opening form element).
* Output optionally includes a submit button.
- * @param $fields Array Associative array, key is message corresponding to a description for the field (colon is in the message), value is appropriate input.
- * @param $submitLabel String A message containing a label for the submit button.
+ * @param array $fields Associative array, key is message corresponding to a description for the field (colon is in the message), value is appropriate input.
+ * @param string $submitLabel A message containing a label for the submit button.
* @return string HTML form.
*/
public static function buildForm( $fields, $submitLabel = null ) {
/**
* Build a table of data
- * @param $rows array An array of arrays of strings, each to be a row in a table
- * @param $attribs array An array of attributes to apply to the table tag [optional]
- * @param $headers array An array of strings to use as table headers [optional]
+ * @param array $rows An array of arrays of strings, each to be a row in a table
+ * @param array $attribs An array of attributes to apply to the table tag [optional]
+ * @param array $headers An array of strings to use as table headers [optional]
* @return string
*/
public static function buildTable( $rows, $attribs = array(), $headers = null ) {
/**
* Build a row for a table
- * @param $attribs array An array of attributes to apply to the tr tag
- * @param $cells array An array of strings to put in <td>
+ * @param array $attribs An array of attributes to apply to the tr tag
+ * @param array $cells An array of strings to put in <td>
* @return string
*/
public static function buildTableRow( $attribs, $cells ) {
public $rootElement = '';
/**
- * @param $file string filename
+ * @param string $file filename
* @param $filterCallback callable (optional)
* Function to call to do additional custom validity checks from the
* SAX element handler event. This gives you access to the element
}
/**
- * Establish conncetion
+ * Establish connection
*
* @access private
*
/**
* Convert the input to a different language variant
*
- * @param $text String: input text
- * @param $tolang String: language variant
+ * @param string $text input text
+ * @param string $tolang language variant
* @return string the converted text
*/
function convert( $text, $tolang ) {
/**
* Convert the input to all possible variants
*
- * @param $text String: input text
+ * @param string $text input text
* @return array langcode => converted_string
*/
function convertToAllVariants( $text ) {
/**
* Perform word segmentation
*
- * @param $text String: input text
+ * @param string $text input text
* @return string segmented text
*/
function segment( $text ) {
* suspicious or ambiguous input, instead of emulating some standard
* behavior.
*
- * @param $fileName string The archive file name
- * @param $callback Array The callback function. It will be called for each file
+ * @param string $fileName The archive file name
+ * @param array $callback The callback function. It will be called for each file
* with a single associative array each time, with members:
*
* - name: The file name. Directories conventionally have a trailing
*
* - size: The uncompressed file size
*
- * @param $options Array An associative array of read options, with the option
+ * @param array $options An associative array of read options, with the option
* name in the key. This may currently contain:
*
* - zip64: If this is set to true, then we will emulate a
* Get the file contents from a given offset. If there are not enough bytes
* in the file to satisfy the request, an exception will be thrown.
*
- * @param $start int The byte offset of the start of the block.
- * @param $length int The number of bytes to return. If omitted, the remainder
+ * @param int $start The byte offset of the start of the block.
+ * @param int $length The number of bytes to return. If omitted, the remainder
* of the file will be returned.
*
* @return string
* of length self::SEGSIZE. The result is cached. This is a helper function
* for getBlock().
*
- * If there are not enough bytes in the file to satsify the request, the
+ * If there are not enough bytes in the file to satisfy the request, the
* return value will be truncated. If a request is made for a segment beyond
* the end of the file, an empty string will be returned.
* @return string
$size = 0;
foreach ( $struct as $type ) {
if ( is_array( $type ) ) {
- list( $typeName, $fieldSize ) = $type;
+ list( , $fieldSize ) = $type;
$size += $fieldSize;
} else {
$size += $type;
* Unpack a binary structure. This is like the built-in unpack() function
* except nicer.
*
- * @param $string string The binary data input
+ * @param string $string The binary data input
*
- * @param $struct array An associative array giving structure members and their
+ * @param array $struct An associative array giving structure members and their
* types. In the key is the field name. The value may be either an
* integer, in which case the field is a little-endian unsigned integer
* encoded in the given number of bytes, or an array, in which case the
* - "string": The second array element gives the length of string.
* Not null terminated.
*
- * @param $offset int The offset into the string at which to start unpacking.
+ * @param int $offset The offset into the string at which to start unpacking.
*
* @throws MWException
* @return array Unpacked associative array. Note that large integers in the input
* boolean.
*
* @param $value integer
- * @param $bitIndex int The index of the bit, where 0 is the LSB.
+ * @param int $bitIndex The index of the bit, where 0 is the LSB.
* @return bool
*/
function testBit( $value, $bitIndex ) {
<?php
-
/**
* Abstract action class with scaffolding for caching HTML and other values
* in a single blob.
*
- * Before using any of the caching functionality, call startCache.
- * After the last call to either getCachedValue or addCachedHTML, call saveCache.
- *
- * To get a cached value or compute it, use getCachedValue like this:
- * $this->getCachedValue( $callback );
- *
- * To add HTML that should be cached, use addCachedHTML like this:
- * $this->addCachedHTML( $callback );
- *
- * The callback function is only called when needed, so do all your expensive
- * computations here. This function should returns the HTML to be cached.
- * It should not add anything to the PageOutput object!
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @ingroup Action
+ * @ingroup Actions
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @since 1.20
*/
+
+/**
+ * Abstract action class with scaffolding for caching HTML and other values
+ * in a single blob.
+ *
+ * Before using any of the caching functionality, call startCache.
+ * After the last call to either getCachedValue or addCachedHTML, call saveCache.
+ *
+ * To get a cached value or compute it, use getCachedValue like this:
+ * $this->getCachedValue( $callback );
+ *
+ * To add HTML that should be cached, use addCachedHTML like this:
+ * $this->addCachedHTML( $callback );
+ *
+ * The callback function is only called when needed, so do all your expensive
+ * computations here. This function should returns the HTML to be cached.
+ * It should not add anything to the PageOutput object!
+ *
+ * @ingroup Actions
+ */
abstract class CachedAction extends FormlessAction implements ICacheHelper {
/**
* @author <evan@wikitravel.org>
*/
+/**
+ * @ingroup Actions
+ */
class CreditsAction extends FormlessAction {
public function getName() {
/**
* Get a list of contributors
*
- * @param $cnt Int: maximum list of contributors to show
- * @param $showIfMax Bool: whether to contributors if there more than $cnt
+ * @param int $cnt maximum list of contributors to show
+ * @param bool $showIfMax whether to contributors if there more than $cnt
* @return String: html
*/
public function getCredits( $cnt, $showIfMax = true ) {
/**
* Get a list of contributors of $article
- * @param $cnt Int: maximum list of contributors to show
- * @param $showIfMax Bool: whether to contributors if there more than $cnt
+ * @param int $cnt maximum list of contributors to show
+ * @param bool $showIfMax whether to contributors if there more than $cnt
* @return String: html
*/
protected function getContributors( $cnt, $showIfMax ) {
* @author Timo Tijhof
*/
+/**
+ * Handle page deletion
+ *
+ * This is a wrapper that will call Article::delete().
+ *
+ * @ingroup Actions
+ */
class DeleteAction extends FormlessAction {
public function getName() {
* @author Timo Tijhof
*/
+/**
+ * Page edition handler
+ *
+ * This is a wrapper that will call the EditPage class, or ExternalEdit
+ * if $wgUseExternalEditor is set to true and requested by the user.
+ *
+ * @ingroup Actions
+ */
class EditAction extends FormlessAction {
public function getName() {
}
+/**
+ * Edit submission handler
+ *
+ * This is the same as EditAction; except that it sets the session cookie.
+ *
+ * @ingroup Actions
+ */
class SubmitAction extends EditAction {
public function getName() {
* http://www.gnu.org/copyleft/gpl.html
*
* @file
+ * @ingroup Actions
*/
/**
* Construct it by passing in an Article, and call $h->history() to print the
* history.
*
+ * @ingroup Actions
*/
class HistoryAction extends FormlessAction {
const DIR_PREV = 0;
false,
array( 'id' => 'mw-history-search' )
) .
- Html::hidden( 'title', $this->getTitle()->getPrefixedDBKey() ) . "\n" .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
Html::hidden( 'action', 'history' ) . "\n" .
Xml::dateMenu( ( $year == null ? date( "Y" ) : $year ), $month ) . ' ' .
( $tagSelector ? ( implode( ' ', $tagSelector ) . ' ' ) : '' ) .
'</fieldset></form>'
);
- wfRunHooks( 'PageHistoryBeforeList', array( &$this->page ) );
+ wfRunHooks( 'PageHistoryBeforeList', array( &$this->page, $this->getContext() ) );
// Create and output the list.
$pager = new HistoryPager( $this, $year, $month, $tagFilter, $conds );
/**
* Output a subscription feed listing recent edits to this page.
*
- * @param $type String: feed type
+ * @param string $type feed type
*/
function feed( $type ) {
global $wgFeedClasses, $wgFeedLimit;
/**
* @ingroup Pager
+ * @ingroup Actions
*/
class HistoryPager extends ReverseChronologicalPager {
public $lastRow = false, $counter, $historyPage, $buttons, $conds;
$this->getOutput()->wrapWikiMsg( "<div class='mw-history-legend'>\n$1\n</div>", 'histlegend' );
$s = Html::openElement( 'form', array( 'action' => $wgScript,
'id' => 'mw-history-compare' ) ) . "\n";
- $s .= Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) . "\n";
+ $s .= Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n";
$s .= Html::hidden( 'action', 'historysubmit' ) . "\n";
// Button container stored in $this->buttons for re-use in getEndBody()
/**
* Creates a submit button
*
- * @param $message String: text of the submit button, will be escaped
- * @param $attributes Array: attributes
+ * @param string $message text of the submit button, will be escaped
+ * @param array $attributes attributes
* @return String: HTML output for the submit button
*/
function submitButton( $message, $attributes = array() ) {
// Otherwise, show the link...
} else {
$query = array( 'type' => 'revision',
- 'target' => $this->getTitle()->getPrefixedDbkey(), 'ids' => $rev->getId() );
+ 'target' => $this->getTitle()->getPrefixedDBkey(), 'ids' => $rev->getId() );
$del .= Linker::revDeleteLink( $query,
$rev->isDeleted( Revision::DELETED_RESTRICTED ), false );
}
$tools[] = "<span class=\"mw-history-undo\">{$undolink}</span>";
}
}
+ // Allow extension to add their own links here
+ wfRunHooks( 'HistoryRevisionTools', array( $rev, &$tools ) );
if ( $tools ) {
$s2 .= ' '. $this->msg( 'parentheses' )->rawParams( $lang->pipeList( $tools ) )->escaped();
* @ingroup Actions
*/
+/**
+ * Displays information about a page.
+ *
+ * @ingroup Actions
+ */
class InfoAction extends FormlessAction {
/**
* Returns the name of the action this object responds to.
/**
* Adds a row to a table that will be added to the content.
*
- * @param $table string The table that will be added to the content
- * @param $name string The name of the row
- * @param $value string The value of the row
+ * @param string $table The table that will be added to the content
+ * @param string $name The name of the row
+ * @param string $value The value of the row
* @return string The table with the row added
*/
protected function addRow( $table, $name, $value ) {
/**
* Adds a table to the content that will be added to the output.
*
- * @param $content string The content that will be added to the output
- * @param $table string The table
+ * @param string $content The content that will be added to the output
+ * @param string $table The table
* @return string The content with the table added
*/
protected function addTable( $content, $table ) {
* @ingroup Actions
*/
+/**
+ * Mark a revision as patrolled on a page
+ *
+ * @ingroup Actions
+ */
class MarkpatrolledAction extends FormlessAction {
public function getName() {
* @author Timo Tijhof
*/
+/**
+ * Handle page protection
+ *
+ * This is a wrapper that will call Article::protect().
+ *
+ * @ingroup Actions
+ */
class ProtectAction extends FormlessAction {
public function getName() {
}
+/**
+ * Handle page unprotection
+ *
+ * This is a wrapper that will call Article::unprotect().
+ *
+ * @ingroup Actions
+ */
class UnprotectAction extends ProtectAction {
public function getName() {
<?php
/**
- * Formats credits for articles
- *
- * Copyright 2004, Evan Prodromou <evan@wikitravel.org>.
+ * User-requested page cache purging.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* @file
* @ingroup Actions
- * @author <evan@wikitravel.org>
*/
+/**
+ * User-requested page cache purging.
+ *
+ * For users with 'purge', this will directly trigger the cache purging and
+ * for users without that right, it will show a confirmation form.
+ *
+ * @ingroup Actions
+ */
class PurgeAction extends FormAction {
private $redirectParams;
/**
* A simple method to retrieve the plain source of an article,
* using "action=raw" in the GET request string.
+ *
+ * @ingroup Actions
*/
class RawAction extends FormlessAction {
private $mGen;
* @author Timo Tijhof
*/
+/**
+ * Handle action=render
+ *
+ * This is a wrapper that will call Article::render().
+ *
+ * @ingroup Actions
+ */
class RenderAction extends FormlessAction {
public function getName() {
* @author Alexandre Emsenhuber
*/
+/**
+ * An action that just pass the request to Special:RevisionDelete
+ *
+ * @ingroup Actions
+ */
class RevisiondeleteAction extends FormlessAction {
public function getName() {
* @author Timo Tijhof
*/
+/**
+ * An action that views article content
+ *
+ * This is a wrapper that will call Article::render().
+ *
+ * @ingroup Actions
+ */
class ViewAction extends FormlessAction {
public function getName() {
* @ingroup Actions
*/
+/**
+ * Page addition to a user's watchlist
+ *
+ * @ingroup Actions
+ */
class WatchAction extends FormAction {
public function getName() {
}
}
+/**
+ * Page removal from a user's watchlist
+ *
+ * @ingroup Actions
+ */
class UnwatchAction extends WatchAction {
public function getName() {
/**
* Constructor
* @param $mainModule ApiMain object
- * @param $moduleName string Name of this module
- * @param $modulePrefix string Prefix to use for parameter names
+ * @param string $moduleName Name of this module
+ * @param string $modulePrefix Prefix to use for parameter names
*/
public function __construct( $mainModule, $moduleName, $modulePrefix = '' ) {
$this->mMainModule = $mainModule;
* @return ApiResult
*/
public function getResult() {
- // Main module has getResult() method overriden
+ // Main module has getResult() method overridden
// Safety - avoid infinite loop:
if ( $this->isMain() ) {
ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
* section to notice any changes in API. Multiple calls to this
* function will result in the warning messages being separated by
* newlines
- * @param $warning string Warning message
+ * @param string $warning Warning message
*/
public function setWarning( $warning ) {
$result = $this->getResult();
}
/**
- * @param $prefix string Text to split output items
- * @param $title string What is being output
+ * @param string $prefix Text to split output items
+ * @param string $title What is being output
* @param $input string|array
* @return string
*/
* Get final list of parameters, after hooks have had a chance to
* tweak it as needed.
*
- * @param $flags int Zero or more flags like GET_VALUES_FOR_HELP
+ * @param int $flags Zero or more flags like GET_VALUES_FOR_HELP
* @return array|Bool False on no parameters
* @since 1.21 $flags param added
*/
* The array can also contain a boolean under the key PROP_LIST,
* indicating whether the result is a list.
*
- * Don't call this functon directly: use getFinalResultProperties() to
+ * Don't call this function directly: use getFinalResultProperties() to
* allow hooks to modify descriptions as needed.
*
* @return array|bool False on no properties
/**
* This method mangles parameter name based on the prefix supplied to the constructor.
* Override this method to change parameter name during runtime
- * @param $paramName string Parameter name
+ * @param string $paramName Parameter name
* @return string Prefixed parameter name
*/
public function encodeParamName( $paramName ) {
/**
* Get a value for the given parameter
- * @param $paramName string Parameter name
- * @param $parseLimit bool see extractRequestParams()
+ * @param string $paramName Parameter name
+ * @param bool $parseLimit see extractRequestParams()
* @return mixed Parameter value
*/
protected function getParameter( $paramName, $parseLimit = true ) {
/**
* Die if none or more than one of a certain set of parameters is set and not false.
- * @param $params array of parameter names
+ * @param array $params of parameter names
*/
public function requireOnlyOneParameter( $params ) {
$required = func_get_args();
/**
* @param $params array
- * @param $load bool|string Whether load the object's state from the database:
+ * @param bool|string $load Whether load the object's state from the database:
* - false: don't load (if the pageid is given, it will still be loaded)
* - 'fromdb': load from a slave database
* - 'fromdbmaster': load from the master database
}
/**
- * Callback function used in requireOnlyOneParameter to check whether reequired parameters are set
+ * Callback function used in requireOnlyOneParameter to check whether required parameters are set
*
* @param $x object Parameter to check is not null/false
* @return bool
/**
* Return true if we're to watch the page, false if not, null if no change.
- * @param $watchlist String Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
* @param $titleObj Title the page under consideration
- * @param $userOption String The user option to consider when $watchlist=preferences.
+ * @param string $userOption The user option to consider when $watchlist=preferences.
* If not set will magically default to either watchdefault or watchcreations
* @return bool
*/
if ( $userWatching ) {
return true;
}
- # If no user option was passed, use watchdefault or watchcreation
+ # If no user option was passed, use watchdefault or watchcreations
if ( is_null( $userOption ) ) {
$userOption = $titleObj->exists()
? 'watchdefault' : 'watchcreations';
/**
* Set a watch (or unwatch) based the based on a watchlist parameter.
- * @param $watch String Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
* @param $titleObj Title the article's title to change
- * @param $userOption String The user option to consider when $watch=preferences
+ * @param string $userOption The user option to consider when $watch=preferences
*/
protected function setWatch( $watch, $titleObj, $userOption = null ) {
$value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
/**
* Using the settings determine the value for the given parameter
*
- * @param $paramName String: parameter name
- * @param $paramSettings array|mixed default value or an array of settings
+ * @param string $paramName parameter name
+ * @param array|mixed $paramSettings default value or an array of settings
* using PARAM_* constants.
* @param $parseLimit Boolean: parse limit?
* @return mixed Parameter value
if ( $required && $value === '' ) {
$this->dieUsageMsg( array( 'missingparam', $paramName ) );
}
-
break;
case 'integer': // Force everything using intval() and optionally validate limits
$min = isset ( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : null;
}
break;
case 'user':
- if ( !is_array( $value ) ) {
- $value = array( $value );
- }
-
- foreach ( $value as $key => $val ) {
- $title = Title::makeTitleSafe( NS_USER, $val );
- if ( is_null( $title ) ) {
- $this->dieUsage( "Invalid value for user parameter $encParamName", "baduser_{$encParamName}" );
+ if ( is_array( $value ) ) {
+ foreach ( $value as $key => $val ) {
+ $value[$key] = $this->validateUser( $val, $encParamName );
}
- $value[$key] = $title->getText();
- }
-
- if ( !$multi ) {
- $value = $value[0];
+ } else {
+ $value = $this->validateUser( $value, $encParamName );
}
break;
case 'upload': // nothing to do
}
// Throw out duplicates if requested
- if ( is_array( $value ) && !$dupes ) {
+ if ( !$dupes && is_array( $value ) ) {
$value = array_unique( $value );
}
* Return an array of values that were given in a 'a|b|c' notation,
* after it optionally validates them against the list allowed values.
*
- * @param $valueName string The name of the parameter (for error
+ * @param string $valueName The name of the parameter (for error
* reporting)
* @param $value mixed The value being parsed
- * @param $allowMultiple bool Can $value contain more than one value
+ * @param bool $allowMultiple Can $value contain more than one value
* separated by '|'?
* @param $allowedValues mixed An array of values to check against. If
* null, all values are accepted.
/**
* Validate the value against the minimum and user/bot maximum limits.
* Prints usage info on failure.
- * @param $paramName string Parameter name
- * @param $value int Parameter value
- * @param $min int|null Minimum value
- * @param $max int|null Maximum value for users
- * @param $botMax int Maximum value for sysops/bots
+ * @param string $paramName Parameter name
+ * @param int $value Parameter value
+ * @param int|null $min Minimum value
+ * @param int|null $max Maximum value for users
+ * @param int $botMax Maximum value for sysops/bots
* @param $enforceLimits Boolean Whether to enforce (die) if value is outside limits
*/
function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
}
/**
- * @param $value string
- * @param $paramName string
- * @return string
+ * Validate and normalize of parameters of type 'timestamp'
+ * @param string $value Parameter value
+ * @param string $encParamName Parameter name
+ * @return string Validated and normalized parameter
*/
- function validateTimestamp( $value, $paramName ) {
+ function validateTimestamp( $value, $encParamName ) {
$unixTimestamp = wfTimestamp( TS_UNIX, $value );
if ( $unixTimestamp === false ) {
- $this->dieUsage( "Invalid value '$value' for timestamp parameter $paramName", "badtimestamp_{$paramName}" );
+ $this->dieUsage( "Invalid value '$value' for timestamp parameter $encParamName", "badtimestamp_{$encParamName}" );
}
return wfTimestamp( TS_MW, $unixTimestamp );
}
+ /**
+ * Validate and normalize of parameters of type 'user'
+ * @param string $value Parameter value
+ * @param string $encParamName Parameter value
+ * @return string Validated and normalized parameter
+ */
+ private function validateUser( $value, $encParamName ) {
+ $title = Title::makeTitleSafe( NS_USER, $value );
+ if ( $title === null ) {
+ $this->dieUsage( "Invalid value '$value' for user parameter $encParamName", "baduser_{$encParamName}" );
+ }
+ return $title->getText();
+ }
+
/**
* Adds a warning to the output, else dies
*
/**
* Truncate an array to a certain length.
- * @param $arr array Array to truncate
- * @param $limit int Maximum length
+ * @param array $arr Array to truncate
+ * @param int $limit Maximum length
* @return bool True if the array was truncated, false otherwise
*/
public static function truncateArray( &$arr, $limit ) {
* Throw a UsageException, which will (if uncaught) call the main module's
* error handler and die with an error message.
*
- * @param $description string One-line human-readable description of the
+ * @param string $description One-line human-readable description of the
* error condition, e.g., "The API requires a valid action parameter"
- * @param $errorCode string Brief, arbitrary, stable string to allow easy
+ * @param string $errorCode Brief, arbitrary, stable string to allow easy
* automated identification of the error, e.g., 'unknown_action'
- * @param $httpRespCode int HTTP response code
- * @param $extradata array Data to add to the "<error>" element; array in ApiResult format
+ * @param int $httpRespCode HTTP response code
+ * @param array $extradata Data to add to the "<error>" element; array in ApiResult format
* @throws UsageException
*/
public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
'badipaddress' => array( 'code' => 'invalidip', 'info' => "Invalid IP address specified" ),
'ipb_expiry_invalid' => array( 'code' => 'invalidexpiry', 'info' => "Invalid expiry time" ),
'ipb_already_blocked' => array( 'code' => 'alreadyblocked', 'info' => "The user you tried to block was already blocked" ),
- 'ipb_blocked_as_range' => array( 'code' => 'blockedasrange', 'info' => "IP address \"\$1\" was blocked as part of range \"\$2\". You can't unblock the IP invidually, but you can unblock the range as a whole." ),
+ 'ipb_blocked_as_range' => array( 'code' => 'blockedasrange', 'info' => "IP address \"\$1\" was blocked as part of range \"\$2\". You can't unblock the IP individually, but you can unblock the range as a whole." ),
'ipb_cant_unblock' => array( 'code' => 'cantunblock', 'info' => "The block you specified was not found. It may have been unblocked already" ),
'mailnologin' => array( 'code' => 'cantsend', 'info' => "You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email" ),
'ipbblocked' => array( 'code' => 'ipbblocked', 'info' => 'You cannot block or unblock users while you are yourself blocked' ),
/**
* Return the error message related to a certain array
- * @param $error array Element of a getUserPermissionsErrors()-style array
+ * @param array $error Element of a getUserPermissionsErrors()-style array
* @return array('code' => code, 'info' => info)
*/
public function parseMsg( $error ) {
/**
* Internal code errors should be reported with this method
- * @param $method string Method or function name
- * @param $message string Error message
+ * @param string $method Method or function name
+ * @param string $message Error message
*/
protected static function dieDebug( $method, $message ) {
wfDebugDieBacktrace( "Internal error in $method: $message" );
$params = $this->getFinalParams();
if ( $params ) {
foreach ( $params as $paramName => $paramSettings ) {
- if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] ) ) {
+ if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] ) && $paramSettings[ApiBase::PARAM_REQUIRED] ) {
$ret[] = array( 'missingparam', $paramName );
}
}
/**
* Parses a list of errors into a standardised format
- * @param $errors array List of errors. Items can be in the for array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
+ * @param array $errors List of errors. Items can be in the for array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
* @return array Parsed list of errors with items in the form array( 'code' => ..., 'info' => ... )
*/
public function parseErrors( $errors ) {
/**
* Debugging function that prints a value and an optional backtrace
* @param $value mixed Value to print
- * @param $name string Description of the printed value
- * @param $backtrace bool If true, print a backtrace
+ * @param string $name Description of the printed value
+ * @param bool $backtrace If true, print a backtrace
*/
public static function debugPrint( $value, $name = 'unknown', $backtrace = false ) {
print "\n\n<pre><b>Debugging value '$name':</b>\n\n";
*/
class ApiCreateAccount extends ApiBase {
public function execute() {
+
+ // $loginForm->addNewaccountInternal will throw exceptions
+ // if wiki is read only (already handled by api), user is blocked or does not have rights.
+ // Use userCan in order to hit GlobalBlock checks (according to Special:userlogin)
+ $loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
+ if ( !$loginTitle->userCan( 'createaccount', $this->getUser() ) ) {
+ $this->dieUsage( 'You do not have the right to create a new account', 'permdenied-createaccount' );
+ }
+ if ( $this->getUser()->isBlockedFromCreateAccount() ) {
+ $this->dieUsage( 'You cannot create a new account because you are blocked', 'blocked' );
+ }
+
$params = $this->extractRequestParams();
$result = array();
$apiResult = $this->getResult();
- if( $status->hasMessage( 'sessionfailure' ) ) {
- // Token was incorrect, so add it to result, but don't throw an exception.
+ if( $status->hasMessage( 'sessionfailure' ) || $status->hasMessage( 'nocookiesfornew' ) ) {
+ // Token was incorrect, so add it to result, but don't throw an exception
+ // since not having the correct token is part of the normal
+ // flow of events.
$result['token'] = LoginForm::getCreateaccountToken();
$result['result'] = 'needtoken';
} elseif( !$status->isOK() ) {
}
public function getPossibleErrors() {
+ // Note the following errors aren't possible and don't need to be listed:
+ // sessionfailure, nocookiesfornew, badretype
$localErrors = array(
- 'wrongpassword',
- 'sessionfailure',
+ 'wrongpassword', // Actually caused by wrong domain field. Riddle me that...
'sorbs_create_account_reason',
'noname',
'userexists',
- 'password-name-match',
- 'password-login-forbidden',
+ 'password-name-match', // from User::getPasswordValidity
+ 'password-login-forbidden', // from User::getPasswordValidity
'noemailtitle',
'invalidemailaddress',
- 'externaldberror'
+ 'externaldberror',
+ 'acct_creation_throttle_hit',
);
$errors = parent::getPossibleErrors();
$errors[] = array( 'code' => $error, 'info' => wfMessage( $error )->parse() );
}
+ $errors[] = array(
+ 'code' => 'permdenied-createaccount',
+ 'info' => 'You do not have the right to create a new account'
+ );
+ $errors[] = array(
+ 'code' => 'blocked',
+ 'info' => 'You cannot create a new account because you are blocked'
+ );
+ $errors[] = array(
+ 'code' => 'aborted',
+ 'info' => 'Account creation aborted by hook (info may vary)'
+ );
+
// 'passwordtooshort' has parameters. :(
global $wgMinimalPasswordLength;
$errors[] = array(
*
* @param $page Page|WikiPage object to work on
* @param $user User doing the action
- * @param $token String delete token (same as edit token)
- * @param $reason String|null reason for the deletion. Autogenerated if NULL
+ * @param string $token delete token (same as edit token)
+ * @param string|null $reason reason for the deletion. Autogenerated if NULL
* @return Status|array
*/
public static function delete( Page $page, User $user, $token, &$reason = null ) {
// array_shift( $titles );
$redirValues = array();
+
+ /** @var $newTitle Title */
foreach ( $titles as $id => $newTitle ) {
if ( !isset( $titles[$id - 1] ) ) {
$articleContext->setWikiPage( $pageObj );
$articleContext->setUser( $this->getUser() );
+ /** @var $articleObject Article */
$articleObject = Article::newFromWikiPage( $pageObj, $articleContext );
$ep = new EditPage( $articleObject );
case EditPage::AS_SUCCESS_NEW_ARTICLE:
$r['new'] = '';
+ // fall-through
case EditPage::AS_SUCCESS_UPDATE:
$r['result'] = 'Success';
'section' => null,
'sectiontitle' => array(
ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => false,
),
'text' => null,
'token' => array(
public function getExamples() {
return array(
-
'api.php?action=edit&title=Test&summary=test%20summary&text=article%20content&basetimestamp=20070824123454&token=%2B\\'
=> 'Edit a page (anonymous user)',
-
'api.php?action=edit&title=Test&summary=NOTOC&minor=&prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
=> 'Prepend __NOTOC__ to a page (anonymous user)',
'api.php?action=edit&title=Test&undo=13585&undoafter=13579&basetimestamp=20070824123454&token=%2B\\'
if( !isset( $wgFeedClasses[$params['feedformat']] ) ) {
$this->dieUsage( 'Invalid subscription feed type', 'feed-invalid' );
}
- if ( !is_null( $params['wlexcludeuser'] ) ) {
- $fauxReqArr['wlexcludeuser'] = $params['wlexcludeuser'];
- }
// limit to the number of hours going from now back
$endTime = wfTimestamp( TS_MW, time() - intval( $params['hours'] * 60 * 60 ) );
'wllimit' => ( 50 > $wgFeedLimit ) ? $wgFeedLimit : 50
);
- if ( !is_null( $params['wlowner'] ) ) {
+ if ( $params['wlowner'] !== null ) {
$fauxReqArr['wlowner'] = $params['wlowner'];
}
- if ( !is_null( $params['wltoken'] ) ) {
+ if ( $params['wltoken'] !== null ) {
$fauxReqArr['wltoken'] = $params['wltoken'];
}
+ if ( $params['wlexcludeuser'] !== null ) {
+ $fauxReqArr['wlexcludeuser'] = $params['wlexcludeuser'];
+ }
// Support linking to diffs instead of article
if ( $params['linktodiffs'] ) {
* Constructor
* If $format ends with 'fm', pretty-print the output in HTML.
* @param $main ApiMain
- * @param $format string Format name
+ * @param string $format Format name
*/
public function __construct( $main, $format ) {
parent::__construct( $main, $format );
* special-case fix that should be removed once the help has been
* reworked to use a fully HTML interface.
*
- * @param $b bool Whether or not ampersands should be escaped.
+ * @param bool $b Whether or not ampersands should be escaped.
*/
public function setUnescapeAmps ( $b ) {
$this->mUnescapeAmps = $b;
* A human-targeted notice about available formats is printed for the HTML-based output,
* except for help screens (caused by either an error in the API parameters,
* the calling of action=help, or requesting the root script api.php).
- * @param $isHelpScreen bool Whether a help screen is going to be shown
+ * @param bool $isHelpScreen Whether a help screen is going to be shown
*/
function initPrinter( $isHelpScreen ) {
if ( $this->mDisabled ) {
* Call this method to initialize output data. See execute()
* @param $result ApiResult
* @param $feed object an instance of one of the $wgFeedClasses classes
- * @param $feedItems array of FeedItem objects
+ * @param array $feedItems of FeedItem objects
*/
public static function setResult( $result, $feed, $feedItems ) {
// Store output in the Result data.
public function getDescription() {
if ( $this->mIsRaw ) {
- return 'Output data with the debuging elements in JSON format' . parent::getDescription();
+ return 'Output data with the debugging elements in JSON format' . parent::getDescription();
} else {
return 'Output data in JSON format' . parent::getDescription();
}
/**
* Add all items from $values into the result
- * @param $result array output
- * @param $values array values to add
- * @param $flag string the name of the boolean flag to mark this element
- * @param $name string if given, name of the value
+ * @param array $result output
+ * @param array $values values to add
+ * @param string $flag the name of the boolean flag to mark this element
+ * @param string $name if given, name of the value
*/
private static function addValues( array &$result, $values, $flag = null, $name = null ) {
foreach ( $values as $val ) {
/**
* Executes the log-in attempt using the parameters passed. If
- * the log-in succeeeds, it attaches a cookie to the session
+ * the log-in succeeds, it attaches a cookie to the session
* and outputs the user id, username, and session token. If a
* log-in fails, as the result of a bad password, a nonexistent
* user, or any other reason, the host is cached with an expiry
* Constructs an instance of ApiMain that utilizes the module and format specified by $request.
*
* @param $context IContextSource|WebRequest - if this is an instance of FauxRequest, errors are thrown and no printing occurs
- * @param $enableWrite bool should be set to true if the api may modify data
+ * @param bool $enableWrite should be set to true if the api may modify data
*/
public function __construct( $context = null, $enableWrite = false ) {
if ( $context === null ) {
/**
* Set the type of caching headers which will be sent.
*
- * @param $mode String One of:
+ * @param string $mode One of:
* - 'public': Cache this object in public caches, if the maxage or smaxage
* parameter is set, or if setCacheMaxAge() was called. If a maximum age is
* not provided by any of these means, the object will be private.
return;
}
- if ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) ) {
+ if ( !User::groupHasPermission( '*', 'read' ) ) {
// Private wiki, only private headers
if ( $mode !== 'private' ) {
wfDebug( __METHOD__ . ": ignoring request for $mode cache mode, private wiki\n" );
/**
* Attempt to match an Origin header against a set of rules and a set of exceptions
- * @param $value string Origin header
- * @param $rules array Set of wildcard rules
- * @param $exceptions array Set of wildcard rules
+ * @param string $value Origin header
+ * @param array $rules Set of wildcard rules
+ * @param array $exceptions Set of wildcard rules
* @return bool True if $value matches a rule in $rules and doesn't match any rules in $exceptions, false otherwise
*/
protected static function matchOrigin( $value, $rules, $exceptions ) {
* '*' => '.*?'
* '?' => '.'
*
- * @param $wildcard string String with wildcards
+ * @param string $wildcard String with wildcards
* @return string Regular expression
*/
protected static function wildcardToRegex( $wildcard ) {
/**
* Check the max lag if necessary
* @param $module ApiBase object: Api module being used
- * @param $params Array an array containing the request parameters.
+ * @param array $params an array containing the request parameters.
* @return boolean True on success, false should exit immediately
*/
protected function checkMaxLag( $module, $params ) {
*/
protected function checkExecutePermissions( $module ) {
$user = $this->getUser();
- if ( $module->isReadMode() && !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) &&
+ if ( $module->isReadMode() && !User::groupHasPermission( '*', 'read' ) &&
!$user->isAllowed( 'read' ) )
{
$this->dieUsageMsg( 'readrequired' );
/**
* Check POST for external response and setup result printer
* @param $module ApiBase An Api module
- * @param $params Array an array with the request parameters
+ * @param array $params an array with the request parameters
*/
protected function setupExternalResponse( $module, $params ) {
if ( !$this->getRequest()->wasPosted() && $module->mustBePosted() ) {
* Get a request upload, and register the fact that it was used, for logging.
*
* @since 1.21
- * @param $name string Parameter name
+ * @param string $name Parameter name
* @return WebRequestUpload
*/
public function getUpload( $name ) {
/**
* @param $module ApiBase
- * @param $paramName String What type of request is this? e.g. action, query, list, prop, meta, format
+ * @param string $paramName What type of request is this? e.g. action, query, list, prop, meta, format
* @return string
*/
public static function makeHelpMsgHeader( $module, $paramName ) {
* behavior of inherent ones.
*
* @deprecated since 1.21, Use getModuleManager()->addModule() instead.
- * @param $name string The identifier for this module.
+ * @param string $name The identifier for this module.
* @param $class ApiBase The class where this module is implemented.
*/
protected function addModule( $name, $class ) {
* classes who wish to add to or modify current formatters.
*
* @deprecated since 1.21, Use getModuleManager()->addModule() instead.
- * @param $name string The identifier for this format.
+ * @param string $name The identifier for this format.
* @param $class ApiFormatBase The class implementing this format.
*/
protected function addFormat( $name, $class ) {
* classes who wish to add their own modules to their lexicon or override the
* behavior of inherent ones.
*
- * @param $group string Name of the module group
- * @param $name string The identifier for this module.
- * @param $class string The class where this module is implemented.
+ * @param string $group Name of the module group
+ * @param string $name The identifier for this module.
+ * @param string $class The class where this module is implemented.
*/
public function addModule( $name, $group, $class ) {
$this->mGroups[$group] = null;
/**
* Get module instance by name, or instantiate it if it does not exist
- * @param $moduleName string module name
- * @param $group string optionally validate that the module is in a specific group
- * @param $ignoreCache bool if true, force-creates a new instance and does not cache it
+ * @param string $moduleName module name
+ * @param string $group optionally validate that the module is in a specific group
+ * @param bool $ignoreCache if true, force-creates a new instance and does not cache it
* @return mixed the new module instance, or null if failed
*/
public function getModule( $moduleName, $group = null, $ignoreCache = false ) {
public function getExamples() {
return array(
- 'api.php?action=move&from=Exampel&to=Example&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect='
+ 'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect='
);
}
* Constructor
* @param $dbSource ApiBase Module implementing getDB().
* Allows PageSet to reuse existing db connection from the shared state like ApiQuery.
- * @param $flags int Zero or more flags like DISABLE_GENERATORS
- * @param $defaultNamespace int the namespace to use if none is specified by a prefix.
+ * @param int $flags Zero or more flags like DISABLE_GENERATORS
+ * @param int $defaultNamespace the namespace to use if none is specified by a prefix.
* @since 1.21 accepts $flags instead of two boolean values
*/
public function __construct( ApiBase $dbSource, $flags = 0, $defaultNamespace = NS_MAIN ) {
/**
* Request an additional field from the page table.
* Must be called before execute()
- * @param $fieldName string Field name
+ * @param string $fieldName Field name
*/
public function requestField( $fieldName ) {
$this->mRequestedPageFields[$fieldName] = null;
/**
* Get the value of a custom field previously requested through
* requestField()
- * @param $fieldName string Field name
+ * @param string $fieldName Field name
* @return mixed Field value
*/
public function getCustomField( $fieldName ) {
/**
* Populate this PageSet from a list of Titles
- * @param $titles array of Title objects
+ * @param array $titles of Title objects
*/
public function populateFromTitles( $titles ) {
$this->profileIn();
/**
* Populate this PageSet from a list of page IDs
- * @param $pageIDs array of page IDs
+ * @param array $pageIDs of page IDs
*/
public function populateFromPageIDs( $pageIDs ) {
$this->profileIn();
/**
* Populate this PageSet from a list of revision IDs
- * @param $revIDs array of revision IDs
+ * @param array $revIDs of revision IDs
*/
public function populateFromRevisionIDs( $revIDs ) {
$this->profileIn();
* #5 Substitute the original LinkBatch object with the new list
* #6 Repeat from step #1
*
- * @param $titles array of Title objects or strings
+ * @param array $titles of Title objects or strings
*/
private function initFromTitles( $titles ) {
// Get validated and normalized title objects
/**
* Does the same as initFromTitles(), but is based on page IDs instead
- * @param $pageids array of page IDs
+ * @param array $pageids of page IDs
*/
private function initFromPageIds( $pageids ) {
if ( !$pageids ) {
* Iterate through the result of the query on 'page' table,
* and for each row create and store title object and save any extra fields requested.
* @param $res ResultWrapper DB Query result
- * @param $remaining array of either pageID or ns/title elements (optional).
+ * @param array $remaining of either pageID or ns/title elements (optional).
* If given, any missing items will go to $mMissingPageIDs and $mMissingTitles
- * @param $processTitles bool Must be provided together with $remaining.
+ * @param bool $processTitles Must be provided together with $remaining.
* If true, treat $remaining as an array of [ns][title]
* If false, treat it as an array of [pageIDs]
*/
/**
* Does the same as initFromTitles(), but is based on revision IDs
* instead
- * @param $revids array of revision IDs
+ * @param array $revids of revision IDs
*/
private function initFromRevIDs( $revids ) {
if ( !$revids ) {
* This method validates access rights for the title,
* and appends normalization values to the output.
*
- * @param $titles array of Title objects or strings
+ * @param array $titles of Title objects or strings
* @return LinkBatch
*/
private function processTitlesArray( $titles ) {
* @param array $params user parameters array
* @param string $type parameter name
* @param array $res store results in this array
- * @param array $resultObj results object to set indexed tag.
+ * @param ApiResult $resultObj results object to set indexed tag.
*/
private function addModulesInfo( $params, $type, &$res, $resultObj ) {
if ( !is_array( $params[$type] ) ) {
$retval['props'][] = $propResult;
}
- // default is true for query modules, false for other modules, overriden by ApiBase::PROP_LIST
+ // default is true for query modules, false for other modules, overridden by ApiBase::PROP_LIST
if ( $listResult === true || ( $listResult !== false && $obj instanceof ApiQueryBase ) ) {
$retval['listresult'] = '';
}
'token' => 'A protect token previously retrieved through prop=info',
'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
'expiry' => array( 'Expiry timestamps. If only one timestamp is set, it\'ll be used for all protections.',
- 'Use \'infinite\', \'indefinite\' or \'never\', for a neverexpiring protection.' ),
+ 'Use \'infinite\', \'indefinite\' or \'never\', for a never-expiring protection.' ),
'reason' => 'Reason for (un)protecting',
'cascade' => array( 'Enable cascading protection (i.e. protect pages included in this page)',
'Ignored if not all protection levels are \'sysop\' or \'protect\'' ),
/**
* Add all items from $values into the result
- * @param $result array output
- * @param $values array values to add
- * @param $flag string the name of the boolean flag to mark this element
- * @param $name string if given, name of the value
+ * @param array $result output
+ * @param array $values values to add
+ * @param string $flag the name of the boolean flag to mark this element
+ * @param string $name if given, name of the value
*/
private static function addValues( array &$result, $values, $flag = null, $name = null ) {
foreach ( $values as $val ) {
* If no such connection has been requested before, it will be created.
* Subsequent calls with the same $name will return the same connection
* as the first, regardless of the values of $db and $groups
- * @param $name string Name to assign to the database connection
- * @param $db int One of the DB_* constants
- * @param $groups array Query groups
+ * @param string $name Name to assign to the database connection
+ * @param int $db One of the DB_* constants
+ * @param array $groups Query groups
* @return DatabaseBase
*/
public function getNamedDB( $name, $db, $groups ) {
/**
* Get whether the specified module is a prop, list or a meta query module
* @deprecated since 1.21, use getModuleManager()->getModuleGroup()
- * @param $moduleName string Name of the module to find type for
+ * @param string $moduleName Name of the module to find type for
* @return mixed string or null
*/
function getModuleType( $moduleName ) {
/**
* Create instances of all modules requested by the client
- * @param $modules Array to append instantiated modules to
- * @param $param string Parameter name to read modules from
+ * @param array $modules to append instantiated modules to
+ * @param string $param Parameter name to read modules from
*/
private function instantiateModules( &$modules, $param ) {
if ( isset( $this->mParams[$param] ) ) {
);
}
// Report special pages
+ /** @var $title Title */
foreach ( $pageSet->getSpecialTitles() as $fakeId => $title ) {
$vals = array();
ApiQueryBase::addTitleInfo( $vals, $title );
$titles = $pageSet->getGoodTitles();
if ( count( $titles ) ) {
$user = $this->getUser();
+ /** @var $title Title */
foreach ( $titles as $title ) {
if ( $title->userCan( 'read', $user ) ) {
$exportTitles[] = $title;
/**
* For all modules of a given group, generate help messages and join them together
- * @param $group string Module group
+ * @param string $group Module group
* @return string
*/
private function makeHelpMsgHelper( $group ) {
/**
* Override parent method to make sure the repo's DB is used
- * which may not necesarilly be the same as the local DB.
+ * which may not necessarily be the same as the local DB.
*
* TODO: allow querying non-local repos.
* @return DatabaseBase
$params = $this->extractRequestParams();
if ( is_null( $params['lang'] ) ) {
- global $wgLang;
- $langObj = $wgLang;
+ $langObj = $this->getLanguage();
+ } elseif ( !Language::isValidCode( $params['lang'] ) ) {
+ $this->dieUsage( 'Invalid language code for parameter lang', 'invalidlang' );
} else {
$langObj = Language::factory( $params['lang'] );
}
);
}
+ public function getPossibleErrors() {
+ return array_merge( parent::getPossibleErrors(), array(
+ array( 'code' => 'invalidlang', 'info' => 'Invalid language code for parameter lang' ),
+ ) );
+ }
+
public function getResultProperties() {
return array(
'' => array(
'Show info about 4 pages starting at the letter "T"',
),
'api.php?action=query&generator=allpages&gaplimit=2&gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content' => array(
- 'Show content of first 2 non-redirect pages begining at "Re"',
+ 'Show content of first 2 non-redirect pages beginning at "Re"',
)
);
}
/**
* This function converts the user name to a canonical form
* which is stored in the database.
- * @param String $name
+ * @param string $name
* @return String
*/
private function getCanonicalUserName( $name ) {
$titleWhere = array();
$allRedirNs = array();
$allRedirDBkey = array();
+ /** @var $t Title */
foreach ( $this->redirTitles as $t ) {
$redirNs = $t->getNamespace();
$redirDBkey = $t->getDBkey();
if ( !is_null( $this->redirID ) ) {
$op = $this->params['dir'] == 'descending' ? '<' : '>';
+ /** @var $first Title */
$first = $this->redirTitles[0];
$title = $db->addQuotes( $first->getDBkey() );
$ns = $first->getNamespace();
/**
* Add a set of fields to select to the internal array
- * @param $value array|string Field name or array of field names
+ * @param array|string $value Field name or array of field names
*/
protected function addFields( $value ) {
if ( is_array( $value ) ) {
/**
* Same as addFields(), but add the fields only if a condition is met
- * @param $value array|string See addFields()
- * @param $condition bool If false, do nothing
+ * @param array|string $value See addFields()
+ * @param bool $condition If false, do nothing
* @return bool $condition
*/
protected function addFieldsIf( $value, $condition ) {
/**
* Same as addWhere(), but add the WHERE clauses only if a condition is met
* @param $value mixed See addWhere()
- * @param $condition bool If false, do nothing
+ * @param bool $condition If false, do nothing
* @return bool $condition
*/
protected function addWhereIf( $value, $condition ) {
/**
* Equivalent to addWhere(array($field => $value))
- * @param $field string Field name
- * @param $value string Value; ignored if null or empty array;
+ * @param string $field Field name
+ * @param string $value Value; ignored if null or empty array;
*/
protected function addWhereFld( $field, $value ) {
// Use count() to its full documented capabilities to simultaneously
/**
* Add a WHERE clause corresponding to a range, and an ORDER BY
* clause to sort in the right direction
- * @param $field string Field name
- * @param $dir string If 'newer', sort in ascending order, otherwise
+ * @param string $field Field name
+ * @param string $dir If 'newer', sort in ascending order, otherwise
* sort in descending order
- * @param $start string Value to start the list at. If $dir == 'newer'
+ * @param string $start Value to start the list at. If $dir == 'newer'
* this is the lower boundary, otherwise it's the upper boundary
- * @param $end string Value to end the list at. If $dir == 'newer' this
+ * @param string $end Value to end the list at. If $dir == 'newer' this
* is the upper boundary, otherwise it's the lower boundary
- * @param $sort bool If false, don't add an ORDER BY clause
+ * @param bool $sort If false, don't add an ORDER BY clause
*/
protected function addWhereRange( $field, $dir, $start, $end, $sort = true ) {
$isDirNewer = ( $dir === 'newer' );
/**
* Add an option such as LIMIT or USE INDEX. If an option was set
* before, the old value will be overwritten
- * @param $name string Option name
- * @param $value string Option value
+ * @param string $name Option name
+ * @param string $value Option value
*/
protected function addOption( $name, $value = null ) {
if ( is_null( $value ) ) {
/**
* Execute a SELECT query based on the values in the internal arrays
- * @param $method string Function the query should be attributed to.
+ * @param string $method Function the query should be attributed to.
* You should usually use __METHOD__ here
- * @param $extraQuery array Query data to add but not store in the object
+ * @param array $extraQuery Query data to add but not store in the object
* Format is array( 'tables' => ..., 'fields' => ..., 'where' => ..., 'options' => ..., 'join_conds' => ... )
* @return ResultWrapper
*/
/**
* Add information (title and namespace) about a Title object to a
* result array
- * @param $arr array Result array à la ApiResult
+ * @param array $arr Result array à la ApiResult
* @param $title Title
- * @param $prefix string Module prefix
+ * @param string $prefix Module prefix
*/
public static function addTitleInfo( &$arr, $title, $prefix = '' ) {
$arr[$prefix . 'ns'] = intval( $title->getNamespace() );
/**
* Add a sub-element under the page element with the given page ID
- * @param $pageId int Page ID
- * @param $data array Data array à la ApiResult
+ * @param int $pageId Page ID
+ * @param array $data Data array à la ApiResult
* @return bool Whether the element fit in the result
*/
protected function addPageSubItems( $pageId, $data ) {
/**
* Same as addPageSubItems(), but one element of $data at a time
- * @param $pageId int Page ID
- * @param $item array Data array à la ApiResult
- * @param $elemname string XML element name. If null, getModuleName()
+ * @param int $pageId Page ID
+ * @param array $item Data array à la ApiResult
+ * @param string $elemname XML element name. If null, getModuleName()
* is used
* @return bool Whether the element fit in the result
*/
/**
* Set a query-continue value
- * @param $paramName string Parameter name
- * @param $paramValue string Parameter value
+ * @param string $paramName Parameter name
+ * @param string $paramValue Parameter value
*/
protected function setContinueEnumParameter( $paramName, $paramValue ) {
$paramName = $this->encodeParamName( $paramName );
/**
* Selects the query database connection with the given name.
* See ApiQuery::getNamedDB() for more information
- * @param $name string Name to assign to the database connection
- * @param $db int One of the DB_* constants
- * @param $groups array Query groups
+ * @param string $name Name to assign to the database connection
+ * @param int $db One of the DB_* constants
+ * @param array $groups Query groups
* @return DatabaseBase
*/
public function selectNamedDB( $name, $db, $groups ) {
/**
* Convert a title to a DB key
- * @param $title string Page title with spaces
+ * @param string $title Page title with spaces
* @return string Page title with underscores
*/
public function titleToKey( $title ) {
if ( !$t ) {
$this->dieUsageMsg( array( 'invalidtitle', $title ) );
}
- return $t->getPrefixedDbKey();
+ return $t->getPrefixedDBkey();
}
/**
* The inverse of titleToKey()
- * @param $key string Page title with underscores
+ * @param string $key Page title with underscores
* @return string Page title with spaces
*/
public function keyToTitle( $key ) {
/**
* An alternative to titleToKey() that doesn't trim trailing spaces
- * @param $titlePart string Title part with spaces
+ * @param string $titlePart Title part with spaces
* @return string Title part with underscores
*/
public function titlePartToKey( $titlePart ) {
/**
* An alternative to keyToTitle() that doesn't trim trailing spaces
- * @param $keyPart string Key part with spaces
+ * @param string $keyPart Key part with spaces
* @return string Key part with underscores
*/
public function keyPartToTitle( $keyPart ) {
/**
* Overrides base class to prepend 'g' to every generator parameter
- * @param $paramName string Parameter name
+ * @param string $paramName Parameter name
* @return string Prefixed parameter name
*/
public function encodeParamName( $paramName ) {
/**
* Overrides base in case of generator & smart continue to
* notify ApiQueryMain instead of adding them to the result right away.
- * @param $paramName string Parameter name
- * @param $paramValue string Parameter value
+ * @param string $paramName Parameter name
+ * @param string $paramValue Parameter value
*/
protected function setContinueEnumParameter( $paramName, $paramValue ) {
// If this is a generator and query->setGeneratorContinue() returns false, treat as before
$this->getPageSet()->getMissingTitles();
$cattitles = array();
foreach ( $categories as $c ) {
+ /** @var $t Title */
$t = $titles[$c];
$cattitles[$c] = $t->getDBkey();
}
$sha1s = array();
foreach ( $files as $file ) {
+ /** @var $file File */
$sha1s[$file->getName()] = $file->getSha1();
}
if( $params['dir'] == 'descending' ) {
$dupFiles = array_reverse( $dupFiles );
}
+ /** @var $dupFile File */
foreach ( $dupFiles as $dupFile ) {
$dupName = $dupFile->getName();
if( $image == $dupName && $dupFile->isLocal() ) {
}
public function getDescription() {
- return 'Returns all external urls (not interwikies) from the given page(s)';
+ return 'Returns all external urls (not interwikis) from the given page(s)';
}
public function getPossibleErrors() {
continue;
}
+ /** @var $img File */
$img = $images[$title];
if ( self::getTransformCount() >= self::TRANSFORM_LIMIT ) {
// Get one more to facilitate query-continue functionality
$count = ( $gotOne ? 1 : 0 );
$oldies = $img->getHistory( $params['limit'] - $count + 1, $start, $params['end'] );
+ /** @var $oldie File */
foreach ( $oldies as $oldie ) {
if ( ++$count > $params['limit'] ) {
// We've reached the extra one which shows that there are additional pages to be had. Stop here...
/**
* From parameters, construct a 'scale' array
- * @param $params Array: Parameters passed to api.
+ * @param array $params Parameters passed to api.
* @return Array or Null: key-val array of 'width' and 'height', or null
*/
public function getScale( $params ) {
* We do this later than getScale, since we need the image
* to know which handler, since handlers can make their own parameters.
* @param File $image Image that params are for.
- * @param Array $thumbParams thumbnail parameters from getScale
- * @param String $otherParams of otherParams (iiurlparam).
+ * @param array $thumbParams thumbnail parameters from getScale
+ * @param string $otherParams of otherParams (iiurlparam).
* @return Array of parameters for transform.
*/
protected function mergeThumbParams ( $image, $thumbParams, $otherParams ) {
* Get result information for an image revision
*
* @param $file File object
- * @param $prop Array of properties to get (in the keys)
+ * @param array $prop of properties to get (in the keys)
* @param $result ApiResult object
- * @param $thumbParams Array containing 'width' and 'height' items, or null
- * @param $version string Version of image metadata (for things like jpeg which have different versions).
+ * @param array $thumbParams containing 'width' and 'height' items, or null
+ * @param string $version Version of image metadata (for things like jpeg which have different versions).
* @return Array: result array
*/
static function getInfo( $file, $prop, $result, $thumbParams = null, $version = 'latest' ) {
}
if ( isset( $prop['thumbmime'] ) && $file->getHandler() ) {
- list( $ext, $mime ) = $file->getHandler()->getThumbType(
+ list( , $mime ) = $file->getHandler()->getThumbType(
$mto->getExtension(), $file->getMimeType(), $thumbParams );
$vals['thumbmime'] = $mime;
}
/**
* @param $img File
+ * @param null|string $start
* @return string
*/
protected function getContinueStr( $img, $start = null ) {
/**
* Returns array key value pairs of properties and their descriptions
*
+ * @param string $modulePrefix
* @return array
*/
private static function getProperties( $modulePrefix = '' ) {
array( 'code' => "{$p}urlwidth", 'info' => "{$p}urlheight cannot be used without {$p}urlwidth" ),
array( 'code' => 'urlparam', 'info' => "Invalid value for {$p}urlparam" ),
array( 'code' => 'urlparam_no_width', 'info' => "{$p}urlparam requires {$p}urlwidth" ),
- array( 'code' => 'urlparam_urlwidth_mismatch', 'info' => "The width set in {$p}urlparm doesnt't " .
+ array( 'code' => 'urlparam_urlwidth_mismatch', 'info' => "The width set in {$p}urlparm doesn't " .
"match the one in {$p}urlwidth" ),
) );
}
$this->getDisplayTitle();
}
+ /** @var $title Title */
foreach ( $this->everything as $pageid => $title ) {
$pageInfo = $this->extractPageInfo( $pageid, $title );
$fit = $result->addValue( array(
/**
* Get a result array with information about a title
- * @param $pageid int Page ID (negative for missing titles)
+ * @param int $pageid Page ID (negative for missing titles)
* @param $title Title object
* @return array
*/
$res = $this->select( __METHOD__ );
foreach ( $res as $row ) {
+ /** @var $title Title */
$title = $this->titles[$row->pr_page];
$a = array(
'type' => $row->pr_type,
private function getTSIDs() {
$getTitles = $this->talkids = $this->subjectids = array();
+ /** @var $t Title */
foreach ( $this->everything as $t ) {
if ( MWNamespace::isTalk( $t->getNamespace() ) ) {
if ( $this->fld_subjectid ) {
*/
/**
- * A query module to list all langlinks (links to correspanding foreign language pages).
+ * A query module to list all langlinks (links to corresponding foreign language pages).
*
* @ingroup API
*/
' timestamp - Adds the timestamp for the event',
' comment - Adds the comment of the event',
' parsedcomment - Adds the parsed comment of the event',
- ' details - Lists addtional details about the event',
+ ' details - Lists additional details about the event',
' tags - Lists tags for the event',
),
'type' => 'Filter log entries to only this type',
$params = $this->extractRequestParams();
$result = $this->getResult();
+ /** @var $qp QueryPage */
$qp = new $this->qpMap[$params['page']]();
if ( !$qp->userCanExecute( $this->getUser() ) ) {
$this->dieUsageMsg( 'specialpage-cantexecute' );
}
public function getCacheMode( $params ) {
+ /** @var $qp QueryPage */
$qp = new $this->qpMap[$params['page']]();
if ( $qp->getRestriction() != '' ) {
return 'private';
class ApiQueryRandom extends ApiQueryGeneratorBase {
+ private $pageIDs;
+
public function __construct( $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'rn' );
}
/**
* Sets internal state to include the desired properties in the output.
- * @param $prop Array associative array of properties, only keys are used here
+ * @param array $prop associative array of properties, only keys are used here
*/
public function initProperties( $prop ) {
$this->fld_comment = isset( $prop['comment'] );
/**
* Extracts from a single sql row the data needed to describe one recent change.
*
- * @param $row The row from which to extract the data.
+ * @param mixed $row The row from which to extract the data.
* @return array An array mapping strings (descriptors) to their respective string values.
* @access public
*/
if ( isset( $prop['content'] ) || !is_null( $this->difftotext ) ) {
// For each page we will request, the user must have read rights for that page
$user = $this->getUser();
+ /** @var $title Title */
foreach ( $pageSet->getGoodTitles() as $title ) {
if ( !$title->userCan( 'read', $user ) ) {
$this->dieUsage(
);
}
} else {
- list( $host, $lag, $index ) = $lb->getMaxLag();
+ list( , $lag, $index ) = $lb->getMaxLag();
$data[] = array(
'host' => $wgShowHostnames
? $lb->getServerName( $index )
'end' => 'The end timestamp to return to',
'continue' => 'When more results are available, use this to continue',
'user' => 'The users to retrieve contributions for',
- 'userprefix' => "Retrieve contibutions for all users whose names begin with this value. Overrides {$p}user",
+ 'userprefix' => "Retrieve contributions for all users whose names begin with this value. Overrides {$p}user",
'dir' => $this->getDirectionDescription( $p ),
'namespace' => 'Only list contributions in these namespaces',
'prop' => array(
if ( $this->fld_user || $this->fld_userid ) {
- if ( $this->fld_user ) {
- $vals['user'] = $row->rc_user_text;
- }
-
if ( $this->fld_userid ) {
+ $vals['userid'] = $row->rc_user;
+ // for backwards compatibility
$vals['user'] = $row->rc_user;
}
+ if ( $this->fld_user ) {
+ $vals['user'] = $row->rc_user_text;
+ }
+
if ( !$row->rc_user ) {
$vals['anon'] = '';
}
'api.php?action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment',
'api.php?action=query&generator=watchlist&prop=info',
'api.php?action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user',
- 'api.php?action=query&list=watchlist&wlowner=Bob_Smith&wltoken=d8d562e9725ea1512894cdab28e5ceebc7f20237'
+ 'api.php?action=query&list=watchlist&wlowner=Bob_Smith&wltoken=123ABC'
);
}
* There are two special key values that change how XML output is generated:
* '_element' This key sets the tag name for the rest of the elements in the current array.
* It is only inserted if the formatter returned true for getNeedsRawData()
- * '*' This key has special meaning only to the XML formatter, and is outputed as is
- * for all others. In XML it becomes the content of the current element.
+ * '*' This key has special meaning only to the XML formatter, and is outputted as is
+ * for all others. In XML it becomes the content of the current element.
*
* @ingroup API
*/
/**
* Add an output value to the array by name.
* Verifies that value with the same name has not been added before.
- * @param $arr array to add $value to
- * @param $name string Index of $arr to add $value at
+ * @param array $arr to add $value to
+ * @param string $name Index of $arr to add $value at
* @param $value mixed
- * @param $flags int Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This parameter used to be
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This parameter used to be
* boolean, and the value of OVERRIDE=1 was specifically chosen so that it would be backwards
* compatible with the new method signature.
*
/**
* Adds a content element to an array.
* Use this function instead of hardcoding the '*' element.
- * @param $arr array to add the content element to
+ * @param array $arr to add the content element to
* @param $value Mixed
- * @param $subElemName string when present, content element is created
+ * @param string $subElemName when present, content element is created
* as a sub item of $arr. Use this parameter to create elements in
* format "<elem>text</elem>" without attributes.
*/
* give all indexed values the given tag name. This function MUST be
* called on every array that has numerical indexes.
* @param $arr array
- * @param $tag string Tag name
+ * @param string $tag Tag name
*/
public function setIndexedTagName( &$arr, $tag ) {
// In raw mode, add the '_element', otherwise just ignore
/**
* Calls setIndexedTagName() on each sub-array of $arr
* @param $arr array
- * @param $tag string Tag name
+ * @param string $tag Tag name
*/
public function setIndexedTagName_recursive( &$arr, $tag ) {
if ( !is_array( $arr ) ) {
* Calls setIndexedTagName() on an array already in the result.
* Don't specify a path to a value that's not in the result, or
* you'll get nasty errors.
- * @param $path array Path to the array, like addValue()'s $path
+ * @param array $path Path to the array, like addValue()'s $path
* @param $tag string
*/
public function setIndexedTagName_internal( $path, $tag ) {
* @param $path array|string|null
* @param $name string
* @param $value mixed
- * @param $flags int Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This parameter used to be
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP. This parameter used to be
* boolean, and the value of OVERRIDE=1 was specifically chosen so that it would be backwards
* compatible with the new method signature.
* @return bool True if $value fits in the result, false if not
}
// Now, put the valid titles into the result
+ /** @var $title Title */
foreach ( $pageSet->getTitles() as $title ) {
$ns = $title->getNamespace();
$dbkey = $title->getDBkey();
public function getExamples() {
return array(
- 'api.php?action=setnotificationtimestamp&entirewatchlist=&token=ABC123' => 'Reset the notification status for the entire watchlist',
- 'api.php?action=setnotificationtimestamp&titles=Main_page&token=ABC123' => 'Reset the notification status for "Main page"',
- 'api.php?action=setnotificationtimestamp&titles=Main_page×tamp=2012-01-01T00:00:00Z&token=ABC123' => 'Set the notification timestamp for "Main page" so all edits since 1 January 2012 are unviewed',
+ 'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC' => 'Reset the notification status for the entire watchlist',
+ 'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC' => 'Reset the notification status for "Main page"',
+ 'api.php?action=setnotificationtimestamp&titles=Main_page×tamp=2012-01-01T00:00:00Z&token=123ABC' => 'Set the notification timestamp for "Main page" so all edits since 1 January 2012 are unviewed',
);
}
$this->checkPermissions( $user );
// Fetch the file (usually a no-op)
+ /** @var $status Status */
$status = $this->mUpload->fetchFile();
if ( !$status->isGood() ) {
$errors = $status->getErrorsArray();
// Check if the uploaded file is sane
if ( $this->mParams['chunk'] ) {
- $maxSize = $this->mUpload->getMaxUploadSize( );
+ $maxSize = $this->mUpload->getMaxUploadSize();
if( $this->mParams['filesize'] > $maxSize ) {
$this->dieUsage( 'The file you submitted was too large', 'file-too-large' );
}
}
/**
- * Get an uplaod result based on upload context
+ * Get an upload result based on upload context
* @return array
*/
private function getContextResult() {
$warnings = $this->getApiWarnings();
if ( $warnings && !$this->mParams['ignorewarnings'] ) {
- // Get warnings formated in result array format
+ // Get warnings formatted in result array format
return $this->getWarningsResult( $warnings );
} elseif ( $this->mParams['chunk'] ) {
// Add chunk, and get result
}
/**
- * Get Stash Result, throws an expetion if the file could not be stashed.
- * @param $warnings array Array of Api upload warnings
+ * Get Stash Result, throws an exception if the file could not be stashed.
+ * @param array $warnings Array of Api upload warnings
* @return array
*/
private function getStashResult( $warnings ) {
/**
* Get Warnings Result
- * @param $warnings array Array of Api upload warnings
+ * @param array $warnings Array of Api upload warnings
* @return array
*/
private function getWarningsResult( $warnings ) {
/**
* Get the result of a chunk upload.
- * @param $warnings array Array of Api upload warnings
+ * @param array $warnings Array of Api upload warnings
* @return array
*/
private function getChunkResult( $warnings ) {
$filekey = $this->performStash();
} else {
$filekey = $this->mParams['filekey'];
+ /** @var $status Status */
$status = $this->mUpload->addChunk(
$chunkPath, $chunkSize, $this->mParams['offset'] );
if ( !$status->isGood() ) {
array(
'filename' => $this->mParams['filename'],
'filekey' => $this->mParams['filekey'],
- 'session' => $this->getRequest()->exportUserSession(),
- 'userid' => $this->getUser()->getId()
+ 'session' => $this->getContext()->exportSession()
)
) );
if ( $ok ) {
* Throw an error that the user can recover from by providing a better
* value for $parameter
*
- * @param $error array Error array suitable for passing to dieUsageMsg()
- * @param $parameter string Parameter that needs revising
- * @param $data array Optional extra data to pass to the user
+ * @param array $error Error array suitable for passing to dieUsageMsg()
+ * @param string $parameter Parameter that needs revising
+ * @param array $data Optional extra data to pass to the user
* @throws UsageException
*/
private function dieRecoverableError( $error, $parameter, $data = array() ) {
/**
* Performs file verification, dies on error.
*/
- protected function verifyUpload( ) {
- $verification = $this->mUpload->verifyUpload( );
+ protected function verifyUpload() {
+ $verification = $this->mUpload->verifyUpload();
if ( $verification['status'] === UploadBase::OK ) {
return;
} else {
* Perform the actual upload. Returns a suitable result array on success;
* dies on failure.
*
- * @param $warnings array Array of Api upload warnings
+ * @param array $warnings Array of Api upload warnings
* @return array
*/
protected function performUpload( $warnings ) {
$this->mParams['text'] = $this->mParams['comment'];
}
+ /** @var $file File */
$file = $this->mUpload->getLocalFile();
$watch = $this->getWatchlistValue( $this->mParams['watchlist'], $file->getTitle() );
'comment' => $this->mParams['comment'],
'text' => $this->mParams['text'],
'watch' => $watch,
- 'session' => $this->getRequest()->exportUserSession(),
- 'userid' => $this->getUser()->getId()
+ 'session' => $this->getContext()->exportSession()
)
) );
if ( $ok ) {
"Failed to start PublishStashedFile.php", 'publishfailed' );
}
} else {
+ /** @var $status Status */
$status = $this->mUpload->performUpload( $this->mParams['comment'],
$this->mParams['text'], $watch, $this->getUser() );
* Returns an array giving the start and end of each range. The first
* batch has a start of false, and the last batch has an end of false.
*
- * @param $table String: the links table name
+ * @param string $table the links table name
* @param $batchSize Integer
* @return Array
*/
* calculated value will be stored to the cache in a wrapper.
*
* @param $cache BagOStuff a cache object such as $wgMemc
- * @param $key String: the cache key
+ * @param string $key the cache key
* @param $expiry Integer: the expiry timestamp or interval in seconds
* @param $callback Mixed: the callback for generating the value, or false
- * @param $callbackParams Array: the function parameters for the callback
- * @param $deps Array: the dependencies to store on a cache miss. Note: these
+ * @param array $callbackParams the function parameters for the callback
+ * @param array $deps the dependencies to store on a cache miss. Note: these
* are not the dependencies used on a cache hit! Cache hits use the stored
* dependency array.
*
/**
* Create a file dependency
*
- * @param $filename String: the name of the file, preferably fully qualified
+ * @param string $filename the name of the file, preferably fully qualified
* @param $timestamp Mixed: the unix last modified timestamp, or false if the
* file does not exist. If omitted, the timestamp will be loaded from
* the file.
/**
* Check if up to date cache file exists
- * @param $timestamp string MW_TS timestamp
+ * @param string $timestamp MW_TS timestamp
*
* @return bool
*/
/**
* Returns the gender for given username.
- * @param $username String or User: username
- * @param $caller String: the calling method
+ * @param string $username or User: username
+ * @param string $caller the calling method
* @return String
*/
public function getGenderOf( $username, $caller = '' ) {
*
* @since 1.20
* @param $titles List: array of Title objects or strings
- * @param $caller String: the calling method
+ * @param string $caller the calling method
*/
public function doTitlesArray( $titles, $caller = '' ) {
$users = array();
/**
* Preloads genders for given list of users.
* @param $users List|String: usernames
- * @param $caller String: the calling method
+ * @param string $caller the calling method
*/
public function doQuery( $users, $caller = '' ) {
$default = $this->getDefault();
/**
* Construct a WHERE clause which will match all the given titles.
*
- * @param $prefix String: the appropriate table's field name prefix ('page', 'pl', etc)
+ * @param string $prefix the appropriate table's field name prefix ('page', 'pl', etc)
* @param $db DatabaseBase object to use
* @return mixed string with SQL where clause fragment, or false if no items.
*/
* Get a field of a title object from cache.
* If this link is not good, it will return NULL.
* @param $title Title
- * @param $field String: ('length','redirect','revision','model')
+ * @param string $field ('length','redirect','revision','model')
* @return mixed
*/
public function getGoodLinkFieldObj( $title, $field ) {
- $dbkey = $title->getPrefixedDbKey();
+ $dbkey = $title->getPrefixedDBkey();
if ( array_key_exists( $dbkey, $this->mGoodLinkFields ) ) {
return $this->mGoodLinkFields[$dbkey][$field];
} else {
* @param $model Integer: latest revision's content model ID
*/
public function addGoodLinkObj( $id, $title, $len = -1, $redir = null, $revision = false, $model = false ) {
- $dbkey = $title->getPrefixedDbKey();
+ $dbkey = $title->getPrefixedDBkey();
$this->mGoodLinks[$dbkey] = intval( $id );
$this->mGoodLinkFields[$dbkey] = array(
'length' => intval( $len ),
* page_latest and page_content_model
*/
public function addGoodLinkObjFromRow( $title, $row ) {
- $dbkey = $title->getPrefixedDbKey();
+ $dbkey = $title->getPrefixedDBkey();
$this->mGoodLinks[$dbkey] = intval( $row->page_id );
$this->mGoodLinkFields[$dbkey] = array(
'length' => intval( $row->page_len ),
* @param $title Title
*/
public function addBadLinkObj( $title ) {
- $dbkey = $title->getPrefixedDbKey();
+ $dbkey = $title->getPrefixedDBkey();
if ( !$this->isBadLink( $dbkey ) ) {
$this->mBadLinks[$dbkey] = 1;
}
* @param $title Title
*/
public function clearLink( $title ) {
- $dbkey = $title->getPrefixedDbKey();
+ $dbkey = $title->getPrefixedDBkey();
unset( $this->mBadLinks[$dbkey] );
unset( $this->mGoodLinks[$dbkey] );
unset( $this->mGoodLinkFields[$dbkey] );
/**
* Add a title to the link cache, return the page_id or zero if non-existent
*
- * @param $title String: title to add
+ * @param string $title title to add
* @return Integer
*/
public function addLink( $title ) {
interface LCStore {
/**
* Get a value.
- * @param $code string Language code
- * @param $key string Cache key
+ * @param string $code Language code
+ * @param string $key Cache key
*/
function get( $code, $key );
* Actual format of the file depends on the $wgLocalMessageCacheSerialized
* setting.
*
- * @param $hash String: the hash of contents, to check validity.
+ * @param string $hash the hash of contents, to check validity.
* @param $code Mixed: Optional language code, see documenation of load().
* @return bool on failure.
*/
$where[] = 'cache is empty';
$where[] = 'loading from database';
- $this->lock( $cacheKey );
+ if ( $this->lock( $cacheKey ) ) {
+ $that = $this;
+ $osc = new ScopedCallback( function() use ( $that, $cacheKey ) {
+ $that->unlock( $cacheKey );
+ } );
+ }
# Limit the concurrency of loadFromDB to a single process
# This prevents the site from going down when the cache expires
$statusKey = wfMemcKey( 'messages', $code, 'status' );
$success = $this->mMemc->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT );
if ( $success ) { // acquired lock
+ $cache = $this->mMemc;
+ $isc = new ScopedCallback( function() use ( $cache, $statusKey ) {
+ $cache->delete( $statusKey );
+ } );
$cache = $this->loadFromDB( $code );
$success = $this->setCache( $cache, $code );
if ( $success ) { // messages loaded
$success = $this->saveToCaches( $cache, true, $code );
- if ( $success ) {
- $this->mMemc->delete( $statusKey );
- } else {
+ $isc = null; // unlock
+ if ( !$success ) {
$this->mMemc->set( $statusKey, 'error', 60 * 5 );
wfDebug( __METHOD__ . ": set() error: restart memcached server!\n" );
$exception = new MWException( "Could not save cache for '$code'." );
}
} else {
- $this->mMemc->delete( $statusKey );
+ $isc = null; // unlock
$exception = new MWException( "Could not load cache from DB for '$code'." );
}
} else {
$exception = new MWException( "Could not acquire '$statusKey' lock." );
}
- $this->unlock( $cacheKey );
+ $osc = null; // unlock
}
if ( !$success ) {
* $wgMaxMsgCacheEntrySize are assigned a special value, and are loaded
* on-demand from the database later.
*
- * @param $code String: language code.
+ * @param string $code language code.
* @return Array: loaded messages for storing in caches.
*/
function loadFromDB( $code ) {
/**
* Updates cache as necessary when message page is changed
*
- * @param $title String: name of the page changed.
+ * @param string $title name of the page changed.
* @param $text Mixed: new contents of the page.
*/
public function replace( $title, $text ) {
/**
* Shortcut to update caches.
*
- * @param $cache Array: cached messages with a version.
- * @param $memc Bool: Wether to update or not memcache.
- * @param $code String: Language code.
+ * @param array $cache cached messages with a version.
+ * @param bool $memc Wether to update or not memcache.
+ * @param string $code Language code.
* @return bool on somekind of error.
*/
protected function saveToCaches( $cache, $memc = true, $code = false ) {
* we look at MediaWiki:$key)
* 2) Built-in messages via the l10n cache which is also in fallback order
*
- * @param $key String: the message cache key
+ * @param string $key the message cache key
* @param $useDB Boolean: If true will look for the message in the DB, false only
* get the message from the DB, false to use only the compiled l10n cache.
* @param bool|string|object $langcode Code of the language to get the message for.
* Get a message from the MediaWiki namespace, with caching. The key must
* first be converted to two-part lang/msg form if necessary.
*
- * @param $title String: Message cache key with initial uppercase letter.
- * @param $code String: code denoting the language to try.
+ * @param string $title Message cache key with initial uppercase letter.
+ * @param string $code code denoting the language to try.
*
* @return string|bool False on failure
*/
/**
* Find the HTCP routing rule to use for a given URL.
- * @param $url string URL to match
- * @param $rules array Array of rules, see $wgHTCPMulticastRouting for format and behavior
+ * @param string $url URL to match
+ * @param array $rules Array of rules, see $wgHTCPMulticastRouting for format and behavior
* @return mixed Element of $rules that matched, or false if nothing matched
*/
static function getRuleForURL( $url, $rules ) {
* Get a property of a user based on their user ID
*
* @param $userId integer User ID
- * @param $prop string User property
+ * @param string $prop User property
* @return mixed The property or false if the user does not exist
*/
public function getProp( $userId, $prop ) {
/**
* Preloads user names for given list of users.
- * @param $userIds Array List of user IDs
- * @param $options Array Option flags; include 'userpage' and 'usertalk'
- * @param $caller String: the calling method
+ * @param array $userIds List of user IDs
+ * @param array $options Option flags; include 'userpage' and 'usertalk'
+ * @param string $caller the calling method
*/
public function doQuery( array $userIds, $options = array(), $caller = '' ) {
wfProfileIn( __METHOD__ );
* Check if a cache type is in $options and was not loaded for this user
*
* @param $uid integer user ID
- * @param $type string Cache type
- * @param $options Array Requested cache types
+ * @param string $type Cache type
+ * @param array $options Requested cache types
* @return bool
*/
protected function queryNeeded( $uid, $type, array $options ) {
protected $connectTimeout; // string; connection timeout
protected $persistent; // bool; whether connections persist
protected $password; // string; plaintext auth password
- protected $poolSize; // integer; maximum number of idle connections
protected $serializer; // integer; the serializer to use (Redis::SERIALIZER_*)
protected $idlePoolSize = 0; // integer; current idle pool size
* Optional, default is 1 second.
* - persistent : Set this to true to allow connections to persist across
* multiple web requests. False by default.
- * - poolSize : Maximim number of idle connections. Default is 5.
* - password : The authentication password, will be sent to Redis in clear text.
* Optional, if it is unspecified, no AUTH command will be sent.
- * - serializer : Set to "php" or "igbinary". Default is "php".
+ * - serializer : Set to "php", "igbinary", or "none". Default is "php".
* @param array $options
*/
protected function __construct( array $options ) {
$this->connectTimeout = $options['connectTimeout'];
$this->persistent = $options['persistent'];
$this->password = $options['password'];
- $this->poolSize = $options['poolSize'];
if ( !isset( $options['serializer'] ) || $options['serializer'] === 'php' ) {
$this->serializer = Redis::SERIALIZER_PHP;
} elseif ( $options['serializer'] === 'igbinary' ) {
$this->serializer = Redis::SERIALIZER_IGBINARY;
+ } elseif ( $options['serializer'] === 'none' ) {
+ $this->serializer = Redis::SERIALIZER_NONE;
} else {
throw new MWException( "Invalid serializer specified." );
}
$options['persistent'] = false;
}
if ( !isset( $options['password'] ) ) {
- $options['password'] = '';
- }
- if ( !isset( $options['poolSize'] ) ) {
- $options['poolSize'] = 1;
+ $options['password'] = null;
}
return $options;
}
public static function singleton( array $options ) {
$options = self::applyDefaultConfig( $options );
// Map the options to a unique hash...
- $poolOptions = $options;
- unset( $poolOptions['poolSize'] ); // avoid pool fragmentation
- ksort( $poolOptions ); // normalize to avoid pool fragmentation
- $id = sha1( serialize( $poolOptions ) );
+ ksort( $options ); // normalize to avoid pool fragmentation
+ $id = sha1( serialize( $options ) );
// Initialize the object at the hash as needed...
if ( !isset( self::$instances[$id] ) ) {
self::$instances[$id] = new self( $options );
wfDebug( "Creating a new " . __CLASS__ . " instance with id $id." );
}
- // Simply grow the pool size if the existing one is too small
- $psize = $options['poolSize']; // size requested
- self::$instances[$id]->poolSize = max( $psize, self::$instances[$id]->poolSize );
-
return self::$instances[$id];
}
/**
* Get a connection to a redis server. Based on code in RedisBagOStuff.php.
*
- * @param $server string A hostname/port combination or the absolute path of a UNIX socket.
+ * @param string $server A hostname/port combination or the absolute path of a UNIX socket.
* If a hostname is specified but no port, port 6379 will be used.
* @return RedisConnRef|bool Returns false on failure
* @throws MWException
* @return void
*/
protected function closeExcessIdleConections() {
- if ( $this->idlePoolSize <= $this->poolSize ) {
- return; // nothing to do
+ if ( $this->idlePoolSize <= count( $this->connections ) ) {
+ return; // nothing to do (no more connections than servers)
}
foreach ( $this->connections as $server => &$serverConnections ) {
foreach ( $serverConnections as $key => &$connection ) {
if ( $connection['free'] ) {
unset( $serverConnections[$key] );
- if ( --$this->idlePoolSize <= $this->poolSize ) {
- return; // done
+ if ( --$this->idlePoolSize <= count( $this->connections ) ) {
+ return; // done (no more connections than servers)
}
}
}
* object and let it be reopened during the next request.
*
* @param $server string
- * @param $conn RedisConnRef
+ * @param $cref RedisConnRef
* @param $e RedisException
* @return void
*/
- public function handleException( $server, RedisConnRef $conn, RedisException $e ) {
- wfDebugLog( 'redis',
- "Redis exception on server $server: " . $e->getMessage() . "\n" );
+ public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
+ wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() . "\n" );
foreach ( $this->connections[$server] as $key => $connection ) {
- if ( $connection['conn'] === $conn ) {
+ if ( $cref->isConnIdentical( $connection['conn'] ) ) {
$this->idlePoolSize -= $connection['free'] ? 1 : 0;
unset( $this->connections[$server][$key] );
break;
class RedisConnRef {
/** @var RedisConnectionPool */
protected $pool;
-
- protected $server; // string
-
/** @var Redis */
protected $conn;
+ protected $server; // string
+
/**
* @param $pool RedisConnectionPool
* @param $server string
return call_user_func_array( array( $this->conn, $name ), $arguments );
}
+ public function isConnIdentical( Redis $conn ) {
+ return $this->conn === $conn;
+ }
+
function __destruct() {
$this->pool->freeConnection( $this->server, $this->conn );
}
* This base implementation calls the hook ConvertContent to enable custom conversions.
* Subclasses may override this to implement conversion for "their" content model.
*
- * @param String $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
- * @param String $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+ * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+ * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
* not allowed, full round-trip conversion is expected to work without losing information.
*
* @return Content|bool A content object with the content model $toModel, or false if
*
* @since 1.21
*
- * @param $maxLength int Maximum length of the summary text
+ * @param int $maxLength Maximum length of the summary text
* @return string The summary text
*/
public function getTextForSummary( $maxLength = 250 );
*
* @since 1.21
*
- * @param $format string The format to check
+ * @param string $format The format to check
* @return bool Whether the format is supported
*/
public function isSupportedFormat( $format );
*
* @return Content. A copy of this object
*/
- public function copy( );
+ public function copy();
/**
* Returns true if this content is countable as a "real" wiki page, provided
*
* @since 1.21
*
- * @param $hasLinks Bool: If it is known whether this content contains
+ * @param bool $hasLinks If it is known whether this content contains
* links, provide this information here, to avoid redundant parsing to
* find out.
* @return boolean
*
* @since 1.21
*
- * @param $sectionId string The section's ID, given as a numeric string.
+ * @param string $sectionId The section's ID, given as a numeric string.
* The ID "0" retrieves the section before the first heading, "1" the
* text between the first heading (included) and the second heading
* (excluded), etc.
*
* @param $section null/false or a section number (0, 1, 2, T1, T2...), or "new"
* @param $with Content: new content of the section
- * @param $sectionTitle String: new section's subject, only if $section is 'new'
+ * @param string $sectionTitle new section's subject, only if $section is 'new'
* @return string Complete article text, or null if error
*/
public function replaceSection( $section, Content $with, $sectionTitle = '' );
* Converts this content object into another content object with the given content model,
* if that is possible.
*
- * @param String $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
- * @param String $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+ * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+ * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
* not allowed, full round-trip conversion is expected to work without losing information.
*
* @return Content|bool A content object with the content model $toModel, or false if
*
* @since 1.21
*
- * @param $text string the textual representation, will be
+ * @param string $text the textual representation, will be
* unserialized to create the Content object
* @param $title null|Title the title of the page this text belongs to.
* Required if $modelId is not provided.
* @throws MWException
* @return Content a Content object representing $text
*
- * @throw MWException if $model or $format is not supported or if $text can
+ * @throws MWException if $model or $format is not supported or if $text can
* not be unserialized using $format.
*/
public static function makeContent( $text, Title $title = null,
*
* @since 1.21
*
- * @param $modelId String The ID of the content model for which to get a
+ * @param string $modelId The ID of the content model for which to get a
* handler. Use CONTENT_MODEL_XXX constants.
* @return ContentHandler The ContentHandler singleton for handling the
* model given by $modelId
* Model names are localized using system messages. Message keys
* have the form content-model-$name, where $name is getContentModelName( $id ).
*
- * @param $name String The content model ID, as given by a CONTENT_MODEL_XXX
+ * @param string $name The content model ID, as given by a CONTENT_MODEL_XXX
* constant or returned by Revision::getContentModel().
*
* @return string The content format's localized name.
* and a list of supported formats. Values for the parameters are typically
* provided as literals by subclass's constructors.
*
- * @param $modelId String (use CONTENT_MODEL_XXX constants).
- * @param $formats array List for supported serialization formats
+ * @param string $modelId (use CONTENT_MODEL_XXX constants).
+ * @param array $formats List for supported serialization formats
* (typically as MIME types)
*/
public function __construct( $modelId, $formats ) {
*
* @since 1.21
*
- * @param $blob string serialized form of the content
+ * @param string $blob serialized form of the content
* @param $format null|String the format used for serialization
* @return Content the Content object created by deserializing $blob
*/
*
* @since 1.21
*
- * @param String $model_id The model to check
+ * @param string $model_id The model to check
*
* @throws MWException
*/
*
* @since 1.21
*
- * @param $format string the serialization format to check
+ * @param string $format the serialization format to check
* @return bool
*/
public function isSupportedFormat( $format ) {
* Convenient for checking whether a format provided as a parameter is
* actually supported.
*
- * @param $format string the serialization format to check
+ * @param string $format the serialization format to check
*
* @throws MWException
*/
* @param $context IContextSource context to use, anything else will be
* ignored
* @param $old Integer Old ID we want to show and diff with.
- * @param $new int|string String either 'prev' or 'next'.
+ * @param int|string $new String either 'prev' or 'next'.
* @param $rcid Integer ??? FIXME (default 0)
* @param $refreshCache boolean If set, refreshes the diff cache
* @param $unhide boolean If set, allow viewing deleted revs
*
* @param $oldContent Content|null: the previous text of the page.
* @param $newContent Content|null: The submitted text of the page.
- * @param $flags int Bit mask: a bit mask of flags submitted for the edit.
+ * @param int $flags Bit mask: a bit mask of flags submitted for the edit.
*
* @return string An appropriate auto-summary, or an empty string.
*/
* Logs a deprecation warning, visible if $wgDevelopmentWarnings, but only if
* self::$enableDeprecationWarnings is set to true.
*
- * @param String $func The name of the deprecated function
+ * @param string $func The name of the deprecated function
* @param string $version The version since the method is deprecated. Usually 1.21
* for ContentHandler related stuff.
- * @param String|bool $component: Component to which the function belongs.
+ * @param string|bool $component: Component to which the function belongs.
* If false, it is assumed the function is in MediaWiki core.
*
* @see ContentHandler::$enableDeprecationWarnings
* hook function, a new Content object is constructed from the new
* text.
*
- * @param $event String: event name
- * @param $args Array: parameters passed to hook functions
- * @param $warn bool: whether to log a warning.
+ * @param string $event event name
+ * @param array $args parameters passed to hook functions
+ * @param bool $warn whether to log a warning.
* Default to self::$enableDeprecationWarnings.
* May be set to false for testing.
*
wfSuppressWarnings();
foreach ( $handlers as $handler ) {
- $info = '';
-
if ( is_array( $handler ) ) {
if ( is_object( $handler[0] ) ) {
$info = get_class( $handler[0] );
return new CssContent( $pst );
}
- protected function getHtml( ) {
+ protected function getHtml() {
$html = "";
$html .= "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n";
- $html .= $this->getHighlightHtml( );
+ $html .= $this->getHighlightHtml();
$html .= "\n</pre>\n";
return $html;
return new JavaScriptContent( $pst );
}
- protected function getHtml( ) {
+ protected function getHtml() {
$html = "";
$html .= "<pre class=\"mw-code mw-js\" dir=\"ltr\">\n";
- $html .= $this->getHighlightHtml( );
+ $html .= $this->getHighlightHtml();
$html .= "\n</pre>\n";
return $html;
*
* @return int The size
*/
- public function getSize( ) {
- $text = $this->getNativeData( );
+ public function getSize() {
+ $text = $this->getNativeData();
return strlen( $text );
}
* Returns true if this content is not a redirect, and $wgArticleCountMethod
* is "any".
*
- * @param $hasLinks Bool: if it is known whether this content contains links,
+ * @param bool $hasLinks if it is known whether this content contains links,
* provide this information here, to avoid redundant parsing to find out.
*
* @return bool True if the content is countable
public function isCountable( $hasLinks = null ) {
global $wgArticleCountMethod;
- if ( $this->isRedirect( ) ) {
+ if ( $this->isRedirect() ) {
return false;
}
*
* @return string: the raw text
*/
- public function getNativeData( ) {
+ public function getNativeData() {
$text = $this->mText;
return $text;
}
*
* @return string: the raw text
*/
- public function getTextForSearchIndex( ) {
+ public function getTextForSearchIndex() {
return $this->getNativeData();
}
*
* @return string|false: the raw text, or null if the conversion failed
*/
- public function getWikitextForTransclusion( ) {
+ public function getWikitextForTransclusion() {
$wikitext = $this->convert( CONTENT_MODEL_WIKITEXT, 'lossy' );
if ( $wikitext ) {
# @todo: could implement this in DifferenceEngine and just delegate here?
- if ( !$lang ) $lang = $wgContLang;
+ if ( !$lang ) {
+ $lang = $wgContLang;
+ }
$otext = $this->getNativeData();
$ntext = $this->getNativeData();
# Note: Use native PHP diff, external engines don't give us abstract output
- $ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) );
- $nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) );
+ $ota = explode( "\n", $lang->segmentForDiff( $otext ) );
+ $nta = explode( "\n", $lang->segmentForDiff( $ntext ) );
$diff = new Diff( $ota, $nta );
return $diff;
* getHtml().
*
* @param $title Title Context title for parsing
- * @param $revId int|null Revision ID (for {{REVISIONID}})
+ * @param int|null $revId Revision ID (for {{REVISIONID}})
* @param $options ParserOptions|null Parser options
- * @param $generateHtml bool Whether or not to generate HTML
+ * @param bool $generateHtml Whether or not to generate HTML
*
* @return ParserOutput representing the HTML form of the text
*/
*
* @return string an HTML representation of the content's markup
*/
- protected function getHighlightHtml( ) {
+ protected function getHighlightHtml() {
# TODO: make Highlighter interface, use highlighter here, if available
return htmlspecialchars( $this->getNativeData() );
}
* This implementation provides lossless conversion between content models based
* on TextContent.
*
- * @param String $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
- * @param String $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
+ * @param string $toModel the desired content model, use the CONTENT_MODEL_XXX flags.
+ * @param string $lossy flag, set to "lossy" to allow lossy conversion. If lossy conversion is
* not allowed, full round-trip conversion is expected to work without losing information.
*
* @return Content|bool A content object with the content model $toModel, or false if
* Returns true if this content is not a redirect, and this content's text
* is countable according to the criteria defined by $wgArticleCountMethod.
*
- * @param $hasLinks Bool if it is known whether this content contains
+ * @param bool $hasLinks if it is known whether this content contains
* links, provide this information here, to avoid redundant parsing to
* find out (default: null).
* @param $title Title: (default: null)
public function isCountable( $hasLinks = null, Title $title = null ) {
global $wgArticleCountMethod;
- if ( $this->isRedirect( ) ) {
+ if ( $this->isRedirect() ) {
return false;
}
* @since 1.21
*
* @param $title Title
- * @param $revId int Revision to pass to the parser (default: null)
+ * @param int $revId Revision to pass to the parser (default: null)
* @param $options ParserOptions (default: null)
- * @param $generateHtml bool (default: false)
+ * @param bool $generateHtml (default: false)
*
* @internal param \IContextSource|null $context
* @return ParserOutput representing the HTML form of the text
$args = func_get_args();
return call_user_func_array( array( $this->getContext(), 'msg' ), $args );
}
+
+ /**
+ * Export the resolved user IP, HTTP headers, user ID, and session ID.
+ * The result will be reasonably sized to allow for serialization.
+ *
+ * @return Array
+ * @since 1.21
+ */
+ public function exportSession() {
+ return $this->getContext()->exportSession();
+ }
}
* @return Message
*/
public function msg();
+
+ /**
+ * Export the resolved user IP, HTTP headers, user ID, and session ID.
+ * The result will be reasonably sized to allow for serialization.
+ *
+ * @return Array
+ * @since 1.21
+ */
+ public function exportSession();
}
}
/**
- * Import the resolved user IP, HTTP headers, and session ID.
+ * Export the resolved user IP, HTTP headers, user ID, and session ID.
+ * The result will be reasonably sized to allow for serialization.
+ *
+ * @return Array
+ * @since 1.21
+ */
+ public function exportSession() {
+ return array(
+ 'ip' => $this->getRequest()->getIP(),
+ 'headers' => $this->getRequest()->getAllHeaders(),
+ 'sessionId' => session_id(),
+ 'userId' => $this->getUser()->getId()
+ );
+ }
+
+ /**
+ * Import the resolved user IP, HTTP headers, user ID, and session ID.
* This sets the current session and sets $wgUser and $wgRequest.
* Once the return value falls out of scope, the old context is restored.
* This function can only be called within CLI mode scripts.
*
* This will setup the session from the given ID. This is useful when
- * background scripts inherit some context when acting on behalf of a user.
+ * background scripts inherit context when acting on behalf of a user.
*
- * $param array $params Result of WebRequest::exportUserSession()
+ * $param array $params Result of RequestContext::exportSession()
* @return ScopedCallback
* @throws MWException
* @since 1.21
*/
public static function importScopedSession( array $params ) {
if ( PHP_SAPI !== 'cli' ) {
- // Don't send random private cookie headers to other random users
+ // Don't send random private cookies or turn $wgRequest into FauxRequest
throw new MWException( "Sessions can only be imported in cli mode." );
+ } elseif ( !strlen( $params['sessionId'] ) ) {
+ throw new MWException( "No session ID was specified." );
}
- $importSessionFunction = function( array $params ) {
+ if ( $params['userId'] ) { // logged-in user
+ $user = User::newFromId( $params['userId'] );
+ if ( !$user ) {
+ throw new MWException( "No user with ID '{$params['userId']}'." );
+ }
+ } elseif ( !IP::isValid( $params['ip'] ) ) {
+ throw new MWException( "Could not load user '{$params['ip']}'." );
+ } else { // anon user
+ $user = User::newFromName( $params['ip'], false );
+ }
+
+ $importSessionFunction = function( User $user, array $params ) {
global $wgRequest, $wgUser;
- // Write and close any current session
+ $context = RequestContext::getMain();
+ // Commit and close any current session
session_write_close(); // persist
session_id( '' ); // detach
$_SESSION = array(); // clear in-memory array
- // Load the new session from the session ID
- if ( strlen( $params['sessionId'] ) ) {
+ // Remove any user IP or agent information
+ $context->setRequest( new FauxRequest() );
+ $wgRequest = $context->getRequest(); // b/c
+ // Now that all private information is detached from the user, it should
+ // be safe to load the new user. If errors occur or an exception is thrown
+ // and caught (leaving the main context in a mixed state), there is no risk
+ // of the User object being attached to the wrong IP, headers, or session.
+ $context->setUser( $user );
+ $wgUser = $context->getUser(); // b/c
+ if ( strlen( $params['sessionId'] ) ) { // don't make a new random ID
wfSetupSession( $params['sessionId'] ); // sets $_SESSION
}
- // Build the new WebRequest object
$request = new FauxRequest( array(), false, $_SESSION );
$request->setIP( $params['ip'] );
foreach ( $params['headers'] as $name => $value ) {
$request->setHeader( $name, $value );
}
-
- $context = RequestContext::getMain();
// Set the current context to use the new WebRequest
$context->setRequest( $request );
$wgRequest = $context->getRequest(); // b/c
- // Set the current user based on the new session and WebRequest
- $context->setUser( User::newFromSession( $request ) ); // uses $_SESSION
- $wgUser = $context->getUser(); // b/c
};
// Stash the old session and load in the new one
- $oldParams = self::getMain()->getRequest()->exportUserSession();
- $importSessionFunction( $params );
+ $oUser = self::getMain()->getUser();
+ $oParams = self::getMain()->exportSession();
+ $importSessionFunction( $user, $params );
// Set callback to save and close the new session and reload the old one
- return new ScopedCallback( function() use ( $importSessionFunction, $oldParams ) {
- $importSessionFunction( $oldParams );
+ return new ScopedCallback( function() use ( $importSessionFunction, $oUser, $oParams ) {
+ $importSessionFunction( $oUser, $oParams );
} );
}
protected $wiki = false;
/**
- * @param String|bool $wiki The target wiki's name. This must be an ID
+ * @param string|bool $wiki The target wiki's name. This must be an ID
* that LBFactory can understand.
*/
public function __construct( $wiki = false ) {
* Constructor
*
* @param $db DatabaseBase A database subclass
- * @param $tablesToClone Array An array of tables to clone, unprefixed
- * @param $newTablePrefix String Prefix to assign to the tables
- * @param $oldTablePrefix String Prefix on current tables, if not $wgDBprefix
+ * @param array $tablesToClone An array of tables to clone, unprefixed
+ * @param string $newTablePrefix Prefix to assign to the tables
+ * @param string $oldTablePrefix Prefix on current tables, if not $wgDBprefix
* @param $dropCurrentTables bool
*/
public function __construct( DatabaseBase $db, array $tablesToClone,
/**
* Set whether to use temporary tables or not
- * @param $u Bool Use temporary tables when cloning the structure
+ * @param bool $u Use temporary tables when cloning the structure
*/
public function useTemporaryTables( $u = true ) {
$this->useTemporaryTables = $u;
/**
* Change the prefix back to the original.
- * @param $dropTables bool Optionally drop the tables we created
+ * @param bool $dropTables Optionally drop the tables we created
*/
public function destroy( $dropTables = false ) {
if( $dropTables ) {
/**
* Open a connection to the database. Usually aborts on failure
*
- * @param $server String: database server host
- * @param $user String: database user name
- * @param $password String: database user password
- * @param $dbName String: database name
+ * @param string $server database server host
+ * @param string $user database user name
+ * @param string $password database user password
+ * @param string $dbName database name
* @return bool
* @throws DBConnectionError
*/
* mysql_fetch_field() wrapper
* Returns false if the field doesn't exist
*
- * @param $table string: table name
- * @param $field string: field name
+ * @param string $table table name
+ * @param string $field field name
*
* @return Field
*/
/**
* Get information about an index into an object
- * @param $table string: Table name
- * @param $index string: Index name
- * @param $fname string: Calling function name
+ * @param string $table Table name
+ * @param string $index Index name
+ * @param string $fname Calling function name
* @return Mixed: Database-specific index description class or false if the index does not exist
*/
function indexInfo( $table, $index, $fname = 'Database::indexInfo' );
/**
* Wrapper for addslashes()
*
- * @param $s string: to be slashed.
+ * @param string $s to be slashed.
* @return string: slashed string.
*/
function strencode( $s );
* Historically, transactions were allowed to be "nested". This is no
* longer supported, so this function really only returns a boolean.
*
- * @param $level int An integer (0 or 1), or omitted to leave it unchanged.
+ * @param int $level An integer (0 or 1), or omitted to leave it unchanged.
* @return int The previous value
*/
public function trxLevel( $level = null ) {
/**
* Get/set the number of errors logged. Only useful when errors are ignored
- * @param $count int The count to set, or omitted to leave it unchanged.
+ * @param int $count The count to set, or omitted to leave it unchanged.
* @return int The error count
*/
public function errorCount( $count = null ) {
/**
* Get/set the table prefix.
- * @param $prefix string The table prefix to set, or omitted to leave it unchanged.
+ * @param string $prefix The table prefix to set, or omitted to leave it unchanged.
* @return string The previous table prefix.
*/
public function tablePrefix( $prefix = null ) {
* Get properties passed down from the server info array of the load
* balancer.
*
- * @param $name string The entry of the info array to get, or null to get the
+ * @param string $name The entry of the info array to get, or null to get the
* whole array
*
* @return LoadBalancer|null
/**
* Constructor.
- * @param $server String: database server host
- * @param $user String: database user name
- * @param $password String: database user password
- * @param $dbName String: database name
+ * @param string $server database server host
+ * @param string $user database user name
+ * @param string $password database user password
+ * @param string $dbName database name
* @param $flags
- * @param $tablePrefix String: database table prefixes. By default use the prefix gave in LocalSettings.php
+ * @param string $tablePrefix database table prefixes. By default use the prefix gave in LocalSettings.php
*/
function __construct( $server = false, $user = false, $password = false, $dbName = false,
$flags = 0, $tablePrefix = 'get from global'
*
* @since 1.18
*
- * @param $dbType String A possible DB type
- * @param $p Array An array of options to pass to the constructor.
+ * @param string $dbType A possible DB type
+ * @param array $p An array of options to pass to the constructor.
* Valid options are: host, user, password, dbname, flags, tablePrefix
* @return DatabaseBase subclass or null
*/
abstract protected function closeConnection();
/**
- * @param $error String: fallback error message, used if none is given by DB
+ * @param string $error fallback error message, used if none is given by DB
* @throws DBConnectionError
*/
function reportConnectionError( $error = 'Unknown error' ) {
/**
* Execute a prepared query with the various arguments
- * @param $prepared String: the prepared sql
+ * @param string $prepared the prepared sql
* @param $args Mixed: Either an array here, or put scalars as varargs
*
* @return ResultWrapper
/**
* For faking prepared SQL statements on DBs that don't support it directly.
*
- * @param $preparedQuery String: a 'preparable' SQL statement
- * @param $args Array of arguments to fill it with
+ * @param string $preparedQuery a 'preparable' SQL statement
+ * @param array $args of arguments to fill it with
* @return string executable SQL
*/
public function fillPrepared( $preparedQuery, $args ) {
*
* If no result rows are returned from the query, false is returned.
*
- * @param $table string|array Table name. See DatabaseBase::select() for details.
- * @param $var string The field name to select. This must be a valid SQL
+ * @param string|array $table Table name. See DatabaseBase::select() for details.
+ * @param string $var The field name to select. This must be a valid SQL
* fragment: do not use unvalidated user input.
- * @param $cond string|array The condition array. See DatabaseBase::select() for details.
- * @param $fname string The function name of the caller.
- * @param $options string|array The query options. See DatabaseBase::select() for details.
+ * @param string|array $cond The condition array. See DatabaseBase::select() for details.
+ * @param string $fname The function name of the caller.
+ * @param string|array $options The query options. See DatabaseBase::select() for details.
*
* @return bool|mixed The value from the field, or false on failure.
*/
* Returns an optional USE INDEX clause to go after the table, and a
* string to go at the end of the query.
*
- * @param $options Array: associative array of options to be turned into
+ * @param array $options associative array of options to be turned into
* an SQL query, valid keys are listed in the function.
* @return Array
* @see DatabaseBase::select()
/**
* Returns an optional GROUP BY with an optional HAVING
*
- * @param $options Array: associative array of options
+ * @param array $options associative array of options
* @return string
* @see DatabaseBase::select()
* @since 1.21
/**
* Returns an optional ORDER BY
*
- * @param $options Array: associative array of options
+ * @param array $options associative array of options
* @return string
* @see DatabaseBase::select()
* @since 1.21
* Execute a SELECT query constructed using the various parameters provided.
* See below for full details of the parameters.
*
- * @param $table String|Array Table name
- * @param $vars String|Array Field names
- * @param $conds String|Array Conditions
- * @param $fname String Caller function name
- * @param $options Array Query options
+ * @param string|array $table Table name
+ * @param string|array $vars Field names
+ * @param string|array $conds Conditions
+ * @param string $fname Caller function name
+ * @param array $options Query options
* @param $join_conds Array Join conditions
*
* @param $table string|array
* doing UNION queries, where the SQL text of each query is needed. In general,
* however, callers outside of Database classes should just use select().
*
- * @param $table string|array Table name
- * @param $vars string|array Field names
- * @param $conds string|array Conditions
- * @param $fname string Caller function name
- * @param $options string|array Query options
+ * @param string|array $table Table name
+ * @param string|array $vars Field names
+ * @param string|array $conds Conditions
+ * @param string $fname Caller function name
+ * @param string|array $options Query options
* @param $join_conds string|array Join conditions
*
* @return string SQL query string.
* that a single row object is returned. If the query returns no rows,
* false is returned.
*
- * @param $table string|array Table name
- * @param $vars string|array Field names
- * @param $conds array Conditions
- * @param $fname string Caller function name
- * @param $options string|array Query options
+ * @param string|array $table Table name
+ * @param string|array $vars Field names
+ * @param array $conds Conditions
+ * @param string $fname Caller function name
+ * @param string|array $options Query options
* @param $join_conds array|string Join conditions
*
* @return object|bool
*
* Takes the same arguments as DatabaseBase::select().
*
- * @param $table String: table name
- * @param Array|string $vars : unused
- * @param Array|string $conds : filters on the table
- * @param $fname String: function name for profiling
- * @param $options Array: options for select
+ * @param string $table table name
+ * @param array|string $vars : unused
+ * @param array|string $conds : filters on the table
+ * @param string $fname function name for profiling
+ * @param array $options options for select
* @return Integer: row count
*/
public function estimateRowCount( $table, $vars = '*', $conds = '',
* Removes most variables from an SQL query and replaces them with X or N for numbers.
* It's only slightly flawed. Don't use for anything important.
*
- * @param $sql String A SQL Query
+ * @param string $sql A SQL Query
*
* @return string
*/
/**
* Determines whether a field exists in a table
*
- * @param $table String: table name
- * @param $field String: filed to check on that table
- * @param $fname String: calling function name (optional)
+ * @param string $table table name
+ * @param string $field filed to check on that table
+ * @param string $fname calling function name (optional)
* @return Boolean: whether $table has filed $field
*/
public function fieldExists( $table, $field, $fname = 'DatabaseBase::fieldExists' ) {
* DatabaseBase::tableName().
* @param $a Array of rows to insert
* @param $fname String Calling function name (use __METHOD__) for logs/profiling
- * @param $options Array of options
+ * @param array $options of options
*
* @return bool
*/
/**
* Make UPDATE options for the DatabaseBase::update function
*
- * @param $options Array: The options passed to DatabaseBase::update
+ * @param array $options The options passed to DatabaseBase::update
* @return string
*/
protected function makeUpdateOptions( $options ) {
* @param $table String name of the table to UPDATE. This will be passed through
* DatabaseBase::tableName().
*
- * @param $values Array: 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().
* @param $fname String: The function name of the caller (from __METHOD__),
* for logging and profiling.
*
- * @param $options Array: An array of UPDATE options, can be:
+ * @param array $options An array of UPDATE options, can be:
* - IGNORE: Ignore unique key conflicts
* - LOW_PRIORITY: MySQL-specific, see MySQL manual.
* @return Boolean
/**
* Makes an encoded list of strings from an array
- * @param $a Array containing the data
+ * @param array $a containing the data
* @param int $mode Constant
* - LIST_COMMA: comma separated, no field names
* - LIST_AND: ANDed WHERE clause (without the WHERE). See
* Build a partial where clause from a 2-d array such as used for LinkBatch.
* The keys on each level may be either integers or strings.
*
- * @param $data Array: organized as 2-d
+ * @param array $data organized as 2-d
* array(baseKeyVal => array(subKeyVal => [ignored], ...), ...)
- * @param $baseKey String: field name to match the base-level keys to (eg 'pl_namespace')
- * @param $subKey String: field name to match the sub-level keys to (eg 'pl_title')
+ * @param string $baseKey field name to match the base-level keys to (eg 'pl_namespace')
+ * @param string $subKey field name to match the sub-level keys to (eg 'pl_title')
* @return Mixed: string SQL fragment, or false if no items in array.
*/
public function makeWhereFrom2d( $data, $baseKey, $subKey ) {
/**
* Build a concatenation list to feed into a SQL query
- * @param $stringList Array: list of raw SQL expressions; caller is responsible for any quoting
+ * @param array $stringList list of raw SQL expressions; caller is responsible for any quoting
* @return String
*/
public function buildConcat( $stringList ) {
* themselves. Pass the canonical name to such functions. This is only needed
* when calling query() directly.
*
- * @param $name String: database table name
- * @param $format String One of:
+ * @param string $name database table name
+ * @param string $format One of:
* quoted - Automatically pass the table name through addIdentifierQuotes()
* so that it can be used in a query.
* raw - Do not add identifier quotes to the table name
* Get an aliased table name
* e.g. tableName AS newTableName
*
- * @param $name string Table name, see tableName()
- * @param $alias string|bool Alias (optional)
+ * @param string $name Table name, see tableName()
+ * @param string|bool $alias Alias (optional)
* @return string SQL name for aliased table. Will not alias a table to its own name
*/
public function tableNameWithAlias( $name, $alias = false ) {
* Get an aliased field name
* e.g. fieldName AS newFieldName
*
- * @param $name string Field name
- * @param $alias string|bool Alias (optional)
+ * @param string $name Field name
+ * @param string|bool $alias Alias (optional)
* @return string SQL name for aliased field. Will not alias a field to its own name
*/
public function fieldNameWithAlias( $name, $alias = false ) {
* Get the aliased table name clause for a FROM clause
* which might have a JOIN and/or USE INDEX clause
*
- * @param $tables array ( [alias] => table )
+ * @param array $tables ( [alias] => table )
* @param $use_index array Same as for select()
* @param $join_conds array Same as for select()
* @return string
* to collide. However if you do this, you run the risk of encountering
* errors which wouldn't have occurred in MySQL.
*
- * @param $table String: The table to replace the row(s) in.
- * @param $rows array Can be either a single row to insert, or multiple rows,
+ * @param string $table The table to replace the row(s) in.
+ * @param array $rows Can be either a single row to insert, or multiple rows,
* in the same format as for DatabaseBase::insert()
- * @param $uniqueIndexes array is an array of indexes. Each element may be either
+ * @param array $uniqueIndexes is an array of indexes. Each element may be either
* a field name or an array of field names
- * @param $fname String: Calling function name (use __METHOD__) for logs/profiling
+ * @param string $fname Calling function name (use __METHOD__) for logs/profiling
*/
public function replace( $table, $uniqueIndexes, $rows, $fname = 'DatabaseBase::replace' ) {
$quotedTable = $this->tableName( $table );
* REPLACE query wrapper for MySQL and SQLite, which have a native REPLACE
* statement.
*
- * @param $table string Table name
- * @param $rows array Rows to insert
- * @param $fname string Caller function name
+ * @param string $table Table name
+ * @param array $rows Rows to insert
+ * @param string $fname Caller function name
*
* @return ResultWrapper
*/
/**
* DELETE query wrapper.
*
- * @param $table Array Table name
- * @param $conds String|Array of conditions. See $conds in DatabaseBase::select() for
+ * @param array $table Table name
+ * @param string|array $conds of conditions. See $conds in DatabaseBase::select() for
* the format. Use $conds == "*" to delete all rows
- * @param $fname String name of the calling function
+ * @param string $fname name of the calling function
*
* @throws DBUnexpectedError
* @return bool|ResultWrapper
* INSERT SELECT wrapper. Takes data from a SELECT query and inserts it
* into another table.
*
- * @param $destTable string The table name to insert into
- * @param $srcTable string|array May be either a table name, or an array of table names
+ * @param string $destTable The table name to insert into
+ * @param string|array $srcTable May be either a table name, or an array of table names
* to include in a join.
*
- * @param $varMap array must be an associative array of the form
+ * @param array $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
* DatabaseBase::addQuotes()
*
- * @param $conds array Condition array. See $conds in DatabaseBase::select() for
+ * @param array $conds Condition array. See $conds in DatabaseBase::select() for
* the details of the format of condition arrays. May be "*" to copy the
* whole table.
*
- * @param $fname string The function name of the caller, from __METHOD__
+ * @param string $fname The function name of the caller, from __METHOD__
*
- * @param $insertOptions array Options for the INSERT part of the query, see
+ * @param array $insertOptions Options for the INSERT part of the query, see
* DatabaseBase::insert() for details.
- * @param $selectOptions array Options for the SELECT part of the query, see
+ * @param array $selectOptions Options for the SELECT part of the query, see
* DatabaseBase::select() for details.
*
* @return ResultWrapper
* The version provided by default works in MySQL and SQLite. It will very
* likely need to be overridden for most other DBMSes.
*
- * @param $sql String SQL query we will append the limit too
+ * @param string $sql SQL query we will append the limit too
* @param $limit Integer the SQL limit
* @param $offset Integer|bool the SQL offset (default false)
*
* Construct a UNION query
* This is used for providing overload point for other DB abstractions
* not compatible with the MySQL syntax.
- * @param $sqls Array: SQL statements to combine
+ * @param array $sqls SQL statements to combine
* @param $all Boolean: use UNION ALL
* @return String: SQL fragment
*/
* Returns an SQL expression for a simple conditional. This doesn't need
* to be overridden unless CASE isn't supported in your DBMS.
*
- * @param $cond string|array SQL expression which will result in a boolean value
- * @param $trueVal String: SQL expression to return if true
- * @param $falseVal String: SQL expression to return if false
+ * @param string|array $cond SQL expression which will result in a boolean value
+ * @param string $trueVal SQL expression to return if true
+ * @param string $falseVal SQL expression to return if false
* @return String: SQL fragment
*/
public function conditional( $cond, $trueVal, $falseVal ) {
* Returns a comand for str_replace function in SQL query.
* Uses REPLACE() in MySQL
*
- * @param $orig String: column to modify
- * @param $old String: column to seek
- * @param $new String: column to replace with
+ * @param string $orig column to modify
+ * @param string $old column to seek
+ * @param string $new column to replace with
*
* @return string
*/
* Nesting of transactions is not supported.
*
* @param $fname string
- * @param $flush String Flush flag, set to 'flush' to disable warnings about explicitly committing implicit
+ * @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.
* The table names passed to this function shall not be quoted (this
* function calls addIdentifierQuotes when needed).
*
- * @param $oldName String: name of table whose structure should be copied
- * @param $newName String: name of table to be created
+ * @param string $oldName name of table whose structure should be copied
+ * @param string $newName name of table to be created
* @param $temporary Boolean: whether the new table should be temporary
- * @param $fname String: calling function name
+ * @param string $fname calling function name
* @throws MWException
* @return Boolean: true if operation was successful
*/
/**
* List all tables on the database
*
- * @param $prefix string Only show tables with this prefix, e.g. mw_
- * @param $fname String: calling function name
+ * @param string $prefix Only show tables with this prefix, e.g. mw_
+ * @param string $fname calling function name
* @throws MWException
*/
function listTables( $prefix = null, $fname = 'DatabaseBase::listTables' ) {
* Returns true on success, error string or exception on failure (depending
* on object's error ignore settings).
*
- * @param $filename String: File name to open
+ * @param string $filename File name to open
* @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
* from updaters.inc. Keep in mind this always returns a patch, as
* it fails back to MySQL if no DB-specific patch can be found
*
- * @param $patch String The name of the patch, like patch-something.sql
+ * @param string $patch The name of the patch, like patch-something.sql
* @return String Full path to patch file
*/
public function patchPath( $patch ) {
* ones in $GLOBALS. If an array is set here, $GLOBALS will not be used at
* all. If it's set to false, $GLOBALS will be used.
*
- * @param $vars bool|array mapping variable name to value.
+ * @param bool|array $vars mapping variable name to value.
*/
public function setSchemaVars( $vars ) {
$this->mSchemaVars = $vars;
* @param $fp Resource: File handle
* @param $lineCallback Callback: Optional function called before reading each query
* @param $resultCallback Callback: Optional function called for each MySQL result
- * @param $fname String: Calling function name
+ * @param string $fname Calling function name
* @param $inputCallback Callback: Optional function called for each complete query sent
* @return bool|string
*/
/**
* Called by sourceStream() to check if we've reached a statement end
*
- * @param $sql String SQL assembled so far
- * @param $newLine String New line about to be added to $sql
+ * @param string $sql SQL assembled so far
+ * @param string $newLine New line about to be added to $sql
* @return Bool Whether $newLine contains end of the statement
*/
public function streamStatementEnd( &$sql, &$newLine ) {
* - / *$var* / is just encoded, besides traditional table prefix and
* table options its use should be avoided.
*
- * @param $ins String: SQL statement to replace variables in
+ * @param string $ins SQL statement to replace variables in
* @return String The new SQL statement with variables replaced
*/
protected function replaceSchemaVars( $ins ) {
/**
* Check to see if a named lock is available. This is non-blocking.
*
- * @param $lockName String: name of lock to poll
- * @param $method String: name of method calling us
+ * @param string $lockName name of lock to poll
+ * @param string $method name of method calling us
* @return Boolean
* @since 1.20
*/
* Abstracted from Filestore::lock() so child classes can implement for
* their own needs.
*
- * @param $lockName String: name of lock to aquire
- * @param $method String: name of method calling us
+ * @param string $lockName name of lock to aquire
+ * @param string $method name of method calling us
* @param $timeout Integer: timeout
* @return Boolean
*/
/**
* Release a lock.
*
- * @param $lockName String: Name of lock to release
- * @param $method String: Name of method calling us
+ * @param string $lockName Name of lock to release
+ * @param string $method Name of method calling us
*
* @return int Returns 1 if the lock was released, 0 if the lock was not established
* by this thread (in which case the lock is not released), and NULL if the named
/**
* Lock specific tables
*
- * @param $read Array of tables to lock for read access
- * @param $write Array of tables to lock for write access
- * @param $method String name of caller
- * @param $lowPriority bool Whether to indicate writes to be LOW PRIORITY
+ * @param array $read of tables to lock for read access
+ * @param array $write of tables to lock for write access
+ * @param string $method name of caller
+ * @param bool $lowPriority Whether to indicate writes to be LOW PRIORITY
*
* @return bool
*/
/**
* Unlock specific tables
*
- * @param $method String the caller
+ * @param string $method the caller
*
* @return bool
*/
/**
* Encode an expiry time into the DBMS dependent format
*
- * @param $expiry String: timestamp for expiry, or the 'infinity' string
+ * @param string $expiry timestamp for expiry, or the 'infinity' string
* @return String
*/
public function encodeExpiry( $expiry ) {
/**
* Decode an expiry time into a DBMS independent format
*
- * @param $expiry String: DB timestamp field value for expiry
+ * @param string $expiry DB timestamp field value for expiry
* @param $format integer: TS_* constant, defaults to TS_MW
* @return String
*/
/**
* Construct a database error
* @param $db DatabaseBase object which threw the error
- * @param $error String A simple error message to be used for debugging
+ * @param string $error A simple error message to be used for debugging
*/
- function __construct( DatabaseBase &$db, $error ) {
+ function __construct( DatabaseBase $db = null, $error ) {
$this->db = $db;
parent::__construct( $error );
}
class DBConnectionError extends DBError {
public $error;
- function __construct( DatabaseBase &$db, $error = 'unknown error' ) {
+ function __construct( DatabaseBase $db = null, $error = 'unknown error' ) {
$msg = 'DB connection error';
if ( trim( $error ) != '' ) {
# No database access
MessageCache::singleton()->disable();
- if ( trim( $this->error ) == '' ) {
+ if ( trim( $this->error ) == '' && $this->db ) {
$this->error = $this->db->getProperty( 'mServer' );
}
* @param $sql string
* @param $fname string
*/
- function __construct( DatabaseBase &$db, $error, $errno, $sql, $fname ) {
+ 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" .
"Query: $sql\n" .
"Function: $fname\n" .
/**
* Usually aborts on failure
- * @param String $server
- * @param String $user
- * @param String $password
- * @param String $dbName
+ * @param string $server
+ * @param string $user
+ * @param string $password
+ * @param string $dbName
* @throws DBConnectionError
* @return bool|DatabaseBase|null
*/
* @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 $options Array: 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') )
* @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 $options Array: 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') )
*
* Usually aborts on failure
* If errors are explicitly ignored, returns success
- * @param String $table
- * @param Array $arrToInsert
+ * @param string $table
+ * @param array $arrToInsert
* @param string $fname
* @param array $options
* @throws DBQueryError
/**
* @private
*
- * @param $options Array: an associative array of options to be turned into
+ * @param array $options an associative array of options to be turned into
* an SQL query, valid keys are listed in the function.
* @return Array
*/
// Unfortunately, mysql_fetch_object does not reset the last errno.
// Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
// these are the only errors mysql_fetch_object can cause.
- // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+ // 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() ) );
}
// Unfortunately, mysql_fetch_array does not reset the last errno.
// Only check for CR_SERVER_LOST and CR_UNKNOWN_ERROR, as
// these are the only errors mysql_fetch_object can cause.
- // See http://dev.mysql.com/doc/refman/5.0/es/mysql-fetch-row.html.
+ // 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() ) );
}
wfSuppressWarnings();
$n = mysql_num_rows( $res );
wfRestoreWarnings();
- if( $this->lastErrno() ) {
- throw new DBUnexpectedError( $this, 'Error in numRows(): ' . htmlspecialchars( $this->lastError() ) );
- }
+ // 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.
+ // See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
+ // See https://bugzilla.wikimedia.org/42430
return $n;
}
/**
* Check to see if a named lock is available. This is non-blocking.
*
- * @param $lockName String: name of lock to poll
- * @param $method String: name of method calling us
+ * @param string $lockName name of lock to poll
+ * @param string $method name of method calling us
* @return Boolean
* @since 1.20
*/
/**
* List all tables on the database
*
- * @param $prefix string Only show tables with this prefix, e.g. mw_
- * @param $fname String: calling function name
+ * @param string $prefix Only show tables with this prefix, e.g. mw_
+ * @param string $fname calling function name
* @return array
*/
function listTables( $prefix = null, $fname = 'DatabaseMysql::listTables' ) {
*
* @private
*
- * @param $options Array: an associative array of options to be turned into
+ * @param array $options an associative array of options to be turned into
* an SQL query, valid keys are listed in the function.
* @return array
*/
* @param $table String: Name of the table to insert to.
* @param $args Array: Items to insert into the table.
* @param $fname String: Name of the function, for profiling
- * @param $options String or Array. Valid options: IGNORE
+ * @param string $options or Array. Valid options: IGNORE
*
* @return bool Success of insert operation. IGNORE always returns true.
*/
* This is list does not contain magic keywords like "$user"
* Needs transaction
*
- * @seealso getSearchPath()
- * @seealso setSearchPath()
+ * @see getSearchPath()
+ * @see setSearchPath()
* @since 1.19
* @return array list of actual schemas for the current sesson
*/
*
* @private
*
- * @param $ins String: SQL string, read from a stream (usually tables.sql)
+ * @param string $ins SQL string, read from a stream (usually tables.sql)
*
* @return string SQL string
*/
*
* @private
*
- * @param $options Array: an associative array of options to be turned into
+ * @param array $options an associative array of options to be turned into
* an SQL query, valid keys are listed in the function.
* @return array
*/
* Check to see if a named lock is available. This is non-blocking.
* See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
*
- * @param $lockName String: name of lock to poll
- * @param $method String: name of method calling us
+ * @param string $lockName name of lock to poll
+ * @param string $method name of method calling us
* @return Boolean
* @since 1.20
*/
/**
* Generates a database file name. Explicitly public for installer.
- * @param $dir String: Directory where database resides
- * @param $dbName String: Database name
+ * @param string $dir Directory where database resides
+ * @param string $dbName Database name
* @return String
*/
public static function generateFileName( $dir, $dbName ) {
* Attaches external database to our connection, see http://sqlite.org/lang_attach.html
* for details.
*
- * @param $name String: database name to be used in queries like SELECT foo FROM dbname.table
- * @param $file String: database file name. If omitted, will be generated using $name and $wgSQLiteDataDir
- * @param $fname String: calling function name
+ * @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
*/
*/
function makeSelectOptions( $options ) {
foreach ( $options as $k => $v ) {
- if ( is_numeric( $k ) && $v == 'FOR UPDATE' ) {
+ if ( is_numeric( $k ) && ($v == 'FOR UPDATE' || $v == 'LOCK IN SHARE MODE') ) {
$options[$k] = '';
}
}
/**
* List all tables on the database
*
- * @param $prefix string Only show tables with this prefix, e.g. mw_
- * @param $fname String: calling function name
+ * @param string $prefix Only show tables with this prefix, e.g. mw_
+ * @param string $fname calling function name
*
* @return array
*/
<?php
/**
- * This file contains database-related utiliy classes.
+ * This file contains database-related utility classes.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/**
* Store a string into a LikeMatch marker object.
*
- * @param String $s
+ * @param string $s
*/
public function __construct( $s ) {
$this->str = $s;
* @param string|null $functionName
*
* @return ORMResult The result set
- * @throw DBQueryError if the query failed (even if the database was in ignoreErrors mode)
+ * @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 );
* @param null|string $functionName
*
* @return ResultWrapper
- * @throw DBQueryError if the query failed (even if the database was in ignoreErrors mode)
+ * @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 );
/**
* 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
*/
* Create a new load balancer object. The resulting object will be untracked,
* not chronology-protected, and the caller is responsible for cleaning it up.
*
- * @param $wiki String: wiki ID, or false for the current wiki
+ * @param string $wiki wiki ID, or false for the current wiki
* @return LoadBalancer
*/
abstract function newMainLB( $wiki = false );
/**
* Get a cached (tracked) load balancer object.
*
- * @param $wiki String: wiki ID, or false for the current wiki
+ * @param string $wiki wiki ID, or false for the current wiki
* @return LoadBalancer
*/
abstract function getMainLB( $wiki = false );
* untracked, not chronology-protected, and the caller is responsible for
* cleaning it up.
*
- * @param $cluster String: external storage cluster, or false for core
- * @param $wiki String: wiki ID, or false for the current wiki
+ * @param string $cluster external storage cluster, or false for core
+ * @param string $wiki wiki ID, or false for the current wiki
*
* @return LoadBalancer
*/
/**
* Get a cached (tracked) load balancer for external storage
*
- * @param $cluster String: external storage cluster, or false for core
- * @param $wiki String: wiki ID, or false for the current wiki
+ * @param string $cluster external storage cluster, or false for core
+ * @param string $wiki wiki ID, or false for the current wiki
*
* @return LoadBalancer
*/
}
/**
- * @param String $cluster
+ * @param string $cluster
* @param bool $wiki
* @throws MWException
* @return LoadBalancer
protected $lb;
/**
- * @param $conf array An associative array with one member:
+ * @param array $conf An associative array with one member:
* - connection: The DatabaseBase connection object
*/
function __construct( $conf ) {
private $mLoadMonitorClass, $mLoadMonitor;
/**
- * @param $params Array with keys:
+ * @param array $params with keys:
* servers Required. Array of server info structures.
* masterWaitTimeout Replication lag wait timeout
* loadMonitor Name of a class used to fetch server lag and load.
* This is the main entry point for this class.
*
* @param $i Integer: server index
- * @param $groups Array: query groups
+ * @param array $groups query groups
* @param bool|string $wiki Wiki ID
*
* @throws MWException
if ( $i === false ) {
$this->mLastError = 'No working slave server: ' . $this->mLastError;
wfProfileOut( __METHOD__ );
- return $this->reportConnectionError( $this->mErrorConnection );
+ return $this->reportConnectionError();
}
}
$conn = $this->openConnection( $i, $wiki );
if ( !$conn ) {
wfProfileOut( __METHOD__ );
- return $this->reportConnectionError( $this->mErrorConnection );
+ return $this->reportConnectionError();
}
wfProfileOut( __METHOD__ );
* error will be available via $this->mErrorConnection.
*
* @param $i Integer server index
- * @param $wiki String wiki ID to open
+ * @param string $wiki wiki ID to open
* @return DatabaseBase
*
* @access private
* error will be available via $this->mErrorConnection.
*
* @param $i Integer: server index
- * @param $wiki String: wiki ID to open
+ * @param string $wiki wiki ID to open
* @return DatabaseBase
*/
function openForeignConnection( $i, $wiki ) {
'See DefaultSettings.php entry for $wgDBservers.' );
}
- $host = $server['host'];
- $dbname = $server['dbname'];
-
if ( $dbNameOverride !== false ) {
- $server['dbname'] = $dbname = $dbNameOverride;
+ $server['dbname'] = $dbNameOverride;
}
# Create object
}
/**
- * @param $conn
- * @return bool
* @throws DBConnectionError
+ * @return bool
*/
- function reportConnectionError( &$conn ) {
+ private function reportConnectionError() {
+ $conn = $this->mErrorConnection; // The connection which caused the error
+
if ( !is_object( $conn ) ) {
// No last connection, probably due to all servers being too busy
wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}\n" );
- $conn = new Database;
+
// If all servers were busy, mLastError will contain something sensible
- throw new DBConnectionError( $conn, $this->mLastError );
+ throw new DBConnectionError( null, $this->mLastError );
} else {
$server = $conn->getProperty( 'mServer' );
wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
* May attempt to open connections to slaves on the default DB. If there is
* no lag, the maximum lag will be reported as -1.
*
- * @param $wiki string Wiki ID, or false for the default database
+ * @param string $wiki Wiki ID, or false for the default database
*
* @return array ( host, max lag, index of max lagged host )
*/
/**
* Perform pre-connection load ratio adjustment.
* @param $loads array
- * @param $group String: the selected query group
+ * @param string $group the selected query group
* @param $wiki String
*/
function scaleLoads( &$loads, $group = false, $wiki = false );
*
* @since 1.20
*
- * @param $name string: Field name
+ * @param string $name Field name
* @param $default mixed: Default value to return when none is found
* (default: null)
*
if ( array_key_exists( $name, $this->fields ) ) {
$value = $this->fields[$name];
+ // Skip null id fields so that the DBMS can set the default.
+ if ( $name === 'id' && is_null ( $value ) ) {
+ continue;
+ }
+
switch ( $type ) {
case 'array':
$value = (array)$value;
/**
* 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.19
* @param $msg string
* @param $callerOffset int
- * @param $level int A PHP error level. See sendWarning()
+ * @param int $level A PHP error level. See sendWarning()
* @return mixed
*/
public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
* - MediaWiki's debug log, if $wgDevelopmentWarnings is set to false.
*
* @since 1.19
- * @param $function string: Function that is deprecated.
- * @param $version string|bool: Version in which the function was deprecated.
- * @param $component string|bool: Component to which the function belongs.
+ * @param string $function Function that is deprecated.
+ * @param string|bool $version Version in which the function was deprecated.
+ * @param string|bool $component Component to which the function belongs.
* If false, it is assumbed the function is in MediaWiki core.
* @param $callerOffset integer: How far up the callstack is the original
* caller. 2 = function that called the function that called
* Send a warning either to the debug log or by triggering an user PHP
* error depending on $wgDevelopmentWarnings.
*
- * @param $msg string Message to send
- * @param $caller array caller description get from getCallerDescription()
+ * @param string $msg Message to send
+ * @param array $caller caller description get from getCallerDescription()
* @param $level error level to use if $wgDevelopmentWarnings is true
*/
private static function sendWarning( $msg, $caller, $level ) {
* Constructor
* @param $context IContextSource context to use, anything else will be ignored
* @param $old Integer old ID we want to show and diff with.
- * @param $new String either 'prev' or 'next'.
+ * @param string $new either 'prev' or 'next'.
* @param $rcid Integer ??? FIXME (default 0)
* @param $refreshCache boolean If set, refreshes the diff cache
* @param $unhide boolean If set, allow viewing deleted revs
$deleted = $suppressed = false;
$allowed = $this->mNewRev->userCan( Revision::DELETED_TEXT, $user );
+ $revisionTools = array();
+
# mOldRev is false if the difference engine is called with a "vague" query for
# a diff between a version V and its previous version V' AND the version V
# is the first version of that article. In that case, V' does not exist.
}
}
if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
- $undoLink = ' ' . $this->msg( 'parentheses' )->rawParams(
- Html::element( 'a', array(
+ $undoLink = Html::element( 'a', array(
'href' => $this->mNewPage->getLocalUrl( array(
'action' => 'edit',
'undoafter' => $this->mOldid,
'title' => Linker::titleAttrib( 'undo' )
),
$this->msg( 'editundo' )->text()
- ) )->escaped();
+ );
+ $revisionTools[] = $undoLink;
}
}
# Handle RevisionDelete links...
$rdel = $this->revisionDeleteLink( $this->mNewRev );
- $newRevisionHeader = $this->getRevisionHeader( $this->mNewRev, 'complete' ) . $undoLink;
+
+ # Allow extensions to define their own revision tools
+ wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools ) );
+ $formattedRevisionTools = array();
+ // Put each one in parentheses (poor man's button)
+ foreach ( $revisionTools as $tool ) {
+ $formattedRevisionTools[] = $this->msg( 'parentheses' )->rawParams( $tool )->escaped();
+ }
+ $newRevisionHeader = $this->getRevisionHeader( $this->mNewRev, 'complete' ) . ' ' . implode( ' ', $formattedRevisionTools );
$newHeader = '<div id="mw-diff-ntitle1"><strong>' . $newRevisionHeader . '</strong></div>' .
'<div id="mw-diff-ntitle2">' . Linker::revUserTools( $this->mNewRev, !$this->unhide ) .
*
* @param string|bool $otitle Header for old text or false
* @param string|bool $ntitle Header for new text or false
- * @param $notice String: HTML between diff header and body
+ * @param string $notice HTML between diff header and body
* @return mixed
*/
function getDiff( $otitle, $ntitle, $notice = '' ) {
/**
* Generate a diff, no caching
*
- * @param $otext String: old text, must be already segmented
- * @param $ntext String: new text, must be already segmented
+ * @param string $otext old text, must be already segmented
+ * @param string $ntext new text, must be already segmented
* @return bool|string
* @deprecated since 1.21, use generateContentDiffBody() instead!
*/
*
* @todo move this to TextDifferenceEngine, make DifferenceEngine abstract. At some point.
*
- * @param $otext String: old text, must be already segmented
- * @param $ntext String: new text, must be already segmented
+ * @param string $otext old text, must be already segmented
+ * @param string $ntext new text, must be already segmented
* @return bool|string
*/
function generateTextDiffBody( $otext, $ntext ) {
* Get a header for a specified revision.
*
* @param $rev Revision
- * @param $complete String: 'complete' to get the header wrapped depending
+ * @param string $complete 'complete' to get the header wrapped depending
* the visibility of the revision and a link to edit the page.
* @return String HTML fragment
*/
* (http://citeseer.ist.psu.edu/myers86ond.html) with range compression (see Wu et al.'s
* "An O(NP) Sequence Comparison Algorithm").
*
- * This implementation supports an upper bound on the excution time.
+ * This implementation supports an upper bound on the execution time.
*
* Complexity: O((M + N)D) worst case time, O(M + N + D^2) expected time, O(M + N) space
*
* Constructor class for key/value blob data kept in external repositories.
*
* Objects in external stores are defined by a special URL. The URL is of
- * the form "<store protocal>://<location>/<object name>". The protocal is used
+ * the form "<store protocol>://<location>/<object name>". The protocol is used
* to determine what ExternalStoreMedium class is used. The location identifies
* particular storage instances or database clusters for store class to use.
*
* When an object is inserted into a store, the calling code uses a partial URL of
- * the form "<store protocal>://<location>" and receives the full object URL on success.
+ * the form "<store protocol>://<location>" and receives the full object URL on success.
* This is useful since object names can be sequential IDs, UUIDs, or hashes.
* Callers are not responsible for unique name generation.
*
/**
* Get an external store object of the given type, with the given parameters
*
- * @param $proto string Type of external storage, should be a value in $wgExternalStores
- * @param $params array Associative array of ExternalStoreMedium parameters
+ * @param string $proto Type of external storage, should be a value in $wgExternalStores
+ * @param array $params Associative array of ExternalStoreMedium parameters
* @return ExternalStoreMedium|bool The store class or false on error
*/
public static function getStoreObject( $proto, array $params = array() ) {
/**
* Fetch data from given URL
*
- * @param $url string The URL of the text to get
- * @param $params array Associative array of ExternalStoreMedium parameters
+ * @param string $url The URL of the text to get
+ * @param array $params Associative array of ExternalStoreMedium parameters
* @return string|bool The text stored or false on error
* @throws MWException
*/
* The protocol part is used to identify the class, the rest is passed to the
* class itself as a parameter.
*
- * @param $url String A partial external store URL ("<store type>://<location>")
+ * @param string $url A partial external store URL ("<store type>://<location>")
* @param $data string
- * @param $params array Associative array of ExternalStoreMedium parameters
+ * @param array $params Associative array of ExternalStoreMedium parameters
* @return string|bool The URL of the stored data item, or false on error
* @throws MWException
*/
* itself. It also fails-over to the next possible clusters.
*
* @param $data string
- * @param $params array Associative array of ExternalStoreMedium parameters
+ * @param array $params Associative array of ExternalStoreMedium parameters
* @return string|bool The URL of the stored data item, or false on error
* @throws MWException
*/
/**
* Get a LoadBalancer for the specified cluster
*
- * @param $cluster String: cluster name
+ * @param string $cluster cluster name
* @return LoadBalancer object
*/
function &getLoadBalancer( $cluster ) {
/**
* Get a slave database connection for the specified cluster
*
- * @param $cluster String: cluster name
+ * @param string $cluster cluster name
* @return DatabaseBase object
*/
function &getSlave( $cluster ) {
/**
* Get a master database connection for the specified cluster
*
- * @param $cluster String: cluster name
+ * @param string $cluster cluster name
* @return DatabaseBase object
*/
function &getMaster( $cluster ) {
protected $params = array();
/**
- * @param $params array Options
+ * @param array $params Options
*/
public function __construct( array $params = array() ) {
$this->params = $params;
/**
* Fetch data from given external store URL
*
- * @param $url string An external store URL
+ * @param string $url An external store URL
* @return string|bool The text stored or false on error
* @throws MWException
*/
/**
* Insert a data item into a given location
*
- * @param $location string: the location name
- * @param $data string: the data item
+ * @param string $location the location name
+ * @param string $data the data item
* @return string|bool The URL of the stored data item, or false on error
* @throws MWException
*/
/**
* Sets up the file object
*
- * @param $path string Path to temporary file on local disk
+ * @param string $path Path to temporary file on local disk
* @throws MWException
*/
public function __construct( $path ) {
/**
* Get an associative array containing information about a file in the local filesystem.
*
- * @param $path String: absolute local filesystem path
+ * @param string $path absolute local filesystem path
* @param $ext Mixed: the file extension, or true to extract it from the filename.
* Set it to false to ignore the extension.
*
/**
* Sanity check a relative file system path for validity
*
- * @param $path string Normalized relative path
+ * @param string $path Normalized relative path
* @return bool
*/
protected function isLegalRelPath( $path ) {
/**
* Get the absolute file system path for a storage path
*
- * @param $storagePath string Storage path
+ * @param string $storagePath Storage path
* @return string|null
*/
protected function resolveToFSPath( $storagePath ) {
if ( $relPath === null ) {
return null; // invalid
}
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $storagePath );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $storagePath );
$fsPath = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
if ( $relPath != '' ) {
$fsPath .= "/{$relPath}";
*/
protected function doPrepareInternal( $fullCont, $dirRel, array $params ) {
$status = Status::newGood();
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
$existed = is_dir( $dir ); // already there?
*/
protected function doSecureInternal( $fullCont, $dirRel, array $params ) {
$status = Status::newGood();
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
// Seed new directories with a blank index.html, to prevent crawling...
*/
protected function doPublishInternal( $fullCont, $dirRel, array $params ) {
$status = Status::newGood();
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
// Unseed new directories with a blank index.html, to allow crawling...
*/
protected function doCleanInternal( $fullCont, $dirRel, array $params ) {
$status = Status::newGood();
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
$this->trapWarnings();
* @return bool|null
*/
protected function doDirectoryExists( $fullCont, $dirRel, array $params ) {
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
* @return Array|null
*/
public function getDirectoryListInternal( $fullCont, $dirRel, array $params ) {
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
$exists = is_dir( $dir );
* @return Array|FSFileBackendFileList|null
*/
public function getFileListInternal( $fullCont, $dirRel, array $params ) {
- list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
$dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
$exists = is_dir( $dir );
/**
* Chmod a file, suppressing the warnings
*
- * @param $path string Absolute file system path
+ * @param string $path Absolute file system path
* @return bool Success
*/
protected function chmod( $path ) {
/**
* Clean up directory separators for the given OS
*
- * @param $path string FS path
+ * @param string $path FS path
* @return string
*/
protected function cleanPathSlashes( $path ) {
protected $params = array();
/**
- * @param $dir string file system directory
+ * @param string $dir file system directory
* @param $params array
*/
public function __construct( $dir, array $params ) {
/**
* Return an appropriate iterator object to wrap
*
- * @param $dir string file system directory
+ * @param string $dir file system directory
* @return Iterator
*/
protected function initIterator( $dir ) {
* - a) unexpected operation errors occurred (network partitions, disk full...)
* - b) significant operation errors occurred and 'force' was not set
*
- * @param $ops Array List of operations to execute in order
- * @param $opts Array Batch operation options
+ * @param array $ops List of operations to execute in order
+ * @param array $opts Batch operation options
* @return Status
*/
final public function doOperations( array $ops, array $opts = array() ) {
*
* @see FileBackend::doOperations()
*
- * @param $op Array Operation
- * @param $opts Array Operation options
+ * @param array $op Operation
+ * @param array $opts Operation options
* @return Status
*/
final public function doOperation( array $op, array $opts = array() ) {
*
* @see FileBackend::doOperation()
*
- * @param $params Array Operation parameters
- * @param $opts Array Operation options
+ * @param array $params Operation parameters
+ * @param array $opts Operation options
* @return Status
*/
final public function create( array $params, array $opts = array() ) {
*
* @see FileBackend::doOperation()
*
- * @param $params Array Operation parameters
- * @param $opts Array Operation options
+ * @param array $params Operation parameters
+ * @param array $opts Operation options
* @return Status
*/
final public function store( array $params, array $opts = array() ) {
*
* @see FileBackend::doOperation()
*
- * @param $params Array Operation parameters
- * @param $opts Array Operation options
+ * @param array $params Operation parameters
+ * @param array $opts Operation options
* @return Status
*/
final public function copy( array $params, array $opts = array() ) {
*
* @see FileBackend::doOperation()
*
- * @param $params Array Operation parameters
- * @param $opts Array Operation options
+ * @param array $params Operation parameters
+ * @param array $opts Operation options
* @return Status
*/
final public function move( array $params, array $opts = array() ) {
*
* @see FileBackend::doOperation()
*
- * @param $params Array Operation parameters
- * @param $opts Array Operation options
+ * @param array $params Operation parameters
+ * @param array $opts Operation options
* @return Status
*/
final public function delete( array $params, array $opts = array() ) {
*
* @see FileBackend::doOperation()
*
- * @param $params Array Operation parameters
- * @param $opts Array Operation options
+ * @param array $params Operation parameters
+ * @param array $opts Operation options
* @return Status
* @since 1.21
*/
* will reflect each operation attempted for the given files. The status will be
* considered "OK" as long as no fatal errors occurred.
*
- * @param $ops Array Set of operations to execute
- * @param $opts Array Batch operation options
+ * @param array $ops Set of operations to execute
+ * @param array $opts Batch operation options
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperations()
*
- * @param $op Array Operation
+ * @param array $op Operation
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperation()
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperation()
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperation()
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperation()
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperation()
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* @return Status
* @since 1.20
*/
*
* @see FileBackend::doQuickOperation()
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* @return Status
* @since 1.21
*/
* otherwise safe from modification from other processes. Normally,
* the file will be a new temp file, which should be adequate.
*
- * @param $params Array Operation parameters
+ * @param array $params Operation parameters
* $params include:
* - srcs : ordered source storage paths (e.g. chunk1, chunk2, ...)
* - dst : file system path to 0-byte temp file
* except they are only applied *if* the directory/container had to be created.
* These flags should always be set for directories that have private files.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - dir : storage directory
* - noAccess : try to deny file access (since 1.20)
* access to the storage user representing end-users in web requests.
* This is not guaranteed to actually do anything.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - dir : storage directory
* - noAccess : try to deny file access
* access to the storage user representing end-users in web requests.
* This essentially can undo the result of secure() calls.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - dir : storage directory
* - access : try to allow file access
* Backends using key/value stores may do nothing unless the directory
* is that of an empty container, in which case it will be deleted.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - dir : storage directory
* - recursive : recursively delete empty subdirectories first (since 1.20)
* Check if a file exists at a storage path in the backend.
* This returns false if only a directory exists at the path.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
/**
* Get the last-modified timestamp of the file at a storage path.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
* Get the contents of a file at a storage path in the backend.
* This should be avoided for potentially large files.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
*
* @see FileBackend::getFileContents()
*
- * @param $params Array
+ * @param array $params
* $params include:
* - srcs : list of source storage paths
* - latest : use the latest available data
/**
* Get the size (bytes) of a file at a storage path in the backend.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
* - size : the file size (bytes)
* Additional values may be included for internal use only.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
/**
* Get a SHA-1 hash of the file at a storage path in the backend.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
* Get the properties of the file at a storage path in the backend.
* This gives the result of FSFile::getProps() on a local copy of the file.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
* will be sent if streaming began, while none will be sent otherwise.
* Implementations should flush the output buffer before sending data.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - headers : list of additional HTTP headers to send on success
* In that later case, there are copies of the file that must stay in sync.
* Additionally, further calls to this function may return the same file.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
*
* @see FileBackend::getLocalReference()
*
- * @param $params Array
+ * @param array $params
* $params include:
* - srcs : list of source storage paths
* - latest : use the latest available data
* The temporary copy will have the same file extension as the source.
* Temporary files may be purged when the file object falls out of scope.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - latest : use the latest available data
*
* @see FileBackend::getLocalCopy()
*
- * @param $params Array
+ * @param array $params
* $params include:
* - srcs : list of source storage paths
* - latest : use the latest available data
* Otherwise, one would need to use getLocalReference(), which involves loading
* the entire file on to local disk.
*
- * @param $params Array
+ * @param array $params
* $params include:
* - src : source storage path
* - ttl : lifetime (seconds) if pre-authenticated; default is 1 day
* Preload persistent file stat and property cache into in-process cache.
* This should be used when stat calls will be made on a known list of a many files.
*
- * @param $paths Array Storage paths
+ * @param array $paths Storage paths
* @return void
*/
public function preloadCache( array $paths ) {}
* Invalidate any in-process file stat and property cache.
* If $paths is given, then only the cache for those files will be cleared.
*
- * @param $paths Array Storage paths (optional)
+ * @param array $paths Storage paths (optional)
* @return void
*/
public function clearCache( array $paths = null ) {}
*
* Callers should consider using getScopedFileLocks() instead.
*
- * @param $paths Array Storage paths
+ * @param array $paths Storage paths
* @param $type integer LockManager::LOCK_* constant
* @return Status
*/
/**
* Unlock the files at the given storage paths in the backend.
*
- * @param $paths Array Storage paths
+ * @param array $paths Storage paths
* @param $type integer LockManager::LOCK_* constant
* @return Status
*/
* Once the return value goes out scope, the locks will be released and
* the status updated. Unlock fatals will not change the status "OK" value.
*
- * @param $paths Array Storage paths
+ * @param array $paths Storage paths
* @param $type integer LockManager::LOCK_* constant
* @param $status Status Status to update on lock/unlock
* @return ScopedLock|null Returns null on failure
*
* @see FileBackend::doOperations()
*
- * @param $ops Array List of file operations to FileBackend::doOperations()
+ * @param array $ops List of file operations to FileBackend::doOperations()
* @param $status Status Status to update on lock/unlock
* @return Array List of ScopedFileLocks or null values
* @since 1.20
/**
* Get the storage path for the given container for this backend
*
- * @param $container string Container name
+ * @param string $container Container name
* @return string Storage path
* @since 1.21
*/
*/
final public static function parentStoragePath( $storagePath ) {
$storagePath = dirname( $storagePath );
- list( $b, $cont, $rel ) = self::splitStoragePath( $storagePath );
+ list( , , $rel ) = self::splitStoragePath( $storagePath );
return ( $rel === null ) ? null : $storagePath;
}
/**
* Build a Content-Disposition header value per RFC 6266.
*
- * @param $type string One of (attachment, inline)
- * @param $filename string Suggested file name (should not contain slashes)
+ * @param string $type One of (attachment, inline)
+ * @param string $filename Suggested file name (should not contain slashes)
* @throws MWException
* @return string
* @since 1.20
*
* This uses the same traversal protection as Title::secureAndSplit().
*
- * @param $path string Storage path relative to a container
+ * @param string $path Storage path relative to a container
* @return string|null
*/
final protected static function normalizeContainerPath( $path ) {
* @return FileBackend|null Backend or null on failure
*/
public function backendFromPath( $storagePath ) {
- list( $backend, $c, $p ) = FileBackend::splitStoragePath( $storagePath );
+ list( $backend, , ) = FileBackend::splitStoragePath( $storagePath );
if ( $backend !== null && isset( $this->backends[$backend] ) ) {
return $this->get( $backend );
}
/**
* Check that a set of files are consistent across all internal backends
*
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @return Status
*/
public function consistencyCheck( array $paths ) {
/**
* Check that a set of file paths are usable across all internal backends
*
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @return Status
*/
public function accessibilityCheck( array $paths ) {
* Check that a set of files are consistent across all internal backends
* and re-synchronize those files againt the "multi master" if needed.
*
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @return Status
*/
public function resyncFiles( array $paths ) {
/**
* Get a list of file storage paths to read or write for a list of operations
*
- * @param $ops Array Same format as doOperations()
+ * @param array $ops Same format as doOperations()
* @return Array List of storage paths to files (does not include directories)
*/
protected function fileStoragePathsForOps( array $ops ) {
$paths = array();
foreach ( $ops as $op ) {
if ( isset( $op['src'] ) ) {
- $paths[] = $op['src'];
+ // For things like copy/move/delete with "ignoreMissingSource" and there
+ // is no source file, nothing should happen and there should be no errors.
+ if ( empty( $op['ignoreMissingSource'] )
+ || $this->fileExists( array( 'src' => $op['src'] ) ) )
+ {
+ $paths[] = $op['src'];
+ }
}
if ( isset( $op['srcs'] ) ) {
$paths = array_merge( $paths, $op['srcs'] );
* Substitute the backend name in storage path parameters
* for a set of operations with that of a given internal backend.
*
- * @param $ops Array List of file operation arrays
+ * @param array $ops List of file operation arrays
* @param $backend FileBackendStore
* @return Array
*/
/**
* Same as substOpBatchPaths() but for a single operation
*
- * @param $ops array File operation array
+ * @param array $ops File operation array
* @param $backend FileBackendStore
* @return Array
*/
/**
* Substitute the backend of storage paths with an internal backend's name
*
- * @param $paths Array|string List of paths or single string path
+ * @param array|string $paths List of paths or single string path
* @param $backend FileBackendStore
* @return Array|string
*/
/**
* Substitute the backend of internal storage paths with the proxy backend's name
*
- * @param $paths Array|string List of paths or single string path
+ * @param array|string $paths List of paths or single string path
* @return Array|string
*/
protected function unsubstPaths( $paths ) {
}
/**
- * @param $path string Storage path
+ * @param string $path Storage path
* @return bool Path container should have dir changes pushed to all backends
*/
protected function replicateContainerDirChanges( $path ) {
- list( $b, $shortCont, $r ) = self::splitStoragePath( $path );
+ list( , $shortCont, ) = self::splitStoragePath( $path );
return !in_array( $shortCont, $this->noPushDirConts );
}
* - dstExists : Whether a file exists at the destination (optimization).
* Callers can use "false" if no existing file is being changed.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function createInternal( array $params ) {
* - dstExists : Whether a file exists at the destination (optimization).
* Callers can use "false" if no existing file is being changed.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function storeInternal( array $params ) {
* - dstExists : Whether a file exists at the destination (optimization).
* Callers can use "false" if no existing file is being changed.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function copyInternal( array $params ) {
* If the status is OK, then its value field will be
* set to a FileBackendStoreOpHandle object.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function deleteInternal( array $params ) {
* - dstExists : Whether a file exists at the destination (optimization).
* Callers can use "false" if no existing file is being changed.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function moveInternal( array $params ) {
* If the status is OK, then its value field will be
* set to a FileBackendStoreOpHandle object.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function describeInternal( array $params ) {
* No-op file operation that does nothing.
* Do not call this function from places outside FileBackend and FileOp.
*
- * @param $params Array
+ * @param array $params
* @return Status
*/
final public function nullInternal( array $params ) {
$status->merge( $this->doPrepareInternal( $fullCont, $dir, $params ) );
} else { // directory is on several shards
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
foreach ( $this->getContainerSuffixes( $shortCont ) as $suffix ) {
$status->merge( $this->doPrepareInternal( "{$fullCont}{$suffix}", $dir, $params ) );
}
$status->merge( $this->doSecureInternal( $fullCont, $dir, $params ) );
} else { // directory is on several shards
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
foreach ( $this->getContainerSuffixes( $shortCont ) as $suffix ) {
$status->merge( $this->doSecureInternal( "{$fullCont}{$suffix}", $dir, $params ) );
}
$status->merge( $this->doPublishInternal( $fullCont, $dir, $params ) );
} else { // directory is on several shards
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
foreach ( $this->getContainerSuffixes( $shortCont ) as $suffix ) {
$status->merge( $this->doPublishInternal( "{$fullCont}{$suffix}", $dir, $params ) );
}
$this->deleteContainerCache( $fullCont ); // purge cache
} else { // directory is on several shards
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
foreach ( $this->getContainerSuffixes( $shortCont ) as $suffix ) {
$status->merge( $this->doCleanInternal( "{$fullCont}{$suffix}", $dir, $params ) );
$this->deleteContainerCache( "{$fullCont}{$suffix}" ); // purge cache
return $this->doDirectoryExists( $fullCont, $dir, $params );
} else { // directory is on several shards
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
$res = false; // response
foreach ( $this->getContainerSuffixes( $shortCont ) as $suffix ) {
$exists = $this->doDirectoryExists( "{$fullCont}{$suffix}", $dir, $params );
/**
* @see FileBackendStore::directoryExists()
*
- * @param $container string Resolved container name
- * @param $dir string Resolved path relative to container
- * @param $params Array
+ * @param string $container Resolved container name
+ * @param string $dir Resolved path relative to container
+ * @param array $params
* @return bool|null
*/
abstract protected function doDirectoryExists( $container, $dir, array $params );
} else {
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
// File listing spans multiple containers/shards
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
return new FileBackendStoreShardDirIterator( $this,
$fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
}
*
* @see FileBackendStore::getDirectoryList()
*
- * @param $container string Resolved container name
- * @param $dir string Resolved path relative to container
- * @param $params Array
+ * @param string $container Resolved container name
+ * @param string $dir Resolved path relative to container
+ * @param array $params
* @return Traversable|Array|null Returns null on failure
*/
abstract public function getDirectoryListInternal( $container, $dir, array $params );
} else {
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
// File listing spans multiple containers/shards
- list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+ list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
return new FileBackendStoreShardFileIterator( $this,
$fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
}
*
* @see FileBackendStore::getFileList()
*
- * @param $container string Resolved container name
- * @param $dir string Resolved path relative to container
- * @param $params Array
+ * @param string $container Resolved container name
+ * @param string $dir Resolved path relative to container
+ * @param array $params
* @return Traversable|Array|null Returns null on failure
*/
abstract public function getFileListInternal( $container, $dir, array $params );
* The result must have the same number of items as the input.
* An exception is thrown if an unsupported operation is requested.
*
- * @param $ops Array Same format as doOperations()
+ * @param array $ops Same format as doOperations()
* @return Array List of FileOp objects
* @throws MWException
*/
* each corresponding to a list of storage paths to be locked.
* All returned paths are normalized.
*
- * @param $performOps Array List of FileOp objects
+ * @param array $performOps List of FileOp objects
* @return Array ('sh' => list of paths, 'ex' => list of paths)
*/
final public function getPathsToLockForOpsInternal( array $performOps ) {
* The resulting Status object fields will correspond
* to the order in which the handles where given.
*
- * @param $handles Array List of FileBackendStoreOpHandle objects
+ * @param array $handles List of FileBackendStoreOpHandle objects
* @return Array Map of Status objects
* @throws MWException
*/
/**
* Strip long HTTP headers from a file operation
*
- * @param $op array Same format as doOperation()
+ * @param array $op Same format as doOperation()
* @return Array
*/
protected function stripInvalidHeadersFromOp( array $op ) {
final public function preloadCache( array $paths ) {
$fullConts = array(); // full container names
foreach ( $paths as $path ) {
- list( $fullCont, $r, $s ) = $this->resolveStoragePath( $path );
+ list( $fullCont, , ) = $this->resolveStoragePath( $path );
$fullConts[] = $fullCont;
}
// Load from the persistent file and container caches
*
* @see FileBackend::clearCache()
*
- * @param $paths Array Storage paths (optional)
+ * @param array $paths Storage paths (optional)
* @return void
*/
protected function doClearCache( array $paths = null ) {}
* Get the container name shard suffix for a given path.
* Any empty suffix means the container is not sharded.
*
- * @param $container string Container name
- * @param $relPath string Storage path relative to the container
+ * @param string $container Container name
+ * @param string $relPath Storage path relative to the container
* @return string|null Returns null if shard could not be determined
*/
final protected function getContainerShard( $container, $relPath ) {
* Container dirs like "a", where the container shards on "x/xy",
* can reside on several shards. Such paths are tricky to handle.
*
- * @param $storagePath string Storage path
+ * @param string $storagePath Storage path
* @return bool
*/
final public function isSingleShardPathInternal( $storagePath ) {
- list( $c, $r, $shard ) = $this->resolveStoragePath( $storagePath );
+ list( , , $shard ) = $this->resolveStoragePath( $storagePath );
return ( $shard !== null );
}
* getting absolute paths (e.g. FS based backends). Note that the relative path
* may be the empty string (e.g. the path is simply to the container).
*
- * @param $container string Container name
- * @param $relStoragePath string Storage path relative to the container
+ * @param string $container Container name
+ * @param string $relStoragePath Storage path relative to the container
* @return string|null Path or null if not valid
*/
protected function resolveContainerPath( $container, $relStoragePath ) {
/**
* Get the cache key for a container
*
- * @param $container string Resolved container name
+ * @param string $container Resolved container name
* @return string
*/
private function containerCacheKey( $container ) {
/**
* Set the cached info for a container
*
- * @param $container string Resolved container name
+ * @param string $container Resolved container name
* @param $val mixed Information to cache
*/
final protected function setContainerCache( $container, $val ) {
* Delete the cached info for a container.
* The cache key is salted for a while to prevent race conditions.
*
- * @param $container string Resolved container name
+ * @param string $container Resolved container name
*/
final protected function deleteContainerCache( $container ) {
if ( !$this->memCache->set( $this->containerCacheKey( $container ), 'PURGED', 300 ) ) {
}
// Get all the corresponding cache keys for paths...
foreach ( $paths as $path ) {
- list( $fullCont, $r, $s ) = $this->resolveStoragePath( $path );
+ list( $fullCont, , ) = $this->resolveStoragePath( $path );
if ( $fullCont !== null ) { // valid path for this backend
$contNames[$this->containerCacheKey( $fullCont )] = $fullCont;
}
* resolved container names and their corresponding cached info.
* Only containers that actually exist should appear in the map.
*
- * @param $containerInfo Array Map of resolved container names to cached info
+ * @param array $containerInfo Map of resolved container names to cached info
* @return void
*/
protected function doPrimeContainerCache( array $containerInfo ) {}
/**
* Get the cache key for a file path
*
- * @param $path string Normalized storage path
+ * @param string $path Normalized storage path
* @return string
*/
private function fileCacheKey( $path ) {
* Negatives (404s) are not cached. By not caching negatives, we can skip cache
* salting for the case when a file is created at a path were there was none before.
*
- * @param $path string Storage path
+ * @param string $path Storage path
* @param $val mixed Information to cache
*/
final protected function setFileCache( $path, $val ) {
* Since negatives (404s) are not cached, this does not need to be called when
* a file is created at a path were there was none before.
*
- * @param $path string Storage path
+ * @param string $path Storage path
*/
final protected function deleteFileCache( $path ) {
$path = FileBackend::normalizeStoragePath( $path );
* used in a list of storage paths or FileOp objects.
* This loads the persistent cache values into the process cache.
*
- * @param $items Array List of storage paths or FileOps
+ * @param array $items List of storage paths or FileOps
* @return void
*/
final protected function primeFileCache( array $items ) {
$paths = array_filter( $paths, 'strlen' ); // remove nulls
// Get all the corresponding cache keys for paths...
foreach ( $paths as $path ) {
- list( $cont, $rel, $s ) = $this->resolveStoragePath( $path );
+ list( , $rel, ) = $this->resolveStoragePath( $path );
if ( $rel !== null ) { // valid path for this backend
$pathNames[$this->fileCacheKey( $path )] = $path;
}
/**
* Set the 'concurrency' option from a list of operation options
*
- * @param $opts array Map of operation options
+ * @param array $opts Map of operation options
* @return Array
*/
final protected function setConcurrencyFlags( array $opts ) {
/**
* @param $backend FileBackendStore
- * @param $container string Full storage container name
- * @param $dir string Storage directory relative to container
- * @param $suffixes Array List of container shard suffixes
- * @param $params Array
+ * @param string $container Full storage container name
+ * @param string $dir Storage directory relative to container
+ * @param array $suffixes List of container shard suffixes
+ * @param array $params
*/
public function __construct(
FileBackendStore $backend, $container, $dir, array $suffixes, array $params
/**
* Get the list for a given container shard
*
- * @param $container string Resolved container name
- * @param $dir string Resolved path relative to container
- * @param $params Array
+ * @param string $container Resolved container name
+ * @param string $dir Resolved path relative to container
+ * @param array $params
* @return Traversable|Array|null
*/
abstract protected function listFromShard( $container, $dir, array $params );
/**
* Update a dependency tracking array to account for this operation
*
- * @param $deps Array Prior path reads/writes; format of FileOp::newPredicates()
+ * @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
* @return Array
*/
final public function applyDependencies( array $deps ) {
/**
* Check if this operation changes files listed in $paths
*
- * @param $paths Array Prior path reads/writes; format of FileOp::newPredicates()
+ * @param array $paths Prior path reads/writes; format of FileOp::newPredicates()
* @return boolean
*/
final public function dependsOn( array $deps ) {
/**
* Get the file journal entries for this file operation
*
- * @param $oPredicates Array Pre-op info about files (format of FileOp::newPredicates)
- * @param $nPredicates Array Post-op info about files (format of FileOp::newPredicates)
+ * @param array $oPredicates Pre-op info about files (format of FileOp::newPredicates)
+ * @param array $nPredicates Post-op info about files (format of FileOp::newPredicates)
* @return Array
*/
final public function getJournalEntries( array $oPredicates, array $nPredicates ) {
/**
* Check if a file will exist in storage when this operation is attempted
*
- * @param $source string Storage path
+ * @param string $source Storage path
* @param $predicates Array
* @return bool
*/
/**
* Get the SHA-1 of a file in storage when this operation is attempted
*
- * @param $source string Storage path
+ * @param string $source Storage path
* @param $predicates Array
* @return string|bool False on failure
*/
* - a) unexpected operation errors occurred (network partitions, disk full...)
* - b) significant operation errors occurred and 'force' was not set
*
- * @param $performOps Array List of FileOp operations
- * @param $opts Array Batch operation options
+ * @param array $performOps List of FileOp operations
+ * @param array $opts Batch operation options
* @param $journal FileJournal Journal to log operations to
* @return Status
*/
}
/**
- * @param $disposition string Content-Disposition header value
+ * @param string $disposition Content-Disposition header value
* @return string Truncated Content-Disposition header value to meet Swift limits
*/
protected function truncDisp( $disposition ) {
$sContObj = $this->getContainer( $srcCont );
$dContObj = $this->getContainer( $dstCont );
} catch ( NoSuchContainerException $e ) {
- $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+ if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
+ $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+ }
return $status;
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
$sContObj = $this->getContainer( $srcCont );
$dContObj = $this->getContainer( $dstCont );
} catch ( NoSuchContainerException $e ) {
- $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+ if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
+ $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+ }
return $status;
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
} catch ( CDNNotEnabledException $e ) {
// CDN not enabled; nothing to see here
} catch ( NoSuchContainerException $e ) {
- $status->fatal( 'backend-fail-delete', $params['src'] );
+ if ( empty( $params['ignoreMissingSource'] ) ) {
+ $status->fatal( 'backend-fail-delete', $params['src'] );
+ }
} catch ( NoSuchObjectException $e ) {
if ( empty( $params['ignoreMissingSource'] ) ) {
$status->fatal( 'backend-fail-delete', $params['src'] );
// (a) Check if container already exists
try {
- $contObj = $this->getContainer( $fullCont );
+ $this->getContainer( $fullCont );
// NoSuchContainerException not thrown: container must exist
return $status; // already exists
} catch ( NoSuchContainerException $e ) {
* Fill in any missing object metadata and save it to Swift
*
* @param $obj CF_Object
- * @param $path string Storage path to object
+ * @param string $path Storage path to object
* @return bool Success
* @throws Exception cloudfiles exceptions
*/
try {
$sContObj = $this->getContainer( $srcCont );
$obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
- // Get source file extension
- $ext = FileBackend::extensionFromPath( $path );
// Create a new temporary memory file...
$handle = fopen( 'php://temp', 'wb' );
if ( $handle ) {
/**
* Do not call this function outside of SwiftFileBackendFileList
*
- * @param $fullCont string Resolved container name
- * @param $dir string Resolved storage directory with no trailing slash
- * @param $after string|null Storage path of file to list items after
+ * @param string $fullCont Resolved container name
+ * @param string $dir Resolved storage directory with no trailing slash
+ * @param string|null $after Storage path of file to list items after
* @param $limit integer Max number of items to list
- * @param $params Array Includes flag for 'topOnly'
+ * @param array $params Includes flag for 'topOnly'
* @return Array List of relative paths of dirs directly under $dir
*/
public function getDirListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
/**
* Do not call this function outside of SwiftFileBackendFileList
*
- * @param $fullCont string Resolved container name
- * @param $dir string Resolved storage directory with no trailing slash
- * @param $after string|null Storage path of file to list items after
+ * @param string $fullCont Resolved container name
+ * @param string $dir Resolved storage directory with no trailing slash
+ * @param string|null $after Storage path of file to list items after
* @param $limit integer Max number of items to list
- * @param $params Array Includes flag for 'topOnly'
+ * @param array $params Includes flag for 'topOnly'
* @return Array List of relative paths of files under $dir
*/
public function getFileListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
* on a FileBackend params array, e.g. that of getLocalCopy().
* $params is currently only checked for a 'latest' flag.
*
- * @param $params Array
+ * @param array $params
* @return Array
*/
protected function headersFromParams( array $params ) {
* (lists are truncated to 10000 item with no way to page), and is just a performance risk.
*
* @param $contObj CF_Container Swift container
- * @param $readGrps Array List of read access routes
- * @param $writeGrps Array List of write access routes
+ * @param array $readGrps List of read access routes
+ * @param array $writeGrps List of write access routes
* @return Status
*/
protected function setContainerAccess(
* Purge the CDN cache of affected objects if CDN caching is enabled.
* This is for Rackspace/Akamai CDNs.
*
- * @param $objects Array List of CF_Object items
+ * @param array $objects List of CF_Object items
* @return void
*/
public function purgeCDNCache( array $objects ) {
* Get a Swift container object, possibly from process cache.
* Use $reCache if the file count or byte count is needed.
*
- * @param $container string Container name
- * @param $bypassCache bool Bypass all caches and load from Swift
+ * @param string $container Container name
+ * @param bool $bypassCache Bypass all caches and load from Swift
* @return CF_Container
* @throws CloudFilesException
*/
/**
* Create a Swift container
*
- * @param $container string Container name
+ * @param string $container Container name
* @return CF_Container
* @throws CloudFilesException
*/
/**
* Delete a Swift container
*
- * @param $container string Container name
+ * @param string $container Container name
* @return void
* @throws CloudFilesException
*/
* @param $e Exception
* @param $status Status|null
* @param $func string
- * @param $params Array
+ * @param array $params
* @return void
*/
protected function handleException( Exception $e, $status, $func, array $params ) {
/**
* @param $backend SwiftFileBackend
- * @param $fullCont string Resolved container name
- * @param $dir string Resolved directory relative to container
- * @param $params Array
+ * @param string $fullCont Resolved container name
+ * @param string $dir Resolved directory relative to container
+ * @param array $params
*/
public function __construct( SwiftFileBackend $backend, $fullCont, $dir, array $params ) {
$this->backend = $backend;
/**
* Get the given list portion (page)
*
- * @param $container string Resolved container name
- * @param $dir string Resolved path relative to container
+ * @param string $container Resolved container name
+ * @param string $dir Resolved path relative to container
* @param $after string|null
* @param $limit integer
- * @param $params Array
+ * @param array $params
* @return Traversable|Array|null Returns null on failure
*/
abstract protected function pageFromList( $container, $dir, &$after, $limit, array $params );
* Create an appropriate FileJournal object from config
*
* @param $config Array
- * @param $backend string A registered file backend name
+ * @param string $backend A registered file backend name
* @throws MWException
* @return FileJournal
*/
* newSha1 : The final base 36 SHA-1 of the file
* Note that 'false' should be used as the SHA-1 for non-existing files.
*
- * @param $entries Array List of file operations (each an array of parameters)
- * @param $batchId string UUID string that identifies the operation batch
+ * @param array $entries List of file operations (each an array of parameters)
+ * @param string $batchId UUID string that identifies the operation batch
* @return Status
*/
final public function logChangeBatch( array $entries, $batchId ) {
/**
* @see FileJournal::logChangeBatch()
*
- * @param $entries Array List of file operations (each an array of parameters)
- * @param $batchId string UUID string that identifies the operation batch
+ * @param array $entries List of file operations (each an array of parameters)
+ * @param string $batchId UUID string that identifies the operation batch
* @return Status
*/
abstract protected function doLogChangeBatch( array $entries, $batchId );
* This tells the DB server how long to wait before assuming
* connection failure and releasing all the locks for a session.
*
- * @param Array $config
+ * @param array $config
*/
public function __construct( array $config ) {
parent::__construct( $config );
$status = Status::newGood();
$db = $this->getConnection( $lockSrv ); // checked in isServerUp()
- $keys = array_unique( array_map( array( $this, 'sha1Base36Absolute' ), $paths ) );
+
+ $keys = array(); // list of hash keys for the paths
+ $data = array(); // list of rows to insert
+ $checkEXKeys = array(); // list of hash keys that this has no EX lock on
# Build up values for INSERT clause
- $data = array();
- foreach ( $keys as $key ) {
+ foreach ( $paths as $path ) {
+ $key = $this->sha1Base36Absolute( $path );
+ $keys[] = $key;
$data[] = array( 'fls_key' => $key, 'fls_session' => $this->session );
+ if ( !isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
+ $checkEXKeys[] = $key;
+ }
}
- # Block new writers...
+
+ # Block new writers (both EX and SH locks leave entries here)...
$db->insert( 'filelocks_shared', $data, __METHOD__, array( 'IGNORE' ) );
# Actually do the locking queries...
if ( $type == self::LOCK_SH ) { // reader locks
+ $blocked = false;
# Bail if there are any existing writers...
- $blocked = $db->selectField( 'filelocks_exclusive', '1',
- array( 'fle_key' => $keys ),
- __METHOD__
- );
- # Prospective writers that haven't yet updated filelocks_exclusive
- # will recheck filelocks_shared after doing so and bail due to our entry.
+ if ( count( $checkEXKeys ) ) {
+ $blocked = $db->selectField( 'filelocks_exclusive', '1',
+ array( 'fle_key' => $checkEXKeys ),
+ __METHOD__
+ );
+ }
+ # Other prospective writers that haven't yet updated filelocks_exclusive
+ # will recheck filelocks_shared after doing so and bail due to this entry.
} else { // writer locks
$encSession = $db->addQuotes( $this->session );
# Bail if there are any existing writers...
- # The may detect readers, but the safe check for them is below.
+ # This may detect readers, but the safe check for them is below.
# Note: if two writers come at the same time, both bail :)
$blocked = $db->selectField( 'filelocks_shared', '1',
array( 'fls_key' => $keys, "fls_session != $encSession" ),
protected $lockDir; // global dir for all servers
- /** @var Array Map of (locked key => lock type => lock file handle) */
+ /** @var Array Map of (locked key => lock file handle) */
protected $handles = array();
/**
} elseif ( isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
$this->locksHeld[$path][$type] = 1;
} else {
- wfSuppressWarnings();
- $handle = fopen( $this->getLockPath( $path ), 'a+' );
- wfRestoreWarnings();
- if ( !$handle ) { // lock dir missing?
- wfMkdirParents( $this->lockDir );
- $handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
+ if ( isset( $this->handles[$path] ) ) {
+ $handle = $this->handles[$path];
+ } else {
+ wfSuppressWarnings();
+ $handle = fopen( $this->getLockPath( $path ), 'a+' );
+ wfRestoreWarnings();
+ if ( !$handle ) { // lock dir missing?
+ wfMkdirParents( $this->lockDir );
+ $handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
+ }
}
if ( $handle ) {
// Either a shared or exclusive lock
if ( flock( $handle, $lock | LOCK_NB ) ) {
// Record this lock as active
$this->locksHeld[$path][$type] = 1;
- $this->handles[$path][$type] = $handle;
+ $this->handles[$path] = $handle;
} else {
fclose( $handle );
$status->fatal( 'lockmanager-fail-acquirelock', $path );
--$this->locksHeld[$path][$type];
if ( $this->locksHeld[$path][$type] <= 0 ) {
unset( $this->locksHeld[$path][$type] );
- // If a LOCK_SH comes in while we have a LOCK_EX, we don't
- // actually add a handler, so check for handler existence.
- if ( isset( $this->handles[$path][$type] ) ) {
- if ( $type === self::LOCK_EX
- && isset( $this->locksHeld[$path][self::LOCK_SH] )
- && !isset( $this->handles[$path][self::LOCK_SH] ) )
- {
- // EX lock came first: move this handle to the SH one
- $this->handles[$path][self::LOCK_SH] = $this->handles[$path][$type];
- } else {
- // Mark this handle to be unlocked and closed
- $handlesToClose[] = $this->handles[$path][$type];
- }
- unset( $this->handles[$path][$type] );
- }
}
if ( !count( $this->locksHeld[$path] ) ) {
unset( $this->locksHeld[$path] ); // no locks on this path
+ if ( isset( $this->handles[$path] ) ) {
+ $handlesToClose[] = $this->handles[$path];
+ unset( $this->handles[$path] );
+ }
}
// Unlock handles to release locks and delete
// any lock files that end up with no locks on them...
* each having an odd-numbered list of server names (peers) as values.
* - connTimeout : Lock server connection attempt timeout. [optional]
*
- * @param Array $config
+ * @param array $config
*/
public function __construct( array $config ) {
parent::__construct( $config );
protected $locksHeld = array();
protected $domain; // string; domain (usually wiki ID)
+ protected $lockTTL; // integer; maximum time locks can be held
/* Lock types; stronger locks have higher values */
const LOCK_SH = 1; // shared lock (for reads)
* Construct a new instance from configuration
*
* $config paramaters include:
- * - domain : Domain (usually wiki ID) that all resources are relative to [optional]
+ * - domain : Domain (usually wiki ID) that all resources are relative to [optional]
+ * - lockTTL : Age (in seconds) at which resource locks should expire.
+ * This only applies if locks are not tied to a connection/process.
*
* @param $config Array
*/
public function __construct( array $config ) {
$this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
+ if ( isset( $config['lockTTL'] ) ) {
+ $this->lockTTL = max( 1, $config['lockTTL'] );
+ } elseif ( PHP_SAPI === 'cli' ) {
+ $this->lockTTL = 2*3600;
+ } else {
+ $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
+ $this->lockTTL = max( 5*60, 2*(int)$met );
+ }
}
/**
* Lock the resources at the given abstract paths
*
- * @param $paths Array List of resource names
+ * @param array $paths List of resource names
* @param $type integer LockManager::LOCK_* constant
* @return Status
*/
/**
* Unlock the resources at the given abstract paths
*
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @param $type integer LockManager::LOCK_* constant
* @return Status
*/
/**
* Lock resources with the given keys and lock type
*
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @param $type integer LockManager::LOCK_* constant
* @return string
*/
/**
* Unlock resources with the given keys and lock type
*
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @param $type integer LockManager::LOCK_* constant
* @return string
*/
protected $managers = array();
/**
- * @param $domain string Domain (usually wiki ID)
+ * @param string $domain Domain (usually wiki ID)
*/
protected function __construct( $domain ) {
$this->domain = $domain;
}
/**
- * @param $domain string Domain (usually wiki ID)
+ * @param string $domain Domain (usually wiki ID)
* @return LockManagerGroup
*/
public static function singleton( $domain = false ) {
* This is meant for multi-wiki systems that may share files.
* All locks are non-blocking, which avoids deadlocks.
*
- * All lock requests for a resource, identified by a hash string, will map
- * to one bucket. Each bucket maps to one or several peer servers, each running memcached.
+ * All lock requests for a resource, identified by a hash string, will map to one
+ * bucket. Each bucket maps to one or several peer servers, each running memcached.
* A majority of peers must agree for a lock to be acquired.
*
* @ingroup LockManager
/** @var Array */
protected $serversUp = array(); // (server name => bool)
- protected $lockExpiry; // integer; maximum time locks can be held
- protected $session = ''; // string; random SHA-1 UUID
+ protected $session = ''; // string; random UUID
/**
* Construct a new instance from configuration.
* - memcConfig : Configuration array for ObjectCache::newFromParams. [optional]
* If set, this must use one of the memcached classes.
*
- * @param Array $config
+ * @param array $config
* @throws MWException
*/
public function __construct( array $config ) {
}
}
- $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
- $this->lockExpiry = $met ? 2*(int)$met : 2*3600;
-
$this->session = wfRandomString( 32 );
}
foreach ( $paths as $path ) {
$locksKey = $this->recordKeyForPath( $path );
$locksHeld = isset( $lockRecords[$locksKey] )
- ? $lockRecords[$locksKey]
- : array( self::LOCK_SH => array(), self::LOCK_EX => array() ); // init
+ ? self::sanitizeLockArray( $lockRecords[$locksKey] )
+ : self::newLockArray(); // init
foreach ( $locksHeld[self::LOCK_EX] as $session => $expiry ) {
if ( $expiry < $now ) { // stale?
unset( $locksHeld[self::LOCK_EX][$session] );
}
if ( $status->isOK() ) {
// Register the session in the lock record array
- $locksHeld[$type][$this->session] = $now + $this->lockExpiry;
+ $locksHeld[$type][$this->session] = $now + $this->lockTTL;
// We will update this record if none of the other locks conflict
$lockRecords[$locksKey] = $locksHeld;
}
// If there were no lock conflicts, update all the lock records...
if ( $status->isOK() ) {
- foreach ( $lockRecords as $locksKey => $locksHeld ) {
- $memc->set( $locksKey, $locksHeld );
- wfDebug( __METHOD__ . ": acquired lock on key $locksKey.\n" );
+ foreach ( $paths as $path ) {
+ $locksKey = $this->recordKeyForPath( $path );
+ $locksHeld = $lockRecords[$locksKey];
+ $ok = $memc->set( $locksKey, $locksHeld, 7*86400 );
+ if ( !$ok ) {
+ $status->fatal( 'lockmanager-fail-acquirelock', $path );
+ } else {
+ wfDebug( __METHOD__ . ": acquired lock on key $locksKey.\n" );
+ }
}
}
foreach ( $paths as $path ) {
$locksKey = $this->recordKeyForPath( $path ); // lock record
if ( !isset( $lockRecords[$locksKey] ) ) {
+ $status->warning( 'lockmanager-fail-releaselock', $path );
continue; // nothing to do
}
- $locksHeld = $lockRecords[$locksKey];
- if ( is_array( $locksHeld ) && isset( $locksHeld[$type] ) ) {
- unset( $locksHeld[$type][$this->session] );
- $ok = $memc->set( $locksKey, $locksHeld );
+ $locksHeld = self::sanitizeLockArray( $lockRecords[$locksKey] );
+ if ( isset( $locksHeld[$type][$this->session] ) ) {
+ unset( $locksHeld[$type][$this->session] ); // unregister this session
+ if ( $locksHeld === self::newLockArray() ) {
+ $ok = $memc->delete( $locksKey );
+ } else {
+ $ok = $memc->set( $locksKey, $locksHeld );
+ }
+ if ( !$ok ) {
+ $status->fatal( 'lockmanager-fail-releaselock', $path );
+ }
} else {
- $ok = true;
- }
- if ( !$ok ) {
- $status->fatal( 'lockmanager-fail-releaselock', $path );
+ $status->warning( 'lockmanager-fail-releaselock', $path );
}
wfDebug( __METHOD__ . ": released lock on key $locksKey.\n" );
}
/**
* Get the MemcachedBagOStuff object for a $lockSrv
*
- * @param $lockSrv string Server name
+ * @param string $lockSrv Server name
* @return MemcachedBagOStuff|null
*/
protected function getCache( $lockSrv ) {
if ( isset( $this->bagOStuffs[$lockSrv] ) ) {
$memc = $this->bagOStuffs[$lockSrv];
if ( !isset( $this->serversUp[$lockSrv] ) ) {
- $this->serversUp[$lockSrv] = $memc->set( 'MemcLockManager:ping', 1, 1 );
+ $this->serversUp[$lockSrv] = $memc->set( __CLASS__ . ':ping', 1, 1 );
if ( !$this->serversUp[$lockSrv] ) {
trigger_error( __METHOD__ . ": Could not contact $lockSrv.", E_USER_WARNING );
}
return implode( ':', array( __CLASS__, 'locks', $this->sha1Base36Absolute( $path ) ) );
}
+ /**
+ * @return Array An empty lock structure for a key
+ */
+ protected static function newLockArray() {
+ return array( self::LOCK_SH => array(), self::LOCK_EX => array() );
+ }
+
+ /**
+ * @param $a array
+ * @return Array An empty lock structure for a key
+ */
+ protected static function sanitizeLockArray( $a ) {
+ if ( is_array( $a ) && isset( $a[self::LOCK_EX] ) && isset( $a[self::LOCK_SH] ) ) {
+ return $a;
+ } else {
+ trigger_error( __METHOD__ . ": reset invalid lock array.", E_USER_WARNING );
+ return self::newLockArray();
+ }
+ }
+
/**
* @param $memc MemcachedBagOStuff
- * @param $keys Array List of keys to acquire
+ * @param array $keys List of keys to acquire
* @return bool
*/
protected function acquireMutexes( MemcachedBagOStuff $memc, array $keys ) {
continue; // acquire in order
}
}
- } while ( count( $lockedKeys ) < count( $keys ) && ( microtime( true ) - $start ) <= 6 );
+ } while ( count( $lockedKeys ) < count( $keys ) && ( microtime( true ) - $start ) <= 3 );
if ( count( $lockedKeys ) != count( $keys ) ) {
- $this->releaseMutexes( $lockedKeys ); // failed; release what was locked
+ $this->releaseMutexes( $memc, $lockedKeys ); // failed; release what was locked
return false;
}
/**
* @param $memc MemcachedBagOStuff
- * @param $keys Array List of acquired keys
+ * @param array $keys List of acquired keys
* @return void
*/
protected function releaseMutexes( MemcachedBagOStuff $memc, array $keys ) {
foreach ( $paths as $path ) {
if ( isset( $this->locksHeld[$path][$type] ) ) {
++$this->locksHeld[$path][$type];
- } elseif ( isset( $this->locksHeld[$path][self::LOCK_EX] ) ) {
- $this->locksHeld[$path][$type] = 1;
} else {
$bucket = $this->getBucketFromPath( $path );
$pathsToLock[$bucket][] = $path;
* This is all or nothing; if any key is locked then this totally fails.
*
* @param $bucket integer
- * @param $paths Array List of resource keys to lock
+ * @param array $paths List of resource keys to lock
* @param $type integer LockManager::LOCK_EX or LockManager::LOCK_SH
* @return Status
*/
* Attempt to release locks with the peers for a bucket
*
* @param $bucket integer
- * @param $paths Array List of resource keys to lock
+ * @param array $paths List of resource keys to lock
* @param $type integer LockManager::LOCK_EX or LockManager::LOCK_SH
* @return Status
*/
/**
* @param $manager LockManager
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @param $type integer LockManager::LOCK_* constant
* @param $status Status
*/
* The status object is updated with any errors or warnings.
*
* @param $manager LockManager
- * @param $paths Array List of storage paths
+ * @param array $paths List of storage paths
* @param $type integer LockManager::LOCK_* constant
* @param $status Status
* @return ScopedLock|null Returns null on failure
/**
* Check if a single zone or list of zones is defined for usage
*
- * @param $doZones Array Only do a particular zones
+ * @param array $doZones Only do a particular zones
* @throws MWException
* @return Status
*/
/**
* Get the URL corresponding to one of the four basic zones
*
- * @param $zone String One of: public, deleted, temp, thumb
- * @param $ext String|null Optional file extension
+ * @param string $zone One of: public, deleted, temp, thumb
+ * @param string|null $ext Optional file extension
* @return String or false
*/
public function getZoneUrl( $zone, $ext = null ) {
* from the URL path, one can configure thumb_handler.php to recognize a special path on the
* same host name as the wiki that is used for viewing thumbnails.
*
- * @param $zone String: one of: public, deleted, temp, thumb
+ * @param string $zone one of: public, deleted, temp, thumb
* @return String or false
*/
public function getZoneHandlerUrl( $zone ) {
* version control should return false if the time is specified.
*
* @param $title Mixed: Title object or string
- * @param $options array Associative array of options:
+ * @param array $options Associative array of options:
* time: requested time for a specific file version, or false for the
* current version. An image object will be returned which was
* created at the specified time (which may be archived or current).
/**
* Find many files at once.
*
- * @param $items array An array of titles, or an array of findFile() options with
+ * @param array $items An array of titles, or an array of findFile() options with
* the "title" option giving the title. Example:
*
* $findItem = array( 'title' => $title, 'private' => true );
* Returns false if the file does not exist. Repositories not supporting
* version control should return false if the time is specified.
*
- * @param $sha1 String base 36 SHA-1 hash
- * @param $options array Option array, same as findFile().
+ * @param string $sha1 base 36 SHA-1 hash
+ * @param array $options Option array, same as findFile().
* @return File|bool False on failure
*/
public function findFileFromKey( $sha1, $options = array() ) {
* Get an array of arrays or iterators of file objects for files that
* have the given SHA-1 content hashes.
*
- * @param $hashes array An array of hashes
+ * @param array $hashes An array of hashes
* @return array An Array of arrays or iterators of file objects and the hash as key
*/
public function findBySha1s( array $hashes ) {
* Get a relative path including trailing slash, e.g. f/fa/
* If the repo is not hashed, returns an empty string
*
- * @param $name string Name of file
+ * @param string $name Name of file
* @return string
*/
public function getHashPath( $name ) {
* Get a relative path including trailing slash, e.g. f/fa/
* If the repo is not hashed, returns an empty string
*
- * @param $suffix string Basename of file from FileRepo::storeTemp()
+ * @param string $suffix Basename of file from FileRepo::storeTemp()
* @return string
*/
public function getTempHashPath( $suffix ) {
* Make an url to this repo
*
* @param $query mixed Query string to append
- * @param $entry string Entry point; defaults to index
+ * @param string $entry Entry point; defaults to index
* @return string|bool False on failure
*/
public function makeUrl( $query = '', $entry = 'index' ) {
* repository's file class, since it may return invalid results. User code
* should use File::getDescriptionText().
*
- * @param $name String: name of image to fetch
- * @param $lang String: language to fetch it in, if any.
+ * @param string $name name of image to fetch
+ * @param string $lang language to fetch it in, if any.
* @return string
*/
public function getDescriptionRenderUrl( $name, $lang = null ) {
/**
* Store a file to a given destination.
*
- * @param $srcPath String: source file system path, storage path, or virtual URL
- * @param $dstZone String: destination zone
- * @param $dstRel String: destination relative path
+ * @param string $srcPath source file system path, storage path, or virtual URL
+ * @param string $dstZone destination zone
+ * @param string $dstRel destination relative path
* @param $flags Integer: bitwise combination of the following flags:
* self::DELETE_SOURCE Delete the source file after upload
* self::OVERWRITE Overwrite an existing destination file instead of failing
/**
* Store a batch of files
*
- * @param $triplets Array: (src, dest zone, dest rel) triplets as per store()
+ * @param array $triplets (src, dest zone, dest rel) triplets as per store()
* @param $flags Integer: bitwise combination of the following flags:
* self::DELETE_SOURCE Delete the source file after upload
* self::OVERWRITE Overwrite an existing destination file instead of failing
* Each file can be a (zone, rel) pair, virtual url, storage path.
* It will try to delete each file, but ignores any errors that may occur.
*
- * @param $files array List of files to delete
+ * @param array $files List of files to delete
* @param $flags Integer: bitwise combination of the following flags:
* self::SKIP_LOCKING Skip any file locking when doing the deletions
* @return FileRepoStatus
* This function can be used to write to otherwise read-only foreign repos.
* This is intended for copying generated thumbnails into the repo.
*
- * @param $src string Source file system path, storage path, or virtual URL
- * @param $dst string Virtual URL or storage path
- * @param $disposition string|null Content-Disposition if given and supported
+ * @param string $src Source file system path, storage path, or virtual URL
+ * @param string $dst Virtual URL or storage path
+ * @param string|null $disposition Content-Disposition if given and supported
* @return FileRepoStatus
*/
final public function quickImport( $src, $dst, $disposition = null ) {
* This function can be used to write to otherwise read-only foreign repos.
* This is intended for purging thumbnails.
*
- * @param $path string Virtual URL or storage path
+ * @param string $path Virtual URL or storage path
* @return FileRepoStatus
*/
final public function quickPurge( $path ) {
* Deletes a directory if empty.
* This function can be used to write to otherwise read-only foreign repos.
*
- * @param $dir string Virtual URL (or storage path) of directory to clean
+ * @param string $dir Virtual URL (or storage path) of directory to clean
* @return Status
*/
public function quickCleanDir( $dir ) {
* All path parameters may be a file system path, storage path, or virtual URL.
* When "dispositions" are given they are used as Content-Disposition if supported.
*
- * @param $triples Array List of (source path, destination path, disposition)
+ * @param array $triples List of (source path, destination path, disposition)
* @return FileRepoStatus
*/
public function quickImportBatch( array $triples ) {
* This function can be used to write to otherwise read-only foreign repos.
* This does no locking nor journaling and is intended for purging thumbnails.
*
- * @param $paths Array List of virtual URLs or storage paths
+ * @param array $paths List of virtual URLs or storage paths
* @return FileRepoStatus
*/
public function quickPurgeBatch( array $paths ) {
* Returns a FileRepoStatus object with the file Virtual URL in the value,
* file can later be disposed using FileRepo::freeTemp().
*
- * @param $originalName String: the base name of the file as specified
+ * @param string $originalName the base name of the file as specified
* by the user. The file extension will be maintained.
- * @param $srcPath String: the current location of the file.
+ * @param string $srcPath the current location of the file.
* @return FileRepoStatus object with the URL in the value.
*/
public function storeTemp( $originalName, $srcPath ) {
$date = gmdate( "YmdHis" );
$hashPath = $this->getHashPath( $originalName );
- $dstRel = "{$hashPath}{$date}!{$originalName}";
$dstUrlRel = $hashPath . $date . '!' . rawurlencode( $originalName );
$virtualUrl = $this->getVirtualUrl( 'temp' ) . '/' . $dstUrlRel;
/**
* Remove a temporary file or mark it for garbage collection
*
- * @param $virtualUrl String: the virtual URL returned by FileRepo::storeTemp()
+ * @param string $virtualUrl the virtual URL returned by FileRepo::storeTemp()
* @return Boolean: true on success, false on failure
*/
public function freeTemp( $virtualUrl ) {
/**
* Concatenate a list of temporary files into a target file location.
*
- * @param $srcPaths Array Ordered list of source virtual URLs/storage paths
- * @param $dstPath String Target file system path
+ * @param array $srcPaths Ordered list of source virtual URLs/storage paths
+ * @param string $dstPath Target file system path
* @param $flags Integer: bitwise combination of the following flags:
* self::DELETE_SOURCE Delete the source files
* @return FileRepoStatus
* Options to $options include:
* - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
*
- * @param $srcPath String: the source file system path, storage path, or URL
- * @param $dstRel String: the destination relative path
- * @param $archiveRel String: the relative path where the existing file is to
+ * @param string $srcPath the source file system path, storage path, or URL
+ * @param string $dstRel the destination relative path
+ * @param string $archiveRel the relative path where the existing file is to
* be archived, if there is one. Relative to the public zone root.
* @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
* that the source file should be deleted if possible
- * @param $options Array Optional additional parameters
+ * @param array $options Optional additional parameters
* @return FileRepoStatus
*/
public function publish(
/**
* Publish a batch of files
*
- * @param $ntuples Array: (source, dest, archive) triplets or
+ * @param array $ntuples (source, dest, archive) triplets or
* (source, dest, archive, options) 4-tuples as per publish().
* @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
* that the source files should be deleted if possible
$operations = array();
$sourceFSFilesToDelete = array(); // cleanup for disk source files
// Validate each triplet and get the store operation...
- foreach ( $ntuples as $i => $ntuple ) {
+ foreach ( $ntuples as $ntuple ) {
list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
$options = isset( $ntuple[3] ) ? $ntuple[3] : array();
// Resolve source to a storage path if virtual
$status->merge( $backend->doOperations( $operations ) );
// Find out which files were archived...
foreach ( $ntuples as $i => $ntuple ) {
- list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
+ list( , , $archiveRel ) = $ntuple;
$archivePath = $this->getZonePath( 'public' ) . "/$archiveRel";
if ( $this->fileExists( $archivePath ) ) {
$status->value[$i] = 'archived';
* Creates a directory with the appropriate zone permissions.
* Callers are responsible for doing read-only and "writable repo" checks.
*
- * @param $dir string Virtual URL (or storage path) of directory to clean
+ * @param string $dir Virtual URL (or storage path) of directory to clean
* @return Status
*/
protected function initDirectory( $dir ) {
$path = $this->resolveToStoragePath( $dir );
- list( $b, $container, $r ) = FileBackend::splitStoragePath( $path );
+ list( , $container, ) = FileBackend::splitStoragePath( $path );
$params = array( 'dir' => $path );
if ( $this->isPrivate || $container === $this->zones['deleted']['container'] ) {
/**
* Deletes a directory if empty.
*
- * @param $dir string Virtual URL (or storage path) of directory to clean
+ * @param string $dir Virtual URL (or storage path) of directory to clean
* @return Status
*/
public function cleanDir( $dir ) {
/**
* Checks existence of a a file
*
- * @param $file string Virtual URL (or storage path) of file to check
+ * @param string $file Virtual URL (or storage path) of file to check
* @return bool
*/
public function fileExists( $file ) {
/**
* Checks existence of an array of files.
*
- * @param $files Array: Virtual URLs (or storage paths) of files to check
+ * @param array $files Virtual URLs (or storage paths) of files to check
* @return array|bool Either array of files and existence flags, or false
*/
public function fileExistsBatch( array $files ) {
* assumes a naming scheme in the deleted zone based on content hash, as
* opposed to the public zone which is assumed to be unique.
*
- * @param $sourceDestPairs Array of source/destination pairs. Each element
+ * @param array $sourceDestPairs of source/destination pairs. Each element
* is a two-element array containing the source file path relative to the
* public root in the first element, and the archive file path relative
* to the deleted zone root in the second element.
* Attempt to stream a file with the given virtual URL/storage path
*
* @param $virtualUrl string
- * @param $headers Array Additional HTTP headers to send on success
+ * @param array $headers Additional HTTP headers to send on success
* @return bool Success
*/
public function streamFile( $virtualUrl, $headers = array() ) {
* If the url has been requested today, get it from cache
* Otherwise retrieve remote thumb url, check for local file.
*
- * @param $name String is a dbkey form of a title
+ * @param string $name is a dbkey form of a title
* @param $width
* @param $height
- * @param String $params Other rendering parameters (page number, etc) from handler's makeParamString.
+ * @param string $params Other rendering parameters (page number, etc) from handler's makeParamString.
* @return bool|string
*/
function getThumbUrlFromCache( $name, $width, $height, $params = "" ) {
/**
* @see FileRepo::getZoneUrl()
* @param $zone String
- * @param $ext String|null Optional file extension
+ * @param string|null $ext Optional file extension
* @return String
*/
function getZoneUrl( $zone, $ext = null ) {
/**
* Check if a deleted (filearchive) file has this sha1 key
*
- * @param $key String File storage key (base-36 sha1 key with file extension)
- * @param $lock String|null Use "lock" to lock the row via FOR UPDATE
+ * @param string $key File storage key (base-36 sha1 key with file extension)
+ * @param string|null $lock Use "lock" to lock the row via FOR UPDATE
* @return bool File with this key is in use
*/
protected function deletedFileHasKey( $key, $lock = null ) {
/**
* Check if a hidden (revision delete) file has this sha1 key
*
- * @param $key String File storage key (base-36 sha1 key with file extension)
- * @param $lock String|null Use "lock" to lock the row via FOR UPDATE
+ * @param string $key File storage key (base-36 sha1 key with file extension)
+ * @param string|null $lock Use "lock" to lock the row via FOR UPDATE
* @return bool File with this key is in use
*/
protected function hiddenFileHasKey( $key, $lock = null ) {
* Get an array or iterator of file objects for files that have a given
* SHA-1 content hash.
*
- * @param $hash String a sha1 hash to look for
+ * @param string $hash a sha1 hash to look for
* @return Array
*/
function findBySha1( $hash ) {
*
* Overrides generic implementation in FileRepo for performance reason
*
- * @param $hashes array An array of hashes
+ * @param array $hashes An array of hashes
* @return array An Array of arrays or iterators of file objects and the hash as key
*/
function findBySha1s( array $hashes ) {
/**
* Construct a group of file repositories.
*
- * @param $localInfo array Associative array for local repo's info
- * @param $foreignInfo Array of repository info arrays.
+ * @param array $localInfo Associative array for local repo's info
+ * @param array $foreignInfo of repository info arrays.
* Each info array is an associative array with the 'class' member
* giving the class name. The entire array is passed to the repository
* constructor as the first parameter.
* You can also use wfFindFile() to do this.
*
* @param $title Title|string Title object or string
- * @param $options array Associative array of options:
+ * @param array $options Associative array of options:
* time: requested time for an archived image, or false for the
* current version. An image object will be returned which was
* created at the specified time.
* Find an instance of the file with this key, created at the specified time
* Returns false if the file does not exist.
*
- * @param $hash String base 36 SHA-1 hash
- * @param $options array Option array, same as findFile()
+ * @param string $hash base 36 SHA-1 hash
+ * @param array $options Option array, same as findFile()
* @return File object or false if it is not found
*/
function findFileFromKey( $hash, $options = array() ) {
/**
* Find all instances of files with this key
*
- * @param $hash String base 36 SHA-1 hash
+ * @param string $hash base 36 SHA-1 hash
* @return Array of File objects
*/
function findBySha1( $hash ) {
/**
* Find all instances of files with this keys
*
- * @param $hashes Array base 36 SHA-1 hashes
+ * @param array $hashes base 36 SHA-1 hashes
* @return Array of array of File objects
*/
function findBySha1s( array $hashes ) {
* first parameter.
*
* @param $callback Callback: the function to call
- * @param $params Array: optional additional parameters to pass to the function
+ * @param array $params optional additional parameters to pass to the function
* @return bool
*/
function forEachForeignRepo( $callback, $params = array() ) {
* valid Title object with namespace NS_FILE or null
*
* @param $title Title|string
- * @param $exception string|bool Use 'exception' to throw an error on bad titles
+ * @param string|bool $exception Use 'exception' to throw an error on bad titles
* @throws MWException
* @return Title|null
*/
* Normalize a file extension to the common form, and ensure it's clean.
* Extensions with non-alphanumeric characters will be discarded.
*
- * @param $ext string (without the .)
+ * @param string $ext (without the .)
* @return string
*/
static function normalizeExtension( $ext ) {
* Checks if file extensions are compatible
*
* @param $old File Old file
- * @param $new string New name
+ * @param string $new New name
*
* @return bool|null
*/
* Returns ID or name of user who uploaded the file
* STUB
*
- * @param $type string 'text' or 'id'
+ * @param string $type 'text' or 'id'
*
* @return string|int
*/
* Use File::THUMB_FULL_NAME to always get a name like "<params>-<source>".
* Otherwise, the format may be "<params>-<source>" or "<params>-thumbnail.<ext>".
*
- * @param $params Array: handler-specific parameters
+ * @param array $params handler-specific parameters
* @param $flags integer Bitfield that supports THUMB_* constants
* @return string
*/
/**
* Return either a MediaTransformError or placeholder thumbnail (if $wgIgnoreImageErrors)
*
- * @param $thumbPath string Thumbnail storage path
- * @param $thumbUrl string Thumbnail URL
+ * @param string $thumbPath Thumbnail storage path
+ * @param string $thumbUrl Thumbnail URL
* @param $params Array
* @param $flags integer
* @return MediaTransformOutput
/**
* Transform a media file
*
- * @param $params Array: an associative array of handler-specific parameters.
+ * @param array $params an associative array of handler-specific parameters.
* Typical keys are width, height and page.
* @param $flags Integer: a bitfield, may contain self::RENDER_NOW to force rendering
* @return MediaTransformOutput|bool False on failure
}
/**
- * @param $thumbName string Thumbnail name
+ * @param string $thumbName Thumbnail name
* @return string Content-Disposition header value
*/
function getThumbDisposition( $thumbName ) {
* Purge shared caches such as thumbnails and DB data caching
* STUB
* Overridden by LocalFile
- * @param $options Array Options, which include:
+ * @param array $options Options, which include:
* 'forThumbRefresh' : The purging is only to refresh thumbnails
*/
function purgeCache( $options = array() ) {}
*
* STUB
* @param $limit integer Limit of rows to return
- * @param $start string timestamp Only revisions older than $start will be returned
- * @param $end string timestamp Only revisions newer than $end will be returned
- * @param $inc bool Include the endpoints of the time range
+ * @param string $start timestamp Only revisions older than $start will be returned
+ * @param string $end timestamp Only revisions newer than $end will be returned
+ * @param bool $inc Include the endpoints of the time range
*
* @return array
*/
/**
* Get the path of an archived file relative to the public zone root
*
- * @param $suffix bool|string if not false, the name of an archived thumbnail file
+ * @param bool|string $suffix if not false, the name of an archived thumbnail file
*
* @return string
*/
* Get the path, relative to the thumbnail zone root, of the
* thumbnail directory or a particular file if $suffix is specified
*
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
* Get the path, relative to the thumbnail zone root, for an archived file's thumbs directory
* or a specific thumb if the $suffix is given.
*
- * @param $archiveName string the timestamped name of an archived image
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param string $archiveName the timestamped name of an archived image
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
/**
* Get the path of the archived file.
*
- * @param $suffix bool|string if not false, the name of an archived file.
+ * @param bool|string $suffix if not false, the name of an archived file.
*
* @return string
*/
/**
* Get the path of an archived file's thumbs, or a particular thumb if $suffix is specified
*
- * @param $archiveName string the timestamped name of an archived image
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param string $archiveName the timestamped name of an archived image
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
/**
* Get the path of the thumbnail directory, or a particular file if $suffix is specified
*
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
/**
* Get the path of the transcoded directory, or a particular file if $suffix is specified
*
- * @param $suffix bool|string if not false, the name of a media file
+ * @param bool|string $suffix if not false, the name of a media file
*
* @return string
*/
/**
* Get the URL of the archive directory, or a particular file if $suffix is specified
*
- * @param $suffix bool|string if not false, the name of an archived file
+ * @param bool|string $suffix if not false, the name of an archived file
*
* @return string
*/
/**
* Get the URL of the archived file's thumbs, or a particular thumb if $suffix is specified
*
- * @param $archiveName string the timestamped name of an archived image
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param string $archiveName the timestamped name of an archived image
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
/**
* Get the URL of the zone directory, or a particular file if $suffix is specified
*
- * @param $zone string name of requested zone
- * @param $suffix bool|string if not false, the name of a file in zone
+ * @param string $zone name of requested zone
+ * @param bool|string $suffix if not false, the name of a file in zone
*
* @return string path
*/
/**
* Get the URL of the thumbnail directory, or a particular file if $suffix is specified
*
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string path
*/
/**
* Get the URL of the transcoded directory, or a particular file if $suffix is specified
*
- * @param $suffix bool|string if not false, the name of a media file
+ * @param bool|string $suffix if not false, the name of a media file
*
* @return string path
*/
/**
* Get the public zone virtual URL for a current version source file
*
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
/**
* Get the public zone virtual URL for an archived version source file
*
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
/**
* Get the virtual URL for a thumbnail file or directory
*
- * @param $suffix bool|string if not false, the name of a thumbnail file
+ * @param bool|string $suffix if not false, the name of a thumbnail file
*
* @return string
*/
* Options to $options include:
* - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
*
- * @param $srcPath String: local filesystem path to the source image
+ * @param string $srcPath local filesystem path to the source image
* @param $flags Integer: a bitwise combination of:
* File::DELETE_SOURCE Delete the source file, i.e. move
* rather than copy
- * @param $options Array Optional additional parameters
+ * @param array $options Optional additional parameters
* @return FileRepoStatus object. On success, the value member contains the
* archive name, or an empty string if it was a new file.
*
*
* May throw database exceptions on error.
*
- * @param $versions array set of record ids of deleted items to restore,
+ * @param array $versions set of record ids of deleted items to restore,
* or empty to restore all revisions.
- * @param $unsuppress bool remove restrictions on content upon restoration?
+ * @param bool $unsuppress remove restrictions on content upon restoration?
* @return int|bool the number of file revisions restored if successful,
* or false on failure
* STUB
* Get an image size array like that returned by getImageSize(), or false if it
* can't be determined.
*
- * @param $fileName String: The filename
+ * @param string $fileName The filename
* @return Array
*/
function getImageSize( $fileName ) {
/**
* Get an associative array containing information about a file in the local filesystem.
*
- * @param $path String: absolute local filesystem path
+ * @param string $path absolute local filesystem path
* @param $ext Mixed: the file extension, or true to extract it from the filename.
* Set it to false to ignore the extension.
*
}
/**
- * @param Array $params
+ * @param array $params
* @param int $flags
* @return bool|MediaTransformOutput
*/
* Create a LocalFile from a SHA-1 key
* Do not call this except from inside a repo class.
*
- * @param $sha1 string base-36 SHA-1
+ * @param string $sha1 base-36 SHA-1
* @param $repo LocalRepo
* @param string|bool $timestamp MW_timestamp (optional)
*
/**
* Returns ID or name of user who uploaded the file
*
- * @param $type string 'text' or 'id'
+ * @param string $type 'text' or 'id'
* @return int|string
*/
function getUser( $type = 'text' ) {
* RTT regression for wikis without 404 handling.
*/
function migrateThumbFile( $thumbName ) {
- $thumbDir = $this->getThumbPath();
-
/* Old code for bug 2532
+ $thumbDir = $this->getThumbPath();
$thumbPath = "$thumbDir/$thumbName";
if ( is_dir( $thumbPath ) ) {
// Directory where file should be
/**
* Get all thumbnail names previously generated for this file
- * @param $archiveName string|bool Name of an archive file, default false
+ * @param string|bool $archiveName Name of an archive file, default false
* @return array first element is the base dir, then files in that base dir.
*/
function getThumbnails( $archiveName = false ) {
/**
* Delete cached transformed files for an archived version only.
- * @param $archiveName string name of the archived file
+ * @param string $archiveName name of the archived file
*/
function purgeOldThumbnails( $archiveName ) {
global $wgUseSquid;
/**
* Delete a list of thumbnails visible at urls
- * @param $dir string base dir of the files.
- * @param $files array of strings: relative filenames (to $dir)
+ * @param string $dir base dir of the files.
+ * @param array $files of strings: relative filenames (to $dir)
*/
protected function purgeThumbList( $dir, $files ) {
$fileListDebug = strtr(
/**
* Upload a file and record it in the DB
- * @param $srcPath String: source storage path, virtual URL, or filesystem path
- * @param $comment String: upload description
- * @param $pageText String: text to use for the new description page,
+ * @param string $srcPath source storage path, virtual URL, or filesystem path
+ * @param string $comment upload description
+ * @param string $pageText text to use for the new description page,
* if a new description page is created
* @param $flags Integer|bool: flags for publish()
- * @param $props Array|bool: File properties, if known. This can be used to reduce the
+ * @param array|bool $props File properties, if known. This can be used to reduce the
* upload time when uploading virtual URLs for which the file info
* is already known
- * @param $timestamp String|bool: timestamp for img_timestamp, or false to use the current time
+ * @param string|bool $timestamp timestamp for img_timestamp, or false to use the current time
* @param $user User|null: User object or null to use $wgUser
*
* @return FileRepoStatus object. On success, the value member contains the
* The archive name should be passed through to recordUpload for database
* registration.
*
- * @param $srcPath String: local filesystem path to the source image
+ * @param string $srcPath local filesystem path to the source image
* @param $flags Integer: a bitwise combination of:
* File::DELETE_SOURCE Delete the source file, i.e. move rather than copy
- * @param $options Array Optional additional parameters
+ * @param array $options Optional additional parameters
* @return FileRepoStatus object. On success, the value member contains the
* archive name, or an empty string if it was a new file.
*/
* The archive name should be passed through to recordUpload for database
* registration.
*
- * @param $srcPath String: local filesystem path to the source image
- * @param $dstRel String: target relative path
+ * @param string $srcPath local filesystem path to the source image
+ * @param string $dstRel target relative path
* @param $flags Integer: a bitwise combination of:
* File::DELETE_SOURCE Delete the source file, i.e. move rather than copy
- * @param $options Array Optional additional parameters
+ * @param array $options Optional additional parameters
* @return FileRepoStatus object. On success, the value member contains the
* archive name, or an empty string if it was a new file.
*/
*
* May throw database exceptions on error.
*
- * @param $versions array set of record ids of deleted items to restore,
+ * @param array $versions set of record ids of deleted items to restore,
* or empty to restore all revisions.
* @param $unsuppress Boolean
* @return FileRepoStatus
$this->file->lock();
// Leave private files alone
$privateFiles = array();
- list( $oldRels, $deleteCurrent ) = $this->getOldRels();
+ list( $oldRels, ) = $this->getOldRels();
$dbw = $this->file->repo->getMasterDB();
if ( !empty( $oldRels ) ) {
$files = $newBatch = array();
foreach ( $batch as $batchItem ) {
- list( $src, $dest ) = $batchItem;
+ list( $src, ) = $batchItem;
$files[$src] = $this->file->repo->getVirtualUrl( 'public' ) . '/' . rawurlencode( $src );
}
* Create a OldLocalFile from a SHA-1 key
* Do not call this except from inside a repo class.
*
- * @param $sha1 string base-36 SHA-1
+ * @param string $sha1 base-36 SHA-1
* @param $repo LocalRepo
* @param string|bool $timestamp MW_timestamp (optional)
*
/**
* @param $title Title
* @param $repo FileRepo
- * @param $time String: timestamp or null to load by archive name
- * @param $archiveName String: archive name or null to load by timestamp
+ * @param string $time timestamp or null to load by archive name
+ * @param string $archiveName archive name or null to load by timestamp
* @throws MWException
*/
function __construct( $title, $repo, $time, $archiveName ) {
/**
* Upload a file directly into archive. Generally for Special:Import.
*
- * @param $srcPath string File system path of the source file
- * @param $archiveName string Full archive name of the file, in the form
+ * @param string $srcPath File system path of the source file
+ * @param string $archiveName Full archive name of the file, in the form
* $timestamp!$filename, where $filename must match $this->getName()
*
* @param $timestamp string
/**
* Record a file upload in the oldimage table, without adding log entries.
*
- * @param $srcPath string File system path to the source file
- * @param $archiveName string The archive name of the file
+ * @param string $srcPath File system path to the source file
+ * @param string $archiveName The archive name of the file
* @param $timestamp string
- * @param $comment string Upload comment
+ * @param string $comment Upload comment
* @param $user User User who did this upload
* @return bool
*/
var $handler;
/**
- * @param $path string Storage path
+ * @param string $path Storage path
* @param $mime string
* @return UnregisteredLocalFile
*/
/**
* Write LocalSettings.php to a given path
*
- * @param $path String Full path to write LocalSettings.php to
+ * @param string $path Full path to write LocalSettings.php to
*/
public function writeConfigurationFile( $path ) {
$ls = InstallerOverrides::getLocalSettingsGenerator( $this );
}
}
- public function envCheckPath( ) {
+ public function envCheckPath() {
if ( !$this->specifiedScriptPath ) {
$this->showMessage( 'config-no-cli-uri', $this->getVar( "wgScriptPath" ) );
}
/**
* Get a standard web-user fieldset
- * @param $noCreateMsg String: Message to display instead of the creation checkbox.
+ * @param string $noCreateMsg Message to display instead of the creation checkbox.
* Set this to false to show a creation checkbox.
*
* @return String
* Constructor
*
* @param $db DatabaseBase object to perform updates on
- * @param $shared bool Whether to perform updates on shared tables
+ * @param bool $shared Whether to perform updates on shared tables
* @param $maintenance Maintenance Maintenance object which created us
*/
protected function __construct( DatabaseBase &$db, $shared, Maintenance $maintenance = null ) {
/**
* Output some text. If we're running from web, escape the text first.
*
- * @param $str String: Text to output
+ * @param string $str Text to output
*/
public function output( $str ) {
if ( $this->maintenance->isQuiet() ) {
*
* @since 1.17
*
- * @param $update Array: the update to run. Format is the following:
+ * @param array $update the update to run. Format is the following:
* first item is the callback function, it also can be a
* simple string with the name of a function in this class,
* following elements are parameters to the function.
*
* @since 1.18
*
- * @param $tableName String Name of table to create
- * @param $sqlPath String Full path to the schema file
+ * @param string $tableName Name of table to create
+ * @param string $sqlPath Full path to the schema file
*/
public function addExtensionTable( $tableName, $sqlPath ) {
$this->extensionUpdates[] = array( 'addTable', $tableName, $sqlPath, true );
*
* @since 1.21
*
- * @param $tableName string The table name
- * @param $indexName string The index name
- * @param $sqlPath string The path to the SQL change path
+ * @param string $tableName The table name
+ * @param string $indexName The index name
+ * @param string $sqlPath The path to the SQL change path
*/
public function dropExtensionIndex( $tableName, $indexName, $sqlPath ) {
$this->extensionUpdates[] = array( 'dropIndex', $tableName, $indexName, $sqlPath, true );
*
* @since 1.21
*
- * @param $tableName string The table name
- * @param $oldIndexName string The old index name
- * @param $newIndexName string The new index name
+ * @param string $tableName The table name
+ * @param string $oldIndexName The old index name
+ * @param string $newIndexName The new index name
* @param $skipBothIndexExistWarning Boolean: Whether to warn if both the old and the new indexes exist. [facultative; by default, false]
- * @param $sqlPath string The path to the SQL change path
+ * @param string $sqlPath The path to the SQL change path
*/
public function renameExtensionIndex( $tableName, $oldIndexName, $newIndexName, $sqlPath, $skipBothIndexExistWarning = false ) {
$this->extensionUpdates[] = array( 'renameIndex', $tableName, $oldIndexName, $newIndexName, $skipBothIndexExistWarning, $sqlPath, true );
/**
* @since 1.21
*
- * @param $tableName string The table name
- * @param $fieldName string The field to be modified
- * @param $sqlPath string The path to the SQL change path
+ * @param string $tableName The table name
+ * @param string $fieldName The field to be modified
+ * @param string $sqlPath The path to the SQL change path
*/
public function modifyExtensionField( $tableName, $fieldName, $sqlPath) {
$this->extensionUpdates[] = array( 'modifyField', $tableName, $fieldName, $sqlPath, true );
*
* @since 1.19
*
- * @param $class string Name of a Maintenance subclass
+ * @param string $class Name of a Maintenance subclass
*/
public function addPostDatabaseUpdateMaintenance( $class ) {
$this->postDatabaseUpdateMaintenance[] = $class;
$func = $funcList[0];
$arg = $funcList[1];
$origParams = $funcList[2];
- $ret = call_user_func_array( $func, $arg );
+ call_user_func_array( $func, $arg );
flush();
$this->updatesSkipped[] = $origParams;
}
/**
* Do all the updates
*
- * @param $what Array: what updates to perform
+ * @param array $what what updates to perform
*/
public function doUpdates( $what = array( 'core', 'extensions', 'stats' ) ) {
global $wgVersion, $wgLocalisationCacheConf;
if( $this->fileHandle ) {
$this->skipSchema = false;
- $this->writeSchemaUpdateFile( );
+ $this->writeSchemaUpdateFile();
$this->setAppliedUpdates( "$wgVersion-schema", $this->updatesSkipped );
}
/**
* Helper function for doUpdates()
*
- * @param $updates Array of updates to run
+ * @param array $updates of updates to run
* @param $passSelf Boolean: whether to pass this object we calling external
* functions
*/
* Helper function: check if the given key is present in the updatelog table.
* Obviously, only use this for updates that occur after the updatelog table was
* created!
- * @param $key String Name of the key to check for
+ * @param string $key Name of the key to check for
*
* @return bool
*/
* Helper function: Add a key to the updatelog table
* Obviously, only use this for updates that occur after the updatelog table was
* created!
- * @param $key String Name of key to insert
- * @param $val String [optional] value to insert along with the key
+ * @param string $key Name of key to insert
+ * @param string $val [optional] value to insert along with the key
*/
public function insertUpdateRow( $key, $val = null ) {
$this->db->clearFlag( DBO_DDLMODE );
* Updates will be prevented if the table is a shared table and it is not
* specified to run updates on shared tables.
*
- * @param $name String table name
+ * @param string $name table name
* @return bool
*/
protected function doTable( $name ) {
/**
* Append an SQL fragment to the open file handle.
*
- * @param $filename String: File name to open
+ * @param string $filename File name to open
*/
public function copyFile( $filename ) {
$this->db->sourceFile( $filename, false, false, false,
*
* This is used as a callback for for sourceLine().
*
- * @param $line String text to append to the file
+ * @param string $line text to append to the file
* @return Boolean false to skip actually executing the file
* @throws MWException
*/
/**
* Applies a SQL patch
*
- * @param $path String Path to the patch file
+ * @param string $path Path to the patch file
* @param $isFullPath Boolean Whether to treat $path as a relative or not
- * @param $msg String Description of the patch
+ * @param string $msg Description of the patch
* @return boolean false if patch is skipped.
*/
protected function applyPatch( $path, $isFullPath = false, $msg = null ) {
/**
* Add a new table to the database
*
- * @param $name String Name of the new table
- * @param $patch String Path to the patch file
+ * @param string $name Name of the new table
+ * @param string $patch Path to the patch file
* @param $fullpath Boolean Whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
/**
* Add a new field to an existing table
*
- * @param $table String Name of the table to modify
- * @param $field String Name of the new field
- * @param $patch String Path to the patch file
+ * @param string $table Name of the table to modify
+ * @param string $field Name of the new field
+ * @param string $patch Path to the patch file
* @param $fullpath Boolean Whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
/**
* Add a new index to an existing table
*
- * @param $table String Name of the table to modify
- * @param $index String Name of the new index
- * @param $patch String Path to the patch file
+ * @param string $table Name of the table to modify
+ * @param string $index Name of the new index
+ * @param string $patch Path to the patch file
* @param $fullpath Boolean Whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
/**
* Drop a field from an existing table
*
- * @param $table String Name of the table to modify
- * @param $field String Name of the old field
- * @param $patch String Path to the patch file
+ * @param string $table Name of the table to modify
+ * @param string $field Name of the old field
+ * @param string $patch Path to the patch file
* @param $fullpath Boolean Whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
/**
* Drop an index from an existing table
*
- * @param $table String: Name of the table to modify
- * @param $index String: Name of the index
- * @param $patch String: Path to the patch file
+ * @param string $table Name of the table to modify
+ * @param string $index Name of the index
+ * @param string $patch Path to the patch file
* @param $fullpath Boolean: Whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
/**
* Rename an index from an existing table
*
- * @param $table String: Name of the table to modify
- * @param $oldIndex String: Old name of the index
- * @param $newIndex String: New name of the index
+ * @param string $table Name of the table to modify
+ * @param string $oldIndex Old name of the index
+ * @param string $newIndex New name of the index
* @param $skipBothIndexExistWarning Boolean: Whether to warn if both the old and the new indexes exist.
- * @param $patch String: Path to the patch file
+ * @param string $patch Path to the patch file
* @param $fullpath Boolean: Whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
/**
* Modify an existing field
*
- * @param $table String: name of the table to which the field belongs
- * @param $field String: name of the field to modify
- * @param $patch String: path to the patch file
+ * @param string $table name of the table to which the field belongs
+ * @param string $field name of the field to modify
+ * @param string $patch path to the patch file
* @param $fullpath Boolean: whether to treat $patch path as a relative or not
* @return Boolean false if this was skipped because schema changes are skipped
*/
<?php
/**
- * Installer-specific wikitext formating.
+ * Installer-specific wikitext formatting.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
'config-title' => 'Parameters:
* $1 is the version of MediaWiki that is being installed.',
'config-information' => '{{Identical|Information}}',
+ 'config-localsettings-upgrade' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>$wgUpgradeKey</code>.}}',
'config-localsettings-cli-upgrade' => '{{doc-important|Do not translate the <code>LocalSettings.php</code> and the <code>update.php</code> parts.}}',
+ 'config-upgrade-key-missing' => 'Used in info box. Parameters:
+* $1 - the upgrade key, enclosed in <code><nowiki><pre></nowikI></code> tag.',
+ 'config-localsettings-incomplete' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code><nowiki>{{int:Config-continue}}</nowiki><code>.}}
+Parameters:
+* $1 - name of variable (any one of required variables or installer-specific global variables)',
+ 'config-localsettings-connection-error' => '{{doc-important|Do not translate <code>LocalSettings.php</code> and <code>AdminSettings.php</code>.}}
+Used as error message. Parameters:
+* $1 - (probably empty string)',
'config-session-error' => 'Parameters:
* $1 is the error that was encountered with the session.',
'config-session-expired' => 'Parameters:
* $1 is the configured session lifetime.',
+ 'config-no-session' => '{{doc-important|Do not translate <code>php.ini</code> and <code>session.save_path</code>.}}
+Used as error message.',
'config-back' => '{{Identical|Back}}',
'config-continue' => '{{Identical|Continue}}',
'config-page-language' => '{{Identical|Language}}',
'config-db-account-lock' => "It might be easier to translate ''normal operation'' as \"also after the installation process\"",
'config-pg-test-error' => '* $1 - database name
* $2 - error message',
+ 'config-sqlite-dir-help' => '{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}}
+Used in help box.',
'config-type-mysql' => '{{optional}}',
'config-type-postgres' => '{{optional}}',
'config-type-sqlite' => '{{optional}}',
'config-memcached-servers' => '{{doc-important|Do not translate "memcached".}}
{{Identical|Memcached server}}',
'config-extensions' => '{{Identical|Extension}}',
+ 'config-extensions-help' => '{{doc-important|Do not translate <code>./extensions</code>.}}
+Used in help box.',
'config-install-step-done' => '{{Identical|Done}}',
'config-install-step-failed' => '{{Identical|Failed}}',
'config-install-database' => '*{{msg-mw|Config-install-database}}
*{{msg-mw|Config-install-keys}}
*{{msg-mw|Config-install-sysop}}
*{{msg-mw|Config-install-mainpage}}',
+ 'config-install-interwiki-list' => '{{doc-important|Do not translate <code>interwiki.list</code>.}}
+Used as error message.',
'config-install-stats' => '*{{msg-mw|Config-install-database}}
*{{msg-mw|Config-install-tables}}
*{{msg-mw|Config-install-schema}}
/** Arabic (العربية)
* @author Meno25
+ * @author Mido
* @author OsamaK
* @author روخو
*/
$messages['ar'] = array(
'config-desc' => 'مثبت لميدياويكي',
- 'config-title' => 'ميدياويكي 1$ التثبيت', # Fuzzy
+ 'config-title' => 'تثبيت ميدياويكي $1',
'config-information' => 'معلومات',
'config-back' => '→ ارجع',
'config-continue' => 'استمر ←',
* [//www.mediawiki.org/wiki/Manual:Configuration_settings قائمة إعدادات الضبط]
* [//www.mediawiki.org/wiki/Manual:FAQ أسئلة متكررة حول ميدياويكي]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]', # Fuzzy
);
/** Aramaic (ܐܪܡܝܐ)
'config-install-mainpage-failed' => "Ne c'haller ket ensoc'hañ ar bajenn bennañ: $1",
'config-download-localsettings' => 'Pellgargañ <code>LocalSettings.php</code>',
'config-help' => 'skoazell',
+ 'config-nofile' => 'N\'eus ket bet gallet kavout ar restr "$1". Daoust ha dilamet eo bet ?',
'mainpagetext' => "'''Meziant MediaWiki staliet.'''",
'mainpagedocfooter' => "Sellit ouzh [//meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.
* @author Calak
*/
$messages['ckb'] = array(
+ 'config-wiki-language' => 'زمانی ویکی:',
+ 'config-page-language' => 'زمان',
+ 'config-page-name' => 'ناو',
'mainpagetext' => "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
'mainpagedocfooter' => 'لە [//meta.wikimedia.org/wiki/Help:Contents ڕێنوێنیی بەکارھێنەران] بۆ زانیاری سەبارەت بە بەکارھێنانی نەرمامێری ویکی کەڵک وەربگرە.
);
/** Lower Sorbian (dolnoserbski)
+ * @author Michawiki
*/
$messages['dsb'] = array(
'mainpagetext' => "'''MediaWiki jo se wuspěšnje instalěrowało.'''",
'mainpagedocfooter' => "Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
+Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
+
== Na zachopjenje ==
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Konfiguracija lisćiny połoženjow]
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ (pšašanja a wótegrona)]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lisćina e-mailowych nakładow MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lisćina e-mailowych nakładow MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twóju rěc lokalizěrowaś]",
);
/** Central Dusun (Dusun Bundu-liwan)
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Wo nastajenjach]
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]
-* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]',
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki za twoju rěč lokalizować]',
);
/** Haitian (Kreyòl ayisyen)
);
/** Quechua (Runa Simi)
+ * @author AlimanRuna
*/
$messages['qu'] = array(
+ 'config-desc' => 'MediaWiki tiyachiq',
+ 'config-title' => 'MediaWiki $1 tiyachiy',
+ 'config-information' => 'Willay',
+ 'config-your-language' => 'Rimayniyki:',
+ 'config-wiki-language' => 'Wiki rimay:',
+ 'config-back' => '← Ñawpaqman',
+ 'config-extensions' => "Mast'ariykuna",
+ 'config-install-step-done' => 'rurasqañam',
+ 'config-install-step-failed' => 'manam aypasqachu',
+ 'config-help' => 'yanapay',
+ 'config-nofile' => '"$1" sutiyuq willañiqiqa manam tarisqachu. Qullusqachu?',
'mainpagetext' => "'''MediaWiki nisqa llamp'u kaqqa aypaylla takyachisqañam.'''",
'mainpagedocfooter' => "Wiki llamp'u kaqmanta willasunaykipaqqa [//meta.wikimedia.org/wiki/Help:Contents Ruraqpaq yanapana] ''(User's Guide)'' sutiyuq p'anqata qhaway.
== Qallarichkaspa ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Kunphigurasyun churanamanta sutisuyu]
+* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki nisqamanta pasaq tapuykuna]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki kachaykuy e-chaski sutisuyu]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki nisqata qampa rimaykiman t'ikray]",
);
/** Romagnol (Rumagnôl)
continue;
}
- list( $all, $lang, $territory, $charset, $modifier ) = $m;
+ list( , $lang, , , ) = $m;
$candidatesByLocale[$m[0]] = $m;
$candidatesByLang[$lang][] = $m;
*
* Used only by environment checks.
*
- * @param $path String: path to search
- * @param $names Array of executable names
+ * @param string $path path to search
+ * @param array $names of executable names
* @param $versionInfo Boolean false or array with two members:
* 0 => Command to run for version check, with $1 for the full executable name
* 1 => String to compare the output with
/**
* Checks for presence of an Apache module. Works only if PHP is running as an Apache module, too.
*
- * @param $moduleName String: Name of module to check.
+ * @param string $moduleName Name of module to check.
* @return bool
*/
public static function apacheModulePresent( $moduleName ) {
/**
* Actually perform the installation.
*
- * @param $startCB Array A callback array for the beginning of each step
- * @param $endCB Array A callback array for the end of each step
+ * @param array $startCB A callback array for the beginning of each step
+ * @param array $endCB A callback array for the end of each step
*
* @return Array of Status objects
*/
/**
* Add an installation step following the given step.
*
- * @param $callback Array A valid installation callback array, in this form:
+ * @param array $callback A valid installation callback array, in this form:
* array( 'name' => 'some-unique-name', 'callback' => array( $obj, 'function' ) );
- * @param $findStep String the step to find. Omit to put the step at the beginning
+ * @param string $findStep the step to find. Omit to put the step at the beginning
*/
public function addInstallStep( $callback, $findStep = 'BEGINNING' ) {
$this->extraInstallSteps[$findStep][] = $callback;
/**
* For $wgGroupPermissions, set a given ['group']['permission'] value.
- * @param $group String Group name
- * @param $rightsArr Array An array of permissions, in the form of:
+ * @param string $group Group name
+ * @param array $rightsArr An array of permissions, in the form of:
* array( 'right' => true, 'right2' => false )
*/
public function setGroupRights( $group, $rightsArr ) {
/**
* Write the generated LocalSettings to a file
*
- * @param $fileName String Full path to filename to write to
+ * @param string $fileName Full path to filename to write to
*/
public function writeFile( $fileName ) {
file_put_contents( $fileName, $this->getText() );
/**
* Return a formal 'User'@'Host' username for use in queries
- * @param $name String Username, quotes will be added
- * @param $host String Hostname, quotes will be added
+ * @param string $name Username, quotes will be added
+ * @param string $host Hostname, quotes will be added
* @return String
*/
private function buildFullUserName( $name, $host ) {
/**
* Try to see if the user account exists. Our "superuser" may not have
* access to mysql.user, so false means "no" or "maybe"
- * @param $host String Hostname to check
- * @param $user String Username to check
+ * @param string $host Hostname to check
+ * @param string $user Username to check
* @return boolean
*/
private function userDefinitelyExists( $host, $user ) {
* 1.4 betas were missing the 'binary' marker from logging.log_title,
* which causes a collation mismatch error on joins in MySQL 4.1.
*
- * @param $table String: table name
- * @param $field String: field name to check
- * @param $patchFile String: path to the patch to correct the field
+ * @param string $table table name
+ * @param string $field field name to check
+ * @param string $patchFile path to the patch to correct the field
*/
protected function checkBin( $table, $field, $patchFile ) {
if ( !$this->doTable( $table ) ) {
/**
* Check whether an index contain a field
*
- * @param $table String: table name
- * @param $index String: index name to check
- * @param $field String: field that should be in the index
+ * @param string $table table name
+ * @param string $index index name to check
+ * @param string $field field that should be in the index
* @return Boolean
*/
protected function indexHasField( $table, $index, $field ) {
/**
* Open a PG connection with given parameters
- * @param $user string User name
- * @param $password string Password
- * @param $dbName string Database name
+ * @param string $user User name
+ * @param string $password Password
+ * @param string $dbName Database name
* @return Status
*/
protected function openConnectionWithParams( $user, $password, $dbName ) {
/**
* Get a special type of connection
- * @param $type string See openPgConnection() for details.
+ * @param string $type See openPgConnection() for details.
* @return Status
*/
protected function getPgConnection( $type ) {
* separate connection for this allows us to avoid accidental cross-module
* dependencies.
*
- * @param $type string The type of connection to get:
+ * @param string $type The type of connection to get:
* - create-db: A connection for creating DBs, suitable for pre-
* installation.
* - create-schema: A connection to the new DB, for creating schemas and
/**
* Recursive helper for canCreateObjectsForWebUser().
* @param $conn DatabaseBase object
- * @param $targetMember int Role ID of the member to look for
- * @param $group int Role ID of the group to look for
- * @param $maxDepth int Maximum recursive search depth
+ * @param int $targetMember Role ID of the member to look for
+ * @param int $group Role ID of the group to look for
+ * @param int $maxDepth Maximum recursive search depth
* @return bool
*/
protected function isRoleMember( $conn, $targetMember, $group, $maxDepth ) {
/**
* Main entry point.
*
- * @param $session Array: initial session array
+ * @param array $session initial session array
*
* @return Array: new session array
*/
/**
* Set a session variable.
- * @param $name String key for the variable
+ * @param string $name key for the variable
* @param $value Mixed
*/
public function setSession( $name, $value ) {
/**
* Get HTML for an error box with an icon.
*
- * @param $text String: wikitext, get this with wfMessage()->plain()
+ * @param string $text wikitext, get this with wfMessage()->plain()
*
* @return string
*/
/**
* Get HTML for a warning box with an icon.
*
- * @param $text String: wikitext, get this with wfMessage()->plain()
+ * @param string $text wikitext, get this with wfMessage()->plain()
*
* @return string
*/
/**
* Get HTML for an info box with an icon.
*
- * @param $text String: wikitext, get this with wfMessage()->plain()
- * @param $icon String: icon name, file in skins/common/images
- * @param $class String: additional class name to add to the wrapper div
+ * @param string $text wikitext, get this with wfMessage()->plain()
+ * @param string $icon icon name, file in skins/common/images
+ * @param string $class additional class name to add to the wrapper div
*
* @return string
*/
/**
* Output a help box.
- * @param $msg String key for wfMessage()
+ * @param string $msg key for wfMessage()
*/
public function showHelpBox( $msg /*, ... */ ) {
$args = func_get_args();
* fake) passwords.
*
* @param $varNames Array
- * @param $prefix String: the prefix added to variables to obtain form names
+ * @param string $prefix the prefix added to variables to obtain form names
*
* @return array
*/
/**
* @return bool
*/
- public function envCheckPath( ) {
+ public function envCheckPath() {
// PHP_SELF isn't available sometimes, such as when PHP is CGI but
// cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME
// to get the path to the current script... hopefully it's reliable. SIGH
/**
* Get the raw vector CSS, flipping if needed
- * @param $dir String 'ltr' or 'rtl'
+ * @param string $dir 'ltr' or 'rtl'
* @return String
*/
public function getCSS( $dir ) {
* "<link>" to index.php?css=foobar for the "<head>"
* @return String
*/
- private function getCssUrl( ) {
+ private function getCssUrl() {
return Html::linkedStyle( $_SERVER['PHP_SELF'] . '?css=' . $this->getDir() );
}
/**
* Get the starting tags of a fieldset.
*
- * @param $legend String: message name
+ * @param string $legend message name
*
* @return string
*/
/**
* Initiate an upgrade of the existing database
- * @param $vars array Variables from LocalSettings.php and AdminSettings.php
+ * @param array $vars Variables from LocalSettings.php and AdminSettings.php
* @return Status
*/
protected function handleExistingUpgrade( $vars ) {
/**
* Create the appropriate object to handle a specific job
*
- * @param $command String: Job command
+ * @param string $command Job command
* @param $title Title: Associated title
- * @param $params Array|bool: Job parameters
- * @param $id Int: Job identifier
+ * @param array|bool $params Job parameters
+ * @param int $id Job identifier
* @throws MWException
* @return Job
*/
* This may add duplicate at insert time, but they will be
* removed later on, when the first one is popped.
*
- * @param $jobs array of Job objects
+ * @param array $jobs of Job objects
* @return bool
* @deprecated 1.21
*/
* be rolled-back as part of a larger transaction. However,
* large batches of jobs can cause slave lag.
*
- * @param $jobs array of Job objects
+ * @param array $jobs of Job objects
* @return bool
* @deprecated 1.21
*/
* runners.
*
* @param $type string
- * @return Job
+ * @return Job|bool Returns false if there are no jobs
* @deprecated 1.21
*/
public static function pop_type( $type ) {
}
/**
- * @param $key string A key that identifies the task
+ * @param string $key A key that identifies the task
* @return Array
*/
public static function newRootJobParams( $key ) {
protected function __construct( array $params ) {
$this->wiki = $params['wiki'];
$this->type = $params['type'];
- $this->order = isset( $params['order'] ) ? $params['order'] : 'random';
$this->claimTTL = isset( $params['claimTTL'] ) ? $params['claimTTL'] : 0;
$this->maxTries = isset( $params['maxTries'] ) ? $params['maxTries'] : 3;
+ if ( isset( $params['order'] ) && $params['order'] !== 'any' ) {
+ $this->order = $params['order'];
+ } else {
+ $this->order = $this->optimalOrder();
+ }
+ if ( !in_array( $this->order, $this->supportedOrders() ) ) {
+ throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
+ }
}
/**
* job runners since jobs can take different times to finish once popped.
* If "timestamp" is used, the queue will at least be loosely ordered
* by timestamp, allowing for some jobs to be popped off out of order.
- * If "random" is used, pop() will pick jobs in random order. This might be
- * useful for improving concurrency depending on the queue storage medium.
- * Note that "random" really means "don't care", so it may actually be FIFO
- * or only weakly random (e.g. pop() takes one of the first X jobs randomly).
+ * If "random" is used, pop() will pick jobs in random order.
+ * Note that it may only be weakly random (e.g. a lottery of the oldest X).
+ * If "any" is choosen, the queue will use whatever order is the fastest.
+ * This might be useful for improving concurrency for job acquisition.
* - claimTTL : If supported, the queue will recycle jobs that have been popped
* but not acknowledged as completed after this many seconds. Recycling
* of jobs simple means re-inserting them into the queue. Jobs can be
return $this->type;
}
+ /**
+ * @return string One of (random, timestamp, fifo)
+ */
+ final public function getOrder() {
+ return $this->order;
+ }
+
+ /**
+ * @return Array Subset of (random, timestamp, fifo)
+ */
+ abstract protected function supportedOrders();
+
+ /**
+ * @return string One of (random, timestamp, fifo)
+ */
+ abstract protected function optimalOrder();
+
/**
* Quickly check if the queue is empty (has no available jobs).
* Queue classes should use caching if they are any slower without memcached.
*
+ * If caching is used, this might return false when there are actually no jobs.
+ * If pop() is called and returns false then it should correct the cache. Also,
+ * calling flushCaches() first prevents this. However, this affect is typically
+ * not distinguishable from the race condition between isEmpty() and pop().
+ *
* @return bool
* @throws MWException
*/
abstract protected function doIsEmpty();
/**
- * Get the number of available jobs in the queue.
+ * Get the number of available (unacquired) jobs in the queue.
* Queue classes should use caching if they are any slower without memcached.
*
+ * If caching is used, this number might be out of date for a minute.
+ *
* @return integer
* @throws MWException
*/
* Get the number of acquired jobs (these are temporarily out of the queue).
* Queue classes should use caching if they are any slower without memcached.
*
+ * If caching is used, this number might be out of date for a minute.
+ *
* @return integer
* @throws MWException
*/
* This does not require $wgJobClasses to be set for the given job type.
* Outside callers should use JobQueueGroup::push() instead of this function.
*
- * @param $jobs array List of Jobs
+ * @param array $jobs List of Jobs
* @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
* @return bool Returns false on failure
* @throws MWException
if ( !count( $jobs ) ) {
return true; // nothing to do
}
+
foreach ( $jobs as $job ) {
if ( $job->getType() !== $this->type ) {
throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
*/
protected function doFlushCaches() {}
+ /**
+ * Get an iterator to traverse over all of the jobs in this queue.
+ * This does not include jobs that are current acquired. In general,
+ * this should only be called on a queue that is no longer being popped.
+ *
+ * @return Iterator|Traversable|Array
+ * @throws MWException
+ */
+ abstract public function getAllQueuedJobs();
+
/**
* Namespace the queue with a key to isolate it for testing
*
$this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
}
+ protected function supportedOrders() {
+ return array( 'random', 'timestamp', 'fifo' );
+ }
+
+ protected function optimalOrder() {
+ return 'random';
+ }
+
/**
* @see JobQueue::doIsEmpty()
* @return bool
/**
* Reserve a row with a single UPDATE without holding row locks over RTTs...
*
- * @param $uuid string 32 char hex string
+ * @param string $uuid 32 char hex string
* @param $rand integer Random unsigned integer (31 bits)
- * @param $gte bool Search for job_random >= $random (otherwise job_random <= $random)
+ * @param bool $gte Search for job_random >= $random (otherwise job_random <= $random)
* @return Row|false
*/
protected function claimRandom( $uuid, $rand, $gte ) {
/**
* Reserve a row with a single UPDATE without holding row locks over RTTs...
*
- * @param $uuid string 32 char hex string
+ * @param string $uuid 32 char hex string
* @return Row|false
*/
protected function claimOldest( $uuid ) {
}
}
+ /**
+ * @see JobQueue::getAllQueuedJobs()
+ * @return Iterator
+ */
+ public function getAllQueuedJobs() {
+ list( $dbr, $scope ) = $this->getSlaveDB();
+ return new MappedIterator(
+ $dbr->select( 'job', '*', array( 'job_cmd' => $this->getType(), 'job_token' => '' ) ),
+ function( $row ) use ( $scope ) {
+ $job = Job::factory(
+ $row->job_cmd,
+ Title::makeTitle( $row->job_namespace, $row->job_title ),
+ strlen( $row->job_params ) ? unserialize( $row->job_params ) : false,
+ $row->job_id
+ );
+ $job->id = $row->job_id; // XXX: work around broken subclasses
+ return $job;
+ }
+ );
+ }
+
/**
* @return Array (DatabaseBase, ScopedCallback)
*/
const CACHE_VERSION = 1; // integer; cache version
/**
- * @param $wiki string Wiki ID
+ * @param string $wiki Wiki ID
*/
protected function __construct( $wiki ) {
$this->wiki = $wiki;
}
/**
- * @param $wiki string Wiki ID
+ * @param string $wiki Wiki ID
* @return JobQueueGroup
*/
public static function singleton( $wiki = false ) {
return $this->get( $job->getType() )->deduplicateRootJob( $job );
}
+ /**
+ * Wait for any slaves or backup queue servers to catch up.
+ *
+ * This does nothing for certain queue classes.
+ *
+ * @return void
+ * @throws MWException
+ */
+ public function waitForBackups() {
+ global $wgJobTypeConf;
+
+ wfProfileIn( __METHOD__ );
+ // Try to avoid doing this more than once per queue storage medium
+ foreach ( $wgJobTypeConf as $type => $conf ) {
+ $this->get( $type )->waitForBackups();
+ }
+ wfProfileOut( __METHOD__ );
+ }
+
/**
* Get the list of queue types
*
$this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
}
+ protected function supportedOrders() {
+ return array( 'timestamp', 'fifo' );
+ }
+
+ protected function optimalOrder() {
+ return 'fifo';
+ }
+
/**
* @see JobQueue::doIsEmpty()
* @return bool
return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
}
+ /**
+ * @see JobQueue::getAllQueuedJobs()
+ * @return Iterator
+ */
+ public function getAllQueuedJobs() {
+ $conn = $this->getConnection();
+ if ( !$conn ) {
+ throw new MWException( "Unable to connect to redis server." );
+ }
+ try {
+ $that = $this;
+ return new MappedIterator(
+ $conn->lRange( $this->getQueueKey( 'l-unclaimed' ), 0, -1 ),
+ function( $uid ) use ( $that, $conn ) {
+ return $that->getJobFromUidInternal( $uid, $conn );
+ }
+ );
+ } catch ( RedisException $e ) {
+ $this->throwRedisException( $this->server, $conn, $e );
+ }
+ }
+
+ /**
+ * This function should not be called outside RedisJobQueue
+ *
+ * @param $uid string
+ * @param $conn RedisConnRef
+ * @return Job
+ * @throws MWException
+ */
+ public function getJobFromUidInternal( $uid, RedisConnRef $conn ) {
+ try {
+ $fields = $conn->get( $this->prefixWithQueueKey( 'data', $uid ) );
+ if ( !is_array( $fields ) ) { // wtf?
+ $conn->delete( $this->prefixWithQueueKey( 'data', $uid ) );
+ throw new MWException( "Could not find job with UID '$uid'." );
+ }
+ $title = Title::makeTitle( $fields['namespace'], $fields['title'] );
+ $job = Job::factory( $fields['type'], $title, $fields['params'] );
+ $job->metadata['sourceFields'] = $fields;
+ return $job;
+ } catch ( RedisException $e ) {
+ $this->throwRedisException( $this->server, $conn, $e );
+ }
+ }
+
/**
* Recycle or destroy any jobs that have been claimed for too long
*
}
/**
- * @param $uid string Job UID
+ * @param string $uid Job UID
* @return bool Whether $uid is a SHA-1 hash based identifier for de-duplication
*/
protected function isHashUid( $uid ) {
\section intro Introduction
The data model consist of the following main components:
-
* The Job object represents a particular deferred task that happens in the
background. All jobs subclass the Job object and put the main logic in the
function called run().
For example there may be a queue for email jobs and a queue for squid purge
jobs.
+\section jobqueue Job queues
+
Each job type has its own queue and is associated to a storage medium. One
queue might save its jobs in redis while another one uses would use a database.
The following queue classes are available:
* JobQueueDB (stores jobs in the `job` table in a database)
+* JobQueueRedis (stores jobs in a redis server)
All queue classes support some basic operations (though some may be no-ops):
* enqueueing a batch of jobs
lost. Some jobs, like purging squid caches after a template change, may not
require durable queues, whereas other jobs might be more important.
+\section aggregator Job queue aggregator
+
+The aggregators are used by nextJobDB.php, which is a script that will return a
+random ready queue (on any wiki in the farm) that can be used with runJobs.php.
+This can be used in conjunction with any scripts that handle wiki farm job queues.
+Note that $wgLocalDatabases defines what wikis are in the wiki farm.
+
+Since each job type has its own queue, and wiki-farms may have many wikis,
+there might be a large number of queues to keep track of. To avoid wasting
+large amounts of time polling empty queues, aggregators exists to keep track
+of which queues are ready.
+
+The following queue aggregator classes are available:
+* JobQueueAggregatorMemc (uses $wgMemc to track ready queues)
+* JobQueueAggregatorRedis (uses a redis server to track ready queues)
+
+Some aggregators cache data for a few minutes while others may be always up to date.
+This can be an important factor for jobs that need a low pickup time (or latency).
+
+\section jobs Jobs
+
Callers should also try to make jobs maintain correctness when executed twice.
This is useful for queues that actually implement ack(), since they may recycle
dequeued but un-acknowledged jobs back into the queue to be attempted again. If
$context = RequestContext::getMain();
try {
$user = $context->getUser();
- if ( !$user->isLoggedIn() || $user->getId() != $this->params['userid'] ) {
+ if ( !$user->isLoggedIn() ) {
$this->setLastError( "Could not load the author user from session." );
- return true; // no retries
+ return false;
}
UploadBase::setSessionStatus(
array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
);
$this->setLastError( $status->getWikiText() );
- return true; // no retries
+ return false;
}
// We have a new filekey for the fully concatenated file
)
);
$this->setLastError( get_class( $e ) . ": " . $e->getText() );
+ return false;
}
- return true; // returns true on success and erro (no retries)
+ return true;
}
- /**
- * @return Array
- */
public function getDeduplicationInfo() {
$info = parent::getDeduplicationInfo();
if ( is_array( $info['params'] ) ) {
}
return $info;
}
+
+ public function allowRetries() {
+ return false;
+ }
}
/**
* Insert jobs into the job queue to fix redirects to the given title
- * @param $reason String: the reason for the fix, see message "double-redirect-fixed-<reason>"
+ * @param string $reason the reason for the fix, see message "double-redirect-fixed-<reason>"
* @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed
- * @param $destTitle bool Not used
+ * @param bool $destTitle Not used
*/
public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
# Need to use the master to get the redirect table updated in the same transaction
* Callers should use DuplicateJob::newFromJob() instead
*
* @param $title Title
- * @param $params Array: job parameters
+ * @param array $params job parameters
* @param $id Integer: job id
*/
function __construct( $title, $params, $id = 0 ) {
/**
* Construct a job
* @param $title Title: the title linked to
- * @param $params Array: job parameters (table, start and end page_ids)
+ * @param array $params job parameters (table, start and end page_ids)
* @param $id Integer: job id
*/
function __construct( $title, $params, $id = 0 ) {
*
* @param $titleArray array
* @param $rootJobParams array
- * @rerturn void
+ * @return void
*/
protected function insertJobsFromTitles( $titleArray, $rootJobParams = array() ) {
// Carry over any "root job" information
class NullJob extends Job {
/**
* @param $title Title (can be anything)
- * @param $params Array: job parameters (lives, usleep)
+ * @param array $params job parameters (lives, usleep)
* @param $id Integer: job id
*/
function __construct( $title, $params, $id = 0 ) {
$context = RequestContext::getMain();
try {
$user = $context->getUser();
- if ( !$user->isLoggedIn() || $user->getId() != $this->params['userid'] ) {
+ if ( !$user->isLoggedIn() ) {
$this->setLastError( "Could not load the author user from session." );
- return true; // no retries
+ return false;
}
UploadBase::setSessionStatus(
array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
);
$this->setLastError( "Could not verify upload." );
- return true; // no retries
+ return false;
}
// Upload the stashed file to a permanent location
array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
);
$this->setLastError( $status->getWikiText() );
- return true; // no retries
+ return false;
}
// Build the image info array while we have the local reference handy
)
);
$this->setLastError( get_class( $e ) . ": " . $e->getText() );
+ return false;
}
- return true; // returns true on success and erro (no retries)
+ return true;
}
- /**
- * @return Array
- */
public function getDeduplicationInfo() {
$info = parent::getDeduplicationInfo();
if ( is_array( $info['params'] ) ) {
}
return $info;
}
+
+ public function allowRetries() {
+ return false;
+ }
}
* Store a result in the session data. Note that the caller is responsible
* for appropriate session_start and session_write_close calls.
*
- * @param $result String: the result (Success|Warning|Failure)
- * @param $dataKey String: the key of the extra data
+ * @param string $result the result (Success|Warning|Failure)
+ * @param string $dataKey the key of the extra data
* @param $dataValue Mixed: the extra data itself
*/
protected function storeResultInSession( $result, $dataKey, $dataValue ) {
<?php
/**
- * Simple wrapper for json_econde and json_decode that falls back on Services_JSON class.
+ * Simple wrapper for json_encode and json_decode that falls back on Services_JSON class.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/**
* Decodes a JSON string.
*
- * @param $value String: the json string being decoded.
+ * @param string $value the json string being decoded.
* @param $assoc Boolean: when true, returned objects will be converted into associative arrays.
*
* @return Mixed: the value encoded in json in appropriate PHP type.
* // create a new instance of Services_JSON
* $json = new Services_JSON();
*
- * // convert a complexe value to JSON notation, and send it to the browser
+ * // convert a complex value to JSON notation, and send it to the browser
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
* $output = $json->encode($value);
*
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
- * that lack the multibye string extension.
+ * that lack the multibyte string extension.
*
- * @param $utf16 String: UTF-16 character
+ * @param string $utf16 UTF-16 character
* @return String: UTF-8 character
* @access private
*/
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
- * that lack the multibye string extension.
+ * that lack the multibyte string extension.
*
- * @param $utf8 String: UTF-8 character
+ * @param string $utf8 UTF-8 character
* @return String: UTF-16 character
* @access private
*/
*
* @param $var Mixed: any number, boolean, string, array, or object to be encoded.
* see argument 1 to Services_JSON() above for array-parsing behavior.
- * if var is a strng, note that encode() always expects it
+ * if var is a string, note that encode() always expects it
* to be in ASCII or UTF-8 format!
* @param $pretty Boolean: pretty-print output with indents and newlines
*
*
* @param $var Mixed: any number, boolean, string, array, or object to be encoded.
* see argument 1 to Services_JSON() above for array-parsing behavior.
- * if var is a strng, note that encode() always expects it
+ * if var is a string, note that encode() always expects it
* to be in ASCII or UTF-8 format!
*
* @return mixed JSON string representation of input var or an error if a problem occurs
/**
* array-walking function for use in generating JSON-formatted name-value pairs
*
- * @param $name String: name of key to use
+ * @param string $name name of key to use
* @param $value Mixed: reference to an array element to be encoded
*
* @return String: JSON-formatted name-value pair, like '"name":value'
/**
* reduce a string by removing leading and trailing comments and whitespace
*
- * @param $str String: string value to strip of comments and whitespace
+ * @param string $str string value to strip of comments and whitespace
*
* @return String: string value stripped of comments and whitespace
* @access private
/**
* decodes a JSON string into appropriate variable
*
- * @param $str String: JSON-formatted string
+ * @param string $str JSON-formatted string
*
* @return mixed number, boolean, string, array, or object
* corresponding to given JSON input string.
/**
* Transform an LTR stylesheet to RTL
- * @param $css String: stylesheet to transform
+ * @param string $css stylesheet to transform
* @param $swapLtrRtlInURL Boolean: If true, swap 'ltr' and 'rtl' in URLs
* @param $swapLeftRightInURL Boolean: If true, swap 'left' and 'right' in URLs
* @return string Transformed stylesheet
/**
* Constructor
- * @param $regex string Regular expression whose matches to replace by a token.
- * @param $token string Token
+ * @param string $regex Regular expression whose matches to replace by a token.
+ * @param string $token Token
*/
public function __construct( $regex, $token ) {
$this->regex = $regex;
/**
* Replace all occurrences of $regex in $str with a token and remember
* the original strings.
- * @param $str String to tokenize
+ * @param string $str to tokenize
* @return string Tokenized string
*/
public function tokenize( $str ) {
/**
* Replace tokens with their originals. If multiple strings were tokenized, it's important they be
* detokenized in exactly the SAME ORDER.
- * @param $str String: previously run through tokenize()
+ * @param string $str previously run through tokenize()
* @return string Original string
*/
public function detokenize( $str ) {
/**
* Gets a list of local file paths which are referenced in a CSS style sheet
*
- * @param $source string CSS data to remap
- * @param $path string File path where the source was read from (optional)
+ * @param string $source CSS data to remap
+ * @param string $path File path where the source was read from (optional)
* @return array List of local file references
*/
public static function getLocalFileReferences( $source, $path = null ) {
* Remaps CSS URL paths and automatically embeds data URIs for URL rules
* preceded by an /* @embed * / comment
*
- * @param $source string CSS data to remap
- * @param $local string File path where the source was read from
- * @param $remote string URL path to the file
- * @param $embedData bool If false, never do any data URI embedding, even if / * @embed * / is found
+ * @param string $source CSS data to remap
+ * @param string $local File path where the source was read from
+ * @param string $remote URL path to the file
+ * @param bool $embedData If false, never do any data URI embedding, even if / * @embed * / is found
* @return string Remapped CSS data
*/
public static function remap( $source, $local, $remote, $embedData = true ) {
/**
* Removes whitespace from CSS data
*
- * @param $css string CSS data to minify
+ * @param string $css CSS data to minify
* @return string Minified CSS data
*/
public static function minify( $css ) {
* Get the MIME types from getMimesFromData(), but convert the result from IE's
* idiosyncratic private types into something other apps will understand.
*
- * @param $fileName String: the file name (unused at present)
- * @param $chunk String: the first 256 bytes of the file
- * @param $proposed String: the MIME type proposed by the server
+ * @param string $fileName the file name (unused at present)
+ * @param string $chunk the first 256 bytes of the file
+ * @param string $proposed the MIME type proposed by the server
*
* @return Array: map of IE version to detected mime type
*/
/**
* Get the untranslated MIME types for all known versions
*
- * @param $fileName String: the file name (unused at present)
- * @param $chunk String: the first 256 bytes of the file
- * @param $proposed String: the MIME type proposed by the server
+ * @param string $fileName the file name (unused at present)
+ * @param string $chunk the first 256 bytes of the file
+ * @param string $proposed the MIME type proposed by the server
*
* @return Array: map of IE version to detected mime type
*/
*
* If the a variable is unset in $_SERVER, it should be unset in $vars.
*
- * @param $vars array A subset of $_SERVER.
- * @param $extWhitelist array Extensions which are allowed, assumed harmless.
+ * @param array $vars A subset of $_SERVER.
+ * @param array $extWhitelist Extensions which are allowed, assumed harmless.
* @return bool
*/
public static function areServerVarsBad( $vars, $extWhitelist = array() ) {
* Given a right-hand portion of a URL, determine whether IE would detect
* a potentially harmful file extension.
*
- * @param $urlPart string The right-hand portion of a URL
- * @param $extWhitelist array An array of file extensions which may occur in this
+ * @param string $urlPart The right-hand portion of a URL
+ * @param array $extWhitelist An array of file extensions which may occur in this
* URL, and which should be allowed.
* @return bool
*/
* - if we find a possible extension followed by a dot or another illegal
* character, we ignore it and continue searching
*
- * @param $url string URL
+ * @param string $url URL
* @return mixed Detected extension (string), or false if none found
*/
public static function findIE6Extension( $url ) {
* literals (e.g. quoted strings) longer than $maxLineLength are encountered
* or when required to guard against semicolon insertion.
*
- * @param $s String JavaScript code to minify
- * @param $statementsOnOwnLine Bool Whether to put each statement on its own line
- * @param $maxLineLength Int Maximum length of a single line, or -1 for no maximum.
+ * @param string $s JavaScript code to minify
+ * @param bool $statementsOnOwnLine Whether to put each statement on its own line
+ * @param int $maxLineLength Maximum length of a single line, or -1 for no maximum.
* @return String Minified code
*/
public static function minify( $s, $statementsOnOwnLine = false, $maxLineLength = 1000 ) {
}
elseif ($type == KEYWORD_VAR && $type == $lastType)
{
- // mutiple var-statements can go into one
+ // multiple var-statements can go into one
$t = ',' . substr($t, 4);
}
else
if ($elsePart)
{
- // be carefull and always make a block out of the thenPart; could be more optimized but is a lot of trouble
+ // be careful and always make a block out of the thenPart; could be more optimized but is a lot of trouble
if ($thenPart != ';' && $thenPart[0] != '{')
$thenPart = '{' . $thenPart . '}';
break;
case TOKEN_STRING:
- //combine concatted strings with same quotestyle
+ //combine concatenated strings with same quote style
if ($n->type == OP_PLUS && substr($left, -1) == $right[0])
{
$s = substr($left, 0, -1) . substr($right, 1);
else
ulimit -v "$MW_MEM_LIMIT"
fi
+else
+ MW_CGROUP=""
fi
if [ "$MW_FILE_SIZE_LIMIT" -gt 0 ]; then
ulimit -f "$MW_FILE_SIZE_LIMIT"
*
* @since 1.19
*
- * @param $parameters array Associative array
+ * @param array $parameters Associative array
*/
public function setParameters( $parameters ) {
$this->parameters = $parameters;
/**
* Publishes the log entry.
- * @param $newId int id of the log entry.
- * @param $to string: rcandudp (default), rc, udp
+ * @param int $newId id of the log entry.
+ * @param string $to rcandudp (default), rc, udp
*/
public function publish( $newId, $to = 'rcandudp' ) {
$log = new LogPage( $this->getType() );
*
* @param $context IContextSource Context to use; formerly it was Skin object.
* @param $unused void Unused; used to be an OutputPage object.
- * @param $flags int flags; can be a combinaison of self::NO_ACTION_LINK,
+ * @param int $flags flags; can be a combinaison of self::NO_ACTION_LINK,
* self::NO_EXTRA_USER_LINKS or self::USE_REVDEL_CHECKBOXES.
*/
public function __construct( $context, $unused = null, $flags = 0 ) {
/**
* Show options for the log list
*
- * @param $types string or Array
+ * @param string $types or Array
* @param $user String
* @param $page String
* @param $pattern String
$formatter->setContext( $this->getContext() );
$formatter->setShowUserToolLinks( !( $this->flags & self::NO_EXTRA_USER_LINKS ) );
- $title = $entry->getTarget();
$time = htmlspecialchars( $this->getLanguage()->userTimeAndDate(
$entry->getTimestamp(), $this->getUser() ) );
* Show log extract. Either with text and a box (set $msgKey) or without (don't set $msgKey)
*
* @param $out OutputPage|String-by-reference
- * @param $types String|Array Log types to show
- * @param $page String|Title The page title to show log entries for
- * @param $user String The user who made the log entries
- * @param $param array Associative Array with the following additional options:
+ * @param string|array $types Log types to show
+ * @param string|Title $page The page title to show log entries for
+ * @param string $user The user who made the log entries
+ * @param array $param Associative Array with the following additional options:
* - lim Integer Limit of items to show, default is 50
* - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
* - showIfEmpty boolean Set to false if you don't want any output in case the loglist is empty
// Filter out parameters which are not in format #:foo
foreach ( $entry->getParameters() as $key => $value ) {
- if ( strpos( $key, ':' ) === false ) continue;
- list( $index, $type, $name ) = explode( ':', $key, 3 );
+ if ( strpos( $key, ':' ) === false ) {
+ continue;
+ }
+ list( $index, $type, ) = explode( ':', $key, 3 );
$params[$index - 1] = $this->formatParameterValue( $type, $value );
}
/**
* Formats parameters values dependent to their type
- * @param $type string The type of the value.
+ * @param string $type The type of the value.
* Valid are currently:
* * - (empty) or plain: The value is returned as-is
* * raw: The value will be added to the log message
* * title-link: The value is a page title,
* returns link to this page
* * number: Format value as number
- * @param $value string The parameter value that should
+ * @param string $value The parameter value that should
* be formated
* @return string or Message::numParam or Message::rawParam
* Formated value
* Helper to make a link to the page, taking the plaintext
* value in consideration.
* @param $title Title the page
- * @param $parameters array query parameters
+ * @param array $parameters query parameters
* @throws MWException
* @return String
*/
$this->msg( 'diff' )->escaped(),
array(),
array(
- 'target' => $this->entry->getTarget()->getPrefixedDBKey(),
+ 'target' => $this->entry->getTarget()->getPrefixedDBkey(),
'diff' => 'prev',
'timestamp' => $ids[0]
)
*/
var $target;
- /* @acess public */
+ /* @access public */
var $updateRecentChanges, $sendToUDP;
/**
* Constructor
*
- * @param $type String: one of '', 'block', 'protect', 'rights', 'delete',
+ * @param string $type one of '', 'block', 'protect', 'rights', 'delete',
* 'upload', 'move'
* @param $rc Boolean: whether to update recent changes as well as the logging table
- * @param $udp String: pass 'UDP' to send to the UDP feed if NOT sent to RC
+ * @param string $udp pass 'UDP' to send to the UDP feed if NOT sent to RC
*/
public function __construct( $type, $rc = true, $udp = 'skipUDP' ) {
$this->type = $type;
/**
* Is $type a valid log type
*
- * @param $type String: log type to check
+ * @param string $type log type to check
* @return Boolean
*/
public static function isLogType( $type ) {
/**
* Get the name for the given log type
*
- * @param $type String: logtype
+ * @param string $type logtype
* @return String: log name
* @deprecated in 1.19, warnings in 1.21. Use getName()
*/
* Get the log header for the given log type
*
* @todo handle missing log types
- * @param $type String: logtype
+ * @param string $type logtype
* @return String: headertext of this logtype
* @deprecated in 1.19, warnings in 1.21. Use getDescription()
*/
* Generate text for a log entry.
* Only LogFormatter should call this function.
*
- * @param $type String: log type
- * @param $action String: log action
+ * @param string $type log type
+ * @param string $action log action
* @param $title Mixed: Title object or null
* @param $skin Mixed: Skin object or null. If null, we want to use the wiki
* content language, since that will go to the IRC feed.
- * @param $params Array: parameters
+ * @param array $params parameters
* @param $filterWikilinks Boolean: whether to filter wiki links
* @return HTML string
*/
/**
* Add a log entry
*
- * @param $action String: one of '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'move_redir'
+ * @param string $action one of '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'move_redir'
* @param $target Title object
- * @param $comment String: description associated
- * @param $params Array: parameters passed later to wfMessage function
+ * @param string $comment description associated
+ * @param array $params parameters passed later to wfMessage function
* @param $doer User object: the user doing the action
*
* @return int log_id of the inserted log entry
* Convert a comma-delimited list of block log flags
* into a more readable (and translated) form
*
- * @param $flags string Flags to format
+ * @param string $flags Flags to format
* @param $lang Language object to use
* @return String
*/
/**
* Translate a block log flag if possible
*
- * @param $flag int Flag to translate
+ * @param int $flag Flag to translate
* @param $lang Language object to use
* @return String
*/
* Constructor
*
* @param $list LogEventsList
- * @param $types String or Array: log types to show
- * @param $performer String: the user who made the log entries
- * @param $title String|Title: the page title the log entries are for
- * @param $pattern String: do a prefix search rather than an exact title match
- * @param $conds Array: extra conditions for the query
+ * @param string $types or Array: log types to show
+ * @param string $performer the user who made the log entries
+ * @param string|Title $title the page title the log entries are for
+ * @param string $pattern do a prefix search rather than an exact title match
+ * @param array $conds extra conditions for the query
* @param $year Integer: the year to start from
* @param $month Integer: the month to start from
- * @param $tagFilter String: tag
+ * @param string $tagFilter tag
*/
public function __construct( $list, $types = array(), $performer = '', $title = '', $pattern = '',
$conds = array(), $year = false, $month = false, $tagFilter = '' ) {
* Set the log reader to return only entries of the given type.
* Type restrictions enforced here
*
- * @param $types String or array: Log types ('upload', 'delete', etc);
+ * @param string $types or array: Log types ('upload', 'delete', etc);
* empty string means no restriction
*/
private function limitType( $types ) {
/**
* Set the log reader to return only entries by the given user.
*
- * @param $name String: (In)valid user name
+ * @param string $name (In)valid user name
* @return bool
*/
private function limitPerformer( $name ) {
* Set the log reader to return only entries affecting the given page.
* (For the block and rights logs, this is a user page.)
*
- * @param $page String or Title object: Title name
+ * @param string $page or Title object: Title name
* @param $pattern String
* @return bool
*/
class BitmapHandler extends ImageHandler {
/**
* @param $image File
- * @param $params array Transform parameters. Entries with the keys 'width'
+ * @param array $params Transform parameters. Entries with the keys 'width'
* and 'height' are the respective screen width and height, while the keys
* 'physicalWidth' and 'physicalHeight' indicate the thumbnail dimensions.
* @return bool
* stored as raw landscape with 90-degress rotation, the resulting size
* will be wider than it is tall.
*
- * @param $params array Parameters as returned by normaliseParams
- * @param $rotation int The rotation angle that will be applied
+ * @param array $params Parameters as returned by normaliseParams
+ * @param int $rotation The rotation angle that will be applied
* @return array ($width, $height) array
*/
public function extractPreRotationDimensions( $params, $rotation ) {
* client side
*
* @param $image File File associated with this thumbnail
- * @param $scalerParams array Array with scaler params
+ * @param array $scalerParams Array with scaler params
* @return ThumbnailImage
*
* @todo fixme: no rotation support
* Transform an image using ImageMagick
*
* @param $image File File associated with this thumbnail
- * @param $params array Array with scaler params
+ * @param array $params Array with scaler params
*
* @return MediaTransformError Error object if error occurred, false (=no error) otherwise
*/
* Transform an image using the Imagick PHP extension
*
* @param $image File File associated with this thumbnail
- * @param $params array Array with scaler params
+ * @param array $params Array with scaler params
*
* @return MediaTransformError Error object if error occurred, false (=no error) otherwise
*/
* Transform an image using a custom command
*
* @param $image File File associated with this thumbnail
- * @param $params array Array with scaler params
+ * @param array $params Array with scaler params
*
* @return MediaTransformError Error object if error occurred, false (=no error) otherwise
*/
/**
* Get a MediaTransformError with error 'thumbnail_error'
*
- * @param $params array Parameter array as passed to the transform* functions
- * @param $errMsg string Error message
+ * @param array $params Parameter array as passed to the transform* functions
+ * @param string $errMsg Error message
* @return MediaTransformError
*/
public function getMediaTransformError( $params, $errMsg ) {
* Transform an image using the built in GD library
*
* @param $image File File associated with this thumbnail
- * @param $params array Array with scaler params
+ * @param array $params Array with scaler params
*
* @return MediaTransformError Error object if error occurred, false (=no error) otherwise
*/
* in a directory, so we're better off escaping and waiting for the bugfix
* to filter down to users.
*
- * @param $path string The file path
+ * @param string $path The file path
* @param bool|string $scene The scene specification, or false if there is none
* @throws MWException
* @return string
# Escape glob chars
$path = preg_replace( '/[*?\[\]{}]/', '\\\\\0', $path );
- return self::escapeMagickPath( $path, $scene );
+ return $this->escapeMagickPath( $path, $scene );
}
/**
*/
function escapeMagickOutput( $path, $scene = false ) {
$path = str_replace( '%', '%%', $path );
- return self::escapeMagickPath( $path, $scene );
+ return $this->escapeMagickPath( $path, $scene );
}
/**
* Armour a string against ImageMagick's GetPathComponent(). This is a
* helper function for escapeMagickInput() and escapeMagickOutput().
*
- * @param $path string The file path
+ * @param string $path The file path
* @param bool|string $scene The scene specification, or false if there is none
* @throws MWException
* @return string
/**
* @param $file File
- * @param $params array Rotate parameters.
+ * @param array $params Rotate parameters.
* 'rotation' clockwise rotation in degrees, allowed are multiples of 90
* @since 1.21
* @return bool
*/
- public static function rotate( $file, $params ) {
+ public function rotate( $file, $params ) {
global $wgImageMagickConvertCommand;
- $rotation = ( $params[ 'rotation' ] + self::getRotation( $file ) ) % 360;
+ $rotation = ( $params[ 'rotation' ] + $this->getRotation( $file ) ) % 360;
$scene = false;
$scaler = self::getScalerType( null, false );
switch ( $scaler ) {
case 'im':
$cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . " " .
- wfEscapeShellArg( self::escapeMagickInput( $params[ 'srcPath' ], $scene ) ) .
+ wfEscapeShellArg( $this->escapeMagickInput( $params[ 'srcPath' ], $scene ) ) .
" -rotate -$rotation " .
- wfEscapeShellArg( self::escapeMagickOutput( $params[ 'dstPath' ] ) ) . " 2>&1";
+ wfEscapeShellArg( $this->escapeMagickOutput( $params[ 'dstPath' ] ) ) . " 2>&1";
wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
wfProfileIn( 'convert' );
$retval = 0;
$err = wfShellExec( $cmd, $retval, $env );
wfProfileOut( 'convert' );
if ( $retval !== 0 ) {
- self::logErrorForExternalProcess( $retval, $err, $cmd );
+ $this->logErrorForExternalProcess( $retval, $err, $cmd );
return new MediaTransformError( 'thumbnail_error', 0, 0, $err );
}
return false;
*
* Mostly just calls doPSIR and doIPTC
*
- * @param String $app13 String containing app13 block from jpeg file
+ * @param string $app13 String containing app13 block from jpeg file
*/
private function doApp13 ( $app13 ) {
try {
/** Add misc metadata. Warning: atm if the metadata category
* doesn't have a priority, it will be silently discarded.
*
- * @param Array $metaArray array of metadata values
+ * @param array $metaArray array of metadata values
* @param string $type type. defaults to other. if two things have the same type they're merged
*/
function addMetadata ( $metaArray, $type = 'other' ) {
/** Main entry point for jpeg's.
*
- * @param $filename string filename (with full path)
+ * @param string $filename filename (with full path)
* @return array metadata result array.
* @throws MWException on invalid file.
*/
* merge the png various tEXt chunks to that
* are interesting, but for now it only does XMP
*
- * @param $filename String full path to file
+ * @param string $filename full path to file
* @return Array Array for storage in img_metadata.
*/
public static function PNG ( $filename ) {
* They don't really have native metadata, so just merges together
* XMP and image comment.
*
- * @param $filename string full path to file
+ * @param string $filename full path to file
* @return Array metadata array
*/
public static function GIF ( $filename ) {
* Read the first 2 bytes of a tiff file to figure out
* Little Endian or Big Endian. Needed for exif stuff.
*
- * @param $filename String The filename
+ * @param string $filename The filename
* @return String 'BE' or 'LE' or false
*/
static function getTiffByteOrder( $filename ) {
/**
* Constructor
*
- * @param $file String: filename.
- * @param $byteOrder String Type of byte ordering either 'BE' (Big Endian) or 'LE' (Little Endian). Default ''.
+ * @param string $file filename.
+ * @param string $byteOrder Type of byte ordering either 'BE' (Big Endian) or 'LE' (Little Endian). Default ''.
* @throws MWException
* @todo FIXME: The following are broke:
* SubjectArea. Need to test the more obscure tags.
* As an alternative approach, some of this could be done in the validate phase
* if we make up our own types like Exif::DATE.
*/
- function collapseData( ) {
+ function collapseData() {
$this->exifGPStoNumber( 'GPSLatitude' );
$this->exifGPStoNumber( 'GPSDestLatitude' );
* Do userComment tags and similar. See pg. 34 of exif standard.
* basically first 8 bytes is charset, rest is value.
* This has not been tested on any shift-JIS strings.
- * @param $prop String prop name.
+ * @param string $prop prop name.
*/
private function charCodeString ( $prop ) {
if ( isset( $this->mFilteredExifData[$prop] ) ) {
* Convert an Exif::UNDEFINED from a raw binary string
* to its value. This is sometimes needed depending on
* the type of UNDEFINED field
- * @param $prop String name of property
+ * @param string $prop name of property
*/
private function exifPropToOrd ( $prop ) {
if ( isset( $this->mFilteredExifData[$prop] ) ) {
/**
* Convert gps in exif form to a single floating point number
* for example 10 degress 20`40`` S -> -10.34444
- * @param String $prop a gps coordinate exif tag name (like GPSLongitude)
+ * @param string $prop a gps coordinate exif tag name (like GPSLongitude)
*/
private function exifGPStoNumber ( $prop ) {
$loc =& $this->mFilteredExifData[$prop];
*
* @deprecated since 1.18
*/
- function makeFormattedData( ) {
+ function makeFormattedData() {
wfDeprecated( __METHOD__, '1.18' );
$this->mFormattedExifData = FormatMetadata::getFormattedData(
$this->mFilteredExifData );
*/
private function isRational( $in ) {
$m = array();
- if ( !is_array( $in ) && @preg_match( '/^(\d+)\/(\d+[1-9]|[1-9]\d*)$/', $in, $m ) ) { # Avoid division by zero
+ if ( !is_array( $in ) && preg_match( '/^(\d+)\/(\d+[1-9]|[1-9]\d*)$/', $in, $m ) ) { # Avoid division by zero
return $this->isLong( $m[1] ) && $this->isLong( $m[2] );
} else {
$this->debug( $in, __FUNCTION__, 'fed a non-fraction value' );
* Validates if a tag has a legal value according to the Exif spec
*
* @private
- * @param $section String: section where tag is located.
- * @param $tag String: the tag to check.
+ * @param string $section section where tag is located.
+ * @param string $tag the tag to check.
* @param $val Mixed: the value of the tag.
* @param $recursive Boolean: true if called recursively for array types.
* @return bool
*
* @private
*
- * @param $fname String: the name of the function calling this function
+ * @param string $fname the name of the function calling this function
* @param $io Boolean: Specify whether we're beginning or ending
*/
private function debugFile( $fname, $io ) {
}
$data = $file->getMetadata();
- return self::getRotationForExif( $data );
+ return $this->getRotationForExif( $data );
}
/**
<?php
/**
- * Formating of image metadata values into human readable form.
+ * Formatting of image metadata values into human readable form.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* value which most of the time are plain integers. This function
* formats Exif (and other metadata) values into human readable form.
*
- * @param $tags Array: the Exif data to format ( as returned by
+ * @param array $tags the Exif data to format ( as returned by
* Exif::getFilteredData() or BitmapMetadataHandler )
* @return array
*/
*
* This is public on the basis it might be useful outside of this class.
*
- * @param $vals Array array of values
- * @param $type String Type of array (either lang, ul, ol).
+ * @param array $vals array of values
+ * @param string $type Type of array (either lang, ul, ol).
* lang = language assoc array with keys being the lang code
* ul = unordered list, ol = ordered list
* type can also come from the '_type' member of $vals.
/** Helper function for creating lists of translations.
*
- * @param $value String value (this is not escaped)
- * @param $lang String lang code of item or false
+ * @param string $value value (this is not escaped)
+ * @param string $lang lang code of item or false
* @param $default Boolean if it is default value.
* @param $noHtml Boolean If to avoid html (for back-compat)
* @throws MWException
*
* @private
*
- * @param $tag String: the tag name to pass on
- * @param $val String: the value of the tag
- * @param $arg String: an argument to pass ($1)
- * @param $arg2 String: a 2nd argument to pass ($2)
+ * @param string $tag the tag name to pass on
+ * @param string $val the value of the tag
+ * @param string $arg an argument to pass ($1)
+ * @param string $arg2 a 2nd argument to pass ($2)
* @return string A wfMessage of "exif-$tag-$val" in lower case
*/
static function msg( $tag, $val, $arg = null, $arg2 = null ) {
* Note, leading 0's are significant, so this is
* a string, not an int.
*
- * @param $val String: The 8 digit news code.
+ * @param string $val The 8 digit news code.
* @return string The human readable form
*/
private static function convertNewsCode( $val ) {
* Format a coordinate value, convert numbers from floating point
* into degree minute second representation.
*
- * @param $coord int degrees, minutes and seconds
- * @param $type String: latitude or longitude (for if its a NWS or E)
+ * @param int $coord degrees, minutes and seconds
+ * @param string $type latitude or longitude (for if its a NWS or E)
* @return mixed A floating point number or whatever we were fed
*/
static function formatCoords( $coord, $type ) {
/**
* Format the contact info field into a single value.
*
- * @param $vals Array array with fields of the ContactInfo
+ * @param array $vals array with fields of the ContactInfo
* struct defined in the IPTC4XMP spec. Or potentially
* an array with one element that is a free form text
* value from the older iptc iim 1:118 prop.
*
* @see http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf
*
- * @param $rawData String app13 block from jpeg containing iptc/iim data
+ * @param string $rawData app13 block from jpeg containing iptc/iim data
* @return Array iptc metadata array
*/
static function parse( $rawData ) {
* Convert an iptc date and time tags into the exif format
*
* @todo Potentially this should also capture the timezone offset.
- * @param Array $date The date tag
- * @param Array $time The time tag
+ * @param array $date The date tag
+ * @param array $time The time tag
* @param $c
* @return String Date in exif format.
*/
/**
* Helper function to convert charset for iptc values.
- * @param $data string|array The iptc string
- * @param $charset String: The charset
+ * @param string|array $data The iptc string
+ * @param string $charset The charset
*
* @return string|array
*/
/**
* Helper function of a helper function to convert charset for iptc values.
* @param $data Mixed String or Array: The iptc string
- * @param $charset String: The charset
+ * @param string $charset The charset
*
* @return string
*/
/**
* take the value of 1:90 tag and returns a charset
- * @param String $tag 1:90 tag.
+ * @param string $tag 1:90 tag.
* @return string charset name or "?"
* Warning, this function does not (and is not intended to) detect
* all iso 2022 escape codes. In practise, the code for utf-8 is the
/**
* @param $file File
- * @param $params array Rotate parameters.
+ * @param array $params Rotate parameters.
* 'rotation' clockwise rotation in degrees, allowed are multiples of 90
* @since 1.21
* @return bool
*/
- public static function rotate( $file, $params ) {
+ public function rotate( $file, $params ) {
global $wgJpegTran;
- $rotation = ( $params[ 'rotation' ] + self::getRotation( $file ) ) % 360;
+ $rotation = ( $params[ 'rotation' ] + $this->getRotation( $file ) ) % 360;
if( $wgJpegTran && is_file( $wgJpegTran ) ){
$cmd = wfEscapeShellArg( $wgJpegTran ) .
$err = wfShellExec( $cmd, $retval, $env );
wfProfileOut( 'jpegtran' );
if ( $retval !== 0 ) {
- self::logErrorForExternalProcess( $retval, $err, $cmd );
+ $this->logErrorForExternalProcess( $retval, $err, $cmd );
return new MediaTransformError( 'thumbnail_error', 0, 0, $err );
}
return false;
} else {
- return Bitmap::rotate( $file, $params );
+ return parent::rotate( $file, $params );
}
}
* Class for reading jpegs and extracting metadata.
* see also BitmapMetadataHandler.
*
- * Based somewhat on GIFMetadataExtrator.
+ * Based somewhat on GIFMetadataExtractor.
*
* @ingroup Media
*/
* but gis doesn't support having multiple app1 segments
* and those can't extract xmp on files containing both exif and xmp data
*
- * @param String $filename name of jpeg file
+ * @param string $filename name of jpeg file
* @return Array of interesting segments.
* @throws MWException if given invalid file.
*/
*
* This should generally be called by BitmapMetadataHandler::doApp13()
*
- * @param String $app13 photoshop psir app13 block from jpg.
+ * @param string $app13 photoshop psir app13 block from jpg.
* @throws MWException (It gets caught next level up though)
* @return String if the iptc hash is good or not.
*/
* can't be determined.
*
* @param $image File: the image object, or false if there isn't one
- * @param $path String: the filename
+ * @param string $path the filename
* @return Array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
*/
abstract function getImageSize( $image, $path );
*
* @param $image File: the image object, or false if there isn't one.
* Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
- * @param $path String: the filename
+ * @param string $path the filename
* @return String
*/
function getMetadata( $image, $path ) { return ''; }
* actually do the transform.
*
* @param $image File: the image object
- * @param $dstPath String: filesystem destination path
- * @param $dstUrl String: Destination URL to use in output HTML
- * @param $params Array: Arbitrary set of parameters validated by $this->validateParam()
+ * @param string $dstPath filesystem destination path
+ * @param string $dstUrl Destination URL to use in output HTML
+ * @param array $params Arbitrary set of parameters validated by $this->validateParam()
* @return MediaTransformOutput
*/
final function getTransform( $image, $dstPath, $dstUrl, $params ) {
* transform unless $flags contains self::TRANSFORM_LATER.
*
* @param $image File: the image object
- * @param $dstPath String: filesystem destination path
- * @param $dstUrl String: destination URL to use in output HTML
- * @param $params Array: arbitrary set of parameters validated by $this->validateParam()
+ * @param string $dstPath filesystem destination path
+ * @param string $dstUrl destination URL to use in output HTML
+ * @param array $params arbitrary set of parameters validated by $this->validateParam()
* @param $flags Integer: a bitfield, may contain self::TRANSFORM_LATER
*
* @return MediaTransformOutput
*
* This is used by the media handlers that use the FormatMetadata class
*
- * @param $metadataArray Array metadata array
+ * @param array $metadataArray metadata array
* @return array for use displaying metadata.
*/
function formatMetadataHelper( $metadataArray ) {
* @param &$array Array An array containing elements for each type of visibility
* and each of those elements being an array of metadata items. This function adds
* a value to that array.
- * @param $visibility string ('visible' or 'collapsed') if this value is hidden
+ * @param string $visibility ('visible' or 'collapsed') if this value is hidden
* by default.
- * @param $type String type of metadata tag (currently always 'exif')
- * @param $id String the name of the metadata tag (like 'artist' for example).
+ * @param string $type type of metadata tag (currently always 'exif')
+ * @param string $id the name of the metadata tag (like 'artist' for example).
* its name in the table displayed is the message "$type-$id" (Ex exif-artist ).
- * @param $value String thingy goes into a wikitext table; it used to be escaped but
+ * @param string $value thingy goes into a wikitext table; it used to be escaped but
* that was incompatible with previous practise of customized display
* with wikitext formatting via messages such as 'exif-model-value'.
* So the escaping is taken back out, but generally this seems a confusing
* interface.
- * @param $param String value to pass to the message for the name of the field
+ * @param string $param value to pass to the message for the name of the field
* as $1. Currently this parameter doesn't seem to ever be used.
*
* Note, everything here is passed through the parser later on (!)
* match the handler class, a Status object should be returned containing
* relevant errors.
*
- * @param $fileName string The local path to the file.
+ * @param string $fileName The local path to the file.
* @return Status object
*/
function verifyUpload( $fileName ) {
* Check for zero-sized thumbnails. These can be generated when
* no disk space is available or some other error occurs
*
- * @param $dstPath string The location of the suspect file
- * @param $retval int Return value of some shell process, file will be deleted if this is non-zero
+ * @param string $dstPath The location of the suspect file
+ * @param int $retval Return value of some shell process, file will be deleted if this is non-zero
* @return bool True if removed, false otherwise
*/
function removeBadFile( $dstPath, $retval = 0 ) {
}
/**
- * @param $storagePath string The permanent storage path
+ * @param string $storagePath The permanent storage path
* @return void
*/
public function setStoragePath( $storagePath ) {
/**
* Fetch HTML for this transform output
*
- * @param $options array Associative array of options. Boolean options
+ * @param array $options Associative array of options. Boolean options
* should be indicated with a value of true for true, and false or
* absent for false.
*
/**
* Stream the file if there were no errors
*
- * @param $headers Array Additional HTTP headers to send on success
+ * @param array $headers Additional HTTP headers to send on success
* @return Bool success
*/
public function streamFile( $headers = array() ) {
* It may also include a 'page' parameter for multipage files.
*
* @param $file File object
- * @param $url String: URL path to the thumb
+ * @param string $url URL path to the thumb
* @param $path String|bool|null: filesystem path to the thumb
- * @param $parameters Array: Associative array of parameters
+ * @param array $parameters Associative array of parameters
* @private
*/
function __construct( $file, $url, $path = false, $parameters = array() ) {
* Return HTML <img ... /> tag for the thumbnail, will include
* width and height attributes and a blank alt text (as required).
*
- * @param $options array Associative array of options. Boolean options
+ * @param array $options Associative array of options. Boolean options
* should be indicated with a value of true for true, and false or
* absent for false.
*
* Constructor
*
* Creates an SVGReader drawing from the source provided
- * @param $source String: URI from which to read
+ * @param string $source URI from which to read
* @throws MWException|Exception
*/
function __construct( $source ) {
/**
* Read a textelement from an element
*
- * @param String $name of the element that we are reading from
- * @param String $metafield that we will fill with the result
+ * @param string $name of the element that we are reading from
+ * @param string $metafield that we will fill with the result
*/
private function readField( $name, $metafield=null ) {
$this->debug ( "Read field $metafield" );
/**
* Read an XML snippet from an element
*
- * @param String $metafield that we will fill with the result
+ * @param string $metafield that we will fill with the result
* @throws MWException
*/
private function readXml( $metafield=null ) {
/**
* Filter all children, looking for animate elements
*
- * @param String $name of the element that we are reading from
+ * @param string $name of the element that we are reading from
*/
private function animateFilter( $name ) {
$this->debug ( "animate filter for tag $name" );
*
* The parser has to be in the start element of "<svg>"
*/
- private function handleSVGAttribs( ) {
+ private function handleSVGAttribs() {
$defaultWidth = self::DEFAULT_WIDTH;
$defaultHeight = self::DEFAULT_HEIGHT;
$aspect = 1.0;
* Return a rounded pixel equivalent for a labeled CSS/SVG length.
* http://www.w3.org/TR/SVG11/coords.html#UnitIdentifiers
*
- * @param $length String: CSS/SVG length.
+ * @param string $length CSS/SVG length.
* @param $viewportSize: Float optional scale for percentage units...
* @return float: length in pixels
*/
* @author Hexmode
* @author Hashar
*
- * @param $filename String Full path to a XCF file
+ * @param string $filename Full path to a XCF file
* @return bool|array metadata array just like PHP getimagesize()
*/
static function getXCFMetaData( $filename ) {
* Also catches any errors during processing, writes them to
* debug log, blanks result array and returns false.
*
- * @param $content String: XMP data
+ * @param string $content XMP data
* @param $allOfIt Boolean: If this is all the data (true) or if its split up (false). Default true
* @param $reset Boolean: does xml parser need to be reset. Default false
* @throws MWException
*
* @todo In serious need of testing
* @see http://www.adobe.ge/devnet/xmp/pdfs/XMPSpecificationPart3.pdf XMP spec part 3 page 20
- * @param String $content XMPExtended block minus the namespace signature
+ * @param string $content XMPExtended block minus the namespace signature
* @return Boolean If it succeeded.
*/
public function parseExtended( $content ) {
* and are processing the 0/10 bit.
*
* @param $parser XMLParser reference to the xml parser
- * @param $data String Character data
+ * @param string $data Character data
* @throws MWException on invalid data
*/
function char( $parser, $data ) {
* Check to see if this is the element we started to ignore,
* in which case we get out of MODE_IGNORE
*
- * @param $elm String Namespace of element followed by a space and then tag name of element.
+ * @param string $elm Namespace of element followed by a space and then tag name of element.
*/
private function endElementModeIgnore ( $elm ) {
if ( $this->curItem[0] === $elm ) {
* Or it could be if we hit the end element of a property
* of a compound data structure (like a member of an array).
*
- * @param $elm String namespace, space, and tag name.
+ * @param string $elm namespace, space, and tag name.
*/
private function endElementModeSimple ( $elm ) {
if ( $this->charContent !== false ) {
*
* This method is called when we hit the "</exif:ISOSpeedRatings>" tag.
*
- * @param $elm String namespace . space . tag name.
+ * @param string $elm namespace . space . tag name.
* @throws MWException
*/
private function endElementNested( $elm ) {
* (For comparison, we call endElementModeSimple when we
* hit the "</rdf:li>")
*
- * @param $elm String namespace . ' ' . element name
+ * @param string $elm namespace . ' ' . element name
* @throws MWException
*/
private function endElementModeLi( $elm ) {
* Qualifiers aren't all that common, and we don't do anything
* with them.
*
- * @param $elm String namespace and element
+ * @param string $elm namespace and element
*/
private function endElementModeQDesc( $elm ) {
* xmp and have no meaning.
*
* @param $parser XMLParser
- * @param $elm String namespace . ' ' . element name
+ * @param string $elm namespace . ' ' . element name
* @throws MWException
*/
function endElement( $parser, $elm ) {
* in which case we add it to the item stack, so we can ignore things
* that are nested, correctly.
*
- * @param $elm String namespace . ' ' . tag name
+ * @param string $elm namespace . ' ' . tag name
*/
private function startElementModeIgnore( $elm ) {
if ( $elm === $this->curItem[0] ) {
* Start element in MODE_BAG (unordered array)
* this should always be <rdf:Bag>
*
- * @param $elm String namespace . ' ' . tag
+ * @param string $elm namespace . ' ' . tag
* @throws MWException if we have an element that's not <rdf:Bag>
*/
private function startElementModeBag( $elm ) {
* Start element in MODE_SEQ (ordered array)
* this should always be <rdf:Seq>
*
- * @param $elm String namespace . ' ' . tag
+ * @param string $elm namespace . ' ' . tag
* @throws MWException if we have an element that's not <rdf:Seq>
*/
private function startElementModeSeq( $elm ) {
* which are really only used for thumbnails, which
* we don't care about.
*
- * @param $elm String namespace . ' ' . tag
+ * @param string $elm namespace . ' ' . tag
* @throws MWException if we have an element that's not <rdf:Alt>
*/
private function startElementModeLang( $elm ) {
*
* This method is called when processing the <rdf:Description> element
*
- * @param $elm String namespace and tag names separated by space.
- * @param $attribs Array Attributes of the element.
+ * @param string $elm namespace and tag names separated by space.
+ * @param array $attribs Attributes of the element.
* @throws MWException
*/
private function startElementModeSimple( $elm, $attribs ) {
* </exif:DigitalZoomRatio>
* Called when processing the <rdf:value> or <foo:someQualifier>.
*
- * @param $elm String namespace and tag name separated by a space.
+ * @param string $elm namespace and tag name separated by a space.
*
*/
private function startElementModeQDesc( $elm ) {
*
* This is generally where most properties start.
*
- * @param $ns String Namespace
- * @param $tag String tag name (without namespace prefix)
- * @param $attribs Array array of attributes
+ * @param string $ns Namespace
+ * @param string $tag tag name (without namespace prefix)
+ * @param array $attribs array of attributes
* @throws MWException
*/
private function startElementModeInitial( $ns, $tag, $attribs ) {
* <exif:Flash rdf:parseType='Resource'> <exif:Fired>True</exif:Fired>
* <exif:Mode>1</exif:Mode></exif:Flash>
*
- * @param $ns String namespace
- * @param $tag String tag name (no ns)
- * @param $attribs Array array of attribs w/ values.
+ * @param string $ns namespace
+ * @param string $tag tag name (no ns)
+ * @param array $attribs array of attribs w/ values.
* @throws MWException
*/
private function startElementModeStruct( $ns, $tag, $attribs ) {
* </rdf:Seq> </exif:ISOSpeedRatings>
* This method is called when we hit the <rdf:li> element.
*
- * @param $elm String: namespace . ' ' . tagname
- * @param $attribs Array: Attributes. (needed for BAGSTRUCTS)
+ * @param string $elm namespace . ' ' . tagname
+ * @param array $attribs Attributes. (needed for BAGSTRUCTS)
* @throws MWException if gets a tag other than <rdf:li>
*/
private function startElementModeLi( $elm, $attribs ) {
*
* This method is called when we hit the <rdf:li> element.
*
- * @param $elm String namespace . ' ' . tag
- * @param $attribs array array of elements (most importantly xml:lang)
+ * @param string $elm namespace . ' ' . tag
+ * @param array $attribs array of elements (most importantly xml:lang)
* @throws MWException if gets a tag other than <rdf:li> or if no xml:lang
*/
private function startElementModeLiLang( $elm, $attribs ) {
* Also does some initial set up for the wrapper element
*
* @param $parser XMLParser
- * @param $elm String namespace "<space>" element
- * @param $attribs Array attribute name => value
+ * @param string $elm namespace "<space>" element
+ * @param array $attribs attribute name => value
* @throws MWException
*/
function startElement( $parser, $elm, $attribs ) {
* <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" exif:DigitalZoomRatio="0/10">
* @endcode
*
- * @param $attribs Array attribute=>value array.
+ * @param array $attribs attribute=>value array.
* @throws MWException
*/
private function doAttribs( $attribs ) {
* $this->processingArray to determine what name to
* save the value under. (in addition to $tag).
*
- * @param $ns String namespace of tag this is for
- * @param $tag String tag name
- * @param $val String value to save
+ * @param string $ns namespace of tag this is for
+ * @param string $tag tag name
+ * @param string $val value to save
*/
private function saveValue( $ns, $tag, $val ) {
/** get the items array
* @return Array XMP item configuration array.
*/
- public static function getItems ( ) {
+ public static function getItems () {
if( !self::$ranHooks ) {
// This is for if someone makes a custom metadata extension.
// For example, a medical wiki might want to decode DICOM xmp properties.
/**
* function to validate boolean properties ( True or False )
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
/**
* function to validate rational properties ( 12/10 )
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
* if its outside of range put it into range.
*
* @see MWG spec
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
/**
* function to validate integers
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
* function to validate properties with a fixed number of allowed
* choices. (closed choice)
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
/**
* function to validate and modify flash structure
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
* @see rfc 3066
* @see http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart1.pdf page 30 (section 8.2.2.5)
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate
* @param $standalone Boolean if this is a simple property or array
*/
* YYYY-MM-DDThh:mm:ssTZD
* YYYY-MM-DDThh:mm:ss.sTZD
*
- * @param $info Array information about current property
+ * @param array $info information about current property
* @param &$val Mixed current value to validate. Converts to TS_EXIF as a side-effect.
* in cases where there's only a partial date, it will give things like
* 2011:04.
* @see http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart2.pdf
* section 1.2.7.4 on page 23
*
- * @param $info Array unused (info about prop)
+ * @param array $info unused (info about prop)
* @param &$val String GPS string in either DDD,MM,SSk or
* or DDD,MM.mmk form
* @param $standalone Boolean if its a simple prop (should always be true)
# Explicitly using Unicode 6.0
BASE=http://www.unicode.org/Public/6.0.0/ucd
-# Can override to php-cli or php5 or whatevah
+# Can override to php-cli or php5 or whatever
PHP=php
#PHP=php-cli
*
* Not as fast as I'd like, but should be usable for most purposes.
* UtfNormal::toNFC() will bail early if given ASCII text or text
- * it can quickly deterimine is already normalized.
+ * it can quickly determine is already normalized.
*
* All functions can be called static.
*
* Fast return for pure ASCII strings; some lesser optimizations for
* strings containing only known-good characters. Not as fast as toNFC().
*
- * @param $string String: a UTF-8 string
+ * @param string $string a UTF-8 string
* @return string a clean, shiny, normalized UTF-8 string
*/
static function cleanUp( $string ) {
* Fast return for pure ASCII strings; some lesser optimizations for
* strings containing only known-good characters.
*
- * @param $string String: a valid UTF-8 string. Input is not validated.
+ * @param string $string a valid UTF-8 string. Input is not validated.
* @return string a UTF-8 string in normal form C
*/
static function toNFC( $string ) {
* Convert a UTF-8 string to normal form D, canonical decomposition.
* Fast return for pure ASCII strings.
*
- * @param $string String: a valid UTF-8 string. Input is not validated.
+ * @param string $string a valid UTF-8 string. Input is not validated.
* @return string a UTF-8 string in normal form D
*/
static function toNFD( $string ) {
* This may cause irreversible information loss, use judiciously.
* Fast return for pure ASCII strings.
*
- * @param $string String: a valid UTF-8 string. Input is not validated.
+ * @param string $string a valid UTF-8 string. Input is not validated.
* @return string a UTF-8 string in normal form KC
*/
static function toNFKC( $string ) {
* This may cause irreversible information loss, use judiciously.
* Fast return for pure ASCII strings.
*
- * @param $string String: a valid UTF-8 string. Input is not validated.
+ * @param string $string a valid UTF-8 string. Input is not validated.
* @return string a UTF-8 string in normal form KD
*/
static function toNFKD( $string ) {
/**
* Returns true if the string is _definitely_ in NFC.
* Returns false if not or uncertain.
- * @param $string String: a valid UTF-8 string. Input is not validated.
+ * @param string $string a valid UTF-8 string. Input is not validated.
* @return bool
*/
static function quickIsNFC( $string ) {
/**
* Returns true if the string is _definitely_ in NFC.
* Returns false if not or uncertain.
- * @param $string String: a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
+ * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
* @return bool
*/
static function quickIsNFCVerify( &$string ) {
* (depending on which decomposition map is passed to us).
* Input is assumed to be *valid* UTF-8. Invalid code will break.
* @private
- * @param $string String: valid UTF-8 string
- * @param $map Array: hash of expanded decomposition map
+ * @param string $string valid UTF-8 string
+ * @param array $map hash of expanded decomposition map
* @return string a UTF-8 string decomposed, not yet normalized (needs sorting)
*/
static function fastDecompose( $string, $map ) {
* Sorts combining characters into canonical order. This is the
* final step in creating decomposed normal forms D and KD.
* @private
- * @param $string String: a valid, decomposed UTF-8 string. Input is not validated.
+ * @param string $string a valid, decomposed UTF-8 string. Input is not validated.
* @return string a UTF-8 string with combining characters sorted in canonical order
*/
static function fastCombiningSort( $string ) {
* Produces canonically composed sequences, i.e. normal form C or KC.
*
* @private
- * @param $string String: a valid UTF-8 string in sorted normal form D or KD. Input is not validated.
+ * @param string $string a valid UTF-8 string in sorted normal form D or KD. Input is not validated.
* @return string a UTF-8 string with canonical precomposed characters used where possible
*/
static function fastCompose( $string ) {
* Function to replace some characters that we don't want
* but most of the native normalize functions keep.
*
- * @param $string String The string
+ * @param string $string The string
* @return String String with the character codes replaced.
*/
private static function replaceForNativeNormalize( $string ) {
* Take a UTF-8 string and return a space-separated series of hex
* numbers representing Unicode code points. For debugging.
*
- * @param $str String: UTF-8 string.
+ * @param string $str UTF-8 string.
* @return string
* @private
*/
/**
* Escape a string for inclusion in a PHP single-quoted string literal.
*
- * @param $string String: string to be escaped.
+ * @param string $string string to be escaped.
* @return String: escaped string.
* @public
*/
/**
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
* Set an item.
* @param $key string
* @param $value mixed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
* @return bool success
*/
abstract public function set( $key, $value, $exptime = 0 );
* @param $casToken mixed
* @param $key string
* @param $value mixed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
* @return bool success
*/
abstract public function cas( $casToken, $key, $value, $exptime = 0 );
/**
* Delete an item.
* @param $key string
- * @param $time int Amount of time to delay the operation (mostly memcached-specific)
+ * @param int $time Amount of time to delay the operation (mostly memcached-specific)
* @return bool True if the item was deleted or not found, false on failure
*/
abstract public function delete( $key, $time = 0 );
*
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
*
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
protected function mergeViaCas( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
*
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
protected function mergeViaLock( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
/**
* Delete all objects expiring before a certain date.
- * @param $date string The reference date in MW format
+ * @param string $date The reference date in MW format
* @param $progressCallback callback|bool Optional, a function which will be called
* regularly during long-running operations with the percentage progress
* as the first parameter.
/**
* Get an associative array containing the item for each of the keys that have items.
- * @param $keys Array List of strings
+ * @param array $keys List of strings
* @return Array
*/
public function getMulti( array $keys ) {
/**
* Increase stored value of $key by $value while preserving its TTL
- * @param $key String: Key to increase
+ * @param string $key Key to increase
* @param $value Integer: Value to add to $key (Default 1)
* @return integer|bool New value or false on failure
*/
# Insert failed, check to see if it failed due to an expired key
if ( !$ret ) {
- list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
+ list( , $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
if ( $expiry && $expiry < time() ) {
# Yes expired, delete and try again
/**
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
/**
* @param $key string
* @param $value int
- * @param $exptime int (default 0)
+ * @param int $exptime (default 0)
* @return Mixed
*/
public function add( $key, $value, $exptime = 0 ) {
/**
* Memcache initializer
*
- * @param $args Array Associative array of settings
+ * @param array $args Associative array of settings
*
* @return mixed
*/
* Adds a key/value to the memcache server if one isn't already set with
* that key
*
- * @param $key String: key to set with data
+ * @param string $key key to set with data
* @param $val Mixed: value to store
* @param $exp Integer: (optional) Expiration time. This can be a number of seconds
* to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or
/**
* Decrease a value stored on the memcache server
*
- * @param $key String: key to decrease
+ * @param string $key key to decrease
* @param $amt Integer: (optional) amount to decrease
*
* @return Mixed: FALSE on failure, value on success
/**
* Deletes a key from the server, optionally after $time
*
- * @param $key String: key to delete
+ * @param string $key key to delete
* @param $time Integer: (optional) how long to wait before deleting
*
* @return Boolean: TRUE on success, FALSE on failure
/**
* Retrieves the value associated with the key from the memcache server
*
- * @param $key array|string key to retrieve
+ * @param array|string $key key to retrieve
* @param $casToken[optional] Float
*
* @return Mixed
/**
* Get multiple keys from the server(s)
*
- * @param $keys Array: keys to retrieve
+ * @param array $keys keys to retrieve
*
* @return Array
*/
/**
* Increments $key (optionally) by $amt
*
- * @param $key String: key to increment
+ * @param string $key key to increment
* @param $amt Integer: (optional) amount to increment
*
* @return Integer: null if the key does not exist yet (this does NOT
/**
* Overwrites an existing value for key; only works if key is already set
*
- * @param $key String: key to set value as
+ * @param string $key key to set value as
* @param $value Mixed: value to store
* @param $exp Integer: (optional) Expiration time. This can be a number of seconds
* to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or
* output as an array (null array if no output)
*
* @param $sock Resource: socket to send command on
- * @param $cmd String: command to run
+ * @param string $cmd command to run
*
* @return Array: output array
*/
* Unconditionally sets a key to a given value in the memcache. Returns true
* if set successfully.
*
- * @param $key String: key to set value as
+ * @param string $key key to set value as
* @param $value Mixed: value to set
* @param $exp Integer: (optional) Expiration time. This can be a number of seconds
* to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or
* to a known, given value. Returns true if set successfully.
*
* @param $casToken Float: current known value
- * @param $key String: key to set value as
+ * @param string $key key to set value as
* @param $value Mixed: value to set
* @param $exp Integer: (optional) Expiration time. This can be a number of seconds
* to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or
/**
* Sets the server list to distribute key gets and puts between
*
- * @param $list Array of servers to connect to
+ * @param array $list of servers to connect to
*
* @see MWMemcached::__construct()
*/
/**
* Close the specified socket
*
- * @param $sock String: socket to close
+ * @param string $sock socket to close
*
* @access private
*/
* Connects $sock to $host, timing out after $timeout
*
* @param $sock Integer: socket to connect
- * @param $host String: Host:IP to connect to
+ * @param string $host Host:IP to connect to
*
* @return boolean
* @access private
/**
* Marks a host as dead until 30-40 seconds in the future
*
- * @param $sock String: socket to mark as dead
+ * @param string $sock socket to mark as dead
*
* @access private
*/
/**
* get_sock
*
- * @param $key String: key to retrieve value for;
+ * @param string $key key to retrieve value for;
*
* @return Mixed: resource on success, false on failure
* @access private
/**
* Creates a hash integer based on the $key
*
- * @param $key String: key to hash
+ * @param string $key key to hash
*
* @return Integer: hash value
* @access private
/**
* Perform increment/decriment on $key
*
- * @param $cmd String command to perform
- * @param $key String|array key to perform it on
+ * @param string $cmd command to perform
+ * @param string|array $key key to perform it on
* @param $amt Integer amount to adjust
*
* @return Integer: new value of $key
* Load items into $ret from $sock
*
* @param $sock Resource: socket to read from
- * @param $ret Array: returned values
+ * @param array $ret returned values
* @param $casToken[optional] Float
* @return boolean True for success, false for failure
*
/**
* Performs the requested storage operation to the memcache server
*
- * @param $cmd String: command to perform
- * @param $key String: key to act on
+ * @param string $cmd command to perform
+ * @param string $key key to act on
* @param $val Mixed: what we need to store
* @param $exp Integer: (optional) Expiration time. This can be a number of seconds
* to cache for (up to 30 days inclusive). Any timespans of 30 days + 1 second or
/**
* Returns the socket for the host
*
- * @param $host String: Host:IP to get socket for
+ * @param string $host Host:IP to get socket for
*
* @return Mixed: IO Stream or false
* @access private
if ( $params['persistent'] ) {
// The pool ID must be unique to the server/option combination.
// The Memcached object is essentially shared for each pool ID.
- // We can only resuse a pool ID if we keep the config consistent.
+ // We can only reuse a pool ID if we keep the config consistent.
$this->client = new Memcached( md5( serialize( $params ) ) );
if ( count( $this->client->getServerList() ) ) {
wfDebug( __METHOD__ . ": persistent Memcached object already loaded.\n" );
* the client, but some day we might find a case where it should be
* different.
*
- * @param $key string The key used by the caller, or false if there wasn't one.
+ * @param string $key The key used by the caller, or false if there wasn't one.
* @param $result Mixed The return value
* @return Mixed
*/
/**
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
/**
* Get a cache key for the given session id.
*
- * @param $id String: session id
+ * @param string $id session id
* @return String: cache key
*/
static function getKey( $id ) {
/**
* Callback when reading session data.
*
- * @param $id String: session id
+ * @param string $id session id
* @return Mixed: session data
*/
static function read( $id ) {
/**
* Callback when writing session data.
*
- * @param $id String: session id
+ * @param string $id session id
* @param $data Mixed: session data
* @return Boolean: success
*/
/**
* Callback to destroy a session when calling session_destroy().
*
- * @param $id String: session id
+ * @param string $id session id
* @return Boolean: success
*/
static function destroy( $id ) {
/**
* Get a value from the WinCache object cache
*
- * @param $key String: cache key
+ * @param string $key cache key
* @param $casToken[optional] int: cas token
* @return mixed
*/
/**
* Store a value in the WinCache object cache
*
- * @param $key String: cache key
+ * @param string $key cache key
* @param $value Mixed: object to store
- * @param $expire Int: expiration time
+ * @param int $expire expiration time
* @return bool
*/
public function set( $key, $value, $expire = 0 ) {
/**
* Store a value in the WinCache object cache, race condition-safe
*
- * @param $casToken int: cas token
- * @param $key String: cache key
- * @param $value int: object to store
- * @param $exptime Int: expiration time
+ * @param int $casToken cas token
+ * @param string $key cache key
+ * @param int $value object to store
+ * @param int $exptime expiration time
* @return bool
*/
public function cas( $casToken, $key, $value, $exptime = 0 ) {
/**
* Remove a value from the WinCache object cache
*
- * @param $key String: cache key
- * @param $time Int: not used in this implementation
+ * @param string $key cache key
+ * @param int $time not used in this implementation
* @return bool
*/
public function delete( $key, $time = 0 ) {
/**
* Get a value from the XCache object cache
*
- * @param $key String: cache key
+ * @param string $key cache key
* @param $casToken mixed: cas token
* @return mixed
*/
/**
* Store a value in the XCache object cache
*
- * @param $key String: cache key
+ * @param string $key cache key
* @param $value Mixed: object to store
- * @param $expire Int: expiration time
+ * @param int $expire expiration time
* @return bool
*/
public function set( $key, $value, $expire = 0 ) {
/**
* Remove a value from the XCache object cache
*
- * @param $key String: cache key
- * @param $time Int: not used in this implementation
+ * @param string $key cache key
+ * @param int $time not used in this implementation
* @return bool
*/
public function delete( $key, $time = 0 ) {
*
* @param $key string
* @param $callback closure Callback method to be executed
- * @param $exptime int Either an interval in seconds or a unix timestamp for expiry
- * @param $attempts int The amount of times to attempt a merge in case of failure
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool success
*/
public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
* per-article cache invalidation timestamps, or if it comes from
* an incompatible older version.
*
- * @param $touched String: the affected article's last touched timestamp
+ * @param string $touched the affected article's last touched timestamp
* @return Boolean
*/
public function expired( $touched ) {
* For links to "wiki"s, or similar software, spaces are encoded as '_',
*
* @param $parser Parser object
- * @param $s String: The text to encode.
- * @param $arg String (optional): The type of encoding.
+ * @param string $s The text to encode.
+ * @param string $arg (optional): The type of encoding.
* @return string
*/
static function urlencode( $parser, $s = '', $arg = null ) {
* title which will normalise to the canonical title
*
* @param $parser Parser: parent parser
- * @param $text String: desired title text
+ * @param string $text desired title text
* @return String
*/
static function displaytitle( $parser, $text = '' ) {
* @todo Document parameters
*
* @param $parser Parser
- * @param $page String TODO DOCUMENT (Default: empty string)
+ * @param string $page TODO DOCUMENT (Default: empty string)
* @param $raw TODO DOCUMENT (Default: null)
* @return string
*/
/**
* Gives language names.
* @param $parser Parser
- * @param $code String Language code (of which to get name)
- * @param $inLanguage String Language code (in which to get name)
+ * @param string $code Language code (of which to get name)
+ * @param string $inLanguage Language code (in which to get name)
* @return String
*/
static function language( $parser, $code = '', $inLanguage = '' ) {
/**
* @param $parser Parser
- * @param $text String The sortkey to use
- * @param $uarg String Either "noreplace" or "noerror" (in en)
+ * @param string $text The sortkey to use
+ * @param string $uarg Either "noreplace" or "noerror" (in en)
* both suppress errors, and noreplace does nothing if
* a default sortkey already exists.
* @return string
*/
/**
- * Date formatter, recognises dates in plain text and formats them accoding to user preferences.
+ * Date formatter, recognises dates in plain text and formats them according to user preferences.
* @todo preferences, OutputPage
* @ingroup Parser
*/
}
/**
- * @param $preference String: User preference
- * @param $text String: Text to reformat
- * @param $options Array: can contain 'linked' and/or 'match-whole'
+ * @param string $preference User preference
+ * @param string $text Text to reformat
+ * @param array $options can contain 'linked' and/or 'match-whole'
* @return mixed|String
*/
function reformat( $preference, $text, $options = array( 'linked' ) ) {
/**
* Makes an ISO month, e.g. 02, from a month name
- * @param $monthName String: month name
+ * @param string $monthName month name
* @return string ISO month name
*/
function makeIsoMonth( $monthName ) {
/**
* @todo document
- * @param $year String: Year name
+ * @param string $year Year name
* @return string ISO year name
*/
function makeIsoYear( $year ) {
* strings will be returned.
*
* @param $other LinkHolderArray
- * @param $texts Array of strings
+ * @param array $texts of strings
* @return Array
*/
function mergeForeign( $other, $texts ) {
*
* @param $nt Title
* @param $text String
- * @param $query Array [optional]
- * @param $trail String [optional]
- * @param $prefix String [optional]
+ * @param array $query [optional]
+ * @param string $trail [optional]
+ * @param string $prefix [optional]
* @return string
*/
function makeHolder( $nt, $text = '', $query = array(), $trail = '', $prefix = '' ) {
* Convert wikitext to HTML
* Do not call this function recursively.
*
- * @param $text String: text we want to parse
+ * @param string $text text we want to parse
* @param $title Title object
* @param $options ParserOptions
* @param $linestart boolean
* @param $clearState boolean
- * @param $revid Int: number to pass in {{REVISIONID}}
+ * @param int $revid number to pass in {{REVISIONID}}
* @return ParserOutput a ParserOutput
*/
public function parse( $text, Title $title, ParserOptions $options, $linestart = true, $clearState = true, $revid = null ) {
*
* If $frame is not provided, then template variables (e.g., {{{1}}}) within $text are not expanded
*
- * @param $text String: text extension wants to have parsed
+ * @param string $text text extension wants to have parsed
* @param $frame PPFrame: The frame to use for expanding any template variables
*
* @return string
* Recursive parser entry point that can be called from an extension tag
* hook.
*
- * @param $text String: text to be expanded
+ * @param string $text text to be expanded
* @param $frame PPFrame: The frame to use for expanding any template variables
* @return String
* @since 1.19
/**
* Accessor/mutator for the output type
*
- * @param $x int|null New value or null to just get the current one
+ * @param int|null $x New value or null to just get the current one
* @return Integer
*/
function OutputType( $x = null ) {
* '<element param="x">tag content</element>' ) )
* @endcode
*
- * @param $elements array list of element names. Comments are always extracted.
- * @param $text string Source text string.
- * @param $matches array Out parameter, Array: extracted tags
+ * @param array $elements list of element names. Comments are always extracted.
+ * @param string $text Source text string.
+ * @param array $matches Out parameter, Array: extracted tags
* @param $uniq_prefix string
* @return String: stripped text
*/
$i = 0;
while ( $i<count( $bits ) ) {
$url = $bits[$i++];
- // @todo FIXME: Unused variable.
- $protocol = $bits[$i++];
+ $i++; // protocol
$text = $bits[$i++];
$trail = $bits[$i++];
* Get the rel attribute for a particular external link.
*
* @since 1.21
- * @param $url String|bool optional URL, to extract the domain from for rel =>
+ * @param string|bool $url optional URL, to extract the domain from for rel =>
* nofollow if appropriate
* @param $title Title optional Title, for wgNoFollowNsExceptions lookups
* @return string|null rel attribute for $url
* (depending on configuration, namespace, and the URL's domain) and/or a
* target attribute (depending on configuration).
*
- * @param $url String|bool optional URL, to extract the domain from for rel =>
+ * @param string|bool $url optional URL, to extract the domain from for rel =>
* nofollow if appropriate
* @return Array associative array of HTML attributes
*/
*
* @param $nt Title
* @param $text String
- * @param $query Array or String
+ * @param array $query or String
* @param $trail String
* @param $prefix String
* @return String: HTML-wikitext mix oh yuck
* Not needed quite as much as it used to be since free links are a bit
* more sensible these days. But bracketed links are still an issue.
*
- * @param $text String: more-or-less HTML
+ * @param string $text more-or-less HTML
* @return String: less-or-more HTML with NOPARSE bits
*/
function armorLinks( $text ) {
/**
* Handle link to subpage if necessary
*
- * @param $target String: the source of the link
+ * @param string $target the source of the link
* @param &$text String: the link text, modified as necessary
* @return string the full name of the link
* @private
* Split up a string on ':', ignoring any occurrences inside tags
* to prevent illegal overlapping.
*
- * @param $str String the string to split
+ * @param string $str the string to split
* @param &$before String set to everything before the ':'
* @param &$after String set to everything after the ':'
* @throws MWException
* Preprocess some wikitext and return the document tree.
* This is the ghost of replace_variables().
*
- * @param $text String: The text to parse
+ * @param string $text The text to parse
* @param $flags Integer: bitwise combination of:
* self::PTD_FOR_INCLUSION Handle "<noinclude>" and "<includeonly>" as if the text is being
* included. Default is to assume a direct page view.
* self::OT_PREPROCESS: templates but not extension tags
* self::OT_HTML: all templates and extension tags
*
- * @param $text String the text to transform
+ * @param string $text the text to transform
* @param $frame PPFrame Object describing the arguments passed to the template.
* Arguments may also be provided as an associative array, as was the usual case before MW1.12.
* Providing arguments this way may be useful for extensions wishing to perform variable replacement explicitly.
* Warn the user when a parser limitation is reached
* Will warn at most once the user per limitation type
*
- * @param $limitationType String: should be one of:
+ * @param string $limitationType should be one of:
* 'expensive-parserfunction' (corresponding messages:
* 'expensive-parserfunction-warning',
* 'expensive-parserfunction-category')
* 'post-expand-template-inclusion' (corresponding messages:
* 'post-expand-template-inclusion-warning',
* 'post-expand-template-inclusion-category')
- * @param $current int|null Current value
- * @param $max int|null Maximum allowed, when an explicit limit has been
+ * @param int|null $current Current value
+ * @param int|null $max Maximum allowed, when an explicit limit has been
* exceeded, provide the values (optional)
*/
function limitationWarn( $limitationType, $current = '', $max = '' ) {
* Return the text of a template, after recursively
* replacing any variables or templates within the template.
*
- * @param $piece Array: the parts of the template
+ * @param array $piece the parts of the template
* $piece['title']: the title, i.e. the part before the |
* $piece['parts']: the parameter array
* $piece['lineStart']: whether the brace was at the start of a line
* Fetch a file and its title and register a reference to it.
* If 'broken' is a key in $options then the file will appear as a broken thumbnail.
* @param Title $title
- * @param Array $options Array of options to RepoGroup::findFile
+ * @param array $options Array of options to RepoGroup::findFile
* @return File|bool
*/
function fetchFile( $title, $options = array() ) {
* Fetch a file and its title and register a reference to it.
* If 'broken' is a key in $options then the file will appear as a broken thumbnail.
* @param Title $title
- * @param Array $options Array of options to RepoGroup::findFile
+ * @param array $options Array of options to RepoGroup::findFile
* @return Array ( File or false, Title of file )
*/
function fetchFileAndTitle( $title, $options = array() ) {
* Return the text to be used for a given extension tag.
* This is the ghost of strip().
*
- * @param $params array Associative array of parameters:
+ * @param array $params Associative array of parameters:
* name PPNode for the tag name
* attr PPNode for unparsed text where tag attributes are thought to be
* attributes Optional associative array of parsed attributes
$output = call_user_func_array( $this->mTagHooks[$name],
array( $content, $attributes, $this, $frame ) );
} elseif ( isset( $this->mFunctionTagHooks[$name] ) ) {
- list( $callback, $flags ) = $this->mFunctionTagHooks[$name];
+ list( $callback, ) = $this->mFunctionTagHooks[$name];
if ( !is_callable( $callback ) ) {
throw new MWException( "Tag hook for $name is not callable\n" );
}
/**
* Increment an include size counter
*
- * @param $type String: the type of expansion
+ * @param string $type the type of expansion
* @param $size Integer: the size of the text
* @return Boolean: false if this inclusion would take it over the maximum, true otherwise
*/
* Add a tracking category, getting the title from a system message,
* or print a debug message if the title is invalid.
*
- * @param $msg String: message key
+ * @param string $msg message key
* @return Boolean: whether the addition was successful
*/
public function addTrackingCategory( $msg ) {
* string and re-inserts the newly formatted headlines.
*
* @param $text String
- * @param $origText String: original, untouched wikitext
+ * @param string $origText original, untouched wikitext
* @param $isMain Boolean
* @return mixed|string
* @private
$levelCount[$toclevel] = $level;
# count number of headlines for each level
- @$sublevelCount[$toclevel]++;
+ $sublevelCount[$toclevel]++;
$dot = 0;
for( $i = 1; $i <= $toclevel; $i++ ) {
if ( !empty( $sublevelCount[$i] ) ) {
* Transform wiki markup when saving a page by doing "\r\n" -> "\n"
* conversion, substitting signatures, {{subst:}} templates, etc.
*
- * @param $text String: the text to transform
+ * @param string $text the text to transform
* @param $title Title: the Title object for the current article
* @param $user User: the User object describing the current user
* @param $options ParserOptions: parsing options
* as it may have changed if it's the $wgParser.
*
* @param $user User
- * @param $nickname String|bool nickname to use or false to use user's default nickname
+ * @param string|bool $nickname nickname to use or false to use user's default nickname
* @param $fancySig Boolean|null whether the nicknname is the complete signature
* or null to use default value
* @return string
* 2) Substitute all transclusions
*
* @param $text String
- * @param $parsing bool Whether we're cleaning (preferences save) or parsing
+ * @param bool $parsing Whether we're cleaning (preferences save) or parsing
* @return String: signature text
*/
public function cleanSig( $text, $parsing = false ) {
/**
* Wrapper for preprocess()
*
- * @param $text String: the text to preprocess
+ * @param string $text the text to preprocess
* @param $options ParserOptions: options
* @param $title Title object or null to use $wgTitle
* @return String
* nowiki Wiki markup in the return value should be escaped
* isHTML The returned text is HTML, armour it against wikitext transformation
*
- * @param $id String: The magic word ID
+ * @param string $id The magic word ID
* @param $callback Mixed: the callback function (and object) to use
* @param $flags Integer: a combination of the following flags:
* SFH_NO_HASH No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
*
* External callers should use the getSection and replaceSection methods.
*
- * @param $text String: Page wikitext
- * @param $section String: a section identifier string of the form:
+ * @param string $text Page wikitext
+ * @param string $section a section identifier string of the form:
* "<flag1> - <flag2> - ... - <section number>"
*
* Currently the only recognised flag is "T", which means the target section number
* string. If $text is the empty string and section 0 is replaced, $newText is
* returned.
*
- * @param $mode String: one of "get" or "replace"
- * @param $newText String: replacement text for section data.
+ * @param string $mode one of "get" or "replace"
+ * @param string $newText replacement text for section data.
* @return String: for "get", the extracted section text.
* for "replace", the whole page with the section replaced.
*/
*
* If a section contains subsections, these are also returned.
*
- * @param $text String: text to look in
- * @param $section String: section identifier
- * @param $deftext String: default to return if section is not found
+ * @param string $text text to look in
+ * @param string $section section identifier
+ * @param string $deftext default to return if section is not found
* @return string text of the requested section
*/
public function getSection( $text, $section, $deftext = '' ) {
* specified by $section has been replaced with $text. If the target
* section does not exist, $oldtext is returned unchanged.
*
- * @param $oldtext String: former text of the article
- * @param $section int section identifier
- * @param $text String: replacing text
+ * @param string $oldtext former text of the article
+ * @param int $section section identifier
+ * @param string $text replacing text
* @return String: modified text
*/
public function replaceSection( $oldtext, $section, $text ) {
/**
* Mutator for $mDefaultSort
*
- * @param $sort string New value
+ * @param string $sort New value
*/
public function setDefaultSort( $sort ) {
$this->mDefaultSort = $sort;
* instead. For use in redirects, since IE6 interprets Redirect: headers
* as something other than UTF-8 (apparently?), resulting in breakage.
*
- * @param $text String: The section name
+ * @param string $text The section name
* @return string An anchor
*/
public function guessLegacySectionNameFromWikiText( $text ) {
* to create valid section anchors by mimicing the output of the
* parser when headings are parsed.
*
- * @param $text String: text string to be stripped of wikitext
+ * @param string $text text string to be stripped of wikitext
* for use in a Section anchor
* @return string Filtered text string
*/
* If the $data array has been stored persistently, the caller should first
* check whether it is still valid, by calling isValidHalfParsedText().
*
- * @param $data array Serialized data
+ * @param array $data Serialized data
* @throws MWException
* @return String
*/
/**
* Checks, if a url is pointing to the own server
*
- * @param $internal String the server to check against
- * @param $url String the url to check
+ * @param string $internal the server to check against
+ * @param string $url the url to check
* @return bool
*/
static function isLinkInternal( $internal, $url ) {
/**
* Register a file dependency for this output
- * @param $name string Title dbKey
- * @param $timestamp string MW timestamp of file creation (or false if non-existing)
- * @param $sha1 string base 36 SHA-1 of file (or false if non-existing)
+ * @param string $name Title dbKey
+ * @param string $timestamp MW timestamp of file creation (or false if non-existing)
+ * @param string $sha1 base 36 SHA-1 of file (or false if non-existing)
* @return void
*/
function addImage( $name, $timestamp = null, $sha1 = null ) {
* -- this is assumed to have been validated
* (check equal normalisation, etc.)
*
- * @param $text String: desired title text
+ * @param string $text desired title text
*/
public function setDisplayTitle( $text ) {
$this->setTitleText( $text );
* Preprocess some wikitext and return the document tree.
* This is the ghost of Parser::replace_variables().
*
- * @param $text String: the text to parse
+ * @param string $text the text to parse
* @param $flags Integer: bitwise combination of:
* Parser::PTD_FOR_INCLUSION Handle "<noinclude>" and "<includeonly>" as if the text is being
* included. Default is to assume a direct page view.
* Preprocess some wikitext and return the document tree.
* This is the ghost of Parser::replace_variables().
*
- * @param $text String: the text to parse
+ * @param string $text the text to parse
* @param $flags Integer: bitwise combination of:
* Parser::PTD_FOR_INCLUSION Handle "<noinclude>" and "<includeonly>" as if the text is being
* included. Default is to assume a direct page view.
* If tidy isn't able to correct the markup, the original will be
* returned in all its glory with a warning comment appended.
*
- * @param $text String: hideous HTML input
+ * @param string $text hideous HTML input
* @return String: corrected HTML output
*/
public static function tidy( $text ) {
* Spawn an external HTML tidy process and get corrected markup back from it.
* Also called in OutputHandler.php for full page validation
*
- * @param $text String: HTML to check
+ * @param string $text HTML to check
* @param $stderr Boolean: Whether to read result from STDERR rather than STDOUT
* @param &$retval int Exit code (-1 on internal error)
* @return mixed String or null
* Use the HTML tidy extension to use the tidy library in-process,
* saving the overhead of spawning a new process.
*
- * @param $text String: HTML to check
+ * @param string $text HTML to check
* @param $stderr Boolean: Whether to read result from error status instead of output
* @param &$retval int Exit code (-1 on internal error)
* @return mixed String or null
/**
* Begin profiling of a function
- * @param $functionname String: name of the function we will profile
+ * @param string $functionname name of the function we will profile
*/
function wfProfileIn( $functionname ) {
global $wgProfiler;
/**
* Stop profiling of a function
- * @param $functionname String: name of the function we have profiled
+ * @param string $functionname name of the function we have profiled
*/
function wfProfileOut( $functionname = 'missing' ) {
global $wgProfiler;
/**
* Recursive function the format the current profiling array into a tree
*
- * @param $stack array profiling array
+ * @param array $stack profiling array
* @return array
*/
function remapCallTree( $stack ) {
* Get the initial time of the request, based either on $wgRequestTime or
* $wgRUstart. Will return null if not able to find data.
*
- * @param $metric string|false: metric to use, with the following possibilities:
+ * @param string|false $metric metric to use, with the following possibilities:
* - user: User CPU time (without system calls)
* - cpu: Total CPU time (user and system calls)
* - wall (or any other string): elapsed time
* Get the initial time of the request, based either on $wgRequestTime or
* $wgRUstart. Will return null if not able to find data.
*
- * @param $metric string|false: metric to use, with the following possibilities:
+ * @param string|false $metric metric to use, with the following possibilities:
* - user: User CPU time (without system calls)
* - cpu: Total CPU time (user and system calls)
* - wall (or any other string): elapsed time
/**
* Add an entry in the debug log file
*
- * @param $s String to output
+ * @param string $s to output
*/
function debug( $s ) {
if( defined( 'MW_COMPILED' ) || function_exists( 'wfDebug' ) ) {
* requests its own information. This sacrifice of modularity yields a substantial
* performance improvement.
*
- * @param $modules Array: List of module names to preload information for
+ * @param array $modules List of module names to preload information for
* @param $context ResourceLoaderContext: Context to load the information within
*/
public function preloadModuleInfo( array $modules, ResourceLoaderContext $context ) {
* If $data is empty, only contains whitespace or the filter was unknown,
* $data is returned unmodified.
*
- * @param $filter String: Name of filter to run
- * @param $data String: Text to filter, such as JavaScript or CSS text
+ * @param string $filter Name of filter to run
+ * @param string $data Text to filter, such as JavaScript or CSS text
* @return String: Filtered data, or a comment containing an error message
*/
protected function filter( $filter, $data ) {
* Registers a module with the ResourceLoader system.
*
* @param $name Mixed: Name of module as a string or List of name/object pairs as an array
- * @param $info array Module info array. For backwards compatibility with 1.17alpha,
+ * @param array $info Module info array. For backwards compatibility with 1.17alpha,
* this may also be a ResourceLoaderModule object. Optional when using
* multiple-registration calling style.
* @throws MWException: If a duplicate module registration is attempted
* 'loadScript': URL (either fully-qualified or protocol-relative) of load.php for this source
*
* @param $id Mixed: source ID (string), or array( id1 => props1, id2 => props2, ... )
- * @param $properties Array: source properties
+ * @param array $properties source properties
* @throws MWException
*/
public function addSource( $id, $properties = null) {
* If the given framework id is unknkown, or if the in-object variable is not an array,
* then it will return an empty array.
*
- * @param $framework String: Optional. Get only the test module names for one
+ * @param string $framework Optional. Get only the test module names for one
* particular framework.
* @return Array
*/
/**
* Get the ResourceLoaderModule object for a given module name.
*
- * @param $name String: Module name
+ * @param string $name Module name
* @return ResourceLoaderModule if module has been registered, null otherwise
*/
public function getModule( $name ) {
/**
* Send content type and last modified headers to the client.
* @param $context ResourceLoaderContext
- * @param $mtime string TS_MW timestamp to use for last-modified
- * @param $error bool Whether there are commented-out errors in the response
+ * @param string $mtime TS_MW timestamp to use for last-modified
+ * @param bool $error Whether there are commented-out errors in the response
* @return void
*/
protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime, $errors ) {
* If there's an If-Modified-Since header, respond with a 304 appropriately
* and clear out the output buffer. If the client cache is too old then do nothing.
* @param $context ResourceLoaderContext
- * @param $mtime string The TS_MW timestamp to check the header against
+ * @param string $mtime The TS_MW timestamp to check the header against
* @return bool True iff 304 header sent and output handled
*/
protected function tryRespondLastModified( ResourceLoaderContext $context, $mtime ) {
* Generates code for a response
*
* @param $context ResourceLoaderContext: Context in which to generate a response
- * @param $modules Array: List of module objects keyed by module name
- * @param $missing Array: List of unavailable modules (optional)
+ * @param array $modules List of module objects keyed by module name
+ * @param array $missing List of unavailable modules (optional)
* @return String: Response data
*/
public function makeModuleResponse( ResourceLoaderContext $context,
* Returns JS code to call to mw.loader.implement for a module with
* given properties.
*
- * @param $name string Module name
+ * @param string $name Module name
* @param $scripts Mixed: List of URLs to JavaScript files or String of JavaScript code
* @param $styles Mixed: Array of CSS strings keyed by media type, or an array of lists of URLs to
* CSS files keyed by media type
* Combines an associative array mapping media type to CSS into a
* single stylesheet with "@media" blocks.
*
- * @param $stylePairs Array: Array keyed by media type containing (arrays of) CSS strings.
+ * @param array $stylePairs Array keyed by media type containing (arrays of) CSS strings.
*
* @return Array
*/
* which will have values corresponding to $name, $version, $dependencies
* and $group as supplied.
*
- * @param $name String: Module name
+ * @param string $name Module name
* @param $version Integer: Module version number as a timestamp
- * @param $dependencies Array: List of module names on which this module depends
- * @param $group String: Group which the module is in.
- * @param $source String: Source of the module, or 'local' if not foreign.
- * @param $script String: JavaScript code
+ * @param array $dependencies List of module names on which this module depends
+ * @param string $group Group which the module is in.
+ * @param string $source Source of the module, or 'local' if not foreign.
+ * @param string $script JavaScript code
*
* @return string
*/
* ) ):
* Registers modules with the given names and parameters.
*
- * @param $name String: Module name
+ * @param string $name Module name
* @param $version Integer: Module version number as a timestamp
- * @param $dependencies Array: List of module names on which this module depends
- * @param $group String: group which the module is in.
- * @param $source String: source of the module, or 'local' if not foreign
+ * @param array $dependencies List of module names on which this module depends
+ * @param string $group group which the module is in.
+ * @param string $source source of the module, or 'local' if not foreign
*
* @return string
*/
* - ResourceLoader::makeLoaderSourcesScript( array( $id1 => $props1, $id2 => $props2, ... ) );
* Register sources with the given IDs and properties.
*
- * @param $id String: source ID
- * @param $properties Array: source properties (see addSource())
+ * @param string $id source ID
+ * @param array $properties source properties (see addSource())
*
* @return string
*/
* Returns JS code which runs given JS code if the client-side framework is
* present.
*
- * @param $script String: JavaScript code
+ * @param string $script JavaScript code
*
* @return string
*/
* Returns JS code which will set the MediaWiki configuration array to
* the given value.
*
- * @param $configuration Array: List of configuration values keyed by variable name
+ * @param array $configuration List of configuration values keyed by variable name
*
* @return string
*/
*
* For example, array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' )
* becomes 'foo.bar,baz|bar.baz,quux'
- * @param $modules array of module names (strings)
+ * @param array $modules of module names (strings)
* @return string Packed query string
*/
public static function makePackedModulesString( $modules ) {
/**
* Build a load.php URL
- * @param $modules array of module names (strings)
- * @param $lang string Language code
- * @param $skin string Skin name
- * @param $user string|null User name. If null, the &user= parameter is omitted
- * @param $version string|null Versioning timestamp
- * @param $debug bool Whether the request should be in debug mode
- * @param $only string|null &only= parameter
- * @param $printable bool Printable mode
- * @param $handheld bool Handheld mode
- * @param $extraQuery array Extra query parameters to add
+ * @param array $modules of module names (strings)
+ * @param string $lang Language code
+ * @param string $skin Skin name
+ * @param string|null $user User name. If null, the &user= parameter is omitted
+ * @param string|null $version Versioning timestamp
+ * @param bool $debug Whether the request should be in debug mode
+ * @param string|null $only &only= parameter
+ * @param bool $printable Printable mode
+ * @param bool $handheld Handheld mode
+ * @param array $extraQuery Extra query parameters to add
* @return string URL to load.php. May be protocol-relative (if $wgLoadScript is procol-relative)
*/
public static function makeLoaderURL( $modules, $lang, $skin, $user = null, $version = null, $debug = false, $only = null,
* Module names may not contain pipes (|), commas (,) or exclamation marks (!) and can be
* at most 255 bytes.
*
- * @param $moduleName string Module name to check
+ * @param string $moduleName Module name to check
* @return bool Whether $moduleName is a valid module name
*/
public static function isValidModuleName( $moduleName ) {
* Expand a string of the form jquery.foo,bar|jquery.ui.baz,quux to
* an array of module names like array( 'jquery.foo', 'jquery.bar',
* 'jquery.ui.baz', 'jquery.ui.quux' )
- * @param $modules String Packed module name list
+ * @param string $modules Packed module name list
* @return array of module names
*/
public static function expandModuleNames( $modules ) {
/**
* Constructs a new module from an options array.
*
- * @param $options Array: List of options; if not given or empty, an empty module will be
+ * @param array $options List of options; if not given or empty, an empty module will be
* constructed
- * @param $localBasePath String: Base path to prepend to all local paths in $options. Defaults
+ * @param string $localBasePath Base path to prepend to all local paths in $options. Defaults
* to $IP
- * @param $remoteBasePath String: Base path to prepend to all remote paths in $options. Defaults
+ * @param string $remoteBasePath Base path to prepend to all remote paths in $options. Defaults
* to $wgScriptPath
*
* Below is a description for the $options array:
/**
* Collates file paths by option (where provided).
*
- * @param $list Array: List of file paths in any combination of index/path
+ * @param array $list List of file paths in any combination of index/path
* or path/options pairs
- * @param $option String: option name
+ * @param string $option option name
* @param $default Mixed: default value if the option isn't set
* @return Array: List of file paths, collated by $option
*/
/**
* Gets a list of element that match a key, optionally using a fallback key.
*
- * @param $list Array: List of lists to select from
- * @param $key String: Key to look for in $map
- * @param $fallback String: Key to look for in $list if $key doesn't exist
+ * @param array $list List of lists to select from
+ * @param string $key Key to look for in $map
+ * @param string $fallback Key to look for in $list if $key doesn't exist
* @return Array: List of elements from $map which matched $key or $fallback,
* or an empty list in case of no match
*/
/**
* Gets the contents of a list of JavaScript files.
*
- * @param $scripts Array: List of file paths to scripts to read, remap and concetenate
+ * @param array $scripts List of file paths to scripts to read, remap and concetenate
* @throws MWException
* @return String: Concatenated and remapped JavaScript data from $scripts
*/
/**
* Gets the contents of a list of CSS files.
*
- * @param $styles Array: List of media type/list of file paths pairs, to read, remap and
+ * @param array $styles List of media type/list of file paths pairs, to read, remap and
* concetenate
*
* @param $flip bool
*
* This method can be used as a callback for array_map()
*
- * @param $path String: File path of style file to read
+ * @param string $path File path of style file to read
* @param $flip bool
*
* @return String: CSS data in script file
* Set this module's name. This is called by ResourceLoader::register()
* when registering the module. Other code should not call this.
*
- * @param $name String: Name
+ * @param string $name Name
*/
public function setName( $name ) {
$this->name = $name;
}
/**
- * Set this module's origin. This is called by ResourceLodaer::register()
+ * Set this module's origin. This is called by ResourceLoader::register()
* when registering the module. Other code should not call this.
*
- * @param $origin Int origin
+ * @param int $origin origin
*/
public function setOrigin( $origin ) {
$this->origin = $origin;
* Get the files this module depends on indirectly for a given skin.
* Currently these are only image files referenced by the module's CSS.
*
- * @param $skin String: Skin name
+ * @param string $skin Skin name
* @return Array: List of files
*/
public function getFileDependencies( $skin ) {
/**
* Set preloaded file dependency information. Used so we can load this
* information for all modules at once.
- * @param $skin String: Skin name
- * @param $deps Array: Array of file names
+ * @param string $skin Skin name
+ * @param array $deps Array of file names
*/
public function setFileDependencies( $skin, $deps ) {
$this->fileDeps[$skin] = $deps;
/**
* Get the last modification timestamp of the message blob for this
* module in a given language.
- * @param $lang String: Language code
+ * @param string $lang Language code
* @return Integer: UNIX timestamp, or 0 if the module doesn't have messages
*/
public function getMsgBlobMtime( $lang ) {
/**
* Set a preloaded message blob last modification timestamp. Used so we
* can load this information for all modules at once.
- * @param $lang String: Language code
+ * @param string $lang Language code
* @param $mtime Integer: UNIX timestamp or 0 if there is no such blob
*/
public function setMsgBlobMtime( $lang, $mtime ) {
/**
* Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist
* but returns 1 instead.
- * @param $filename string File name
+ * @param string $filename File name
* @return int UNIX timestamp, or 1 if the file doesn't exist
*/
protected static function safeFilemtime( $filename ) {
* Set the visibility for the revisions in this list. Logging and
* transactions are done here.
*
- * @param $params array Associative array of parameters. Members are:
+ * @param array $params Associative array of parameters. Members are:
* value: The integer value to set the visibility to
* comment: The log comment.
* @return Status
/**
* Record a log entry on the action
- * @param $params array Associative array of parameters:
+ * @param array $params Associative array of parameters:
* newBits: The new value of the *_deleted bitfield
* oldBits: The old value of the *_deleted bitfield.
* title: The target title
/**
* Get log parameter array.
- * @param $params array Associative array of log parameters, same as updateLog()
+ * @param array $params Associative array of log parameters, same as updateLog()
* @return array
*/
public function getLogParams( $params ) {
* Checks for a change in the bitfield for a certain option and updates the
* provided array accordingly.
*
- * @param $desc String: description to add to the array if the option was
+ * @param string $desc description to add to the array if the option was
* enabled / disabled.
* @param $field Integer: the bitmask describing the single option.
* @param $diff Integer: the xor of the old and new bitfields.
* @param $new Integer: the new bitfield
- * @param $arr Array: the array to update.
+ * @param array $arr the array to update.
*/
protected static function checkItem( $desc, $field, $diff, $new, &$arr ) {
if( $diff & $field ) {
* If title searches are not supported or disabled, return null.
* STUB
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return SearchResultSet
*/
function searchText( $term ) {
* If title searches are not supported or disabled, return null.
* STUB
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return SearchResultSet
*/
function searchTitle( $term ) {
* on text to be used for searching or updating search index.
* Default implementation does nothing (simply returns $string).
*
- * @param $string string: String to process
+ * @param string $string String to process
* @return string
*/
public function normalizeText( $string ) {
}
/**
- * @param $terms Array: terms to highlight
+ * @param array $terms terms to highlight
* @return String: highlighted text snippet, null (and not '') if not supported
*/
function getTextSnippet( $terms ) {
}
/**
- * @param $terms Array: terms to highlight
+ * @param array $terms terms to highlight
* @return String: highlighted title, '' if not supported
*/
function getTitleSnippet( $terms ) {
}
/**
- * @param $terms Array: terms to highlight
+ * @param array $terms terms to highlight
* @return String: highlighted redirect name (redirect to this page), '' if none or not supported
*/
function getRedirectSnippet( $terms ) {
* Default implementation of wikitext highlighting
*
* @param $text String
- * @param $terms Array: terms to highlight (unescaped)
+ * @param array $terms terms to highlight (unescaped)
* @param $contextlines Integer
* @param $contextchars Integer
* @return String
/**
* Split text into lines and add it to extracts array
*
- * @param $extracts Array: index -> $line
+ * @param array $extracts index -> $line
* @param $count Integer
* @param $text String
*/
/**
* Search extracts for a pattern, and return snippets
*
- * @param $pattern String: regexp for matching lines
- * @param $extracts Array: extracts to search
+ * @param string $pattern regexp for matching lines
+ * @param array $extracts extracts to search
* @param $linesleft Integer: number of extracts to make
* @param $contextchars Integer: length of snippet
- * @param $out Array: map for highlighted snippets
- * @param $offsets Array: map of starting points of snippets
+ * @param array $out map for highlighted snippets
+ * @param array $offsets map of starting points of snippets
* @protected
*/
function process( $pattern, $extracts, &$linesleft, &$contextchars, &$out, &$offsets ) {
/**
* Perform a full text search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return MssqlSearchResultSet
* @access public
*/
/**
* Perform a title-only search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return MssqlSearchResultSet
* @access public
*/
/**
* Perform a full text search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return MySQLSearchResultSet
*/
function searchText( $term ) {
/**
* Perform a title-only search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return MySQLSearchResultSet
*/
function searchTitle( $term ) {
/**
* Perform a full text search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return SqlSearchResultSet
*/
function searchText( $term ) {
/**
* Perform a title-only search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return SqlSearchResultSet
*/
function searchTitle( $term ) {
* Currently searches a page's current title (page.page_title) and
* latest revision article text (pagecontent.old_text)
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return PostgresSearchResultSet
*/
function searchTitle( $term ) {
/**
* Perform a full text search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return SqliteSearchResultSet
*/
function searchText( $term ) {
/**
* Perform a title-only search query and return a result set.
*
- * @param $term String: raw search term
+ * @param string $term raw search term
* @return SqliteSearchResultSet
*/
function searchTitle( $term ) {
*
* @since 1.21
*
- * @param String $title the target page's title, in normalized form.
+ * @param string $title the target page's title, in normalized form.
*
* @return String
*/
/**
* @param $context IContextSource
* @param $group null Unused
- * @param $par string Parameter passed to the page
+ * @param string $par Parameter passed to the page
*/
function __construct( IContextSource $context = null, $group = null, $par = null ) {
global $wgActiveUserDays;
$conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0'; // don't show hidden names
}
$conds[] = 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' );
- $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
+ $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes(
+ $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
if( $this->requestedUser != '' ) {
$conds[] = 'rc_user_text >= ' . $dbr->addQuotes( $this->requestedUser );
}
- $query = array(
- 'tables' => array( 'recentchanges', 'user', 'ipblocks' ),
- 'fields' => array( 'user_name' => 'rc_user_text', // inheritance
+ return array(
+ 'tables' => array( 'recentchanges', 'ipblocks' ),
+ 'fields' => array(
+ 'user_name' => 'rc_user_text', // for Pager inheritance
'rc_user_text', // for Pager
- 'user_id',
+ 'user_id' => 'rc_user',
'recentedits' => 'COUNT(*)',
'ipb_deleted' => 'MAX(ipb_deleted)'
),
'GROUP BY' => array( 'rc_user_text', 'user_id' ),
'USE INDEX' => array( 'recentchanges' => 'rc_user_text' )
),
- 'join_conds' => array(
- 'user' => array( 'INNER JOIN', 'rc_user_text=user_name' ),
+ 'join_conds' => array( // check for suppression blocks
'ipblocks' => array( 'LEFT JOIN', array(
- 'user_id=ipb_user',
- 'ipb_auto' => 0
+ 'rc_user=ipb_user',
+ 'ipb_auto' => 0 # avoid duplicate blocks
)),
),
'conds' => $conds
);
- return $query;
}
function formatRow( $row ) {
}
}
+ protected function getGroupName() {
+ return 'users';
+ }
}
}
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
/**
/**
* Constructor
*
- * @param $name string: name of the special page, as seen in links and URLs (default: 'Allpages')
+ * @param string $name name of the special page, as seen in links and URLs (default: 'Allpages')
*/
function __construct( $name = 'Allpages' ) {
parent::__construct( $name );
/**
* Entry point : initialise variables and call subfunctions.
*
- * @param $par String: becomes "FOO" when called like Special:Allpages/FOO (default NULL)
+ * @param string $par becomes "FOO" when called like Special:Allpages/FOO (default NULL)
*/
function execute( $par ) {
global $wgContLang;
* HTML for the top form
*
* @param $namespace Integer: a namespace constant (default NS_MAIN).
- * @param $from String: dbKey we are starting listing at.
- * @param $to String: dbKey we are ending listing at.
- * @param $hideredirects Bool: dont show redirects (default FALSE)
+ * @param string $from dbKey we are starting listing at.
+ * @param string $to dbKey we are ending listing at.
+ * @param bool $hideredirects dont show redirects (default FALSE)
* @return string
*/
function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
/**
* @param $namespace Integer (default NS_MAIN)
- * @param $from String: list all pages from this name
- * @param $to String: list all pages to this name
- * @param $hideredirects Bool: dont show redirects (default FALSE)
+ * @param string $from list all pages from this name
+ * @param string $to list all pages to this name
+ * @param bool $hideredirects dont show redirects (default FALSE)
*/
function showToplevel( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
$output = $this->getOutput();
/**
* Show a line of "ABC to DEF" ranges of articles
*
- * @param $inpoint String: lower limit of pagenames
- * @param $outpoint String: upper limit of pagenames
+ * @param string $inpoint lower limit of pagenames
+ * @param string $outpoint upper limit of pagenames
* @param $namespace Integer (Default NS_MAIN)
- * @param $hideredirects Bool: dont show redirects (default FALSE)
+ * @param bool $hideredirects dont show redirects (default FALSE)
* @return string
*/
function showline( $inpoint, $outpoint, $namespace = NS_MAIN, $hideredirects ) {
/**
* @param $namespace Integer (Default NS_MAIN)
- * @param $from String: list all pages from this name (default FALSE)
- * @param $to String: list all pages to this name (default FALSE)
- * @param $hideredirects Bool: dont show redirects (default FALSE)
+ * @param string $from list all pages from this name (default FALSE)
+ * @param string $to list all pages to this name (default FALSE)
+ * @param bool $hideredirects dont show redirects (default FALSE)
*/
function showChunk( $namespace = NS_MAIN, $from = false, $to = false, $hideredirects = false ) {
global $wgContLang;
/**
* @param $ns Integer: the namespace of the article
- * @param $text String: the name of the article
+ * @param string $text the name of the article
* @return array( int namespace, string dbkey, string pagename ) or NULL on error
*/
protected function getNamespaceKeyAndText( $ns, $text ) {
return null;
}
}
+
+ protected function getGroupName() {
+ return 'pages';
+ }
}
);
return $this->getLanguage()->specialList( $link, htmlspecialchars( $d ) );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
/**
* If the user has already been blocked with similar settings, load that block
* and change the defaults for the form fields to match the existing settings.
- * @param $fields Array HTMLForm descriptor array
+ * @param array $fields HTMLForm descriptor array
* @return Bool whether fields were altered (that is, whether the target is
* already blocked)
*/
/**
* Determine the target of the block, and the type of target
* TODO: should be in Block.php?
- * @param $par String subpage parameter passed to setup, or data value from
+ * @param string $par subpage parameter passed to setup, or data value from
* the HTMLForm
* @param $request WebRequest optionally try and get data from a request too
* @return array( User|string|null, Block::TYPE_ constant|null )
* Validate a block target.
*
* @since 1.21
- * @param String $value Block target to check
+ * @param string $value Block target to check
* @param User $user Performer of the block
* @return Status
*/
/**
* Convert a submitted expiry time, which may be relative ("2 weeks", etc) or absolute
* ("24 May 2034", etc), into an absolute timestamp we can put into the database.
- * @param $expiry String: whatever was typed into the form
+ * @param string $expiry whatever was typed into the form
* @return String: timestamp or "infinity" string for the DB implementation
*/
public static function parseExpiryInput( $expiry ) {
/**
* Return a comma-delimited list of "flags" to be passed to the log
* reader for this block, to provide more information in the logs
- * @param $data Array from HTMLForm data
+ * @param array $data from HTMLForm data
* @param $type Block::TYPE_ constant (USER, RANGE, or IP)
* @return string
*/
$out->setPageTitle( $this->msg( 'blockipsuccesssub' ) );
$out->addWikiMsg( 'blockipsuccesstext', wfEscapeWikiText( $this->target ) );
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
# BC @since 1.18
/**
* Main execution point
*
- * @param $par String title fragment
+ * @param string $par title fragment
*/
public function execute( $par ) {
$this->setHeaders();
$out->addHTML( Html::rawElement( 'ul', array( 'class' => 'mw-ipblocklist-otherblocks' ), $list ) . "\n" );
}
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
class BlockListPager extends TablePager {
$this->getOutput()->addWikiMsg( 'proxyblocksuccess' );
}
+
+ protected function getGroupName() {
+ return 'other';
+ }
}
/**
* Show the special page
*
- * @param $isbn string ISBN passed as a subpage parameter
+ * @param string $isbn ISBN passed as a subpage parameter
*/
public function execute( $isbn ) {
$this->setHeaders();
/**
* Returns whether a given ISBN (10 or 13) is valid. True indicates validity.
- * @param $isbn string ISBN passed for check
+ * @param string $isbn ISBN passed for check
* @return bool
*/
public static function isValidISBN( $isbn ) {
/**
* Trim ISBN and remove characters which aren't required
*
- * @param $isbn string Unclean ISBN
+ * @param string $isbn Unclean ISBN
* @return string
*/
private static function cleanIsbn( $isbn ) {
/**
* Format a book source list item
*
- * @param $label string Book source label
- * @param $url string Book source URL
+ * @param string $label Book source label
+ * @param string $url Book source URL
* @return string
*/
private function makeListItem( $label, $url ) {
$url = str_replace( '$1', $this->isbn, $url );
return '<li><a href="' . htmlspecialchars( $url ) . '" class="external">' . htmlspecialchars( $label ) . '</a></li>';
}
+
+ protected function getGroupName() {
+ return 'other';
+ }
}
$out .= " {$arr} {$to}";
return $out;
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
Html::closeElement( 'div' )
);
}
+
+ protected function getGroupName() {
+ return 'pages';
+ }
}
/**
return $status->value;
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
$user->saveSettings();
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
}
return true;
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
* Attempt to confirm the user's email address and show success or failure
* as needed; if successful, take the user to log in
*
- * @param $code string Confirmation code
+ * @param string $code Confirmation code
*/
function attemptConfirm( $code ) {
$user = User::newFromConfirmationCode( $code );
* Attempt to invalidate the user's email address and show success or failure
* as needed; if successful, link to main page
*
- * @param $code string Confirmation code
+ * @param string $code Confirmation code
*/
function attemptInvalidate( $code ) {
$user = User::newFromConfirmationCode( $code );
Xml::closeElement( 'form' );
return $form;
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
/**
* This method basically executes the exact same code as the parent class, though with
* a hook added, to allow extentions to add additional queries.
*
- * @param $offset String: index offset, inclusive
+ * @param string $offset index offset, inclusive
* @param $limit Integer: exact query limit
* @param $descending Boolean: query direction, false for ascending, true for descending
* @return ResultWrapper
$result = array();
// loop all results and collect them in an array
- foreach ( $data as $j => $query ) {
+ foreach ( $data as $query ) {
foreach ( $query as $i => $row ) {
// use index column as key, allowing us to easily sort in PHP
$result[$row->{$this->getIndexField()} . "-$i"] = $row;
return array( 'page_title' );
}
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
* Special page "deleted user contributions".
* Shows a list of the deleted contributions of a user.
*
- * @param $par String: (optional) user name of the user for which to show the contributions
+ * @param string $par (optional) user name of the user for which to show the contributions
*/
function execute( $par ) {
global $wgQueryPageDefaultLimit;
/**
* Generates the namespace selector form with hidden attributes.
- * @param $options Array: the options to be included.
+ * @param array $options the options to be included.
* @return string
*/
function getForm( $options ) {
Xml::closeElement( 'form' );
return $f;
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
return "$from $edit $arr $to";
}
+
+ protected function getGroupName() {
+ return 'pages';
+ }
}
return( "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}" );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
* $titles can be an array of strings or Title objects; the former
* is preferred, since Titles are very memory-heavy
*
- * @param $titles array of strings, or Title objects
+ * @param array $titles of strings, or Title objects
* @param $output String
*/
private function showTitles( $titles, &$output ) {
*
* @param Title $title
* @param int $namespace
- * @param String $dbKey
+ * @param string $dbKey
* @return bool: Whether this item is valid
*/
private function checkTitle( $title, $namespace, $dbKey ) {
* $titles can be an array of strings or Title objects; the former
* is preferred, since Titles are very memory-heavy
*
- * @param $titles Array of strings, or Title objects
+ * @param array $titles of strings, or Title objects
*/
private function watchTitles( $titles ) {
$dbw = wfGetDB( DB_MASTER );
* $titles can be an array of strings or Title objects; the former
* is preferred, since Titles are very memory-heavy
*
- * @param $titles Array of strings, or Title objects
+ * @param array $titles of strings, or Title objects
*/
private function unwatchTitles( $titles ) {
$dbw = wfGetDB( DB_MASTER );
* form is open (bug 32126), but we know that invalid items will
* be harmless so we can override it here.
*
- * @param $value String the value the field was submitted with
- * @param $alldata Array the data collected from the form
+ * @param string $value the value the field was submitted with
+ * @param array $alldata the data collected from the form
* @return Mixed Bool true on success, or String error to display.
*/
function validate( $value, $alldata ) {
/**
* Validate target User
*
- * @param $target String: target user name
+ * @param string $target target user name
* @return User object on success or a string on error
*/
public static function getTarget( $target ) {
* Check whether a user is allowed to send email
*
* @param $user User object
- * @param $editToken String: edit token
+ * @param string $editToken edit token
* @return null on success or string on error
*/
public static function getPermissionsError( $user, $editToken ) {
/**
* Form to ask for target user name.
*
- * @param $name String: user name submitted.
+ * @param string $name user name submitted.
* @return String: form asking for user name.
*/
protected function userForm( $name ) {
return $status;
}
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
/**
* Do the actual page exporting
*
- * @param $page String: user input on what page(s) to export
+ * @param string $page user input on what page(s) to export
* @param $history Mixed: one of the WikiExporter history export constants
* @param $list_authors Boolean: Whether to add distinct author list (when
* not returning full history)
return $pageSet;
}
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
return $this->getLanguage()->specialList( $plink, $nlink );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
/**
*
- * @param $dupes Array of File objects
+ * @param array $dupes of File objects
*/
function showList( $dupes ) {
$html = array();
# Create the input form
$out->addHTML(
Xml::openElement( 'form', array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => $wgScript ) ) .
- Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
Xml::openElement( 'fieldset' ) .
Xml::element( 'legend', null, $this->msg( 'fileduplicatesearch-legend' )->text() ) .
Xml::inputLabel( $this->msg( 'fileduplicatesearch-filename' )->text(), 'filename', 'filename', 50, $this->filename ) . ' ' .
return "$plink . . $user . . $time";
}
+
+ protected function getGroupName() {
+ return 'media';
+ }
}
Html::closeElement( 'form' )
);
}
+
+ protected function getGroupName() {
+ return 'media';
+ }
}
);
}
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
/**
* Function to wrap the summary.
* It must be given a valid state as a second parameter or an exception will
* be thrown.
- * @param $html String: The raw HTML.
- * @param $state String: State, one of 'noframework', 'unknownframework' or 'frameworkfound'
+ * @param string $html The raw HTML.
+ * @param string $state State, one of 'noframework', 'unknownframework' or 'frameworkfound'
* @throws MWException
* @return string
*/
// $wgJavaScriptTestConfig in DefaultSettings.php
$out->addJsConfigVars( 'QUnitTestSwarmInjectJSPath', $wgJavaScriptTestConfig['qunit']['testswarm-injectjs'] );
}
+
+ protected function getGroupName() {
+ return 'other';
+ }
}
}
function execute( $par ) {
- global $wgUrlProtocols, $wgMiserMode;
+ global $wgUrlProtocols, $wgMiserMode, $wgScript;
$this->setHeaders();
$this->outputHeader();
'<nowiki>' . $this->getLanguage()->commaList( $protocols_list ) . '</nowiki>',
count( $protocols_list )
);
- $s = Xml::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $GLOBALS['wgScript'] ) ) .
- Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
- '<fieldset>' .
- Xml::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) .
- Xml::inputLabel( $this->msg( 'linksearch-pat' )->text(), 'target', 'target', 50, $target ) . ' ';
+ $s = Html::openElement( 'form', array( 'id' => 'mw-linksearch-form', 'method' => 'get', 'action' => $wgScript ) ) . "\n" .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
+ Html::openElement( 'fieldset' ) . "\n" .
+ Html::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) . "\n" .
+ Xml::inputLabel( $this->msg( 'linksearch-pat' )->text(), 'target', 'target', 50, $target ) . "\n";
if ( !$wgMiserMode ) {
$s .= Html::namespaceSelector(
array(
)
);
}
- $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) .
- '</fieldset>' .
- Xml::closeElement( 'form' );
+ $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) . "\n" .
+ Html::closeElement( 'fieldset' ) . "\n" .
+ Html::closeElement( 'form' ) . "\n";
$out->addHTML( $s );
if( $target != '' ) {
function getOrderFields() {
return array();
}
+
+ protected function getGroupName() {
+ return 'redirects';
+ }
}
}
$this->getOutput()->addHTML( $html );
}
+
+ protected function getGroupName() {
+ return 'media';
+ }
}
/**
/**
* Create a user-readable list of permissions from the given array.
*
- * @param $permissions Array of permission => bool (from $wgGroupPermissions items)
- * @param $revoke Array of permission => bool (from $wgRevokePermissions items)
- * @param $add Array of groups this group is allowed to add or true
- * @param $remove Array of groups this group is allowed to remove or true
- * @param $addSelf Array of groups this group is allowed to add to self or true
- * @param $removeSelf Array of group this group is allowed to remove from self or true
+ * @param array $permissions of permission => bool (from $wgGroupPermissions items)
+ * @param array $revoke of permission => bool (from $wgRevokePermissions items)
+ * @param array $add of groups this group is allowed to add or true
+ * @param array $remove of groups this group is allowed to remove or true
+ * @param array $addSelf of groups this group is allowed to add to self or true
+ * @param array $removeSelf of group this group is allowed to remove from self or true
* @return string List of all granted permissions, separated by comma separator
*/
private function formatPermissions( $permissions, $revoke, $add, $remove, $addSelf, $removeSelf ) {
return '<ul><li>' . implode( "</li>\n<li>", $r ) . '</li></ul>';
}
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
return "<del>$rd_link</del>";
}
}
+
+ protected function getGroupName() {
+ return 'pages';
+ }
}
/**
* @param $context IContextSource
- * @param $par array (Default null)
+ * @param array $par (Default null)
* @param $including boolean Whether this page is being transcluded in
* another page
*/
/**
* @return string
*/
- function getPageHeader( ) {
+ function getPageHeader() {
global $wgScript;
list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
/**
* Format a link to a group description page
*
- * @param $group String: group name
- * @param $username String Username
+ * @param string $group group name
+ * @param string $username Username
* @return string
*/
protected static function buildGroupLink( $group, $username ) {
/**
* Show the special page
*
- * @param $par string (optional) A group to list users from
+ * @param string $par (optional) A group to list users from
*/
public function execute( $par ) {
$this->setHeaders();
$this->getOutput()->addHTML( $s );
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
$out->addSubtitle( $this->msg( 'lockdbsuccesssub' ) );
$out->addWikiMsg( 'lockdbsuccesstext' );
}
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
$this->getOutput()->addHTML( $page->getDescription()->parseAsBlock() );
}
+ protected function getGroupName() {
+ return 'changes';
+ }
}
return array( 'page_title' );
}
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
function sortDescending() {
return true;
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
);
return in_array( $type, $types );
}
+
+ protected function getGroupName() {
+ return 'media';
+ }
}
'<fieldset>' .
Xml::element( 'legend', array(),
$this->msg( 'mergehistory-box' )->text() ) .
- Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
Html::hidden( 'submitted', '1' ) .
Html::hidden( 'mergepoint', $this->mTimestamp ) .
Xml::openElement( 'table' ) .
return true;
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
class MergeHistoryPager extends ReverseChronologicalPager {
return $this->getLanguage()->specialList( $link, $count );
}
+
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
return $this->msg( 'nimagelinks' )->numParams( $row->value )->escaped() . '<br />';
}
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
return $this->getLanguage()->specialList( $link, $count );
}
+
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
* Make a link to "what links here" for the specified title
*
* @param $title Title being queried
- * @param $caption String: text to display on the link
+ * @param string $caption text to display on the link
* @return String
*/
function makeWlhLink( $title, $caption ) {
$this->msg( 'nlinks' )->numParams( $result->value )->escaped() );
return $this->getLanguage()->specialList( $link, $wlh );
}
+
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
$nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
return $this->getLanguage()->specialList( $plink, $nlinks );
}
+
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
$label = $this->msg( 'ntransclusions' )->numParams( $result->value )->escaped();
return Linker::link( $wlh, $label );
}
+
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
function sortDescending() {
return true;
}
+
+ protected function getGroupName() {
+ return 'highuse';
+ }
}
/**
* Show the form
*
- * @param $err Array: error messages. Each item is an error message.
+ * @param array $err error messages. Each item is an error message.
* It may either be a string message name or array message name and
* parameters, like the second argument to OutputPage::wrapWikiMsg().
*/
}
$out->addHTML( "</ul>\n" );
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
$this->getOutput()->addHTML( $pager->getNavigationBar() );
}
}
+
+ protected function getGroupName() {
+ return 'changes';
+ }
}
/**
}
return '';
}
+
+ protected function getGroupName() {
+ return 'changes';
+ }
}
/**
}
return $ret;
}
+
+ protected function getGroupName() {
+ return 'pages';
+ }
}
return false;
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
$nv = $this->msg( 'nviews' )->numParams( $result->value )->escaped();
return $this->getLanguage()->specialList( $link, $nv );
}
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
return true;
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
/**
* Entry point : initialise variables and call subfunctions.
- * @param $par String: becomes "FOO" when called like Special:Prefixindex/FOO (default null)
+ * @param string $par becomes "FOO" when called like Special:Prefixindex/FOO (default null)
*/
function execute( $par ) {
global $wgContLang;
/**
* HTML for the top form
* @param $namespace Integer: a namespace constant (default NS_MAIN).
- * @param $from String: dbKey we are starting listing at.
- * @param $hideredirects Bool: hide redirects (default FALSE)
+ * @param string $from dbKey we are starting listing at.
+ * @param bool $hideredirects hide redirects (default FALSE)
* @return string
*/
function namespacePrefixForm( $namespace = NS_MAIN, $from = '', $hideredirects = false ) {
/**
* @param $namespace Integer, default NS_MAIN
* @param $prefix String
- * @param $from String: list all pages from this name (default FALSE)
- * @param $hideredirects Bool: hide redirects (default FALSE)
+ * @param string $from list all pages from this name (default FALSE)
+ * @param bool $hideredirects hide redirects (default FALSE)
*/
function showPrefixChunk( $namespace = NS_MAIN, $prefix, $from = null, $hideredirects = false ) {
global $wgContLang;
$this->getOutput()->addHTML( $out2 . $out . $footer );
}
+
+ protected function getGroupName() {
+ return 'pages';
+ }
}
/**
* @param $namespace Integer
- * @param $type String: restriction type
- * @param $level String: restriction level
- * @param $sizetype String: "min" or "max"
+ * @param string $type restriction type
+ * @param string $level restriction level
+ * @param string $sizetype "min" or "max"
* @param $size Integer
* @param $indefOnly Boolean: only indefinie protection
* @param $cascadeOnly Boolean: only cascading protection
array( 'id' => $this->IdLevel, 'name' => $this->IdLevel ),
implode( "\n", $options ) ) . "</span>";
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
/**
array( 'id' => $this->IdLevel, 'name' => $this->IdLevel ),
implode( "\n", $options ) );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
/**
return $dbr->fetchObject( $res );
}
+
+ protected function getGroupName() {
+ return 'redirects';
+ }
}
/**
* Send output to the OutputPage object, only called if not used feeds
*
- * @param $rows Array of database rows
+ * @param array $rows of database rows
* @param $opts FormOptions
*/
public function webOutput( $rows, $opts ) {
/**
* Filter $rows by categories set in $opts
*
- * @param $rows Array of database rows
+ * @param array $rows of database rows
* @param $opts FormOptions
*/
function filterByCategories( &$rows, FormOptions $opts ) {
* Makes change an option link which carries all the other options
*
* @param $title Title
- * @param $override Array: options to override
- * @param $options Array: current options
+ * @param array $override options to override
+ * @param array $options current options
* @param $active Boolean: whether to show the link in bold
* @return string
*/
'mediawiki.special.recentchanges',
) );
}
+
+ protected function getGroupName() {
+ return 'changes';
+ }
}
if( $ns == NS_CATEGORY && !$showlinkedto ) {
// special handling for categories
- // XXX: should try to make this less klugy
+ // XXX: should try to make this less kludgy
$link_tables = array( 'categorylinks' );
$showlinkedto = true;
} else {
} else {
$this->typeName = $request->getVal( 'type' );
$this->targetObj = Title::newFromText( $request->getText( 'target' ) );
- if ( $this->targetObj && $this->targetObj->isSpecial( 'Log' ) ) {
+ if ( $this->targetObj && $this->targetObj->isSpecial( 'Log' ) && count( $this->ids ) !== 0 ) {
$result = wfGetDB( DB_SLAVE )->select( 'logging',
'log_type',
array( 'log_id' => $this->ids ),
/**
* Put together a rev_deleted bitfield
- * @param $bitPars array extractBitParams() params
- * @param $oldfield int current bitfield
+ * @param array $bitPars extractBitParams() params
+ * @param int $oldfield current bitfield
* @return array
*/
public static function extractBitfield( $bitPars, $oldfield ) {
array( 'value' => $bitfield, 'comment' => $reason )
);
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
/**
* Entry point
*
- * @param $par String or null
+ * @param string $par or null
*/
public function execute( $par ) {
$this->setHeaders();
* Format a single hit result
*
* @param $result SearchResult
- * @param $terms Array: terms to highlight
+ * @param array $terms terms to highlight
*
* @return string
*/
* @param $lastInterwiki String
* @param $terms Array
* @param $query String
- * @param $customCaptions Array: iw prefix -> caption
+ * @param array $customCaptions iw prefix -> caption
*
* @return string
*/
/**
* Generates the power search box at [[Special:Search]]
*
- * @param $term String: search term
+ * @param string $term search term
* @param $opts array
* @return String: HTML form
*/
* Make a search link with some target namespaces
*
* @param $term String
- * @param $namespaces Array ignored
- * @param $label String: link's text
- * @param $tooltip String: link's tooltip
- * @param $params Array: query string parameters
+ * @param array $namespaces ignored
+ * @param string $label link's text
+ * @param string $tooltip link's tooltip
+ * @param array $params query string parameters
* @return String: HTML fragment
*/
protected function makeSearchLink( $term, $namespaces, $label, $tooltip, $params = array() ) {
/**
* Check if query starts with image: prefix
*
- * @param $term String: the string to check
+ * @param string $term the string to check
* @return Boolean
*/
protected function startsWithImage( $term ) {
/**
* Check if query starts with all: prefix
*
- * @param $term String: the string to check
+ * @param string $term the string to check
* @return Boolean
*/
protected function startsWithAll( $term ) {
$this->extraParams[$key] = $value;
}
+ protected function getGroupName() {
+ return 'redirects';
+ }
}
? "${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]"
: "<del>${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]</del>";
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
$groups = array();
foreach ( $pages as $page ) {
if ( $page->isListed() ) {
- $group = SpecialPageFactory::getGroup( $page );
+ $group = $page->getFinalGroupName();
if( !isset( $groups[$group] ) ) {
$groups[$group] = array();
}
Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( $header )->parse() ) .
Xml::closeElement( 'tr' );
}
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
return Xml::tags( 'tr', null, $newRow ) . "\n";
}
+
+ protected function getGroupName() {
+ return 'changes';
+ }
}
return true;
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
);
}
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
return array( 'page_namespace', 'page_title' );
return array( 'page_title' );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
* given title prefix.
* Returns result wrapper with (ar_namespace, ar_title, count) fields.
*
- * @param $prefix String: title prefix
+ * @param string $prefix title prefix
* @return ResultWrapper
*/
public static function listPagesByPrefix( $prefix ) {
* Once restored, the items will be removed from the archive tables.
* The deletion log will be updated with an undeletion notice.
*
- * @param $timestamps Array: pass an empty array to restore all revisions, otherwise list the ones to undelete.
+ * @param array $timestamps pass an empty array to restore all revisions, otherwise list the ones to undelete.
* @param $comment String
* @param $fileVersions Array
* @param $unsuppress Boolean
* to the cur/old tables. If the page currently exists, all revisions will
* be stuffed into old, otherwise the most recent will go into cur.
*
- * @param $timestamps Array: pass an empty array to restore all revisions, otherwise list the ones to undelete.
+ * @param array $timestamps pass an empty array to restore all revisions, otherwise list the ones to undelete.
* @param $unsuppress Boolean: remove all ar_deleted/fa_deleted restrictions of seletected revs
*
* @param $comment String
$makepage = false;
# Page already exists. Import the history, and if necessary
# we'll update the latest revision field in the record.
- $newid = 0;
- $pageId = $page->page_id;
+
$previousRevId = $page->page_latest;
+
# Get the time span of this page
$previousTimestamp = $dbw->selectField( 'revision', 'rev_timestamp',
array( 'rev_id' => $previousRevId ),
$revision = Revision::newFromArchiveRow( $row,
array(
'title' => $article->getTitle(), // used to derive default content model
- ) );
-
- $m = $revision->getContentModel();
-
+ )
+ );
$user = User::newFromName( $revision->getRawUserText(), false );
$content = $revision->getContent( Revision::RAW );
'action' => $wgScript ) ) .
Xml::fieldset( $this->msg( 'undelete-search-box' )->text() ) .
Html::hidden( 'title',
- $this->getTitle()->getPrefixedDbKey() ) .
+ $this->getTitle()->getPrefixedDBkey() ) .
Xml::inputLabel( $this->msg( 'undelete-search-prefix' )->text(),
'prefix', 'prefix', 20,
$this->mSearchPrefix ) . ' ' .
Xml::element( 'input', array(
'type' => 'hidden',
'name' => 'target',
- 'value' => $this->mTargetObj->getPrefixedDbKey() ) ) .
+ 'value' => $this->mTargetObj->getPrefixedDBkey() ) ) .
Xml::element( 'input', array(
'type' => 'hidden',
'name' => 'timestamp',
*
* @param $rev Revision
* @param $titleObj Title
- * @param $ts string Timestamp
+ * @param string $ts Timestamp
* @return string
*/
function getPageLink( $rev, $titleObj, $ts ) {
*
* @param $file File
* @param $titleObj Title
- * @param $ts string A timestamp
- * @param $key String: a storage key
+ * @param string $ts A timestamp
+ * @param string $key a storage key
*
* @return String: HTML fragment
*/
$out->addWikiText( '<div class="error">' . $status->getWikiText( 'undelete-error-short', 'undelete-error-long' ) . '</div>' );
}
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
$out->addSubtitle( $this->msg( 'unlockdbsuccesssub' ) );
$out->addWikiMsg( 'unlockdbsuccesstext' );
}
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
$title = Title::makeTitle( NS_CATEGORY, $result->title );
return Linker::link( $title, htmlspecialchars( $title->getText() ) );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
return $this->msg( 'unusedimagestext' )->parseAsBlock();
}
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
function getPageHeader() {
return $this->msg( 'unusedtemplatestext' )->parseAsBlock();
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
return $this->getLanguage()->specialList( $plink, $wlink );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
/**
* Get an UploadForm instance with title and text properly set.
*
- * @param $message String: HTML string to add to the form
- * @param $sessionKey String: session key in case this is a stashed upload
+ * @param string $message HTML string to add to the form
+ * @param string $sessionKey session key in case this is a stashed upload
* @param $hideIgnoreWarning Boolean: whether to hide "ignore warning" check box
* @return UploadForm
*/
* essentially means that UploadBase::VERIFICATION_ERROR and
* UploadBase::EMPTY_FILE should not be passed here.
*
- * @param $message String: HTML message to be passed to mainUploadForm
+ * @param string $message HTML message to be passed to mainUploadForm
*/
protected function showRecoverableUploadError( $message ) {
$sessionKey = $this->mUpload->stashSession();
/**
* Show the upload form with error message, but do not stash the file.
*
- * @param $message string HTML string
+ * @param string $message HTML string
*/
protected function showUploadError( $message ) {
$message = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n" .
/**
* Provides output to the user for a result of UploadBase::verifyUpload
*
- * @param $details Array: result of UploadBase::verifyUpload
+ * @param array $details result of UploadBase::verifyUpload
* @throws MWException
*/
protected function processVerificationError( $details ) {
* Formats a result of UploadBase::getExistsWarning as HTML
* This check is static and can be done pre-upload via AJAX
*
- * @param $exists Array: the result of UploadBase::getExistsWarning
+ * @param array $exists the result of UploadBase::getExistsWarning
* @return String: empty string if there is no warning or an HTML fragment
*/
public static function getExistsWarning( $exists ) {
/**
* Get a list of warnings
*
- * @param $filename String: local filename, e.g. 'file exists', 'non-descriptive filename'
+ * @param string $filename local filename, e.g. 'file exists', 'non-descriptive filename'
* @return Array: list of warning messages
*/
public static function ajaxGetExistsWarning( $filename ) {
$gallery->toHtml() . "</li>\n";
}
+ protected function getGroupName() {
+ return 'media';
+ }
}
/**
/**
* Execute page -- can output a file directly or show a listing of them.
*
- * @param $subPage String: subpage, e.g. in http://example.com/wiki/Special:UploadStash/foo.jpg, the "foo.jpg" part
+ * @param string $subPage subpage, e.g. in http://example.com/wiki/Special:UploadStash/foo.jpg, the "foo.jpg" part
* @return Boolean: success
*/
public function execute( $subPage ) {
* If file available in stash, cats it out to the client as a simple HTTP response.
* n.b. Most sanity checking done in UploadStashLocalFile, so this is straightforward.
*
- * @param $key String: the key of a particular requested file
+ * @param string $key the key of a particular requested file
* @throws HttpError
* @return bool
*/
/**
* Scale a file (probably with a locally installed imagemagick, or similar) and output it to STDOUT.
* @param $file File
- * @param $params array Scaling parameters ( e.g. array( width => '50' ) );
- * @param $flags int Scaling flags ( see File:: constants )
+ * @param array $params Scaling parameters ( e.g. array( width => '50' ) );
+ * @param int $flags Scaling flags ( see File:: constants )
* @throws MWException
* @throws UploadStashFileNotFoundException
* @return boolean success
/**
* Output HTTP response of raw content
* Side effect: writes HTTP response to STDOUT.
- * @param $content String content
- * @param $contentType String mime type
+ * @param string $content content
+ * @param string $contentType mime type
* @throws SpecialUploadStashTooLargeException
* @return bool
*/
* Output headers for streaming
* XXX unsure about encoding as binary; if we received from HTTP perhaps we should use that encoding, concatted with semicolon to mimeType as it usually is.
* Side effect: preps PHP to write headers to STDOUT.
- * @param String $contentType : string suitable for content-type header
- * @param String $size: length in bytes
+ * @param string $contentType : string suitable for content-type header
+ * @param string $size: length in bytes
*/
private static function outputFileHeaders( $contentType, $size ) {
header( "Content-Type: $contentType", true );
/**
* Default action when we don't have a subpage -- just show links to the uploads we have,
* Also show a button to clear stashed files
- * @param $status [optional] Status: the result of processRequest
* @return bool
*/
- private function showUploads( $status = null ) {
- if ( $status === null ) {
- $status = Status::newGood();
- }
-
+ private function showUploads() {
// sets the title, etc.
$this->setHeaders();
$this->outputHeader();
* @return bool
*/
function addNewAccount() {
- global $wgUser, $wgEmailAuthentication, $wgLoginLanguageSelector;
+ global $wgContLang, $wgUser, $wgEmailAuthentication, $wgLoginLanguageSelector;
# Create the account and abort if there's a problem doing so
$status = $this->addNewAccountInternal();
$u = $status->getValue();
- # If we showed up language selection links, and one was in use, be
- # smart (and sensible) and save that language as the user's preference
- if( $wgLoginLanguageSelector && $this->mLanguage ) {
- $u->setOption( 'language', $this->mLanguage );
+ # Only save preferences if the user is not creating an account for someone else.
+ if ( $this->getUser()->isAnon() ) {
+ # If we showed up language selection links, and one was in use, be
+ # smart (and sensible) and save that language as the user's preference
+ if( $wgLoginLanguageSelector && $this->mLanguage ) {
+ $u->setOption( 'language', $this->mLanguage );
+ } else {
+
+ # Otherwise the user's language preference defaults to $wgContLang,
+ # but it may be better to set it to their preferred $wgContLang variant,
+ # based on browser preferences or URL parameters.
+ $u->setOption( 'language', $wgContLang->getPreferredVariant() );
+ }
+ if ( $wgContLang->hasVariants() ) {
+ $u->setOption( 'variant', $wgContLang->getPreferredVariant() );
+ }
}
$out = $this->getOutput();
/**
* Increment the login attempt throttle hit count for the (username,current IP)
* tuple unless the throttle was already reached.
- * @param $username string The user name
+ * @param string $username The user name
* @return Bool|Integer The integer hit count or True if it is already at the limit
*/
public static function incLoginThrottle( $username ) {
/**
* Clear the login attempt throttle hit count for the (username,current IP) tuple.
- * @param $username string The user name
+ * @param string $username The user name
* @return void
*/
public static function clearLoginThrottle( $username ) {
/**
* @param $u User object
* @param $throttle Boolean
- * @param $emailTitle String: message name of email title
- * @param $emailText String: message name of email text
+ * @param string $emailTitle message name of email title
+ * @param string $emailText message name of email text
* @return Status object
*/
function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext' ) {
/**
* Display an "successful action" page.
*
- * @param $title string|Message page's title
+ * @param string|Message $title page's title
* @param $msgname string
* @param $injected_html string
*/
* Create a language selector link for a particular language
* Links back to this page preserving type and returnto
*
- * @param $text string Link text
- * @param $lang string Language code
+ * @param string $text Link text
+ * @param string $lang Language code
* @return string
*/
function makeLanguageSelectorLink( $text, $lang ) {
$query
);
}
+
+ protected function getGroupName() {
+ return 'login';
+ }
}
$out->returnToMain();
}
+
+ protected function getGroupName() {
+ return 'login';
+ }
}
* Save user groups changes in the database.
* Data comes from the editUserGroupsForm() form function
*
- * @param $username String: username to apply changes to.
- * @param $reason String: reason for group change
+ * @param string $username username to apply changes to.
+ * @param string $reason reason for group change
* @return null
*/
function saveUserGroups( $username, $reason = '' ) {
* Save user groups changes in the database.
*
* @param $user User object
- * @param $add Array of groups to add
- * @param $remove Array of groups to remove
- * @param $reason String: reason for group change
+ * @param array $add of groups to add
+ * @param array $remove of groups to remove
+ * @param string $reason reason for group change
* @return Array: Tuple of added, then removed groups
*/
function doSaveUserGroups( $user, $add, $remove, $reason = '' ) {
/**
* Edit user groups membership
- * @param $username String: name of the user.
+ * @param string $username name of the user.
*/
function editUserGroupsForm( $username ) {
$status = $this->fetchUser( $username );
* form will be able to manipulate based on the current user's system
* permissions.
*
- * @param $groups Array: list of groups the given user is in
+ * @param array $groups list of groups the given user is in
* @return Array: Tuple of addable, then removable groups
*/
protected function splitGroups( $groups ) {
* Adds a table with checkboxes where you can select what groups to add/remove
*
* @todo Just pass the username string?
- * @param $usergroups Array: groups the user belongs to
+ * @param array $usergroups groups the user belongs to
* @param $user User a user object
* @return string XHTML table element with checkboxes
*/
}
/**
- * @param $group string: the name of the group to check
+ * @param string $group the name of the group to check
* @return bool Can we add the group?
*/
private function canAdd( $group ) {
$output->addHTML( Xml::element( 'h2', null, $rightsLogPage->getName()->text() ) );
LogEventsList::showLogExtract( $output, 'rights', $user->getUserPage() );
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
/**
* Convert an array of items into a list for display.
*
- * @param $list Array of elements to display
+ * @param array $list of elements to display
* @param $sort Boolean: whether to sort the items in $list
*
* @return String
/**
* Retrieve the revision number of a Subversion working directory.
*
- * @param $dir String: directory of the svn checkout
+ * @param string $dir directory of the svn checkout
*
* @return Integer: revision number as int
*/
}
/**
- * @param $dir String: directory of the git checkout
+ * @param string $dir directory of the git checkout
* @return bool|String sha1 of commit HEAD points to
*/
public static function getGitHeadSha1( $dir ) {
return $out;
}
+ protected function getGroupName() {
+ return 'wiki';
+ }
+
function showEasterEgg() {
$rx = $rp = $xe = '';
$alpha = array( "", "kbQW", "\$\n()" );
$nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
return $this->getLanguage()->specialList( $plink, $nlinks );
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
)
);
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
wfRunHooks( 'WantedPages::getQueryInfo', array( &$this, &$query ) );
return $query;
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
'page_title = tl_title' ) ) )
);
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
$this->customFilters = array();
wfRunHooks( 'SpecialWatchlistFilters', array( $this, &$this->customFilters ) );
foreach( $this->customFilters as $key => $params ) {
- $defaults[$key] = $params['msg'];
+ $defaults[$key] = $params['default'];
}
# Extract variables from the request, falling back to user preferences or
$values['hidePatrolled'] = (int)$request->getBool( 'hidePatrolled', $defaults['hidePatrolled'] );
$values['extended'] = (int)$request->getBool( 'extended', $defaults['extended'] );
foreach( $this->customFilters as $key => $params ) {
- $values[$key] = (int)$request->getBool( $key );
+ $values[$key] = (int)$request->getBool( $key, $defaults[$key] );
}
# Get namespace value, if supplied, and prepare a WHERE fragment
}
ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' );
- wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields ) );
+ wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields, $values ) );
$res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $join_conds );
$numRows = $res->numRows();
return floor( $count / 2 );
}
+
+ protected function getGroupName() {
+ return 'changes';
+ }
}
}
/**
- * @param $level int Recursion level
+ * @param int $level Recursion level
* @param $target Title Target title
- * @param $limit int Number of entries to display
+ * @param int $limit Number of entries to display
* @param $from Title Display from this article ID
* @param $back Title Display from this article ID at backwards scrolling
*/
}
return Xml::fieldset( $this->msg( 'whatlinkshere-filters' )->text(), $this->getLanguage()->pipeList( $links ) );
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
}
return $query;
}
+
+ protected function getGroupName() {
+ return 'maintenance';
+ }
}
$doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
}
?>
- <tr>
+ <tr id="mw-user-domain-section">
<td class="mw-label"><?php $this->msg( 'yourdomainname' ) ?></td>
<td class="mw-input">
<select name="wpDomain" value="<?php $this->text( 'domain' ) ?>"
/**
* Returns true if the user can use this upload module or else a string
* identifying the missing permission.
- * Can be overriden by subclasses.
+ * Can be overridden by subclasses.
*
* @param $user User
* @return bool
/**
* Initialize the path information
- * @param $name string the desired destination name
- * @param $tempPath string the temporary path
- * @param $fileSize int the file size
- * @param $removeTempFile bool (false) remove the temporary file?
+ * @param string $name the desired destination name
+ * @param string $tempPath the temporary path
+ * @param int $fileSize the file size
+ * @param bool $removeTempFile (false) remove the temporary file?
* @throws MWException
*/
public function initializePathInfo( $name, $tempPath, $fileSize, $removeTempFile = false ) {
}
/**
- * @param $srcPath String: the source path
+ * @param string $srcPath the source path
* @return string the real path if it was a virtual URL
*/
function getRealPath( $srcPath ) {
$repo = RepoGroup::singleton()->getLocalRepo();
if ( $repo->isVirtualUrl( $srcPath ) ) {
// @TODO: just make uploads work with storage paths
- // UploadFromStash loads files via virtuals URLs
+ // UploadFromStash loads files via virtual URLs
$tmpFile = $repo->getLocalCopy( $srcPath );
$tmpFile->bind( $this ); // keep alive with $this
wfProfileOut( __METHOD__ );
/**
* Verify the mime type
*
- * @param $mime string representing the mime
+ * @param string $mime representing the mime
* @return mixed true if the file is verified, an array otherwise
*/
protected function verifyMimeType( $mime ) {
/**
* Checks if the mime type of the uploaded file matches the file extension.
*
- * @param $mime String: the mime type of the uploaded file
- * @param $extension String: the filename extension that the file is to be served with
+ * @param string $mime the mime type of the uploaded file
+ * @param string $extension the filename extension that the file is to be served with
* @return Boolean
*/
public static function verifyExtension( $mime, $extension ) {
* potentially harmful. The present implementation will produce false
* positives in some situations.
*
- * @param $file String: pathname to the temporary upload file
- * @param $mime String: the mime type of the file
- * @param $extension String: the extension of the file
+ * @param string $file pathname to the temporary upload file
+ * @param string $mime the mime type of the file
+ * @param string $extension the extension of the file
* @return Boolean: true if the file contains something looking like embedded scripts
*/
public static function detectScript( $file, $mime, $extension ) {
$chunk = trim( $chunk );
- # @todo FIXME: Convert from UTF-16 if necessarry!
+ # @todo FIXME: Convert from UTF-16 if necessary!
wfDebug( __METHOD__ . ": checking for embedded scripts and HTML stuff\n" );
# check for HTML doctype
return true;
}
- # href with embeded svg as target
+ # href with embedded svg as target
if( $stripped == 'href' && preg_match( '!data:[^,]*image/svg[^,]*,!sim', $value ) ) {
wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
return true;
}
- # href with embeded (text/xml) svg as target
+ # href with embedded (text/xml) svg as target
if( $stripped == 'href' && preg_match( '!data:[^,]*text/xml[^,]*,!sim', $value ) ) {
wfDebug( __METHOD__ . ": Found href to embedded svg \"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
return true;
# use set to add href attribute to parent element
if( $strippedElement == 'set' && $stripped == 'attributename' && strpos( $value, 'href' ) !== false ) {
- wfDebug( __METHOD__ . ": Found svg setting href attibute '$value' in uploaded file.\n" );
+ wfDebug( __METHOD__ . ": Found svg setting href attribute '$value' in uploaded file.\n" );
return true;
}
# use set to add a remote / data / script target to an element
if( $strippedElement == 'set' && $stripped == 'to' && preg_match( '!(http|https|data|script):!sim', $value ) ) {
- wfDebug( __METHOD__ . ": Found svg setting attibute to '$value' in uploaded file.\n" );
+ wfDebug( __METHOD__ . ": Found svg setting attribute to '$value' in uploaded file.\n" );
return true;
}
* This relies on the $wgAntivirus and $wgAntivirusSetup variables.
* $wgAntivirusRequired may be used to deny upload if the scan fails.
*
- * @param $file String: pathname to the temporary upload file
+ * @param string $file pathname to the temporary upload file
* @return mixed false if not virus is found, NULL if the scan fails or is disabled,
* or a string containing feedback from the virus scanner if a virus was found.
* If textual feedback is missing but a virus was found, this function returns true.
* Check if a user is the last uploader
*
* @param $user User object
- * @param $img String: image name
+ * @param string $img image name
* @return Boolean
*/
public static function userCanReUpload( User $user, $img ) {
$similarFiles = RepoGroup::singleton()->getLocalRepo()->findFilesByPrefix(
"{$partname}.", 1 );
if ( count( $similarFiles ) ) {
- return array(\r
- 'warning' => 'exists-normalized',\r
- 'file' => $file,\r
- 'normalizedFile' => $similarFiles[0],\r
+ return array(
+ 'warning' => 'exists-normalized',
+ 'file' => $file,
+ 'normalizedFile' => $similarFiles[0],
);
}
*
* @return UploadStashFile stashed file
*/
- public function stashFile() {
+ public function stashFile( User $user = null ) {
// Stash file is the called on creating a new chunk session:
$this->mChunkIndex = 0;
$this->mOffset = 0;
/**
* Add a chunk to the temporary directory
*
- * @param $chunkPath string path to temporary chunk file
- * @param $chunkSize int size of the current chunk
- * @param $offset int offset of current chunk ( mutch match database chunk offset )
+ * @param string $chunkPath path to temporary chunk file
+ * @param int $chunkSize size of the current chunk
+ * @param int $offset offset of current chunk ( mutch match database chunk offset )
* @return Status
*/
public function addChunk( $chunkPath, $chunkSize, $offset ) {
* Get a file and its metadata from the stash.
* The noAuth param is a bit janky but is required for automated scripts which clean out the stash.
*
- * @param $key String: key under which file information is stored
+ * @param string $key key under which file information is stored
* @param $noAuth Boolean (optional) Don't check authentication. Used by maintenance scripts.
* @throws UploadStashFileNotFoundException
* @throws UploadStashNotLoggedInException
/**
* Getter for file metadata.
*
- * @param $key String: key under which file information is stored
+ * @param string $key key under which file information is stored
* @return Array
*/
public function getMetadata ( $key ) {
/**
* Getter for fileProps
*
- * @param $key String: key under which file information is stored
+ * @param string $key key under which file information is stored
* @return Array
*/
public function getFileProps ( $key ) {
/**
* Stash a file in a temp directory and record that we did this in the database, along with other metadata.
*
- * @param $path String: path to file you want stashed
- * @param $sourceType String: the type of upload that generated this file (currently, I believe, 'file' or null)
+ * @param string $path path to file you want stashed
+ * @param string $sourceType the type of upload that generated this file (currently, I believe, 'file' or null)
* @throws UploadStashBadPathException
* @throws UploadStashFileException
* @throws UploadStashNotLoggedInException
/**
* Helper function: do the actual database query to fetch file metadata.
*
- * @param $key String: key
+ * @param string $key key
* @param $readFromDB: constant (default: DB_SLAVE)
* @return boolean
*/
/**
* Helper function: Initialize the UploadStashFile for a given file.
*
- * @param $key String: key under which to store the object
+ * @param string $key key under which to store the object
* @throws UploadStashZeroLengthFileException
* @return bool
*/
* Arguably UnregisteredLocalFile should be handling its own file repo but that class is a bit retarded currently
*
* @param $repo FileRepo: repository where we should find the path
- * @param $path String: path to file
- * @param $key String: key to store the path and any stashed data under
+ * @param string $path path to file
+ * @param string $key key to store the path and any stashed data under
* @throws UploadStashBadPathException
* @throws UploadStashFileNotFoundException
*/
* The actual argument is the result of thumbName although we seem to have
* buggy code elsewhere that expects a boolean 'suffix'
*
- * @param $thumbName String: name of thumbnail (e.g. "120px-123456.jpg" ), or false to just get the path
+ * @param string $thumbName name of thumbnail (e.g. "120px-123456.jpg" ), or false to just get the path
* @return String: path thumbnail should take on filesystem, or containing directory if thumbname is false
*/
public function getThumbPath( $thumbName = false ) {
* We override this because we want to use the pretty url name instead of the
* ugly file name.
*
- * @param $params Array: handler-specific parameters
+ * @param array $params handler-specific parameters
* @param $flags integer Bitfield that supports THUMB_* constants
* @return String: base name for URL, like '120px-12345.jpg', or null if there is no handler
*/
* the thumbnail urls be predictable. However, in our model the URL is not based on the filename
* (that's hidden in the db)
*
- * @param $thumbName String: basename of thumbnail file -- however, we don't want to use the file exactly
+ * @param string $thumbName basename of thumbnail file -- however, we don't want to use the file exactly
* @return String: URL to access thumbnail, or URL with partial path
*/
public function getThumbUrl( $thumbName = false ) {
<?php
/**
* Version of index.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/**
* Resets all of the namespace caches. Mainly used for testing
*/
- public function resetNamespaces( ) {
+ public function resetNamespaces() {
$this->namespaceNames = null;
$this->mNamespaceIds = null;
$this->namespaceAliases = null;
'pdc' => 'Deitsch', # Pennsylvania German
'pdt' => 'Plautdietsch', # Plautdietsch/Mennonite Low German
'pfl' => 'Pälzisch', # Palatinate German
- 'pi' => 'पाळि', # Pali
+ 'pi' => 'पालि', # Pali
'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
'pl' => 'polski', # Polish
'pms' => 'Piemontèis', # Piedmontese
+++ /dev/null
-<?php
-/**
- * Samogitian (Žemaitėška) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Samogitian (Žemaitėška)
- *
- * @ingroup Language
- */
-class LanguageSgs extends Language {
-
- /**
- * @param $count int
- * @param $forms array
- * @return string
- */
- function convertPlural( $count, $forms ) {
- if ( !count( $forms ) ) { return ''; }
- $forms = $this->preConvertPlural( $forms, 4 );
-
- $count = abs( $count );
- if ( $count == 0 || ( $count % 100 === 0 || ( $count % 100 >= 10 && $count % 100 < 20 ) ) ) {
- return $forms[2];
- } elseif ( $count % 10 === 1 ) {
- return $forms[0];
- } elseif ( $count % 10 === 2 ) {
- return $forms[1];
- } else {
- return $forms[3];
- }
- }
-}
<pluralRules locales="bho">
<pluralRule count="one">n in 0..1</pluralRule>
</pluralRules>
+ <pluralRules locales="sgs">
+ <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule>
+ <pluralRule count="two">n mod 10 is 2 and n mod 100 is not 12</pluralRule>
+ <pluralRule count="few">n is 0 or n mod 100 is 0 or n mod 100 in 10..19</pluralRule>
+ </pluralRules>
</plurals>
</supplementalData>
'loginlanguagelabel' => 'اللغة: $1',
'suspicious-userlogout' => 'رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
# Special:ListGroupRights
'listgrouprights-members' => '(قائمة الأعضاء)',
-# E-mail user
+# Email user
'emailuser' => 'إرسال رسالة لهذا المستخدم',
# Watchlist
'currentevents-url' => 'Project:Huidige gebeure',
'disclaimers' => 'Voorbehoud',
'disclaimerpage' => 'Project:Voorwaardes',
-'edithelp' => 'Wysighulp',
+'edithelp' => 'Wysigingshulp',
'edithelppage' => 'Help:Wysig',
'helppage' => 'Help:Inhoud',
'mainpage' => 'Tuisblad',
Meld asseblief aan en verander u wagwoord nou. As u dit nie versoek het nie, of as u die oorspronklike wagwoord nog ken en dit nie wil verander nie, ignoreer die berig en hou aan om u ou wagwoord te gebruik.',
'passwordreset-emailelement' => 'Gebruikersnaam: $1
Tydelike wagwoord: $2',
-'passwordreset-emailsent' => "'n E-pos ter herhindering is gestuur.",
+'passwordreset-emailsent' => "'n E-pos is gestuur om u wagwoord te herstel.",
'passwordreset-emailsent-capture' => "'n E-pos ter herinnering is gestuur en word hieronder vertoon.",
'passwordreset-emailerror-capture' => "'n E-pos ter herinnering is geskep en word hieronder vertoon. Die uitstuur daarvan het egter gefaal: $1",
'loginreqlink' => 'teken in',
'loginreqpagetext' => 'U moet $1 om ander bladsye te bekyk.',
'accmailtitle' => 'Wagwoord gestuur.',
-'accmailtext' => "'n Lukraakgegenereerde wagwoord vir [[User talk:$1|$1]] is na $2 gestuur.
+'accmailtext' => "'n Lukrake wagwoord vir [[User talk:$1|$1]] is na $2 gestuur.
-Die wagwoord vir hierdie nuwe gebruiker kan verander word op die ''[[Special:ChangePassword|verander wagwoord]]'' bladsy nadat ingeteken is.",
+Die wagwoord vir hierdie nuwe gebruiker kan op die ''[[Special:ChangePassword|verander wagwoord]]''-bladsy verander word nadat ingeteken is.",
'newarticle' => '(Nuut)',
'newarticletext' => "Hierdie bladsy bestaan nie.
Tik iets in die invoerboks hier onder om 'n nuwe bladsy te skep. Meer inligting is op die [[{{MediaWiki:Helppage}}|hulpbladsy]] beskikbaar.
'editingold' => "'''WAARSKUWING: U is besig om 'n ouer weergawe van hierdie bladsy te wysig.
As u dit stoor, sal enige wysigings sedert hierdie een weer uitgewis word.'''",
'yourdiff' => 'Wysigings',
-'copyrightwarning' => "Alle bydraes aan {{SITENAME}} word beskou as beskikbaar gestel onder die $2 (lees $1 vir meer inligting).
+'copyrightwarning' => "Alle bydraes aan {{SITENAME}} word onder die $2 beskikbaar gestel (lees $1 vir meer inligting).
As u nie wil toelaat dat u teks deur ander persone gewysig of versprei word nie, moet dit asseblief nie hier invoer nie.<br />
Hierdeur beloof u ons dat u die byvoegings self geskryf het, of gekopieer het van publieke domein of soortgelyke vrye bronne.
'''MOENIE WERK WAT DEUR KOPIEREG BESKERM WORD HIER PLAAS SONDER TOESTEMMING NIE!'''",
'cascadeprotectedwarning' => "'''Waarskuwing:''' Die bladsy was beveilig sodat dit slegs deur administrateurs gewysig kan word, omrede dit ingesluit is in die volgende {{PLURAL:$1|bladsy|bladsye}} wat kaskade-beskerming geniet:",
'titleprotectedwarning' => "'''WAARSKUWING: Hierdie bladsy is beveilig. Slegs gebruikers met [[Special:ListGroupRights|spesiale regte]] sal dit kan skep.'''
Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
-'templatesused' => 'Hierdie bladsy {{PLURAL:$1|gebruik sjabloon|gebruik sjablone}}:',
+'templatesused' => '{{PLURAL:$1|Sjabloon|Sjablone}} gebruik op hierdie blad:',
'templatesusedpreview' => '{{PLURAL:$1|Sjabloon|Sjablone}} gebruik in hierdie voorskou:',
'templatesusedsection' => 'Die volgende {{PLURAL:$1|sjabloon|sjablone}} word in hierdie afdeling gebruik:',
'template-protected' => '(beskermd)',
Die aksie kan nie ongedaan gemaak word nie.',
'prefs-emailconfirm-label' => 'E-posbevestiging:',
'prefs-textboxsize' => 'Afmetings van die wysigingsvenster',
-'youremail' => 'E-pos',
+'youremail' => 'E-posadres:',
'username' => '{{GENDER:$1|Gebruikersnaam}}:',
-'uid' => '{{GENDER:$1|Gebruikersnommer}}:',
+'uid' => '{{GENDER:$1|Gebruiker-ID}}:',
'prefs-memberingroups' => '{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepe}}:',
'prefs-registration' => 'Registrasiedatum:',
'yourrealname' => 'Regte naam:',
# Random page
'randompage' => 'Lukrake bladsy',
-'randompage-nopages' => 'Daar is geen bladye in die volgende {{PLURAL:$2|naamspasie|naamspasies}}: $1.',
+'randompage-nopages' => 'Daar is geen bladsye in die volgende {{PLURAL:$2|naamruimte|naamruimtes}} nie: $1.',
# Random redirect
'randomredirect' => 'Lukrake aanstuur',
-'randomredirect-nopages' => 'Daar is geen aansture in naamspasie "$1".',
+'randomredirect-nopages' => 'Daar is geen aansture in naamruimte "$1" nie.',
# Statistics
'statistics' => 'Statistieke',
'n Bladsy word beskou as 'n dubbelsinnigheidsbladsy as dit 'n sjabloon bevat wat geskakel is vanaf [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => "Blaaie met 'n bladsy-eienskap",
+'pageswithprop-legend' => "Blaaie met 'n bladsy-eienskap",
'pageswithprop-text' => "Hierdie bladsy lys blaaie met 'n bepaalde blady-eienskap.",
'pageswithprop-prop' => 'Naam van die eienskap:',
+'pageswithprop-submit' => 'OK',
'doubleredirects' => 'Dubbele aansture',
'doubleredirectstext' => 'Hierdie lys bevat bladsye wat aansture na ander aanstuurblaaie is.
'allpagesprefix' => 'Wys bladsye wat begin met:',
'allpagesbadtitle' => "Die gespesifiseerde bladsynaam is ongeldig of het 'n intertaal- of interwiki-voorvoegsel.
Dit is moontlik dat die naam karakters bevat wat nie in titels gebruik mag word nie.",
-'allpages-bad-ns' => '{{SITENAME}} het geen naamspasie "$1" nie.',
+'allpages-bad-ns' => '{{SITENAME}} het nie \'n naamruimte "$1" nie.',
'allpages-hide-redirects' => 'Versteek aansture',
# SpecialCachedPage
Kyk na $2 vir \'n rekord van onlangse skrappings.',
'dellogpage' => 'Skraplogboek',
'dellogpagetext' => "Hier onder is 'n lys van die mees onlangse skrappings. Alle tye is bedienertyd (UGT).",
-'deletionlog' => 'skrappings-logboek',
+'deletionlog' => 'skraplogboek',
'reverted' => 'Het terug gegaan na vroeëre weergawe',
'deletecomment' => 'Rede:',
'deleteotherreason' => 'Ander/ekstra rede:',
# Move page
'move-page' => 'Skuif "$1"',
'move-page-legend' => 'Skuif bladsy',
-'movepagetext' => "Die vorm hier onder hernoem 'n bladsy en skuif die hele wysigingsgeskiedenis na die nuwe naam.
+'movepagetext' => "ie vorm hier onder hernoem 'n bladsy en skuif die hele wysigingsgeskiedenis na die nuwe naam.
Die ou bladsy sal vervang word met 'n aanstuurblad na die nuwe titel.
-'''Skakels na die ou bladsytitel sal nie outomaties verander word nie; maak seker dat dubbele aanstuurverwysings nie voorkom nie deur die \"wat skakel hierheen\"-funksie na die skuif te gebruik.''' Dit is u verantwoordelikheid om seker te maak dat skakels steeds wys na waarheen hulle behoort te gaan.
+'''Skakels na die ou bladsytitel sal nie outomaties verander word nie; maak seker dat [[Special:DoubleRedirects|dubbele aanstuurverwysings]] en [[Special:BrokenRedirects|stukkende aansture]] nie voorkom nie deur die \"wat skakel hierheen\"-funksie na die skuif te gebruik.''' Dit is u verantwoordelikheid om seker te maak dat skakels steeds wys na waarheen hulle behoort te gaan.
Let daarop dat 'n bladsy '''nie''' geskuif sal word indien daar reeds 'n bladsy met dieselfde titel bestaan nie, tensy dit leeg of 'n aanstuurbladsy is en geen wysigingsgeskiedenis het nie. Dit beteken dat u 'n bladsy kan terugskuif na sy ou titel indien u 'n fout gemaak het, maar u kan nie 'n bestaande bladsy oorskryf nie.
'immobile-target-page' => 'Dit is nie moontlik om na die titel toe te skuif nie.',
'bad-target-model' => "Die gewenste bestemming gebruik 'n ander inhoudsmodel. Dit is nie moontlik van $1 na $2 om te skakel nie.",
'imagenocrossnamespace' => "'n Medialêer kan nie na 'n ander naamruimte geskuif word nie",
-'nonfile-cannot-move-to-file' => 'Net lêers kan na die lêernaamspasie geskuif word',
+'nonfile-cannot-move-to-file' => 'Net lêers kan na die lêernaamruimte geskuif word',
'imagetypemismatch' => 'Die nuwe lêer se uitbreiding pas nie by die lêertipe nie',
'imageinvalidfilename' => 'Die nuwe lêernaam is ongeldig',
'fix-double-redirects' => 'Opdateer alle aansture wat na die oorspronklike titel wys',
'allmessagesname' => 'Naam',
'allmessagesdefault' => 'Verstekteks',
'allmessagescurrent' => 'Huidige teks',
-'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamspasie beskikbaar is.
+'allmessagestext' => "Hier is 'n lys boodskappe wat in die ''MediaWiki''-naamruimte teenwoordig is.
Gaan na [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] as u wil help om MediaWiki te vertaal.",
'allmessagesnotsupportedDB' => "Daar is geen ondersteuning vir '''{{ns:special}}:Allmessages''' omdat '''\$wgUseDatabaseMessages''' uitgeskakel is.",
'allmessages-filter-legend' => 'Filter',
'javascripttest-qunit-heading' => 'QUnit toetssuite vir MediaWiki JavaScript',
# Tooltip help for the actions
-'tooltip-pt-userpage' => 'U gebruikerbladsy',
-'tooltip-pt-anonuserpage' => 'Die gebruikerbladsy vir die IP-adres waaronder u redigeer',
-'tooltip-pt-mytalk' => 'U besprekingsbladsy',
+'tooltip-pt-userpage' => 'My gebruikerbladsy',
+'tooltip-pt-anonuserpage' => 'Die gebruikersbladsy vir die IP-adres waaronder u wysigings aanbring',
+'tooltip-pt-mytalk' => 'My besprekingsbladsy',
'tooltip-pt-anontalk' => 'Bespreking oor bydraes van hierdie IP-adres',
'tooltip-pt-preferences' => 'My voorkeure',
'tooltip-pt-watchlist' => 'Die lys bladsye wat u vir veranderinge dophou',
-'tooltip-pt-mycontris' => 'Lys van u bydraes',
-'tooltip-pt-login' => 'U word aangemoedig om in te teken; dit is egter nie verpligtend nie.',
+'tooltip-pt-mycontris' => 'Lys van my bydraes',
+'tooltip-pt-login' => 'U word aangemoedig om in te teken. Dit is egter nie verpligtend nie.',
'tooltip-pt-anonlogin' => 'U word aangemoedig om in te teken; dit is egter nie verpligtend nie.',
'tooltip-pt-logout' => 'Teken uit',
'tooltip-ca-talk' => 'Bespreking oor die inhoudsbladsy',
'specialpages-group-changes' => 'Onlangse wysigings en boekstawings',
'specialpages-group-media' => 'Media verslae en oplaai',
'specialpages-group-users' => 'Gebruikers en regte',
-'specialpages-group-highuse' => 'Baie gebruikte bladsye',
+'specialpages-group-highuse' => 'Mees gebruikte bladsye',
'specialpages-group-pages' => 'Lyste van bladsye',
'specialpages-group-pagetools' => 'Bladsyhulpmiddels',
'specialpages-group-wiki' => 'Data en hulpmiddels',
'sqlite-no-fts' => 'Weergawe $1 sonder ondersteuning vir vol-teks soektogte ("full-text search")',
# New logging system
-'logentry-delete-delete' => '$1 het die bladsy $3 verwyder',
-'logentry-delete-restore' => '$1 het die bladsy $3 teruggeplaas',
+'logentry-delete-delete' => '$1 het bladsy $3 verwyder',
+'logentry-delete-restore' => '$1 het bladsy $3 teruggeplaas',
'logentry-delete-event' => "$1 het die sigbaarheid van {{PLURAL:$5|'n logboekreël|$5 logboekreëls}} van $3 gewysig: $4",
'logentry-delete-revision' => "$1 het die sigbaarheid van {{PLURAL:$5|'n weergawe|$5 weergawes}} van bladsy $3 gewysig: $4",
'logentry-delete-event-legacy' => '$1 het die sigbaarheid van logboekreëls van $3 gewysig',
'duration-centuries' => '$1 {{PLURAL:$1|eeu|eeue}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
-# Unknown messages
-'pageswithprop-legend' => "Blaaie met 'n bladsy-eienskap",
-'pageswithprop-submit' => 'OK',
+# Image rotation
+'rotate-comment' => 'Beeld $1 {{PLURAL:$1|graad|grade}} kloksgewys gedraai',
+
);
# Special:ListGroupRights
'listgrouprights-members' => '(lista e antarëve)',
-# E-mail user
+# Email user
'emailuser' => 'Çoji postel këtij përdoruesi',
# Watchlist
'login-abort-generic' => 'መግባትዎ አልተከናወነም፤ ተሠርዟል።',
'loginlanguagelabel' => 'ቋምቋ፦ $1',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'እሚደርስበት ኢ-ሜል አድራሻ ሳይታወቅ መላክ አይቻልም።',
# Change password dialog
'prefs-displayrc' => 'የማሳያ አማራጮች',
'prefs-diffs' => 'ልዩነቶች',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ኢ-ሜል አድራሻ ትክክለኛ ይመስላል።',
'email-address-validity-invalid' => 'ትክክለኛ ኢ-ሜል ማቅረብ ያስፈልጋል።',
'listgrouprights-rights' => 'መብቶች',
'listgrouprights-members' => '(የአባላት ዝርዝር)',
-# E-mail user
+# Email user
'mailnologin' => 'ምንም መነሻ አድራሻ የለም',
'mailnologintext' => 'ኢ-ሜል ወደ ሌላ አባል ለመላክ [[Special:UserLogin|መግባት]]ና በ[[Special:Preferences|ምርጫዎችዎ]] ትክክለኛ የኢሜል አድራሻዎ መኖር ያስፈልጋል።',
'emailuser' => 'ለዚህ/ች ሰው ኢሜል መላክ',
'monthsall' => 'ሁሉ',
'limitall' => 'ሁሉ',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ኢ-ሜልዎን ለማረጋገጥ',
'confirmemail_noemail' => 'በ[[Special:Preferences|ምርጫዎችዎ]] ትክክለኛ ኢሜል አድራሻ አልሰጡም።',
'confirmemail_text' => 'አሁን በ{{SITENAME}} በኩል «ኢ-ሜል» ለመላክም ሆነ ለመቀበል አድራሻዎን ማረጋገጥ ግዴታ ሆኗል። እታች ያለውን በተጫኑ ጊዜ አንድ የማረጋገጫ መልእክት ቀድሞ ወደ ሰጡት ኢሜል አድራሻ በቀጥታ ይላካል። በዚህ መልእክት ልዩ ኮድ ያለበት መያያዣ ይገኝበታል፣ ይህንን መያያዣ ከዚያ ቢጎብኙ ኢ-ሜል አድራሻዎ የዛኔ ይረጋግጣል።',
'loginlanguagelabel' => 'Idioma: $1',
'suspicious-userlogout' => "S'ha denegau a suya demanda de zarrar a sesión ya que pareix que la ninvió un navegador defectuoso u bell proxy amagau.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Error desconoixito en a función mail() de PHP',
'user-mail-no-addy' => 'Ha mirau de ninviar un mensache de correu sin una adreza de correu electronico.',
'prefs-displaywatchlist' => 'Opcions de visualización',
'prefs-diffs' => 'Diferencias',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => "L'adreza de correu electronico pareix valida",
'email-address-validity-invalid' => 'Escriba una adreza valida de correu electronico',
'listgrouprights-addgroup-self-all' => 'Adhibir-se a todas as collas',
'listgrouprights-removegroup-self-all' => 'Salir de todas as collas',
-# E-mail user
+# Email user
'mailnologin' => "No ninviar l'adreza",
'mailnologintext' => "Ha d'haber [[Special:UserLogin|encetato una sesión]] y tener una adreza conforme de correu-e en as suyas [[Special:Preferences|preferencias]] ta ninviar un correu electronico ta atros usuarios.",
'emailuser' => 'Ninviar un correu electronico ta iste usuario',
'monthsall' => 'totz',
'limitall' => 'Totz',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Confirmar adreza de correu-e',
'confirmemail_noemail' => "No tiene una adreza de correu-e conforme en as suyas [[Special:Preferences|preferencias d'usuario]].",
'confirmemail_text' => "{{SITENAME}} requiere que confirme a suya adreza de correu-e antis de poder usar as funcions de correu-e. Punche o botón de baxo ta ninviar un mensache de confirmación t'a suya adreza. O mensache incluirá un vinclo con un codigo. Escriba-lo ta confirmar que a suya adreza ye conforme.",
'vector-action-move' => 'انقل',
'vector-action-protect' => 'احم',
'vector-action-undelete' => 'استرجع الحذف',
-'vector-action-unprotect' => 'غيّر الحماية',
+'vector-action-unprotect' => 'غير الحماية',
'vector-simplesearch-preference' => 'مكّن شريط البحث المبسط (لواجهة فكتور فقط)',
'vector-view-create' => 'أنشئ',
'vector-view-edit' => 'تعديل',
'missingarticle-rev' => '(رقم المراجعة: $1)',
'missingarticle-diff' => '(فرق: $1، $2)',
'readonly_lag' => 'تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي',
-'internalerror' => 'خطأ داخلي',
+'internalerror' => 'عطÙ\84 داخلي',
'internalerror_info' => 'خطأ داخلي: $1',
'fileappenderrorread' => 'تعذرت قراءة "$1" أثناء الإضافة.',
'fileappenderror' => 'تعذرت إضافة "$1" إلى "$2".',
تعامل الصفحة كصفحة توضيح إذا كان بها قالب موجود في [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => 'صفحات مع خاصية الصفحة',
+'pageswithprop-legend' => 'صفحات مع خاصية الصفحة',
'pageswithprop-text' => 'تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.',
'pageswithprop-prop' => 'اسم الخاصية:',
+'pageswithprop-submit' => 'اذهب',
'doubleredirects' => 'تحويلات مزدوجة',
'doubleredirectstext' => 'هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.
'logentry-newusers-newusers' => 'تم إنشاء الحساب $1',
'logentry-newusers-create' => 'تم إنشاء الحساب $1',
'logentry-newusers-create2' => 'أنشأ $1 الحساب $3',
-'logentry-newusers-byemail' => 'أنشئ حساب المستخدم $3 من قبل $1 وأرسلت كلمة السر بالبريد الإلكتروني',
+'logentry-newusers-byemail' => 'ُ{{GENDER:$2|أنشأ|أنشأت}} $1 حساب المستخدم $3 وأُرسلت كلمة السر بالبريد الإلكتروني',
'logentry-newusers-autocreate' => 'أنشئ حساب $1 تلقائياً',
'logentry-rights-rights' => 'غير $1 صلاحيات $3 من $4 إلى $5',
'logentry-rights-rights-legacy' => 'غير $1 صلاحيات $3',
'duration-centuries' => '{{PLURAL: $1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}',
'duration-millennia' => '{{PLURAL: $1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}',
-# Unknown messages
-'pageswithprop-legend' => 'صفحات مع خاصية الصفحة',
-'pageswithprop-submit' => 'اذهب',
+# Image rotation
+'rotate-comment' => 'تدوير الصورة {{PLURAL:$1||درجة واحدة|درجتان|$1 درجات|$1 درجة}} باتجاه عقارب الساعة',
+
);
'loginlanguagelabel' => 'Loġa: $1',
'suspicious-userlogout' => 't-talab dialk baċ ṫdĥol mrfoḍ ḫqqaċ tayḍhṛ billa rah ṫsift mn moṫaṣffiḫ mĝtob wlla caching proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "ĥata' ma mĝrof-ċ fl-mail() function taĝ l-PHP.",
'user-mail-no-addy' => 'ḫawlṫi ṫsift email bla ĝonwan l-email.',
'prefs-displaywatchlist' => 'khiyarat laard',
'prefs-diffs' => 'foroqat',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'tayban billa l-email rah ṣalḫ',
'email-address-validity-invalid' => 'kṫb ĝonwan email ṣḫiḫ',
'listgrouprights-addgroup-self' => 'zid ll-ḫisab ṫaĝi {{PLURAL:$2|mjmoĝṫ|mjmoĝaṫ}}: $1',
'listgrouprights-removegroup-self' => 'hyyed mn l-ḫisab ṫaĝi {{PLURAL:$2|mjmoĝṫ|mjmoĝaṫ}}: $1',
-# E-mail user
+# Email user
'mailnologin' => 'Ma kayenċ l-ĝonwan dyal l-morasil',
'emailuser' => 'Ṣifet imayl le had l-mosṫeĥdim',
'emailpage' => 'sift email lhad lmostkhdim',
'monthsall' => 'kolhom',
'limitall' => 'kolċi',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => "konfirmasyon dyal l'email",
'confirmemail_send' => 'sift code lkonfirmation',
'confirmemail_sent' => 'tam irssal rissala dyal lkonfirmation.',
'prefs-displaywatchlist' => 'اختيارات العرض',
'prefs-diffs' => 'التغيير',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'عنوان الإيميل صح',
'email-address-validity-invalid' => 'عنوان الإيميل غلط',
'listgrouprights-addgroup-self-all' => 'اضافة كل المجموعات للحساب بتاعى',
'listgrouprights-removegroup-self-all' => 'مسح كل المجموعات من الحساب بتاعى',
-# E-mail user
+# Email user
'mailnologin' => 'مافيش عنوان نبعت عليه',
'mailnologintext' => 'لازم تعمل [[Special:UserLogin|تسجيل الدخول]] و تدخل ايميل صحيح فى صفحة [[Special:Preferences|التفضيلات]] علشان تقدر تبعت ايميلات لليوزرز التانيين.',
'emailuser' => 'ابعت ايميل لليوزر دا',
'monthsall' => 'الكل',
'limitall' => 'الكل',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'اعمل تأكيد للأيميل بتاعك',
'confirmemail_noemail' => 'إنت ما عندكش ايميل صحيح متسجل فى [[Special:Preferences|تفضيلاتك]].',
'confirmemail_text' => '{{SITENAME}} بيطلب انك تعمل تأكيد للأيميل قبل ما تستعمل الخصايص المرتبطة بالايميل.
'newwindow' => "(নতুন ৱিণ্ড'ত খোল খায়)",
'cancel' => 'বাতিল কৰক',
'moredotdotdot' => 'অধিক...',
+'morenotlisted' => 'আৰু তালিকাভুক্ত কৰা হোৱা নাই...',
'mypage' => 'মোৰ পৃষ্ঠা',
'mytalk' => 'কথা-বতৰা',
'anontalk' => 'এই IP-ত যোগাযোগ কৰক',
'gotaccount' => "আপুনি সদস্য হয়নে? '''$1'''",
'gotaccountlink' => 'প্ৰৱেশ',
'userlogin-resetlink' => 'আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?',
-'createaccountmail' => 'à¦\87-মà§\87à¦\87লà§\87ৰà§\87',
+'createaccountmail' => 'যিà¦\95à§\8bনà§\8b à¦\8fà¦\9fা à¦\85সà§\8dথায়à§\80 à¦\97à§\81পà§\8dতশবà§\8dদ বà§\8dযৱহাৰ à¦\95ৰà¦\95 à¦\86ৰà§\81 à¦\87য়াà¦\95 তলত দিয়া à¦\87মà§\87à¦\87ল ঠিà¦\95নাà¦\9fà§\8bলà§\88 পঠিয়াà¦\87 দিয়à¦\95',
'createaccountreason' => 'কাৰণ:',
'badretype' => 'আপুনি দিয়া গুপ্ত শব্দ দুটা মিলা নাই।',
'userexists' => 'আপুনি দিয়া সদস্যনাম আগৰে পৰাই ব্যৱহাৰ হৈ আছে।
'blocked-mailpassword' => 'আপোনাৰ আইপি ঠিকনাৰ পৰা সম্পাদনা কৰা বাৰণ কৰা হৈছে, এনে অৱস্থাত দুৰ্ব্যৱহাৰ ৰোধ কৰিবলৈ গুপ্তশব্দ পুনঃউদ্ধাৰ কৰা সুবিধাতো বাতিল কৰা হৈছে।',
'eauthentsent' => 'সঞ্চিত ই-মেইল ঠিকনাত নিশ্চিতকৰণ ই-মেইল এখন পঠোৱা হৈছে।
আৰু অন্যান্য ই-মেইল পঠোৱাৰ আগতে, আপোনাৰ সদস্যতাৰ নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।',
-'throttled-mailpassword' => 'যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} গুপ্তশব্দ পুনৰুদ্ধাৰ স্মাৰক পঠিওৱা হৈছে ।
-অবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ $1 ঘণ্টাত এবাৰহে গুপ্তশব্দ পুনৰুদ্ধাৰ স্মাৰক পঠিওৱা হয়।',
+'throttled-mailpassword' => "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে।
+অবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।",
'mailerror' => 'ই-মেইল পঠোৱাত সমস্যা হৈছে: $1',
'acct_creation_throttle_hit' => 'যোৱা ২৪ ঘন্টাত আপোনাৰ আই-পি ঠিকনাৰ পৰা এই ৱিকিৰ পঢ়োঁতাই {{PLURAL:$1|১-টা একাউন্ট|$1-টা একাউন্ট}} সৃষ্টি কৰিলে, যিটো সৰ্বোচ্চ অনুমোদনকৃত ।
এতেকে, এই আই-পি ঠিকনাৰ পৰা এই মূহুৰ্তত একাউন্ট সৃষ্টি কৰিব নোৱাৰিব ।',
'loginlanguagelabel' => 'ভাষা: $1',
'suspicious-userlogout' => 'আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠাইছে ।',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'পি.এইছ.পি মেইল () কাৰ্যত অজ্ঞাত ত্ৰুটি ।',
'user-mail-no-addy' => 'ই-মেইল ঠিকনা নোহোৱাকৈয়ে ই-মেইল পঠোৱাৰ চেষ্টা কৰা হৈছে ।',
+'user-mail-no-body' => 'কোনো সমল নোহোৱাকৈ বা অতি সংক্ষিপ্ত কথাৰে ইমেইল পঠিয়াবলৈ চেষ্টা কৰিছিল।',
# Change password dialog
'resetpass' => 'গুপ্তশব্দ সলনি কৰক',
# Special:PasswordReset
'passwordreset' => 'গুপ্তশব্দ ন-কৈ বহাওক',
-'passwordreset-text' => 'আপোনাৰ একাউণ্টৰ সবিশেষ তথ্য ই-পত্ৰৰ জৰিয়তে পাবলৈ তলৰ প্ৰ-পত্ৰ পুৰাওক ।',
+'passwordreset-text' => ' আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ তলৰ প্ৰপত্ৰ সম্পূৰ্ণ কৰক।',
'passwordreset-legend' => 'গুপ্তশব্দ ন-কৈ বহাওক',
'passwordreset-disabled' => 'এই ৱিকিত গুপ্তশব্দ নবীকৰণ নিষ্ক্ৰিয় কৰা হৈছে ।',
'passwordreset-pretext' => '{{PLURAL:$1||তলত উল্লেখ কৰা তথ্যৰ কোনো অংশ ভৰাওক}}',
'passwordreset-capture-help' => "আপুনি এই ঘৰটো চিহ্নিত কৰিলে এই ই-মেইল (আৰু অস্থায়ী গুপ্তশব্দ) আপুনি দেখা পোৱাৰ লগতে সদস্যজনলৈও পঠোৱা হ'ব।",
'passwordreset-email' => 'ই-মেইল ঠিকনা:',
'passwordreset-emailtitle' => '{{SITENAME}}ত একাউণ্টৰ সবিশেষ তথ্য আছে ।',
-'passwordreset-emailtext-ip' => 'কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱত: আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ একাউণ্টৰ সবিশেষ তথ্য বিচাৰিছিল । ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।
+'passwordreset-emailtext-ip' => 'কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱতঃ আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ইমেইল ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।
$2
{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।',
-'passwordreset-emailtext-user' => '$1 ব্যৱহাৰকাৰীয়ে {{SITENAME}} ($4) ৰ বাবে আপোনাৰ একাউণ্টৰ সবিশেষ তথ্য বিচাৰিছিল । ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টসমূহ}} জড়িত হৈ আছে ।
+'passwordreset-emailtext-user' => '{{SITENAME}}ত $1 ব্যৱহাৰকাৰীয়ে {{SITENAME}} ($4)ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ই-পত্ৰ ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টসমূহ}} জড়িত হৈ আছে।
$2
-{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।',
+{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত। যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে।',
'passwordreset-emailelement' => 'সদস্যনাম: $1
অস্থায়ী গুপ্তশব্দ: $2',
-'passwordreset-emailsent' => 'à¦\8fà¦\96ন সà§\8dমাৰà¦\95 à¦\87-মà§\87à¦\87ল পঠà§\8bৱা হৈছে।',
-'passwordreset-emailsent-capture' => 'à¦\8fà¦\96ন সà§\8dমাৰà¦\95 à¦\87-মà§\87à¦\87ল পঠà§\8bৱা হৈছে, এইখন তলত দেখা পাব।',
-'passwordreset-emailerror-capture' => "à¦\8fà¦\96ন সà§\8dমাৰà¦\95 à¦\87-মেইল সৃষ্টি কৰা হ'ল কিন্তু সদস্যজনলৈ পঠিয়াব পৰা নগ'ল, এইখন তলত দেখুওৱা হৈছে: $1",
+'passwordreset-emailsent' => 'à¦\8fà¦\96ন à¦\97à§\81পà§\8dতশবà§\8dদ à¦\89দà§\8dধাৰ à¦\87-মà§\87à¦\87ল পঠিà¦\93ৱা হৈছে।',
+'passwordreset-emailsent-capture' => 'à¦\8fà¦\96ন à¦\97à§\81পà§\8dতশবà§\8dদ à¦\89দà§\8dধাৰ à¦\87মà§\87à¦\87ল পঠিà¦\93ৱা হৈছে, এইখন তলত দেখা পাব।',
+'passwordreset-emailerror-capture' => "à¦\8fà¦\96ন à¦\97à§\81পà§\8dতশবà§\8dদ à¦\89দà§\8dধাৰ à¦\87মেইল সৃষ্টি কৰা হ'ল কিন্তু সদস্যজনলৈ পঠিয়াব পৰা নগ'ল, এইখন তলত দেখুওৱা হৈছে: $1",
# Special:ChangeEmail
'changeemail' => 'ই-মেইল ঠিকনা সলনি কৰক',
'''স্বত্বাধিকাৰযুক্ত কোনো সমল অনুমতি অবিহনে দাখিল নকৰে যেন!'''",
'longpageerror' => "'''ভুল: আপুনি জমা দিয়া পাঠ {{PLURAL:$1|এক কিলো-বাইট|$1 কিলো-বাইট}} আকাৰৰ, যি {{PLURAL:$2|এক কিলো-বাইট|$2 কিলো-বাইট}} সীমাতকৈ বেছি।'''
ইয়াক সাঁচিব পৰা নাযাব।",
-'readonlywarning' => "'''সতৰ্কবাণী: চোৱা-চিতাৰ হেতু এই তথ্যকোষ বন্ধ কৰি ৰখা হৈছে, গতিকে আপুনি এই মূহুৰ্তত আপোনাৰ সম্পাদনা সাঁচিব নোৱাৰিব ।'''
-à¦\86পà§\81নি লà§\87à¦\96াà¦\9fà§\8b à¦\95াà¦\9fি à¦\9fà§\87à¦\95à§\8dসà¦\9f-ফাà¦\87লত লà§\87পন à¦\95ৰি পিà¦\9bলà§\88 বà§\8dযৱহাৰৰ বাবà§\87 সাà¦\81à¦\9aি ৰাà¦\96িব পাৰà§\87 ।
+'readonlywarning' => "'''সতৰ্কবাণী: চোৱা-চিতাৰ হেতু এই তথ্যকোষ বন্ধ কৰি ৰখা হৈছে, গতিকে আপুনি এই মূহুৰ্তত আপোনাৰ সম্পাদনা সাঁচিব নোৱাৰিব।'''
+à¦\86পà§\81নি লà§\87à¦\96াà¦\9fà§\8b à¦\9fà§\87à¦\95à§\8dসà¦\9f-ফাà¦\87লত à¦\95পà§\80-পà§\87'ষà§\8dà¦\9f à¦\95ৰি পিà¦\9bলà§\88 বà§\8dযৱহাৰৰ বাবà§\87 সাà¦\81à¦\9aি ৰাà¦\96িব পাৰà§\87।
তথ্যকোষ বন্ধ কৰি ৰখা প্ৰশাসকজনে এই ব্যাখ্যা দিছে: $1",
'protectedpagewarning' => "'''সতৰ্কবাণী: এই পৃষ্ঠা বন্ধ ৰখা হৈছে; কেৱল প্ৰশাসকৰৰ মৰ্যদাৰ সদস্যইহে সম্পাদনা কৰিব পাৰিব ।'''
'search-interwiki-default' => '$1 ফলাফলসমূহ:',
'search-interwiki-more' => '(আৰু)',
'search-relatedarticle' => 'সম্পৰ্কিত',
-'mwsuggest-disable' => 'AJAX পৰামৰ্শ নিষ্ক্ৰিয় কৰক',
+'mwsuggest-disable' => 'অনুসন্ধান পৰামৰ্শ নিষ্ক্ৰিয় কৰক',
'searcheverything-enable' => 'সকলো নামস্থানত অনুসন্ধান কৰক',
'searchrelated' => 'সম্পৰ্কিত',
'searchall' => 'সকলো',
'prefs-displaywatchlist' => 'বিকল্প প্ৰদৰ্শন কৰক',
'prefs-diffs' => 'পাৰ্থক্য',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ই-মেইল ঠিকনাটো সঠিক',
'email-address-validity-invalid' => 'সঠিক ই-মেইল ঠিকনা প্ৰদান কৰক',
তাৰ সলনি সেইবোৰত উপযুক্ত পৃষ্ঠাৰ লগত সংযোগ থাকিব পাৰে।
[[MediaWiki:Disambiguationspage]]ৰ পৰা সংযোগ থকা কোনো সাঁচ ব্যৱহাৰ কৰিলে এখন পৃষ্ঠাক দ্ব্যৰ্থতা দূৰীকৰণ পৃষ্ঠা হিছাপে গণ্য কৰা হয়।",
+'pageswithprop-submit' => 'যাওক',
+
'doubleredirects' => 'দ্বি-পুনঃনিৰ্দেশিত',
'doubleredirectstext' => 'আন পুনৰ্নিদেশনা পৃষ্ঠালৈ পুনৰ্নিৰ্দেশিত পৃষ্ঠাসমূহ এই তালিকাত দিয়া হৈছে ।
প্ৰত্যেক পথালী শাৰীত প্ৰথম আৰু দ্বিতীয় পুনৰ্নিৰ্দেশনাৰ সংযোগৰ লগতে দ্বিতীয় পুনৰ্নিৰ্দেশনাৰ লক্ষ্য সংযোগ দিয়া আছে । এই লক্ষ্য সংযোগটো সাধাৰণতে "প্ৰকৃত" লক্ষ্য পৃষ্ঠা যাক প্ৰথম পুনৰ্নিৰ্দেশনাই আঙুলিয়াই দিয়ে ।
# Special:ActiveUsers
'activeusers' => 'সক্ৰিয় ব্যবহাৰকাৰীৰ তালিকা',
'activeusers-intro' => 'যোৱা {{PLURAL:$1|দিন|দিন}}ৰ ভিতৰত অৱদান আগবঢ়োৱা ব্যৱহাৰকাৰীৰ তালিকা',
-'activeusers-count' => 'যà§\8bৱা {{PLURAL:$3|দিনত|$3 দিনত}} সৰà§\8dবমà§\81ঠ{{PLURAL:$1|সমà§\8dপাদনাৰ|সমà§\8dপাদনাৰ}} সংখ্যা $1',
+'activeusers-count' => 'যà§\8bৱা {{PLURAL:$3|দিনত|$3 দিনত}} সৰà§\8dবমà§\81ঠ{{PLURAL:$1|à¦\95ামৰ|à¦\95ামৰ}} সংখ্যা $1',
'activeusers-from' => 'ইয়াৰে আৰম্ভ হোৱা ব্যৱহাৰকাৰী সকল দেখুৱাওক:',
'activeusers-hidebots' => 'বট নেদেখুৱাব',
'activeusers-hidesysops' => 'প্ৰশাসক নেদেখুৱাব',
'listgrouprights-addgroup-self-all' => 'সকলো গোট নিজৰ একাউণ্টত যোগ কৰক',
'listgrouprights-removegroup-self-all' => 'নিজৰ একাউণ্টৰপৰা সকলো গোট আঁতৰাওক',
-# E-mail user
+# Email user
'mailnologin' => 'পাওঁতাৰ ঠিকনা নাই',
'mailnologintext' => 'আন সদস্যক ই-মেইল পঠিয়াবলৈ আপুনি [[Special:UserLogin|লগ্ ইন]] কৰিব লাগিব আৰু আপোনাৰ [[Special:Preferences|পছন্দসমূহত]] এটা বৈধ ই-মেইল ঠিকনা থাকিব লাগিব ।',
'emailuser' => 'এই সদস্যজনলৈ ই-মেইল পঠিয়াওক',
'usermessage-editor' => 'ব্যৱস্থাৰ বাতৰি দিওঁতা',
# Watchlist
-'watchlist' => 'মà§\8bৰ লà¦\95à§\8dষà§\8dয-তালিà¦\95া',
+'watchlist' => 'লক্ষ্য-তালিকা',
'mywatchlist' => 'লক্ষ্য-তালিকা',
'watchlistfor2' => '$1 ৰ কাৰণে($2)',
'nowatchlist' => 'আপোনাৰ নিৰীক্ষণ তালিকাত একো নাই ।',
'enotif_anon_editor' => 'বেনামী সদস্য $1',
'enotif_body' => 'প্ৰিয় $WATCHINGUSERNAME,
-
-{{SITENAME}}ৰ $PAGETITLE শিৰোনামাৰ পৃষ্ঠাখন $PAGEEDITDATE তাৰিখে $PAGEEDITORৰ দ্বাৰা $CHANGEDORCREATED। সাম্প্ৰতিক সংশোধনৰ বাবে $PAGETITLE_URL চাওক।
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
সম্পাদকৰ সাৰাংশ: $PAGESUMMARY $PAGEMINOREDIT
-সমà§\8dপাদà¦\95à¦\9cনৰ লà¦\97ত যà§\8bà¦\97াযà§\8bà¦\97:
+সমà§\8dপাদà¦\95à¦\9cনà¦\95 যà§\8bà¦\97াযà§\8bà¦\97 à¦\95ৰà¦\95:
মেইল: $PAGEEDITOR_EMAIL
ৱিকি: $PAGEEDITOR_WIKI
-আপুনি এই পৃষ্ঠাখন নোচোৱালৈকে আন সালসলনিৰ কোনো জাননী দিয়া নহ’ব ।
+আপুনি এই পৃষ্ঠাখন নোচোৱালৈকে আন সালসলনিৰ কোনো জাননী দিয়া নহ’ব।
আপুনি আপোনাৰ লক্ষ্য-তালিকাৰ পৃষ্ঠাবোৰৰ জাননী ফ্লেগ পূৰ্বৰ অৱস্থালৈও ঘূৰাই নিব পাৰে ।
-আপোনাৰ {{SITENAME}}ৰ জাননী ব্যৱস্থা
+আপোনাৰ {{SITENAME}} জাননী ব্যৱস্থা
--
আপোনাৰ ই-মেইল জাননী ছেটিং সলনি কৰিবলৈ এইখন চাওক
'prot_1movedto2' => '$1 ক $2 লৈ স্থানান্তৰিত কৰা হল',
'protect-badnamespace-title' => 'অসুৰক্ষিত নামস্থান',
'protect-badnamespace-text' => 'এই নামস্থানৰ পৃষ্ঠাসমূহ সুৰক্ষিত কৰিব নোৱাৰি।',
+'protect-norestrictiontypes-text' => 'এই পৃষ্ঠাখন সুৰক্ষিত কৰিব নোৱাৰি কাৰণ কোনো বাধা প্ৰকাৰ নাই।',
+'protect-norestrictiontypes-title' => 'সুৰক্ষা প্ৰযোজ্য নোহোৱা পৃষ্ঠা',
'protect-legend' => 'সুৰক্ষা নিশ্চিত কৰক',
'protectcomment' => 'কাৰণ:',
'protectexpiry' => 'সময় শেষ:',
'protect-cascadeon' => 'এই পৃষ্ঠাখন বৰ্তমান সুৰক্ষিত কাৰণ ই {{PLURAL:$1|খন পৃষ্ঠাৰ|খন পৃষ্ঠাৰ}} অন্তৰ্গত য’ত প্ৰপাতাকাৰ সুৰক্ষা সক্ৰিয় ।
আপুনি এই পৃষ্ঠাৰ সুৰক্ষা স্তৰ সলাব পাৰে কিন্তু সি প্ৰপাতাকাৰ সুৰক্ষাত কোনো প্ৰভাৱ নেপেলায ।',
'protect-default' => 'সকলো ব্যৱহাৰকাৰীৰ বাবে',
-'protect-fallback' => '"$1" অনুমতি লাগিব',
-'protect-level-autoconfirmed' => 'নতà§\81ন বা à¦\85পà¦\9eà§\8dà¦\9cà§\80à¦à§\81à¦\95à§\8dত সদসà§\8dযà¦\95 à¦\85ৱৰà§\8bধ',
-'protect-level-sysop' => 'à¦\95à§\87ৱল পà§\8dৰশাসà¦\95বà§\83নà§\8dদৰ বাবà§\87',
+'protect-fallback' => 'কেৱল "$1" অনুমতি থকা ব্যৱহাৰকাৰীকহে সুযোগ দিয়া হয়',
+'protect-level-autoconfirmed' => 'à¦\95à§\87ৱল সà§\8dবয়à¦\82নিশà§\8dà¦\9aিত বà§\8dযৱহাৰà¦\95াৰà§\80à¦\95হà§\87 সà§\81যà§\8bà¦\97 দিয়া হয়',
+'protect-level-sysop' => 'à¦\95à§\87ৱল পà§\8dৰশাসà¦\95বà§\83নà§\8dদà¦\95 à¦\85নà§\81মতি দিয়া হয়',
'protect-summary-cascade' => 'প্ৰপাতাকাৰ/কেচ্কেডিং',
'protect-expiring' => ' $1 (UTC) ত সময় শেষ হব',
'protect-expiring-local' => 'ম্যাদ উকলিব $1',
# Move page
'move-page' => '$1 স্থানান্তৰ কৰক',
'move-page-legend' => 'পৃষ্ঠাখন স্থানান্তৰ কৰক',
-'movepagetext' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনামা সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামালৈ স্থানান্তৰ কৰা হ'ব।
-পà§\81ৰণা শিৰà§\8bনামাà¦\9fà§\8b নতà§\81ন শিৰà§\8bনামালà§\88 à¦\8fà¦\9fা পà§\81নৰà§\8dনিৰà§\8dদà§\87শনা হà§\88 ৰ'ব।
-পà§\81ৰণা শিৰà§\8bনামালà§\88 পà§\8bনাৱা পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ à¦\86পà§\81নি সà§\8dবয়à¦\82à¦\95à§\8dৰিয়à¦à¦¾à§±à§\87 à¦\86পডà§\87ট কৰিব পাৰিব।
-যদি à¦\8fà¦\87à¦\9fà§\8b à¦\95ৰিব নিবিà¦\9aাৰà§\87 তà§\87নà§\87হ'লà§\87 [[Special:DoubleRedirects|দà§\8dবি-পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] বা [[Special:BrokenRedirects|à¦à¦\99া পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] à¦\9aয়ন কৰে যেন।
+'movepagetext' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনাম সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামলৈ স্থানান্তৰ কৰা হ'ব।
+পুৰণা শিৰোনামটো নতুন শিৰোনামালৈ এটা পুনৰ্নিৰ্দেশনা হৈ ৰ'ব।
+পà§\81ৰণা শিৰà§\8bনামলà§\88 পà§\8bনাৱা পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ à¦\86পà§\81নি সà§\8dবয়à¦\82à¦\95à§\8dৰিয়à¦à¦¾à§±à§\87 à¦\86পডà§\87'ট কৰিব পাৰিব।
+যদি à¦\8fà¦\87à¦\9fà§\8b à¦\95ৰিব নিবিà¦\9aাৰà§\87 তà§\87নà§\87হ'লà§\87 [[Special:DoubleRedirects|দà§\8dবি-পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] বা [[Special:BrokenRedirects|à¦à¦\99া পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাসমà§\82হ]] বাà¦\9bনি কৰে যেন।
সকলো সংযোগ সঠিক দিশলৈ পোনাৱাৰ দায়িত্ব আপোনাৰ।
-মন à¦\95ৰিব যà§\87 নতà§\81ন শিৰà§\8bনামাà¦\9fà§\8b যদি পà§\8dৰà¦\9aলিত, à¦\8fà¦\87 পà§\83ষà§\8dঠা নতà§\81ন শিৰà§\8bনামালà§\88 সলনি à¦\95ৰা '''নহ'ব''' যদিহà§\87 সà§\87à¦\87 পà§\83ষà§\8dঠা à¦\96ালà§\80 বা à¦\95à§\8bনà§\8b পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাৰ পà§\82ৰà§\8dব ইতিহাস নাই।
+মন à¦\95ৰিব যà§\87 পà§\83ষà§\8dঠাà¦\96ন সà§\8dথানানà§\8dতৰ à¦\95ৰা '''নহ'ব''' যদিহà§\87 নতà§\81ন শিৰà§\8bনামà¦\9fà§\8bত পà§\82ৰà§\8dবৰপৰা à¦\8fà¦\96ন পà§\83ষà§\8dঠা à¦\86à¦\9bà§\87à¦\87, à¦\86ৰà§\81 যদিহà§\87 পà§\82ৰà§\8dবৰ পà§\83ষà§\8dঠাà¦\96ন à¦\95à§\8bনà§\8b পà§\81নৰà§\8dনিৰà§\8dদà§\87শ নহয় à¦\86ৰà§\81 তাৰ à¦\95à§\8bনà§\8b সমà§\8dপাদনাৰ পà§\82ৰà§\8dবইতিহাস নাই।
ইয়াৰ অৰ্থ এয়ে যে ভুল হলে পৃষ্ঠাখন আগৰ ঠাইতে থাকিব, আৰু আপুনি প্ৰচলিত পৃষ্ঠা এখনক আন পৃষ্ঠা এখনেৰে সলনি কৰিব নোৱাৰে।
'''সতৰ্কবাণী !'''
জনপ্ৰিয় পৃষ্ঠা এখনৰ বাবে এয়া এক ডাঙৰ আৰু অনাকাংক্ষিত সাল-সলনি হ’ব পাৰে;
-à¦\8fà¦\87 à¦\95াৰà§\8dয পৰিণাম ভালদৰে বিবেচনা কৰি লয় যেন।",
+à¦\86à¦\97বঢ়াৰ পà§\82ৰà§\8dবà§\87 à¦\8fà¦\87 à¦\95াৰà§\8dযৰ পৰিণাম ভালদৰে বিবেচনা কৰি লয় যেন।",
'movepagetext-noredirectfixer' => "তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰিলে এই পৃষ্ঠাৰ শিৰোনামা সলনি হ'ব, লগতে সমগ্ৰ ইতিহাস নতুন শিৰোনামালৈ স্থানান্তৰ কৰা হ'ব।
পুৰণা শিৰোনামাটো নতুন শিৰোনামালৈ এটা পুনৰ্নিৰ্দেশনা হৈ ৰ'ব।
[[Special:DoubleRedirects|দ্বি পুনৰ্নিৰ্দেশনাসমূহ]] বা [[Special:BrokenRedirects|ভঙা পুনৰ্নিৰ্দেশনসমূহ]] পৰীক্ষা কৰিবলৈ নাপাহৰিব।
'monthsall' => 'সকলো',
'limitall' => 'সকলোবোৰ',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ই-মেইল ঠিকনা নিশ্চিত কৰক',
'confirmemail_noemail' => 'আপোনাৰ [[Special:Preferences|সদস্য পছন্দসমূহ]]ত কোনো বৈধ ই-মেইল ঠিকনা নাই ।',
'confirmemail_text' => '{{SITENAME}}ত ই-মেইল ভিত্তিক সেৱা ব্যৱহাৰ কৰাৰ পূৰ্বে আপুনি আপোনাৰ ই-মেইল ঠিকনা নিশ্চিত কৰিব লাগিব । তলৰ বুটামটো টিপি আপোনাৰ ই-মেইল ঠিকনালৈ এখন নিশ্চিতকৰণ মেইল পঠিয়াওক ।
'specialpages-group-highuse' => 'অধিক ব্যবহৃত পৃষ্ঠাসমূহ',
'specialpages-group-pages' => 'পৃষ্ঠাৰ তালিকাসমূহ',
'specialpages-group-pagetools' => 'পৃষ্ঠা সা-সঁজুলি',
-'specialpages-group-wiki' => 'ৱিà¦\95ি তথà§\8dয à¦\86ৰà§\81 সা-সà¦\81à¦\9cà§\81লি',
+'specialpages-group-wiki' => 'তথ্য আৰু সা-সঁজুলি',
'specialpages-group-redirects' => 'পুনৰ্নিৰ্দেশ কৰা বিশেষ পৃষ্ঠাসমূহ',
'specialpages-group-spam' => 'স্পাম সা-সঁজুলি',
'windows-nonascii-filename' => 'Esta wiki nun permite nomes de ficheru con caráuteres especiales.',
'fileexists' => 'Yá esiste un ficheru con esti nome, por favor comprueba <strong>[[:$1]]</strong> si nun tas seguru de querer camudalu.
[[$1|thumb]]',
-'filepageexists' => "La páxina de descripción d'esti ficheru yá se creó en <strong>[[:$1]]</strong>, pero anguaño nun esiste nengún ficheru con esti nome.
+'filepageexists' => "La páxina de descripción d'esti ficheru creóse yá en <strong>[[:$1]]</strong>, pero anguaño nun esiste nengún ficheru con esti nome.
El resume que pongas nun va apaecer na páxina de descripción.
-Pa facer que'l to resume apaeza, vas tener que lu editar manualmente.
+Pa facer que'l to resume apaeza, vas tener qu'editalu manualmente.
[[$1|thumb]]",
'fileexists-extension' => 'Yá esiste un ficheru con un nome asemeyáu: [[$2|thumb]]
* Nome del ficheru que se quier xubir: <strong>[[:$1]]</strong>
'backend-fail-internal' => 'Hebo un fallu desconocíu nel motor d\'almacenamientu "$1".',
'backend-fail-contenttype' => 'Non se pudo determinar la triba de conteníu de ficheru a guardar en "$1".',
'backend-fail-batchsize' => "El motor d'almacenamientu dio un llote de $1 {{PLURAL:$1|operación|operaciones}} en ficheros; el llímite ye de $2 {{PLURAL:$2|operación|operaciones}}.",
-'backend-fail-usable' => 'Nun se pudo llee o escribir el ficheru «$1» porque nun hai permisos bastantes o falten los direutorios/contenedores.',
+'backend-fail-usable' => 'Nun pudo lleese o escribise nel ficheru «$1» porque nun hai permisos bastantes o falten los direutorios/contenedores.',
# File journal errors
'filejournal-fail-dbconnect' => 'Nun se pudo coneutar cola base de datos del diariu pal sofitu d\'almacenamientu "$1".',
'duplicatesoffile' => "{{PLURAL:$1|El siguiente archivu ye un duplicáu|Los siguientes $1 archivos son duplicaos}} d'esti archivu ([[Special:FileDuplicateSearch/$2|más detalles]]):",
'sharedupload' => "Esti ficheru ye de $1 y se pue usar n'otros proyeutos.",
'sharedupload-desc-there' => 'Esti ficheru ye de $1 y puen usalu otros proyeutos.
-Llee la [páxina de descripción del ficheru $2] pa más información.',
+Llea la [páxina de descripción del ficheru $2] pa más información.',
'sharedupload-desc-here' => "Esti ficheru ye de $1 y puen usalu otros proyeutos.
La descripción de la [$2 páxina de descripción del ficheru] s'amuesa darréu.",
'sharedupload-desc-edit' => "Esti ficheru ye de $1 y se pue usar n'otros proyeutos.
Una páxina tratase como una páxina de dixebra si usa una plantía que tea enllaciada dende [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => 'Páxines con una propiedá de páxina',
+'pageswithprop-legend' => 'Páxines con una propiedá de páxina',
'pageswithprop-text' => "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
'pageswithprop-prop' => 'Nome de la propiedá:',
+'pageswithprop-submit' => 'Dir',
'doubleredirects' => 'Redireiciones dobles',
'doubleredirectstext' => 'Esta páxina llista páxines que redireicionen a otres páxines de redireición.
'version-poweredby-credits' => "Esta wiki funciona con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'otros',
'version-credits-summary' => 'Nos prestaría dar reconocimientu a les siguientes persones pola so contribución a [[Special:Version|MediaWiki]].',
-'version-license-info' => "MediaWiki ye software llibre; pues redistribuilu y/o camudalu baxo los términos de la Llicencia Pública Xeneral GNU tal como ta asoleyada pola Free Software Foundation; o la versión 2 de la Llicencia, o (como prefieras) cualesquier versión posterior.
+'version-license-info' => "MediaWiki ye software llibre; pue redistribuilu y/o camudalu baxo los términos de la Llicencia Pública Xeneral GNU tal como ta asoleyada pola Free Software Foundation; o la versión 2 de la Llicencia, o (como prefieras) cualesquier versión posterior.
-MediaWiki se distribúi col envís de que seya afayadiza, pero ENSIN GARANTÍA DALA; ensin siquiera garantía implícita de COMERCIALIDÁ o ADAUTACIÓN A UN DETERMINÁU PROPÓSITU. Llee la Llicencia Pública Xeneral GNU pa más detalles.
+MediaWiki distribúise col envís de que seya afayadiza, pero ENSIN GARANTÍA DALA; ensin siquiera garantía implícita de COMERCIALIDÁ o ADAUTACIÓN A UN DETERMINÁU PROPÓSITU. Llea la Llicencia Pública Xeneral GNU pa más detalles.
-Tendríes d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llicencia Pública Xeneral GNU] xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lleela en llinia].",
+Tendría d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llicencia Pública Xeneral GNU] xunto con esti programa; sinón, escriba a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lleala en llinia].",
'version-software' => 'Software instaláu',
'version-software-product' => 'Productu',
'version-software-version' => 'Versión',
'logentry-move-move_redir-noredirect' => '$1 treslladó la páxina "$3" a "$4" sobre una redireición ensin dexar una redireición',
'logentry-patrol-patrol' => '$1 marcó la revisión $4 de la páxina "$3" como patrullada',
'logentry-patrol-patrol-auto' => '$1 marcó automaticamente la revisión $4 de la páxina "$3" como patrullada',
-'logentry-newusers-newusers' => "Se creó la cuenta d'usuariu $1",
-'logentry-newusers-create' => "Se creó la cuenta d'usuariu $1",
+'logentry-newusers-newusers' => "Creóse la cuenta d'usuariu $1",
+'logentry-newusers-create' => "Creóse la cuenta d'usuariu $1",
'logentry-newusers-create2' => "$1 creó la cuenta d'usuariu $3",
'logentry-newusers-byemail' => "$1 creó la cuenta d'usuariu $3 y la contraseña uviose per corréu electrónicu",
-'logentry-newusers-autocreate' => 'La cuenta $1 se creó automáticamente',
+'logentry-newusers-autocreate' => 'La cuenta $1 creóse automáticamente',
'logentry-rights-rights' => '$1 camudó la pertenencia a grupos de $3 dende $4 a $5',
'logentry-rights-rights-legacy' => '$1 camudó la pertenencia a grupos de $3',
'logentry-rights-autopromote' => '$1 promocionó automáticamente de $4 a $5',
'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenios}}',
-# Unknown messages
-'pageswithprop-legend' => 'Páxines con una propiedá de páxina',
-'pageswithprop-submit' => 'Dir',
+# Image rotation
+'rotate-comment' => 'Imaxe xirada $1 {{PLURAL:$1|grau|graos}} en sentíu horariu',
+
);
'loginlanguagelabel' => 'Dil: $1',
'suspicious-userlogout' => 'Sizin çıxış üçün cəhdiniz uğursuz alındı. Bu, brouzerin yaxud proksi-keşləmənin düzgün işləməməsindən qaynaqlanır.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP-nin mail() funksiyasında naməlum xəta',
# Change password dialog
'prefs-displaywatchlist' => 'Görüntü variantları',
'prefs-diffs' => 'Fərqlər',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-poçt ünvanı düzgündür',
'email-address-validity-invalid' => 'Düzgün e-poçt ünvanı daxil edin',
'listgrouprights-addgroup-self-all' => 'Bütün qrupları öz hesabına əlavə edə bilər',
'listgrouprights-removegroup-self-all' => 'Bütün qrupları öz hesabından çıxara bilər',
-# E-mail user
+# Email user
'mailnologin' => 'Ünvan yoxdur',
'emailuser' => 'İstifadəçiyə e-məktub yolla',
'emailpage' => 'İstifadəçiyə e-məktub yolla',
'monthsall' => 'hamısı',
'limitall' => 'bütün',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-məktubunu təsdiq et',
'confirmemail_send' => 'Təsdiq kodu göndər',
'confirmemail_sent' => 'Təsdiq e-məktubu göndərildi.',
'loginlanguagelabel' => 'دیل: $1',
'suspicious-userlogout' => 'سیزین چیخیش ایستگینیز رد اولوندو. بو، براوزرین یا پروکسی-کَشلمهسینین دوزگون ایشلهمهمهسیندن قایناقلانیر.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'پیاچپینین mail() فونکسیاسیندا تانینمامیش خطا.',
'user-mail-no-addy' => 'ایمیل آدرسی اولماماقلا، ایمیل گؤندرمگه چالیشدی',
'user-mail-no-body' => 'بیر بوش یا چوخ قیسا یازیسی اولان ایمیل گؤندرمگه چالیشیلدی.',
'search-interwiki-default' => '$1 سونوج:',
'search-interwiki-more' => '(داها)',
'search-relatedarticle' => 'ایلگیلی',
-'mwsuggest-disable' => 'AJAX اؤنرلرینی باغلا',
+'mwsuggest-disable' => 'آختاریش اؤنرلرینی ایشدن سال',
'searcheverything-enable' => 'بوتون آدفضالاریندا آختار',
'searchrelated' => 'ایلگیلی',
'searchall' => 'بوتون',
'prefs-displaywatchlist' => 'گؤرونتو سئچَنکلری',
'prefs-diffs' => 'فرقلر',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ایمیل آدرسی، گئچرلی نظره گلیر',
'email-address-validity-invalid' => 'گئچرلی بیر ایمیل آدرسی وئرین',
اولا بیلر اونلاری داها اویغون صحیفهیه باغلاماق لازیم اولا.<br />
بیر صحیفه، بلیرلندیرمه صحیفهسی کیمی اولار، اگر [[MediaWiki:Disambiguationspage]] صحیفهسینه باغلانمیش بیر شابلوندان ایستیفاده ائتسه.",
+'pageswithprop' => 'صحیفه اؤزللیگی اولان صحیفهلر',
+'pageswithprop-legend' => 'صحیفه اؤزللیگی اولان صحیفهلر',
+'pageswithprop-text' => 'بو صحیفهده، بیر خاص صحیفه اؤزللیگی ایشلدن صحیفهلرین لیستی واردیر.',
+'pageswithprop-prop' => 'اؤزللیک آدی:',
+'pageswithprop-submit' => 'گئت',
+
'doubleredirects' => 'ایکیقات یوللاندیرمالار',
'doubleredirectstext' => 'بو صحیفه دیگر ایستیقامتلندیرمه صحیفهلرینه ایستیقامتلندیرمه ائدن صحیفهلری سیاهیلار.
هر سطرین ائهتیوا ائتدیگی کئچیدلر؛ بیرینجی و ایکینجی ایستیقامتلندیرمه، همچینین ایکینجی ایستیقامتلندیرمک هدفی، کی بو عمومیتله بیرینجی ایستیقامتلندیرمک گؤسترمهسی لازیم اولان "گئرچک" هدف صحیفهسیدیر.
'listgrouprights-addgroup-self-all' => 'بوتون گروپلاری اؤز حسابینا آرتیر',
'listgrouprights-removegroup-self-all' => 'بوتون گروپلاری اؤز حسابیندان سیل',
-# E-mail user
+# Email user
'mailnologin' => 'گؤندرمه آدرسی یوخدور',
'mailnologintext' => 'باشقا ایستیفادهچیلره ایمیل گؤندرک اوچون، [[Special:UserLogin|گیریش]] ائدیب و [[Special:Preferences|ترجیحلر]]ینیزده گئچرلی ایمیل آدرسی وئرمهلیسینیز.',
'emailuser' => 'بو ایستیفادهچییه ایمیل گؤندر',
'usermessage-editor' => 'سیستِم مئساژ گؤندَرَنی',
# Watchlist
-'watchlist' => 'اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ¯Û\8cÙ\85 صØÛ\8cÙ\81Ù\87â\80\8câ\80\8cلر',
+'watchlist' => 'اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ©لر',
'mywatchlist' => 'ایزلهدیکلر',
'watchlistfor2' => '$1 اوچون $2',
'nowatchlist' => 'ایزلمه سیاهینیز بؤشدور.',
بو سئچیمی ائتمهدیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق یوللاندیرمالاری]] یوخلاماغی یاددان چیخارمایین.
باغلانتیلاری اویغون یئره یوللاندیرماسیندان آرخایین اولماق، سیزین مسئولیتینیزدهدیر.
-نظره آلین کی، هدف باشلیق آلتیندا بیر صحیفه مؤوجود اولسا، یئردییشمه '''باش توتمایاجاق'''، مگر بوکی او صحیفه یوللاندیرما اولا و اؤنجه دَییشمه گئچمیشی ده اولمایا. بو او دئمکدیر کی، سهواً آدینی دییشدیگینیز صحیفهلری گئری قایتارا بیلمک اولار، بونونلا یاناشی آرتیق مؤوجود اولان صحیفهنین اوزرینه باشقا صحیفه یازا بیلمزسینیز.
+Ù\86ظرÙ\87 Ø¢Ù\84Û\8cÙ\86 Ú©Û\8cØ\8c Ù\87دÙ\81 باشÙ\84Û\8cÙ\82 Ø¢Ù\84تÛ\8cÙ\86دا بÛ\8cر صØÛ\8cÙ\81Ù\87 Ù\85ؤÙ\88جÙ\88د اÙ\88Ù\84ساØ\8c Û\8cئردÛ\8cÛ\8cØ´Ù\85Ù\87 '''باش تÙ\88تÙ\85اÛ\8cاجاÙ\82'''Ø\8c Ù\85گر بÙ\88Ú©Û\8c اÙ\88 سÙ\88Ù\86راکÛ\8c صØÛ\8cÙ\81Ù\87 Û\8cÙ\88Ù\84â\80\8cÙ\84اÙ\86دÛ\8cرÙ\85ا اÙ\88Ù\84ا Ù\88 اؤÙ\86جÙ\87 دÙ\8eÛ\8cÛ\8cØ´Ù\85Ù\87 گئÚ\86Ù\85Û\8cØ´Û\8c دÙ\87 اÙ\88Ù\84Ù\85اÛ\8cا. بÙ\88 اÙ\88 دئÙ\85Ú©â\80\8cدÛ\8cر Ú©Û\8cØ\8c سÙ\87Ù\88اÙ\8b آدÛ\8cÙ\86Û\8c دÛ\8cÛ\8cشدÛ\8cÚ¯Û\8cÙ\86Û\8cز صØÛ\8cÙ\81Ù\87â\80\8cÙ\84رÛ\8c گئرÛ\8c Ù\82اÛ\8cتارا بÛ\8cÙ\84Ù\85Ú© اÙ\88Ù\84ارØ\8c بÙ\88Ù\86Ù\88Ù\86Ù\84ا Û\8cاÙ\86اشÛ\8c آرتÛ\8cÙ\82 Ù\85ؤÙ\88جÙ\88د اÙ\88Ù\84اÙ\86 صØÛ\8cÙ\81Ù\87â\80\8cÙ\86Û\8cÙ\86 اÙ\88زرÛ\8cÙ\86Ù\87 باشÙ\82ا صØÛ\8cÙ\81Ù\87 Û\8cازا بÛ\8cÙ\84Ù\85زسÛ\8cÙ\86Û\8cز.
'''خبردارلیق!'''
بو یئردییشمه مشهور صحیفه اوچون اساسلی و گؤزلنیلمز اولا بیلر؛ اونا گؤره ده بو دییشیکلیگی یئرینه یئتیرمزدن اول، بونون مومکون نتیجهلرینی باشا دوشدوگونوزدن آرخایین اولون.",
'pageinfo-robot-noindex' => 'ایندِکسلهنه بیلمز',
'pageinfo-views' => 'گؤسترمه صحیفهسی',
'pageinfo-watchers' => 'صحیفهنین تاماشاچی سایی',
+'pageinfo-few-watchers' => '$1-دن آز {{PLURAL:$1|ایزلهین|ایزلهین}}',
'pageinfo-redirects-name' => 'بو صحیفهیه یوللاندیرمالار',
'pageinfo-subpages-name' => 'بو صحیفهنین آلتصحیفهلری',
'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|بیر|$2}} یوللاندیرما؛ {{PLURAL:$3|بیر|$3}} قِیری-یوللاندیرما)',
'monthsall' => 'بوتون',
'limitall' => 'بوتون',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ایمیل-پوست اونوانینی تصدیق ائت',
'confirmemail_noemail' => '[[Special:Preferences|ایستیفادهچی ترجیه لرینی]] تعیین اولونموش اویغون بیر ایمیل عنوانینیز یوخ.',
'confirmemail_text' => 'ویکینین ایمیل اعتباری کوللانمابیلمئک اوچون، اول ایمیل عنوانینیزین تصدیقلنمهسی لازیمدیر.
'duration-centuries' => '{{PLURAL:$1|بیر|$1}} یوز-ایل',
'duration-millennia' => '{{PLURAL:$1|بیر|$1}} مینایل',
+# Image rotation
+'rotate-comment' => 'عکس $1 {{PLURAL:$1|درجه}} ساعات عقربهلری ایستیقامتینده فیرلاندیریلبدیر',
+
);
'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) and the disambiguation template definition (see disambiguations).
-'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} тураһында',
+'aboutsite' => '{{SITENAME}} тураһында',
'aboutpage' => 'Project:Тасуирлама',
'copyright' => '$1 ярашлы эстәлеге менән һәр кем файҙалана ала.',
'copyrightpage' => '{{ns:project}}:Авторлыҡ хоҡуҡтары',
'loginlanguagelabel' => 'Тел: $1',
'suspicious-userlogout' => 'Һеҙҙең сеансты тамамлау тураһында һорауығыҙ кире ҡағылды, сөнки ул төҙөк булмаған браузер йәки кэшлаусы прокси тарафынан ебәрелгән һорауға оҡшаған.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP-ның mail() функцияһында билдәһеҙ хата',
'user-mail-no-addy' => 'Электрон почта адресы булмайынса электрон хәбәр ебәреп ҡараны',
'prefs-displaywatchlist' => 'Күренеш көйләүҙәре',
'prefs-diffs' => 'Айырмалар',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mail адрес дөрөҫ булғанға оҡшаған',
'email-address-validity-invalid' => 'Дөрөҫ e-mail адресын керетегеҙ',
'listgrouprights-addgroup-self-all' => 'Үҙенең иҫәп яҙмаһына бөтә төркөмдәрҙе өҫтәү',
'listgrouprights-removegroup-self-all' => 'Үҙенең иҫәп яҙмаһынан бөтә төркөмдәрҙе юйыу',
-# E-mail user
+# Email user
'mailnologin' => 'Хат ебәреү өсөн адрес юҡ',
'mailnologintext' => 'Башҡа ҡатнашыусыларға хат ебәреү өсөн, һеҙ [[Special:UserLogin|танылырға]] һәм [[Special:Preferences|көйләүҙәрегеҙҙә]] ысын электрон адрес почтаһы кереткән булырға тейешһегеҙ.',
'emailuser' => 'Ҡатнашыусыға хат',
'monthsall' => 'бөтә',
'limitall' => 'бөтә',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Электрон почта адресын раҫлау',
'confirmemail_noemail' => 'Һеҙҙең [[Special:Preferences|көйләүҙәрегеҙҙә]] дөрөҫ электрон почта адресы юҡ.',
'confirmemail_text' => '{{SITENAME}} проекты электрон почта мөмкинлектәрен ҡулланыр алдынан электрон почта адресының раҫланыуын талап итә.
'listgrouprights-addgroup-self-all' => 'نونیت کل گروهان په وتی حساب هور کنت',
'listgrouprights-removegroup-self-all' => 'تونیت کل گروه ان چه وتی حساب بزوریت',
-# E-mail user
+# Email user
'mailnologin' => 'هچ آدرس دیم دهگ',
'mailnologintext' => 'شما بایدن [[Special:UserLogin|وارد بیت]] و یک معتبرین آدرس ایمیلی داشته بیت ته وتی [[Special:Preferences|ترجیحات]] په دیم داتن ایمیل په دگه کاربران',
'emailuser' => 'په ای کابر ایمیل دیم دی',
'namespacesall' => 'کل',
'monthsall' => 'کل',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'آدرس ایمیل تایید کن',
'confirmemail_noemail' => 'شما یک معتبرین آدرس ایمیل تنظیم نه کتت نه وتی [[Special:Preferences|ترجیحات کاربر]].',
'confirmemail_text' => '{{SITENAME}} لوٹیت که شما وتی آدرس ایمیلء تایید کنید پیش چه شی که سرویسان ایمیلی استفاده کنیت.
'loginlanguagelabel' => 'Lengguwahe: $1',
'suspicious-userlogout' => 'An hinahagad mong magluwas pinagpundo nin huli ta ini gayod pinagpadara sa paagi nin sarong pasang kilyaw o proksing hilom.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Bakong bantog na kasalaan sa PHP mail() function.',
'user-mail-no-addy' => 'Nagprubar na magpadara nin e-koreo na mayo nin e-koreong address.',
'user-mail-no-body' => 'Nagprubar na magpadara nin e-surat na mayong laman o daeng kanultulan na halipot an hawak.',
'prefs-displaywatchlist' => 'Ipahiling ang mga pagpipilian',
'prefs-diffs' => 'Diffs',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'An e-koreo nagpapahiling na balido',
'email-address-validity-invalid' => 'Magkaag nin sarong balidong e-koreong address',
'listgrouprights-addgroup-self-all' => 'Idagdag an gabos na mga grupo tanganing magkaigwa nin sadireng panindog',
'listgrouprights-removegroup-self-all' => 'Halion an gabos na mga grupo gikan sa sadireng panindog',
-# E-mail user
+# Email user
'mailnologin' => 'Mayong direksyón nin destino',
'mailnologintext' => "Kaipuhan ika si [[Special:UserLogin|nakalaog]]
asin may marhay na ''e''-surat sa saimong [[Special:Preferences|Mga kabôtan]]
'monthsall' => 'gabos',
'limitall' => 'gabos',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => "Kompirmaron an ''e''-surat",
'confirmemail_noemail' => "Mayô kang pigkaag na marhay na ''e''-surat sa saimong [[Special:Preferences|mga kabôtan nin parágamit]].",
'confirmemail_text' => '{{SITENAME}} minakaipo na balidaron an saimong e-surat na adres bago mo gagamiton an mga estima kan e-surat.
'postcomment' => 'Новая сэкцыя',
'articlepage' => 'Паказаць старонку зьместу',
'talk' => 'Абмеркаваньне',
-'views' => 'Ð\9fÑ\80аглÑ\8fды',
+'views' => 'Ð Ñ\8dжÑ\8bмы',
'toolbox' => 'Інструмэнты',
'userpage' => 'Паказаць старонку ўдзельніка',
'projectpage' => 'Паказаць старонку праекту',
'restorelink' => '$1 {{PLURAL:$1|выдаленую зьмену|выдаленыя зьмены|выдаленых зьменаў}}',
'feedlinks' => 'Стужка:',
'feed-invalid' => 'Памылковы тып стужкі.',
-'feed-unavailable' => 'Стужкі не працуюць',
+'feed-unavailable' => 'Стужкі сындыкацыі недаступныя',
'site-rss-feed' => '$1 — RSS-стужка',
'site-atom-feed' => '$1 — Atom-стужка',
'page-rss-feed' => '«$1» — RSS-стужка',
«$1»
адбыўся з функцыі «$2».
База зьвестак вярнула памылку «$3: $4»',
-'laggedslavemode' => 'Увага: старонка можа ня ўтрымліваць апошніх зьменаў.',
+'laggedslavemode' => "'''Увага:''' старонка можа ня ўтрымліваць апошніх зьменаў.",
'readonly' => 'База зьвестак заблякаваная',
-'enterlockreason' => 'Ð\9fазнаÑ\87Ñ\86е пÑ\80Ñ\8bÑ\87Ñ\8bнÑ\83 блÑ\8fкаванÑ\8cнÑ\8f Ñ\96 вÑ\8bзнаÑ\87аны час разблякаваньня',
+'enterlockreason' => 'Ð\9fазнаÑ\87Ñ\86е пÑ\80Ñ\8bÑ\87Ñ\8bнÑ\83 блÑ\8fкаванÑ\8cнÑ\8f Ñ\96 заплÑ\8fнаваны час разблякаваньня',
'readonlytext' => 'База зьвестак заблякаваная для дадаваньня новых старонак і іншых зьменаў, верагодна з прычыны тэхнічнага абслугоўваньня, пасьля якога будзе адноўлена звычайная праца.
Адміністратар, які заблякаваў базу зьвестак, пакінуў наступнае тлумачэньне: $1',
'logout' => 'Выйсьці',
'userlogout' => 'Выйсьці',
'notloggedin' => 'Вы не ўвайшлі ў сыстэму',
-'nologin' => "Ня маеце рахунку? '''$1'''.",
-'nologinlink' => 'Стварыць рахунак',
-'createaccount' => 'СÑ\82ваÑ\80Ñ\8bÑ\86Ñ\8c Ñ\80аÑ\85Ñ\83нак',
-'gotaccount' => "Ужо маеце рахунак? '''$1'''.",
+'nologin' => 'Ня маеце рахунку? $1.',
+'nologinlink' => 'Стварыце рахунак',
+'createaccount' => 'СÑ\82ваÑ\80Ñ\8dнÑ\8cне Ñ\80аÑ\85Ñ\83нкÑ\83',
+'gotaccount' => 'Ужо маеце рахунак? $1.',
'gotaccountlink' => 'Увайдзіце',
-'userlogin-resetlink' => 'Ð\97абÑ\8bлÑ\96Ñ\81Ñ\8f пÑ\80а зьвесткі для ўваходу?',
+'userlogin-resetlink' => 'Ð\97абÑ\8bлÑ\96Ñ\81Ñ\8f на зьвесткі для ўваходу?',
'createaccountmail' => 'Стварыць часовы адвольны пароль і даслаць яго на e-mail адрас, пазначаны ніжэй',
'createaccountreason' => 'Прычына:',
'badretype' => 'Уведзеныя Вамі паролі не супадаюць.',
'blocked-mailpassword' => 'З Вашага IP-адрасу забароненыя рэдагаваньні, а таму таксама для прадухіленьня шкоды недаступная функцыя аднаўленьня паролю.',
'eauthentsent' => 'Пацьверджаньне было дасланае на пазначаны адрас электроннай пошты.
У лісьце ўтрымліваюцца інструкцыі, па выкананьні якіх, Вы зможаце пацьвердзіць, што адрас сапраўды належыць Вам, і на гэты адрас будзе дасылацца пошта адсюль.',
-'throttled-mailpassword' => 'Ð\9dапамÑ\96н паÑ\80олÑ\8e Ñ\9eжо бÑ\8bÑ\9e даÑ\81ланÑ\8b на пÑ\80аÑ\86Ñ\8fгÑ\83 {{PLURAL:$1|апоÑ\88нÑ\8fй $1 гадзÑ\96нÑ\8b|апоÑ\88нÑ\96Ñ\85 $1 гадзÑ\96наÑ\9e|апоÑ\88нÑ\96Ñ\85 $1 гадзінаў}}.
-Для прадухіленьня злоўжываньняў, напамін будзе дасылацца не часьцей аднаго разу за $1 {{PLURAL:$1|гадзіну|гадзіны|гадзінаў}}.',
+'throttled-mailpassword' => 'Ð\9bÑ\96Ñ\81Ñ\82 пÑ\80а Ñ\81кÑ\96данÑ\8cне паÑ\80олÑ\8e Ñ\9eжо бÑ\8bло даÑ\81лана за {{PLURAL:$1|$1 апоÑ\88нÑ\8eÑ\8e гадзÑ\96нÑ\83|$1 апоÑ\88нÑ\96Ñ\8f гадзÑ\96нÑ\8b|$1 апоÑ\88нÑ\96Ñ\85 гадзінаў}}.
+Для прадухіленьня злоўжываньняў напамін будзе дасылацца не часьцей як аднойчы ў $1 {{PLURAL:$1|гадзіну|гадзіны|гадзінаў}}.',
'mailerror' => 'Памылка пры адпраўцы электроннай пошты: $1',
'acct_creation_throttle_hit' => 'Наведвальнікі гэтай вікі, якія карысталіся Вашым ІР-адрасам, ужо стварылі $1 {{PLURAL:$1|рахунак у|рахункі ў|рахункаў у}} апошнія дні, што перавышае максымальную дазволеную колькасьць за гэты пэрыяд.
У выніку, наведвальнікі, якія карыстаюцца гэтым ІР-адрасам, ня могуць стварыць зараз болей рахункаў.',
# Special:PasswordReset
'passwordreset' => 'Ачыстка паролю',
-'passwordreset-text' => 'Запоўніце гэтую форму, каб атрымаць напамін праз электронную пошту пра Вашыя зьвесткі для ўваходу.',
+'passwordreset-text' => 'Запоўніце гэтую форму, каб скінуць пароль.',
'passwordreset-legend' => 'Ачысьціць пароль',
'passwordreset-disabled' => 'Магчымасьць ачысткі паролю была забароненая ў {{GRAMMAR:месны|{{SITENAME}}}}.',
'passwordreset-pretext' => '{{PLURAL:$1||Увядзіце ніжэй частку зьвестак}}',
'passwordreset-capture-help' => 'Калі Вы пазначыце гэтае поле, электронны ліст (з часовым паролем), будзе паказаны Вам як толькі ён будзе дасланы ўдзельніку.',
'passwordreset-email' => 'Адрас электроннай пошты:',
'passwordreset-emailtitle' => 'Падрабязнасьці рахунку ў {{GRAMMAR:месны|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Ð\9dеÑ\85Ñ\82а (магÑ\87Ñ\8bма Ð\92Ñ\8b, з IP-адÑ\80аÑ\81Ñ\83 $1) зÑ\80абÑ\96Ñ\9e запÑ\8bÑ\82 на аÑ\82Ñ\80Ñ\8bманÑ\8cне падÑ\80абÑ\8fзнаÑ\81Ñ\8cÑ\86Ñ\8fÑ\9e Ð\92аÑ\88ага Ñ\80аÑ\85Ñ\83нкÑ\83 Ñ\9e {{GRAMMAR:меÑ\81нÑ\8b|{{SITENAME}}}} ($4). {{PLURAL:$3|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8b Ñ\80аÑ\85Ñ\83нак Ñ\83дзелÑ\8cнÑ\96ка зÑ\8cвÑ\8fзанÑ\8b|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\80аÑ\85Ñ\83нкÑ\96 Ñ\83дзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:
+'passwordreset-emailtext-ip' => 'Ð\9dеÑ\85Ñ\82а (магÑ\87Ñ\8bма Ð\92Ñ\8b, з IP-адÑ\80аÑ\81Ñ\83 $1) зÑ\80абÑ\96Ñ\9e запÑ\8bÑ\82 на ваÑ\88ага паÑ\80олÑ\8e Ñ\9e {{GRAMMAR:меÑ\81нÑ\8b|{{SITENAME}}}} ($4). {{PLURAL:$3|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8b Ñ\80аÑ\85Ñ\83нак Ñ\83дзелÑ\8cнÑ\96ка зÑ\8cвÑ\8fзанÑ\8b|Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\8bÑ\8f Ñ\80аÑ\85Ñ\83нкÑ\96 Ñ\9eдзельнікаў зьвязаныя}} з гэтым адрасам электроннай пошты:
$2
Вы можаце праігнараваць гэтае паведамленьне, і працягваць выкарыстоўваць стары пароль.',
'passwordreset-emailelement' => 'Імя ўдзельніка: $1
Часовы пароль: $2',
-'passwordreset-emailsent' => 'Ð\9dапамÑ\96н бÑ\8bÑ\9e даÑ\81ланÑ\8b па Ñ\8dлекÑ\82Ñ\80оннай поÑ\88Ñ\86е.',
-'passwordreset-emailsent-capture' => 'ÐлекÑ\82Ñ\80оннÑ\8b лÑ\96Ñ\81Ñ\82 з напамÑ\96нам быў дасланы, што паказана ніжэй.',
-'passwordreset-emailerror-capture' => 'ÐлекÑ\82Ñ\80оннÑ\8b лÑ\96Ñ\81Ñ\82 з напамÑ\96нам бÑ\8bÑ\9e Ñ\81Ñ\82воÑ\80анÑ\8b, Ñ\88Ñ\82о паказана нÑ\96жÑ\8dй, але адбÑ\8bлаÑ\81Ñ\8f памÑ\8bлка адпÑ\80аÑ\9eкÑ\96 Ñ\9eдзельніку: $1',
+'passwordreset-emailsent' => 'Ð\9bÑ\96Ñ\81Ñ\82 пÑ\80а Ñ\81кÑ\96данÑ\8cне паÑ\80олÑ\8e бÑ\8bÑ\9e даÑ\81ланÑ\8b.',
+'passwordreset-emailsent-capture' => 'Ð\9bÑ\96Ñ\81Ñ\82 пÑ\80а Ñ\81кÑ\96данÑ\8cне паÑ\80олÑ\8e быў дасланы, што паказана ніжэй.',
+'passwordreset-emailerror-capture' => 'Ð\9bÑ\96Ñ\81Ñ\82 пÑ\80а Ñ\81кÑ\96данÑ\8cне паÑ\80олÑ\8e бÑ\8bÑ\9e Ñ\81Ñ\82воÑ\80анÑ\8b Ñ\96 паказанÑ\8b нÑ\96жÑ\8dй, але не Ñ\9eдалоÑ\81Ñ\8f адпÑ\80авÑ\96Ñ\86Ñ\8c Ñ\8fго каÑ\80Ñ\8bÑ\81Ñ\82альніку: $1',
# Special:ChangeEmail
'changeemail' => 'Зьмяніць адрас электроннай пошты',
Старонка лічыцца шматзначнай, калі яна ўтрымлівае шаблён назва якога знаходзіцца на старонцы [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => 'Старонкі з уласьцівасьцямі старонак',
+'pageswithprop-legend' => 'Старонкі з уласьцівасьцямі старонак',
'pageswithprop-text' => 'На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўныя ўласьцівасьці старонак',
'pageswithprop-prop' => 'Імя ўласьцівасьці:',
+'pageswithprop-submit' => 'Паказаць',
'doubleredirects' => 'Двайныя перанакіраваньні',
'doubleredirectstext' => 'На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне.
# New logging system
'logentry-delete-delete' => '$1 {{GENDER:$2|выдаліў|выдаліла}} старонку $3',
-'logentry-delete-restore' => '$1 аднавіў старонку $3',
-'logentry-delete-event' => '$1 зьмяніў бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале|падзеяў у журнале}} на $3: $4',
-'logentry-delete-revision' => '$1 зьмяніў бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў|вэрсіяў}} старонкі $3: $4',
-'logentry-delete-event-legacy' => '$1 зьмяніў бачнасьць падзеяў у журнале на $3',
-'logentry-delete-revision-legacy' => '$1 зьмяніў бачнасьць вэрсіяў старонкі $3',
-'logentry-suppress-delete' => '$1 схаваў старонку $3',
-'logentry-suppress-event' => '$1 прыхавана зьмяніў бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале|падзеяў у журнале}} на $3: $4',
-'logentry-suppress-revision' => '$1 прыхавана зьмяніў бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў|вэрсіяў}} старонкі $3: $4',
-'logentry-suppress-event-legacy' => '$1 прыхавана зьмяніў бачнасьць падзеяў у журнале на $3',
-'logentry-suppress-revision-legacy' => '$1 прыхавана зьмяніў бачнасьць вэрсіяў старонкі $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале}} на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць вэрсіяў старонкі $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|схаваў|схавала}} старонку $3',
+'logentry-suppress-event' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|падзеі ў журнале|падзеяў у журнале}} на $3: $4',
+'logentry-suppress-revision' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4',
+'logentry-suppress-event-legacy' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3',
+'logentry-suppress-revision-legacy' => '$1 прыхавана {{GENDER:$2|зьмяніў|зьмяніоа}} бачнасьць вэрсіяў старонкі $3',
'revdelete-content-hid' => 'зьмест схаваны',
'revdelete-summary-hid' => 'апісаньне рэдагаваньня схаванае',
'revdelete-uname-hid' => 'імя ўдзельніка схаванае',
'revdelete-restricted' => 'ужыць абмежаваньні для адміністратараў',
'revdelete-unrestricted' => 'зьнятыя абмежаваньні для адміністратараў',
'logentry-move-move' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4',
-'logentry-move-move-noredirect' => '$1 перанёс старонку $3 у $4 без пакінутага перанакіраваньня',
-'logentry-move-move_redir' => '$1 перанёс старонку $3 у $4 паўзьверх перанакіраваньня',
-'logentry-move-move_redir-noredirect' => '$1 перанёс старонку $3 у $4 паўзьверх перанакіраваньня без пакінутага перанакіраваньня',
-'logentry-patrol-patrol' => '$1 пазначыў вэрсію $4 старонкі $3 як правераную',
-'logentry-patrol-patrol-auto' => '$1 аўтаматычна пазначыў вэрсію $4 старонкі $3 як правераную',
-'logentry-newusers-newusers' => 'Быў створаны рахунак $1',
-'logentry-newusers-create' => 'Быў створаны рахунак $1',
-'logentry-newusers-create2' => '$1 стварыў рахунак $3',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 без пакінутага перанакіраваньня',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 паўзьверх перанакіраваньня',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 паўзьверх перанакіраваньня без пакінутага перанакіраваньня',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|пазначыў|пазначыла}} вэрсію $4 старонкі $3 як правераную',
+'logentry-patrol-patrol-auto' => '$1 аўтаматычна {{GENDER:$2|пазначыў|пазначыла}} вэрсію $4 старонкі $3 як правераную',
+'logentry-newusers-newusers' => 'Быў {{GENDER:$2|створаны}} рахунак $1',
+'logentry-newusers-create' => 'Быў {{GENDER:$2|створаны}} рахунак $1',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|стварыў|стварыла}} рахунак $3',
'logentry-newusers-byemail' => '$1 {{GENDER:$2|стварыў|стварыла}} рахунак $3, пароль быў дасланы электроннай поштай',
-'logentry-newusers-autocreate' => 'Рахунак $1 быў створаны аўтаматычна',
+'logentry-newusers-autocreate' => 'Рахунак $1 быў {{GENDER:$2|створаны}} аўтаматычна',
'logentry-rights-rights' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групы з $4 на $5',
'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў',
'logentry-rights-autopromote' => '$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
'duration-centuries' => '$1 {{PLURAL:$1|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
-# Unknown messages
-'pageswithprop-legend' => 'Старонкі з уласьцівасьцямі старонак',
-'pageswithprop-submit' => 'Паказаць',
+# Image rotation
+'rotate-comment' => 'Выява павернутая на $1{{PLURAL:$1|°}} па гадзіньнікавай стрэлцы',
+
);
'tooltip-n-help' => 'जगह पता लगावे खातिर',
'tooltip-t-whatlinkshere' => 'अहिजा लिंक होखे वाला सब विकि पन्ना के सूची',
'tooltip-t-recentchangeslinked' => 'ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन',
+'tooltip-feed-atom' => 'ई पन्ना खातिर अणु फ़ीड',
'tooltip-t-upload' => 'फाईल लादीं (अपलोड )',
'tooltip-t-specialpages' => 'ख़ाश पन्नवन के सूची',
'tooltip-t-print' => 'ई पन्ना के छापे लायक संस्करण।',
'loginlanguagelabel' => 'Bahasa: $1',
'suspicious-userlogout' => 'Parmintaan Pian hagan kaluar log kada ditarima karana nangkaya dikirim matan panjalajah web rakai atawa tatangkap proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Kasalahan kada dipinandui dalam pungsi surat () PHP',
'user-mail-no-addy' => 'Mancuba mangirim suril kada baalamat suril.',
'prefs-displaywatchlist' => 'Pilihan tampilan',
'prefs-diffs' => 'Bida',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Alamat suril tacungul sah',
'email-address-validity-invalid' => 'Buati sabuah alamat suril nang sah',
'listgrouprights-addgroup-self-all' => 'Tambahi samunyaan gagalambang ka akun surang',
'listgrouprights-removegroup-self-all' => 'Hapus samunyaan gagalambang matan akun surang',
-# E-mail user
+# Email user
'mailnologin' => 'Kadada alamat kirim',
'mailnologintext' => 'Pian musti [[Special:UserLogin|babuat log]] wan baisi sabuah alamat suril sah di [[Special:Preferences|kakatujuan]] Pian hagan mangirim suril ka papamuruk lain.',
'emailuser' => 'Suril pamakai',
'monthsall' => 'samunyaan',
'limitall' => 'samunyaan',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Yakinakan alamat suril',
'confirmemail_noemail' => 'Pian kada baisi sabuah alamat suril nang sah dalam [[Special:Preferences|kakatujuan pamuruk]] Pian.',
'confirmemail_text' => '{{SITENAME}} mawajibakan Pian mayakinakan alamat suril Pian sabalum pitur-pitur suril dipurukakan.
* @author Ehsanulhb
* @author Jayantanth
* @author Kaganer
+ * @author Leemon2010
* @author Mayeenul Islam
* @author Nasir8891
* @author Prometheus.pyrphoros
'projectpage' => 'মেটা-পাতা দেখুন',
'imagepage' => 'ফাইল পাতা দেখুন',
'mediawikipage' => 'বার্তার পাতা দেখুন',
-'templatepage' => 'à¦\9fà§\87মà§\8dপলেট পাতা দেখুন',
+'templatepage' => 'à¦\9fà§\87মপà§\8dলেট পাতা দেখুন',
'viewhelppage' => 'সহায়িকা পাতা দেখুন',
'categorypage' => 'বিষয়শ্রেণীর পাতাটি দেখুন',
'viewtalkpage' => 'আলোচনা দেখুন',
'disclaimerpage' => 'Project:সাধারণ দাবিত্যাগ',
'edithelp' => 'সম্পাদনা সহায়িকা',
'edithelppage' => 'Help:কিভাবে একটি পাতা সম্পাদনা করবেন',
-'helppage' => 'Help:সà§\82à¦\9aি',
+'helppage' => 'Help:সà§\82à¦\9aà§\80',
'mainpage' => 'প্রধান পাতা',
'mainpage-description' => 'প্রধান পাতা',
'policy-url' => 'Project:নীতিমালা',
'nstab-project' => 'প্রকল্প পাতা',
'nstab-image' => 'ফাইল',
'nstab-mediawiki' => 'বার্তা',
-'nstab-template' => 'à¦\9fà§\87মà§\8dপলেট',
+'nstab-template' => 'à¦\9fà§\87মপà§\8dলেট',
'nstab-help' => 'সহায়িকা',
'nstab-category' => 'বিষয়শ্রেণী',
"$1"
"$2" ফাংশনের ভিতর থেকে।
ডাটাবেজ যে ত্রুটি পাঠিয়েছে: "$3: $4"',
-'laggedslavemode' => 'সতরà§\8dà¦\95à§\80à¦\95রণ: পাতাà¦\9fি সমà§\8dà¦à¦¬à¦¤ সামà§\8dপà§\8dরতি হালনাà¦\97াদà¦\95à§\83ত নয়।',
+'laggedslavemode' => 'সতর্কীকরণ: পাতাটি সম্ভবত সম্প্রতি হালনাগাদকৃত নয়।',
'readonly' => 'ডেটাবেজের ব্যবহার সীমাবদ্ধ',
'enterlockreason' => 'তালাবদ্ধ করার কারণ কি তা বলুন, সাথে কখন তালা খুলবেন তার আনুমানিক সময় উল্লখ্য করুন',
'readonlytext' => 'নতুন ভুক্তি এবং অন্যান্য সম্পাদনার জন্য ডাটাবেজ বর্তমানে বন্ধ করা আছে। সম্ভবত ডাটাবেজ রক্ষণাবেক্ষণের নিয়মিত কাজ চলছে। কিছুক্ষণ পরে এটি স্বাভাবিক অবস্থায় ফিরে আসবে।
'gotaccount' => "আপনার কি ইতিমধ্যে একটি অ্যাকাউন্ট তৈরি করা আছে? '''$1''' করুন।",
'gotaccountlink' => 'প্রবেশ',
'userlogin-resetlink' => 'আপনার লগইনের বিস্তারিত তথ্যাদি ভুলে গেছেন?',
-'createaccountmail' => 'à¦\87-মà§\87à¦\87লà§\87র মাধà§\8dযমà§\87',
+'createaccountmail' => 'à¦\8fà¦\95à¦\9fি রâ\80\8cà§\8dযানà§\8dডম পাসà¦\93য়ারà§\8dড নিরà§\8dবাà¦\9aন à¦\95রà§\81ন à¦\8fবà¦\82 নিà¦\9aà§\87র নিরà§\8dধারিত à¦\87মà§\87à¦\87ল ঠিà¦\95ানায় পাঠিয়à§\87 দিন',
'createaccountreason' => 'কারণ:',
-'badretype' => 'শব্দচাবি (password) দুটি মিলছেনা।',
+'badretype' => "আপনার প্রবেশ করানো শব্দচাবি'টি মিলছেনা।",
'userexists' => 'এই ব্যবহারকারী নামটি ইতমধ্যে ব্যবহার করা হয়েছে।
অনুগ্রহ করে অন্য নাম বেছে নিন।',
'loginerror' => 'লগ-ইন করতে সমস্যা হয়েছে',
'createaccount-text' => 'কেউ $2-এর জন্য {{SITENAME}}-এ একটি অ্যাকাউন্ট সৃষ্টি করেছেন ($4)। "$2"-এর জন্য শব্দচাবি হল "$3"। আপনার এখন অ্যাকাউন্টে প্রবেশ করে শব্দচাবি পরিবর্তন করা উচিত।
যদি ভুল করে অ্যাকাউন্টটি সৃষ্টি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।',
-'usernamehasherror' => 'বà§\8dযবà¦\95ারà¦\95ারà§\80 নামà§\87 হà§\8dযাস বর্ণ থাকতে পারবে না',
+'usernamehasherror' => 'বà§\8dযবà¦\95ারà¦\95ারà§\80 নামà§\87 হà§\8dযাশ বর্ণ থাকতে পারবে না',
'login-throttled' => 'আপনি সাম্প্রতিক পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।
পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে কিছুক্ষণ অপেক্ষা করুন।',
'login-abort-generic' => 'আপনার লগইন সফল ছিলো না - বাতিল করা হয়েছে',
'loginlanguagelabel' => 'ভাষা: $1',
'suspicious-userlogout' => 'আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'পিএইচপি এর মেইল () কার্যে অজ্ঞাত ভুল',
'user-mail-no-addy' => 'কোনো ইমেইল ঠিকানা ছাড়াই ইমেইল করার চেষ্টা করা হয়েছে।',
+'user-mail-no-body' => 'অত্যান্ত সংক্ষিপ্ত অথবা কোনো তথ্য ছাড়াই ইমেইল পাঠানোর চেষ্টা করা হয়েছিল।',
# Change password dialog
'resetpass' => 'শব্দচাবি পরিবর্তন',
'resetpass_header' => 'শব্দচাবি পরিবর্তন করো',
'oldpassword' => 'পুরনো শব্দচাবি',
'newpassword' => 'নতুন শব্দচাবি:',
-'retypenew' => 'নতà§\81ন শবà§\8dদà¦\9aাবি à¦\86বার à¦\9fাà¦\87প à¦\95রুন:',
+'retypenew' => 'নতà§\81ন শবà§\8dদà¦\9aাবি à¦\86বার লিà¦\96ুন:',
'resetpass_submit' => 'শব্দচাবি দাও এবং লগ-ইন করো',
'resetpass_success' => 'আপনার শব্দচাবি সাফল্যের সাথে পরিবর্তীত হয়েছে! এখন আপনি তে লগ-ইন হচ্ছেন...',
'resetpass_forbidden' => 'শব্দচাবি পরিবর্তন করা সম্ভব নয়',
# Edit pages
'summary' => 'সারাংশ:',
'subject' => 'বিষয়/শিরোনাম:',
-'minoredit' => 'à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয',
+'minoredit' => 'à¦\8fà¦\9fি à¦\8fà¦\95à¦\9fি à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয সমà§\8dপাদনা',
'watchthis' => 'এই পাতাটি নজরে রাখুন',
'savearticle' => 'সংরক্ষণ',
'preview' => 'প্রাকদর্শন',
'copyrightwarning2' => "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''",
'longpageerror' => "'''ত্রুটি: আপনার জমা দেয়া টেক্সটের পরিমাণ {{PLURAL:$1|এক কিলোবাইট|$1 কিলোবাইট}}, যা সর্বোচ্চ সীমা {{PLURAL:$2|এক কিলোবাইটের|$2 কিলোবাইটের}} চেয়ে বেশি।'''
এটি সংরক্ষণ করা সম্ভব নয়।",
-'readonlywarning' => "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।
-আপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।'''
+'readonlywarning' => "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।'''
+আপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।
যে প্রশাসক এই ডাটাবেজটি অবরুদ্ধ করেছেন তিনি যা ব্যাখ্যা দিয়েছেন: $1",
'protectedpagewarning' => "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''
'search-interwiki-default' => '$1 ফলাফলসমূহ:',
'search-interwiki-more' => '(আরও)',
'search-relatedarticle' => 'সম্পর্কিত',
-'mwsuggest-disable' => 'AJAX পরামর্শ নিষ্ক্রিয় করা হোক',
+'mwsuggest-disable' => 'অনুসন্ধান পরামর্শ বন্ধ করুন',
'searcheverything-enable' => 'সকল নামস্থানে অনুসন্ধান করো',
'searchrelated' => 'সম্পর্কিত',
'searchall' => 'সমস্ত',
'prefs-displaywatchlist' => 'প্রদর্শনী অপশন',
'prefs-diffs' => 'পার্থক্য',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ইমেইল ঠিকানাটি সঠিক',
'email-address-validity-invalid' => 'সঠিক ইমেই ঠিকানা প্রদান করুন',
এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।<br />
যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।",
+'pageswithprop-submit' => 'চলো',
+
'doubleredirects' => 'দুইবার করা পুনর্নির্দেশনাগুলি',
'doubleredirectstext' => 'এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত "আসল" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।
<del>কেটে দেওয়া</del> ভুক্তিগুলো ঠিক করা হয়েছে।',
'listgrouprights-addgroup-self-all' => 'নিজের অ্যাকাউন্টে সকল দল সংযোজন',
'listgrouprights-removegroup-self-all' => 'নিজের অ্যাকাউন্ট থেকে সকল দল অপসারণ',
-# E-mail user
+# Email user
'mailnologin' => 'প্রাপকের ঠিকানা নেই',
'mailnologintext' => "অন্য ব্যবহারকারীদেরকে ই-মেইল পাঠাতে হলে আপনাকে অবশ্যই আগে [[Special:UserLogin|লগ-ইন]] করতে হবে এবং ''[[Special:Preferences|আপনার পছন্দ তালিকায়]] আপনার ই-মেইল ঠিকানাটি ঠিকমত দিতে হবে।",
'emailuser' => 'ইমেইল করো',
এখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
'protect-cascadeon' => 'এই পাতাটি বর্তমানে সুরক্ষিত আছে, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতায়|টি পাতায়}} অন্তর্ভুক্ত, যাতে (যেগুলিতে) প্রপাতাকারে সুরক্ষা চালু আছে। আপনি এই পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারেন, তবে এটি প্রপাতাকার সুরক্ষাটিতে কোন পরিবর্তন সাধন করবে না।',
'protect-default' => 'সমস্ত ব্যবহারকারীর জন্য',
-'protect-fallback' => '"$1" à¦\85নà§\81মতি দরà¦\95ার',
-'protect-level-autoconfirmed' => 'নতà§\81ন à¦\8fবà¦\82 বà§\87নামà§\80 বà§\8dযবহারà¦\95ারà§\80দà§\87র বাধা দাà¦\93',
-'protect-level-sysop' => 'কেবল প্রশাসকদের জন্য',
+'protect-fallback' => '"$1" à¦\85ধিà¦\95ার রয়à§\87à¦\9bà§\87 à¦\8fমন বà§\8dযবহারà¦\95ারà§\80দà§\87র à¦\9cনà§\8dয à¦\85নà§\81মতি',
+'protect-level-autoconfirmed' => 'à¦\95à§\87বলমাতà§\8dর সয়à¦\82à¦\95à§\8dরিয় পরà§\80à¦\95à§\8dষিত বà§\8dযবহারà¦\95ারà§\80দà§\87র à¦\9cনà§\8dয',
+'protect-level-sysop' => 'কেবল প্রশাসকদের জন্য অনুমতি',
'protect-summary-cascade' => 'প্রপাতাকার',
'protect-expiring' => '$1 (UTC) সময়ে মেয়াদোত্তীর্ণ',
'protect-expiring-local' => 'মেয়াদ উত্তীর্ণের সময় $1',
'monthsall' => 'সমস্ত',
'limitall' => 'সমস্ত',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ই-মেইলের ঠিকানা নিশ্চিত করুন',
'confirmemail_noemail' => 'আপনার [[Special:Preferences|ব্যবহারকারী পছন্দগুলিতে]] কোন বৈধ ই-মেইল ঠিকানা দেয়া হয়নি।',
'confirmemail_text' => '{{SITENAME}}-এ ই-মেইল ফিচারগুলি ব্যবহার করার আগে আপনাকে আপনার ই-মেইল ঠিকানা নিশ্চিত করতে হবে। নিচের বোতামটি চেপে আপনার ই-মেইল ঠিকানায় একটি নিশ্চিতকরণ চিঠি পাঠান। এই চিঠিতে একটি কোড ধারণকারী সংযোগ থাকবে; আপনার ই-মেইল ঠিকানা যা বৈধ, তা নিশ্চিত করতে আপনার ব্রাউজারে এই সংযোগটি লোড করুন।',
'specialpages-group-highuse' => 'অধিক ব্যবহৃত পাতাগুলি',
'specialpages-group-pages' => 'পাতার তালিকাসমূহ',
'specialpages-group-pagetools' => 'পাতা সংক্রান্ত সরঞ্জাম',
-'specialpages-group-wiki' => 'à¦\89à¦\87à¦\95ি à¦\89পাতà§\8dত à¦\8fবà¦\82 সরà¦\9eà§\8dà¦\9cামসমà§\82হ',
+'specialpages-group-wiki' => 'উপাত্ত এবং সরঞ্জামসমূহ',
'specialpages-group-redirects' => 'বিশেষ পাতাগুলি পুনর্নির্দেশ করা হচ্ছে',
'specialpages-group-spam' => 'স্প্যামরোধী হাতিয়ার',
'listgrouprights-rights' => 'অধিকারহানি',
'listgrouprights-members' => '(সদস্যর পারেঙহানি)',
-# E-mail user
+# Email user
'emailuser' => 'আতাকুরাগরে ইমেইল কর',
'emailpage' => 'আতাকরেকুরাগরে ই-মেইল কর',
'defemailsubject' => '{{SITENAME}} ই-মেইল',
'monthsall' => 'হাব্বি',
'limitall' => 'হাব্বি',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ই-মেইল ঠিকানাহান লেপকর',
'confirmemail_send' => 'লেপকরেকুরা কোডগ দিয়াপেঠাদে',
'confirmemail_sent' => 'লেপকরেকুরা ই-মেইলহান দিয়াপেঠা দিলাং।',
'uploadlogpagetext' => "Setu a-is marilh ar restroù diwezhañ bet karget war ar servijer.
S.o [[Special:NewFiles|rann ar skeudennoù nevez]] evit kaout ur sell gwiroc'h",
'filename' => 'Anv ar restr',
-'filedesc' => 'Deskrivadur',
+'filedesc' => 'Diverradur',
'fileuploadsummary' => 'Diverrañ :',
'filereuploadsummary' => 'Kemmoù er restr :',
'filestatus' => 'Statud a-fet gwirioù aozer :',
Sellet e vez ouzh ur bajenn evel ouzh ur bajenn disheñvelout ma ra gant ur patrom liammet ouzh [[MediaWiki:Disambiguationspage]]",
'pageswithprop-prop' => 'Anv ar perzh :',
+'pageswithprop-submit' => 'Mont',
'doubleredirects' => 'Adkasoù doubl',
'doubleredirectstext' => 'Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.
'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
-# Unknown messages
-'pageswithprop-submit' => 'Mont',
);
'right-writeapi' => "Korištenje opcije ''write API''",
'right-delete' => 'Brisanje stranica',
'right-bigdelete' => 'Brisanje stranica sa velikom historijom',
+'right-deletelogentry' => 'Brisanje i vraćanje određenih zapisa u evidenciji',
'right-deleterevision' => 'Brisanje i vraćanje određenih revizija stranice',
'right-deletedhistory' => 'Pregled stavki obrisane historije, bez povezanog teksta',
'right-deletedtext' => 'Pregled obrisanog teksta i izmjena između obrisanih revizija',
Molimo pogledajte [$2 stranicu opisa datoteke] za ostale informacije.',
'sharedupload-desc-here' => 'Ova datoteka je sa $1 i može se koristiti i na drugim projektima.
Opis sa njene [$2 stranice opisa datoteke] je prikazan ispod.',
+'sharedupload-desc-edit' => 'Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.
+Njen opis možete urediti na [$2 stranici opisa datoteke].',
+'sharedupload-desc-create' => 'Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.
+Možda želite urediti njen opis na [$2 stranici opisa datoteke].',
'filepage-nofile' => 'Ne postoji datoteka s ovim nazivom.',
'filepage-nofile-link' => 'Ne postoji datoteka s ovim imenom, ali je možete [$1 postaviti].',
'uploadnewversion-linktext' => 'Postavite noviju verziju ove datoteke',
Umjesto toga, one se trebaju povezati sa konkretnim konkretnim stranicom.<br />
Stranica se smatra čvorom, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage]]",
+'pageswithprop-submit' => 'Idi',
+
'doubleredirects' => 'Dvostruka preusmjerenja',
'doubleredirectstext' => 'Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.
Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje "pravi" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|bajt|bajtova}}',
'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije}}',
+'ninterwikis' => '$1 {{PLURAL:$1|međujezična veza|međujezične veze}}',
'nlinks' => '$1 {{PLURAL:$1|veza|veze}}',
'nmembers' => '$1 {{PLURAL:$1|član|članova}}',
'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}',
'allpages-hide-redirects' => 'Sakrij preusmjerenja',
# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate keširanu verziju ove stranice, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate keširanu verziju ove stranice, koja možda nije potpuno aktualna.',
'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
# Special:Categories
'import-interwiki-templates' => 'Uključi sve šablone',
'import-interwiki-submit' => 'Uvoz',
'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna osnovna stranica (opcionalno):',
'import-upload-filename' => 'Naziv datoteke:',
'import-comment' => 'Komentar:',
'importtext' => 'Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].
'import-error-special' => 'Stranica "$1" nije uvezena jer pripada posebnom imenskom prostoru koje ne prihvata stranice.',
'import-error-invalid' => 'Stranica "$1" nije uvezena jer je njen naziv neispravan.',
'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Navedena osnovna stranica ima neispravan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor "$1" osnovne stranice ne dozvoljava podstranice.',
# Import log
'importlogpage' => 'Zapisnik uvoza',
'pageinfo-header-restrictions' => 'Zaštita stranice',
'pageinfo-header-properties' => 'Svojstva stranice',
'pageinfo-display-title' => 'Naslov stranice',
+'pageinfo-default-sort' => 'Podrazumijevani ključ sortiranja',
'pageinfo-length' => 'Dužina stranice (u bajtovima)',
'pageinfo-article-id' => 'ID stranice',
'pageinfo-language' => 'Jezik sadržaja stranice',
'pageinfo-watchers' => 'Broj pratitelja stranice',
'pageinfo-redirects-name' => 'Preusmjeravanja na ovu stranicu',
'pageinfo-subpages-name' => 'Podstranice ove stranice',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmjerenje|preusmjerenja}}; $3 {{PLURAL:$3|nepreusmjerenje|nepreusmjerenja}})',
'pageinfo-firstuser' => 'Korisnik koji je napravio stranicu',
'pageinfo-firsttime' => 'Datum stvaranja stranice',
'pageinfo-lastuser' => 'Posljednji urednik stranice',
'file-info-size-pages' => '$1 × $2 piksela, veličina datoteke: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
'file-nohires' => 'Veća rezolucija nije dostupna.',
'svg-long-desc' => 'SVG fajl, dozvoljeno $1 × $2 piksela, veličina fajla: $3',
+'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina datoteke: $3',
'show-big-image' => 'Vidi sliku u punoj veličini (rezoluciji)',
'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Ostale rezolucije}}: $1.',
'file-info-png-looped' => 'stalno iznova',
'file-info-png-repeat' => 'pregledano $1 {{PLURAL:$1|put|puta}}',
'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}',
+'file-no-thumb-animation' => "'''Napomena: Zbog tehničkih ograničenja minijature ove datoteke neće biti animirane.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: Zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće biti animirane.'''",
# Special:NewFiles
'newimages' => 'Galerija novih slika',
'version-software' => 'Instalirani softver',
'version-software-product' => 'Proizvod',
'version-software-version' => 'Verzija',
+'version-entrypoints-header-entrypoint' => 'Ulazna tačka',
'version-entrypoints-header-url' => 'URL',
# Special:FilePath
* @author Jordi Roqué
* @author Juanpabl
* @author Kaganer
+ * @author Marcmpujol
* @author Martorell
* @author McDutchie
* @author Pasqual (ca)
'newwindow' => '(obre en una nova finestra)',
'cancel' => 'Anuŀla',
'moredotdotdot' => 'Més...',
+'morenotlisted' => 'Més no en la llista...',
'mypage' => 'Pàgina',
'mytalk' => 'Discussió',
'anontalk' => "Discussió d'aquesta IP",
# Email sending
'php-mail-error-unknown' => 'Error desconegut en la funció mail() de PHP',
'user-mail-no-addy' => "S'ha intentat enviar un missatge de correu electrònic sense adreça.",
+'user-mail-no-body' => 'Vas intentar enviar un correu electrònic amb un cos buit o excessivament curt.',
# Change password dialog
'resetpass' => 'Canvia la contrasenya',
'prot_1movedto2' => '[[$1]] mogut a [[$2]]',
'protect-badnamespace-title' => 'Espai de nom no-protectable',
'protect-badnamespace-text' => 'Les pàgines en aquest espai de nom no pot ser protegit.',
+'protect-norestrictiontypes-text' => 'Aquesta pàgina no es pot protegir ja que no hi ha cap tipus de restricció disponible.',
+'protect-norestrictiontypes-title' => 'Pàgina no protegible',
'protect-legend' => 'Confirmeu la protecció',
'protectcomment' => 'Motiu:',
'protectexpiry' => "Data d'expiració",
# User preference toggles
'tog-underline' => 'ھێڵ ھێنان بەژێر بەستەرەکان:',
'tog-justify' => 'پەرەگرافەکان پڕاوپر نیشان بدە',
-'tog-hideminor' => 'دەستکارییە بچووکەکان بشارەوە لە دوایین گۆڕانکارییەکاندا',
+'tog-hideminor' => 'دەستکارییە بچووکەکان لە دوایین گۆڕانکارییەکاندا بشارەوە',
'tog-hidepatrolled' => 'لە دوایین گۆڕانکاریەکان، دەستکاریە پارێزراوەکان داشارە',
'tog-newpageshidepatrolled' => 'لە لیستی لاپەڕە نوێکان، لاپەڕە پارێزراوەکان داشارە',
'tog-extendwatchlist' => 'لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.',
'searcharticle' => 'بڕۆ',
'history' => 'مێژووی پەڕە',
'history_short' => 'مێژووی پەڕە',
-'updatedmarker' => 'لە دوای دواسەردانم نوێکراوەتەوە',
+'updatedmarker' => 'لە دوایین سەردانمدا نوێ کراوەتەوە',
'printableversion' => 'وەشانی ئامادەی چاپ',
'permalink' => 'بەستەری ھەمیشەیی',
'print' => 'چاپ',
'otherlanguages' => 'بە زمانەکانی تر',
'redirectedfrom' => '(ڕەوانەکراوە لە $1 ەوە)',
'redirectpagesub' => 'پەڕەی ڕەوانەکردن',
-'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێکراوەتەوە.',
+'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێ کراوەتەوە.',
'viewcount' => 'ئەم پەڕەیە {{PLURAL:$1|یەکجار|$1 جار}} بینراوە.',
'protectedpage' => 'پەڕەی پارێزراو',
'jumpto' => 'باز بدە بۆ:',
# General errors
'error' => 'ههڵه',
-'databaseerror' => 'Ú¾Û\95ÚµÛ\95Û\8c داتابÛ\95Û\8cس',
+'databaseerror' => 'Ú¾Û\95ÚµÛ\95Û\8c بÙ\86Ú©Û\95دراÙ\88Ù\87',
'dberrortext' => 'ھەڵەیەکی ڕستەنووسی لە داواکاریی بنکەیدراو ڕووی داوە.
لەوانەیە ئەوە نیشاندەری کەلێنێک لە نەرمامێرەکەدا بێت.
دوایین تێکۆشان بۆ داواکاری بنکەیدراو:
ئەمە لەبەر چاو بگرە کە دەستکاریکردنی ئەم پەڕەیە بەقازانجە یان نا.
لۆگی سڕینەوە و گواستنەوەی ئەم پەڕەیە بۆ سانایی لێرەدا ھاتووە:",
'moveddeleted-notice' => 'ئەم پەڕەیە سڕاوەتەوە.
-لۆگی سڕینەوە و گواستنەوە بۆ پەڕەکە لە خوارەوە دابینکراوە.',
+لۆگی سڕینەوە و گواستنەوە بۆ پەڕەکە لە ژێرەوە دابین کراوە.',
'log-fulllog' => 'دیتنی لۆگی تەواو',
'edit-hook-aborted' => 'دەستکاری لە لایەن قولاپەوە ھەڵوەشێنرایەوە.
ھۆکارەکەی لەبەر دەست نییە.',
'prefs-rendering' => 'ڕواڵەت',
'saveprefs' => 'پاشەکەوت',
'resetprefs' => 'گۆڕانکارییە پاشەکەوت نەکراوەکان پاک بکەرەوە',
-'restoreprefs' => 'ھەموو تەنزیمەکان ببەرەوە بۆ حاڵەتی بنچینەیی',
+'restoreprefs' => 'ھەموو ڕێکخستنەکان ببەرەوە بۆ باری بنچینەیی',
'prefs-editing' => 'دەستکاریکردن',
'prefs-edit-boxsize' => 'قەبارەی پەنجەرەی دەستکاریکردن.',
'rows' => 'ڕیزەکان:',
'diff' => 'جیاوازی',
'hist' => 'مێژوو',
'hide' => 'بشارەوە',
-'show' => 'نیشانبدە',
+'show' => 'نیشان بدە',
'minoreditletter' => 'ب',
'newpageletter' => 'ن',
'boteditletter' => '.بۆت',
'hijri-calendar-m2' => 'سەفەر',
'hijri-calendar-m3' => 'ڕەبیعەلئەووەڵ',
'hijri-calendar-m4' => 'ڕەبیعەلئاخیر',
-'hijri-calendar-m5' => 'جومادەلئەووەل',
+'hijri-calendar-m5' => 'جومادەلئوولا',
'hijri-calendar-m6' => 'جومادەسسانی',
'hijri-calendar-m7' => 'ڕەجەب',
'hijri-calendar-m8' => 'شەعبان',
# User preference toggles
'tog-underline' => 'Багълантыларнынъ тюбюни сызув:',
'tog-justify' => 'Метинни эки янгъа тегизле',
-'tog-hideminor' => '"Сонъки денъимелер" саифесинде кичик денъишмелерни гизле',
-'tog-hidepatrolled' => 'Сонъки денъишмелер косьтергенде тешкерильген денъишмелерни гизле',
+'tog-hideminor' => '"Сонъки денъиштирмелер" саифесинде кичик денъиштирмелерни гизле',
+'tog-hidepatrolled' => 'Сонъки денъиштирмелер косьтергенде тешкерильген денъиштирмелерни гизле',
'tog-newpageshidepatrolled' => 'Янъы саифелер косьтергенде тешкерильген саифелерни гизле',
-'tog-extendwatchlist' => 'Козетюв джедвелини, тек сонъки дегиль, бутюн денъишмелерни корьмек ичюн кенишлет',
-'tog-usenewrc' => 'ТаÑ\84Ñ\81илÑ\8fÑ\82лÑ\8b Ñ\81онÑ\8aки денÑ\8aиÑ\88мелеÑ\80 джедвелини кÑ\8aÑ\83ллан (JavaScript керек)',
+'tog-extendwatchlist' => 'Козетюв джедвелини, тек сонъки дегиль, бутюн денъиштирмелерни корьмек ичюн кенишлет',
+'tog-usenewrc' => 'СонÑ\8aки денÑ\8aиÑ\88Ñ\82иÑ\80мелеÑ\80 Ñ\81аиÑ\84еÑ\81индеки ве козеÑ\82Ñ\8eв джедвелиндеки денÑ\8aиÑ\88Ñ\82иÑ\80мелеÑ\80ни гÑ\80Ñ\83ппаландÑ\8bÑ\80Ñ\83в (JavaScript керек)',
'tog-numberheadings' => 'Серлеваларны автоматик номераландыр',
'tog-showtoolbar' => 'Саифени денъиштирген вакъытта ярдымджы дёгмелерни косьтер. (JavaScript)',
'tog-editondblclick' => 'Саифени чифт басып денъиштирмеге башла (JavaScript)',
'tog-editsectiononrightclick' => 'Болюк серлевасына онъ баскъанда денъиштирюв пенджересини ач. (JavaScript)',
'tog-showtoc' => 'Мундеридже джедвели косьтер (3 данеден зияде серлевасы олгъан саифелер ичюн)',
'tog-rememberpassword' => 'Киришимни бу браузерде хатырла (энъ чокъ $1 {{PLURAL:$1|кунь|кунь}} ичюн)',
-'tog-watchcreations' => 'Ð\9cен Ñ\8fÑ\80аÑ\82кÑ\8aан Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-watchdefault' => 'Ð\9cен денÑ\8aиÑ\88Ñ\82иÑ\80ген Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-watchmoves' => 'Ð\9cеним Ñ\82аÑ\80аÑ\84Ñ\8bмдан адÑ\8b денÑ\8aиÑ\88Ñ\82иÑ\80илÑ\8cген Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-watchdeletion' => 'Ð\9cен Ñ\91кÑ\8a Ñ\8dÑ\82кен Ñ\81аиÑ\84елеÑ\80ни козетюв джедвелиме кирсет',
-'tog-minordefault' => 'Япкъан денъишмелеримни кичик денъишмедир деп ишаретле',
+'tog-watchcreations' => 'ЯÑ\80аÑ\82кÑ\8aан Ñ\81аиÑ\84елеÑ\80имни ве Ñ\8eклеген Ñ\84айллаÑ\80Ñ\8bмнÑ\8b козетюв джедвелиме кирсет',
+'tog-watchdefault' => 'Ð\94енÑ\8aиÑ\88Ñ\82иÑ\80ген Ñ\81аиÑ\84е ве Ñ\84айллаÑ\80Ñ\8bмнÑ\8b козетюв джедвелиме кирсет',
+'tog-watchmoves' => 'Ð\90дÑ\8bнÑ\8b мен денÑ\8aиÑ\88Ñ\82иÑ\80ген Ñ\81аиÑ\84е ве Ñ\84айллаÑ\80нÑ\8b козетюв джедвелиме кирсет',
+'tog-watchdeletion' => 'Ð\81кÑ\8a Ñ\8dÑ\82кен Ñ\81аиÑ\84е ве Ñ\84айллаÑ\80Ñ\8bмнÑ\8b козетюв джедвелиме кирсет',
+'tog-minordefault' => 'Япкъан денъиштирмелеримни кичик денъиштирмедир деп ишаретле',
'tog-previewontop' => 'Бакъып чыкъувны язув пенджеренинъ устюнде косьтер',
'tog-previewonfirst' => 'Денъиштирме саифесине кечкенде бакъып чыкъувны косьтер',
'tog-nocache' => 'Браузер саифелерни афызасында тутмасын',
-'tog-enotifwatchlistpages' => 'Козетюв джедвелимдеки бир саифе денъиштирильгенде манъа e-mail ёлла',
+'tog-enotifwatchlistpages' => 'Козетюв джедвелимдеки бир саифе я да файл денъиштирильгенде манъа e-mail ёлла',
'tog-enotifusertalkpages' => 'Къулланыджы саифем денъиштирильгенде манъа e-mail ёлла',
-'tog-enotifminoredits' => 'Ð\9aиÑ\87ик денÑ\8aиÑ\88ме олгъанда да манъа e-mail ёлла',
+'tog-enotifminoredits' => 'СаиÑ\84е Ñ\8f да Ñ\84айлда киÑ\87ик денÑ\8aиÑ\88Ñ\82иÑ\80илÑ\8cме олгъанда да манъа e-mail ёлла',
'tog-enotifrevealaddr' => 'Бильдирюв мектюплеринде e-mail адресимни косьтер',
'tog-shownumberswatching' => 'Козеткен къулланыджы сайысыны косьтер',
'tog-oldsig' => 'Шимдики имза:',
'tog-externaldiff' => 'Тенъештирмек ичюн тыш бир программа къуллан (теджрибели къулланыджылар ичюн; компьютеринъизни махсус сазламакъ керек. [ //www.mediawiki.org/wiki/Manual:External_editors тафсилятлы малюмат мында])',
'tog-showjumplinks' => '«Бар» багълантысыны фааллештир',
'tog-uselivepreview' => 'Джанлы бакъып чыкъув хусусиетини къуллан (JavaScript) (даа денъеме алында)',
-'tog-forceeditsummary' => 'Денъишменинъ къыскъа тарифини бош ташласам мени тенбиле',
-'tog-watchlisthideown' => 'Козетюв джедвелимден меним денъишмелеримни гизле',
-'tog-watchlisthidebots' => 'Козетюв джедвелимден бот денъишмелерини гизле',
-'tog-watchlisthideminor' => 'Козетюв джедвелимден кичик денъишмелерни гизле',
-'tog-watchlisthideliu' => 'Козетюв джедвелимде къайдлы къулланыджылар тарафындан япылгъан денъишмелерни косьтерме',
-'tog-watchlisthideanons' => 'Козетюв джедвелимде къайдсыз (аноним) къулланыджылар тарафындан япылгъан денъишмелерни косьтерме',
-'tog-watchlisthidepatrolled' => 'Козетюв джедвелинде тешкерильген денъишмелерни гизле',
+'tog-forceeditsummary' => 'Денъиштирменинъ къыскъа тарифини бош ташласам мени тенбиле',
+'tog-watchlisthideown' => 'Козетюв джедвелимден меним денъиштирмелеримни гизле',
+'tog-watchlisthidebots' => 'Козетюв джедвелимден бот денъиштирмелерини гизле',
+'tog-watchlisthideminor' => 'Козетюв джедвелимден кичик денъиштирмелерни гизле',
+'tog-watchlisthideliu' => 'Козетюв джедвелимде къайдлы къулланыджылар тарафындан япылгъан денъиштирмелерни косьтерме',
+'tog-watchlisthideanons' => 'Козетюв джедвелимде къайдсыз (аноним) къулланыджылар тарафындан япылгъан денъиштирмелерни косьтерме',
+'tog-watchlisthidepatrolled' => 'Козетюв джедвелинде тешкерильген денъиштирмелерни гизле',
'tog-ccmeonemails' => 'Дигер къулланыджыларгъа ёллагъан мектюплеримнинъ копияларыны манъа да ёлла',
'tog-diffonly' => 'Тенъештирме саифелеринде саифенинъ эсас мундериджесини косьтерме',
'tog-showhiddencats' => 'Гизли категорияларны косьтер',
-'tog-norollbackdiff' => 'Ð\9bÑ\8fгÑ\8aÑ\83 Ñ\8dÑ\82илÑ\8cген денÑ\8aиÑ\88мелеÑ\80ни косьтерме',
+'tog-norollbackdiff' => 'Ð\9aеÑ\80и кÑ\8aайÑ\82аÑ\80Ñ\83в Ñ\8fпÑ\8bлгÑ\8aан Ñ\81онÑ\8a веÑ\80Ñ\81иÑ\8fлаÑ\80 аÑ\80аÑ\81Ñ\8bндаки Ñ\84аÑ\80кÑ\8aнÑ\8b косьтерме',
'underline-always' => 'Даима',
'underline-never' => 'Асла',
-'underline-default' => 'Браузер къарар берсин',
+'underline-default' => 'Браузер сазламалары къулланылсын',
# Font style option in Special:Preferences
'editfont-style' => 'Язув пенджересинде уруфат (шрифт) тюрю:',
'newwindow' => '(янъы бир пенджереде ачылыр)',
'cancel' => 'Лягъу',
'moredotdotdot' => 'Даа...',
+'morenotlisted' => 'Башкъа бир шей ёкъ...',
'mypage' => 'Саифе',
'mytalk' => 'Музакере',
'anontalk' => 'Бу IP-нинъ музакереси',
'vector-action-protect' => 'Къорчала',
'vector-action-undelete' => 'Янъыдан ярат',
'vector-action-unprotect' => 'Къорчалавны денъиштир',
-'vector-simplesearch-preference' => 'ТаÑ\84Ñ\81илÑ\8fÑ\82лÑ\8b кÑ\8aÑ\8bдÑ\8bÑ\80Ñ\83в Ñ\82еклиÑ\84леÑ\80ини иÑ\88леÑ\82 (Ñ\82ек Ð\92екÑ\82оÑ\80 Ñ\80еÑ\81имлемеÑ\81и ичюн)',
+'vector-simplesearch-preference' => 'СаделеÑ\88Ñ\82иÑ\80илÑ\8cген кÑ\8aÑ\8bдÑ\8bÑ\80Ñ\83в Ñ\81аÑ\82Ñ\8bÑ\80Ñ\8bнÑ\8b иÑ\88леÑ\82 (Ñ\82ек Ð\92екÑ\82оÑ\80 коÑ\80Ñ\8eниÑ\88и ичюн)',
'vector-view-create' => 'Ярат',
'vector-view-edit' => 'Денъиштир',
'vector-view-history' => 'Кечмишини косьтер',
'namespaces' => 'Исим фезалары',
'variants' => 'Вариантлар',
+'navigation-heading' => 'Долашув менюси',
'errorpagetitle' => 'Хата',
'returnto' => '$1.',
'tagline' => '{{GRAMMAR:ablative|{{SITENAME}}}}',
'create-this-page' => 'Бу саифени ярат',
'delete' => 'Ёкъ эт',
'deletethispage' => 'Саифени ёкъ эт',
-'undelete_short' => '{{PLURAL:$1|1|$1}} денъишмени кери кетир',
-'viewdeleted_short' => '{{PLURAL:$1|бир ёкъ этильген денъишмени|$1 ёкъ этильген денъишмени}} косьтер.',
+'undelete_short' => '{{PLURAL:$1|1|$1}} денъиштирмени кери кетир',
+'viewdeleted_short' => '{{PLURAL:$1|бир ёкъ этильген денъиштирмени|$1 ёкъ этильген денъиштирмени}} косьтер.',
'protect' => 'Къорчала',
'protect_change' => 'денъиштир',
'protectthispage' => 'Саифени къорчалав алтына ал',
'retrievedfrom' => 'Менба – "$1"',
'youhavenewmessages' => 'Янъы $1 бар ($2).',
'newmessageslink' => 'беянатынъыз',
-'newmessagesdifflink' => 'музакере саифенъизнинъ сонъки денъишкени',
+'newmessagesdifflink' => 'музакере саифенъизнинъ сонъки денъиштирильмеси',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башкъа бир къулланыджыдан|$3 къулланыджыдан}} $1 бар. ($2)',
+'youhavenewmessagesmanyusers' => 'Бир къач къулланыджыдан $1 бар. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|янъы беянатынъыз|янъы беянатларынъыз}}',
+'newmessagesdifflinkplural' => 'музакере саифенъизнинъ сонъки {{PLURAL:$1|денъиштирильмеси|денъиштирильмелери}}',
'youhavenewmessagesmulti' => '$1 саифесинде янъы беянатынъыз бар.',
'editsection' => 'денъиштир',
'editold' => 'денъиштир',
'collapsible-expand' => 'Кенишлет',
'thisisdeleted' => '$1 корьмеге я да кери кетирмеге истейсинъизми?',
'viewdeleted' => '$1 корь?',
-'restorelink' => 'ёкъ этильген {{PLURAL:$1|1|$1}} денъишмеси',
+'restorelink' => 'ёкъ этильген {{PLURAL:$1|1|$1}} денъиштирмеси',
'feedlinks' => 'Бу шекильде:',
'feed-invalid' => 'Абуне каналынынъ чешити янълыштыр.',
'feed-unavailable' => 'Синдикация ленталары къулланылып оламай.',
'error' => 'Хата',
'databaseerror' => 'Малюмат базасынынъ хатасы',
'dberrortext' => 'Малюмат базасындан сораткъанда синтаксис хатасы олды.
-Бу язылымдаки бир хата ола биле.
+Бу программадаки бир хата ола биле.
"<tt>$2</tt>" функциясындан олгъан малюмат базасындан сонъки соратма:
<blockquote><tt>$1</tt></blockquote>.
Малюмат базасынынъ бильдирген хатасы "<tt>$3: $4</tt>".',
'badarticleerror' => 'Сиз япмагъа истеген ишлев бу саифеде япылып оламай.',
'cannotdelete' => '«$1» саифе я да файлы ёкъ этилип оламады. Башкъа бир къулланыджы тарафындан ёкъ этильген ола биле.',
'cannotdelete-title' => '«$1» саифесини ёкъ этмеге олмаз',
+'delete-hook-aborted' => 'Ёкъ этюв ченгель процедурасынен токътатылды.
+Ич бир изаат берильмеди.',
'badtitle' => 'Рухсетсиз серлева',
'badtitletext' => 'Истенильген саифе ады догъру дегиль, о боштыр, яхут тиллерара багъланты я да викилерара багъланты догъру язылмагъан. Бельки саифе адында ясакълангъан ишаретлер бар.',
-'perfcached' => 'Ð\9cалÑ\8eмаÑ\82лаÑ\80 даа Ñ\8dвелÑ\8cджеден азÑ\8bÑ\80лангÑ\8aан ола билиÑ\80. Ð\91Ñ\83 Ñ\81ебепÑ\82ен Ñ\8dÑ\81киÑ\80ген ола билиÑ\80! A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Ашагъыда кэште сакълангъан малюмат булуна, сонъки янъарув заманы: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Ð\90Ñ\88агÑ\8aÑ\8bдаки малÑ\8eмаÑ\82 кÑ\8dÑ\88Ñ\82ен алÑ\8bндÑ\8b ве Ñ\8dÑ\81киÑ\80ген ола билиÑ\80! Ð\9aÑ\8dÑ\88Ñ\82е Ñ\8dнÑ\8a Ñ\87окÑ\8a {{PLURAL:$1|биÑ\80 неÑ\82идже|$1 неÑ\82идже}} Ñ\81акÑ\8aланÑ\8bп Ñ\82Ñ\83Ñ\80а.',
+'perfcachedts' => 'Ашагъыдаки малюмат кэштен алынды, кэшнинъ сонъки янъартылгъан вакъты: $1. Кэште энъ чокъ {{PLURAL:$1|бир нетидже|$1 нетидже}} сакъланып тура.',
'querypage-no-updates' => 'Бу саифени денъиштирмеге шимди изин ёкъ. Бу малюмат аман янъартылмайджакъ.',
'wrong_wfQuery_params' => 'wfQuery() функциясы ичюн изинсиз параметрлер<br />
Функция: $1<br />
'protectedpagetext' => 'Бу саифени кимсе денъиштирмесин деп о блок этильди.',
'viewsourcetext' => 'Саифенинъ кодуны козьден кечирип копиялай билесинъиз:',
'protectedinterface' => 'Бу саифеде система интерфейсининъ метни бар. Онынъ ичюн мында бир хата чыкъмасын деп оны денъиштирмек ясакъ.',
-'editinginterface' => "'''Тенби''': Ичинде MediaWiki система беянаты олгъан бир саифени денъиштиреятасыз. Бу саифедеки денъишмелер къулланыджы интерфейсининъ корюнишини дигер къулланыджылар ичюн де денъиштиреджек. Лютфен, терджимелер ичюн [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] сайтыны (MediaWiki ресмий локализация лейхасы) къулланынъыз.",
+'editinginterface' => "'''Тенби''': MediaWiki системасынынъ интерфейс саифесини денъиштиреятасыз. Бу саифедеки денъиштирмелер интерфейснинъ корюнишини бу викининъ башкъа къулланыджылары ичюн де денъиштиреджек. Лютфен, вики интерфейсини терджиме этмек ичюн [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] сайтыны (MediaWiki ресмий локализация лейхасы) къулланынъыз.",
'sqlhidden' => '(SQL истинтагъы сакълы)',
'cascadeprotected' => 'Бу саифени денъиштирип оламазсынъыз, чюнки каскад къорчалав алтында булунгъан {{PLURAL:$1|саифеге|саифелерге}} менсюптир:
$2',
'hr_tip' => 'Горизонталь сызыкъ (пек сыкъ къулланманъыз)',
# Edit pages
-'summary' => 'Денъишменинъ къыскъа тарифи:',
+'summary' => 'Денъиштирменинъ къыскъа тарифи:',
'subject' => 'Мевзу/серлева:',
-'minoredit' => 'Бу, кичик денъишмедир',
+'minoredit' => 'Бу, кичик денъиштирмедир',
'watchthis' => 'Саифени козет',
'savearticle' => 'Саифени сакъла',
'preview' => 'Бакъып чыкъув',
'showpreview' => 'Бакъып чыкъ',
'showlivepreview' => 'Тез бакъып чыкъув',
-'showdiff' => 'Денъишмелерни косьтер',
-'anoneditwarning' => "'''Дикъкъат''': Сайткъа кирмегенинъизден себеп денъишмелер тарихына сизинъ IP адресинъиз язылыр.",
-'anonpreviewwarning' => 'Сайткъа кирмединъиз. Саифени сакъласанъыз, денъишмелер тарихына сизинъ IP адресинъиз язылыр.',
+'showdiff' => 'Денъиштирмелерни косьтер',
+'anoneditwarning' => "'''Дикъкъат''': Сайткъа кирмегенинъизден себеп денъиштирмелер тарихына сизинъ IP адресинъиз язылыр.",
+'anonpreviewwarning' => 'Сайткъа кирмединъиз. Саифени сакъласанъыз, денъиштирмелер тарихына сизинъ IP адресинъиз язылыр.',
'missingsummary' => "'''Хатырлатма.''' Денъиштирмелеринъизни къыскъадан тариф этмединъиз. «Саифени сакъла» дёгмесине текрар басув иле денъиштирмелеринъиз тефсирсиз сакъланаджакълар.",
'missingcommenttext' => 'Лютфен, ашагъыда тефсир язынъыз.',
'missingcommentheader' => "'''Хатырлатма:''' Тефсир мевзусыны/серлевасыны язмадынъыз. «{{int:savearticle}}» дёгмесине текрар баскъан сонъ тефсиринъиз серлевасыз сакъланыр.",
'userpage-userdoesnotexist-view' => '«$1» адлы къулланыджы эсабы ёкъ.',
'blocked-notice-logextract' => 'Бу къулланыджы шимди блок этильген.
Блок этюв журналынынъ сонъки язысы ашагъыда косьтерильген:',
-'clearyourcache' => "'''Ихтар:''' Бельки сазламаларынъызны сакълагъандан сонъ денъишмелерни корьмек ичюн браузеринъизнинъ кэшини темизлемек керек олурсынъыз.
-'''Mozilla / Firefox / Safari:''' ''Shift'' басып саифени янъыдан юклемек я да ''Ctrl-Shift-R'' басмакъ (Mac ичюн ''Command-R'');
-'''Konqueror:''' саифени янъыдан юкле дёгмесине я да F5 басмакъ;
-'''Opera:''' ''Tools → Preferences'' менюсинде кэшни темизлемек;
-'''Internet Explorer:''' ''Ctrl'' басып саифени янъыдан юклеиек я да ''Ctrl-F5'' басмакъ.",
+'clearyourcache' => "'''Ихтар:''' Бельки сазламаларынъызны сакълагъандан сонъ денъишмелерни корьмек ичюн браузеринъизнинъ кешини темизлемек керек олурсынъыз. Кеш темизлемек ичюн шуны япмакъ керек:
+* '''Firefox / Safari:''' ''Shift'' басып саифени янъыдан юклемек я да ''Ctrl-F5'' я да ''Ctrl-R'' басмакъ (Mac ичюн ''⌘-R'')
+* '''Google Chrome:''' ''Ctrl-Shift-R'' басмакъ (Mac ичюн ''⌘-Shift-R'')
+* '''Internet Explorer:''' ''Ctrl'' басып саифени янъыдан юклемек я да ''Ctrl-F5'' басмакъ
+* '''Opera:''' ''Tools → Preferences'' менюсинде кешни темизлемек",
'usercssyoucanpreview' => "'''Тевсие:''' Янъы CSS файлыны тешкермек ичюн саифени сакъламаздан эвель «{{int:showpreview}}» дёгмесине басынъыз.",
'userjsyoucanpreview' => "'''Тевсие:''' Янъы JavaScript-инъизни тешкермек ичюн саифени сакъламаздан эвель «{{int:showpreview}}» дёгмесине басынъыз.",
'usercsspreview' => "'''Унутманъыз, бу тек бакъып чыкъув - къулланыджы CSS файлынъыз аля даа сакъланмады!'''",
Бу вакътынджа проблемадыр. Лютфен, текрар сакълап бакъынъыз.
Бундан да сонъ олып чыкъмаса, малюмат локаль файлгъа сакъланъыз да браузеринъизни бир къапатып ачынъыз.'''",
'session_fail_preview_html' => "'''Афу этинъиз! HTML сессиянынъ малюматлары гъайып олгъаны себебинден сизинъ денъиштирмелеринъизни къабул этмеге имкян ёкътыр.'''",
-'token_suffix_mismatch' => "'''Сизинъ программанъыз тюрлендирюв пенджересинде пунктуация ишаретлерини догъру ишлемегени ичюн япкъан денъишмелеринъиз къабул олунмады. Денъишмелер саифенинъ метни корюнишининъ бозулмамасы ичюн лягъу этильди.
+'token_suffix_mismatch' => "'''Сизинъ программанъызнынъ озь тюрлендирюв пенджересинде пунктуация ишаретлерини догъру ишлемегени ичюн япкъан денъиштирмелеринъиз къабул олунмады. Денъиштирмелер саифе метнининъ корюниши бозулмасын деп лягъу этильди.
Бунынъ киби проблемалар хаталы аноним web-проксилер къулланувдан чыкъып ола.'''",
'editing' => '"$1" саифесини денъиштиреятасыз',
'editingsection' => '"$1" саифесинде болюк денъиштиреятасыз',
'editingcomment' => '$1 саифесини денъиштиреятасыз (янъы болюк)',
-'editconflict' => 'Денъишмелер конфликти: $1',
-'explainconflict' => "Сиз саифени денъиштирген вакъытта башкъа бири де денъишме япты.
+'editconflict' => 'Денъиштирмелер чатышмасы: $1',
+'explainconflict' => "Сиз саифени денъиштиргенде башкъа бири де денъиштирме япты.
Юкъарыдаки язы саифенинъ шимдики алыны косьтере.
-Сизинъ денъишмелеринъиз астында косьтерильди.
-Шимди япкъан денъишмелеринъизни ашагъы пенджереден юкъары пенджереге авуштырмакъ керексинъиз.
+Сизинъ денъиштирмелеринъиз астында косьтерильди.
+Шимди япкъан денъиштирмелеринъизни ашагъы пенджереден юкъары пенджереге авуштырмакъ керексинъиз.
\"{{int:savearticle}}\"гъа баскъанда '''тек''' юкъарыдаки язы сакъланаджакъ.",
'yourtext' => 'Сизинъ метнинъиз',
'storedversion' => 'Сакълангъан метин',
'nonunicodebrowser' => "'''ТЕНБИ: Браузеринъизде Unicode кодламасы танылмаз. Саифелер денъиштиргенде бутюн ASCII олмагъан ишаретлернинъ ерине оларнынъ оналтылыкъ коду язылыр.'''",
'editingold' => "'''ДИКЪКЪАТ: Саифенинъ эски бир версиясыны денъиштиреятасыз.
-Саифени сакълагъанынъыздан сонъ бу тарихлы версиядан кунюмизге къадар олгъан денъишмелер ёкъ оладжакъ.'''",
+Саифени сакълагъанынъыздан сонъ бу тарихлы версиядан кунюмизге къадар олгъан денъиштирмелер ёкъ оладжакъ.'''",
'yourdiff' => 'Фаркълар',
'copyrightwarning' => "'''Лютфен, дикъкъат:''' {{SITENAME}} сайтына къошулгъан бутюн исселер <i>$2</i> мукъавелеси даиресиндедир (тафсилят ичюн $1 саифесине бакъынъыз).
Къошкъан иссенъизнинъ башкъа инсанлар тарафындан аджымасызджа денъиштирильмесини я да азат тарзда ве сынъырсызджа башкъа ерлерге дагъытылмасыны истемесенъиз, иссе къошманъыз.<br />
Айрыджа, мында иссе къошып, бу иссенинъ озюнъиз тарафындан язылгъанына, я да джемааткъа ачыкъ бир менбадан я да башкъа бир азат менбадан копиялангъанына гарантия берген оласынъыз ($1 бакъынъыз).<br />
'''МУЭЛЛИФЛИК АКЪКЪЫНЕН КЪОРЧАЛАНГЪАН ИЧ БИР МЕТИННИ МЫНДА РУХСЕТСИЗ КЪОШМАНЪЫЗ!'''",
'longpageerror' => "'''ТЕНБИ: Бу саифе $1 килобайт буюклигиндедир. Азамий (максималь) изинли буюклик исе $2 килобайт. Бу саифе сакъланып оламаз.'''",
-'readonlywarning' => "'''ТЕНБИ: Бакъым себеби иле малюмат базасы шимди килитлидир. Бу себептен япкъан денъишмелеринъиз шимди сакълап оламасынъыз. Язгъанларынъызны башкъа бир тюрлендирюв программасына алып сакълап ве даа сонъ бир даа мында кетирип сакълап олурсынъыз'''
+'readonlywarning' => "'''ТЕНБИ: Бакъым себеби иле малюмат базасы шимди килитлидир. Бу себептен япкъан денъиштирмелеринъизни шимди сакълап оламасынъыз. Язгъанларынъызны вакътынджа бир текст файлында сакълап ве даа сонъра бир даа мында кетирип сакълап олурсынъыз'''
-Малюмат базасыны килитлеген идареджи озь арекетини бойле анълатты: $1",
+Малюмат базасыны килитлеген идареджи озь арекетини шойле анълатты: $1",
'protectedpagewarning' => "'''Тенби: Бу саифе къорчалангъан ве тек идареджилер тарафындан денъиштирилип олур.'''
Журналнынъ сонъки язысы ашагъыда берильген:",
'semiprotectedpagewarning' => "'''Тенби''': Бу саифе тек къайдлы къулланыджылар тарафындан денъиштирилип олур.
'moveddeleted-notice' => 'Бу саифе ёкъ этильген.
Саифенинъ ёкъ этилюв ве авуштырылув къайдлары ашагъыда берильген.',
'log-fulllog' => 'Журналны толусынджа косьтер',
-'edit-hook-aborted' => 'Денъишме ченгель процедурасынен токътатылды.
+'edit-hook-aborted' => 'Денъиштирме ченгель процедурасынен токътатылды.
Ич бир изаат берильмеди.',
'edit-gone-missing' => 'Саифе янъартылып оламай.
Бельки о ёкъ этильгендир.',
-'edit-conflict' => 'Денъишмелер чатышмасы.',
-'edit-no-change' => 'Япкъан денъишменъиз сакъланмагъан, чюнки метинде бир тюрлю денъишме япылмады.',
+'edit-conflict' => 'Денъиштирмелер чатышмасы.',
+'edit-no-change' => 'Япкъан денъиштирменъиз сакъланмагъан, чюнки метинде бир тюрлю денъиштирильме япылмады.',
'edit-already-exists' => 'Янъы саифени яратмакъ мумкюн дегиль.
О энди бар.',
# "Undo" feature
-'undo-success' => 'Денъишме лягъу этилип ола. Лютфен, мына бу денъишикликлерни япмагъа истегенинъизден эмин олмакъ ичюн версиялар тенъештирилювини козьден кечирип денъишмелерни сакъламакъ ичюн «Саифени сакъла» дёгмесине басынъыз.',
-'undo-failure' => 'Арадаки денъишмелер бир-бирине келишикли олмагъаны ичюн денъишме лягъу этилип оламай.',
-'undo-norev' => 'Денъишме лягъу этилип оламаз, чюнки о я да ёкъ, я да бар эди, амма ёкъ этильген.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) къулланыджысынынъ $1 номералы денъишмесини лягъу этюв.',
+'undo-success' => 'Денъиштирме лягъу этилип ола. Лютфен, мына бу денъиштирмелерни япмагъа истегенинъизден эмин олмакъ ичюн версиялар тенъештирилювини козьден кечирип денъиштирмелерни сакъламакъ ичюн «Саифени сакъла» дёгмесине басынъыз.',
+'undo-failure' => 'Арадаки денъиштирмелер бир-бирине келишикли олмагъаны ичюн денъиштирме лягъу этилип оламай.',
+'undo-norev' => 'Денъиштирме лягъу этилип оламаз, чюнки о я да ёкъ, я да бар эди, амма ёкъ этильген.',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) къулланыджысынынъ $1 номералы денъиштирмесини лягъу этюв.',
# Account creation failure
'cantcreateaccounttitle' => 'Эсап яратмакънынъ ич чареси ёкъ.',
'last' => 'сонъки',
'page_first' => 'ильк',
'page_last' => 'сонъки',
-'histlegend' => "(фаркъ) = шимдики алнен арадаки фаркъ,
-(сонъки) = эвельки алнен арадаки фаркъ, '''к''' = кичик денъишме",
+'histlegend' => "Фаркъ сайланувы: Тенъештирмеге истеген эки версиянъызны сайлап '''{{int:compare-submit}}''' дёгмесине басынъыз.<br />
+Анълатмалар: '''({{int:cur}})''' = шимдики версиянен арасындаки фаркъ, '''({{int:last}})''' = эвельки версиянен арасындаки фаркъ, '''{{int:minoreditletter}}''' = кичик денъиштирме.",
'history-fieldset-title' => 'Кечмишке бакъув',
'history-show-deleted' => 'Тек ёкъ этильгенлер',
'histfirst' => 'Энъ эски',
'historyempty' => '(бош)',
# Revision feed
-'history-feed-title' => 'Денъишмелер тарихы',
-'history-feed-description' => 'Викиде бу саифенинъ денъишмелер тарихы',
+'history-feed-title' => 'Денъиштирмелер тарихы',
+'history-feed-description' => 'Викиде бу саифенинъ денъиштирмелер тарихы',
'history-feed-item-nocomment' => '$2 устюнде $1',
'history-feed-empty' => 'Истенильген саифе ёкъ.
О ёкъ эильген я да ады денъиштирильген ола биле.
Викиде бу саифеге ошагъан саифелерни [[Special:Search|тапып бакъынъыз]].',
# Revision deletion
-'rev-deleted-comment' => '(денъишменинъ тарифи ёкъ этильди)',
+'rev-deleted-comment' => '(денъиштирменинъ тарифи ёкъ этильди)',
'rev-deleted-user' => '(къулланыджы ады ёкъ этильди)',
'rev-deleted-event' => '(къайд ёкъ этильди)',
'rev-delundel' => 'косьтер/гизле',
'rev-showdeleted' => 'косьтер',
'revisiondelete' => 'Версияларны ёкъ эт/кери кетир',
'revdelete-hide-comment' => 'Къыскъа тарифни косьтерме',
-'revdelete-hide-user' => 'Денъишмени япкъаннынъ къулланыджы адыны/IP-ни гизле',
+'revdelete-hide-user' => 'Денъиштирмени япкъаннынъ къулланыджы адыны/IP-ни гизле',
'revdelete-hide-restricted' => 'Малюматны адий къулланыджылардан киби идареджилерден де гизле',
'revdelete-submit' => 'Сайлангъан {{PLURAL:$1|версиягъа|версияларгъа}} ишлет',
'revdel-restore' => 'корюнювни денъиштир',
'mergelogpagetext' => 'Саифелернинъ кечмиш версияларынынъ бир-бирлеринен энъ сонъки бирлештирильмелери ашагъыдаки джедвельде косьтерильген.',
# Diffs
-'history-title' => '$1 саифесининъ денъишмелер тарихы',
+'history-title' => '"$1" саифесининъ денъиштирмелер тарихы',
'difference-multipage' => '(Саифелер арасындаки фаркъ)',
'lineno' => '$1 сатыр:',
'compareselectedversions' => 'Сайлангъан версияларны тенъештир',
# Preferences page
'preferences' => 'Сазламалар',
-'mypreferences' => 'Сазламаларым',
-'prefs-edits' => 'Денъишмелер сайысы:',
+'mypreferences' => 'Сазламалар',
+'prefs-edits' => 'Денъиштирмелер сайысы:',
'prefsnologin' => 'Отурым ачмадынъыз',
'prefsnologintext' => 'Шахсий сазламаларынъызны денъиштирмек ичюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} отурым ачмакъ]</span> керексинъиз.',
'changepassword' => 'Пароль денъиштир',
'datedefault' => 'Стандарт',
'prefs-datetime' => 'Тарих ве саат',
'prefs-personal' => 'Къулланыджы малюматы',
-'prefs-rc' => 'Сонъки денъишмелер',
+'prefs-rc' => 'Сонъки денъиштирмелер',
'prefs-watchlist' => 'Козетюв джедвели',
'prefs-watchlist-days' => 'Козетюв джедвелинде косьтериледжек кунь сайысы:',
'prefs-watchlist-days-max' => 'Энъ чокъ $1 {{PLURAL:$1|кунь|кунь}}',
-'prefs-watchlist-edits' => 'Кенишлетилген козетюв джедвелинде косьтериледжек денъишмелер сайысы:',
+'prefs-watchlist-edits' => 'Кенишлетилген козетюв джедвелинде косьтериледжек денъиштирмелер сайысы:',
'prefs-watchlist-edits-max' => '(энъ чокъ 1000)',
'prefs-watchlist-token' => 'Козетюв джедвели ишарети:',
'prefs-misc' => 'Дигер сазламалар',
'prefs-resetpass' => 'Парольни денъиштир',
'prefs-email' => 'E-mail сазламалары',
'prefs-rendering' => 'Корюниш',
-'saveprefs' => 'Ð\94енÑ\8aиÑ\88мелеÑ\80ни Ñ\81акъла',
+'saveprefs' => 'Сакъла',
'resetprefs' => 'Сакъланмагъан сазламаларны ильк алына кетир',
'restoreprefs' => 'Бутюн ог бельгиленген сазламаларны къайтар',
'prefs-editing' => 'Саифелерни денъиштирюв',
'columns' => 'Сутун',
'searchresultshead' => 'Къыдырув',
'resultsperpage' => 'Саифеде косьтериледжек тапылгъан саифе сайысы',
-'recentchangesdays' => 'Сонъки денъишмелер саифесинде косьтериледжек кунь сайысы:',
+'recentchangesdays' => 'Сонъки денъиштирмелер саифесинде косьтериледжек кунь сайысы:',
'recentchangesdays-max' => '(энъ чокъ $1 {{PLURAL:$1|кунь|кунь}})',
-'recentchangescount' => 'Ог бельгиленген косьтериледжек денъишмелер сайысы:',
-'prefs-help-recentchangescount' => 'Бу, сонъки денъишмелер, саифе кечмиши ве журнал саифелеринде къулланыла.',
+'recentchangescount' => 'Ог бельгиленген косьтериледжек денъиштирмелер сайысы:',
+'prefs-help-recentchangescount' => 'Бу, сонъки денъиштирмелер, саифе кечмиши ве журнал саифелеринде къулланыла.',
'savedprefs' => 'Сазламаларынъыз сакъланды.',
'timezonelegend' => 'Саат къушагъы:',
'localtime' => 'Ерли вакъыт:',
'prefs-help-gender' => 'Меджбурий дегиль: wiki тарафындан догъру джыныс адреслеви ичюн къулланыла. Бу малюмат умумий оладжакъ.',
'email' => 'E-mail',
'prefs-help-realname' => 'Керчек адынъыз (меджбурий дегильдир).
-Эгер бильдирсенъиз, саифелердеки денъишмелерни кимнинъ япкъаныны косьтермек ичюн къулланыладжакъ.',
+Эгер бильдирсенъиз, саифелердеки денъиштирмелерни кимнинъ япкъаныны косьтермек ичюн къулланыладжакъ.',
'prefs-help-email' => 'E-mail (меджбурий дегильдир). E-mail адреси бильдирильген олса, паролинъизни унутсанъыз, сизге янъы бир пароль ёлламакъ ичюн къулланыладжакъ.',
'prefs-help-email-required' => 'E-mail адреси лязим.',
'prefs-info' => 'Эсас малюмат',
'action-edit' => 'бу саифени денъиштирмеге',
# Recent changes
-'nchanges' => '$1 {{PLURAL:$1|денъишме|денъишме}}',
-'recentchanges' => 'Сонъки денъишмелер',
-'recentchanges-legend' => 'Сонъки денъишмелер сазламалары',
+'nchanges' => '$1 {{PLURAL:$1|денъиштирме}}',
+'recentchanges' => 'Сонъки денъиштирмелер',
+'recentchanges-legend' => 'Сонъки денъиштирмелер сазламалары',
'recentchanges-summary' => 'Япылгъан энъ сонъки денъишикликлерни бу саифеде корип оласынъыз.',
-'recentchanges-feed-description' => 'Бу лента вастасынен викиде сонъки денъишмелерни козет.',
-'recentchanges-label-newpage' => 'Бу денъишме янъы бир саифе яратты',
-'recentchanges-label-minor' => 'Бу, кичик бир денъишме',
-'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъишмеси',
-'recentchanges-label-unpatrolled' => 'Бу денъишме аля даа тешкерильмеген',
-'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъишме:",
-'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъишмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
-'rclistfrom' => '$1 тарихындан берли япылгъан денъишмелерни косьтер',
-'rcshowhideminor' => 'кичик денъишмелерни $1',
+'recentchanges-feed-description' => 'Бу лента вастасынен викиде сонъки денъиштирмелерни козет.',
+'recentchanges-label-newpage' => 'Бу денъиштирме янъы бир саифе яратты',
+'recentchanges-label-minor' => 'Бу, кичик бир денъиштирме',
+'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъиштирмеси',
+'recentchanges-label-unpatrolled' => 'Бу денъиштирме аля даа тешкерильмеген',
+'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъиштирме:",
+'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъиштирмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
+'rclistfrom' => '$1 тарихындан берли япылгъан денъиштирмелерни косьтер',
+'rcshowhideminor' => 'кичик денъиштирмелерни $1',
'rcshowhidebots' => 'ботларны $1',
'rcshowhideliu' => 'къайдлы къулланыджыларны $1',
'rcshowhideanons' => 'аноним къулланыджыларны $1',
-'rcshowhidepatr' => 'козетильген денъишмелерни $1',
-'rcshowhidemine' => 'меним япкъан денъишмелеримни $1',
-'rclinks' => 'Сонъки $2 куньде япылгъан сонъки $1 денъишмени косьтер;<br /> $3',
+'rcshowhidepatr' => 'козетильген денъиштирмелерни $1',
+'rcshowhidemine' => 'меним япкъан денъиштирмелеримни $1',
+'rclinks' => 'Сонъки $2 куньде япылгъан сонъки $1 денъиштирмени косьтер;<br /> $3',
'diff' => 'фаркъ',
'hist' => 'кечмиш',
'hide' => 'гизле',
'rc-enhanced-hide' => 'Тафсилятыны гизле',
# Recent changes linked
-'recentchangeslinked' => 'Багълы денъишмелер',
-'recentchangeslinked-feed' => 'Багълы денъишмелер',
-'recentchangeslinked-toolbox' => 'Багълы денъишмелер',
-'recentchangeslinked-title' => '"$1" иле багълы денъишмелер',
-'recentchangeslinked-noresult' => 'Сайлангъан вакъытта багълы саифелерде ич бир денъишме олмады.',
-'recentchangeslinked-summary' => "Бу махсус саифеде багълы саифелерде сонъки япылгъан денъишмелер джедвели бар. [[Special:Watchlist|Козетюв джедвелинъиз]]деки саифелер '''къалын''' оларакъ косьтериле.",
+'recentchangeslinked' => 'Багълы денъиштирмелер',
+'recentchangeslinked-feed' => 'Багълы денъиштирмелер',
+'recentchangeslinked-toolbox' => 'Багълы денъиштирмелер',
+'recentchangeslinked-title' => '"$1" иле багълы денъиштирмелер',
+'recentchangeslinked-noresult' => 'Сайлангъан вакъытта багълы саифелерде ич бир денъиштирме олмады.',
+'recentchangeslinked-summary' => "Бу махсус саифеде багълы саифелерде сонъки япылгъан денъиштирмелер джедвели бар. [[Special:Watchlist|Козетюв джедвелинъиз]]деки саифелер '''къалын''' оларакъ косьтериле.",
'recentchangeslinked-page' => 'Саифе ады:',
'recentchangeslinked-to' => 'Берильген саифе ерине берильген саифеге багъланты берген олгъан саифелерини косьтер',
'filename' => 'Файл',
'filedesc' => 'Файлгъа аит къыскъа тариф',
'fileuploadsummary' => 'Къыскъа тариф:',
-'filereuploadsummary' => 'Файл денъишмелери:',
+'filereuploadsummary' => 'Файлнынъ денъиштирильмелери:',
'filestatus' => 'Таркъатув шартлары:',
'filesource' => 'Менба:',
'uploadedfiles' => 'Юкленген файллар',
'protectedpagestext' => 'Бу саифелернинъ денъиштирювге къаршы къорчалавы бар',
'protectedtitles' => 'Ясакълангъан серлевалар',
'listusers' => 'Къулланыджылар джедвели',
-'listusers-editsonly' => 'Тек денъишме япкъан къулланыджыларны косьтер',
+'listusers-editsonly' => 'Тек энъ азындан бир денъиштирме япкъан къулланыджыларны косьтер',
'newpages' => 'Янъы саифелер',
'newpages-username' => 'Къулланыджы ады:',
'ancientpages' => 'Энъ эски саифелер',
# Special:ListGroupRights
'listgrouprights-members' => '(азалар джедвели)',
-# E-mail user
+# Email user
'mailnologin' => 'Мектюп ёлланаджакъ адреси ёкътыр',
'mailnologintext' => 'Дигер къулланыджыларгъа электрон мектюплер ёллап олмакъ ичюн [[Special:UserLogin|отурым ачмалысынъыз]] ве [[Special:Preferences|сазламаларынъызда]] мевджут олгъан e-mail адресининъ саиби олмалысынъыз.',
'emailuser' => 'Къулланыджыгъа мектюп',
'watchnologin' => 'Отурым ачмакъ керек',
'watchnologintext' => 'Озь козетюв джедвелинъизни денъиштирмек ичюн [[Special:UserLogin|отурым ачынъыз]]',
'addedwatchtext' => '"[[:$1]]" саифеси [[Special:Watchlist|козетюв джевделинъизге]] кирсетильди.
-Бу саифедеки ве онынънен багълы саифелердеки оладжакъ денъишмелер бу джедвельде косьтериледжек, эм де олар козьге чарпмасы ичюн [[Special:RecentChanges|янъы денъишмелер джедвелинде]] къалын арифлернен косьтерилир.',
+Бундан сонъ, бу саифеде ве онынъ музакере саифесинде япыладжакъ денъиштирмелер анда косьтериледжек.',
'removedwatchtext' => '"[[:$1]]" саифеси [[Special:Watchlist|козетюв джедвелинъизден]] ёкъ этильди.',
'watch' => 'Козет',
'watchthispage' => 'Бу саифени козет',
'watchlist-details' => 'Музакере саифелерини эсапкъа алмайып, козетюв джедвелинъизде {{PLURAL:$1|1|$1}} саифе бар.',
'wlheader-enotif' => '* E-mail иле хабер берюв ачылды.',
'wlheader-showupdated' => "* Сонъки зияретинъизден сонъ денъиштирильген саифелер '''къалын арифлернен''' косьтерильди.",
-'watchmethod-recent' => 'сонъки денъишмелер арасында козеткен саифелеринъиз къыдырыла',
+'watchmethod-recent' => 'сонъки денъиштирмелер арасында козеткен саифелеринъиз къыдырыла',
'watchmethod-list' => 'козетюв джедвелиндеки саифелер тешкериле',
'watchlistcontains' => 'Сизинъ козетюв джедвелинъизде {{PLURAL:$1|1|$1}} саифе бар.',
'iteminvalidname' => '"$1" саифеси мунасебетинен проблема олып чыкъты, эльверишли олмагъан исимдир…',
-'wlnote' => "Ашагъыда саат $3, $4 ичюн сонъки {{PLURAL:$2|саат|'''$2''' саат}} ичинде япылгъан сонъки {{PLURAL:$1|денъишме|'''$1''' денъишме}} косьтериле.",
+'wlnote' => "Ашагъыда саат $3, $4 ичюн сонъки {{PLURAL:$2|саат|'''$2''' саат}} ичинде япылгъан сонъки {{PLURAL:$1|денъиштирме|'''$1''' денъиштирме}} косьтериле.",
'wlshowlast' => 'Сонъки $1 саат ичюн, $2 кунь ичюн я да $3 косьтер',
'watchlist-options' => 'Козетюв джедвели сазламалары',
'enotif_mailer' => '{{SITENAME}} почта вастасынен хабер берген хызмет',
'enotif_reset' => 'Джумле саифелерни бакъылгъан оларакъ ишаретле',
'enotif_impersonal_salutation' => '{{SITENAME}} къулланыджысы',
-'enotif_lastvisited' => 'Сонъки зияретинъизден берли япылгъан денъишмелерни корьмек ичюн $1 бакъынъыз.',
+'enotif_lastvisited' => 'Сонъки зияретинъизден берли япылгъан денъиштирмелерни корьмек ичюн $1 бакъынъыз.',
'enotif_anon_editor' => 'адсыз (аноним) къулланыджы $1',
'enotif_body' => 'Сайгъылы $WATCHINGUSERNAME,
+$PAGEINTRO $NEWPAGE
-{{SITENAME}} сайтындаки $PAGETITLE серлевалы саифе $PAGEEDITDATE тарихында $PAGEEDITOR тарафындан $CHANGEDORCREATED. Саифенинъ шимдики алыны $PAGETITLE_URL адресинде корип оласынъыз.
-
-$NEWPAGE
-
-Денъишменинъ къыскъа тарифи: $PAGESUMMARY $PAGEMINOREDIT
+Денъиштирменинъ къыскъа тарифи: $PAGESUMMARY $PAGEMINOREDIT
Саифени денъиштирген къулланыджынен багъланмакъ ичюн:
-e-mail адреси: $PAGEEDITOR_EMAIL
+э-маиль адреси: $PAGEEDITOR_EMAIL
вики саифеси: $PAGEEDITOR_WIKI
-Бу саифени зиярет этмесенъиз, бирев оны бир даа денъиштирсе, ич бир тенби беянаты ёлланмайджакъ. Козетюв джедвелинъиздеки бутюн саифелер ичюн тенби сазламаларыны денъиштире билесинъиз.
+Бу саифени зиярет этмесенъиз, бирев оны бир даа денъиштирсе де, ич бир тенби беянаты ёлланмайджакъ. Козетюв джедвелинъиздеки бутюн саифелер ичюн тенби сазламаларыны денъиштире билесинъиз.
-{{SITENAME}} тенби системасы.
+{{SITENAME}} бильдирюв системасы
--
Бильдирюв сазламаларыны денъиштирмек ичюн:
{{canonicalurl:{{#special:Preferences}}}}
-СазламалаÑ\80ны денъиштирмек ичюн:
+Ð\9aозеÑ\82Ñ\8eв джедвели Ñ\81азламалаÑ\80Ñ\8bны денъиштирмек ичюн:
{{canonicalurl:{{#special:EditWatchlist}}}}
-СаиÑ\84ени козеÑ\82Ñ\8eв джедвелинден Ñ\91кÑ\8a Ñ\8dÑ\82мек ичюн:
+СаиÑ\84ени козеÑ\82Ñ\8eв джедвелинден Ñ\87Ñ\8bкÑ\8aаÑ\80макÑ\8a ичюн:
$UNWATCHURL
Ярдым ве теклифлер ичюн:
'deletereasonotherlist' => 'Дигер себеп',
# Rollback
-'rollback' => 'Денъишмелерни кери ал',
+'rollback' => 'Денъиштирмелерни кери ал',
'rollback_short' => 'кери ал',
'rollbacklink' => 'эски алына кетир',
'rollbackfailed' => 'кери алув мувафакъиетсиз',
-'cantrollback' => 'Денъишмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир',
+'cantrollback' => 'Денъиштирмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир',
'editcomment' => "Денъиштирме изааты: \"''\$1''\" эди.",
-'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) тарафындан япылгъан денъишмелер кери алынып, [[User:$1|$1]] тарафындан денъиштирильген эвельки версия кери кетирильди.',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|музакере]]) тарафындан япылгъан денъиштирмелер кери алынып, [[User:$1|$1]] тарафындан денъиштирильген эвельки версия кери кетирильди.',
# Protect
'protectlogpage' => 'Къорчалав журналы',
-'protectlogtext' => 'Ашагъыдаки, къорчалавгъа алув/чыкъарув иле багълы денъишмелер журналыдыр.
+'protectlogtext' => 'Ашагъыдаки, къорчалавгъа алув/къорчалавдан чыкъарув иле багълы денъишмелер журналыдыр.
Къорчалангъан саифелер [[Special:ProtectedPages|там джедвелини]] де коре билесинъиз.',
'protectedarticle' => '"[[$1]]" къорчалав алтына алынды',
'modifiedarticleprotection' => '«[[$1]]» ичюн къорчалав севиеси денъиштирильди',
'contributions-title' => '$1 къулланыджысынынъ исселери',
'mycontris' => 'Исселерим',
'contribsub2' => '$1 ($2)',
-'nocontribs' => 'Бу критерийлерге уйгъан денъишме тапыламады',
+'nocontribs' => 'Бу критерийлерге уйгъан денъиштирме тапыламады',
'uctop' => '(сонъки)',
'month' => 'Бу ай (ве ондан эрте):',
'year' => 'Бу сене (ве ондан эрте):',
# Move page
'move-page' => '$1 саифесининъ адыны денъиштиреятасыз',
'move-page-legend' => 'Саифенинъ адыны денъиштирюв',
-'movepagetext' => "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъишмелер журналы да янъы адгъа авуштырылыр.
-Эски ад янъы адгъа ёллама олур. Эски серлевагъа ёллама саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёллама саифелерини озюнъиз тюзетмеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.
+'movepagetext' => "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъиштирмелер журналы да янъы адгъа авуштырылыр.
+Эски ады янъы адына ёллама олур. Эски серлевагъа ёллама саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёллама саифелерини озюнъиз тюзетмеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.
-Янъы адда бир саифе энди бар олса, ад денъишмеси '''япылмайджакъ''', анджакъ бар олгъан саифе ёллама я да бош олса ад денъишмеси мумкюн оладжакъ. Бу демек ки, саифе адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.
+Янъы адда бир саифе энди бар олса, ад денъиштирилюви '''япылмайджакъ''', анджакъ бар олгъан саифе ёллама я да бош олса ад денъиштирилюви мумкюн оладжакъ. Бу демек ки, саифенинъ адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.
'''ТЕНБИ!'''
-Ð\90д денÑ\8aиÑ\88Ñ\82иÑ\80илÑ\8eви попÑ\83лÑ\8fÑ\80 Ñ\81аиÑ\84елеÑ\80 иÑ\87Ñ\8eн бÑ\83Ñ\8eк денÑ\8aиÑ\88мелеÑ\80ге Ñ\81ебеп ола билиÑ\80. Ð\9bÑ\8eÑ\82Ñ\84ен, денÑ\8aиÑ\88ме япмаздан эвель ола биледжеклерни козь огюне алынъыз.",
+Ð\90д денÑ\8aиÑ\88Ñ\82иÑ\80илÑ\8eви попÑ\83лÑ\8fÑ\80 Ñ\81аиÑ\84елеÑ\80 иÑ\87Ñ\8eн бÑ\83Ñ\8eк ве бекленмеген денÑ\8aиÑ\88мелеÑ\80ге Ñ\81ебеп ола билиÑ\80. Ð\9bÑ\8eÑ\82Ñ\84ен, денÑ\8aиÑ\88Ñ\82иÑ\80ме япмаздан эвель ола биледжеклерни козь огюне алынъыз.",
'movepagetalktext' => "Къошулгъан музакере саифесининъ де (бар олса)
ады автоматик тарзда денъиштириледжек. '''Мустесналар:'''
'movepage-page-exists' => '$1 саифеси энди бар, ве автоматик оларакъ янъыдан язылып оламаз.',
'movepage-page-moved' => '$1 саифесининъ ады $2 оларакъ денъиштирильди.',
'movepage-page-unmoved' => '$1 саифесининъ ады $2 оларакъ денъиштирилип оламай.',
-'movelogpage' => 'Ад денъишмелери журналы',
+'movelogpage' => 'Ад денъиштирильмелери журналы',
'movelogpagetext' => 'Ашагъыда булунгъан джедвель ады денъиштирильген саифелерни косьтере',
'movesubpage' => '{{PLURAL:$1|Алт саифе|Алт саифелер}}',
'movesubpagetext' => 'Бу саифенинъ ашагъыда косьтерильген $1 {{PLURAL:$1|алт саифеси|алт саифеси}} бар.',
'tooltip-n-mainpage-description' => 'Баш саифеге бар',
'tooltip-n-portal' => 'Лейха узерине, не къайдадыр, нени япып оласынъыз',
'tooltip-n-currentevents' => 'Агъымдаки вакъиаларнен багълы сонъки малюмат',
-'tooltip-n-recentchanges' => 'Викиде япылгъан сонъки денъишмелернинъ джедвели.',
+'tooltip-n-recentchanges' => 'Викиде япылгъан сонъки денъиштирмелернинъ джедвели.',
'tooltip-n-randompage' => 'Тесадюфий бир саифени косьтерюв',
'tooltip-n-help' => 'Ярдым болюги',
'tooltip-t-whatlinkshere' => 'Бу саифеге багъланты берген дигер вики саифелерининъ джедвели',
-'tooltip-t-recentchangeslinked' => 'Бу саифеге багъланты берген саифелердеки сонъки денъишмелер',
+'tooltip-t-recentchangeslinked' => 'Бу саифеге багъланты берген саифелердеки сонъки денъиштирмелер',
'tooltip-feed-rss' => 'Бу саифе ичюн RSS трансляциясы',
'tooltip-feed-atom' => 'Бу саифе ичюн atom трансляциясы',
'tooltip-t-contributions' => 'Къулланыджынынъ иссе джедвелине бакъув',
'tooltip-ca-nstab-main' => 'Саифени косьтер',
'tooltip-ca-nstab-user' => 'Къулланыджы саифесини косьтер',
'tooltip-ca-nstab-media' => 'Медиа саифесини косьтер',
-'tooltip-ca-nstab-special' => 'Бу, махсус саифе олгъаны ичюн денъишме япамазсынъыз.',
+'tooltip-ca-nstab-special' => 'Бу, махсус саифе олгъаны ичюн денъиштирме япамазсынъыз.',
'tooltip-ca-nstab-project' => 'Лейха саифесини косьтер',
'tooltip-ca-nstab-image' => 'Ресим саифесини косьтер',
'tooltip-ca-nstab-mediawiki' => 'Система беянатыны косьтер',
'tooltip-ca-nstab-template' => 'Шаблонны косьтер',
'tooltip-ca-nstab-help' => 'Ярдым саифесини косьтер',
'tooltip-ca-nstab-category' => 'Категория саифесини косьтер',
-'tooltip-minoredit' => 'Бу, кичик бир денъишмедир деп бельгиле',
-'tooltip-save' => 'Япкъан денъишмелеринъизни сакъла',
-'tooltip-preview' => 'Ð\91акÑ\8aÑ\8bп Ñ\87Ñ\8bкÑ\8aÑ\83в. СакÑ\8aламаздан Ñ\8dвелÑ\8c бÑ\83 Ñ\85Ñ\83Ñ\81Ñ\83Ñ\81иеÑ\82ни кÑ\8aÑ\83лланÑ\8bп Ñ\8fпкÑ\8aан денÑ\8aиÑ\88мелеринъизни бакъып чыкъынъыз!',
+'tooltip-minoredit' => 'Бу, кичик бир денъиштирмедир деп бельгиле',
+'tooltip-save' => 'Япкъан денъиштирмелеринъизни сакълай',
+'tooltip-preview' => 'Ð\91акÑ\8aÑ\8bп Ñ\87Ñ\8bкÑ\8aÑ\83в. СакÑ\8aламаздан Ñ\8dвелÑ\8c бÑ\83 Ñ\84Ñ\83нкÑ\86иÑ\8fнÑ\8b кÑ\8aÑ\83лланÑ\8bп Ñ\8fпкÑ\8aан денÑ\8aиÑ\88Ñ\82иÑ\80мелеринъизни бакъып чыкъынъыз!',
'tooltip-diff' => 'Метинге сиз япкъан денъишикликлерни косьтерир.',
'tooltip-compareselectedversions' => 'Сайлангъан эки версия арасындаки фаркъларны косьтер.',
'tooltip-watch' => 'Саифени козетюв джедвелине кирсет',
'monthsall' => 'Эписи',
'limitall' => 'бутюни',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-mail адресини тасдыкъла',
'confirmemail_noemail' => '[[Special:Preferences|Къулланыджы сазламаларынъызда]] догъру бир e-mail адресинъиз ёкъ.',
'confirmemail_text' => '{{SITENAME}} сайтынынъ e-mail функцияларыны къулланмаздан эвель e-mail адресинъизнинъ тасдыкъланмасы керек. Адресинъизге тасдыкъ e-mail мектюбини ёлламакъ ичюн ашагъыдаки дёгмени басынъыз. Ёлланаджакъ беянатта адресинъизни тасдыкъламакъ ичюн браузеринъизнен иришип оладжакъ, тасдыкъ коду олгъан бир багъланты оладжакъ.',
'watchlisttools-edit' => 'Козетюв джедвелини корь ве денъиштир',
'watchlisttools-raw' => 'Козетюв джедвелини адий метин оларакъ денъиштир',
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|музакере]])',
+
# Special:Version
'version' => 'Версия',
# User preference toggles
'tog-underline' => 'Bağlantılarnıñ tübüni sızuv:',
'tog-justify' => 'Metinni eki yanğa tegizle',
-'tog-hideminor' => '"Soñki deñişmeler" saifesinde kiçik deñişmelerni gizle',
-'tog-hidepatrolled' => 'Soñki deñişmeler köstergende teşkerilgen deñişmelerni gizle',
+'tog-hideminor' => '"Soñki deñiştirmeler" saifesinde kiçik deñiştirmelerni gizle',
+'tog-hidepatrolled' => 'Soñki deñiştirmeler köstergende teşkerilgen deñiştirmelerni gizle',
'tog-newpageshidepatrolled' => 'Yañı saifeler köstergende teşkerilgen saifelerni gizle',
-'tog-extendwatchlist' => 'Közetüv cedvelini, tek soñki degil, bütün deñişmelerni körmek içün kenişlet',
-'tog-usenewrc' => 'Tafsilâtlı soñki deñişmeler cedvelini qullan (JavaScript kerek)',
+'tog-extendwatchlist' => 'Közetüv cedvelini, tek soñki degil, bütün deñiştirmelerni körmek içün kenişlet',
+'tog-usenewrc' => 'Soñki deñiştirmeler saifesindeki ve közetüv cedvelindeki deñiştirmelerni gruppalandıruv (JavaScript kerek)',
'tog-numberheadings' => 'Serlevalarnı avtomatik nomeralandır',
'tog-showtoolbar' => 'Saifeni deñiştirgen vaqıtta yardımcı dögmelerni köster. (JavaScript)',
'tog-editondblclick' => 'Saifeni çift basıp deñiştirmege başla (JavaScript)',
'tog-editsectiononrightclick' => 'Bölük serlevasına oñ basqanda deñiştirüv penceresini aç. (JavaScript)',
'tog-showtoc' => 'Münderice cedveli köster (3 daneden ziyade serlevası olğan saifeler içün)',
'tog-rememberpassword' => 'Kirişimni bu brauzerde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)',
-'tog-watchcreations' => 'Men yaratqan saifelerni közetüv cedvelime kirset',
-'tog-watchdefault' => 'Men deñiştirgen saifelerni közetüv cedvelime kirset',
-'tog-watchmoves' => 'Menim tarafımdan adı deñiştirilgen saifelerni közetüv cedvelime kirset',
-'tog-watchdeletion' => 'Men yoq etken saifelerni közetüv cedvelime kirset',
-'tog-minordefault' => 'Yapqan deñişmelerimni kiçik deñişmedir dep işaretle',
+'tog-watchcreations' => 'Yaratqan saifelerimni ve yüklegen fayllarımnı közetüv cedvelime kirset',
+'tog-watchdefault' => 'Deñiştirgen saife ve fayllarımnı közetüv cedvelime kirset',
+'tog-watchmoves' => 'Adını men deñiştirgen saife ve fayllarnı közetüv cedvelime kirset',
+'tog-watchdeletion' => 'Yoq etken saife ve fayllarımnı közetüv cedvelime kirset',
+'tog-minordefault' => 'Yapqan deñiştirmelerimni kiçik deñiştirmedir dep işaretle',
'tog-previewontop' => 'Baqıp çıquvnı yazuv pencereniñ üstünde köster',
'tog-previewonfirst' => 'Deñiştirme saifesine keçkende baqıp çıquvnı köster',
'tog-nocache' => 'Brauzer saifelerni afızasında tutmasın',
-'tog-enotifwatchlistpages' => 'Közetüv cedvelimdeki bir saife deñiştirilgende maña e-mail yolla',
+'tog-enotifwatchlistpages' => 'Közetüv cedvelimdeki bir saife ya da fayl deñiştirilgende maña e-mail yolla',
'tog-enotifusertalkpages' => 'Qullanıcı saifem deñiştirilgende maña e-mail yolla',
-'tog-enotifminoredits' => 'Kiçik deñişme olğanda da de maña e-mail yolla',
+'tog-enotifminoredits' => 'Saife ya da faylda kiçik deñiştirilme olğanda da de maña e-mail yolla',
'tog-enotifrevealaddr' => 'Bildirüv mektüplerinde e-mail adresimni köster',
'tog-shownumberswatching' => 'Közetken qullanıcı sayısını köster',
'tog-oldsig' => 'Şimdiki imza:',
'tog-externaldiff' => 'Teñeştimek içün tış bir programma qullan (tecribeli qullanıcılar içün; kompyuteriñizni mahsus sazlamaq kerek. [ //www.mediawiki.org/wiki/Manual:External_editors tafsilâtlı malümat mında])',
'tog-showjumplinks' => '"Bar" bağlantısını faalleştir',
'tog-uselivepreview' => 'Canlı baqıp çıquv hususiyetini qullan (JavaScript) (daa deñeme alında)',
-'tog-forceeditsummary' => 'Deñişmeniñ qısqa tarifini boş taşlasam meni tenbile',
-'tog-watchlisthideown' => 'Közetüv cedvelimden menim deñişmelerimni gizle',
-'tog-watchlisthidebots' => 'Közetüv cedvelimden bot deñişmelerini gizle',
-'tog-watchlisthideminor' => 'Közetüv cedvelimden kiçik deñişmelerni gizle',
-'tog-watchlisthideliu' => 'Közetüv cedvelimde qaydlı qullanıcılar tarafından yapılğan deñişmelerni kösterme',
-'tog-watchlisthideanons' => 'Közetüv cedvelimde qaydsız (anonim) qullanıcılar tarafından yapılğan deñişmelerni kösterme',
-'tog-watchlisthidepatrolled' => 'Közetüv cedvelinde teşkerilgen deñişmelerni gizle',
+'tog-forceeditsummary' => 'Deñiştirmeniñ qısqa tarifini boş taşlasam meni tenbile',
+'tog-watchlisthideown' => 'Közetüv cedvelimden menim deñiştirmelerimni gizle',
+'tog-watchlisthidebots' => 'Közetüv cedvelimden bot deñiştirmelerini gizle',
+'tog-watchlisthideminor' => 'Közetüv cedvelimden kiçik deñiştirmelerni gizle',
+'tog-watchlisthideliu' => 'Közetüv cedvelimde qaydlı qullanıcılar tarafından yapılğan deñiştirmelerni kösterme',
+'tog-watchlisthideanons' => 'Közetüv cedvelimde qaydsız (anonim) qullanıcılar tarafından yapılğan deñiştirmelerni kösterme',
+'tog-watchlisthidepatrolled' => 'Közetüv cedvelinde teşkerilgen deñiştirmelerni gizle',
'tog-ccmeonemails' => 'Diger qullanıcılarğa yollağan mektüplerimniñ kopiyalarını maña da yolla',
'tog-diffonly' => 'Teñeştirme saifelerinde saifeniñ esas mündericesini kösterme',
'tog-showhiddencats' => 'Gizli kategoriyalarnı köster',
-'tog-norollbackdiff' => 'Lâğu etilgen deñişmelerni kösterme',
+'tog-norollbackdiff' => 'Keri qaytaruv yapılğan soñ versiyalar arasındaki farqnı kösterme',
'underline-always' => 'Daima',
'underline-never' => 'Asla',
-'underline-default' => 'Brauzer qarar bersin',
+'underline-default' => 'Brauzer sazlamaları qullanılsın',
# Font style option in Special:Preferences
'editfont-style' => 'Yazuv penceresinde urufat (şrift) türü:',
'newwindow' => '(yañı bir pencerede açılır)',
'cancel' => 'Lâğu',
'moredotdotdot' => 'Daa...',
+'morenotlisted' => 'Başqa bir şey yoq...',
'mypage' => 'Saife',
'mytalk' => 'Muzakere',
'anontalk' => 'Bu IP-niñ muzakeresi',
'vector-action-protect' => 'Qorçala',
'vector-action-undelete' => 'Yañıdan yarat',
'vector-action-unprotect' => 'Qorçalavnı deñiştir',
-'vector-simplesearch-preference' => 'Tafsilâtlı qıdıruv tekliflerini işlet (tek Vektor resimlemesi içün)',
+'vector-simplesearch-preference' => 'Sadeleştirilgen qıdıruv satırını işlet (tek Vektor körünişi içün)',
'vector-view-create' => 'Yarat',
'vector-view-edit' => 'Deñiştir',
'vector-view-history' => 'Keçmişini köster',
'namespaces' => 'İsim fezaları',
'variants' => 'Variantlar',
+'navigation-heading' => 'Dolaşuv menüsi',
'errorpagetitle' => 'Hata',
'returnto' => '$1.',
'tagline' => '{{GRAMMAR:ablative|{{SITENAME}}}}',
'create-this-page' => 'Bu saifeni yarat',
'delete' => 'Yoq et',
'deletethispage' => 'Saifeni yoq et',
-'undelete_short' => '{{PLURAL:$1|1|$1}} deñişmeni keri ketir',
-'viewdeleted_short' => '{{PLURAL:$1|bir yoq etilgen deñişmeni|$1 yoq etilgen deñişmeni}} köster.',
+'undelete_short' => '{{PLURAL:$1|1|$1}} deñiştirmeni keri ketir',
+'viewdeleted_short' => '{{PLURAL:$1|bir yoq etilgen deñiştirmeni|$1 yoq etilgen deñiştirmeni}} köster.',
'protect' => 'Qorçala',
'protect_change' => 'deñiştir',
'protectthispage' => 'Saifeni qorçalav altına al',
'retrievedfrom' => 'Menba – "$1"',
'youhavenewmessages' => 'Yañı $1 bar ($2).',
'newmessageslink' => 'beyanatıñız',
-'newmessagesdifflink' => 'muzakere saifeñizniñ soñki deñişkeni',
+'newmessagesdifflink' => 'muzakere saifeñizniñ soñki deñiştirilmesi',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir qullanıcıdan|$3 qullanıcıdan}} $1 bar. ($2)',
+'youhavenewmessagesmanyusers' => 'Bir qaç qullanıcıdan $1 bar. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|yañı beyanatıñız|yañı beyanatlarıñız}}',
+'newmessagesdifflinkplural' => 'muzakere saifeñizniñ soñki {{PLURAL:$1|deñiştirilmesi|deñiştirilmeleri}}',
'youhavenewmessagesmulti' => '$1 saifesinde yañı beyanatıñız bar.',
'editsection' => 'deñiştir',
'editold' => 'deñiştir',
'collapsible-expand' => 'Kenişlet',
'thisisdeleted' => '$1 körmege ya da keri ketirmege isteysiñizmi?',
'viewdeleted' => '$1 kör?',
-'restorelink' => 'yoq etilgen {{PLURAL:$1|1|$1}} deñişmesi',
+'restorelink' => 'yoq etilgen {{PLURAL:$1|1|$1}} deñiştirmesi',
'feedlinks' => 'Bu şekilde:',
'feed-invalid' => 'Abune kanalınıñ çeşiti yañlıştır.',
'feed-unavailable' => 'Sindikatsiya lentaları qullanılıp оlamay.',
'error' => 'Hata',
'databaseerror' => 'Malümat bazasınıñ hatası',
'dberrortext' => 'Malümat bazasından soratqanda sintaksis hatası oldı.
-Bu yazılımdaki bir hata ola bile.
+Bu programmadaki bir hata ola bile.
"<tt>$2</tt>" funktsiyasından olğan malümat bazasından soñki soratma:
<blockquote><tt>$1</tt></blockquote>.
Malümat bazasınıñ bildirgen hatası "<tt>$3: $4</tt>".',
'badarticleerror' => 'Siz yapmağa istegen işlev bu saifede yapılıp оlamay.',
'cannotdelete' => '"$1" saife ya da faylı yoq etilip olamadı. Başqa bir qullanıcı tarafından yoq etilgen ola bile.',
'cannotdelete-title' => '"$1" saifesini yoq etmege olmaz',
+'delete-hook-aborted' => 'Yoq etüv çengel protsedurasınen toqtatıldı.
+İç bir izaat berilmedi.',
'badtitle' => 'Ruhsetsiz serleva',
'badtitletext' => 'İstenilgen saife adı doğru degil, o boştır, yahut tillerara bağlantı ya da vikilerara bağlantı doğru yazılmağan. Belki saife adında yasaqlanğan işaretler bar.',
-'perfcached' => 'Malümatlar daa evelceden azırlanğan ola bilir. Bu sebepten eskirgen ola bilir! A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Aşağıda keşte saqlanğan malümat buluna, soñki yañaruv zamanı: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Aşağıdaki malümat keşten alındı ve eskirgen ola bilir! Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.',
+'perfcachedts' => 'Aşağıdaki malümat keşten alındı, keşniñ soñki yañartılğan vaqtı: $1. Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.',
'querypage-no-updates' => 'Bu saifeni deñiştirmege şimdi izin yoq. Bu malümat aman yañartılmaycaq.',
'wrong_wfQuery_params' => 'wrong_wfQuery_params - wfQuery() funktsiyası içün izinsiz parametrler<br />
Funktsiya: $1<br />
'protectedpagetext' => 'Bu saifeni kimse deñiştirmesin dep o blok etildi.',
'viewsourcetext' => 'Saifeniñ kodunı közden keçirip kopiyalay bilesiñiz:',
'protectedinterface' => 'Bu saifede sistema interfeysiniñ metni bar. Onıñ içün mında bir hata çıqmasın dep onı deñiştirmek yasaq.',
-'editinginterface' => "'''Tenbi''': İçinde MediaWiki sistemasınıñ beyanatı olğan bir saifeni deñiştireyatasız. Bu saifedeki deñişmeler qullanıcı interfeysiniñ körünişini diger qullanıcılar içün de deñiştirecek. Lütfen, tercimeler içün [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] saytını (MediaWiki resmiy lokalizatsiya leyhası) qullanıñız.",
+'editinginterface' => "'''Tenbi''': MediaWiki sistemasınıñ interfeys saifesini deñiştireyatasız. Bu saifedeki deñiştirmeler interfeysniñ körünişini bu vikiniñ başqa qullanıcıları içün de deñiştirecek. Lütfen, viki interfeysini tercime etmek içün [//translatewiki.net/wiki/Main_Page?setlang=crh translatewiki.net] saytını (MediaWiki resmiy lokalizatsiya leyhası) qullanıñız.",
'sqlhidden' => '(SQL istintağı saqlı)',
'cascadeprotected' => 'Bu saifeni deñiştirip olamazsıñız, çünki kaskad qorçalav altında bulunğan {{PLURAL:$1|saifege|saifelerge}} mensüptir:
$2',
'hr_tip' => 'Gorizontal sızıq (pek sıq qullanmañız)',
# Edit pages
-'summary' => 'Deñişmeniñ qısqa tarifi:',
+'summary' => 'Deñiştirmeniñ qısqa tarifi:',
'subject' => 'Mevzu/serleva:',
-'minoredit' => 'Bu, kiçik deñişmedir',
+'minoredit' => 'Bu, kiçik deñiştirmedir',
'watchthis' => 'Saifeni közet',
'savearticle' => 'Saifeni saqla',
'preview' => 'Baqıp çıquv',
'showpreview' => 'Baqıp çıq',
'showlivepreview' => 'Tez baqıp çıquv',
-'showdiff' => 'Deñişmelerni köster',
-'anoneditwarning' => "'''Diqqat''': Saytqa kirmegeniñizden sebep deñişmeler tarihına siziñ IP adresiñiz yazılır.",
-'anonpreviewwarning' => 'Saytqa kirmediñiz. Saifeni saqlasañız deñişmeler tarihına siziñ IP adresiñiz yazılır.',
+'showdiff' => 'Deñiştirmelerni köster',
+'anoneditwarning' => "'''Diqqat''': Saytqa kirmegeniñizden sebep deñiştirmeler tarihına siziñ IP adresiñiz yazılır.",
+'anonpreviewwarning' => 'Saytqa kirmediñiz. Saifeni saqlasañız deñiştirmeler tarihına siziñ IP adresiñiz yazılır.',
'missingsummary' => "'''Hatırlatma.''' Deñiştirmeleriñizni qısqadan tarif etmediñiz. \"Saifeni saqla\" dögmesine tekrar basuv ile deñiştirmeleriñiz tefsirsiz saqlanacaqlar.",
'missingcommenttext' => 'Lütfen, aşağıda tefsir yazıñız.',
'missingcommentheader' => "'''Hatırlatma:''' Tefsir mevzusını/serlevasını yazmadıñız. \"{{int:savearticle}}\" dögmesine tekrar basqan soñ tefsiriñiz serlevasız saqlanır.",
'userpage-userdoesnotexist-view' => '"$1" adlı qullanıcı esabı yoq.',
'blocked-notice-logextract' => 'Bu qullanıcı şimdi blok etilgen.
Blok etüv jurnalınıñ soñki yazısı aşağıda kösterilgen:',
-'clearyourcache' => "'''İhtar:''' Belki sazlamalarıñıznı saqlağandan soñ deñişmelerni körmek içün brauzeriñizniñ keşini temizlemek kerek olursıñız.
-'''Mozilla / Firefox / Safari:''' ''Shift'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-Shift-R'' basmaq (Mac içün ''Command-R'');
-'''Konqueror:''' saifeni yañıdan yükle dögmesine ya da F5 basımaq;
-'''Opera:''' ''Tools → Preferences'' menüsinde keşni temizlemek;
-'''Internet Explorer:''' ''Ctrl'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-F5'' basmaq.",
+'clearyourcache' => "'''İhtar:''' Belki sazlamalarıñıznı saqlağandan soñ deñişmelerni körmek içün brauzeriñizniñ keşini temizlemek kerek olursıñız. Keş temizlemek içün şunı yapmaq kerek:
+* '''Firefox / Safari:''' ''Shift'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-F5'' ya da ''Ctrl-R'' basmaq (Mac içün ''⌘-R'')
+* '''Google Chrome:''' ''Ctrl-Shift-R'' basmaq (Mac içün ''⌘-Shift-R'')
+* '''Internet Explorer:''' ''Ctrl'' basıp saifeni yañıdan yüklemek ya da ''Ctrl-F5'' basmaq
+* '''Opera:''' ''Tools → Preferences'' menüsinde keşni temizlemek",
'usercssyoucanpreview' => "'''Tevsiye:''' Yañı CSS faylını teşkermek içün saifeni saqlamazdan evel \"{{int:showpreview}}\" dögmesine basıñız.",
'userjsyoucanpreview' => "'''Tevsiye:''' Yañı JavaScript-iñizni teşkermek içün saifeni saqlamazdan evel \"{{int:showpreview}}\" dögmesine basıñız.",
'usercsspreview' => "'''Unutmañız, bu tek baqıp çıquv - qullanıcı CSS faylıñız alâ daa saqlanmadı!'''",
Bundan da soñ olıp çıqmasa, malümat lokal faylğa saqlañız da brauzeriñizni bir qapatıp
açıñız.'''",
'session_fail_preview_html' => "'''Afu etiñiz! HTML sessiyanıñ malümatları ğayıp olğanı sebebinden siziñ deñiştirmeleriñizni qabul etmege imkân yoqtır.'''",
-'token_suffix_mismatch' => "'''Siziñ programmañız türlendirüv penceresinde punktuatsiya işaretlerini doğru işlemegeni içün yapqan deñişmeleriñiz qabul olunmadı. Deñişmeler saifeniñ metni körünişiniñ bozulmaması içün lâğu etildi.
+'token_suffix_mismatch' => "'''Siziñ programmañıznıñ öz türlendirüv penceresinde punktuatsiya işaretlerini doğru işlemegeni içün yapqan deñiştirmeleriñiz qabul olunmadı. Deñiştirmeler saife metniniñ körünişi bozulmasın dep lâğu etildi.
Bunıñ kibi problemalar hatalı anonim web-proksiler qullanuvdan çıqıp ola.'''",
'editing' => '"$1" saifesini deñiştireyatasız',
'editingsection' => '"$1" saifesinde bölük deñiştireyatasız',
'editingcomment' => '$1 saifesini deñiştireyatasız (yañı bölük)',
-'editconflict' => 'Deñişmeler konflikti: $1',
-'explainconflict' => "Siz saifeni deñiştirgen vaqıtta başqa biri de deñişme yaptı.
+'editconflict' => 'Deñiştirmeler çatışması: $1',
+'explainconflict' => "Siz saifeni deñiştirgende başqa biri de deñiştirme yaptı.
Yuqarıdaki yazı saifeniñ şimdiki alını köstere.
-Siziñ deñişmeleriñiz astında kösterildi. Şimdi yapqan deñişmeleriñizni aşağı pencereden yuqarı pencerege avuştırmaq kereksiñiz.
+Siziñ deñiştirmeleriñiz astında kösterildi. Şimdi yapqan deñiştirmeleriñizni aşağı pencereden yuqarı pencerege avuştırmaq kereksiñiz.
\"{{int:savearticle}}\"ğa basqanda '''tek''' yuqarıdaki yazı saqlanacaq.",
'yourtext' => 'Siziñ metniñiz',
'storedversion' => 'Saqlanğan metin',
'nonunicodebrowser' => "'''TENBİ: Brauzeriñizde Unicode kodlaması tanılmaz. Saifeler deñiştirgende bütün ASCII olmağan işaretlerniñ yerine olarnıñ onaltılıq kodu yazılır.'''",
'editingold' => "'''DİQQAT: Saifeniñ eski bir versiyasını deñiştireyatasız.
-Saifeni saqlağanıñızdan soñ bu tarihlı versiyadan künümizge qadar olğan deñişmeler yoq olacaq.'''",
+Saifeni saqlağanıñızdan soñ bu tarihlı versiyadan künümizge qadar olğan deñiştirmeler yoq olacaq.'''",
'yourdiff' => 'Farqlar',
'copyrightwarning' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına qoşulğan bütün isseler $2 muqavelesi dairesindedir (tafsilât içün $1 saifesine baqıñız).
Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.<br />
Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız ($1 baqıñız).<br />
'''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''",
'longpageerror' => "'''TENBİ: Bu saife $1 kilobayt büyükligindedir. Azamiy (maksimal) izinli büyüklik ise $2 kilobayt. Bu saife saqlanıp olamaz.'''",
-'readonlywarning' => "'''TENBİ: Baqım sebebi ile malümat bazası şimdi kilitlidir. Bu sebepten yapqan deñişmeleriñizni şimdi saqlap olamasıñız. Yazğanlarıñıznı başqa bir türlendirüv programmasına alıp saqlap ve daa soñ bir daa mında ketirip saqlap olursıñız'''
+'readonlywarning' => "'''TENBİ: Baqım sebebi ile malümat bazası şimdi kilitlidir. Bu sebepten yapqan deñiştirmeleriñizni şimdi saqlap olamasıñız. Yazğanlarıñıznı vaqtınca bir tekst faylında saqlap ve daa soñra bir daa mında ketirip saqlap olursıñız'''
-Malümat bazasını kilitlegen idareci öz areketini böyle añlattı: $1",
+Malümat bazasını kilitlegen idareci öz areketini şöyle añlattı: $1",
'protectedpagewarning' => "'''Tenbi: Bu saife qorçalanğan ve tek idareciler tarafından deñiştirilip olur.'''
Jurnalnıñ soñki yazısı aşağıda berilgen:",
'semiprotectedpagewarning' => "'''Tenbi''': Bu saife tek qaydlı qullanıcılar tarafından deñiştirilip olur.
'moveddeleted-notice' => 'Bu saife yoq etilgen.
Saifeniñ yoq etilüv ve avuştırıluv qaydları aşağıda berilgen.',
'log-fulllog' => 'Jurnalnı tolusınca köster',
-'edit-hook-aborted' => 'Deñişme çengel protsedurasınen toqtatıldı.
+'edit-hook-aborted' => 'Deñiştirme çengel protsedurasınen toqtatıldı.
İç bir izaat berilmedi.',
'edit-gone-missing' => 'Saife yañartılıp olamay.
Belki o yoq etilgendir.',
-'edit-conflict' => 'Deñişmeler çatışması.',
-'edit-no-change' => 'Yapqan deñişmeñiz saqlanmağan, çünki metinde bir türlü deñişme yapılmadı.',
+'edit-conflict' => 'Deñiştirmeler çatışması.',
+'edit-no-change' => 'Yapqan deñiştirmeñiz saqlanmağan, çünki metinde bir türlü deñiştirilme yapılmadı.',
'edit-already-exists' => 'Yañı saifeni yaratmaq mümkün degil.
O endi bar.',
# "Undo" feature
-'undo-success' => 'Deñişme lâğu etile bile. Lütfen, mına bu deñişmelerni yapmağa istegeniñizden emin olmaq içün versiyalar teñeştirilüvini közden keçirip deñişmelerni saqlamaq içün "Saifeni saqla" dögmesine basıñız.',
-'undo-failure' => 'Aradaki deñişmeler bir-birine kelişikli olmağanı içün deñişme lâğu etilip olamay.',
-'undo-norev' => 'Deñişme lâğu etilip olamaz, çünki o ya da yoq, ya da bar edi, amma yoq etilgen.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) qullanıcısınıñ $1 nomeralı deñişmesini lâğu etüv.',
+'undo-success' => 'Deñiştirme lâğu etile bile. Lütfen, mına bu deñiştirmelerni yapmağa istegeniñizden emin olmaq içün versiyalar teñeştirilüvini közden keçirip deñiştirmelerni saqlamaq içün "Saifeni saqla" dögmesine basıñız.',
+'undo-failure' => 'Aradaki deñiştirmeler bir-birine kelişikli olmağanı içün deñiştirme lâğu etilip olamay.',
+'undo-norev' => 'Deñiştirme lâğu etilip olamaz, çünki o ya da yoq, ya da bar edi, amma yoq etilgen.',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) qullanıcısınıñ $1 nomeralı deñiştirmesini lâğu etüv.',
# Account creation failure
'cantcreateaccounttitle' => 'Esap yaratmaqnıñ iç çaresi yoq.',
'last' => 'soñki',
'page_first' => 'ilk',
'page_last' => 'soñki',
-'histlegend' => "(farq) = şimdiki alnen aradaki farq,
-(soñki) = evelki alnen aradaki farq, '''k''' = kiçik deñişme",
+'histlegend' => "Farq saylanuvı: Teñeştirmege istegen eki versiyañıznı saylap '''{{int:compare-submit}}''' dögmesine basıñız.<br />
+Añlatmalar: '''({{int:cur}})''' = şimdiki versiyanen arasındaki farq, '''({{int:last}})''' = evelki versiyanen arasındaki farq, '''{{int:minoreditletter}}''' = kiçik deñiştirme.",
'history-fieldset-title' => 'Keçmişke baquv',
'history-show-deleted' => 'Tek yoq etilgenler',
'histfirst' => 'Eñ eski',
'historyempty' => '(boş)',
# Revision feed
-'history-feed-title' => 'Deñişmeler tarihı',
-'history-feed-description' => 'Vikide bu saifeniñ deñişmeler tarihı',
+'history-feed-title' => 'Deñiştirmeler tarihı',
+'history-feed-description' => 'Vikide bu saifeniñ deñiştirmeler tarihı',
'history-feed-item-nocomment' => '$2 üstünde $1',
'history-feed-empty' => 'İstenilgen saife yoq.
O yoq eilgen ya da adı deñiştirilgen ola bile.
Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
# Revision deletion
-'rev-deleted-comment' => '(deñişmeniñ tarifi yoq etildi)',
+'rev-deleted-comment' => '(deñiştirmeniñ tarifi yoq etildi)',
'rev-deleted-user' => '(qullanıcı adı yoq etildi)',
'rev-deleted-event' => '(qayd yoq etildi)',
'rev-delundel' => 'köster/gizle',
'rev-showdeleted' => 'köster',
'revisiondelete' => 'Versiyalarnı yoq et/keri ketir',
'revdelete-hide-comment' => 'Qısqa tarifni kösterme',
-'revdelete-hide-user' => 'Deñişmeni yapqannıñ qullanıcı adını/IP-ni gizle',
+'revdelete-hide-user' => 'Deñiştirmeni yapqannıñ qullanıcı adını/IP-ni gizle',
'revdelete-hide-restricted' => 'Malümatnı adiy qullanıcılardan kibi idarecilerden de gizle',
'revdelete-submit' => 'Saylanğan {{PLURAL:$1|versiyağa|versiyalarğa}} işlet',
'revdel-restore' => 'körünüvni deñiştir',
'mergelogpagetext' => 'Saifelerniñ keçmiş versiyalarınıñ bir-birlerinen eñ soñki birleştirilmeleri aşağıdaki cedvelde kösterilgen.',
# Diffs
-'history-title' => '"$1" saifesiniñ deñişmeler tarihı',
+'history-title' => '"$1" saifesiniñ deñiştirmeler tarihı',
'difference-multipage' => '(Saifeler arasındaki farq)',
'lineno' => '$1 satır:',
'compareselectedversions' => 'Saylanğan versiyalarnı teñeştir',
# Preferences page
'preferences' => 'Sazlamalar',
-'mypreferences' => 'Sazlamalarım',
-'prefs-edits' => 'Deñişmeler sayısı:',
+'mypreferences' => 'Sazlamalar',
+'prefs-edits' => 'Deñiştirmeler sayısı:',
'prefsnologin' => 'Oturım açmadıñız',
'prefsnologintext' => 'Şahsiy sazlamalarıñıznı deñiştirmek içün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} oturım açmaq]</span> kereksiñiz.',
'changepassword' => 'Parol deñiştir',
'datedefault' => 'Standart',
'prefs-datetime' => 'Tarih ve saat',
'prefs-personal' => 'Qullanıcı malümatı',
-'prefs-rc' => 'Soñki deñişmeler',
+'prefs-rc' => 'Soñki deñiştirmeler',
'prefs-watchlist' => 'Közetüv cedveli',
'prefs-watchlist-days' => 'Közetüv cedvelinde kösterilecek kün sayısı:',
'prefs-watchlist-days-max' => 'Eñ çoq $1 {{PLURAL:$1|kün|kün}}',
-'prefs-watchlist-edits' => 'Kenişletilgen közetüv cedvelinde kösterilecek deñişmeler sayısı:',
+'prefs-watchlist-edits' => 'Kenişletilgen közetüv cedvelinde kösterilecek deñiştirmeler sayısı:',
'prefs-watchlist-edits-max' => 'Eñ çoq 1000',
'prefs-watchlist-token' => 'Közetüv cedveli işareti:',
'prefs-misc' => 'Diger sazlamalar',
'prefs-resetpass' => 'Parolni deñiştir',
'prefs-email' => 'E-mail sazlamaları',
'prefs-rendering' => 'Körüniş',
-'saveprefs' => 'Deñişmelerni saqla',
+'saveprefs' => 'Saqla',
'resetprefs' => 'Saqlanmağan sazlamalarnı ilk alına ketir',
'restoreprefs' => 'Bütün ög belgilengen sazlamalarnı qaytar',
'prefs-editing' => 'Saifelerni deñiştirüv',
'columns' => 'Sutun',
'searchresultshead' => 'Qıdıruv',
'resultsperpage' => 'Saifede kösterilecek tapılğan saife sayısı',
-'recentchangesdays' => 'Soñki deñişmeler saifesinde kösterilecek kün sayısı:',
+'recentchangesdays' => 'Soñki deñiştirmeler saifesinde kösterilecek kün sayısı:',
'recentchangesdays-max' => '(eñ çoq $1 {{PLURAL:$1|kün|kün}})',
-'recentchangescount' => 'Ög belgilengen kösterilecek deñişmeler sayısı:',
-'prefs-help-recentchangescount' => 'Bu, soñki deñişmeler, saife keçmişi ve jurnal saifelerinde qullanıla.',
+'recentchangescount' => 'Ög belgilengen kösterilecek deñiştirmeler sayısı:',
+'prefs-help-recentchangescount' => 'Bu, soñki deñiştirmeler, saife keçmişi ve jurnal saifelerinde qullanıla.',
'savedprefs' => 'Sazlamalarıñız saqlandı.',
'timezonelegend' => 'Saat quşağı:',
'localtime' => 'Yerli vaqıt:',
'prefs-help-gender' => 'Mecburiy degil: wiki tarafından doğru cınıs adreslevi içün qullanıla. Bu malümat umumiy olacaq.',
'email' => 'E-mail',
'prefs-help-realname' => 'Kerçek adıñız (mecburiy degildir).
-Eger bildirseñiz, saifelerdeki deñişmelerni kimniñ yapqanını köstermek içün qullanılacaq.',
+Eger bildirseñiz, saifelerdeki deñiştirmelerni kimniñ yapqanını köstermek içün qullanılacaq.',
'prefs-help-email' => 'E-mail (mecburiy degildir). E-mail adresi bildirilgen olsa, paroliñizni unutsañız, sizge yañı bir parol yollamaq içün qullanılır.',
'prefs-help-email-required' => 'E-mail adresi lâzim.',
'prefs-info' => 'Esas malümat',
'action-edit' => 'bu saifeni deñiştirmege',
# Recent changes
-'nchanges' => '$1 {{PLURAL:$1|deñişme|deñişme}}',
-'recentchanges' => 'Soñki deñişmeler',
-'recentchanges-legend' => 'Soñki deñişmeler sazlamaları',
+'nchanges' => '$1 {{PLURAL:$1|deñiştirme}}',
+'recentchanges' => 'Soñki deñiştirmeler',
+'recentchanges-legend' => 'Soñki deñiştirmeler sazlamaları',
'recentchanges-summary' => 'Yapılğan eñ soñki deñişikliklerni bu saifede körip olasıñız.',
-'recentchanges-feed-description' => 'Bu lenta vastasınen vikide soñki deñişmelerni közet.',
-'recentchanges-label-newpage' => 'Bu deñişme yañı bir saife yarattı',
-'recentchanges-label-minor' => 'Bu, kiçik bir deñişme',
-'recentchanges-label-bot' => 'Bu bir botnıñ yapqan deñişmesi',
-'recentchanges-label-unpatrolled' => 'Bu deñişme alâ daa teşkerilmegen',
-'rcnote' => "$4 $5 tarihında soñki {{PLURAL:$2|künde|'''$2''' künde}} yapılğan '''{{PLURAL:$1|1|$1}}''' deñişme:",
-'rcnotefrom' => "'''$2''' tarihından itibaren yapılğan deñişmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
-'rclistfrom' => '$1 tarihından berli yapılğan deñişmelerni köster',
-'rcshowhideminor' => 'kiçik deñişmelerni $1',
+'recentchanges-feed-description' => 'Bu lenta vastasınen vikide soñki deñiştirmelerni közet.',
+'recentchanges-label-newpage' => 'Bu deñiştirme yañı bir saife yarattı',
+'recentchanges-label-minor' => 'Bu, kiçik bir deñiştirme',
+'recentchanges-label-bot' => 'Bu bir botnıñ yapqan deñiştirmesi',
+'recentchanges-label-unpatrolled' => 'Bu deñiştirme alâ daa teşkerilmegen',
+'rcnote' => "$4 $5 tarihında soñki {{PLURAL:$2|künde|'''$2''' künde}} yapılğan '''{{PLURAL:$1|1|$1}}''' deñiştirme:",
+'rcnotefrom' => "'''$2''' tarihından itibaren yapılğan deñiştirmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
+'rclistfrom' => '$1 tarihından berli yapılğan deñiştirmelerni köster',
+'rcshowhideminor' => 'kiçik deñiştirmelerni $1',
'rcshowhidebots' => 'botlarnı $1',
'rcshowhideliu' => 'qaydlı qullanıcılarnı $1',
'rcshowhideanons' => 'anonim qullanıcılarnı $1',
-'rcshowhidepatr' => 'közetilgen deñişmelerni $1',
-'rcshowhidemine' => 'menim yapqan deñişmelerimni $1',
-'rclinks' => 'Soñki $2 künde yapılğan soñki $1 deñişmeni köster;<br /> $3',
+'rcshowhidepatr' => 'közetilgen deñiştirmelerni $1',
+'rcshowhidemine' => 'menim yapqan deñiştirmelerimni $1',
+'rclinks' => 'Soñki $2 künde yapılğan soñki $1 deñiştirmeni köster;<br /> $3',
'diff' => 'farq',
'hist' => 'keçmiş',
'hide' => 'gizle',
'rc-enhanced-hide' => 'Tafsilâtını gizle',
# Recent changes linked
-'recentchangeslinked' => 'Bağlı deñişmeler',
-'recentchangeslinked-feed' => 'Bağlı deñişmeler',
-'recentchangeslinked-toolbox' => 'Bağlı deñişmeler',
-'recentchangeslinked-title' => '"$1" ile bağlı deñişmeler',
-'recentchangeslinked-noresult' => 'Saylanğan vaqıtta bağlı saifelerde iç bir deñişme olmadı.',
-'recentchangeslinked-summary' => "Bu mahsus saifede bağlı saifelerde soñki yapılğan deñişmeler cedveli bar. [[Special:Watchlist|Közetüv cedveliñiz]]deki saifeler '''qalın''' olaraq kösterile.",
+'recentchangeslinked' => 'Bağlı deñiştirmeler',
+'recentchangeslinked-feed' => 'Bağlı deñiştirmeler',
+'recentchangeslinked-toolbox' => 'Bağlı deñiştirmeler',
+'recentchangeslinked-title' => '"$1" ile bağlı deñiştirmeler',
+'recentchangeslinked-noresult' => 'Saylanğan vaqıtta bağlı saifelerde iç bir deñiştirme olmadı.',
+'recentchangeslinked-summary' => "Bu mahsus saifede bağlı saifelerde soñki yapılğan deñiştirmeler cedveli bar. [[Special:Watchlist|Közetüv cedveliñiz]]deki saifeler '''qalın''' olaraq kösterile.",
'recentchangeslinked-page' => 'Saife adı:',
'recentchangeslinked-to' => 'Berilgen saife yerine berilgen saifege bağlantı bergen olğan saifelerni köster',
'filename' => 'Fayl',
'filedesc' => 'Faylğa ait qısqa tarif',
'fileuploadsummary' => 'Qısqa tarif:',
-'filereuploadsummary' => 'Fayl deñişmeleri:',
+'filereuploadsummary' => 'Faylnıñ deñiştirilmeleri:',
'filestatus' => 'Tarqatuv şartları:',
'filesource' => 'Menba:',
'uploadedfiles' => 'Yüklengen fayllar',
'protectedpagestext' => 'Bu saifelerniñ deñiştirüvge qarşı qorçalavı bar',
'protectedtitles' => 'Yasaqlanğan serlevalar',
'listusers' => 'Qullanıcılar cedveli',
-'listusers-editsonly' => 'Tek deñişme yapqan qullanıcılarnı köster',
+'listusers-editsonly' => 'Tek eñ azından bir deñiştirme yapqan qullanıcılarnı köster',
'newpages' => 'Yañı saifeler',
'newpages-username' => 'Qullanıcı adı:',
'ancientpages' => 'Eñ eski saifeler',
# Special:ListGroupRights
'listgrouprights-members' => '(azalar cedveli)',
-# E-mail user
+# Email user
'mailnologin' => 'Mektüp yollanacaq adresi yoqtır',
'mailnologintext' => 'Diger qullanıcılarğa elektron mektüpler yollap olmaq içün [[Special:UserLogin|oturım açmalısıñız]] ve [[Special:Preferences|sazlamalarıñızda]] mevcut olğan e-mail adresiniñ saibi olmalısıñız.',
'emailuser' => 'Qullanıcığa mektüp',
'watchlistanontext' => 'Közetüv cedvelini baqmaq ya da deñiştirmek içün $1 borclusıñız.',
'watchnologin' => 'Oturım açmaq kerek',
'watchnologintext' => 'Öz közetüv cedveliñizni deñiştirmek içün [[Special:UserLogin|oturım açıñız]]',
-'addedwatchtext' => '"[[:$1]]" saifesi [[Special:Watchlist|kozetüv cevdeliñizge]] kirsetildi. Bu saifedeki ve onıñnen bağlı saifelerdeki olacaq deñişmeler bu cedvelde kösterilecek, em de olar közge çarpması içün [[Special:RecentChanges|yañı deñişmeler cedveli]]nde qalın ariflernen kösterilir.',
+'addedwatchtext' => '"[[:$1]]" saifesi [[Special:Watchlist|közetüv cevdeliñizge]] kirsetildi.
+Bundan soñ, bu saifede ve onıñ muzakere saifesinde yapılacaq deñiştirmeler anda kösterilecek.',
'removedwatchtext' => '"[[:$1]]" saifesi [[Special:Watchlist|közetüv cedveliñizden]] yoq etildi.',
'watch' => 'Közet',
'watchthispage' => 'Bu saifeni közet',
'watchlist-details' => 'Muzakere saifelerini esapqa almayıp, közetüv cedveliñizde {{PLURAL:$1|1|$1}} saife bar.',
'wlheader-enotif' => '* E-mail ile haber berüv açıldı.',
'wlheader-showupdated' => "* Soñki ziyaretiñizden soñ deñiştirilgen saifeler '''qalın ariflernen''' kösterildi.",
-'watchmethod-recent' => 'soñki deñişmeler arasında közetken saifeleriñiz qıdırıla',
+'watchmethod-recent' => 'soñki deñiştirmeler arasında közetken saifeleriñiz qıdırıla',
'watchmethod-list' => 'közetüv cedvelindeki saifeler teşkerile',
'watchlistcontains' => 'Siziñ közetüv cedveliñizde {{PLURAL:$1|1|$1}} saife bar.',
'iteminvalidname' => '"$1" saifesi munasebetinen problema olıp çıqtı, elverişli olmağan isimdir…',
-'wlnote' => "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñişme|'''$1''' deñişme}} kösterile.",
+'wlnote' => "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñiştirme|'''$1''' deñiştirme}} kösterile.",
'wlshowlast' => 'Soñki $1 saat içün, $2 kün içün ya da $3 köster',
'watchlist-options' => 'Közetüv cedveli sazlamaları',
'enotif_mailer' => '{{SITENAME}} poçta vastasınen haber bergen hızmet',
'enotif_reset' => 'Cümle saifelerni baqılğan olaraq işaretle',
'enotif_impersonal_salutation' => '{{SITENAME}} qullanıcısı',
-'enotif_lastvisited' => 'Soñki ziyaretiñizden berli yapılğan deñişmelerni körmek içün $1 baqıñız.',
+'enotif_lastvisited' => 'Soñki ziyaretiñizden berli yapılğan deñiştirmelerni körmek içün $1 baqıñız.',
'enotif_anon_editor' => 'adsız (anonim) qullanıcı $1',
'enotif_body' => 'Sayğılı $WATCHINGUSERNAME,
+$PAGEINTRO $NEWPAGE
-{{SITENAME}} saytındaki $PAGETITLE saifesi $PAGEEDITDATE künü $PAGEEDITOR tarafından $CHANGEDORCREATED. Saifeniñ şimdiki alını $PAGETITLE_URL adresinde körip olasıñız.
-
-$NEWPAGE
-
-Deñişmeniñ qısqa tarifi: $PAGESUMMARY $PAGEMINOREDIT
+Deñiştirmeniñ qısqa tarifi: $PAGESUMMARY $PAGEMINOREDIT
Saifeni deñiştirgen qullanıcınen bağlanmaq içün:
e-mail adresi: $PAGEEDITOR_EMAIL
Bu saifeni ziyaret etmeseñiz, birev onı bir daa deñiştirse de, iç bir tenbi beyanatı yollanmaycaq. Közetüv cedveliñizdeki bütün saifeler içün tenbi sazlamalarını deñiştire bilesiñiz.
-{{SITENAME}} tenbi sisteması.
+{{SITENAME}} bildirüv sisteması
--
+
Bildirüv sazlamalarını deñiştirmek içün:
{{canonicalurl:{{#special:Preferences}}}}
'deletereasonotherlist' => 'Diger sebep',
# Rollback
-'rollback' => 'Deñişmelerni keri al',
+'rollback' => 'Deñiştirmelerni keri al',
'rollback_short' => 'keri al',
'rollbacklink' => 'eski alına ketir',
'rollbackfailed' => 'keri aluv muvafaqiyetsiz',
-'cantrollback' => 'Deñişmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir',
+'cantrollback' => 'Deñiştirmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir',
'editcomment' => "Deñiştirme izaatı: \"''\$1''\" edi.",
-'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan deñişmeler keri alınıp, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri ketirildi.',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan deñiştirmeler keri alınıp, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri ketirildi.',
# Protect
'protectlogpage' => 'Qorçalav jurnalı',
-'protectlogtext' => 'Aşağıdaki, saifeni qorçalavğa aluv/çıqaruv ile bağlı deñişmeler jurnalıdır.
+'protectlogtext' => 'Aşağıdaki, saifeni qorçalavğa aluv/qorçalavdan çıqaruv ile bağlı deñişmeler jurnalıdır.
Qorçalanğan saifeler [[Special:ProtectedPages|tam cedvelini]] de köre bilesiñiz.',
'protectedarticle' => '"[[$1]]" qorçalav altına alındı',
'modifiedarticleprotection' => '"[[$1]]" içün qorçalav seviyesi deñiştirildi',
'contributions-title' => '$1 qullanıcısınıñ isseleri',
'mycontris' => 'İsselerim',
'contribsub2' => '$1 ($2)',
-'nocontribs' => 'Bu kriteriylerge uyğan deñişme tapılamadı',
+'nocontribs' => 'Bu kriteriylerge uyğan deñiştirme tapılamadı',
'uctop' => '(soñki)',
'month' => 'Bu ay (ve ondan erte):',
'year' => 'Bu sene (ve ondan erte):',
# Move page
'move-page' => '$1 saifesiniñ adını deñiştireyatasız',
'move-page-legend' => 'Saifeniñ adını deñiştirüv',
-'movepagetext' => "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñişmeler jurnalı da yañı adğa avuştırılır.
-Eski ad yañı adğa yollama olur. Eski serlevağa yollama saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yollama saifelerini özüñiz tüzetmege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.
+'movepagetext' => "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñiştirmeler jurnalı da yañı adğa avuştırılır.
+Eski adı yañı adına yollama olur. Eski serlevağa yollama saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yollama saifelerini özüñiz tüzetmege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.
-Yañı adda bir saife endi bar olsa, ad deñişmesi '''yapılmaycaq''', ancaq bar olğan saife yollama ya da boş olsa ad deñişmesi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.
+Yañı adda bir saife endi bar olsa, ad deñiştirilüvi '''yapılmaycaq''', ancaq bar olğan saife yollama ya da boş olsa ad deñiştirilüvi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.
'''TENBİ!'''
-Ad deñiştirilüvi populâr saifeler içün büyük deñişmelerge sebep ola bilir. Lütfen, deñişme yapmazdan evel ola bileceklerni köz ögüne alıñız.",
+Ad deñiştirilüvi populâr saifeler içün büyük ve beklenmegen deñişmelerge sebep ola bilir. Lütfen, deñiştirme yapmazdan evel ola bileceklerni köz ögüne alıñız.",
'movepagetalktext' => "Qoşulğan muzakere saifesiniñ de (bar olsa) adı avtomatik tarzda deñiştirilecek. '''Müstesnalar:'''
*Aynı bu isimde boş olmağan bir muzakere saifesi endi bar;
'movepage-page-exists' => '$1 saifesi endi bar, ve avtomatik olaraq yañıdan yazılıp olamaz.',
'movepage-page-moved' => '$1 saifesiniñ adı $2 olaraq deñiştirildi.',
'movepage-page-unmoved' => '$1 saifesiniñ adı $2 olaraq deñiştirilip olamay.',
-'movelogpage' => 'Ad deñişmeleri jurnalı',
+'movelogpage' => 'Ad deñiştirilmeleri jurnalı',
'movelogpagetext' => 'Aşağıda bulunğan cedvel adı deñiştirilgen saifelerni köstere',
'movesubpage' => '{{PLURAL:$1|Alt saife|Alt saifeler}}',
'movesubpagetext' => 'Bu saifeniñ aşağıda kösterilgen $1 {{PLURAL:$1|alt saifesi|alt saifesi}} bar.',
'tooltip-n-mainpage-description' => 'Baş saifege bar',
'tooltip-n-portal' => 'Leyha üzerine, ne qaydadır, neni yapıp olasıñız',
'tooltip-n-currentevents' => 'Ağımdaki vaqialarnen bağlı soñki malümat',
-'tooltip-n-recentchanges' => 'Vikide yapılğan soñki deñişmelerniñ cedveli.',
+'tooltip-n-recentchanges' => 'Vikide yapılğan soñki deñiştirmelerniñ cedveli.',
'tooltip-n-randompage' => 'Tesadüfiy bir saifeni kösterüv',
'tooltip-n-help' => 'Yardım bölügi',
'tooltip-t-whatlinkshere' => 'Bu saifege bağlantı bergen diger viki saifeleriniñ cedveli',
-'tooltip-t-recentchangeslinked' => 'Bu saifege bağlantı bergen saifelerdeki soñki deñişmeler',
+'tooltip-t-recentchangeslinked' => 'Bu saifege bağlantı bergen saifelerdeki soñki deñiştirmeler',
'tooltip-feed-rss' => 'Bu saife içün RSS translâtsiyası',
'tooltip-feed-atom' => 'Bu saife içün atom translâtsiyası',
'tooltip-t-contributions' => 'Qullanıcınıñ isse cedveline baquv',
'tooltip-ca-nstab-main' => 'Saifeni köster',
'tooltip-ca-nstab-user' => 'Qullanıcı saifesini köster',
'tooltip-ca-nstab-media' => 'Media saifesini köster',
-'tooltip-ca-nstab-special' => 'Bu, mahsus saife olğanı içün deñişme yapamazsıñız.',
+'tooltip-ca-nstab-special' => 'Bu, mahsus saife olğanı içün deñiştirme yapamazsıñız.',
'tooltip-ca-nstab-project' => 'Leyha saifesini köster',
'tooltip-ca-nstab-image' => 'Resim saifesini köster',
'tooltip-ca-nstab-mediawiki' => 'Sistema beyanatını köster',
'tooltip-ca-nstab-template' => 'Şablonnı köster',
'tooltip-ca-nstab-help' => 'Yardım saifesini köster',
'tooltip-ca-nstab-category' => 'Kategoriya saifesini köster',
-'tooltip-minoredit' => 'Bu, kiçik bir deñişmedir dep belgile',
-'tooltip-save' => 'Yapqan deñişmeleriñizni saqla',
-'tooltip-preview' => 'Baqıp çıquv. Saqlamazdan evel bu hususiyetni qullanıp yapqan deñişmeleriñizni baqıp çıqıñız!',
+'tooltip-minoredit' => 'Bu, kiçik bir deñiştirmedir dep belgile',
+'tooltip-save' => 'Yapqan deñiştirmeleriñizni saqlay',
+'tooltip-preview' => 'Baqıp çıquv. Saqlamazdan evel bu funktsiyanı qullanıp yapqan deñiştirmeleriñizni baqıp çıqıñız!',
'tooltip-diff' => 'Metinge siz yapqan deñişikliklerni kösterir.',
'tooltip-compareselectedversions' => 'Saylanğan eki versiya arasındaki farqlarnı köster.',
'tooltip-watch' => 'Saifeni közetüv cedveline kirset',
'monthsall' => 'Episi',
'limitall' => 'bütüni',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-mail adresini tasdıqla',
'confirmemail_noemail' => '[[Special:Preferences|Qullanıcı sazlamalarıñızda]] dоğru bir e-mail adresiñiz yoq.',
'confirmemail_text' => '{{SITENAME}} saytınıñ e-mail funktsiyalarını qullanmazdan evel e-mail adresiñizniñ tasdıqlanması kerek. Adresiñizge tasdıq e-mail mektübini yollamaq içün aşağıdaki dögmeni basıñız. Yollanacaq beyanatta adresiñizni tasdıqlamaq içün brauzeriñiznen irişip olacaq, tasdıq kodu olğan bir bağlantı olacaq.',
'watchlisttools-edit' => 'Közetüv cedvelini kör ve deñiştir',
'watchlisttools-raw' => 'Közetüv cedvelini adiy metin olaraq deñiştir',
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|muzakere]])',
+
# Special:Version
'version' => 'Versiya',
'blocked-mailpassword' => 'Vaší IP adrese byla zablokována možnost editace, a současně s tím je zablokována funkce pro zaslání nového hesla.',
'eauthentsent' => 'Potvrzovací e-mail byl zaslán na zadanou adresu.
Před tím, než vám na tuto adresu budou moci být zasílány další zprávy, následujte instrukce v e-mailu, abyste potvrdili, že tato adresa skutečně patří vám.',
-'throttled-mailpassword' => 'Heslo již bylo jednou zasláno během uplynulých $1 hodin.
-Heslo může být zasláno jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.',
+'throttled-mailpassword' => 'Během {{PLURAL:$1|poslední hodiny|posledních $1 hodin}} již bylo heslo jednou zasláno.
+Kvůli prevenci zneužívání lze heslo zaslat jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.',
'mailerror' => 'Chyba při zasílání e-mailu: $1',
'acct_creation_throttle_hit' => 'Uživatelé přicházející z vaší IP adresy už dnes vytvořili $1 {{PLURAL:$1|účet|účty|účtů}}, což je dovolené maximum. Proto v tuto chvíli není dovoleno z této IP adresy další účty zakládat.',
'emailauthenticated' => 'Vaše e-mailová adresa byla ověřena dne $2 v $3.',
Stránka je považována za rozcestník, pokud používá některou ze šablon odkazovaných na [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Stránky s vlastností',
+'pageswithprop-legend' => 'Stránky s vlastností',
'pageswithprop-text' => 'Tato stránka obsahuje seznam stránek, které používají zadanou vlastnost stránky.',
'pageswithprop-prop' => 'Název vlastnosti:',
+'pageswithprop-submit' => 'Provést',
'doubleredirects' => 'Dvojitá přesměrování',
'doubleredirectstext' => 'Na této stránce je seznam přesměrování vedoucích na další přesměrování.
'duration-centuries' => '$1 {{PLURAL:$1|století}}',
'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
-# Unknown messages
-'pageswithprop-legend' => 'Stránky s vlastností',
-'pageswithprop-submit' => 'Provést',
+# Image rotation
+'rotate-comment' => 'Obrázek otočen o $1 {{PLURAL:$1|stupeň|stupně|stupňů}} po směru hodinových ručiček',
+
);
# Special:ListUsers
'listusers-submit' => 'виждь',
-# E-mail user
+# Email user
'emailuser' => 'посъли єпїстолѫ',
# Watchlist
'loginlanguagelabel' => 'Iaith: $1',
'suspicious-userlogout' => 'Gwrthodwyd eich cais i allgofnodi oherwydd ei fod yn ymddangos mai gweinydd wedi torri neu ddirprwy gelc a anfonodd y cais.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP',
'user-mail-no-addy' => 'Wedi ceisio anfon e-bost heb gyfeiriad e-bost',
'user-mail-no-body' => 'Ceisiwyd anfon e-bost gwag neu e-bost oedd a thestun rhy bwt iddo.',
'prefs-displaywatchlist' => 'Dewisiadau arddangos',
'prefs-diffs' => "Cymharu golygiadau ('gwahan')",
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Y cyfeiriad e-bost yn ymddangos yn un dilys',
'email-address-validity-invalid' => 'Rhowch gyfeiriad e-bost dilys',
'disambiguations-text' => "Mae'r tudalennau canlynol yn cynnwys un neu ragor o gysylltau, sydd yn arwain at '''dudalennau gwahaniaethu'''. Hwyrach y byddai'n hwylusach petai'r cyswllt yn arwain yn syth at y dudalen briodol.<br />
Diffinir tudalen yn dudalen gwahaniaethu pan mae'n cynnwys un o'r nodiadau '[[MediaWiki:Disambiguationspage|tudalen gwahaniaethu]]'.",
+'pageswithprop' => 'Tudalennau a chanddynt nodwedd arbennig',
+'pageswithprop-legend' => 'Tudalennau a chanddynt nodwedd arbennig',
+'pageswithprop-text' => "Mae'r dudalen hon yn rhestru tudalennau sydd yn defnyddio nodwedd arbennig yn y dudalen.",
+'pageswithprop-prop' => "Enw'r nodwedd:",
+'pageswithprop-submit' => 'Gwneler',
+
'doubleredirects' => 'Ailgyfeiriadau dwbl',
'doubleredirectstext' => "Mae pob rhes yn cynnwys cysylltiad i'r ddau ail-gyfeiriad cyntaf, ynghyd â chyrchfan yr ail ailgyfeiriad. Fel arfer bydd hyn yn rhoi'r gwir dudalen y dylai'r tudalennau cynt gyfeirio ati.
Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
'listgrouprights-addgroup-self-all' => "Yn gallu ychwanegu'r holl grwpiau at eich cyfrif eich hunan",
'listgrouprights-removegroup-self-all' => "Yn gallu tynnu'r holl grwpiau oddi ar eich cyfrif eich hunan",
-# E-mail user
+# Email user
'mailnologin' => "Does dim cyfeiriad i'w anfon iddo",
'mailnologintext' => 'Rhaid eich bod wedi [[Special:UserLogin|mewngofnodi]]
a bod cyfeiriad e-bost dilys yn eich [[Special:Preferences|dewisiadau]]
'monthsall' => 'pob mis',
'limitall' => 'oll',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => "Cadarnhau'r cyfeiriad e-bost",
'confirmemail_noemail' => 'Does dim cyfeiriad e-bost dilys wedi ei osod yn eich [[Special:Preferences|dewisiadau defnyddiwr]].',
'confirmemail_text' => "Cyn i chi allu defnyddio'r nodweddion e-bost, mae'n rhaid i {{SITENAME}} ddilysu'ch cyfeiriad e-bost. Pwyswch y botwm isod er mwyn anfon côd cadarnhau i'ch cyfeiriad e-bost. Bydd yr e-bost yn cynnwys cyswllt gyda chôd ynddi; llwythwch y cyswllt ar eich porwr er mwyn cadarnhau dilysrwydd eich cyfeiriad e-bost.",
'duration-centuries' => '$1 {{PLURAL:$1|canmlwydd|ganmlwydd|ganmlwydd|canmlwydd|chanmlwydd|canmlwydd}}',
'duration-millennia' => '$1 {{PLURAL:$1|milflwydd|filflwydd|filflwydd|milflwydd|milflwydd|milflwydd}}',
+# Image rotation
+'rotate-comment' => "Trowyd y llun $1 {{PLURAL:$1|gradd|radd|radd|gradd}} gyda'r cloc",
+
);
* @author Sarrus
* @author Sir48
* @author Slomox
+ * @author Steenth
* @author Svip
* @author Søren Løvborg
* @author Tjernobyl
'loginlanguagelabel' => 'Sprog: $1',
'suspicious-userlogout' => 'Din anmodning om at logge ud blev nægtet, fordi det ser ud som den blev sendt af en ødelagt browser eller caching proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "Ukendt fejl i PHP's mail()-funtion",
'user-mail-no-addy' => 'Forsøgte at sende email uden en email-adresse',
'user-mail-no-body' => 'Forsøgte at sende en e-mail med tomt eller urimeligt kort indhold.',
'prefs-info' => 'Grundlæggende information',
'prefs-i18n' => 'Internationalisering:',
'prefs-signature' => 'Signatur',
-'prefs-dateformat' => 'Dataformat',
+'prefs-dateformat' => 'Formatering af datoer',
'prefs-timeoffset' => 'Tidsforskel',
'prefs-advancedediting' => 'Avancerede indstillinger',
'prefs-advancedrc' => 'Avancerede indstillinger',
'prefs-displaywatchlist' => 'Visningsmuligheder',
'prefs-diffs' => 'Forskelle',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mailadressen ser ud til at være gyldig',
'email-address-validity-invalid' => 'Indtast en gyldig e-mail adresse',
De bør henvise direkte til et mere passende emne i stedet.<br />
En side behandles som en side med en flertydig titel hvis den bruger en skabelon som der er henvist til fra [[MediaWiki:Disambiguationspage]].",
+'pageswithprop' => 'Sider med en sideegenskab',
+'pageswithprop-legend' => 'Sider med en sideegenskab',
+'pageswithprop-text' => 'Denne side viser en liste over sider, der bruger en bestemt sideegenskaben.',
+'pageswithprop-prop' => 'Egenskabsnavn:',
+'pageswithprop-submit' => 'Gå',
+
'doubleredirects' => 'Dobbelte omdirigeringer',
'doubleredirectstext' => 'Dette er en liste over sider som omdirigerer til andre omdirigeringssider.
Hver linje indeholder henvisninger til den første og den anden omdirigering, såvel som til målet for den anden omdirigering som sædvanligvis er den "rigtige" målside som den første omdirigering burde henvise til.
'listgrouprights-addgroup-self-all' => 'Kan tilføje alle grupper til egen konto',
'listgrouprights-removegroup-self-all' => 'Kan fjerne alle grupper fra egen konto',
-# E-mail user
+# Email user
'mailnologin' => 'Du er ikke logget på',
'mailnologintext' => 'Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.',
'emailuser' => 'E-mail til denne bruger',
'monthsall' => 'alle',
'limitall' => 'alle',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Bekræft e-mail-adressen',
'confirmemail_noemail' => 'Du har ikke angivet en gyldig e-mail-adresse i din [[Special:Preferences|brugerprofil]].',
'confirmemail_text' => '{{SITENAME}} kræver, at du bekræfter en e-mail-adresse (autentificering), før du kan bruge de udvidede e-mail-funktioner. Med et klik på kontrolfeltet forneden sendes en e-mail til dig. Denne e-mail indeholder et link med en bekræftelseskode. Med et klik på dette link bekræftes, at e-mail-adressen er gyldig.',
'duration-centuries' => '$1 {{PLURAL:$1|århundrede|århundreder}}',
'duration-millennia' => '$1 {{PLURAL:$1|årtusind|årtusinder}}',
+# Image rotation
+'rotate-comment' => 'Billedet roteres med $1 {{PLURAL:$1| grad|grader}} med uret',
+
);
* @author Rillke
* @author SVG
* @author Saibo
+ * @author Sebastian Wallroth
* @author Spacebirdy
* @author Srhat
* @author TMg
'tog-hidepatrolled' => 'Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden',
'tog-newpageshidepatrolled' => 'Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden',
'tog-extendwatchlist' => 'Erweiterte Beobachtungsliste zur Anzeige aller Änderungen',
-'tog-usenewrc' => 'Seitenbezogene Gruppierung in den „Letzten Änderungen“ und auf der Beobachtungsliste (benötigt JavaScript)',
+'tog-usenewrc' => 'Änderungen auf „Letzte Änderungen“ und Beobachtungsliste nach Seite gruppieren (benötigt JavaScript)',
'tog-numberheadings' => 'Überschriften automatisch nummerieren',
'tog-showtoolbar' => 'Bearbeiten-Werkzeugleiste anzeigen (benötigt JavaScript)',
'tog-editondblclick' => 'Seiten mit Doppelklick bearbeiten (benötigt JavaScript)',
'nosuchaction' => 'Diese Aktion gibt es nicht',
'nosuchactiontext' => 'Die in der URL angegebene Aktion wird von MediaWiki nicht unterstützt.
Es kann ein Schreibfehler in der URL vorliegen oder es wurde ein fehlerhafter Link angeklickt.
-Es kann sich auch um einen Programmierfehler in der Software, die auf {{SITENAME}} benutzt wird, handeln.',
+Es kann sich auch um einen Programmierfehler in der Software, die von {{SITENAME}} benutzt wird, handeln.',
'nosuchspecialpage' => 'Spezialseite nicht vorhanden',
'nospecialpagetext' => '<strong>Die aufgerufene Spezialseite ist nicht vorhanden.</strong>
'eauthentsent' => 'Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.
Bevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise in der Bestätigungs-E-Mail.',
-'throttled-mailpassword' => 'Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits ein neues Passwort angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} ein neues Passwort angefordert werden.',
+'throttled-mailpassword' => 'Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits eine Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} eine Passwortzurücksetzungs-E-Mail angefordert werden.',
'mailerror' => 'Fehler beim Senden der E-Mail: $1',
'acct_creation_throttle_hit' => 'Besucher dieses Wikis, die deine IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.
# Special:PasswordReset
'passwordreset' => 'Passwort zurücksetzen',
-'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um per E-Mail eine Erinnerung zu den Anmeldeinformationen deines Benutzerkontos zu erhalten.',
+'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um dein Passwort zurückzusetzen.',
'passwordreset-legend' => 'Passwort zurücksetzen',
'passwordreset-disabled' => 'Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.',
'passwordreset-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein.}}',
'passwordreset-capture-help' => 'Sofern Du dieses Kästchen ankreuzt, wird die E-Mail-Nachricht mit dem temporären Passwort, sowohl dir angezeigt, als auch dem Benutzer zugesandt.',
'passwordreset-email' => 'E-Mail-Adresse:',
'passwordreset-emailtitle' => 'Benutzerkontoinformationen auf {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Erinnerung an deine Benutzerkonteninformationen für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
+'passwordreset-emailtext-ip' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines
+Passworts für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}
+mit dieser E-Mail-Adresse verknüpft:
$2
{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.
-Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.',
-'passwordreset-emailtext-user' => 'Benutzer $1 auf {{SITENAME}} hat eine Erinnerung an deine Benutzerkonteninformationen für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
+Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese
+Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger
+ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes
+Passwort benutzen.',
+'passwordreset-emailtext-user' => 'Benutzer $1 auf {{SITENAME}} hat eine Zurücksetzung deines Passworts für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
$2
{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes Passwort benutzen.',
'passwordreset-emailelement' => 'Benutzername: $1
Temporäres Passwort: $2',
-'passwordreset-emailsent' => 'Eine Erinnerung wurde per E-Mail versandt.',
-'passwordreset-emailsent-capture' => 'Die unten angezeigte Erinnerungs-E-Mail wurde abgeschickt.',
-'passwordreset-emailerror-capture' => 'Die unten angezeigte Erinnerungs-E-Mail wurde generiert, allerdings ist der Versand an den Benutzer gescheitert: $1',
+'passwordreset-emailsent' => 'Eine Passwortzurücksetzungs-E-Mail wurde versandt.',
+'passwordreset-emailsent-capture' => 'Eine Passwortzurücksetzungs-E-Mail wurde versandt, die unten angezeigt wird.',
+'passwordreset-emailerror-capture' => 'Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an den Benutzer gescheitert: $1',
# Special:ChangeEmail
'changeemail' => 'E-Mail-Adresse ändern',
Eine Seite gilt als Begriffsklärungsseite, wenn sie mindestens eine der auf der Seite [[MediaWiki:Disambiguationspage|Disambiguationspage]] aufgeführten Vorlagen enthält.",
'pageswithprop' => 'Seiten mit einer Seiteneigenschaft',
+'pageswithprop-legend' => 'Seiten mit einer Seiteneigenschaft',
'pageswithprop-text' => 'Diese Spezialseite listet Seiten auf, die eine bestimmte Seiteneigenschaft verwenden.',
'pageswithprop-prop' => 'Eigenschaftsname:',
+'pageswithprop-submit' => 'Los',
'doubleredirects' => 'Doppelte Weiterleitungen',
'doubleredirectstext' => 'Diese Liste enthält Weiterleitungen, die auf Weiterleitungen verlinken.
'sqlite-no-fts' => 'Version $1 ohne Unterstützung für die Volltextsuche',
# New logging system
-'logentry-delete-delete' => '$1 löschte Seite $3',
-'logentry-delete-restore' => '$1 stellte Seite $3 wieder her',
-'logentry-delete-event' => '$1 änderte die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
-'logentry-delete-revision' => '$1 änderte die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
-'logentry-delete-event-legacy' => '$1 änderte die Sichtbarkeit von Logbucheinträgen auf $3',
-'logentry-delete-revision-legacy' => '$1 änderte die Sichtbarkeit von Versionen der Seite $3',
-'logentry-suppress-delete' => '$1 unterdrückte Seite $3',
-'logentry-suppress-event' => '$1 änderte diskret die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
-'logentry-suppress-revision' => '$1 änderte diskret die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
-'logentry-suppress-event-legacy' => '$1 änderte diskret die Sichtbarkeit von Logbucheinträgen auf $3',
-'logentry-suppress-revision-legacy' => '$1 änderte diskret die Sichtbarkeit von Versionen der Seite $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|löschte}} Seite $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|stellte}} Seite $3 wieder her',
+'logentry-delete-event' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit von Logbucheinträgen auf $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|änderte}} die Sichtbarkeit von Versionen der Seite $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|unterdrückte}} Seite $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit von Logbucheinträgen auf $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|änderte}} diskret die Sichtbarkeit von Versionen der Seite $3',
'revdelete-content-hid' => 'Inhalt versteckt',
'revdelete-summary-hid' => 'Zusammenfassung versteckt',
'revdelete-uname-hid' => 'Benutzername versteckt',
'revdelete-uname-unhid' => 'Benutzername freigegeben',
'revdelete-restricted' => 'Einschränkungen gelten auch für Administratoren',
'revdelete-unrestricted' => 'Einschränkungen für Administratoren aufgehoben',
-'logentry-move-move' => '$1 verschob Seite $3 nach $4',
-'logentry-move-move-noredirect' => '$1 verschob Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen',
-'logentry-move-move_redir' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung',
-'logentry-move-move_redir-noredirect' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung ohne selbst eine Weiterleitung anzulegen',
-'logentry-patrol-patrol' => '$1 markierte Version $4 von Seite $3 als kontrolliert',
-'logentry-patrol-patrol-auto' => '$1 markierte automatisch Version $4 von Seite $3 als kontrolliert',
-'logentry-newusers-newusers' => 'Benutzerkonto $1 wurde erstellt',
-'logentry-newusers-create' => 'Benutzerkonto $1 wurde erstellt',
-'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 erstellt',
-'logentry-newusers-byemail' => 'Das Benutzerkonto $3 wurde von $1 erstellt und das Passwort wurde per E-Mail zugesandt',
-'logentry-newusers-autocreate' => 'Benutzerkonto $1 wurde automatisch erstellt',
-'logentry-rights-rights' => '$1 änderte die Gruppenzugehörigkeit für $3 von $4 zu $5',
-'logentry-rights-rights-legacy' => '$1 änderte die Gruppenzugehörigkeit für $3',
-'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 zugeordnet',
+'logentry-move-move' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4 und überschrieb dabei eine Weiterleitung',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|verschob}} Seite $3 nach $4 und überschrieb dabei eine Weiterleitung ohne selbst eine Weiterleitung anzulegen',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|markierte}} Version $4 von Seite $3 als kontrolliert',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|markierte}} automatisch Version $4 von Seite $3 als kontrolliert',
+'logentry-newusers-newusers' => 'Benutzerkonto $1 wurde {{GENDER:$2|erstellt}}',
+'logentry-newusers-create' => 'Benutzerkonto $1 wurde {{GENDER:$2|erstellt}}',
+'logentry-newusers-create2' => 'Benutzerkonto $3 wurde von $1 {{GENDER:$2|erstellt}}',
+'logentry-newusers-byemail' => 'Das Benutzerkonto $3 wurde von $1 {{GENDER:$2|erstellt}} und das Passwort wurde per E-Mail zugesandt',
+'logentry-newusers-autocreate' => 'Benutzerkonto $1 wurde automatisch {{GENDER:$2|erstellt}}',
+'logentry-rights-rights' => '$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3 von $4 zu $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3',
+'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}',
'rightsnone' => '(–)',
# Feedback
'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
-# Unknown messages
-'pageswithprop-legend' => 'Seiten mit einer Seiteneigenschaft',
-'pageswithprop-submit' => 'Los',
+# Image rotation
+'rotate-comment' => 'Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn gedreht',
+
);
'eauthentsent' => 'Wobkšuśenje jo se na e-mailowu adresu wótposłało.
Nježli až wótpósćelo se dalšna e-mail na to wužywarske konto, dejš slědowaś instrukcije w powěsći a tak wobkšuśiś, až konto jo wót wěrnosći twójo.',
-'throttled-mailpassword' => 'W běgu {{PLURAL:$1|slědneje $1 góźiny|slědnjeju $1 góźinowu|slědnych $1 góźinow}} jo se južo raz wó nowe šćitne gronidło pšosyło. Aby se znjewužywanje wobinuło, wótpósćelo se jano jadno šćitne gronidło w běgu {{PLURAL:$1|$1 góźiny|$1 góźinowu|$1 góźinow}}.',
+'throttled-mailpassword' => 'E-mail za anulěrowanje gronidła jo se za {{PLURAL:$1|slědnu góźinu|slědnej $1 góźinje|slědne $1 góźiny|slědnych $1 góźin}} pósłała. Aby znjewužywanjeju zasajźało, se jano jadna e-mail za anulěrowanje gronidła na {{PLURAL:$1|góźinu|$1 góźinje|$1 góźiny|$1 góźin}} pósćelo.',
'mailerror' => 'Zmólka pśi wótpósłanju e-maila: $1',
'acct_creation_throttle_hit' => 'Woglědowarje toś togo wikija, kótarež wužywaju twóju IP-adresu su napórali {{PLURAL:$1|1 konto|$1 konśe|$1 konta|$1 kontow}} slědny źeń. To jo maksimalna dowólona licba za toś tu periodu.
Woglědowarje, kótarež wužywaju toś tu IP-adresu njamógu tuchylu dalšne konta napóraś.',
# Special:PasswordReset
'passwordreset' => 'Gronidło slědk stajiś',
-'passwordreset-text' => 'Wupołni toś ten formular, aby dostał e-mailowe dopomnjeśe k swójim kontowym drobnostkam.',
+'passwordreset-text' => 'Wupołni toś ten formular, aby swójo gronidło anulěrował.',
'passwordreset-legend' => 'Gronidło slědk stajiś',
'passwordreset-disabled' => 'Slědkstajenja gronidłow su se znjemóžnili na toś tom wikiju.',
'passwordreset-pretext' => '{{PLURAL:$1||Zapódaj dołojce jadne ze slědujucych datowych podaśow}}',
'passwordreset-capture-help' => 'Jolic nakśickujoš toś ten kašćik, e-mail (z nachylnym gronidłom) buźo se pokazaś a wužywarjeju słaś.',
'passwordreset-email' => 'E-mailowa adresa:',
'passwordreset-emailtitle' => 'Kontowe drobnostki na {{GRAMMAR:lokatiw|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Něchten (nejskerjej ty, z IP-adresu $1) jo dopomnjeśe na twóje kontowe drobnostki za {{SITENAME}} pominał ($4). {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane|zwězane}}:
+'passwordreset-emailtext-ip' => 'Něchten (nejskerjej ty, z IP-adresu $1) jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4). {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:
$2
-{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
Ty by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.',
-'passwordreset-emailtext-user' => 'Wužywaŕ $1 jo dopomnjeśe na twóje kontowe drobnostki za {{SITENAME}} pominał ($4). {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su|Slědlujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane|zwězane}}:
+'passwordreset-emailtext-user' => 'Wužywaŕ $1 jo anulěrowanje gronidła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} pominał ($4). {{PLURAL:$3|Slědujuce wužywarske konto jo|Slědujucej wužywarskej konśe stej|Slědujuce wužywarske konta su}} z toś tej e-mailoweju adresu {{PLURAL:$3|zwězane|zwězanej|zwězane}}:
$2
-{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Toś to nachylne gronidło spadnjo|Toś tej nachylnej gronidle spadnjotej|Toś te nachylne gronidła spadnu}} za {{PLURAL:$5|jaden źeń|$5 dnja|$5 dny|$5 dnjow}}.
Ty by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten drugi jo toś to napšašowanje pósłał, abo jolic sy se zasej na spócetne gronidło spomnjeł a wěcej njocoš jo změniś, móžoš toś to zdźělenje ignorěrowaś a swójo stare gronidło dalej wužywaś.',
'passwordreset-emailelement' => 'Wužywarske mě: $1
Nachylne gronidło: $2',
-'passwordreset-emailsent' => 'Dopominańska e-mail jo se pósłała.',
-'passwordreset-emailsent-capture' => 'Dopominańska e-mail jo se pósłała, kótaraž se dołojce pokazujo.',
-'passwordreset-emailerror-capture' => 'Dołojce pokazowana e-mail jo se napóriła, ale jo se njeraźiło ju wužiwarjeju pósłaś: $1',
+'passwordreset-emailsent' => 'E-mail za anulěrowanje gronidła jo se pósłała.',
+'passwordreset-emailsent-capture' => 'E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.',
+'passwordreset-emailerror-capture' => 'E-mail za anulěrowanje gronidła jo se generěrowała, kótaraž pokazujo se dołojce, ale jeje słanje wužywarjeju jo se njeraźiło: $1',
# Special:ChangeEmail
'changeemail' => 'E-mailowu adresu změniś',
Maju bok za bok rozjasnjenja zapśimjeśow, gaž wužywa pśedłogu, na kótaruž wótkazujo se wót [[MediaWiki:Disambiguationspage]].',
'pageswithprop' => 'Boki z kakosću boka',
+'pageswithprop-legend' => 'Boki z kakosću boka',
'pageswithprop-text' => 'Toś ten bok nalicyjo boki, kótarež wužywaju wěstu kakosć boka.',
'pageswithprop-prop' => 'Mě kakosći:',
+'pageswithprop-submit' => 'Wótpósłaś',
'doubleredirects' => 'Dwójne dalejpósrědnjenja',
'doubleredirectstext' => 'Toś ten bok nalicujo boki, kótarež dalej pósrědnjaju na druge dalejpósrědnjenja.
'sqlite-no-fts' => 'Wersija $1 bźez pódpěry za połnotekstowe pytanje',
# New logging system
-'logentry-delete-delete' => '$1 jo bok $3 wulašował',
-'logentry-delete-restore' => '$1 jo bok $3 wótnowił',
-'logentry-delete-event' => '$1 jo změnił widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-delete-revision' => '$1 jo změnił widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow|$5 wersijow}} na boku $3: $4',
-'logentry-delete-event-legacy' => '$1 jo změnił widobnosć protokolowych zapiskow na $3',
-'logentry-delete-revision-legacy' => '$1 jo změnił widobnosć wersijow na boku $3',
-'logentry-suppress-delete' => '$1 jo pódtłocył bok $3',
-'logentry-suppress-event' => '$1 jo kšajźu změnił widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-suppress-revision' => '$1 jo kšajźu změnił widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow|$5 wersijow}} na boku $3: $4',
-'logentry-suppress-event-legacy' => '$1 jo kšajźu změnił widobnosć protokolowych zapiskow na $3',
-'logentry-suppress-revision-legacy' => '$1 jo kšajźu změnił widobnosć wersijow na boku $3',
+'logentry-delete-delete' => '$1 jo bok $3 {{GENDER:$2|wulašował|wulašowała}}',
+'logentry-delete-restore' => '$1 jo bok $3 {{GENDER:$2|wótnowił|wótnowiła}}',
+'logentry-delete-event' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow}} na $3: $4',
+'logentry-delete-revision' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow}} na boku $3: $4',
+'logentry-delete-event-legacy' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć protokolowych zapiskow na $3',
+'logentry-delete-revision-legacy' => '$1 jo {{GENDER:$2|změnił|změniła}} widobnosć wersijow na boku $3',
+'logentry-suppress-delete' => '$1 jo {{GENDER:$2|pódtłocył|pódtłocyła}} bok $3',
+'logentry-suppress-event' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|protokolowego zapiska|$5 protokoloweju zapiskowu|$5 protokolowych zapiskow}} na $3: $4',
+'logentry-suppress-revision' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć {{PLURAL:$5|wersije|$5 wersijowu|$5 wersijow}} na boku $3: $4',
+'logentry-suppress-event-legacy' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć protokolowych zapiskow na $3',
+'logentry-suppress-revision-legacy' => '$1 jo kšajźu {{GENDER:$2|změnił|změniła}} widobnosć wersijow na boku $3',
'revdelete-content-hid' => 'wopśimjeśe schowane',
'revdelete-summary-hid' => 'Zespominanje schowane',
'revdelete-uname-hid' => 'wužywarske mě schowane',
'revdelete-uname-unhid' => 'wužywarske mě widobne',
'revdelete-restricted' => 'Wobgranicowanja se teke na administratorow nałožuju',
'revdelete-unrestricted' => 'Wobgranicowanja za administratorow wótpórane',
-'logentry-move-move' => '$1 jo pśesunuł bok $3 do $4',
-'logentry-move-move-noredirect' => '$1 jo pśesunuł bok $3 do $4, mimo až jo napórał dalejpósrědnjenje',
-'logentry-move-move_redir' => '$1 jo pśesunuł bok $3 do $4 a jo pśepisał dalejpósrědnjenje',
-'logentry-move-move_redir-noredirect' => '$1 jo pśesunuł bok $3 do $4 a jo pśepisał dalejpósrědnjenje, mimo až jo napórał dalejpósrědnjenje',
-'logentry-patrol-patrol' => '$1 jo markěrował wersiju $4 boka $3 ako doglědowanu',
-'logentry-patrol-patrol-auto' => '$1 jo awtomatiski markěrował wersiju $4 boka $3 ako doglědowanu',
-'logentry-newusers-newusers' => 'Wužywarske konto $1 jo se załožyło',
-'logentry-newusers-create' => 'Wužywarske konto $1 jo se załožyło',
-'logentry-newusers-create2' => '$1 jo załožył wužywarske konto $3',
-'logentry-newusers-byemail' => 'Wužywarske konto $3 jo se wót $1 załožyło a gronidło jo se pśez e-mail pósłało.',
-'logentry-newusers-autocreate' => 'Konto $1 jo se awtomatiski załožyło',
-'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 změnił',
-'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 změnił',
-'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 pówušył',
+'logentry-move-move' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4',
+'logentry-move-move-noredirect' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4, mimo až jo {{GENDER:$2|napórał|napórała}} dalejpósrědnjenje',
+'logentry-move-move_redir' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4 a jo {{GENDER:$2|pśepisał|pśepisała}} dalejpósrědnjenje',
+'logentry-move-move_redir-noredirect' => '$1 jo {{GENDER:$2|pśesunuł|pśesunuła}} bok $3 do $4 a jo {{GENDER:$2|pśepisał|pśepisał}} dalejpósrědnjenje, mimo až jo {{GENDER:$2|napórał|napórała}} dalejpósrědnjenje',
+'logentry-patrol-patrol' => '$1 jo {{GENDER:$2|markěrował|markěrował}} wersiju $4 boka $3 ako doglědowanu',
+'logentry-patrol-patrol-auto' => '$1 jo awtomatiski {{GENDER:$2|markěrował|měrkěrowała}} wersiju $4 boka $3 ako doglědowanu',
+'logentry-newusers-newusers' => 'Wužywarske konto $1 jo se {{GENDER:$2|załožyło}}',
+'logentry-newusers-create' => 'Wužywarske konto $1 jo se {{GENDER:$2|załožyło}}',
+'logentry-newusers-create2' => '$1 jo {{GENDER:$2|załožył|załožyła}} wužywarske konto $3',
+'logentry-newusers-byemail' => '$1 jo wužywarske konto $3 {{GENDER:$2|załožył|załožyła}} a gronidło jo se pśez e-mail pósłało',
+'logentry-newusers-autocreate' => 'Wužywarske konto $1 jo se awtomatiski {{GENDER:$2|załožyło}}',
+'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 {{GENDER:$2|pśirědował|pśirědowała}}',
'rightsnone' => '(nic)',
# Feedback
'duration-centuries' => '$1 {{PLURAL:$1|stolěśe|stolěśi|stolěśa|stolěśow}}',
'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysaca|lěttysace|lěttysacow}}',
-# Unknown messages
-'pageswithprop-legend' => 'Boki z kakosću boka',
-'pageswithprop-submit' => 'Wótpósłaś',
+# Image rotation
+'rotate-comment' => 'Wobraz wó $1 {{PLURAL:$1|stopjeń|stopnja|stopnje|stopnjow}} ako špěra źo wobwjertnjony',
+
);
'underline-always' => 'Toririmo',
'underline-never' => 'Kada',
-'underline-default' => 'Pogigihum pongoiso',
+'underline-default' => 'Kourasai pogigihum sandad',
# Font style option in Special:Preferences
'editfont-style' => 'Poyanan mongidit gaya pimato:',
'newwindow' => '(ukabai id liligaon wagu)',
'cancel' => 'Kinsilo',
'moredotdotdot' => 'Gumu...',
-'mypage' => 'Bolikonku',
-'mytalk' => 'Pibabarasanku',
+'morenotlisted' => 'Susuai poh ii awu nokosurat...',
+'mypage' => 'Bolikon',
+'mytalk' => 'Pogibabarasan',
'anontalk' => 'Piboros montok diti nantadon IP',
'navigation' => 'Popotunud',
'and' => ' om',
'vector-action-protect' => 'Tingoligai',
'vector-action-undelete' => 'Kada pugaso',
'vector-action-unprotect' => 'Alanai tingolig',
-'vector-simplesearch-preference' => 'Pasagao pogigihum ponontonudon pinoingkawas (Pongulit tuntuduk nopo)',
+'vector-simplesearch-preference' => 'Pasagao pogigihum bar noinsanangan (Pongulit tuntuduk nopo)',
'vector-view-create' => 'Pomonsoi',
'vector-view-edit' => 'Idito',
'vector-view-history' => 'Intaai susuyan',
'namespaces' => 'Ponuratan ngaran',
'variants' => 'Kopogisuaian',
+'navigation-heading' => 'Pipilion usuyon',
'errorpagetitle' => 'Nosilopan',
'returnto' => 'Gumuli hilo $1.',
'tagline' => 'Mantad {{SITENAME}}',
'actionthrottled' => 'Momilos',
'actionthrottledtext' => 'Pinapanau lumawan-singkarap, Nantaban ko do mingguli momonsoi miagal dilo id timpu do osikap, om nagampot nu noh gisom diti.
Umbalan kawagu do katalib poh pipiro minit.',
-'protectedpagetext' => 'Bolikon diti notingoligan tu mangantob do pingiditan.',
+'protectedpagetext' => 'Bolikon diti notingoligan tu mangantob do pinsimbanan toi pingkukuroyon nopo.',
'viewsourcetext' => 'Pasagaon ko do mongintong om mangadalin wowonod diti bolikon:',
'viewyourtext' => "Milo nu do intangan om solinon ot wowonod '''niditannu''' id bolikon diti:",
'protectedinterface' => 'Bolikon diti kiharo sinuratan pongurasan montok posusuang-suangon, om notingoligan do momiara mantad pomirumbakan.
Milo ko do monilombus mongoguno {{SITENAME}} poinlisok, toi <span class='plainlinks'>[$1 sumuang log koh kawagu]</span> miagal ngaran di tiinu toi mongoguno ngaran suai.
Birio do kipipiro bolikon popokito do maso poinsuang log koh poh gisom no do opugas nu dangkob do pogigihumnu.",
+'welcomeuser' => 'Kotobian dongkorikatan, $1!',
+'welcomecreation-msg' => 'Nowonsoi noh akaunnu.
+Soroho noh do mongolon do [[Special:Preferences|{{SITENAME}} komoisaannu]].',
'yourname' => 'Ngarandait:',
'yourpassword' => 'Kaatalib:',
'yourpasswordagain' => 'Mintaipo kaatalib:',
'gotaccount' => 'Kitakaun? $1',
'gotaccountlink' => 'Sumuang log',
'userlogin-resetlink' => 'Nolihuan ahal loginnu?',
-'createaccountmail' => 'Maya surat-i',
+'createaccountmail' => 'Gunoo nunu nopo kaatalib om pootodo id surat-i ii poinsurat id siriba diti',
'createaccountreason' => 'Sabab:',
'badretype' => 'Kaatalib pinosuang awu kopisangai.',
'userexists' => 'Ngaranmoguno pinosuang noguno no.
'loginlanguagelabel' => 'Woyoboros: $1',
'suspicious-userlogout' => 'Awu naramit lumabus lognu tu pinaatod mantad pogigihum norumbak toi caching olon.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Awu nointutunan kinosilapan id don surat PHP () function',
'user-mail-no-addy' => 'Mogumbal do papaatod surat-i tingaa o paatadan.',
+'user-mail-no-body' => 'Minogumbal koh do papaatod surat-i do ingaa suang toi nadalaan koniba.',
# Change password dialog
'resetpass' => 'Alanai kaatalib',
'passwordreset-text' => 'Gonopo poom diti do mangaramit tongosurat-i ponorou do nokomoi id akaun.',
'passwordreset-legend' => 'Pudoliai kawagu kaatalib',
'passwordreset-disabled' => 'Pomudolian kawagu do kaatalib kitaantob id wiki diti.',
+'passwordreset-pretext' => '{{PLURAL:$1||Posuango iso data id siriba}}',
'passwordreset-username' => 'Ngarandait:',
+'passwordreset-domain' => 'Sumanganu:',
+'passwordreset-capture' => 'Intaai surat-i dii nowonsoi?',
+'passwordreset-capture-help' => 'Nung goritannu id kutak diti, surat-i (ii ki-kaa-talib daamot) mangan pokitanai montok dia om nogi porikoton montok momomoguno diti.',
+'passwordreset-email' => 'Porikatan surat-i:',
'passwordreset-emailtitle' => 'Kointalangan takaun id {{SITENAME}}',
'passwordreset-emailelement' => 'Ngaranmoguno: $1
Kaatalib daamot: $2',
'note' => "'''Pasoniba:'''",
'previewnote' => "'''Soroho no do iti nopo nga kopongintangan toomod.'''
Awu po moti nokogompi iri nopingalanannu!",
-'continue-editing' => 'Potilombuso do mongidit.',
+'continue-editing' => 'Ongoi doid pongiditan.',
'previewconflict' => 'Miagal no diti pongitanan do tik id boogian kawas kutak pongiditan tik nung pilionnu do popogompi.',
'session_fail_preview' => "'''Siou! Awu di dahai opongoh niditannu gisom no do natagakan data.'''
Mangai umbalai kawagu.
'nextn-title' => 'Sumusuhut $1 {{PLURAL:$1|kootuson|tongokootuson}}',
'shown-title' => 'Pokitono $1 {{PLURAL:$1|kootuson|tongokootuson}} monikid bolikon',
'viewprevnext' => 'Intaai ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'Pilion ihum-ihumon',
'searchmenu-exists' => "'''Haro no bolikon pinungaranan do \"[[:\$1]]\" hiti id wiki.'''",
'searchmenu-new' => "'''Pomonsoi do bolikon \"[[:\$1]]\"hiti id wiki!'''",
'searchhelp-url' => 'Help:Susuang',
# Preferences page
'preferences' => 'Pipilion',
-'mypreferences' => 'Komoisoonku',
+'mypreferences' => 'Pipilion',
'prefs-edits' => 'Ginumu niditan:',
'prefsnologin' => 'Amu nokolog sumuang',
'changepassword' => 'Alanai kaatalib',
'saveprefs' => 'Pogompio',
'resetprefs' => 'Pugaso nalanan awu nogompi',
'searchresultshead' => 'Ihumo',
+'servertime' => 'Timpu mamamalayan:',
+'guesstimezone' => 'Gunoo pinatantu do lalayagku',
+'timezoneregion-africa' => 'Aprika',
+'timezoneregion-america' => 'Amirika',
+'timezoneregion-antarctica' => 'Antartika',
+'timezoneregion-arctic' => 'Artik',
+'timezoneregion-asia' => 'Asia',
+'timezoneregion-atlantic' => 'Karahatan Atlantik',
+'timezoneregion-australia' => 'Astaralia',
'prefs-searchoptions' => 'Ihumo',
'prefs-namespaces' => 'Ponuratan ngaran',
'youremail' => 'Surat-i:',
'prefs-displaywatchlist' => 'Pomilian pongitanan',
'prefs-diffs' => 'Pisuaian',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Porikatan surat-i asaah',
'email-address-validity-invalid' => 'Posuango porikatan surat-i di asaah',
# Special:ListGroupRights
'listgrouprights-members' => '(lis do kinoruhangan)',
-# E-mail user
+# Email user
'emailuser' => 'Surat-i momomoguno diti',
# Watchlist
'blocked-mailpassword' => 'Η διεύθυνση IP σας είναι αποκλεισμένη από επεξεργασία, και έτσι
δεν επιτρέπεται να χρησιμοποιήσει την λειτουργία ανάκτησης κωδικού πρόσβασης, για την αποφυγή κατάχρησης.',
'eauthentsent' => 'Ένα μήνυμα επαλήθευσης έχει σταλεί στην ηλεκτρονική διεύθυνση που έχετε δηλώσει στο σύστημα. Πριν αρχίσει η αποστολή μηνυμάτων στη συγκεκριμένη διεύθυνση, πρέπει να ακολουθήσετε τις οδηγίες που βρίσκονται στο μήνυμα που σας έχει σταλεί για να επαληθεύσετε ότι η συγκεκριμένη ηλεκτρονική διεύθυνση ανήκει πραγματικά σε εσάς.',
-'throttled-mailpassword' => 'Î\9cια Ï\85Ï\80ενθÏ\8dμιÏ\83η για Ï\84ον κÏ\89δικÏ\8c Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 ÎÏ\87ει ήδη σταλεί, μέσα {{PLURAL:$1|στην τελευταία ώρα|στις τελευταίες $1 ώρες}}.
-Î\93ια Ï\84ην αÏ\80οÏ\86Ï\85γή καÏ\84άÏ\87Ï\81ηÏ\83ηÏ\82, μÏ\8cνο μια Ï\85Ï\80ενθÏ\8dμιÏ\83η για Ï\84ον κÏ\89δικÏ\8c Ï\80Ï\81Ï\8cÏ\83βαÏ\83ηÏ\82 θα στέλνεται ανά {{PLURAL:$1|ώρα|$1 ώρες}}.',
+'throttled-mailpassword' => 'Î\88να email εÏ\80αναÏ\86οÏ\81άÏ\82 κÏ\89δικοÏ\8d ÎÏ\87ει ήδη αÏ\80οσταλεί, μέσα {{PLURAL:$1|στην τελευταία ώρα|στις τελευταίες $1 ώρες}}.
+Î\93ια Ï\84ην αÏ\80οÏ\86Ï\85γή καÏ\84άÏ\87Ï\81ηÏ\83ηÏ\82, μÏ\8cνο Îνα email εÏ\80αναÏ\86οÏ\81άÏ\82 κÏ\89δικοÏ\8d θα στέλνεται ανά {{PLURAL:$1|ώρα|$1 ώρες}}.',
'mailerror' => 'Σφάλμα στην αποστολή του μηνύματος: $1',
'acct_creation_throttle_hit' => 'Επισκέπτες αυτού του wiki με την διεύθυνση IP σας έχουν ήδη δημιουργήσει {{PLURAL:$1|ένα λογαριασμό|$1 λογαριασμούς}}, κατά την τελευταία μία ημέρα, που είναι και ο μέγιστος επιτρεπόμενος αριθμός.
Ως αποτέλεσμα, επισκέπτες αυτού του wiki με αυτήν την διεύθυνση IP δεν μπορούν αυτή την στιγμή να δημιουργήσουν περισσότερους λογαριασμούς.',
'loginlanguagelabel' => 'Γλώσσα: $1',
'suspicious-userlogout' => 'Το αίτημα αποσύνδεσής σας απερρίφθη επειδή φαίνεται ότι στάλθηκε από ένα λανθασμένο φυλλομετρητή (browser) ή διακομιστή προσωρινής αποθήκευσης.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Άγνωστο σφάλμα στη συνάρτηση mail() της PHP.',
'user-mail-no-addy' => 'Προσπαθήσατε να στείλετε e-mail χωρίς μια διεύθυνση e-mail.',
'user-mail-no-body' => 'Προσπάθησε να στείλει e-mail με ένα κενό ή αδικαιολόγητα σύντομο σώμα.',
# Special:PasswordReset
'passwordreset' => 'Κωδικός επαναφοράς',
-'passwordreset-text' => 'ΣÏ\85μÏ\80ληÏ\81Ï\8eÏ\83Ï\84ε αÏ\85Ï\84ή Ï\84η Ï\86Ï\8cÏ\81μα για να λάβεÏ\84ε Îνα e-mail Ï\85Ï\80ενθÏ\8dμιÏ\83η Ï\84οÏ\85 λογαÏ\81ιαÏ\83μοÏ\8d σας.',
+'passwordreset-text' => 'ΣÏ\85μÏ\80ληÏ\81Ï\8eÏ\83Ï\84ε αÏ\85Ï\84ή Ï\84η Ï\86Ï\8cÏ\81μα για να εÏ\80αναÏ\86ÎÏ\81εÏ\84ε Ï\84ον κÏ\89δικÏ\8c σας.',
'passwordreset-legend' => 'Επαναφορά κωδικού πρόσβασης',
'passwordreset-disabled' => 'Η επαναφορά κωδικού πρόσβασης έχει απενεργοποιηθεί σε αυτό το wiki',
'passwordreset-pretext' => '{{PLURAL:$1||Εισάγεται ένα από τα στοιχεία δεδομένων που βλέπετε παρακάτω}}',
'passwordreset-capture-help' => 'Εάν μαρκάρετε αυτό το πλαίσιο, το μήνυμα ηλεκτρονικού ταχυδρομείου (με το προσωρινό κωδικό πρόσβασης) θα εμφανιστεί σε σας καθώς θα αποσταλεί στο χρήστη.',
'passwordreset-email' => 'Διεύθυνση ηλεκτρονικού ταχυδρομείου:',
'passwordreset-emailtitle' => 'Λεπτομέρειες λογαριασμού για {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1 ) ζήτησε μια υπενθύμιση των λεπτομερειών του λογαριασμού σας σε {{SITENAME}} ($4). {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
+'passwordreset-emailtext-ip' => 'Κάποιος (πιθανώς εσείς, από την διεύθυνση IP $1) ζήτησε την επαναφορά του κωδικού σας σε {{SITENAME}} ($4). {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
$2
-{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει| Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5| μία ημέρα| $5 ημέρες}}.
+{{PLURAL:$3|Αυτός ο προσωρινός κωδικός πρόσβασης θα λήξει|Αυτοί οι προσωρινοί κωδικοί πρόσβασης θα λήξουν}} σε {{PLURAL:$5|μία ημέρα|$5 ημέρες}}.
Θα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.',
-'passwordreset-emailtext-user' => 'Ο χρήστης $1 στη {{SITENAME}} ζήτησε μια υπενθύμιση των λεπτομερειών του λογαριασμού σας σε {{SITENAME}} ($4). {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
+'passwordreset-emailtext-user' => 'Ο χρήστης $1 στη {{SITENAME}} ζήτησε μια επαναφορά του κωδικού πρόσβασης σας σε {{SITENAME}} ($4). {{PLURAL:$3|Ο ακόλουθος λογαριασμός|Οι ακόλουθοι λογαριασμοί}} χρήστη συνδέονται με αυτή τη διεύθυνση e-mail:
$2
Θα πρέπει να συνδεθείτε τώρα και να επιλέξετε ένα νέο κωδικό. Αν κάποιος άλλος έκανε αυτό το αίτημα ή αν έχετε θυμηθεί τον αρχικό κωδικό πρόσβασής σας, και δεν επιθυμείτε πια να τον αλλάξετε, μπορείτε να αγνοήσετε αυτό το μήνυμα και να συνεχίσετε να χρησιμοποιείτε τον παλιό σας κωδικό πρόσβασης.',
'passwordreset-emailelement' => 'Όνομα χρήστη: $1
Προσωρινός κωδικός πρόσβασης:$2',
-'passwordreset-emailsent' => 'Έχει αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για υπενθύμιση.',
-'passwordreset-emailsent-capture' => 'Έχει αποσταλεί μήνυμα ηλεκτρονικού ταχυδρομείου για υπενθύμιση, το οποίο φαίνεται πιο κάτω.',
-'passwordreset-emailerror-capture' => 'Ένα μήνυμα υπενθύμισης ηλεκτρονικού ταχυδρομείου έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο χρήστη: $1',
+'passwordreset-emailsent' => 'Έχει αποσταλεί email επαναφοράς κωδικού.',
+'passwordreset-emailsent-capture' => 'Έχει αποσταλεί email επαναφοράς κωδικού, το οποίο φαίνεται πιο κάτω.',
+'passwordreset-emailerror-capture' => 'Ένα email επαναφοράς κωδικού έχει δημιουργηθεί, το οποίο φαίνεται πιο κάτω, αλλά απέτυχε η αποστολή του στο χρήστη: $1',
# Special:ChangeEmail
'changeemail' => 'Αλλαγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου',
'prefs-displaywatchlist' => 'Επιλογές εμφάνισης',
'prefs-diffs' => 'Διαφορές',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου φαίνεται έγκυρη',
'email-address-validity-invalid' => 'Εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου',
'linksearch-ok' => 'Αναζήτηση',
'linksearch-text' => 'Μπορούν να χρησιμοποιηθούν χαρακτήρες μπαλαντέρ όπως "*.wikipedia.org".
Χρειάζεται τουλάχιστον μια κατάληξη ανωτάτου επιπέδου, για παράδειγμα "*.org".<br />
-Υποστηριζόμενα {{PLURAL:$2|πρωτόκολλο|πρωτόκολλα}}: <code>$1</code> (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).',
+{{PLURAL:$2|Υποστηριζόμενο πρωτόκολλο|Υποστηριζόμενα πρωτόκολλα}}: <code>$1</code> (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).',
'linksearch-line' => 'Η $1 συνδεδεμένη από την $2',
'linksearch-error' => 'Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).',
'listgrouprights-addgroup-self-all' => 'Μπορεί να προσθέσει όλες τις ομάδες στο δικό σας λογαριασμό',
'listgrouprights-removegroup-self-all' => 'Μπορεί να αφαιρέσει όλες τις ομάδες από το δικό σας λογαριασμό',
-# E-mail user
+# Email user
'mailnologin' => 'Δεν υπάρχει διεύθυνση παραλήπτη.',
'mailnologintext' => 'Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει
μια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]
'import-interwiki-templates' => 'Συμπερίληψη όλων των προτύπων',
'import-interwiki-submit' => 'Εισαγωγή',
'import-interwiki-namespace' => 'Προορισμός στον ονοματοχώρο:',
+'import-interwiki-rootpage' => 'Σελίδα ρίζα προορισμού (προαιρετικό):',
'import-upload-filename' => 'Όνομα αρχείου:',
'import-comment' => 'Σχόλιο:',
'importtext' => 'Παρακαλούμε εξάγετε το αρχείο από το πηγαίο wiki (χρησιμοποιώντας το [[Special:Export|εργαλείο εξαγωγής]]), αποθηκεύστε το στον υπολογιστή σας και μεταφορτώστε το από εκεί.',
'pageinfo-robot-noindex' => 'Μη καταχωρήσιμο σε ευρετήριο',
'pageinfo-views' => 'Αριθμός προβολών',
'pageinfo-watchers' => 'Αριθμός παρατηρητών σελίδας',
+'pageinfo-few-watchers' => 'Λιγότεροι από $1 {{PLURAL:$1| ακόλουθος|ακόλουθοι}}',
'pageinfo-redirects-name' => 'Ανακατευθύνσεις σε αυτή τη σελίδα',
'pageinfo-redirects-value' => '$1',
'pageinfo-subpages-name' => 'Υποσελίδες αυτής της σελίδας',
'pageinfo-magic-words' => '{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)',
'pageinfo-templates' => 'Ενσωματωμένα {{PLURAL:$1|πρότυπο|πρότυπα}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Η σελίδα ενσωματώνεται|Οι σελίδες ενσωματώνονται}} σε ($1)',
'pageinfo-toolboxlink' => 'Πληροφορίες σελίδας',
'pageinfo-redirectsto' => 'Ανακατευθύνσεις σε',
'pageinfo-redirectsto-info' => 'πληροφορίες',
'markedaspatrollederror' => 'Δεν μπορεί να σημανθεί ως υπό περιπολία',
'markedaspatrollederrortext' => 'Πρέπει να ορίσετε μια αναθεώρηση για να σημανθεί ως υπό περιπολία',
'markedaspatrollederror-noautopatrol' => 'Δεν επιτρέπεται να σημάνετε τις δικές σας αλλάγες ως υπό περιπολία.',
+'markedaspatrollednotify' => 'Αυτή η αλλαγή σε $1 έχει επισημανθεί ως ελεγμένη.',
+'markedaspatrollederrornotify' => 'Σήμανση ως ελεγμένη απέτυχε.',
# Patrol log
'patrol-log-page' => 'Αρχείο καταγραφής περιπολιών',
'monthsall' => 'όλα',
'limitall' => 'όλες',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Επιβεβαίωση διεύθυνσης e-mail',
'confirmemail_noemail' => 'Δεν έχετε ορίσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]] σας.',
'confirmemail_text' => 'Το σύστημα χρειάζεται να επαληθεύσει τη διεύθυνση e-mail που δώσατε για να χρησιμοποιήσετε τις δυνατότητες αλληλογραφίας. Κάνετε κλικ στο παρακάτω κουμπί και θα σας αποσταλεί μήνυμα επαλήθευσης στη διεύθυνσή σας. Στο μήνυμα αυτό θα εμφανίζεται ένας σύνδεσμος που Θα περιέχει τον κωδικό επαλήθευσης -ακολουθήστε το σύνδεσμο αυτό για να μπορέσει το σύστημα να επαληθεύσει τη διεύθυνση αλληλογραφίας σας.',
'logentry-newusers-newusers' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
'logentry-newusers-create' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
'logentry-newusers-create2' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$1|τον|την}} $1',
+'logentry-newusers-byemail' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από τον $1 και ο κωδικός πρόσβασης εστάλη μέσω ηλεκτρονικού ταχυδρομείου',
'logentry-newusers-autocreate' => 'Ο λογαριασμός $1 δημιουργήθηκε αυτόματα',
+'logentry-rights-rights' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας για {{GENDER:$3|τον|την}} $3 από $4 σε $5',
'logentry-rights-rights-legacy' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3',
'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
'rightsnone' => '(κανένα)',
'duration-centuries' => '$1 {{PLURAL:$1|αιώνα|αιώνες}}',
'duration-millennia' => '$1 {{PLURAL:$1|χιλιετία|χιλιετίες}}',
+# Image rotation
+'rotate-comment' => 'Η εικόνα περιστράφηκε $1 {{PLURAL:$1| μοίρα|μοίρες}} δεξιόστροφα',
+
);
'blocked-mailpassword' => 'Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.',
'eauthentsent' => 'A confirmation email has been sent to the nominated email address.
Before any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.',
-'throttled-mailpassword' => 'A password reminder has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.
-To prevent abuse, only one password reminder will be sent per {{PLURAL:$1|hour|$1 hours}}.',
+'throttled-mailpassword' => 'A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.
+To prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.',
'loginstart' => '', # do not translate or duplicate this message to other languages
'loginend' => '', # do not translate or duplicate this message to other languages
'loginend-https' => '', # do not translate or duplicate this message to other languages
# Special:PasswordReset
'passwordreset' => 'Reset password',
-'passwordreset-text' => 'Complete this form to receive an email reminder of your account details.',
+'passwordreset-text' => 'Complete this form to reset your password.',
'passwordreset-legend' => 'Reset password',
'passwordreset-disabled' => 'Password resets have been disabled on this wiki.',
'passwordreset-pretext' => '{{PLURAL:$1||Enter one of the pieces of data below}}',
'passwordreset-capture-help' => 'If you check this box, the email (with the temporary password) will be shown to you as well as being sent to the user.',
'passwordreset-email' => 'Email address:',
'passwordreset-emailtitle' => 'Account details on {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Someone (probably you, from IP address $1) requested a reminder of your
-account details for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}
+'passwordreset-emailtext-ip' => 'Someone (probably you, from IP address $1) requested a reset of your
+password for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}
associated with this email address:
$2
request, or if you have remembered your original password, and you no longer
wish to change it, you may ignore this message and continue using your old
password.',
-'passwordreset-emailtext-user' => 'User $1 on {{SITENAME}} requested a reminder of your account details for {{SITENAME}}
+'passwordreset-emailtext-user' => 'User $1 on {{SITENAME}} requested a reset of your password for {{SITENAME}}
($4). The following user {{PLURAL:$3|account is|accounts are}} associated with this email address:
$2
password.',
'passwordreset-emailelement' => 'Username: $1
Temporary password: $2',
-'passwordreset-emailsent' => 'A reminder email has been sent.',
-'passwordreset-emailsent-capture' => 'A reminder email has been sent, which is shown below.',
-'passwordreset-emailerror-capture' => 'A reminder email was generated, which is shown below, but sending it to the user failed: $1',
+'passwordreset-emailsent' => 'A password reset email has been sent.',
+'passwordreset-emailsent-capture' => 'A password reset email has been sent, which is shown below.',
+'passwordreset-emailerror-capture' => 'A password reset email was generated, which is shown below, but sending it to the user failed: $1',
# Special:ChangeEmail
'changeemail' => 'Change email address',
'loginreqtitle' => 'Login required',
'loginreqlink' => 'log in',
'loginreqpagetext' => 'You must $1 to view other pages.',
-'accmailtitle' => 'Password sent.',
+'accmailtitle' => 'Password sent',
'accmailtext' => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2.
The password for this new account can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
If you are here by mistake, click your browser's '''back''' button.",
'newarticletextanon' => '{{int:newarticletext}}', # do not translate or duplicate this message to other languages
'talkpagetext' => '<!-- MediaWiki:talkpagetext -->', # do not translate or duplicate this message to other languages
-'anontalkpagetext' => "----''This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.
+'anontalkpagetext' => "----
+''This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.''
We therefore have to use the numerical IP address to identify him/her.
Such an IP address can be shared by several users.
-If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.''",
+If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
'noarticletext' => 'There is currently no text in this page.
You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
'size-yottabytes' => '$1 YB', # only translate this message to other languages if you have to change it
# Bitrate units
-'bitrate-bits' => '$1bps', # only translate this message to other languages if you have to change it
-'bitrate-kilobits' => '$1kbps', # only translate this message to other languages if you have to change it
-'bitrate-megabits' => '$1Mbps', # only translate this message to other languages if you have to change it
-'bitrate-gigabits' => '$1Gbps', # only translate this message to other languages if you have to change it
-'bitrate-terabits' => '$1Tbps', # only translate this message to other languages if you have to change it
-'bitrate-petabits' => '$1Pbps', # only translate this message to other languages if you have to change it
-'bitrate-exabits' => '$1Ebps', # only translate this message to other languages if you have to change it
-'bitrate-zetabits' => '$1Zbps', # only translate this message to other languages if you have to change it
-'bitrate-yottabits' => '$1Ybps', # only translate this message to other languages if you have to change it
+'bitrate-bits' => '$1 bps', # only translate this message to other languages if you have to change it
+'bitrate-kilobits' => '$1 kbps', # only translate this message to other languages if you have to change it
+'bitrate-megabits' => '$1 Mbps', # only translate this message to other languages if you have to change it
+'bitrate-gigabits' => '$1 Gbps', # only translate this message to other languages if you have to change it
+'bitrate-terabits' => '$1 Tbps', # only translate this message to other languages if you have to change it
+'bitrate-petabits' => '$1 Pbps', # only translate this message to other languages if you have to change it
+'bitrate-exabits' => '$1 Ebps', # only translate this message to other languages if you have to change it
+'bitrate-zetabits' => '$1 Zbps', # only translate this message to other languages if you have to change it
+'bitrate-yottabits' => '$1 Ybps', # only translate this message to other languages if you have to change it
# Live preview
'livepreview-loading' => 'Loading...',
'sqlite-no-fts' => '$1 without full-text search support',
# New logging system
-'logentry-delete-delete' => '$1 deleted page $3',
-'logentry-delete-restore' => '$1 restored page $3',
-'logentry-delete-event' => '$1 changed visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
-'logentry-delete-revision' => '$1 changed visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
-'logentry-delete-event-legacy' => '$1 changed visibility of log events on $3',
-'logentry-delete-revision-legacy' => '$1 changed visibility of revisions on page $3',
-'logentry-suppress-delete' => '$1 suppressed page $3',
-'logentry-suppress-event' => '$1 secretly changed visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
-'logentry-suppress-revision' => '$1 secretly changed visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
-'logentry-suppress-event-legacy' => '$1 secretly changed visibility of log events on $3',
-'logentry-suppress-revision-legacy' => '$1 secretly changed visibility of revisions on page $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|deleted}} page $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|restored}} page $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|changed}} visibility of log events on $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|changed}} visibility of revisions on page $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|suppressed}} page $3',
+'logentry-suppress-event' => '$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4',
+'logentry-suppress-revision' => '$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4',
+'logentry-suppress-event-legacy' => '$1 secretly {{GENDER:$2|changed}} visibility of log events on $3',
+'logentry-suppress-revision-legacy' => '$1 secretly {{GENDER:$2|changed}} visibility of revisions on page $3',
'revdelete-content-hid' => 'content hidden',
'revdelete-summary-hid' => 'edit summary hidden',
'revdelete-uname-hid' => 'username hidden',
'revdelete-uname-unhid' => 'username unhidden',
'revdelete-restricted' => 'applied restrictions to administrators',
'revdelete-unrestricted' => 'removed restrictions for administrators',
-'logentry-move-move' => '$1 moved page $3 to $4',
-'logentry-move-move-noredirect' => '$1 moved page $3 to $4 without leaving a redirect',
-'logentry-move-move_redir' => '$1 moved page $3 to $4 over redirect',
-'logentry-move-move_redir-noredirect' => '$1 moved page $3 to $4 over a redirect without leaving a redirect',
-'logentry-patrol-patrol' => '$1 marked revision $4 of page $3 patrolled',
-'logentry-patrol-patrol-auto' => '$1 automatically marked revision $4 of page $3 patrolled',
-'logentry-newusers-newusers' => 'User account $1 was created',
-'logentry-newusers-create' => 'User account $1 was created',
-'logentry-newusers-create2' => 'User account $3 was created by $1',
-'logentry-newusers-byemail' => 'User account $3 was created by $1 and password was sent by email',
-'logentry-newusers-autocreate' => 'User account $1 was created automatically',
-'logentry-rights-rights' => '$1 changed group membership for $3 from $4 to $5',
-'logentry-rights-rights-legacy' => '$1 changed group membership for $3',
-'logentry-rights-autopromote' => '$1 was automatically promoted from $4 to $5',
+'logentry-move-move' => '$1 {{GENDER:$2|moved}} page $3 to $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|moved}} page $3 to $4 over redirect',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|moved}} page $3 to $4 over a redirect without leaving a redirect',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|marked}} revision $4 of page $3 patrolled',
+'logentry-patrol-patrol-auto' => '$1 automatically {{GENDER:$2|marked}} revision $4 of page $3 patrolled',
+'logentry-newusers-newusers' => 'User account $1 was {{GENDER:$2|created}}',
+'logentry-newusers-create' => 'User account $1 was {{GENDER:$2|created}}',
+'logentry-newusers-create2' => 'User account $3 was {{GENDER:$2|created}} by $1',
+'logentry-newusers-byemail' => 'User account $3 was {{GENDER:$2|created}} by $1 and password was sent by email',
+'logentry-newusers-autocreate' => 'User account $1 was {{GENDER:$2|created}} automatically',
+'logentry-rights-rights' => '$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|changed}} group membership for $3',
+'logentry-rights-autopromote' => '$1 was automatically {{GENDER:$2|promoted}} from $4 to $5',
'rightsnone' => '(none)',
# For IRC, see bug 34508. Do not change
* @author ArnoLagrange
* @author Blahma
* @author Castelobranco
+ * @author Eliovir
* @author Iketsi
* @author Jens Liebenau
* @author Kaganer
Ili devus anstataŭe alligi la ĝustan temon.<br />
Paĝo estas traktata kiel apartigilo se ĝi uzas ŝablonon kiu estas ligita de [[MediaWiki:Disambiguationspage]]",
+'pageswithprop-prop' => 'Nomo de la atributo:',
+'pageswithprop-submit' => 'Ek',
+
'doubleredirects' => 'Duoblaj alidirektadoj',
'doubleredirectstext' => 'Ĉi tiu paĝo montras paĝojn kiuj alidirektas al aliaj alidirektiloj.
Ĉiu vico enhavas ligilojn ĉe la unua kaj dua alidirektadoj, kaj la unua linio de la dua alidirektado, kiu ĝenerale montras la "veran" celpaĝon, kiu celu la unuan alidirektadon.
* @author Savh
* @author Shirayuki
* @author Spacebirdy
+ * @author Stephensuleeman
* @author Technorum
* @author The Evil IP address
* @author TheBITLINK
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Página',
-'nstab-user' => 'Página de usuari{{gender:{{#titleparts:{{BASEPAGENAME}}|1}}|o|a|o}}',
+'nstab-user' => 'Página de usuario',
'nstab-media' => 'Media',
'nstab-special' => 'Página especial',
'nstab-project' => 'Página del proyecto',
'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
'viewyourtext' => "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
'protectedinterface' => 'Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.
-Para agregar o cambiar las traducciones para todos los wikis, por favor use [//translatewiki.net/translatewiki.net], el proyecto de localización de MediaWiki.',
+Para agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.',
'editinginterface' => "'''Aviso:''' Estás editando una página usada para proporcionar el texto de la interfaz para el software.
Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios de este wiki.
Para añadir o cambiar las traducciones, por favor considera usar [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
En lugar de ello deberían enlazar a una página más apropiada.<br />
Una página es considerada página de desambiguación si utiliza la plantilla que está enlazada desde [[MediaWiki:Disambiguationspage]].",
+'pageswithprop-submit' => 'Ir',
+
'doubleredirects' => 'Redirecciones dobles',
'doubleredirectstext' => 'Esta página contiene una lista de páginas que redirigen a otras páginas de redirección.
Cada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo «real» al que la primera redirección debería apuntar.
'qbbrowse' => 'Sirvi',
'qbedit' => 'Redigeeri',
'qbpageoptions' => 'Lehekülje suvandid',
-'qbmyoptions' => 'Minu suvandid',
+'qbmyoptions' => 'Minu leheküljed',
'qbspecialpages' => 'Erileheküljed',
'faq' => 'KKK',
'faqpage' => 'Project:KKK',
'vector-action-unprotect' => 'Muuda kaitset',
'vector-simplesearch-preference' => 'Kasuta lihtsustatud otsiriba (ainult Vektori-kujunduses)',
'vector-view-create' => 'Loo',
-'vector-view-edit' => 'Redigeeri',
+'vector-view-edit' => 'Muuda',
'vector-view-history' => 'Näita ajalugu',
'vector-view-view' => 'Vaata',
'vector-view-viewsource' => 'Vaata lähteteksti',
'namespaces' => 'Nimeruumid',
'variants' => 'Variandid',
-'navigation-heading' => 'Navigatsioonimenüü',
+'navigation-heading' => 'Navigeerimismenüü',
'errorpagetitle' => 'Viga',
'returnto' => 'Naase lehele $1',
'tagline' => 'Allikas: {{SITENAME}}',
'permalink' => 'Püsilink',
'print' => 'Prindi',
'view' => 'Vaata',
-'edit' => 'Redigeeri',
+'edit' => 'Muuda',
'create' => 'Loo',
'editthispage' => 'Redigeeri seda lehekülge',
'create-this-page' => 'Loo see lehekülg',
'aboutsite' => '{{GRAMMAR:genitive|{{SITENAME}}}} tiitelandmed',
'aboutpage' => 'Project:Tiitelandmed',
'copyright' => 'Kogu tekst on kasutatav litsentsi $1 tingimustel.',
-'copyrightpage' => '{{ns:project}}:Autoriõigused',
+'copyrightpage' => '{{ns:project}}:Autoriõigus',
'currentevents' => 'Sündmused',
'currentevents-url' => 'Project:Sündmused',
'disclaimers' => 'Hoiatused',
'newmessageslinkplural' => '{{PLURAL:$1|uus sõnum|uusi sõnumeid}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|viimane muudatus|viimased muudatused}}',
'youhavenewmessagesmulti' => 'Sulle on uusi sõnumeid $1',
-'editsection' => 'redigeeri',
+'editsection' => 'muuda',
'editsection-brackets' => '[$1]',
'editold' => 'redigeeri',
'viewsourceold' => 'vaata lähteteksti',
Muudatus lükati tagasi, et vältida lehekülje segiminekut.
See juhtub mõnikord siis, kui kasutatakse vigast veebipõhist anonüümsusserverit.",
'edit_form_incomplete' => "'''Redigeerimisvormi mõni osa ei jõudnud serverisse; kontrolli, kas sinu tehtud muudatused on alles, ja proovi uuesti.'''",
-'editing' => 'Redigeerimisel on $1',
+'editing' => 'Muutmisel on $1',
'creating' => 'Alustamisel on $1',
-'editingsection' => 'Redigeerimisel on osa leheküljest $1',
+'editingsection' => 'Muutmisel on osa leheküljest $1',
'editingcomment' => 'Muutmisel on $1 (uus alaosa)',
'editconflict' => 'Redigeerimiskonflikt: $1',
'explainconflict' => "Keegi teine on muutnud seda lehekülge pärast seda, kui sina seda redigeerima hakkasid.
Võimalik, et sellised lingid peaks viitama sobivamatele lehekülgedele.
Lehekülg loetakse täpsustusleheküljeks, kui see kasutab malli, millele viitab sõnum [[MediaWiki:Disambiguationspage]].",
+'pageswithprop' => 'Leheatribuudiga leheküljed',
+'pageswithprop-legend' => 'Leheatribuudiga leheküljed',
+'pageswithprop-text' => 'Sellel leheküljel on loetletud mõnd leheatribuuti kasutavad leheküljed.',
+'pageswithprop-prop' => 'Atribuudi nimi:',
+'pageswithprop-submit' => 'Mine',
+
'doubleredirects' => 'Kahekordsed ümbersuunamised',
'doubleredirectstext' => 'Käesolev leht esitab loendi lehtedest, mis sisaldavad ümbersuunamisi teistele ümbersuunamislehtedele.
Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise ümbersuunamislehe sihtmärk, mis tavaliselt on esialgse ümbersuunamise tegelik siht, millele see otse osutama peakski.
'iteminvalidname' => "Probleem üksusega '$1'. Selle nimes on viga.",
'wlnote' => "Allpool on {{PLURAL:$1|viimane muudatus|viimased '''$1''' muudatust}} viimase {{PLURAL:$2|tunni|'''$2''' tunni}} jooksul seisuga $3, $4.",
'wlshowlast' => 'Näita viimast $1 tundi $2 päeva. $3',
-'watchlist-options' => 'Jälgimisloendi võimalused',
+'watchlist-options' => 'Jälgimisloendi seaded',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Jälgimine...',
'confirmdeletetext' => 'Sa oled andmebaasist kustutamas lehekülge koos kogu tema ajalooga.
Palun kinnita, et tahad seda tõepoolest teha, et sa mõistad tagajärgi ja et sinu tegevus on kooskõlas siinse [[{{MediaWiki:Policy-url}}|sisekorraga]].',
'actioncomplete' => 'Toiming sooritatud',
-'actionfailed' => 'Tegevus ebaõnnestus',
+'actionfailed' => 'Toiming ebaõnnestus',
'deletedtext' => '"$1" on kustutatud. Kustutatud leheküljed on ära toodud eraldi loendis ($2).',
'dellogpage' => 'Kustutamislogi',
'dellogpagetext' => 'Allpool on esitatud nimekiri viimastest kustutamistest.
# Namespace 8 related
'allmessages' => 'Kõik süsteemi sõnumid',
'allmessagesname' => 'Nimi',
-'allmessagesdefault' => 'Vaikimisi tekst',
+'allmessagesdefault' => 'Vaiketekst',
'allmessagescurrent' => 'Praegune tekst',
'allmessagestext' => 'See on loend kõikidest olemasolevatest süsteemisõnumitest MediaWiki nimeruumis.
Kui soovid MediaWiki tarkvara tõlkimises osaleda, siis vaata lehti [//www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Sinu kasutajaleht',
'tooltip-pt-anonuserpage' => 'Sinu IP-aadressi kasutajalehekülg',
-'tooltip-pt-mytalk' => 'Minu aruteluleht',
+'tooltip-pt-mytalk' => 'Sinu arutelulehekülg',
'tooltip-pt-anontalk' => 'Arutelu sellelt IP-aadressilt tehtud muudatuste kohta',
-'tooltip-pt-preferences' => 'Minu eelistused',
+'tooltip-pt-preferences' => 'Sinu eelistused',
'tooltip-pt-watchlist' => 'Lehekülgede loend, mida jälgid muudatuste osas',
'tooltip-pt-mycontris' => 'Sinu kaastööde loend',
'tooltip-pt-login' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
'tooltip-ca-unprotect' => 'Muuda selle lehekülje kaitset',
'tooltip-ca-delete' => 'Kustuta see lehekülg',
'tooltip-ca-undelete' => 'Taasta enne lehekülje kustutamist tehtud muudatused',
-'tooltip-ca-move' => 'Teisalda see lehekülg teise nime alla.',
+'tooltip-ca-move' => 'Teisalda see lehekülg',
'tooltip-ca-watch' => 'Lisa see lehekülg oma jälgimisloendisse',
'tooltip-ca-unwatch' => 'Eemalda see lehekülg oma jälgimisloendist',
'tooltip-search' => 'Otsi vikist',
'minutes' => '{{PLURAL:$1|üks minut|$1 minutit}}',
'hours' => '{{PLURAL:$1|üks tund|$1 tundi}}',
'days' => '{{PLURAL:$1|üks päev|$1 päeva}}',
+'months' => '{{PLURAL:$1|Üks kuu|$1 kuud}}',
+'years' => '{{PLURAL:$1|Üks aasta|$1 aastat}}',
'ago' => '$1 tagasi',
'just-now' => 'just nüüd',
'api-error-ok-but-empty' => 'Sisetõrge: Server ei vasta.',
'api-error-overwrite' => 'Olemasolevate failide ülekirjutamine pole lubatud.',
'api-error-stashfailed' => 'Sisetõrge: Serveril ei õnnestunud ajutist faili talletada.',
+'api-error-publishfailed' => 'Sisetõrge: Serveril ebaõnnestus ajutise faili avaldamine.',
'api-error-timeout' => 'Server ei vastanud oodatud aja sees.',
'api-error-unclassified' => 'Ilmnes teadmata tõrge.',
'api-error-unknown-code' => 'Teadmata tõrge: "$1"',
'duration-centuries' => '$1 {{PLURAL:$1|sajandi}}',
'duration-millennia' => '$1 {{PLURAL:$1|aastatuhande}}',
+# Image rotation
+'rotate-comment' => 'Pilti pööratud $1 {{PLURAL:$1|kraad|kraadi}} päripäeva',
+
);
'nchanges' => '{{PLURAL:$1|aldaketa 1|$1 aldaketa}}',
'recentchanges' => 'Aldaketa berriak',
'recentchanges-legend' => 'Azken aldaketen aukerak',
-'recentchanges-summary' => 'Orrialde honetan wiki honetan egindako azken aldaketak erakusten dira.',
+'recentchanges-summary' => 'Orri honetan ikuska ditzakezu wiki honetan egindako azken aldaketak.',
'recentchanges-feed-description' => 'Sindikazio honetan wikian eginiko azkeneko aldaketak jarrai daitezke.',
'recentchanges-label-newpage' => 'Aldaketa honek orrialde berri bat sortu du',
'recentchanges-label-minor' => 'Hau aldaketa txikia da',
'listgrouprights-addgroup-all' => 'Añiil tolos grupus',
'listgrouprights-removegroup-all' => 'Esborral tolos grupus',
-# E-mail user
+# Email user
'mailnologin' => 'Nu envial direción',
'mailnologintext' => 'Ebis estal [[Special:UserLogin|rutrau]]
i tenel una direción d´email correta enas tus [[Special:Preferences|preferéncias]]
'namespacesall' => 'tó',
'monthsall' => 'tó',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Confirmal email',
'confirmemail_noemail' => 'Nu as escrebiu una direción d´email correta enas tus [[Special:Preferences|preferéncias]].',
'confirmemail_text' => "{{SITENAME}} requieri que confirmis la tu direción d'email enantis de gastal las huncionis de correu. Ativa el botón d'embahu pa envial un correu e confirmación a la tu direción. El correu incluirá un atihu con un cóigu; sigui el atihu pa confirmal la tu direción d'email.",
یک صفحه هنگامی صفحهٔ ابهامزدایی در نظر گرفته میشود که در آن از الگویی که به [[MediaWiki:Disambiguationspage]] پیوند دارد استفاده شده باشد.",
'pageswithprop' => 'صفحههای دارای خاصیت صفحه',
+'pageswithprop-legend' => 'صفحههای دارای خاصیت صفحه',
'pageswithprop-text' => 'این صفحه فهرستی است از صفحههایی که از یک خاصیت صفحهٔ خاص استفاده میکنند.',
'pageswithprop-prop' => 'نام خاصیت:',
+'pageswithprop-submit' => 'برو',
'doubleredirects' => 'تغییرمسیرهای دوتایی',
'doubleredirectstext' => 'این صفحه فهرستی از صفحههای تغییرمسیری را ارائه میکند که به صفحهٔ تغییرمسیر دیگری اشاره میکنند.
'duration-centuries' => '$1 قرن',
'duration-millennia' => '{{PLURAL:$1|هزار سال |$1 هزار سال}}',
-# Unknown messages
-'pageswithprop-legend' => 'صفحههای دارای خاصیت صفحه',
-'pageswithprop-submit' => 'برو',
+# Image rotation
+'rotate-comment' => 'تصویر به دست $1 {{PLURAL:$1|درجهٔ|درجهٔ}} ساعتگرد چرخانده شد',
+
);
Sivua kohdellaan täsmennyssivuna, jos se käyttää mallinetta, johon on linkki sivulta [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Sivut sivun ominaisuuden mukaan',
+'pageswithprop-legend' => 'Sivut sivun ominaisuuden mukaan',
'pageswithprop-text' => 'Tällä sivulla on lueteltu sivut, jotka käyttävät erityistä sivun ominaisuutta.',
+'pageswithprop-prop' => 'Ominaisuuden nimi',
+'pageswithprop-submit' => 'Siirry',
'doubleredirects' => 'Kaksinkertaiset ohjaukset',
'doubleredirectstext' => 'Tässä listassa on ohjaussivut, jotka ohjaavat toiseen ohjaussivuun.
'duration-centuries' => '$1 {{PLURAL:$1|vuosisata|vuosisataa}}',
'duration-millennia' => '$1 {{PLURAL:$1|vuosituhat|vuosituhatta}}',
-# Unknown messages
-'pageswithprop-legend' => 'Sivut sivun ominaisuuden mukaan',
-'pageswithprop-submit' => 'Siirry',
);
'underline-always' => 'Altíð',
'underline-never' => 'Ongantíð',
-'underline-default' => 'Kagarastandard',
+'underline-default' => 'Standard fyri útsjónd og kaga',
# Font style option in Special:Preferences
'editfont-style' => 'Rættað økið typografi:',
'newwindow' => '(kemur í nýggjan glugga)',
'cancel' => 'Ógilda',
'moredotdotdot' => 'Meira...',
-'mypage' => 'Mín síða',
+'morenotlisted' => 'Meira, ið ikki verður víst',
+'mypage' => 'Síða',
'mytalk' => 'Kjak',
'anontalk' => 'Kjak til hesa ip-adressuna',
'navigation' => 'Navigatión',
'vector-action-protect' => 'Friða',
'vector-action-undelete' => 'Endurstovna',
'vector-action-unprotect' => 'Broyt friðing',
-'vector-simplesearch-preference' => 'Ger virkið betraði leiti uppskot (bert Vector útsjónd)',
+'vector-simplesearch-preference' => 'Ger lættari leititeig virknan (bert Vector útsjónd)',
'vector-view-create' => 'Stovna',
'vector-view-edit' => 'Rætta',
'vector-view-history' => 'Søga',
'namespaces' => 'Navnarúm',
'variants' => 'Ymisk sløg',
+'navigation-heading' => 'Navigatiónsskrá',
'errorpagetitle' => 'Villa',
'returnto' => 'Vend aftur til $1.',
'tagline' => 'Frá {{SITENAME}}',
'dberrortext' => '↓ Tað er hend ein syntaks villa í fyrispurninginum til dátugrunnin.
Hetta kann merkja, at tað er feilur í ritbúnaðinum (software).
Seinasta royndin at spyrja dátugrunnin var:
-<blockquote><tt>$1</tt></blockquote>
-frá funktiónini "<tt>$2</tt>".
-Dátugrunnurin sendi feilin aftur "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+frá innaru funktión "<code>$2</code>".
+Dátagrunnurin gav feilmelding "<samp>$3: $4</samp>".',
'dberrortextcl' => '↓ Ein syntaks feilur hendi í fyrispurningi til dátugrunnin.
Seinasta royndin at leita í dátugrunninum var:
"$1"
'cannotdelete' => 'Síðan ella fílan $1 kundi ikki strikast.
Møguliga hevur onkur annar longu strikað hana.',
'cannotdelete-title' => 'Kann ikki strika síðu "$1"',
+'delete-hook-aborted' => 'Ein húkur (hook) forðaði fyri sletting.
+Ongin frágreiðing varð givin.',
'badtitle' => 'Ógyldugt heiti',
'badtitletext' => 'Umbidna síðan er ógyldugt, tómt ella skeivt tilslóðað heiti millum mál ella wikur.',
'perfcached' => 'Fylgjandi upplýsingar eru "fangaðir" (cached) og eru møguliga ikki dagførdir. Í mesta lagi {{PLURAL:$1|eitt úrslit er|$1 úrslit eru}} tøk í cache.',
'actionthrottled' => 'Hendingin kvaldist',
'actionthrottledtext' => '↓ Fyri at mótvirka spam, er tað ikki møguligt at gera hetta alt ov nógvar ferðir uppá stutta tíð, og tú ert farin yvir tað markið.
Vinarliga royn aftur um fáir minuttir.',
-'protectedpagetext' => 'Hendan síða er læst fyri at steðga rættingum.',
+'protectedpagetext' => 'Hendan síða er blivin vard fyri at steðga rættingum ella øðrum handlingum.',
'viewsourcetext' => 'Tú kanst síggja og avrita kelduna til hesa grein:',
'viewyourtext' => "Tú kanst síggja og avrita kelduna fyri '''tínar rættingar''' til hesa síðuna:",
-'protectedinterface' => '↓ Henda síðan gevur markamóts tekst til ritbúnaðin (software), og er vard fyri at fyribyrgja misnýtslu.',
+'protectedinterface' => "↓ Henda síðan gevur markamóts tekst til ritbúnaðin (software), og er vard fyri at fyribyrgja misnýtslu.
+Fyri at gera rættingar ella broyta týðingar á øllum wiki'um, vinarliga nýt [//translatewiki.net/ translatewiki.net], MediaWiki verkætlanina.",
'editinginterface' => "↓ '''Ávaring:''' Tú rættar eina síðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).
-Broytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrir brúkarar.
-Fyri at gera týðingar verður tú vinarliga biðin um at umhugsa at brúka [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], sum er verkætlan fyri týðingum av MediaWiki.",
+Broytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrar brúkarar á hesi wiki.
+Fyri at gera týðingar ella broyta týðingar á øllum wiki, vinarliga nýt [//translatewiki.net/ translatewiki.net], sum er ein MediaWiki verkætlan.",
'sqlhidden' => '(SQL fyrispurningur fjaldur)',
'cascadeprotected' => 'Henda síðan er vard fyri rættingum, tí hon er í fylgjandi {{PLURAL:$1|síðu, sum er|síðum, sum eru}}
vardar við "arvaðari síðuverjing"
'ns-specialprotected' => 'Serstakar síður kunnu ikki rættast.',
'titleprotected' => '[[User:$1|$1]] hevur vart hetta heitið frá skapan.
Givin orsøk er "\'\'$2\'\'".',
+'filereadonlyerror' => 'Tað var ikki møguligt at broyta fíluna "$1" tí at fílugoymslan "$2" er í bara-lesa støðu.
+
+Umboðsstjórin sum stongdi hana, gav hesa frágreiðing: "$3".',
+'invalidtitle-knownnamespace' => 'Ógyldugt heiti við navnaøki "$2" og teksti "$3"',
+'invalidtitle-unknownnamespace' => 'Ógyldigt heiti við ókendum navnaøkis tali $1 og teksti "$2"',
'exception-nologin' => 'Tú ert ikki loggað/ur inn',
'exception-nologin-text' => 'Henda síða ella tað tú ætlar at gera kremvur at tú ert innritað/ur á hesa wiki.',
'gotaccount' => "Hevur tú longu eina kontu? '''$1'''.",
'gotaccountlink' => 'Rita inn',
'userlogin-resetlink' => 'Hevur tú gloymt tínar logg inn upplýsingar',
-'createaccountmail' => 'eftur t-posti',
+'createaccountmail' => 'Nýt eitt fyribils tilvildarligt loyniorð og send tað til t-post adressuna niðanfyri',
'createaccountreason' => 'Orsøk:',
'badretype' => 'Loyniorðið tú hevur skriva er ikki rætt.',
'userexists' => 'Brúkaranavnið sum tú valdi er longu í nýtslu.
'loginlanguagelabel' => 'Mál: $1',
'suspicious-userlogout' => 'Tín fyrispurningur um at útrita var noktaður, tí tað sær út til at hann varð sendur frá einum oyðiløgdum kaga ella caching proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "Ókend villa í PHP'sa teldupost () funktión.",
'user-mail-no-addy' => 'Royndi at senda t-post uttan eina t-post adressu.',
+'user-mail-no-body' => 'Tú royndi at senda ein teldupost við ongum ella órímiliga stuttum innihaldi.',
# Change password dialog
'resetpass' => 'Broyt loyniorð',
'changeemail-oldemail' => 'Verandi t-post adressa:',
'changeemail-newemail' => 'Nýggj t-post adressa:',
'changeemail-none' => '(ongin)',
+'changeemail-password' => 'Títt {{SITENAME}} loyniorð:',
'changeemail-submit' => 'Broyt t-post',
'changeemail-cancel' => 'Ógilda',
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leita í líknandi loggum],
ella [{{fullurl:{{FULLPAGENAME}}|action=edit}} rætta hesa síðu]</span>.',
'noarticletext-nopermission' => 'Tað er í løtuni ongin tekstur á hesi síðu.
-Tú kanst [[Special:Search/{{PAGENAME}}|leita eftir hesum síðu heiti]] á øðrum siðum,
-ella <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} síggja viðkomandi logglistar]</span>.',
+Tú kanst [[Special:Search/{{PAGENAME}}|leita eftir hesum síðuheiti]] á øðrum síðum,
+ella <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leita eftir viðkomandi loggum]</span>, men tú hevur ikki loyvi til at stovna hesa síðu.',
'missing-revision' => 'Endurskoðan #$1 av síðuni við heitinum "{{PAGENAME}}" er ikki til.
Hetta skyldast vanliga tað, at tú fylgir einari gamlari søguslóð til eina síðu, sum er blivin slettað.
'note' => "'''Viðmerking:'''",
'previewnote' => "'''Minst til at hetta bara er ein forskoðan.'''
Tínar broytingar eru ikki goymdar enn!",
-'continue-editing' => 'Halt fram við at rætta',
+'continue-editing' => 'Far til økið har ið tú kanst gera rættingar',
'previewconflict' => 'Henda forskoðanin vísir tekstin í erva soleiðis sum hann sær út, um tú velur at goyma.',
'session_fail_preview' => "'''Orsakað! Vit kundu ikki fullføra tínar broytingar, tí tínar sessións dáta eru horvin.'''
Vinarliga royn aftur.
'''Bert''' teksturin í ovara økinum verður goymdur, tá tú trýstir á \"{{int:savearticle}}\".",
'yourtext' => 'Tín tekstur',
'storedversion' => 'Goymd útgáva',
+'nonunicodebrowser' => "'''Ávaring: Tín internetkagi er ikki í samsvar við Unicode.'''
+Ein dagføring er neyðug fyri at tú á tryggan hátt kanst rætta síður: Ikki-ASCII bókstavar fara at koma fram í rættingarteiginum sum hexadecimal kotur.",
'editingold' => "'''Ávaring: Tú rættar ein gamla versjón av hesi síðu.'''
Um tú goymir hana, so fara allar broytingar sum eru gjørdar síðan hesa versjónina mistar.",
'yourdiff' => 'Munir',
'''Tú mást ikki senda tilfar inn, sum er vart av upphavsrætti, uttan so at tú hevur fingið loyvi til tað!'''",
'longpageerror' => "'''Feilur: Teksturin sum tú hevur sent inn er {{PLURAL:$1|eitt kilobyte|$1 kilobytes}} langur, sum er longri enn mest loyvda, sum er {{PLURAL:$2|eitt kilobyte|$2 kilobytes}}.'''
Teksturin kann tí ikki verða goymdur.",
+'readonlywarning' => "'''Ávaring: Dátugrunnurin er blivin stongdur orsakað av viðlíkahaldi, so tú kanst ikki goyma tínar rættingar júst nú.'''
+Tað hevði kanska verið eitt gott hugskot, um tú avritar og goymir tín tekst í eina tekstfílu og goymir tað til seinni.
+
+Umboðsstjórin ið stongdi hann gav hesa frágreiðing: $1",
'protectedpagewarning' => "'''Ávaring: Henda síðan er friðað, so at einans brúkarar við umboðsstjóra heimildum kunnu broyta hana.'''
Tann seinasta logg inn er goymt niðanfyri fyri ávísing:",
'semiprotectedpagewarning' => "'''Viðmerking:''' Hendan grein er vard soleiðis at bert skrásetir brúkarar kunnu rætta hana.
'edit-no-change' => 'Tín rætting var sæð burtur frá, tí ongin broyting varð gjørd í tekstinum.',
'edit-already-exists' => 'Tað var ikki møguligt at upprætta nýggja síðu.
Síðan er longu til.',
+'defaultmessagetext' => 'Standard boðtekstur',
+'invalid-content-data' => 'Ógyldug innihalds dáta',
+'content-not-allowed-here' => '"$1" innihald er ikki loyvt á síðu [[$2]]',
+
+# Content models
+'content-model-text' => 'simpul tekstur',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
+'expensive-parserfunction-category' => 'Síður við ov nógvum dýrum parsara funktiónskallum',
'post-expand-template-inclusion-warning' => "'''Ávaring:''' Tað eru ov nógvar skabilónir á hesi síðu.
Nakrar skabilónir vera ikki vístar.",
'post-expand-template-inclusion-category' => 'Síður sum innihalda ov nógvar skabilónir',
'post-expand-template-argument-warning' => "'''Ávaring:''' Henda síðan inniheldur í minsta lagi eitt skabilón parametur (template argument), sum fyllir meira enn loyvdu støddina.
Hetta parametur er tí ikki tikið við.",
'post-expand-template-argument-category' => 'Síður har skabilón parametur (template arguments) ikki eru tikin við',
+'parser-template-loop-warning' => 'Skapilónssloyfa funnin: [[$1]]',
+'node-count-exceeded-category' => 'Síður har talið av notum (node) er ov høgt',
+'node-count-exceeded-warning' => 'Síðan hevur og høgt tal av notum (node-count)',
+'expansion-depth-exceeded-category' => 'Síður ið fara yvir loyvdu víðkanar-dýpdina',
# "Undo" feature
'undo-success' => 'Rættingin kann takast burtur aftur.
'rev-delundel' => 'skoða/fjal',
'rev-showdeleted' => 'vís',
'revisiondelete' => 'Strika/endurnýggja broytingina',
+'revdelete-nologtype-title' => 'Onki slag av loggi er upplýst',
+'revdelete-nologtype-text' => 'Tú hevur ikki útgreinað nakað slag av loggi, fyri at útføra hesa handling á.',
+'revdelete-nologid-title' => 'Ógyldugur loggpostur',
+'revdelete-no-file' => 'Nevnda fíla er ikki til.',
+'revdelete-show-file-confirm' => 'Ert tú vís/ur í, at tú ynskir at síggja eina strikaða endurskoðan av fíluni "<nowiki>$1</nowiki>" frá $2 kl. $3?',
'revdelete-show-file-submit' => 'Ja',
+'revdelete-selected' => "'''{{PLURAL:$2|Valda versjón|Valdar versjónir}} hjá [[:$1]]:'''",
+'revdelete-confirm' => 'Vinarliga vátta, at tú ætlar at gera hetta, at tú skilir avleiðingarnar, og at tú ger hetta í samsvari við [[{{MediaWiki:Policy-url}}|mannagongdirnar]].',
'revdelete-legend' => 'Set avmarkinga fyri sjónligheit',
'revdelete-hide-text' => 'Goym burtur tekstin á hesi versjónini',
'revdelete-hide-image' => 'Fjal fílu innihald',
Hon kann ikki fjalast.',
'revdelete-show-no-access' => 'Feilur tá hesin lutur dagfestur $1 klokkan $2 skuldi vísast:Hesin lutur er blivin markeraður sum "avmarkaður".
Tú hevur ikki atgongd til hann.',
+'revdelete-no-change' => "'''Ávaring:''' Pettið ið er dagfest $1, kl. $2 hevði longu tær umbidnu innstillingar fyri sjónligheit.",
+'revdelete-concurrent-change' => 'Ein feilur hendi, meðan tú dagførdi tekstin frá $1, kl. $2: Teksturin sær út til at vera blivin broyttur av onkrum øðrum, meðan tú royndi at rætta hann.',
'revdelete-otherreason' => 'Onnur orsøk',
'revdelete-reasonotherlist' => 'Onnur orsøk',
'revdelete-edit-reasonlist' => 'Rætta strikingar orsøkir',
'revdelete-offender' => 'Høvundurin av hesi endurskoðan:',
# History merging
+'mergehistory' => 'Samantvinna søgurnar hjá síðunum',
+'mergehistory-header' => 'Henda síðan letur teg samanflætta versjónirnar frá søguni av einari síðu til eina nýggjari síðu.
+Tryggja tær, at henda broyting fer at varðveita framhaldssøguna hjá síðuni.',
+'mergehistory-box' => 'Samantvinna versjónirnar av tveimum síðum:',
'mergehistory-from' => 'Keldusíða:',
'mergehistory-no-source' => 'Keldu síðan $1 er ikki til.',
'mergehistory-no-destination' => 'Destinatiónssíðan $1 er ikki til.',
'search-interwiki-default' => '$1 úrslit:',
'search-interwiki-more' => '(meira)',
'search-relatedarticle' => 'Líknandi',
-'mwsuggest-disable' => 'Slá AJAX uppskot frá',
+'mwsuggest-disable' => 'Slá leitingaruppskot frá',
'searcheverything-enable' => 'Leita í øllum navnaøkjum',
'searchrelated' => 'líknandi',
'searchall' => 'alt',
'timezoneregion-indian' => 'Indiska Havið',
'timezoneregion-pacific' => 'Stillahavið',
'allowemail' => 'Tilset t-post frá øðrum brúkarum',
-'prefs-searchoptions' => 'Leiti møguleikar',
+'prefs-searchoptions' => 'Leita',
'prefs-namespaces' => 'Navnarúm',
'defaultns' => 'Um ikki, leita so í hesum navnateigum:',
'default' => 'standard',
'prefs-files' => 'Fílur',
'prefs-custom-css' => 'Tilpassað CSS',
'prefs-custom-js' => 'Tilpassað JavaScript',
+'prefs-common-css-js' => 'Møgulig CSS/JavaScript fyri allar útsjóndir:',
+'prefs-reset-intro' => 'Tú kanst brúka hesa síðuna til at nullstilla allar tínar valdu innstillingar, so tað kemur aftur til standard.
+Tú kanst ikki angra, tá tað fyrst er gjørt.',
'prefs-emailconfirm-label' => 'Vátta tína t-post adressu:',
'prefs-textboxsize' => 'Støddin á rættingar vindeyganum',
'youremail' => 'T-postur (sjálvboðið)*:',
-'username' => 'Brúkaranavn:',
-'uid' => 'Brúkara ID:',
-'prefs-memberingroups' => 'Limir í {{PLURAL:$1|bólki|bólkum}}:',
+'username' => '{{GENDER:$1|Brúkaranavn}}:',
+'uid' => '{{GENDER:$1|Brúkari}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Limur}} í {{PLURAL:$1|bólki|bólkum}}:',
'prefs-registration' => 'Skrásett tíðspunkt:',
'yourrealname' => 'Títt navn*:',
'yourlanguage' => 'Mál til brúkaraflatu:',
'yournick' => 'Nýggj undirskrift:',
+'prefs-help-signature' => 'Viðmerkingar á kjaksíðum eiga at vera undirskrivaðar við "<nowiki>~~~~</nowiki>", sum verður gjørt um til tína undirskrift og eitt dagfestingarmerki.',
'badsiglength' => 'Tín undirskrift er ov long.
Hon má ikki hava meira enn $1 {{PLURAL:$1|tekn|tekn}}',
'yourgender' => 'Kyn:',
'prefs-info' => 'Grundleggjandi kunning',
'prefs-i18n' => 'Altjóðagerð',
'prefs-signature' => 'Undirskrift',
+'prefs-dateformat' => 'Slag av dagfesting',
'prefs-timeoffset' => 'Tíðarmunur',
'prefs-advancedediting' => 'Víðkaðir møguleikar',
'prefs-advancedrc' => 'Víðkaðir møguleikar',
'prefs-displaywatchlist' => 'Vís møguleikar',
'prefs-diffs' => 'Munir',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'T-post adressan sær út til at vera í gildi',
'email-address-validity-invalid' => 'Skriva eina gylduga t-post adressu',
'large-file' => 'Tað verður viðmælt, at fílur ikki eru størri enn $1;
henda fílin er $2.',
'largefileserver' => 'Henda fílan er størri enn servarin er innstillaður til at loyva.',
+'windows-nonascii-filename' => "Henda wiki'in stuðlar ikki fílunøvn við serstøkum bókstavum/teknum.",
+'fileexists' => 'Ein fíla við hesum navninum er longu til, vinarliga kanna eftir <strong>[[:$1]]</strong> um tú ivast í, um tú ynskir at broyta tað.
+[[$1|thumb]]',
+'filepageexists' => 'Síðan við frágreingin fyri hesa fíluna er longu til, hon er á <strong>[[:$1]]</strong>, men ongin fíla við hesum navninum er til í løtuni.
+Frágreiðingin sum tú hevur skrivað kemur ikki at síggjast á síðuni.
+Fyri at tín frágreiðing skal síggjast á síðuni, noyðist tú at skriva tað manuelt.
+[[$1|thumb]]',
'file-deleted-duplicate' => 'Ein fíla, sum er líka sum henda ([[:$1]]) er fyrr blivin strikað.
Tú eigur at kanna eftir strikingarsøguna hjá hesi fílu, áðrenn tú heldur áframm við at leggja hana út enn einaferð.',
'uploadwarning' => 'Ávaring',
'listgrouprights-addgroup-self-all' => 'Legg allir bólkar til egna konto',
'listgrouprights-removegroup-self-all' => 'Tak burtur allir bólkar frá egnari konto',
-# E-mail user
+# Email user
'mailnologin' => 'Ongin móttakara bústaður',
'mailnologintext' => 'Tú mást hava [[Special:UserLogin|ritað inn]]
og hava virkandi teldupostadressu í [[Special:Preferences|innstillingum]] tínum
'emailsenttext' => 'Títt t-post boð er sent.',
# Watchlist
-'watchlist' => 'Mítt eftirlit',
-'mywatchlist' => 'Mítt eftirlit',
+'watchlist' => 'Eftirlitslisti',
+'mywatchlist' => 'Eftirlitslisti',
'watchlistfor2' => 'Fyri $1 $2',
'nowatchlist' => 'Tú hevur ongar lutir í eftirlitinum.',
'watchnologin' => 'Tú hevur ikki ritað inn',
'namespacesall' => 'alt',
'monthsall' => 'allir',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Vátta t-post adressu',
'confirmemail_send' => 'Send eina váttanarkotu',
'confirmemail_sent' => 'Játtanar t-postur sendur.',
# User preference toggles
'tog-underline' => 'Souligner les liens :',
'tog-justify' => 'Justifier les paragraphes',
-'tog-hideminor' => 'Masquer les modifications mineures dans les modifications récentes',
+'tog-hideminor' => 'Masquer les modifications mineures dans les changements récents',
'tog-hidepatrolled' => 'Masquer les modifications surveillées dans les modifications récentes',
-'tog-newpageshidepatrolled' => 'Masquer les pages surveillées parmi les nouvelles pages',
+'tog-newpageshidepatrolled' => 'Masquer les pages surveillées parmi la liste des nouvelles pages',
'tog-extendwatchlist' => 'Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes',
'tog-usenewrc' => 'Grouper les changements dans les modifications récentes et la liste de suivi (nécessite JavaScript)',
'tog-numberheadings' => 'Numéroter automatiquement les titres de section',
'blocked-mailpassword' => 'Votre adresse IP est bloquée en écriture, la fonction de rappel du mot de passe est donc désactivée pour éviter les abus.',
'eauthentsent' => "Un courriel de confirmation a été envoyé à l'adresse indiquée.
Avant qu'un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.",
-'throttled-mailpassword' => "Un courriel de rappel de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de rappel sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.",
+'throttled-mailpassword' => "Un courriel de réinitialisation de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de réinitialisation de votre mot de passe sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.",
'mailerror' => "Erreur lors de l'envoi du courriel : $1",
'acct_creation_throttle_hit' => "Quelqu'un utilisant votre adresse IP a créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui constitue la limite autorisée dans cet intervalle de temps.
Par conséquent, la création de compte a été temporairement désactivée pour cette adresse IP.",
# Special:PasswordReset
'passwordreset' => 'Remise à zéro du mot de passe',
-'passwordreset-text' => 'Remplissez ce formulaire pour recevoir un courriel de rappel des détails de votre compte.',
+'passwordreset-text' => 'Remplissez ce formulaire pour réinitialiser votre mot de passe.',
'passwordreset-legend' => 'Remise à zéro du mot de passe',
'passwordreset-disabled' => 'La réinitialisation des mots de passe a été désactivée sur ce wiki.',
'passwordreset-pretext' => '{{PLURAL:$1||Entrez un élément de données ci-dessous}}',
'passwordreset-capture-help' => "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu'il sera envoyé à l'utilisateur.",
'passwordreset-email' => 'Adresse de courriel :',
'passwordreset-emailtitle' => 'Détails du compte sur {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
+'passwordreset-emailtext-ip' => "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
$2
{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
-'passwordreset-emailtext-user' => "L'utilisateur $1 sur {{SITENAME}} a demandé un rappel des informations de votre compte pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
+'passwordreset-emailtext-user' => "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :
$2
{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
'passwordreset-emailelement' => "Nom d'utilisateur : $1
Mot de passe temporaire : $2",
-'passwordreset-emailsent' => 'Un courriel de rappel a été envoyé.',
-'passwordreset-emailsent-capture' => 'Un courriel de rappel a été envoyé, qui est affiché ci-dessous.',
-'passwordreset-emailerror-capture' => "Un courriel de rappel a été généré, qui est affiché ci-dessous, mais l'envoi à l'utilisateur a échoué : $1",
+'passwordreset-emailsent' => 'Un courriel de réinitialisation de mot de passe a été envoyé.',
+'passwordreset-emailsent-capture' => 'Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.',
+'passwordreset-emailerror-capture' => "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'utilisateur a échoué : $1",
# Special:ChangeEmail
'changeemail' => "Changer l'adresse de courriel",
Une page est considérée comme une page d'homonymie si elle utilise un modèle lié à [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => 'Pages avec une propriété de page',
+'pageswithprop-legend' => 'Pages avec une propriété de page',
'pageswithprop-text' => 'Cette page liste les pages qui utilisent une propriété de page particulière.',
'pageswithprop-prop' => 'Nom de la propriété:',
+'pageswithprop-submit' => 'Aller',
'doubleredirects' => 'Doubles redirections',
'doubleredirectstext' => 'Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection.
'duration-centuries' => '$1 siècle{{PLURAL:$1||s}}',
'duration-millennia' => '$1 millénaire{{PLURAL:$1||s}}',
-# Unknown messages
-'pageswithprop-legend' => 'Pages avec une propriété de page',
-'pageswithprop-submit' => 'Aller',
+# Image rotation
+'rotate-comment' => 'Image pivotée de $1 {{PLURAL:$1|degré|degrés}} dans le sens des aiguilles d’une montre',
+
);
'missing-revision' => 'La vèrsion numerô $1 de la pâge apelâye « {{PAGENAME}} » ègziste pas.
En g·ènèral cen arreve en siuvent un lim d’un historico dèpassâ de vers na pâge qu’est étâye suprimâye.
-Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
+Vos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
'userpage-userdoesnotexist' => 'Lo compto utilisator « $1 » est pas encartâ.
Se vos plét, controlâd que vos voléd fâre / changiér cela pâge.',
'userpage-userdoesnotexist-view' => 'Lo compto utilisator « $1 » est pas encartâ.',
'rev-deleted-event' => '(accion du jornal enlevâye)',
'rev-deleted-user-contribs' => '[nom d’utilisator ou ben adrèce IP enlevâ(ye) - changement cachiê sur les contribucions]',
'rev-deleted-text-permission' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
-Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+Y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
'rev-deleted-text-unhide' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
-Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
+Y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
Vos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
'rev-suppressed-text-unhide' => "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.
-Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
+Y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
Vos pouede adés [$1 vêre cela vèrsion] se vos o voléd.",
'rev-deleted-text-view' => "Ceta vèrsion de la pâge est étâye '''suprimâye'''.
-Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+Vos la pouede vêre ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
'rev-suppressed-text-view' => "Ceta vèrsion de la pâge est étâye '''rèprimâye'''.
-Vos la pouede vêre ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
+Vos la pouede vêre ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
'rev-deleted-no-diff' => "Vos pouede pas vêre ceta dif perce que yona de les vèrsions est étâye '''suprimâye'''.
-Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+Y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
'rev-suppressed-no-diff' => "Vos pouede pas vêre ceta dif, yona de les vèrsions est étâye '''suprimâye'''.",
'rev-deleted-unhide-diff' => "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.
-Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
+Y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].
Vos pouede adés [$1 vêre cela dif] se vos o voléd.",
'rev-suppressed-unhide-diff' => "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.
-Y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
+Y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].
Vos pouede adés [$1 vêre cela dif] se vos o voléd.",
'rev-deleted-diff-view' => "Yona de les vèrsions de ceta dif est étâye '''suprimâye'''.
-Vos pouede vêre ceta dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
+Vos pouede vêre ceta dif ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].",
'rev-suppressed-diff-view' => "Yona de les vèrsions de ceta dif est étâye '''rèprimâye'''.
-Vos pouede vêre ceta dif ; y pôt avêr més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
+Vos pouede vêre ceta dif ; y pôt avêr més de dètalys sur lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de les rèprèssions].",
'rev-delundel' => 'montrar / cachiér',
'rev-showdeleted' => 'montrar',
'revisiondelete' => 'Suprimar / refâre des vèrsions',
'revdelete-show-file-submit' => 'Ouè',
'revdelete-selected' => "'''{{PLURAL:$2|Vèrsion chouèsia|Vèrsions chouèsies}} de [[:$1]] :'''",
'logdelete-selected' => "'''{{PLURAL:$1|Èvènement du jornal chouèsi|Èvènements du jornal chouèsis}} :'''",
-'revdelete-text' => "'''Les vèrsions et los èvènements suprimâ(ye)s aparètront adés dedens l’historico de la pâge et pués dedens los jornals, mas quârques parties de lor contegnu seront inaccèssibles u publico.'''
+'revdelete-text' => "'''Les vèrsions et los èvènements suprimâ(ye)s aparètront adés dedens l’historico de la pâge et pués sur los jornals, mas quârques parties de lor contegnu seront inaccèssibles u publico.'''
Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cachiê et lo refâre per cela mém’entèrface, du muens que des rèstriccions de ples seyont pas dèfenies.",
'revdelete-confirm' => 'Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
'revdelete-suppress-text' => "La rèprèssion dêt étre empleyêe '''ren que''' dens cetos câs :
'difference-missing-revision' => '{{PLURAL:$2|Na vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.
En g·ènèral cen arreve en siuvent un lim d’una dif dèpassâye de vers na pâge qu’est étâye suprimâye.
-Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
+Vos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
# Search results
'searchresults' => 'Rèsultats de la rechèrche',
'prefs-help-gender' => 'U chouèx : empleyê por acordar en sèxo los mèssâjos de la programeria.
Cel’enformacion serat publica.',
'email' => 'Mèssageria èlèctronica',
-'prefs-help-realname' => 'U chouèx : se vos lo balyéd, serat empleyê por vos atribuar voutres ôvres.',
-'prefs-help-email' => 'L’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
+'prefs-help-realname' => 'L’endicacion du veré nom est u chouèx.
+Se vos chouèsésséd de lo balyér, serat empleyê por vos atribuar voutres ôvres.',
+'prefs-help-email' => 'L’endicacion de l’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
'prefs-help-email-others' => 'Vos porriâd asse-ben chouèsir de lèssiér los ôtros sè veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron identitât.',
'prefs-help-email-required' => 'Un’adrèce èlèctronica est nècèssèra.',
'prefs-info' => 'Enformacions de bâsa',
Por comoditât, lo jornal de les suprèssions et des dèplacements de cela pâge est balyê ce-desot :",
'uploadtext' => "Empleyéd lo formulèro ce-desot por tèlèchargiér des fichiérs.
-Por vêre ou ben rechèrchiér des fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs dedens lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions dedens lo [[Special:Log/delete|jornal de les suprèssions]].
+Por vêre ou ben rechèrchiér des fichiérs tèlèchargiês dês devant, vêde la [[Special:FileList|lista des fichiérs tèlèchargiês]]. Los (re-)tèlèchargements sont asse-ben encartâs sur lo [[Special:Log/upload|jornal des tèlèchargements]], et les suprèssions sur lo [[Special:Log/delete|jornal de les suprèssions]].
Por entrebetar un fichiér dedens na pâge, empleyéd un lim de yona de cetes fôrmes :
* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.jpg]]</nowiki></code>''' por empleyér la vèrsion en plêna largior du fichiér
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por empleyér na figura de 200 pixèls de lârjo dedens na bouèta a gôche avouéc « tèxto dèscriptif » coment dèscripcion
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichiér.png|200px|thumb|left|tèxto dèscriptif]]</nowiki></code>''' por empleyér na figura de 200 pixèls de lârjo dedens na bouèt’a gôche avouéc « tèxto dèscriptif » coment dèscripcion
* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichiér.ogg]]</nowiki></code>''' por liyér tot drêt vers lo fichiér sen lo fâre vêre",
'upload-permitted' => 'Tipos de fichiérs ôtorisâs : $1.',
'upload-preferred' => 'Tipos de fichiérs prèferâs : $1.',
Devriant pletout pouentar vers na pâge que vat avouéc.<br />
Na pâge est trètâye coment na pâge d’homonimia s’emplèye un modèlo liyê a [[MediaWiki:Disambiguationspage]].",
+'pageswithprop' => 'Pâges avouéc na propriètât de pâge',
+'pageswithprop-legend' => 'Pâges avouéc na propriètât de pâge',
+'pageswithprop-text' => 'Ceta pâge liste les pâges qu’emplèyont na propriètât de pâge particuliére.',
+'pageswithprop-prop' => 'Nom de la propriètât :',
+'pageswithprop-submit' => 'Alar trovar',
+
'doubleredirects' => 'Redirèccions dobles',
'doubleredirectstext' => 'Ceta pâge liste les pâges que redirijont vers d’ôtres pâges de redirèccion.
Châque renche contint des lims de vers la premiére et la seconda redirèccion, et pués la ciba de la seconda redirèccion, cen que balye habituèlament la « veré » pâge ciba, de vers laquinta la premiére redirèccion devrêt pouentar.
'log' => 'Jornals',
'all-logs-page' => 'Tôs los jornals publicos',
'alllogstext' => 'Vua combinâye de tôs los jornals disponiblos dessus {{SITENAME}}.
-Vos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom d’utilisator (sensiblo a la câssa) la pâge regardâye (sensibla a la câssa avouéc).',
-'logempty' => 'Niona piéce que corrèspond dedens lo jornal.',
+Vos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom d’utilisator (sensiblo a la câssa) la pâge regardâye (sensibl’a la câssa avouéc).',
+'logempty' => 'Niona piéce que corrèspond sur lo jornal.',
'log-title-wildcard' => 'Chèrchiér entre-mié los titros que començont per cél tèxto',
'showhideselectedlogentries' => 'Montrar / cachiér les entrâs de jornal chouèsies',
mèl. : $PAGEEDITOR_EMAIL
vouiqui : $PAGEEDITOR_WIKI
-Y arat gins d’ôtra notificacion en câs de changements a vegnir, a muens que vos visitâd cela pâge. Vos pouede asse-ben tornar inicialisar los segnalements de notificacion por totes les pâges de voutra lista de survelyence.
+Y arat gins d’ôtra notificacion en câs de changements a vegnir, du muens que vos visiteyâd cela pâge. Vos pouede asse-ben rebetar a zérô los segnalements de notificacion por totes les pâges de voutra lista de siuvu.
Voutron sistèmo de notificacion de {{SITENAME}}
Por changiér la configuracion de notificacion per mèssageria èlèctronica, visitâd
{{canonicalurl:{{#special:Preferences}}}}
-Por changiér la configuracion de voutra lista de survelyence, visitâd
+Por changiér la configuracion de voutra lista de siuvu, visitâd
{{canonicalurl:{{#special:EditWatchlist}}}}
-Por suprimar la pâge de voutra lista de survelyence, visitâd
+Por suprimar la pâge de voutra lista de siuvu, visitâd
$UNWATCHURL
Avis et assistance de ples :
# Delete
'deletepage' => 'Suprimar la pâge',
'confirm' => 'Confirmar',
-'excontent' => 'contegnéve « $1 »',
-'excontentauthor' => 'contegnéve « $1 » (et son solèt contributor ére « [[Special:Contributions/$2|$2]] »)',
-'exbeforeblank' => 'contegnéve devant blanchiment « $1 »',
+'excontent' => 'lo contegnu ére : « $1 »',
+'excontentauthor' => 'lo contegnu ére : « $1 » (et lo solèt contributor ére « [[Special:Contributions/$2|$2]] »)',
+'exbeforeblank' => 'lo contegnu devant blanchiment ére : « $1 »',
'exblank' => 'la pâge ére voueda',
'delete-confirm' => 'Suprimar « $1 »',
'delete-legend' => 'Suprimar',
-'historywarning' => "'''Atencion :''' la pâge que vos éte prèst a suprimar at un historico que contint a pou prés $1 {{PLURAL:$1|vèrsion|vèrsions}} :",
-'confirmdeletetext' => 'Vos éte prèst a suprimar una pâge ou ben un fichiér et pués tot son historico.
-Volyéd confirmar qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos féte cen en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
+'historywarning' => "'''Atencion :''' la pâge que vos éte prèst a suprimar at un historico avouéc a pou prés $1 vèrsion{{PLURAL:$1||s}} :",
+'confirmdeletetext' => 'Vos éte prèst a suprimar na pâge et pués tot lo sin historico.
+Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
'actioncomplete' => 'Accion fêta',
-'actionfailed' => 'L’accion at pas reussia',
-'deletedtext' => '« $1 » at étâ suprimâ.
-Vêde lo $2 por una lista de les novèles suprèssions.',
+'actionfailed' => 'L’accion at pas reussi',
+'deletedtext' => '« $1 » est étâye suprimâye.
+Vêde lo $2 por na lista de les novèles suprèssions.',
'dellogpage' => 'Jornal de les suprèssions',
-'dellogpagetext' => 'Vê-que la lista de les suprèssions les ples novèles.',
+'dellogpagetext' => 'Vê-que na lista de les suprèssions les ples novèles.',
'deletionlog' => 'jornal de les suprèssions',
'reverted' => 'Vèrsion devant rètablia',
'deletecomment' => 'Rêson :',
** Violacion du drêt d’ôtor
** Vandalismo',
'delete-edit-reasonlist' => 'Changiér les rêsons de suprèssion',
-'delete-toobig' => 'Ceta pâge at un historico important, dèpassent $1 vèrsion{{PLURAL:$1||s}}.
-La suprèssion de tâles pâges at étâ limitâ por èvitar des pèrturbacions emprèvues de {{SITENAME}}.',
-'delete-warning-toobig' => 'Ceta pâge at un historico important, dèpassent $1 vèrsion{{PLURAL:$1||s}}.
-La suprimar pôt troblar lo fonccionement de la bâsa de balyês de {{SITENAME}} ;
+'delete-toobig' => 'Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.
+La suprèssion de pâges d’ense est étâye rètrenta por prèvegnir des pèrturbacions emprèvues de {{SITENAME}}.',
+'delete-warning-toobig' => 'Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.
+La suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;
a fâre avouéc prudence.',
# Rollback
'rollbacklink' => 'rèvocar',
'rollbacklinkcount' => 'rèvocar $1 changement{{PLURAL:$1||s}}',
'rollbacklinkcount-morethan' => 'rèvocar més de $1 changement{{PLURAL:$1||s}}',
-'rollbackfailed' => 'La rèvocacion at pas reussia',
-'cantrollback' => 'Empossiblo de rèvocar lo changement ;
+'rollbackfailed' => 'La rèvocacion at pas reussi',
+'cantrollback' => 'Y at pas moyen de rèvocar lo changement ;
lo dèrriér contributor est lo solèt ôtor de ceta pâge.',
-'alreadyrolled' => 'Empossiblo de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|Discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
-quârqu’un d’ôtro at ja changiê ou ben rèvocâ la pâge.
+'alreadyrolled' => 'Y at pas moyen de rèvocar lo dèrriér changement de la pâge « [[:$1]] » fêt per [[User:$2|$2]] ([[User talk:$2|discutar]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
+un ôtro at ja changiê ou ben rèvocâ la pâge.
-Lo dèrriér changement de la pâge at étâ fêt per [[User:$3|$3]] ([[User talk:$3|Discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Lo dèrriér changement de la pâge est étâ fêt per [[User:$3|$3]] ([[User talk:$3|discutar]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Lo rèsumâ de changement ére : « ''$1'' ».",
-'revertpage' => 'Rèvocacion des changements a [[Special:Contributions/$2|$2]] ([[User talk:$2|Discutar]]) de vers la dèrriére vèrsion a [[User:$1|$1]]',
-'revertpage-nouser' => 'Rèvocacion des changements per (nom d’usanciér suprimâ) a la dèrriére vèrsion per [[User:$1|$1]]',
-'rollback-success' => 'Rèvocacion des changements fêts per $1 ;
-rètablissement de la dèrriére vèrsion per $2.',
+'revertpage' => 'Rèvocacion des changements de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutar]]) de vers la dèrriére vèrsion de [[User:$1|$1]]',
+'revertpage-nouser' => 'Rèvocacion des changements de (nom d’utilisator enlevâ) de vers la dèrriére vèrsion de [[User:$1|$1]]',
+'rollback-success' => 'Rèvocacion des changements de $1 ;
+rèstoracion de la dèrriére vèrsion de $2.',
# Edit tokens
-'sessionfailure-title' => 'Èrror de sèance',
+'sessionfailure-title' => 'Falyita de sèance',
'sessionfailure' => 'Voutra sèance de branchement semble avêr des problèmos ;
-cela accion at étâ anulâ en prèvencion d’un piratâjo de sèance.
-Volyéd clicar dessus « Devant », rechargiér la pâge de yô que vos vegnéd, et pués tornar èprovar.',
+cel’accion est étâye anulâye en prèvencion d’un piratâjo de sèance.
+Se vos plét, clicâd dessus « Devant », rechargiéd la pâge de yô que vos vegnéd et pués tornâd èprovar.',
# Protect
'protectlogpage' => 'Jornal de les protèccions',
-'protectlogtext' => 'Vê-que na lista des changements de protèccion de les pâges.
-Vêde la [[Special:ProtectedPages|lista de les pâges protègiêyes]] por la lista de les protèccions que sont ora actives.',
+'protectlogtext' => 'Vê-que na lista des changements de les protèccions de pâges.
+Vêde la [[Special:ProtectedPages|lista de les pâges protègiêes]] por la lista de les protèccions que sont ora actives.',
'protectedarticle' => 'at protègiê « [[$1]] »',
'modifiedarticleprotection' => 'at changiê lo nivél de protèccion de « [[$1]] »',
'unprotectedarticle' => 'at enlevâ la protèccion de « [[$1]] »',
-'movedarticleprotection' => 'at dèplaciê los paramètres de protèccion dês « [[$2]] » vers « [[$1]] »',
-'protect-title' => 'Changiér lo nivél de protèccion por « $1 »',
+'movedarticleprotection' => 'at dèplaciê la configuracion de protèccion dês « [[$2]] » vers « [[$1]] »',
+'protect-title' => 'Changiér lo nivél de protèccion de « $1 »',
'protect-title-notallowed' => 'Vêre lo nivél de protèccion de « $1 »',
-'prot_1movedto2' => 'at renomâ [[$1]] en [[$2]]',
+'prot_1movedto2' => 'at dèplaciê [[$1]] vers [[$2]]',
'protect-badnamespace-title' => 'Èspâço de noms pas protèjâblo',
-'protect-badnamespace-text' => 'Les pâges dens ceti èspâço de noms pôvont pas étre protègiês.',
+'protect-badnamespace-text' => 'Les pâges dedens cet’èspâço de noms pôvont pas étre protègiêes.',
+'protect-norestrictiontypes-text' => 'Cela pâge pôt pas étre protègiêe, y at gins de tipo de rèstriccion disponiblo.',
+'protect-norestrictiontypes-title' => 'Pâge pas protèjâbla',
'protect-legend' => 'Confirmar la protèccion',
'protectcomment' => 'Rêson :',
'protectexpiry' => 'Dâta d’èxpiracion :',
-'protect_expiry_invalid' => 'La dâta d’èxpiracion est envalida.',
-'protect_expiry_old' => 'La dâta d’èxpiracion est ja passâ.',
+'protect_expiry_invalid' => 'La dâta d’èxpiracion est pas justa.',
+'protect_expiry_old' => 'La dâta d’èxpiracion est ja passâye.',
'protect-unchain-permissions' => 'Dèvèrrolyér adés més de chouèx de protèccion',
-'protect-text' => "Vos pouede vêre et changiér lo nivél de protèccion de la pâge '''$1'''.",
-'protect-locked-blocked' => "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ.
+'protect-text' => "Ique vos pouede vêre et changiér lo nivél de protèccion de la pâge '''$1'''.",
+'protect-locked-blocked' => "Vos pouede pas changiér los nivéls de protèccion tant que vos éte blocâ{{GENDER:||ye|(ye)}}.
Vê-que la configuracion d’ora de la pâge '''$1''' :",
-'protect-locked-dblock' => "Los nivéls de protèccion pôvont pas étre changiês perce que la bâsa de balyês est vèrrolyê.
+'protect-locked-dblock' => "Los nivéls de protèccion pôvont pas étre changiês, la bâsa de balyês est vèrrolyêe.
Vê-que la configuracion d’ora de la pâge '''$1''' :",
-'protect-locked-access' => "Vos avéd pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.
+'protect-locked-access' => "Voutron compto at pas los drêts nècèssèros por changiér los nivéls de protèccion de pâges.
Vê-que la configuracion d’ora de la pâge '''$1''' :",
-'protect-cascadeon' => 'Ora, ceta pâge est protègiê perce qu’el est encllua dens {{PLURAL:$1|ceta pâge|cetes pâges}}, {{PLURAL:$1|qu’at étâ protègiê|qu’ont étâ protègiês}} avouéc lo chouèx « Protèccion en cascâda » activâ.
-Vos pouede changiér lo nivél de protèccion de ceta pâge sen que cen afècte la protèccion en cascâda.',
-'protect-default' => 'Ôtorisar tôs los usanciérs',
-'protect-fallback' => 'At fôta de la pèrmission « $1 »',
-'protect-level-autoconfirmed' => 'Blocar los novéls usanciérs et los usanciérs pas encartâs',
-'protect-level-sysop' => 'Solament los administrators',
+'protect-cascadeon' => 'Ora cela pâge-que est protègiêe, el est entrebetâye dedens {{PLURAL:$1|ceta pâge qu’est étâye protègiêe|cetes pâges que sont étâyes protègiêes}} avouéc lo chouèx « protèccion en cascâda » activâ.
+Vos pouede changiér lo nivél de protèccion de cela pâge sen que cen afècte la protèccion en cascâda.',
+'protect-default' => 'Ôtorisar tôs los utilisators',
+'protect-fallback' => 'Ôtorisar ren que los utilisators avouéc lo drêt « $1 »',
+'protect-level-autoconfirmed' => 'Ôtorisar ren que los utilisators ôtoconfirmâs',
+'protect-level-sysop' => 'Ôtorisar ren que los administrators',
'protect-summary-cascade' => 'protèccion en cascâda',
-'protect-expiring' => 'èxpire lo $1 (UTC)',
+'protect-expiring' => 'èxpire lo $2 a $3 (UTC)',
'protect-expiring-local' => 'èxpire lo $1',
'protect-expiry-indefinite' => 'sen fin',
-'protect-cascade' => 'Protège asse-ben les pâges encllues dens ceta (protèccion en cascâda).',
-'protect-cantedit' => 'Vos pouede pas changiér los nivéls de protèccion de ceta pâge perce que vos avéd pas la pèrmission de la changiér.',
+'protect-cascade' => 'Protègiér les pâges entrebetâyes dedens ceta (protèccion en cascâda)',
+'protect-cantedit' => 'Vos pouede pas changiér los nivéls de protèccion de ceta pâge, vos éd pas la pèrmission de la changiér.',
'protect-othertime' => 'Ôtra dâta d’èxpiracion :',
'protect-othertime-op' => 'ôtra dâta d’èxpiracion',
'protect-existing-expiry' => 'Dâta d’èxpiracion ègzistenta : $2 a $3',
'protect-expiry-options' => '1 hora:1 hour,1 jorn:1 day,1 semana:1 week,2 semanes:2 weeks,1 mês:1 month,3 mês:3 months,6 mês:6 months,1 an:1 year,sen fin:infinite',
'restriction-type' => 'Pèrmission :',
'restriction-level' => 'Nivél de rèstriccion :',
-'minimum-size' => 'Talye la ples petiôta',
-'maximum-size' => 'Talye la ples granta :',
+'minimum-size' => 'Talye minimon',
+'maximum-size' => 'Talye maximon :',
'pagesize' => '(octèts)',
# Restrictions (nouns)
'restriction-edit' => 'Changiér',
-'restriction-move' => 'Renomar',
+'restriction-move' => 'Dèplaciér',
'restriction-create' => 'Fâre',
'restriction-upload' => 'Tèlèchargiér',
# Restriction levels
-'restriction-level-sysop' => 'Protèccion complèta',
-'restriction-level-autoconfirmed' => 'Mié-protèccion',
-'restriction-level-all' => 'Tôs los nivéls',
+'restriction-level-sysop' => 'protèccion complèta',
+'restriction-level-autoconfirmed' => 'mié-protèccion',
+'restriction-level-all' => 'tôs los nivéls',
# Undelete
'undelete' => 'Vêre les pâges suprimâyes',
'undeletepage' => 'Vêre et refâre des pâges suprimâyes',
-'undeletepagetitle' => "'''Ceta lista contint des vèrsions suprimâs de [[:$1|$1]].'''",
+'undeletepagetitle' => "'''Ceta lista contint des vèrsions suprimâyes de [[:$1|$1]].'''",
'viewdeletedpage' => 'Vêre les pâges suprimâyes',
'undeletepagetext' => '{{PLURAL:$1|Ceta pâge at étâ suprimâ et sè trove|Cetes pâges ont étâ suprimâs et sè trovont}} dens les arch·ives, de yô que pô{{PLURAL:$1||von}}t adés étre refêt{{PLURAL:$1|a|es}}.
Les arch·ives pôvont étre èfaciês règuliérement.',
'eauthentsent' => 'En bestääsiings-E-mail wörd önj jü önjjääwen adräs sånd.
Iir en E-mail foon oudere brükere ouer jü E-mail-funksjoon emfångd wårde koon, mötj jü adräs än har wörklike tuhiirihäid tu dåtheer brükerkonto jarst bestääsied wårde. Wees sü gödj än befülie da haanewisinge önj di bestääsiings-E-mail.',
-'throttled-mailpassword' => 'Deer wörd önj da leeste {{PLURAL:$1|stün|$1 stüne}} ål en nai pååsuurd önjfrååged. Am en misbrük foon jüdeer funksjoon tu ferhanren, koon bloot {{PLURAL:$1|iinjsen pro stün|åle $1 stüne}} en nai pååsuurd önjfrååged wårde.',
+'throttled-mailpassword' => 'Deer wörd önj da leeste {{PLURAL:$1|stün|$1 stüne}} ål en nai pååsuurd önjfrååged. Am en masbrük foon jüdeer funksjoon tu ferhanren, koon bloot {{PLURAL:$1|iinjsen pro stün|åle $1 stüne}} en nai pååsuurd önjfrååged wårde.',
'mailerror' => 'Fäägel bai dåt siinjen foon e E-mail: $1',
'acct_creation_throttle_hit' => 'Besäkere foon jüheer Wiki, da din IP-adräse brüke, heewe önj e leeste däi {{PLURAL:$1|1 brükerkonto|$1 brükerkontos}} mååged, wat jü maksimool tuleet tål önj jüdeer tidperioode as.
# Special:PasswordReset
'passwordreset' => 'Paasuurd tubääg seete',
-'passwordreset-text' => 'Fal detheer formulaar ütj, an do woort di en e-mail tusjüürd mä henwiiser tu din brükerkonto-uunmeldang.',
+'passwordreset-text' => 'Fal detheer formulaar ütj, am din paaswurd turag tu saaten.',
'passwordreset-legend' => 'Paasuurd tubääg seete',
'passwordreset-disabled' => 'Dü koost din paasuurd aw jüdeer wiki ai tubääg seete',
'passwordreset-pretext' => '{{PLURAL:$1||Du ian faan jo dooten oner iin}}',
$2
-{{PLURAL:$3|Detheer tidjwis paaswurd lääpt|Joheer tidjwis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf.
+{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf.
Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää an dü din ual paaswurd käänst, do säärst dü niks widjer onernem. Melde di ianfach widjerhen mä din ual paaswurd uun.',
'passwordreset-emailtext-user' => 'Di brüker $1 üüb {{SITENAME}} hää am brükerinformatsjuunen för {{SITENAME}} uunfraaget ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-Adres ferbünjen:
$2
-{{PLURAL:$3|Detheer tidjwis paaswurd lääpt|Joheer tidjwis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.',
+{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.',
'passwordreset-emailelement' => 'Brükernoome: $1
Tidwis paasuurd: $2',
'passwordreset-emailsent' => 'Diar as en E-Mail tu di onerwais.',
'listgrouprights-addgroup-all' => 'Kin brûkers oan alle groepen tafoegje',
'listgrouprights-removegroup-all' => 'Kin brûkers út alle groepen fuorthelje',
-# E-mail user
+# Email user
'mailnologin' => 'Gjin adres beskikber',
'mailnologintext' => 'Jo moatte [[Special:UserLogin|oanmelden]] wêze, en in jildich e-postadres [[Special:Preferences|ynsteld]] hawwe, om oan oare meidoggers e-post stjoere te kinnen.',
'emailuser' => 'Skriuw meidogger',
'namespacesall' => 'alles',
'monthsall' => 'alle',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Befêstigjen netpostadres',
'confirmemail_text' => '{{SITENAME}} freget dat jo jo netpostadres befêstigje eart jo hjir netpost brûke. Brûk de knop hjirûnder om josels in befêstigingskoade ta te stjoeren op it adres dat jo opjûn hawwe. Iepenje de koade dan yn jo blêder om te befêstigjen dat jo netpostadres jildich is.',
'confirmemail_send' => 'Stjoer in befêstigingskoade',
'usernamehasherror' => 'Ní cheadaítear hais a úsáid in ainm úsáideora',
'loginlanguagelabel' => 'Teanga: $1',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Earráid anaithnid i bhfeidhm mail() de chuid PHP',
# Change password dialog
'listgrouprights-rights' => 'Cearta',
'listgrouprights-members' => '(liostaigh baill)',
-# E-mail user
+# Email user
'mailnologin' => 'Níl aon seoladh maith ann',
'mailnologintext' => 'Ní mór duit bheith [[Special:UserLogin|logáilte isteach]]
agus bheith le seoladh ríomhphoist bhailí i do chuid [[Special:Preferences|sainroghanna]]
'monthsall' => 'gach mí',
'limitall' => 'iad uile',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Deimhnigh do ríomhsheoladh',
'confirmemail_text' => 'Tá sé de dhíth an an vicí seo do ríomhsheoladh a bhailíochtú sula n-úsáideann tú na gnéithe ríomhphoist. Brúigh an cnaipe seo thíos chun teachtaireacht deimhnithe a sheoladh chuig do chuntas ríomhphoist. Beidh nasc ann sa chomhad ina mbeidh cód áirithe; lódáil an nasc i do bhrabhsálaí chun deimhniú go bhfuil do ríomhsheoladh bailí.',
'confirmemail_send' => 'Seol cód deimhnithe',
# Special:ListGroupRights
'listgrouprights-members' => '(成员名单)',
-# E-mail user
+# Email user
'mailnologin' => '冇email地址',
'mailnologintext' => '倷要[[Special:UserLogin|登入]] 起同到倷𠮶[[Special:Preferences|参数设置]] 有只有效𠮶email才发得正email到别𠮶用户。',
'emailuser' => '发email到个只用户',
'namespacesall' => '全部',
'monthsall' => '全部',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => '确认email地址',
'confirmemail_noemail' => '倷冇到倷𠮶[[Special:Preferences|用户设置]]设正一只有效𠮶电子邮件地址。',
'confirmemail_text' => '个只网站要求倷用email功能之前确认下倷𠮶email地址。按吖下底𠮶键来发封确认邮件到倷𠮶邮箱。佢会附带一只代码链接;请到倷𠮶浏览器打开个只链接来确认倷𠮶email地址系有效𠮶。',
# Special:ListGroupRights
'listgrouprights-members' => '(成員名單)',
-# E-mail user
+# Email user
'mailnologin' => '冇email地址',
'mailnologintext' => '倷要[[Special:UserLogin|登入]] 起同到倷嗰[[Special:Preferences|參數設置]] 有隻有效嗰email才發得正email到別嗰用戶。',
'emailuser' => '發email到箇隻用戶',
'namespacesall' => '全部',
'monthsall' => '全部',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => '確認email地址',
'confirmemail_noemail' => '倷冇到倷嗰[[Special:Preferences|用戶設置]]設正一隻有效嗰電子郵件地址。',
'confirmemail_text' => '箇隻網站要求倷用email功能之前確認下倷嗰email地址。按吖下底嗰鍵來發封確認郵件到倷嗰郵箱。佢會附帶一隻代碼連結;請到倷嗰瀏覽器打開箇隻連結來確認倷嗰email地址係有效嗰。',
Unha páxina trátase como páxina de homónimos cando nela se usa un modelo que está ligado desde [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Páxinas cunha propiedade de páxina',
+'pageswithprop-legend' => 'Páxinas cunha propiedade de páxina',
'pageswithprop-text' => 'Esta páxina lista aquelas páxinas que utilizan unha propiedade de páxina determinada.',
'pageswithprop-prop' => 'Nome da propiedade:',
+'pageswithprop-submit' => 'Mostrar',
'doubleredirects' => 'Redireccións dobres',
'doubleredirectstext' => 'Esta lista contén as páxinas que redirixen cara a outras páxinas de redirección.
'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
-# Unknown messages
-'pageswithprop-legend' => 'Páxinas cunha propiedade de páxina',
-'pageswithprop-submit' => 'Mostrar',
+# Image rotation
+'rotate-comment' => 'Imaxe rotada $1 {{PLURAL:$1|grao|graos}} en sentido horario',
+
);
'listgrouprights-addgroup-self-all' => 'Προστιθέναι ἁπάσας τὰς ὁμάδας τῷ λογισμῷ ἐμοῦ τοῦ ἰδίου',
'listgrouprights-removegroup-self-all' => 'Ἀφαιρεῖν ἁπάσας τὰς ὁμάδας ἀπὸ τὸν λογισμὸν ἐμοῦ τοῦ ἰδίου',
-# E-mail user
+# Email user
'mailnologin' => 'Οὐδεμία διεύθυνσις παραλήπτου',
'emailuser' => 'Ἠλεκτρονικὴν ἐπιστολὴν τῷδε τῷ χρωμένῳ πέμπειν',
'emailpage' => 'Χρώμενος ἠλ.-ταχυδρομείου',
'monthsall' => 'ἅπαντες',
'limitall' => 'ἅπασαι',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Ἐπιβεβαίωσον διεύθυνσιν ἠλ-ταχυδρομείου',
'confirmemail_send' => 'Ταχυδρομήσειν κώδικα ἐπιβεβαιώσεως',
'confirmemail_sent' => 'Ἐπιβεβαίωσις διευθύνσεως ἠλ.-ταχυδρομείου ἐστάλη.',
'loginlanguagelabel' => 'Sproch: $1',
'suspicious-userlogout' => 'Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Nit bekannte Fähler mit dr Funktion mail() vu PHP',
'user-mail-no-addy' => 'Es isch versuecht worde e E-Mail ohni Angab vunere E-Mail-Adräss z verschigge.',
'prefs-displaywatchlist' => 'Aazeigoptione',
'prefs-diffs' => 'Versionsverglych',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Siht giltig uus',
'email-address-validity-invalid' => 'S brucht e giltigi Adräss!',
'listgrouprights-addgroup-self-all' => 'Cha alli Gruppe zum eigene Benutzerkonto zuefiege',
'listgrouprights-removegroup-self-all' => 'Cha alli Gruppe us em eigene Benutzerkonto useneh',
-# E-mail user
+# Email user
'mailnologin' => 'Du bisch nid aagmäldet oder hesch keis Mail aaggä',
'mailnologintext' => 'Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.',
'emailuser' => 'Es Mail schrybe',
'monthsall' => 'alli',
'limitall' => 'alli',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Bstätigung vo Ihre E-Poscht-Adräss',
'confirmemail_noemail' => 'Du hesch in dyne [[Special:Preferences|persönliche Ystellige]] e kei E-Mail-Adress ygää.',
'confirmemail_text' => 'Dermit du di erwyterete Mailfunktione chasch bruuche, muesch du die E-Mail-Adrässe, wo du hesch aaggä, la bestätige. Klick ufe Chnopf unte; das schickt dir es Mail. I däm Mail isch e Link; we du däm Link folgsch, de tuesch dadermit bestätige, das die E-Mail-Adrässe dyni isch.',
'loginlanguagelabel' => 'ભાષા: $1',
'suspicious-userlogout' => 'લોગ આઉટ કરવાની તમારી વિનંતિ પૂરી ન કરી શકાઇ. એમ લાગે છે કે તેને તૃટિ પામેલ બ્રાઉઝર કે પ્રોક્સી દ્વારા મોકલાઈ હતી.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ',
'user-mail-no-addy' => 'ઈ મેલ એડ્રસ વગર ઈ મેલ મોકલવા પ્રયત્ન કરેલ.',
'prefs-displaywatchlist' => 'પ્રદર્શન વિકલ્પો',
'prefs-diffs' => 'ફરક',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ઈ-મેલ યોગ્ય લાગે છે.',
'email-address-validity-invalid' => 'પ્રમાણભૂત શૈલિમાં ઈ-મેલ એડ્રેસ લખો',
'listgrouprights-addgroup-self-all' => 'દરેક જૂથને તેમના પોતાના ખાતા માં ઉમેરો',
'listgrouprights-removegroup-self-all' => 'બધા જૂથને તેમના પોતાના ખાતામાંથી હટાવો',
-# E-mail user
+# Email user
'mailnologin' => 'મેળવનારનું સરનામું નથી',
'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ',
'emailuser' => 'સભ્યને ઇ-મેલ કરો',
'monthsall' => 'બધા',
'limitall' => 'બધા',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો',
'confirmemail_noemail' => 'તમારા [[Special:Preferences|user preferences]] માં વૈધ ઈ-મેલ સરનામું નથી.',
'confirmemail_text' => '{{SITENAME}} માં તમારા ઇ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જરૂરી છે.
# Special:ListGroupRights
'listgrouprights-members' => '(sṳ̀n-yèn chhîn-tân)',
-# E-mail user
+# Email user
'mailnologin' => 'Mò email thi-tiám',
'mailnologintext' => 'Ngì pit-sî siên [[Special:UserLogin|tên-ngi̍p]] pin-chhai [[Special:Preferences|chhâm-su sat-chṳ]] chûng yû yit-ke yû-háu ke e-mail thi-tiám chhòi-nèn email khì-thâ yung-fu.',
'emailuser' => 'Email ke-yung-fu',
'namespacesall' => 'Chhiòn-phu',
'monthsall' => 'chhiòn-phu',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Khok-ngin email thi-tiám',
'confirmemail_noemail' => 'Ngì mò-yû chhai ngì-ke [[Special:Preferences|yung-fu sat-thin]] sû-ngi̍p yit-ke yû-háu ke email thi-tiám.',
'confirmemail_text' => 'Chhṳ́ mióng-chham yêu-khiù ngì chhai sṳ́-yung sin-siông kûng-nèn chṳ̂-chhièn ngiam-chṳn ngì-ke sin-siông thi-tiám. Tiám-kit yî-ha on-néu chhṳ̍t-hiong ngì-ke sin-siông fat-sung yit-fûng khok-ngin sin-siông. Ke-sin-siông pâu-hàm yû yit-hòng me̍t-me̍t lièn-kiet; chhiáng chhai ngì-ke hi-khí chûng kâ-chai chhṳ́ lièn-kiet yî khok-ngin ngì-ke sin-siông thi-tiám he yû-háu ke.',
'blocked-mailpassword' => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.',
'eauthentsent' => 'דוא"ל אימות נשלח לכתובת הדוא"ל שקבעת.
לפני שדברי דוא"ל אחרים יישלחו לחשבון הזה, יהיה עליך לפעול לפי ההוראות בדוא"ל, כדי לאשר שהחשבון אכן שייך לך.',
-'throttled-mailpassword' => '×\9b×\91ר × ×¢×©×\94 ש×\99×\9e×\95ש ×\91×\90פשר×\95ת ש×\97×\96×\95ר הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.
-כדי למנוע ניצול לרעה, יכול להישלח רק דואר אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.',
+'throttled-mailpassword' => '×\9b×\91ר × ×©×\9c×\97 ×\93×\95×\90"×\9c ×\9c×\90×\99פ×\95ס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.
+כדי למנוע ניצול לרעה, יכול להישלח רק דוא"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.',
'mailerror' => 'שגיאה בשליחת דואר: $1',
'acct_creation_throttle_hit' => 'מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.
לפיכך, מבקרים דרך כתובת ה־IP הזו לא יכולים ליצור חשבונות נוספים ברגע זה.',
# Special:PasswordReset
'passwordreset' => 'איפוס סיסמה',
-'passwordreset-text' => '×\9e×\9c×\90×\95 ×\98×\95פס ×\96×\94 ×\9b×\93×\99 ×\9cק×\91×\9c ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\95×\91×\95 ת×\96×\9b×\95רת ש×\9c פר×\98×\99 ×\94×\97ש×\91×\95×\9f.',
+'passwordreset-text' => '×\9e×\9c×\90×\95 ×\98×\95פס ×\96×\94 ×\9b×\93×\99 ×\9c×\90פס ×\90ת ×\94ס×\99ס×\9e×\94.',
'passwordreset-legend' => 'איפוס סיסמה',
'passwordreset-disabled' => 'איפוסי סיסמה בוטלו באתר ויקי זה.',
'passwordreset-pretext' => '{{PLURAL:$1||הקלידו אחד מפריטי המידע למטה}}',
'passwordreset-capture-help' => 'אם תסמנו תיבה זו, הדואר האלקטרוני (יחד עם הסיסמה הזמנית) יוצג לכם במקביל לשליחתו למשתמש.',
'passwordreset-email' => 'כתובת דוא"ל:',
'passwordreset-emailtitle' => 'פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => '×\9e×\99ש×\94×\95 (×\9b×\9b×\9c ×\94× ×¨×\90×\94 ×\90ת×\9d, ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\9eספר $1) ×\91×\99קש ת×\96×\9b×\95רת ש×\9c פר×\98×\99
-×\94×\97ש×\91×\95×\9f שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
+'passwordreset-emailtext-ip' => '×\9e×\99ש×\94×\95 (×\9b×\9b×\9c ×\94× ×¨×\90×\94 ×\90ת×\9d, ×\9e×\9bת×\95×\91ת ×\94Ö¾IP ×\9eספר $1) ×\91×\99קש ×\90×\99פ×\95ס ש×\9c
+×\94ס×\99ס×\9e×\94 שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
שייכים לכתובת הדואר האלקטרוני הזו:
$2
עליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם
המקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה
הישנה.',
-'passwordreset-emailtext-user' => 'המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש תזכורת של פרטי
-החשבון שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
-שייכים לכתובת הדואר האלקטרוני הזו:
+'passwordreset-emailtext-user' => 'המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}
+($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}} שייכים לכתובת הדואר האלקטרוני הזו:
$2
הישנה.',
'passwordreset-emailelement' => 'שם משתמש: $1
סיסמה זמנית: $2',
-'passwordreset-emailsent' => '× ×©×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\9d ת×\96×\9b×\95רת.',
-'passwordreset-emailsent-capture' => '× ×©×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\9d ת×\96×\9b×\95רת, והוא מוצג להלן.',
-'passwordreset-emailerror-capture' => '× ×\95צר ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\9d ת×\96×\9b×\95רת, והוא מוצג להלן, אך שליחתו למשתמש נכשלה: $1',
+'passwordreset-emailsent' => '× ×©×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94.',
+'passwordreset-emailsent-capture' => '× ×©×\9c×\97 ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94, והוא מוצג להלן.',
+'passwordreset-emailerror-capture' => '× ×\95צר ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94, והוא מוצג להלן, אך שליחתו למשתמש נכשלה: $1',
# Special:ChangeEmail
'changeemail' => 'שינוי כתובת דוא"ל',
דף נחשב לדף פירושונים אם הוא משתמש בתבנית המקושרת מהדף [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'דפים עם מאפיין דף',
+'pageswithprop-legend' => 'דפים עם מאפיין דף',
'pageswithprop-text' => 'בדף זה מופיעה רשימת דפים שמשתמשים במאפיין דף מסוים.',
'pageswithprop-prop' => 'שם המאפיין:',
+'pageswithprop-submit' => 'הצגה',
'doubleredirects' => 'הפניות כפולות',
'doubleredirectstext' => 'בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.
'sqlite-no-fts' => '$1 ללא תמיכה בחיפוש בטקסט מלא',
# New logging system
-'logentry-delete-delete' => '$1 מחק את הדף $3',
-'logentry-delete-restore' => '$1 שחזר את הדף $3',
-'logentry-delete-event' => '$1 שינה את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
-'logentry-delete-revision' => '$1 שינה את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
-'logentry-delete-event-legacy' => '$1 שינה את מצב התצוגה של פעולות יומן של $3',
-'logentry-delete-revision-legacy' => '$1 שינה את מצב התצוגה של גרסאות בדף $3',
-'logentry-suppress-delete' => '$1 הסתיר לחלוטין את הדף $3',
-'logentry-suppress-event' => '$1 שינה בסודיות את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
-'logentry-suppress-revision' => '$1 שינה בסודיות את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
-'logentry-suppress-event-legacy' => '$1 שינה בסודיות את מצב התצוגה של פעולות יומן של $3',
-'logentry-suppress-revision-legacy' => '$1 שינה בסודיות את מצב התצוגה של גרסאות של הדף $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|מחק|מחקה}} את הדף $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של פעולות יומן של $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של גרסאות בדף $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|הסתיר|הסתירה}} לחלוטין את הדף $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} של הדף $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של פעולות יומן של $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של גרסאות של הדף $3',
'revdelete-content-hid' => 'התוכן הוסתר',
'revdelete-summary-hid' => 'תקציר העריכה הוסתר',
'revdelete-uname-hid' => 'שם המשתמש הוסתר',
'revdelete-uname-unhid' => 'הסתרת שם המשתמש בוטלה',
'revdelete-restricted' => 'נוספו הגבלות למפעילי מערכת',
'revdelete-unrestricted' => 'הוסרו הגבלות ממפעילי מערכת',
-'logentry-move-move' => '$1 העביר את הדף $3 ל$4',
-'logentry-move-move-noredirect' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה',
-'logentry-move-move_redir' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה',
-'logentry-move-move_redir-noredirect' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה',
-'logentry-patrol-patrol' => '$1 סימן את הגרסה $4 בדף $3 כבדוקה',
-'logentry-patrol-patrol-auto' => '$1 סימן אוטומטית את הגרסה $4 בדף $3 כבדוקה',
-'logentry-newusers-newusers' => 'חשבון המשתמש $1 נוצר',
-'logentry-newusers-create' => 'חשבון המשתמש $1 נוצר',
+'logentry-move-move' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל$4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|סימן|סימנה}} את הגרסה $4 בדף $3 כבדוקה',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|סימן|סימנה}} אוטומטית את הגרסה $4 בדף $3 כבדוקה',
+'logentry-newusers-newusers' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}}',
+'logentry-newusers-create' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}}',
'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
'logentry-newusers-byemail' => 'חשבון המשתמש $3 נוצר על ידי $1 והסיסמה נשלחה בדוא"ל',
-'logentry-newusers-autocreate' => 'חשבון המשתמש $1 נוצר אוטומטית',
-'logentry-rights-rights' => '$1 שינה את ההרשאות של $3 מ$4 ל$5',
-'logentry-rights-rights-legacy' => '$1 שינה את ההרשאות של $3',
+'logentry-newusers-autocreate' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית',
+'logentry-rights-rights' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ$4 ל$5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3',
'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
'rightsnone' => '(כלום)',
'duration-centuries' => '{{PLURAL:$1|מאה שנה|מאתיים שנה|$1 מאות שנים}}',
'duration-millennia' => '{{PLURAL:$1|אלף שנה|אלפיים שנה|$1 אלפי שנים}}',
-# Unknown messages
-'pageswithprop-legend' => 'דפים עם מאפיין דף',
-'pageswithprop-submit' => 'הצגה',
+# Image rotation
+'rotate-comment' => 'התמונה סובבה {{PLURAL:$1|במעלה אחת|ב֫־$1 מעלות}} בכיוון השעון',
+
);
'loginlanguagelabel' => 'भाषा: $1',
'suspicious-userlogout' => 'अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP के mail() फ़ंक्शन में अज्ञात त्रुटि हुई।',
'user-mail-no-addy' => 'ई-मेल पते के बिना ई-मेल भेजने की कोशिश की।',
'prefs-displaywatchlist' => 'प्रदर्शन विकल्प',
'prefs-diffs' => 'अंतर',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ई-मेल पता वैध प्रतीत होता है',
'email-address-validity-invalid' => 'एक वैध ई-मेल पता प्रविष्ट करें',
'listgrouprights-addgroup-self-all' => 'अपने खाते में सभी समूह शामिल करें',
'listgrouprights-removegroup-self-all' => 'अपने खाते से सभी समूह हटाएँ',
-# E-mail user
+# Email user
'mailnologin' => 'पाने वाले का एड्रेस दिया नहीं',
'mailnologintext' => 'अन्य सदस्यों को इ-मेल भेजने के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है और आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना आवश्यक है।',
'emailuser' => 'इस सदस्य को ई-मेल भेजें',
'monthsall' => 'सभी',
'limitall' => 'सभी',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ई-मेल प्रमाणित करे',
'confirmemail_noemail' => 'आपके [[Special:Preferences|सदस्य वरीयतायें]]में वैध इ-मेल एड्रेस नहीं दिया हुआ हैं।',
'confirmemail_text' => '{{SITENAME}} पर उपलब्ध इ-मेल सुविधाओंका लाभ उठाने के लिये प्रमाणित एड्रेस होना जरूरी हैं।
'loginlanguagelabel' => 'Bhasa: $1',
'suspicious-userlogout' => 'Aap ke log out kare ke maang ke na kar dewa gais hae kaahe ki ii janaawe hae ki ii maang ke ek tuuta browser nai to caching proxy bhejis hae.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP ke mail() function me koi anjaan kharaabi hae',
'user-mail-no-addy' => 'Bina e-mail address rahe pe bhi e-mail bheje ke kosis karaa gais hae.',
'prefs-displaywatchlist' => 'Choice dekhao',
'prefs-diffs' => 'Farka',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mail address kanuni hae',
'email-address-validity-invalid' => 'Ek kanuni e-mail ke likho',
'listgrouprights-addgroup-self-all' => 'Sab group ke aapan account me jorre saktaa hai',
'listgrouprights-removegroup-self-all' => 'Sab group ke aapan account se hatae saktaa hai',
-# E-mail user
+# Email user
'mailnologin' => 'Koi bheje waala address nai hai',
'mailnologintext' => 'Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]] me thik e-mail hoew ke chaahi.',
'emailuser' => 'Ii user ke E-mail karo',
'monthsall' => 'sab',
'limitall' => 'sab',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-mail address ke pakka karo',
# Delete conflict
'blocked-mailpassword' => 'Twoja IP-adresa je přećiwo wobdźěłowanju zablokowana, a tohodla njeje dowolene, funkciju za wobnowjenje hesłow wužiwać, zo by znjewužiwanju zadźěwało.',
'eauthentsent' => 'Wobkrućenska e-mejlka bu na naspomnjenu e-mejlowu adresu pósłana.
Prjedy hač so druha e-mejlka na konto pósćele, dyrbiš so po instrukcijach w e-mejlce měć, zo by wobkrućił, zo konto je woprawdźe twoje.',
-'throttled-mailpassword' => 'Bu hižo nowe hesło za {{PLURAL:$1|poslednju hodźinu|poslednjej $1 hodźinje|poslednje $1 hodźiny|poslednich $1 hodźin}} pósłane. Zo by znjewužiwanju zadźěwało, so jenož jedne hesło na {{PLURAL:$1|hodźinu|$1 hodźinje|$1 hodźiny|$1 hodźin}} pósćele.',
+'throttled-mailpassword' => 'E-mejl za anulowanje hesło je so za {{PLURAL:$1|poslednju hodźinu|poslednjej $1 hodźinje|poslednje $1 hodźiny|poslednich $1 hodźin}} pósłała. Zo by znjewužiwanju zadźěwało, so jenož jedna e-mejl za anulowanje hesła na {{PLURAL:$1|hodźinu|$1 hodźinje|$1 hodźiny|$1 hodźin}} pósćele.',
'mailerror' => 'Zmylk při słanju e-mejlki: $1',
'acct_creation_throttle_hit' => 'Wopytowarjo tutoho wikija, kotřiž twoju IP-adresu wužiwaja, su {{PLURAL:$1|1 konto|$1 kontaj|$1 konty|$1 kontow}} posledni dźeń wutworił, štož je maksimalna ličba za tutu periodu. Wopytowarjo, kotřiž tutu IP-adresu wužiwaja, njemóža tuchwilu dalše konta wutworić.',
'emailauthenticated' => 'Twoja e-mejlowa adresa bu $2 $3 hodź. wobkrućena.',
# Special:PasswordReset
'passwordreset' => 'Hesło wróćo stajić',
-'passwordreset-text' => 'Wupjelń tutón formular, zo by dopomnjensku e-mejl wo swojich kontowych podrobnosćach dóstał.',
+'passwordreset-text' => 'Wupjelń tutón formular, zo by swoje hesło anulował.',
'passwordreset-legend' => 'Hesło wróćo stajić',
'passwordreset-disabled' => 'Wróćostajenje hesłow je so na tutym wikiju znjemóžniło.',
'passwordreset-pretext' => '{{PLURAL:$1||Zapodaj deleka jedne ze slědowacych datowych podaćow}}',
'passwordreset-capture-help' => 'Jeli nakřižuješ tutón kašćik, budźe so e-mejlka z nachwilnym hesło pokazować a tež wužiwarjej pósłać.',
'passwordreset-email' => 'E-mejlowa adresa:',
'passwordreset-emailtitle' => 'Kontowe podrobnosće na {{GRAMMAR:lokatiw|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Něchtó (najskerje ty, z IP-adresu $1) je dopomnjenku na twoje kontowe podrobnosće za {{SITENAME}} požadał ($4). {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane|zwjazane}}:
+'passwordreset-emailtext-ip' => 'Něchtó (najskerje ty, z IP-adresu $1) je anulowanje hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4). {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:
$2
-{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
Ty měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.',
-'passwordreset-emailtext-user' => 'Wužiwar $1 je dopomnjenku na twoje kontowe podrobnosće za {{SITENAME}} požadał ($4). {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane|zwjazane}}:
+'passwordreset-emailtext-user' => 'Wužiwar $1 na {{GRAMMAR:lokatiw|{{SITENAME}}}} je anulowanje twojeho hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4). {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:
$2
-{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
+{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.
Ty měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.',
'passwordreset-emailelement' => 'Wužiwarske mjeno: $1
Nachwilne hesło: $2',
-'passwordreset-emailsent' => 'Wopomnjenska e-mejlka je so pósłała.',
-'passwordreset-emailsent-capture' => 'Deleka pokazana dopomnjenska e-mejl je so wotpósłała.',
-'passwordreset-emailerror-capture' => 'Deleka pokazana dopomnjenska e-mejl je so wutworiła, ale słanje wužiwarjej je so njeporadźiło: $1',
+'passwordreset-emailsent' => 'E-mejl za anulowanje hesło je so pósłała.',
+'passwordreset-emailsent-capture' => 'E-mejl za anulowanje hesła je so pósłała, kotraž so deleka pokazuje.',
+'passwordreset-emailerror-capture' => 'E-mejl za anulowanje hesła je so wutworiła, kotraž so deleka pokazuje, ale słanje wužiwarjej je so njeporadźiło: $1',
# Special:ChangeEmail
'changeemail' => 'E-mejlowu adresu změnić',
'disambiguations-text' => "Slědowace strony wobsahuja znajmjeńša jedyn wotkaz k stronje '''rozjasnjenja wjacezmyslnosće'''. Měli město toho na poprawnu stronu wotkazać.<br />Maja stronu za stronu rozjasnjenja wjacezmyslnosće, jeli předłohu wužiwa, na kotruž so wot [[MediaWiki:Disambiguationspage]] wotkazuje.",
'pageswithprop' => 'Strony z kajkosću strony',
+'pageswithprop-legend' => 'Strony z kajkosću strony',
'pageswithprop-text' => 'Tuta strona nalistuje strony, kotrež wěstu kajkosć strony wužiwaja.',
'pageswithprop-prop' => 'Mjeno kajkosće:',
+'pageswithprop-submit' => 'Wotpósłać',
'doubleredirects' => 'Dwójne daleposrědkowanja',
'doubleredirectstext' => 'Tuta strona nalistuje strony, kotrež k druhim daleposrědkowanskim stronam dale posrědkuja.
'sqlite-no-fts' => '$1 połnotekstowe pytanje njepodpěruje',
# New logging system
-'logentry-delete-delete' => '$1 je stronu $3 zhašał',
-'logentry-delete-restore' => '$1 je stronu $3 wobnowił',
-'logentry-delete-event' => '$1 změni widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-delete-revision' => '$1 změni widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow|$5 wersijow|$5 wersijow}} na $3: $4',
-'logentry-delete-event-legacy' => '$1 změni widźomnosć protokolowych zapiskow na $3',
-'logentry-delete-revision-legacy' => '$1 změni widźomnosć wersijow na stronje $3',
-'logentry-suppress-delete' => '$1 je stronu $3 potłóčił',
-'logentry-suppress-event' => '$1 změni skradźu widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow|$5 protokolowych zapiskow}} na $3: $4',
-'logentry-suppress-revision' => '$1 změni skradźu widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow|$5 wersijow|$5 wersijow}} na stronje $3: $4',
-'logentry-suppress-event-legacy' => '$1 změni skradźu widźomnosć protokolowych zapiskow na $3',
-'logentry-suppress-revision-legacy' => '$1 změni skradźu widźomnosć wersijow na stronje $3',
+'logentry-delete-delete' => '$1 je stronu $3 {{GENDER:$1|zhašał|zhašała}}',
+'logentry-delete-restore' => '$1 je stronu $3 {{GENDER:$1wobnowił|wobnowiła}}',
+'logentry-delete-event' => '$1 je widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow}} na $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-delete-revision' => '$1 je widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow}} na $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-delete-event-legacy' => '$1 je widźomnosć protokolowych zapiskow na $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-delete-revision-legacy' => '$1 je widźomnosć wersijow na stronje $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-suppress-delete' => '$1 je stronu $3 {{GENDER:$2|potłóčił|potłóčiła}}',
+'logentry-suppress-event' => '$1 je skradźu widźomnosć {{PLURAL:$5|protokoloweho zapiska|$5 protokoloweju zapiskow|$5 protokolowych zapiskow}} na $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-suppress-revision' => '$1 je skradźu widźomnosć {{PLURAL:$5|jedneje wersije|$5 wersijow}} na stronje $3 {{GENDER:$2|změnił|změniła}}: $4',
+'logentry-suppress-event-legacy' => '$1 je skradźu widźomnosć protokolowych zapiskow na $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-suppress-revision-legacy' => '$1 je skradźu widźomnosć wersijow na stronje $3 {{GENDER:$2|změnił|změniła}}',
'revdelete-content-hid' => 'wobsah schowany',
'revdelete-summary-hid' => 'Zjeće schowane',
'revdelete-uname-hid' => 'wužiwarske mjeno schowane',
'revdelete-uname-unhid' => 'wužiwarske mjeno widźomne',
'revdelete-restricted' => 'na administratorow nałožene wobmjezowanja',
'revdelete-unrestricted' => 'Wobmjezowanja za administratorow wotstronjene',
-'logentry-move-move' => '$1 je stronu $3 do $4 přesunył',
-'logentry-move-move-noredirect' => '$1 přesuny stronu $3 do $4, bjeztoho zo by dalesposrědkowanje wutworił',
-'logentry-move-move_redir' => '$1 přesuny stronu $3 do $4 přepisujo dalesposrědkowanje',
-'logentry-move-move_redir-noredirect' => '$1 přesuny stronu $3 do $4 přepisujo dalesposrědkowanje, bjeztoho zo by dalesposrědkowanje wutworił',
-'logentry-patrol-patrol' => '$1 markěrowaše wersiju $4 strony $3 jako skontrolowanu',
-'logentry-patrol-patrol-auto' => '$1 awtomatisce markěrowaše wersiju $4 strony $3 jako skontrolowanu',
-'logentry-newusers-newusers' => 'Wužiwarske konto $1 je so załožiło',
-'logentry-newusers-create' => 'Wužiwarske konto $1 je so załožiło',
-'logentry-newusers-create2' => '$1 załoži wužiwarske konto $3',
-'logentry-newusers-byemail' => 'Wužiwarske konto $3 je so wot $1 załožiło a hesło je so přez e-mejl pósłało.',
-'logentry-newusers-autocreate' => 'Konto $1 je so awtomatisce załožiło',
-'logentry-rights-rights' => '$1 změni skupinske čłonstwo za $3 z $4 do $5',
-'logentry-rights-rights-legacy' => '$1 změni skupinske čłonstwo za $3',
-'logentry-rights-autopromote' => '$1 powyši so awtomatisce wot $4 do $5',
+'logentry-move-move' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}}',
+'logentry-move-move-noredirect' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}}, bjeztoho zo by dalesposrědkowanje {{GENDER:$2|wutworił|wutworiła}}',
+'logentry-move-move_redir' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}} přepisujo dalesposrědkowanje',
+'logentry-move-move_redir-noredirect' => '$1 je stronu $3 do $4 {{GENDER:$2|přesunył|přesunyła}} přepisujo dalesposrědkowanje, bjeztoho zo by dalesposrědkowanje {{GENDER:$2|wutworił|wutworiła}}',
+'logentry-patrol-patrol' => '$1 je wersiju $4 strony $3 jako dohladowanu {{GENDER:$2|markěrował|markěrowała}}',
+'logentry-patrol-patrol-auto' => '$1 je wersiju $4 strony $3 awtomatisce jako dohladowanu {{GENDER:$2|markěrował|markěrowała}}',
+'logentry-newusers-newusers' => 'Wužiwarske konto $1 je so {{GENDER:$2|załožiło}}',
+'logentry-newusers-create' => 'Wužiwarske konto $1 je so {{GENDER:$2|załožiło}}',
+'logentry-newusers-create2' => '$1 je wužiwarske konto $3 {{GENDER:$2|załožił|załožiła}}',
+'logentry-newusers-byemail' => '$1 je wužiwarske konto $3 {{GENDER:$2|załožił|załožiła}} a hesło je so přez e-mejl pósłało.',
+'logentry-newusers-autocreate' => 'Wužiwarske konto $1 je so awtomatisce {{GENDER:$2|załožiło}}',
+'logentry-rights-rights' => '$1 je skupinske čłonstwo za $3 z $4 do $5 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-rights-legacy' => '$1 je skupinske čłonstwo za $3 {{GENDER:$2|změnił|změniła}}',
+'logentry-rights-autopromote' => '$1 je so awtomatisce wot $4 do $5 {{GENDER:$2|přirjadował|přirjadowała}}',
'rightsnone' => '(ničo)',
# Feedback
'duration-centuries' => '$1 {{PLURAL:$1|lětstotk|lětstotkaj|lětstotki|lětstotkow}}',
'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysacaj|lěttysacy|lěttysacow}}',
-# Unknown messages
-'pageswithprop-legend' => 'Strony z kajkosću strony',
-'pageswithprop-submit' => 'Wotpósłać',
+# Image rotation
+'rotate-comment' => 'Wobraz wo $1 {{PLURAL:$1|stopjeń|stopnjej|stopnje|stopnjow}} w směrje časnika wjerćany',
+
);
'loginlanguagelabel' => 'Lang : $1',
'suspicious-userlogout' => 'Demand ou te fè pou dekonekte w te refize paske sanble li te voye pa yon navigatè ki fè erè oubyen li soti nan yon proksi pou kach.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Erè nou pa konnen nan fonksyon mail() PHP a.',
# Change password dialog
# Special:ListGroupRights
'listgrouprights-members' => '(lis manm yo)',
-# E-mail user
+# Email user
'emailuser' => 'Voye yon mesaj (imèl) pou itilizatè sa a',
# Watchlist
'tog-editsectiononrightclick' => 'Szakaszok szerkesztése a szakaszcímre való jobb kattintással (JavaScript-alapú)',
'tog-showtoc' => 'Tartalomjegyzék megjelenítése a három fejezetnél többel rendelkező cikkeknél',
'tog-rememberpassword' => 'Emlékezzen rám ezzel a böngészővel (legfeljebb {{PLURAL:$1|egy|$1}} napig)',
-'tog-watchcreations' => 'Az általam létrehozott lapok felvétele a figyelőlistára',
-'tog-watchdefault' => 'Az általam szerkesztett lapok felvétele a figyelőlistára',
-'tog-watchmoves' => 'Az általam átnevezett lapok felvétele a figyelőlistára',
-'tog-watchdeletion' => 'Az általam törölt lapok felvétele a figyelőlistára',
+'tog-watchcreations' => 'Az általam létrehozott lapok és feltöltött fájlok felvétele a figyelőlistámra',
+'tog-watchdefault' => 'Az általam szerkesztett lapok és fájlok felvétele a figyelőlistámra',
+'tog-watchmoves' => 'Az általam átnevezett lapok és fájlok felvétele a figyelőlistámra',
+'tog-watchdeletion' => 'Az általam törölt lapok és fájlok felvétele a figyelőlistámra',
'tog-minordefault' => 'Alapértelmezetten minden szerkesztésemet jelölje aprónak',
'tog-previewontop' => 'Előnézet megjelenítése a szerkesztőablak előtt',
'tog-previewonfirst' => 'Előnézet első szerkesztésnél',
'tog-watchlisthideliu' => 'Bejelentkezett szerkesztők módosításainak elrejtése a figyelőlistáról',
'tog-watchlisthideanons' => 'Névtelen szerkesztések elrejtése',
'tog-watchlisthidepatrolled' => 'Az ellenőrzött szerkesztések elrejtése',
-'tog-ccmeonemails' => 'A másoknak küldött e-mailjeimről kapjak én is másolatot',
-'tog-diffonly' => 'Ne mutassa a lap tartalmát lapváltozatok közötti eltérések megtekintésekor',
+'tog-ccmeonemails' => 'A másoknak küldött e-mailjeimről kapjak másolatot',
+'tog-diffonly' => 'Ne mutassa a lap tartalmát a lapváltozatok közötti eltérések megtekintésekor',
'tog-showhiddencats' => 'Rejtett kategóriák megjelenítése',
'tog-norollbackdiff' => 'Ne jelenjenek meg az eltérések visszaállítás után',
# Font style option in Special:Preferences
'editfont-style' => 'A szerkesztőterület betűtípusa:',
-'editfont-default' => 'a böngésző alapértelmezett betűtípusa',
+'editfont-default' => 'a böngésző alapértelmezett beállítása',
'editfont-monospace' => 'fix szélességű betűtípus',
'editfont-sansserif' => 'talpatlan (sans-serif) betűtípus',
'editfont-serif' => 'talpas (serif) betűtípus',
'dec' => 'dec',
# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategória|Kategóriák}}',
+'pagecategories' => '{{PLURAL:$1|Kategória|Kategória}}',
'category_header' => 'A(z) „$1” kategóriába tartozó lapok',
'subcategories' => 'Alkategóriák',
'category-media-header' => 'A(z) „$1” kategóriába tartozó médiafájlok',
'category-empty' => "''Ebben a kategóriában pillanatnyilag egyetlen lap vagy médiafájl sem szerepel.''",
-'hidden-categories' => '{{PLURAL:$1|Rejtett kategória|Rejtett kategóriák}}',
+'hidden-categories' => '{{PLURAL:$1|Rejtett kategória|Rejtett kategória}}',
'hidden-category-category' => 'Rejtett kategóriák',
'category-subcat-count' => "''{{PLURAL:$2|Ennek a kategóriának csak egyetlen alkategóriája van.|Ez a kategória az alábbi {{PLURAL:$1|alkategóriával|$1 alkategóriával}} rendelkezik (összesen $2 alkategóriája van).}}''",
'category-subcat-count-limited' => 'Ebben a kategóriában {{PLURAL:$1|egy|$1}} alkategória található.',
'faqpage' => 'Project:GyIK',
# Vector skin
-'vector-action-addsection' => 'Új szakasz nyitása',
+'vector-action-addsection' => 'Új téma nyitása',
'vector-action-delete' => 'Törlés',
'vector-action-move' => 'Átnevezés',
'vector-action-protect' => 'Lapvédelem',
'vector-view-viewsource' => 'A lap forrása',
'actions' => 'Műveletek',
'namespaces' => 'Névterek',
-'variants' => 'Változók',
+'variants' => 'Változatok',
'navigation-heading' => 'Navigációs menü',
'errorpagetitle' => 'Hiba',
'history_short' => 'Laptörténet',
'updatedmarker' => 'az utolsó látogatásom óta frissítették',
'printableversion' => 'Nyomtatható változat',
-'permalink' => 'Link erre a változatra',
+'permalink' => 'Hivatkozás erre a változatra',
'print' => 'Nyomtatás',
'view' => 'Olvasás',
'edit' => 'Szerkesztés',
'jumpto' => 'Ugrás:',
'jumptonavigation' => 'navigáció',
'jumptosearch' => 'keresés',
-'view-pool-error' => 'Sajnos a szerverek jelen pillanatban túl vannak terhelve, mert
-túl sok felhasználó próbálta megtekinteni ezt az oldalt.
-Kérjük, várj egy kicsit, mielőtt újrapróbálkoznál a lap megtekintésével!
+'view-pool-error' => 'A szerverek jelenleg túl vannak terhelve, mert túl sok felhasználó próbálta megtekinteni ezt az oldalt.
+Kérjük, várj egy kicsit, mielőtt újra próbálkoznál a lap megtekintésével!
$1',
'pool-timeout' => 'Letelt a zárolás feloldására szánt várakozási idő',
'badaccess-group0' => 'Ezt a tevékenységet nem végezheted el.',
'badaccess-groups' => 'Ezt a tevékenységet csak a(z) $1 {{PLURAL:$2|csoportba|csoportok valamelyikébe}} tartozó felhasználó végezheti el.',
-'versionrequired' => 'A MediaWiki $1-s verziója szükséges',
-'versionrequiredtext' => 'A lap használatához a MediaWiki $1-s verziójára van szükség.
-További információkat a [[Special:Version|verzióinformációs lapon]] találhatsz.',
+'versionrequired' => 'A MediaWiki $1 verziója szükséges',
+'versionrequiredtext' => 'A lap használatához a MediaWiki $1 verziójára van szükség.
+További információkat a [[Special:Version|verzióinformációs lapon]] találsz.',
'ok' => 'OK',
'retrievedfrom' => 'A lap eredeti címe: „$1”',
'youhavenewmessagesmanyusers' => '$1ed van több szerkesztőtől ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|Új üzenet vár|Új üzenetek várnak}}',
'newmessagesdifflinkplural' => 'Az utolsó {{PLURAL:$1|változtatást|változtatásokat}}',
-'youhavenewmessagesmulti' => 'Új üzenetet vár a(z) $1 wikin',
+'youhavenewmessagesmulti' => 'Új üzenet vár a(z) $1 wikin',
'editsection' => 'szerkesztés',
'editold' => 'szerkesztés',
'viewsourceold' => 'lapforrás',
'collapsible-collapse' => 'becsuk',
'collapsible-expand' => 'kinyit',
'thisisdeleted' => '$1 megtekintése vagy helyreállítása?',
-'viewdeleted' => '$1 megtekintése',
+'viewdeleted' => '$1 megtekintése?',
'restorelink' => '{{PLURAL:$1|Egy|$1}} törölt szerkesztés',
'feedlinks' => 'Hírcsatorna:',
'feed-invalid' => 'A figyelt hírcsatorna típusa érvénytelen.',
Az adatbázis ezzel a hibával tért vissza: „$3: $4”.',
'laggedslavemode' => "'''Figyelem:''' Ez a lap nem feltétlenül tartalmazza a legfrissebb változtatásokat!",
'readonly' => 'Az adatbázis le van zárva',
-'enterlockreason' => 'Add meg a lezárás okát, valamint egy becslést, hogy mikor kerül a lezárás feloldásra',
-'readonlytext' => 'A wiki adatbázisa ideiglenesen le van zárva (valószínűleg adatbázis-karbantartás miatt). A lezárás időtartama alatt a lapok nem szerkeszthetők, és új szócikkek sem hozhatóak létre, az oldalak azonban továbbra is böngészhetőek.
+'enterlockreason' => 'Add meg a lezárás okát, valamint egy becslést, hogy mikor lesz a lezárásnak vége',
+'readonlytext' => 'A wiki adatbázisa ideiglenesen le van zárva (valószínűleg adatbázis-karbantartás miatt). A lezárás időtartama alatt a lapok nem szerkeszthetők, és új szócikkek sem hozhatók létre, az oldalakat azonban lehet böngészni.
-Az adminisztrátor, aki lezárta az adatbázist, az alábbi magyarázatot adta: $1',
+Az adminisztrátor, aki lezárta az adatbázist, az alábbi indoklást adta: $1',
'missing-article' => 'Az adatbázisban nem található meg a(z) „$1” című lap szövege $2.
Ennek az oka általában az, hogy egy olyan lapra vonatkozó linket követtél, amit már töröltek.
Jelezd ezt egy [[Special:ListUsers/sysop|adminiszttrátornak]] az URL megadásával.',
'missingarticle-rev' => '(változat azonosítója: $1)',
'missingarticle-diff' => '(eltérés: $1, $2)',
-'readonly_lag' => 'Az adatbázis automatikusan zárolásra került, amíg a mellékkiszolgálók utolérik a főkiszolgálót.',
+'readonly_lag' => 'Az adatbázis automatikusan le lett zárva, amíg a mellékkiszolgálók utolérik a főkiszolgálót.',
'internalerror' => 'Belső hiba',
'internalerror_info' => 'Belső hiba: $1',
'fileappenderrorread' => 'A(z) „$1” nem olvasható hozzáírás közben.',
'namespaceprotected' => "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
'customcssprotected' => 'Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.',
'customjsprotected' => 'Nem szerkesztheted ezt a JavaScript-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.',
-'ns-specialprotected' => 'A speciális lapok nem szerkeszthetőek.',
+'ns-specialprotected' => 'A speciális lapok nem szerkeszthetők.',
'titleprotected' => "Ilyen címmel nem lehet szócikket készíteni, [[User:$1|$1]] letiltotta.
-A blokkolás oka: „''$2''”.",
+Az indoklás: „''$2''”.",
'filereadonlyerror' => 'A(z) "$1" fájl nem módosítható, mert a(z) "$2" fájltároló csak olvasható módban üzemel.
A lezárást végrehajtó rendszergazda az alábbi indoklást adta meg: "$3".',
'invalidtitle-knownnamespace' => 'Érvénytelen cím "$2" névtérrel és "$3" szöveggel',
'invalidtitle-unknownnamespace' => 'Érvénytelen cím az ismeretlen $1 névtérszámmal és "$2" szöveggel',
'exception-nologin' => 'Nem vagy bejelentkezve.',
-'exception-nologin-text' => 'Ezen lap vagy művelet használatához be kell jelenetkezned erre a wikire.',
+'exception-nologin-text' => 'Ezen lap vagy művelet használatához be kell jelentkezned erre a wikire.',
# Virus scanner
'virus-badscanner' => "Hibás beállítás: ismeretlen víruskereső: ''$1''",
'nologin' => "Nem rendelkezel még felhasználói fiókkal? '''$1'''.",
'nologinlink' => 'Itt regisztrálhatsz',
'createaccount' => 'Regisztráció',
-'gotaccount' => "Ha már korábban regisztráltál, '''$1'''!",
+'gotaccount' => "Ha már korábban regisztráltál, '''$1'''.",
'gotaccountlink' => 'Bejelentkezés',
'userlogin-resetlink' => 'Elfelejtetted a bejelentkezési adataidat?',
'createaccountmail' => 'Átmeneti, véletlenszerű jelszó használata és kiküldése az alábbi e-mail címre',
Kérlek, válassz másikat!',
'loginerror' => 'Hiba történt a bejelentkezés során',
'createaccounterror' => 'Nem sikerült létrehozni a felhasználói fiókot: $1',
-'nocookiesnew' => 'A felhasználói fiókod létrejött, de nem vagy bejelentkezve. A wiki sütiket („cookie”) használ a szerkesztők azonosítására. Nálad ezek le vannak tiltva. Kérlek, engedélyezd őket, majd lépj be az új azonosítóddal és jelszavaddal.',
+'nocookiesnew' => 'A felhasználói fiókod létrejött, de nem vagy bejelentkezve. A wiki sütiket („cookie”) használ a szerkesztők azonosítására. Nálad ezek le vannak tiltva. Kérlek, engedélyezd őket a böngésződben, majd lépj be az új azonosítóddal és jelszavaddal.',
'nocookieslogin' => 'A wiki sütiket („cookie”) használ a szerkesztők azonosításhoz.
Nálad ezek le vannak tiltva.
-Engedélyezd őket, majd próbáld meg újra.',
+Engedélyezd őket a böngésződben, majd próbáld újra.',
'nocookiesfornew' => 'A felhasználói fiók nem lett létrehozva, mivel nem sikerült megerősítenünk a forrását.
Ellenőrizd, hogy a sütik engedélyezve vannak-e, majd frissítsd az oldalt, és próbálkozz újra.',
'noname' => 'Érvénytelen szerkesztőnevet adtál meg.',
Ha te kértél új jelszót, lépj be, és változtasd meg.
Az ideiglenes jelszó {{PLURAL:$5|egy nap|$5 nap}} múlva érvényét veszti.
-Ha nem te küldted a kérést, vagy közben eszedbe jutott a régi,
-és már nem akarod megváltoztatni, nyugodtan hagyd figyelmen kívül
-ezt az üzenetet, és használd továbbra is a régi jelszavadat.',
+Ha nem te küldted a kérést, vagy közben eszedbe jutott a régi, és már nem akarod megváltoztatni, hagyd figyelmen kívül ezt az üzenetet, és használd továbbra is a régi jelszavadat.',
'noemail' => '„$1” e-mail címe nincs megadva.',
'noemailcreate' => 'Meg kell adnod egy valós e-mail címet',
'passwordsent' => 'Az új jelszót elküldtük „$1” e-mail címére.
Lépj be a levélben található adatokkal.',
-'blocked-mailpassword' => 'Az IP-címedet blokkoltuk, azaz eltiltottuk a szerkesztéstől, ezért a visszaélések elkerülése érdekében a jelszóvisszaállítás funkciót nem használhatod.',
+'blocked-mailpassword' => 'Az IP-címedet blokkoltuk, azaz eltiltottunk a szerkesztéstől, ezért a visszaélések elkerülése érdekében a jelszó-visszaállítás funkciót nem használhatod.',
'eauthentsent' => 'Egy ellenőrző e-mailt küldtünk a megadott címre. Mielőtt más leveleket kaphatnál, igazolnod kell az e-mailben írt utasításoknak megfelelően, hogy valóban a tiéd a megadott cím.',
'throttled-mailpassword' => 'Már elküldtünk egy jelszóemlékeztetőt az utóbbi {{PLURAL:$1|egy|$1}} órában.
A visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy jelszó-emlékeztetőt küldünk.',
'emailconfirmlink' => 'E-mail cím megerősítése',
'invalidemailaddress' => 'A megadott e-mail cím érvénytelen formátumú. Kérlek, adj meg egy érvényes e-mail címet vagy hagyd üresen azt a mezőt.',
'cannotchangeemail' => 'Ezen a wikin nem módosítható a fiókhoz tartozó e-mail cím.',
-'emaildisabled' => 'Ezen az oldalon nem lehet küldeni e-mailek.',
+'emaildisabled' => 'Ez az oldal nem küld e-maileket.',
'accountcreated' => 'Felhasználói fiók létrehozva',
'accountcreatedtext' => '$1 felhasználói fiókja sikeresen létrejött.',
'createaccount-title' => 'Új {{SITENAME}}-azonosító létrehozása',
'createaccount-text' => 'Valaki létrehozott számodra egy "$2" nevű {{SITENAME}}-azonosítót ($4).
-A hozzátartozó jelszó "$3", melyet a bejelentkezés után minél előbb változtass meg.
+A hozzá tartozó jelszó "$3", melyet a bejelentkezés után minél előbb változtass meg.
-Ha nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, nyugodtan hagyd figyelmen kívül.',
+Ha nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, hagyd figyelmen kívül.',
'usernamehasherror' => 'A felhasználónév nem tartalmazhat hash karaktereket',
'login-throttled' => 'Túl sok hibás bejelentkezés.
Várj egy kicsit, mielőtt újra próbálkozol.',
-'login-abort-generic' => 'Bejelentkezés sikertelen – megszakítva',
+'login-abort-generic' => 'A bejelentkezés sikertelen – megszakítva',
'loginlanguagelabel' => 'Nyelv: $1',
'suspicious-userlogout' => 'A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.',
# Change password dialog
'resetpass' => 'Jelszó módosítása',
-'resetpass_announce' => 'Az e-mailben elküldött ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell megadnod egy új jelszót:',
+'resetpass_announce' => 'Az e-mailben elküldött ideiglenes kóddal jelentkeztél be. A bejelentkezés befejezéséhez meg kell adnod egy új jelszót:',
'resetpass_text' => '<!-- Ide írd a szöveget -->',
'resetpass_header' => 'A fiókhoz tartozó jelszó megváltoztatása',
'oldpassword' => 'Régi jelszó:',
'retypenew' => 'Új jelszó ismét:',
'resetpass_submit' => 'Add meg a jelszót és jelentkezz be',
'resetpass_success' => 'A jelszavad megváltoztatása sikeresen befejeződött! Bejelentkezés...',
-'resetpass_forbidden' => 'A jelszavak nem változtathatóak meg',
-'resetpass-no-info' => 'Be kell jelentkezned hogy közvetlenül elérd ezt a lapot.',
+'resetpass_forbidden' => 'A jelszavak nem változtathatók meg',
+'resetpass-no-info' => 'Be kell jelentkezned, hogy közvetlenül elérd ezt a lapot.',
'resetpass-submit-loggedin' => 'Jelszó megváltoztatása',
'resetpass-submit-cancel' => 'Mégse',
'resetpass-wrong-oldpass' => 'Nem megfelelő ideiglenes vagy jelenlegi jelszó.
'resetpass-temp-password' => 'Ideiglenes jelszó:',
# Special:PasswordReset
-'passwordreset' => 'Jelszó beállítása',
-'passwordreset-text' => 'Az alábbi űrlap kitöltése után egy értesítő e-mailt kapsz a fiók adataival.',
+'passwordreset' => 'Jelszó törlése',
+'passwordreset-text' => 'Az alábbi űrlap kitöltése után egy értesítő e-mailt kapsz a fiókod adataival.',
'passwordreset-legend' => 'Új jelszó kérése',
'passwordreset-disabled' => 'Új jelszó kérése nem engedélyezett ezen a wikin.',
'passwordreset-pretext' => '{{PLURAL:$1||Írd be az alábbi adatok egyikét}}',
'passwordreset-username' => 'Felhasználónév:',
'passwordreset-domain' => 'Tartomány:',
'passwordreset-capture' => 'Meg szeretnéd nézni az elkészült üzenetet?',
-'passwordreset-capture-help' => 'Ha kipipálod a dobozt, amellett, hogy kiküldődik az üzenet a felhasználónak, megjelenik számodra (az ideiglenes jelszavakkal együtt)',
+'passwordreset-capture-help' => 'Ha kipipálod a dobozt, elmegy az üzenet a felhasználónak és megjelenik számodra (az ideiglenes jelszóval együtt).',
'passwordreset-email' => 'E-mail cím:',
'passwordreset-emailtitle' => 'A(z) {{SITENAME}}-fiók adatai',
'passwordreset-emailtext-ip' => 'Valaki (vélhetően Te, a $1 IP-címről) emlékeztetőt kért a {{SITENAME}} ($4) oldalon felvett fiókokról. A következő felhasználói {{PLURAL:$3|fiók van|fiókok vannak}} hozzárendelve ehhez az e-mail címhez:
'passwordreset-emailelement' => 'Felhasználónév: $1
Ideiglenes jelszó: $2',
'passwordreset-emailsent' => 'Emlékeztető e-mail elküldve.',
-'passwordreset-emailsent-capture' => 'Az alább látható emlékeztető e-mail elküldve.',
+'passwordreset-emailsent-capture' => 'Az alább látható emlékeztető e-mail lett elküldve.',
'passwordreset-emailerror-capture' => 'Az emlékeztető levél generálása megtörtént, mint az alább látszik, de elküldése a szerkesztőnek nem sikerült: $1',
# Special:ChangeEmail
'bold_tip' => 'Félkövér szöveg',
'italic_sample' => 'Dőlt szöveg',
'italic_tip' => 'Dőlt szöveg',
-'link_sample' => 'Belső hivatkozás',
+'link_sample' => 'Hivatkozás megnevezése',
'link_tip' => 'Belső hivatkozás',
-'extlink_sample' => 'http://www.példa-hivatkozás.hu hivatkozás címe',
+'extlink_sample' => 'http://www.példa-hivatkozás.hu hivatkozás megnevezése',
'extlink_tip' => 'Külső hivatkozás (ne felejtsd el a http:// előtagot)',
'headline_sample' => 'Alfejezet címe',
'headline_tip' => 'Alfejezetcím',
'anoneditwarning' => "'''Figyelem:''' Nem vagy bejelentkezve, ha szerkesztesz, az IP-címed látható lesz a laptörténetben.",
'anonpreviewwarning' => "''Nem vagy bejelentkezve. A mentéskor az IP-címed rögzítve lesz a laptörténetben.''",
'missingsummary' => "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.",
-'missingcommenttext' => 'Kérjük, hogy írj összefoglalót szerkesztésedhez.',
+'missingcommenttext' => 'Kérjük, írj összefoglalót a szerkesztésedhez.',
'missingcommentheader' => "'''Emlékeztető:''' Nem adtad meg a megjegyzés tárgyát vagy címét.
-Ha ismét a „{{int:savearticle}}” gombra kattintasz, akkor a szerkesztésed nélküle kerül mentésre.",
+Ha ismét a „{{int:savearticle}}” gombra kattintasz, akkor a szerkesztésed nélküle lesz elmentve.",
'summary-preview' => 'A szerkesztési összefoglaló előnézete:',
'subject-preview' => 'A téma/főcím előnézete:',
'blockedtitle' => 'A szerkesztő blokkolva van',
'confirmedittext' => 'Lapok szerkesztése előtt meg kell erősítened az e-mail címedet. Kérjük, hogy a [[Special:Preferences|szerkesztői beállításaidban]] add meg, majd erősítsd meg az e-mail címedet.',
'nosuchsectiontitle' => 'A szakasz nem található',
'nosuchsectiontext' => 'Egy olyan szakaszt próbáltál meg szerkeszteni, ami nem létezik.
-Lehet, hogy áthelyezték vagy törölték miközben nézted a lapot.',
+Lehet, hogy áthelyezték, átnevezték vagy törölték, miközben nézted a lapot.',
'loginreqtitle' => 'Bejelentkezés szükséges',
'loginreqlink' => 'be kell jelentkezned',
'loginreqpagetext' => '$1 más oldalak megtekintéséhez.',
'session_fail_preview' => "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.
Kérjük próbálkozz újra!
Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
-'session_fail_preview_html' => "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.'''
+'session_fail_preview_html' => "'''Az elveszett munkamenetadatok miatt nem tudtuk feldolgozni a szerkesztésedet.'''
''Mivel a wikiben engedélyezett a nyers HTML-kód használata, az előnézet el van rejtve a JavaScript-alapú támadások megakadályozása céljából.''
-'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
+'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!''' (a változtatásaidat mentsd el magadnak, különben elvesznek!)",
'token_suffix_mismatch' => "'''A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket
a szerkesztési tokenben. A szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.
-Ez a probléma akkor fordulhat elő, ha hibás, web-alapú proxyszolgáltatást használsz.'''",
-'edit_form_incomplete' => "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd újra, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
+Ez a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.'''",
+'edit_form_incomplete' => "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
'editing' => '$1 szerkesztése',
'creating' => '$1 létrehozása',
'editingsection' => '$1 szerkesztése (szakasz)',
'editingcomment' => '$1 szerkesztése (új szakasz)',
'editconflict' => 'Szerkesztési ütközés: $1',
-'explainconflict' => "Valaki megváltoztatta a lapot, mióta elkezdted szerkeszteni.
-A felső szövegdobozban láthatod az oldal jelenlegi tartalmát.
-A te módosításaid az alsó dobozban találhatóak.
-Át kell másolnod a módosításaidat a felsőbe.
+'explainconflict' => "Valaki megváltoztatta a lapot, mióta elkezdted szerkeszteni. A felső szövegdobozban láthatod az oldal jelenlegi tartalmát. A te módosításaid az alsó dobozban találhatók. Át kell másolnod a módosításaidat a felsőbe!
+
'''Csak''' a felső dobozban levő szöveg lesz elmentve, amikor a „{{int:savearticle}}” gombra kattintasz.",
'yourtext' => 'A te változatod',
'storedversion' => 'A tárolt változat',
'allpages' => 'Az összes lap listája',
'alphaindexline' => '$1 – $2',
'nextpage' => 'Következő lap ($1)',
-'prevpage' => 'Előző oldal ($1)',
+'prevpage' => 'Előző lap ($1)',
'allpagesfrom' => 'Lapok listázása a következő címtől kezdve:',
'allpagesto' => 'Lapok listázása a következő címig:',
'allarticles' => 'Az összes lap listája',
'spambot_username' => 'MediaWiki spam kitakarítása',
'spam_reverting' => 'Visszatérés a $1 lapra mutató hivatkozásokat nem tartalmazó utolsó változathoz',
'spam_blanking' => 'Az összes változat tartalmazott a $1 lapra mutató hivatkozásokat, kiürítés',
+'spam_deleting' => 'Minden változat tartalmazott $1-re mutató hivatkozást, törlöm',
# Info page
'pageinfo-title' => 'Információk a(z) „$1” lapról',
'pageinfo-watchers' => 'Figyelők száma',
'pageinfo-few-watchers' => 'Kevesebb mint $1 szerkesztő figyeli',
'pageinfo-redirects-name' => 'Átirányítások erre a lapra',
-'pageinfo-subpages-name' => 'Az lap allapjai',
+'pageinfo-subpages-name' => 'A lap allapjai',
'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|átirányítás}}; $3 {{PLURAL:$3|nem átirányítás}})',
'pageinfo-firstuser' => 'A lap létrehozója',
'pageinfo-firsttime' => 'A lap létrehozásának ideje',
# Pseudotags used for GPSSpeedRef
'exif-gpsspeed-k' => 'Kilométer óránként',
-'exif-gpsspeed-m' => 'Márföld óránként',
+'exif-gpsspeed-m' => 'Mérföld óránként',
'exif-gpsspeed-n' => 'Csomó',
# Pseudotags used for GPSDestDistanceRef
# Scary transclusion
'scarytranscludedisabled' => '[Wikiközi beillesztés le van tiltva]',
'scarytranscludefailed' => '[$1 sablon letöltése sikertelen]',
+'scarytranscludefailed-httpstatus' => ' [Nem sikerült betölteni a(z) $1 sablont: HTTP $2]',
'scarytranscludetoolong' => '[Az URL túl hosszú]',
# Delete conflict
'duration-centuries' => '{{PLURAL:$1|egy|$1}} évszázad',
'duration-millennia' => '{{PLURAL:$1|egy|$1}} évezred',
+# Image rotation
+'rotate-comment' => 'Elforgattam a képet $1 fokkal, az óramutató járásával megegyező irányban',
+
);
# Vector skin
'vector-action-addsection' => 'Ավելացնել քննարկում',
'vector-action-delete' => 'Ջնջել',
-'vector-action-move' => 'Õ\8eÕ¥Ö\80Õ¡Õ¶Õ¾Õ¡Õ¶Õ¥Õ¬',
+'vector-action-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸ÕÕ¥Õ¬ Õ¡ÕµÕ½ Õ§Õ»Õ¨',
'vector-action-protect' => 'Պաշտպանել',
'vector-action-undelete' => 'Վերականգնել',
'vector-action-unprotect' => 'Հանել պաշտպանումից',
'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) and the disambiguation template definition (see disambiguations).
-'aboutsite' => '{{grammar:genitive|{{SITENAME}}}}ի մասին',
+'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} մասին',
'aboutpage' => 'Project:Էությունը',
'copyright' => 'Կայքի բովանդակությունը գտնվում է «$1» արտոնագրի տակ։',
'copyrightpage' => '{{ns:project}}:Հեղինակային իրավունքներ',
'welcomecreation-msg' => 'Ձեր հաշիվն ստեղծված է։
Չմոռանաք փոփոխել ձեր [[Special:Preferences|նախընտրությունները]]։',
'yourname' => 'Մասնակցի անուն՝',
-'yourpassword' => 'Գաղտնաբառ.',
+'yourpassword' => 'Գաղտնաբառ՝',
'yourpasswordagain' => 'Կրկնեք գաղտնաբառը',
'remembermypassword' => 'Հիշել իմ մուտքագրված տվյալները այս համակարգչում ($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել ժամկետով)',
'yourdomainname' => 'Ձեր դոմենը՝',
# Content models
'content-model-wikitext' => 'վիքիտեքստ',
+'content-model-javascript' => 'ՋավաՍկրիպտ',
# "Undo" feature
'undo-success' => 'Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։',
'prefs-emailconfirm-label' => 'Էլ-փոստի վավերացում․',
'prefs-textboxsize' => 'Խմբագրման պատուհանի չափը',
'youremail' => 'Էլեկտրոնային փոստ.',
-'username' => 'Մասնակցի անուն.',
+'username' => '{{GENDER:$1|Մասնակցի անուն}}՝',
'uid' => 'Մասնակցի իդենտիֆիկատոր.',
'prefs-memberingroups' => 'Անդամակցության {{PLURAL:$1|խումբ|խմբեր}}.',
'prefs-registration' => 'Գրանցման ամսաթիվը․',
Փոխարենը նրանք, հավանաբար, պետք է հղեն համապատասխան թեմային։<br />
Էջը համարվում է երկիմաստության փարատման էջ, եթե այն պարունակում է [[MediaWiki:Disambiguationspage]] էջում ընդգրկված կաղապարներից որևէ մեկը։',
+'pageswithprop-submit' => 'Անցնել',
+
'doubleredirects' => 'Կրկնակի վերահղումներ',
'doubleredirectstext' => 'Այս էջում բերված են վերահղման էջերին վերահղող էջերը։ Յուրաքանչյուր տող պարունակում է հղումներ դեպի առաջին և երկրորդ վերահղումները, ինչպես նաև երկրորդ վերահղման նպատակային էջի առաջին տողը, որում սովորաբար նշված է էջի անվանումը, որին պետք է հղի նաև առաջին վերահղումը։',
'double-redirect-fixed-move' => '«[[$1]]» էջը վերանվանված է և այժմ վերահղում է «[[$2]]» էջին։',
# Restrictions (nouns)
'restriction-edit' => 'Խմբագրում',
-'restriction-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸ÕÕ¸Ö\82Õ´',
+'restriction-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸ÕÕ¥Õ¬',
'restriction-create' => 'Ստեղծում',
-'restriction-upload' => 'Ô²Õ¥Õ¼Õ¶Õ¸Ö\82Õ´',
+'restriction-upload' => 'Ô²Õ¥Õ¼Õ¶Õ¥Õ¬',
# Restriction levels
'restriction-level-sysop' => 'լրիվ պաշտպանված',
'tooltip-ca-protect' => 'Պաշտպանել այս էջը',
'tooltip-ca-delete' => 'Ջնջել այս էջը',
'tooltip-ca-undelete' => 'Վերականգնել այս էջի խմբագրումները՝ կատարված ջնջումից առաջ',
-'tooltip-ca-move' => 'Õ\8eÕ¥Ö\80Õ¡Õ¶Õ¾Õ¡Õ¶Õ¥Õ¬ էջը',
+'tooltip-ca-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸ÕÕ¥Õ¬ Õ¡ÕµÕ½ էջը',
'tooltip-ca-watch' => 'Ավելացնել այս էջը ձեր հսկողության ցանկին',
'tooltip-ca-unwatch' => 'Հանել այս էջը ձեր հսկողության ցանկից',
'tooltip-search' => 'Որոնել {{SITENAME}} կայքում',
'tooltip-search-go' => 'Անցնել այս ճշգրիտ անվանումով էջին',
'tooltip-search-fulltext' => 'Գտնել այս տեքստով էջերը',
-'tooltip-p-logo' => 'Ô³Õ¬ÕÕ¡Õ¾Õ¸Ö\80 Õ§Õ»',
+'tooltip-p-logo' => 'Ô±ÕµÖ\81Õ¥Õ¬Õ¥Ö\84 Ô³Õ¬ÕÕ¡Õ¾Õ¸Ö\80 Ô·Õ»Õ¨',
'tooltip-n-mainpage' => 'Այցելեք Գլխավոր Էջը',
'tooltip-n-mainpage-description' => 'Անցնել գլխավոր էջ',
'tooltip-n-portal' => 'Նախագծի մասին, որտեղ գտնել ինչը, ինչով կարող եք օգնել',
'exif-componentsconfiguration-0' => 'գոյություն չունի',
'exif-urgency-normal' => 'Նորմալ ($1)',
+'exif-urgency-low' => 'Թույլ ($1)',
+'exif-urgency-high' => 'Ուժեղ ($1)',
# External editor support
'edit-externally' => 'Խմբագրել այս նիշքը արտաքին խմբագրիչով',
Un pagina se tracta como pagina de disambiguation si illo usa un patrono que es ligate ab [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Paginas con un proprietate de pagina',
+'pageswithprop-legend' => 'Paginas con un proprietate de pagina',
'pageswithprop-text' => 'Iste pagina lista le paginas que usa un certe proprietate de pagina.',
'pageswithprop-prop' => 'Nomine del proprietate:',
+'pageswithprop-submit' => 'Va',
'doubleredirects' => 'Redirectiones duple',
'doubleredirectstext' => 'Iste pagina lista paginas de redirection verso altere paginas de redirection.
'duration-centuries' => '$1 {{PLURAL:$1|seculo|seculos}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennio|millennios}}',
-# Unknown messages
-'pageswithprop-legend' => 'Paginas con un proprietate de pagina',
-'pageswithprop-submit' => 'Va',
+# Image rotation
+'rotate-comment' => 'Imagine rotate de $1 {{PLURAL:$1|grado|grados}} in senso horologic',
+
);
Halaman-halaman tersebut seharusnya berpaut ke topik-topik yang sesuai.<br />
Suatu halaman dianggap sebagai halaman disambiguasi apabila halaman tersebut menggunakan templat yang terhubung ke [[MediaWiki:Disambiguationspage]].",
+'pageswithprop' => 'Halaman dengan halaman properti',
+'pageswithprop-legend' => 'Halaman dengan halaman properti',
+'pageswithprop-text' => 'Halaman ini berisi daftar halaman yang menggunakan properti halaman tertentu.',
+'pageswithprop-prop' => 'Nama properti:',
+'pageswithprop-submit' => 'Pergi',
+
'doubleredirects' => 'Pengalihan ganda',
'doubleredirectstext' => 'Halaman ini memuat daftar halaman yang dialihkan ke halaman pengalihan yang lain.
Setiap baris memuat pranala ke pengalihan pertama dan pengalihan kedua serta target dari pengalihan kedua yang umumnya adalah halaman yang "sebenarnya". Halaman peralihan pertama seharusnya dialihkan ke halaman yang bukan merupakan halaman peralihan.
'duration-centuries' => '{{PLURAL:$1||}}$1 abad',
'duration-millennia' => '{{PLURAL:$1||}}$1 milenium',
+# Image rotation
+'rotate-comment' => 'Gambar diputar $1 {{PLURAL:$1|derajat}} searah jarum jam',
+
);
# Special:ListGroupRights
'listgrouprights-members' => '(liste de membres)',
-# E-mail user
+# Email user
'emailuser' => 'Parlar che ti usator',
'usermailererror' => 'Objecte de postage retornat errore:',
'usermaildisabled' => 'E-mail de usator desvalidat',
'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan manipud ti panag-urnos, ken isu a saan a mabalin nga agusar ti panagala ti kontrasenias a pamay-an tapno mapawilan ti panag-abuso.',
'eauthentsent' => 'Naipatuloden ti pammasingked nga e-surat iti naited nga e-surat a pagtaengan.
Sakbay nga ania man nga e-surat ti maipatulod iti pakabilangan, masapul a surotem dagiti maibagbaga iti e-surat, tapno mapasingkedan a ti pakabilangan ket agpayso a kukuam.',
-'throttled-mailpassword' => 'Ti palagip ti kontrasenias ket naipatuloden, iti napalabas nga {{PLURAL:$1|oras|$1 nga oras}}.
-Tapno maipawilan ti panag-abuso, maysa laeng a palagip ti kontrasenias ti maipatulod ti tunggal maysa nga {{PLURAL:$1|oras|$1 nga oras}}.',
+'throttled-mailpassword' => 'Ti panangidisso manen ti kontrasenias ket naipatuloden, iti napalabas nga {{PLURAL:$1|oras|$1 nga oras}}.
+Tapno maipawilan ti panag-abuso, maysa laeng a panangidisso manen ti kontrasenias ti maipatulod iti tunggal maysa nga {{PLURAL:$1|oras|$1 nga oras}}.',
'mailerror' => 'Biddut iti panagipatulod ti surat: $1',
'acct_creation_throttle_hit' => 'Dagiti sumarungkar ti daytoy a wiki nga agususar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.
A kas ti nagbanagan, dagiti agsarsarummgkar nga agususar ti IP a pagtaengan ket agdama a saanda a mabalin a makaaramid kadagiti pakabilangan.',
# Special:PasswordReset
'passwordreset' => 'Ipasubli ti kontrasenias',
-'passwordreset-text' => 'Lippasem daytoy a kinabuklan tapno maipatulodanka ti e-surat a paglagipan kadagiti salaysay ti pakabilangam.',
+'passwordreset-text' => 'Lippasem daytoy a porma tapno maidisso manen ti bukodmo a kontrasenias.',
'passwordreset-legend' => 'Ipasubli ti kontrasenias',
'passwordreset-disabled' => 'Nabaldado dagiti panagisubli ti kontrasenias iti daytoy a wiki.',
'passwordreset-pretext' => '{{PLURAL:$1||Ikabil ti maysa a piraso ti datos dita baba}}',
'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda ti temporario a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
'passwordreset-email' => 'E-surat a pagtaengan:',
'passwordreset-emailtitle' => 'Salaysay ti pakabilangan iti {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti palagip para
-dagiti salaysay ti pakabilangam para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket
-nakairaman iti daytoy nga e-surat a pagtaengan:
+'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangidisso manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket
+nakairaman iti daytoy nga esurat a pagtaengan:
$2
Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a
panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken
agtuloy ka nga agusar ti daan a kontrasenias.',
-'passwordreset-emailtext-user' => 'Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti palagip para dagiti salaysay ti pakabilangan iti {{SITENAME}}
+'passwordreset-emailtext-user' => 'Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangidisso manen ti bukodmo a kontrasenias para iti {{SITENAME}}
($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilanagn ti agar-aramat ket
-nakairaman iti daytoy nga e-surat a pagtaengan:
+nakairaman iti daytoy nga esurat a pagtaengan:
$2
agtuloy kan nga agusar ti daan a kontrasenias mo.',
'passwordreset-emailelement' => 'Nagan ti agar-aramat: $1
Temporario a kontrasenias: $2',
-'passwordreset-emailsent' => 'Maipatuloden ti e-surat a palagip.',
-'passwordreset-emailsent-capture' => 'Naipatulod ti palagip nga e-surat, a napaikita dita baba.',
-'passwordreset-emailerror-capture' => 'Naaramid ti palagip nga e-surat, a napaikita dita baba, ngem napaay a napaitulod iti agar-aramat: $1',
+'passwordreset-emailsent' => 'Ti maysa nga esurat ti panangidisso manen ti kontrasenias ket naipatuloden.',
+'passwordreset-emailsent-capture' => 'Ti maysa nga esurat ti panangidisso manen ti kontrasenias ket naipatuloden, a napaikita dita baba.',
+'passwordreset-emailerror-capture' => 'Ti maysa nga esurat ti panangidisso manen ti kontrasenias ket naaramiden, a napaikita dita baba, ngem napaay a napaitulod iti agar-aramat: $1',
# Special:ChangeEmail
'changeemail' => 'Sukatan ti e-surat a pagtaengan',
Dagitoy ket embes a nasken a maisilpoda kadagiti maitutop a panid.<br />
Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo manipud idiay [[MediaWiki:Disambiguationspage]].",
+'pageswithprop' => 'Pampanid nga adda maysa a tagikua ti panid',
+'pageswithprop-legend' => 'Pampanid nga adda maysa a tagikua ti panid',
+'pageswithprop-text' => 'Daytoy a panid ket ilistana ti pampanid nga agus-usar ti naisangayan a tagikua ti panid.',
+'pageswithprop-prop' => 'Nagan ti tagikua:',
+'pageswithprop-submit' => 'Inkan',
+
'doubleredirects' => 'Dagiti namindua a naibaw-ing',
'doubleredirectstext' => 'Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabsabali a baw-ing a pampanid.
Iti tunggal maysa nga aray ket adda nagyanna kadagiti panilpo iti umuna ken maikadua a baw-ing, ken iti puntaan iti maikadua a baw-ing, nga isu ti "pudno" a puntaan ti panid, nga ti umuna a baw-ing ket isu ti ipatudona.
'sqlite-no-fts' => '$1 awan ti suporta ti napno a testo ti panagbiruk',
# New logging system
-'logentry-delete-delete' => 'Inikkat ni $1 ti panid ti $3',
-'logentry-delete-restore' => 'Insubli ni $1 ti panid ti $3',
-'logentry-delete-event' => 'Sinukatan ni $1 ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
-'logentry-delete-revision' => 'Sinukatan ni $1 ti panagkita {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
-'logentry-delete-event-legacy' => 'Sinukatan ni $1 ti panagkita ti listaan dagiti pasamak idiay $3',
-'logentry-delete-revision-legacy' => 'Sinukatan ni $1 ti panagkita dagiti panagbaliw idiay panid $3',
-'logentry-suppress-delete' => 'Pinasardeng ni $1 ti panid ti $3',
-'logentry-suppress-event' => 'Sekreto a sinukatan ni $1 ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
-'logentry-suppress-revision' => 'Sekreto a sinukatan ni $1 ti panagkita {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
-'logentry-suppress-event-legacy' => 'Sekreto a sinukatan ni $1 ti panagkita ti listaan dagiti pasamak idiay $3',
-'logentry-suppress-revision-legacy' => 'Sekreto a sinukatan ni $1 ti panagkita dagiti panagbaliw idiay panid $3',
+'logentry-delete-delete' => 'Ni $1 ket {{GENDER:$2|inikkatna}} ti panid ti $3',
+'logentry-delete-restore' => 'Ni $1 ket {{GENDER:$2|insublina}} ti panid ti $3',
+'logentry-delete-event' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
+'logentry-delete-revision' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
+'logentry-delete-event-legacy' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita ti listaan dagiti pasamak idiay $3',
+'logentry-delete-revision-legacy' => 'Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita dagiti panagbaliw idiay panid $3',
+'logentry-suppress-delete' => 'Ni $1 ket {{GENDER:$2|pinasardengna}} ti panid ti $3',
+'logentry-suppress-event' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4',
+'logentry-suppress-revision' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4',
+'logentry-suppress-event-legacy' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita ti listaan dagiti pasamak idiay $3',
+'logentry-suppress-revision-legacy' => 'Ni $1 ket sekreto a {{GENDER:$2|binaliwanna}} ti panagkita dagiti panagbaliw idiay panid $3',
'revdelete-content-hid' => 'nailemmeng ti nagyan na',
'revdelete-summary-hid' => 'nailemmeng ti pakabuklan a naurnos',
'revdelete-uname-hid' => 'nailemmeng ti nagan ti agar-aramat',
'revdelete-uname-unhid' => 'saan a nailemmeng ti nagan ti agar-aramat',
'revdelete-restricted' => 'naipakat dagiti pammarit kadagiti administrador',
'revdelete-unrestricted' => 'naikkat dagiti pammarit para kadagiti administrador',
-'logentry-move-move' => 'Inyalis ni $1 daytoy panid $3 idiay $4',
-'logentry-move-move-noredirect' => 'Inyalis ni $1 ti panid ti $3 idiay $4 a saan a nangibati ti baw-ing',
-'logentry-move-move_redir' => 'Inyalis ni $1 ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing',
-'logentry-move-move_redir-noredirect' => 'Inyalis ni $1 ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing a saan a nangibati ti baw-ing',
-'logentry-patrol-patrol' => 'Minarkaan ni $1 ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
-'logentry-patrol-patrol-auto' => 'Automatiko a minarkaan ni $1 ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
-'logentry-newusers-newusers' => 'Nagpartuat idi ti $1 a pakabilangan ti agar-aramat',
-'logentry-newusers-create' => 'Nagpartuat idi ti $1 a pakabilangan ti agar-aramat',
-'logentry-newusers-create2' => 'Nagpartuat ni ti $3 a pakabilangan ti agar-aramat babaen ni $1',
+'logentry-move-move' => 'Ni $1 ket {{GENDER:$2|inyalisna}}ti panid $3 idiay $4',
+'logentry-move-move-noredirect' => 'Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 idiay $4 a saan a nangibati ti baw-ing',
+'logentry-move-move_redir' => 'Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing',
+'logentry-move-move_redir-noredirect' => 'Ni $1 ket {{GENDER:$2|inyalisna} ti panid ti $3 idiay $4 nga adda iti maysa a baw-ing a saan a nangibati ti baw-ing',
+'logentry-patrol-patrol' => 'Ni $1 ket {{GENDER:$2|minarkaanna}} ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
+'logentry-patrol-patrol-auto' => 'Ni $1 ket automatiko a {{GENDER:$2|minarkaanna}} ti panagbaliw a $4 ti panid ti $3 a napatruliaan',
+'logentry-newusers-newusers' => 'Ti pakabilangan idi ni $1 ket {{GENDER:$2|napartuat}}',
+'logentry-newusers-create' => 'Ti pakabilangan idi ni $1 ket {{GENDER:$2|napartuat}}',
+'logentry-newusers-create2' => 'Ti pakabilangan ti agar-aramat $3 ket {{GENDER:$2|napartuat}} idi babaen ni $1',
'logentry-newusers-byemail' => 'Ti pakabilangan a $3 ket pinartuat idi babaen ni $1 ken ti kontrasenias ket naipatulod idi babaen ti e-surat',
'logentry-newusers-autocreate' => 'Ti pakabilangan ni $1 ket automatiko a napartuat',
'logentry-rights-rights' => 'Ni $1 ket nangbaliw ti grupo a panakaikameng para kenni $3 manipud ti $4 iti $5',
'duration-centuries' => '$1 {{PLURAL:$1|siglo|sig-siglo}}',
'duration-millennia' => '$1 {{PLURAL:$1|milenio|mil-milenio}}',
+# Image rotation
+'rotate-comment' => 'Ti ladawan ket napusipos babaen ti $1 {{PLURAL:$1|a degrado|a degdegrado}} nga agpakanawan',
+
);
Esse potrebbero dover puntare a una pagina più appropriata.<br />
Vengono considerate pagine di disambiguazione tutte quelle che contengono i template elencati in [[MediaWiki:Disambiguationspage]].",
-'pageswithprop' => 'Pagine con una pagina di proprietà',
-'pageswithprop-text' => 'Questa pagina elenca le pagine che utilizzano una particolare pagina di proprietà.',
+'pageswithprop' => 'Pagine con una proprietà di pagina',
+'pageswithprop-legend' => 'Pagine con una proprietà di pagina',
+'pageswithprop-text' => 'Questa pagina elenca le pagine che utilizzano una particolare proprietà di pagina.',
'pageswithprop-prop' => 'Nome proprietà:',
+'pageswithprop-submit' => 'Vai',
'doubleredirects' => 'Redirect doppi',
'doubleredirectstext' => 'In questa pagina sono elencate pagine che reindirizzano ad altre pagine di redirect.
'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
-# Unknown messages
-'pageswithprop-legend' => 'Pagine con una pagina di proprietà',
-'pageswithprop-submit' => 'Vai',
+# Image rotation
+'rotate-comment' => 'Immagine ruotata di $1 {{PLURAL:$1|grado|gradi}} in senso orario',
+
);
'blocked-mailpassword' => 'ご使用中のIPアドレスからの編集はブロックされており、不正利用防止のため、パスワードの再発行機能は使用できません。',
'eauthentsent' => '指定したメールアドレスに、アドレス確認のためのメールをお送りしました。
メールに記載された手順に従って、このアカウントの所有者であることの確認が取れると、このアカウント宛のメールを受け取れるようになります。',
-'throttled-mailpassword' => '新しいパスワードは過去 {{PLURAL:$1|$1 時間}}に送信済みです。
-悪用防止のため、パスワードの再発行は {{PLURAL:$1|$1 時間}}に 1 回のみです。',
+'throttled-mailpassword' => 'パスワード再設定メールを過去 {{PLURAL:$1|$1 時間}}に送信済みです。
+悪用防止のため、パスワードの再設定は {{PLURAL:$1|$1 時間}}に 1 回のみです。',
'mailerror' => 'メールを送信する際にエラーが発生しました: $1',
'acct_creation_throttle_hit' => 'あなたと同じ IP アドレスでこのウィキに訪れた人が、最近 24 時間で {{PLURAL:$1|$1 アカウント}}を作成しており、これはこの期間で作成が許可されている最大数です。
そのため、現在この IP アドレスではアカウントをこれ以上作成できません。',
# Special:PasswordReset
'passwordreset' => 'パスワードの再設定',
-'passwordreset-text' => 'このフォームに入力すると、アカウント詳細のリマインダーをメールでお送りします。',
+'passwordreset-text' => 'このフォームに記入すると、パスワードを再設定できます。',
'passwordreset-legend' => 'パスワードの再設定',
'passwordreset-disabled' => 'パスワードの再設定は、このウィキでは無効になっています。',
'passwordreset-pretext' => '{{PLURAL:$1||下記のデータのいずれか 1 つを入力してください}}',
'passwordreset-capture-help' => 'このボックスにチェックを入れると、利用者に送信されるメールの内容 (仮パスワードを含む) をあなたも閲覧できます。',
'passwordreset-email' => 'メールアドレス:',
'passwordreset-emailtitle' => '{{SITENAME}}上のアカウントの詳細',
-'passwordreset-emailtext-ip' => '誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4) での
-ã\81\82ã\81ªã\81\9fã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°æ\83\85å ±ã\82\92é\80\81ä¿¡するよう申請しました。
+'passwordreset-emailtext-ip' => '誰か (おそらくあなた、IP アドレス $1) が {{SITENAME}} ($4)
+ã\81§ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92å\86\8dè¨å®\9aするよう申請しました。
以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。
$2
覚えていてそれを変更したくない場合には、このメッセージを無視して以前のパスワードを
使用し続けることができます。',
'passwordreset-emailtext-user' => '{{SITENAME}} の利用者 $1 があなたの {{SITENAME}} ($4)
-ã\81«ã\81\8aã\81\91ã\82\8bã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°æ\83\85å ±ã\82\92é\80\81ä¿¡するよう申請しました。
+ã\81§ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92å\86\8dè¨å®\9aするよう申請しました。
以下の利用者{{PLURAL:$3|アカウント|アカウント群}}がこのメールアドレスと紐付けられています。
$2
以前のパスワードを使い続けることができます。',
'passwordreset-emailelement' => '利用者名: $1
仮パスワード: $2',
-'passwordreset-emailsent' => '確認メールをお送りしました。',
-'passwordreset-emailsent-capture' => '下記の内容の、確認メールをお送りしました。',
-'passwordreset-emailerror-capture' => '以下の内容の確認メールを生成しましたが、利用者への送信に失敗しました: $1',
+'passwordreset-emailsent' => 'パスワード再設定メールをお送りしました。',
+'passwordreset-emailsent-capture' => '下記の内容の、パスワード再設定メールをお送りしました。',
+'passwordreset-emailerror-capture' => '以下の内容のパスワード再設定メールを生成しましたが、利用者への送信に失敗しました: $1',
# Special:ChangeEmail
'changeemail' => 'メールアドレスの変更',
'loginreqtitle' => 'ログインが必要',
'loginreqlink' => 'ログイン',
'loginreqpagetext' => '他のページを閲覧するには$1する必要があります。',
-'accmailtitle' => 'パスワードをお送りしました。',
+'accmailtitle' => 'パスワードをお送りしました',
'accmailtext' => "[[User talk:$1|$1]]のために無作為に生成したパスワードを、$2に送信しました。
この新アカウントのパスワードは、ログインした際に''[[Special:ChangePassword|パスワード変更]]''ページで変更できます。",
'newarticletext' => "まだ存在しないページへのリンクをたどりました。
このページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[[{{MediaWiki:Helppage}}|ヘルプページ]]を参照してください)。
誤ってこのページにたどり着いた場合には、ブラウザーの'''戻る'''ボタンで前のページに戻ってください。",
-'anontalkpagetext' => "----''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。
-匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。
-IP アドレスは複数の利用者で共有されている場合があります。
-もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられている考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。''",
+'anontalkpagetext' => "----
+''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。''
+
+匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。IP アドレスは複数の利用者で共有されている場合があります。もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられていると考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。",
'noarticletext' => '現在このページには内容がありません。
他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]、
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]、
[[MediaWiki:Disambiguationspage]] にリンクがあるテンプレートを使用しているページを、曖昧さ回避ページと見なします。",
'pageswithprop' => 'ページプロパティがあるページ',
+'pageswithprop-legend' => 'ページプロパティがあるページ',
'pageswithprop-text' => 'このページでは、特定のページプロパティを持つページを列挙します。',
'pageswithprop-prop' => 'プロパティ名:',
+'pageswithprop-submit' => '実行',
'doubleredirects' => '二重転送',
'doubleredirectstext' => 'このページでは、転送ページへの転送ページを列挙します。
'duration-centuries' => '$1 {{PLURAL:$1|世紀}}',
'duration-millennia' => '$1{{PLURAL:$1|,000 年}}',
-# Unknown messages
-'pageswithprop-legend' => 'ページプロパティがあるページ',
-'pageswithprop-submit' => '実行',
+# Image rotation
+'rotate-comment' => '画像を時計回りに $1 {{PLURAL:$1|度}}回転',
+
);
# Special:ListGroupRights
'listgrouprights-members' => '(lis a memba)',
-# E-mail user
+# Email user
'emailuser' => 'E-miel dis yuuza',
# Watchlist
'loginlanguagelabel' => 'Basa: $1',
'suspicious-userlogout' => 'Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Kasalahan ora dingertèni nèng piguna mail() PHP.',
'user-mail-no-addy' => 'Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.',
'user-mail-no-body' => 'Nyoba ngirim layang e-mail, tapi isine kosong.',
'prefs-displaywatchlist' => 'Opsi tampilan',
'prefs-diffs' => 'Prabédan',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Alamat layang èlèktronik kayané sah',
'email-address-validity-invalid' => 'Lebokaké alamat layang èlèktronik sing sah',
'listgrouprights-addgroup-self-all' => 'Nambahaké kabèh grup menyang akuné dhéwé',
'listgrouprights-removegroup-self-all' => 'Mbusak kabèh klompok saka akuné dhéwé',
-# E-mail user
+# Email user
'mailnologin' => 'Ora ana alamat layang e-mail',
'mailnologintext' => 'Panjenengan kudu [[Special:UserLogin|mlebu log]] lan kagungan alamat e-mail sing sah ing [[Special:Preferences|preféèrensi]] yèn kersa ngirim layang e-mail kanggo panganggo liya.',
'emailuser' => 'Kirim e-mail panganggo iki',
'monthsall' => 'kabèh',
'limitall' => 'kabèh',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Konfirmasi alamat e-mail',
'confirmemail_noemail' => 'Panjenengan ora maringi alamat e-mail sing absah ing [[Special:Preferences|préferènsi]] panjenengan.',
'confirmemail_text' => '{{SITENAME}} ngwajibaké panjenengan ndhedhes utawa konfirmasi alamat e-mail panjenengan sadurungé bisa nganggo fitur-fitur e-mail.
გვერდი ითვლება მრავამნიშვნელოვნად, თუ მასში განთავსებულია თარგი, რომლის სახელიც მითითებულია გვერდზე [[MediaWiki:Disambiguationspage]].",
'pageswithprop-prop' => 'თვისების სახელი:',
+'pageswithprop-submit' => 'მიდი',
'doubleredirects' => 'ორმაგი გადამისამართება',
'doubleredirectstext' => 'ამ გვერდზე ჩამოთვლილია გვერდები, რომლებიც გადამისამართებულია სხვა გადამისამართების გვერდებზე.
'blocklog-showsuppresslog' => 'ეს მომხმარებლი უკვე დამალულია და დაბლოკილია.
დაბლოკვათა ჟურნალი ქვემოთ მოყვანილია:',
'blocklogentry' => 'დაიბლოკა [[$1]]. ბლოკირების ვადა $2 $3.',
-'reblock-logentry' => 'á\83¨á\83\94á\83\90á\83¡á\83¬á\83\9dá\83 á\83\90 á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\92á\83£á\83 á\83\90á\83ªá\83\98á\83\90 [[$1]]-á\83¡á\83\97á\83\95á\83\98á\83¡, á\83\95á\83\90á\83\93á\83\90 á\83\92á\83\90á\83¡á\83\93á\83\98á\83¡ $2 $3',
+'reblock-logentry' => 'á\83¨á\83\94á\83\90á\83¡á\83¬á\83\9dá\83 á\83\90 á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\92á\83£á\83 á\83\90á\83ªá\83\98á\83\90 [[$1]]-á\83¡á\83\97á\83\95á\83\98á\83¡, á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\95á\83\90á\83\93á\83\90á\83\90 $2 $3',
'blocklogtext' => 'ეს არის მომხმარებლების დაბლოკვის და განბლოკვის ჟურნალი.
ავტომატურად დაბლოკილი IP მისამართები არაა ჩამოთვლილი.
იხილეთ [[Special:BlockList|ბლოკირებების სია]] მიმდინარე დაბლოკვებისთვის.',
'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
-# Unknown messages
-'pageswithprop-submit' => 'მიდი',
);
'listgrouprights-addgroup-all' => "Barlıq toparlardı qosıwı mu'mkin",
'listgrouprights-removegroup-all' => "Barlıq toparlardı o'shiriwi mu'mkin",
-# E-mail user
+# Email user
'mailnologin' => 'Jiberiwge adres tabılmadı',
'emailuser' => 'Xat jiberiw',
'emailpage' => "Paydalanıwshıg'a e-mail jiberiw",
'namespacesall' => "ha'mmesi",
'monthsall' => "ha'mme",
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-mail adresin tastıyıqlaw',
'confirmemail_send' => 'Tastıyıqlaw kodın jiberiw',
'confirmemail_sent' => 'Tastıyıqlaw xatı jiberildi.',
'loginlanguagelabel' => 'Tutlayt: $1',
'suspicious-userlogout' => 'Asuter n usenser yugwi acku yella ugur s iminig naɣ s tazarkatut n uqeddac proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'anezri warisem deg tawuri mail() n PHP',
'user-mail-no-addy' => 'Ɛred ad icegaɛ e-mail war tansa e-mail',
'prefs-displaywatchlist' => 'Tixtiṛiyin n ubeqqeḍ',
'prefs-diffs' => 'Timeẓliwin',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mail agi teɣbel',
'email-address-validity-invalid' => 'Telaq tansa e-mail i ɣbelen !',
'listgrouprights-addgroup-self-all' => 'Yezmer ad yernu akkw igrawen ar umiḍan-is',
'listgrouprights-removegroup-self-all' => 'Yezmer ad yekkes akkw igrawen ar umiḍan-is',
-# E-mail user
+# Email user
'mailnologin' => 'Ur yufi ḥedd (tansa)',
'mailnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] u tesɛiḍ tansa e-mail ṭaṣhiḥt deg [[Special:Preferences|isemyifiyen]] inek
iwakken ad tazneḍ email i imseqdacen wiyaḍ.',
'monthsall' => 'akk',
'limitall' => 'Akkw',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Sentem tansa n e-mail',
'confirmemail_noemail' => 'Ur tesɛiḍ ara tansa n email ṣaḥiḥ deg [[Special:Preferences|isemyifiyen n wemseqdac]] inek.',
'confirmemail_text' => '{{SITENAME}} yeḥweǧ aseɣbel n tansa e-mail inek/inem uqbel ad sexdemeḍ tanfa n tirawt.
'loginlanguagelabel' => 'Бзэ: $1',
'suspicious-userlogout' => 'Сеанс щыгъэтын узкӀэлъэӀуар гъэзэнщӀакъым, мыкорректнэ браузэрым иэ кэш зыщӀ проксим иригъэхьа хуэду ещхьщ.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'ХэщӀыкӀыгъуэ зымыӀэ хэукъуэгъуэ PHP-функциэ mail()',
# Change password dialog
# Special:ListGroupRights
'listgrouprights-members' => '(гупым и тхылъ)',
-# E-mail user
+# Email user
'emailuser' => 'Тхыгъэ хуэтхын',
# Watchlist
# Special:ListGroupRights
'listgrouprights-members' => 'ممبارانن فھرست',
-# E-mail user
+# Email user
'emailuser' => 'ممباروت بشلی کغاز انڅاوے',
# Watchlist
'listgrouprights-helppage' => '{{ns:help}}:توپ قۇقىقتارى',
'listgrouprights-members' => '(مۇشە ٴتىزىمى)',
-# E-mail user
+# Email user
'mailnologin' => 'ەش مەكەنجاي جونەلتىلگەن جوق',
'mailnologintext' => 'باسقا قاتىسۋشىعا حات جونەلتۋ ٴۇشىن [[Special:UserLogin|كىرۋىڭىز]] كەرەك, جانە [[Special:Preferences|باپتاۋىڭىزدا]] جارامدى ە-پوشتا جايى بولۋى ٴجون.',
'emailuser' => 'قاتىسۋشىعا حات جازۋ',
'namespacesall' => 'بارلىعى',
'monthsall' => 'بارلىعى',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ە-پوشتا مەكەنجايىن قۇپتاۋ',
'confirmemail_noemail' => '[[{{#special:Preferences}}|پايدالانۋشىلىق باپتالىمدارىڭىزدا]] جارامدى ە-پوشتا مەكەنجايىن قويماپسىز.',
'confirmemail_text' => '{{SITENAME}} ە-پوشتا مۇمكىندىكتەرىن پايدالانۋ ٴۇشىن الدىنان ە-پوشتا مەكەنجايىڭىزدىڭ جارامدىلىعىن تەكسەرىپ شىعۋىڭىز كەرەك.
'loginlanguagelabel' => 'Тіл: $1',
'suspicious-userlogout' => 'Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені, бұл жарамсыз браузер немесе кэштеуші проксидің сұранымына ұқсайды.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Mail() PHP-функциясындағы белгісіз қате.',
'user-mail-no-addy' => 'Е-пошта есімінсіз хабарлама жіберуге талпынды.',
'listgrouprights-helppage' => '{{ns:help}}:Топ құқықтары',
'listgrouprights-members' => '(мүше тізімі)',
-# E-mail user
+# Email user
'mailnologin' => 'Еш мекенжай жөнелтілген жоқ',
'mailnologintext' => 'Басқа қатысушыға хат жөнелту үшін [[{{#special:Userlogin}}|кіруіңіз]] жөн, және [[{{#special:Preferences}}|бапталымдарыңызда]] жарамды е-пошта мекенжайы болуы жөн.',
'emailuser' => 'Қатысушыға хат жазу',
'namespacesall' => 'барлығы',
'monthsall' => 'барлығы',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Е-пошта мекенжайын құптау',
'confirmemail_noemail' => '[[{{#special:Preferences}}|Пайдаланушылық бапталымдарыңызда]] жарамды е-пошта мекенжайын қоймапсыз.',
'confirmemail_text' => '{{SITENAME}} е-пошта мүмкіндіктерін пайдалану үшін алдынан е-пошта мекенжайыңыздың жарамдылығын тексеріп шығуыңыз керек.
'listgrouprights-helppage' => '{{ns:help}}:Top quqıqtarı',
'listgrouprights-members' => '(müşe tizimi)',
-# E-mail user
+# Email user
'mailnologin' => 'Eş mekenjaý jöneltilgen joq',
'mailnologintext' => 'Basqa qatıswşığa xat jöneltw üşin [[Special:UserLogin|kirwiñiz]] kerek, jäne [[Special:Preferences|baptawıñızda]] jaramdı e-poşta jaýı bolwı jön.',
'emailuser' => 'Qatıswşığa xat jazw',
'namespacesall' => 'barlığı',
'monthsall' => 'barlığı',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-poşta mekenjaýın quptaw',
'confirmemail_noemail' => '[[{{#special:Preferences}}|Paýdalanwşılıq baptalımdarıñızda]] jaramdı e-poşta mekenjaýın qoýmapsız.',
'confirmemail_text' => '{{SITENAME}} e-poşta mümkindikterin paýdalanw üşin aldınan e-poşta mekenjaýıñızdıñ jaramdılığın tekserip şığwıñız kerek.
'listgrouprights-members' => '(ಸದಸ್ಯರ ಪಟ್ಟಿ)',
'listgrouprights-addgroup-all' => 'ಎಲ್ಲಾ ಗುಂಪುಗಳನ್ನು ಸೇರಿಸಿ',
-# E-mail user
+# Email user
'mailnologin' => 'ಕಳುಹಿಸುವ ವಿಳಾಸ ಇಲ್ಲ',
'mailnologintext' => 'ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇ-ಅಂಚೆ ಕಳುಹಿಸಲು ನೀವು [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಿರಬೇಕು ಮತ್ತು ನಿಮ್ಮ [[Special:Preferences|ಪ್ರಾಶಸ್ತ್ಯಗಳ ಪುಟದಲ್ಲಿ]] ಒಂದು ಧೃಡೀಕೃತ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿರಬೇಕು.',
'emailuser' => 'ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆ ಕಳಿಸಿ',
'monthsall' => 'ಎಲ್ಲಾ',
'limitall' => 'ಎಲ್ಲಾ',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಖಾತ್ರಿ ಮಾಡಿ',
'confirmemail_noemail' => 'ನಿಮ್ಮ [[Special:Preferences|ಬಳಕೆದಾರ ಪ್ರಾಶಸ್ತ್ಯಗಳಲ್ಲಿ]] ಸರಿಯಾದ ಇ-ಅಂಚೆ ವಿಳಾಸವಿಲ್ಲ.',
'confirmemail_pending' => 'ನಿಮಗೆ ಧೃಡೀಕರಣ ಕೋಡ್ ಒಂದನ್ನು ಆಗಲೆ ಇ-ಅಂಚೆಯ ಮೂಲಕ ಕಳುಹಿಸಲಾಗಿದೆ;
'toc' => '목차',
'showtoc' => '보이기',
'hidetoc' => '숨기기',
-'collapsible-collapse' => 'ì\88¨ê¸°기',
-'collapsible-expand' => '보이기',
+'collapsible-collapse' => 'ì \91기',
+'collapsible-expand' => '펼치기',
'thisisdeleted' => '$1을 보거나 되살리겠습니까?',
'viewdeleted' => '$1을 보겠습니까?',
'restorelink' => '삭제된 편집 $1개',
'blocked-mailpassword' => '당신의 IP 주소는 편집을 할 수 없게 차단되어 있어서 악용하지 못하도록 비밀번호 되살리기 기능 사용이 금지됩니다.',
'eauthentsent' => '입력한 이메일로 확인 이메일을 보냈습니다.
게정에서 다른 이메일로 보내기 전에 이메일 내용의 지시대로 계정 확인 절차를 실행해 주십시오.',
-'throttled-mailpassword' => '비밀번호 확인 이메일을 이미 최근 $1시간 안에 보냈습니다.
-악용을 방지하기 위해 비밀번호 확인 메일은 $1시간마다 오직 하나씩만 보낼 수 있습니다.',
+'throttled-mailpassword' => '비밀번호 재설정 이메일을 이미 최근 {{PLURAL:$1|$1시간}} 안에 보냈습니다.
+악용을 방지하기 위해 비밀번호 재설정 메일은 {{PLURAL:$1|$1시간}}마다 오직 하나씩만 보낼 수 있습니다.',
'mailerror' => '메일 보내기 오류: $1',
'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 만들어, 계정 만들기 한도를 초과하였습니다.
따라서 지금은 이 IP 주소로는 더 이상 계정을 만들 수 없습니다.',
# Special:PasswordReset
'passwordreset' => '비밀번호 재설정',
-'passwordreset-text' => '이메일을 통해 계정 정보를 받을 수 있습니다. 아래의 칸을 채워주세요.',
+'passwordreset-text' => '비밀번호를 재설정하려면 이 양식을 채워주세요.',
'passwordreset-legend' => '비밀번호 재설정',
'passwordreset-disabled' => '이 위키에서는 비밀번호를 재설정할 수 없습니다.',
'passwordreset-pretext' => '{{PLURAL:$1||아래에 한 가지 정보를 입력하세요}}',
'passwordreset-capture-help' => '이 상자에 체크하면 이메일이 발송된 즉시 임시 비밀번호가 담긴 이메일을 볼 수 있습니다.',
'passwordreset-email' => '이메일 주소:',
'passwordreset-emailtitle' => '{{SITENAME}} 계정 자세한 정보',
-'passwordreset-emailtext-ip' => 'IP 주소 $1을 사용하는 누군가가 아마 자신이 {{SITENAME}} ($4)의 비밀번호 찾기를 요청하였습니다.
-이 이메일 주소와 연관된 계정의 목록입니다:
+'passwordreset-emailtext-ip' => '$1 IP 주소를 사용하는 누군가가 아마 자신이 {{SITENAME}} ($4)의 비밀번호 재설정을 요청하였습니다.
+이 이메일 주소와 연관된 {{PLURAL:$3|계정}}의 목록입니다:
$2
-이 {{PLURAL:$3|임시 비밀번호}}는 $5일 후에 만료됩니다.
+이 {{PLURAL:$3|임시 비밀번호}}는 {{PLURAL:$5|$5일}} 후에 만료됩니다.
이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,
-원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
-'passwordreset-emailtext-user' => '{{SITENAME}} ($4)의 사용자 $1이 비밀번호 찾기를 요청하였습니다.
-이 이메일 주소와 연관된 계정의 목록입니다:
+원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고
+이전의 비밀번호를 계속 사용할 수 있습니다.',
+'passwordreset-emailtext-user' => '{{SITENAME}} ($4)의 사용자 $1이 비밀번호 재설정dmf 요청하였습니다.
+이 이메일 주소와 연관된 {{PLURAL:$3|계정}}의 목록입니다:
$2
-이 {{PLURAL:$3|임시 비밀번호}}는 $5일 후에 만료됩니다.
+{{PLURAL:$3|이 임시 비밀번호}}는 {{PLURAL:$5|$5일}} 후에 만료됩니다.
이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,
-원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
+원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고
+이전의 비밀번호를 계속 사용할 수 있습니다.',
'passwordreset-emailelement' => '사용자 이름: $1
임시 비밀번호: $2',
-'passwordreset-emailsent' => 'ë¹\84ë°\80ë²\88í\98¸ 찾기 이메일을 보냈습니다.',
-'passwordreset-emailsent-capture' => 'ë¹\84ë°\80ë²\88í\98¸ 찾기 이메일이 발송되었으며, 아래에 나타나 있습니다.',
-'passwordreset-emailerror-capture' => 'ë¹\84ë°\80ë²\88í\98¸ 찾기 이메일이 만들어져 아래에 나타났지만 발송하는 데에는 실패했습니다: $1',
+'passwordreset-emailsent' => 'ë¹\84ë°\80ë²\88í\98¸ ì\9e¬ì\84¤ì \95 이메일을 보냈습니다.',
+'passwordreset-emailsent-capture' => 'ë¹\84ë°\80ë²\88í\98¸ ì\9e¬ì\84¤ì \95 이메일이 발송되었으며, 아래에 나타나 있습니다.',
+'passwordreset-emailerror-capture' => 'ë¹\84ë°\80ë²\88í\98¸ ì\9e¬ì\84¤ì \95 이메일이 만들어져 아래에 나타났지만 발송하는 데에는 실패했습니다: $1',
# Special:ChangeEmail
'changeemail' => '이메일 주소 바꾸기',
[[MediaWiki:Disambiguationspage]]에서 링크된 틀을 사용하는 문서를 동음이의 문서로 간주합니다.",
'pageswithprop' => '문서 속성으로 된 문서',
+'pageswithprop-legend' => '문서 속성으로 된 문서',
'pageswithprop-text' => '이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.',
'pageswithprop-prop' => '속성 이름:',
+'pageswithprop-submit' => '가기',
'doubleredirects' => '이중 넘겨주기 목록',
'doubleredirectstext' => '이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.
'exif-gpstrack' => '이동 방향',
'exif-gpsimgdirectionref' => '그림 방향에 대한 정보',
'exif-gpsimgdirection' => '그림 방향',
-'exif-gpsmapdatum' => '측ì§\80 ì¡°ì\82¬ ë\8d°ì\9d´ì²\98 ì\82¬ì\9a©',
+'exif-gpsmapdatum' => 'ì\82¬ì\9a©ë\90\9c 측ì§\80 ì¡°ì\82¬ ë\8d°ì\9d´í\84°',
'exif-gpsdestlatituderef' => '목적지의 위도 정보',
'exif-gpsdestlatitude' => '목적지의 위도',
'exif-gpsdestlongituderef' => '목적지의 경도 정보',
'duration-centuries' => '$1{{PLURAL:$1|세기}}',
'duration-millennia' => '$1{{PLURAL:$1|천년}}',
-# Unknown messages
-'pageswithprop-legend' => '문서 속성으로 된 문서',
-'pageswithprop-submit' => '가기',
+# Image rotation
+'rotate-comment' => '그림을 시계 방향으로 $1{{PLURAL:$1|도}}로 회전함',
+
);
'suspicious-userlogout' => "Do bes '''nit''' ußjelogg.
Et süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Nit bekannte Fähler met dä Funxjohn <code lang="en">mail()</code> vum PHP',
'user-mail-no-addy' => 'Do häs versöhg en <i lang="en">e-mail</i> der ohne en Adräß ze verschecke',
'prefs-displaywatchlist' => 'Enstellunge för et Aanzeje',
'prefs-diffs' => 'Ongerscheide un Verjliische',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'De Addräß fö de <i lang="en">e-mail</i> schingk en Odenung',
'email-address-validity-invalid' => 'Jivv en jöltijje Addräß fö de <i lang="en">e-mail</i> en',
'listgrouprights-addgroup-self-all' => 'Kann sesch sällver en alle Metmaacherjroppe erenn donn',
'listgrouprights-removegroup-self-all' => 'Kann sesch sällver uß alle Metmaacherjroppe eruß nämme',
-# E-mail user
+# Email user
'mailnologin' => 'Keij E-Mail Adress',
'mailnologintext' => 'Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail
Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze
'monthsall' => 'all',
'limitall' => 'alle',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-Mail Adress bestätije',
'confirmemail_noemail' => 'En [[Special:Preferences|Ding Enstellunge]] es kein öntlich E-Mail Adress.',
'confirmemail_text' => 'Ih datte en däm Wiki heh de E-Mail bruche kanns, muss De Ding E-Mail Adress bestätich han, dat se en Oodnung es un dat se och Ding eijene es. Klick op dä Knopp un Do kriss en E-Mail jescheck. Do steiht ene Link met enem Code dren. Wann De met Dingem Brauser op dä Link jeihs, dann deis De domet bestätije, dat et wirklich Ding E-Mail Adress es. Dat es nit allzo secher, alsu wör nix för Die Bankkonto oder bei de Sparkass, ävver et sorg doför, dat nit jede Peijaß met Dinger E-Mail oder Dingem Metmaachername eröm maache kann.',
'usernamehasherror' => 'Divê karakterên xerab ji bo navê bikarhêner neyên bikaranîn',
'loginlanguagelabel' => 'Ziman: $1',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'Hewl da e-nameyekê bê navnîşana e-nameyê bişîne',
# Change password dialog
'bold_tip' => 'Nivîsa stûr',
'italic_sample' => 'Nivîsa xwehr (îtalîk)',
'italic_tip' => 'Nivîsa xwehr (îtalîk)',
-'link_sample' => 'Navê lînkê',
+'link_sample' => 'Sernavê girêdanê',
'link_tip' => 'Girêdana navxweyî',
'extlink_sample' => 'http://www.example.com navê lînkê',
'extlink_tip' => 'Girêdana derve (http:// di destpêkê de ji bîr neke)',
'prefs-displaywatchlist' => 'Vebijarkan nîşan bide',
'prefs-diffs' => 'Cudahî',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-name derbasdar e',
'email-address-validity-invalid' => 'E-nameyeke derbasdar binivîse',
'listgrouprights-addgroup-all' => 'Hemû koman tevlî bike',
'listgrouprights-removegroup-all' => 'Hemû koman jê bibe',
-# E-mail user
+# Email user
'mailnologin' => 'Navnîşanê neşîne',
'mailnologintext' => 'Te gireke xwe [[Special:UserLogin|qeydbikê]] û adrêsa e-nameyan di [[Special:Preferences|tercihên xwe]] da nivîsandibe ji bo şandina e-nameyan ji bikarhênerên din ra.',
'emailuser' => 'Ji bikarhêner re e-name bişîne',
'whatlinkshere-links' => '← girêdan',
'whatlinkshere-hideredirs' => 'Beralîkirinan $1',
'whatlinkshere-hidetrans' => 'Naverokan $1',
-'whatlinkshere-hidelinks' => 'Lînkan $1',
+'whatlinkshere-hidelinks' => 'Girêdanan $1',
'whatlinkshere-hideimages' => '$1 lînkên wêneyan',
'whatlinkshere-filters' => 'Parzûn',
'monthsall' => 'hemû',
'limitall' => 'hemû',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Adrêsa e-nameyan nasbike',
'confirmemail_noemail' => 'Te e-mail-adressê xwe di [[Special:Preferences|tercihên xwe da]] nenivîsandiye.',
'confirmemail_success' => 'E-Mail adrêsa te hate naskirin. Tu niha dikarî xwe qeydbikê û kêfkê.',
# Special:ListGroupRights
'listgrouprights-members' => '(rol esely)',
-# E-mail user
+# Email user
'emailuser' => 'E-bostya an devnydhyer-ma',
'emailpage' => 'E-bostya devnydhyer',
'defemailsubject' => 'Ebost danvenys dre {{SITENAME}} gans an devnydhyer "$1"',
'monthsall' => 'oll',
'limitall' => 'oll',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Afydhya an drigva ebost',
'confirmemail_noemail' => "Nyns eus trigva ebost da settyes y'gas [[Special:Preferences|dowisyansow devnydhyer]].",
'login-abort-generic' => 'Сиздин кирүүңүз ийгиликтүү эмес болду - Үзүлдү',
'loginlanguagelabel' => 'Тил: $1',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "PHP'нин mail() функциясындагы белгисиз ката.",
# Change password dialog
'prefs-displaysearchoptions' => 'Көрсөтүүнүн ырастоолору',
'prefs-displaywatchlist' => 'Көрсөтүүнүн ырастоолору',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Эл. почтанын дареги анык көрүнөт',
'email-address-validity-invalid' => 'Эл. почтанын анык дарегин киргизиңиз!',
'listgrouprights-helppage' => 'Help:Топтордун укуктары',
'listgrouprights-members' => '(мүчөлөрдүн тизмеси)',
-# E-mail user
+# Email user
'emailuser' => 'Бул катышуучуга кат жиберүү',
'emailusername' => 'Катышуучунун аты:',
'emailusernamesubmit' => 'Жөнөтүү',
'monthsall' => 'баары',
'limitall' => 'баары',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Электрондук даректи аныктоо',
'confirmemail_loggedin' => 'Электрондук дарегиңиз аныкталды.',
'november' => 'Noviembre',
'december' => 'Deziembre',
'january-gen' => 'Enero',
-'february-gen' => 'Fevrero',
+'february-gen' => 'Hevrero',
'march-gen' => 'Março',
-'april-gen' => 'Abril',
+'april-gen' => 'Avril',
'may-gen' => 'Mayo',
-'june-gen' => 'Junio',
+'june-gen' => 'Juño',
'july-gen' => 'Jullo',
'august-gen' => 'Agosto',
-'september-gen' => 'Setembre',
-'october-gen' => 'Ochůvre',
-'november-gen' => 'Novembre',
-'december-gen' => 'Diziembre',
+'september-gen' => 'Setiembre',
+'october-gen' => 'Ochòvre',
+'november-gen' => 'Noviembre',
+'december-gen' => 'Deziembre',
'jan' => 'Ene',
-'feb' => 'Fev',
+'feb' => 'Hev',
'mar' => 'Mar',
-'apr' => 'Abr',
+'apr' => 'Avr',
'may' => 'May',
-'jun' => 'Jun',
+'jun' => 'Juñ',
'jul' => 'Jull',
'aug' => 'Ago',
'sep' => 'Set',
'oct' => 'Och',
'nov' => 'Nov',
-'dec' => 'Diz',
+'dec' => 'Dez',
# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Katēggoría|Katēggorías}}',
-'category_header' => 'Artícůlos en la katēggoría "$1"',
-'subcategories' => 'Sůkatēggorías',
-'category-media-header' => 'Arxivos de multimedya en la katēggoría "$1"',
+'pagecategories' => '{{PLURAL:$1|Kateggoría|Kateggorías}}',
+'category_header' => 'Artíkolos en la kateggoría "$1"',
+'subcategories' => 'Sòkateggorías',
+'category-media-header' => 'Arxivos de multimedya en la kateggoría "$1"',
'category-empty' => "''Esta katēggoría oy día, no contiene ni artícůlos ni arxivos de multimedya''",
-'hidden-categories' => '{{PLURAL:$1|Katēggoría escondida|Katēggorías escondidas}}',
+'hidden-categories' => '{{PLURAL:$1|Kateggoría escondida|Kateggorías escondidas}}',
'hidden-category-category' => 'Katēggorías escondidas',
'category-subcat-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo una baxo-katēggoría:|Esta katēggoría contiene {{PLURAL:$1|esta baxo-katēggoría aquí abaxo|$1 baxo-katēggorías aquí abaxo}}, de un total de $2 baxo-katēggorías:}}',
'category-subcat-count-limited' => 'Esta katēggoría contiene {{PLURAL:$1|la baxo-katēggoría venidera|$1 baxo-katēggorías venideras}}.',
'cancel' => 'Anular',
'moredotdotdot' => 'Más...',
'mypage' => 'Mi hoja',
-'mytalk' => 'La mi diskusyon',
+'mytalk' => 'Mi diskusyon',
'anontalk' => 'Diskusyón para este adresso de IP',
'navigation' => 'Navigación',
'and' => ' y',
'vector-action-undelete' => 'Traer atrás',
'vector-action-unprotect' => 'No guardar',
'vector-simplesearch-preference' => 'Aktivar consejos de búsqueda adelantada (sólo pelejo Vector)',
-'vector-view-create' => 'Crîar',
+'vector-view-create' => 'Criar',
'vector-view-edit' => 'Trocar',
-'vector-view-history' => 'Ver la storia',
+'vector-view-history' => 'Ver la istoria',
'vector-view-view' => 'Meldar',
'vector-view-viewsource' => 'Ver su manadero',
-'actions' => 'Acciones',
+'actions' => 'Aksiones',
'namespaces' => 'Espacios de nombres',
-'variants' => 'Varyantes',
+'variants' => 'Formas diferentes',
'errorpagetitle' => 'Yerro',
'returnto' => 'Tornar a $1.',
'go' => 'Vate',
'searcharticle' => 'Vate',
'history' => 'La îstoria de la hoja',
-'history_short' => 'Îstoria',
+'history_short' => 'Istoria',
'updatedmarker' => 'trocado desde mi visita de alcavo',
-'printableversion' => 'Versión apropiada para imprimir',
+'printableversion' => 'Forma apropiada para imprimir',
'permalink' => 'Atamiento permanente',
'print' => 'Imprimir',
'view' => 'Ver',
'edit' => 'Trocar',
-'create' => 'Crîar',
+'create' => 'Criar',
'editthispage' => 'Trocar esta hoja',
'create-this-page' => 'Crîar esta hoja',
'delete' => 'Efaçar',
'talkpage' => 'Diskutir la hoja',
'talkpagelinktext' => 'Messaje',
'specialpage' => 'Hoja Especial',
-'personaltools' => 'Aparatos personales',
+'personaltools' => 'Aparates personales',
'postcomment' => 'Capítůlo muevo',
'articlepage' => 'Ver el artícůlo de contenido',
'talk' => 'Diskusyón',
'views' => 'Vistas',
-'toolbox' => 'Cuadro de Aparatos',
+'toolbox' => 'Cuadro de aparates',
'userpage' => 'Ver la hoja del usador',
'projectpage' => 'Ver la hoja del projeto',
'imagepage' => 'Ver la hoja de la dosya',
'viewhelppage' => 'Ver la hoja de ayudo',
'categorypage' => 'Ver la hoja de la katēggoría',
'viewtalkpage' => 'Ver la diskusyón',
-'otherlanguages' => 'En otras lînguas',
+'otherlanguages' => 'En otras linguas',
'redirectedfrom' => '(Redirigido desde $1)',
'redirectpagesub' => 'Hoja redirigida',
-'lastmodifiedat' => 'Esta hoja fue trocada por la última vez el $1, a las $2.',
+'lastmodifiedat' => 'Esta hoja fue trocada por la dal cavo vez el $1, a las $2.',
'protectedpage' => 'Hoja guardada',
-'jumpto' => 'Salta á:',
+'jumpto' => 'Salta a:',
'jumptonavigation' => 'navigación',
-'jumptosearch' => 'búsqueda',
+'jumptosearch' => 'búsquida',
# 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) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'Encima de la {{SITENAME}}',
'currentevents' => 'Novedades',
'currentevents-url' => 'Project:Novedades',
'disclaimers' => 'Refuso de responsabilitá',
-'disclaimerpage' => 'Project:Rēfuso de responsabilitá jeneral',
+'disclaimerpage' => 'Project:Refuso de responsabilitá jeneral',
'edithelp' => '¿Cómo se la troca?',
'edithelppage' => 'Help:Una hoja, ¿cómodo se la troca?',
'helppage' => 'Help:Contènidos',
'mainpage' => 'La Primera Hoja',
'mainpage-description' => 'La Primera Hoja',
'policy-url' => 'Project:Politikas',
-'portal' => 'Puertal de la komunitá',
-'portal-url' => 'Project:Puertal de la komunitá',
+'portal' => 'Portal de la komunitá',
+'portal-url' => 'Project:Portal de la komunitá',
'privacy' => 'Principio de particòlaridad',
-'privacypage' => 'Project:Principio de particůlaridad',
+'privacypage' => 'Project:Principio de particòlaridad',
'badaccess' => 'Yerro de permissión',
'ok' => 'DE ACORDDO',
-'retrievedfrom' => 'Tomado del addresso "$1"',
+'retrievedfrom' => 'Acòjido del adhresso "$1"',
'youhavenewmessages' => 'Tienes $1 ($2).',
'newmessageslink' => 'mesajes nuevos',
'newmessagesdifflink' => 'el trocamiento de alcabo',
'thisisdeleted' => 'Ver o restorar $1?',
'viewdeleted' => 'Desea ver $1?',
'site-rss-feed' => 'Fuente de RSS de $1',
-'site-atom-feed' => 'Fuente de Atom de $1',
+'site-atom-feed' => 'Alimentela de Atom de $1',
'page-rss-feed' => '"$1" Fuente RSS',
'page-atom-feed' => '"$1" Subscripción Atom',
'red-link-title' => '$1 (esta hoja no egziste)',
'nstab-main' => 'Hoja',
'nstab-user' => 'Hoja de empleador',
'nstab-media' => 'Hoja de Meddia',
-'nstab-special' => 'Hoja special',
+'nstab-special' => 'Hoja especial',
'nstab-project' => 'Hoja del proyecto',
'nstab-image' => 'Dosya',
'nstab-mediawiki' => 'Messaj',
'nstab-template' => 'Xablón',
'nstab-help' => 'Ayudo',
-'nstab-category' => 'Katēggoría',
+'nstab-category' => 'Kateggoría',
# Main script and global functions
'nosuchspecialpage' => 'No ay tala hoja especial',
# General errors
'error' => 'Yerro',
'databaseerror' => 'Yerro de la Databasa',
-'missing-article' => 'La basa de dados no topó el teksto de una hoja llamada "$1" $2.
+'missing-article' => 'La basa de dados no topó el teksto de la hoja llamada "$1" $2.
-En lo más muńcho, esto se cavza de un "dif" anakróniko ou de un atamiento á la storia de una hoja que s\'efaçó.
+En lo mas muncho, esto se cavsa de un "dif" anakróniko ou de un atamiento a la istoria de una hoja que se efaçó.
Si esto no es el cavso, puede ser que topates una chincha en el lojikal.
-Si puede ser mete un [[Special:ListUsers/sysop|administrador]] en corriente y también ànota la URL.',
+Si puede ser mete un [[Special:ListUsers/sysop|administrador]] en corriente y también anota la URL.',
'missingarticle-rev' => '(nº. de revisión: $1)',
'missingarticle-diff' => '(Dif.: $1, $2)',
'filecopyerror' => 'No se pudo copiar el arxiv "$1" a "$2".',
'yourpasswordagain' => 'Entra de muevo la parola',
'remembermypassword' => 'Acórdate de mi entrada de usador en este bilgisayar/orddênador (por un maksimum de {{PLURAL:$1|día|días}})',
'login' => 'Entrar',
-'nav-login-createaccount' => 'Entrar / Crîar un cuento',
+'nav-login-createaccount' => 'Entrar / Criar un cuento',
'loginprompt' => 'Kale tener "cookies" aktivadas enel navegador para enrejistrarse en {{SITENAME}}',
'userlogin' => 'Entrar / Registrarse',
'logout' => 'Salir',
'accmailtitle' => 'La kontrasenya ha sido embiada.',
'accmailtext' => 'La kontrasenya para "$1" se ha embiado a $2.',
'newarticle' => '(Nuevo)',
-'newarticletext' => 'Allegates a una hoja que daínda no egziste.
+'newarticletext' => 'Arrivates a una hoja que daínda no egziste.
Para crear esta hoja, empeça a escribir en la caxa de abaxo. Mira [[{{MediaWiki:Helppage}}|la hoja de ayudo]] para saber más.
Si venites aquí por yerro, torna a la hoja de antes.',
'noarticletext' => 'En este momento no ay teksto en esta hoja.
-Puedes [[Special:Search/{{PAGENAME}}|buscar el títůlo de esta hoja]] en otras hojas,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rējistros relatados],
+Puedes [[Special:Search/{{PAGENAME}}|buscar el títolo de esta hoja]] en otras hojas,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los rejistros relatados],
ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} trocar esta hoja]</span>.',
'noarticletext-nopermission' => 'No ay teksto en esta oja.
Puedes [[Special:Search/{{PAGENAME}}|bushkar este titolo de oja]] en otras pajinas,
'viewpagelogs' => 'Ver los registros de esta hoja',
'currentrev' => "Enderechamiento d'al cavo",
'currentrev-asof' => 'Enderechamiento de alcavo á las $1',
-'revisionasof' => 'Enderechamiento á las $1',
+'revisionasof' => 'Enderechamiento a las $1',
'revision-info' => 'Revision en data $1 por $2',
'previousrevision' => '← Enderechamiento de antes',
'nextrevision' => 'Rêvisión venidera →',
'revdelete-radio-set' => 'Sí',
'revdelete-radio-unset' => 'No',
'revdelete-log' => 'Razón:',
-'revdel-restore' => 'troca la viźibilitá',
+'revdel-restore' => 'troca la visibilitá',
'revdel-restore-deleted' => 'enderechamientos efaçados',
-'revdel-restore-visible' => 'enderechamientos viźivles',
+'revdel-restore-visible' => 'enderechamientos visivles',
'pagehist' => 'La storia de la hoja',
'revdelete-reasonotherlist' => 'Otra razón',
# Diffs
'history-title' => 'Istorya de trokamientos para «$1»',
-'lineno' => 'Shurá $1:',
+'lineno' => 'Liña $1:',
'compareselectedversions' => 'Comparar versiones escogidas',
-'editundo' => 'deshaze',
+'editundo' => 'des-haze',
'diff-multi' => '(No {{PLURAL:$1|es amostrado un trokamiento intermedio echo|son amostrados $1 trokamientos intermedios echos}} por {{PLURAL:$2|un usador|$2 usadores}})',
# Search results
-'searchresults' => 'Resultados de la búsqueda',
-'searchresults-title' => 'Resultados de la búsqueda de «$1»',
+'searchresults' => 'Resultados de la búsquida',
+'searchresults-title' => 'Resultados de la búsquida de «$1»',
'searchresulttext' => 'Para saber más encima de buscar en {{SITENAME}}, mira la [[{{MediaWiki:Helppage}}|{{int:help}}]].',
'searchsubtitle' => 'Buscates \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|todas las hojas que empeçan con "$1"]] {{int:pipe-separator}} [[Special:WhatLinksHere/$1|todas las hojas que dan link a «$1»]])',
'searchsubtitleinvalid' => "Buscates '''$1'''",
'nextn' => '{{PLURAL:$1|$1}} venideras',
'prevn-title' => '$1 {{PLURAL:$1|resultado|resultados}} de antes',
'nextn-title' => '$1 {{PLURAL:$1|resultado|resultados}} venideros',
-'shown-title' => 'Àmostrar $1 {{PLURAL:$1|resultado|resultados}} por hoja',
+'shown-title' => 'Amostrar $1 {{PLURAL:$1|resultado|resultados}} por hoja',
'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
'searchmenu-exists' => 'Egziste una oja yamada "[[:$1]]" en esta viki',
'searchmenu-new' => "'''Crîar la hoja «[[:$1]]» en esta viki!'''",
'search-result-size' => '$1 ({{PLURAL:$2|1 biervo|$2 biervos}})',
'search-result-category-size' => '{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 basho-kateggoria|$2 basho-kateggoria}}, {{PLURAL:$3|1 dossia|$3 dossias}})',
'search-redirect' => '(direksión desde $1)',
-'search-section' => '(capítůlo $1)',
-'search-suggest' => 'Quisites dezir: $1',
+'search-section' => '(kapítolo $1)',
+'search-suggest' => 'Quijites dezir: $1',
'search-interwiki-caption' => 'Proyectos hermanos',
'search-interwiki-default' => 'Los resultados de $1:',
'search-interwiki-more' => '(más)',
'rcshowhidemine' => '$1 mis ediciones',
'rclinks' => 'Ver los dal cabo $1 trocamientos en los dal cabo $2 días.<br />$3',
'diff' => 'dif',
-'hist' => 'îst',
+'hist' => 'ist',
'hide' => 'Esconder',
'show' => 'Àmostrar',
'minoreditletter' => 'ch',
# File description page
'file-anchor-link' => 'Archivo',
-'filehist' => 'La storia del dosya',
+'filehist' => 'La istoria de la dosya',
'filehist-help' => 'Klika encima de una data/ora para vel el arxivo de esta data.',
'filehist-revert' => 'aboltar',
'filehist-current' => 'actual',
'emailuser' => 'Embia e-mail a este usuario',
# Watchlist
-'watchlist' => 'Mi lista de escogidas',
+'watchlist' => 'Lista de akavidamiento',
'mywatchlist' => 'La mi lista de akavidamientos',
'watchlistfor2' => 'Para $1 $2',
'addedwatchtext' => "La hoja «[[:$1]]» fue ajustada a tu [[Special:Watchlist|lista de escogidas]]. Los trocamientos venideros en esta hoja i en tu hoja de diskussión associada se van indicar aí, i la hoja va aparecer '''gordo''' en la hoja de [[Special:RecentChanges|trocamientos freskos]] para hazerla más kolay de detektar.
** Vandalismo',
# Rollback
-'rollbacklink' => 'àbolta',
+'rollbacklink' => 'abolta',
# Protect
'protectlogpage' => 'Protecciones de las hojas',
# Contributions
'contributions' => 'Ajustamientos {{GENDER:$1|del usador|de la usadora}}',
'contributions-title' => 'Ajustamientos {{GENDER:$1|del usuario|de la usuaria}} $1',
-'mycontris' => 'Mis ajustamientos',
+'mycontris' => 'Mis dados',
'contribsub2' => '$1 ($2)',
'uctop' => '(última modificación)',
'month' => 'Desde el mes (i antes):',
'sp-contributions-submit' => 'Buscar',
# What links here
-'whatlinkshere' => 'Atamientos á esta hoja',
+'whatlinkshere' => 'Atamientos a esta hoja',
'whatlinkshere-title' => 'Hojas que dan link a "$1"',
'whatlinkshere-page' => 'Hoja:',
'linkshere' => "Las hojas venideras dan link a '''[[:$1]]''':",
'blockip' => 'Bloquear usuario',
'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite',
'ipblocklist' => 'Usadores bloqueados',
-'blocklink' => 'blokea',
-'unblocklink' => 'quita el bloqueo',
-'change-blocklink' => 'troca el blokeo',
+'blocklink' => 'bloka',
+'unblocklink' => 'quita el bloko',
+'change-blocklink' => 'troca el bloko',
'contribslink' => 'donos',
'blocklogpage' => 'Bloqueos de usuarios',
'blocklogentry' => 'bloqueó a [[$1]] $3 durante un tiempo de $2',
'movetalk' => 'Renombrar la hoja de diskussión también, si es possible.',
'movelogpage' => 'Registro de traslados',
'movereason' => 'Razón:',
-'revertmove' => 'àbolta',
+'revertmove' => 'abolta',
# Export
'export' => 'Eksportar las hojas',
'tooltip-pt-mycontris' => 'La lista de tus àjustamientos',
'tooltip-pt-login' => 'Te encorajamos de entrar ma no estás obligado',
'tooltip-pt-logout' => 'Salir',
-'tooltip-ca-talk' => 'Diskusyón encima del artícůlo de contènido',
-'tooltip-ca-edit' => 'Puedes trocar esta hoja. Y si puede ser, usa el botón de previsteo antes de enrejistrar la hoja',
+'tooltip-ca-talk' => 'Diskusyón encima del artíkolo',
+'tooltip-ca-edit' => 'Puedes trocar esta hoja. Te rogamos, antes de enrejistrarla, echa una ojada en kullaneando el botón de previsteo',
'tooltip-ca-addsection' => 'Empeça una nueva sección',
'tooltip-ca-viewsource' => 'Esta hoja está guardada.
Puedes ver su manadero',
-'tooltip-ca-history' => "Enderechamientos passados d'esta hoja",
+'tooltip-ca-history' => 'Enderechamientos passados de esta hoja',
'tooltip-ca-protect' => 'Guardar esta hoja',
'tooltip-ca-delete' => 'Efassar esta hoja',
'tooltip-ca-move' => 'Taxirea (renombra) esta hoja',
-'tooltip-ca-watch' => 'Àjustar esta hoja á tu lista de akavidamientos',
+'tooltip-ca-watch' => 'Ajustar esta hoja a tu lista de akavidamientos',
'tooltip-ca-unwatch' => 'Quita esta hoja de tu lista de escogidos',
'tooltip-search' => 'Busca en {{SITENAME}}',
'tooltip-search-go' => 'Si ay una hoja con este nombre egzakto, vate allá.',
'tooltip-search-fulltext' => 'Busca este teksto en las hojas',
'tooltip-p-logo' => 'Vate a la primera hoja',
-'tooltip-n-mainpage' => 'Visita la primera hoja',
-'tooltip-n-mainpage-description' => 'Visita la primera hoja',
+'tooltip-n-mainpage' => 'Vate a la primera hoja',
+'tooltip-n-mainpage-description' => 'Vate a la primera hoja',
'tooltip-n-portal' => 'Encima del projeto, lo que puedes hazer y ánde topar todo',
-'tooltip-n-currentevents' => 'Información encima de los acontècimientos de oy día',
+'tooltip-n-currentevents' => 'Jhaberes y acontècimientos de oy día',
'tooltip-n-recentchanges' => 'Lista de los trocamientos muevos en el viki',
'tooltip-n-randompage' => 'Carga una hoja por asardo',
'tooltip-n-help' => 'Para saver mas',
-'tooltip-t-whatlinkshere' => 'Una lista de todas las hojas del viki que tienen atamientos con esta hoja',
-'tooltip-t-recentchangeslinked' => 'Los trocamientos freskos de las hojas que tienen atamiento con esta hoja',
+'tooltip-t-whatlinkshere' => 'La lista de todas las hojas del viki que se atan con esta hoja',
+'tooltip-t-recentchangeslinked' => 'Los trocamientos muevos en las hojas atadas con esta hoja',
'tooltip-feed-rss' => 'Sindicación RSS de esta hoja',
'tooltip-feed-atom' => "Fuente de Atom d'esta hoja",
'tooltip-t-contributions' => 'Ver la lista de ajustamientos de este usuario',
'tooltip-t-emailuser' => 'A este usuario, mándale una letra electrόnica (ímey)',
-'tooltip-t-upload' => 'Suve dosyas por aquí',
+'tooltip-t-upload' => 'Suve las dosyas por aquí',
'tooltip-t-specialpages' => 'Lista de todas las hojas especiales',
-'tooltip-t-print' => "Versión apropiada para imprimir d'esta hoja",
-'tooltip-t-permalink' => "Atamiento permanente á est'enderechamiento de la hoja",
-'tooltip-ca-nstab-main' => 'Ve el artícůlo de contènido',
+'tooltip-t-print' => 'Forma apropiada para imprimir esta hoja',
+'tooltip-t-permalink' => 'Atamiento permanente a este enderechamiento de la hoja',
+'tooltip-ca-nstab-main' => 'Ve el artíkolo de contènido',
'tooltip-ca-nstab-user' => 'Ve la hoja de usuario',
'tooltip-ca-nstab-special' => 'Esta es una hoja especial, la hoja ya no se puede trocar',
'tooltip-ca-nstab-project' => 'Ver la hoja del prodjekto',
'tooltip-diff' => 'Mostra los trocamientos que él/ella hizo en el texhto.',
'tooltip-compareselectedversions' => 'Ve las diferencias entre las dos versiones escogidas de esta hoja.',
'tooltip-watch' => 'Ajusta esta hoja a tu lista de escogidas',
-'tooltip-rollback' => '«Àbolta» àbolta todas los trocamientos del usador de alcavo, sólo en klikando una vez.',
-'tooltip-undo' => '«Deshaze» àbolta este trocamiento y la avre en el modo de previsteo. Permete àjustar una razón en el somaryo.',
+'tooltip-rollback' => '«Abolta» abolta todas los trocamientos del usador de alcavo, sólo en klikando una vez.',
+'tooltip-undo' => '«Deshaze» abolta este trocamiento y la avre en el modo de previsteo. Permete ajustar una razón en el somario.',
'tooltip-summary' => 'Entrar un somaryo kurto',
# Attribution
'customjsprotected' => "Dir hutt net d'Recht dës JavaScript-Säit z'änneren, well dorop déi perséinlech Astellunge vun engem anere Benotzer gespäichert sinn.",
'ns-specialprotected' => 'Spezialsäite kënnen net verännert ginn.',
'titleprotected' => "Eng Säit mat dësem Numm kann net ugeluecht ginn. Dës Spär gouf vum [[User:$1|$1]] gemaach deen als Grond ''$2'' uginn huet.",
+'filereadonlyerror' => 'De Fichier "$1" konnt net geännert ginn well de Repertoire vun de Fichieren "$2" nëmme geliest däerf ginn.
+
+Den Administrateur den d\'Schreiwe gespaart huet, huet dës Erklärung uginn: "$3"',
'invalidtitle-knownnamespace' => 'Net valabelen Titel mam Nummraum "$2" a mam Text "$3"',
'invalidtitle-unknownnamespace' => 'Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text "$2"',
'exception-nologin' => 'Net ageloggt',
'editundo' => 'zréck',
'diff-multi' => '({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vun {{PLURAL:$2|engem|$2}} Benotzer {{PLURAL:$1|gëtt|ginn}} net gewisen)',
'diff-multi-manyusers' => '({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vu méi wéi $2 {{PLURAL:$2|Benotzer|Benotzer}} ginn net gewisen)',
+'difference-missing-revision' => '{{PLURAL:$2|Eng Versioun|$2 Versioune}} vun dëser Differenz ($1) {{PLURAL:$2|gouf|goufen}} net fonnt.
+
+Dat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.
+Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbuch vum Läschen].',
# Search results
'searchresults' => 'Resultat vum Sichen',
Eng Säite gëtt als Homonymie-Säit behandelt, wa si eng Schabloun benotzt déi vu [[MediaWiki:Disambiguationspage]] verlinkt ass.",
'pageswithprop' => 'Säite mat enger Säiten-Eegeschaft',
+'pageswithprop-legend' => 'Säite mat enger Säiten-Eegeschaft',
'pageswithprop-prop' => 'Numm vun der Eegeschaft:',
+'pageswithprop-submit' => 'Lass',
'doubleredirects' => 'Duebel Viruleedungen',
'doubleredirectstext' => 'Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden.
'duration-centuries' => '$1 {{PLURAL:$1|Joerhonnert|Joerhonnerten}}',
'duration-millennia' => '$1 {{PLURAL:$1|Millenaire|Millenairen}}',
-# Unknown messages
-'pageswithprop-legend' => 'Säite mat enger Säiten-Eegeschaft',
-'pageswithprop-submit' => 'Lass',
);
* @author Andrijko Z.
* @author Aslan4ik
* @author Cekli829
+ * @author Lezgia
* @author MF-Warburg
* @author Migraghvi
* @author Namik
'actionthrottled' => 'Фадвилин сергьятар',
# Virus scanner
+'virus-scanfailed' => 'Сканди гъалатl (кулег$1)',
'virus-unknownscanner' => 'Малумтушир антивирус',
# Login and logout pages
'suspicious-userlogout' => "Sisitemu ezize ekiragiro kyo eky'okugivaamu kubanga kirabise nga ekivudde mu kalambulanetti enfu<br />
oba mu puloguramu etereka n'eddamu okuyisa ebiragiro ebivudde awalala.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "Wazzewo kiremya atategeerese mu mukolo mail() ogw'omu PHP",
# Change password dialog
# Special:ListGroupRights
'listgrouprights-members' => '(lukalala lwa bamemba)',
-# E-mail user
+# Email user
'emailuser' => 'Memba ono musindikire e-mail',
# Watchlist
'loginlanguagelabel' => 'Taol: $1',
'suspicious-userlogout' => "Dien verzeuk óm aaf te melde is genegeerd, ómdet 't liek esof 't verzeuk is versjik door 'ne browser of cacheproxy dae kepot is.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "Dao haet ziech 'n ónbekénde fout veurgedaon in de mail()-functie van PHP",
'user-mail-no-addy' => "Perbeerdjes 'ne mail te sjikke zónger 'n adres",
'prefs-displaywatchlist' => 'Toeaningsinstèllinger',
'prefs-diffs' => 'Vers',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => "'t E-mailadres liek geldig",
'email-address-validity-invalid' => "Gif 'n geldig e-mailadres op",
'listgrouprights-addgroup-self-all' => 'Voeg alle gruup toe aan eige gebroeker',
'listgrouprights-removegroup-self-all' => 'Wösj alle gruup van eige gebroeker',
-# E-mail user
+# Email user
'mailnologin' => 'Gein e-mailadres bekènd veur deze gebroeker',
'mailnologintext' => "De mos zien [[Special:UserLogin|aangemèld]] en 'n gèldig e-mailadres in bie dien [[Special:Preferences|veurkäöre]] höbbe ingevuld om mail nao anger gebroekers te sjture.",
'emailuser' => "Sjik deze gebroeker 'nen e-mail",
'monthsall' => 'al',
'limitall' => 'al',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Bevèstig e-mailadres',
'confirmemail_noemail' => 'Doe höbs gein geldig e-mailadres ingegaeve in dien [[Special:Preferences|veurkäöre]].',
'confirmemail_text' => "Deze wiki vereis dats te dien e-mailadres instèls iedats te e-mailfuncties
'loginlanguagelabel' => 'Kalba: $1',
'suspicious-userlogout' => 'Jūsų prašymas atsijungti buvo atmestas, nes, atrodo, jį klaidingai išsiuntė naršyklė arba spartinantysis tarpinis serveris.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Nežinoma klaida PHP mail() funkcijoje',
'user-mail-no-addy' => 'Bandyta išsiųsti elektroninį laišką be el. pašto adreso.',
'user-mail-no-body' => 'Mėginta siųsti tuščia ar pernelyg trumpą E-pašto žinutė.',
'prefs-displaywatchlist' => 'Rodymo nuostatos',
'prefs-diffs' => 'Skirtumai',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Panašu, kad E-pašto adresas yra teisingas',
'email-address-validity-invalid' => 'Įveskite korektišką e-pašto adresą',
'listgrouprights-addgroup-self-all' => 'Priskirti visas grupes prie paskyros',
'listgrouprights-removegroup-self-all' => 'Pašalinti visas grupes iš savo paskyros',
-# E-mail user
+# Email user
'mailnologin' => 'Nėra adreso',
'mailnologintext' => 'Jums reikia būti [[Special:UserLogin|prisijungusiam]] ir turi būti įvestas teisingas el. pašto adresas jūsų [[Special:Preferences|nustatymuose]], kad siųstumėte el. laiškus kitiems nautotojams.',
'emailuser' => 'Rašyti laišką šiam naudotojui',
'monthsall' => 'visi',
'limitall' => 'visi',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Patvirtinkite el. pašto adresą',
'confirmemail_noemail' => 'Jūs neturite nurodę teisingo el. pašto adreso [[Special:Preferences|savo nustatymuose]].',
'confirmemail_text' => 'Šiame projekte būtina patvirtinti el. pašto adresą prieš naudojant el. pašto funkcijas. Spustelkite žemiau esantį mygtuką,
'login-abort-generic' => 'I luh tumna a hlawhchham - Pamţùl a ni',
'loginlanguagelabel' => 'Ţawng: $1',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'E-chenhmun awm lova e-lehkha thawn i tum.',
# Change password dialog
'prefs-displaywatchlist' => 'Duhthlanna tilang rawh',
'prefs-diffs' => 'Danglamna',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-chenhmun a dik hmel',
'email-address-validity-invalid' => 'E-chenhmun dik ziak rawh',
'listgrouprights-members' => '(tel zawng zawng)',
'listgrouprights-addgroup' => '{{PLURAL:$2|Pawl|Pawl}} belhna: $1',
-# E-mail user
+# Email user
'emailuser' => 'He hmangtu hi e-lehkha thawn rawh',
'emailusername' => 'Hmangtu hming:',
'emailusernamesubmit' => 'Thehlut rawh',
'login-abort-generic' => 'Jūsu pieteikšanās bija neveiksmīga — Darbība pārtraukta',
'loginlanguagelabel' => 'Valoda: $1',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Nezināma kļūda PHP mail() funkcijā',
# Change password dialog
'prefs-displaywatchlist' => 'Pamatuzstādījumi',
'prefs-diffs' => 'Izmaiņas',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-pasta adrese šķiet derīga',
'email-address-validity-invalid' => 'Ievadiet derīgu e-pasta adresi',
'listgrouprights-addgroup-self-all' => 'Pievienot visas grupas savam kontam',
'listgrouprights-removegroup-self-all' => 'Noņemt visas grupas no sava konta',
-# E-mail user
+# Email user
'mailnologin' => 'Nav adreses, uz kuru sūtīt',
'mailnologintext' => 'Tev jābūt [[Special:UserLogin|iegājušam]], kā arī tev jābūt [[Special:Preferences|norādītai]] derīgai e-pasta adresei, lai sūtītu e-pastu citiem lietotājiem.',
'emailuser' => 'Sūtīt e-pastu šim lietotājam',
'monthsall' => 'visi',
'limitall' => 'visas',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Apstiprini e-pasta adresi',
'confirmemail_noemail' => '[[Special:Preferences|Tavās izvēlēs]] nav norādīta derīga e-pasta adrese.',
'confirmemail_text' => 'Šajā wiki ir nepieciešams apstiprināt savu e-pasta adresi, lai izmantotu e-pasta funkcijas.
'loginlanguagelabel' => 'भाषा : $1',
'suspicious-userlogout' => 'अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृति द्वारा पठाओल गेल छल।',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'पी.एच.पी.क संदेश कार्य() मे अज्ञात दोष',
'user-mail-no-addy' => 'बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास',
'prefs-displaywatchlist' => 'दृश्य विकल्प सभ',
'prefs-diffs' => 'अन्तर निर्धारक सभ',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ई-पत्र संकेत मान्य बुझाइत अछि',
'email-address-validity-invalid' => 'एकटा मान्य ई-पत्र संकेत लिखू',
'listgrouprights-addgroup-self-all' => 'सभटा वर्गकेँ अपन खातामे जोड़ू',
'listgrouprights-removegroup-self-all' => 'सभटा वर्गकेँ अपन खातासँ निकालू',
-# E-mail user
+# Email user
'mailnologin' => 'कोनो पठेबाक पता नै',
'mailnologintext' => 'अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]] मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।',
'emailuser' => 'ऐ प्रयोक्ताकेँ ई-पत्र पठाउ',
'monthsall' => 'सभ',
'limitall' => 'सभटा',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => ' ई-पत्र सत्यापित करू',
'confirmemail_noemail' => 'अहाँ लग कोनो मान्य ई-पत्र संकेत नै अछि एतए [[Special:Preferences|प्रयोक्ताक पसिन्न सभ]] देबा लेल।',
'confirmemail_text' => '{{जालस्थल}} चाहैए जे अहाँ अपन ई-पत्र सुविधा प्रयोग करबासँ पहिने अपन ई-पत्र संकेतक सत्यापन करू।
'loginlanguagelabel' => 'Basa: $1',
'suspicious-userlogout' => "Panjalukan Rika nggo metu log ditolak jalarak ketone dikirim nang panjlajah sing rusak utawa proksi panyinggah (''caching proxy'').",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Kasalahan sing ora genah nang fungsi mail() PHP.',
'user-mail-no-addy' => 'Njajal ngirimna imel tanpa nganggo alamat imel.',
'prefs-displaywatchlist' => 'Opsi tampilan',
'prefs-diffs' => 'Prabédan',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Alamatimel ketone wis sah',
'email-address-validity-invalid' => 'Monggo dilebokna alamat imel sing bener',
# Special:ListGroupRights
'listgrouprights-members' => '(daftar anggota)',
-# E-mail user
+# Email user
'emailuser' => 'Kirim imel maring panganggo kiye',
'emailtarget' => 'Lebokna jeneng panganggo utawa panampa',
'emailusername' => 'Jeneng panganggo:',
'loginlanguagelabel' => 'Кяль: $1',
'suspicious-userlogout' => 'Вешфксце лисемс кардафоль сяс мес няеви тянь кучезь колаф интернетс вятиень эли ётка ёкамань сервер вельде.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Аф содаф эльбятькс PHP сёрмавятемань функциеса.',
'user-mail-no-addy' => 'Тяряфтыхть кучемс е-сёрма е-паргафтома',
'listgrouprights-addgroup-all' => 'Ули кода поладомс сембе полгатне',
'listgrouprights-removegroup-all' => 'Ули кода сембе полгатне валхтомс',
-# E-mail user
+# Email user
'mailnologin' => 'Аш кучема адрес',
'mailnologintext' => 'Тондейть эряви [[Special:UserLogin|сувамс]]
ди эряви кондясти электрононь адресце тонь [[Special:Preferences|арафнемасот]] иля тиихненди электрононь сёрмат кучемаснонды.',
'namespacesall' => 'сембе',
'monthsall' => 'сембе',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Кемостамс электрононь адресть',
'confirmemail_noemail' => 'Тонь аш кондясти электрононь адрес тяштьф тонь [[Special:Preferences|тиить арафнематнень]] эса.',
'confirmemail_text' => '{{SITENAME}} веши тонь электрононь адресцень кемокстамац электрононь адресть арафнематнень тевс нолдамада инголе.
# User preference toggles
'tog-underline' => 'Garih bawahi tautan:',
'tog-justify' => 'Ratokan paragraf',
-'tog-hideminor' => 'Suruakkan suntingan ketek di parubahan tabaru',
-'tog-hidepatrolled' => 'Suruakkan suntingan nan lah dijago di parubahan tabaru',
-'tog-newpageshidepatrolled' => 'Suruakkan laman nan lah dijago dari dafta laman baru',
+'tog-hideminor' => 'Suruakan suntiangan ketek di parubahan tabaru',
+'tog-hidepatrolled' => 'Suruakan suntiangan nan lah dipatroli di parubahan tabaru',
+'tog-newpageshidepatrolled' => 'Suruakkan laman nan lah dipatroli dari dafta laman baru',
'tog-extendwatchlist' => 'Kambangkan dafta pantau untuak malihek sado parubahan, indak nan baru se',
'tog-usenewrc' => 'Gunokan tampilan parubahan tingkek lanjuik (paralu JavaScript)',
'tog-numberheadings' => 'Agiah nomor judua sacaro otomatis',
'tog-fancysig' => 'Jadikan tando tangan manjadi teks wiki (indak jo tautan otomatis)',
'tog-externaleditor' => 'Gunokan editor dari lua sacaro bawaan (untuak nan ahli sajo, butuah pangaturan khusus di komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.])',
'tog-externaldiff' => 'Gunokan diff eksternal sacaro bawaan (untuak nan ahli sajo, kabutuahan pangaturan khusus pado komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.].)',
-'tog-showjumplinks' => 'Aktifkan tautan pambantu "langsuang ka"',
-'tog-uselivepreview' => 'Gunokan pratayang langsuang (JavaScript) (eksperimental)',
-'tog-forceeditsummary' => 'Ingekkan awak bilo kotak ringkasan suntiangan masih kosoang',
-'tog-watchlisthideown' => 'Suruakkan suntiangan surang di dafta pantau',
-'tog-watchlisthidebots' => 'Suruakkan suntiangan bot di dafta pantau',
-'tog-watchlisthideminor' => 'Suruakkan suntiangan ketek di dafta pantau',
-'tog-watchlisthideliu' => 'Suruakkan suntiangan pangguno masuak log di dafta pantau',
-'tog-watchlisthideanons' => 'Suruakkan suntiangan pangguno indak di kana di dafta pantau',
-'tog-watchlisthidepatrolled' => 'Suruakkan suntiangan tapatroli di dafta pantau',
+'tog-showjumplinks' => 'Aktifkan pautan bantuan "langsuang ka"',
+'tog-uselivepreview' => 'Gunoan pratonton langsuang (JavaScript) (eksperimental)',
+'tog-forceeditsummary' => 'Ingekan ambo bilo kotak ikhtisar suntiangan kosong',
+'tog-watchlisthideown' => 'Suruakan suntiangan surang di dafta pantau',
+'tog-watchlisthidebots' => 'Suruakan suntiangan bot di dafta pantau',
+'tog-watchlisthideminor' => 'Suruakan suntiangan ketek di dafta pantau',
+'tog-watchlisthideliu' => 'Suruakan suntiangan pangguno masuak log di dafta pantau',
+'tog-watchlisthideanons' => 'Suruakan suntiangan pangguno indak di kana di dafta pantau',
+'tog-watchlisthidepatrolled' => 'Suruakan suntiangan tapatroli di dafta pantau',
'tog-ccmeonemails' => 'Kiriman Ambo salinan surel nan dikiriman ka urang lain',
'tog-diffonly' => 'Jan tampilan isi laman di bawah pabedoan suntiangan',
'tog-showhiddencats' => 'Tampilan kategori tasambunyi',
# Dates
'sunday' => 'Akaik',
'monday' => 'Sinayan',
-'tuesday' => 'Salaso',
+'tuesday' => 'Salasa',
'wednesday' => "Raba'a",
'thursday' => 'Kamih',
'friday' => 'Jumaik',
'vector-action-delete' => 'Hapuih',
'vector-action-move' => 'Pindahkan',
'vector-action-protect' => 'Linduangkan',
-'vector-action-undelete' => 'Pambatalan panghapusan',
+'vector-action-undelete' => 'Pambatalan panghapuihan',
'vector-action-unprotect' => 'Tuka palinduangan',
'vector-simplesearch-preference' => 'Aktifkan kotak pancarian sadarano (hanyo kulik Vector)',
'vector-view-create' => 'Buek',
'vector-view-view' => 'Baco',
'vector-view-viewsource' => 'Caliak sumber',
'actions' => 'Tindakan',
-'namespaces' => 'Ruang namo:',
+'namespaces' => 'Ruang namo',
'variants' => 'Varian:',
'navigation-heading' => 'Menu navigasi',
'searcharticle' => 'Tuju',
'history' => 'Riwayaik laman',
'history_short' => 'Riwayaik',
-'updatedmarker' => 'diubah sajak kunjuangan tarakhir ambo',
+'updatedmarker' => 'diubah samanjak kunjuangan tarakhia ambo',
'printableversion' => 'Versi cetak',
'permalink' => 'Pautan parmanen',
'print' => 'Cetak',
-'view' => 'Tampilkan',
+'view' => 'Baco',
'edit' => 'Suntiang',
'create' => 'Buek',
'editthispage' => 'Suntiang laman ko',
'create-this-page' => 'Buek laman iko',
'delete' => 'Hapuih',
-'deletethispage' => 'Hapuih laman iko',
-'undelete_short' => 'Batal hapuih $1 {{PLURAL:$1|suntiangan|suntiangan}}',
-'viewdeleted_short' => 'Liek {{PLURAL:$1|ciek suntiangan|$1 suntiangan}} nan dihapuih',
+'deletethispage' => 'Hapuih laman ko',
+'undelete_short' => 'Batal hapuih $1 {{PLURAL:$1|suntiangan}}',
+'viewdeleted_short' => 'Lihek {{PLURAL:$1|$1 suntiangan}} nan dihapuih',
'protect' => 'Linduangkan',
'protect_change' => 'ubah',
-'protectthispage' => 'Lindungi laman iko',
+'protectthispage' => 'Linduangi laman ko',
'unprotect' => 'Tuka palinduangan',
'unprotectthispage' => 'Tuka palindungan laman ko',
'newpage' => 'Laman baru',
-'talkpage' => 'Musyawarahkan laman ko',
+'talkpage' => 'Rundiangkan laman ko',
'talkpagelinktext' => 'maota',
'specialpage' => 'Laman istimewa',
'personaltools' => 'Pakakeh pribadi',
'newarticletext' => "Laman nan awak cari alun ado.
Untuak mambuek laman tu, mulailah dangan manulih dalam kotak di bawah (caliak [[{{MediaWiki:Helppage}}|laman bantuan]] untuak informasi lanjuiknyo).
Jikok awak indak sangajo sampai ka laman ko, klik tombol '''back''' pado panjalajah web awak.",
-'anontalkpagetext' => "----''Iko adolah laman pambicaraan saurang pangguno anonim nan alun mambuek akun atau indak manggunoannyo.
-Jadi, kami tapaso harus mamakai alamat IP nan basangkutan untuak maidentifikasikannyo.
-Jikok Sanak adolah saurang pangguno anonim dan marasa mandapekkan komentar-komentar nan indak relevan nan ditujuan langsung kapado Sanak, sila [[Special:UserLogin/signup|mambuek akun]] atau [[Special:UserLogin|masuak log]] untuak mahindari karancuan jo pangguno anonim lainnya di lain wakatu.''",
+'anontalkpagetext' => "----''Iko adolah laman rundiang saurang pangguno anonim nan alun mambuek akun atau indak manggunoannyo.
+Jadi, kami tapaso mamakai alamat IP nan takaik untuak mangenalinyo.
+Jikok Sanak adolah pangguno anonim dan maraso mandapek komentar nan indak lamak nan ditujuan langsung kapado Sanak, cubolah [[Special:UserLogin/signup|mambuek akun]] atau [[Special:UserLogin|masuak log]] guno manghindari karancuan jo pangguno anonim lainnyo.''",
'noarticletext' => 'Kini ko indak ada teks di laman iko.
Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancarian untuak judul laman iko]] di laman-laman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancari log takaik], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} manyuntiang laman iko]</span>.',
'noarticletext-nopermission' => 'Kini ko indak ado teks dalam laman ko.
Angku dapek malieknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambanaman]",
'rev-deleted-no-diff' => "Angku indak dapek maliek pabedoan ko dek salah satu dari revisinyo alah '''dihapuih'''.
Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].",
+'rev-suppressed-no-diff' => "Angku indak dapek maliek pabedoan ko dek salah satu dari revisinyo alah '''dihapuih'''.",
+'rev-deleted-unhide-diff' => "Revisi laman ko alah '''dihapuih'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].
+Sanak masih dapek [$1 maliek revisi ko] ko' amuah.",
+'rev-suppressed-unhide-diff' => "Revisi laman ko alah '''tabanam'''.
+Rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log pambanaman].
+Sanak masih dapek [$1 maliek revisi ko] ko' amuah.",
+'rev-deleted-diff-view' => "Laman revisi ko alah '''dihapuih'''.
+Sanak dapek mancaliaknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapuihan].",
+'rev-suppressed-diff-view' => "Revisi laman ko alah '''tabanam'''.
+Sanak dapek malieknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambanaman]",
'rev-delundel' => 'tampilkan/suruakkan',
'rev-showdeleted' => "tunjua'an",
+'revisiondelete' => 'Hapuih/batal hapuih revisi',
+'revdelete-nooldid-title' => 'Target revisi indak basobok',
+'revdelete-nologtype-title' => 'Tipe log indak diagiah',
+'revdelete-nologtype-text' => 'Sanak indak mngagiah tipe log untuak manerapkan tindakan ko.',
+'revdelete-nologid-title' => 'Entri log indak valid',
+'revdelete-no-file' => 'Berkas nan dituju indak basobok.',
+'revdelete-show-file-confirm' => 'Apokah Sanak yakin nio mancaliak revisi nan alah dihapuih dari berkas "<nowiki>$1</nowiki>" per $3, $2?',
'revdelete-show-file-submit' => 'Yo',
+'revdelete-selected' => "'''{{PLURAL:$2|Revisi piliahan}} dari [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Log pilihan}}:'''",
'revdelete-radio-set' => 'Yo',
'revdelete-radio-unset' => 'Indak',
'revdelete-log' => 'Alasan:',
'showingresults' => "Di bawah ko dikaluaan sampai {{PLURAL:$1|'''$1''' hasil}}, dimulai dari #'''$2'''.",
'showingresultsnum' => "Di bawah ko dikaluaan {{PLURAL:$3|'''$3'''}} hasil mulai dari #'''$2'''.",
'showingresultsheader' => "{{PLURAL:$5|Hasil '''$1 - $2''' dari '''$3'''}} untuak '''$4'''",
-'nonefound' => "'''Catatan''': hanyo babarapo ruangnamo yang dicari sacaro default.
-Cubo awali permintaan awak tu jo ''all:'' untuak mancari sado kandungan (tamasuak laman ota, templat, dll), atau gunoan ruangnamo yang diinginkan sabagai awalan.",
+'nonefound' => "'''Catatan''': hanyo babarapo ruangnamo nan dicari sacaro default.
+Cubo awali pamintaan Sanak tu jo ''sadonyo:'' untuak mancari kasado kandungan (tamasuak laman rundiang, templat, dll), atau gunoan ruangnamo nan diinginkan sabagai awalan.",
'search-nonefound' => 'Indak ado hasil nan cocok sasuai jo parmintaan',
'powersearch' => 'Pencarian lanjut',
'powersearch-legend' => 'Pencarian lanjut',
'prefs-help-realname' => "Namo asli sifaiknyo opsional.
Jiko' Angku manambahkannyo, namo asli Angku akan digunoan untuak mengenal hasil karaja Angku.",
'prefs-help-email' => "Alamaik surel ko hanyolah tambahan, tapi paralu untuak ma-''reset'' kato sandi, bilo Sanak lupo kato sandi.",
-'prefs-help-email-others' => 'Sanak dapek mamiliah untuak mangizinkan urang lain manghubungi jo surel malalui laman pangguno atau laman diskusi.
-Alamaik surel tu indakkan tau dek urang nan manghubungi sanak tu.',
+'prefs-help-email-others' => 'Sanak dapek mamiliah untuak mangizinkan urang lain manghubungi jo surel malalui laman pangguno atau laman rundiang.
+Alamaik surel Sanak indakkan tau dek urang nan manghubungi sanak tu.',
'prefs-help-email-required' => 'Alamaik surel wajib diisi.',
'prefs-info' => 'Informasi dasar',
'prefs-i18n' => 'Internasionalisasi',
# Upload
'upload' => 'Muek berkas',
-'uploadlogpage' => 'Log unggah',
+'uploadbtn' => 'Mamuek berkas',
+'reuploaddesc' => 'Batal dan baliak ka formulir pamuatan',
+'uploadtext' => "Gunoan formulir di bawah untuak mangunggah berkas.
+Untuak manampilan atau mancari berkas nan sabalumnyo dimuek, gunoan [[Special:FileList|dafta berkas]]. Pangunggahan (ulang) tacatat dalam [[Special:Log/upload|log pangunggahan]], samantaro panghapuihan tacatat dalam [[Special:Log/delete|log panghapuihan]].
+
+Untuak manampilkan atau manyaratoan berkas pado suatu laman, gunoan salah satu format di bawah ko:
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.jpg]]</nowiki></code>''' untuak manampilan berkas dalam ukuran aslinyo
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.png|200px|thumb|left|teks alternatif]]</nowiki></code>''' untuak manampilan berkas jo leba 200px dalam sabuah kotak di kiri laman jo 'teks alternatif' sabagai katarangan gambar
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Berkas.ogg]]</nowiki></code>''' sabagai pautan langsuang ka berkas nan dimaksud tanpa manampilan berkas tarsabuik di laman wiki",
+'upload-permitted' => 'Jenis berkas nan dipabuliahan: $1.',
+'upload-preferred' => 'Jenis berkas nan disaranan: $1.',
+'upload-prohibited' => 'Jenis berkas nan dilarang: $1.',
+'uploadlog' => 'log pangunggahan',
+'uploadlogpage' => 'Log pangunggahan',
+'uploadlogpagetext' => 'Barikuik adolah dafta unggahan berkas tabaru.
+Lihek [[Special:NewFiles|galeri berkas baru]] untuak tampilan visual.',
'filename' => 'Namo berkas',
'filedesc' => 'Ikhtisar',
'fileuploadsummary' => 'Ikhtisar:',
Nampaknyo berkas ko marupoan gambar jo ukuran dipaketek ''(miniatua)''.
Koq Sanak ado versi resolusi panuah dari gambar ko, cubolah muekan berkas tasabuik. Koq indak, harap ubah namo berkas ko.",
'uploadedimage' => 'muek "[[$1]]"',
+'upload-source' => 'Berkas sumber',
+'sourcefilename' => 'Namo berkas sumber:',
+'sourceurl' => 'URL sumber:',
+'destfilename' => 'Namo berkas tujuan:',
+'upload-maxfilesize' => 'Ukuran berkas maksimum: $1',
+'upload-description' => 'Katarangan berkas',
+'upload-options' => 'Opsi pangunggahan',
+'watchthisupload' => 'Pantau berkas ko',
'license' => 'Lisensi:',
'license-header' => 'Lisensi',
+'nolicense' => 'Indak ad nan dipiliah',
+'license-nopreview' => '(Pratonton indak tasadio)',
+'upload_source_url' => ' (suatu URL valid nan dapek diakses publik)',
+'upload_source_file' => ' (berkas nan di komputer Sanak)',
# Special:ListFiles
+'listfiles-summary' => 'Laman istimewa ko manampilan kasado berkas nan alah diunggah.
+Katiko disariang dek pangguno, hanyo versi berkas tabaru dari berkas nan diunggah nan tampil.',
+'listfiles_search_for' => 'Cari namo berkas:',
+'imgfile' => 'berkas',
'listfiles' => 'Dafta berkas',
'listfiles_thumb' => 'Miniatur',
'listfiles_date' => 'Tanggal',
'imagelinks' => 'Panggunoan berkas',
'linkstoimage' => 'Barikuik ko {{PLURAL:$1|$1 laman nan takaik}} jo berkas:',
'nolinkstoimage' => 'Indak ado laman nan batauik ka berkas ko.',
+'morelinkstoimage' => 'Lihek [[Special:WhatLinksHere/$1|pautan baliak]] ka berkas ko.',
'linkstoimage-redirect' => '$1 (pangaliahan berkas) $2',
'sharedupload' => 'Berkas ko barasal dari $1 dan mungkin digunoan oleh berbagai proyek lain.',
'sharedupload-desc-here' => 'Berkas ko dari $1, mungkin juo digunoan untuak proyek-proyek lain.
'watchlist' => 'Pantauan',
'mywatchlist' => 'Pantauan',
'watchlistfor2' => 'Untuak $1 $2',
-'addedwatchtext' => "Laman \"[[:\$1]]\" lah ditambahkan ka [[Special:Watchlist|dafta pantauan Sanak]].
-Parubahan laman ko tamasuak laman rundiangnyo akan ditampilan pado [[Special:RecentChanges|dafta parubahan]] '''bacetak taba''' agar labiah mudah mancaliaknyo.",
+'addedwatchtext' => 'Laman "[[:$1]]" lah ditambahan ka [[Special:Watchlist|Pantauan]] Sanak.
+Parubahan laman ko tamasuak laman rundiangnyo akan ditampilan disinan.',
'removewatch' => 'Hapuih dari dafta pantau',
'removedwatchtext' => 'Laman "[[:$1]]" lah dihapuih dari [[Special:Watchlist|dafta pantau Sanak]].',
'watch' => 'Pantau',
'ipbotheroption' => 'lainnyo',
'ipbotherreason' => 'Alasan lain/tambahan:',
'ipbhidename' => 'Suruakan namo pangguno dari dafta jo suntiangan',
-'ipbwatchuser' => 'Pantau laman pangguno ko jo laman diskusinyo',
+'ipbwatchuser' => 'Pantau laman pangguno ko jo laman rundiangnyo',
'ipb-disableusertalk' => 'Halang pangguno ko manyuntiang laman diskusinyo wakatu disakek',
'ipb-change-block' => 'Sakek baliak pangguno jo setelan ko',
'ipb-confirm' => 'Konfirmasi sakek',
Една страница се смета за страница за појаснување ако го користи шаблонот што води од [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => 'Страници со својство',
+'pageswithprop-legend' => 'Страници со својство',
'pageswithprop-text' => 'На страницава се наведени страници што користат дадено својство.',
'pageswithprop-prop' => 'Име на својството:',
+'pageswithprop-submit' => 'Оди',
'doubleredirects' => 'Двојни пренасочувања',
'doubleredirectstext' => 'Оваа страница ги прикажува пренасочувачките страници до други пренасочувачки страници.
'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
-# Unknown messages
-'pageswithprop-legend' => 'Страници со својство',
-'pageswithprop-submit' => 'Оди',
+# Image rotation
+'rotate-comment' => 'Сликата е завртена за $1 {{PLURAL:$1|степен|степени}} вдесно',
+
);
* @author Praveenp
* @author Sadik Khalid
* @author Sadik Khalid <sadik.khalid@gmail.com>
+ * @author Santhosh.thottingal
* @author ShajiA
* @author Shiju Alex <shijualexonline@gmail.com>
* @author Shijualex
'disambiguations-text' => "താഴെക്കൊടുത്തിരിക്കുന്ന താളുകളിൽ '''വിവക്ഷിതങ്ങൾ താളിലേയ്ക്ക്''' കുറഞ്ഞത് ഒരു കണ്ണിയുണ്ട്. അവ അനുയോജ്യമായ താളിലേയ്ക്ക് കണ്ണിചേർക്കപ്പെടേണ്ടതാവാം. <br />
[[MediaWiki:Disambiguationspage]] എന്ന താളിൽ കണ്ണി ചേർത്തിട്ടുള്ള ഫലകം ഉപയോഗിക്കുന്ന താളുകളെ വിവക്ഷിതങ്ങൾ താളായി കണക്കാക്കുന്നു.",
+'pageswithprop-submit' => 'പോകൂ',
+
'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ',
'doubleredirectstext' => 'ഈ താളിൽ ഒരു തിരിച്ചുവിടലിൽ നിന്നും മറ്റു തിരിച്ചുവിടൽ താളുകളിലേയ്ക്ക് പോകുന്ന താളുകൾ കൊടുത്തിരിക്കുന്നു. ഓരോ വരിയിലും ഒന്നാമത്തേയും രണ്ടാമത്തേയും തിരിച്ചുവിടൽ താളിലേക്കുള്ള കണ്ണികളും, രണ്ടാമത്തെ തിരിച്ചുവിടൽ താളിൽ നിന്നു ശരിയായ ലക്ഷ്യതാളിലേക്കുള്ള കണ്ണികളും ഉൾക്കൊള്ളുന്നു.
<del>വെട്ടിക്കൊടുത്തിരിക്കുന്നവ</del> ശരിയാക്കിയവയാണ്.',
'enotif_body_intro_restored' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ $PAGEEDITDATE-നു {{gender:$2|$2}} പുനഃസ്ഥാപിച്ചിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
'enotif_body_intro_changed' => '{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താളിൽ $PAGEEDITDATE-നു {{gender:$2|$2}} മാറ്റം വരുത്തിയിരിക്കുന്നു, ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിനായി $3 കാണുക.',
'enotif_lastvisited' => 'താങ്കളുടെ അവസാന സന്ദർശനത്തിനു ശേഷമുണ്ടായ മാറ്റങ്ങൾ കാണുവാൻ $1 സന്ദർശിക്കുക.',
-'enotif_lastdiff' => 'à´\88 മാറàµ\8dà´±à´\82 ദർശിà´\95àµ\8dà´\95ാൻ $1 കാണുക.',
+'enotif_lastdiff' => 'à´\88 മാറàµ\8dà´±à´\82 à´\95ാണാൻ $1 കാണുക.',
'enotif_anon_editor' => 'അജ്ഞാത ഉപയോക്താവ് $1',
'enotif_body' => 'പ്രിയ $WATCHINGUSERNAME,
'duration-centuries' => '{{PLURAL:$1|ഒരു നൂറ്റാണ്ട്|$1 നൂറ്റാണ്ട്}}',
'duration-millennia' => '{{PLURAL:$1|ഒരു സഹസ്രാബ്ദം|$1 സഹസ്രാബ്ദം}}',
-# Unknown messages
-'pageswithprop-submit' => 'പോകൂ',
);
'loginlanguagelabel' => 'Хэл: $1',
'suspicious-userlogout' => 'Таны гарах хүсэлт нь эвдэрхий хөтөч буюу кэшлэгч проксигоор явуулсан мэт харагдаж байгаа тул зөвшөөрсөнгүй.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "PHP's mail() функцэд үл танигдах алдаа гарлаа.",
'user-mail-no-addy' => 'Цахин шуудангийн хаягийг оруулалгүйгээр шуудан явуулахыг оролдлоо.',
'prefs-displaywatchlist' => 'Харагдацийн тохиргоо',
'prefs-diffs' => 'Ялгаанууд',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Цахим шуудан хүчинтэй байна',
'email-address-validity-invalid' => 'и-майл хаягаа зөв оруулна уу.',
'listgrouprights-addgroup-self-all' => 'Бүх бүлгийг өөрийн бүртгэлд нэмэх',
'listgrouprights-removegroup-self-all' => 'Өөрийн бүртгэлээс бүх бүлгийг хасах',
-# E-mail user
+# Email user
'mailnologin' => 'илгээх хаяг байхгүй',
'mailnologintext' => 'Та бусад хэрэглэгчдэд мэйл явуулахын тулд өөрийн [[Special:Preferences|хувийн тохируулгадаа]] мэйлээ оруулсан, мөн [[Special:UserLogin|нэвтэрсэн]] байх шаардлагатай.',
'emailuser' => 'Энэ хэрэглэгчид мэйл илгээх',
'monthsall' => 'бүгдийг',
'limitall' => 'бүгдийг',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Мэйл хаягийг баталгаажуулах',
'confirmemail_noemail' => 'Та өөрийн [[Special:Preferences|хэрэглэгчийн тохиргоондоо]] хүчинтэй мэйл хаяг оруулаагүй байна.',
'confirmemail_text' => '{{SITENAME}} нь мэйлийн функцуудыг ашиглахын тулд мэйл хаягаа баталгаажуулахыг хэрэглэгчдээс шаарддаг болно.
'loginlanguagelabel' => 'भाषा: $1',
'suspicious-userlogout' => 'तुमचे अदाखल होणे प्रतिबंधित झाले कारण असे दिसते की ते तुटलेल्या न्याहाळकाद्वारे पाठवले गेले.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'पीएचपीच्या विपत्र() पर्यायात अज्ञात चूक',
'user-mail-no-addy' => 'ईमेल पत्त्या विना ईमेल पाठवण्यचा प्रयत्न केला',
'prefs-displaywatchlist' => 'दर्शन पर्याय',
'prefs-diffs' => 'फरक',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'विपत्रपत्ता वैध आहे',
'email-address-validity-invalid' => 'वैध विपत्रपत्ता लिहा',
'listgrouprights-addgroup-self-all' => 'सर्व समूह स्वतःच्या खात्यात मिळवा',
'listgrouprights-removegroup-self-all' => 'सर्व समूह स्वतःच्या खात्यातून काढून टाका',
-# E-mail user
+# Email user
'mailnologin' => 'पाठविण्याचा पत्ता नाही',
'mailnologintext' => 'इतर सदस्यांना विपत्र(ई-मेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि प्रमाणित (ई-मेल) पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमुद असणे आवश्यक आहे.',
'emailuser' => 'या सदस्याला ई-मेल पाठवा',
'monthsall' => 'सर्व',
'limitall' => 'सर्व',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ई-मेल पत्ता पडताळून पहा',
'confirmemail_noemail' => '[[Special:Preferences|सदस्य पसंतीत]] तुम्ही प्रमाणित विपत्र (ई-मेल) पत्ता दिलेला नाही.',
'confirmemail_text' => 'विपत्र सुविधा वापरण्या पूर्वी {{SITENAME}}वर तुमचा विपत्र (ई-मेल) पत्ता प्रमाणित करणे गरजेचे आहे. तुमच्या पत्त्यावर निश्चितीकरण विपत्र (ई-मेल) पाठवण्याकरिता खालील बटण सुरू करा.विपत्रात कुटसंकेतच्(पासवर्ड) असलेला दुवा असेल;तुमचा विपत्र (ई-मेल) पत्ता प्रमाणित करण्या करिता तुमच्या विचरकात हा दिलेला दुवा चढवा.',
Sesebuah laman dianggap sebagai laman penyahkekaburan jika ia menggunakan templat yang dipaut dari [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => 'Halaman dengan sifat halaman',
+'pageswithprop-legend' => 'Halaman dengan sifat halaman',
'pageswithprop-text' => 'Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.',
'pageswithprop-prop' => 'Nama sifat:',
+'pageswithprop-submit' => 'Pergi',
'doubleredirects' => 'Lencongan berganda',
'doubleredirectstext' => 'Yang berikut ialah senarai laman yang melencong ke laman lencongan lain. Setiap baris mengandungi pautan ke laman lencongan pertama dan kedua, serta baris pertama bagi teks lencongan kedua, lazimnya merupakan laman sasaran "sebenar", yang sepatutnya ditujui oleh lencongan pertama.
'duration-centuries' => '$1 abad',
'duration-millennia' => '$1 alaf',
-# Unknown messages
-'pageswithprop-legend' => 'Halaman dengan sifat halaman',
-'pageswithprop-submit' => 'Pergi',
+# Image rotation
+'rotate-comment' => 'Imej diputar sebanyak $1 {{PLURAL:$1|darjah|darjah}} mengikut arah jam',
+
);
'loginlanguagelabel' => 'Lingwa: $1',
'suspicious-userlogout' => "Ir-rikjesta tiegħek li toħroġ barra mill-kont tiegħek ġiet miċħuda minħabba li jidher li din intbagħtet minn browser li ma jaħdimx jew minn proxy ta' caching.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Żball mhux magħruf fil-funzjoni mail() tal-PHP.',
'user-mail-no-addy' => 'Pruvajt tibgħat posta elettronika mingħajr indirizz.',
'prefs-displaywatchlist' => "Opzjonijiet ta' viżwalizazzjoni",
'prefs-diffs' => 'Differenzi',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'L-indirizz elettroniku jidher validu',
'email-address-validity-invalid' => 'Daħħal indirizz elettroniku validu',
'listgrouprights-addgroup-self-all' => "Jista' jżid kull grupp lill-kont tiegħu stess",
'listgrouprights-removegroup-self-all' => "Jista' jneħħi l-gruppi kollha mill-kont tiegħu stess",
-# E-mail user
+# Email user
'mailnologin' => 'L-Ebda indirizz tal-posta',
'mailnologintext' => "Sabiex tkun tista' tibgħat posta elettronika 'l utenti oħrajn huwa neċessarju li [[Special:UserLogin|tidħol fis-sit]] bħalha utent reġistrat u jkollhok indirizz validu fil-[[Special:Preferences|preferenzi]] tiegħek.",
'emailuser' => 'Ikteb lil dan l-utent',
'monthsall' => 'kollha',
'limitall' => 'kollha',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Ikkonferma l-indirizz tal-posta elettronika',
'confirmemail_noemail' => "M'għandekx indirizz tal-posta elettronika validu fil-[[Special:Preferences|preferenzi tal-utent]].",
'confirmemail_text' => "{{SITENAME}} għandha bżonn li inti tivverifika l-indirizz tal-posta elettronika tiegħek qabel ma tkun tista' tagħmel użu mill-faċilitajiet tal-posta elettronika.
# Special:ListGroupRights
'listgrouprights-members' => '(کارورون لیست)',
-# E-mail user
+# Email user
'mailnologintext' => 'برای برسنیین پوست الکترونیکی به کارورون دیگه ونه [[Special:UserLogin|بورین سامانه دله]] و نشونی پوست الکترونیکی معتبری تو [[Special:Preferences|ترجیحات]] خادت ره داشته بایی.',
'emailuser' => 'این کارور وسّه ایمیل بَرسِن',
'emailpage' => 'ئـی-مهیـل ای کـارور وهسه',
'namespacesall' => 'همه',
'monthsall' => 'همه ماهئون',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail_body_changed' => 'ات نفر، احتمالاً خاد شمِا، از نشونی آیپی $1 نشونی پوست ایلکتورونیک حیساب «$2» {{SITENAME}} ره تغییر هدائه.
برای تایید این که این حیساب واقعاً شمه شه و فعال هکردن دبارهٔ ویژگی پوست ایلکتورونیک {{SITENAME}}، پیوند زیر دله ره شه مرورگر دله وا هکنین:
'noemailprefs' => 'Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.',
'emailconfirmlink' => 'Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'Siūⁿ beh kià tiān-chú-phoe, m̄-koh bô siá tē-chí.',
# Change password dialog
# Special:LinkSearch
'linksearch' => 'Chhiau-chhoē chām-goā liân-kiat',
-# E-mail user
+# Email user
'mailnologin' => 'Bô siu-phoe ê chū-chí',
'mailnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] jī-chhiáⁿ ū 1 ê ū-hāu ê e-mail chū-chí tī lí ê [[Special:Preferences|iōng-chiá siat-tēng]] chiah ē-tàng kià e-mail hō· pa̍t-ūi iōng-chiá.',
'emailuser' => 'Kià e-mail hō· iōng-chiá',
'monthsall' => 'choân-pō͘',
'limitall' => '全部',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Khak-jīn e-mail chū-chí',
'confirmemail_text' => 'Sú-iōng e-mail kong-lêng chìn-chêng tio̍h seng khak-jīn lí ê e-mail chū-chí ū-hāu. Chhi̍h ē-pêng hit-ê liú-á thang kià 1 tiuⁿ khak-jīn phoe hō· lí. Hit tiuⁿ phoe lāi-bīn ū 1 ê te̍k-sû liân-kiat. Chhiáⁿ iōng liû-lám-khì khui lâi khoàⁿ, án-ne tō ē-tit khak-jīn lí ê chū-chí ū-hāu.',
'confirmemail_send' => 'Kià khak-jīn phoe',
Slette- og flytteloggen for denne siden gjengis her:",
'moveddeleted-notice' => 'Denne siden har blitt slettet.
Slette- og flytteloggen vises nedenfor.',
-'log-fulllog' => 'Vil hele loggen',
+'log-fulllog' => 'Vis hele loggen',
'edit-hook-aborted' => 'Redigering avbrutt av en funksjon, uten forklaring.',
'edit-gone-missing' => 'Kunne ikke oppdatere siden fordi den har blitt slettet.',
'edit-conflict' => 'Redigeringskonflikt.',
En side anses om en pekerside om den inneholder en mal som det lenkes til fra [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Sider med sideverdi',
+'pageswithprop-legend' => 'Sider med en sideverdi',
'doubleredirects' => 'Doble omdirigeringer',
'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.
'duration-centuries' => '$1 {{PLURAL:$1|århundre|århundrer}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
-# Unknown messages
-'pageswithprop-legend' => 'Sider med en sideverdi',
);
'loginlanguagelabel' => 'Spraak: $1',
'suspicious-userlogout' => 'Dien Anfraag, di aftomellen, worr aflehnt, wieldat se vermoodlich vun en Browser oder Cache-Proxy sennt worrn is, de nich mehr funkschoneert.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Unbekennten Fehler in PHP sien mail()-Funkschoon',
'user-mail-no-addy' => 'Versöch en E-Mail ahn E-Mail-Adress to sennen.',
'prefs-displaywatchlist' => 'Weddergaav-Instellungen',
'prefs-diffs' => 'Ünnerscheed',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-Mail-Adress lett good',
# User rights
'listgrouprights-addgroup-self-all' => 'Kann all Gruppen to’t egen Brukerkonto tofögen',
'listgrouprights-removegroup-self-all' => 'Kann all Gruppen vun’t egen Brukerkonto wegdoon',
-# E-mail user
+# Email user
'mailnologin' => 'Du büst nich anmellt.',
'mailnologintext' => 'Du musst [[Special:UserLogin|anmellt wesen]] un in diene [[Special:Preferences|Instellungen]] en güllige E-Mail-Adress hebben, dat du annere Brukers E-Mails tostüren kannst.',
'emailuser' => 'E-Mail an dissen Bruker',
'monthsall' => 'alle',
'limitall' => 'all',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Nettbreefadress bestätigen',
'confirmemail_noemail' => 'Du hest kene bestätigte Nettbreefadress in diene [[Special:Preferences|Instellen]] angeven.',
'confirmemail_text' => '{{SITENAME}} verlangt, dat du diene Nettbreefadress bestätigst, ehrder du de Nettbreeffunkschonen bruken kannst. Klick op den Knopp wieder ünnen, dat di en Bestätigungskood tostüürt warrt.',
'loginlanguagelabel' => 'Taal: $1',
'suspicious-userlogout' => 'Joew verzeuk um of te melden is aofewezen umdat t dernaor uutziet dat t verstuurd is deur n kepotte webkieker of tussenopslagbuffer',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Der was n onbekende fout mit de mail()-funksie van PHP',
'user-mail-no-addy' => 'Eprobeerd n berichjen te versturen zonder n netpostadres',
'prefs-displaywatchlist' => 'Weergave-instellingen',
'prefs-diffs' => 'Verschillen',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Geldig netpostadres',
'email-address-validity-invalid' => 'Geef n geldig netpostadres op',
'listgrouprights-addgroup-self-all' => 'Kan alle groepen bie de eigen gebruker doon',
'listgrouprights-removegroup-self-all' => 'Kan alle groepen vortdoon van eigen gebruker',
-# E-mail user
+# Email user
'mailnologin' => 'Niet an-emeld.',
'mailnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween en n geldig e-mailadres in "[[Special:Preferences|mien veurkeuren]]" invoeren um disse funksie te kunnen gebruken.',
'emailuser' => 'n Bericht sturen',
'monthsall' => 'alles',
'limitall' => 'alles',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Bevestig netpostadres',
'confirmemail_noemail' => 'Je hebben gien geldig netpostadres in-evoerd in joew [[Special:Preferences|veurkeuren]].',
'confirmemail_text' => "Bie disse wiki mu'j je netpostadres bevestigen veurda'j de berichtopsies gebruken kunnen. Klik op de onderstaonde knoppe um n bevestigingsbericht te ontvangen. In dit bericht zit n kode mit n verwiezing; um je netpostadres te bevestigen mu'j disse verwiezing openen.",
'eauthentsent' => 'Er is een bevestigingse-mail naar het opgegeven e-mailadres gezonden.
Volg de aanwijzingen in de e-mail om aan te geven dat het uw e-mailadres is.
Tot die tijd kunnen er geen e-mails naar het e-mailadres gezonden worden.',
-'throttled-mailpassword' => 'In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is er al een wachtwoordherinnering verzonden.
+'throttled-mailpassword' => 'In {{PLURAL:$1|het laatste uur|de laatste $1 uur}} is al een wachtwoordherinnering verzonden.
Om misbruik te voorkomen wordt er slechts één wachtwoordherinnering per {{PLURAL:$1|uur|$1 uur}} verzonden.',
'mailerror' => 'Fout bij het verzenden van e-mail: $1',
'acct_creation_throttle_hit' => 'Bezoekers van deze wiki met hetzelfde IP-adres als u hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.
# Special:PasswordReset
'passwordreset' => 'Wachtwoord opnieuw instellen',
-'passwordreset-text' => 'Vul dit formulier in zodat we u een e-mail kunnen sturen met uw gebruikersgegevens.',
+'passwordreset-text' => 'Vul dit formulier in om uw wachtwoord opnieuw in te stellen.',
'passwordreset-legend' => 'Wachtwoord opnieuw instellen',
'passwordreset-disabled' => 'Het is in deze wiki niet mogelijk uw wachtwoord opnieuw in te stellen.',
'passwordreset-pretext' => '{{PLURAL:$1||Voer één van de onderstaande velden in}}',
'passwordreset-capture-help' => 'Als u dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan u weergegeven.',
'passwordreset-email' => 'E-mailadres:',
'passwordreset-emailtitle' => 'Gebruikersgegevens op {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 uw gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.
-De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
+'passwordreset-emailtext-ip' => 'Iemand, waarschijnlijk u, heeft vanaf het IP-adres $1 een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
$2
-{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.
-Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.',
-'passwordreset-emailtext-user' => 'Gebruiker $1 op de site {{SITENAME}} heeft uw gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.
-De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
+{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}. Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.',
+'passwordreset-emailtext-user' => 'Gebruiker $1 op de site {{SITENAME}} heeft een aanvraag gedaan om uw wachtwoord voor {{SITENAME}} ($4) opnieuw in te stellen. De volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:
$2
Meld u aan en wijzig het wachtwoord nu. Als u dit verzoek niet zelf heeft gedaan, of als u het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf uw oude wachtwoord gebruiken.',
'passwordreset-emailelement' => 'Gebruikersnaam: $1
Tijdelijk wachtwoord: $2',
-'passwordreset-emailsent' => 'Er is per e-mail een herinnering verzonden.',
-'passwordreset-emailsent-capture' => 'Er is een herinneringse-mail verzonden. Deze wordt hieronder weergegeven.',
-'passwordreset-emailerror-capture' => 'Er is een herinneringse-mail aangemaakt. Deze wordt hieronder weergegeven. Het verzonden naar de gebruiker is mislukt om de volgende reden: $1',
+'passwordreset-emailsent' => 'Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden.',
+'passwordreset-emailsent-capture' => 'Er is een e-mail voor het opnieuw instellen van een wachtwoord verzonden. Deze wordt hieronder weergegeven.',
+'passwordreset-emailerror-capture' => 'Er is een e-mail voor het opnieuw instellen van een wachtwoord aangemaakt. Deze wordt hieronder weergegeven. Het verzonden naar de gebruiker is mislukt om de volgende reden: $1',
# Special:ChangeEmail
'changeemail' => 'E-mailadres wijzigen',
Een pagina wordt gezien als doorverwijspagina als er een sjabloon op staat dat opgenomen is op [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => "Pagina's met een pagina-eigenschap",
+'pageswithprop-legend' => "Pagina's met een pagina-eigenschap",
'pageswithprop-text' => "Op deze pagina worden pagina's weergegeven met een bepaalde pagina-eigenschap.",
'pageswithprop-prop' => 'Naam van de eigenschap:',
+'pageswithprop-submit' => 'OK',
'doubleredirects' => 'Dubbele doorverwijzingen',
'doubleredirectstext' => "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's.
'sqlite-no-fts' => 'Versie $1 zonder ondersteuning voor "full-text" zoeken',
# New logging system
-'logentry-delete-delete' => '$1 heeft de pagina $3 verwijderd',
-'logentry-delete-restore' => '$1 heeft de pagina $3 teruggeplaatst',
-'logentry-delete-event' => '$1 heeft de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
-'logentry-delete-revision' => '$1 heeft de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
-'logentry-delete-event-legacy' => '$1 heeft de zichtbaarheid van logboekregels van $3 gewijzigd',
-'logentry-delete-revision-legacy' => '$1 heeft de zichtbaarheid van versies van de pagina $3 gewijzigd',
-'logentry-suppress-delete' => '$1 heeft de pagina $3 onderdrukt',
-'logentry-suppress-event' => '$1 heeft heimelijk de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
-'logentry-suppress-revision' => '$1 heeft heimelijk de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
-'logentry-suppress-event-legacy' => '$1 heeft heimelijk de zichtbaarheid van logboekregels van $3 gewijzigd',
-'logentry-suppress-revision-legacy' => '$1 heeft heimelijk de zichtbaarheid van versies van de pagina $3 gewijzigd.',
+'logentry-delete-delete' => '$1 {{GENDER:$2|heeft}} de pagina $3 verwijderd',
+'logentry-delete-restore' => '$1 {{GENDER:$2|heeft}} de pagina $3 teruggeplaatst',
+'logentry-delete-event' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van logboekregels van $3 gewijzigd',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|heeft}} de zichtbaarheid van versies van de pagina $3 gewijzigd',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|heeft}} de pagina $3 onderdrukt',
+'logentry-suppress-event' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van logboekregels van $3 gewijzigd',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|heeft}} heimelijk de zichtbaarheid van versies van de pagina $3 gewijzigd.',
'revdelete-content-hid' => 'inhoud verborgen',
'revdelete-summary-hid' => 'bewerkingssamenvatting verborgen',
'revdelete-uname-hid' => 'gebruikersnaam verborgen',
'revdelete-uname-unhid' => 'gebruikersnaam zichtbaar gemaakt',
'revdelete-restricted' => 'heeft beperkingen aan beheerders opgelegd',
'revdelete-unrestricted' => 'heeft beperkingen voor beheerders opgeheven',
-'logentry-move-move' => '$1 heeft pagina $3 naar $4 hernoemd',
-'logentry-move-move-noredirect' => '$1 heeft de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten',
-'logentry-move-move_redir' => '$1 heeft pagina $3 hernoemd naar $4 over een doorverwijzing',
-'logentry-move-move_redir-noredirect' => '$1 heeft pagina $3 naar $4 hernoemd over een doorverwijzing zonder een doorverwijzing achter te laten',
-'logentry-patrol-patrol' => '$1 heeft versie $4 van pagina $3 als gecontroleerd gemarkeerd',
-'logentry-patrol-patrol-auto' => '$1 heeft versie $4 van pagina $3 automatisch als gecontroleerd gemarkeerd',
-'logentry-newusers-newusers' => 'Gebruiker $1 is aangemaakt',
-'logentry-newusers-create' => 'Gebruiker $1 is aangemaakt',
-'logentry-newusers-create2' => 'Gebruiker $3 is aangemaakt door $1',
-'logentry-newusers-byemail' => 'Gebruiker $3 is aangemaakt door $1 en het wachtwoord is per e-mail verzonden',
-'logentry-newusers-autocreate' => 'De gebruiker $1 is automatisch aangemaakt',
-'logentry-rights-rights' => '$1 heeft groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
-'logentry-rights-rights-legacy' => '$1 heeft groepslidmaatschap voor $3 gewijzigd',
-'logentry-rights-autopromote' => '$1 is automatisch gepromoveerd van $4 naar $5',
+'logentry-move-move' => '$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|heeft}} de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4 over een doorverwijzing',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|heeft}} pagina $3 naar $4 hernoemd over een doorverwijzing zonder een doorverwijzing achter te laten',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 gemarkeerd als gecontroleerd',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 automatisch gemarkeerd als gecontroleerd',
+'logentry-newusers-newusers' => 'Gebruiker $1 {{GENDER:$2|is}} aangemaakt',
+'logentry-newusers-create' => 'Gebruiker $1 {{GENDER:$2|is}} aangemaakt',
+'logentry-newusers-create2' => 'Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1',
+'logentry-newusers-byemail' => 'Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1 en het wachtwoord is per e-mail verzonden',
+'logentry-newusers-autocreate' => 'De gebruiker $1 {{GENDER:$2|is}} automatisch aangemaakt',
+'logentry-rights-rights' => '$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5',
'rightsnone' => '(geen)',
# Feedback
'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
-# Unknown messages
-'pageswithprop-legend' => "Pagina's met een pagina-eigenschap",
-'pageswithprop-submit' => 'OK',
+# Image rotation
+'rotate-comment' => 'Afbeelding gedraaid, $1 {{PLURAL:$1|graad|graden}} met de klok mee',
+
);
Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja til frå [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Sider med ein sideeigenskap',
+'pageswithprop-legend' => 'Sider med ein sideeigenskap',
'pageswithprop-text' => 'Denne sida listar opp sider som nyttar ein viss sideeigenskap.',
'pageswithprop-prop' => 'Namn på eigenskap:',
+'pageswithprop-submit' => 'Gå',
'doubleredirects' => 'Doble omdirigeringar',
'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. <del>Overstrykne</del> liner har vorte retta på.',
'duration-centuries' => '$1 {{PLURAL:$1|hundreår|hundreår}}',
'duration-millennia' => '$1 {{PLURAL:$1|tusenår|tusenår}}',
-# Unknown messages
-'pageswithprop-legend' => 'Sider med ein sideeigenskap',
-'pageswithprop-submit' => 'Gå',
);
# Special:ListGroupRights
'listgrouprights-members' => '(Lenano la ditho)',
-# E-mail user
+# Email user
'emailuser' => 'Romela mošomiši yo molaetša',
'emailpage' => 'Romela email go mošomiši',
'noemailtitle' => 'Gago email atrese',
'loginlanguagelabel' => 'Æвзаг: $1',
'suspicious-userlogout' => 'Дæ рахизыны домæн нæ сæххæст ис, уымæн æмæ хæлд браузерæй кæнæ кешгæнæг проксийæ æрвысты хуызæн у.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Нæбæрæг рæдыд PHP-йы mail() функцийы.',
'user-mail-no-addy' => 'Е-mail æрвыста æнæ e-mail адрисæй.',
'prefs-displaywatchlist' => 'Æвдисыны фадæттæ',
'prefs-diffs' => 'Иртасæнтæ',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mail раст зыны',
'email-address-validity-invalid' => 'Раст e-mail бацамон',
'listgrouprights-rights' => 'Бартæ',
'listgrouprights-members' => '(уæнгты номхыгъд)',
-# E-mail user
+# Email user
'mailnologintext' => 'Фыстæгтæ æрвитынмæ хъуамæ [[Special:UserLogin|системæйæн дæхи бавдисай]] æмæ дæ бæлвырд электронон посты адрис [[Special:Preferences|ныффыссай]].',
'emailuser' => 'Ацы архайæгæн электронон фыстæг рарвитт',
'emailpage' => 'Электронон фыстæг йæм барвит',
$messages = array(
# User preference toggles
-'tog-underline' => 'à¨\85ੰਡਰ-ਲਾà¨\88ਨ ਲਿੰà¨\95:',
-'tog-justify' => 'ਪà©\88ਰਾ ਸਹà©\80 à¨\95ਰà©\87 .',
-'tog-hideminor' => 'ਮà©\8cਨà¨\9cà©\81ਦਾ ਬਦਲਾਬ ਮà©\88 ਸà©\88 ਨà©\80à¨\95à©\88 ਬਦਲਾਬ à¨\95à©\8c à¨\9bà©\81ਪਾ à¨\95ਰ ਰà¨\96à©\87.',
-'tog-hidepatrolled' => 'ਮà©\8cਨà¨\9cà©\81ਦਾ ਬਦਲਾਬ ਮà©\88 ਸà©\88 ਸਹà©\80ਤà¨\95 ਬਦਲਾਬ à¨\95à©\8c à¨\9bà©\81ਪਾ à¨\95ਰ ਰà¨\96à©\87.',
+'tog-underline' => 'à¨\95à©\9cà©\80à¨\86à¨\82 à¨\85ਧà©\8bਰà©\87à¨\96ਨ:',
+'tog-justify' => 'ਪਰਿੱà¨\9bà©\87ਦ ਸਮਾਨ à¨\95ਰà©\8b',
+'tog-hideminor' => 'ਹਾਲ â\80\99à¨\9a ਹà©\8bà¨\8f ਬਦਲਾਵ ਵਿੱà¨\9a à¨\9bà©\8bà¨\9fà©\87 ਬਦਲਾਵ à¨\9bà©\81ਪਾà¨\93',
+'tog-hidepatrolled' => 'ਹਾਲ â\80\99à¨\9a ਹà©\8bà¨\8f ਬਦਲਾਵ ਵਿੱà¨\9a à¨\9cਾà¨\82à¨\9aà©\87 ਹà©\8bà¨\8f ਬਦਲਾਵ à¨\9bà©\81ਪਾà¨\93',
'tog-newpageshidepatrolled' => 'ਨਵੀ ਸੁਚੀ ਮੈ ਸੈ ਗਸ਼ਤ ਪਰਚੇ ਕੌ ਛੁਪਾਏ.',
-'tog-extendwatchlist' => 'ਸਾਰà©\80 ਨਵà©\80 ਤਬਦà©\80ਲà©\80à¨\86 ਹà©\80 ਨਹà©\80 ,ਪà©\82ਰਾਣà©\80 ਤਬਦà©\80ਲà©\80à¨\86 ਨà©\82à©° ਵà©\80 ਨਵà©\80 ਸà©\82à¨\9aà©\80 ਵਿà¨\9a ਵਧਾ à¨\95à©\88 ਸ਼ਾਮà©\80ਲ à¨\95ਰà©\8c.',
-'tog-usenewrc' => 'ਤਾà¨\9c਼ਾ ਤਬਦà©\80ਲà©\80à¨\86à¨\82 à¨\85ਤà©\87 ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f ਵਿà¨\9a ਸਫ਼à©\87 ਮà©\81ਤਾਬà¨\95 ਤਬਦà©\80ਲà©\80à¨\86à¨\82 ਦà©\87 à¨\97ਰà©\81ੱਪ ਬਣਾà¨\93 (à¨\9cਾਵਾ ਸà¨\95à©\8dਰਿਪà¨\9f ਲà©\8bà©\9cà©\80à¨\82ਦà©\80 ਹੈ)',
+'tog-extendwatchlist' => 'à¨\95à©\87ਵਲ ਹਾਲਿà¨\86 ਹà©\80 ਨਹà©\80à¨\82, ਸà¨\97à©\8bà¨\82 ਸਾਰà©\87 ਪਰਿਵਰਤਨਾà¨\82 ਨà©\82à©° ਵਿà¨\96ਾà¨\89ਣ ਲà¨\88 ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 ਨà©\82à©° ਵਿਸਥਾਰਿਤ à¨\95ਰà©\8b',
+'tog-usenewrc' => 'ਹਾਲ â\80\99à¨\9a ਹà©\8bà¨\8f ਬਦਲਾਵ à¨\85ਤà©\87 ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 ਵਿੱà¨\9a ਪੰਨà©\87 ਮà©\81ਤਾਬà¨\95 ਬਦਲਾਵ ਦà©\87 à¨\97ਰà©\81ੱਪ ਬਣਾà¨\93 (à¨\9cਾਵਾਸà¨\95à©\8dਰਿਪà¨\9f ਦà©\80 à¨\9cਰà©\82ਰਤ ਹੈ)',
'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਹੈਡਿੰਗ',
'tog-showtoolbar' => 'ਐਡਿਟ ਟੂਲਬਾਰ ਵੇਖੋ (JavaScript)',
-'tog-editondblclick' => 'ਦੂਹਰੇ ਕਲਿੱਕ ਨਾਲ਼ ਸਫ਼ੇ ਸੋਧੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'tog-editsection' => '[ਸੰਪਾਦਨ] ਲਿੰà¨\95ਾà¨\82 à¨\9c਼ਰà©\80à¨\8f ਸà©\88à¨\95ਸ਼ਨ ਸà©\8bਧ à¨\9aਾਲà©\82 ਕਰੋ',
+'tog-editondblclick' => 'ਦੂਹਰੇ ਕਲਿੱਕ ’ਤੇ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੀ ਜਰੂਰਤ ਹੈ)',
+'tog-editsection' => '[ਸੰਪਾਦਨ] à¨\95à©\9cà©\80à¨\86à¨\82 ਦà©\81à¨\86ਰਾ à¨\85ਨà©\81à¨à¨¾à¨\97 ਸੰਪਾਦਨ ਸਮਰੱਥਾਵਾਨ ਕਰੋ',
'tog-editsectiononrightclick' => 'ਸੈਕਸ਼ਨ ਸਿਰਲੇਖਾਂ ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਦੁਆਰਾ ਸੋਧ ਯੋਗ ਕਰੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
'tog-showtoc' => 'ਟੇਬਲ ਆਫ਼ ਕੰਨਟੈੱਟ ਵੇਖਾਓ (for pages with more than 3 headings)',
'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)',
'tog-watchcreations' => 'ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਪੰਨੇ ਅਤੇ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪਾਓ',
-'tog-watchdefault' => 'ਮà©\87ਰà©\87 ਵੱਲà©\8bà¨\82 ਸà©\8bਧà©\87 à¨\97à¨\8f ਸਫ਼à©\87 à¨\85ਤà©\87 ਫ਼ਾà¨\88ਲਾà¨\82 ਮà©\87ਰà©\80 ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f ਵਿਚ ਪਾਓ',
-'tog-watchmoves' => 'ਮà©\87ਰà©\87 ਵੱਲà©\8bà¨\82 ਬਦਲà©\87 ਸਿਰਲà©\87à¨\96ਾà¨\82 ਵਾਲ਼à©\87 ਸਫ਼à©\87 à¨\85ਤà©\87 ਫ਼ਾà¨\88ਲਾà¨\82 ਮà©\87ਰà©\80 ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f ਵਿਚ ਪਾਓ',
+'tog-watchdefault' => 'ਮà©\87ਰà©\87 ਵੱਲà©\8bà¨\82 ਸੰਪਾਦਿਤ à¨\97à¨\8f ਪੰਨà©\87 à¨\85ਤà©\87 ਫਾà¨\88ਲਾà¨\82 ਮà©\87ਰà©\80 ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 ਵਿੱਚ ਪਾਓ',
+'tog-watchmoves' => 'ਮà©\87ਰà©\87 ਵੱਲà©\8bà¨\82 ਸਥਾਨਾà¨\82ਤਰਿਤ ਪੰਨà©\87 à¨\85ਤà©\87 ਫਾà¨\88ਲਾà¨\82 ਮà©\87ਰà©\80 ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 ਵਿੱਚ ਪਾਓ',
'tog-watchdeletion' => 'ਮੇਰੇ ਵਲੋਂ ਮਿਟਾਏ ਗਏ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
'tog-minordefault' => 'ਸਾਰੇ ਫੇਰ-ਬਦਲਾਂ ’ਤੇ ਮੂਲ ਰੂਪ ਵਿਚ ਛੋਟੀਆਂ ਹੋਣ ਦਾ ਨਿਸ਼ਾਨ ਲਾਓ',
'tog-previewontop' => 'ਐਡਿਟ ਬਕਸੇ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖਾਓ',
'login-abort-generic' => 'ਤੁਹਾਡੀ ਲਾਗਇਨ ਨਾਕਾਮ ਸੀ - ਰੱਦ',
'loginlanguagelabel' => 'ਭਾਸ਼ਾ: $1',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'ਬਿਨਾਂ ਈ-ਮੇਲ ਪਤਾ ਦਿੱਤੇ ਈ-ਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ।',
# Change password dialog
'prefs-advancedwatchlist' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
'prefs-diffs' => 'ਫ਼ਰਕ',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ਈ-ਮੇਲ ਪਤਾ ਸਹੀ ਲਗਦਾ ਹੈ',
'email-address-validity-invalid' => 'ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦਾਖ਼ਲ ਕਰੋ',
'listgrouprights-addgroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਜੋੜੋ',
'listgrouprights-removegroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਹਟਾਓ',
-# E-mail user
+# Email user
'mailnologin' => 'ਕੋਈ ਭੇਜਣ ਐਡਰੈੱਸ ਨਹੀਂ',
'mailnologintext' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਲਾਗਇਨ]] ਹੋਣਾ ਅਤੇ ਆਪਣੀਆਂ [[Special:Preferences|ਪਸੰਦਾਂ]] ਵਿਚ ਇਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦੇਣਾ ਪਵੇਗਾ।',
'emailuser' => 'ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
'monthsall' => 'ਸਭ',
'limitall' => 'ਸਭ',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ਈਮੇਲ ਐਡਰੈੱਸ ਪੁਸ਼ਟੀ',
'confirmemail_send' => 'ਇੱਕ ਪੁਸ਼ਟੀ ਕੋਡ ਭੇਜੋ',
'confirmemail_sent' => 'ਪੁਸ਼ਟੀ ਈਮੇਲ ਭੇਜੀ ਗਈ।',
'listgrouprights-helppage' => 'Help:Katulirang pang-grupu',
'listgrouprights-members' => '(tala da reng kayanib)',
-# E-mail user
+# Email user
'mailnologin' => 'Alang piparalan (no send address)',
'mailnologintext' => 'Kailangan [[Special:UserLogin|maka-login]] ka at maki gaganang e-mail address kareng kekang [[Special:Preferences|pinili]] ba kang makaparalang e-mail kareng aliwang talagamit.',
'emailuser' => 'E-mail me ing talagamit a ini',
'namespacesall' => 'ila ngan',
'monthsall' => 'eganagana',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Patutwan mung keka ya itang e-mail address',
'confirmemail_noemail' => 'Ala kang ustung e-mail address a makabili ketang kekang [[Special:Preferences|pinili ning talagamit (user preferences)]].',
'confirmemail_text' => 'Kaylangan king wiking iti ing patutwan me pamu ing kekang e-mail address bayu
'newwindow' => '(otwiera się w nowym oknie)',
'cancel' => 'Anuluj',
'moredotdotdot' => 'Więcej...',
+'morenotlisted' => 'I inne...',
'mypage' => 'Strona',
'mytalk' => 'Dyskusja',
'anontalk' => 'Dyskusja tego IP',
'loginlanguagelabel' => 'Język: $1',
'suspicious-userlogout' => 'Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Wystąpił nieznany błąd w funkcji PHP mail()',
'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
'user-mail-no-body' => 'Próbowano wysłać e-mail o psutej lub krótkiej treści.',
'prefs-displaywatchlist' => 'Opcje wyświetlania',
'prefs-diffs' => 'Zmiany',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Wygląda na prawidłowy',
'email-address-validity-invalid' => 'Wymagany jest prawidłowy adres!',
'listgrouprights-addgroup-self-all' => 'Może dodać własne konto do wszystkich grup',
'listgrouprights-removegroup-self-all' => 'Może usunąć własne konto ze wszystkich grup',
-# E-mail user
+# Email user
'mailnologin' => 'Brak adresu',
'mailnologintext' => 'Musisz się [[Special:UserLogin|zalogować]] i mieć wpisany aktualny adres e‐mailowy w swoich [[Special:Preferences|preferencjach]], aby móc wysłać e‐mail do innego użytkownika.',
'emailuser' => 'Wyślij e‐mail do tego użytkownika',
'pageinfo-robot-noindex' => 'Nieindeksowalne',
'pageinfo-views' => 'Odsłon',
'pageinfo-watchers' => 'Liczba obserwujących',
+'pageinfo-few-watchers' => 'Mniej niż $1 {{PLURAL:$1|obserwujący|obserwujących}}',
'pageinfo-redirects-name' => 'Liczba przekierowań do tej strony',
'pageinfo-subpages-name' => 'Liczba podstron tej strony',
'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|przekierowanie|przekierowania|przekierowań}}; $3 {{PLURAL:$3|bez przekierowania|bez przekierowań|bez przekierowań}})',
'monthsall' => 'wszystkie',
'limitall' => 'wszystkie',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Potwierdzanie adresu e‐mail',
'confirmemail_noemail' => 'Nie podał{{GENDER:|eś|aś|eś/aś}} prawidłowego adresu e‐mail w [[Special:Preferences|preferencjach]].',
'confirmemail_text' => 'Projekt {{SITENAME}} wymaga weryfikacji adresu e‐mail przed użyciem funkcji korzystających z poczty.
'duration-centuries' => '$1 {{PLURAL:$1|stulecie|stulecia|stuleci}}',
'duration-millennia' => '$1 {{PLURAL:$1|tysiąclecie|tysiąclecia|tysiącleci}}',
+# Image rotation
+'rotate-comment' => 'Obraz został odwrócony o $1 {{PLURAL:$1|stopień|stopnie|stopni}} (w kierunku zgodnym z ruchem wskazówek zegara)',
+
);
'loginlanguagelabel' => 'Lenga: $1',
'suspicious-userlogout' => "Soa arcesta ëd seurte dal sistema a l'é stàita arfudà përchè a smija com s'a fussa stàita mandà da 'n navigador scolegà o da l'archiviassion an local d'un proxy.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Eror pa conossù ant la funsion PHP mail()',
'user-mail-no-addy' => 'Provà a spedì un mëssagi sensa adrëssa ëd pòsta eletrònica.',
'user-mail-no-body' => 'Preuva a mandé un corel con un còrp veuid o motobin curt.',
'prefs-displaywatchlist' => 'Opsion ëd visualisassion',
'prefs-diffs' => 'Diferense',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'A smija bon',
'email-address-validity-invalid' => "A-i é da manca ëd n'adrëssa bon-a!",
'listgrouprights-addgroup-self-all' => 'Gionté tute le partìe a sò cont',
'listgrouprights-removegroup-self-all' => 'Gavé tute le partìe da sò cont',
-# E-mail user
+# Email user
'mailnologin' => "A-i é pa l'adrëssa për mandé ël mëssagi",
'mailnologintext' => "A dev [[Special:UserLogin|rintré ant ël sistema]]
e avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podèj mandé dij mëssagi ëd pòsta eletrònica a j'àutri Utent.",
'monthsall' => 'tuti',
'limitall' => 'tùit',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => "Confermé l'adrëssa postal",
'confirmemail_noemail' => "A l'ha pa butà gnun-a adrëssa vàlida ëd pòsta eletrònica ant ij [[Special:Preferences|sò gust]].",
'confirmemail_text' => "Costa wiki a ciama che chiel a convàlida n'adrëssa ëd pòsta eletrònica anans che
'loginlanguagelabel' => 'بولی: $1',
'suspicious-userlogout' => 'تھواڈی لاگ آؤٹ ہوں دی کوشش رک گئی اینج لگدا اے جیویں اے ٹٹے براؤزر یا کیشنگ پراکسی توں پیجیا گیا سی۔',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP میل دے کم چ کوئی انجانی غلطی۔',
'user-mail-no-addy' => 'ای-میل پتے بنا ای-میل کلن دی کوشش۔',
'prefs-displaywatchlist' => 'چنوتیاں دسو',
'prefs-diffs' => 'ڈفز',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ای_میل پتہ ٹھیک لگدا اے۔',
'email-address-validity-invalid' => 'چلن والا ای-میل پتہ دسو',
'listgrouprights-addgroup-self-all' => 'ساریاں ٹولیاں کٹھیاں کرو کھاتہ لئی',
'listgrouprights-removegroup-self-all' => 'ایس کھاتے توں ساریاں ٹولیاں ہٹاؤ',
-# E-mail user
+# Email user
'mailnologin' => 'ناں پیح پتہ',
'mailnologintext' => 'تسیں لازمی [[Special:UserLogin|لاگان]] ہوو تے اک پکا ای-میل پتہ تواڈی [[Special:Preferences|تانگ]] چ ہووے تاں جے دوجے ورتن والے توانوں ای-میل کرسکن۔',
'emailuser' => 'اس ورتن والے نو ای میل کرو',
'monthsall' => 'سارے',
'limitall' => 'سارے',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ای میل پتہ پکا کرو',
'confirmemail_noemail' => 'تواڈے کول اک پکا ای-میل پتہ نئیں اے جیہڑا [[Special:Preferences|ورتن تانگاں]]',
'confirmemail_text' => '{{سائیٹناں}} دی ایہ لوڑ اے جے تسیں اپنا ای-میل پتہ پکا کرواؤ ای-میل فیچر ورتن توں پہلے۔ تھلے دتے گۓ بٹن تے پکی کرن چٹھی پیجو اپنے پتے تے منگوان لئی کلک کرو۔
'listgrouprights-addgroup-self-all' => 'Preidāis wissans gruppins prei swajjan rekkenan',
'listgrouprights-removegroup-self-all' => 'Āupausinais wissans gruppins iz swajjan rekkenan',
-# E-mail user
+# Email user
'mailnologin' => 'Ni ast adressi',
'mailnologintext' => 'Tu turri [[Special:UserLogin|enēitwei]] be turītun aktuālin e-mail adressin en twajamans [[Special:Preferences|pirminiskwans]] kāi tengīnlai e-mailins kitēimans tērpautajans.',
'emailuser' => 'Tenginnais e-mailin šismu tērpautajan',
'monthsall' => 'wisāi',
'limitall' => 'wisāi',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Padrūktinais e-mail adressin',
'confirmemail_noemail' => 'Tū ni turri tukrōmiskan e-mail adressin ensadīntan en [[Special:Preferences|pirminiskwamans]].',
'confirmemail_text' => '{{SITENAME}} izkīnina e-mailas adressis izbandāsnan pirzdau e-mailas funkciōnis tērpausnan.
'filerenameerror' => 'د "$1" په نامه د دوتنې نوم "$2" ته بدل نه شو.',
'filedeleteerror' => 'د "$1" دوتنه ړنګه نه شوه.',
'directorycreateerror' => 'د "$1" په نامه ليکلړ جوړ نه شو.',
-'filenotfound' => '"$1" په نوم دوتنه مو و نه شوه موندلای.',
+'filenotfound' => 'د "$1" دوتنه مو و نه موندله.',
'fileexistserror' => 'د "$1" په نامه دوتنه نه ليکل کېږي: دوتنه د پخوا نه دلته شته',
'unexpected' => 'نا اټکله شمېره: "$1"="$2".',
'formerror' => 'ستونزه: فورمه مو و نه سپارل شوه',
-'badarticleerror' => 'دا کړنه پدې مخ نه شي ترسره کېدلای.',
+'badarticleerror' => 'په دې مخ دا کړنه نه شي ترسره کېدلای.',
'cannotdelete' => 'د "$1" مخ يا دوتنې ړنګېدنه ترسره نه شوه.
کېدای شي چې وار دمخې دا کوم بل چا ړنګه کړې وي.',
'cannotdelete-title' => 'د "$1" مخ نشي ړنګېدای',
'nosuchsectiontitle' => 'برخه و نه موندل شوه',
'nosuchsectiontext' => 'تاسې د يوې داسې برخې د سمون هڅه کړې چې تر اوسه پورې نشته.
کېدای هغه مهال چې تاسې د دې مخ نه کتنه کوله، همدا برخه کوم بل ځای ته لېږدل شوې او يا هم ړنګه شوې وي.',
-'loginreqtitle' => 'غونډال کې ننوتنه پکار ده',
+'loginreqtitle' => 'لومړی غونډال ته ورننوځۍ',
'loginreqlink' => 'ننوتل',
'loginreqpagetext' => 'د نورو مخونو د کتلو لپاره تاسو بايد $1 وکړۍ.',
'accmailtitle' => 'پټنوم ولېږل شو.',
'search-interwiki-default' => '$1 پايلې:',
'search-interwiki-more' => '(نور)',
'search-relatedarticle' => 'اړونده',
-'mwsuggest-disable' => 'د AJAX وړانديزونه ناچارن کول',
+'mwsuggest-disable' => 'د پلټنې وړانديزونه ناچارنول',
'searcheverything-enable' => 'په ټولو نوم-تشيالونو کې پلټل',
'searchrelated' => 'اړونده',
'searchall' => 'ټول',
# Special:ActiveUsers
'activeusers' => 'د فعالو کارنانو لړليک',
'activeusers-intro' => 'دا د هغو کارنانو لړليک دی چې په {{PLURAL:$1|تېرې|تېرو}} $1 {{PLURAL:$1|ورځ|ورځو}} کې يې ونډې ترسره کړي.',
-'activeusers-count' => 'په {{PLURAL:$2|تېرې|تېرو}} {{PLURAL:$3|ورځ|$3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
+'activeusers-count' => 'په {{PLURAL:$3|تېرې ورځ|تېرو $3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
'activeusers-from' => 'هغه کارنان کتل چې نومونه يې پېلېږي په:',
'activeusers-hidebots' => 'روباټونه پټول',
'activeusers-hidesysops' => 'پازوالان پټول',
'usermessage-editor' => 'د غونډال پيغام رسونکی',
# Watchlist
-'watchlist' => 'زما کتنلړ',
+'watchlist' => 'کتنلړ',
'mywatchlist' => 'کتنلړ',
'watchlistfor2' => 'د $1 لپاره $2',
'nowatchlist' => 'ستاسې کتنلړ کې څه نه شته.',
'protect-cascadeon' => 'د اوسمهال لپاره همدا مخ ژغورل شوی دا ځکه چې همدا مخ په {{PLURAL:$1|لانديني مخ|لانديني مخونو}} کې ورګډ دی چې {{PLURAL:$1|ځوړاوبيزه ژغورنه يې چارنه ده|ځوړاوبيزې ژغورنې يې چارنې دي}}.
تاسې د همدې مخ د ژغورنې په کچه کې بدلون راوستلای شی، خو دا به په ځوړاوبيزه ژغورنه اغېزمنه نه کړي.',
'protect-default' => 'ټول کارنان پرېښودل',
-'protect-fallback' => 'د "$1" اجازه پکار ده',
+'protect-fallback' => 'يوازې د "$1" اجازې لرونکي کارنان پرېښودل',
'protect-level-autoconfirmed' => 'پر نوؤ او ناثبته کارنانو بنديز لګول',
'protect-level-sysop' => 'يواځې پازوالان',
'protect-summary-cascade' => 'ځوړاوبيز',
'userjspreview' => "'''Lembre-se que está apenas testando/prevendo o seu JavaScript particular e que ele ainda não foi salvo!'''",
'sitecsspreview' => "'''Lembre-se de que você está apenas previsualizando este CSS.'''
'''Ele ainda não foi salvo!'''",
-'sitejspreview' => "''Lembre-se de que você está apenas previsualizando este código JavaScript.'''
+'sitejspreview' => "'''Lembre-se de que você está apenas previsualizando este código JavaScript.'''
'''Ele ainda não foi salvo!'''",
'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"\$1\". Lembre-se que as páginas .css e .js utilizam um título em minúsculas, exemplo: {{ns:user}}:Alguém/vector.css aposto a {{ns:user}}:Alguém/Vector.css.",
'updated' => '(Atualizado)',
Uma página é considerada como de desambiguação se utilizar uma predefinição que esteja definida em [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Páginas com uma propriedade de página',
+'pageswithprop-legend' => 'Páginas com uma propriedade de página',
'pageswithprop-text' => 'Esta página lista as páginas que usam uma determinada propriedade de página.',
'pageswithprop-prop' => 'Nome da propriedade:',
+'pageswithprop-submit' => 'Ir',
'doubleredirects' => 'Redirecionamentos duplos',
'doubleredirectstext' => 'Esta página lista as páginas que redirecionam para outros redirecionamentos.
'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
'duration-millennia' => '$1 {{PLURAL:$1|milênio|milênios}}',
-# Unknown messages
-'pageswithprop-legend' => 'Páginas com uma propriedade de página',
-'pageswithprop-submit' => 'Ir',
);
This is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)
See also:
-* {{msg-mw|Collapsible-expand}}',
+* {{msg-mw|Collapsible-expand}}
+{{Identical|Collapse}}',
'collapsible-expand' => '{{Doc-actionlink}}
This is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)
* {{msg-mw|Accesskey-ca-nstab-main}}
* {{msg-mw|Tooltip-ca-nstab-main}}
{{Identical|Page}}',
-'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>
-{{GENDER:{{#titleparts:{{BASEPAGENAME}}|1}}|male form|female form}}</nowiki> if needed.
+'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{BASEPAGENAME}}|male form|female form}}</nowiki> if needed.
See also:
* {{msg-mw|Nstab-user}}
'createaccountreason' => '{{Identical|Reason}}',
'badretype' => 'Used as error message when the new password and its retype do not match.',
'userexists' => 'Used as error message in creating a user account.',
-'loginerror' => 'Used as title of error message.',
+'loginerror' => 'Used as title of error message.
+{{Identical|Login error}}',
'createaccounterror' => 'Parameters:
* $1 is an error message',
'nocookiesnew' => "This message is displayed when a new account was successfully created, but the browser doesn't accept cookies.",
'blocked-mailpassword' => 'Used as error message in password recovery.',
'eauthentsent' => "This message appears after entering an e-mail address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on '{{int:saveprefs}}'.",
'throttled-mailpassword' => 'Used in [[Special:PasswordReset]].
-* $1 - password reminder resend time (in hours)',
+* $1 - password reset email resend time (in hours)',
'mailerror' => 'Used as error message in sending confirmation mail to user. Parameters:
* $1 - new mail address',
'acct_creation_throttle_hit' => 'Error message at [[Special:CreateAccount]].
* $2 - message {{msg-mw|passwordreset-emailelement|notext=1}} repeated $3 times
* $3 - the number of repetitions in $2
* $4 - base URL of the wiki',
-'passwordreset-emailelement' => "This is a body of a reminder email to allow them into the system with a new password. Parameters:
+'passwordreset-emailelement' => "This is a body of a password reset email to allow them into the system with a new password. Parameters:
* $1 - the user's login name. This parameter can be used for GENDER.
* $2 - the temporary password given by the system",
'passwordreset-emailsent' => 'Used in [[Special:PasswordReset]].
'pageswithprop' => 'Title for [[Special:PagesWithProp]].
{{Identical|Page with page property}}',
+'pageswithprop-legend' => 'Legend for the input form on [[Special:PagesWithProp]].
+{{Identical|Page with page property}}',
'pageswithprop-text' => 'Introductory text for the input form on [[Special:PagesWithProp]]',
'pageswithprop-prop' => 'Label for the property name input field on [[Special:PagesWithProp]].
{{Identical|Property name}}',
+'pageswithprop-submit' => 'Label for the submit button on [[Special:PagesWithProp]].
+{{Identical|Go}}',
'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
Text of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.
Parameters:
-* $1 - the number of edits that will be rollbacked. If $1 is over the value of <code>$wgShowRollbackEditCount</code> (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
+* $1 - the number of edits that will be rolled back. If $1 is over the value of <code>$wgShowRollbackEditCount</code> (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}',
'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
{{Identical|Revert}}
{{Identical|Rollback}}',
'alreadyrolled' => "Appear when there's rollback and/or edit collision. Parameters:
-* $1 - the page to be rollbacked
-* $2 - the editor to be rollbacked of that page
+* $1 - the page to be rolled back
+* $2 - the editor to be rolled-back of that page
* $3 - the editor that cause collision
{{Identical|Rollback}}",
'editcomment' => "Only shown if there is an edit ''{{msg-mw|summary}}''",
'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].
Start with a lowercase letter, unless the first word is "SVG".',
-'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
+'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated.
* $1 - the width in pixels
* $2 - the height in pixels
* $3 - the file size including a unit (for example "10 KB")
-
-Start with a lowercase letter, unless the first word is "SVG".',
+Non-animated images use {{msg-mw|svg-long-desc}}.',
'svg-long-error' => 'Displayed for invalid SVG file metadata. Parameters:
* $1 - the error message
See also:
'duration-centuries' => '{{Related|Duration}}',
'duration-millennia' => '{{Related|Duration}}',
-# Rotation
-'rotation-comment' => 'comment set for new version uploaded after rotation',
+# Image rotation
+'rotate-comment' => 'Edit summary for the act of rotating an image.',
-# Unknown messages
-'pageswithprop-legend' => 'Legend for the input form on [[Special:PagesWithProp]].
-{{Identical|Page with page property}}',
-'pageswithprop-submit' => 'Label for the submit button on [[Special:PagesWithProp]].
-{{Identical|Go}}',
);
'newwindow' => '(Musuq wintanam kichakun)',
'cancel' => 'Ama niy',
'moredotdotdot' => 'Aswan...',
+'morenotlisted' => 'Aswanqa sutisuyupi manam kanchu...',
'mypage' => "P'anqay",
'mytalk' => 'Rimachinay',
'anontalk' => 'Kay IP huchhapaq rimanakuy',
'namespaces' => "Suti k'itikuna",
'variants' => "Ñawra rikch'akuykuna",
+'navigation-heading' => "Wamp'una last'a",
'errorpagetitle' => 'Pantasqa',
'returnto' => '$1-man kutimuy.',
'tagline' => '{{SITENAME}}manta',
'cannotdelete' => 'Manam atinichu "$1" sutiyuq p\'anqata icha willañiqita qulluyta.
P\'anqaqa pipapas qullusqanñachá.',
'cannotdelete-title' => 'Manam atinichu "$1" sutiyuq p\'anqata qulluyta',
+'delete-hook-aborted' => "Ch'iwinam qulluyta t'ipirqan.
+Manam nirqanchu imarayku.",
'badtitle' => "P'anqap sutinqa manam allinchu",
'badtitletext' => "Kay p'anqap sutinqa manam allinchu, mana allin interwiki t'inkichá icha ch'usaqchá, p'anqa sutipaq mana saqillasqa sananchayuqchá.",
'perfcached' => "Kay qatiq willakunaqa ''cache'' nisqa pakasqa hallch'apim kachkan, chayrayku manañachá musuqchasqachu. {{PLURAL:$1|Huklla|$1-lla}} taripasqam pakasqa hallch'api aypalla kachkan, manam aswanchu.",
'viewyourtext' => "'''Qampa llamk'apusqayki'''p pukyu qillqantam qhawayta iskaychaytapas atinki:",
'protectedinterface' => "Kay p'anqapiqa wakichintinpa uyapuranpaq qillqam. Wandalismu nisqamanta amachasqam kachkan.
Tukuy wikikunapi uyapuraman t'ikrasqakunata yapayta icha hukchayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruray.",
-'editinginterface' => "'''Paqtataq:''' Llamp'u kaqpaq uyapura qillqakuna runanapaq p'anqatam llamk'apuchkanki.
+'editinginterface' => "'''Paqtataq:''' Llamp'u kaqpaq uyapura qillqakuna ruranapaq p'anqatam llamk'apuchkanki.
Hukchaptiykiqa, chay uyapurap rikch'ayninqa hukyanqa kay wikipi huk ruraqkunapaqpas.
Uyapuraman t'ikrasqakunata yapayta icha hukchayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruranaykimanta hamut'ariy.",
'sqlhidden' => '(SQL tapunaqa pakasqam)',
'invalidtitle-knownnamespace' => '"$2" sutisuyu, "$3" qillqasqayuq mana allin kaq qillqa suti',
'invalidtitle-unknownnamespace' => 'Mana riqsisqa $1 kaq sutisuyu yupay, "$2" qillqasqayuq mana allin kaq qillqa suti',
'exception-nologin' => 'Manam yaykurqankichu',
+'exception-nologin-text' => 'Kay wikipiqa icha kay ruranataqa rakiqunaykiwan yaykuspalla ruraytam atinki.',
# Virus scanner
'virus-badscanner' => "Manam allintachu churapusqa: mana riqsisqa añaw maskaq: ''$1''",
Sutinnaq kaspaykipas {{SITENAME}}pi wamp'uytam atinki. Mana hinataq munaspaykiqa, <span class='plainlinks'>[$1 musuqmanta yaykuy]</span> ñawpaq icha huk sutiwan. Huk p'anqakunaqa kaqllam rikch'akunqa, ''cache'' nisqa pakasqa hallch'ata mana ch'usaqchaptiykiqa.",
'welcomeuser' => 'Allinmi hamusqayki, $1!',
+'welcomecreation-msg' => 'Rakiqunaykiqa kamarisqañam.
+Ama qunqaychu [[Special:Preferences|{{SITENAME}} allinkachinaykikunata]] hukchayta.',
'yourname' => 'Ruraq sutiyki:',
'yourpassword' => 'Yaykuna rimayki',
'yourpasswordagain' => 'Yaykuna rimaykita kutipayay',
'remembermypassword' => "Ruraqpa sutiyta yaykuna rimaytapas yuyaykuy llamk'ay tiyayniypura ({{PLURAL:$1|huk p'unchawkama|$1 p'unchawkama}})",
'securelogin-stick-https' => "Yaykurquspa HTTPS nisqawan t'inkisqa kakuy",
'yourdomainname' => 'Duminyuykip sutin',
+'password-change-forbidden' => 'Kay wikipi yaykuna rimataqa manam hukchayta atinkichu.',
'externaldberror' => 'Hawa yaykuna pantasqam karqan, ichataq manam saqillasunkichu hawa rakiqunaykita musuqchayta.',
'login' => 'Yaykuy',
'nav-login-createaccount' => 'Yaykuy',
'gotaccount' => "Rakiqunaykiñachu kachkan? '''$1'''.",
'gotaccountlink' => 'Rakiqunaykita willaway',
'userlogin-resetlink' => 'Yaykuna willayniykikunatari qunqarqankichu?',
-'createaccountmail' => 'chaskipaq',
+'createaccountmail' => "Kikinmanta tukusqa mit'alla yaykuna rimata llamk'achispa kay qatiqpi kaq e-chaski imamaytaman kachay",
'createaccountreason' => 'Kayrayku:',
'badretype' => 'Qusqayki yaykuna rimakunaqa manam kaqllachu.',
'userexists' => 'Munasqayki ruraqpa sutiykiqa kachkanñam.
'loginlanguagelabel' => 'Rimay: $1',
'suspicious-userlogout' => "Lluqsiy mañakuyniykiqa mananchasqam karqan, waqllisqa wamp'unamanta icha pakaq proksimanta kachasqa kaspanchá.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Mana riqsisqa pantasqa PHP mail() rurananpi',
'user-mail-no-addy' => 'Mana chaskiqniyuq e-chaskita kachayta munarqanki.',
+'user-mail-no-body' => 'Mana kurkuyuq icha ancha pisilla kurkuyuq e-chaskita kachayta munarqanki.',
# Change password dialog
'resetpass' => 'Ruraqpa yaykuna rimanta hukchay',
'changeemail-oldemail' => 'Kunan kachkaq e-chaski imamayta:',
'changeemail-newemail' => 'Musuq e-chaski imamayta:',
'changeemail-none' => '(mana ima)',
+'changeemail-password' => '{{SITENAME}} yaykuna rimayki:',
'changeemail-submit' => 'E-chaskita wakinchay',
'changeemail-cancel' => 'Ama niy',
Kaytam rurayta atinkiman: kay p'anqap sutinta [[Special:Search/{{PAGENAME}}|huk p'anqakunapi maskay]]
icha payman kapuq <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hallch'akunapi maskay]</span>,
ichataq kay p'anqata kamariyta manam saqillasunkichu.",
+'missing-revision' => "\"{{PAGENAME}}\" nisqa p'anqapaq #\$1 musuqchasqaqa manam kanchu.
+
+Kayqa tukurqanman qullusqa p'anchaman t'inkimuq mawk'ayasqa wiñay kawsay t'inkiraykuchá.
+Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy hallch'apim] tariykiman.",
'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" sutiyuq ruraqpa rakiqunanqa manam kanchu. Ama hina kaspa, llanchikuy kay p\'anqata kamarinaykimanta.',
'userpage-userdoesnotexist-view' => '"$1" sutiyuq rakiqunaqa manam hallch\'asqachu.',
'blocked-notice-logextract' => "Kay ruraqqa hark'asqam kachkan.
Takyachichkankim: Kayqa ñuqap qillqasqaymi, ñuqamanmi kapuwan icha qispi pukyumanta iskaychamusqaymi, nispa ($1 p'anqata qhaway).
<br />'''Mana saqillasqa kaspaykiqa, ama qillqarimuychu iskaychay hayñi ''(copyright)'' nisqayuq qillqakunata iskaychamuspa!'''",
'longpageerror' => "'''Pantasqa: Kachasqayki qillqaqa {{PLURAL:$1|huk kB|$1 kB}} hatunmi, {{PLURAL:$2|huk kB|$2 kB}}-manta aswan hatunmi. Manam waqaychasqa kayta atinchu.'''",
-'readonlywarning' => "'''PAQTATAQ: Willañiqintinqa hark'asqam mit'awa kakuchinapaq. Chayrayku kunanqa manam atichkankichu llamk'apusqaykikunata waqaychayta.
-Qillqasqaykita iskaychaspa antañiqiqniykipi willañiqiman llut'amuspa chaypi waqaychariy. Kunanmanta huk pachallapi musuqmanta waqaychaykachay.'''
+'readonlywarning' => "'''Paqtataq: Willañiqintinqa hark'asqam mit'awa kakuchinapaq. Chayrayku kunanqa manam atichkankichu llamk'apusqaykikunata waqaychayta.'''
+Qillqasqaykita iskaychaspa antañiqiqniykipi willañiqiman llut'amuspa chaypi waqaychariykiman, kunanmanta huk pachallapi musuqmanta waqaychaykachaspa.
Hark'aq kamachiqqa kaytam nirqan: $1, kayraykum nispa.",
'protectedpagewarning' => "'''Paqtataq: Kay p'anqaqa llamk'apuymanta amachasqam kamachiqkunallap hukchananpaq.'''
Kachkañam.",
'defaultmessagetext' => 'Ñawpaq qillqa',
'invalid-content-data' => 'Samiqmanta willaykunaqa manam allinchu',
+'content-not-allowed-here' => '"$1" nisqa samiqqa [[$2]] sutiyuq p\'anqapi manam saqillasqachu',
# Content models
'content-model-wikitext' => 'wiki qillqa',
'expansion-depth-exceeded-warning' => "P'anqaqa nisyu mast'ariy ukhu kaqniyuqmi",
'parser-unstrip-loop-warning' => 'Muyupayaq siqum tarisqa',
'parser-unstrip-recursion-limit' => 'Nisyu kuti muyupayay siqum ($1)',
+'converter-manual-rule-error' => "Maki rimay t'ikrana kamachinapiqa pantasqam tarisqa",
# "Undo" feature
'undo-success' => 'Rurasqata kutichiyta atinkim. Manaraq kutichispaykiqa, kay qatiq wakichayta qhawariy rikunaykipaq chiqapta munasqaykichu manallachu, chaymantataq waqaychay kutichinapaq.',
'editundo' => 'kutichiy',
'diff-multi' => "({{PLURAL:$2|Huk ruraqpa|$2 ruraqpa}} {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})",
'diff-multi-manyusers' => "({{PLURAL:$2|Hukmanta|$2-manta}} aswan ruraqkunap {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})",
+'difference-missing-revision' => "Kay wakin kaymanta ($1) {{PLURAL:$2|huk musuqchasqa|$2 musuqchasqakuna}} manam tarisqachu.
+
+Kayqa tukurqanman qullusqa p'anchaman t'inkimuq mawk'ayasqa wiñay kawsay t'inkiraykuchá.
+Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy hallch'apim] tariykiman.",
# Search results
'searchresults' => 'Maskaymanta tarisqakuna',
'search-interwiki-default' => '$1 taripasqakuna:',
'search-interwiki-more' => '(aswan)',
'search-relatedarticle' => 'Apanakuq',
-'mwsuggest-disable' => 'AJAX rimapuykunaman ama niy',
+'mwsuggest-disable' => 'Maskana rimapuykunaman ama niy',
'searcheverything-enable' => "Tukuy suti k'itikunapi maskay",
'searchrelated' => 'apanakuq',
'searchall' => 'tukuy',
'prefs-memberingroups' => 'Kay {{PLURAL:$1|huñuman|huñukunaman}} {{GENDER:$2|kapuq}}:',
'prefs-registration' => "Hallch'ay pacha:",
'yourrealname' => 'Chiqap sutiyki*',
-'yourlanguage' => 'Rimay',
+'yourlanguage' => 'Rimay:',
'yourvariant' => "Samiq rimaypa rikch'aynin:",
'prefs-help-variant' => "Qampa astawan munasqayki allin qillqay kay wikipi samiqniyuq p'anqakunata rikuchinapaq.",
'yournick' => 'Chutu sutiyki (ruruchinapaq)',
'prefs-displaywatchlist' => 'Akllanakunata rikuchiy',
'prefs-diffs' => 'Wakin kaykuna',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-chaski imamaytaqa allinchá',
'email-address-validity-invalid' => 'Allin e-chaski imamaytata yaykuchiy',
'right-writeapi' => "Ima hina qillqana API-ta llamk'achiy",
'right-delete' => "P'anqakunata qulluy",
'right-bigdelete' => "Wiñay kawsaysapa p'anqakunatapas qulluy",
+'right-deletelogentry' => "Sapaq hallch'asqakunata qulluy icha qullusqamanta paqarichiy",
'right-deleterevision' => "P'anqakunapaq sapaq musuqchasqankunata qulluy paqarichiy ima",
'right-deletedhistory' => 'Wiñay kawsaymanta qullusqa musuqchasqakunapaq pisichaykunata qhaway, manataq kapuq qillqakunatachu',
'right-deletedtext' => 'Qullusqa musuqchasqapura qullusqa qillqata hukchasqakunatapas qhaway',
'backend-fail-notsame' => '$1 nisqapiqa mana kaqlla willañiqim kachkanña.',
'backend-fail-invalidpath' => '$1 nisqaqa manam allin pirwa ñanchu.',
'backend-fail-delete' => 'Manam atinichu $1 sutiyuq willañiqita qulluyta.',
+'backend-fail-describe' => '"$1" sutiyuq p\'anqapaq metadatata manam hukchayta atinichu.',
'backend-fail-alreadyexists' => '$1 sutiyuq willañiqiqa kachkanñam.',
'backend-fail-store' => 'Manam atinichu $1 sutiyuq willañiqita $2-pi pirwayta.',
'backend-fail-copy' => 'Manam atinichu willañiqita $1-manta $2-man iskaychayta.',
'lockmanager-fail-releaselock' => 'Manam atinichu "$1" nisqapaq hark\'anata paskayta.',
'lockmanager-fail-db-bucket' => 'Manam atinichu "$1" sutiyuq p\'uruñapi aypalla hark\'ana willañiqintinkunawan t\'inkinakuyta.',
'lockmanager-fail-db-release' => 'Manam atinichu "$1" sutiyuq willañiqintinpi hark\'anakunata paskayta.',
-'lockmanager-fail-svr-release' => 'Manam atinichu "$1" sutiyuq sirwiqpi hark\'anakunata paskayta.',
+'lockmanager-fail-svr-acquire' => 'Manam atinichu "$1" sutiyuq sirwiqpi hark\'anakunata chaskiyta.',
+'lockmanager-fail-svr-release' => 'Manam atinichu "$1" sutiyuq sirwiqpi hallch\'asqa hark\'anakunata paskayta.',
# ZipDirectoryReader
'zip-file-open-error' => 'Willañiqita ZIP-kama llanchispa pantasqatam tarini.',
Chay rantiqa chiqap, hukchanasqa p'anqamanmi t'inkichun.<br />
P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam kanqa.",
+'pageswithprop' => "Kaqninniyuq p'anqakuna",
+'pageswithprop-legend' => "Kaqninniyuq p'anqakuna",
+'pageswithprop-text' => "Kay p'anqapiqa sapaq kaqninniyuq p'anqakunatam sutisuyupi rikunki.",
+'pageswithprop-prop' => 'Kaqninpa sutin:',
+'pageswithprop-submit' => 'Riy',
+
'doubleredirects' => 'Iskaylla pusapunakuna',
'doubleredirectstext' => "Kay p'anqapiqa huk pusapuna p'anqaman pusapuq p'anqakunap sutinkunatam rikunki. Sapa sinrupiqa ñawpaq ñiqin, iskay ñiqinpas pusapunaman t'inkikunam, iskay ñiqin pusapunap taripananpa qallariyninpas, sapsilla \"chiqap\" allin taripana qillqam, maymanchus ñawpaq ñiqin pusapuna p'anqa pusachun.
<del>Chakapusqa</del> taripasqakunaqa paskasqañam.",
'listgrouprights-addgroup-self-all' => 'Tukuy huñukunatam yapayta atin kikinpa raqiqunanman',
'listgrouprights-removegroup-self-all' => 'Tukuy huñukunatam qichuyta atin kikinpa raqiqunanmanta',
-# E-mail user
+# Email user
'mailnologin' => 'Imamaytataqa ama kachaychu',
'mailnologintext' => '[[Special:UserLogin|Yaykunaykim]], [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytappas kananmi tiyan huk ruraqkunaman e-chaskita kachanaykipaq.',
'emailuser' => 'Kay ruraqman e-chaskita kachay',
# Move page
'move-page' => '$1-ta astay',
'move-page-legend' => "P'anqata astay",
-'movepagetext' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas astasqa kanqa. Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. Mawk'a sutiman t'inkimuq p'anqakunaqa manam hukyanqachu. Paqtataq [[Special:DoubleRedirects|iskayllapas]] [[Special:BrokenRedirects|p'akisqapas]] pusapuna p'anqakunata allinchallay. Ama panta t'inkimuqkunata saqiychu.
-
+'movepagetext' => "Kay hunt'ana p'anqawanqa huk p'anqa tukuy wiñay kawsasqanpas astasqam kanqa. Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa. Akllaptiykiqa, mawk'a sutiman t'inkimuq pusapuna p'anqakuna kikinmanta allinchasqam kanqa. Mana hinaptiykiqa, paqtataq [[Special:DoubleRedirects|iskayllapas]] [[Special:BrokenRedirects|p'akisqapas]] pusapuna p'anqakunata llanchispa allinchallay. Qammi paqtachiq, t'inkimuqkuna allinraq kana hawam kanki. Ama panta t'inkimuqkunata saqiychu.
-Nisqayki musuq sutiyuq wiñay kawsasqayuq p'anqaña kachkaptinqa, kay p'anqa '''manam''' astasqa kanqachu.
-
-Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataq huk mawk'a kachkaqña p'anqamanchu.
+Nisqayki musuq sutiyuq wiñay kawsasqayuq p'anqaña kachkaptinqa, kay p'anqa '''manam''' astasqa kanqachu. Huklla kuti astasqa p'anqataqa mawk'a sutinman astayta atinkim, manataqmi huk mawk'a kachkaqña p'anqamanchu.
'''Paqtataq!'''
Kay astayqa ancha riqsisqa p'anqata hatun mana suyapusqa hukchaymi kayta atinman;
-ama hina kaspa, yuyarillay imachus kay astanaykita saqispa tukunata atinman.",
+ama hina kaspa, yuyarillay imachus kay astanayki saqispa tukunata atinman.",
'movepagetext-noredirectfixer' => "Kay hunt'ana p'anqawanqa huk p'anqam tukuy wiñay kawsasqanpas musuq sutiman astasqa kanqa.
Mawk'a sutinqa musuq sutiman pusapuq p'anqam tukunqa.
Paqtataq [[Special:DoubleRedirects|iskaylla]] icha [[Special:BrokenRedirects|p'akisqa]] pusapuna p'anqakunata allinchallay.
# Info page
'pageinfo-title' => '"$1" sutiyuq p\'anqamanta willay',
+'pageinfo-not-current' => "Achachaw, manam atinichu mawk'a llamk'apusqakunamanta kay willaykunata qusuyta.",
'pageinfo-header-basic' => 'Tiksi willaykuna',
'pageinfo-header-edits' => "Llamk'apusqakunap wiñay kawsaynin",
'pageinfo-header-restrictions' => "P'anqap amachaynin",
'pageinfo-robot-noindex' => 'Mana maskana yuyarinapaq',
'pageinfo-views' => "Hayk'a qhawaykuna",
'pageinfo-watchers' => "P'anqata hayk'a watiqaqkuna",
+'pageinfo-few-watchers' => '$1-manta aswan pisi {{PLURAL:$1|qhawaq|qhawaqkuna}}',
'pageinfo-redirects-name' => "Kay p'anqaman pusampuqkuna",
'pageinfo-subpages-name' => "Kay p'anqap urin p'anqankuna",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|pusapuna|pusapunakuna}}; $3 {{PLURAL:$3|mana pusapuna|mana pusapunakuna}})',
'pageinfo-firstuser' => "P'anqap kamariqnin",
'pageinfo-firsttime' => "P'anqa kamariypa p'unchawnin",
'pageinfo-lastuser' => "Ñaqha llamk'apuqnin",
'pageinfo-lasttime' => "Ñaqha llamk'apuypa p'unchawnin",
'pageinfo-edits' => "Tukuymanta hayk'a hukchasqakuna",
'pageinfo-authors' => "Tukuymanta hayk'a sapaq kaq ruraqkuna",
+'pageinfo-recent-edits' => "Ñaqha llamk'apusqakuna yupay (ñaqha $1-pi)",
+'pageinfo-recent-authors' => "Ñaqha hayk'a sapaq kaq ruraqkuna",
'pageinfo-magic-words' => 'Layqa {{PLURAL:$1|simi|simikuna}} ($1)',
'pageinfo-hidden-categories' => 'Pakasqa {{PLURAL:$1|katiguriya|katiguriyakuna}} ($1)',
'pageinfo-templates' => "Ch'aqtasqa {{PLURAL:$1|plantilla|plantillakuna}} ($1)",
'pageinfo-redirectsto-info' => 'willachikuy',
'pageinfo-contentpage' => "Samiqniyuq p'anqa hinam chaninchasqa",
'pageinfo-contentpage-yes' => 'Arí',
+'pageinfo-protect-cascading' => "Amachaykunaqa kaymanta ch'aqtakunmi",
'pageinfo-protect-cascading-yes' => 'Arí',
+'pageinfo-protect-cascading-from' => "Amachaykunaqa kaymanta ch'aqtakunmi:",
'pageinfo-category-info' => 'Katiguriyamanta willaykuna',
'pageinfo-category-pages' => "Hayk'a p'anqakuna",
'pageinfo-category-subcats' => "Hayk'a urin katiguriyakuna",
'file-info-png-looped' => 'muyupayachisqa',
'file-info-png-repeat' => '$1 {{PLURAL:$1|kuti|kuti}} pukllasqa',
'file-info-png-frames' => '$1 {{PLURAL:$1|inchu|inchukuna}}',
+'file-no-thumb-animation' => "'''Paqtataq: Saywachasqa allwiyaraykuqa, kay willañiqimanta rikch'achakuna manam kuyuchisqa kanqachu.'''",
+'file-no-thumb-animation-gif' => "'''Paqtataq: Saywachasqa allwiyaraykuqa, kay rikch'a hina k'awchi huyakuyuq GIF rikch'akunamanta rikch'achakuna manam kuyuchisqa kanqachu.'''",
# Special:NewFiles
'newimages' => 'Musuq rikchakunap suyu-suyun',
'imagelisttext' => "Kay qatiqpiqa '''$1''' {{PLURAL:$1|rikchatam|rikchakunatam}} rikunki, $2-kama ñiqichasqa.",
'newimages-summary' => "Kay sapaq p'anqapiqa ñaqha churkusqa willañiqikunatam rikunki.",
-'newimages-legend' => 'Suysuna',
+'newimages-legend' => "Ch'illchina",
'newimages-label' => 'Willañiqip sutin (icha sutinpa rakin):',
'showhidebots' => '($1 rurana antacha)',
'noimages' => 'Manam ima rikunallapas kanchu.',
'monthsall' => '(tukuy)',
'limitall' => 'tukuy',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-chaski imamaytaykita takyachiy',
'confirmemail_noemail' => 'Manaraq [[Special:Preferences|allinkachinaykikunapi]] chaniyuq e-chaski imamaytayki kachkanchu.',
'confirmemail_text' => "{{SITENAME}}piqa e-chaski imamaytaykita takyachinaykim tiyan e-chaskita llamk'achinaykipaq. Urapi butunta ñit'ipay e-chaski imamaytaykiman takyachina chaskita kachamunaykupaq.
# Scary transclusion
'scarytranscludedisabled' => "[Interwiki ch'aqtayman ama nisqa]",
'scarytranscludefailed' => '[$1-paq plantillataqa manam chaskiyta atinchu]',
+'scarytranscludefailed-httpstatus' => '[$1-paq plantillataqa manam chaskiyta atinchu: HTTP $2]',
'scarytranscludetoolong' => '[URL tiyayqa nisyu hatunmi]',
# Delete conflict
'version-license' => 'Saqillay',
'version-poweredby-credits' => "Kay wikitaqa '''[//www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.",
'version-poweredby-others' => 'hukkuna',
+'version-credits-summary' => "Kay qatiqpi runakunatam [[Special:Version|MediaWiki]] nisqapaq llamk'apusqankunapaq riqsichiyta munayku.",
'version-license-info' => "MediaWiki llamp'u kaqqa qispim; mast'ariytam icha wakinchaytam atinki GNU General Public License nisqa saqillaypa kamachisqankama, Free Software Foundation nisqap uyaychasqan; saqillaypa iskay ñiqin musuqchasqan, munaspaykiqa aswan musuq musuqchasqan.
MediaWikitaqa mast'ariyku runakunata yanapanapaqmi, ichataq MANAM FIYAKUYTA ATIYKUCHU; manapas ch'aqtasqa RURANALLA FIYAKUYTACHU manapas ima SAPAQ TUKUYNINPAQCHU. GNU General Public License nisqa saqillayta qhaway aswan yuyaykunapaq.
'specialpages-group-highuse' => "Achka kuti llamk'achisqa p'anqakuna",
'specialpages-group-pages' => "P'anqa sutisuyukuna",
'specialpages-group-pagetools' => "P'anqa llamk'anakuna",
-'specialpages-group-wiki' => "Wiki willakuna llamk'anakunapas",
+'specialpages-group-wiki' => "Willakuna llamk'anakunapas",
'specialpages-group-redirects' => "Pusapunapaq sapaq p'anqakuna",
'specialpages-group-spam' => "Spam nisqa millay rurayta hark'anapaq llamk'anakuna",
# Special:Tags
'tags' => 'Waliq unancha hukchay',
-'tag-filter' => '[[Special:Tags|Unancha]] suysuna:',
-'tag-filter-submit' => 'Suysuna',
+'tag-filter' => "[[Special:Tags|Unancha]] ch'illchina:",
+'tag-filter-submit' => "Ch'illchina",
'tags-title' => 'Unanchakuna',
'tags-intro' => "Kay p'anqapiqa hukchaykunata llamp'u kaqpa sananchananpaq unanchakunatam rikunki, sut'inkunatapas.",
'tags-tag' => 'Unanchachap sutin',
'logentry-newusers-newusers' => '$1 sutiyuq rakiquna kamarisqañam',
'logentry-newusers-create' => '$1 sutiyuq rakiquna kamarisqañam',
'logentry-newusers-create2' => '$1 sutiyuq ruraqqa $3 sutiyuq rakiqunatam kamarirqanñam',
+'logentry-newusers-byemail' => '$3 sutiyuq rakiqunataqa $1 kamarirqañam, yaykuna rimataq kachasqañam.',
'logentry-newusers-autocreate' => '$1 sutiyuq rakiqunaqa kikinmanta kamarisqam',
'rightsnone' => '(-)',
'api-error-empty-file' => "Kachasqayki willañiqiqa ch'usaqmi.",
'api-error-emptypage' => "Musuq ch'usaq p'anqakunata kamariyqa manam saqillasqachu.",
'api-error-fetchfileerror' => 'Ukhupi pantasqa: Willañiqita chaskiykachachkaptiyki ima mana allin kaqpas tukurqan.',
+'api-error-fileexists-forbidden' => '"$1" sutiyuq willañiqiqa kachkañam, manam huknachayta atinkichu.',
+'api-error-fileexists-shared-forbidden' => '"$1" sutiyuq willañiqiqa rakinakusqa willañiqi churanapi kachkañam, manam huknachayta atinkichu.',
'api-error-file-too-large' => 'Kachasqayki willañiqiqa nisyu hatunmi.',
'api-error-filename-tooshort' => 'Kay willañiqi sutiqa nisyu pisillam.',
'api-error-filetype-banned' => 'Kay willañiqi layaqa manam saqillasqachu.',
'api-error-ok-but-empty' => 'Ukhupi pantasqa: Sirwiqqa manam kutipanchu.',
'api-error-overwrite' => 'Kachkaqña willañiqita huknachayqa manam saqillasqachu.',
'api-error-stashfailed' => "Ukhupi pantasqa: Sirwiqqa mit'alla willañiqita manam hallch'ayta atinchu.",
+'api-error-publishfailed' => "Ukhupi pantasqa: Sirwiqqa mit'alla willañiqita manam uyanchayta atinchu.",
'api-error-timeout' => "Suyakusqa mit'apiqa sirwiq manam kutiparqanchu.",
'api-error-unclassified' => 'Mana riqsisqa pantasqam tukurqan.',
'api-error-unknown-code' => 'Mana riqsisqa pantasqa: "$1".',
'duration-centuries' => '{{PLURAL:$1|pachakwata|pachakwatakuna}}',
'duration-millennia' => '{{PLURAL:$1|waranqawata|waranqawatakuna}}',
+# Image rotation
+'rotate-comment' => "Rikch'aqa pacha rikuchiqwan $1 {{PLURAL:$1|k'atma}} muyusqam",
+
);
# Special:ListGroupRights
'listgrouprights-members' => '(Kay tantanakuypa rurakkunapa shutikuna)',
-# E-mail user
+# Email user
'emailuser' => 'Kay rurakman e-chaskita kachana',
# Watchlist
'loginlanguagelabel' => 'Lingua: $1',
'suspicious-userlogout' => "Tia dumonda per partir è vegnida refusada perquai ch'i para ch'ella è vegnida tramessa d'in navigatur che funcziuna betg correctamain u d'in proxy da cache.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Errur nunenconuschenta en la funcziun mail() da PHP',
'user-mail-no-addy' => 'Empruvà da trametter in e-mail senza ina adressa dad e-mail.',
'prefs-displaywatchlist' => 'Opziuns da visualisar',
'prefs-diffs' => 'Cumparegliaziun da versiuns',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => "L'adressa da e-mail para dad esser valida",
'email-address-validity-invalid' => 'Endatescha ina adressa dad e-mail valida',
'listgrouprights-addgroup-self-all' => "Agiuntar tut las gruppas a l'agen conto",
'listgrouprights-removegroup-self-all' => "Allontanar tut las gruppas da l'agen conto",
-# E-mail user
+# Email user
'mailnologin' => 'Nagina adressa per trametter',
'mailnologintext' => "Ti stos [[Special:UserLogin|t'annunziar]] ed avair ina adressa dad e-mail valida en tias [[Special:Preferences|preferenzas]] per trametter e-mails ad auters utilisaders.",
'emailuser' => 'Trametter in e-mail a quest utilisader',
'monthsall' => 'tuts',
'limitall' => 'tuts',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => "Confermar l'adressa dad e-mail",
'confirmemail_noemail' => "Ti n'has betg inditgà ina adressa dad e-mail valida en tias [[Special:Preferences|preferenzas]].",
'confirmemail_text' => "{{SITENAME}} pretenda che ti confermas tia adressa dad e-mail avant che ti pos utilisar funcziuns dad e-mail.
'passwordsent' => 'O nouă parolă a fost trimisă la adresa de e-mail a utilizatorului "$1". Te rugăm să te autentifici pe {{SITENAME}} după ce o primești.',
'blocked-mailpassword' => 'Această adresă IP este blocată la editare, și deci nu este permisă utilizarea funcției de recuperare a parolei pentru a preveni abuzul.',
'eauthentsent' => 'Un email de confirmare a fost trimis adresei nominalizate. Înainte de a fi trimis orice alt email acestui cont, trebuie să urmați intrucțiunile din email, pentru a confirma că acest cont este într-adevăr al dvs.',
-'throttled-mailpassword' => 'O parolă a fost deja trimisă în {{PLURAL:$1|ultima oră|ultimele $1 ore|ultimele $1 de ore}}. Pentru a preveni abuzul, se poate trimite doar o parolă la {{PLURAL:$1|o oră|$1 ore|$1 de ore}}.',
+'throttled-mailpassword' => 'Un e-mail pentru resetarea parolei a fost deja trimis în {{PLURAL:$1|ultima oră|ultimele $1 ore|ultimele $1 de ore}}. Pentru a preveni abuzul, se va trimite doar un e-mail de resetare a parolei la un interval de o {{PLURAL:$1|o oră|$1 ore|$1 de ore}}.',
'mailerror' => 'Eroare la trimitere e-mail: $1',
'acct_creation_throttle_hit' => 'De la această adresă IP, vizitatorii sitului au creat {{PLURAL:$1|1 cont|$1 conturi|$1 de conturi}} de utilizator în ultimele zile, acest număr de noi conturi fiind maximul admis în această perioadă de timp.
Prin urmare, vizitatorii care folosesc același IP nu mai pot crea alte conturi pentru moment.',
# Special:PasswordReset
'passwordreset' => 'Resetare parolă',
-'passwordreset-text' => 'Completați acest formular pentru a primi un e-mail cu datele contului dumneavoastră.',
+'passwordreset-text' => 'Completați acest formular pentru a vă reseta parola.',
'passwordreset-legend' => 'Resetare parolă',
'passwordreset-disabled' => 'Resetarea parolei a fost dezactivată pe acest wiki.',
'passwordreset-pretext' => '{{PLURAL:$1| | Introduceți mai jos o parte din informații}}',
'passwordreset-capture-help' => 'Dacă bifați această căsuță, e-mailul (conținând parola temperară) vă va fi afișat, dar va fi trimis și utilizatorului.',
'passwordreset-email' => 'Adresă de e-mail:',
'passwordreset-emailtitle' => 'Detalii despre cont pe {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Cineva (probabil dumneavoastră, de la adresa IP $1) a cerut reamintirea detaliilor
-contului dumneavoastră pe {{SITENAME}} ($4). {{PLURAL:$3|Următorul cont este asociat|Următoarele conturi sunt asociate}}
+'passwordreset-emailtext-ip' => 'Cineva (probabil dumneavoastră, de la adresa IP $1) a solicitat resetarea parolei
+pentru {{SITENAME}} ($4). {{PLURAL:$3|Următorul cont este asociat|Următoarele conturi sunt asociate}}
cu această adresă de e-mail:
$2
Ar trebui să vă autentificați și să schimbați parola acum. Dacă altcineva a făcut această cerere
sau dacă v-ați reamintit parola inițială și nu mai doriți să o schimbați,
puteți ignora acest mesaj, continuând să utilizați vechea parolă.',
-'passwordreset-emailtext-user' => 'Utilizatorul $1 de pe {{SITENAME}} a solicitat o reamintire a detaliilor contului dumneavoastră pentru {{SITENAME}} ($4). Următorul utilizator are {{PLURAL:$3|contul asociat|conturile asociate}} cu această adresă de e-mail:
+'passwordreset-emailtext-user' => 'Utilizatorul $1 de pe {{SITENAME}} a solicitat o resetare a parolei dumneavoastră pentru {{SITENAME}} ($4). Următorul utilizator are {{PLURAL:$3|contul asociat|conturile asociate}} cu această adresă de e-mail:
$2
Ar trebui să vă autentificați și să alegeți acum o nouă parolă. Dacă altcineva a făcut această solicitare, ori dacă v-ați reamintit parola originală și nu mai doriți modificarea ei, puteți ignora acest mesaj, continuând cu vechea parolă.',
'passwordreset-emailelement' => 'Nume de utilizator: $1
Parolă temporară: $2',
-'passwordreset-emailsent' => 'A fost trimis un e-mail de reamintire.',
-'passwordreset-emailsent-capture' => 'Un mesaj de reamintire a fost trimis, fiind afișat mai jos.',
-'passwordreset-emailerror-capture' => 'Un mesaj de reamintire a fost generat (fiind afișat mai jos), dar trimiterea sa către utilizator a eșuat: $1',
+'passwordreset-emailsent' => 'A fost trimis un e-mail de resetare a parolei.',
+'passwordreset-emailsent-capture' => 'Un mesaj de resetare a parolei a fost trimis, fiind afișat mai jos.',
+'passwordreset-emailerror-capture' => 'Un mesaj de resetare a parolei a fost generat (fiind afișat mai jos), dar trimiterea sa către utilizator a eșuat: $1',
# Special:ChangeEmail
'changeemail' => 'Modificare adresă de e-mail',
O pagină este considerată o pagină de dezambiguizare dacă folosește formate care apar la [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Pagini cu o proprietate de pagină',
+'pageswithprop-legend' => 'Pagini cu o proprietate de pagină',
'pageswithprop-text' => 'Această pagină listează paginile care utilizează o anumită proprietate de pagină.',
'pageswithprop-prop' => 'Numele proprietății:',
+'pageswithprop-submit' => 'Du-te',
'doubleredirects' => 'Redirecționări duble',
'doubleredirectstext' => 'Această listă conține pagini care redirecționează la alte pagini de redirecționare.
'restriction-level-all' => 'orice nivel',
# Undelete
-'undelete' => 'Recuperează pagina ștearsă',
-'undeletepage' => 'Vizualizează și recuperează pagini șterse',
+'undelete' => 'Recuperare pagină ștearsă',
+'undeletepage' => 'Vizualizare și recuperare pagini șterse',
'undeletepagetitle' => "'''Această listă cuprinde versiuni șterse ale paginii [[:$1|$1]].'''",
'viewdeletedpage' => 'Vezi paginile șterse',
'undeletepagetext' => '{{PLURAL:$1|Următoarea pagină a fost ștearsă, dar încă se află în arhivă și poate fi recuperată|Următoarele $1 pagini au fost șterse, dar încă se află în arhivă și pot fi recuperate|Următoarele $1 de pagini au fost șterse, dar încă se află în arhivă și pot fi recuperate}}. Arhiva ar putea fi ștearsă periodic.',
-'undelete-fieldset-title' => 'Recuperează versiuni',
+'undelete-fieldset-title' => 'Recuperare versiuni',
'undeleteextrahelp' => "Pentru a restaura întregul istoric al paginii lăsați toate căsuțele nebifate și apăsați butonul '''''{{int:undeletebtn}}'''''.
Pentru a realiza o recuperare selectivă bifați versiunile pe care doriți să le recuperați și apăsați butonul '''''{{int:undeletebtn}}'''''.",
'undeleterevisions' => '$1 {{PLURAL:$1|versiune arhivată|versiuni arhivate|de versiuni arhivate}}',
'undeletedpage' => "'''$1 a fost recuperat'''
Consultați [[Special:Log/delete|jurnalul ștergerilor]] pentru a vedea toate ștergerile și recuperările recente.",
-'undelete-header' => 'Vezi [[Special:Log/delete|logul de ștergere]] pentru paginile șterse recent.',
+'undelete-header' => 'Consultați [[Special:Log/delete|jurnalul de ștergeri]] pentru paginile șterse recent.',
'undelete-search-title' => 'Căutare pagini șterse',
'undelete-search-box' => 'Caută pagini șterse',
'undelete-search-prefix' => 'Arată paginile care încep cu:',
'duration-centuries' => '$1 {{PLURAL:$1|secol|secole|de secole}}',
'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenii|de milenii}}',
-# Unknown messages
-'pageswithprop-legend' => 'Pagini cu o proprietate de pagină',
-'pageswithprop-submit' => 'Du-te',
+# Image rotation
+'rotate-comment' => 'Imagine rotită în sensul acelor de ceasornic cu $1 {{PLURAL:$1|grad|grade|de grade}}',
+
);
$messages = array(
# User preference toggles
-'tog-underline' => 'Cullegaminde sottolinèete:',
+'tog-underline' => 'Collegaminde sottolinèate:',
'tog-justify' => 'Giustifeche le paragrafe',
'tog-hideminor' => "Scunne le cangiaminde stuédeche jndr'à le cangiaminde recende",
-'tog-hidepatrolled' => "Scunne le cangiaminde condrollete jndr'à le cangiaminde recende",
-'tog-newpageshidepatrolled' => "Scunne le pàggene tenute sotte condrolle da 'a liste de le pàggene nuève",
-'tog-extendwatchlist' => "Spanne 'a liste de le pàggene condrollete pe fa vedè tutte le cangiaminde fatte, none sulamende l'urteme",
+'tog-hidepatrolled' => "Scunne le cangiaminde condrollate jndr'à le cangiaminde recende",
+'tog-newpageshidepatrolled' => "Scunne le pàggene tenute sotte condrolle da l'elenghe de le pàggene nuève",
+'tog-extendwatchlist' => "Spanne l'elenghe de le pàggene condrollate pe fa vedè tutte le cangiaminde fatte, none sulamende l'urteme",
'tog-usenewrc' => "Ause le cangiaminde recende migliorate (vole 'u JavaScript)",
-'tog-numberheadings' => 'Testete auto-numerete',
+'tog-numberheadings' => 'Testate auto-numerate',
'tog-showtoolbar' => "Fà vedè 'a barra de le cangiaminde (JavaScript)",
'tog-editondblclick' => "Cange le pàggene cu 'nu doppie clic (JavaScript)",
-'tog-editsection' => 'Abilite le cangiaminde a sezione ausanne [cange]',
-'tog-editsectiononrightclick' => "Abilite le cngiaminde d'a sezione ausanne 'u pulsande destre d'u mouse cazzanne sus a 'u titele (Javascript)",
-'tog-showtoc' => "Fa vedè 'a taggelle de le condenute (pe le pàggene cu cchiù de 3 testete)",
-'tog-rememberpassword' => "Arrencuerdete 'u nome mije sus a stu browser (pe 'nu massime de $1 {{PLURAL:$1|sciurne|sciurne}})",
+'tog-editsection' => "Abbilite le cangiaminde d'a sezione ausanne le collagaminde [cange]",
+'tog-editsectiononrightclick' => "Abbilite le cangiaminde d'a sezione ausanne 'u pulsande destre d'u mouse cazzanne sus a 'u titole (Javascript)",
+'tog-showtoc' => "Fa vedè 'a tabbelle de le condenute (pe le pàggene cu cchiù de 3 testate)",
+'tog-rememberpassword' => "Arrecuèrdete 'u nome mije sus a stu browser (pe 'nu massime de $1 {{PLURAL:$1|sciurne}})",
'tog-watchcreations' => "Mitte le pàggene ca je agghie ccrejate jndr'à le pàggene condrollate",
'tog-watchdefault' => "Mitte le pàggene ca je agghie cangiate jndr'à le pàggene condrollate",
-'tog-watchmoves' => "!Mitte le pàggene ca je agghie spustate jndr'à le pàggene condrollate",
+'tog-watchmoves' => "Mitte le pàggene ca je agghie spustate jndr'à le pàggene condrollate",
'tog-watchdeletion' => "Mitte le pàggene ca je agghie scangellate jndr'à le pàggene condrollate",
-'tog-minordefault' => 'Pe convenzione signe tutte le cangiaminde cumme a stuédeche',
-'tog-previewontop' => "Fa vedè l'andeprime apprime de 'a scatole de le cangiaminde",
-'tog-previewonfirst' => "Fà vedè l'andeprime sus a 'u prime cangiaminde",
-'tog-nocache' => "Disabbilete 'u caching d'a pàgene sfogliate",
+'tog-minordefault' => 'Pe convenzione signe tutte le cangiaminde cumme stuédeche',
+'tog-previewontop' => "Fa vedè l'andeprime apprime d'a caselle de le cangiaminde",
+'tog-previewonfirst' => "Fà vedè l'andeprime sus a 'u prime cangiamende",
+'tog-nocache' => "Disabbilite 'u caching d'a pàgene sfogliate",
'tog-enotifwatchlistpages' => "Manneme 'na mail quanne 'a pàgene ca stoche a condrolle ha cangiate",
-'tog-enotifusertalkpages' => "Manneme 'na mail quanne 'a pàgene de le 'ngazzaminde ha cangete",
+'tog-enotifusertalkpages' => "Manneme 'na mail quanne 'a pàgene de le 'ngazzaminde ha cangiate",
'tog-enotifminoredits' => "Manneme 'na mail quanne onne state fatte cangiaminde stuèdeche sus a le pàggene",
'tog-enotifrevealaddr' => "Fa vedè l'indirizze e-mail jndr'à le e-mail de notifiche",
'tog-shownumberswatching' => "Fa vedè 'u numere de le utinde ca uardene",
[//www.mediawiki.org/wiki/Manual:External_editors Pe cchiù 'mbormaziune.])",
'tog-externaldiff' => "Ause 'na differenze esterne pe default (sulamende pe l'esperte, abbesogne de 'na configuraziona speciele sus a 'u computer tune. <br />
[//www.mediawiki.org/wiki/Manual:External_editors More information.])",
-'tog-showjumplinks' => 'Abbilite "zumbe a" pe accedere a le collegaminde',
-'tog-uselivepreview' => "Ause l'andeprime da 'u vive (JavaScript) (Sperimendele)",
-'tog-forceeditsummary' => "Ciercheme conferme quanne stoche a 'nzerische 'nu riepighe vianghe",
-'tog-watchlisthideown' => "Scunne le cangiaminde mie da 'a liste de le pàgene condrollete",
-'tog-watchlisthidebots' => "Scunne le cangiaminde de le not da 'a liste de le pàgene condrollete",
-'tog-watchlisthideminor' => "Scunne le cangiaminde stuèdeche da 'a liste de le pàgene condrollete",
-'tog-watchlisthideliu' => "Scunne le cangiaminde de l'utinde canusciute da 'a liste de le pàgene condrollete",
-'tog-watchlisthideanons' => "Scunne le cangiaminde de l'utinde scanusciute da 'a liste de le pàgene condrollete",
-'tog-watchlisthidepatrolled' => "Scunne le cangiaminde condrollete jndr'à liste de le pàggene condrollete",
+'tog-showjumplinks' => 'Abbilite "zumbe a" pe scè sus a le collegaminde',
+'tog-uselivepreview' => "Ause l'andeprime da 'u vive (JavaScript) (Sperimendale)",
+'tog-forceeditsummary' => "Ciércame conferme quanne stoche a 'nzerische 'nu riepighe vianghe",
+'tog-watchlisthideown' => "Scunne le cangiaminde mije da l'elenghe de le pàggene condrollate",
+'tog-watchlisthidebots' => "Scunne le cangiaminde de le bot da l'elenghe de le pàggene condrollate",
+'tog-watchlisthideminor' => "Scunne le cangiaminde stuèdeche da l'elenghe de le pàggene condrollate",
+'tog-watchlisthideliu' => "Scunne le cangiaminde de l'utinde canusciute da l'elenghe de le pàggene condrollate",
+'tog-watchlisthideanons' => "Scunne le cangiaminde de l'utinde scanusciute da l'elenghe de le pàggene condrollate",
+'tog-watchlisthidepatrolled' => "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
'tog-ccmeonemails' => "Manneme 'na copie de le mail ca je manne a l'ôtre utinde",
'tog-diffonly' => 'No fà vedè le pàggene cu le condenute sotte a le differenze',
'tog-showhiddencats' => 'Fa vedè le categorije scunnute',
'category-empty' => "''Sta categorije pe mò non ge tène manghe 'na pàgene e manghe 'nu media.''",
'hidden-categories' => '{{PLURAL:$1|categorije scunnute|categorije scunnute}}',
'hidden-category-category' => 'Categorije scunnute',
-'category-subcat-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'na sottecategorije.|Sta categorije tène {{PLURAL:$1|'na sottecategorije|$1 sottecategorije}}, sus a 'nu totele de $2.}}",
+'category-subcat-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'na sottecategorije}}. Sta categorije tène {{PLURAL:$1|'na sottecategorije|$1 sottecategorije}}, sus a 'nu totale de $2.",
'category-subcat-count-limited' => 'Sta categorije tène {{PLURAL:$1|sottecategorije|le seguende $1 sottecategorije}}.',
-'category-article-count' => "{{PLURAL:$2|Sta categorije condiene sulamende 'a seguenda pàgene.|{{PLURAL:$1|'A seguende pàgene jè|le seguende $1 pàggene sonde }} condenute jndr'à sta categorije, sus a $2 totele.}}",
+'category-article-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'a seguenda pàgene.}} {{PLURAL:$1|'A seguende pàgene jè|le seguende $1 pàggene sonde}} condenute jndr'à sta categorije, sus a $2 totale.",
'category-article-count-limited' => "{{PLURAL:$1|'A pàgene seguente ste|Le $1 pàggene seguende stonne}} jndr'à categorija corrende",
-'category-file-count' => "{{PLURAL:$2|Sta categorije condene sulamende 'u seguende file.|{{PLURAL:$1|'U seguende file stè |le seguende $1 files stonne}} jndr'à sta categorije, sus a $2 totele.}}",
+'category-file-count' => "{{PLURAL:$2|Sta categorije tène sulamende 'u seguende file}}. {{PLURAL:$1|'U seguende file stè |le seguende $1 files stonne}} jndr'à sta categorije, sus a $2 totale.",
'category-file-count-limited' => "{{PLURAL:$1|'U seguende file jè|$1 Le seguende file sonde}} jndr'à categorije corrende.",
'listingcontinuesabbrev' => 'cond.',
'index-category' => 'Pàggene indicizzate',
'searcharticle' => 'Véje',
'history' => "Storie d'a pàgene",
'history_short' => 'Cunde',
-'updatedmarker' => "aggiornete da l'urtema visite meje",
+'updatedmarker' => "aggiornate da l'urtema visita meje",
'printableversion' => 'Versione ca se stambe',
'permalink' => 'Collegamende ca remane pe sembre',
'print' => 'Stambe',
'blocked-mailpassword' => "L'indirizze IP tue jè blocchete pe le cangiaminde e accussì tu non ge puè ausà 'a funzione de recupere d'a password pe prevenìe l'abbuse.",
'eauthentsent' => "'N'e-mail de conferme ha state mannete a l'indirizze ca tu è ditte.
Apprime ca otre e-mail avènene mannete a 'u cunde tue, tu ha seguì le 'struzione ca stonne jndr'à l'e-mail, pe confermà l'iscrizione.",
-'throttled-mailpassword' => "'Nu arrecordatore de password ha stete già mannete jndr'à {{PLURAL:$1|l'urtema ore|l'urteme $1 ore}}.
-Pe prevenì l'abbuse, sulamende 'nu arrecordatore de password avene mannete ogne {{PLURAL:$1|ore|$1 ore}}.",
+'throttled-mailpassword' => "'Nu arrecordatore de passuord ha stete già mannate jndr'à {{PLURAL:$1|l'urtema ore|l'urteme $1 ore}}.
+Pe prevenì l'abbuse, sulamende 'nu arrecordatore de passuord avene mannate ogne {{PLURAL:$1|ore|$1 ore}}.",
'mailerror' => "Errore mannanne 'a mail: $1",
'acct_creation_throttle_hit' => "Le visitature de sta Uicchi ca stonne ausene stu indirizze IP onne ccrejete {{PLURAL:$1|'nu cunde utende|$1 cunde utinde}} jndr'à l'urteme giurne, e onne raggiunde 'u numere massime ca se pò fà jndr'à stu periode.
'U resultete jè ca le visitature ca stonne ausene stu indirizze IP non ge ponne ccrejà otre cunde utinde nuève jndr'à stu mumende.",
# Special:PasswordReset
'passwordreset' => "Azzere 'a passuord",
-'passwordreset-text' => "Comblete stu module pe avè 'na mail pe arrecurdarte le dettaglie d'u cunde tune.",
+'passwordreset-text' => "Comblete stu module pe ricevere 'na mail de promemorie de le dettaglie d'u cunde tune.",
'passwordreset-legend' => "Azzere 'a passuord",
'passwordreset-disabled' => "'U reset de le passuord ha state desabbilitate sus a sta uicchi.",
'passwordreset-pretext' => '{{PLURAL:$1||Mitte une de le stuèzze de le date aqquà sotte}}',
$2
-{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}} 'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.
+{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}} 'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.
Tu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
'passwordreset-emailtext-user' => "L'utende $1 sus a {{SITENAME}} ave richieste 'na mail pe arrecurdarse le dettaglie d'u cunde sue pe {{SITENAME}}
($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:
'passwordreset-emailelement' => 'Nome utende: $1<br />
Passuord temboranèe: $2',
'passwordreset-emailsent' => "'N'e-mail pe arrecurdarte ha state mannate.",
-'passwordreset-emailsent-capture' => "'Na e-mail de promemorie ha state mannate, ca jè fatte vedè aqquà sotte.",
-'passwordreset-emailerror-capture' => "'Na e-mail de promemorie ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a l'utende ha fallite: $1",
+'passwordreset-emailsent-capture' => "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
+'passwordreset-emailerror-capture' => "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a l'utende ha fallite: $1",
# Special:ChangeEmail
'changeemail' => "Cange 'u 'ndirizze e-mail",
'Na pàgene jè trattate cumme pàgene de disambiguazione ce tu ause 'nu template ca è appundate da [[MediaWiki:Disambiguationspage]]",
'pageswithprop' => "Pàggene cu 'na probbietà d'a pàgene",
+'pageswithprop-legend' => "Pàggene cu 'na probbietà d'a pàgene",
'pageswithprop-text' => "Sta pàgene elenghe le pàggene ca ausane 'na particolare probbietà d'a pàgene.",
'pageswithprop-prop' => "Nome d'a probbietà:",
+'pageswithprop-submit' => 'Véje',
'doubleredirects' => 'Ridirezionaminde a doppie',
'doubleredirectstext' => "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.
'duration-centuries' => '$1 {{PLURAL:$1|sechele|sechele}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennie|millennie}}',
-# Unknown messages
-'pageswithprop-legend' => "Pàggene cu 'na probbietà d'a pàgene",
-'pageswithprop-submit' => 'Véje',
+# Image rotation
+'rotate-comment' => 'Immaggine rotate de $1 {{PLURAL:$1|grade}} in sienze orarie',
+
);
'hidden-category-category' => 'Скрытые категории',
'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|Эта категория содержит $1 {{PLURAL:$1|подкатегорию|подкатегории}} из $2 всего.}}',
'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.',
-'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2.}}',
+'category-article-count' => '{{PLURAL:$2|Эта категория содержит только следующую страницу.|В этой категории показан{{PLURAL:$1|а $1 страница|ы $1 страницы|о $1 страниц}} из $2.}}',
'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц}}.',
'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|В этой категории {{PLURAL:$1|показан $1 файл|показано $1 файла|показано $1 файлов}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов}}.',
Страница считается многозначной, если на ней размещён шаблон, имя которого указано на странице [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Страницы с переопределёнными свойствами',
+'pageswithprop-legend' => 'Страницы с переопределёнными свойствами',
'pageswithprop-text' => 'Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.',
'pageswithprop-prop' => 'Название свойства:',
+'pageswithprop-submit' => 'Найти',
'doubleredirects' => 'Двойные перенаправления',
'doubleredirectstext' => 'На этой странице представлен список перенаправлений на другие перенаправления.
'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
-# Unknown messages
-'pageswithprop-legend' => 'Страницы с переопределёнными свойствами',
-'pageswithprop-submit' => 'Найти',
);
'loginlanguagelabel' => 'Язык: $1',
'suspicious-userlogout' => 'Ваша пожадавка на одголошіня была одвергнута, бо вызерає то так, же была послана розбитым переглядачом або кешуючім проксі-сервером.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Незнама хыба у PHP mail() функції',
'user-mail-no-addy' => 'Проба одослати електронічну пошту без імейловой адресы.',
'prefs-displaywatchlist' => 'Наставлїня взгляду',
'prefs-diffs' => 'Порівнаня верзії',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Адреса ел. пошты вызерать быти правилна',
'email-address-validity-invalid' => 'Задайте правилну адресу ел. пошты',
'listgrouprights-addgroup-self-all' => 'Приданя свого конта до хоцьякой ґрупы',
'listgrouprights-removegroup-self-all' => 'Одстранїня свого контра з хоцьякой ґрупы',
-# E-mail user
+# Email user
'mailnologin' => 'Без адресы одосланя',
'mailnologintext' => 'Кідь хочете посылати ел. пошту іншым хоснователям, мусите ся [[Special:UserLogin|приголосити]] і мати платну адресу ел. пошты в своїм [[Special:Preferences|наставлїню]].',
'emailuser' => 'Послати імейл тому хоснователёви',
'monthsall' => 'вшыткы',
'limitall' => 'вшыткы',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Потверджіня адресы ел. пошты',
'confirmemail_noemail' => 'Во своїм [[Special:Preferences|хосновательскім наставлїню]] сьте не зазначіли платну адресу ел. пошты.',
'confirmemail_text' => 'Тота вікі выжадує, жебы сьте перед хоснованым дакотрых функцій потвердили свою адресу електронічной пошты. Кликнутём на клапку ниже одошлете потверджовачій лист на вами зазначену адресу. Тот лист обсягує одказ і код потверджіня; зображінём одказованой сторінкы во своїм інтернетовім переглядачу потвердите, же зазначена адреса є платна.',
'loginlanguagelabel' => 'Омугун тыла: $1',
'suspicious-userlogout' => 'Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'mail() PHP-функциятыгар туох эрэ алҕас тахсыбыт',
'user-mail-no-addy' => 'Сурук аадырыһа суох ыыттылла сатаабыт',
'user-mail-no-body' => 'Кураанах эбэтэр суолтата суох кылгас тиэкистээх суругу ыыта сатаабыт.',
'prefs-displaywatchlist' => 'Көстүүтүн туруоруулара',
'prefs-diffs' => 'Уратылара',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Сөп курдук көстөр',
'email-address-validity-invalid' => 'Алҕаһа суох аадырыс ирдэнэр',
'listgrouprights-addgroup-self-all' => 'Бары бөлөхтөрү бэйэтин аатыгар холбуон сөп',
'listgrouprights-removegroup-self-all' => 'Бары бөлөхтөрү бэйэтин аатыттан сотуон сөп',
-# E-mail user
+# Email user
'mailnologin' => 'Аадырыһа суох',
'mailnologintext' => 'Атын кыттааччылары кытта e-mail көмөтүнэн суруйсуоххун баҕарар буоллаххына бэйэҕин [[Special:UserLogin|билиһиннэриэхтээххин]] уонна e-mail аадырыскын [[Special:Preferences|туруорууларгар]] суруйуохтааххын.',
'emailuser' => 'Кыттааччыга сурук',
'monthsall' => 'бары',
'limitall' => 'бары',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Электроннай аадырыһы бигэргэтии',
'confirmemail_noemail' => '[[Special:Preferences|Бэйэҥ туруорууларгар]] электроннай аадырыскын суруйбатаххын эбэтэр сыыһа суруйбуккун.',
'confirmemail_text' => '{{SITENAME}} движога үлэлиэҥ иннинэ электроннай аадырыскын бигэргэтэри эрэйэр.
'login-abort-generic' => 'Amaḱ bhitri boloḱ do baṅ hoylena - batena.',
'loginlanguagelabel' => 'katha: $1',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'Jahan e-mail ṭhikana bạgi kate e-mail kul kurumuṭu hoena.',
# Change password dialog
'prefs-help-email-others' => 'Am são e-mail hotete jogajog dohoy lạgitte mitṭen joṛao se amaḱ katha roṛaḱ sakam bachao jońme.
Amaḱ e-mail ṭhikạna do bań cabaḱa tinre onko do ko beohara',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mail ṭhikạna do jewetge ńamena',
'email-address-validity-invalid' => 'Amaḱ jewet e-mail ṭhkạna emmẽ',
'listgrouprights-addgroup-all' => 'Joto gaõtare ko soṅgekom',
'listgrouprights-removegroup-all' => 'Joto gaõtaren ko ocoḱgiḍikom',
-# E-mail user
+# Email user
'emailuser' => 'Nui beoharić e-mail emayme',
'emailpage' => 'E-mail beoharić',
'noemailtitle' => 'E-mail ṭhikạna do banuḱa',
# Special:ListGroupRights
'listgrouprights-members' => '(leet o members)',
-# E-mail user
+# Email user
'mailnologin' => 'Nae send address',
'mailnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] an hae a valid e-mail address in yer [[Special:Preferences|preferences]] tae send e-mail til ither uisers.',
'emailuser' => 'E-mail this uiser',
'monthsall' => 'aw',
'limitall' => 'aw',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail_noemail' => 'Ye dinna hae a valid email address set in yer [[Special:Preferences|uiser preferences]].',
'confirmemail_text' => 'This wiki requires ye tae validate yer e-mail address
afore uisin e-mail featurs. Activate the button ablo tae send a confirmation
# Special:ListGroupRights
'listgrouprights-members' => '(erencu di li membri)',
-# E-mail user
+# Email user
'mailnologin' => "Nisciun indirizzu a lu quari invià l'imbasciadda.",
'mailnologintext' => "Pa invià imbasciaddi di postha erettrònica è nezzessàriu [[Special:UserLogin|intrà]] e abé registhraddu un'indirizzu variddu i' li propri [[Special:Preferences|prifirenzi]].",
'emailuser' => "Ischribì a l'utenti",
'namespacesall' => 'Tutti',
'monthsall' => 'tutti',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Cunfèimma indirizzu di postha erettrònica',
'confirmemail_noemail' => "Nò è isthaddu indicaddu un'indirizzu postha erettrònica vàriddu i' li pròpri [[Special:Preferences|prifirenzi]].",
'confirmemail_text' => "{{SITENAME}} dumanda la verifigga di l'indirizzu di postha erettrònica primma di pudé l'usà. Incalchà lu buttoni in giossu pa invià una prigonta di cunfèimma a lu propriu indirizzu; i' l'imbasciadda è prisenti un cullegamentu chi cunteni un còdizi. Visità lu cullegamentu cu' lu proprio nabiggadori pa cunfèimmà chi l'indirizzu è vàriddu.",
# Special:ListGroupRights
'listgrouprights-members' => '(listu miellahtuin)',
-# E-mail user
+# Email user
'mailnologin' => 'Sáddejeaddji čujuhus váilo',
'mailnologintext' => 'Don fertet leat [[Special:UserLogin|čálligoahtán sisa]] ja du [[Special:Preferences|ásahusain]] ferte leat gelbbolaš ja <strong>sihkarastojuvvon</strong> e-poastačujuhus, ovdalgo sáhtat sáddet e-poasta eará geavaheddjiide.',
'emailuser' => 'Čále e-poastta geavaheaddjái',
'namespacesall' => 'buot',
'monthsall' => 'buot',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Sihkaraste e-poastačujuhusa',
'confirmemail_noemail' => 'Dus ii leat lasihuvvon gelbbolaš e-poastačujuhus [[Special:Preferences|ásahusain]].',
'confirmemail_success' => 'Du e-poastačujuhus lea dál konfirmerejuvvon. Sáhtát dál logget sisa.',
'listusers-submit' => 'Cohuatlöx',
'listusers-noresult' => 'Necoccebj caitóm.',
-# E-mail user
+# Email user
'mailnologin' => 'Nenadressade iitom',
'mailnologintext' => 'Zo coccebj Neces [[Special:UserLogin|caápo]]
ö coccebjöx adressade e-iitom validom [[Special:Preferences|mequáatlaác]]
'listgrouprights-group' => 'Gropė',
'listgrouprights-members' => '(nariū sārošos)',
-# E-mail user
+# Email user
'mailnologin' => 'Nier adresa',
'mailnologintext' => 'Tamstā reik būtė [[Special:UserLogin|prisėjongosiam]]
ė tor būtė ivests teisings el. pašta adresos Tamstas [[Special:Preferences|nustatīmuos]],
'namespacesall' => 'vėsas',
'monthsall' => 'vėsė',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Patvirtėnkėt el. pašta adresa',
'confirmemail_noemail' => 'Tamsta netorėt nuruodės teisėnga el. pašta adresa [[Special:Preferences|sava nustatīmūs]].',
'confirmemail_text' => 'Šėtom pruojektė īr rēkalėnga patvirtėntė el. pašta adresa prīš nauduojont el. pašta funkcėjės. Spauskėt žemiau esonti mīgtoka,
'loginlanguagelabel' => 'භාෂාව: $1',
'suspicious-userlogout' => 'නිෂ්ක්රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'php mail() ශ්රිතයේ හඳුනානොගත් ගැටළුවකි',
'user-mail-no-addy' => 'විද්යුත් තැපැල් ලිපිනයක් නොමැතිව විද්යුත් තැපැල් පණිවුඩයක් යැවීමට උත්සහ දරා ඇත.',
'prefs-displaywatchlist' => 'විකල්ප පෙන්වන්න',
'prefs-diffs' => 'වෙනස',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'විද්යුත්-තැපැල් ලිපිනය අනීතික බවක් පෙනෙයි.',
'email-address-validity-invalid' => 'වලංගු විද්යුත් ලිපිනයක් ඇතුලත් කරන්න',
'listgrouprights-addgroup-self-all' => 'සියළු කාණ්ඩයන් ස්වීය ගිණුමට එක්කරන්න',
'listgrouprights-removegroup-self-all' => 'සියළු කාණ්ඩයන් ස්වීය ගිණුමෙන් ඉවත් කරන්න',
-# E-mail user
+# Email user
'mailnologin' => 'යායුතු ලිපිනය නොමැත',
'mailnologintext' => 'අනෙකුත් පරිශීලකයන්හට විද්යුත්-තැපැල් යැවුමට පෙරාතුව, ඔබ [[Special:UserLogin|ප්රවිෂ්ට වී]], ඔබගේ [[Special:Preferences|අභිරුචියන්හි]] නීතික විද්යුත්-තැපැල් ලිපිනයක් සඳහන් කර තිබිය යුතුය.',
'emailuser' => 'මෙම පරිශීලක වෙත විද්යුත්-ලිපියක් යවන්න',
'monthsall' => 'සියළු',
'limitall' => 'සියල්ලම',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'විද්යුත්-තැපැල් ලිපිනය තහවුරු කරන්න',
'confirmemail_noemail' => 'ඔබගේ [[Special:Preferences|පරිශීලක අභිරුචියන්]] හි නීතික විද්යුත්-තැපැල් ලිපිනයක් ඔබ විසින් පිහිටුවා නොමැත.',
'confirmemail_text' => 'විද්යුත්-තැපැල් අංගයන් භාවිතා කිරීමට පෙර ඔබගේ විද්යුත්-තැපැල් ලිපිනය නීතිකරණය කල යුතු බවට {{SITENAME}} අවධාරණය කරයි.
* @author Irena Plahuta
* @author McDutchie
* @author Smihael
+ * @author Vadgt
* @author XJamRastafire
* @author Yerpo
* @author romanm
'blocked-mailpassword' => 'Urejanje z vašega IP-naslova je blokirano. Da bi preprečili zlorabe, vam ni dovoljeno tudi uporabljati funkcije za povrnitev pozabljenega gesla.',
'eauthentsent' => 'E-sporočilo je bilo poslano na navedeni e-naslov.
Če želite tja poslati še katero, sledite navodilom v e-sporočilu, da potrdite lastništvo računa.',
-'throttled-mailpassword' => 'Geselski opomnik je bil v {{PLURAL:$1|zadnji uri|zadnjih $1 urah}} že poslan.
-Za preprečevanje zlorab je lahko na {{PLURAL:$1|uro|$1 uri|$1 ure|$1 ur}} poslano samo eno opozorilo.',
+'throttled-mailpassword' => 'E-pošto za ponastavitev gesla smo v {{PLURAL:$1|zadnji uri|zadnjih $1 urah}} že poslali.
+Za preprečevanje zlorab lahko na {{PLURAL:$1|uro|$1 uri|$1 ure|$1 ur}} pošljemo samo eno sporočilo za ponastavitev gesla.',
'mailerror' => 'Napaka pri pošiljanju pošte: $1',
'acct_creation_throttle_hit' => 'Obiskovalci {{GRAMMAR:rodilnik|{{SITENAME}}}} so s tem IP-naslovom v zadnjih 24 urah ustvarili že $1 {{PLURAL:$1|uporabniški račun|uporabniška računa|uporabniške račune|uporabniških računov|uporabniških računov}} in s tem dosegli največje dopustno število v omenjenem časovnem obdobju. Novih računov zato s tem IP-naslovom trenutno žal ne morete več ustvariti.
# Special:PasswordReset
'passwordreset' => 'Ponastavitev gesla',
-'passwordreset-text' => 'Izpolnite obrazec, da prejmete e-poštni opomnik s podrobnostmi vašega računa.',
+'passwordreset-text' => 'Izpolnite obrazec, da ponastavite geslo.',
'passwordreset-legend' => 'Ponastavitev gesla',
'passwordreset-disabled' => 'Ponastavljanje gesla je na tem wikiju onemogočeno.',
'passwordreset-pretext' => '{{PLURAL:$1||Vnesite enega od dela podatkov spodaj}}',
'passwordreset-capture-help' => 'Če potrdite to polje, vam bodo e-pošte (z začasnim geslom) pokazane in poslane uporabniku.',
'passwordreset-email' => 'E-poštni naslov:',
'passwordreset-emailtitle' => 'Podrobnosti računa na {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Nekdo (verjetno vi, z IP-naslova $1) je zahteval opomnik vaših
-podatkov o računu na {{SITENAME}} ($4). S tem e-poštnim naslovom
+'passwordreset-emailtext-ip' => 'Nekdo (verjetno vi, z IP-naslova $1) je zahteval ponastavitev vašega
+gesla na {{SITENAME}} ($4). S tem e-poštnim naslovom
{{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:
$2
nekdo drug ali pa ste se spomnili svojega prvotnega gesla in ga več
ne želite spremeniti, lahko to sporočilo prezrete in nadaljujete z uporabo
svojega starega gesla.',
-'passwordreset-emailtext-user' => 'Uporabnik $1 na {{SITENAME}} je zahteval opomnik vaših podatkov o računu na {{SITENAME}}
+'passwordreset-emailtext-user' => 'Uporabnik $1 na strani {{SITENAME}} je zahteval ponastavitev vašega gesla na {{SITENAME}}
($4). S tem e-poštnim naslovom {{PLURAL:$3|je povezan naslednji uporabniški račun|sta povezana naslednja uporabniška računa|so povezani naslednji uporabniški računi}}:
$2
svojega starega gesla.',
'passwordreset-emailelement' => 'Uporabniško ime: $1
Začasno geslo: $2',
-'passwordreset-emailsent' => 'Opomnilna e-pošta je bila poslana.',
-'passwordreset-emailsent-capture' => 'E-poštni opomnik je bil poslan in je prikazan spodaj.',
-'passwordreset-emailerror-capture' => 'E-poštni opomnik je bil poslan in je prikazan spodaj, vendar pa pošiljanje uporabniku ni uspelo: $1',
+'passwordreset-emailsent' => 'Poslali smo e-pošto za postavitev gesla.',
+'passwordreset-emailsent-capture' => 'Poslali smo e-pošto za ponastavitev gesla, ki je prikazana spodaj.',
+'passwordreset-emailerror-capture' => 'Ustvarili smo e-pošto za ponastavitev gesla, ki je prikazana spodaj, vendar pa pošiljanje uporabniku ni uspelo: $1',
# Special:ChangeEmail
'changeemail' => 'Sprememba e-poštnega naslova',
Stran se obravnava kot razločitvena, če uporablja predloge, povezane z [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Strani z lastnostmi strani',
+'pageswithprop-legend' => 'Strani z lastnostmi strani',
'pageswithprop-text' => 'Stran navaja vse strani, ki uporabljajo določene lastnosti strani.',
'pageswithprop-prop' => 'Ime lastnosti:',
+'pageswithprop-submit' => 'Pojdi',
'doubleredirects' => 'Dvojne preusmeritve',
'doubleredirectstext' => 'Ta stran navaja strani, ki se preusmerjajo na druge preusmeritvene strani.
'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
-# Unknown messages
-'pageswithprop-legend' => 'Strani z lastnostmi strani',
-'pageswithprop-submit' => 'Pojdi',
+# Image rotation
+'rotate-comment' => 'Slika zavrti s $1 {{PLURAL:$1| degree|degrees}} v smeri urinega kazalca',
+
);
'listgrouprights-addgroup-all' => 'Nutzer zu olla Gruppa hinzufiega',
'listgrouprights-removegroup-all' => 'Nutzer aus olla Gruppa entferna',
-# E-mail user
+# Email user
'mailnologin' => 'Fahler beim E-Mail-Versand',
'mailnologintext' => 'Du mußt [[Special:UserLogin|oagemeldet sei]] und anne bestätigte E-Mail-Atresse ei denn [[Special:Preferences|Einstellunga]] eingetraga hoan, im andern Nutzern E-Mails schicka zu kinna.',
'emailuser' => 'E-Mail oa diesa Benutzer',
'monthsall' => 'olle',
'limitall' => 'olle',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-Mail-Atresse bestätiga (Authentifizierung)',
'confirmemail_noemail' => 'Du host kenne giltige E-Mail-Atresse ei denn [[Special:Preferences|persenlicha Eenstallunga]] eengetraga.',
'confirmemail_text' => "{{SITENAME}} erfordert, doß du denne E-Mail-Atresse bestätigst (authentifizieren), bevor du de erweiterten E-Mail-Funksjonna benutza koast. Klicke bitte uff de unda stehende, miet „Bestätigungscode zuschicka“ beschriftete Schaltfläche, damit anne automatisch erstellte E-Mail oa de oagegahne Atresse geschickt werd. Diese E-Mail enthält anne Web-Adresse miet a'm Bestätigungscode. Indem du diese Webseyte ei demm Webbrowser effnest, bestätigst du, doß de oagegahne E-Mail-Atresse korrekt und giltig ies.",
'loginlanguagelabel' => 'Gjuha: $1',
'suspicious-userlogout' => 'Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Gabim i panjohur në funksionin e postës PHP ()',
'user-mail-no-addy' => 'Provuat të dërgoni një korrespondencë pa adresë elektronike',
'prefs-displaywatchlist' => 'Shfaq opsionet',
'prefs-diffs' => 'Ndryshimet',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-mail adresa është e vlefshme.',
'email-address-validity-invalid' => 'Futni një e-mali adresë të vlefshme.',
'listgrouprights-addgroup-self-all' => 'Shtoni të gjitha grupet tek llogaria',
'listgrouprights-removegroup-self-all' => 'Hiq të gjitha grupet nga llogaria',
-# E-mail user
+# Email user
'mailnologin' => "S'ka adresë dërgimi",
'mailnologintext' => 'Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.',
'emailuser' => 'Email përdoruesit',
'monthsall' => 'të gjitha',
'limitall' => 'Të gjitha',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Vërtetoni adresën tuaj',
'confirmemail_noemail' => 'Ju nuk keni dhënë email të sakt te [[Special:Preferences|parapëlqimet e juaja]].',
'confirmemail_text' => 'Për të marrë email duhet të vërtetoni adresen tuaj. Shtypni butonin e mëposhtëm për të dërguar një email vërtetimi tek adresa juaj. Email-i do të përmbajë një lidhje me kod të shifruar. Duke ndjekur lidhjen nëpërmjet shfletuesit tuaj do të vërtetoni adresën.',
'loginlanguagelabel' => 'Језик: $1',
'suspicious-userlogout' => 'Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Непозната грешка у функцији PHP mail().',
'user-mail-no-addy' => 'Покушали сте да пошаљете поруку без е-адресе.',
'prefs-displaywatchlist' => 'Поставке приказа',
'prefs-diffs' => 'Разлике',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Е-адреса је исправна',
'email-address-validity-invalid' => 'Унесите исправну е-адресу',
'listgrouprights-addgroup-self-all' => 'Додај све групе на сопствени налог',
'listgrouprights-removegroup-self-all' => 'Уклони све групе са сопственог налога',
-# E-mail user
+# Email user
'mailnologin' => 'Нема адресе за слање',
'mailnologintext' => 'Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.',
'emailuser' => 'Пошаљи е-поруку',
'monthsall' => 'све',
'limitall' => 'све',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Потврда е-адресе',
'confirmemail_noemail' => 'Нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].',
'confirmemail_text' => '{{SITENAME}} захтева да потврдите е-адресу пре него што почнете да користите могућности е-поште.
'loginlanguagelabel' => 'Jezik: $1',
'suspicious-userlogout' => 'Vaš zahtev za odjavu je odbijen jer je poslat od strane neispravnog pregledača ili posrednika.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Nepoznata greška u funkciji PHP mail().',
'user-mail-no-addy' => 'Pokušali ste da pošaljete poruku bez e-adrese.',
'prefs-displaywatchlist' => 'Postavke prikaza',
'prefs-diffs' => 'Razlike',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-adresa je ispravna',
'email-address-validity-invalid' => 'Unesite ispravnu e-adresu',
'listgrouprights-addgroup-self-all' => 'Dodaj sve grupe na sopstveni nalog',
'listgrouprights-removegroup-self-all' => 'Ukloni sve grupe sa sopstvenog naloga',
-# E-mail user
+# Email user
'mailnologin' => 'Nema adrese za slanje',
'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.',
'emailuser' => 'Pošalji e-poruku',
'monthsall' => 'sve',
'limitall' => 'sve',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Potvrda e-adrese',
'confirmemail_noemail' => 'Niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].',
'confirmemail_text' => '{{SITENAME}} zahteva da potvrdite e-adresu pre nego što počnete da koristite mogućnosti e-pošte.
'loginlanguagelabel' => 'Sproake: $1',
'suspicious-userlogout' => 'Dien Oumälde-Anfroage wuud ferwäigerd, deer ju fermoudelk fon n defekten Browser of n Cache-Proxy soand wuud.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Uunbekoanden Failer mäd ju Funktion mail() fon PHP',
'user-mail-no-addy' => 'Fersoachte ne E-Mail sunner Angoawe fon ne E-Mail-Adresse tou ferseenden',
'prefs-displaywatchlist' => 'Anwies-Optione',
'prefs-diffs' => 'Versionsfergliek',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Gultige E-Mail-Adrässe',
'email-address-validity-invalid' => 'Ne gultige E-Mail-Adrässe is nöödich.',
'listgrouprights-addgroup-self-all' => 'Kon aal Gruppen tou dät oaine Konto bietouföigje',
'listgrouprights-removegroup-self-all' => 'Kon aal Gruppen fon dät oaine Konto wächhoalje',
-# E-mail user
+# Email user
'mailnologin' => 'Du bäst nit anmälded.',
'mailnologintext' => 'Du moast [[Special:UserLogin|anmälded weese]] un sälwen ne [[Special:Preferences|gultige E-Mail-Adrässe]] anroat hääbe, uum uur Benutsere ne E-Mail tou seenden.',
'emailuser' => 'Seende E-Mail an dissen Benutser',
'monthsall' => 'aal',
'limitall' => 'aal',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Email-Adrässe bestäätigje',
'confirmemail_noemail' => 'Du hääst neen gultige E-Mail-Adresse in dien [[Special:Preferences|persöönelke Ienstaalengen]] iendrain.',
'confirmemail_text' => '{{SITENAME}} ärfoardert, dät du dien E-Mail-Adresse bestäätigest (authentifizierje), eer du do fergratterde E-Mail-Funktione benutsje koast. Truch n Klik ap ju Skaltfläche unner wäd ne E-Mail an die fersoand. Disse E-Mail änthaalt ne Ferbiendenge mäd n Bestäätigengs-Code. Truch Klikken ap disse Ferbiendenge wäd bestäätiged, dät dien E-Mail-Adresse gultich is.',
'loginlanguagelabel' => 'Basa: $1',
'suspicious-userlogout' => "Pamundut anjeun pikeun kaluar log ditolak ku sabab sigana dikirim ku pangaprak buntu atawa ''cache'' proxi.",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Kasalahan nu teu kanyahoan dina fungsi PHP surélék().',
'user-mail-no-addy' => 'Nyobaan ngirim surélék tanpa alamat.',
'prefs-displaywatchlist' => 'Pilihan pidangan',
'prefs-diffs' => 'Béda',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Alamat surélék sigana bener',
'email-address-validity-invalid' => 'Asupkeun alamat ratron nu bener',
'listgrouprights-addgroup-self-all' => 'Tambahkeun sakabéh grup ka akun sorangan',
'listgrouprights-removegroup-self-all' => 'Piceun sakabéh grup ti akun sorangan',
-# E-mail user
+# Email user
'mailnologin' => 'Euweuh alamat ngirim',
'mailnologintext' => "Anjeun kudu '''[[Special:UserLogin|asup log]]''' sarta boga alamat surélék nu sah na [[Special:Preferences|préferénsi]] anjeun sangkan bisa nyurélékan pamaké séjén.",
'emailuser' => 'Surélékan pamaké ieu',
'monthsall' => 'kabéh',
'limitall' => 'kabéh',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Konfirmasi alamat surélék',
'confirmemail_noemail' => 'Alamat surélék anu didaptarkeun dina [[Special:Preferences|préferénsi pamaké]] anjeun teu sah.',
'confirmemail_text' => 'Wiki ieu merlukeun anjeun sangkan méré konfirmasi alamat surélék saméméh migunakeun fitur surélék. Aktifkeun tombol di handap pikeun ngirimkeun surat konfirmasi ka alamat anjeun. Suratna ngandung tumbu nu ngandung sandina; muatkeun tumbuna kana panyungsi anjeun pikeun ngonfirmasi yén alamat surélék anjeun sah.',
'blocked-mailpassword' => 'Din IP-adress är blockerad, därför kan den inte användas för att få ett nytt lösenord.',
'eauthentsent' => 'Ett e-brev för bekräftelse har skickats till den e-postadress som angivits.
Innan någon annan e-post kan skickas härifrån till kontot, måste du följa instruktionerna i e-brevet för att bekräfta att kontot verkligen är ditt.',
-'throttled-mailpassword' => 'Ett nytt lösenord har redan skickats för mindre än {{PLURAL:$1|en timme|$1 timmar}} sedan.
-För att förhindra missbruk skickas bara ett nytt lösenord per {{PLURAL:$1|timme|$1-timmarsperiod}}.',
+'throttled-mailpassword' => 'En lösenordsåterställning har redan skickats för mindre än {{PLURAL:$1|en timme|$1 timmar}} sedan.
+För att förhindra missbruk skickas bara en lösenordsåterställning per {{PLURAL:$1|timme|$1-timmarsperiod}}.',
'mailerror' => 'Fel vid skickande av e-post: $1',
'acct_creation_throttle_hit' => 'Besökare till den här wikin som har använt din IP-adress har skapat {{PLURAL:$1|1 användarkonto|$1 användarkonton}} under det senaste dygnet, vilket är det maximalt tillåtna inom den tidsperioden.
Som ett resultat kan besökare som använder den här IP-adressen inte skapa några fler användarkonton just nu.',
# Special:PasswordReset
'passwordreset' => 'Lösenordsåterställning',
-'passwordreset-text' => 'Fyll i detta formulär för att få en påminnelse om dina kontouppgifter via e-post.',
+'passwordreset-text' => 'Fyll i detta formulär för att återställa ditt lösenord.',
'passwordreset-legend' => 'Återställ lösenord',
'passwordreset-disabled' => 'Lösenordsåterställning har inaktiverats på denna wiki.',
'passwordreset-pretext' => '{{PLURAL:$1||Ange en av datadelarna nedan}}',
'passwordreset-capture-help' => 'Om du markerar den här rutan kommer e-postmeddelandet (med det tillfälliga lösenordet) visas för dig och skickas till användaren.',
'passwordreset-email' => 'E-postadress:',
'passwordreset-emailtitle' => 'Kontouppgifter på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Någon (förmodligen du, från IP-adressen $1) begärde en påminnelse av dina kontodetaljer för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
+'passwordreset-emailtext-ip' => 'Någon (förmodligen du, från IP-adressen $1) begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
$2
{{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.
Du bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och du önskar inte att ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.',
-'passwordreset-emailtext-user' => 'Användaren $1 på {{SITENAME}} begärde en påminnelse om dina kontodetaljer för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
+'passwordreset-emailtext-user' => 'Användaren $1 på {{SITENAME}} begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:
$2
Du bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och du önskar inte att ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.',
'passwordreset-emailelement' => 'Användarnamn: $1
Tillfälligt lösenord: $2',
-'passwordreset-emailsent' => 'En påminnelse via e-post har skickats.',
-'passwordreset-emailsent-capture' => 'En påminnelse via e-post har skickats, som visas nedan.',
-'passwordreset-emailerror-capture' => 'En påminnelse via e-post har skapats, som visas nedan, men det gick inte att skicka den till användaren: $1',
+'passwordreset-emailsent' => 'En lösenordsåterställning via e-post har skickats.',
+'passwordreset-emailsent-capture' => 'En lösenordsåterställning via e-post har skickats, som visas nedan.',
+'passwordreset-emailerror-capture' => 'En lösenordsåterställning via e-post har skapats, som visas nedan, men det gick inte att skicka den till användaren: $1',
# Special:ChangeEmail
'changeemail' => 'Ändra e-postadress',
En sida anses vara en förgreningssida om den inkluderar en mall som länkas till från [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Sidor med en sidegenskap',
+'pageswithprop-legend' => 'Sidor med en sidegenskap',
'pageswithprop-text' => 'Denna sida listar sidor som använder en speciell sidegenskap.',
'pageswithprop-prop' => 'Egenskapsnamn:',
+'pageswithprop-submit' => 'Gå',
'doubleredirects' => 'Dubbla omdirigeringar',
'doubleredirectstext' => 'Det här är en lista över sidor som dirigerar om till andra omdirigeringssidor. Varje rad innehåller länkar till den första och andra omdirigeringsidan, samt till målet för den andra omdirigeringen. Målet för den andra omdirigeringen är ofta den "riktiga" sidan, som den första omdirigeringen egentligen ska leda till.
'logentry-move-move-noredirect' => '$1 flyttade sidan $3 till $4 utan att lämna en omdirigering',
'logentry-move-move_redir' => '$1 flyttade sidan $3 till $4 över en omdirigering',
'logentry-move-move_redir-noredirect' => '$1 flyttade sidan $3 till $4 över en omdirigering utan att lämna en omdirigering',
-'logentry-patrol-patrol' => '$1 markerade versionen $4 av sidan $3 som patrullerad',
-'logentry-patrol-patrol-auto' => '$1 markerade automatiskt versionen $4 av sidan $3 som patrullerad',
-'logentry-newusers-newusers' => 'Användarkonto $1 skapades',
-'logentry-newusers-create' => 'Användarkonto $1 skapades',
-'logentry-newusers-create2' => 'Användarkonto $3 skapades av $1',
-'logentry-newusers-byemail' => 'Användarkontot $3 skapades av $1 och lösenordet skickades via e-post',
-'logentry-newusers-autocreate' => 'Kontot $1 skapades automatiskt',
-'logentry-rights-rights' => '$1 ändrade gruppmedlemskap för $3 från $4 till $5',
-'logentry-rights-rights-legacy' => '$1 ändrade gruppmedlemskap för $3',
-'logentry-rights-autopromote' => '$1 befordrades automatiskt från $4 till $5',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|markerade}} versionen $4 av sidan $3 som patrullerad',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|markerade}} automatiskt versionen $4 av sidan $3 som patrullerad',
+'logentry-newusers-newusers' => 'Användarkonto $1 har {{GENDER:$2|skapats}}',
+'logentry-newusers-create' => 'Användarkonto $1 har {{GENDER:$2|skapats}}',
+'logentry-newusers-create2' => 'Användarkonto $3 har {{GENDER:$2|skapats}} av $1',
+'logentry-newusers-byemail' => 'Användarkontot $3 har {{GENDER:$2|skapats}} av $1 och lösenordet skickades via e-post',
+'logentry-newusers-autocreate' => 'Användarkontot $1 {{GENDER:$2|skapades}} automatiskt',
+'logentry-rights-rights' => '$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3 från $4 till $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5',
'rightsnone' => '(inga)',
# Feedback
'duration-centuries' => '$1 {{PLURAL:$1|sekel|sekel}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
-# Unknown messages
-'pageswithprop-legend' => 'Sidor med en sidegenskap',
-'pageswithprop-submit' => 'Gå',
+# Image rotation
+'rotate-comment' => 'Bilden roteras $1 {{PLURAL:$1|grad|grader}} medurs',
+
);
'loginlanguagelabel' => 'Lugha: $1',
'suspicious-userlogout' => 'Ombi lako la kutoka kwenye akaunti yako limehiniwa, kwa sababu inaonekana kwamba ombi lilitumwa na kivinjari kilichoharibika au seva ya kuwakilisha yenye kache.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Hitilafu isiyojulikana katika ufanyajikazi wa barua za PHP ().',
'user-mail-no-addy' => 'Umejaribu kutuma barua pepe bila anwani ya barua pepe.',
'prefs-displaywatchlist' => 'Mapendekezo ya kuzinza',
'prefs-diffs' => 'Tofauti',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Anwani ya barua pepe inaonekana kuwa sawa',
'email-address-validity-invalid' => 'Ingiza anwani halisi ya barua pepe',
'listgrouprights-addgroup-self-all' => 'Kuongeza makundi yote katika akaunti ya binafsi',
'listgrouprights-removegroup-self-all' => 'Kuondoa makundi yote kutoka akaunti ya binafsi',
-# E-mail user
+# Email user
'mailnologin' => 'Hakuna anwani wa kutuma',
'mailnologintext' => 'Ukitaka kutuma barua pepe kwa watumiaji wengine inabidi uwe [[Special:UserLogin|umeshaingia kwenye akaunti yako]] na pia uwe na anwani ya barua pepe sahihi pale [[Special:Preferences|mapendekezo yako]].',
'emailuser' => 'Mtumie mtumiaji huyu barua pepe',
'monthsall' => 'yote',
'limitall' => 'zote',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Kuyakinisha anwani ya barua pepe',
'confirmemail_noemail' => 'Hakuna anwani ya barua pepe halali kwenye [[Special:Preferences|mapendekezo yako]].',
'confirmemail_text' => '{{SITENAME}} inakutakia uyakinishe anwani yako ya barua pepe kabla kutumia zana zinazohusika barua pepe.
'loginlanguagelabel' => 'Godka: $1',
'suspicious-userlogout' => 'Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Ńyznany feler we funkcyji mail()',
'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
'listgrouprights-removegroup-all' => 'Idźe wyćepać s wszyjstkich grup',
'listgrouprights-addgroup-self' => 'Je mogebny dać swe konto do {{PLURAL:$2|grupy|grup:}} $1',
-# E-mail user
+# Email user
'mailnologin' => 'Brak adresu',
'mailnologintext' => 'Muśyš śe [[Special:UserLogin|zalůgować]] i mjeć wpisany aktualny adres e-brif w swojich [[Special:Preferences|preferyncyjach]], coby můc wysuać e-brif do inkšygo užytkowńika.',
'emailuser' => 'Poślij tymu używoczowi e-brif',
'namespacesall' => 'wszyjske',
'monthsall' => 'wšyskie',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Potwjerdź adres e-brif',
'confirmemail_noemail' => 'Ńy podoužeś prawiduowygo adresa e-brifa we [[Special:Preferences|preferencyjach]].',
'confirmemail_text' => 'Projekt {{SITENAME}} wymago weryfikacyji adresa e-brif před užyćym fůnkcyji kořistajůncych s počty.
'loginlanguagelabel' => 'மொழி: $1',
'suspicious-userlogout' => 'உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "PHP 's mail() செயல்பாட்டில் அறியப்படாத பிழை.",
'user-mail-no-addy' => 'மின்னஞ்சல் முகவரி இல்லாமல் மின்னஞ்சல் அனுப்ப முயற்சித்தது.',
'prefs-displaywatchlist' => 'விருப்பத்தேர்வுகளைக் காட்டு',
'prefs-diffs' => 'வித்தியாசங்கள்',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'மின்னஞ்சல் முகவரி முறையானதாகத் தோன்றுகிறது',
'email-address-validity-invalid' => 'முறையான மின்னஞ்சல் முகவரியை உள்ளிடுக',
'listgrouprights-addgroup-self-all' => 'எல்லா குழுவையும் சொந்த கணக்கில் சேர்',
'listgrouprights-removegroup-self-all' => 'எல்லா குழுவையும் சொந்த கணக்கில் இருந்து நீக்கு',
-# E-mail user
+# Email user
'mailnologin' => 'அனுப்பும் முகவரி இல்லை',
'mailnologintext' => 'நீங்கள்[[Special:UserLogin|புகுபதிகை செய்திருப்பதுடன்]]
ஏனைய பயனர்களுக்கு மின்னஞ்சல் அனுப்பக்கூடியத்தாக செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியொன்றும் உங்களுடைய [[Special:Preferences|விருப்பத் தெரிவுகளில்]] கொடுபட்டிருக்கவேண்டும்.',
'monthsall' => 'அனைத்து மாதங்களும்',
'limitall' => 'அனைத்து',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'மின்னஞ்சல் முகவரியை உறுதிப்படுத்துக',
'confirmemail_noemail' => 'உங்கள் [[Special:Preferences|பயனர் விருப்பத்தேர்வுகளில்]] செல்லுபடியான மின்னஞ்சல் முகவரியைக் குறிப்பிடவில்லை.',
'confirmemail_text' => 'மின்னஞ்சல் சிறப்பியல்புகளைப் பயன்படுத்துவதற்கு {{SITENAME}} தளம் உங்களது மின்னஞ்சல் உறுதிப்படுத்தப்பட வேண்டும் மென எதிர்பார்க்கின்றது. உறுதிப்படுத்தல் மின்னஞ்சல் ஒன்றை அனுப்ப கீழுள்ள விசையை முடுக்கவும். மின்னஞ்சல் ஒரு இணைப்பைக் கொண்டிருக்கும்; உங்கள் மின்னஞ்சலை உறுதிப்படுத்த இவ்விணைப்பை உங்கள் உலாவியில் திறக்கவும்.',
'loginlanguagelabel' => 'భాష: $1',
'suspicious-userlogout' => 'సరిగా పనిచేయని విహారిణి లేదా కాషింగ్ ప్రాక్సీ వల్ల పంపబడడం చేత, నిష్క్రమించాలనే మీ అభ్యర్థనని నిరాకరించారు.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP యొక్క mail() ఫంక్షన్లో ఏదో తెలియని లోపం దొర్లింది',
'user-mail-no-addy' => 'ఈ-మెయిలు చిరునామాని ఇవ్వకుండానే ఈ-మెయిలు పంపడానికి ప్రయత్నించారు.',
'prefs-displaywatchlist' => 'ప్రదర్శన ఎంపికలు',
'prefs-diffs' => 'తేడాలు',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ఈ-మెయిలు చిరునామా సరిగానే ఉన్నట్టుంది',
'email-address-validity-invalid' => 'దయచేసి సరైన ఈమెయిలు చిరునామాని ఇవ్వండి',
'listgrouprights-addgroup-self-all' => 'అన్ని సమూహాలని స్వంత ఖాతాకి చేర్చుకోలగడటం',
'listgrouprights-removegroup-self-all' => 'స్వంత ఖాతా నుండి అన్ని సమూహాలనూ తొలగించుకోగలగడం',
-# E-mail user
+# Email user
'mailnologin' => 'పంపించవలసిన చిరునామా లేదు',
'mailnologintext' => 'ఇతరులకు ఈ-మెయిలు పంపించాలంటే, మీరు [[Special:UserLogin|లాగిన్]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిలు చిరునామా ఇచ్చి ఉండాలి.',
'emailuser' => 'ఈ వాడుకరికి ఈ-మెయిలుని పంపించండి',
'monthsall' => 'అన్నీ',
'limitall' => 'అన్నీ',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'ఈ-మెయిలు చిరునామా ధృవీకరించండి',
'confirmemail_noemail' => '[[Special:Preferences|మీ అభిరుచులలో]] ఈమెయిలు అడ్రసు పెట్టి లేదు.',
'confirmemail_text' => '{{SITENAME}}లో ఈ-మెయిలు అంశాల్ని వాడుకునే ముందు మీ ఈ-మెయిలు చిరునామాను నిర్ధారించవలసిన అవసరం ఉంది.
'tog-hidepatrolled' => 'Пинҳон кардани вироишҳои гаштхӯрда дар тағйироти охир',
'tog-newpageshidepatrolled' => 'Пинҳони саҳифаҳои гаштхӯрда аз феҳристи саҳифаҳои нав',
'tog-extendwatchlist' => 'Густариши феҳристи пайгириҳо барои нишон додани ҳамаи тағйиротҳо, на танҳо аз ҳама охирин',
-'tog-usenewrc' => 'Ð\90з Ñ\82аÒ\93йиÑ\80оÑ\82и оÑ\85иÑ\80и гÑ\83Ñ\81Ñ\82аÑ\80иÑ\88Ñ\91Ñ\84Ñ\82а иÑ\81Ñ\82иÑ\84ода баÑ\80ед(ҶаваСкÑ\80ипÑ\82 лозим аÑ\81т)',
+'tog-usenewrc' => 'Ð\93Ñ\83Ñ\80ӯҳбандии Ñ\82аÒ\93ийÑ\80оÑ\82 баÑ\80 поÑ\8fи Ñ\81аÑ\84ҳа даÑ\80 Ñ\82аÒ\93ийÑ\80оÑ\82и оÑ\85иÑ\80 ва Ñ\84еҳÑ\80иÑ\81Ñ\82и пайгиÑ\80иҳо (ниÑ\91зманди ҶаваСкÑ\80ипт)',
'tog-numberheadings' => 'шуморагузори~и худкори инвонҳо',
'tog-showtoolbar' => 'Намоиши навори абзори вироиш (JavaScript)',
'tog-editondblclick' => 'Вироиш намудани саҳифаҳо ҳангоми ду карат пахш намудани тугмаи мушак (JavaScript)',
'tog-editsectiononrightclick' => 'Ба кор андохтани вироиши сарлавҳаҳои қисматҳо бо клики рост (ҶаваСкрипт)',
'tog-showtoc' => 'Намоиши феҳристи мундариҷон (барои мақолаҳои бо беш аз 3 сарлавҳа)',
'tog-rememberpassword' => 'Вуруди манро дар ин мурургар дар хотир нигоҳ дор (ҳадди аксар то $1 {{PLURAL:$1|рӯз|рӯз}})',
-'tog-watchcreations' => 'Ð\94оÑ\85ил намÑ\83дани Ñ\81аҳиÑ\84аҳое, ки ман Ñ\81оÑ\85Ñ\82аам ба Ñ\84еҳÑ\80иÑ\81Ñ\82и назаÑ\80оÑ\82и ман',
-'tog-watchdefault' => 'Саҳифаҳои эҷодкардаамро ба феҳристи пайгириам илова кунед',
-'tog-watchmoves' => 'Саҳифаҳои кӯчонидаамро ба феҳристи пайгириҳоям илова кунед',
-'tog-watchdeletion' => 'Саҳифаҳои эҷодкардаи манро ба феҳристи пайгириҳоям илова кунед',
+'tog-watchcreations' => 'СаҳиÑ\84аҳое, ки меÑ\81озам ва паÑ\80вандаҳое, ки боÑ\80гÑ\83зоÑ\80Ó£ мекÑ\83нам ба Ñ\84еҳÑ\80иÑ\81Ñ\82и пайгиÑ\80иҳоÑ\8fм аÑ\84зÑ\83да Ñ\88авад.',
+'tog-watchdefault' => 'Саҳифаҳо ва парвандаҳое, ки вироиш мекунам ба феҳристи пайгириҳоям афзуда шавад',
+'tog-watchmoves' => 'Саҳифаҳо ва парвандаҳое, ки мунтақил мекунам ба феҳристи пайгириҳоям афзуда шавад',
+'tog-watchdeletion' => 'Саҳифаҳо ва парвандаҳое, ки ҳазф мекунам ба феҳристи пайгириҳоям афзуда шавад',
'tog-minordefault' => 'Пешфарзи ҳамаи вироишҳоро ҷузъи ишора кунед',
'tog-previewontop' => 'Намоиши пешнамоиши қаблӣ пеш аз қуттии вироиш ва на пас аз он',
'tog-previewonfirst' => 'Нишон додани пешнамоиш дар нахустин вироиш',
'tog-nocache' => 'Ҳофизаи ниҳонии саҳифа дар мурургар ғайрифаъол шавад',
-'tog-enotifwatchlistpages' => 'Агар саҳифае мавриди пайгирии ман тағйир карда шавад ба ман тариқи почтаи электронӣ пайём бифиристед.',
+'tog-enotifwatchlistpages' => 'Агар сафҳа ё парвандае аз феҳристи пайгириҳоям вироиш шуд ба ман номае фиристода шавад',
'tog-enotifusertalkpages' => 'Ҳангоме ки дар саҳифаи корбариам тағйир дода мешавад ба ман тариқи почтаи электронӣ пайём бифиристед.',
-'tog-enotifminoredits' => 'Ð\91аÑ\80ои Ñ\82аÒ\93йиÑ\80оÑ\82и Ò·Ñ\83зÑ\8aи ба ман Ñ\82аÑ\80иÒ\9bи поÑ\87Ñ\82аи Ñ\8dлекÑ\82Ñ\80онӣ пайÑ\91м биÑ\84иÑ\80иÑ\81Ñ\82ед.',
+'tog-enotifminoredits' => 'Ð\91аÑ\80ои Ñ\82аÒ\93ийÑ\80оÑ\82и Ò·Ñ\83зÑ\8aÓ£ даÑ\80 Ñ\81аÑ\84ҳаҳо ва паÑ\80вандаҳо ҳам ба ман номае Ñ\84иÑ\80иÑ\81Ñ\82ода Ñ\88авад',
'tog-enotifrevealaddr' => 'Нишонаи почтаи электронии ман дар номаҳои иттилорасонӣ қайд шавад',
'tog-shownumberswatching' => 'Нишон додани шумораи корбарони пайгир',
'tog-oldsig' => 'Пешнамоиши имзои вуҷуддошта:',
'underline-always' => 'Доимо',
'underline-never' => 'Ҳеҷгоҳ',
-'underline-default' => 'Пешфарзи мурургар',
+'underline-default' => 'Пӯст ё мурургари пешфарз',
# Font style option in Special:Preferences
'editfont-style' => 'Сабки қалами ҷаъбаи вироиш:',
'listingcontinuesabbrev' => 'идома',
'index-category' => 'Саҳифаҳои намояшуда',
'noindex-category' => 'Саҳифаҳои намоиянашуда',
+'broken-file-category' => 'Саҳифаҳои дорои пайванди шикаста ба парванда',
'about' => 'Дар бораи',
'article' => 'Саҳифаи мӯҳтаво',
'newwindow' => '(дар равзанаи ҷадид боз мешавад)',
'cancel' => 'Лағв',
'moredotdotdot' => 'Бештар...',
-'mypage' => 'Саҳифаи ман',
-'mytalk' => 'Ð\93Ñ\83Ñ\84Ñ\82Ñ\83гӯи ман',
+'mypage' => 'Саҳифа',
+'mytalk' => 'Ð\91аҳÑ\81',
'anontalk' => 'Баҳс бо ин IP',
'navigation' => 'Гаштан',
'and' => ' ва',
'viewsource' => 'Намоиши матни вики',
'actionthrottled' => 'Ҷилави амали шумо гирифта шуд',
'actionthrottledtext' => 'Ба манзури ҷилавгирӣ аз спам, шумо иҷоза надоред, ки чунин амалеро беш аз чанд бор дар як муддати замони кӯтоҳ анҷом бидиҳед. Лутфан пас аз чанд дақиқа дубора талош кунед.',
-'protectedpagetext' => 'Ин саҳифа барои ҷилавгирӣ аз вироиш қуфл шудааст.',
+'protectedpagetext' => 'Ин саҳифа барои ҷилавгирӣ аз вироиш ва дигар амалҳо қуфл шудааст.',
'viewsourcetext' => 'Шумо метавонед матни викии ин саҳифаро назар кунед ё нусха бардоред:',
'protectedinterface' => 'Ин саҳифа ороишдиҳандаи матни ин нармафзор аст, ва ба манзури пешгирӣ аз харобкорӣ қуфл шудааст.',
'editinginterface' => "'''Огоҳӣ:''' Шумо саҳифаеро вироиш карда истодаед, ки матни интерфейси барнома мебошад. Тағйироти ин саҳифа барои намуди интерфейси дигар корбарон таъсир хоҳад расонид. Барои тарҷумаҳо, лутфан аз [//translatewiki.net/wiki/Main_Page?setlang=tg Бетавики], ки лоиҳаи маҳаликунонии МедиаВики мебошад, истифода кунед.",
'createaccount' => 'Ҳисоби ҷадидеро созед',
'gotaccount' => "Ҳисоби корбарӣ доред? '''$1'''.",
'gotaccountlink' => 'Вуруд шавед',
+'userlogin-resetlink' => 'Ҷузъиёти вурудро фаромӯш кардаед?',
'createaccountmail' => 'бо почтаи электронӣ',
'createaccountreason' => 'Сабаб:',
'badretype' => 'Калимаҳои убуре, ки ворид кардаед бо ҳамдигар мувофиқат намекунанд.',
'resetpass_forbidden' => 'Дар {{SITENAME}} калимаҳои убурро наметавон тағйир дод',
'resetpass-no-info' => 'Барои дастрасии мустақим ба ин саҳифа шумо бояд ба систем ворид шуда бошед.',
'resetpass-submit-loggedin' => 'Тағйири гузарвожа',
+'resetpass-submit-cancel' => 'Лағв',
'resetpass-wrong-oldpass' => 'Гузарвожаи мувақат ё охир номӯътабар.
Мумкин аст, ки шумо аллакай гузарвожаатонро бо муваффақият тағйир дода бошед ё дархости як гузарвожаи мувақатӣ карда бошед.',
'resetpass-temp-password' => 'Гузарвожаи муваққатӣ:',
# Special:PasswordReset
-'passwordreset-username' => 'Номи корбарӣ',
+'passwordreset-username' => 'Номи корбарӣ:',
+'passwordreset-emailelement' => 'Номи корбарӣ: $1
+Гузарвожаи муваққатӣ: $2',
+
+# Special:ChangeEmail
+'changeemail-cancel' => 'Лағв',
# Edit page toolbar
'bold_sample' => 'Матни пурранг',
'userinvalidcssjstitle' => "'''Ҳушдор:'''Пӯсте бо номи \"\$1\" вуҷуд надорад. Таваҷҷӯҳ кунед ки саҳифаҳои .css ва .js бо ҳарфҳои хурд навишта мешаванд, Намуна. {{ns:user}}:Фу/vector.css дар муқобили корбар {{ns:user}}:Фу/Vector.css.",
'updated' => '(Ба рӯз шуда)',
'note' => "'''Эзоҳ:'''",
-'previewnote' => "'''Ин фақат пешнамоиш аст; дигаргуниҳо ҳоло захира нашудаанд!'''",
+'previewnote' => "'''Ба ёд дошта бошед, ки ин фақат пешнамоиш аст.'''
+Тағийроти шумо ҳанӯз захира нашудааст!",
'previewconflict' => 'Ин пешнамоиш аккоскунандаи матни ноҳияи вироиш дар боло аст ва агар онро захира кунед бо ҳамин шакл нишода дода хоҳад шуд.',
'session_fail_preview' => "'''Бубахшед! Аз сабаби аз даст рафтани иттилооти нишасти корбарӣ, наметавонем вироишҳои шуморо пардозиш кунем.
Лутфан дубора саъй кунед. Агар боз бо ҳамин паём рӯ ба рӯ шавед, аз систем хориҷ шавед ва муҷаддадан ворид шавед.'''",
Шумо зарурияти вироиши ин саҳифаро дида баромаданатон лозим.
Сабти ҳазфшавии ин саҳифа барои фароҳам овардани имкониятҳои қулай оварда шудааст:",
+# Parser/template warnings
+'post-expand-template-argument-category' => 'Саҳифаҳои ҳавои шаблонҳои бо параметрҳои нодида гирифташуда',
+
# "Undo" feature
'undo-success' => 'Ин вироиш метавонад ботил шавад. Лутфан муқоисаи зеринро барои таъйид кардани амалӣ худ, баррасӣ кунед, ва баъдан барои анҷом додани ботилкунии вироиш тағйироти зеринро захира кунед.',
'undo-failure' => 'Ба иллати бархӯрдани вироишҳои дар миён омада, ин вироишро ботил наметавон кард.',
Шарҳ: (феълӣ) тафовут бо нусхаи феълӣ
(қаблӣ) = тафовут бо нусхаи феълӣ, ҷузъ = вироиши ҷузъӣ',
'history-fieldset-title' => 'Мурури таърих',
+'history-show-deleted' => 'Фақат ҳазфшуда',
'histfirst' => 'Аввалин',
'histlast' => 'Охирин',
'historysize' => '({{PLURAL:$1|1 байт|$1 байт}})',
'revdelete-success' => "'''Тағйири намоёнии нусха бо муваффақият анҷом шуд.'''",
'logdelete-success' => "'''Тағйири намоёнии маврид бо муваффақият анҷом шуд.'''",
'revdel-restore' => 'Тағйири падидорӣ',
+'revdel-restore-deleted' => 'нусхаҳои ҳазфшуда',
'revdel-restore-visible' => 'нусхаҳои намоён',
'pagehist' => 'Таърихи саҳифа',
'deletedhist' => 'Таърихи ҳазфшуда',
'lineno' => 'Сатри $1:',
'compareselectedversions' => 'Нусхаҳои интихобшударо муқоиса кунед',
'editundo' => 'ботил',
-'diff-multi' => '({{PLURAL:$1|вироиши миёнӣ|$1 вироишоти миёнӣ}} нишон дода нашудааст.)',
+'diff-multi' => '({{PLURAL:$1|як|$1}} вироиш миёнӣ тавассути {{PLURAL:$2|як|$2}} корбар нишон дода нашудааст)',
# Search results
'searchresults' => 'Натиҷаҳои ҷустуҷӯ',
'nextn' => 'баъдӣ {{PLURAL:$1|$1}}',
'viewprevnext' => 'Намоиш ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-legend' => 'Гузинаҳои ҷустуҷӯ',
+'searchmenu-exists' => "'''Саҳифае бо номи \"[[:\$1]]\" дар ин вики вуҷуд дорад.'''",
'searchmenu-new' => "'''Эҷоди саҳифаи \"[[:\$1]]\" дар ин вики!'''",
'searchhelp-url' => 'Help:Мундариҷа',
-'searchprofile-articles' => 'Саҳифаҳои мӯҳтавоӣ',
-'searchprofile-project' => 'Саҳифаҳои лоиҳа',
-'searchprofile-images' => 'Парвандаҳо',
+'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|1 калима|$2 калимаҳо}})',
'search-result-score' => 'Иртибот: $1%',
'search-redirect' => '(тағйири масир $1)',
'showingresultsnum' => "Намоиши {{PLURAL:$3|'''1''' натиҷа|'''$3''' натоиҷ}} оғоз аз #'''$2'''.",
'nonefound' => "'''Эзоҳ''': Танҳо чанд фазоиномҳо аз рӯи пешфарш ҷустуҷӯ мешаванд.
Ҷустуҷӯи худро бо пешванди ''ҳама:'' барои ҷустуҷӯи мӯҳтавои пурра (саҳифаҳои баҳс, шаблонҳо ва ғайраҳо) такрор кунед, ё фазои номи дилхоҳро чун пешванд истифода баред.",
+'search-nonefound' => 'Натиҷаи муносиб бо дархост пайдо нашуд.',
'powersearch' => 'Ҷустуҷӯ',
'powersearch-legend' => 'Ҷустуҷӯи пешрафта',
'powersearch-ns' => 'Ҷустуҷӯ дар фазоҳои ном:',
# Preferences page
'preferences' => 'Тарҷиҳот',
-'mypreferences' => 'Тарҷиҳоти ман',
+'mypreferences' => 'Танзимот',
'prefs-edits' => 'Шумораи вироишҳо:',
'prefsnologin' => 'Ба систем ворид нашудаед',
'prefsnologintext' => 'Барои танзими тарҷиҳоти корбарӣ бояд [[Special:UserLogin|вуруд ба систем шавед]].',
'gender-female' => 'Зан',
'email' => 'Почтаи электронӣ',
'prefs-help-realname' => 'Номи ҳақиқӣ ихтиёрӣ ва агар шумо онро пешниҳод кунед онро ҳамчун муаллифи эҷодиётатон ёдоварӣ карда хоҳад шуд.',
-'prefs-help-email' => 'Нишонаи почтаи электронӣ (ихтиёрӣ); тамоси дигар корбарон бо шуморо ба василаи номаи электронӣ аз тариқи саҳифаи корбарӣ ё саҳифаи баҳси корбарӣ, бидуни ниёз ба фош кардани сомона ва нишонаи воқеъи почтаи электронии шумо мумкин месозад.',
+'prefs-help-email' => 'Нишонаи электронӣ ихтиёрист, аммо фиристодани гузарвожаи навро агар гузарвожаи худро фаромӯш кунед мумкин мегардад.',
'prefs-help-email-required' => 'Нишони почтаи электрони лозим аст.',
# User rights
'recentchanges-legend' => 'Ихтиёроти тағйироти охирин',
'recentchanges-summary' => 'Назорати тағйиротҳои навтарин дар Википедиа дар ҳамин саҳифа аст.',
'recentchanges-feed-description' => 'Радёбии охирин тағйироти ин вики дар ин хурд.',
+'recentchanges-label-newpage' => 'Ин вироиш саҳифаи нав эҷод кард',
+'recentchanges-label-minor' => 'Ин вироиши ҷузъи аст',
+'recentchanges-label-bot' => 'Ин вироишро робот анҷом додааст',
+'recentchanges-label-unpatrolled' => 'Ин вироиш ҳанӯз гаштзанӣ нашудааст',
'rcnote' => "Дар поён {{PLURAL:$1|'''1''' тағйире аст|'''$1''' тағйирот мебошанд}}, ки дар давоми {{PLURAL:$2|рӯҳ|'''$2''' рӯзҳои}} охир, сар карда аз $5, $4.",
'rcnotefrom' => 'Дар зер тағйиротҳои охирин аз <b>$2</b> (то <b>$1</b> нишон дода шудааст).',
'rclistfrom' => 'Нишон додани тағйиротҳои нав сар карда аз $1',
'upload-curl-error28-text' => 'Ин сомона беш аз андоза дар посух тӯл кард. Лутфан баррасӣ кунед, ки оё сомона фаъол ва бар хат аст ё на. Сипас лаҳзае интизор шавед ва дубора талош кунед. Шояд бад набошад дар вақти н он қадар банд дубора талош кунед.',
'license' => 'Иҷозатнома:',
-'license-header' => 'Иҷозатнома:',
+'license-header' => 'Иҷозатнома',
'nolicense' => 'Ҳеҷ яке интихоб нашудааст',
'license-nopreview' => '(Пешнамоиш вуҷуд надорад)',
'upload_source_url' => '(як нишони интернетии мӯътабар ва оммавӣ)',
'protectedtitlestext' => 'Унвонҳои зерин аз эҷод муҳофизат шудаанд',
'protectedtitlesempty' => 'Дар ҳоли ҳозир ҳеҷ унвоне бо ин параметрҳо муҳофизат нащудааст',
'listusers' => 'Рӯйхати корбарон',
+'usercreated' => '{{GENDER:$3|Эҷодшуда}} дар таърихи $1 дар соати $2',
'newpages' => 'Саҳифаҳои нав',
'newpages-username' => 'Номи корбар:',
'ancientpages' => 'Саҳифаҳои кӯҳнатарин',
'listgrouprights-helppage' => 'Help:Дастрасиҳои гурӯҳӣ',
'listgrouprights-members' => '(феҳристи аъзоён)',
-# E-mail user
+# Email user
'mailnologin' => 'Нишонае аз фиристанда вуҷуд надорад',
'mailnologintext' => 'Барои фиристодани почтаи электронӣ барои корбарони дигар бояд [[Special:UserLogin|ба систем ворид шавед]] ва нишонаи почтаи электронии мӯътабар дар [[Special:Preferences|тарҷиҳоти]] худ дошта бошед.',
'emailuser' => 'Фиристодани email ба ин корбар',
'emailsenttext' => 'Номаи почтаи электронии шумо фиристода шуд.',
# Watchlist
-'watchlist' => 'Феҳристи назароти ман',
-'mywatchlist' => 'Феҳристи назароти ман',
+'watchlist' => 'Феҳристи пайгирӣ',
+'mywatchlist' => 'Феҳристи пайгириҳо',
+'watchlistfor2' => 'Барои $1 $2',
'nowatchlist' => 'Дар феҳристи пайгириҳои шумо ҳеҷ мавриде нест.',
'watchlistanontext' => 'Лутфан барои мушоҳида ва вироиши феҳристи пайгириҳои худ аз $1 истифода кунед.',
'watchnologin' => 'Вуруд нашуда',
'historywarning' => 'Ҳушдор: Саҳифае ки шумо ҳазф карданиед, таърих дорад:',
'confirmdeletetext' => 'Шумо дар ҳоли ҳазф кардани як саҳифа ё аксе аз пойгоҳ дода ҳамроҳ бо тамоми таърихи он ҳастед. Лутфан ин амалро тасдиқ кунед ва итминон ҳосил кунед, ки оқибати ин корро медонед ва ин амалро мутобиқи [[{{MediaWiki:Policy-url}}|сиёсати ҳазф]] анҷом медиҳед.',
'actioncomplete' => 'Амал иҷро шуд',
+'actionfailed' => 'Амал номуваффақ шуд',
'deletedtext' => '"$1" ҳазф шудааст.
Нигаред ба $2 барои гузориши ҳазфи охирин.',
'dellogpage' => 'Гузоришҳои ҳазф',
'blanknamespace' => '(Аслӣ)',
# Contributions
-'contributions' => 'Ҳиссагузории корбар',
+'contributions' => 'Ҳиссагузориҳои {{GENDER:$1|корбар}}',
'contributions-title' => 'Ҳиссагузориҳои корбар барои $1',
-'mycontris' => 'Хиссагузории ман',
+'mycontris' => 'Ҳиссагузориҳо',
'contribsub2' => 'Барои $1 ($2)',
'nocontribs' => 'Ҳеҷ тағйире бо ин мушаххасот пайдо нашуд.',
'uctop' => '(боло)',
'sp-contributions-newbies-sub' => 'Барои навкорон',
'sp-contributions-blocklog' => 'Гузориши басташуданҳо',
'sp-contributions-deleted' => 'Ҳиссагузориҳои ҳазфшудаи корбар',
-'sp-contributions-talk' => 'Баҳс',
+'sp-contributions-uploads' => 'боргузориҳо',
+'sp-contributions-logs' => 'гузоришҳо',
+'sp-contributions-talk' => 'баҳс',
'sp-contributions-userrights' => 'Мудирияти ихтиёроти корбарӣ',
'sp-contributions-search' => 'Ҷустуҷӯи ҳиссагузориҳо',
'sp-contributions-username' => 'IP нишона ё номи корбар:',
'nolinkshere-ns' => "Ҳеҷ саҳифа аз фазоиноми интихобшуда ба '''[[:$1]]''' пайванд надорад.",
'isredirect' => 'саҳифаи тағйири масир',
'istemplate' => 'истифодашуда дар саҳифа',
-'isimage' => 'пайванди акс',
+'isimage' => 'пайванд ба парванда',
'whatlinkshere-prev' => '{{PLURAL:$1|қаблӣ|қаблӣ $1}}',
'whatlinkshere-next' => '{{PLURAL:$1|баъдӣ|баъдӣ $1}}',
'whatlinkshere-links' => '← пайвандҳо',
'whatlinkshere-hideredirs' => '$1 тағйири масир',
'whatlinkshere-hidetrans' => '$1 трансгунҷоишҳо',
'whatlinkshere-hidelinks' => '$1 пайвандҳо',
+'whatlinkshere-hideimages' => '$1 пайвандҳои парванда',
'whatlinkshere-filters' => 'Филтрҳо',
# Block/unblock
'ipusubmit' => 'Боз кардани дастрасӣ',
'unblocked' => 'Дастрасии [[User:$1|$1]] боз карда шуд',
'unblocked-id' => 'Қатъи дастрасии шумораи $1 хотима ёфт',
-'ipblocklist' => 'IP нишонаҳо ва номҳои корбарии баста шуда',
+'ipblocklist' => 'Корбарони басташуда',
'ipblocklist-legend' => 'Ҷустуҷӯи корбари баста шуда',
'ipblocklist-submit' => 'Ҷустуҷӯ',
'infiniteblock' => 'бе поён',
'tooltip-rollback' => '"Вогард" вироиш(ҳо)ро ба ин саҳифаи охирин ҳиссагузор бо як клик мегардонад',
'tooltip-undo' => '"Ботил" ин вироишро ботил мекунад ва форми вироишро дар ҳолати пешнамоиш боз мекунад.
Ин имкони илова кардани як сабаберо дар хулоса медиҳад.',
+'tooltip-summary' => 'Хулосаи кӯтоҳ ворид кунед',
# Metadata
'notacceptable' => 'Коргузори ин вики аз ирсоли дода ба шакле ки барномаи шумо битавонад намоиш диҳад, пешкаш карда наметавонад.',
'metadata-help' => 'Ин парванда иттилооти иловагиро дар бар мегирад, эҳтимол аз аксбардораки рақамӣ ё сканер дар вақти сохтан ва рақамӣ кардан, илова шудааст. Агар парванда аз вазъияти ибтидоиаш тағйир дода бошад, мумкин аст, шарҳу тафсилоти мавҷуди иттилооти аксро тамоман бозтоб надиҳад.',
'metadata-expand' => 'Намоиши ҷузъиёти тафсилӣ',
'metadata-collapse' => 'Пинҳон кардани ҷузъиёти тафсилӣ',
-'metadata-fields' => 'EXIF фосилаҳои додаҳо, ки дар ин паём оварда шудаанд дар ҷадвали акс ҷамъ шуда бошанд ҳам, намоиш дода хоҳанд шуд. Бақия онҳо танҳо дар вақти боз кардани ҷадвал нишон дода хоҳанд шуд.
+'metadata-fields' => 'Фарододаҳои тасвир нишон додашуда дар ин пайғом вақти ҷадвал фарододаҳои тавсир ҷамъ шуда бошад ҳам намоиш дода мешавад. Бақияи маворид танҳо замоне нишон дода мешавад, ки ҷадвали ёдшуда боз шавад.
* make
* model
* datetimeoriginal
'monthsall' => 'ҳама',
'limitall' => 'ҳама',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Тасдиқи нишонаи почтаи электронӣ',
'confirmemail_noemail' => 'Шумо дар саҳифаи [[Special:Preferences|тарҷиҳоти корбарии]] худ нишонаи почтаи электронии мӯътабареро ворид накардаед.',
'confirmemail_text' => '{{SITENAME}} таъйиди эътибои почтаи электронии шуморо пеш аз истифода хидмати электронӣ талаб мекунад. Тугмаи зеринро фаъол кунед то номаи таъйидӣ ба почтаи электронии шумо фиристода шавад. Ин нома пайвандеро дар бар мегирад, ки коде дорад; пайвандро дар мурургар боз кунед, то ки почтаи электрониатон дар ҳақиқат таъйид шавад.',
'blankpage' => 'Саҳифаи холӣ',
# Special:Tags
+'tag-filter' => 'Филтри [[Special:Tags|барчасбҳо]]:',
'tags-edit' => 'вироиш',
# Database error messages
'listgrouprights-helppage' => 'Help:Dastrasihoi gurūhī',
'listgrouprights-members' => "(fehristi a'zojon)",
-# E-mail user
+# Email user
'mailnologin' => 'Nişonae az firistanda vuçud nadorad',
'mailnologintext' => "Baroi firistodani poctai elektronī baroi korbaroni digar bojad [[Special:UserLogin|ba sistem vorid şaved]] va nişonai poctai elektroniji mū'tabar dar [[Special:Preferences|tarçihoti]] xud doşta boşed.",
'emailuser' => 'Firistodani email ba in korbar',
'monthsall' => 'hama',
'limitall' => 'hama',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Tasdiqi nişonai poctai elektronī',
'confirmemail_noemail' => "Şumo dar sahifai [[Special:Preferences|tarçihoti korbarii]] xud nişonai poctai elektroniji mū'tabarero vorid nakardaed.",
'confirmemail_text' => "{{SITENAME}} ta'jidi e'tiboi poctai elektroniji şumoro peş az istifoda xidmati elektronī talab mekunad. Tugmai zerinro fa'ol kuned to nomai ta'jidī ba poctai elektroniji şumo firistoda şavad. In noma pajvandero dar bar megirad, ki kode dorad; pajvandro dar mururgar boz kuned, to ki poctai elektroniaton dar haqiqat ta'jid şavad.",
'doubleredirectstext' => 'หน้านี้แสดงรายการหน้าที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น
แต่ละแถวมีการเชื่อมโยงไปยังการเปลี่ยนทางครั้งแรกและครั้งที่สอง เช่นเดียวกับเป้าหมายของการเปลี่ยนทางครั้งที่สอง ซึ่งมักเป็นหน้าเป้าหมาย "ที่แท้จริง" ที่การเปลี่ยนแปลงครั้งแรกควรชี้ไป
หน่วยที่<del>ขีดฆ่า</del> คือ รายการที่ได้แก้ไขแล้ว',
-'double-redirect-fixed-move' => '[[$1]] à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88à¸แล้ว
+'double-redirect-fixed-move' => '[[$1]] à¹\84à¸\94à¹\89ยà¹\89ายแล้ว
ขณะนี้เปลี่ยนทางไปยัง [[$2]]',
'double-redirect-fixed-maintenance' => 'การแก้ไขการเปลี่ยนทางซ้ำซ้อนจาก [[$1]] ไปยัง [[$2]]',
-'double-redirect-fixer' => 'à¸\9cูà¹\89ซ่อมหน้าเปลี่ยนทาง',
+'double-redirect-fixer' => 'à¸\95ัวซ่อมหน้าเปลี่ยนทาง',
'brokenredirects' => 'หน้าเปลี่ยนทางเสีย',
'brokenredirectstext' => 'หน้าเปลี่ยนทางต่อไปนี้เชื่อมโยงไปยังหน้าที่ยังไม่ถูกสร้าง:',
'deletepage' => 'ลบหน้า',
'confirm' => 'ยืนยัน',
'excontent' => "เนื้อหาเดิม: '$1'",
-'excontentauthor' => "เนื้อหาเดิม: '$1' (และผู้เขียนคนเดียว คือ '[[Special:Contributions/$2|$2]]')",
+'excontentauthor' => "à¹\80à¸\99ืà¹\89à¸à¸«à¸²à¹\80à¸\94ิม: '$1' (à¹\81ละมีà¸\9cูà¹\89à¹\80à¸\82ียà¸\99à¸\84à¸\99à¹\80à¸\94ียว à¸\84ืภ'[[Special:Contributions/$2|$2]]')",
'exbeforeblank' => "เนื้อหาก่อนถูกทำว่างคือ: '$1'",
'exblank' => 'หน้าว่าง',
'delete-confirm' => 'ลบ "$1"',
'undelete-filename-mismatch' => 'ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ชื่อไฟล์ไม่ตรง',
'undelete-bad-store-key' => 'ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ไฟล์สูญหายก่อนถูกลบ',
'undelete-cleanup-error' => 'เกิดความผิดพลาดในการลบไฟล์กรุที่ไม่ใช้แล้ว "$1"',
-'undelete-missing-filearchive' => 'ไม่สามารถกู้คืนไฟล์เก่าหมายเลข $1 เพราะไม่มีในฐานข้อมูล
+'undelete-missing-filearchive' => 'à¹\84มà¹\88สามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\88าหมายà¹\80ลà¸\82 $1 à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\82à¹\89à¸à¸¡à¸¹à¸¥à¹\83à¸\99à¸\90าà¸\99à¸\82à¹\89à¸à¸¡à¸¹à¸¥
ไฟล์อาจถูกกู้คืนไปแล้ว',
'undelete-error' => 'เกิดข้อผิดพลาดในการกู้คืนหน้า',
'undelete-error-short' => 'เกิดข้อผิดพลาดในการกู้คืนไฟล์: $1',
** ใส่ข้อมูลเท็จ
** ลบเนื้อหาในหน้าออก
** ใส่ลิงก์สแปม
-** ใส่ข้อความขยะเข้ามา
-** à¸\84ุà¸\81à¸\84ามà¸\9cูà¹\89à¸à¸·à¹\88น
-** à¸\81à¹\88à¸à¸\81วà¸\99à¸\9cูà¹\89à¸à¸·à¹\88à¸\99
-** à¸\8aืà¹\88à¸à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84มà¹\88สุภาà¸\9eหรืà¸à¹\84มà¹\88à¸\84วรà¹\83à¸\8a้',
+** à¹\83สà¹\88à¸\82à¹\89à¸à¸\84วามà¹\84รà¹\89สาระ/à¸\82ยะà¹\80à¸\82à¹\89ามา
+** à¸\9eฤà¸\95ิà¸\81รรมà¸\82à¹\88มà¸\82ูà¹\88/รัà¸\87à¸\84วาน
+** à¹\83à¸\8aà¹\89หลายà¸\9aัà¸\8dà¸\8aีà¹\83à¸\99à¸\97าà¸\87à¸\97ีà¹\88à¸\9cิà¸\94
+** à¸\8aืà¹\88à¸à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84มà¹\88à¸à¸²à¸\88ยà¸à¸¡à¸£à¸±à¸\9aà¹\84à¸\94้',
'ipb-hardblock' => 'ป้องกันไม่ให้ผู้ใช้ล็อกอินแก้ไขจากเลขที่อยู่ไอพีนี้',
'ipbcreateaccount' => 'ป้องกันการสร้างบัญชี',
'ipbemailban' => 'ป้องกันมิให้ผู้ใช้ส่งอีเมล',
'ipb-blockingself' => 'คุณกำลังบล็อกตัวเอง! แน่ใจแล้วหรือว่าต้องการทำอย่างนั้น',
'ipb-confirmhideuser' => 'คุณกำลังบล็อกผู้ใช้โดยเป็นผู้ใช้ "ซ่อนผู้ใช้" ซึ่งจะระงับชื่อผู้ใช้ในรายการและหน่วยปูมทั้งหมด คุณแน่ใจหรือว่าต้องการดำเนินการเช่นนั้น',
'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
-'ipb-unblock-addr' => 'à¹\80ลิà¸\81บล็อก $1',
-'ipb-unblock' => 'à¹\80ลิà¸\81บล็อกผู้ใช้หรือเลขที่อยู่ไอพี',
+'ipb-unblock-addr' => 'à¸\9bลà¸\94บล็อก $1',
+'ipb-unblock' => 'à¸\9bลà¸\94บล็อกผู้ใช้หรือเลขที่อยู่ไอพี',
'ipb-blocklist' => 'ดูการบล็อกปัจจุบัน',
'ipb-blocklist-contribs' => 'ผลงานเขียนโดย $1',
'unblockip' => 'ปลดบล็อกผู้ใช้',
-'unblockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87สำหรัà¸\9aคืนสิทธิการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก',
+'unblockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88à¸คืนสิทธิการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก',
'ipusubmit' => 'ยกเลิกการบล็อกนี้',
-'unblocked' => '[[User:$1|$1]] ถูกบล็อก',
+'unblocked' => '[[User:$1|$1]] à¸\96ูà¸\81à¸\9bลà¸\94à¸\9aลà¹\87à¸à¸\81',
'unblocked-range' => '$1 ถูกปลดบล็อกแล้ว',
'unblocked-id' => 'เลิกบล็อก $1',
'blocklist' => 'ผู้ใช้ที่ถูกบล็อก',
'blocklist-by' => 'ผู้ดูแลระบบที่บล็อก',
'blocklist-params' => 'พารามิเตอร์การบล็อก',
'blocklist-reason' => 'เหตุผล',
-'ipblocklist-submit' => 'สืà¸\9aà¸\84à¹\89à¸\99',
-'ipblocklist-localblock' => 'à¸\81ารสà¸\81ัà¸\94à¸\81ัà¹\89à¸\99ภายในวิกินี้',
-'ipblocklist-otherblocks' => '{{PLURAL:$1|à¸\81ารสà¸\81ัà¸\94à¸\81ัà¹\89à¸\99}}à¸à¸·à¹\88à¸\99à¹\86',
+'ipblocklist-submit' => 'à¸\84à¹\89à¸\99หา',
+'ipblocklist-localblock' => 'à¸\81ารà¸\9aลà¹\87à¸à¸\81ในวิกินี้',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|à¸\81ารà¸\9aลà¹\87à¸à¸\81}}à¸à¸·à¹\88à¸\99',
'infiniteblock' => 'ไม่มีกำหนด',
'expiringblock' => 'หมดอายุ $1 เวลา $2',
'anononlyblock' => 'ไม่ล็อกอินเท่านั้น',
'noautoblockblock' => 'ยกเลิกการบล็อกอัตโนมัติ',
-'createaccountblock' => 'à¸\9aลà¹\87à¸à¸\81การสร้างบัญชีผู้ใช้ใหม่',
-'emailblock' => 'à¸\9aลà¹\87à¸à¸\81à¸\81ารสà¹\88à¸\87อีเมล',
-'blocklist-nousertalk' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸à¸ ิà¸\9bรายของตนเอง',
+'createaccountblock' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99การสร้างบัญชีผู้ใช้ใหม่',
+'emailblock' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99อีเมล',
+'blocklist-nousertalk' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89ของตนเอง',
'ipblocklist-empty' => 'รายการบล็อกว่าง',
'ipblocklist-no-results' => 'เลขที่อยู่ไอพีหรือชื่อผู้ใช้ที่ต้องการไม่ได้ถูกบล็อก',
'blocklink' => 'บล็อก',
# Thumbnails
'thumbnail-more' => 'ขยาย',
-'filemissing' => 'à¹\84มà¹\88à¹\80à¸\88à¸à¹\84à¸\9fลà¹\8c',
+'filemissing' => 'à¹\84à¸\9fลà¹\8cสูà¸\8dหาย',
'thumbnail_error' => 'เกิดปัญหาไม่สามารถทำรูปย่อได้: $1',
'djvu_page_error' => 'หน้าเดจาวู (DjVu) เกินขนาด',
'djvu_no_xml' => 'ไม่สามารถส่งเอกซ์เอ็มแอล (XML) สำหรับไฟล์เดจาวู (DjVu)',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'หน้าผู้ใช้ของคุณ',
-'tooltip-pt-anonuserpage' => 'หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82à¸à¸\87หมายà¹\80ลà¸\82à¹\84à¸à¸\9eีà¸\97ีà¹\88แก้ไข',
+'tooltip-pt-anonuserpage' => 'หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82à¸à¸\87à¹\80ลà¸\82à¸\97ีà¹\88à¸à¸¢à¸¹à¹\88à¹\84à¸à¸\9eีà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\83à¸\8aà¹\89แก้ไข',
'tooltip-pt-mytalk' => 'หน้าอภิปรายของคุณ',
-'tooltip-pt-anontalk' => 'à¸\9eูà¸\94à¸\84ุยà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81หมายà¹\80ลà¸\82à¹\84à¸à¸\9eี',
+'tooltip-pt-anontalk' => 'à¸\9eูà¸\94à¸\84ุยà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88à¸à¸¢à¸¹à¹\88à¹\84à¸à¸\9eีà¸\99ีà¹\89',
'tooltip-pt-preferences' => 'ตั้งค่าการใช้งานส่วนตัว',
-'tooltip-pt-watchlist' => 'รายà¸\81ารà¸\97ีà¹\88เฝ้าดูการแก้ไข',
+'tooltip-pt-watchlist' => 'รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93เฝ้าดูการแก้ไข',
'tooltip-pt-mycontris' => 'รายการหน้าที่คุณเขียน',
'tooltip-pt-login' => 'ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน',
'tooltip-pt-anonlogin' => 'ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน',
'notacceptable' => 'เซิร์ฟเวอร์ของวิกิไม่สามารถให้ข้อมูลในรูปแบบที่ไคลเอนต์สามารถอ่านได้',
# Attribution
-'anonymous' => 'ผู้ใช้นิรนามของ{{SITENAME}}',
+'anonymous' => '{{PLURAL:$1|ผู้ใช้|ผู้ใช้}}นิรนามของ{{SITENAME}}',
'siteuser' => 'ผู้ใช้ $1 จาก {{SITENAME}}',
'anonuser' => 'ผู้ใช้นิรนามจาก {{SITENAME}} $1',
'lastmodifiedatby' => 'แก้ไขล่าสุดเมื่อเวลา $2 $1 โดย $3',
# Spam protection
'spamprotectiontitle' => 'ตัวกรองป้องกันสแปม',
-'spamprotectiontext' => 'หน้าที่คุณต้องการบันทึกโดนบล็อกด้วยตัวกรองสแปม ซึ่งอาจเกิดจากมีลิงก์ไปยังเว็บไซต์ภายนอกที่อยู่ในบัญชีดำ',
-'spamprotectionmatch' => 'ข้อความต่อไปนี้ได้ทำให้ตัวกรองสแปมของเราทำงาน: $1',
+'spamprotectiontext' => 'ข้อความที่คุณต้องการบันทึกถูกตัวกรองสแปมบล็อก
+อาจเกิดจากลิงก์ไปยังเว็บไซต์ภายนอกที่ถูกขึ้นบัญชีดำ',
+'spamprotectionmatch' => 'ข้อความต่อไปนี้กระตุ้นให้ตัวกรองสแปมของเราทำงาน: $1',
'spambot_username' => 'กวาดล้างมีเดียวิกิสแปม',
'spam_reverting' => 'ย้อนกลับไปรุ่นก่อนหน้าที่ไม่มีลิงก์ไปยังเว็บ $1',
'spam_blanking' => 'รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)',
'pageinfo-robot-policy' => 'สถานะเสิร์ชเอนจิน',
'pageinfo-views' => 'จำนวนการเข้าดู',
'pageinfo-watchers' => 'จำนวนผู้เข้าดูหน้า',
+'pageinfo-few-watchers' => '{{PLURAL:$1|ผู้เฝ้าดู|ผู้เฝ้าดู}}น้อยกว่า $1 คน',
'pageinfo-redirects-name' => 'หน้าเปลี่ยนทางมายังหน้านี้',
'pageinfo-subpages-name' => 'หน้าย่อยของหน้านี้',
'pageinfo-subpages-value' => '$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)',
# Email address confirmation
'confirmemail' => 'ยืนยันอีเมล',
'confirmemail_noemail' => 'ไม่ได้ใส่อีเมลในส่วน [[Special:Preferences|การตั้งค่าส่วนตัว]]',
-'confirmemail_text' => 'ถ้าต้องการใช้คำสั่งพิเศษในด้านอีเมสล จำเป็นต้องใส่ค่าอีเมลก่อน โดยกดที่ปุ่มด้านล่าง และทางระบบจะส่งไปที่อีเมลนี้ ในอีเมลจะมีลิงก์ซึ่งมีรหัสสำหรับยืนยันอีเมล',
-'confirmemail_pending' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมลของคุณ ถ้าได้สร้างบัญชีเร็วนี้ ให้รอซักครู่ก่อนที่จะขอรหัสอีกครั้งหนึ่ง',
-'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล',
-'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย',
-'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้',
-'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}} ไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
-กรุณาตรวจสอบอีเมลว่าถูกต้อง และไม่มีอักขระที่ไม่สามารถใช้ได้
+'confirmemail_text' => '{{SITENAME}} กำหนดให้คุณตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุณก่อนใช้คุณลักษณะอีเมล
+เปิดใช้งานปุ่มด้านล่างเพื่อส่งเมลยืนยันไปยังที่อยู่ของคุณ
+เมลจะรวมลิงก์ซึ่งมีรหัส
+โหลดลิงก์ในเบราว์เซอร์ของคุณเพื่อยืนยันว่าที่อยู่อีเมลของคุณสมเหตุสมผล',
+'confirmemail_pending' => 'รหัสยืนยันถูกอีเมลไปหาคุณแล้ว
+ถ้าคุณเพิ่งสร้างบัญชี คุณอาจอยากรอสักครู่ให้ส่งไปถึงก่อนพยายามขอรหัสใหม่',
+'confirmemail_send' => 'ส่งรหัสยืนยันทางอีเมล',
+'confirmemail_sent' => 'ส่งอีเมลยืนยันแล้ว',
+'confirmemail_oncreate' => 'รหัสยืนยันถูกส่งไปยังที่อยู่อีเมลของคุณ
+รหัสนี้ไม่กำหนดให้ต้องล็อกอิน แต่คุณต้องระบุรหัสก่อนเปิดใช้งานคุณลักษณะที่อาศัยอีเมลทั้งหมดในวิกินี้',
+'confirmemail_sendfailed' => '{{SITENAME}} ไม่สามารถส่งเมลยืนยันได้
+โปรดตรวจสอบที่อยู่อีเมลว่าไม่มีอักขระที่ไม่สมเหตุสมผล
ข้อความตีกลับ: $1',
-'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง หรือรหัสหมดอายุ',
-'confirmemail_needlogin' => 'ต้องทำการ $1 เพื่อยืนยันอีเมลของคุณว่าถูกต้อง',
-'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว คุณอาจจะล็อกอินและมีความสุขกับวิกิ',
+'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง
+รหัสอาจหมดอายุแล้ว',
+'confirmemail_needlogin' => 'ต้อง $1 เพื่อยืนยันที่อยู่อีเมลของคุณ',
+'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว
+คุณอาจ[[Special:UserLogin|ล็อกอิน]]ตอนนี้และสนุกกับการแก้ไขวิกิ',
'confirmemail_loggedin' => 'อีเมลคุณได้รับการยืนยันแล้ว',
-'confirmemail_error' => 'มีà¸\9bัà¸\8dหาà¹\80à¸\81ิà¸\94à¸\82ึà¹\89à¸\99à¹\83à¸\99à¸\81ารยืà¸\99ยัà¸\99à¸à¸µà¹\80มล',
-'confirmemail_subject' => '{{SITENAME}} ยืนยันการใช้งานอีเมล',
+'confirmemail_error' => 'à¹\80à¸\81ิà¸\94à¸\9bัà¸\8dหาà¸\82à¸\93ะà¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารยืà¸\99ยัà¸\99à¸\82à¸à¸\87à¸\84ุà¸\93',
+'confirmemail_subject' => 'การยืนยันที่อยู่อีเมล {{SITENAME}}',
'confirmemail_body' => 'ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ "$2" โดยใช้อีเมลนี้ที่ {{SITENAME}}
เพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:
'listgrouprights-addgroup-self-all' => 'Ähli toparlary öz hasabyňa goş',
'listgrouprights-removegroup-self-all' => 'Ähli toparlary öz hasabyňdan aýyr',
-# E-mail user
+# Email user
'mailnologin' => 'Iberer ýaly adres ýok',
'mailnologintext' => 'Başga ulanyjylara e-poçta ibermek üçin [[Special:UserLogin|sessiýaňyz açyk bolmaly]] hem-de [[Special:Preferences|ileri tutmalarda]] dogry bir e-poçta adresiňiz bolmalydyr.',
'emailuser' => 'Bu ulanyja e-poçta iber',
'monthsall' => 'ählisi',
'limitall' => 'ählisi',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'E-poçta adresini tassykla',
'confirmemail_noemail' => '[[Special:Preferences|Ulanyjy sazlamalaryňyzda]] bellenilen dogry bir e-poçta adresiňiz ýok.',
'confirmemail_text' => '{{SITENAME}} saýtynyň e-poçta amallaryny ulanmak üçin, ilki bilen e-poçta adresiňiziň tassyklanmagy zerurdyr.
'loginlanguagelabel' => 'Wika: $1',
'suspicious-userlogout' => "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')",
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Hindi malamang kamalian sa tungkulin ng liham ng PHP ()',
'user-mail-no-addy' => 'Sinubukang magpadala ng e-liham na walang tirahan na para sa e-liham.',
'prefs-displaywatchlist' => 'Ipakita ang mga pagpipilian',
'prefs-diffs' => 'Mga pagkakaiba',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Mukhang katanggap-tanggap ang direkisyong e-liham',
'email-address-validity-invalid' => 'Magpasok ng isang tanggap na direksiyong e-liham',
'listgrouprights-addgroup-self-all' => 'Idagdag ang lahat ng mga pangkat sa sariling akawnt',
'listgrouprights-removegroup-self-all' => 'Alisin ang lahat ng mga pangkat mula sa sariling akawnt',
-# E-mail user
+# Email user
'mailnologin' => 'Walang adres na mapagpapadalahan',
'mailnologintext' => 'Kailangan mong [[Special:UserLogin|lumagda]] at magkaroon ng tanggap na e-liham sa iyong [[Special:Preferences|mga kagustuhan]] para makapagpadala ng e-liham sa ibang mga tagagamit.',
'emailuser' => 'Padalhan ng e-liham ang tagagamit',
'monthsall' => 'lahat',
'limitall' => 'lahat',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Patotohanan ang adres ng e-liham',
'confirmemail_noemail' => 'Wala kang nakatakdang tanggap na adres ng e-liham sa iyong [[Special:Preferences|mga kagustuhan ng tagagamit]].',
'confirmemail_text' => "Pinagagawa ng {{SITENAME}} na patotohanan mo ang iyong adres ng e-liham bago gamitin ang mga kasangkapang-katangian ng e-liham. Pindutin at buhayin ang pindutan sa ibaba para makapagpadala ng isang makapagpapatotoong e-liham (kompirmasyon) patungo sa iyong adres.
'sharedupload-desc-there' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir. Daha fazla bilgi için lütfen [$2 dosya açıklama sayfasına] bakın.',
'sharedupload-desc-here' => 'Bu dosya $1 deposundan ve diğer projeler tarafından kullanılıyor olabilir.
Aşağıda [$2 dosya açıklama sayfasındaki] açıklama gösteriliyor.',
+'sharedupload-desc-create' => 'Bu dosya, $1 ve diğer projeler tarafından kullanılıyor olabilir.
+Dosya açıklamasını düzenlemek isterseniz, [$2 dosya açıklama sayfası] bulunmaktadır.',
'filepage-nofile' => 'Bu isimde bir dosya yok.',
'filepage-nofile-link' => 'Bu isimde bir dosya yok, ama siz [$1 yükleyebilirsiniz].',
'uploadnewversion-linktext' => 'Dosyanın yenisini yükleyin',
'disambiguationspage' => 'Template:Anlam ayrımı',
'disambiguations-text' => 'İlk satırda yer alan sayfalar bir anlam ayrım sayfasına iç bağlantı olduğunu gösterir. İkinci sırada yer alan sayfalar anlam ayrım sayfalarını gösterir. <br />Burada [[MediaWiki:Disambiguationspage]] tüm anlam ayrım şablonlarına bağlantılar verilmesi gerekmektedir.',
+'pageswithprop-submit' => 'Git',
+
'doubleredirects' => 'Çift yönlendirmeler',
'doubleredirectstext' => 'Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler.
Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca ikinci yönlendirmenin hedefi, ki bu genelde birinci yönlendirmenin göstermesi gereken "gerçek" hedef sayfasıdır.
'tog-editsectiononrightclick' => 'Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү бите ачылсын (JavaScript кирәк)',
'tog-showtoc' => 'Эчтәлек күрсәтелсен (3 тән күбрәк башламлы битләрдә)',
'tog-rememberpassword' => 'Хисап язмамны бу браузерда саклансын (иң күп $1 {{PLURAL:$1|көн|көн|көн}}гә кадәр)',
-'tog-watchcreations' => 'ТөзегÓ\99н биÑ\82лÓ\99Ñ\80ем күзәтү исемлегемә өстәлсен',
-'tog-watchdefault' => 'Үзгәрткән битләрем күзәтү исемлегемә өстәлсен',
-'tog-watchmoves' => 'Ð\9aÒ¯Ñ\87еÑ\80гÓ\99н биÑ\82лÓ\99Ñ\80ем күзәтү исемлегемә өстәлсен',
-'tog-watchdeletion' => 'Ð\91еÑ\82еÑ\80елгÓ\99н биÑ\82лÓ\99Ñ\80емне күзÓ\99Ñ\82Ò¯ иÑ\81емлегемгÓ\99 Ó©Ñ\81Ñ\82Ó\99Ò¯',
+'tog-watchcreations' => 'Ð\9cин Ñ\82өзегÓ\99н биÑ\82лÓ\99Ñ\80 Ò»Ó\99м йөклÓ\99гÓ\99н Ñ\84айллаÑ\80 күзәтү исемлегемә өстәлсен',
+'tog-watchdefault' => 'Мин үзгәрткән битләр һәм файллар күзәтү исемлегемә өстәлсен',
+'tog-watchmoves' => 'Ð\9cин күÑ\87еÑ\80гÓ\99н биÑ\82лÓ\99Ñ\80 Ò»Ó\99м Ñ\84айллаÑ\80 күзәтү исемлегемә өстәлсен',
+'tog-watchdeletion' => 'Ð\9cин беÑ\82еÑ\80гÓ\99н биÑ\82лÓ\99Ñ\80 Ò»Ó\99м Ñ\84айллаÑ\80нÑ\8b күзÓ\99Ñ\82Ò¯ иÑ\81емлегемгÓ\99 Ó©Ñ\81Ñ\82Ó\99лÑ\81ен',
'tog-minordefault' => 'Барлык үзгәртүләрне килешү буенча кече дип билгеләнсен',
'tog-previewontop' => 'Үзгәртү тәрәзәсеннән өстәрәк битне алдан карау өлкәсен күрсәтелсен',
'tog-previewonfirst' => 'Үзгәртү битенә күчкәндә башта алдан карау бите күрсәтелсен',
'tog-nocache' => 'Битләр кэшлауны тыелсын',
-'tog-enotifwatchlistpages' => 'Күзәтү исемлегемдәге бит үзгәртелү турында электрон почтага хәбәр җибәрелсен',
+'tog-enotifwatchlistpages' => 'Күзәтү исемлегемдәге бит яки файл үзгәртелү турында электрон почтага хәбәр җибәрелсен',
'tog-enotifusertalkpages' => 'Бәхәс битем үзгәртелү турында электрон почтага хәбәр җибәрелсен',
'tog-enotifminoredits' => 'Кече үзгәртүләр турында да электрон почтага хәбәр җибәрелсен',
'tog-enotifrevealaddr' => 'Хәбәрләрдә e-mail адресым күрсәтелсен',
Сез {{SITENAME}} проектында аноним рәвештә кала яисә шул ук яки башка исем белән яңадан <span class='plainlinks'>[$1 керә]</span> аласыз.
Кайбер битләр Сез кергән кебек күрсәтелергә мөмкин. Моны бетерү өчен браузер кэшын чистартыгыз.",
+'welcomeuser' => 'Хуш килдегез, $1!',
'yourname' => 'Кулланучы исеме:',
'yourpassword' => 'Серсүз:',
'yourpasswordagain' => 'Серсүзне кабат кертү:',
'changeemail-oldemail' => 'Хәзерге электрон әрҗә адресы:',
'changeemail-newemail' => 'Яңа электрон почта адресы:',
'changeemail-none' => '(юк)',
+'changeemail-password' => '«{{SITENAME}}» проекты өчен серсүзегез:',
'changeemail-submit' => 'E-mail адресын үзгәртү',
'changeemail-cancel' => 'Баш тарту',
Мондый хаталар аноним web-проксилар кулланганда килеп чыгарга мөмкин.",
'edit_form_incomplete' => "'''Төзәтү кырларының кайбер өлешләре серверга барып ирешмәде. Сезнең үзгәртүләр бозылмаганмы - игътибар белән тикшерегез һәм яңадан җибәреп карагыз.'''",
'editing' => '«$1» битен үзгәртү',
+'creating' => '«$1» битен ясау',
'editingsection' => '«$1» битендә бүлек үзгәртүе',
'editingcomment' => '«$1» битен үзгәртү (яңа бүлек)',
'editconflict' => 'Үзгәртү конфликты: $1',
'allpagesnext' => 'Киләсе',
'allpagessubmit' => 'Башкару',
'allpagesprefix' => 'Алкушымчалы битләрне күрсәтү:',
+'allpages-hide-redirects' => 'Юнәлтүләрне яшер',
# Special:Categories
'categories' => 'Төркемнәр',
'emailsenttext' => 'E-mail хатыгыз җиберелде.',
# Watchlist
-'watchlist' => 'Күзәтү исемлегем',
+'watchlist' => 'Күзәтү исемлеге',
'mywatchlist' => 'Күзәтү исемлеге',
'watchlistfor2' => '$1 $2 өчен',
'nowatchlist' => 'Күзәтү исемлегегездә битләр юк.',
'blanknamespace' => '(Төп)',
# Contributions
-'contributions' => 'Кулланучының кертеме',
+'contributions' => '{{GENDER:$1|Кулланучының} кертеме',
'contributions-title' => '$1 исемле кулланучының кертеме',
'mycontris' => 'Кертем',
'contribsub2' => '$1 ($2) өчен',
'listgrouprights-helppage' => 'Help:Törkemnärneñ xoquqları',
'listgrouprights-members' => '(törkem isemlege)',
-# E-mail user
+# Email user
'emailuser' => 'Bu qullanuçığa xat',
'emailpage' => 'Qullanuçığa xat cibärü',
'defemailsubject' => '{{SITENAME}}: xat',
'loginlanguagelabel' => 'تىل: $1',
'suspicious-userlogout' => 'تىزىمدىن چىقىش ئىلتىماسىڭىز رەت قىلىندى، چۈنكى ئۇ بەلكىم بۇزۇلغان توركۆرگۈ ياكى غەملەك ۋاكالەتچىسى يوللىغان بولۇشى مۇمكىن.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق',
'user-mail-no-addy' => 'ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.',
'user-mail-no-body' => 'بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.',
'prefs-displaywatchlist' => 'كۆرسىتىش تاللانما',
'prefs-diffs' => 'پەرقلەر',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'ئېلخەت ئادرېسى ئىناۋەتلىك',
'email-address-validity-invalid' => 'ئىناۋەتلىك ئېلخەت ئادرېسىدىن بىرنى كىرگۈزۈڭ',
'listgrouprights-addgroup-self-all' => 'شەخسىي ھېساباتىمغا ھەممە گۇرۇپپىنى قوش',
'listgrouprights-removegroup-self-all' => 'شەخسىي ھېساباتىمدىن ھەممە گۇرۇپپىنى چىقىرىۋەت',
-# E-mail user
+# Email user
'mailnologin' => 'يوللايدىغان ئادرېس يوق',
'mailnologintext' => 'سىز ئالدى بىلەن [[Special:UserLogin|تىزىمغا كىر]]ىپ، [[Special:Preferences|مايىللىق]] تەڭشىكىدە ئىناۋەتلىك ئېلخەت ئادرېسىڭىزدىن بىرسى بولغاندا ئاندىن باشقا ئىشلەتكۈچىلەرگە ئېلخەت يوللىيالايسىز.',
'emailuser' => 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا',
'monthsall' => 'ھەممىسى',
'limitall' => 'ھەممىسى',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'جەزملەش ئېلخەت ئادرېسى',
'confirmemail_noemail' => 'سىز ئۆزىڭىزنىڭ [[Special:Preferences|user مايىللىق]] تەڭشىكىڭىزگە ئىناۋەتلىك ئېلخەت ئادرېسى كىرگۈزمەپسىز.',
'confirmemail_text' => '{{SITENAME}} ئېلخەت ئىقتىدارى ئىشلىتىشتىن ئىلگىرى ئېلخەت ئادرېسىڭىزنى دەلىللەشنى تەلەپ قىلىدۇ.
# Special:PasswordReset
'passwordreset' => 'Скинути пароль',
-'passwordreset-text' => 'Ð\97аповнÑ\96Ñ\82Ñ\8c Ñ\84оÑ\80мÑ\83, Ñ\89об оÑ\82Ñ\80имаÑ\82и по ел. поÑ\88Ñ\82Ñ\96 нагадÑ\83ваннÑ\8f пÑ\80о данÑ\96 Ð\92аÑ\88ого облÑ\96кового запиÑ\81Ñ\83.',
+'passwordreset-text' => 'Ð\97аповнÑ\96Ñ\82Ñ\8c Ñ\86Ñ\8e Ñ\84оÑ\80мÑ\83 длÑ\8f вÑ\96дновленнÑ\8f паÑ\80олÑ\8f.',
'passwordreset-legend' => 'Перевстановити пароль',
'passwordreset-disabled' => 'У цій вікі вимкнена можливість скидання пароля.',
'passwordreset-pretext' => '{{PLURAL:$1||Введіть одну з частин даних}}',
Ви маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший, або Ви пам'ятаєте свій старий пароль і не бажаєте його змінювати, можете просто проігнорувати це повідомлення та продовжувати використовувати старий пароль.",
'passwordreset-emailelement' => "Ім'я користувача: $1
Тимчасовий пароль: $2",
-'passwordreset-emailsent' => 'Ð\9dагадÑ\83валÑ\8cний елекÑ\82Ñ\80онний лиÑ\81Ñ\82 відправлений.',
+'passwordreset-emailsent' => 'Ð\95лекÑ\82Ñ\80онний лиÑ\81Ñ\82 длÑ\8f вÑ\96дновленнÑ\8f паÑ\80олÑ\8f відправлений.',
'passwordreset-emailsent-capture' => 'Електронний лист-нагадування був надісланий, як показано нижче.',
-'passwordreset-emailerror-capture' => 'Електронний лист-нагадування мав бути надісланий, як показано нижче, але його вдправка не вдалась через причину: $1',
+'passwordreset-emailerror-capture' => 'Електронний лист для відновлення пароля мав бути надісланий, як показано нижче, але його надсилання користувачеві $1 не вдалося.',
# Special:ChangeEmail
'changeemail' => 'Змінити адресу електронної пошти',
Сторінка вважається багатозначною, якщо на ній розміщений шаблон, назва якого є на сторінці [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Сторінки з перевизначеними властивостями',
+'pageswithprop-legend' => 'Сторінки з перевизначеними властивостями',
'pageswithprop-text' => 'Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.',
'pageswithprop-prop' => 'Назва властивості:',
+'pageswithprop-submit' => 'Перейти',
'doubleredirects' => 'Подвійні перенаправлення',
'doubleredirectstext' => 'На цій сторінці наведено список перенаправлень на інші перенаправлення.
'duration-centuries' => '$1 {{PLURAL:$1|століття|століття|століть}}',
'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
-# Unknown messages
-'pageswithprop-legend' => 'Сторінки з перевизначеними властивостями',
-'pageswithprop-submit' => 'Перейти',
+# Image rotation
+'rotate-comment' => 'Зображення повернуте на $1 {{PLURAL:$1|градус|градусів}} за годинниковою стрілкою',
+
);
دوبارہ کوشش کرنے سے پہلے انتظار فرمائیے.',
'loginlanguagelabel' => 'زبان: $1',
-# E-mail sending
+# Email sending
'user-mail-no-addy' => 'برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ',
# Change password dialog
# Special:ListGroupRights
'listgrouprights-members' => '(اراکین کی فہرست)',
-# E-mail user
+# Email user
'mailnologintext' => 'دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔',
'emailuser' => 'صارف کو برقی خط لکھیں',
'defemailsubject' => '{{SITENAME}} سے برقی خط',
'tog-nocache' => 'Brauzer sahifalarni kesh xotirasida saqlamasin',
'tog-enotifwatchlistpages' => 'Kuzatuv roʻyxatimdagi sahifa yoki fayllar oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
'tog-enotifusertalkpages' => 'Munozara sahifam oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
+'tog-enotifminoredits' => 'Kichik tahrir qilinsa ham e-pochtamga bu haqda xat yuborilsin',
+'tog-enotifrevealaddr' => 'Xabar beruvchi xatlarda e-pochta manzilim koʻrsatilsin',
+'tog-shownumberswatching' => 'Sahifani kuzatuv roʻyxatiga olgan foydalanuvchilar sonini koʻrsatish',
'tog-oldsig' => 'Joriy imzo:',
'tog-fancysig' => 'Imzoni viki-belgi qilib koʻrsatish (avtomatik ishoratsiz)',
+'tog-externaleditor' => 'Sukut boʻyicha tashqi tahrirlash dasturidan foydalanish (faqat mutaxassislar uchun, kompyuteringizda maxsus moslamalar boʻlishi zarur. [//www.mediawiki.org/wiki/Manual:External_editors Batafsil])',
+'tog-externaldiff' => 'Sukut boʻyicha tashqi taqqoslash dasturidan foydalanish (faqat mutaxassislar uchun, kompyuteringizda maxsus moslamalar boʻlishi zarur. [//www.mediawiki.org/wiki/Manual:External_editors Batafsil])',
'tog-showjumplinks' => 'yordamchi "tez oʻtish" havolalarini yoqish',
+'tog-uselivepreview' => 'Tez koʻrib chiqish (JavaScript orqali) (sinovda)',
+'tog-forceeditsummary' => 'Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatilsin',
+'tog-watchlisthideown' => 'Oʻz tahrirlarim kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthidebots' => 'Botlar qilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthideminor' => 'Kichik tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthideliu' => 'Tizimga kirgan foydalanuvchilar tahrirlari kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthideanons' => 'Anonim foydalanuvchilar tahrirlari kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthidepatrolled' => 'Tekshirilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
'tog-ccmeonemails' => 'Boshqa ishtirokchilarga yozgan xatimning nusxasi oʻzimning e-pochtamga joʻnatilsin.',
+'tog-diffonly' => 'Versiyalar taqqoslanayotganda, pastda sahifa matni koʻrsatilmasin',
'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsatish',
'tog-noconvertlink' => "Sarlavhaga aylantirish dastagini o'chirib qo'yish",
+'tog-norollbackdiff' => 'Tahrir qaytarilganda, versiyalar taqqosini koʻrsatish kerak emas',
'underline-always' => 'Har doim',
'underline-never' => 'Hech qachon',
'underline-default' => 'Brauzer moslamari boʻyicha',
# Font style option in Special:Preferences
-'editfont-style' => 'Tahrirlash maydoni bosma harflari turi',
+'editfont-style' => 'Tahrirlash maydonidagi shrift turi:',
'editfont-default' => 'Brauzer moslamari boʻyicha',
-'editfont-monospace' => 'Monoenli bosma harflar',
-'editfont-sansserif' => 'Sans-serif bosma harflari',
-'editfont-serif' => 'Serif bosma harflari',
+'editfont-monospace' => 'Teng enli shrift (Monospaced)',
+'editfont-sansserif' => 'Kertiksiz shrift (Sans-serif)',
+'editfont-serif' => 'Kertikli shrift (Serif)',
# Dates
'sunday' => 'Yakshanba',
'dec' => 'dek',
# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Turkum|Turkumlar}}',
+'pagecategories' => '{{PLURAL:$1|Turkum}}',
'category_header' => '"$1" turkumidagi maqolalar.',
'subcategories' => 'Ostturkumlar',
'category-media-header' => '"$1" turkumidagi fayllar',
'category-empty' => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
-'hidden-categories' => '{{PLURAL:$1|Yashirin turkum|Yashirin turkumlar}}',
+'hidden-categories' => '{{PLURAL:$1|Yashirin turkum}}',
'hidden-category-category' => 'Yashirin turkumlar',
-'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|ostturkum|$1 ostturkumlar}}, hammasi boʻlib $2 ta ostturkum mavjud.}}',
-'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}}, hammasi boʻlib $2 ta sahifa mavjud.}}',
-'category-file-count' => "{{PLURAL:$2|Ushbu turkum faqat bitta faylga ega.|Ushbu turkumdagi $2 ta fayldan quyidagi $1 tasi ko'rsatildi.}}",
+'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Quyida ushbu turkumga kiruvchi $2 ta ostturkumdan $1 tasi koʻrsatilgan.}}',
+'category-subcat-count-limited' => 'Ushbu turkumda $1 ta ostturkum mavjud.',
+'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Quyida ushbu turkumga kiruvchi $2 ta sahifadan $1 tasi koʻrsatilgan.}}',
+'category-article-count-limited' => 'Ushbu turkumda $1 ta sahifa mavjud.',
+'category-file-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta fayl mavjud.|Quyida ushbu turkumga kiruvchi $2 ta fayldan $1 tasi koʻrsatilgan.}}',
+'category-file-count-limited' => 'Ushbu turkumda $1 ta fayl mavjud.',
'listingcontinuesabbrev' => 'davomi',
'index-category' => 'Indekslanadigan sahifalar',
'noindex-category' => 'Indekslanmaydigan sahifalar',
-'broken-file-category' => 'Ishlamaydigan fayl havolalariga ega sahifalar',
+'broken-file-category' => 'Ishlamaydigan fayl havolalari bor sahifalar',
'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xffʻʼ«„]+)$/sDu',
'newwindow' => '(yangi oynada ochiladi)',
'cancel' => 'Bekor qilish',
'moredotdotdot' => 'Batafsil...',
+'morenotlisted' => 'Boshqa hech nima yoʻq...',
'mypage' => 'Sahifa',
-'mytalk' => 'Munozaram',
-'anontalk' => 'Bu IP uchun suhbat',
+'mytalk' => 'Munozara',
+'anontalk' => 'Ushbu IP-manzil munozarasi',
'navigation' => 'Saytda harakatlanish',
'and' => ' va',
# Cologne Blue skin
'qbfind' => 'Qidiruv',
-'qbbrowse' => "Ko'rish",
+'qbbrowse' => 'Koʻrish',
'qbedit' => 'Tahrirlash',
-'qbpageoptions' => 'Ushbu sahifa',
-'qbmyoptions' => 'Mening sahifalarim',
+'qbpageoptions' => 'Ushbu sahifa moslamalari',
+'qbmyoptions' => 'Moslamalarim',
'qbspecialpages' => 'Maxsus sahifalar',
'faq' => 'TSS',
'faqpage' => 'Project:TSS',
'vector-action-move' => 'Ko‘chirish',
'vector-action-protect' => 'Himoyalash',
'vector-action-undelete' => 'Tiklash',
-'vector-action-unprotect' => "Himoyani o'zgartirish",
-'vector-simplesearch-preference' => 'Soddalashtirilgan qidiruv uskunasini yoqish (faqat "Vektor" tashqi ko\'rinishi uchun)',
+'vector-action-unprotect' => 'Himoyalashni oʻzgartirish',
+'vector-simplesearch-preference' => 'Soddalashtirilgan qidiruv qatorini koʻrsat (faqat «Vektorli» tashqi koʻrinish uchun)',
'vector-view-create' => 'Yaratish',
'vector-view-edit' => 'Tahrirlash',
'vector-view-history' => 'Tarix',
'vector-view-view' => 'Mutolaa',
-'vector-view-viewsource' => "Manbasini ko'rish",
+'vector-view-viewsource' => 'Manbasini koʻrish',
'actions' => 'Amallar',
'namespaces' => 'Nomfazolar',
'variants' => 'Variantlar',
+'navigation-heading' => 'Navigatsiya',
'errorpagetitle' => 'Xato',
'returnto' => '$1 sahifasiga qaytish.',
-'tagline' => '{{SITENAME}} dan',
+'tagline' => '{{SITENAME}} dan olingan',
'help' => 'Yordam',
'search' => 'Qidiruv',
'searchbutton' => 'Qidirish',
-'go' => "O'tish",
+'go' => 'Oʻtish',
'searcharticle' => 'O‘tish',
'history' => 'Sahifa tarixi',
'history_short' => 'Tarix',
-'updatedmarker' => 'mening oxirgi tashrifimdan keyin yangilandi',
+'updatedmarker' => 'oxirgi tashrifimdan keyingi oʻzgarishlar',
'printableversion' => 'Bosma uchun versiya',
'permalink' => 'Doimiy ishorat',
-'print' => 'Chop et',
+'print' => 'Chop etish',
'view' => 'Koʻrish',
'edit' => 'Tahrirlash',
'create' => 'Yaratish',
-'editthispage' => 'Sahifani tahrirlash',
+'editthispage' => 'Ushbu sahifani tahrirlash',
'create-this-page' => 'Ushbu sahifani yaratish',
'delete' => 'O‘chirish',
'deletethispage' => 'Ushbu sahifani o‘chirish',
-'undelete_short' => '{{PLURAL:$1|tahrir|$1 tahrirlar}}ni tiklash',
-'viewdeleted_short' => "{{PLURAL:$1|o'chirilgan tahrir|$1 ta o'chirilgan tahrirlar}}ni ko'rish",
+'undelete_short' => '$1 ta tahrirni tiklash',
+'viewdeleted_short' => '$1 ta oʻchirilgan tahrirni koʻrish',
'protect' => 'Himoyalash',
-'protect_change' => 'o‘zgartirish',
+'protect_change' => 'Oʻzgartirish',
'protectthispage' => 'Ushbu sahifani himoyalash',
'unprotect' => 'Himoyadan chiqarish',
-'unprotectthispage' => "Ushbu sahifaning himoyasini o'zgaritish",
+'unprotectthispage' => 'Ushbu sahifaning himoyasini oʻzgaritish',
'newpage' => 'Yangi sahifa',
'talkpage' => 'Bu sahifa haqida munozara',
-'talkpagelinktext' => 'munozara',
+'talkpagelinktext' => 'Munozara',
'specialpage' => 'Maxsus sahifa',
'personaltools' => 'Shaxsiy uskunalar',
'postcomment' => 'Yangi boʻlim',
-'articlepage' => 'Sahifani ko‘rish',
+'articlepage' => 'Maqolani koʻrib chiqish',
'talk' => 'Munozara',
-'views' => 'Ko‘rinishlar',
+'views' => 'Qarashlar',
'toolbox' => 'Asboblar',
-'userpage' => "Foydalanuvchi sahifasini ko'rish",
-'projectpage' => "Loyiha sahifasini ko'rish",
-'imagepage' => "Fayl sahifasini ko'rish",
-'mediawikipage' => "Xabar sahifasini ko'rsatish",
-'templatepage' => "Andoza sahifasini ko'rish",
+'userpage' => 'Foydalanuvchi sahifasini koʻrish',
+'projectpage' => 'Loyiha sahifasini koʻrish',
+'imagepage' => 'Fayl sahifasini koʻrish',
+'mediawikipage' => 'Xabar sahifasini koʻrsatish',
+'templatepage' => 'Andoza sahifasini koʻrish',
'viewhelppage' => 'Yordam olish',
-'categorypage' => 'Turkum sahifasi',
+'categorypage' => 'Turkum sahifasini koʻrish',
'viewtalkpage' => 'Munozarani koʻrish',
'otherlanguages' => 'Boshqa tillarda',
'redirectedfrom' => '($1dan yoʻnaltirildi)',
'redirectpagesub' => 'Yoʻnaltiruvchi sahifa',
-'lastmodifiedat' => 'Bu sahifa oxirgi marta $2, $1 sanasida tahrirlangan.',
+'lastmodifiedat' => 'Bu sahifa oxirgi marta $1 soat $2 da tahrirlangan.',
'viewcount' => 'Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.',
'protectedpage' => 'Himoyalangan sahifa',
'jumpto' => 'Oʻtish:',
'jumptonavigation' => 'saytda harakatlanish',
'jumptosearch' => 'qidiruv',
-'pool-timeout' => "Muhosara (to'sish) ni kutish vaqti tugadi",
-'pool-queuefull' => "So'rovlar jamlanmasi to'ldi",
-'pool-errorunknown' => "Noma'lum xato",
+'view-pool-error' => 'Uzr, ayni paytda serverlarga ortiqcha yuk tushgan.
+Bu sahifaga birdaniga koʻpchilik kirmoqchi boʻldi.
+Iltimos, biroz kutib turing va keyin yangitdan kirishga urinib koʻring.
+
+$1',
+'pool-timeout' => 'Toʻsishni kutish vaqti tugadi',
+'pool-queuefull' => 'Soʻrovlar jamlanmasi toʻldi',
+'pool-errorunknown' => 'Nomaʼlum xato',
# 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) and the disambiguation template definition (see disambiguations).
'aboutsite' => '{{SITENAME}} haqida',
'aboutpage' => 'Project:Haqida',
-'copyright' => 'Kontent $1 ostidadir.',
+'copyright' => 'Keltirilgan maʼlumotlar $1 orqali tarqatilmoqda.',
'copyrightpage' => '{{ns:project}}:Mualliflik huquqlari',
'currentevents' => 'Joriy hodisalar',
'currentevents-url' => 'Project:Joriy hodisalar',
'nstab-category' => 'Turkum',
# Main script and global functions
-'nosuchaction' => "Bunday amal yo'q",
-'nosuchspecialpage' => "Bunday maxsus sahifa yo'q",
+'nosuchaction' => 'Bunday amal yoʻq',
+'nosuchspecialpage' => 'Bunday maxsus sahifa yoʻq',
# General errors
'error' => 'Xato',
-'laggedslavemode' => "'''Diqqat:''' sahifa oxirgi yangilashlarga ega bo'lmasligi mumkin.",
-'readonly' => "Ma'lumotlar bazasiga yozish to'sildi",
+'laggedslavemode' => "'''Diqqat:''' sahifada oxirgi yangilanishlar koʻrsatilmagan boʻlishi mumkin.",
+'readonly' => 'Maʼlumotlar bazasiga yozish toʻsilgan',
'missingarticle-rev' => '(versiya №: $1)',
'missingarticle-diff' => '(Farq: $1, $2)',
'internalerror' => 'Ichki xato',
'internalerror_info' => 'Ichki xato: $1',
'badtitle' => 'Notoʻgʻri sarlavha',
-'viewsource' => "Manbasini ko'rish",
+'viewsource' => 'Manbasini koʻrish',
'viewsource-title' => "$1 sahifasining manbasini ko'rish",
'actionthrottled' => "Tezlik bo'yicha cheklov",
'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
-'viewsourcetext' => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
+'viewsourcetext' => 'Siz bu sahifaning manbasini koʻrishingiz va uni nusxasini olishingiz mumkin:',
'editinginterface' => "'''Diqqat:''' Siz dasturiy ta'minot interfeysi matni mavjud bo'lgan sahifani tahrirlamoqdasiz.
Uning o'zgartirilishi ushbu vikidagi boshqa foydalanuvchilar uchun ham interfeysning tashqi ko'rinishiga ta'sir qiladi.
Ushbu xabar tarjimasini qo'shish yoki o'zgartirish uchun, iltimos, MediaWikining [//translatewiki.net/ translatewiki.net] lokalizatsiya saytidan foydalaning.",
'remembermypassword' => 'Hisob ma’lumotlarim ushbu brauzerda eslab qolinsin (ko‘pi bilan $1 {{PLURAL:$1|kunga|kunga}})',
'securelogin-stick-https' => "Kirgandan keyin HTTPS bo'yicha ulanishni davom ettirish",
'yourdomainname' => 'Sizning domeningiz:',
-'password-change-forbidden' => "Siz bu vikida maxfiy so'zni o'zgartira olmaysiz.",
+'password-change-forbidden' => 'Siz bu vikida maxfiy soʻzni oʻzgartira olmaysiz.',
'login' => 'Kirish',
'nav-login-createaccount' => 'Kirish / Hisob yaratish',
'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
'createaccounterror' => "Hisob yozuvini yaratishning iloji yo'q: $1",
'loginsuccesstitle' => 'Kirish muvaffaqiyatli amalga oshdi',
'loginsuccess' => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
-'nosuchusershort' => '"$1" ismli ishtirokchi yoʻq.
-Xatosiz yozishga urinib koʻring.',
+'nosuchusershort' => '"$1" ismli foydalanuvchi yoʻq.
+Ism yozilishini tekshirib koʻring.',
'nouserspecified' => "Siz foydalanuvchining ismini ko'rsatishingiz lozim.",
'login-userblocked' => "Bu foydalanuvchi muhosara qilingan. Tizimga kirishga ruxsat yo'q.",
'wrongpassword' => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
# Special:PasswordReset
'passwordreset-legend' => "Maxfiy so'zni yo'q qilish",
-'passwordreset-username' => 'Ishtirokchi nomi:',
+'passwordreset-username' => 'Foydalanuvchi nomi:',
'passwordreset-domain' => 'Domen:',
'passwordreset-email' => 'Elektron pochta manzili:',
'passwordreset-emailelement' => "Foydalanuvchi ismi: $1
# Revision deletion
'rev-deleted-comment' => "(tahrir izohi o'chirildi)",
-'rev-deleted-user' => "(ishtirokchi ismi o'chirildi)",
+'rev-deleted-user' => '(muallif nomi oʻchirilgan)',
'rev-deleted-event' => "(qayd yozuvi o'chirildi)",
'rev-delundel' => 'koʻrsatish/yashirish',
'rev-showdeleted' => 'koʻrsatish',
'group-suppress' => 'Tekshiruvchilar',
'group-all' => '(hamma)',
-'group-user-member' => '{{GENDER:$1|ishtirokchi}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|avtotasdiqlangan ishtirokchi}}',
+'group-user-member' => '{{GENDER:$1|foydalanuvchi}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|avtotasdiqlangan foydalanuvchi}}',
'group-bot-member' => '{{GENDER:$1|bot}}',
'group-sysop-member' => '{{GENDER:$1|administrator}}',
'group-bureaucrat-member' => '{{GENDER:$1|rasmiyatchi}}',
'right-edit' => 'Sahifalarni tahrirlash',
# Special:Log/newusers
-'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
+'newuserlogpage' => 'Foydalanuvchilarni roʻyxatga olish qaydlari',
'newuserlogpagetext' => 'Yaqinda roʻyxatdan oʻtgan foydalanuvchilar roʻyxati',
# User rights log
-'rightslog' => "Ishtirokchi huquqlari bo'yicha qaydlar",
+'rightslog' => 'Foydalanuvchi huquqlari koʻrsatilgan qaydlar',
# Associated actions - in the sentence "You do not have permission to X"
'action-edit' => 'ushbu sahifani tahrirlash',
'nchanges' => "$1 {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
'recentchanges' => 'Yangi oʻzgarishlar',
'recentchanges-legend' => 'Yangi tahrirlar moslamalari',
-'recentchanges-summary' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
+'recentchanges-summary' => 'Bu sahifada siz oxirgi oʻzgarishlarni koʻrishingiz mumkin.',
'recentchanges-feed-description' => "Vikida mazkur oqimdagi oxirgi o'zgarishlarni kuzatish",
'recentchanges-label-newpage' => 'Bu tahrir orqali yangi sahifa yaratildi',
'recentchanges-label-minor' => 'Bu kichik tahrir',
'recentchanges-label-bot' => 'Bu tahrirni bot bajardi',
'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
-'rcnote' => "Quyida $5, $4ga koʻra oxirgi {{PLURAL:$2|kun|'''$2''' kun}} davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgartirish|'''$1''' oʻzgartirishlar}} koʻrsatilgan.",
+'rcnote' => "Quyida $4 soat $5 ga koʻra oxirgi '''$2''' kun davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgarish|'''$1''' oʻzgarishlar}} koʻrsatilgan.",
'rcnotefrom' => "Quyida <strong>$2</strong> dan (<strong>$1</strong> gacha) bo'lgan o'zgarishlar keltirilgan.",
-'rclistfrom' => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
+'rclistfrom' => '$1 dan boshlab yangi oʻzgarishlarni koʻrsat.',
'rcshowhideminor' => 'Kichik tahrirlarni $1',
'rcshowhidebots' => '$1 ta bot',
'rcshowhideliu' => 'Ro‘yxatdan o‘tgan foydalanuvchilar: $1 ta',
'rcshowhideanons' => 'Anonim foydalanuvchilar: $1 ta',
'rcshowhidepatr' => 'Tekshirilgan tahrirlarni $1',
'rcshowhidemine' => "O'z tahrirlarimni $1",
-'rclinks' => "Oxirgi $2 kun davomida sodir bo'lgan $1 o'zgartirishlarni ko'rsat.<br />$3",
+'rclinks' => 'Oxirgi $2 kun ichida sodir boʻlgan $1 oʻzgarishlar koʻrsatildi.<br />$3',
'diff' => 'farq',
'hist' => 'tarix',
'hide' => 'Yashirish',
# Special:Log
'specialloguserlabel' => 'Ijrochi:',
-'speciallogtitlelabel' => "Mo'ljal (nom yoki ishtirokchi):",
+'speciallogtitlelabel' => 'Moʻljal (nom yoki foydalanuvchi):',
'log' => 'Qaydlar',
'all-logs-page' => 'Barcha ochiq qaydlar',
'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
'noemailtext' => 'Bu foydalanuvchi e-mail manzil koʻrsatgani yoʻq.',
'nowikiemailtitle' => 'Maktub joʻnatishga ruxsat yoʻq',
'emailtarget' => 'Oluvchi ishtirokchining ismini kiriting',
-'emailusername' => 'Ishtirokchi nomi:',
+'emailusername' => 'Foydalanuvchi nomi:',
'emailusernamesubmit' => "Jo'natish",
'email-legend' => "Boshqa {{SITENAME}} ishtirokchisiga xat jo'natish",
'emailfrom' => 'Kimdan:',
'enotif_body_intro_changed' => '{{SITENAME}} loyihasining $1 nomli sahifasi $PAGEEDITDATEda foydalanuvchi {{gender:$2|$2}} tomonidan o‘zgartirildi, joriy variantini ko‘rish uchun $3 ga qarang.',
'enotif_lastvisited' => "Oxirgi tashrifingizdan buyon sodir bo'lgan barcha o'zgarishlarni ko'rish uchun $1 ga qarang.",
'enotif_lastdiff' => "O'zgarishlar bilan tanishish uchun $1 ga qarang.",
-'enotif_anon_editor' => 'anonim ishtirokchi $1',
+'enotif_anon_editor' => 'anonim foydalanuvchi $1',
'enotif_body' => 'Hurmatli $WATCHINGUSERNAME,
$PAGEINTRO $NEWPAGE
'tooltip-ca-nstab-help' => "Yordam sahifasini ko'rish",
'tooltip-ca-nstab-category' => 'Turkum sahifasini koʻrish',
'tooltip-minoredit' => 'Kichik o‘zgartirish sifatida belgilash',
-'tooltip-save' => "O'zgarishlarni saqlash",
+'tooltip-save' => 'Oʻzgarishlarni saqlash',
'tooltip-preview' => "O'zgarishlarni saqlash. Iltimos saqlashdan oldin uni ishlating!",
'tooltip-diff' => "Matnga qanday o'zgarishlar kiritganligingizni ko'rish.",
'tooltip-compareselectedversions' => "Bu sahifaning ikki tanlangan versiyalari o'rtasidagi farqni ko'rish.",
# Info page
'pageinfo-title' => '"$1" sahifasi haqida maʼlumot',
'pageinfo-header-basic' => 'Asosiy maʼlumot',
-'pageinfo-header-edits' => "O'zgarishlar tarixi",
-'pageinfo-display-title' => "Ko'rsatiladigan sarlavha",
+'pageinfo-header-edits' => 'Oʻzgarishlar tarixi',
+'pageinfo-display-title' => 'Koʻrsatiladigan sarlavha',
'pageinfo-article-id' => 'Sahifa identifikatori',
'pageinfo-watchers' => 'Sahifa kuzatuvchilari soni',
'pageinfo-edits' => 'Jami tahrirlar soni',
'file-info-size' => '$1 × $2 piksel, fayl hajmi: $3, MIME tipi: $4',
'file-nohires' => 'Bundan kattaroq tasvir yoʻq.',
'svg-long-desc' => 'SVG fayl, asl oʻlchamlari $1 × $2 piksel, fayl hajmi: $3',
-'show-big-image' => "To'liq hajmdagi tasvir",
+'show-big-image' => 'Toʻliq hajmdagi tasvir',
# Special:NewFiles
'noimages' => 'Tasvir mavjud emas.',
# Metadata
'metadata' => 'Metama’lumot',
-'metadata-expand' => 'Batafsil axborot koʻrsatisg',
+'metadata-expand' => 'Batafsil axborotni koʻrsatish',
'metadata-collapse' => 'Batafsil axborotni yashirish',
# EXIF tags
'loginlanguagelabel' => 'Lengua: $1',
'suspicious-userlogout' => 'Ła to richiesta de disconesion xè sta negà parché e a senbra invià da on browser non funsionante o on proxy de caching.',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
'user-mail-no-addy' => 'Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.',
'user-mail-no-body' => 'Tentà de inviar na e-mail có un testo vodo o masa curto.',
'prefs-displaywatchlist' => 'Opzioni de visualixassion',
'prefs-diffs' => 'Difarense',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => "L'indiriso de posta eletronega pararìa vałido",
'email-address-validity-invalid' => 'Inserisi un indiriso de posta eletronega vałido',
'listgrouprights-addgroup-self-all' => 'Pol xontarse a tuti i grupi',
'listgrouprights-removegroup-self-all' => 'Pol cavarse da tuti i grupi',
-# E-mail user
+# Email user
'mailnologin' => 'Nissun indirizo a cui mandarghe el messagio',
'mailnologintext' => 'Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].',
'emailuser' => 'Scrìveghe a sto utente',
'monthsall' => 'tuti',
'limitall' => 'tuti quanti',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Conferma indirisso e-mail',
'confirmemail_noemail' => 'No te ghè indicà un indirizo e-mail valido ne le to [[Special:Preferences|preferense]].',
'confirmemail_text' => "{{SITENAME}} el richiede la verifica de l'indirizo e-mail prima che te possi doparar le funzion ligà a l'e-mail.
'login-abort-generic' => 'Teiden naprind tulda sistemha om satusetoi - Azotadud',
'loginlanguagelabel' => 'Kel’: $1',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => 'Tundmatoi petuz PHP:n mail()-funkcijas',
# Change password dialog
'prefs-displaywatchlist' => 'Nägun opcijad',
'prefs-diffs' => 'Erod',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => 'Verkpočtan adres nägub korrektižeks.',
'email-address-validity-invalid' => 'Antkat verkpočtan korrektine adres',
'listgrouprights-addgroup-self-all' => 'Sab ližata kaik gruppad ičeze sistemkirjutandha',
'listgrouprights-removegroup-self-all' => 'Sab heitta poiš kaik gruppad ičeze sistemkirjutandaspäi',
-# E-mail user
+# Email user
'mailnologin' => 'Ei ole adresan oigendamižen täht',
'emailuser' => 'Oigeta e-kirjeine necile kävutajale',
'emailpage' => 'Kirjeine kävutajale',
'monthsall' => 'kaik',
'limitall' => 'kaik',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Vahvištoitta e-počtan adres',
'confirmemail_send' => 'Oigekat vahvištoitandkod',
'confirmemail_sent' => 'E-počtan adresan vahvištoitandkod om oigetud.',
'passwordsent' => 'Mật khẩu mới đã được gửi tới thư điện tử của thành viên “$1”. Xin đăng nhập lại sau khi nhận thư.',
'blocked-mailpassword' => 'Địa chỉ IP của bạn bị cấm không được sửa đổi, do đó cũng không được phép dùng chức năng phục hồi mật khẩu để tránh lạm dụng.',
'eauthentsent' => 'Thư xác nhận đã được gửi. Trước khi dùng chức năng nhận thư, bạn cần thực hiện hướng dẫn trong thư xác nhận, để đảm bảo tài khoản thuộc về bạn.',
-'throttled-mailpassword' => 'Mật khẩu đã được gửi đến cho bạn trong vòng {{PLURAL:$1|$1 giờ|$1 giờ}} đồng hồ trở lại. Để tránh lạm dụng, chỉ có thể gửi mật khẩu $1 giờ đồng hồ một lần.',
+'throttled-mailpassword' => 'Mật khẩu đã được gửi đến cho bạn trong vòng {{PLURAL:$1|$1 giờ|$1 giờ}} đồng hồ trở lại. Để tránh lạm dụng, chỉ có thể gửi mật khẩu {{PLURAL:$1|$1 giờ|$1 giờ}} đồng hồ một lần.',
'mailerror' => 'Lỗi gửi thư : $1',
'acct_creation_throttle_hit' => 'Ai đó cùng [[địa chỉ IP]] với bạn đã mở {{PLURAL:$1|một tài khoản|$1 tài khoản}} ở đây trong vòng 24 giờ. Vì quy định hạn chế số tài khoản mở trên một địa chỉ IP nên bạn hiện không thể mở thêm được nữa dùng địa chỉ IP này.',
'emailauthenticated' => 'Địa chỉ thư điện tử của bạn được xác nhận vào lúc $3 $2.',
# Special:PasswordReset
'passwordreset' => 'Tái tạo mật khẩu',
-'passwordreset-text' => 'Hãy điền mẫu đơn này để nhận thư điện tử nhắc nhở về thông tin tài khoản của bạn.',
+'passwordreset-text' => 'Hãy điền mẫu đơn này để tái tạo mật khẩu.',
'passwordreset-legend' => 'Tái tạo mật khẩu',
'passwordreset-disabled' => 'Chức năng tái tạo mật khẩu đã bị tắt trên wiki này.',
'passwordreset-pretext' => '{{PLURAL:$1||Nhập một trong những thông tin được yêu cầu ở dưới}}',
'passwordreset-capture-help' => 'Nếu bạn kiểm hộp này, bạn sẽ xem thư điện tử có mật khẩu tạm lúc khi nó được gửi cho người dùng.',
'passwordreset-email' => 'Địa chỉ thư điện tử:',
'passwordreset-emailtitle' => 'Thông tin tài khoản tại {{SITENAM}}',
-'passwordreset-emailtext-ip' => 'Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu một lời
-nhắc nhở các thông tin tài khoản của bạn tại {{SITENAME}} ($4).
-{{PLURAL:$3|Tài khoản|Các tài khoản}} ở dưới có đặt địa chỉ thư điện tử này:
+'passwordreset-emailtext-ip' => 'Ai đó (có thể là bạn, từ địa chỉ IP $1) đã yêu cầu tái tạo mật khẩu của bạn
+tại {{SITENAME}} ($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền
+với địa chỉ thư điện tử này:
$2
{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập
ngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu
-đặt lại mật khẩu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
-muốn thay đổi nó, xin vui lòng kệ thông điệp này và tiếp tục sử dụng
+hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
+muốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng
mật khẩu cũ.',
-'passwordreset-emailtext-user' => 'Thành viên $1 tại {{SITENAME}} đã yêu cầu một lời nhắc nhở
-các thông tin tài khoản của bạn tại {{SITENAME}} ($4). {{PLURAL:$3|Tài
-khoản|Các
-tài khoản}} ở dưới có đặt địa chỉ thư điện tử này:
+'passwordreset-emailtext-user' => 'Thành viên $1 tại {{SITENAME}} đã yêu cầu tái tạo mật khẩu tại {{SITENAME}}
+($4). {{PLURAL:$3|Tài khoản|Các tài khoản}} dưới đây gắn liền với địa chỉ thư điện tử này:
$2
{{PLURAL:$3|Mật khẩu|Các mật khẩu}} tạm này sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}. Bạn nên đăng nhập
-ngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu
-đặt lại mật khẩu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
-muốn thay đổi nó, xin vui lòng kệ thông điệp này và tiếp tục sử dụng
+ngay bây giờ để chọn mật khẩu mới. Nếu bạn không phải là người yêu cầu hoặc đã nhớ lại mật khẩu hiện hành, và bạn không còn
+muốn thay đổi nó, xin vui lòng bỏ qua thông điệp này và tiếp tục sử dụng
mật khẩu cũ.',
'passwordreset-emailelement' => 'Tên người dùng: $1
Mật khẩu tạm: $2',
-'passwordreset-emailsent' => 'Đã gửi thư điện tử nhắc nhở.',
-'passwordreset-emailsent-capture' => 'Thư điện tử nhắc nhở ở dưới đã được gửi:',
-'passwordreset-emailerror-capture' => 'Không thể gửi thư điện tử nhắc nhở ở dưới cho người dùng: $1',
+'passwordreset-emailsent' => 'Đã gửi thư điện tử để tái tạo mật khẩu.',
+'passwordreset-emailsent-capture' => 'Thư điện tử để tái tạo mật khẩu đã được gửi, nội dung như sau.',
+'passwordreset-emailerror-capture' => 'Chúng tôi đã tạo thư tái tạo mật khẩu dưới đây, nhưng không thể gửi đến người dùng: $1',
# Special:ChangeEmail
'changeemail' => 'Đổi địa chỉ thư điện tử',
'disambiguations-text' => "Các trang này có liên kết đến ít nhất một '''trang định hướng''', những trang này có thể có liên kết đến các trang đúng nghĩa hơn.<br />Các trang định hướng là trang sử dụng những bản mẫu được liệt kê ở [[MediaWiki:Disambiguationspage]].",
'pageswithprop' => 'Trang có thuộc tính trang',
+'pageswithprop-legend' => 'Các trang có thuộc tính trang',
'pageswithprop-text' => 'Trang này liệt kê các trang sử dụng một thuộc tính trang nào đó.',
'pageswithprop-prop' => 'Tên thuộc tính:',
+'pageswithprop-submit' => 'Xem',
'doubleredirects' => 'Đổi hướng kép',
'doubleredirectstext' => 'Trang này liệt kê các trang đổi hướng đến một trang đổi hướng khác.
'duration-centuries' => '$1 thế kỷ',
'duration-millennia' => '$1 thiên niên kỷ',
-# Unknown messages
-'pageswithprop-legend' => 'Các trang có thuộc tính trang',
-'pageswithprop-submit' => 'Xem',
+# Image rotation
+'rotate-comment' => 'Đã quay hình $1 độ theo chiều kim đồng hồ',
+
);
'listgrouprights-addgroup-all' => 'Kanon läükön grupis valik',
'listgrouprights-removegroup-all' => 'Kanon moükön grupis valik',
-# E-mail user
+# Email user
'mailnologin' => 'Ladet nonik ad sedön',
'mailnologintext' => 'Mutol [[Special:UserLogin|nunädön oli]] e labön ladeti leäktronik lonöföl pö [[Special:Preferences|buükams olik]] ad dalön sedön poti leäktronik gebanes votik.',
'emailuser' => 'Penön gebane at',
'monthsall' => 'valik',
'limitall' => 'valikis',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Fümedolös ladeti leäktronik',
'confirmemail_noemail' => 'No labol ladeti leäktronik lonöföl in [[Special:Preferences|gebanabuükams olik]].',
'confirmemail_text' => 'Vük at flagon, das ofümedol ladeti leäktronik ola büä odälon ole ad gebön poti leäktronik.
'listgrouprights' => 'Pruukjarühmi õigusõq',
'listgrouprights-members' => '(liikmidõ nimekiri)',
-# E-mail user
+# Email user
'mailnologin' => 'Olõ-i saatja aadrõssit',
'mailnologintext' => 'Sa piät olõma [[Special:UserLogin|nimega sisse lännüq]]
ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et sa saasiq tõisilõ pruukjilõ e-kirjo saataq.',
'namespacesall' => 'kõik',
'monthsall' => 'kõik',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Kinnüdäq e-postiaadrõssit',
'confirmemail_noemail' => 'Sul olõ-i [[Special:Preferences|ummi säädmiisihe]] pant kõlbolist e-postiaadrõssit.',
'confirmemail_text' => 'Taa viki nõud e-postiaadrõsi kinnütämist, inne ku e-posti pruukiq võit. Saadaq alanolõva nupi pääle vaotõn uma aadrõsi pääle kinnütüse küsümise kiri. Säält lövvät lingi, mink vaotamisõga kinnütät uma e-postiaadrõsi.',
'prefs-displaywatchlist' => 'Tchuzes di håynaedje',
'prefs-diffs' => 'Diferinces',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => "L' adresse emile a l' air d' esse valide",
'email-address-validity-invalid' => 'Dinez ene adresse emile valide',
# Special:ListGroupRights
'listgrouprights-members' => '(djivêye des mimbes)',
-# E-mail user
+# Email user
'mailnologin' => "Nole adresse d' evoyeu",
'mailnologintext' => "Po-z evoyî èn emile a èn ôte uzeu i vs fåt esse [[Special:UserLogin|elodjî]] eyet aveur ene adresse emile d' evoyeu ki soeye valide dins vos [[Special:Preferences|preferinces]].",
'emailuser' => "Emiler a l' uzeu",
'namespacesall' => 'tos',
'monthsall' => 'tos',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => "Acertinaedje di l' adresse emile",
'confirmemail_text' => "Ci wiki chal a mezåjhe ki vos acertinîz voste adresse emile
divant d' poleur eployî les fonccions d' emilaedje. Clitchîz sol boton
'noarticletext-nopermission' => 'Waray yana nahasurat hini nga pakli
Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,
o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan]</span>, kundi diri ka gintutugotan hin paghímò hini nga pakli.',
+'userpage-userdoesnotexist' => 'Diri nakarehistro an akawnt han gumaramit nga "$1".
+Alayon pagpamuruotbuot kun karuyag mo maghimo/mag-edit hini nga pakli.',
'userpage-userdoesnotexist-view' => "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
+'blocked-notice-logextract' => 'Ini nga gumaramit in nakapugong yana.
+An pinakaurhi nga log entry han mga pinugong in ginhatag ha ubos para hit reperensya:',
'updated' => '(Ginbag-ohan)',
'note' => "'''Pahibaro:'''",
'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
'prefs-user-pages' => 'Mga pakli hin gumaramit',
'prefs-personal' => 'Pangilal-an han nagamit',
'prefs-rc' => 'Kalalabay la nga mga pagbabag-o',
+'prefs-watchlist' => 'Listahan hit binabantayan',
'prefs-watchlist-days' => 'Mga adlaw nga makikita ha barantayan:',
'prefs-watchlist-days-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
'prefs-watchlist-edits-max' => 'Pinakadako nga ihap: 1000',
'default' => 'aada-nga-daan',
'prefs-files' => 'Mga paypay',
'youremail' => 'E-mail:',
-'username' => 'Agnay hiton gumaramit:',
-'uid' => 'ID han gumaramit:',
+'username' => '{{HENERO:$1|Agnay hit gumaramit}}:',
+'uid' => 'ID hit {{HENERO:$1|Gumaramit}}:',
'prefs-memberingroups' => 'Api han {{PLURAL:$1| nga hugpo|nga mga hugpo}}:',
'prefs-registration' => 'Oras han pagrehistro:',
'yourrealname' => 'Tinuod nga ngaran:',
'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
'grouppage-user' => '{{ns:project}}:Mga gumaramit',
+'grouppage-autoconfirmed' => '{{ns:project}}:Mga gumaramit nga naka-awtokompirmado',
'grouppage-bot' => '{{ns:project}}:Mga bot',
'grouppage-sysop' => '{{ns:project}}:Mga magdudumara',
'grouppage-bureaucrat' => '{{ns:project}}:Mga burokrata',
'right-movefile' => 'Balhina an mga paypay',
'right-upload' => 'Igkarga paigbaw an mga paypay',
'right-reupload' => 'Sapawa an mga aada nga mga paypay',
+'right-reupload-own' => 'Igsapaw an aada yana nga mga paypay nga ginkarga-pasaka nimo mismo',
'right-upload_by_url' => 'Igkarga paigbaw an mga paypay tikang ha uska URL',
+'right-autoconfirmed' => 'Igliwat an mga semi-pinanpasaliporan nga pakli',
'right-bot' => 'Igtrato komo uska naglulugaring nga proseso',
'right-delete' => 'Igpara an mga pakli',
'right-bigdelete' => 'Igpara an mga pakli nga may-ada dagko nga mga kaagi',
'action-protect' => 'igsaliwan an katupngan han pananalipod para hini nga pakli',
'action-import' => 'ig-angbit ini nga pakli tikang ha iba nga wiki',
'action-importupload' => 'ig-angbit ini nga pakli tikang ha uska ginkarga-pasaka nga paypay',
+'action-patrol' => 'markahi an kanan iba pagliwat komo nakapatrolya',
'action-mergehistory' => 'Igtampo an kaagi hini nga pakli',
'action-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
'action-sendemail' => 'Padara hin mga e-mail',
An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para han imo kamurayaw:",
'upload-permitted' => 'Gintutugotan nga mga klase han paypay: $1.',
+'upload-preferred' => 'Mas karugag nga mga tipo hin paypay: %1.',
'upload-prohibited' => 'Gindidire nga mga klase han paypay: $1.',
'uploadlog' => 'Talaan hin ginkarga-pasaka',
'uploadlogpage' => 'Talaan han mga ginkarga-paigbaw',
'filedesc' => 'Dalikyat nga pulong',
'fileuploadsummary' => 'Dalikyat nga pulong:',
'filereuploadsummary' => 'Mga pagbal-iw ha fayl:',
+'filestatus' => 'Kahimtang han copyright:',
'filesource' => 'Tinikangan:',
+'uploadedfiles' => 'Mga paypay nga ginkarga-pasaka',
'ignorewarning' => 'Pabay-i an pahimatngon ngan igtipig la ngahaw',
'ignorewarnings' => 'Pasagdi an bisan ano nga mga pahimatngon',
+'minlength1' => 'Iton ngaran-han-paypay in kinahanglan may-ada bisan usa la nga letra.',
'filename-toolong' => 'Iton ngaran hin paypay in diri puyde na mas lapos pa ha 240 ka mga byte.',
'badfilename' => 'An ngaran-han-paypay in ginliwat ngada ha "$1".',
+'empty-file' => 'An paypay nga imo ginsumite in waray sulod.',
'filename-tooshort' => 'An ngaran han fayl in halipot hin duro.',
'filetype-banned' => 'Ini nga klase nga paypay in gindidire.',
'illegal-filename' => 'An ngaran han fayl in diri gintutugutan.',
'large-file' => 'Ginrerekomenda nga it mga paypay in diri malapos hin $1;
ini nga paypay in $2.',
'largefileserver' => 'Ini nga paypay in durudako kaysa ha ginpapakarawat han serbidor.',
+'windows-nonascii-filename' => 'Ini nga wiki in diri nakasuportado han mga ngaran-han-paypay nga may-ada pinaurog nga mga karakter.',
'uploadwarning' => 'Pahimatngon han pagkarga paigbaw',
'savefile' => 'Igtipig an paypay',
'uploadedimage' => 'ginkarga-paigbaw "[[$1]]"',
'backend-fail-create' => 'Diri nasusuratan an paypay nga "$1".',
'backend-fail-maxsize' => 'Diri nasusuratan an paypay nga "$1" tungod nga mas dako ini kaysa hin {{PLURAL:"$2|usa nga byte|$2 nga mga byte}}.',
'backend-fail-readonly' => 'An panluyo nga tiripigan nga "$1" in ha pagkayana in panbasa-la. An rason nga ginhatag in: "\'\'$2\'\'"',
+'backend-fail-connect' => 'Diri nakakasumpay ha storage backend "$1".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Waray ka rangka an "$1"; diri ini nakatrangka.',
+'lockmanager-fail-closelock' => 'Diri nakakasera han nakatrangka nga paypay para han "$1".',
+'lockmanager-fail-deletelock' => 'Diri nakakapara han nakatrangka nga paypay para hit "$1".',
+'lockmanager-fail-acquirelock' => 'Diri nakakakarawat hin trangka para hit "$1".',
+'lockmanager-fail-openlock' => 'Diri nakakaabre han nakatrangka nga paypay para hit "$1".',
+'lockmanager-fail-releaselock' => 'Diri nakakabul-iw han trangka para hit "$1".',
+
+# ZipDirectoryReader
+'zip-wrong-format' => 'An espisipikado nga paypay in diri naka ZIP nga paypay.',
+
+# Special:UploadStash
+'uploadstash-errclear' => 'An paghawan han mga paypay in diri malinamposon.',
# img_auth script messages
'img-auth-accessdenied' => 'Diri gintutugutan makasulod',
'upload-disallowed-here' => 'Diri nimo masasapaw ini nga paypay.',
# File reversion
+'filerevert' => 'Igbalik $1',
+'filerevert-legend' => 'Igbalik an paypay',
'filerevert-comment' => 'Rason:',
+'filerevert-defaultcomment' => 'Ginbalik nga bersyon han $2, $1',
+'filerevert-submit' => 'Igbalik',
# File deletion
'filedelete' => 'Igpara $1',
'mimetype' => 'MIME nga klase:',
'download' => 'pagkarga paubos',
+# Unwatched pages
+'unwatchedpages' => 'Mga paypay nga gintanggal an pagbantay',
+
# List redirects
'listredirects' => 'Talaan hin mga redirect',
'disambiguations' => 'Mga pakli nga nasumpay ha mga pansayod nga pakli',
'disambiguationspage' => 'Template:pansayod',
+'pageswithprop-submit' => 'Kadto-a',
+
+'doubleredirects' => 'Mga doble nga redirekta',
+'double-redirect-fixer' => 'Mangangayad hin redirekta',
+
'brokenredirects' => 'Mga redirect nga utod',
'brokenredirects-edit' => 'igliwat',
'brokenredirects-delete' => 'paraa',
'mostlinked' => 'Pinakadamo nga mga ginsumpayan nga pakli',
'mostlinkedcategories' => 'Pinakadamo nga mga ginsumpayan nga kaarangay',
'mostlinkedtemplates' => 'Pinakadamo nga mga ginsumpayan nga batakan',
+'mostcategories' => 'Mga paypay nga may-ada pinakadamo nga mga kaarangay',
+'mostimages' => 'Pinakadamo nga nahisumpayan nga mga paypay',
+'mostinterwikis' => 'Mga pakli nga may-ada pinakadamo nga mga interwiki',
+'mostrevisions' => 'Mga pakli nga may-ada pinakadamo nga mga rebisyon',
'prefixindex' => 'Ngatanan nga pakli nga may-ada pahiuna-nga-sumpay',
'shortpages' => 'Haglipot nga mga pakli',
'longpages' => 'Haglaba nga mga pakli',
'deadendpages' => 'Waray na kakadtoan nga mga pakli',
'protectedpages' => 'Pinapasaliporan nga mga pakli',
+'protectedtitles' => 'Pinapasaliporan nga mga titulo',
'listusers' => 'Lista han mga gumaramit',
+'listusers-editsonly' => 'Igpakita la an mga gumaramit nga may-ada ginliwat',
'listusers-creationsort' => 'Ginsusunodsunod pinaagi han paghimo nga petsa',
'usereditcount' => '$1 {{PLURAL:$1|ka pagliwat|ka mga pagliwat}}',
'usercreated' => '{{GENDER:$3|Ginhimo}} han $1 ha $2',
'allpagesnext' => 'Sunod',
'allpagessubmit' => 'Kadto-a',
'allpages-bad-ns' => '{{SITENAME}} in waray ngaran-lat\'ang nga "$1".',
+'allpages-hide-redirects' => 'Igtago an mga redirekta',
# SpecialCachedPage
'cachedspecial-refresh-now' => 'Igkita an pinakaurhi.',
'noemailtitle' => 'Waray e-mail address',
'nowikiemailtitle' => 'Waray gintutugutan nga e-mail',
'emailusername' => 'Agnay hiton gumaramit:',
+'emailusernamesubmit' => 'Igsumite',
'emailfrom' => 'Tikang kan:',
'emailto' => 'Para kan:',
'emailsubject' => 'Himangrawon:',
'mywatchlist' => 'Mga angay timan-an nakon',
'watchlistfor2' => 'Para ha $1 $2',
'watchnologin' => 'Diri nakalog-in',
+'addwatch' => 'Igdugang an listahan hit binabantayan',
'watch' => 'Bantayi',
'watchthispage' => 'Bantayi ini nga pakli',
'unwatch' => 'Pabay-i an pagbantay',
+'unwatchthispage' => 'Undangi pagbantay',
'watchlist-details' => '{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri lakip an mga hiruhimangraw-nga-pakli.',
'wlshowlast' => 'Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3',
'watchlist-options' => 'Mga pirilian han talaan han binabantayan',
+# Displayed when you click the "watch" button and it is in the process of watching
+'watching' => 'Ginbabantay...',
+'unwatching' => 'Diri na ginbabantay...',
+
+'enotif_reset' => 'Markahi an ngatanan nga mga pakli nga ginbisita na',
'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
'created' => 'nahimo',
'confirm' => 'Kompirma',
'excontent' => "An sulod in: ''$1''",
'excontentauthor' => 'an sulod in: \'\'$1\'\' (ngan hi "[[Special:Contributions/$2|$2]]" la an nag-amot)',
+'exbeforeblank' => 'sulod san-o paghawan in: "$1"',
'exblank' => 'waray sulod an pakli',
'delete-confirm' => 'Igpara "$1"',
'delete-legend' => 'Igpara',
'prot_1movedto2' => '[[$1]] in ginbalhin ngadto ha [[$2]]',
'protectcomment' => 'Katadongan:',
'protect-default' => 'Togota an ngatanan nga mga gumaramit',
-'protect-level-sysop' => 'Mga magdudumara la',
+'protect-level-sysop' => 'Tuguti la an mga magdudumara',
'protect-othertime' => 'Lain nga oras:',
'protect-othertime-op' => 'lain nga oras',
'protect-otherreason' => 'Lain/dugang nga katadongan:',
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'ago' => '$1 an nakalabay',
+'just-now' => 'yana pala',
# Bad image list
'bad_image_list' => 'An kabutangan in masunod:
'listgrouprights-addgroup-self-all' => 'Man ngaa yokk mbooloo yépp ci sa sàq',
'listgrouprights-removegroup-self-all' => 'Man ngaa far mbooloo yépp ci sa sàq',
-# E-mail user
+# Email user
'mailnologin' => 'Amul benn mákkaan boo man a yónne bataaxal bi',
'mailnologintext' => 'Ngir man a yónney bataaxal laaj na nga [[Special:UserLogin|dugg]] te it am ab màkkaanub m-bataaxal bu baax ci say [[Special:Preferences|tànneef]].',
'emailuser' => 'Bind bii jëfandikukat',
'namespacesall' => 'Yépp',
'monthsall' => 'Yépp',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => 'Dëggalal sa m-bataaxal',
'confirmemail_noemail' => 'Jooxewoo ab m-bataaxal bu baax ci say [[Special:Preferences|tànneef]].',
# Special:ListGroupRights
'listgrouprights-members' => '(成员列表)',
-# E-mail user
+# Email user
'emailuser' => '发E-mail拨该个用户',
'emailfrom' => '从',
'emailto' => '发拨',
'namespacesall' => '全部',
'monthsall' => '全',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => '确认电子邮件地址',
'confirmemail_text' => '该只wiki要求倷来拉用电子邮件服务之前验证电子邮件地址个有效性。揿底下只揿钮来发封确认信到倷电子邮箱。个封信里会有加密个链接。登倷个浏览器里向打开该只链接,确认倷个电子邮箱地址是有效个。',
'confirmemail_send' => '发送确认码',
'about' => 'וועגן',
'article' => 'אינהאלט בלאט',
'newwindow' => '(עפֿנט זיך אין א נײַעם פענסטער)',
-'cancel' => '×\96×\99×\99 ×\9e×\91×\98×\9c',
+'cancel' => '×\90Ö·× ×\95×\9c×\99ר×\9f',
'moredotdotdot' => 'נאך…',
+'morenotlisted' => 'ווייטער, נאך נישט אין דער ליסטע…',
'mypage' => 'מײַן בלאט',
'mytalk' => 'שמועס',
'anontalk' => 'דאס רעדן פון דעם IP',
ביטע ווידער אריינלאגירן נאך דעם וואס איר באקומט עס.',
'blocked-mailpassword' => 'אייער איי פי אדרעס איז בלאקירט צו רעדאקטירן, דערוועגן זענט איר נישט ערלויבט צו באניצן מיטן פאסווארט ווידעראויפלעבונג פֿונקציע כדי צו פארמיידן סיסטעם קרומבאניץ.',
'eauthentsent' => 'א באשטעטיגונג ע-בריוו איז געשיקט געווארן צו דעם באשטימטן ע-פאסט אדרעס. איידער סיי וואס אנדערע ע-פאסט וועט ווערן געשיקט צו דער קאנטע, וועט איר דארפן פאלגן די אנווייזונגען אין דער מעלדונג כדי צו זיין זיכער אז די קאנטע איז טאקע אייערס.',
-'throttled-mailpassword' => "×\90 פ×\90ס×\95×\95×\90ר×\98 ×\93ער×\9e×\90× ×\95× ×\92 ×\90×\99×\96 ש×\95×\99×\9f ×\92עש×\99ק×\98 ×\92×¢×\95×\95×\90ר×\9f, ×\90×\99×\9f {{PLURAL:$1|×\93ער ×\9cעצ×\98ער שע×\94|×\93×\99 ×\9cעצ×\98×¢ $1 שע×\94'×\9f}}. ×\9b×\93×\99 צ×\95 פ×\90ר×\9eײַ×\93×\9f ש×\9c×¢×\9b×\98 ×\91×\90× ×\99צ×\9f, × ×\90ר ×\90×\99×\99×\9f פ×\90ס×\95×\95×\90ר×\98 ×\93ער×\9e×\90× ×\95× ×\92 וועט געשיקט ווערן אין {{PLURAL:$1|א שעה |$1 שעה'ן}}.",
+'throttled-mailpassword' => "×\9e'×\94×\90×\98 ש×\95×\99×\9f ×\92עש×\99ק×\98 ×\90 ×\91×\9c×\99צ×\91ר×\99×\95×\95 צ×\95ר×\99קצ×\95ש×\98×¢×\9c×\9f ×\93×\90ס פ×\90ס×\95×\95×\90ר×\98, ×\90×\99×\9f {{PLURAL:$1|×\93ער ×\9cעצ×\98ער שע×\94|×\93×\99 ×\9cעצ×\98×¢ $1 שע×\94'×\9f}}. ×\9b×\93×\99 צ×\95 פ×\90ר×\9eײַ×\93×\9f ש×\9c×¢×\9b×\98 ×\91×\90× ×\99צ×\9f, × ×\90ר ×\90×\99×\99×\9f פ×\90ס×\95×\95×\90ר×\98 צ×\95ר×\99קש×\98×¢×\9c×\9f ×\91×\9c×\99צ×\91ר×\99×\95×\95 וועט געשיקט ווערן אין {{PLURAL:$1|א שעה |$1 שעה'ן}}.",
'mailerror' => 'פֿעלער שיקנדיג פאסט: $1',
'acct_creation_throttle_hit' => 'באַזוכער צו דער וויקי וואס באַניצן אייער IP אַדרעס האָבן שױן באַשאַפֿן {{PLURAL:$1|1 קאנטע|$1 קאנטעס}} במשך דעם לעצטן טאָג, דעם מאַקסימום וואָס מען ערלויבט אין דעם פעריאד.
# Special:PasswordReset
'passwordreset' => 'צוריקשטעלן פאַסווארט',
-'passwordreset-text' => '×\93ער×\92×\90Ö·× ×\98 ×\93×\99 פ×\90ָרע×\9d צ×\95 ×\91×\90ַק×\95×\9e×¢×\9f ×\90Ö·×\9f ×¢-פּ×\90ָס×\98 ×\93ער×\9e×\90Ö¸× ×\95× ×\92 פ×\95×\9f ×\93×\99 פר×\98×\99×\9d פֿ×\95×\9f ×\90ײַער ק×\90× ×\98×¢.',
+'passwordreset-text' => '×\93ער×\92×\90Ö·× ×¦×\98 ×\93×\99 פ×\90ָרע×\9d צ×\95ר×\99קצ×\95ש×\98×¢×\9c×\9f ×\90ײַער פ×\90ַס×\95×\95×\90ר×\98.',
'passwordreset-legend' => 'צוריקשטעלן פאַסווארט',
'passwordreset-disabled' => 'מען האט אומאַקטיוויטר צוריקשטעלן פאַסווערטער אויף דער וויקי.',
'passwordreset-pretext' => '{{PLURAL:$1| | קלאַפט אַרײַן איינע פֿון די דאַטן אונטן}}',
'passwordreset-capture-help' => 'אַז איר צייכנט דאס קעסטל, וועט מען ווײַזן דעם ע־בריוו (מיטן פראוויזארישן פאַסווארט) צו אײַך ווי אויך ווערן געשיקט צום באַניצער.',
'passwordreset-email' => 'בליצפּאָסט אַדרעס:',
'passwordreset-emailtitle' => 'קאנטע פרטים אין {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'עמעצער (מסתמא איר, פון IP אדרעס $1) האט געבעטן א דערמאנונג פון אייערע
-קאנטע פרטים פאר {{SITENAME}} ($4). די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}}
+'passwordreset-emailtext-ip' => 'עמעצער (מסתמא איר, פון IP אדרעס $1) האט געבעטן צוריקצושטעלן אייער פאסווארט פאר {{SITENAME}} ($4). די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}}
פארבונדן מיט דעם ע־פאסט אדרעס:
$2
איר זאלט אריינלאגירן און קלויבן א נייע פאסווארט אצינד. טאמער א צווייטער האט געשיקט די בקשה,
אדער ווען איר געדענקט יא אייער פריעריקע פאסווארט, און וויל עס נישט ענדערן,
קענט איר איגנארירן דעם אנזאג און ניצן ווייטער דאס אלטע פאסווארט.',
-'passwordreset-emailtext-user' => '×\91×\90× ×\99צער $1 ×\90×\95×\99×£ {{SITENAME}} ×\94×\90×\98 ×\92×¢×\91×¢×\98×\9f ×\90 ×\93ער×\9e×\90× ×\95× ×\92 פ×\95×\9f ×\90×\99×\99ערע ק×\90× ×\98×¢ פר×\98×\99×\9d פאר {{SITENAME}} ($4).
+'passwordreset-emailtext-user' => '×\91×\90× ×\99צער $1 ×\90×\95×\99×£ {{SITENAME}} ×\94×\90×\98 ×\92×¢×\91×¢×\98×\9f צ×\95ר×\99קצ×\95ש×\98×¢×\9c×\9f ×\90×\99×\99ער פ×\90ס×\95×\95×\90ר×\98 פאר {{SITENAME}} ($4).
די פאלגנדע באניצער {{PLURAL:$3|קאנטע איז|קאנטעס זענען}} פארבונדן מיט דעם ע־פאסט אדרעס:
$2
קענט איר איגנארירן דעם אנזאג און ניצן ווייטער דאס אלטע פאסווארט.',
'passwordreset-emailelement' => 'באַניצער נאָמען: $1
פראוויזארישער פּאַראָל: $2',
-'passwordreset-emailsent' => "×\9e'×\94×\90×\98 ×\92עש×\99ק×\98 ×\90 ×\93ער×\9e×\90Ö¸× ×\95× ×\92 ע-פּאָסט.",
-'passwordreset-emailsent-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\99ק×\98 ×\90 ×\93ער×\9e×\90× ×\95× ×\92 בליצבריוו, וואס ווערט געוויזן אונטן.',
-'passwordreset-emailerror-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\90פ×\9f ×\90 ×\93ער×\9e×\90× ×\95× ×\92 בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום באניצער איז דורכגעפאלן: $1',
+'passwordreset-emailsent' => "×\9e'×\94×\90×\98 ×\92עש×\99ק×\98 ×\90 פ×\90ס×\95×\95×\90ר×\98 צ×\95ר×\99קש×\98×¢×\9c×\9f ע-פּאָסט.",
+'passwordreset-emailsent-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\99ק×\98 ×\90 פ×\90ס×\95×\95×\90ר×\98 צ×\95ר×\99קש×\98×¢×\9c×\9f בליצבריוו, וואס ווערט געוויזן אונטן.',
+'passwordreset-emailerror-capture' => '×\9e×¢×\9f ×\94×\90×\98 ×\92עש×\90פ×\9f ×\90 פ×\90ס×\95×\95×\90ר×\98 צ×\95ר×\99קש×\98×¢×\9c×\9f בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום באניצער איז דורכגעפאלן: $1',
# Special:ChangeEmail
'changeemail' => 'ענדערן ע-פּאָסט אַדרעס',
'mergehistory-from' => 'מקור בלאַט:',
'mergehistory-into' => 'פֿארציל בלאַט:',
'mergehistory-list' => 'צוזאשמעלצונג ענדערונג היסטאריע',
+'mergehistory-merge' => 'די פאלגנדע ווערסיעס פון [[:$1]] קענען ווערן צונויפגעגאסן אין [[:$2]].
+באניצט די ראדיא קנעפלעך כדי צונויפגיסן נאר די ווערסיעס געשאפן ביז א געוויסער צייט. גיט אכט אז ניצן די נאוויגאציע לינקען וועלן צוריקשטעלן דעם עמוד.',
'mergehistory-go' => 'צייג צוזאמשמעלצונג ענדערונגן',
'mergehistory-submit' => 'צונויפֿגיסן רעוויזיעס',
'mergehistory-empty' => 'קיין רעוויזיעס קען נישט ווערן צונויפֿגעגאסן.',
'editundo' => 'אַנולירן',
'diff-multi' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)',
'diff-multi-manyusers' => '({{PLURAL:$1|איין מיטלסטע ווערסיע |$1 מיטלסטע ווערסיעס}} פֿון מער ווי {{PLURAL:$2|איין באַניצער|$2 באַניצער}} נישט געוויזן.)',
+'difference-missing-revision' => '{{PLURAL:$2|איין ווערסיע|$2 ווערסיעס}} פון דעם דיפערענץ ($1) {{PLURAL:$2|האט}} מען נישט געטראפן.
+
+דאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.
+פרטים קען מען געפינען אינעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאגבוך].',
# Search results
'searchresults' => 'זוכן רעזולטאטן',
'disambiguationspage' => 'Template:באדייטן',
'disambiguations-text' => "די קומענדיגע בלעטער פארבינדן צו א '''באדייטן בלאט'''. זיי ברויכן ענדערשט פֿארבינדן צו דעם רעלעוואנטן טעמע בלאט.<br />א בלאט ווערט פאררעכענט פאר א באדײַטן בלאט אויב ער באניצט זיך מיט א מוסטער וואס איז פארבינדען פון [[MediaWiki:Disambiguationspage]].",
+'pageswithprop-prop' => 'אייגנשאפט נאמען:',
+'pageswithprop-submit' => 'גייט',
+
'doubleredirects' => 'געטאפלטע ווײַטערפֿירונגען',
'doubleredirectstext' => 'דער בלאט רעכנט אויס בלעטער וואס פירן ווייטער צו אנדערע ווייטערפירן בלעטער.
יעדע שורה אנטהאלט א לינק צום ערשטן און צווייטן ווייטערפירונג, ווי אויך די ציל פון דער צווייטער ווייטערפירונג, וואס רוב מאל געפינט זיך די ריכטיגע ציל וואו די ערשטע ווייטערפירונג זאל ווייזן.
'loginlanguagelabel' => '語言:$1',
'suspicious-userlogout' => '你去登出嘅要求已經拒絕咗,因為佢可能由壞咗嘅瀏覽器或者快取代理傳送。',
-# E-mail sending
+# Email sending
'php-mail-error-unknown' => '響 PHP 嘅 mail() 參數度出現咗未知嘅錯誤',
# Change password dialog
'prefs-displaywatchlist' => '顯示選項',
'prefs-diffs' => '差異',
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
'email-address-validity-valid' => '電郵地址睇嚟有效',
'email-address-validity-invalid' => '請打一個有效嘅電郵地址',
'listgrouprights-addgroup-self-all' => '加入全部組到自己嘅戶口度',
'listgrouprights-removegroup-self-all' => '響自己嘅戶口度可以拎走全部組',
-# E-mail user
+# Email user
'mailnologin' => '冇傳送地址',
'mailnologintext' => '你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。',
'emailuser' => '發電郵畀呢位用戶',
'monthsall' => '全部',
'limitall' => '全部',
-# E-mail address confirmation
+# Email address confirmation
'confirmemail' => '確認電郵地址',
'confirmemail_noemail' => '你唔需要響你嘅[[Special:Preferences|用戶喜好設定]]度設定一個有效嘅電郵地址。',
'confirmemail_text' => '{{SITENAME}}需要你喺使用電郵功能之前驗證吓你嘅電郵地址。啟用下邊個掣嚟發封確認信去你個地址度。封信入面會附帶一條包含代碼嘅連結;喺你個瀏覽器度打開條連結嚟確認你嘅電郵地址係有效嘅。',
# Special:ListGroupRights
'listgrouprights-members' => '(ledenlieste)',
-# E-mail user
+# Email user
'emailuser' => 'E-mail deêze gebruker',
'emailpage' => 'E-mail gebruker',
'policy-url' => 'Project:方针',
'portal' => '社区专页',
'portal-url' => 'Project:社区专页',
-'privacy' => 'é\9a\90ç§\81æ\9d\83æ\94¿ç\96',
+'privacy' => '隐私政策',
'privacypage' => 'Project:隐私权政策',
'badaccess' => '权限错误',
{{PLURAL:$3|这个|这个}}临时密码将会在{{PLURAL:$5|一天|$5 天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。',
'passwordreset-emailelement' => '用户名:$1
临时密码:$2',
-'passwordreset-emailsent' => 'å·²å\8f\91é\80\81æ\8f\90é\86\92ç\94µå\90é\82®ä»¶。',
+'passwordreset-emailsent' => 'å¯\86ç \81é\87\8dç½®é\82®ä»¶å·²å\8f\91é\80\81。',
'passwordreset-emailsent-capture' => '提醒电子邮件已发送,并在下面显示。',
'passwordreset-emailerror-capture' => '生成的提醒电子邮件如下所示,但发送失败:$1',
'qbsettings-directionality' => '根据您的语言文本方向固定位置',
# Preferences page
-'preferences' => '系统设置',
+'preferences' => '参数设置',
'mypreferences' => '系统设置',
'prefs-edits' => '编辑数量:',
'prefsnologin' => '未登录',
'disambiguationspage' => 'Template:消歧义',
'disambiguations-text' => "以下的页面都有到'''消歧义页'''的链接,但它们可能可以链接到更适当的页面。<br />一个页面如果使用了[[MediaWiki:Disambiguationspage]]内的模板,则会被视为消歧义页。",
+'pageswithprop-text' => '此页面列出了使用特定页面属性的页面名单。',
'pageswithprop-prop' => '属性名称:',
+'pageswithprop-submit' => '提交',
'doubleredirects' => '双重重定向页',
'doubleredirectstext' => '本页面列出重定向至其他重定向页的页面。每行含有第一及第二重定向的链接和第二重定向的目标(通常是第一重定向应该指向的“真实”目标页面)。<del>带删除线的</del>条目已被解决。',
'duration-centuries' => '$1个世纪',
'duration-millennia' => '$1千年',
-# Unknown messages
-'pageswithprop-submit' => '提交',
+# Image rotation
+'rotate-comment' => '图像已顺时针方向旋转了 $1 {{PLURAL:$1|度|度}}',
+
);
'disambiguations-text' => "以下的頁面都有至少一個連到'''消歧義頁'''的鏈接,但它們應鏈接到合適的頁面。<br />一個頁面如果使用了[[MediaWiki:Disambiguationspage]]內的模板,則會被視為消歧義頁。",
'pageswithprop' => '有頁面屬性的頁面',
+'pageswithprop-legend' => '有頁面屬性的頁面',
'pageswithprop-text' => '此頁列出所有頁面使用了特定的頁面屬性。',
'pageswithprop-prop' => '屬性名稱:',
+'pageswithprop-submit' => '進入',
'doubleredirects' => '雙重重定向頁面',
'doubleredirectstext' => '這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的連結,以及第二個重定向頁面的目標,通常顯示的都會是"真正"的目標頁面,也就是第一個重定向頁面應該指向的頁面。
'duration-centuries' => '$1個世紀',
'duration-millennia' => '$1千年',
-# Unknown messages
-'pageswithprop-legend' => '有頁面屬性的頁面',
-'pageswithprop-submit' => '進入',
+# Image rotation
+'rotate-comment' => '順時針旋轉圖像$1{{PLURAL:$1|度|度}}',
+
);
<?php
/**
* Version of load.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
}
- public function getFormattedResults( ) {
+ public function getFormattedResults() {
$ret = '';
foreach( $this->results as $res ) {
// show function with args
protected function moveInconsistentPage( $row, $title ) {
if ( $title->exists() || $title->getInterwiki() || !$title->canExist() ) {
if ( $title->getInterwiki() || !$title->canExist() ) {
- $prior = $title->getPrefixedDbKey();
+ $prior = $title->getPrefixedDBkey();
} else {
$prior = $title->getDBkey();
}
*/
private function getHooksFromDoc( $doc ) {
if ( $this->hasOption( 'online' ) ) {
- return $this->getHooksFromOnlineDoc( );
+ return $this->getHooksFromOnlineDoc();
} else {
return $this->getHooksFromLocalDoc( $doc );
}
* Get hooks from www.mediawiki.org using the API
* @return array of documented hooks
*/
- private function getHooksFromOnlineDoc( ) {
+ private function getHooksFromOnlineDoc() {
// All hooks
$allhookdata = Http::get( 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:MediaWiki_hooks&cmlimit=500&format=php' );
$allhookdata = unserialize( $allhookdata );
function __construct() {
$this->pagePath = "index.php?title=Special:Blockme";
- $this->params = array ( );
+ $this->params = array ();
// sometimes we specify "ip", and sometimes we don't.
if ( wikiFuzz::randnum( 1 ) == 0 ) {
*/
if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
- echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" .
- "Check if you have a newer php executable with a different name, such as php5.\n";
- die( 1 );
+ require_once( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
+ wfPHPVersionError( 'cli' );
}
define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
function __construct( MessageGroup $group ) {
$this->mMessageGroup = $group;
- $bools = $this->mMessageGroup->getBools();
- $this->mIgnoredMessages = $bools['ignored'];
- $this->mOptionalMessages = $bools['optional'];
+ $this->mIgnoredMessages = $this->mMessageGroup->getIgnored();
+ $this->mOptionalMessages = $this->mMessageGroup->getOptional();
}
/**
'pageswithprop' => array(
'pageswithprop',
'pageswithprop-summary',
+ 'pageswithprop-legend',
'pageswithprop-text',
'pageswithprop-prop',
- 'pageswithprop-ok',
+ 'pageswithprop-submit',
),
'doubleredirects' => array(
'doubleredirects',
'duration-centuries',
'duration-millennia'
),
+ 'rotation' => array(
+ 'rotate-comment',
+ ),
);
/** Comments for each block */
'apierrors' => 'API errors',
'duration' => 'Durations',
'cachedspecial' => 'SpecialCachedPage',
- 'rotation-comment' => 'Image rotation message',
+ 'rotation' => 'Image rotation',
);
/** */
require_once( __DIR__ . '/commandLine.inc' );
-$debug = in_array( '--debug', $argv );
-$help = in_array( '--help', $argv );
+$options = getopt( '', array( 'debug', 'help', 'cache:' ) );
-if( $help ) {
+$debug = isset( $options['debug'] );
+$help = isset( $options['help'] );
+$cache = isset( $options['cache'] ) ? $options['cache'] : null;
+
+if ( $help ) {
mccShowUsage();
exit( 0 );
}
'debug' => $debug,
) );
-if ( $wgMainCacheType === CACHE_MEMCACHED ) {
+if ( $cache ) {
+ if ( !isset( $wgObjectCaches[$cache] ) ) {
+ print "MediaWiki isn't configured with a cache named '$cache'";
+ exit( 1 );
+ }
+ $servers = $wgObjectCaches[$cache]['servers'];
+} elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
$mcc->set_servers( $wgMemCachedServers );
-} elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+} elseif( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
$mcc->set_servers( $wgObjectCaches[$wgMainCacheType]['servers'] );
} else {
print "MediaWiki isn't configured for Memcached usage\n";
$this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
. " memcached server and shows a report";
$this->addOption( 'i', 'Number of iterations', false, true );
+ $this->addOption( 'cache', 'Use servers from this $wgObjectCaches store', false, true );
$this->addArg( 'server[:port]', 'Memcached server to test, with optional port', false );
}
public function execute() {
global $wgMainCacheType, $wgMemCachedTimeout, $wgObjectCaches;
+ $cache = $this->getOption( 'cache' );
$iterations = $this->getOption( 'i', 100 );
- if ( $this->hasArg() ) {
+ if ( $cache ) {
+ if ( !isset( $wgObjectCaches[$cache] ) ) {
+ $this->error( "MediaWiki isn't configured with a cache named '$cache'", 1 );
+ }
+ $servers = $wgObjectCaches[$cache]['servers'];
+ } elseif ( $this->hasArg() ) {
$servers = array( $this->getArg() );
} elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
global $wgMemCachedServers;
$servers = $wgMemCachedServers ;
- } elseif( isset( $wgObjectCaches[$wgMainCacheType] ) ) {
+ } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
$servers = $wgObjectCaches[$wgMainCacheType]['servers'];
} else {
$this->error( "MediaWiki isn't configured for Memcached usage", 1 );
/** where Phpdoc should output documentation */
$doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR ;
+$doxyVersion = 'master';
+
/** MediaWiki subpaths */
$mwPathI = $mwPath . 'includes/';
$mwPathL = $mwPath . 'languages/';
$doxyOutput = realpath( $argv[$i] );
}
break;
+ case '--version':
+ $i++;
+ if ( isset( $argv[$i] ) ) {
+ $doxyVersion = $argv[$i];
+ }
+ break;
case '--generate-man':
$doxyGenerateMan = true;
break;
If no command is given, you will be prompted.
Other options:
- --output <dir> Set output directory (default $doxyOutput)
+ --output <dir> Set output directory (default: $doxyOutput)
--generate-man Generates man page documentation
+ --version Project version to display in the outut (default: $doxyVersion)
--help Show this help and exit.
$excludePatterns = 'extensions';
}
-// @todo FIXME to work on git
-$version = 'master';
-
// Generate path exclusions
$excludedPaths = $mwPath . join( " $mwPath", $mwExcludePaths );
print "EXCLUDE: $excludedPaths\n\n";
-$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $version, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan, $doxygenInputFilter );
+$generatedConf = generateConfigFile( $doxygenTemplate, $doxyOutput, $mwPath, $doxyVersion, $input, $excludedPaths, $excludePatterns, $doxyGenerateMan, $doxygenInputFilter );
$command = $doxygenBin . ' ' . $generatedConf;
echo <<<TEXT
TEXT;
-passthru( $command );
+$exitcode = 1;
+passthru( $command, $exitcode );
echo <<<TEXT
---------------------------------------------------
You might want to delete the temporary file $generatedConf
TEXT;
+
+exit( $exitcode );
*
* @return Title object
*/
- protected function getTitle( ) {
+ protected function getTitle() {
$title =
$this->getOption( 'title' )
? $this->getOption( 'title' )
$blockEnd = intval( $start ) + $this->mBatchSize - 1;
$count = 0;
$missing = 0;
+ $fields = Revision::selectFields();
while ( $blockStart <= $end ) {
$this->output( "...doing rev_id from $blockStart to $blockEnd\n" );
$res = $db->select( 'revision',
- Revision::selectFields(),
+ $fields,
array( "rev_id >= $blockStart",
"rev_id <= $blockEnd",
"rev_len IS NULL" ),
global $wgParserCacheExpireTime;
$date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) );
} else {
- echo "Must specify either --expiredate or --age\n";
- exit( 1 );
+ $this->error( "Must specify either --expiredate or --age", 1 );
}
$english = Language::factory( 'en' );
- echo "Deleting objects expiring before " . $english->timeanddate( $date ) . "\n";
+ $this->output( "Deleting objects expiring before " . $english->timeanddate( $date ) . "\n" );
$pc = wfGetParserCacheStorage();
$success = $pc->deleteObjectsExpiringBefore( $date, array( $this, 'showProgress' ) );
if ( !$success ) {
- echo "\nCannot purge this kind of parser cache.\n";
- exit( 1 );
+ $this->error( "\nCannot purge this kind of parser cache.", 1 );
}
$this->showProgress( 100 );
- echo "\nDone\n";
+ $this->output( "\nDone\n" );
}
function showProgress( $percent ) {
$this->lastProgress = $percentString;
$stars = floor( $percent / 2 );
- echo '[' . str_repeat( '*', $stars ), str_repeat( '.', 50 - $stars ) . '] ' .
- "$percentString%\r";
+ $this->output( '[' . str_repeat( '*', $stars ) . str_repeat( '.', 50 - $stars ) . '] ' .
+ "$percentString%\r" );
}
}
$type = $this->getOption( 'type', false );
$wgTitle = Title::newFromText( 'RunJobs.php' );
$dbw = wfGetDB( DB_MASTER );
- $n = 0;
+ $jobsRun = 0; // counter
$group = JobQueueGroup::singleton();
// Handle any required periodic queue maintenance
? $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE )
: $group->pop( $type ); // job from a single queue
if ( $job ) { // found a job
+ ++$jobsRun;
$this->runJobsLog( $job->toString() . " STARTING" );
// Run the job...
}
// Break out if we hit the job count or wall time limits...
- if ( $maxJobs && ++$n >= $maxJobs ) {
+ if ( $maxJobs && $jobsRun >= $maxJobs ) {
break;
} elseif ( $maxTime && ( time() - $startTime ) > $maxTime ) {
break;
}
- // Don't let any queue slaves/backups fall behind
- $group->get( $job->getType() )->waitForBackups();
// Don't let any of the main DB slaves get backed up
$timePassed = time() - $lastTime;
if ( $timePassed >= 5 || $timePassed < 0 ) {
wfWaitForSlaves();
}
+ // Don't let any queue slaves/backups fall behind
+ if ( $jobsRun > 0 && ( $jobsRun % 100 ) == 0 ) {
+ $group->waitForBackups();
+ }
}
} while ( $job ); // stop when there are no jobs
}
$this->output( "Ending journal position is $end.\n" );
}
+ // Periodically update the position file
+ $callback = function( $pos ) use ( $startFromPosFile, $posFile, $start ) {
+ if ( $startFromPosFile && $pos >= $start ) { // successfully advanced
+ file_put_contents( $posFile, $pos, LOCK_EX );
+ }
+ };
+
// Actually sync the dest backend with the reference backend
- $lastOKPos = $this->syncBackends( $src, $dst, $start, $end );
+ $lastOKPos = $this->syncBackends( $src, $dst, $start, $end, $callback );
// Update the sync position file
if ( $startFromPosFile && $lastOKPos >= $start ) { // successfully advanced
* @param $dst FileBackend
* @param $start integer Starting journal position
* @param $end integer Starting journal position
+ * @param $callback Closure Callback to update any position file
* @return integer|false Journal entry ID or false if there are none
*/
- protected function syncBackends( FileBackend $src, FileBackend $dst, $start, $end ) {
+ protected function syncBackends(
+ FileBackend $src, FileBackend $dst, $start, $end, Closure $callback
+ ) {
$lastOKPos = 0; // failed
$first = true; // first batch
$status = $this->syncFileBatch( array_keys( $pathsInBatch ), $src, $dst );
if ( $status->isOK() ) {
$lastOKPos = max( $lastOKPos, $lastPosInBatch );
+ $callback( $lastOKPos ); // update position file
} else {
$this->error( print_r( $status->getErrorsArray(), true ) );
break; // no gaps; everything up to $lastPos must be OK
-- Same with passwords.
user_email tinytext NOT NULL,
- -- This is a timestamp which is updated when a user
- -- logs in, logs out, changes preferences, or performs
- -- some other action requiring HTML cache invalidation
- -- to ensure that the UI is updated.
+ -- If the browser sends an If-Modified-Since header, a 304 response is
+ -- suppressed if the value in this field for the current user is later than
+ -- the value in the IMS header. That is, this field is an invalidation timestamp
+ -- for the browser cache of logged-in users. Among other things, it is used
+ -- to prevent pages generated for a previously logged in user from being
+ -- displayed after a session expiry followed by a fresh login.
user_touched binary(14) NOT NULL default '',
-- A pseudorandomly generated value that is stored in
-- callers won't be using an index: fix this?
CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
--- Not really used?
+-- Used by the API (and some extensions)
CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
--- For finding rows with outdated collation
+-- FIXME: Not used, delete this
CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
--
*/
if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '5.3.2' ) < 0 ) ) {
- echo "You are using PHP version " . phpversion() . " but MediaWiki needs PHP 5.3.2 or higher. ABORTING.\n" .
- "Check if you have a newer php executable with a different name, such as php5.\n";
- die( 1 );
+ require( dirname( __FILE__ ) . '/../includes/PHPVersionError.php' );
+ wfPHPVersionError( 'cli' );
}
$wgUseMasterForMaintenance = true;
* @ingroup Maintenance
*/
class UpdateCollation extends Maintenance {
- const BATCH_SIZE = 50; // Number of rows to process in one batch
+ const BATCH_SIZE = 10000; // Number of rows to process in one batch
const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
public $sizeHistogram = array();
}
public function execute() {
- global $wgCategoryCollation, $wgMiserMode;
+ global $wgCategoryCollation;
$dbw = $this->getDB( DB_MASTER );
$force = $this->getOption( 'force' );
$collation = Collation::singleton();
}
- $options = array( 'LIMIT' => self::BATCH_SIZE, 'STRAIGHT_JOIN' );
+ $options = array(
+ 'LIMIT' => self::BATCH_SIZE,
+ 'ORDER BY' => 'cl_to, cl_type, cl_from',
+ 'STRAIGHT_JOIN',
+ );
if ( $force || $dryRun ) {
- $options['ORDER BY'] = 'cl_from, cl_to';
$collationConds = array();
} else {
if ( $this->hasOption( 'previous-collation' ) ) {
);
}
- if ( !$wgMiserMode ) {
+ $count = $dbw->estimateRowCount(
+ 'categorylinks',
+ '*',
+ $collationConds,
+ __METHOD__
+ );
+ // Improve estimate if feasible
+ if ( $count < 1000000 ) {
$count = $dbw->selectField(
'categorylinks',
'COUNT(*)',
$collationConds,
__METHOD__
);
- } else {
- $count = $dbw->estimateRowCount(
- 'categorylinks',
- '*',
- $collationConds,
- __METHOD__
- );
}
if ( $count == 0 ) {
$this->output( "Collations up-to-date.\n" );
$res = $dbw->select(
array( 'categorylinks', 'page' ),
array( 'cl_from', 'cl_to', 'cl_sortkey_prefix', 'cl_collation',
- 'cl_sortkey', 'page_namespace', 'page_title'
+ 'cl_sortkey', 'cl_type', 'page_namespace', 'page_title'
),
array_merge( $collationConds, $batchConds, array( 'cl_from = page_id' ) ),
__METHOD__,
$dbw->commit( __METHOD__ );
}
- if ( ( $force || $dryRun ) && $row ) {
- $encFrom = $dbw->addQuotes( $row->cl_from );
- $encTo = $dbw->addQuotes( $row->cl_to );
- $batchConds = array(
- "(cl_from = $encFrom AND cl_to > $encTo) " .
- " OR cl_from > $encFrom" );
+ if ( $row ) {
+ $batchConds = array( $this->getBatchCondition( $row ) );
}
$count += $res->numRows();
}
}
+ /**
+ * Return an SQL expression selecting rows which sort above the given row,
+ * assuming an ordering of cl_to, cl_type, cl_from
+ */
+ function getBatchCondition( $row ) {
+ $dbw = $this->getDB( DB_MASTER );
+ $fields = array( 'cl_to', 'cl_type', 'cl_from' );
+ $first = true;
+ $cond = false;
+ $prefix = false;
+ foreach ( $fields as $field ) {
+ $encValue = $dbw->addQuotes( $row->$field );
+ $inequality = "$field > $encValue";
+ $equality = "$field = $encValue";
+ if ( $first ) {
+ $cond = $inequality;
+ $prefix = $equality;
+ $first = false;
+ } else {
+ $cond .= " OR ($prefix AND $inequality)";
+ $prefix .= " AND $equality";
+ }
+ }
+ return $cond;
+ }
+
function updateSortKeySizeHistogram( $key ) {
$length = strlen( $key );
if ( !isset( $this->sizeHistogram[$length] ) ) {
return false;
}
- $this->{ $this->mMode } ( );
+ $this->{ $this->mMode } ();
return true;
}
#
/** List default options and their value */
- private function LISTER( ) {
+ private function LISTER() {
$def = User::getDefaultOptions();
ksort( $def );
$maxOpt = 0;
}
/** List options usage */
- private function USAGER( ) {
+ private function USAGER() {
$ret = array();
$defaultOptions = User::getDefaultOptions();
/** Change our users options */
- private function CHANGER( ) {
+ private function CHANGER() {
$this->warn();
// We list user by user_id from one of the slave database
<?php
/**
* Version of mw-config/index.php to used in web server requiring .php5
- * extension to execute scripts with PHP5 egine.
+ * extension to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
<?php
/**
* Version of opensearch_desc.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
<?php
/**
* Version of redirect.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
'jquery.badge' => array(
'scripts' => 'resources/jquery/jquery.badge.js',
'styles' => 'resources/jquery/jquery.badge.css',
+ 'dependencies' => 'mediawiki.language',
),
'jquery.byteLength' => array(
'scripts' => 'resources/jquery/jquery.byteLength.js',
'mediawiki.tests.qunit.testrunner' => array(
'scripts' => 'tests/qunit/data/testrunner.js',
'dependencies' => array(
+ 'jquery.getAttrs',
'jquery.qunit',
'jquery.qunit.completenessTest',
'mediawiki.page.startup',
*
* http://docs.jquery.com/UI/Button#theming
*/
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ margin-right: .1em;
+ text-decoration: none !important;
+ cursor: pointer;
+ text-align: center;
+ zoom: 1;
+ overflow: visible; /* the overflow property removes extra width in IE */
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+.ui-button .ui-button-text {
+ display: block;
+ line-height: 1.4;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
+ input.ui-button {
+ padding: .4em 1em;
+}
/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0; /* reset extra padding in Firefox */
+}
/* Button
----------------------------------*/
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ margin-right: .1em;
+ text-decoration: none !important;
+ cursor: pointer;
+ text-align: center;
+ zoom: 1;
+ overflow: visible; /* the overflow property removes extra width in IE */
+}
+.ui-button-icon-only {
+ width: 2.2em; /* to make room for the icon, a width needs to be set here */
+}
+button.ui-button-icon-only {
+ width: 2.4em; /* button elements seem to need a little more width */
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: 0.3em 1em 0.25em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: 0.3em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.3em 1em 0.25em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.3em 2.1em 0.25em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+.ui-button .ui-button-text {
+ display: block;
+ line-height: 1.4;
+}
+.ui-button-text-only .ui-button-text {
+ padding: 0.3em 1em 0.25em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: 0.3em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: 0.3em 1em 0.25em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: 0.3em 2.1em 0.25em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: 0.3em 1em; }
+input.ui-button {
+ padding: 0.3em 1em;
+}
/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: 0.5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icon .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: 0.5em; }
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-text-icon .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -9px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icon .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: 0.5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icon .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: 0.5em;
+}
/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0; /* reset extra padding in Firefox */
+}
body .ui-button {
margin: 0.5em 0 0.5em 0.4em;
/* Corner radius */
/* This is normally handled in jquery.ui.theme.css, but in our case, the corner
styling of our buttons doesn't match our default widget corner styling */
-.ui-button.ui-corner-all, .ui-button.ui-corner-top, .ui-button.ui-corner-left, .ui-button.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-button.ui-corner-all, .ui-button.ui-corner-top, .ui-button.ui-corner-right, .ui-button.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-button.ui-corner-all, .ui-button.ui-corner-bottom, .ui-button.ui-corner-left, .ui-button.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-button.ui-corner-all, .ui-button.ui-corner-bottom, .ui-button.ui-corner-right, .ui-button.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-top,
+.ui-button.ui-corner-left,
+.ui-button.ui-corner-tl {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+}
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-top,
+.ui-button.ui-corner-right,
+.ui-button.ui-corner-tr {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-bottom,
+.ui-button.ui-corner-left,
+.ui-button.ui-corner-bl {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.ui-button.ui-corner-all,
+.ui-button.ui-corner-bottom,
+.ui-button.ui-corner-right,
+.ui-button.ui-corner-br {
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
body .ui-button:hover {
border-color: #6e7273;
color: #7f7f7f;
border-color: #cccccc;
/* @embed */
- background: #f2f2f2 url(images/button-disabled.png) repeat-x scroll 50% 100% !important;
+ background: #f2f2f2 url(images/button-disabled.png) repeat-x scroll 50% 100% !important;
}
/* Disables the annoying dashed border Firefox puts on active buttons */
-body button.ui-button::-moz-focus-inner {
- border: 0;
+body button.ui-button::-moz-focus-inner {
+ border: 0;
}
/* Give large buttons some extra padding */
body .ui-button-large {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
- padding: 0 3px;
+ padding: 1px 4px;
text-align: center;
font-size: 12px;
line-height: 12px;
*
* This program is distributed WITHOUT ANY WARRANTY.
*/
-( function ( $ ) {
+( function ( $, mw ) {
/**
* Allows you to put a "badge" on an item on the page. The badge container
* will be appended to the selected element(s).
* See mediawiki.org/wiki/ResourceLoader/Default_modules#jQuery.badge
*
* @param {number|string} text The value to display in the badge. If the value is falsey (0,
- * null, false, '', etc.), any existing badge will be removed.
+ * null, false, '', etc.), any existing badge will be removed.
* @param {boolean} inline True if the badge should be displayed inline, false
- * if the badge should overlay the parent element (default is inline)
+ * if the badge should overlay the parent element (default is inline)
* @param {boolean} displayZero True if the number zero should be displayed,
- * false if the number zero should result in the badge being hidden
- * (default is zero will result in the badge being hidden)
+ * false if the number zero should result in the badge being hidden
+ * (default is zero will result in the badge being hidden)
*/
$.fn.badge = function ( text, inline, displayZero ) {
var $badge = this.find( '.mw-badge' ),
badgeStyleClass = 'mw-badge-' + ( inline ? 'inline' : 'overlay' ),
- isImportant = true;
+ isImportant = true, displayBadge = true;
// If we're displaying zero, ensure style to be non-important
- if ( text === 0 && displayZero ) {
+ if ( mw.language.convertNumber( text, true ) === 0 ) {
isImportant = false;
- text = '0';
+ if ( !displayZero ) {
+ displayBadge = false;
+ }
+ // If text is falsey (besides 0), hide the badge
+ } else if ( !text ) {
+ displayBadge = false;
}
- if ( text ) {
+ if ( displayBadge ) {
// If a badge already exists, reuse it
if ( $badge.length ) {
$badge
.addClass( badgeStyleClass )
.toggleClass( 'mw-badge-important', isImportant )
.append(
- $( '<span class="mw-badge-content"></span>' ).text ( text )
+ $( '<span class="mw-badge-content"></span>' ).text( text )
)
.appendTo( this );
}
}
return this;
};
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
* @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
*/
( function ( $, mw ) {
+ var lpx = 'jquery.makeCollapsible> ';
+
+ /**
+ * @param {jQuery} $collapsible
+ * @param {string} action The action this function will take ('expand' or 'collapse').
+ * @param {jQuery|null} [optional] $defaultToggle
+ * @param {Object|undefined} options
+ */
+ function toggleElement( $collapsible, action, $defaultToggle, options ) {
+ var $collapsibleContent, $containers;
+ options = options || {};
+
+ // Validate parameters
+
+ // $collapsible must be an instance of jQuery
+ if ( !$collapsible.jquery ) {
+ return;
+ }
+ if ( action !== 'expand' && action !== 'collapse' ) {
+ // action must be string with 'expand' or 'collapse'
+ return;
+ }
+ if ( $defaultToggle === undefined ) {
+ $defaultToggle = null;
+ }
+ if ( $defaultToggle !== null && !$defaultToggle.jquery ) {
+ // is optional (may be undefined), but if defined it must be an instance of jQuery.
+ // If it's not, abort right away.
+ // After this $defaultToggle is either null or a valid jQuery instance.
+ return;
+ }
-$.fn.makeCollapsible = function () {
+ // Handle different kinds of elements
- return this.each(function () {
+ if ( !options.plainMode && $collapsible.is( 'table' ) ) {
+ // Tables
+ $containers = $collapsible.find( '> tbody > tr' );
+ if ( $defaultToggle ) {
+ // Exclude table row containing togglelink
+ $containers = $containers.not( $defaultToggle.closest( 'tr' ) );
+ }
- // Define reused variables and functions
- var lpx = 'jquery.makeCollapsible> ',
- collapsible = this,
- // Ensure class "mw-collapsible" is present in case .makeCollapsible()
- // is called on element(s) that don't have it yet.
- $collapsible = $(collapsible).addClass( 'mw-collapsible' ),
- collapsetext = $collapsible.attr( 'data-collapsetext' ),
- expandtext = $collapsible.attr( 'data-expandtext' ),
- $toggle,
- $toggleLink,
- $firstItem,
- collapsibleId,
- $customTogglers,
- firstval,
- /**
- * @param {jQuery} $collapsible
- * @param {string} action The action this function will take ('expand' or 'collapse').
- * @param {jQuery|null} [optional] $defaultToggle
- * @param {Object|undefined} options
- */
- toggleElement = function ( $collapsible, action, $defaultToggle, options ) {
- var $collapsibleContent, $containers;
- options = options || {};
-
- // Validate parameters
-
- // $collapsible must be an instance of jQuery
- if ( !$collapsible.jquery ) {
- return;
- }
- if ( action !== 'expand' && action !== 'collapse' ) {
- // action must be string with 'expand' or 'collapse'
- return;
- }
- if ( $defaultToggle === undefined ) {
- $defaultToggle = null;
- }
- if ( $defaultToggle !== null && !$defaultToggle.jquery ) {
- // is optional (may be undefined), but if defined it must be an instance of jQuery.
- // If it's not, abort right away.
- // After this $defaultToggle is either null or a valid jQuery instance.
- return;
+ if ( action === 'collapse' ) {
+ // Hide all table rows of this table
+ // Slide doesn't work with tables, but fade does as of jQuery 1.1.3
+ // http://stackoverflow.com/questions/467336#920480
+ if ( options.instantHide ) {
+ $containers.hide();
+ } else {
+ $containers.stop( true, true ).fadeOut();
}
+ } else {
+ $containers.stop( true, true ).fadeIn();
+ }
- if ( action === 'collapse' ) {
-
- // Collapse the element
- if ( $collapsible.is( 'table' ) ) {
- // Hide all table rows of this table
- // Slide doens't work with tables, but fade does as of jQuery 1.1.3
- // http://stackoverflow.com/questions/467336#920480
- $containers = $collapsible.find( '> tbody > tr' );
- if ( $defaultToggle ) {
- // Exclude tablerow containing togglelink
- $containers = $containers.not( $defaultToggle.closest( 'tr' ) );
- }
-
- if ( options.instantHide ) {
- $containers.hide();
- } else {
- $containers.stop( true, true ).fadeOut();
- }
+ } else if ( !options.plainMode && ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) ) {
+ // Lists
+ $containers = $collapsible.find( '> li' );
+ if ( $defaultToggle ) {
+ // Exclude list-item containing togglelink
+ $containers = $containers.not( $defaultToggle.parent() );
+ }
- } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
- $containers = $collapsible.find( '> li' );
- if ( $defaultToggle ) {
- // Exclude list-item containing togglelink
- $containers = $containers.not( $defaultToggle.parent() );
- }
+ if ( action === 'collapse' ) {
+ if ( options.instantHide ) {
+ $containers.hide();
+ } else {
+ $containers.stop( true, true ).slideUp();
+ }
+ } else {
+ $containers.stop( true, true ).slideDown();
+ }
- if ( options.instantHide ) {
- $containers.hide();
- } else {
- $containers.stop( true, true ).slideUp();
- }
+ } else {
+ // Everything else: <div>, <p> etc.
+ $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
+ // If a collapsible-content is defined, act on it
+ if ( !options.plainMode && $collapsibleContent.length ) {
+ if ( action === 'collapse' ) {
+ if ( options.instantHide ) {
+ $collapsibleContent.hide();
} else {
- // <div>, <p> etc.
- $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
-
- // If a collapsible-content is defined, collapse it
- if ( $collapsibleContent.length ) {
- if ( options.instantHide ) {
- $collapsibleContent.hide();
- } else {
- $collapsibleContent.slideUp();
- }
-
- // Otherwise assume this is a customcollapse with a remote toggle
- // .. and there is no collapsible-content because the entire element should be toggled
- } else {
- if ( options.instantHide ) {
- $collapsible.hide();
- } else {
- if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
- $collapsible.fadeOut();
- } else {
- $collapsible.slideUp();
- }
- }
- }
+ $collapsibleContent.slideUp();
}
-
} else {
+ $collapsibleContent.slideDown();
+ }
- // Expand the element
- if ( $collapsible.is( 'table' ) ) {
- $containers = $collapsible.find( '>tbody>tr' );
- if ( $defaultToggle ) {
- // Exclude tablerow containing togglelink
- $containers.not( $defaultToggle.parent().parent() ).stop(true, true).fadeIn();
- } else {
- $containers.stop( true, true ).fadeIn();
- }
-
- } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
- $containers = $collapsible.find( '> li' );
- if ( $defaultToggle ) {
- // Exclude list-item containing togglelink
- $containers.not( $defaultToggle.parent() ).stop( true, true ).slideDown();
- } else {
- $containers.stop( true, true ).slideDown();
- }
-
+ // Otherwise assume this is a customcollapse with a remote toggle
+ // .. and there is no collapsible-content because the entire element should be toggled
+ } else {
+ if ( action === 'collapse' ) {
+ if ( options.instantHide ) {
+ $collapsible.hide();
} else {
- // <div>, <p> etc.
- $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
-
- // If a collapsible-content is defined, collapse it
- if ( $collapsibleContent.length ) {
- $collapsibleContent.slideDown();
-
- // Otherwise assume this is a customcollapse with a remote toggle
- // .. and there is no collapsible-content because the entire element should be toggled
+ if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+ $collapsible.fadeOut();
} else {
- if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
- $collapsible.fadeIn();
- } else {
- $collapsible.slideDown();
- }
+ $collapsible.slideUp();
}
}
- }
- },
- /**
- * Toggles collapsible and togglelink class and updates text label.
- *
- * @param {jQuery} $that
- * @param {jQuery.Event} e
- * @param {Object|undefined} options
- */
- toggleLinkDefault = function ( $that, e, options ) {
- var $collapsible = $that.closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
- e.preventDefault();
- e.stopPropagation();
-
- // It's expanded right now
- if ( !$that.hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
- // Change link to "Show"
- $that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
- if ( $that.find( '> a' ).length ) {
- $that.find( '> a' ).text( expandtext );
- } else {
- $that.text( expandtext );
- }
- // Collapse element
- toggleElement( $collapsible, 'collapse', $that, options );
-
- // It's collapsed right now
} else {
- // Change link to "Hide"
- $that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
- if ( $that.find( '> a' ).length ) {
- $that.find( '> a' ).text( collapsetext );
+ if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+ $collapsible.fadeIn();
} else {
- $that.text( collapsetext );
+ $collapsible.slideDown();
}
- // Expand element
- toggleElement( $collapsible, 'expand', $that, options );
}
- return;
- },
- /**
- * Toggles collapsible and togglelink class.
- *
- * @param {jQuery} $that
- * @param {jQuery.Event} e
- * @param {Object|undefined} options
- */
- toggleLinkPremade = function ( $that, e, options ) {
- var $collapsible = $that.eq( 0 ).closest( '.mw-collapsible' ).toggleClass( 'mw-collapsed' );
- if ( $.nodeName( e.target, 'a' ) ) {
- return true;
- }
- e.preventDefault();
- e.stopPropagation();
-
- // It's expanded right now
- if ( !$that.hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
- // Change toggle to collapsed
- $that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
- // Collapse element
- toggleElement( $collapsible, 'collapse', $that, options );
+ }
+ }
+ }
+
+ /**
+ * Handles clicking on the collapsible element toggle and other
+ * situations where a collapsible element is toggled (e.g. the initial
+ * toggle for collapsed ones).
+ *
+ * @param {jQuery} $toggle the clickable toggle itself
+ * @param {jQuery} $collapsible the collapsible element
+ * @param {jQuery.Event|null} e either the event or null if unavailable
+ * @param {Object|undefined} options
+ */
+ function togglingHandler( $toggle, $collapsible, event, options ) {
+ var wasCollapsed, $textContainer, collapseText, expandText;
+
+ if ( event ) {
+ // Don't fire if a link was clicked, if requested (for premade togglers by default)
+ if ( options.linksPassthru && $.nodeName( event.target, 'a' ) ) {
+ return true;
+ } else {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
- // It's collapsed right now
- } else {
- // Change toggle to expanded
- $that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
- // Expand element
- toggleElement( $collapsible, 'expand', $that, options );
- }
- return;
- },
- /**
- * Toggles customcollapsible.
- *
- * @param {jQuery} $that
- * @param {jQuery.Event} e
- * @param {Object|undefined} options
- * @param {jQuery} $collapsible
- */
- toggleLinkCustom = function ( $that, e, options, $collapsible ) {
- // For the initial state call of customtogglers there is no event passed
- if ( e ) {
- e.preventDefault();
- e.stopPropagation();
- }
- // Get current state and toggle to the opposite
- var action = $collapsible.hasClass( 'mw-collapsed' ) ? 'expand' : 'collapse';
- $collapsible.toggleClass( 'mw-collapsed' );
- toggleElement( $collapsible, action, $that, options );
+ wasCollapsed = $collapsible.hasClass( 'mw-collapsed' );
- };
+ // Toggle the state of the collapsible element (that is, expand or collapse)
+ $collapsible.toggleClass( 'mw-collapsed', !wasCollapsed );
- // Return if it has been enabled already.
- if ( $collapsible.data( 'mw-made-collapsible' ) ) {
- return;
- } else {
- $collapsible.data( 'mw-made-collapsible', true );
+ // Toggle the mw-collapsible-toggle classes, if requested (for default and premade togglers by default)
+ if ( options.toggleClasses ) {
+ $toggle
+ .toggleClass( 'mw-collapsible-toggle-collapsed', !wasCollapsed )
+ .toggleClass( 'mw-collapsible-toggle-expanded', wasCollapsed );
}
- // Use custom text or default ?
- if ( !collapsetext ) {
- collapsetext = mw.msg( 'collapsible-collapse' );
- }
- if ( !expandtext ) {
- expandtext = mw.msg( 'collapsible-expand' );
+ // Toggle the text ("Show"/"Hide"), if requested (for default togglers by default)
+ if ( options.toggleText ) {
+ collapseText = options.toggleText.collapseText;
+ expandText = options.toggleText.expandText;
+
+ $textContainer = $toggle.find( '> a' );
+ if ( !$textContainer.length ) {
+ $textContainer = $toggle;
+ }
+ $textContainer.text( wasCollapsed ? collapseText : expandText );
}
- // Create toggle link with a space around the brackets ( [text] )
- $toggleLink =
- $( '<a href="#"></a>' )
- .text( collapsetext )
- .wrap( '<span class="mw-collapsible-toggle"></span>' )
- .parent()
- .prepend( ' [' )
- .append( '] ' )
- .on( 'click.mw-collapse', function ( e, options ) {
- toggleLinkDefault( $(this), e, options );
- } );
-
- // Check if this element has a custom position for the toggle link
- // (ie. outside the container or deeper inside the tree)
- // Then: Locate the custom toggle link(s) and bind them
- if ( ( $collapsible.attr( 'id' ) || '' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
-
- collapsibleId = $collapsible.attr( 'id' );
- $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
- mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
-
- // Double check that there is actually a customtoggle link
- if ( $customTogglers.length ) {
- $customTogglers.on( 'click.mw-collapse', function ( e, options ) {
- toggleLinkCustom( $(this), e, options, $collapsible );
- } );
- } else {
- mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
+ // And finally toggle the element state itself
+ toggleElement( $collapsible, wasCollapsed ? 'expand' : 'collapse', $toggle, options );
+ }
+
+ /**
+ * Toggles collapsible and togglelink class and updates text label.
+ *
+ * @param {jQuery} $that
+ * @param {jQuery.Event} e
+ * @param {Object|undefined} options
+ */
+ function toggleLinkDefault( $that, e, options ) {
+ var $collapsible = $that.closest( '.mw-collapsible' );
+ options = $.extend( { toggleClasses: true }, options );
+ togglingHandler( $that, $collapsible, e, options );
+ }
+
+ /**
+ * Toggles collapsible and togglelink class.
+ *
+ * @param {jQuery} $that
+ * @param {jQuery.Event} e
+ * @param {Object|undefined} options
+ */
+ function toggleLinkPremade( $that, e, options ) {
+ var $collapsible = $that.eq( 0 ).closest( '.mw-collapsible' );
+ options = $.extend( { toggleClasses: true }, options );
+ togglingHandler( $that, $collapsible, e, options );
+ }
+
+ /**
+ * Toggles customcollapsible.
+ *
+ * @param {jQuery} $that
+ * @param {jQuery.Event} e
+ * @param {Object|undefined} options
+ * @param {jQuery} $collapsible
+ */
+ function toggleLinkCustom( $that, e, options, $collapsible ) {
+ options = $.extend( { linksPassthru: true }, options );
+ togglingHandler( $that, $collapsible, e, options );
+ }
+
+ /**
+ * Make any element collapsible.
+ *
+ * Supported options:
+ * - collapseText: text to be used for the toggler when clicking it would
+ * collapse the element. Default: the 'data-collapsetext' attribute of
+ * the collapsible element or the content of 'collapsible-collapse'
+ * message.
+ * - expandText: text to be used for the toggler when clicking it would
+ * expand the element. Default: the 'data-expandtext' attribute of
+ * the collapsible element or the content of 'collapsible-expand'
+ * message.
+ * - collapsed: boolean, whether to collapse immediately. By default
+ * collapse only if the elements has the 'mw-collapsible' class.
+ * - $customTogglers: jQuerified list of elements to be used as togglers
+ * for this collapsible element. By default, if the collapsible element
+ * has an id attribute like 'mw-customcollapsible-XXX', elements with a
+ * *class* of 'mw-customtoggle-XXX' are made togglers for it.
+ * - plainMode: boolean, whether to use a "plain mode" when making the
+ * element collapsible - that is, hide entire tables and lists (instead
+ * of hiding only all rows but first of tables, and hiding each list
+ * item separately for lists) and don't wrap other elements in
+ * div.mw-collapsible-content. May only be used with custom togglers.
+ */
+ $.fn.makeCollapsible = function ( options ) {
+ return this.each(function () {
+ var $collapsible, collapsetext, expandtext, $toggle, $toggleLink, $firstItem, collapsibleId,
+ $customTogglers, firstval;
+
+ if ( options === undefined ) {
+ options = {};
}
- // Initial state
- if ( $collapsible.hasClass( 'mw-collapsed' ) ) {
- // Remove here so that the toggler goes in the right direction,
- // It re-adds the class.
- $collapsible.removeClass( 'mw-collapsed' );
- toggleLinkCustom( $customTogglers, null, { instantHide: true }, $collapsible );
+ // Ensure class "mw-collapsible" is present in case .makeCollapsible()
+ // is called on element(s) that don't have it yet.
+ $collapsible = $(this).addClass( 'mw-collapsible' );
+
+ // Return if it has been enabled already.
+ if ( $collapsible.data( 'mw-made-collapsible' ) ) {
+ return;
+ } else {
+ $collapsible.data( 'mw-made-collapsible', true );
}
- // If this is not a custom case, do the default:
- // Wrap the contents add the toggle link
- } else {
+ // Use custom text or default?
+ collapsetext = options.collapseText || $collapsible.attr( 'data-collapsetext' ) || mw.msg( 'collapsible-collapse' );
+ expandtext = options.expandText || $collapsible.attr( 'data-expandtext' ) || mw.msg( 'collapsible-expand' );
+
+ // Create toggle link with a space around the brackets ( [text] )
+ $toggleLink =
+ $( '<a href="#"></a>' )
+ .text( collapsetext )
+ .wrap( '<span class="mw-collapsible-toggle"></span>' )
+ .parent()
+ .prepend( ' [' )
+ .append( '] ' )
+ .on( 'click.mw-collapse', function ( e, opts ) {
+ opts = $.extend( { toggleText: { collapseText: collapsetext, expandText: expandtext } }, options, opts );
+ toggleLinkDefault( $(this), e, opts );
+ } );
+
+ // Check if this element has a custom position for the toggle link
+ // (ie. outside the container or deeper inside the tree)
+ if ( options.$customTogglers ) {
+ $customTogglers = $( options.$customTogglers );
+ } else {
+ collapsibleId = $collapsible.attr( 'id' ) || '';
+ if ( collapsibleId.indexOf( 'mw-customcollapsible-' ) === 0 ) {
+ mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
+ $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
+
+ // Double check that there is actually a customtoggle link
+ if ( !$customTogglers.length ) {
+ mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
+ }
+ }
+ }
- // Elements are treated differently
- if ( $collapsible.is( 'table' ) ) {
- // The toggle-link will be in one the the cells (td or th) of the first row
- $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
- $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+ // Bind the custom togglers
+ if ( $customTogglers && $customTogglers.length ) {
+ $customTogglers.on( 'click.mw-collapse', function ( e, opts ) {
+ opts = $.extend( {}, options, opts );
+ toggleLinkCustom( $(this), e, opts, $collapsible );
+ } );
- // If theres no toggle link, add it to the last cell
- if ( !$toggle.length ) {
- $firstItem.eq(-1).prepend( $toggleLink );
- } else {
- $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
- toggleLinkPremade( $toggle, e, options );
- } );
+ // Initial state
+ if ( options.collapsed || $collapsible.hasClass( 'mw-collapsed' ) ) {
+ // Remove here so that the toggler goes in the right direction,
+ // It re-adds the class.
+ $collapsible.removeClass( 'mw-collapsed' );
+ toggleLinkCustom( $customTogglers, null, $.extend( { instantHide: true }, options ), $collapsible );
}
- } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
- // The toggle-link will be in the first list-item
- $firstItem = $collapsible.find( 'li:first' );
- $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
-
- // If theres no toggle link, add it
- if ( !$toggle.length ) {
- // Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
- // to be "1". Except if the value-attribute is already used.
- // If no value was set WebKit returns "", Mozilla returns '-1', others return null or undefined.
- firstval = $firstItem.attr( 'value' );
- if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
- $firstItem.attr( 'value', '1' );
+ // If this is not a custom case, do the default:
+ // Wrap the contents and add the toggle link
+ } else {
+ // Elements are treated differently
+ if ( $collapsible.is( 'table' ) ) {
+ // The toggle-link will be in one the the cells (td or th) of the first row
+ $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
+ $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+
+ // If theres no toggle link, add it to the last cell
+ if ( !$toggle.length ) {
+ $firstItem.eq(-1).prepend( $toggleLink );
+ } else {
+ $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+ opts = $.extend( {}, options, opts );
+ toggleLinkPremade( $toggle, e, opts );
+ } );
}
- $collapsible.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
- } else {
- $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
- toggleLinkPremade( $toggle, e, options );
- } );
- }
- } else { // <div>, <p> etc.
+ } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
+ // The toggle-link will be in the first list-item
+ $firstItem = $collapsible.find( 'li:first' );
+ $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+
+ // If theres no toggle link, add it
+ if ( !$toggle.length ) {
+ // Make sure the numeral order doesn't get messed up, force the first (soon to be second) item
+ // to be "1". Except if the value-attribute is already used.
+ // If no value was set WebKit returns "", Mozilla returns '-1', others return null or undefined.
+ firstval = $firstItem.attr( 'value' );
+ if ( firstval === undefined || !firstval || firstval === '-1' || firstval === -1 ) {
+ $firstItem.attr( 'value', '1' );
+ }
+ $collapsible.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
+ } else {
+ $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+ opts = $.extend( {}, options, opts );
+ toggleLinkPremade( $toggle, e, opts );
+ } );
+ }
- // The toggle-link will be the first child of the element
- $toggle = $collapsible.find( '> .mw-collapsible-toggle' );
+ } else { // <div>, <p> etc.
- // If a direct child .content-wrapper does not exists, create it
- if ( !$collapsible.find( '> .mw-collapsible-content' ).length ) {
- $collapsible.wrapInner( '<div class="mw-collapsible-content"></div>' );
- }
+ // The toggle-link will be the first child of the element
+ $toggle = $collapsible.find( '> .mw-collapsible-toggle' );
- // If theres no toggle link, add it
- if ( !$toggle.length ) {
- $collapsible.prepend( $toggleLink );
- } else {
- $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, options ) {
- toggleLinkPremade( $toggle, e, options );
- } );
+ // If a direct child .content-wrapper does not exists, create it
+ if ( !$collapsible.find( '> .mw-collapsible-content' ).length ) {
+ $collapsible.wrapInner( '<div class="mw-collapsible-content"></div>' );
+ }
+
+ // If theres no toggle link, add it
+ if ( !$toggle.length ) {
+ $collapsible.prepend( $toggleLink );
+ } else {
+ $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+ opts = $.extend( {}, options, opts );
+ toggleLinkPremade( $toggle, e, opts );
+ } );
+ }
}
}
- }
-
- // Initial state (only for those that are not custom,
- // because the initial state of those has been taken care of already).
- if ( $collapsible.hasClass( 'mw-collapsed' ) && ( $collapsible.attr( 'id' ) || '').indexOf( 'mw-customcollapsible-' ) !== 0 ) {
- $collapsible.removeClass( 'mw-collapsed' );
- // The collapsible element could have multiple togglers
- // To toggle the initial state only click one of them (ie. the first one, eq(0) )
- // Else it would go like: hide,show,hide,show for each toggle link.
- // This is just like it would be in reality (only one toggle is clicked at a time).
- $toggleLink.eq( 0 ).trigger( 'click', [ { instantHide: true } ] );
- }
- } );
-};
+ // Initial state (only for those that are not custom,
+ // because the initial state of those has been taken care of already).
+ if (
+ ( options.collapsed || $collapsible.hasClass( 'mw-collapsed' ) ) &&
+ ( !$customTogglers || !$customTogglers.length )
+ ) {
+ $collapsible.removeClass( 'mw-collapsed' );
+ // The collapsible element could have multiple togglers
+ // To toggle the initial state only click one of them (ie. the first one, eq(0) )
+ // Else it would go like: hide,show,hide,show for each toggle link.
+ // This is just like it would be in reality (only one toggle is clicked at a time).
+ $toggleLink.eq( 0 ).trigger( 'click', [ { instantHide: true } ] );
+ }
+ } );
+ };
}( jQuery, mediaWiki ) );
// like charAt, toLowerCase and split are expected.
return String( data );
} else {
- if ( node.tagName.toLowerCase() === 'img' ) {
+ if ( !node ) {
+ return $node.text();
+ } else if ( node.tagName.toLowerCase() === 'img' ) {
return $node.attr( 'alt' ) || ''; // handle undefined alt
} else {
return $.map( $.makeArray( node.childNodes ), function( elem ) {
}
}
- function getTextFromRowAndCellIndex( rows, rowIndex, cellIndex ) {
- if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
- return $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
- } else {
- return '';
- }
- }
-
function detectParserForColumn( table, rows, cellIndex ) {
var l = parsers.length,
nodeValue,
concurrent = 0,
needed = ( rows.length > 4 ) ? 5 : rows.length;
- while( i < l ) {
- nodeValue = getTextFromRowAndCellIndex( rows, rowIndex, cellIndex );
+ while ( i < l ) {
+ if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
+ nodeValue = $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
+ } else {
+ nodeValue = '';
+ }
+
if ( nodeValue !== '') {
if ( parsers[i].is( nodeValue, table ) ) {
concurrent++;
}
+ /**
+ * Replace all rowspanned cells in the body with clones in each row, so sorting
+ * need not worry about them.
+ *
+ * @param $table jQuery object for a <table>
+ */
function explodeRowspans( $table ) {
- // Split multi row cells into multiple cells with the same content
- $table.find( '> tbody > tr > [rowspan]' ).each(function () {
- var rowSpan = this.rowSpan;
- this.rowSpan = 1;
- var cell = $( this );
- var next = cell.parent().nextAll();
+ var rowspanCells = $table.find( '> tbody > tr > [rowspan]' ).get();
+
+ // Short circuit
+ if ( !rowspanCells.length ) {
+ return;
+ }
+
+ // First, we need to make a property like cellIndex but taking into
+ // account colspans. We also cache the rowIndex to avoid having to take
+ // cell.parentNode.rowIndex in the sorting function below.
+ $table.find( '> tbody > tr' ).each( function () {
+ var col = 0;
+ var l = this.cells.length;
+ for ( var i = 0; i < l; i++ ) {
+ this.cells[i].realCellIndex = col;
+ this.cells[i].realRowIndex = this.rowIndex;
+ col += this.cells[i].colSpan;
+ }
+ } );
+
+ // Split multi row cells into multiple cells with the same content.
+ // Sort by column then row index to avoid problems with odd table structures.
+ // Re-sort whenever a rowspanned cell's realCellIndex is changed, because it
+ // might change the sort order.
+ function resortCells() {
+ rowspanCells = rowspanCells.sort( function ( a, b ) {
+ var ret = a.realCellIndex - b.realCellIndex;
+ if ( !ret ) {
+ ret = a.realRowIndex - b.realRowIndex;
+ }
+ return ret;
+ } );
+ $.each( rowspanCells, function () {
+ this.needResort = false;
+ } );
+ }
+ resortCells();
+
+ var spanningRealCellIndex, rowSpan, colSpan;
+ function filterfunc() {
+ return this.realCellIndex >= spanningRealCellIndex;
+ }
+
+ function fixTdCellIndex() {
+ this.realCellIndex += colSpan;
+ if ( this.rowSpan > 1 ) {
+ this.needResort = true;
+ }
+ }
+
+ while ( rowspanCells.length ) {
+ if ( rowspanCells[0].needResort ) {
+ resortCells();
+ }
+
+ var cell = rowspanCells.shift();
+ rowSpan = cell.rowSpan;
+ colSpan = cell.colSpan;
+ spanningRealCellIndex = cell.realCellIndex;
+ cell.rowSpan = 1;
+ var $nextRows = $( cell ).parent().nextAll();
for ( var i = 0; i < rowSpan - 1; i++ ) {
- var td = next.eq( i ).children( 'td' );
- if ( !td.length ) {
- next.eq( i ).append( cell.clone() );
- } else if ( this.cellIndex === 0 ) {
- td.eq( this.cellIndex ).before( cell.clone() );
+ var $tds = $( $nextRows[i].cells ).filter( filterfunc );
+ var $clone = $( cell ).clone();
+ $clone[0].realCellIndex = spanningRealCellIndex;
+ if ( $tds.length ) {
+ $tds.each( fixTdCellIndex );
+ $tds.first().before( $clone );
} else {
- td.eq( this.cellIndex - 1 ).after( cell.clone() );
+ $nextRows.eq( i ).append( $clone );
}
}
- });
+ }
}
function buildCollationTable() {
</p>
!! end
+###
+### Non-html5 tags
+###
+
+!! test
+Non-html5 tags should be accepted
+!! input
+<center>''foo''</center>
+<big>''foo''</big>
+<font>''foo''</font>
+<strike>''foo''</strike>
+<tt>''foo''</tt>
+!! result
+<center><i>foo</i></center>
+<p><big><i>foo</i></big>
+<font><i>foo</i></font>
+<strike><i>foo</i></strike>
+<tt><i>foo</i></tt>
+</p>
+!! end
+
###
### <nowiki> test cases
###
}
}
+ function usesTemporaryTables() {
+ return self::$useTemporaryTables;
+ }
+
/**
* obtains a new temporary file name
*
* The obtained filename is enlisted to be removed upon tearDown
*
- * @returns string: absolute name of the temporary file
+ * @return string: absolute name of the temporary file
*/
protected function getNewTempFile() {
$fname = tempnam( wfTempDir(), 'MW_PHPUnit_' . get_class( $this ) . '_' );
* The obtained directory is enlisted to be removed (recursively with all its contained
* files) upon tearDown.
*
- * @returns string: absolute name of the temporary directory
+ * @return string: absolute name of the temporary directory
*/
protected function getNewTempDirectory() {
// Starting of with a temporary /file/.
$dbw = wfGetDB( DB_MASTER );
$dbw->update( 'revision',
- array( 'rev_timestamp' => $timestamp ),
+ array( 'rev_timestamp' => $dbw->timestamp( $timestamp ) ),
array( 'rev_id' => $page->getLatest() ) );
$page->clear();
/**
* Test out Html::element drops or enforces default value
- * @cover Html::dropDefaults
+ * @covers Html::dropDefaults
* @dataProvider provideElementsWithAttributesHavingDefaultValues
*/
function testDropDefaults( $expected, $element, $attribs, $message = '' ) {
/**
* @dataProvider provideCasesForUserLink
- * @cover Linker::userLink
+ * @covers Linker::userLink
*/
function testUserLink( $expected, $userId, $userName, $altUserName = false, $msg = '' ) {
$this->setMwGlobals( array(
<?php
+/**
+ * @group Database
+ */
class RequestContextTest extends MediaWikiTestCase {
/**
}
+ public function testImportScopedSession() {
+ $context = RequestContext::getMain();
+
+ $oInfo = $context->exportSession();
+ $this->assertEquals( '127.0.0.1', $oInfo['ip'], "Correct initial IP address." );
+ $this->assertEquals( 0, $oInfo['userId'], "Correct initial user ID." );
+
+ $user = User::newFromName( 'UnitTestContextUser' );
+ $user->addToDatabase();
+
+ $sinfo = array(
+ 'sessionId' => 'd612ee607c87e749ef14da4983a702cd',
+ 'userId' => $user->getId(),
+ 'ip' => '192.0.2.0',
+ 'headers' => array( 'USER-AGENT' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0' )
+ );
+ $sc = RequestContext::importScopedSession( $sinfo ); // load new context
+
+ $info = $context->exportSession();
+ $this->assertEquals( $sinfo['ip'], $info['ip'], "Correct IP address." );
+ $this->assertEquals( $sinfo['headers'], $info['headers'], "Correct headers." );
+ $this->assertEquals( $sinfo['sessionId'], $info['sessionId'], "Correct session ID." );
+ $this->assertEquals( $sinfo['userId'], $info['userId'], "Correct user ID." );
+ $this->assertEquals( $sinfo['ip'], $context->getRequest()->getIP(), "Correct context IP address." );
+ $this->assertEquals( $sinfo['headers'], $context->getRequest()->getAllHeaders(), "Correct context headers." );
+ $this->assertEquals( $sinfo['sessionId'], session_id(), "Correct context session ID." );
+ $this->assertEquals( true, $context->getUser()->isLoggedIn(), "Correct context user." );
+ $this->assertEquals( $sinfo['userId'], $context->getUser()->getId(), "Correct context user ID." );
+ $this->assertEquals( 'UnitTestContextUser', $context->getUser()->getName(), "Correct context user name." );
+
+ unset ( $sc ); // restore previous context
+
+ $info = $context->exportSession();
+ $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct initial IP address." );
+ $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct initial headers." );
+ $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct initial session ID." );
+ $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct initial user ID." );
+ }
}
}
/**
- * @cover Sanitizer::removeHTMLtags
+ * @covers Sanitizer::removeHTMLtags
* @dataProvider provideHtml5Tags
*
* @param String $tag Name of an HTML5 element (ie: 'video')
/**
* @dataProvider provideTagAttributesToDecode
- * @cover Sanitizer::decodeTagAttributes
+ * @covers Sanitizer::decodeTagAttributes
*/
function testDecodeTagAttributes( $expected, $attributes, $message = '' ) {
$this->assertEquals( $expected,
/**
* @dataProvider provideDeprecatedAttributes
- * @cover Sanitizer::fixTagAttributes
+ * @covers Sanitizer::fixTagAttributes
*/
function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl, $message = '' ) {
$this->assertEquals( " $inputAttr",
/**
* @dataProvider provideCssCommentsFixtures
- * @cover Sanitizer::checkCss
+ * @covers Sanitizer::checkCss
*/
function testCssCommentsChecking( $expected, $css, $message = '' ) {
$this->assertEquals( $expected,
* This test StringUtils::isUtf8 whenever we have mbstring extension
* loaded.
*
- * @cover StringUtils::isUtf8
+ * @covers StringUtils::isUtf8
* @dataProvider provideStringsForIsUtf8Check
*/
function testIsUtf8WithMbstring( $expected, $string ) {
* implementation used as a fallback when mb_check_encoding() is
* not available.
*
- * @cover StringUtils::isUtf8
+ * @covers StringUtils::isUtf8
* @dataProvider provideStringsForIsUtf8Check
*/
function testIsUtf8WithPhpFallbackImplementation( $expected, $string ) {
* @param string $action
* @param array|string|true $expected Required error
*
- * @covers Title::checkReadPermission
+ * @covers Title::checkReadPermissions
* @dataProvider dataWgWhitelistReadRegexp
*/
function testWgWhitelistReadRegexp( $whitelistRegexp, $source, $action, $expected ) {
$dbw = wfGetDB( DB_MASTER );
$dbw->update( 'revision',
- array( 'rev_timestamp' => $timestamp ),
+ array( 'rev_timestamp' => $dbw->timestamp( $timestamp ) ),
array( 'rev_id' => $page->getLatest() ) );
$page->clear();
}
function addDBData() {
+ // be sure english messages under $key, not $key/en
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => 'en',
+ 'wgContLang' => Language::factory( 'en' ),
+ ) );
+
// Set up messages and fallbacks ab -> ru -> en
$this->makePage( 'FallbackLanguageTest-Full', 'ab' );
$this->makePage( 'FallbackLanguageTest-Full', 'ru' );
$dest, // dest
);
+ $op2 = $op;
+ $op2['ignoreMissingSource'] = true;
+ $cases[] = array(
+ $op2, // operation
+ self::baseStorePath() . '/unittest-cont-bad/e/file.txt', // source
+ $dest, // dest
+ );
+
return $cases;
}
$dest, // dest
);
+ $op2 = $op;
+ $op2['ignoreMissingSource'] = true;
+ $cases[] = array(
+ $op2, // operation
+ self::baseStorePath() . '/unittest-cont-bad/e/file.txt', // source
+ $dest, // dest
+ );
+
return $cases;
}
true // succeeds
);
+ $op['ignoreMissingSource'] = true;
+ $op['src'] = self::baseStorePath() . '/unittest-cont-bad/e/file.txt';
+ $cases[] = array(
+ $op, // operation
+ false, // without source
+ true // succeeds
+ );
+
return $cases;
}
private function doTestLockCalls() {
$backendName = $this->backendClass();
- for ( $i=0; $i<50; $i++ ) {
- $paths = array(
- "test1.txt",
- "test2.txt",
- "test3.txt",
- "subdir1",
- "subdir1", // duplicate
- "subdir1/test1.txt",
- "subdir1/test2.txt",
- "subdir2",
- "subdir2", // duplicate
- "subdir2/test3.txt",
- "subdir2/test4.txt",
- "subdir2/subdir",
- "subdir2/subdir/test1.txt",
- "subdir2/subdir/test2.txt",
- "subdir2/subdir/test3.txt",
- "subdir2/subdir/test4.txt",
- "subdir2/subdir/test5.txt",
- "subdir2/subdir/sub",
- "subdir2/subdir/sub/test0.txt",
- "subdir2/subdir/sub/120-px-file.txt",
- );
+ $paths = array(
+ "test1.txt",
+ "test2.txt",
+ "test3.txt",
+ "subdir1",
+ "subdir1", // duplicate
+ "subdir1/test1.txt",
+ "subdir1/test2.txt",
+ "subdir2",
+ "subdir2", // duplicate
+ "subdir2/test3.txt",
+ "subdir2/test4.txt",
+ "subdir2/subdir",
+ "subdir2/subdir/test1.txt",
+ "subdir2/subdir/test2.txt",
+ "subdir2/subdir/test3.txt",
+ "subdir2/subdir/test4.txt",
+ "subdir2/subdir/test5.txt",
+ "subdir2/subdir/sub",
+ "subdir2/subdir/sub/test0.txt",
+ "subdir2/subdir/sub/120-px-file.txt",
+ );
+ for ( $i=0; $i<25; $i++ ) {
$status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
- $this->assertEquals( array(), $status->errors,
- "Locking of files succeeded ($backendName)." );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName) ($i)." );
$this->assertEquals( true, $status->isOK(),
- "Locking of files succeeded with OK status ($backendName)." );
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
$status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
- $this->assertEquals( array(), $status->errors,
- "Locking of files succeeded ($backendName)." );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName) ($i)." );
$this->assertEquals( true, $status->isOK(),
- "Locking of files succeeded with OK status ($backendName)." );
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
$status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
- $this->assertEquals( array(), $status->errors,
- "Locking of files succeeded ($backendName)." );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName) ($i)." );
+ $this->assertEquals( true, $status->isOK(),
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+ $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName). ($i)" );
$this->assertEquals( true, $status->isOK(),
- "Locking of files succeeded with OK status ($backendName)." );
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+ ## Flip the acquire/release ordering around ##
+
+ $status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName) ($i)." );
+ $this->assertEquals( true, $status->isOK(),
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+ $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName) ($i)." );
+ $this->assertEquals( true, $status->isOK(),
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
$status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
- $this->assertEquals( array(), $status->errors,
- "Locking of files succeeded ($backendName)." );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName). ($i)" );
+ $this->assertEquals( true, $status->isOK(),
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
+
+ $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
+ $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
+ "Locking of files succeeded ($backendName) ($i)." );
$this->assertEquals( true, $status->isOK(),
- "Locking of files succeeded with OK status ($backendName)." );
+ "Locking of files succeeded with OK status ($backendName) ($i)." );
}
$status = Status::newGood();
* Requires PHPUnit.
*
* @ingroup UtfNormal
+ * @group Large
*/
class CleanUpTest extends MediaWikiTestCase {
/** @todo document */
/** @dataProvider providePluralAllForms */
function testPluralAllForms( $result, $value ) {
- $forms = array( 'one', 'few', 'many', 'other' );
+ $forms = array( 'one', 'two', 'few', 'other' );
$this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralAllForms() {
return array(
- array( 'many', 0 ),
+ array( 'few', 0 ),
array( 'one', 1 ),
- array( 'few', 2 ),
+ array( 'two', 2 ),
array( 'other', 3 ),
- array( 'many', 10 ),
- array( 'many', 11 ),
- array( 'many', 12 ),
- array( 'many', 19 ),
+ array( 'few', 10 ),
+ array( 'few', 11 ),
+ array( 'few', 12 ),
+ array( 'few', 19 ),
array( 'other', 20 ),
- array( 'many', 100 ),
+ array( 'few', 100 ),
array( 'one', 101 ),
- array( 'many', 111 ),
- array( 'many', 112 ),
+ array( 'few', 111 ),
+ array( 'few', 112 ),
);
}
return array(
array(
0,
- "0bps",
+ "0 bps",
"0 bits per second"
),
array(
999,
- "999bps",
+ "999 bps",
"999 bits per second"
),
array(
1000,
- "1kbps",
+ "1 kbps",
"1 kilobit per second"
),
array(
1000 * 1000,
- "1Mbps",
+ "1 Mbps",
"1 megabit per second"
),
array(
pow( 10, 9 ),
- "1Gbps",
+ "1 Gbps",
"1 gigabit per second"
),
array(
pow( 10, 12 ),
- "1Tbps",
+ "1 Tbps",
"1 terabit per second"
),
array(
pow( 10, 15 ),
- "1Pbps",
+ "1 Pbps",
"1 petabit per second"
),
array(
pow( 10, 18 ),
- "1Ebps",
+ "1 Ebps",
"1 exabit per second"
),
array(
pow( 10, 21 ),
- "1Zbps",
+ "1 Zbps",
"1 zetabit per second"
),
array(
pow( 10, 24 ),
- "1Ybps",
+ "1 Ybps",
"1 yottabit per second"
),
array(
pow( 10, 27 ),
- "1,000Ybps",
+ "1,000 Ybps",
"1,000 yottabits per second"
),
);
var mwTestIgnore, mwTester,
addons,
- envExecCount;
+ envExecCount,
+ ELEMENT_NODE = 1,
+ TEXT_NODE = 3;
/**
* Add bogus to url to prevent IE crazy caching
return $.when.apply( $, altPromises );
};
+ /**
+ * Recursively convert a node to a plain object representing its structure.
+ * Only considers attributes and contents (elements and text nodes).
+ * Attribute values are compared strictly and not normalised.
+ *
+ * @param {Node} node
+ * @return {Object|string} Plain JavaScript value representing the node.
+ */
+ function getDomStructure( node ) {
+ var $node, children, processedChildren, i, len, el;
+ $node = $( node );
+ if ( node.nodeType === ELEMENT_NODE ) {
+ children = $node.contents();
+ processedChildren = [];
+ for ( i = 0, len = children.length; i < len; i++ ) {
+ el = children[i];
+ if ( el.nodeType === ELEMENT_NODE || el.nodeType === TEXT_NODE ) {
+ processedChildren.push( getDomStructure( el ) );
+ }
+ }
+
+ return {
+ tagName: node.tagName,
+ attributes: $node.getAttrs(),
+ contents: processedChildren
+ };
+ } else {
+ // Should be text node
+ return $node.text();
+ }
+ }
+
+ /**
+ * Gets structure of node for this HTML.
+ *
+ * @param {string} html HTML markup for one or more nodes.
+ */
+ function getHtmlStructure( html ) {
+ var el = $( '<div>' ).append( html )[0];
+ return getDomStructure( el );
+ }
+
/**
* Add-on assertion helpers
*/
// Expect numerical value greater than or equal to X
gtOrEq: function ( actual, expected, message ) {
QUnit.push( actual >= expected, actual, 'greater than or equal to ' + expected, message );
+ },
+
+ /**
+ * Asserts that two HTML strings are structurally equivalent.
+ *
+ * @param {string} actualHtml Actual HTML markup.
+ * @param {string} expectedHtml Expected HTML markup
+ * @param {string} message Assertion message.
+ */
+ htmlEqual: function ( actualHtml, expectedHtml, message ) {
+ var actual = getHtmlStructure( actualHtml ),
+ expected = getHtmlStructure( expectedHtml );
+
+ QUnit.push(
+ QUnit.equiv(
+ actual,
+ expected
+ ),
+ actual,
+ expected,
+ message
+ );
+ },
+
+ /**
+ * Asserts that two HTML strings are not structurally equivalent.
+ *
+ * @param {string} actualHtml Actual HTML markup.
+ * @param {string} expectedHtml Expected HTML markup.
+ * @param {string} message Assertion message.
+ */
+ notHtmlEqual: function ( actualHtml, expectedHtml, message ) {
+ var actual = getHtmlStructure( actualHtml ),
+ expected = getHtmlStructure( expectedHtml );
+
+ QUnit.push(
+ !QUnit.equiv(
+ actual,
+ expected
+ ),
+ actual,
+ expected,
+ message
+ );
}
};
assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
} );
+ QUnit.test( 'htmlEqual', 8, function ( assert ) {
+ assert.htmlEqual(
+ '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>',
+ '<div><p data-length=\'10\' class=\'some classes\'>Child paragraph with <a href=\'http://example.com\' >A link</a></p>Regular text<span>A span</span></div>',
+ 'Attribute order, spacing and quotation marks (equal)'
+ );
+
+ assert.notHtmlEqual(
+ '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>',
+ '<div><p data-length=\'10\' class=\'some more classes\'>Child paragraph with <a href=\'http://example.com\' >A link</a></p>Regular text<span>A span</span></div>',
+ 'Attribute order, spacing and quotation marks (not equal)'
+ );
+
+ assert.htmlEqual(
+ '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="minor">Last</label><input id="lastname" />',
+ '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="minor">Last</label><input id="lastname" />',
+ 'Multiple root nodes (equal)'
+ );
+
+ assert.notHtmlEqual(
+ '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="minor">Last</label><input id="lastname" />',
+ '<label for="firstname" accesskey="f" class="important">First</label><input id="firstname" /><label for="lastname" accesskey="l" class="important" >Last</label><input id="lastname" />',
+ 'Multiple root nodes (not equal, last label node is different)'
+ );
+
+ assert.htmlEqual(
+ 'fo"o<br/>b>ar',
+ 'fo"o<br/>b>ar',
+ 'Extra escaping is equal'
+ );
+ assert.notHtmlEqual(
+ 'foo<br/>bar',
+ 'foo<br/>bar',
+ 'Text escaping (not equal)'
+ );
+
+ assert.htmlEqual(
+ 'foo<a href="http://example.com">example</a>bar',
+ 'foo<a href="http://example.com">example</a>bar',
+ 'Outer text nodes are compared (equal)'
+ );
+
+ assert.notHtmlEqual(
+ 'foo<a href="http://example.com">example</a>bar',
+ 'foo<a href="http://example.com">example</a>quux',
+ 'Outer text nodes are compared (last text node different)'
+ );
+
+ } );
+
QUnit.module( 'mediawiki.tests.qunit.testrunner-after', QUnit.newMwEnvironment() );
QUnit.test( 'Teardown', 3, function ( assert ) {
} );
}
+ /**
+ * Run a table test by building a table with the given HTML,
+ * running some callback on it, then checking the results.
+ *
+ * @param {String} msg text to pass on to qunit for the comparison
+ * @param {String} HTML to make the table
+ * @param {String[][]} expected rows/cols to compare against at end
+ * @param {function($table)} callback something to do with the table before we compare
+ */
+ function tableTestHTML( msg, html, expected, callback ) {
+ QUnit.test( msg, 1, function ( assert ) {
+ var $table = $( html );
+
+ // Give caller a chance to set up sorting and manipulate the table.
+ if ( callback ) {
+ callback( $table );
+ } else {
+ $table.tablesorter();
+ $table.find( '#sortme' ).click();
+ }
+
+ // Table sorting is done synchronously; if it ever needs to change back
+ // to asynchronous, we'll need a timeout or a callback here.
+ var extracted = tableExtract( $table );
+ assert.deepEqual( extracted, expected, msg );
+ } );
+ }
+
function reversed( arr ) {
// Clone array
var arr2 = arr.slice( 0 );
'Applied correct sorting order'
);
} );
+
+ // bug 41889 - exploding rowspans in more complex cases
+ tableTestHTML(
+ 'Rowspan exploding with row headers',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><th rowspan="2">foo</th><td rowspan="2">bar</td><td>baz</td></tr>' +
+ '<tr><td>2</td><td>baz</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo', 'bar', 'baz' ],
+ [ '2', 'foo', 'bar', 'baz' ]
+ ]
+ );
+
+ tableTestHTML(
+ 'Rowspan exploding with colspanned cells',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td></tr>' +
+ '<tr><td>2</td><td colspan="2">foobar</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo', 'bar', 'baz' ],
+ [ '2', 'foobar', 'baz' ]
+ ]
+ );
+
+ tableTestHTML(
+ 'Rowspan exploding with colspanned cells (2)',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th><th>quux</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>quux</td></tr>' +
+ '<tr><td>2</td><td colspan="2">foobar</td><td>quux</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo', 'bar', 'baz', 'quux' ],
+ [ '2', 'foobar', 'baz', 'quux' ]
+ ]
+ );
+
+ tableTestHTML(
+ 'Rowspan exploding with rightmost rows spanning most',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td rowspan="2">foo</td><td rowspan="4">bar</td></tr>' +
+ '<tr><td>2</td></tr>' +
+ '<tr><td>3</td><td rowspan="2">foo</td></tr>' +
+ '<tr><td>4</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo', 'bar' ],
+ [ '2', 'foo', 'bar' ],
+ [ '3', 'foo', 'bar' ],
+ [ '4', 'foo', 'bar' ]
+ ]
+ );
+
+ tableTestHTML(
+ 'Rowspan exploding with rightmost rows spanning most (2)',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td rowspan="2">foo</td><td rowspan="4">bar</td><td>baz</td></tr>' +
+ '<tr><td>2</td><td>baz</td></tr>' +
+ '<tr><td>3</td><td rowspan="2">foo</td><td>baz</td></tr>' +
+ '<tr><td>4</td><td>baz</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo', 'bar', 'baz' ],
+ [ '2', 'foo', 'bar', 'baz' ],
+ [ '3', 'foo', 'bar', 'baz' ],
+ [ '4', 'foo', 'bar', 'baz' ]
+ ]
+ );
+
+ tableTestHTML(
+ 'Rowspan exploding with row-and-colspanned cells',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo1</th><th>foo2</th><th>bar</th><th>baz</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td rowspan="2">foo1</td><td rowspan="2">foo2</td><td rowspan="4">bar</td><td>baz</td></tr>' +
+ '<tr><td>2</td><td>baz</td></tr>' +
+ '<tr><td>3</td><td colspan="2" rowspan="2">foo</td><td>baz</td></tr>' +
+ '<tr><td>4</td><td>baz</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo1', 'foo2', 'bar', 'baz' ],
+ [ '2', 'foo1', 'foo2', 'bar', 'baz' ],
+ [ '3', 'foo', 'bar', 'baz' ],
+ [ '4', 'foo', 'bar', 'baz' ]
+ ]
+ );
+
+ tableTestHTML(
+ 'Rowspan exploding with uneven rowspan layout',
+ '<table class="sortable">' +
+ '<thead><tr><th id="sortme">n</th><th>foo1</th><th>foo2</th><th>foo3</th><th>bar</th><th>baz</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td rowspan="2">foo1</td><td rowspan="2">foo2</td><td rowspan="2">foo3</td><td>bar</td><td>baz</td></tr>' +
+ '<tr><td>2</td><td rowspan="3">bar</td><td>baz</td></tr>' +
+ '<tr><td>3</td><td rowspan="2">foo1</td><td rowspan="2">foo2</td><td rowspan="2">foo3</td><td>baz</td></tr>' +
+ '<tr><td>4</td><td>baz</td></tr>' +
+ '</tbody></table>',
+ [
+ [ '1', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ],
+ [ '2', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ],
+ [ '3', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ],
+ [ '4', 'foo1', 'foo2', 'foo3', 'bar', 'baz' ]
+ ]
+ );
+
}( jQuery, mediaWiki ) );
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
*/
class SeleniumServerManager {
<?php
-
/**
* MediaWikiButtonsAvailabilityTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
-
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
/**
* Test Case Name :'Back' and 'Continue' button availability
* Version : MediaWiki 1.18alpha
*/
-
class MediaWikiButtonsAvailabilityTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiDifferentDatabaseAccountTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
-
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
/**
* Test Case Name : Install MediaWiki with different Database accounts for web access.
* Version : MediaWiki 1.18alpha
*/
-
class MediaWikiDifferentDatabaseAccountTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiDifferntDatabasePrefixTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
* database prefixes(Share one database between multiple wikis).
* Version : MediaWiki 1.18alpha
*/
-
class MediaWikiDifferntDatabasePrefixTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiErrorsConnectToDatabasePageTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
<?php
-
/**
* MediaWikiErrorsNamepageTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
+
/**
* Test Case ID : 10 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
* Test Case Name : Invalid/ blank values for fields in 'Name' page.
* Version : MediaWiki 1.18alpha
*/
-
-require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
-
class MediaWikiErrorsNamepageTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiHelpFieldHintTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
+require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
+
/**
* Test Case ID : 29 (http://www.mediawiki.org/wiki/New_installer/Test_plan)
* Test Case Name : Help field hint availability for the fields.
* Version : MediaWiki 1.18alpha
*/
-
-require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
-
class MediaWikiHelpFieldHintTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
<?php
-
/**
* MediaWikiInstallationConfig
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
<?php
-
/**
* MediaWikiInstallationConfig
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
<?php
-
/**
* MediaWikiInstallationConfig
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
if ( PHP_SAPI != 'cli' ) {
<?php
-
/**
* MediaWikiOnAlreadyInstalledTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
<?php
-
/**
* MediaWikiMySQLiteataBaseTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
<?php
-
/**
* MediaWikiRestartInstallationTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
-
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
/**
* Test Case Name : Install mediawiki on a already installed Mediawiki.
* Version : MediaWiki 1.18alpha
*/
-
class MediaWikiRestartInstallationTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiRightFrameworkLinksTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
* User selects 'Upgrading' link.
* Version : MediaWiki 1.18alpha
*/
-
class MediaWikiRightFrameworkLinksTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiUpgradeExistingDatabaseTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
-
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
/**
* Test Case Name : Install Mediawiki by updating the existing database.
* Version : MediaWiki 1.18alpha
*/
-
class MediaWikiUpgradeExistingDatabaseTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* MediaWikiUserInterfaceTestCase
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Maintenance
- *
*/
require_once ( __DIR__ . '/MediaWikiInstallationCommonFunction.php' );
* Database settings/ Name/ Options/ Install/ Complete/ Restart Inslation pages
* Version : MediaWiki 1.18alpha
*/
-
-
class MediaWikiUserInterfaceTestCase extends MediaWikiInstallationCommonFunction {
function setUp() {
parent::setUp();
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class AddContentToNewPageTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class AddNewPageTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
Class CreateAccountTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class DeletePageAdminTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class EmailPasswordTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class MediaWikiEditorConfig {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class MovePageTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
require_once dirname( __DIR__ ) . '/SeleniumTestConstants.php';
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class PageSearchTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class PreviewPageTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class SavePageTestCase extends SeleniumTestCase {
<?php
-
/**
* Selenium server manager
*
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
- * @addtogroup Testing
- *
*/
class UserPreferencesTestCase extends SeleniumTestCase {
<?php
/**
* Version of thumb.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
<?php
/**
* Version of thumb_handler.php to used in web server requiring .php5 extension
- * to execute scripts with PHP5 egine.
+ * to execute scripts with PHP5 engine.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by