# Building & testing
node_modules/
-.sass-cache/
# Composer
/vendor
* (bug 55818) BREAKING CHANGE: Removed undocumented 'Debug' hook in wfDebug.
This resolves an infinite loop when using $wgDebugFunctionEntry = true.
* (bug 56707) Correct tooltip of "Next n results" on query special pages.
+* (bug 56770) mw.util.addPortletLink: Check length before access array index.
=== API changes in 1.22 ===
* (bug 25553) The JSON output formatter now leaves forward slashes unescaped
'mediawiki.legacy.wikibits' (which IEFixes depends on) and that will import
IEFixes automatically if user agent conditions are met.
* Code specific to the Math extension was marked as deprecated.
+* mediawiki.util: mw.util.wikiGetlink has been renamed to getUrl. (The old name
+ still works, but is deprecated.)
== Compatibility ==
* Add "wgRelevantUserName" to mw.config containing the current
Skin::getRelevantUser value.
* (bug 56033) Add content model to the page information.
+* Added Article::MissingArticleConditions hook to give extensions a chance to
+ hide their (unrelated) log entries.
+* Added $wgOpenSearchDefaultLimit defining the default number of entries to show
+ on action=opensearch API call.
=== Bug fixes in 1.23 ===
* (bug 41759) The "updated since last visit" markers (on history pages, recent
when the email address is already confirmed. Also, consistently use
"confirmed", rather than "authenticated", when messaging whether or not the
user has confirmed an email address.
+* (bug 56912) Show correct link color on cached result of Special:DeadendPages.
+* Classes TitleListDependency and TitleDependency have been removed, as they
+ have been found unused in core and extensions for a long time.
+* (bug 57098) SpecialPasswordReset now obeys returnto parameter
=== API changes in 1.23 ===
* (bug 54884) action=parse&prop=categories now indicates hidden and missing
categories.
+* action=query&meta=filerepoinfo now returns additional information for each
+ repo.
+* EditPage::spamPage() was deprecated since 1.17 and has been removed.
=== Languages updated in 1.23===
regularly. Below only new and removed languages are listed, as well as
changes to languages because of Bugzilla reports.
+* Support was added for Northern Luri (lrc)
+
=== Other changes in 1.23 ===
* The rc_type field in the recentchanges table has been superseded by a new
rc_source field. The rc_source field is a string representation of the
** The rc_type field of recentchanges will be deprecated in a future point
release.
* The global variable $wgArticle has been removed after a lengthy deprecation.
-* mediawiki.util: mw.util.wikiGetlink has been renamed to getUrl. (The old name
- still works, but is deprecated.)
+* The global functions addButton and insertTags (for mw.toolbar.addButton and
+ mw.toolbar.insertTags) now emits mw.log.warn when accessed.
+* User::getPageRenderingHash() was deprecated since 1.17 and has been removed.
+* The ExpandTemplates extension has been moved into MediaWiki core.
== Compatibility ==
-[July 22nd 2008]
+/docs Directory README
+======================
The 'docs' directory contain various text files that should help you understand
the most important parts of the code of MediaWiki. More in-depth documentation
-can be found at http://www.mediawiki.org/wiki/Manual:Code.
+can be found at:
+ https://www.mediawiki.org/wiki/Manual:Code
API documentation is automatically generated and updated daily at:
- http://svn.wikimedia.org/doc/
+ https://doc.wikimedia.org/mediawiki-core/master/php/html/
You can get a fresh version using 'make doc' or mwdocgen.php in the
../maintenance/ directory.
-For end user / administrators, most of the documentation is located online at:
- http://www.mediawiki.org/wiki/Help:Contents
- http://www.mediawiki.org/wiki/Manual:Contents
+For end users, most of the documentation is located online at:
+ https://www.mediawiki.org/wiki/Help:Contents
+Documentation for MediaWiki site administrators is at:
+ https://www.mediawiki.org/wiki/Manual:Contents
&$tokenTypes: supported token types in format 'type' => callback function
used to retrieve this type of tokens.
+'Article::MissingArticleConditions': Before fetching deletion & move log entries
+to display a message of a non-existing page being deleted/moved, give extensions
+a chance to hide their (unrelated) log entries.
+&$conds: Array of query conditions (all of which have to be met; conditions will
+AND in the final query)
+$logTypes: Array of log types being queried
+
'ArticleAfterFetchContent': After fetching content of an article from the
database. DEPRECATED, use ArticleAfterFetchContentObject instead.
$article: the article (object) being loaded from the database
'DoEditSectionLink': Override the HTML generated for section edit links
$skin: Skin object rendering the UI
$title: Title object for the title being linked to (may not be the same as
- $wgTitle, if the section is included from a template)
+ the page title, if the section is included from a template)
$section: The designation of the section being pointed to, to be included in
the link, like "§ion=$section"
$tooltip: The default tooltip. Escape before using.
$title: Title object of page
&$url: string value as output (out parameter, can modify)
+'GetLogTypesOnUser': Add log types where the target is a userpage
+&$types: Array of log types
+
'GetMetadataVersion': Modify the image metadata version currently in use. This
is used when requesting image metadata from a ForeignApiRepo. Media handlers
that need to have versioned metadata should add an element to the end of the
&$pageInfo: Array of information
'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect.
-$title: Title object ($wgTitle)
+$title: Title object for the current page
$request: WebRequest
$ignoreRedirect: boolean to skip redirect check
$target: Title/string of redirect target
before ordinary actions take place.
$output: $wgOut
$article: Article on which the action will be performed
-$title: $wgTitle
+$title: Title on which the action will be performed
$user: $wgUser
$request: $wgRequest
$mediaWiki: The $mediawiki object
$article: the article that the history is loading for
$context: RequestContext object
-'PageHistoryLineEnding' : Right before the end <li> is added to a history line.
+'PageHistoryLineEnding': Right before the end <li> is added to a history line.
$row: the revision row for this line
$s: the string representing this parsed line
$classes: array containing the <li> element classes
my talk page, my contributions" etc).
&$personal_urls: Array of link specifiers (see SkinTemplate.php)
&$title: Title object representing the current page
+$skin: Skin object providing context (e.g. to check if the user is logged in, etc.)
'PingLimiter': Allows extensions to override the results of User::pingLimiter().
&$user : User performing the action
of values).
More hooks might be available but undocumented, you can execute
-'php maintenance/findHooks.php' to find hidden ones.
+"php maintenance/findHooks.php" to find hidden ones.
That's it. In the execute() method, you have access to all of the normal
MediaWiki functions, so you can get a DB connection, use the cache, etc.
For full docs on the Maintenance class, see the auto-generated docs at
-http://svn.wikimedia.org/doc/classMaintenance.html
+https://doc.wikimedia.org/mediawiki-core/master/php/html/classMaintenance.html
separately. Drop them into this extensions directory and enable as
per the extension's directions.
+You can find a list of extensions and documentation on the MediaWiki website:
+ https://www.mediawiki.org/wiki/Category:Extensions
+
+
If you are a developer, you want to fetch the extension tree in another
directory and make a symbolic link:
mediawiki/extensions$ ln -s ../../extensions-trunk/FooBarExt
-The extensions are available through Git:
+Most extensions are available through Git:
https://gerrit.wikimedia.org/r/#/admin/projects/
+ https://git.wikimedia.org/project/mediawiki
-or Subversion:
+Old extensions are on Subversion:
https://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/
-You can find documentation and additional extensions on MediaWiki website:
- https://www.mediawiki.org/wiki/Category:Extensions
-
Please note that under POSIX systems (Linux...), parent of a symbolic path
refers to the link source, NOT to the target! You should check the env
final public function getContext() {
if ( $this->context instanceof IContextSource ) {
return $this->context;
- } else if ( $this->page instanceof Article ) {
+ } elseif ( $this->page instanceof Article ) {
// NOTE: $this->page can be a WikiPage, which does not have a context.
wfDebug( __METHOD__ . ': no context known, falling back to Article\'s context.' );
return $this->page->getContext();
wfRunHooks( 'ShowMissingArticle', array( $this ) );
+ // Give extensions a chance to hide their (unrelated) log entries
+ $logTypes = array( 'delete', 'move' );
+ $conds = array( "log_action != 'revision'" );
+ wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
+
# Show delete and move logs
- LogEventsList::showLogExtract( $outputPage, array( 'delete', 'move' ), $this->getTitle(), '',
+ LogEventsList::showLogExtract( $outputPage, $logTypes, $this->getTitle(), '',
array( 'lim' => 10,
- 'conds' => array( "log_action != 'revision'" ),
+ 'conds' => $conds,
'showIfEmpty' => false,
'msgKey' => array( 'moveddeleted-notice' ) )
);
'IndexPager' => 'includes/Pager.php',
'Interwiki' => 'includes/interwiki/Interwiki.php',
'LCStore' => 'includes/cache/LocalisationCache.php',
- 'LCStore_Accel' => 'includes/cache/LocalisationCache.php',
- 'LCStore_CDB' => 'includes/cache/LocalisationCache.php',
- 'LCStore_DB' => 'includes/cache/LocalisationCache.php',
- 'LCStore_Null' => 'includes/cache/LocalisationCache.php',
+ 'LCStoreAccel' => 'includes/cache/LocalisationCache.php',
+ 'LCStoreCDB' => 'includes/cache/LocalisationCache.php',
+ 'LCStoreDB' => 'includes/cache/LocalisationCache.php',
+ 'LCStoreNull' => 'includes/cache/LocalisationCache.php',
'License' => 'includes/Licenses.php',
'Licenses' => 'includes/Licenses.php',
'Linker' => 'includes/Linker.php',
'LinkFilter' => 'includes/LinkFilter.php',
'LocalisationCache' => 'includes/cache/LocalisationCache.php',
- 'LocalisationCache_BulkLoad' => 'includes/cache/LocalisationCache.php',
+ 'LocalisationCacheBulkLoad' => 'includes/cache/LocalisationCache.php',
'MagicWord' => 'includes/MagicWord.php',
'MagicWordArray' => 'includes/MagicWord.php',
'MailAddress' => 'includes/UserMailer.php',
'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
'ProcessCacheLRU' => 'includes/cache/ProcessCacheLRU.php',
'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
- 'TitleDependency' => 'includes/cache/CacheDependency.php',
- 'TitleListDependency' => 'includes/cache/CacheDependency.php',
# includes/changes
'ChangesList' => 'includes/changes/ChangesList.php',
# includes/diff
'DiffEngine' => 'includes/diff/DairikiDiff.php',
'DiffOp' => 'includes/diff/DairikiDiff.php',
- 'DiffOp_Add' => 'includes/diff/DairikiDiff.php',
- 'DiffOp_Change' => 'includes/diff/DairikiDiff.php',
- 'DiffOp_Copy' => 'includes/diff/DairikiDiff.php',
- 'DiffOp_Delete' => 'includes/diff/DairikiDiff.php',
- 'HWLDF_WordAccumulator' => 'includes/diff/DairikiDiff.php',
+ 'DiffOpAdd' => 'includes/diff/DairikiDiff.php',
+ 'DiffOpChange' => 'includes/diff/DairikiDiff.php',
+ 'DiffOpCopy' => 'includes/diff/DairikiDiff.php',
+ 'DiffOpDelete' => 'includes/diff/DairikiDiff.php',
+ 'HWLDFWordAccumulator' => 'includes/diff/DairikiDiff.php',
'ArrayDiffFormatter' => 'includes/diff/ArrayDiffFormatter.php',
'Diff' => 'includes/diff/DairikiDiff.php',
'DifferenceEngine' => 'includes/diff/DifferenceEngine.php',
'SpecialContributions' => 'includes/specials/SpecialContributions.php',
'SpecialEditWatchlist' => 'includes/specials/SpecialEditWatchlist.php',
'SpecialEmailUser' => 'includes/specials/SpecialEmailuser.php',
+ 'SpecialExpandTemplates' => 'includes/specials/SpecialExpandTemplates.php',
'SpecialExport' => 'includes/specials/SpecialExport.php',
'SpecialFilepath' => 'includes/specials/SpecialFilepath.php',
'SpecialImport' => 'includes/specials/SpecialImport.php',
# includes/utils
'ArrayUtils' => 'includes/utils/ArrayUtils.php',
+ 'CdbException' => 'includes/utils/Cdb.php',
'CdbFunctions' => 'includes/utils/CdbPHP.php',
'CdbReader' => 'includes/utils/Cdb.php',
- 'CdbReaderDBA' => 'includes/utils/Cdb.php',
+ 'CdbReaderDBA' => 'includes/utils/CdbDBA.php',
'CdbReaderPHP' => 'includes/utils/CdbPHP.php',
'CdbWriter' => 'includes/utils/Cdb.php',
- 'CdbWriterDBA' => 'includes/utils/Cdb.php',
+ 'CdbWriterDBA' => 'includes/utils/CdbDBA.php',
'CdbWriterPHP' => 'includes/utils/CdbPHP.php',
'ConfEditor' => 'includes/utils/ConfEditor.php',
'ConfEditorParseError' => 'includes/utils/ConfEditor.php',
'UserDupes' => 'maintenance/userDupes.inc',
# maintenance/language
- 'csvStatsOutput' => 'maintenance/language/StatOutputs.php',
- 'extensionLanguages' => 'maintenance/language/languages.inc',
- 'languages' => 'maintenance/language/languages.inc',
+ 'CsvStatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'ExtensionLanguages' => 'maintenance/language/languages.inc',
+ 'Languages' => 'maintenance/language/languages.inc',
'MessageWriter' => 'maintenance/language/writeMessagesArray.inc',
- 'statsOutput' => 'maintenance/language/StatOutputs.php',
- 'textStatsOutput' => 'maintenance/language/StatOutputs.php',
- 'wikiStatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'StatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'TextStatsOutput' => 'maintenance/language/StatOutputs.php',
+ 'WikiStatsOutput' => 'maintenance/language/StatOutputs.php',
# maintenance/term
'AnsiTermColorer' => 'maintenance/term/MWTerm.php',
);
class AutoLoader {
- static protected $autoloadLocalClassesLower = null;
+ static protected $autoloadLocalClassesLower = null;
/**
* autoload - take a class name and attempt to load it
// do not strip the leading backlash in this case, causing autoloading to fail.
$className = ltrim( $className, '\\' );
+ $filename = false;
+
if ( isset( $wgAutoloadLocalClasses[$className] ) ) {
$filename = $wgAutoloadLocalClasses[$className];
} elseif ( isset( $wgAutoloadClasses[$className] ) ) {
* and we are plagued with several legacy uses created by MediaWiki < 1.5, see
* https://wikitech.wikimedia.org/wiki/Text_storage_data
*/
- $filename = false;
$lowerClass = strtolower( $className );
if ( self::$autoloadLocalClassesLower === null ) {
return null;
}
-
/**
* Get all blocks that match any IP from an array of IP addresses
*
throw new MWException( 'Unable to determine appropriate JOIN condition for tagging.' );
}
- // JOIN on tag_summary
- $tables[] = 'tag_summary';
- $join_conds['tag_summary'] = array( 'LEFT JOIN', "ts_$join_cond=$join_cond" );
- $fields[] = 'ts_tags';
+ $fields['ts_tags'] = wfGetDB( DB_SLAVE )->buildGroupConcatField(
+ ',', 'change_tag', 'ct_tag', "ct_$join_cond=$join_cond"
+ );
if ( $wgUseTagFilter && $filter_tag ) {
// Somebody wants to filter on a tag.
// Add an INNER JOIN on change_tag
- // FORCE INDEX -- change_tags will almost ALWAYS be the correct query plan.
- $options['USE INDEX'] = array( 'change_tag' => 'change_tag_tag_id' );
- unset( $options['FORCE INDEX'] );
$tables[] = 'change_tag';
$join_conds['change_tag'] = array( 'INNER JOIN', "ct_$join_cond=$join_cond" );
$conds['ct_tag'] = $filter_tag;
* - user: DB user
* - password: DB password
* - type: "mysql" or "postgres"
- * - load: ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0
+ *
+ * - load: Ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0.
+ * If this is zero for any given server, no normal query traffic will be
+ * sent to it. It will be excluded from lag checks in maintenance scripts.
+ * The only way it can receive traffic is if groupLoads is used.
+ *
* - groupLoads: array of load ratios, the key is the query group name. A query may belong
* to several groups, the most specific group defined here is used.
*
*
* CAUTION: Access to database might lead to code execution
*/
-$wgExternalStores = false;
+$wgExternalStores = array();
/**
* An array of external MySQL servers.
/**
* This will cache static pages for non-logged-in users to reduce
* database traffic on public sites.
- * Must set $wgShowIPinHeader = false
+ * Automatically sets $wgShowIPinHeader = false
* ResourceLoader requests to default language and skins are cached
* as well as single module requests.
*/
* As above, except these servers aren't purged on page changes; use to set a
* list of trusted proxies, etc. Supports both individual IP addresses and
* CIDR blocks.
+ * @since 1.23 Supports CIDR ranges
*/
$wgSquidServersNoPurge = array();
* Host for UDP profiler.
*
* The host should be running a daemon which can be obtained from MediaWiki
- * Subversion at: http://svn.wikimedia.org/svnroot/mediawiki/trunk/udpprofile
+ * Git at:
+ * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
*/
$wgUDPProfilerHost = '127.0.0.1';
*/
$wgEnableOpenSearchSuggest = true;
+/**
+ * Integer defining default number of entries to show on
+ * OpenSearch call.
+ */
+$wgOpenSearchDefaultLimit = 10;
+
/**
* Expiry time for search suggestion responses
*/
* @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
* @return bool false if output is done, true if the rest of the form should be displayed
*/
- function attemptSave() {
- global $wgUser, $wgOut;
+ public function attemptSave() {
+ global $wgUser;
$resultDetails = false;
# Allow bots to exempt some edits from bot flagging
$bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
$status = $this->internalAttemptSave( $resultDetails, $bot );
+
+ return $this->handleStatus( $status, $resultDetails );
+ }
+
+ /**
+ * Handle status, such as after attempt save
+ *
+ * @param Status $status
+ * @param array|bool $resultDetails
+ *
+ * @throws ErrorPageError
+ * return bool false, if output is done, true if rest of the form should be displayed
+ */
+ private function handleStatus( Status $status, $resultDetails ) {
+ global $wgUser, $wgOut;
+
// FIXME: once the interface for internalAttemptSave() is made nicer, this should use the message in $status
if ( $status->value == self::AS_SUCCESS_UPDATE || $status->value == self::AS_SUCCESS_NEW_ARTICLE ) {
$this->didSave = true;
return $previewHTML;
}
+ # provide a anchor link to the editform
+ $continueEditing = '<span class="mw-continue-editing">' .
+ '[[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' .
+ wfMessage( 'continue-editing' )->text() . ']]</span>';
if ( $this->mTriedSave && !$this->mTokenOk ) {
if ( $this->mTokenOkExceptSuffix ) {
$note = wfMessage( 'token_suffix_mismatch' )->plain();
} elseif ( $this->incompleteForm ) {
$note = wfMessage( 'edit_form_incomplete' )->plain();
} else {
- $note = wfMessage( 'previewnote' )->plain() .
- ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
+ $note = wfMessage( 'previewnote' )->plain() . ' ' . $continueEditing;
}
$parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
# Used messages to make sure grep find them:
# Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
if ( $level && $format ) {
- $note = "<div id='mw-{$level}{$format}preview'>" . wfMessage( "{$level}{$format}preview" )->text() . "</div>";
+ $note = "<div id='mw-{$level}{$format}preview'>" .
+ wfMessage( "{$level}{$format}preview" )->text() .
+ ' ' . $continueEditing . "</div>";
}
}
$wgOut->returnToMain( false, $this->mTitle );
}
- /**
- * Produce the stock "your edit contains spam" page
- *
- * @param string|bool $match Text which triggered one or more filters
- * @deprecated since 1.17 Use method spamPageWithContent() instead
- */
- static function spamPage( $match = false ) {
- wfDeprecated( __METHOD__, '1.17' );
-
- global $wgOut, $wgTitle;
-
- $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
-
- $wgOut->addHTML( '<div id="spamprotected">' );
- $wgOut->addWikiMsg( 'spamprotectiontext' );
- if ( $match ) {
- $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
- }
- $wgOut->addHTML( '</div>' );
-
- $wgOut->returnToMain( false, $wgTitle );
- }
-
/**
* Show "your edit contains spam" page with your diff and text
*
if ( $row->page_is_redirect ) {
$page = WikiPage::factory( $title );
$redirect = $page->getRedirectTarget();
- if ( $redirect instanceOf Title && $redirect->isValidRedirectTarget() ) {
+ if ( $redirect instanceof Title && $redirect->isValidRedirectTarget() ) {
$out .= ' ' . Xml::element( 'redirect', array( 'title' => self::canonicalTitle( $redirect ) ) ) . "\n";
}
}
*/
function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
global $wgServer, $wgCanonicalServer, $wgInternalServer, $wgRequest;
- $serverUrl = $wgServer;
if ( $defaultProto === PROTO_CANONICAL ) {
$serverUrl = $wgCanonicalServer;
- }
- // Make $wgInternalServer fall back to $wgServer if not set
- if ( $defaultProto === PROTO_INTERNAL && $wgInternalServer !== false ) {
+ } elseif ( $defaultProto === PROTO_INTERNAL && $wgInternalServer !== false ) {
+ // Make $wgInternalServer fall back to $wgServer if not set
$serverUrl = $wgInternalServer;
- }
- if ( $defaultProto === PROTO_CURRENT ) {
- $defaultProto = $wgRequest->getProtocol() . '://';
+ } else {
+ $serverUrl = $wgServer;
+ if ( $defaultProto === PROTO_CURRENT ) {
+ $defaultProto = $wgRequest->getProtocol() . '://';
+ }
}
// Analyze $serverUrl to obtain its protocol
* @param array $environ optional environment variables which should be
* added to the executed command environment.
* @param array $limits optional array with limits(filesize, memory, time, walltime)
- * this overwrites the global wgShellMax* limits.
+ * this overwrites the global wgMaxShell* limits.
* @param array $options Array of options:
- * - duplicateStderr: Set this to true to duplicate stderr to stdout,
+ * - duplicateStderr: Set this to true to duplicate stderr to stdout,
* including errors from limit.sh
- *
+ *
* @return string collected stdout as a string
*/
function wfShellExec( $cmd, &$retval = null, $environ = array(),
$logMsg = false;
// According to the documentation, it is possible for stream_select()
- // to fail due to EINTR. I haven't managed to induce this in testing
- // despite sending various signals. If it did happen, the error
- // message would take the form:
+ // to fail due to EINTR. I haven't managed to induce this in testing
+ // despite sending various signals. If it did happen, the error
+ // message would take the form:
//
// stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
//
wfRunHooks( 'ResetSessionID', array( $oldSessionId, $newSessionId ) );
}
-
/**
* Initialise php session
*
* @param string|bool $cluster Cluster name accepted by LBFactory. Default: false.
*/
function wfWaitForSlaves( $maxLag = false, $wiki = false, $cluster = false ) {
- if( $cluster !== false ) {
+ if ( $cluster !== false ) {
$lb = wfGetLBFactory()->getExternalLB( $cluster );
} else {
$lb = wfGetLB( $wiki );
$attribs['class'] = array( 'mw-htmlform-submit' );
if ( $this->isVForm() ) {
- // mw-ui-block is necessary because the buttons aren't necessarily in an
+ // mw-ui-block is necessary because the buttons aren't necessarily in an
// immediate child div of the vform.
array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-big', 'mw-ui-primary', 'mw-ui-block' );
}
$subsectionHtml = '';
$hasLabel = false;
- switch( $displayFormat ) {
+ switch ( $displayFormat ) {
case 'table':
$getFieldHtmlMethod = 'getTableRow';
break;
$retval = call_user_func_array( $callback, $hook_args );
} catch ( MWHookException $e ) {
$badhookmsg = $e->getMessage();
+ } catch ( Exception $e ) {
+ restore_error_handler();
+ throw $e;
}
restore_error_handler();
wfProfileOut( $func );
}
/**
- * Convenience function to produce an "<input>" element.
+ * Convenience function to produce a <textarea> element.
*
* This supports leaving out the cols= and rows= which Xml requires and are
* required by HTML4/XHTML but not required by HTML5.
$params['width'] = $width;
$params['height'] = $height;
$thumbnail = $this->displayImg->transform( $params );
+ Linker::processResponsiveImages( $this->displayImg, $thumbnail, $params );
$anchorclose = Html::rawElement( 'div', array( 'class' => 'mw-filepage-resolutioninfo' ), $msgsmall );
* @param MediaOutput $thumb
* @param array $hp image parameters
*/
- protected static function processResponsiveImages( $file, $thumb, $hp ) {
+ public static function processResponsiveImages( $file, $thumb, $hp ) {
global $wgResponsiveImages;
if ( $wgResponsiveImages ) {
$hp15 = $hp;
* @param $template QuickTemplate
*/
public function addTemplate( &$template ) {
- ob_start();
- $template->execute();
- $this->addHTML( ob_get_contents() );
- ob_end_clean();
+ $this->addHTML( $template->getHTML() );
}
/**
* @ingroup SpecialPage
*/
abstract class PageQueryPage extends QueryPage {
+ /**
+ * Run a LinkBatch to pre-cache LinkCache information,
+ * like page existence and information for stub color and redirect hints.
+ * This should be done for live data and cached data.
+ *
+ * @param $db DatabaseBase connection
+ * @param ResultWrapper $res
+ */
+ public function preprocessResults( $db, $res ) {
+ if ( !$res->numRows() ) {
+ return;
+ }
+
+ $batch = new LinkBatch();
+ foreach ( $res as $row ) {
+ $batch->add( $row->namespace, $row->title );
+ }
+ $batch->execute();
+
+ $res->seek( 0 );
+ }
+
/**
* Format the result as a simple link to the page
*
if ( $title instanceof Title ) {
$text = $wgContLang->convert( $title->getPrefixedText() );
- return Linker::linkKnown( $title, htmlspecialchars( $text ) );
+ return Linker::link( $title, htmlspecialchars( $text ) );
} else {
return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
* Checks if an IP matches a proxy we've configured.
* @param $ip String
* @return bool
+ * @since 1.23 Supports CIDR ranges in $wgSquidServersNoPurge
*/
function wfIsConfiguredProxy( $ip ) {
global $wgSquidServers, $wgSquidServersNoPurge;
// quick check of known proxy servers
- $trusted = in_array( $ip, $wgSquidServers );
+ $trusted = in_array( $ip, $wgSquidServers )
+ || in_array( $ip, $wgSquidServersNoPurge );
if ( !$trusted ) {
// slightly slower check to see if the ip is listed directly or in a CIDR
// block in $wgSquidServersNoPurge
foreach ( $wgSquidServersNoPurge as $block ) {
- if ( IP::isInRange( $ip, $block ) ) {
+ if ( strpos( $block, '/' ) !== false && IP::isInRange( $ip, $block ) ) {
$trusted = true;
break;
}
$value = preg_replace_callback( $decodeRegex,
array( __CLASS__, 'cssDecodeCallback' ), $value );
+ // Normalize Halfwidth and Fullwidth Unicode block that IE6 might treat as ascii
+ $value = preg_replace_callback(
+ '/[!-z]/u', // U+FF01 to U+FF5A
+ function ( $matches ) {
+ $cp = utf8ToCodepoint( $matches[0] );
+ if ( $cp === false ) {
+ return '';
+ }
+ return chr( $cp - 65248 ); // ASCII range \x21-\x7A
+ },
+ $value
+ );
+
+ // Convert more characters IE6 might treat as ascii
+ // U+0280, U+0274, U+207F, U+029F, U+026A, U+207D, U+208D
+ $value = str_replace(
+ array( 'ʀ', 'ɴ', 'ⁿ', 'ʟ', 'ɪ', '⁽', '₍' ),
+ array( 'r', 'n', 'n', 'l', 'i', '(', '(' ),
+ $value
+ );
+
// Let the value through if it's nothing but a single comment, to
// allow other functions which may reject it to pass some error
// message through.
}
}
+ // S followed by repeat, iteration, or prolonged sound marks,
+ // which IE will treat as "ss"
+ $value = preg_replace(
+ '/s(?:
+ \xE3\x80\xB1 | # U+3031
+ \xE3\x82\x9D | # U+309D
+ \xE3\x83\xBC | # U+30FC
+ \xE3\x83\xBD | # U+30FD
+ \xEF\xB9\xBC | # U+FE7C
+ \xEF\xB9\xBD | # U+FE7D
+ \xEF\xBD\xB0 # U+FF70
+ )/ix',
+ 'ss',
+ $value
+ );
+
// Reject problematic keywords and control characters
- if ( preg_match( '/[\000-\010\016-\037\177]/', $value ) ) {
+ if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) {
return '/* invalid control char */';
} elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( | image-set\s*\( !ix', $value ) ) {
return '/* insecure input */';
$wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
}
-
// Default value is either the suhosin limit or -1 for unlimited
if ( $wgResourceLoaderMaxQueryLength === false ) {
$maxValueLength = ini_get( 'suhosin.get.max_value_length' );
// Singular if no revision -> diff link will show latest change only in any case
$plural = false;
}
- $plural = $plural ? 2 : 1;
- // 2 signifies "more than one revision". We don't know how many, and even if we did,
+ $plural = $plural ? 999 : 1;
+ // 999 signifies "more than one revision". We don't know how many, and even if we did,
// the number of revisions or authors is not necessarily the same as the number of
// "messages".
$newMessagesLink = Linker::linkKnown(
* editSectionLinkForOther().
*
* @param $nt Title The title being linked to (may not be the same as
- * $wgTitle, if the section is included from a template)
+ * the current page, if the section is included from a template)
* @param string $section The designation of the section being pointed to,
* to be included in the link, like "§ion=$section"
* @param string $tooltip The tooltip to use for the link: will be escaped
// otherwise we'll end up with the autonym again.
$ilLangLocalName = Language::fetchLanguageName( $ilInterwikiCode, $userLang->getCode() );
+ if ( $languageLinkTitle->getText() === '' ) {
+ $ilTitle = wfMessage( 'interlanguage-link-title-langonly', $ilLangLocalName )->text();
+ } else {
+ $ilTitle = wfMessage( 'interlanguage-link-title', $languageLinkTitle->getText(),
+ $ilLangLocalName )->text();
+ }
+
$language_urls[] = array(
'href' => $languageLinkTitle->getFullURL(),
'text' => $ilLangName,
- 'title' => wfMessage( 'interlanguage-link-title', $languageLinkTitle->getText(), $ilLangLocalName )->text(),
+ 'title' => $ilTitle,
'class' => $class,
'lang' => wfBCP47( $ilInterwikiCode ),
'hreflang' => wfBCP47( $ilInterwikiCode ),
if ( $oldContext ) {
$this->setContext( $oldContext );
}
+
+ wfProfileOut( __METHOD__ );
}
/**
$personal_urls[$login_id] = $login_url;
}
- wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title ) );
+ wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title, $this ) );
wfProfileOut( __METHOD__ );
return $personal_urls;
}
public function getSkin() {
return $this->data['skin'];
}
+
+ /**
+ * Fetch the output of a QuickTemplate and return it
+ *
+ * @since 1.23
+ * @return String
+ */
+ public function getHTML() {
+ ob_start();
+ $this->execute();
+ $html = ob_get_contents();
+ ob_end_clean();
+ return $html;
+ }
}
/**
*/
public static function getTitleFor( $name, $subpage = false, $fragment = '' ) {
$name = SpecialPageFactory::getLocalNameFor( $name, $subpage );
- if ( $name ) {
- return Title::makeTitle( NS_SPECIAL, $name, $fragment );
- } else {
- throw new MWException( "Invalid special page name \"$name\"" );
- }
+ return Title::makeTitle( NS_SPECIAL, $name, $fragment );
}
/**
}
}
+ /**
+ * If the user is not logged in, throws UserNotLoggedIn error.
+ *
+ * Default error message includes a link to Special:Userlogin with properly set 'returnto' query
+ * parameter.
+ *
+ * @since 1.23
+ * @param string|Message $reasonMsg [optional] Passed on to UserNotLoggedIn constructor. Strings
+ * will be used as message keys. If a string is given, the message will also receive a
+ * formatted login link (generated using the 'loginreqlink' message) as first parameter. If a
+ * Message is given, it will be passed on verbatim.
+ * @param string|Message $titleMsg [optional] Passed on to UserNotLoggedIn constructor. Strings
+ * will be used as message keys.
+ * @throws UserNotLoggedIn
+ */
+ public function requireLogin( $reasonMsg = null, $titleMsg = null ) {
+ if ( $this->getUser()->isAnon() ) {
+ // Use default messages if not given or explicit null passed
+ if ( !$reasonMsg ) {
+ $reasonMsg = 'exception-nologin-text-manual';
+ }
+ if ( !$titleMsg ) {
+ $titleMsg = 'exception-nologin';
+ }
+
+ // Convert to Messages with current context
+ if ( is_string( $reasonMsg ) ) {
+ $loginreqlink = Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Userlogin' ),
+ $this->msg( 'loginreqlink' )->escaped(),
+ array(),
+ array( 'returnto' => $this->getTitle()->getPrefixedText() )
+ );
+ $reasonMsg = $this->msg( $reasonMsg )->rawParams( $loginreqlink );
+ }
+ if ( is_string( $titleMsg ) ) {
+ $titleMsg = $this->msg( $titleMsg );
+ }
+
+ throw new UserNotLoggedIn( $reasonMsg, $titleMsg );
+ }
+ }
+
/**
* Sets headers - this should be called from the execute() method of all derived classes!
*/
* @see wfMessage
*/
public function msg( /* $args */ ) {
- // Note: can't use func_get_args() directly as second or later item in
- // a parameter list until PHP 5.3 or you get a fatal error.
- // Works fine as the first parameter, which appears elsewhere in the
- // code base. Sighhhh.
- $args = func_get_args();
- $message = call_user_func_array( array( $this->getContext(), 'msg' ), $args );
+ $message = call_user_func_array(
+ array( $this->getContext(), 'msg' ),
+ func_get_args()
+ );
// 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
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();
}
}
-
/**
* Redirect from Special:PermanentLink/### to index.php?oldid=###
*/
'Log' => 'SpecialLog',
'Watchlist' => 'SpecialWatchlist',
'Newpages' => 'SpecialNewpages',
- 'Recentchanges' => 'SpecialRecentchanges',
+ 'Recentchanges' => 'SpecialRecentChanges',
'Recentchangeslinked' => 'SpecialRecentchangeslinked',
'Tags' => 'SpecialTags',
'Undelete' => 'SpecialUndelete',
'Whatlinkshere' => 'SpecialWhatlinkshere',
'MergeHistory' => 'SpecialMergeHistory',
+ 'ExpandTemplates' => 'SpecialExpandTemplates',
// Other
'Booksources' => 'SpecialBookSources',
* so that a lack of error-handling will be explicit.
*/
class Status {
+ /** @var bool */
public $ok = true;
+
+ /** @var mixed */
public $value;
/** Counters for batch operations */
+ /** @var int */
public $successCount = 0;
+
+ /** @var int */
public $failCount = 0;
/** Array to indicate which items of the batch operations were successful */
+ /** @var array */
public $success = array();
+ /** @var array */
public $errors = array();
+
+ /** @var callable */
public $cleanCallback = false;
/**
* @param $ok Boolean: whether the operation completed
* @param $value Mixed
*/
- function setResult( $ok, $value = null ) {
+ public function setResult( $ok, $value = null ) {
$this->ok = $ok;
$this->value = $value;
}
*
* @return Boolean
*/
- function isGood() {
+ public function isGood() {
return $this->ok && !$this->errors;
}
*
* @return Boolean
*/
- function isOK() {
+ public function isOK() {
return $this->ok;
}
*
* @param string|Message $message message name or object
*/
- function warning( $message /*, parameters... */ ) {
+ public function warning( $message /*, parameters... */ ) {
$params = array_slice( func_get_args(), 1 );
$this->errors[] = array(
'type' => 'warning',
*
* @param string|Message $message message name or object
*/
- function error( $message /*, parameters... */ ) {
+ public function error( $message /*, parameters... */ ) {
$params = array_slice( func_get_args(), 1 );
$this->errors[] = array(
'type' => 'error',
*
* @param string|Message $message message name or object
*/
- function fatal( $message /*, parameters... */ ) {
+ public function fatal( $message /*, parameters... */ ) {
$params = array_slice( func_get_args(), 1 );
$this->errors[] = array(
'type' => 'error',
/**
* Sanitize the callback parameter on wakeup, to avoid arbitrary execution.
*/
- function __wakeup() {
+ public function __wakeup() {
$this->cleanCallback = false;
}
* @param string $longContext a long enclosing context message name, for a list
* @return String
*/
- function getWikiText( $shortContext = false, $longContext = false ) {
+ public function getWikiText( $shortContext = false, $longContext = false ) {
if ( count( $this->errors ) == 0 ) {
if ( $this->ok ) {
$this->fatal( 'internalerror_info',
* @param string $longContext a long enclosing context message name, for a list
* @return Message
*/
- function getMessage( $shortContext = false, $longContext = false ) {
+ public function getMessage( $shortContext = false, $longContext = false ) {
if ( count( $this->errors ) == 0 ) {
if ( $this->ok ) {
$this->fatal( 'internalerror_info',
$s = wfMessage( $longContext, $wrapper );
}
} else {
- $msgs = $this->getErrorMessageArray( $this->errors );
+ $msgs = $this->getErrorMessageArray( $this->errors );
$msgCount = count( $msgs );
if ( $shortContext ) {
* @param $other Status Other Status object
* @param $overwriteValue Boolean: whether to override the "value" member
*/
- function merge( $other, $overwriteValue = false ) {
+ public function merge( $other, $overwriteValue = false ) {
$this->errors = array_merge( $this->errors, $other->errors );
$this->ok = $this->ok && $other->ok;
if ( $overwriteValue ) {
* @return array A list in which each entry is an array with a message key as its first element.
* The remaining array elements are the message parameters.
*/
- function getErrorsArray() {
+ public function getErrorsArray() {
return $this->getStatusArray( "error" );
}
* @return array A list in which each entry is an array with a message key as its first element.
* The remaining array elements are the message parameters.
*/
- function getWarningsArray() {
+ public function getWarningsArray() {
return $this->getStatusArray( "warning" );
}
* @param string $msg message name
* @return Boolean
*/
- function hasMessage( $msg ) {
+ public function hasMessage( $msg ) {
foreach ( $this->errors as $error ) {
if ( $error['message'] === $msg ) {
return true;
* @param $dest Message|String: Replacement message key or object
* @return bool Return true if the replacement was done, false otherwise.
*/
- function replaceMessage( $source, $dest ) {
+ public function replaceMessage( $source, $dest ) {
$replaced = false;
foreach ( $this->errors as $index => $error ) {
if ( $error['message'] === $source ) {
/**
* Make a Title object from a DB row
*
- * @param $row Object database row (needs at least page_title,page_namespace)
+ * @param stdClass $row Object database row (needs at least page_title,page_namespace)
* @return Title corresponding Title
*/
public static function newFromRow( $row ) {
* Load Title object fields from a DB row.
* If false is given, the title will be treated as non-existing.
*
- * @param $row Object|bool database row
+ * @param $row stdClass|bool database row
*/
public function loadFromRow( $row ) {
if ( $row ) { // page found
$langObj = wfGetLangObj( $contentHandler->getPageLanguage( $this ) );
$this->mPageLanguage = array( $langObj->getCode(), $wgLanguageCode );
} else {
- $langObj = wfGetLangObj( $this->mPageLanguage[0] );
+ $langObj = wfGetLangObj( $this->mPageLanguage[0] );
}
wfProfileOut( __METHOD__ );
return $langObj;
/**
* Set the password for a password reminder or new account email
*
- * @param string $str New password to set
+ * @param $str New password to set or null to set an invalid
+ * password hash meaning that the user will not be able to use it
* @param bool $throttle If true, reset the throttle timestamp to the present
*/
public function setNewpassword( $str, $throttle = true ) {
$this->load();
- $this->mNewpassword = self::crypt( $str );
- if ( $throttle ) {
- $this->mNewpassTime = wfTimestampNow();
+
+ if ( $str === null ) {
+ $this->mNewpassword = '';
+ $this->mNewpassTime = null;
+ } else {
+ $this->mNewpassword = self::crypt( $str );
+ if ( $throttle ) {
+ $this->mNewpassTime = wfTimestampNow();
+ }
}
}
return (bool)$userblock->doAutoblock( $this->getRequest()->getIP() );
}
- /**
- * Generate a string which will be different for any combination of
- * user options which would produce different parser output.
- * This will be used as part of the hash key for the parser cache,
- * so users with the same options can share the same cached data
- * safely.
- *
- * Extensions which require it should install 'PageRenderingHash' hook,
- * which will give them a chance to modify this key based on their own
- * settings.
- *
- * @deprecated since 1.17 use the ParserOptions object to get the relevant options
- * @return string Page rendering hash
- */
- public function getPageRenderingHash() {
- wfDeprecated( __METHOD__, '1.17' );
-
- global $wgRenderHashAppend, $wgLang, $wgContLang;
- if ( $this->mHash ) {
- return $this->mHash;
- }
-
- // stubthreshold is only included below for completeness,
- // since it disables the parser cache, its value will always
- // be 0 when this function is called by parsercache.
-
- $confstr = $this->getOption( 'math' );
- $confstr .= '!' . $this->getStubThreshold();
- $confstr .= '!' . ( $this->getOption( 'numberheadings' ) ? '1' : '' );
- $confstr .= '!' . $wgLang->getCode();
- $confstr .= '!' . $this->getOption( 'thumbsize' );
- // add in language specific options, if any
- $extra = $wgContLang->getExtraHashOptions();
- $confstr .= $extra;
-
- // Since the skin could be overloading link(), it should be
- // included here but in practice, none of our skins do that.
-
- $confstr .= $wgRenderHashAppend;
-
- // Give a chance for extensions to modify the hash, if they have
- // extra options or other effects on the parser cache.
- wfRunHooks( 'PageRenderingHash', array( &$confstr ) );
-
- // Make it a valid memcached key fragment
- $confstr = str_replace( ' ', '_', $confstr );
- $this->mHash = $confstr;
- return $confstr;
- }
-
/**
* Get whether the user is explicitly blocked from account creation.
* @return bool|Block
ini_set( 'html_errors', '0' );
set_error_handler( 'UserMailer::errorHandler' );
- $safeMode = wfIniGetBool( 'safe_mode' );
-
- foreach ( $to as $recip ) {
- if ( $safeMode ) {
- $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
- } else {
- $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
+ try {
+ $safeMode = wfIniGetBool( 'safe_mode' );
+
+ foreach ( $to as $recip ) {
+ if ( $safeMode ) {
+ $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers );
+ } else {
+ $sent = mail( $recip, self::quotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
+ }
}
+ } catch ( Exception $e ) {
+ restore_error_handler();
+ throw $e;
}
restore_error_handler();
* Cached URL protocol
* @var string
*/
- private $protocol;
+ protected $protocol;
public function __construct() {
/// @todo FIXME: This preemptive de-quoting can interfere with other web libraries
class DerivativeRequest extends FauxRequest {
private $base;
+ /**
+ * @param WebRequest $base
+ * @param array $data Array of *non*-urlencoded key => value pairs, the
+ * fake GET/POST values
+ * @param bool $wasPosted Whether to treat the data as POST
+ */
public function __construct( WebRequest $base, $data, $wasPosted = false ) {
$this->base = $base;
parent::__construct( $data, $wasPosted );
}
return parent::doPurge();
}
+
+ /**
+ * Get the categories this file is a member of on the wiki where it was uploaded.
+ * For local files, this is the same as getCategories().
+ * For foreign API files (InstantCommons), this is not supported currently.
+ * Results will include hidden categories.
+ *
+ * @return TitleArray|Title[]
+ * @since 1.23
+ */
+ public function getForeignCategories() {
+ $this->loadFile();
+ $title = $this->mTitle;
+ $file = $this->mFile;
+
+ if ( ! $file instanceof LocalFile ) {
+ wfDebug( __CLASS__ . '::' . __METHOD__ . ' is not supported for this file' );
+ return TitleArray::newFromResult( new FakeResultWrapper( array() ) );
+ }
+
+ /** @var LocalRepo $repo */
+ $repo = $file->getRepo();
+ $dbr = $repo->getSlaveDB();
+
+ $res = $dbr->select(
+ array( 'page', 'categorylinks' ),
+ array(
+ 'page_title' => 'cl_to',
+ 'page_namespace' => NS_CATEGORY,
+ ),
+ array(
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDBkey(),
+ ),
+ __METHOD__,
+ array(),
+ array( 'categorylinks' => array( 'INNER JOIN', 'page_id = cl_from' ) )
+ );
+
+ return TitleArray::newFromResult( $res );
+ }
}
public $mDataLoaded = false; // !< Boolean
public $mIsRedirect = false; // !< Boolean
public $mLatest = false; // !< Integer (false means "not loaded")
- public $mPreparedEdit = false; // !< Array
/**@}}*/
+ /** @var stdclass Map of cache fields (text, parser output, ect) for a proposed/new edit */
+ protected $mPreparedEdit = false;
+
/**
* @var int
*/
$this->mTimestamp = '';
$this->mIsRedirect = false;
$this->mLatest = false;
+ // Bug 57026: do not clear mPreparedEdit since prepareTextForEdit() already checks
+ // the requested rev ID and content against the cached one for equality. For most
+ // content types, the output should not change during the lifetime of this cache.
+ // Clearing it can cause extra parses on edit for no reason.
+ }
+
+ /**
+ * Clear the mPreparedEdit cache field, as may be needed by mutable content types
+ * @return void
+ * @since 1.23
+ */
+ public function clearPreparedEdit() {
$this->mPreparedEdit = false;
}
* @return Status
*/
public function doUpdateRestrictions( array $limit, array $expiry, &$cascade, $reason, User $user ) {
- global $wgCascadingRestrictionLevels;
+ global $wgCascadingRestrictionLevels, $wgContLang;
if ( wfReadOnly() ) {
return Status::newFatal( 'readonlytext', wfReadOnlyReason() );
$logAction = 'protect';
}
+ // Truncate for whole multibyte characters
+ $reason = $wgContLang->truncate( $reason, 255 );
+
if ( $id ) { // Protection of existing page
if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
return Status::newGood();
'pt_namespace' => $this->mTitle->getNamespace(),
'pt_title' => $this->mTitle->getDBkey(),
'pt_create_perm' => $limit['create'],
- 'pt_timestamp' => $dbw->encodeExpiry( wfTimestampNow() ),
+ 'pt_timestamp' => $dbw->timestamp(),
'pt_expiry' => $dbw->encodeExpiry( $expiry['create'] ),
'pt_user' => $user->getId(),
'pt_reason' => $reason,
// Update the protection log
$log = new LogPage( 'protect' );
- $log->addEntry( $logAction, $this->mTitle, trim( $reason ), $params, $user );
+ $log->addEntry( $logAction, $this->mTitle, $reason, $params, $user );
return Status::newGood();
}
* @param string|null $key
*/
public function addCachedHTML( $computeFunction, $args = array(), $key = null ) {
- $this->getOutput()->addHTML( $this->cacheHelper->getCachedValue( $computeFunction, $args, $key ) );
+ $html = $this->cacheHelper->getCachedValue( $computeFunction, $args, $key );
+ $this->getOutput()->addHTML( $html );
}
/**
}
/**
- * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
+ * Sets the time to live for the cache, in seconds or a unix timestamp
+ * indicating the point of expiry.
*
* @since 1.20
*
$this->getOutput()->setSubtitle( $this->cacheHelper->getCachedNotice( $this->getContext() ) );
}
}
-
}
}
wfProfileOut( __METHOD__ );
+
return $s;
}
$d = '';
$t = '';
}
+
return $this->msg( 'lastmodifiedatby', $d, $t )->rawParams(
$this->userLink( $user ) )->params( $user->getName() )->escaped();
}
$anon_ips = array();
# Sift for real versus user names
+ /** @var $user User */
foreach ( $contributors as $user ) {
$cnt--;
if ( $user->isLoggedIn() ) {
}
$count = count( $fulllist );
+
# "Based on work by ..."
return $count
? $this->msg( 'othercontribs' )->rawParams(
public function show() {
$this->page->delete();
-
}
-
}
$editor = new EditPage( $page );
$editor->edit();
}
-
}
-
}
/**
parent::show();
}
-
}
const DIR_PREV = 0;
const DIR_NEXT = 1;
+ /** @var array Array of message keys and strings */
+ public $message;
+
public function getName() {
return 'history';
}
if ( $feedType ) {
$this->feed( $feedType );
wfProfileOut( __METHOD__ );
+
return;
}
)
);
wfProfileOut( __METHOD__ );
+
return;
}
}
if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
$checkDeleted = Xml::checkLabel( $this->msg( 'history-show-deleted' )->text(),
- 'deleted', 'mw-show-deleted-only', $request->getBool( 'deleted' ) ) . "\n";
+ 'deleted', 'mw-show-deleted-only', $request->getBool( 'deleted' ) ) . "\n";
} else {
$checkDeleted = '';
}
) .
Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
Html::hidden( 'action', 'history' ) . "\n" .
- Xml::dateMenu( ( $year == null ? MWTimestamp::getLocalInstance()->format( 'Y' ) : $year ), $month ) . ' ' .
+ Xml::dateMenu(
+ ( $year == null ? MWTimestamp::getLocalInstance()->format( 'Y' ) : $year ),
+ $month
+ ) . ' ' .
( $tagSelector ? ( implode( ' ', $tagSelector ) . ' ' ) : '' ) .
$checkDeleted .
Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "\n" .
$wgContLang->time( $rev->getTimestamp() ) )->inContentLanguage()->text();
} else {
$title = $rev->getUserText() .
- $this->msg( 'colon-separator' )->inContentLanguage()->text() .
- FeedItem::stripComment( $rev->getComment() );
+ $this->msg( 'colon-separator' )->inContentLanguage()->text() .
+ FeedItem::stripComment( $rev->getComment() );
}
+
return new FeedItem(
$title,
$text,
* @ingroup Actions
*/
class HistoryPager extends ReverseChronologicalPager {
- public $lastRow = false, $counter, $historyPage, $buttons, $conds;
+ /**
+ * @var bool|stdClass
+ */
+ public $lastRow = false;
+
+ public $counter, $historyPage, $buttons, $conds;
+
protected $oldIdChecked;
+
protected $preventClickjacking = false;
/**
* @var array
*/
protected $parentLens;
+ /**
+ * @param HistoryAction $historyPage
+ * @param string $year
+ * @param string $month
+ * @param string $tagFilter
+ * @param array $conds
+ */
function __construct( $historyPage, $year = '', $month = '', $tagFilter = '', $conds = array() ) {
parent::__construct( $historyPage->getContext() );
$this->historyPage = $historyPage;
$this->tagFilter
);
wfRunHooks( 'PageHistoryPager::getQueryInfo', array( &$this, &$queryInfo ) );
+
return $queryInfo;
}
return 'rev_timestamp';
}
+ /**
+ * @param stdClass $row
+ * @return string
+ */
function formatRow( $row ) {
if ( $this->lastRow ) {
$latest = ( $this->counter == 1 && $this->mIsFirst );
$s = '';
}
$this->lastRow = $row;
+
return $s;
}
$s .= $this->buttons;
$s .= '<ul id="pagehistory">' . "\n";
+
return $s;
}
private function getRevisionButton( $name, $msg ) {
$this->preventClickjacking();
# Note bug #20966, <button> is non-standard in IE<8
- $element = Html::element( 'button',
+ $element = Html::element(
+ 'button',
array(
'type' => 'submit',
'name' => $name,
$s .= $this->buttons;
}
$s .= '</form>';
+
return $s;
}
*
* @todo document some more, and maybe clean up the code (some params redundant?)
*
- * @param $row Object: the database row corresponding to the previous line.
- * @param $next Mixed: the database row corresponding to the next line. (chronologically previous)
- * @param $notificationtimestamp
- * @param $latest Boolean: whether this row corresponds to the page's latest revision.
- * @param $firstInList Boolean: whether this row corresponds to the first displayed on this history page.
- * @return String: HTML output for the row
+ * @param stdObject $row The database row corresponding to the previous line.
+ * @param mixed $next The database row corresponding to the next line
+ * (chronologically previous)
+ * @param bool|string $notificationtimestamp
+ * @param bool $latest Whether this row corresponds to the page's latest revision.
+ * @param bool $firstInList Whether this row corresponds to the first
+ * displayed on this history page.
+ * @return string HTML output for the row
*/
function historyLine( $row, $next, $notificationtimestamp = false,
- $latest = false, $firstInList = false )
- {
+ $latest = false, $firstInList = false ) {
$rev = new Revision( $row );
$rev->setTitle( $this->getTitle() );
$curlink = $this->curLink( $rev, $latest );
$lastlink = $this->lastLink( $rev, $next );
- $diffButtons = $this->diffButtons( $rev, $firstInList );
+ $curLastlinks = $curlink . $this->historyPage->message['pipe-separator'] . $lastlink;
$histLinks = Html::rawElement(
- 'span',
- array( 'class' => 'mw-history-histlinks' ),
- $this->msg( 'parentheses' )->rawParams( $curlink . $this->historyPage->message['pipe-separator'] . $lastlink )->escaped()
+ 'span',
+ array( 'class' => 'mw-history-histlinks' ),
+ $this->msg( 'parentheses' )->rawParams( $curLastlinks )->escaped()
);
+
+ $diffButtons = $this->diffButtons( $rev, $firstInList );
$s = $histLinks . $diffButtons;
$link = $this->revLink( $rev );
if ( $prevRev && $this->getTitle()->quickUserCan( 'edit', $user ) ) {
if ( $latest && $this->getTitle()->quickUserCan( 'rollback', $user ) ) {
// Get a rollback link without the brackets
- $rollbackLink = Linker::generateRollback( $rev, $this->getContext(), array( 'verify', 'noBrackets' ) );
+ $rollbackLink = Linker::generateRollback(
+ $rev,
+ $this->getContext(),
+ array( 'verify', 'noBrackets' )
+ );
if ( $rollbackLink ) {
$this->preventClickjacking();
$tools[] = $rollbackLink;
}
if ( !$rev->isDeleted( Revision::DELETED_TEXT )
- && !$prevRev->isDeleted( Revision::DELETED_TEXT ) )
- {
+ && !$prevRev->isDeleted( Revision::DELETED_TEXT )
+ ) {
# Create undo tooltip for the first (=latest) line only
$undoTooltip = $latest
? array( 'title' => $this->msg( 'tooltip-undo' )->text() )
if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
$link = "<span class=\"history-deleted\">$link</span>";
}
+
return $link;
}
)
);
} elseif ( !$prevRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
- || !$nextRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) )
- {
+ || !$nextRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
+ ) {
return $last;
} else {
return Linker::linkKnown(
array_merge( $radio, $checkmark, array(
'name' => 'diff',
'id' => "mw-diff-$id" ) ) );
+
return $first . $second;
} else {
return '';
* Backwards-compatibility alias
*/
class HistoryPage extends HistoryAction {
- public function __construct( Page $article ) { # Just to make it public
+ // @codingStandardsIgnoreStart Needed "useless" override to make it public.
+ public function __construct( Page $article ) {
parent::__construct( $article );
}
+ // @codingStandardsIgnoreEnd
public function history() {
$this->onView();
*/
protected function makeHeader( $header ) {
$spanAttribs = array( 'class' => 'mw-headline', 'id' => Sanitizer::escapeId( $header ) );
+
return Html::rawElement( 'h2', array(), Html::element( 'span', $spanAttribs, $header ) );
}
if (
$user->isAllowed( 'unwatchedpages' ) ||
( $wgUnwatchedPageThreshold !== false &&
- $pageCounts['watchers'] >= $wgUnwatchedPageThreshold )
+ $pageCounts['watchers'] >= $wgUnwatchedPageThreshold )
) {
// Number of page watchers
$pageInfo['header-basic'][] = array(
);
wfProfileOut( __METHOD__ );
+
return $result;
}
$anon_ips = array();
# Sift for real versus user names
+ /** @var $user User */
foreach ( $contributors as $user ) {
$page = $user->isAnon()
? SpecialPage::getTitleFor( 'Contributions', $user->getName() )
}
$count = count( $fulllist );
+
# "Based on work by ..."
return $count
? $this->msg( 'othercontribs' )->rawParams(
$this->getOutput()->setPageTitle( $this->msg( 'markedaspatrollederror' ) );
$this->getOutput()->addWikiMsg( 'markedaspatrollederror-noautopatrol' );
$this->getOutput()->returnToMain( null, $return );
+
return;
}
public function show() {
$this->page->protect();
-
}
-
}
/**
public function show() {
$this->page->unprotect();
-
}
-
}
# Output may contain user-specific data;
# vary generated content for open sessions on private wikis
$privateCache = !User::isEveryoneAllowed( 'read' ) && ( $smaxage == 0 || session_id() != '' );
+ // Bug 53032 - make this private if user is logged in,
+ // so we don't accidentally cache cookies
+ $privateCache = $privateCache ?: $this->getUser()->isLoggedIn();
# allow the client to cache this for 24 hours
$mode = $privateCache ? 'private' : 'public';
- $response->header( 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage );
+ $response->header(
+ 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage
+ );
$text = $this->getRawText();
// If it's a MediaWiki message we can just hit the message cache
if ( $request->getBool( 'usemsgcache' ) && $title->getNamespace() == NS_MEDIAWIKI ) {
- // The first "true" is to use the database, the second is to use the content langue
- // and the last one is to specify the message key already contains the language in it ("/de", etc.)
+ // The first "true" is to use the database, the second is to use
+ // the content langue and the last one is to specify the message
+ // key already contains the language in it ("/de", etc.).
$text = MessageCache::singleton()->get( $title->getDBkey(), true, true, true );
// If the message doesn't exist, return a blank
if ( $text === false ) {
}
if ( $text !== false && $text !== '' && $request->getVal( 'templates' ) === 'expand' ) {
- $text = $wgParser->preprocess( $text, $title, ParserOptions::newFromContext( $this->getContext() ) );
+ $text = $wgParser->preprocess(
+ $text,
+ $title,
+ ParserOptions::newFromContext( $this->getContext() )
+ );
}
return $text;
$oldid = 0;
break;
}
+
return $oldid;
}
if ( $this->mOldId !== null ) {
return $this->mOldId;
}
+
return parent::getOldId();
}
}
public function show() {
$this->page->render();
-
}
-
}
$this->getOutput()->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
}
- public function execute() {}
+ public function execute() {
+ }
}
/**
* @ingroup Actions
*/
class RevertFileAction extends FormAction {
+ /**
+ * @var OldLocalFile
+ */
protected $oldFile;
public function getName() {
$oldimage = $this->getRequest()->getText( 'oldimage' );
if ( strlen( $oldimage ) < 16
|| strpos( $oldimage, '/' ) !== false
- || strpos( $oldimage, '\\' ) !== false )
- {
+ || strpos( $oldimage, '\\' ) !== false
+ ) {
throw new ErrorPageError( 'internalerror', 'unexpected', array( 'oldimage', $oldimage ) );
}
- $this->oldFile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $this->getTitle(), $oldimage );
+ $this->oldFile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName(
+ $this->getTitle(),
+ $oldimage
+ );
+
if ( !$this->oldFile->exists() ) {
throw new ErrorPageError( '', 'filerevert-badversion' );
}
'raw' => true,
'default' => $this->msg( 'filerevert-intro',
$this->getTitle()->getText(), $userDate, $userTime,
- wfExpandUrl( $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
- PROTO_CURRENT ) )->parseAsBlock()
+ wfExpandUrl(
+ $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
+ PROTO_CURRENT
+ ) )->parseAsBlock()
),
'comment' => array(
'type' => 'text',
}
public function onSubmit( $data ) {
- $source = $this->page->getFile()->getArchiveVirtualUrl( $this->getRequest()->getText( 'oldimage' ) );
+ $source = $this->page->getFile()->getArchiveVirtualUrl(
+ $this->getRequest()->getText( 'oldimage' )
+ );
$comment = $data['comment'];
+
// TODO: Preserve file properties from database instead of reloading from file
- return $this->page->getFile()->upload( $source, $comment, $comment, 0, false, false, $this->getUser() );
+ return $this->page->getFile()->upload(
+ $source,
+ $comment,
+ $comment,
+ 0,
+ false,
+ false,
+ $this->getUser()
+ );
}
public function onSuccess() {
protected function getDescription() {
$this->getOutput()->addBacklinkSubtitle( $this->getTitle() );
+
return '';
}
}
public function show() {
$special = SpecialPageFactory::getPage( 'Revisiondelete' );
$special->setContext( $this->getContext() );
+ $special->getContext()->setTitle( $special->getTitle() );
$special->run( '' );
}
}
throw new ThrottledError;
}
- if ( isset( $result[0][0] ) && ( $result[0][0] == 'alreadyrolled' || $result[0][0] == 'cantrollback' ) ) {
+ if ( isset( $result[0][0] ) &&
+ ( $result[0][0] == 'alreadyrolled' || $result[0][0] == 'cantrollback' )
+ ) {
$this->getOutput()->setPageTitle( $this->msg( 'rollbackfailed' ) );
$errArray = $result[0];
$errMsg = array_shift( $errArray );
$old = Linker::revUserTools( $current );
$new = Linker::revUserTools( $target );
- $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )->parseAsBlock() );
+ $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )
+ ->parseAsBlock() );
$this->getOutput()->returnToMain( false, $this->getTitle() );
- if ( !$request->getBool( 'hidediff', false ) && !$this->getUser()->getBoolOption( 'norollbackdiff', false ) ) {
+ if ( !$request->getBool( 'hidediff', false ) &&
+ !$this->getUser()->getBoolOption( 'norollbackdiff', false )
+ ) {
$contentHandler = $current->getContentHandler();
- $de = $contentHandler->createDifferenceEngine( $this->getContext(), $current->getId(), $newId, false, true );
+ $de = $contentHandler->createDifferenceEngine(
+ $this->getContext(),
+ $current->getId(),
+ $newId,
+ false,
+ true
+ );
$de->showDiff( '', '' );
}
}
public function show() {
$this->page->view();
}
-
}
wfProfileIn( __METHOD__ );
self::doWatch( $this->getTitle(), $this->getUser() );
wfProfileOut( __METHOD__ );
+
return true;
}
* @return Status
*/
public static function doWatchOrUnwatch( $watch, Title $title, User $user ) {
- if ( $user->isLoggedIn() && $user->isWatched( $title, WatchedItem::IGNORE_USER_RIGHTS ) != $watch ) {
+ if ( $user->isLoggedIn() &&
+ $user->isWatched( $title, WatchedItem::IGNORE_USER_RIGHTS ) != $watch
+ ) {
// If the user doesn't have 'editmywatchlist', we still want to
// allow them to add but not remove items via edits and such.
if ( $watch ) {
return self::doUnwatch( $title, $user );
}
}
+
return Status::newGood();
}
* @param int $checkRights Passed through to $user->addWatch()
* @return Status
*/
- public static function doWatch( Title $title, User $user, $checkRights = WatchedItem::CHECK_USER_RIGHTS ) {
- if ( $checkRights !== WatchedItem::IGNORE_USER_RIGHTS && !$user->isAllowed( 'editmywatchlist' ) ) {
+ public static function doWatch( Title $title, User $user,
+ $checkRights = WatchedItem::CHECK_USER_RIGHTS
+ ) {
+ if ( $checkRights !== WatchedItem::IGNORE_USER_RIGHTS &&
+ !$user->isAllowed( 'editmywatchlist' )
+ ) {
return User::newFatalPermissionDeniedStatus( 'editmywatchlist' );
}
$user->addWatch( $title, $checkRights );
wfRunHooks( 'WatchArticleComplete', array( &$user, &$page ) );
}
+
return $status;
}
$user->removeWatch( $title );
wfRunHooks( 'UnwatchArticleComplete', array( &$user, &$page ) );
}
+
return $status;
}
wfProfileIn( __METHOD__ );
self::doUnwatch( $this->getTitle(), $this->getUser() );
wfProfileOut( __METHOD__ );
+
return true;
}
* The class functions are divided into several areas of functionality:
*
* Module parameters: Derived classes can define getAllowedParams() to specify
- * which parameters to expect, how to parse and validate them.
+ * which parameters to expect, how to parse and validate them.
*
* Profiling: various methods to allow keeping tabs on various tasks and their
- * time costs
+ * time costs
*
* Self-documentation: code to allow the API to document its own state
*
* @ingroup API
*/
abstract class ApiBase extends ContextSource {
-
// These constants allow modules to specify exactly how to treat incoming parameters.
- const PARAM_DFLT = 0; // Default value of the parameter
- const PARAM_ISMULTI = 1; // Boolean, do we accept more than one item for this parameter (e.g.: titles)?
- const PARAM_TYPE = 2; // Can be either a string type (e.g.: 'integer') or an array of allowed values
- const PARAM_MAX = 3; // Max value allowed for a parameter. Only applies if TYPE='integer'
- const PARAM_MAX2 = 4; // Max value allowed for a parameter for bots and sysops. Only applies if TYPE='integer'
- const PARAM_MIN = 5; // Lowest value allowed for a parameter. Only applies if TYPE='integer'
- const PARAM_ALLOW_DUPLICATES = 6; // Boolean, do we allow the same value to be set more than once when ISMULTI=true
- const PARAM_DEPRECATED = 7; // Boolean, is the parameter deprecated (will show a warning)
+ // Default value of the parameter
+ const PARAM_DFLT = 0;
+ // Boolean, do we accept more than one item for this parameter (e.g.: titles)?
+ const PARAM_ISMULTI = 1;
+ // Can be either a string type (e.g.: 'integer') or an array of allowed values
+ const PARAM_TYPE = 2;
+ // Max value allowed for a parameter. Only applies if TYPE='integer'
+ const PARAM_MAX = 3;
+ // Max value allowed for a parameter for bots and sysops. Only applies if TYPE='integer'
+ const PARAM_MAX2 = 4;
+ // Lowest value allowed for a parameter. Only applies if TYPE='integer'
+ const PARAM_MIN = 5;
+ // Boolean, do we allow the same value to be set more than once when ISMULTI=true
+ const PARAM_ALLOW_DUPLICATES = 6;
+ // Boolean, is the parameter deprecated (will show a warning)
+ const PARAM_DEPRECATED = 7;
/// @since 1.17
const PARAM_REQUIRED = 8; // Boolean, is the parameter required?
/// @since 1.17
- const PARAM_RANGE_ENFORCE = 9; // Boolean, if MIN/MAX are set, enforce (die) these? Only applies if TYPE='integer' Use with extreme caution
-
- const PROP_ROOT = 'ROOT'; // Name of property group that is on the root element of the result, i.e. not part of a list
- const PROP_LIST = 'LIST'; // Boolean, is the result multiple items? Defaults to true for query modules, to false for other modules
+ // Boolean, if MIN/MAX are set, enforce (die) these?
+ // Only applies if TYPE='integer' Use with extreme caution
+ const PARAM_RANGE_ENFORCE = 9;
+
+ // Name of property group that is on the root element of the result,
+ // i.e. not part of a list
+ const PROP_ROOT = 'ROOT';
+ // Boolean, is the result multiple items? Defaults to true for query modules,
+ // to false for other modules
+ const PROP_LIST = 'LIST';
const PROP_TYPE = 0; // Type of the property, uses same format as PARAM_TYPE
- const PROP_NULLABLE = 1; // Boolean, can the property be not included in the result? Defaults to false
+ // Boolean, can the property be not included in the result? Defaults to false
+ const PROP_NULLABLE = 1;
const LIMIT_BIG1 = 500; // Fast query, std user limit
const LIMIT_BIG2 = 5000; // Fast query, bot/sysop limit
*/
public function getVersion() {
wfDeprecated( __METHOD__, '1.21' );
+
return '';
}
public function getModuleProfileName( $db = false ) {
if ( $db ) {
return 'API:' . $this->mModuleName . '-DB';
- } else {
- return 'API:' . $this->mModuleName;
}
+
+ return 'API:' . $this->mModuleName;
}
/**
if ( $this->isMain() ) {
ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
}
+
return $this->getMain()->getResult();
}
*/
public function createContext() {
wfDeprecated( __METHOD__, '1.19' );
+
return new DerivativeContext( $this->getContext() );
}
$msg .= "\nThis module only accepts POST requests";
}
if ( $this->isReadMode() || $this->isWriteMode() ||
- $this->mustBePosted() ) {
+ $this->mustBePosted()
+ ) {
$msg .= "\n";
}
$msg = ' ';
}
$msg .= implode( $prefix, $input ) . "\n";
+
return $msg;
}
+
return '';
}
//handle missing type
if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) {
- $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] ) ? $paramSettings[ApiBase::PARAM_DFLT] : null;
+ $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] )
+ ? $paramSettings[ApiBase::PARAM_DFLT]
+ : null;
if ( is_bool( $dflt ) ) {
$paramSettings[ApiBase::PARAM_TYPE] = 'boolean';
} elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
}
}
- if ( isset( $paramSettings[self::PARAM_DEPRECATED] ) && $paramSettings[self::PARAM_DEPRECATED] ) {
+ if ( isset( $paramSettings[self::PARAM_DEPRECATED] )
+ && $paramSettings[self::PARAM_DEPRECATED]
+ ) {
$desc = "DEPRECATED! $desc";
}
- if ( isset( $paramSettings[self::PARAM_REQUIRED] ) && $paramSettings[self::PARAM_REQUIRED] ) {
+ if ( isset( $paramSettings[self::PARAM_REQUIRED] )
+ && $paramSettings[self::PARAM_REQUIRED]
+ ) {
$desc .= $paramPrefix . "This parameter is required";
}
- $type = isset( $paramSettings[self::PARAM_TYPE] ) ? $paramSettings[self::PARAM_TYPE] : null;
+ $type = isset( $paramSettings[self::PARAM_TYPE] )
+ ? $paramSettings[self::PARAM_TYPE]
+ : null;
if ( isset( $type ) ) {
$hintPipeSeparated = true;
- $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) ? $paramSettings[self::PARAM_ISMULTI] : false;
+ $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+ ? $paramSettings[self::PARAM_ISMULTI]
+ : false;
if ( $multi ) {
$prompt = 'Values (separate with \'|\'): ';
} else {
} else {
switch ( $type ) {
case 'namespace':
- // Special handling because namespaces are type-limited, yet they are not given
+ // Special handling because namespaces are
+ // type-limited, yet they are not given
$desc .= $paramPrefix . $prompt;
$desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
100, $descWordwrap );
$hasMax = isset( $paramSettings[self::PARAM_MAX] );
if ( $hasMin || $hasMax ) {
if ( !$hasMax ) {
- $intRangeStr = "The value$s must be no less than {$paramSettings[self::PARAM_MIN]}";
+ $intRangeStr = "The value$s must be no less than " .
+ "{$paramSettings[self::PARAM_MIN]}";
} elseif ( !$hasMin ) {
- $intRangeStr = "The value$s must be no more than {$paramSettings[self::PARAM_MAX]}";
+ $intRangeStr = "The value$s must be no more than " .
+ "{$paramSettings[self::PARAM_MAX]}";
} else {
- $intRangeStr = "The value$s must be between {$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
+ $intRangeStr = "The value$s must be between " .
+ "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
}
$desc .= $paramPrefix . $intRangeStr;
$isArray = is_array( $type );
if ( !$isArray
- || $isArray && count( $type ) > self::LIMIT_SML1 ) {
+ || $isArray && count( $type ) > self::LIMIT_SML1
+ ) {
$desc .= $paramPrefix . "Maximum number of values " .
- self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
+ self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
}
}
}
$msg .= sprintf( " %-19s - %s\n", $this->encodeParamName( $paramName ), $desc );
}
- return $msg;
- } else {
- return false;
+ return $msg;
}
+
+ return false;
}
/**
public function getFinalParams( $flags = 0 ) {
$params = $this->getAllowedParams( $flags );
wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
+
return $params;
}
public function getFinalParamDescription() {
$desc = $this->getParamDescription();
wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
+
return $desc;
}
public function getFinalResultProperties() {
$properties = $this->getResultProperties();
wfRunHooks( 'APIGetResultProperties', array( $this, &$properties ) );
+
return $properties;
}
public function getFinalDescription() {
$desc = $this->getDescription();
wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
+
return $desc;
}
}
$this->mParamCache[$parseLimit] = $results;
}
+
return $this->mParamCache[$parseLimit];
}
protected function getParameter( $paramName, $parseLimit = true ) {
$params = $this->getFinalParams();
$paramSettings = $params[$paramName];
+
return $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
}
array( $this, "parameterNotEmpty" ) ) ), $required );
if ( count( $intersection ) > 1 ) {
- $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', 'invalidparammix' );
+ $this->dieUsage(
+ "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
+ 'invalidparammix' );
} elseif ( count( $intersection ) == 0 ) {
- $this->dieUsage( "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required', 'missingparam' );
+ $this->dieUsage(
+ "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required',
+ 'missingparam'
+ );
}
}
$params = implode( ", {$p}", $params );
return array(
- array( 'code' => "{$p}missingparam", 'info' => "One of the parameters {$p}{$params} is required" ),
- array( 'code' => "{$p}invalidparammix", 'info' => "The parameters {$p}{$params} can not be used together" )
+ array(
+ 'code' => "{$p}missingparam",
+ 'info' => "One of the parameters {$p}{$params} is required"
+ ),
+ array(
+ 'code' => "{$p}invalidparammix",
+ 'info' => "The parameters {$p}{$params} can not be used together"
+ )
);
}
array( $this, "parameterNotEmpty" ) ) ), $required );
if ( count( $intersection ) > 1 ) {
- $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', 'invalidparammix' );
+ $this->dieUsage(
+ "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together',
+ 'invalidparammix'
+ );
}
}
$params = implode( ", {$p}", $params );
return array(
- array( 'code' => "{$p}invalidparammix", 'info' => "The parameters {$p}{$params} can not be used together" )
+ array(
+ 'code' => "{$p}invalidparammix",
+ 'info' => "The parameters {$p}{$params} can not be used together"
+ )
);
}
*/
public static function getValidNamespaces() {
wfDeprecated( __METHOD__, '1.17' );
+
return MWNamespace::getValidNamespaces();
}
* @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
* @param $titleObj Title the page under consideration
* @param string $userOption The user option to consider when $watchlist=preferences.
- * If not set will use watchdefault always and watchcreations if $titleObj doesn't exist.
+ * If not set will use watchdefault always and watchcreations if $titleObj doesn't exist.
* @return bool
*/
protected function getWatchlistValue( $watchlist, $titleObj, $userOption = null ) {
return $this->getUser()->getBoolOption( 'watchdefault' ) ||
$this->getUser()->getBoolOption( 'watchcreations' ) && !$titleObj->exists();
}
+
# Watch the article based on the user preference
return $this->getUser()->getBoolOption( $userOption );
$deprecated = false;
$required = false;
} else {
- $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null;
- $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) ? $paramSettings[self::PARAM_ISMULTI] : false;
- $type = isset( $paramSettings[self::PARAM_TYPE] ) ? $paramSettings[self::PARAM_TYPE] : null;
- $dupes = isset( $paramSettings[self::PARAM_ALLOW_DUPLICATES] ) ? $paramSettings[self::PARAM_ALLOW_DUPLICATES] : false;
- $deprecated = isset( $paramSettings[self::PARAM_DEPRECATED] ) ? $paramSettings[self::PARAM_DEPRECATED] : false;
- $required = isset( $paramSettings[self::PARAM_REQUIRED] ) ? $paramSettings[self::PARAM_REQUIRED] : false;
+ $default = isset( $paramSettings[self::PARAM_DFLT] )
+ ? $paramSettings[self::PARAM_DFLT]
+ : null;
+ $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+ ? $paramSettings[self::PARAM_ISMULTI]
+ : false;
+ $type = isset( $paramSettings[self::PARAM_TYPE] )
+ ? $paramSettings[self::PARAM_TYPE]
+ : null;
+ $dupes = isset( $paramSettings[self::PARAM_ALLOW_DUPLICATES] )
+ ? $paramSettings[self::PARAM_ALLOW_DUPLICATES]
+ : false;
+ $deprecated = isset( $paramSettings[self::PARAM_DEPRECATED] )
+ ? $paramSettings[self::PARAM_DEPRECATED]
+ : false;
+ $required = isset( $paramSettings[self::PARAM_REQUIRED] )
+ ? $paramSettings[self::PARAM_REQUIRED]
+ : false;
// When type is not given, and no choices, the type is the same as $default
if ( !isset( $type ) ) {
if ( $type == 'boolean' ) {
if ( isset( $default ) && $default !== false ) {
// Having a default value of anything other than 'false' is not allowed
- ApiBase::dieDebug( __METHOD__, "Boolean param $encParamName's default is set to '$default'. Boolean parameters must default to false." );
+ ApiBase::dieDebug(
+ __METHOD__,
+ "Boolean param $encParamName's default is set to '$default'. " .
+ "Boolean parameters must default to false."
+ );
}
$value = $this->getMain()->getCheck( $encParamName );
} elseif ( $type == 'upload' ) {
if ( isset( $default ) ) {
// Having a default value is not allowed
- ApiBase::dieDebug( __METHOD__, "File upload param $encParamName's default is set to '$default'. File upload parameters may not have a default." );
+ ApiBase::dieDebug(
+ __METHOD__,
+ "File upload param $encParamName's default is set to " .
+ "'$default'. File upload parameters may not have a default." );
}
if ( $multi ) {
ApiBase::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
if ( $value !== null ) {
$this->dieUsage(
"File upload param $encParamName is not a file upload; " .
- "be sure to use multipart/form-data for your POST and include " .
- "a filename in the Content-Disposition header.",
+ "be sure to use multipart/form-data for your POST and include " .
+ "a filename in the Content-Disposition header.",
"badupload_{$encParamName}"
);
}
}
if ( isset( $value ) && ( $multi || is_array( $type ) ) ) {
- $value = $this->parseMultiValue( $encParamName, $value, $multi, is_array( $type ) ? $type : null );
+ $value = $this->parseMultiValue(
+ $encParamName,
+ $value,
+ $multi,
+ is_array( $type ) ? $type : null
+ );
}
// More validation only when choices were not given
$min = isset( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : null;
$max = isset( $paramSettings[self::PARAM_MAX] ) ? $paramSettings[self::PARAM_MAX] : null;
$enforceLimits = isset( $paramSettings[self::PARAM_RANGE_ENFORCE] )
- ? $paramSettings[self::PARAM_RANGE_ENFORCE] : false;
+ ? $paramSettings[self::PARAM_RANGE_ENFORCE] : false;
if ( is_array( $value ) ) {
$value = array_map( 'intval', $value );
// Don't do any validation whatsoever
break;
}
- if ( !isset( $paramSettings[self::PARAM_MAX] ) || !isset( $paramSettings[self::PARAM_MAX2] ) ) {
- ApiBase::dieDebug( __METHOD__, "MAX1 or MAX2 are not defined for the limit $encParamName" );
+ if ( !isset( $paramSettings[self::PARAM_MAX] )
+ || !isset( $paramSettings[self::PARAM_MAX2] )
+ ) {
+ ApiBase::dieDebug(
+ __METHOD__,
+ "MAX1 or MAX2 are not defined for the limit $encParamName"
+ );
}
if ( $multi ) {
ApiBase::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
}
$min = isset( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : 0;
if ( $value == 'max' ) {
- $value = $this->getMain()->canApiHighLimits() ? $paramSettings[self::PARAM_MAX2] : $paramSettings[self::PARAM_MAX];
+ $value = $this->getMain()->canApiHighLimits()
+ ? $paramSettings[self::PARAM_MAX2]
+ : $paramSettings[self::PARAM_MAX];
$this->getResult()->setParsedLimit( $this->getModuleName(), $value );
} else {
$value = intval( $value );
- $this->validateLimit( $paramName, $value, $min, $paramSettings[self::PARAM_MAX], $paramSettings[self::PARAM_MAX2] );
+ $this->validateLimit(
+ $paramName,
+ $value,
+ $min,
+ $paramSettings[self::PARAM_MAX],
+ $paramSettings[self::PARAM_MAX2]
+ );
}
break;
case 'boolean':
return array();
}
- // This is a bit awkward, but we want to avoid calling canApiHighLimits() because it unstubs $wgUser
+ // This is a bit awkward, but we want to avoid calling canApiHighLimits()
+ // because it unstubs $wgUser
$valuesList = explode( '|', $value, self::LIMIT_SML2 + 1 );
- $sizeLimit = count( $valuesList ) > self::LIMIT_SML1 && $this->mMainModule->canApiHighLimits() ?
- self::LIMIT_SML2 : self::LIMIT_SML1;
+ $sizeLimit = count( $valuesList ) > self::LIMIT_SML1 && $this->mMainModule->canApiHighLimits()
+ ? self::LIMIT_SML2
+ : self::LIMIT_SML1;
if ( self::truncateArray( $valuesList, $sizeLimit ) ) {
- $this->setWarning( "Too many values supplied for parameter '$valueName': the limit is $sizeLimit" );
+ $this->setWarning( "Too many values supplied for parameter '$valueName': " .
+ "the limit is $sizeLimit" );
}
if ( !$allowMultiple && count( $valuesList ) != 1 ) {
return $value;
}
- $possibleValues = is_array( $allowedValues ) ? "of '" . implode( "', '", $allowedValues ) . "'" : '';
- $this->dieUsage( "Only one $possibleValues is allowed for parameter '$valueName'", "multival_$valueName" );
+ $possibleValues = is_array( $allowedValues )
+ ? "of '" . implode( "', '", $allowedValues ) . "'"
+ : '';
+ $this->dieUsage(
+ "Only one $possibleValues is allowed for parameter '$valueName'",
+ "multival_$valueName"
+ );
}
if ( is_array( $allowedValues ) ) {
$vals = implode( ", ", $unknown );
$this->setWarning( "Unrecognized value$s for parameter '$valueName': $vals" );
} else {
- $this->dieUsage( "Unrecognized value for parameter '$valueName': {$valuesList[0]}", "unknown_$valueName" );
+ $this->dieUsage(
+ "Unrecognized value for parameter '$valueName': {$valuesList[0]}",
+ "unknown_$valueName"
+ );
}
}
// Now throw them out
$value = $min;
}
- // Minimum is always validated, whereas maximum is checked only if not running in internal call mode
+ // Minimum is always validated, whereas maximum is checked only if not
+ // running in internal call mode
if ( $this->getMain()->isInternalMode() ) {
return;
}
if ( !is_null( $max ) && $value > $max ) {
if ( !is_null( $botMax ) && $this->getMain()->canApiHighLimits() ) {
if ( $value > $botMax ) {
- $msg = $this->encodeParamName( $paramName ) . " may not be over $botMax (set to $value) for bots or sysops";
+ $msg = $this->encodeParamName( $paramName ) .
+ " may not be over $botMax (set to $value) for bots or sysops";
$this->warnOrDie( $msg, $enforceLimits );
$value = $botMax;
}
function validateTimestamp( $value, $encParamName ) {
$unixTimestamp = wfTimestamp( TS_UNIX, $value );
if ( $unixTimestamp === false ) {
- $this->dieUsage( "Invalid value '$value' for timestamp parameter $encParamName", "badtimestamp_{$encParamName}" );
+ $this->dieUsage(
+ "Invalid value '$value' for timestamp parameter $encParamName",
+ "badtimestamp_{$encParamName}"
+ );
}
+
return wfTimestamp( TS_MW, $unixTimestamp );
}
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}" );
+ $this->dieUsage(
+ "Invalid value '$value' for user parameter $encParamName",
+ "baduser_{$encParamName}"
+ );
}
+
return $title->getText();
}
private function warnOrDie( $msg, $enforceLimits = false ) {
if ( $enforceLimits ) {
$this->dieUsage( $msg, 'integeroutofrange' );
- } else {
- $this->setWarning( $msg );
}
+
+ $this->setWarning( $msg );
}
/**
array_pop( $arr );
$modified = true;
}
+
return $modified;
}
*/
public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
Profiler::instance()->close();
- throw new UsageException( $description, $this->encodeParamName( $errorCode ), $httpRespCode, $extradata );
+ throw new UsageException(
+ $description,
+ $this->encodeParamName( $errorCode ),
+ $httpRespCode,
+ $extradata
+ );
}
/**
*
* @since 1.22
* @param Status $status Status object
- * @throws UsageException
+ * @throws MWException
*/
public function dieStatus( $status ) {
if ( $status->isGood() ) {
$this->dieUsage( $msg->inLanguage( 'en' )->useDatabase( false )->plain(), $code );
}
+ // @codingStandardsIgnoreStart Allow long lines. Cannot split these.
/**
* Array that maps message keys to error messages. $1 and friends are replaced.
*/
'unknownerror-nocode' => array( 'code' => 'unknownerror', 'info' => 'Unknown error' ),
// Messages from Title::getUserPermissionsErrors()
- 'ns-specialprotected' => array( 'code' => 'unsupportednamespace', 'info' => "Pages in the Special namespace can't be edited" ),
- 'protectedinterface' => array( 'code' => 'protectednamespace-interface', 'info' => "You're not allowed to edit interface messages" ),
- 'namespaceprotected' => array( 'code' => 'protectednamespace', 'info' => "You're not allowed to edit pages in the \"\$1\" namespace" ),
- 'customcssprotected' => array( 'code' => 'customcssprotected', 'info' => "You're not allowed to edit custom CSS pages" ),
- 'customjsprotected' => array( 'code' => 'customjsprotected', 'info' => "You're not allowed to edit custom JavaScript pages" ),
- 'cascadeprotected' => array( 'code' => 'cascadeprotected', 'info' => "The page you're trying to edit is protected because it's included in a cascade-protected page" ),
- 'protectedpagetext' => array( 'code' => 'protectedpage', 'info' => "The \"\$1\" right is required to edit this page" ),
- 'protect-cantedit' => array( 'code' => 'cantedit', 'info' => "You can't protect this page because you can't edit it" ),
- 'badaccess-group0' => array( 'code' => 'permissiondenied', 'info' => "Permission denied" ), // Generic permission denied message
- 'badaccess-groups' => array( 'code' => 'permissiondenied', 'info' => "Permission denied" ),
- 'titleprotected' => array( 'code' => 'protectedtitle', 'info' => "This title has been protected from creation" ),
- 'nocreate-loggedin' => array( 'code' => 'cantcreate', 'info' => "You don't have permission to create new pages" ),
- 'nocreatetext' => array( 'code' => 'cantcreate-anon', 'info' => "Anonymous users can't create new pages" ),
- 'movenologintext' => array( 'code' => 'cantmove-anon', 'info' => "Anonymous users can't move pages" ),
- 'movenotallowed' => array( 'code' => 'cantmove', 'info' => "You don't have permission to move pages" ),
- 'confirmedittext' => array( 'code' => 'confirmemail', 'info' => "You must confirm your email address before you can edit" ),
- 'blockedtext' => array( 'code' => 'blocked', 'info' => "You have been blocked from editing" ),
- 'autoblockedtext' => array( 'code' => 'autoblocked', 'info' => "Your IP address has been blocked automatically, because it was used by a blocked user" ),
+ 'ns-specialprotected' => array(
+ 'code' => 'unsupportednamespace',
+ 'info' => "Pages in the Special namespace can't be edited"
+ ),
+ 'protectedinterface' => array(
+ 'code' => 'protectednamespace-interface',
+ 'info' => "You're not allowed to edit interface messages"
+ ),
+ 'namespaceprotected' => array(
+ 'code' => 'protectednamespace',
+ 'info' => "You're not allowed to edit pages in the \"\$1\" namespace"
+ ),
+ 'customcssprotected' => array(
+ 'code' => 'customcssprotected',
+ 'info' => "You're not allowed to edit custom CSS pages"
+ ),
+ 'customjsprotected' => array(
+ 'code' => 'customjsprotected',
+ 'info' => "You're not allowed to edit custom JavaScript pages"
+ ),
+ 'cascadeprotected' => array(
+ 'code' => 'cascadeprotected',
+ 'info' => "The page you're trying to edit is protected because it's included in a cascade-protected page"
+ ),
+ 'protectedpagetext' => array(
+ 'code' => 'protectedpage',
+ 'info' => "The \"\$1\" right is required to edit this page"
+ ),
+ 'protect-cantedit' => array(
+ 'code' => 'cantedit',
+ 'info' => "You can't protect this page because you can't edit it"
+ ),
+ 'badaccess-group0' => array(
+ 'code' => 'permissiondenied',
+ 'info' => "Permission denied"
+ ), // Generic permission denied message
+ 'badaccess-groups' => array(
+ 'code' => 'permissiondenied',
+ 'info' => "Permission denied"
+ ),
+ 'titleprotected' => array(
+ 'code' => 'protectedtitle',
+ 'info' => "This title has been protected from creation"
+ ),
+ 'nocreate-loggedin' => array(
+ 'code' => 'cantcreate',
+ 'info' => "You don't have permission to create new pages"
+ ),
+ 'nocreatetext' => array(
+ 'code' => 'cantcreate-anon',
+ 'info' => "Anonymous users can't create new pages"
+ ),
+ 'movenologintext' => array(
+ 'code' => 'cantmove-anon',
+ 'info' => "Anonymous users can't move pages"
+ ),
+ 'movenotallowed' => array(
+ 'code' => 'cantmove',
+ 'info' => "You don't have permission to move pages"
+ ),
+ 'confirmedittext' => array(
+ 'code' => 'confirmemail',
+ 'info' => "You must confirm your email address before you can edit"
+ ),
+ 'blockedtext' => array(
+ 'code' => 'blocked',
+ 'info' => "You have been blocked from editing"
+ ),
+ 'autoblockedtext' => array(
+ 'code' => 'autoblocked',
+ 'info' => "Your IP address has been blocked automatically, because it was used by a blocked user"
+ ),
// Miscellaneous interface messages
- 'actionthrottledtext' => array( 'code' => 'ratelimited', 'info' => "You've exceeded your rate limit. Please wait some time and try again" ),
- 'alreadyrolled' => array( 'code' => 'alreadyrolled', 'info' => "The page you tried to rollback was already rolled back" ),
- 'cantrollback' => array( 'code' => 'onlyauthor', 'info' => "The page you tried to rollback only has one author" ),
- 'readonlytext' => array( 'code' => 'readonly', 'info' => "The wiki is currently in read-only mode" ),
- 'sessionfailure' => array( 'code' => 'badtoken', 'info' => "Invalid token" ),
- 'cannotdelete' => array( 'code' => 'cantdelete', 'info' => "Couldn't delete \"\$1\". Maybe it was deleted already by someone else" ),
- 'notanarticle' => array( 'code' => 'missingtitle', 'info' => "The page you requested doesn't exist" ),
- 'selfmove' => array( 'code' => 'selfmove', 'info' => "Can't move a page to itself" ),
- 'immobile_namespace' => array( 'code' => 'immobilenamespace', 'info' => "You tried to move pages from or to a namespace that is protected from moving" ),
- 'articleexists' => array( 'code' => 'articleexists', 'info' => "The destination article already exists and is not a redirect to the source article" ),
- 'protectedpage' => array( 'code' => 'protectedpage', 'info' => "You don't have permission to perform this move" ),
- 'hookaborted' => array( 'code' => 'hookaborted', 'info' => "The modification you tried to make was aborted by an extension hook" ),
- 'cantmove-titleprotected' => array( 'code' => 'protectedtitle', 'info' => "The destination article has been protected from creation" ),
- 'imagenocrossnamespace' => array( 'code' => 'nonfilenamespace', 'info' => "Can't move a file to a non-file namespace" ),
- 'imagetypemismatch' => array( 'code' => 'filetypemismatch', 'info' => "The new file extension doesn't match its type" ),
+ 'actionthrottledtext' => array(
+ 'code' => 'ratelimited',
+ 'info' => "You've exceeded your rate limit. Please wait some time and try again"
+ ),
+ 'alreadyrolled' => array(
+ 'code' => 'alreadyrolled',
+ 'info' => "The page you tried to rollback was already rolled back"
+ ),
+ 'cantrollback' => array(
+ 'code' => 'onlyauthor',
+ 'info' => "The page you tried to rollback only has one author"
+ ),
+ 'readonlytext' => array(
+ 'code' => 'readonly',
+ 'info' => "The wiki is currently in read-only mode"
+ ),
+ 'sessionfailure' => array(
+ 'code' => 'badtoken',
+ 'info' => "Invalid token" ),
+ 'cannotdelete' => array(
+ 'code' => 'cantdelete',
+ 'info' => "Couldn't delete \"\$1\". Maybe it was deleted already by someone else"
+ ),
+ 'notanarticle' => array(
+ 'code' => 'missingtitle',
+ 'info' => "The page you requested doesn't exist"
+ ),
+ 'selfmove' => array( 'code' => 'selfmove', 'info' => "Can't move a page to itself"
+ ),
+ 'immobile_namespace' => array(
+ 'code' => 'immobilenamespace',
+ 'info' => "You tried to move pages from or to a namespace that is protected from moving"
+ ),
+ 'articleexists' => array(
+ 'code' => 'articleexists',
+ 'info' => "The destination article already exists and is not a redirect to the source article"
+ ),
+ 'protectedpage' => array(
+ 'code' => 'protectedpage',
+ 'info' => "You don't have permission to perform this move"
+ ),
+ 'hookaborted' => array(
+ 'code' => 'hookaborted',
+ 'info' => "The modification you tried to make was aborted by an extension hook"
+ ),
+ 'cantmove-titleprotected' => array(
+ 'code' => 'protectedtitle',
+ 'info' => "The destination article has been protected from creation"
+ ),
+ 'imagenocrossnamespace' => array(
+ 'code' => 'nonfilenamespace',
+ 'info' => "Can't move a file to a non-file namespace"
+ ),
+ 'imagetypemismatch' => array(
+ 'code' => 'filetypemismatch',
+ 'info' => "The new file extension doesn't match its type"
+ ),
// 'badarticleerror' => shouldn't happen
// 'badtitletext' => shouldn't happen
'ip_range_invalid' => array( 'code' => 'invalidrange', 'info' => "Invalid IP range" ),
- 'range_block_disabled' => array( 'code' => 'rangedisabled', 'info' => "Blocking IP ranges has been disabled" ),
- 'nosuchusershort' => array( 'code' => 'nosuchuser', 'info' => "The user you specified doesn't exist" ),
+ 'range_block_disabled' => array(
+ 'code' => 'rangedisabled',
+ 'info' => "Blocking IP ranges has been disabled"
+ ),
+ 'nosuchusershort' => array(
+ 'code' => 'nosuchuser',
+ 'info' => "The user you specified doesn't exist"
+ ),
'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 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' ),
- 'ipbnounblockself' => array( 'code' => 'ipbnounblockself', 'info' => 'You are not allowed to unblock yourself' ),
- 'usermaildisabled' => array( 'code' => 'usermaildisabled', 'info' => "User email has been disabled" ),
- 'blockedemailuser' => array( 'code' => 'blockedfrommail', 'info' => "You have been blocked from sending email" ),
- 'notarget' => array( 'code' => 'notarget', 'info' => "You have not specified a valid target for this action" ),
- 'noemail' => array( 'code' => 'noemail', 'info' => "The user has not specified a valid email address, or has chosen not to receive email from other users" ),
- 'rcpatroldisabled' => array( 'code' => 'patroldisabled', 'info' => "Patrolling is disabled on this wiki" ),
- 'markedaspatrollederror-noautopatrol' => array( 'code' => 'noautopatrol', 'info' => "You don't have permission to patrol your own changes" ),
- 'delete-toobig' => array( 'code' => 'bigdelete', 'info' => "You can't delete this page because it has more than \$1 revisions" ),
- 'movenotallowedfile' => array( 'code' => 'cantmovefile', 'info' => "You don't have permission to move files" ),
- 'userrights-no-interwiki' => array( 'code' => 'nointerwikiuserrights', 'info' => "You don't have permission to change user rights on other wikis" ),
- 'userrights-nodatabase' => array( 'code' => 'nosuchdatabase', 'info' => "Database \"\$1\" does not exist or is not local" ),
+ '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 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'
+ ),
+ 'ipbnounblockself' => array(
+ 'code' => 'ipbnounblockself',
+ 'info' => 'You are not allowed to unblock yourself'
+ ),
+ 'usermaildisabled' => array(
+ 'code' => 'usermaildisabled',
+ 'info' => "User email has been disabled"
+ ),
+ 'blockedemailuser' => array(
+ 'code' => 'blockedfrommail',
+ 'info' => "You have been blocked from sending email"
+ ),
+ 'notarget' => array(
+ 'code' => 'notarget',
+ 'info' => "You have not specified a valid target for this action"
+ ),
+ 'noemail' => array(
+ 'code' => 'noemail',
+ 'info' => "The user has not specified a valid email address, or has chosen not to receive email from other users"
+ ),
+ 'rcpatroldisabled' => array(
+ 'code' => 'patroldisabled',
+ 'info' => "Patrolling is disabled on this wiki"
+ ),
+ 'markedaspatrollederror-noautopatrol' => array(
+ 'code' => 'noautopatrol',
+ 'info' => "You don't have permission to patrol your own changes"
+ ),
+ 'delete-toobig' => array(
+ 'code' => 'bigdelete',
+ 'info' => "You can't delete this page because it has more than \$1 revisions"
+ ),
+ 'movenotallowedfile' => array(
+ 'code' => 'cantmovefile',
+ 'info' => "You don't have permission to move files"
+ ),
+ 'userrights-no-interwiki' => array(
+ 'code' => 'nointerwikiuserrights',
+ 'info' => "You don't have permission to change user rights on other wikis"
+ ),
+ 'userrights-nodatabase' => array(
+ 'code' => 'nosuchdatabase',
+ 'info' => "Database \"\$1\" does not exist or is not local"
+ ),
'nouserspecified' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
'noname' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
'summaryrequired' => array( 'code' => 'summaryrequired', 'info' => 'Summary required' ),
- 'import-rootpage-invalid' => array( 'code' => 'import-rootpage-invalid', 'info' => 'Root page is an invalid title' ),
- 'import-rootpage-nosubpage' => array( 'code' => 'import-rootpage-nosubpage', 'info' => 'Namespace "$1" of the root page does not allow subpages' ),
+ 'import-rootpage-invalid' => array(
+ 'code' => 'import-rootpage-invalid',
+ 'info' => 'Root page is an invalid title'
+ ),
+ 'import-rootpage-nosubpage' => array(
+ 'code' => 'import-rootpage-nosubpage',
+ 'info' => 'Namespace "$1" of the root page does not allow subpages'
+ ),
// API-specific messages
- 'readrequired' => array( 'code' => 'readapidenied', 'info' => "You need read permission to use this module" ),
- 'writedisabled' => array( 'code' => 'noapiwrite', 'info' => "Editing of this wiki through the API is disabled. Make sure the \$wgEnableWriteAPI=true; statement is included in the wiki's LocalSettings.php file" ),
- 'writerequired' => array( 'code' => 'writeapidenied', 'info' => "You're not allowed to edit this wiki through the API" ),
+ 'readrequired' => array(
+ 'code' => 'readapidenied',
+ 'info' => "You need read permission to use this module"
+ ),
+ 'writedisabled' => array(
+ 'code' => 'noapiwrite',
+ 'info' => "Editing of this wiki through the API is disabled. Make sure the \$wgEnableWriteAPI=true; statement is included in the wiki's LocalSettings.php file"
+ ),
+ 'writerequired' => array(
+ 'code' => 'writeapidenied',
+ 'info' => "You're not allowed to edit this wiki through the API"
+ ),
'missingparam' => array( 'code' => 'no$1', 'info' => "The \$1 parameter must be set" ),
'invalidtitle' => array( 'code' => 'invalidtitle', 'info' => "Bad title \"\$1\"" ),
'nosuchpageid' => array( 'code' => 'nosuchpageid', 'info' => "There is no page with ID \$1" ),
'invaliduser' => array( 'code' => 'invaliduser', 'info' => "Invalid username \"\$1\"" ),
'invalidexpiry' => array( 'code' => 'invalidexpiry', 'info' => "Invalid expiry time \"\$1\"" ),
'pastexpiry' => array( 'code' => 'pastexpiry', 'info' => "Expiry time \"\$1\" is in the past" ),
- 'create-titleexists' => array( 'code' => 'create-titleexists', 'info' => "Existing titles can't be protected with 'create'" ),
- 'missingtitle-createonly' => array( 'code' => 'missingtitle-createonly', 'info' => "Missing titles can only be protected with 'create'" ),
- 'cantblock' => array( 'code' => 'cantblock', 'info' => "You don't have permission to block users" ),
- 'canthide' => array( 'code' => 'canthide', 'info' => "You don't have permission to hide user names from the block log" ),
- 'cantblock-email' => array( 'code' => 'cantblock-email', 'info' => "You don't have permission to block users from sending email through the wiki" ),
- 'unblock-notarget' => array( 'code' => 'notarget', 'info' => "Either the id or the user parameter must be set" ),
- 'unblock-idanduser' => array( 'code' => 'idanduser', 'info' => "The id and user parameters can't be used together" ),
- 'cantunblock' => array( 'code' => 'permissiondenied', 'info' => "You don't have permission to unblock users" ),
- 'cannotundelete' => array( 'code' => 'cantundelete', 'info' => "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already" ),
- 'permdenied-undelete' => array( 'code' => 'permissiondenied', 'info' => "You don't have permission to restore deleted revisions" ),
- 'createonly-exists' => array( 'code' => 'articleexists', 'info' => "The article you tried to create has been created already" ),
- 'nocreate-missing' => array( 'code' => 'missingtitle', 'info' => "The article you tried to edit doesn't exist" ),
- 'nosuchrcid' => array( 'code' => 'nosuchrcid', 'info' => "There is no change with rcid \"\$1\"" ),
- 'protect-invalidaction' => array( 'code' => 'protect-invalidaction', 'info' => "Invalid protection type \"\$1\"" ),
- 'protect-invalidlevel' => array( 'code' => 'protect-invalidlevel', 'info' => "Invalid protection level \"\$1\"" ),
- 'toofewexpiries' => array( 'code' => 'toofewexpiries', 'info' => "\$1 expiry timestamps were provided where \$2 were needed" ),
- 'cantimport' => array( 'code' => 'cantimport', 'info' => "You don't have permission to import pages" ),
- 'cantimport-upload' => array( 'code' => 'cantimport-upload', 'info' => "You don't have permission to import uploaded pages" ),
+ 'create-titleexists' => array(
+ 'code' => 'create-titleexists',
+ 'info' => "Existing titles can't be protected with 'create'"
+ ),
+ 'missingtitle-createonly' => array(
+ 'code' => 'missingtitle-createonly',
+ 'info' => "Missing titles can only be protected with 'create'"
+ ),
+ 'cantblock' => array( 'code' => 'cantblock',
+ 'info' => "You don't have permission to block users"
+ ),
+ 'canthide' => array(
+ 'code' => 'canthide',
+ 'info' => "You don't have permission to hide user names from the block log"
+ ),
+ 'cantblock-email' => array(
+ 'code' => 'cantblock-email',
+ 'info' => "You don't have permission to block users from sending email through the wiki"
+ ),
+ 'unblock-notarget' => array(
+ 'code' => 'notarget',
+ 'info' => "Either the id or the user parameter must be set"
+ ),
+ 'unblock-idanduser' => array(
+ 'code' => 'idanduser',
+ 'info' => "The id and user parameters can't be used together"
+ ),
+ 'cantunblock' => array(
+ 'code' => 'permissiondenied',
+ 'info' => "You don't have permission to unblock users"
+ ),
+ 'cannotundelete' => array(
+ 'code' => 'cantundelete',
+ 'info' => "Couldn't undelete: the requested revisions may not exist, or may have been undeleted already"
+ ),
+ 'permdenied-undelete' => array(
+ 'code' => 'permissiondenied',
+ 'info' => "You don't have permission to restore deleted revisions"
+ ),
+ 'createonly-exists' => array(
+ 'code' => 'articleexists',
+ 'info' => "The article you tried to create has been created already"
+ ),
+ 'nocreate-missing' => array(
+ 'code' => 'missingtitle',
+ 'info' => "The article you tried to edit doesn't exist"
+ ),
+ 'nosuchrcid' => array(
+ 'code' => 'nosuchrcid',
+ 'info' => "There is no change with rcid \"\$1\""
+ ),
+ 'protect-invalidaction' => array(
+ 'code' => 'protect-invalidaction',
+ 'info' => "Invalid protection type \"\$1\""
+ ),
+ 'protect-invalidlevel' => array(
+ 'code' => 'protect-invalidlevel',
+ 'info' => "Invalid protection level \"\$1\""
+ ),
+ 'toofewexpiries' => array(
+ 'code' => 'toofewexpiries',
+ 'info' => "\$1 expiry timestamps were provided where \$2 were needed"
+ ),
+ 'cantimport' => array(
+ 'code' => 'cantimport',
+ 'info' => "You don't have permission to import pages"
+ ),
+ 'cantimport-upload' => array(
+ 'code' => 'cantimport-upload',
+ 'info' => "You don't have permission to import uploaded pages"
+ ),
'importnofile' => array( 'code' => 'nofile', 'info' => "You didn't upload a file" ),
- 'importuploaderrorsize' => array( 'code' => 'filetoobig', 'info' => 'The file you uploaded is bigger than the maximum upload size' ),
- 'importuploaderrorpartial' => array( 'code' => 'partialupload', 'info' => 'The file was only partially uploaded' ),
- 'importuploaderrortemp' => array( 'code' => 'notempdir', 'info' => 'The temporary upload directory is missing' ),
- 'importcantopen' => array( 'code' => 'cantopenfile', 'info' => "Couldn't open the uploaded file" ),
- 'import-noarticle' => array( 'code' => 'badinterwiki', 'info' => 'Invalid interwiki title specified' ),
- 'importbadinterwiki' => array( 'code' => 'badinterwiki', 'info' => 'Invalid interwiki title specified' ),
- 'import-unknownerror' => array( 'code' => 'import-unknownerror', 'info' => "Unknown error on import: \"\$1\"" ),
- 'cantoverwrite-sharedfile' => array( 'code' => 'cantoverwrite-sharedfile', 'info' => 'The target file exists on a shared repository and you do not have permission to override it' ),
- 'sharedfile-exists' => array( 'code' => 'fileexists-sharedrepo-perm', 'info' => 'The target file exists on a shared repository. Use the ignorewarnings parameter to override it.' ),
- 'mustbeposted' => array( 'code' => 'mustbeposted', 'info' => "The \$1 module requires a POST request" ),
- 'show' => array( 'code' => 'show', 'info' => 'Incorrect parameter - mutually exclusive values may not be supplied' ),
- 'specialpage-cantexecute' => array( 'code' => 'specialpage-cantexecute', 'info' => "You don't have permission to view the results of this special page" ),
- 'invalidoldimage' => array( 'code' => 'invalidoldimage', 'info' => 'The oldimage parameter has invalid format' ),
- 'nodeleteablefile' => array( 'code' => 'nodeleteablefile', 'info' => 'No such old version of the file' ),
- 'fileexists-forbidden' => array( 'code' => 'fileexists-forbidden', 'info' => 'A file with name "$1" already exists, and cannot be overwritten.' ),
- 'fileexists-shared-forbidden' => array( 'code' => 'fileexists-shared-forbidden', 'info' => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.' ),
- 'filerevert-badversion' => array( 'code' => 'filerevert-badversion', 'info' => 'There is no previous local version of this file with the provided timestamp.' ),
+ 'importuploaderrorsize' => array(
+ 'code' => 'filetoobig',
+ 'info' => 'The file you uploaded is bigger than the maximum upload size'
+ ),
+ 'importuploaderrorpartial' => array(
+ 'code' => 'partialupload',
+ 'info' => 'The file was only partially uploaded'
+ ),
+ 'importuploaderrortemp' => array(
+ 'code' => 'notempdir',
+ 'info' => 'The temporary upload directory is missing'
+ ),
+ 'importcantopen' => array(
+ 'code' => 'cantopenfile',
+ 'info' => "Couldn't open the uploaded file"
+ ),
+ 'import-noarticle' => array(
+ 'code' => 'badinterwiki',
+ 'info' => 'Invalid interwiki title specified'
+ ),
+ 'importbadinterwiki' => array(
+ 'code' => 'badinterwiki',
+ 'info' => 'Invalid interwiki title specified'
+ ),
+ 'import-unknownerror' => array(
+ 'code' => 'import-unknownerror',
+ 'info' => "Unknown error on import: \"\$1\""
+ ),
+ 'cantoverwrite-sharedfile' => array(
+ 'code' => 'cantoverwrite-sharedfile',
+ 'info' => 'The target file exists on a shared repository and you do not have permission to override it'
+ ),
+ 'sharedfile-exists' => array(
+ 'code' => 'fileexists-sharedrepo-perm',
+ 'info' => 'The target file exists on a shared repository. Use the ignorewarnings parameter to override it.'
+ ),
+ 'mustbeposted' => array(
+ 'code' => 'mustbeposted',
+ 'info' => "The \$1 module requires a POST request"
+ ),
+ 'show' => array(
+ 'code' => 'show',
+ 'info' => 'Incorrect parameter - mutually exclusive values may not be supplied'
+ ),
+ 'specialpage-cantexecute' => array(
+ 'code' => 'specialpage-cantexecute',
+ 'info' => "You don't have permission to view the results of this special page"
+ ),
+ 'invalidoldimage' => array(
+ 'code' => 'invalidoldimage',
+ 'info' => 'The oldimage parameter has invalid format'
+ ),
+ 'nodeleteablefile' => array(
+ 'code' => 'nodeleteablefile',
+ 'info' => 'No such old version of the file'
+ ),
+ 'fileexists-forbidden' => array(
+ 'code' => 'fileexists-forbidden',
+ 'info' => 'A file with name "$1" already exists, and cannot be overwritten.'
+ ),
+ 'fileexists-shared-forbidden' => array(
+ 'code' => 'fileexists-shared-forbidden',
+ 'info' => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.'
+ ),
+ 'filerevert-badversion' => array(
+ 'code' => 'filerevert-badversion',
+ 'info' => 'There is no previous local version of this file with the provided timestamp.'
+ ),
// ApiEditPage messages
- 'noimageredirect-anon' => array( 'code' => 'noimageredirect-anon', 'info' => "Anonymous users can't create image redirects" ),
- 'noimageredirect-logged' => array( 'code' => 'noimageredirect', 'info' => "You don't have permission to create image redirects" ),
- 'spamdetected' => array( 'code' => 'spamdetected', 'info' => "Your edit was refused because it contained a spam fragment: \"\$1\"" ),
- 'contenttoobig' => array( 'code' => 'contenttoobig', 'info' => "The content you supplied exceeds the article size limit of \$1 kilobytes" ),
+ 'noimageredirect-anon' => array(
+ 'code' => 'noimageredirect-anon',
+ 'info' => "Anonymous users can't create image redirects"
+ ),
+ 'noimageredirect-logged' => array(
+ 'code' => 'noimageredirect',
+ 'info' => "You don't have permission to create image redirects"
+ ),
+ 'spamdetected' => array(
+ 'code' => 'spamdetected',
+ 'info' => "Your edit was refused because it contained a spam fragment: \"\$1\""
+ ),
+ 'contenttoobig' => array(
+ 'code' => 'contenttoobig',
+ 'info' => "The content you supplied exceeds the article size limit of \$1 kilobytes"
+ ),
'noedit-anon' => array( 'code' => 'noedit-anon', 'info' => "Anonymous users can't edit pages" ),
'noedit' => array( 'code' => 'noedit', 'info' => "You don't have permission to edit pages" ),
- 'wasdeleted' => array( 'code' => 'pagedeleted', 'info' => "The page has been deleted since you fetched its timestamp" ),
- 'blankpage' => array( 'code' => 'emptypage', 'info' => "Creating new, empty pages is not allowed" ),
+ 'wasdeleted' => array(
+ 'code' => 'pagedeleted',
+ 'info' => "The page has been deleted since you fetched its timestamp"
+ ),
+ 'blankpage' => array(
+ 'code' => 'emptypage',
+ 'info' => "Creating new, empty pages is not allowed"
+ ),
'editconflict' => array( 'code' => 'editconflict', 'info' => "Edit conflict detected" ),
'hashcheckfailed' => array( 'code' => 'badmd5', 'info' => "The supplied MD5 hash was incorrect" ),
- 'missingtext' => array( 'code' => 'notext', 'info' => "One of the text, appendtext, prependtext and undo parameters must be set" ),
- 'emptynewsection' => array( 'code' => 'emptynewsection', 'info' => 'Creating empty new sections is not possible.' ),
- 'revwrongpage' => array( 'code' => 'revwrongpage', 'info' => "r\$1 is not a revision of \"\$2\"" ),
- 'undo-failure' => array( 'code' => 'undofailure', 'info' => 'Undo failed due to conflicting intermediate edits' ),
+ 'missingtext' => array(
+ 'code' => 'notext',
+ 'info' => "One of the text, appendtext, prependtext and undo parameters must be set"
+ ),
+ 'emptynewsection' => array(
+ 'code' => 'emptynewsection',
+ 'info' => 'Creating empty new sections is not possible.'
+ ),
+ 'revwrongpage' => array(
+ 'code' => 'revwrongpage',
+ 'info' => "r\$1 is not a revision of \"\$2\""
+ ),
+ 'undo-failure' => array(
+ 'code' => 'undofailure',
+ 'info' => 'Undo failed due to conflicting intermediate edits'
+ ),
// Messages from WikiPage::doEit()
- 'edit-hook-aborted' => array( 'code' => 'edit-hook-aborted', 'info' => "Your edit was aborted by an ArticleSave hook" ),
- 'edit-gone-missing' => array( 'code' => 'edit-gone-missing', 'info' => "The page you tried to edit doesn't seem to exist anymore" ),
+ 'edit-hook-aborted' => array(
+ 'code' => 'edit-hook-aborted',
+ 'info' => "Your edit was aborted by an ArticleSave hook"
+ ),
+ 'edit-gone-missing' => array(
+ 'code' => 'edit-gone-missing',
+ 'info' => "The page you tried to edit doesn't seem to exist anymore"
+ ),
'edit-conflict' => array( 'code' => 'editconflict', 'info' => "Edit conflict detected" ),
- 'edit-already-exists' => array( 'code' => 'edit-already-exists', 'info' => "It seems the page you tried to create already exist" ),
+ 'edit-already-exists' => array(
+ 'code' => 'edit-already-exists',
+ 'info' => 'It seems the page you tried to create already exist'
+ ),
// uploadMsgs
'invalid-file-key' => array( 'code' => 'invalid-file-key', 'info' => 'Not a valid file key' ),
'nouploadmodule' => array( 'code' => 'nouploadmodule', 'info' => 'No upload module set' ),
- 'uploaddisabled' => array( 'code' => 'uploaddisabled', 'info' => 'Uploads are not enabled. Make sure $wgEnableUploads is set to true in LocalSettings.php and the PHP ini setting file_uploads is true' ),
- 'copyuploaddisabled' => array( 'code' => 'copyuploaddisabled', 'info' => 'Uploads by URL is not enabled. Make sure $wgAllowCopyUploads is set to true in LocalSettings.php.' ),
- 'copyuploadbaddomain' => array( 'code' => 'copyuploadbaddomain', 'info' => 'Uploads by URL are not allowed from this domain.' ),
- 'copyuploadbadurl' => array( 'code' => 'copyuploadbadurl', 'info' => 'Upload not allowed from this URL.' ),
-
- 'filename-tooshort' => array( 'code' => 'filename-tooshort', 'info' => 'The filename is too short' ),
+ 'uploaddisabled' => array(
+ 'code' => 'uploaddisabled',
+ 'info' => 'Uploads are not enabled. Make sure $wgEnableUploads is set to true in LocalSettings.php and the PHP ini setting file_uploads is true'
+ ),
+ 'copyuploaddisabled' => array(
+ 'code' => 'copyuploaddisabled',
+ 'info' => 'Uploads by URL is not enabled. Make sure $wgAllowCopyUploads is set to true in LocalSettings.php.'
+ ),
+ 'copyuploadbaddomain' => array(
+ 'code' => 'copyuploadbaddomain',
+ 'info' => 'Uploads by URL are not allowed from this domain.'
+ ),
+ 'copyuploadbadurl' => array(
+ 'code' => 'copyuploadbadurl',
+ 'info' => 'Upload not allowed from this URL.'
+ ),
+
+ 'filename-tooshort' => array(
+ 'code' => 'filename-tooshort',
+ 'info' => 'The filename is too short'
+ ),
'filename-toolong' => array( 'code' => 'filename-toolong', 'info' => 'The filename is too long' ),
- 'illegal-filename' => array( 'code' => 'illegal-filename', 'info' => 'The filename is not allowed' ),
- 'filetype-missing' => array( 'code' => 'filetype-missing', 'info' => 'The file is missing an extension' ),
+ 'illegal-filename' => array(
+ 'code' => 'illegal-filename',
+ 'info' => 'The filename is not allowed'
+ ),
+ 'filetype-missing' => array(
+ 'code' => 'filetype-missing',
+ 'info' => 'The file is missing an extension'
+ ),
'mustbeloggedin' => array( 'code' => 'mustbeloggedin', 'info' => 'You must be logged in to $1.' )
);
+ // @codingStandardsIgnoreEnd
/**
* Helper function for readonly errors
global $wgDebugAPI;
if ( $wgDebugAPI !== true ) {
$this->dieUsageMsg( $error );
- } else {
- if ( is_string( $error ) ) {
- $error = array( $error );
- }
- $parsed = $this->parseMsg( $error );
- $this->setWarning( '$wgDebugAPI: ' . $parsed['code']
- . ' - ' . $parsed['info'] );
}
+
+ if ( is_string( $error ) ) {
+ $error = array( $error );
+ }
+
+ $parsed = $this->parseMsg( $error );
+ $this->setWarning( '$wgDebugAPI: ' . $parsed['code'] . ' - ' . $parsed['info'] );
}
/**
- * Die with the $prefix.'badcontinue' error. This call is common enough to make it into the base method.
+ * Die with the $prefix.'badcontinue' error. This call is common enough to
+ * make it into the base method.
* @param $condition boolean will only die if this value is true
* @since 1.21
*/
* Internal code errors should be reported with this method
* @param string $method Method or function name
* @param string $message Error message
+ * @throws MWException
*/
protected static function dieDebug( $method, $message ) {
throw new MWException( "Internal error in $method: $message" );
public function isReadMode() {
return true;
}
+
/**
* Indicates whether this module requires write mode
* @return bool
}
$token = $user->getOption( 'watchlisttoken' );
if ( $token == '' || $token != $params['token'] ) {
- $this->dieUsage( 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences', 'bad_wltoken' );
+ $this->dieUsage(
+ 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
+ 'bad_wltoken'
+ );
}
} else {
if ( !$this->getUser()->isLoggedIn() ) {
}
$user = $this->getUser();
}
+
return $user;
}
/**
- * @return bool|string|array Returns a false if the module has no help url, else returns a (array of) string
+ * @return bool|string|array Returns a false if the module has no help URL,
+ * else returns a (array of) string
*/
public function getHelpUrls() {
return false;
* Don't call this function directly: use getFinalPossibleErrors() to allow
* hooks to modify parameters as needed.
*
- * @return array in the format of array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
+ * @return array in the format of array( key, param1, param2, ... )
+ * or array( 'code' => ..., 'info' => ... )
*/
public function getPossibleErrors() {
$ret = array();
$params = $this->getFinalParams();
if ( $params ) {
foreach ( $params as $paramName => $paramSettings ) {
- if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] ) && $paramSettings[ApiBase::PARAM_REQUIRED] ) {
+ if ( isset( $paramSettings[ApiBase::PARAM_REQUIRED] )
+ && $paramSettings[ApiBase::PARAM_REQUIRED]
+ ) {
$ret[] = array( 'missingparam', $paramName );
}
}
if ( array_key_exists( 'continue', $params ) ) {
$ret[] = array(
'code' => 'badcontinue',
- 'info' => 'Invalid continue param. You should pass the original value returned by the previous query'
+ 'info' => 'Invalid continue param. You should pass the ' .
+ 'original value returned by the previous query'
);
}
}
public function getFinalPossibleErrors() {
$possibleErrors = $this->getPossibleErrors();
wfRunHooks( 'APIGetPossibleErrors', array( $this, &$possibleErrors ) );
+
return $possibleErrors;
}
/**
* Parses a list of errors into a standardised format
- * @param array $errors 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 ) {
$ret[] = $this->parseMsg( $row );
}
}
+
return $ret;
}
*/
public function profileIn() {
if ( $this->mTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'called twice without calling profileOut()' );
+ ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileOut()' );
}
$this->mTimeIn = microtime( true );
wfProfileIn( $this->getModuleProfileName() );
*/
public function profileOut() {
if ( $this->mTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'called without calling profileIn() first' );
+ ApiBase::dieDebug( __METHOD__, 'Called without calling profileIn() first' );
}
if ( $this->mDBTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'must be called after database profiling is done with profileDBOut()' );
+ ApiBase::dieDebug(
+ __METHOD__,
+ 'Must be called after database profiling is done with profileDBOut()'
+ );
}
$this->mModuleTime += microtime( true ) - $this->mTimeIn;
*/
public function getProfileTime() {
if ( $this->mTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'called without calling profileOut() first' );
+ ApiBase::dieDebug( __METHOD__, 'Called without calling profileOut() first' );
}
+
return $this->mModuleTime;
}
*/
public function profileDBIn() {
if ( $this->mTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'must be called while profiling the entire module with profileIn()' );
+ ApiBase::dieDebug(
+ __METHOD__,
+ 'Must be called while profiling the entire module with profileIn()'
+ );
}
if ( $this->mDBTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'called twice without calling profileDBOut()' );
+ ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileDBOut()' );
}
$this->mDBTimeIn = microtime( true );
wfProfileIn( $this->getModuleProfileName( true ) );
*/
public function profileDBOut() {
if ( $this->mTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'must be called while profiling the entire module with profileIn()' );
+ ApiBase::dieDebug( __METHOD__, 'Must be called while profiling ' .
+ 'the entire module with profileIn()' );
}
if ( $this->mDBTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'called without calling profileDBIn() first' );
+ ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBIn() first' );
}
$time = microtime( true ) - $this->mDBTimeIn;
*/
public function getProfileDBTime() {
if ( $this->mDBTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'called without calling profileDBOut() first' );
+ ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBOut() first' );
}
+
return $this->mDBTime;
}
$this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
$this->profileDBOut();
}
+
return $this->mSlaveDB;
}
}
$target = User::newFromName( $params['user'] );
- // Bug 38633 - if the target is a user (not an IP address), but it doesn't exist or is unusable, error.
- if ( $target instanceof User && ( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $target->getName() ) ) ) {
+ // Bug 38633 - if the target is a user (not an IP address), but it
+ // doesn't exist or is unusable, error.
+ if ( $target instanceof User &&
+ ( $target->isAnon() /* doesn't exist */ || !User::isUsableName( $target->getName() ) )
+ ) {
$this->dieUsageMsg( array( 'nosuchuser', $params['user'] ) );
}
return array(
'user' => 'Username, IP address or IP range you want to block',
'token' => 'A block token previously obtained through prop=info',
- 'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
+ 'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' .
+ 'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
'reason' => 'Reason for block',
'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
'nocreate' => 'Prevent account creation',
- 'autoblock' => 'Automatically block the last used IP address, and any subsequent IP addresses they try to login from',
- 'noemail' => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
+ 'autoblock' => 'Automatically block the last used IP address, and ' .
+ 'any subsequent IP addresses they try to login from',
+ 'noemail'
+ => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
- 'allowusertalk' => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
+ 'allowusertalk'
+ => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
'reblock' => 'If the user is already blocked, overwrite the existing block',
'watchuser' => 'Watch the user/IP\'s user and talk pages',
);
$difftext = $de->getDiffBody();
if ( $difftext === false ) {
- $this->dieUsage( 'The diff cannot be retrieved. ' .
- 'Maybe one or both revisions do not exist or you do not have permission to view them.', 'baddiff' );
- } else {
- ApiResult::setContent( $vals, $difftext );
+ $this->dieUsage(
+ 'The diff cannot be retrieved. Maybe one or both revisions do ' .
+ 'not exist or you do not have permission to view them.',
+ 'baddiff'
+ );
}
+ ApiResult::setContent( $vals, $difftext );
+
$this->getResult()->addValue( null, $this->getModuleName(), $vals );
}
if ( !$title || $title->isExternal() ) {
$this->dieUsageMsg( array( 'invalidtitle', $titleText ) );
}
+
return $title->getLatestRevID();
} elseif ( $titleId ) {
$title = Title::newFromID( $titleId );
if ( !$title ) {
$this->dieUsageMsg( array( 'nosuchpageid', $titleId ) );
}
+
return $title->getLatestRevID();
}
- $this->dieUsage( 'inputneeded', 'A title, a page ID, or a revision number is needed for both the from and the to parameters' );
+ $this->dieUsage(
+ 'A title, a page ID, or a revision number is needed for both the from and the to parameters',
+ 'inputneeded'
+ );
}
public function getAllowedParams() {
array( 'code' => 'inputneeded', 'info' => 'A title or a revision is needed' ),
array( 'invalidtitle', 'title' ),
array( 'nosuchpageid', 'pageid' ),
- array( 'code' => 'baddiff', 'info' => 'The diff cannot be retrieved. Maybe one or both revisions do not exist or you do not have permission to view them.' ),
+ array(
+ 'code' => 'baddiff',
+ 'info' => 'The diff cannot be retrieved. Maybe one or both ' .
+ 'revisions do not exist or you do not have permission to view them.'
+ ),
) );
}
// 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' );
+ $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' );
if ( $params['mailpassword'] ) {
// If mailpassword was set, disable the password and send an email.
$user->setPassword( null );
- $status->merge( $loginForm->mailPasswordInternal( $user, false, 'createaccount-title', 'createaccount-text' ) );
+ $status->merge( $loginForm->mailPasswordInternal(
+ $user,
+ false,
+ 'createaccount-title',
+ 'createaccount-text'
+ ) );
} elseif ( $wgEmailAuthentication && Sanitizer::validateEmail( $user->getEmail() ) ) {
// Send out an email authentication message if needed
$status->merge( $user->sendConfirmationMail() );
public function getAllowedParams() {
global $wgEmailConfirmToEdit;
+
return array(
'name' => array(
ApiBase::PARAM_TYPE => 'user',
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'name' => 'Username',
'password' => "Password (ignored if {$p}mailpassword is set)",
'realname' => 'Real name of user (optional)',
'mailpassword' => 'If set to any value, a random password will be emailed to the user',
'reason' => 'Optional reason for creating the account to be put in the logs',
- 'language' => 'Language code to set as default for the user (optional, defaults to content language)'
+ 'language'
+ => 'Language code to set as default for the user (optional, defaults to content language)'
);
}
$errors = parent::getPossibleErrors();
// All local errors are from LoginForm, which means they're actually message keys.
foreach ( $localErrors as $error ) {
- $errors[] = array( 'code' => $error, 'info' => wfMessage( $error )->inLanguage( 'en' )->useDatabase( false )->parse() );
+ $errors[] = array(
+ 'code' => $error,
+ 'info' => wfMessage( $error )->inLanguage( 'en' )->useDatabase( false )->parse()
+ );
}
$errors[] = array(
global $wgMinimalPasswordLength;
$errors[] = array(
'code' => 'passwordtooshort',
- 'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )->inLanguage( 'en' )->useDatabase( false )->parse()
+ 'info' => wfMessage( 'passwordtooshort', $wgMinimalPasswordLength )
+ ->inLanguage( 'en' )->useDatabase( false )->parse()
);
+
return $errors;
}
* @ingroup API
*/
class ApiDelete extends ApiBase {
-
/**
* Extracts the title, token, and reason from the request parameters and invokes
* the local delete() function with these as arguments. It does not make use of
$user = $this->getUser();
if ( $titleObj->getNamespace() == NS_FILE ) {
- $status = self::deleteFile( $pageObj, $user, $params['token'], $params['oldimage'], $reason, false );
+ $status = self::deleteFile(
+ $pageObj,
+ $user,
+ $params['token'],
+ $params['oldimage'],
+ $reason,
+ false
+ );
} else {
$status = self::delete( $pageObj, $user, $params['token'], $reason );
}
}
$error = '';
+
// Luckily, Article.php provides a reusable delete function that does the hard work for us
return $page->doDeleteArticleReal( $reason, false, 0, true, $error );
}
/**
- * @param $page WikiPage|Page object to work on
- * @param $user User doing the action
- * @param $token
- * @param $oldimage
- * @param $reason
- * @param $suppress bool
+ * @param Page $page Object to work on
+ * @param User $user User doing the action
+ * @param string $token Delete token (same as edit token)
+ * @param string $oldimage Archive name
+ * @param string $reason Reason for the deletion. Autogenerated if null.
+ * @param bool $suppress Whether to mark all deleted versions as restricted
* @return Status|array
*/
- public static function deleteFile( Page $page, User $user, $token, $oldimage, &$reason = null, $suppress = false ) {
+ public static function deleteFile( Page $page, User $user, $token, $oldimage,
+ &$reason = null, $suppress = false
+ ) {
$title = $page->getTitle();
$errors = self::getPermissionsError( $title, $user, $token );
if ( count( $errors ) ) {
if ( is_null( $reason ) ) { // Log and RC don't like null reasons
$reason = '';
}
+
return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress, $user );
}
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
'token' => 'A delete token previously retrieved through prop=info',
- 'reason' => 'Reason for the deletion. If not set, an automatically generated reason will be used',
+ 'reason'
+ => 'Reason for the deletion. If not set, an automatically generated reason will be used',
'watch' => 'Add the page to your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+ 'watchlist' => 'Unconditionally add or remove the page from your ' .
+ 'watchlist, use preferences or do not change watch',
'unwatch' => 'Remove the page from your watchlist',
'oldimage' => 'The name of the old image to delete as provided by iiprop=archivename'
);
public function getExamples() {
return array(
'api.php?action=delete&title=Main%20Page&token=123ABC' => 'Delete the Main Page',
- 'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move' => 'Delete the Main Page with the reason "Preparing for move"',
+ 'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+ => 'Delete the Main Page with the reason "Preparing for move"',
);
}
* @ingroup API
*/
class ApiEditPage extends ApiBase {
-
public function execute() {
$user = $this->getUser();
$params = $this->extractRequestParams();
if ( is_null( $params['text'] ) && is_null( $params['appendtext'] ) &&
- is_null( $params['prependtext'] ) &&
- $params['undo'] == 0 )
- {
+ is_null( $params['prependtext'] ) &&
+ $params['undo'] == 0
+ ) {
$this->dieUsageMsg( 'missingtext' );
}
$oldTitle = $titleObj;
$titles = Revision::newFromTitle( $oldTitle, false, Revision::READ_LATEST )
- ->getContent( Revision::FOR_THIS_USER, $user )
- ->getRedirectChain();
+ ->getContent( Revision::FOR_THIS_USER, $user )
+ ->getRedirectChain();
// array_shift( $titles );
$redirValues = array();
$contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
}
- // @todo ask handler whether direct editing is supported at all! make allowFlatEdit() method or some such
+ // @todo Ask handler whether direct editing is supported at all! make
+ // allowFlatEdit() method or some such
if ( !isset( $params['contentformat'] ) || $params['contentformat'] == '' ) {
$params['contentformat'] = $contentHandler->getDefaultFormat();
$model = $contentHandler->getModelID();
$this->dieUsage( "The requested format $contentFormat is not supported for content model " .
- " $model used by $name", 'badformat' );
+ " $model used by $name", 'badformat' );
}
if ( $params['createonly'] && $titleObj->exists() ) {
}
$toMD5 = $params['text'];
- if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) )
- {
+ if ( !is_null( $params['appendtext'] ) || !is_null( $params['prependtext'] ) ) {
$content = $pageObj->getContent();
if ( !$content ) {
$content = ContentHandler::makeContent( $text, $this->getTitle() );
} catch ( MWContentSerializationException $ex ) {
$this->dieUsage( $ex->getMessage(), 'parseerror' );
+
return;
}
} else {
if ( !is_null( $params['section'] ) ) {
if ( !$contentHandler->supportsSections() ) {
$modelName = $contentHandler->getModelID();
- $this->dieUsage( "Sections are not supported for this content model: $modelName.", 'sectionsnotsupported' );
+ $this->dieUsage(
+ "Sections are not supported for this content model: $modelName.",
+ 'sectionsnotsupported'
+ );
}
if ( $params['section'] == 'new' ) {
if ( $params['undoafter'] > 0 ) {
if ( $params['undo'] < $params['undoafter'] ) {
list( $params['undo'], $params['undoafter'] ) =
- array( $params['undoafter'], $params['undo'] );
+ array( $params['undoafter'], $params['undo'] );
}
$undoafterRev = Revision::newFromID( $params['undoafter'] );
}
}
if ( $undoRev->getPage() != $pageObj->getID() ) {
- $this->dieUsageMsg( array( 'revwrongpage', $undoRev->getID(), $titleObj->getPrefixedText() ) );
+ $this->dieUsageMsg( array( 'revwrongpage', $undoRev->getID(),
+ $titleObj->getPrefixedText() ) );
}
if ( $undoafterRev->getPage() != $pageObj->getID() ) {
- $this->dieUsageMsg( array( 'revwrongpage', $undoafterRev->getID(), $titleObj->getPrefixedText() ) );
+ $this->dieUsageMsg( array( 'revwrongpage', $undoafterRev->getID(),
+ $titleObj->getPrefixedText() ) );
}
- $newContent = $contentHandler->getUndoContent( $pageObj->getRevision(), $undoRev, $undoafterRev );
+ $newContent = $contentHandler->getUndoContent(
+ $pageObj->getRevision(),
+ $undoRev,
+ $undoafterRev
+ );
if ( !$newContent ) {
$this->dieUsageMsg( 'undo-failure' );
// If no summary was given and we only undid one rev,
// use an autosummary
- if ( is_null( $params['summary'] ) && $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo'] ) {
- $params['summary'] = wfMessage( 'undo-summary', $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+ if ( is_null( $params['summary'] ) &&
+ $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo']
+ ) {
+ $params['summary'] = wfMessage( 'undo-summary' )
+ ->params ( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
}
}
// The following is needed to give the hook the full content of the
// new revision rather than just the current section. (Bug 52077)
- if ( !is_null( $params['section'] ) && $contentHandler->supportsSections() && $titleObj->exists() ) {
-
- $sectionTitle = '';
+ if ( !is_null( $params['section'] ) &&
+ $contentHandler->supportsSections() && $titleObj->exists()
+ ) {
// If sectiontitle is set, use it, otherwise use the summary as the section title (for
// backwards compatibility with old forms/bots).
if ( $ep->sectiontitle !== '' ) {
$contentObj = $contentHandler->unserializeContent( $content, $contentFormat );
- $fullContentObj = $articleObject->replaceSectionContent( $params['section'], $contentObj, $sectionTitle );
+ $fullContentObj = $articleObject->replaceSectionContent(
+ $params['section'],
+ $contentObj,
+ $sectionTitle
+ );
if ( $fullContentObj ) {
$content = $fullContentObj->serialize( $contentFormat );
} else {
if ( count( $r ) ) {
$r['result'] = 'Failure';
$apiResult->addValue( null, $this->getModuleName(), $r );
+
return;
- } else {
- $this->dieUsageMsg( 'hookaborted' );
}
+
+ $this->dieUsageMsg( 'hookaborted' );
}
// Do the actual save
array( 'emptynewsection' ),
array( 'unknownerror', 'retval' ),
array( 'code' => 'nosuchsection', 'info' => 'There is no section section.' ),
- array( 'code' => 'invalidsection', 'info' => 'The section parameter must be set to an integer or \'new\'' ),
- array( 'code' => 'sectionsnotsupported', 'info' => 'Sections are not supported for this type of page.' ),
- array( 'code' => 'editnotsupported', 'info' => 'Editing of this type of page is not supported using '
- . 'the text based edit API.' ),
- array( 'code' => 'appendnotsupported', 'info' => 'This type of page can not be edited by appending '
- . 'or prepending text.' ),
- array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied to '
- . 'the page\'s content model' ),
+ array(
+ 'code' => 'invalidsection',
+ 'info' => 'The section parameter must be set to an integer or \'new\''
+ ),
+ array(
+ 'code' => 'sectionsnotsupported',
+ 'info' => 'Sections are not supported for this type of page.'
+ ),
+ array(
+ 'code' => 'editnotsupported',
+ 'info' => 'Editing of this type of page is not supported using the text based edit API.'
+ ),
+ array(
+ 'code' => 'appendnotsupported',
+ 'info' => 'This type of page can not be edited by appending or prepending text.' ),
+ array(
+ 'code' => 'badformat',
+ 'info' => 'The requested serialization format can not be applied to the page\'s content model'
+ ),
array( 'customcssprotected' ),
array( 'customjsprotected' ),
)
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
'section' => 'Section number. 0 for the top section, \'new\' for a new section',
'sectiontitle' => 'The title for a new section',
'text' => 'Page content',
- 'token' => array( 'Edit token. You can get one of these through prop=info.',
- "The token should always be sent as the last parameter, or at least, after the {$p}text parameter"
+ 'token' => array(
+ 'Edit token. You can get one of these through prop=info.',
+ "The token should always be sent as the last parameter, or at " .
+ "least, after the {$p}text parameter"
),
- 'summary' => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
+ 'summary'
+ => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
'minor' => 'Minor edit',
'notminor' => 'Non-minor edit',
'bot' => 'Mark this edit as bot',
- 'basetimestamp' => array( 'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
- 'Used to detect edit conflicts; leave unset to ignore conflicts'
+ 'basetimestamp' => array(
+ 'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
+ 'Used to detect edit conflicts; leave unset to ignore conflicts'
),
- 'starttimestamp' => array( 'Timestamp when you obtained the edit token.',
- 'Used to detect edit conflicts; leave unset to ignore conflicts'
+ 'starttimestamp' => array(
+ 'Timestamp when you obtained the edit token.',
+ 'Used to detect edit conflicts; leave unset to ignore conflicts'
),
'recreate' => 'Override any errors about the article having been deleted in the meantime',
'createonly' => 'Don\'t edit the page if it exists already',
'nocreate' => 'Throw an error if the page doesn\'t exist',
'watch' => 'Add the page to your watchlist',
'unwatch' => 'Remove the page from your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
- 'md5' => array( "The MD5 hash of the {$p}text parameter, or the {$p}prependtext and {$p}appendtext parameters concatenated.",
- 'If set, the edit won\'t be done unless the hash is correct' ),
+ 'watchlist' => 'Unconditionally add or remove the page from your ' .
+ 'watchlist, use preferences or do not change watch',
+ 'md5' => array(
+ "The MD5 hash of the {$p}text parameter, or the {$p}prependtext " .
+ "and {$p}appendtext parameters concatenated.",
+ 'If set, the edit won\'t be done unless the hash is correct'
+ ),
'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
- "Use {$p}section=new to append a new section" ),
+ "Use {$p}section=new to append a new section" ),
'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
'redirect' => 'Automatically resolve redirects',
public function getExamples() {
return array(
- 'api.php?action=edit&title=Test&summary=test%20summary&text=article%20content&basetimestamp=20070824123454&token=%2B\\'
+ '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\\'
+ '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\\'
+ 'api.php?action=edit&title=Test&undo=13585&undoafter=13579&' .
+ 'basetimestamp=20070824123454&token=%2B\\'
=> 'Undo r13579 through r13585 with autosummary (anonymous user)',
);
}
public function getExamples() {
return array(
- 'api.php?action=emailuser&target=WikiSysop&text=Content' => 'Send an email to the User "WikiSysop" with the text "Content"',
+ 'api.php?action=emailuser&target=WikiSysop&text=Content'
+ => 'Send an email to the User "WikiSysop" with the text "Content"',
);
}
$feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
$target = $params['user'] == 'newbies'
- ? 'newbies'
- : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
+ ? 'newbies'
+ : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
$feed = new $wgFeedClasses[$params['feedformat']] (
$feedTitle,
$comments
);
}
+
return null;
}
htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
"</p>\n<hr />\n<div>" . $html . "</div>";
}
+
return '';
}
public function getAllowedParams() {
global $wgFeedClasses;
$feedFormatNames = array_keys( $wgFeedClasses );
+
return array(
'feedformat' => array(
ApiBase::PARAM_DFLT => 'rss',
$feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
$feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
- $feed = new $wgFeedClasses[$params['feedformat']] ( $feedTitle, htmlspecialchars( $msg ), $feedUrl );
+ $feed = new $wgFeedClasses[$params['feedformat']] (
+ $feedTitle,
+ htmlspecialchars( $msg ),
+ $feedUrl
+ );
ApiFormatFeedWrapper::setResult( $this->getResult(), $feed, $feedItems );
-
} catch ( Exception $e ) {
-
// Error results should not be cached
$this->getMain()->setCacheMaxAge( 0 );
- $feedTitle = $wgSitename . ' - Error - ' . wfMessage( 'watchlist' )->inContentLanguage()->text() . ' [' . $wgLanguageCode . ']';
+ // @todo FIXME: Localise brackets
+ $feedTitle = $wgSitename . ' - Error - ' .
+ wfMessage( 'watchlist' )->inContentLanguage()->text() .
+ ' [' . $wgLanguageCode . ']';
$feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
$feedFormat = isset( $params['feedformat'] ) ? $params['feedformat'] : 'rss';
// The anchor won't work for sections that have dupes on page
// as there's no way to strip that info from ApiWatchlist (apparently?).
// RegExp in the line below is equal to Linker::formatAutocomments().
- if ( $this->linkToSections && $comment !== null && preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches ) ) {
+ if ( $this->linkToSections && $comment !== null &&
+ preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches )
+ ) {
global $wgParser;
+
$sectionTitle = $wgParser->stripSectionName( $matches[2] );
$sectionTitle = Sanitizer::normalizeSectionNameWhitespace( $sectionTitle );
$titleUrl .= Title::newFromText( '#' . $sectionTitle )->getFragmentForURL();
$this->watchlistModule = $this->getMain()->getModuleManager()->getModule( 'query' )
->getModuleManager()->getModule( 'watchlist' );
}
+
return $this->watchlistModule;
}
$ret['wltype'] = null;
$ret['wlexcludeuser'] = null;
}
+
return $ret;
}
public function getParamDescription() {
$wldescr = $this->getWatchlistModule()->getParamDescription();
+
return array(
'feedformat' => 'The format of the feed',
'hours' => 'List pages modified within this many hours from now',
$this->checkPermissions( $this->getUser() );
$sourceUrl = $this->file->getArchiveVirtualUrl( $this->archiveName );
- $status = $this->file->upload( $sourceUrl, $this->params['comment'], $this->params['comment'], 0, false, false, $this->getUser() );
+ $status = $this->file->upload(
+ $sourceUrl,
+ $this->params['comment'],
+ $this->params['comment'],
+ 0,
+ false,
+ false,
+ $this->getUser()
+ );
if ( $status->isGood() ) {
$result = array( 'result' => 'Success' );
}
$this->getResult()->addValue( null, $this->getModuleName(), $result );
-
}
/**
ApiBase::PARAM_REQUIRED => true
),
);
-
}
public function getParamDescription() {
public function getExamples() {
return array(
- 'api.php?action=filerevert&filename=Wiki.png&comment=Revert&archivename=20110305152740!Wiki.png&token=123ABC'
+ 'api.php?action=filerevert&filename=Wiki.png&comment=Revert&' .
+ 'archivename=20110305152740!Wiki.png&token=123ABC'
=> 'Revert Wiki.png to the version of 20110305152740',
);
}
* @ingroup API
*/
abstract class ApiFormatBase extends ApiBase {
-
private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp, $mCleared;
private $mBufferResult = false, $mBuffer, $mDisabled = false;
public function __construct( $main, $format ) {
parent::__construct( $main, $format );
- $this->mIsHtml = ( substr( $format, - 2, 2 ) === 'fm' ); // ends with 'fm'
+ $this->mIsHtml = ( substr( $format, -2, 2 ) === 'fm' ); // ends with 'fm'
if ( $this->mIsHtml ) {
- $this->mFormat = substr( $format, 0, - 2 ); // remove ending 'fm'
+ $this->mFormat = substr( $format, 0, -2 ); // remove ending 'fm'
} else {
$this->mFormat = $format;
}
<!DOCTYPE HTML>
<html>
<head>
-<?php if ( $this->mUnescapeAmps ) {
+<?php
+ if ( $this->mUnescapeAmps ) {
?> <title>MediaWiki API</title>
-<?php } else {
+<?php
+ } else {
?> <title>MediaWiki API Result</title>
-<?php } ?>
+<?php
+ }
+?>
</head>
<body>
<?php
-
-
if ( !$isHelpScreen ) {
+// @codingStandardsIgnoreStart Exclude long line from CodeSniffer checks
?>
<br />
<small>
</small>
<pre style='white-space: pre-wrap;'>
<?php
-
-
- } else { // don't wrap the contents of the <pre> for help screens
- // because these are actually formatted to rely on
- // the monospaced font for layout purposes
+// @codingStandardsIgnoreEnd
+ // don't wrap the contents of the <pre> for help screens
+ // because these are actually formatted to rely on
+ // the monospaced font for layout purposes
+ } else {
?>
<pre>
<?php
-
}
}
}
</body>
</html>
<?php
-
-
}
}
// identify URLs
$protos = wfUrlProtocolsWithoutProtRel();
// This regex hacks around bug 13218 (" included in the URL)
- $text = preg_replace( "#(((?i)$protos).*?)(")?([ \\'\"<>\n]|<|>|")#", '<a href="\\1">\\1</a>\\3\\4', $text );
+ $text = preg_replace(
+ "#(((?i)$protos).*?)(")?([ \\'\"<>\n]|<|>|")#",
+ '<a href="\\1">\\1</a>\\3\\4',
+ $text
+ );
/**
* Temporary fix for bad links in help messages. As a special case,
/**
* This class expects the result data to be in a custom format set by self::setResult()
- * $result['_feed'] - an instance of one of the $wgFeedClasses classes
- * $result['_feeditems'] - an array of FeedItem instances
+ * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+ * $result['_feeditems'] - an array of FeedItem instances
*/
public function execute() {
$data = $this->getResultData();
if ( $params['callback'] ) {
return 'text/javascript';
}
+
return 'application/json';
}
public function getParamDescription() {
return array(
- 'callback' => 'If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.',
- 'utf8' => 'If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
+ 'callback' => 'If specified, wraps the output into a given function ' .
+ 'call. For safety, all user-specific data will be restricted.',
+ 'utf8' => 'If specified, encodes most (but not all) non-ASCII ' .
+ 'characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
);
}
public function getDescription() {
if ( $this->mIsRaw ) {
return 'Output data with the debugging elements in JSON format' . parent::getDescription();
- } else {
- return 'Output data in JSON format' . parent::getDescription();
}
+
+ return 'Output data in JSON format' . parent::getDescription();
}
}
$data = $this->getResultData();
if ( isset( $data['error'] ) ) {
$this->mErrorFallback->execute();
+
return;
}
// Some versions of PHP have a broken wddx_serialize_value, see
// PHP bug 45314. Test encoding an affected character (U+00A0)
// to avoid this.
- $expected = "<wddxPacket version='1.0'><header/><data><string>\xc2\xa0</string></data></wddxPacket>";
+ $expected =
+ "<wddxPacket version='1.0'><header/><data><string>\xc2\xa0</string></data></wddxPacket>";
if ( function_exists( 'wddx_serialize_value' )
- && !$this->getIsHtml()
- && wddx_serialize_value( "\xc2\xa0" ) == $expected ) {
+ && !$this->getIsHtml()
+ && wddx_serialize_value( "\xc2\xa0" ) == $expected
+ ) {
$this->printText( wddx_serialize_value( $this->getResultData() ) );
} else {
// Don't do newlines and indentation if we weren't asked
$this->printText(
self::recXmlPrint( $this->mRootElemName,
$data,
- $this->getIsHtml() ? - 2 : null
+ $this->getIsHtml() ? -2 : null
)
);
}
}
if ( is_null( $subElemIndName ) && count( $indElements ) ) {
- ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys without _element value. Use ApiResult::setIndexedTagName()." );
+ ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys " .
+ "without _element value. Use ApiResult::setIndexedTagName()." );
}
if ( count( $subElements ) && count( $indElements ) && !is_null( $subElemContent ) ) {
$retval .= $indstr . Xml::element( $elemName, null, $elemValue );
}
}
+
return $retval;
}
$nt = Title::newFromText( $this->mXslt );
if ( is_null( $nt ) || !$nt->exists() ) {
$this->setWarning( 'Invalid or non-existent stylesheet specified' );
+
return;
}
if ( $nt->getNamespace() != NS_MEDIAWIKI ) {
$this->setWarning( 'Stylesheet should be in the MediaWiki namespace.' );
+
return;
}
- if ( substr( $nt->getText(), - 4 ) !== '.xsl' ) {
+ if ( substr( $nt->getText(), -4 ) !== '.xsl' ) {
$this->setWarning( 'Stylesheet should have .xsl extension.' );
+
return;
}
- $this->printText( '<?xml-stylesheet href="' . htmlspecialchars( $nt->getLocalURL( 'action=raw' ) ) . '" type="text/xsl" ?>' );
+ $this->printText( '<?xml-stylesheet href="' .
+ htmlspecialchars( $nt->getLocalURL( 'action=raw' ) ) . '" type="text/xsl" ?>' );
}
public function getAllowedParams() {
* @ingroup API
*/
class ApiHelp extends ApiBase {
-
/**
* Module for displaying help
*/
// In case the '+' was typed into URL, it resolves as a space
$subNames = explode( ' ', $m );
}
+
$module = $this->getMain();
- for ( $i = 0; $i < count( $subNames ); $i++ ) {
+ $subNamesCount = count( $subNames );
+ for ( $i = 0; $i < $subNamesCount; $i++ ) {
$subs = $module->getModuleManager();
if ( $subs === null ) {
$module = null;
} else {
$module = $subs->getModule( $subNames[$i] );
}
+
if ( $module === null ) {
if ( count( $subNames ) === 2
- && $i === 1
- && $subNames[0] === 'query'
- && in_array( $subNames[1], $queryModules )
+ && $i === 1
+ && $subNames[0] === 'query'
+ && in_array( $subNames[1], $queryModules )
) {
// Legacy: This is one of the renamed 'querymodule=...' parameters,
// do not use '+' notation in the output, use submodule's name instead.
$type = $subs->getModuleGroup( $subNames[$i] );
}
}
+
if ( $module !== null ) {
$r[] = $this->buildModuleHelp( $module, $type );
}
public function getParamDescription() {
return array(
- 'modules' => 'List of module names (value of the action= parameter). Can specify submodules with a \'+\'',
- 'querymodules' => 'Use modules=query+value instead. List of query module names (value of prop=, meta= or list= parameter)',
+ 'modules' => 'List of module names (value of the action= parameter). ' .
+ 'Can specify submodules with a \'+\'',
+ 'querymodules' => 'Use modules=query+value instead. List of query ' .
+ 'module names (value of prop=, meta= or list= parameter)',
);
}
return array(
'api.php?action=help' => 'Whole help page',
'api.php?action=help&modules=protect' => 'Module (action) help page',
- 'api.php?action=help&modules=query+categorymembers' => 'Help for the query/categorymembers module',
- 'api.php?action=help&modules=login|query+info' => 'Help for the login and query/info modules',
+ 'api.php?action=help&modules=query+categorymembers'
+ => 'Help for the query/categorymembers module',
+ 'api.php?action=help&modules=login|query+info'
+ => 'Help for the login and query/info modules',
);
}
class ApiImageRotate extends ApiBase {
private $mPageSet = null;
- public function __construct( $main, $action ) {
- parent::__construct( $main, $action );
- }
-
/**
* Add all items from $values into the result
* @param array $result output
if ( $this->mPageSet === null ) {
$this->mPageSet = new ApiPageSet( $this, 0, NS_FILE );
}
+
return $this->mPageSet;
}
if ( $permissionErrors ) {
// Just return the first error
$msg = $this->parseMsg( $permissionErrors[0] );
+
return $msg['info'];
}
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
}
+
return $result;
}
public function getParamDescription() {
$pageSet = $this->getPageSet();
+
return $pageSet->getFinalParamDescription() + array(
'rotation' => 'Degrees to rotate image clockwise',
'token' => 'Edit token. You can get one of these through action=tokens',
public function getPossibleErrors() {
$pageSet = $this->getPageSet();
+
return array_merge(
parent::getPossibleErrors(),
$pageSet->getFinalPossibleErrors()
public function getAllowedParams() {
global $wgImportSources;
+
return array(
'token' => array(
ApiBase::PARAM_TYPE => 'string',
public function getExamples() {
return array(
- 'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&namespace=100&fullhistory=&token=123ABC'
+ 'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+ 'namespace=100&fullhistory=&token=123ABC'
=> 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
);
}
'result' => 'Aborted',
'reason' => 'Cannot log in when using a callback',
) );
+
return;
}
$result['result'] = 'NotExists';
break;
- case LoginForm::RESET_PASS: // bug 20223 - Treat a temporary password as wrong. Per SpecialUserLogin - "The e-mailed temporary password should not be used for actual logins;"
+ // bug 20223 - Treat a temporary password as wrong. Per SpecialUserLogin:
+ // The e-mailed temporary password should not be used for actual logins.
+ case LoginForm::RESET_PASS:
case LoginForm::WRONG_PASS:
$result['result'] = 'WrongPass';
break;
public function getDescription() {
return array(
'Log in and get the authentication tokens.',
- 'In the event of a successful log-in, a cookie will be attached',
- 'to your session. In the event of a failed log-in, you will not',
- 'be able to attempt another log-in through this method for 5 seconds.',
- 'This is to prevent password guessing by automated password crackers'
+ 'In the event of a successful log-in, a cookie will be attached to your session.',
+ 'In the event of a failed log-in, you will not be able to attempt another log-in',
+ 'through this method for 5 seconds. This is to prevent password guessing by',
+ 'automated password crackers'
);
}
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'NeedToken', 'info' => 'You need to resubmit your login with the specified token. See https://bugzilla.wikimedia.org/show_bug.cgi?id=23076' ),
+ array(
+ 'code' => 'NeedToken', 'info' => 'You need to resubmit your ' .
+ 'login with the specified token. See ' .
+ 'https://bugzilla.wikimedia.org/show_bug.cgi?id=23076'
+ ),
array( 'code' => 'WrongToken', 'info' => 'You specified an invalid token' ),
array( 'code' => 'NoName', 'info' => 'You didn\'t set the lgname parameter' ),
array( 'code' => 'Illegal', 'info' => 'You provided an illegal username' ),
array( 'code' => 'NotExists', 'info' => 'The username you provided doesn\'t exist' ),
- array( 'code' => 'EmptyPass', 'info' => 'You didn\'t set the lgpassword parameter or you left it empty' ),
+ array(
+ 'code' => 'EmptyPass',
+ 'info' => 'You didn\'t set the lgpassword parameter or you left it empty'
+ ),
array( 'code' => 'WrongPass', 'info' => 'The password you provided is incorrect' ),
- array( 'code' => 'WrongPluginPass', 'info' => 'Same as "WrongPass", returned when an authentication plugin rather than MediaWiki itself rejected the password' ),
- array( 'code' => 'CreateBlocked', 'info' => 'The wiki tried to automatically create a new account for you, but your IP address has been blocked from account creation' ),
+ array(
+ 'code' => 'WrongPluginPass',
+ 'info' => 'Same as "WrongPass", returned when an authentication ' .
+ 'plugin rather than MediaWiki itself rejected the password'
+ ),
+ array(
+ 'code' => 'CreateBlocked',
+ 'info' => 'The wiki tried to automatically create a new account ' .
+ 'for you, but your IP address has been blocked from account creation'
+ ),
array( 'code' => 'Throttled', 'info' => 'You\'ve logged in too many times in a short time' ),
array( 'code' => 'Blocked', 'info' => 'User is blocked' ),
) );
'none' => 'ApiFormatNone',
);
+ // @codingStandardsIgnoreStart String contenation on "msg" not allowed to break long line
/**
* List of user roles that are specifically relevant to the API.
* array( 'right' => array ( 'msg' => 'Some message with a $1',
'params' => array( ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 )
)
);
+ // @codingStandardsIgnoreEnd
/**
* @var ApiFormatBase
/**
* 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 $context IContextSource|WebRequest - if this is an instance of
+ * FauxRequest, errors are thrown and no printing occurs
* @param bool $enableWrite should be set to true if the api may modify data
*/
public function __construct( $context = null, $enableWrite = false ) {
$this->mResult = new ApiResult( $this );
$this->mEnableWrite = $enableWrite;
- $this->mSquidMaxage = - 1; // flag for executeActionWithErrorHandling()
+ $this->mSquidMaxage = -1; // flag for executeActionWithErrorHandling()
$this->mCommit = false;
}
public function setCacheMode( $mode ) {
if ( !in_array( $mode, array( 'private', 'public', 'anon-public-user-private' ) ) ) {
wfDebug( __METHOD__ . ": unrecognised cache mode \"$mode\"\n" );
+
// Ignore for forwards-compatibility
return;
}
// Private wiki, only private headers
if ( $mode !== 'private' ) {
wfDebug( __METHOD__ . ": ignoring request for $mode cache mode, private wiki\n" );
+
return;
}
}
if ( $printer === null ) {
$this->dieUsage( "Unrecognized format: {$format}", 'unknown_format' );
}
+
return $printer;
}
} else {
$origins = explode( ' ', $originHeader );
}
+
if ( !in_array( $originParam, $origins ) ) {
// origin parameter set but incorrect
// Send a 403 response
$response->header( "HTTP/1.1 403 $message", true, 403 );
$response->header( 'Cache-Control: no-cache' );
echo "'origin' parameter does not match Origin header\n";
+
return false;
}
- if ( self::matchOrigin( $originParam, $wgCrossSiteAJAXdomains, $wgCrossSiteAJAXdomainExceptions ) ) {
+
+ $matchOrigin = self::matchOrigin(
+ $originParam,
+ $wgCrossSiteAJAXdomains,
+ $wgCrossSiteAJAXdomainExceptions
+ );
+
+ if ( $matchOrigin ) {
$response->header( "Access-Control-Allow-Origin: $originParam" );
$response->header( 'Access-Control-Allow-Credentials: true' );
$this->getOutput()->addVaryHeader( 'Origin' );
}
+
return true;
}
* @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
+ * @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 ) {
foreach ( $rules as $rule ) {
return false;
}
}
+
return true;
}
}
+
return false;
}
array( '.*?', '.' ),
$wildcard
);
+
return "/https?:\/\/$wildcard/";
}
if ( $this->mCacheMode == 'private' ) {
$response->header( 'Cache-Control: private' );
+
return;
}
if ( $out->haveCacheVaryCookies() ) {
// Logged in, mark this request private
$response->header( 'Cache-Control: private' );
+
return;
}
// Logged out, send normal public headers below
// Logged in or otherwise has session (e.g. anonymous users who have edited)
// Mark request private
$response->header( 'Cache-Control: private' );
+
return;
} // else no XVO and anonymous, send public headers below
}
// Sending a Vary header in this case is harmless, and protects us
// against conditional calls of setCacheMaxAge().
$response->header( 'Cache-Control: private' );
+
return;
}
'code' => 'internal_api_error_' . get_class( $e ),
'info' => $info,
);
- ApiResult::setContent( $errMessage, $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : '' );
+ ApiResult::setContent(
+ $errMessage,
+ $wgShowExceptionDetails ? "\n\n{$e->getTraceAsString()}\n\n" : ''
+ );
}
// Remember all the warnings to re-add them later
if ( $salt !== false ) {
if ( !isset( $moduleParams['token'] ) ) {
$this->dieUsageMsg( array( 'missingparam', 'token' ) );
- } else {
- if ( !$this->getUser()->matchEditToken( $moduleParams['token'], $salt, $this->getContext()->getRequest() ) ) {
- $this->dieUsageMsg( 'sessionfailure' );
- }
+ }
+
+ if ( !$this->getUser()->matchEditToken( $moduleParams['token'], $salt, $this->getContext()->getRequest() ) ) {
+ $this->dieUsageMsg( 'sessionfailure' );
}
}
+
return $module;
}
if ( $wgShowHostnames ) {
$this->dieUsage( "Waiting for $host: $lag seconds lagged", 'maxlag' );
- } else {
- $this->dieUsage( "Waiting for a database server: $lag seconds lagged", 'maxlag' );
}
- return false;
+
+ $this->dieUsage( "Waiting for a database server: $lag seconds lagged", 'maxlag' );
}
}
+
return true;
}
protected function checkExecutePermissions( $module ) {
$user = $this->getUser();
if ( $module->isReadMode() && !User::isEveryoneAllowed( 'read' ) &&
- !$user->isAllowed( 'read' ) )
- {
+ !$user->isAllowed( 'read' )
+ ) {
$this->dieUsageMsg( 'readrequired' );
}
if ( $module->isWriteMode() ) {
/**
* Log the preceding request
- * @param $time Time in seconds
+ * @param int $time Time in seconds
*/
protected function logRequest( $time ) {
$request = $this->getRequest();
static $table;
if ( !$table ) {
$chars = ';@$!*(),/:';
- for ( $i = 0; $i < strlen( $chars ); $i++ ) {
+ $numChars = strlen( $chars );
+ for ( $i = 0; $i < $numChars; $i++ ) {
$table[rawurlencode( $chars[$i] )] = $chars[$i];
}
}
+
return strtr( rawurlencode( $s ), $table );
}
*/
public function getVal( $name, $default = null ) {
$this->mParamsUsed[$name] = true;
+
return $this->getRequest()->getVal( $name, $default );
}
*/
public function getCheck( $name ) {
$this->mParamsUsed[$name] = true;
+
return $this->getRequest()->getCheck( $name );
}
*/
public function getUpload( $name ) {
$this->mParamsUsed[$name] = true;
+
return $this->getRequest()->getUpload( $name );
}
'smaxage' => 'Set the s-maxage header to this many seconds. Errors are never cached',
'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
- 'servedby' => 'Include the hostname that served the request in the results. Unconditionally shown on error',
+ 'servedby' => 'Include the hostname that served the request in the ' .
+ 'results. Unconditionally shown on error',
'origin' => array(
- 'When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain.',
- 'This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body).',
- 'This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org .',
- 'If this parameter does not match the Origin: header, a 403 response will be returned.',
- 'If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.',
+ 'When accessing the API using a cross-domain AJAX request (CORS), set this to the',
+ 'originating domain. This must be included in any pre-flight request, and',
+ 'therefore must be part of the request URI (not the POST body). This must match',
+ 'one of the origins in the Origin: header exactly, so it has to be set to ',
+ 'something like http://en.wikipedia.org or https://meta.wikimedia.org . If this',
+ 'parameter does not match the Origin: header, a 403 response will be returned. If',
+ 'this parameter matches the Origin: header and the origin is whitelisted, an',
+ 'Access-Control-Allow-Origin header will be set.',
),
);
}
return array(
'',
'',
- '**********************************************************************************************************',
- '** **',
- '** This is an auto-generated MediaWiki API documentation page **',
- '** **',
- '** Documentation and Examples: **',
- '** https://www.mediawiki.org/wiki/API **',
- '** **',
- '**********************************************************************************************************',
+ '**********************************************************************************************',
+ '** **',
+ '** This is an auto-generated MediaWiki API documentation page **',
+ '** **',
+ '** Documentation and Examples: **',
+ '** https://www.mediawiki.org/wiki/API **',
+ '** **',
+ '**********************************************************************************************',
'',
'Status: All features shown on this page should be working, but the API',
' is still in active development, and may change at any time.',
' In the case of an invalid action being passed, these will have a value',
' of "unknown_action"',
'',
- ' For more information see https://www.mediawiki.org/wiki/API:Errors_and_warnings',
+ ' For more information see https://www.mediawiki.org' .
+ '/wiki/API:Errors_and_warnings',
'',
'Documentation: https://www.mediawiki.org/wiki/API:Main_page',
'FAQ https://www.mediawiki.org/wiki/API:FAQ',
'Mailing list: https://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
'Api Announcements: https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce',
- 'Bugs & Requests: https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
+ 'Bugs & Requests: https://bugzilla.wikimedia.org/buglist.cgi?component=API&' .
+ 'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
'',
'',
'',
protected function getCredits() {
return array(
'API developers:',
- ' Roan Kattouw "<Firstname>.<Lastname>@gmail.com" (lead developer Sep 2007-2009)',
+ ' Roan Kattouw - roan . kattouw @ gmail . com (lead developer Sep 2007-2009)',
' Victor Vasiliev - vasilvv @ gmail . com',
' Bryan Tong Minh - bryan . tongminh @ gmail . com',
' Sam Reed - sam @ reedyboy . net',
- ' Yuri Astrakhan "<Firstname><Lastname>@gmail.com" (creator, lead developer Sep 2006-Sep 2007, 2012-present)',
+ ' Yuri Astrakhan - yuri . astrakhan @ gmail . com (creator, lead ' .
+ 'developer Sep 2006-Sep 2007, 2012-present)',
'',
'Please send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org',
'or file a bug report at https://bugzilla.wikimedia.org/'
if ( $wgAPICacheHelpTimeout > 0 ) {
$wgMemc->set( $key, $retval, $wgAPICacheHelpTimeout );
}
+
return $retval;
}
foreach ( self::$mRights as $right => $rightMsg ) {
$groups = User::getGroupsWithPermission( $right );
$msg .= "* " . $right . " *\n " . wfMsgReplaceArgs( $rightMsg['msg'], $rightMsg['params'] ) .
- "\nGranted to:\n " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
+ "\nGranted to:\n " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
}
$msg .= "\n$astriks Formats $astriks\n\n";
/**
* @param $module ApiBase
- * @param string $paramName 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 ) {
*/
public function getShowVersions() {
wfDeprecated( __METHOD__, '1.21' );
+
return false;
}
if ( is_array( $this->mExtraData ) ) {
$result = array_merge( $result, $this->mExtraData );
}
+
return $result;
}
// cache this instance in case it is needed later
$this->mInstances[$moduleName] = $instance;
}
+
return $instance;
}
}
$result[] = $name;
}
}
+
return $result;
}
$result[$name] = $grpCls[1];
}
}
+
return $result;
}
public function isDefined( $moduleName, $group = null ) {
if ( isset( $this->mModules[$moduleName] ) ) {
return $group === null || $this->mModules[$moduleName][0] === $group;
- } else {
- return false;
}
+
+ return false;
}
/**
public function getModuleGroup( $moduleName ) {
if ( isset( $this->mModules[$moduleName] ) ) {
return $this->mModules[$moduleName][0];
- } else {
- return null;
}
+
+ return null;
}
/**
if ( $toTitle->getNamespace() == NS_FILE
&& !RepoGroup::singleton()->getLocalRepo()->findFile( $toTitle )
- && wfFindFile( $toTitle ) )
- {
+ && wfFindFile( $toTitle )
+ ) {
if ( !$params['ignorewarnings'] && $user->isAllowed( 'reupload-shared' ) ) {
$this->dieUsageMsg( 'sharedfile-exists' );
} elseif ( !$user->isAllowed( 'reupload-shared' ) ) {
$this->dieUsageMsg( reset( $retval ) );
}
- $r = array( 'from' => $fromTitle->getPrefixedText(), 'to' => $toTitle->getPrefixedText(), 'reason' => $params['reason'] );
+ $r = array(
+ 'from' => $fromTitle->getPrefixedText(),
+ 'to' => $toTitle->getPrefixedText(),
+ 'reason' => $params['reason']
+ );
if ( $fromTitle->exists() ) {
//NOTE: we assume that if the old title exists, it's because it was re-created as
// Move subpages
if ( $params['movesubpages'] ) {
$r['subpages'] = $this->moveSubpages( $fromTitle, $toTitle,
- $params['reason'], $params['noredirect'] );
+ $params['reason'], $params['noredirect'] );
$result->setIndexedTagName( $r['subpages'], 'subpage' );
if ( $params['movetalk'] ) {
$success = $fromTitle->moveSubpages( $toTitle, true, $reason, !$noredirect );
if ( isset( $success[0] ) ) {
return array( 'error' => $this->parseMsg( $success ) );
- } else {
- // At least some pages could be moved
- // Report each of them separately
- foreach ( $success as $oldTitle => $newTitle ) {
- $r = array( 'from' => $oldTitle );
- if ( is_array( $newTitle ) ) {
- $r['error'] = $this->parseMsg( reset( $newTitle ) );
- } else {
- // Success
- $r['to'] = $newTitle;
- }
- $retval[] = $r;
+ }
+
+ // At least some pages could be moved
+ // Report each of them separately
+ foreach ( $success as $oldTitle => $newTitle ) {
+ $r = array( 'from' => $oldTitle );
+ if ( is_array( $newTitle ) ) {
+ $r['error'] = $this->parseMsg( reset( $newTitle ) );
+ } else {
+ // Success
+ $r['to'] = $newTitle;
}
+ $retval[] = $r;
}
+
return $retval;
}
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
'noredirect' => 'Don\'t create a redirect',
'watch' => 'Add the page and the redirect to your watchlist',
'unwatch' => 'Remove the page and the redirect from your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+ 'watchlist' => 'Unconditionally add or remove the page from your ' .
+ 'watchlist, use preferences or do not change watch',
'ignorewarnings' => 'Ignore any warnings'
);
}
public function getExamples() {
return array(
- 'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&reason=Misspelled%20title&movetalk=&noredirect='
+ 'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+ 'reason=Misspelled%20title&movetalk=&noredirect='
);
}
if ( in_array( $format, $allowed ) ) {
return $this->getMain()->createPrinterByName( $format );
}
+
return $this->getMain()->createPrinterByName( $allowed[0] );
}
}
public function getAllowedParams() {
+ global $wgOpenSearchDefaultLimit;
+
return array(
'search' => null,
'limit' => array(
- ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_DFLT => $wgOpenSearchDefaultLimit,
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_MIN => 1,
ApiBase::PARAM_MAX => 100,
* @ingroup API
*/
class ApiOptions extends ApiBase {
-
/**
* Changes preferences of the current user.
*/
'token' => 'An options token previously obtained through the action=tokens',
'reset' => 'Resets preferences to the site defaults',
'resetkinds' => 'List of types of options to reset when the "reset" option is set',
- 'change' => 'List of changes, formatted name=value (e.g. skin=vector), value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value',
+ 'change' => 'List of changes, formatted name=value (e.g. skin=vector), ' .
+ 'value cannot contain pipe characters. If no value is given (not ' .
+ 'even an equals sign), e.g., optionname|otheroption|..., the ' .
+ 'option will be reset to its default value',
'optionname' => 'A name of a option which should have an optionvalue set',
- 'optionvalue' => 'A value of the option specified by the optionname, can contain pipe characters',
+ 'optionvalue' => 'A value of the option specified by the optionname, ' .
+ 'can contain pipe characters',
);
}
return array(
'Change preferences of the current user',
'Only options which are registered in core or in one of installed extensions,',
- 'or as options with keys prefixed with \'userjs-\' (intended to be used by user scripts), can be set.'
+ 'or as options with keys prefixed with \'userjs-\' (intended to be used by user',
+ 'scripts), can be set.'
);
}
return array(
'api.php?action=options&reset=&token=123ABC',
'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
- 'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+ 'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&' .
+ 'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
);
}
}
/**
* Populate the PageSet from the request parameters.
- * @param bool $isDryRun If true, instantiates generator, but only to mark relevant parameters as used
+ * @param bool $isDryRun If true, instantiates generator, but only to mark
+ * relevant parameters as used
*/
private function executeInternal( $isDryRun ) {
$this->profileIn();
break;
case 'revids':
if ( $this->mResolveRedirects ) {
- $this->setWarning( 'Redirect resolution cannot be used together with the revids= parameter. ' .
- 'Any redirects the revids= point to have not been resolved.' );
+ $this->setWarning( 'Redirect resolution cannot be used ' .
+ 'together with the revids= parameter. Any redirects ' .
+ 'the revids= point to have not been resolved.' );
}
$this->mResolveRedirects = false;
$this->initFromRevIDs( $this->mParams['revids'] );
if ( isset( $this->mParams['revids'] ) ) {
return 'revids';
}
+
return null;
}
$this->mRequestedPageFields = array_diff_key( $this->mRequestedPageFields, $pageFlds );
$pageFlds = array_merge( $pageFlds, $this->mRequestedPageFields );
+
return array_keys( $pageFlds );
}
if ( !empty( $values ) && $result ) {
$result->setIndexedTagName( $values, 'r' );
}
+
return $values;
}
if ( !empty( $values ) && $result ) {
$result->setIndexedTagName( $values, 'n' );
}
+
return $values;
}
if ( !empty( $values ) && $result ) {
$result->setIndexedTagName( $values, 'c' );
}
+
return $values;
}
if ( !empty( $values ) && $result ) {
$result->setIndexedTagName( $values, 'i' );
}
+
return $values;
}
if ( !empty( $values ) && $result ) {
$result->setIndexedTagName( $values, 'rev' );
}
+
return $values;
}
/**
* Extract all requested fields from the row received from the database
- * @param $row Result row
+ * @param stdClass $row Result row
*/
public function processDbRow( $row ) {
// Store Title object in various data structures
// Get pageIDs data from the `page` table
$this->profileDBIn();
$res = $db->select( 'page', $this->getPageTableFields(), $set,
- __METHOD__ );
+ __METHOD__ );
$this->profileDBOut();
// Hack: get the ns:titles stored in array(ns => array(titles)) format
// Get pageIDs data from the `page` table
$this->profileDBIn();
$res = $db->select( 'page', $this->getPageTableFields(), $set,
- __METHOD__ );
+ __METHOD__ );
$this->profileDBOut();
}
foreach ( $res as $row ) {
$rdfrom = intval( $row->rd_from );
$from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
- $to = Title::makeTitle( $row->rd_namespace, $row->rd_title, $row->rd_fragment, $row->rd_interwiki );
+ $to = Title::makeTitle(
+ $row->rd_namespace,
+ $row->rd_title,
+ $row->rd_fragment,
+ $row->rd_interwiki
+ );
unset( $this->mPendingRedirectIDs[$rdfrom] );
if ( !$to->isExternal() && !isset( $this->mAllPages[$row->rd_namespace][$row->rd_title] ) ) {
$lb->add( $row->rd_namespace, $row->rd_title );
unset( $this->mPendingRedirectIDs[$id] );
}
}
+
return $lb;
}
// Variants checking
global $wgContLang;
if ( $this->mConvertTitles &&
- count( $wgContLang->getVariants() ) > 1 &&
- !$titleObj->exists() ) {
+ count( $wgContLang->getVariants() ) > 1 &&
+ !$titleObj->exists()
+ ) {
// Language::findVariantLink will modify titleText and titleObj into
// the canonical variant if possible
$titleText = is_string( $title ) ? $title : $titleObj->getPrefixedText();
$result['generator'] = null;
}
}
+
return $result;
}
sort( $gens );
self::$generators = $gens;
}
+
return self::$generators;
}
'titles' => 'A list of titles to work on',
'pageids' => 'A list of page IDs to work on',
'revids' => 'A list of revision IDs to work on',
- 'generator' => array( 'Get the list of pages to work on by executing the specified query module.',
- 'NOTE: generator parameter names must be prefixed with a \'g\', see examples' ),
+ 'generator' => array(
+ 'Get the list of pages to work on by executing the specified query module.',
+ 'NOTE: generator parameter names must be prefixed with a \'g\', see examples'
+ ),
'redirects' => 'Automatically resolve redirects',
- 'converttitles' => array( 'Convert titles to other variants if necessary. Only works if the wiki\'s content language supports variant conversion.',
- 'Languages that support variant conversion include ' . implode( ', ', LanguageConverter::$languagesWithVariants ) ),
+ 'converttitles' => array(
+ 'Convert titles to other variants if necessary. Only works if ' .
+ 'the wiki\'s content language supports variant conversion.',
+ 'Languages that support variant conversion include ' .
+ implode( ', ', LanguageConverter::$languagesWithVariants )
+ ),
);
}
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'multisource', 'info' => "Cannot use 'pageids' at the same time as 'dataSource'" ),
- array( 'code' => 'multisource', 'info' => "Cannot use 'revids' at the same time as 'dataSource'" ),
- array( 'code' => 'badgenerator', 'info' => 'Module $generatorName cannot be used as a generator' ),
+ array(
+ 'code' => 'multisource',
+ 'info' => "Cannot use 'pageids' at the same time as 'dataSource'"
+ ),
+ array(
+ 'code' => 'multisource',
+ 'info' => "Cannot use 'revids' at the same time as 'dataSource'"
+ ),
+ array(
+ 'code' => 'badgenerator',
+ 'info' => 'Module $generatorName cannot be used as a generator'
+ ),
) );
}
}
if ( isset( $p[ApiBase::PARAM_TYPE] ) ) {
$a['type'] = $p[ApiBase::PARAM_TYPE];
if ( is_array( $a['type'] ) ) {
- $a['type'] = array_values( $a['type'] ); // to prevent sparse arrays from being serialized to JSON as objects
+ // To prevent sparse arrays from being serialized to JSON as objects
+ $a['type'] = array_values( $a['type'] );
$result->setIndexedTagName( $a['type'], 't' );
}
}
sort( $querymodules );
$formatmodules = $this->getMain()->getModuleManager()->getNames( 'format' );
sort( $formatmodules );
+
return array(
'modules' => array(
ApiBase::PARAM_ISMULTI => true,
'modules' => 'List of module names (value of the action= parameter)',
'querymodules' => 'List of query module names (value of prop=, meta= or list= parameter)',
'mainmodule' => 'Get information about the main (top-level) module as well',
- 'pagesetmodule' => 'Get information about the pageset module (providing titles= and friends) as well',
+ 'pagesetmodule' => 'Get information about the pageset module ' .
+ '(providing titles= and friends) as well',
'formatmodules' => 'List of format module names (value of format= parameter)',
);
}
$format = $params['contentformat'];
if ( !is_null( $page ) && ( !is_null( $text ) || $titleProvided ) ) {
- $this->dieUsage( 'The page parameter cannot be used together with the text and title parameters', 'params' );
+ $this->dieUsage(
+ 'The page parameter cannot be used together with the text and title parameters',
+ 'params'
+ );
}
$prop = array_flip( $params['prop'] );
// TODO: Does this still need $wgTitle?
global $wgParser, $wgTitle;
- // Currently unnecessary, code to act as a safeguard against any change in current behavior of uselang
+ // Currently unnecessary, code to act as a safeguard against any change
+ // in current behavior of uselang
$oldLang = null;
- if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+ if ( isset( $params['uselang'] )
+ && $params['uselang'] != $this->getContext()->getLanguage()->getCode()
+ ) {
$oldLang = $this->getContext()->getLanguage(); // Backup language
$this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
}
'action' => 'query',
'redirects' => '',
);
- if ( !is_null ( $pageid ) ) {
+ if ( !is_null( $pageid ) ) {
$reqParams['pageids'] = $pageid;
} else { // $page
$reqParams['titles'] = $page;
ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
}
$result->addValue( null, $this->getModuleName(), $result_array );
+
return;
}
if ( !is_null( $params['summary'] ) ) {
$result_array['parsedsummary'] = array();
- ApiResult::setContent( $result_array['parsedsummary'], Linker::formatComment( $params['summary'], $titleObj ) );
+ ApiResult::setContent(
+ $result_array['parsedsummary'],
+ Linker::formatComment( $params['summary'], $titleObj )
+ );
}
if ( isset( $prop['langlinks'] ) || isset( $prop['languageshtml'] ) ) {
if ( isset( $prop['displaytitle'] ) ) {
$result_array['displaytitle'] = $p_result->getDisplayTitle() ?
- $p_result->getDisplayTitle() :
- $titleObj->getPrefixedText();
+ $p_result->getDisplayTitle() :
+ $titleObj->getPrefixedText();
}
if ( isset( $prop['headitems'] ) || isset( $prop['headhtml'] ) ) {
if ( isset( $prop['headhtml'] ) ) {
$result_array['headhtml'] = array();
- ApiResult::setContent( $result_array['headhtml'], $context->getOutput()->headElement( $context->getSkin() ) );
+ ApiResult::setContent(
+ $result_array['headhtml'],
+ $context->getOutput()->headElement( $context->getSkin() )
+ );
}
}
$popts->setIsSectionPreview( $params['sectionpreview'] );
wfProfileOut( __METHOD__ );
+
return $popts;
}
if ( $this->section !== false && $this->content !== null ) {
$this->content = $this->getSectionContent(
$this->content,
- !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText() );
+ !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText()
+ );
// Not cached (save or load)
return $this->content->getParserOutput( $page->getTitle(), null, $popts );
- } else {
- // Try the parser cache first
- // getParserOutput will save to Parser cache if able
- $pout = $page->getParserOutput( $popts );
- if ( !$pout ) {
- $this->dieUsage( "There is no revision ID {$page->getLatest()}", 'missingrev' );
- }
- if ( $getWikitext ) {
- $this->content = $page->getContent( Revision::RAW );
- }
- return $pout;
}
+
+ // Try the parser cache first
+ // getParserOutput will save to Parser cache if able
+ $pout = $page->getParserOutput( $popts );
+ if ( !$pout ) {
+ $this->dieUsage( "There is no revision ID {$page->getLatest()}", 'missingrev' );
+ }
+ if ( $getWikitext ) {
+ $this->content = $page->getContent( Revision::RAW );
+ }
+
+ return $pout;
}
private function getSectionContent( Content $content, $what ) {
$this->dieUsage( "Sections are not supported by " . $what, 'nosuchsection' );
$section = false;
}
+
return $section;
}
ApiResult::setContent( $entry, $bits[1] );
$result[] = $entry;
}
+
return $result;
}
private function categoriesHtml( $categories ) {
$context = $this->getContext();
$context->getOutput()->addCategoryLinks( $categories );
+
return $context->getSkin()->getCategories();
}
/**
- * @deprecated since 1.18 No modern skin generates language links this way, please use language links
- * data to generate your own HTML.
+ * @deprecated since 1.18 No modern skin generates language links this way,
+ * please use language links data to generate your own HTML.
* @param $languages array
* @return string
*/
return '';
}
- $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() . wfMessage( 'colon-separator' )->text() );
+ $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() .
+ wfMessage( 'colon-separator' )->text() );
$langs = array();
foreach ( $languages as $l ) {
$result[] = $entry;
}
}
+
return $result;
}
$result[] = $entry;
}
}
+
return $result;
}
ApiResult::setContent( $entry, $content );
$result[] = $entry;
}
+
return $result;
}
ApiResult::setContent( $entry, $value );
$result[] = $entry;
}
+
return $result;
}
ApiResult::setContent( $entry, $link );
$result[] = $entry;
}
+
return $result;
}
ApiBase::PARAM_TYPE => 'integer',
),
'prop' => array(
- ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|images|externallinks|sections|revid|displaytitle|iwlinks|properties',
+ ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|' .
+ 'images|externallinks|sections|revid|displaytitle|iwlinks|properties',
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array(
'text',
public function getParamDescription() {
$p = $this->getModulePrefix();
$wikitext = CONTENT_MODEL_WIKITEXT;
+
return array(
'text' => "Text to parse. Use {$p}title or {$p}contentmodel to control the content model",
'summary' => 'Summary to parse',
public function getDescription() {
$p = $this->getModulePrefix();
+
return array(
'Parses content and returns parser output',
- 'See the various prop-Modules of action=query to get information from the current version of a page',
+ 'See the various prop-Modules of action=query to get information from the current' .
+ 'version of a page',
'There are several ways to specify the text to parse:',
"1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
"2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'params', 'info' => 'The page parameter cannot be used together with the text and title parameters' ),
+ array(
+ 'code' => 'params',
+ 'info' => 'The page parameter cannot be used together with the text and title parameters'
+ ),
array( 'code' => 'missingrev', 'info' => 'There is no revision ID oldid' ),
- array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revisions' ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You don\'t have permission to view deleted revisions'
+ ),
array( 'code' => 'missingtitle', 'info' => 'The page you specified doesn\'t exist' ),
array( 'code' => 'nosuchsection', 'info' => 'There is no section sectionnumber in page' ),
array( 'nosuchpageid' ),
array( 'invalidtitle', 'title' ),
array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
- array( 'code' => 'notwikitext', 'info' => 'The requested operation is only supported on wikitext content.' ),
+ array(
+ 'code' => 'notwikitext',
+ 'info' => 'The requested operation is only supported on wikitext content.'
+ ),
array( 'code' => 'pagecannotexist', 'info' => "Namespace doesn't allow actual pages" ),
) );
}
return array(
'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
'api.php?action=parse&text={{Project:Sandbox}}' => 'Parse wikitext',
- 'api.php?action=parse&text={{PAGENAME}}&title=Test' => 'Parse wikitext, specifying the page title',
+ 'api.php?action=parse&text={{PAGENAME}}&title=Test'
+ => 'Parse wikitext, specifying the page title',
'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
);
}
'code' => 'notpatrollable',
'info' => "The revision can't be patrolled as it's too old"
)
- ) );
+ )
+ );
}
public function needsToken() {
* @ingroup API
*/
class ApiProtect extends ApiBase {
-
public function execute() {
global $wgRestrictionLevels;
$params = $this->extractRequestParams();
if ( count( $expiry ) == 1 ) {
$expiry = array_fill( 0, count( $params['protections'] ), $expiry[0] );
} else {
- $this->dieUsageMsg( array( 'toofewexpiries', count( $expiry ), count( $params['protections'] ) ) );
+ $this->dieUsageMsg( array(
+ 'toofewexpiries',
+ count( $expiry ),
+ count( $params['protections'] )
+ ) );
}
}
$expiryarray[$p[0]] = $exp;
}
$resultProtections[] = array( $p[0] => $protections[$p[0]],
- 'expiry' => ( $expiryarray[$p[0]] == $db->getInfinity() ?
- 'infinite' :
- wfTimestamp( TS_ISO_8601, $expiryarray[$p[0]] ) ) );
+ 'expiry' => ( $expiryarray[$p[0]] == $db->getInfinity() ?
+ 'infinite' :
+ wfTimestamp( TS_ISO_8601, $expiryarray[$p[0]] ) ) );
}
$cascade = $params['cascade'];
$watch = $params['watch'] ? 'watch' : $params['watchlist'];
$this->setWatch( $watch, $titleObj, 'watchdefault' );
- $status = $pageObj->doUpdateRestrictions( $protections, $expiryarray, $cascade, $params['reason'], $this->getUser() );
+ $status = $pageObj->doUpdateRestrictions(
+ $protections,
+ $expiryarray,
+ $cascade,
+ $params['reason'],
+ $this->getUser()
+ );
if ( !$status->isOK() ) {
$this->dieStatus( $status );
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
'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 never-expiring protection.' ),
+ 'expiry' => array(
+ 'Expiry timestamps. If only one timestamp is ' .
+ 'set, it\'ll be used for all protections.',
+ '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\'' ),
+ 'cascade' => array(
+ 'Enable cascading protection (i.e. protect pages included in this page)',
+ 'Ignored if not all protection levels are \'sysop\' or \'protect\''
+ ),
'watch' => 'If set, add the page being (un)protected to your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+ 'watchlist' => 'Unconditionally add or remove the page from your ' .
+ 'watchlist, use preferences or do not change watch',
);
}
public function getExamples() {
return array(
- 'api.php?action=protect&title=Main%20Page&token=123ABC&protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
- 'api.php?action=protect&title=Main%20Page&token=123ABC&protections=edit=all|move=all&reason=Lifting%20restrictions'
+ 'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
+ 'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=edit=all|move=all&reason=Lifting%20restrictions'
);
}
* @ingroup API
*/
class ApiPurge extends ApiBase {
-
private $mPageSet;
/**
# Parse content; note that HTML generation is only needed if we want to cache the result.
$content = $page->getContent( Revision::RAW );
- $p_result = $content->getParserOutput( $title, $page->getLatest(), $popts, $wgEnableParserCache );
+ $p_result = $content->getParserOutput(
+ $title,
+ $page->getLatest(),
+ $popts,
+ $wgEnableParserCache
+ );
# Update the links tables
$updates = $content->getSecondaryDataUpdates(
if ( !isset( $this->mPageSet ) ) {
$this->mPageSet = new ApiPageSet( $this );
}
+
return $this->mPageSet;
}
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
}
+
return $result;
}
$this->mNamedDB[$name] = wfGetDB( $db, $groups );
$this->profileDBOut();
}
+
return $this->mNamedDB[$name];
}
*/
public function getModules() {
wfDeprecated( __METHOD__, '1.21' );
+
return $this->getModuleManager()->getNamesWithClasses();
}
$gens[$name] = $class;
}
}
+
return $gens;
}
public function getCustomPrinter() {
// If &exportnowrap is set, use the raw formatter
if ( $this->getParameter( 'export' ) &&
- $this->getParameter( 'exportnowrap' ) )
- {
+ $this->getParameter( 'exportnowrap' )
+ ) {
return new ApiFormatRaw( $this->getMain(),
$this->getMain()->createPrinterByName( 'xml' ) );
} else {
}
}
$this->dieContinueUsageIf( $completeModules !== null && count( $tmp ) !== 0 );
+
return $modules;
}
} else { // private
$cacheMode = 'private';
}
+
return $cacheMode;
}
ApiQueryBase::addTitleInfo( $vals, $title );
$vals['special'] = '';
if ( $title->isSpecialPage() &&
- !SpecialPageFactory::exists( $title->getDBkey() ) ) {
+ !SpecialPageFactory::exists( $title->getDBkey() )
+ ) {
$vals['missing'] = '';
} elseif ( $title->getNamespace() == NS_MEDIA &&
- !wfFindFile( $title ) ) {
+ !wfFindFile( $title )
+ ) {
$vals['missing'] = '';
}
$pages[$fakeId] = $vals;
$this->mGeneratorContinue = array();
}
$this->mGeneratorContinue[$paramName] = $paramValue;
+
return true;
}
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
}
+
return $result;
}
public function getParamDescription() {
return $this->getPageSet()->getFinalParamDescription() + array(
- 'prop' => 'Which properties to get for the titles/revisions/pageids. Module help is available below',
+ 'prop' => 'Which properties to get for the titles/revisions/pageids. ' .
+ 'Module help is available below',
'list' => 'Which lists to get. Module help is available below',
'meta' => 'Which metadata to get about the site. Module help is available below',
'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
'export' => 'Export the current revisions of all given or generated pages',
- 'exportnowrap' => 'Return the export XML without wrapping it in an XML result (same format as Special:Export). Can only be used with export',
+ 'exportnowrap' => 'Return the export XML without wrapping it in an ' .
+ 'XML result (same format as Special:Export). Can only be used with export',
'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
'continue' => array(
- 'When present, formats query-continue as key-value pairs that should simply be merged into the original request.',
+ 'When present, formats query-continue as key-value pairs that ' .
+ 'should simply be merged into the original request.',
'This parameter must be set to an empty string in the initial query.',
- 'This parameter is recommended for all new development, and will be made default in the next API version.' ),
+ 'This parameter is recommended for all new development, and ' .
+ 'will be made default in the next API version.'
+ ),
);
}
public function getDescription() {
return array(
- 'Query API module allows applications to get needed pieces of data from the MediaWiki databases,',
+ 'Query API module allows applications to get needed pieces of data ' .
+ 'from the MediaWiki databases,',
'and is loosely based on the old query.php interface.',
- 'All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites'
+ 'All data modifications will first have to use query to acquire a ' .
+ 'token to prevent abuse from malicious sites'
);
}
public function getExamples() {
return array(
- 'api.php?action=query&prop=revisions&meta=siteinfo&titles=Main%20Page&rvprop=user|comment&continue=',
+ 'api.php?action=query&prop=revisions&meta=siteinfo&' .
+ 'titles=Main%20Page&rvprop=user|comment&continue=',
'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
);
}
}
if ( isset( $params['prefix'] ) ) {
- $this->addWhere( 'cat_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ $this->addWhere( 'cat_title' .
+ $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
}
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$result = $this->getResult();
$count = 0;
foreach ( $res as $row ) {
- if ( ++ $count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional cats to be had. Stop here...
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional cats to be had. Stop here...
$this->setContinueEnumParameter( 'continue', $row->cat_title );
break;
}
* @ingroup API
*/
class ApiQueryAllImages extends ApiQueryGeneratorBase {
-
protected $mRepo;
public function __construct( $query, $moduleName ) {
*/
public function executeGenerator( $resultPageSet ) {
if ( $resultPageSet->isResolvingRedirects() ) {
- $this->dieUsage( 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator', 'params' );
+ $this->dieUsage(
+ 'Use "gaifilterredir=nonredirects" option instead of "redirects" ' .
+ 'when using allimages as a generator',
+ 'params'
+ );
}
$this->run( $resultPageSet );
private function run( $resultPageSet = null ) {
$repo = $this->mRepo;
if ( !$repo instanceof LocalRepo ) {
- $this->dieUsage( 'Local file repository does not support querying all images', 'unsupportedrepo' );
+ $this->dieUsage(
+ 'Local file repository does not support querying all images',
+ 'unsupportedrepo'
+ );
}
$prefix = $this->getModulePrefix();
$disallowed = array( 'start', 'end', 'user' );
foreach ( $disallowed as $pname ) {
if ( isset( $params[$pname] ) ) {
- $this->dieUsage( "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=timestamp", 'badparams' );
+ $this->dieUsage(
+ "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=timestamp",
+ 'badparams'
+ );
}
}
if ( $params['filterbots'] != 'all' ) {
- $this->dieUsage( "Parameter '{$prefix}filterbots' can only be used with {$prefix}sort=timestamp", 'badparams' );
+ $this->dieUsage(
+ "Parameter '{$prefix}filterbots' can only be used with {$prefix}sort=timestamp",
+ 'badparams'
+ );
}
// Pagination
$this->addWhereRange( 'img_name', ( $ascendingOrder ? 'newer' : 'older' ), $from, $to );
if ( isset( $params['prefix'] ) ) {
- $this->addWhere( 'img_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ $this->addWhere( 'img_name' .
+ $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
}
} else {
// Check mutually exclusive params
$disallowed = array( 'from', 'to', 'prefix' );
foreach ( $disallowed as $pname ) {
if ( isset( $params[$pname] ) ) {
- $this->dieUsage( "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=name", 'badparams' );
+ $this->dieUsage(
+ "Parameter '{$prefix}{$pname}' can only be used with {$prefix}sort=name",
+ 'badparams'
+ );
}
}
if ( !is_null( $params['user'] ) && $params['filterbots'] != 'all' ) {
- // Since filterbots checks if each user has the bot right, it doesn't make sense to use it with user
- $this->dieUsage( "Parameters '{$prefix}user' and '{$prefix}filterbots' cannot be used together", 'badparams' );
+ // Since filterbots checks if each user has the bot right, it
+ // doesn't make sense to use it with user
+ $this->dieUsage(
+ "Parameters '{$prefix}user' and '{$prefix}filterbots' cannot be used together",
+ 'badparams'
+ );
}
// Pagination
- $this->addTimestampWhereRange( 'img_timestamp', ( $ascendingOrder ? 'newer' : 'older' ), $params['start'], $params['end'] );
+ $this->addTimestampWhereRange(
+ 'img_timestamp',
+ $ascendingOrder ? 'newer' : 'older',
+ $params['start'],
+ $params['end']
+ );
// Image filters
if ( !is_null( $params['user'] ) ) {
'ug_user = img_user'
)
) ) );
- $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL': 'NOT NULL' );
+ $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL' : 'NOT NULL' );
$this->addWhere( "ug_group IS $groupCond" );
}
}
$count = 0;
$result = $this->getResult();
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
if ( $params['sort'] == 'name' ) {
$this->setContinueEnumParameter( 'continue', $row->img_name );
} else {
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'sort' => 'Property to sort by',
'dir' => 'The direction in which to list',
'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
- 'prefix' => "Search for all image titles that begin with this value. Can only be used with {$p}sort=name",
+ 'prefix' => "Search for all image titles that begin with this " .
+ "value. Can only be used with {$p}sort=name",
'minsize' => 'Limit to images with at least this many bytes',
'maxsize' => 'Limit to images with at most this many bytes',
'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
- 'user' => "Only return files uploaded by this user. Can only be used with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
- 'filterbots' => "How to filter files uploaded by bots. Can only be used with {$p}sort=timestamp. Cannot be used together with {$p}user",
+ 'user' => "Only return files uploaded by this user. Can only be used " .
+ "with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
+ 'filterbots' => "How to filter files uploaded by bots. Can only be " .
+ "used with {$p}sort=timestamp. Cannot be used together with {$p}user",
'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
'limit' => 'How many images in total to return',
);
public function getPossibleErrors() {
$p = $this->getModulePrefix();
+
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'params', 'info' => 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator' ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}start' can only be used with {$p}sort=timestamp" ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}end' can only be used with {$p}sort=timestamp" ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}user' can only be used with {$p}sort=timestamp" ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}filterbots' can only be used with {$p}sort=timestamp" ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}from' can only be used with {$p}sort=name" ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}to' can only be used with {$p}sort=name" ),
- array( 'code' => 'badparams', 'info' => "Parameter'{$p}prefix' can only be used with {$p}sort=name" ),
- array( 'code' => 'badparams', 'info' => "Parameters '{$p}user' and '{$p}filterbots' cannot be used together" ),
- array( 'code' => 'unsupportedrepo', 'info' => 'Local file repository does not support querying all images' ),
+ array(
+ 'code' => 'params',
+ 'info' => 'Use "gaifilterredir=nonredirects" option instead ' .
+ 'of "redirects" when using allimages as a generator'
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}start' can only be used with {$p}sort=timestamp"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}end' can only be used with {$p}sort=timestamp"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}user' can only be used with {$p}sort=timestamp"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}filterbots' can only be used with {$p}sort=timestamp"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}from' can only be used with {$p}sort=name"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}to' can only be used with {$p}sort=name"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameter'{$p}prefix' can only be used with {$p}sort=name"
+ ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "Parameters '{$p}user' and '{$p}filterbots' cannot be used together"
+ ),
+ array(
+ 'code' => 'unsupportedrepo',
+ 'info' => 'Local file repository does not support querying all images' ),
array( 'code' => 'mimesearchdisabled', 'info' => 'MIME search disabled in Miser Mode' ),
array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
- array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
+ array(
+ 'code' => 'invalidsha1base36hash',
+ 'info' => 'The SHA1Base36 hash provided is not valid'
+ ),
) );
}
'Simple Use',
'Show a list of files starting at the letter "B"',
),
- 'api.php?action=query&list=allimages&aiprop=user|timestamp|url&aisort=timestamp&aidir=older' => array(
+ 'api.php?action=query&list=allimages&aiprop=user|timestamp|url&' .
+ 'aisort=timestamp&aidir=older' => array(
'Simple Use',
'Show a list of recently uploaded files similar to Special:NewFiles',
),
- 'api.php?action=query&generator=allimages&gailimit=4&gaifrom=T&prop=imageinfo' => array(
+ 'api.php?action=query&generator=allimages&gailimit=4&' .
+ 'gaifrom=T&prop=imageinfo' => array(
'Using as Generator',
'Show info about 4 files starting at the letter "T"',
),
$this->dfltNamespace = NS_TEMPLATE;
$this->hasNamespace = true;
$this->indexTag = 't';
- $this->description = 'List all transclusions (pages embedded using {{x}}), including non-existing';
+ $this->description =
+ 'List all transclusions (pages embedded using {{x}}), including non-existing';
$this->descriptionWhat = 'transclusion';
$this->descriptionTargets = 'transcluded titles';
$this->descriptionLinking = 'transcluding';
if ( $params['unique'] ) {
if ( $fld_ids ) {
$this->dieUsage(
- "{$this->getModuleName()} cannot return corresponding page ids in unique {$this->descriptionWhat}s mode",
- 'params' );
+ "{$this->getModuleName()} cannot return corresponding page " .
+ "ids in unique {$this->descriptionWhat}s mode",
+ 'params'
+ );
}
$this->addOption( 'DISTINCT' );
}
}
// 'continue' always overrides 'from'
- $from = ( $continue || is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+ $from = $continue || is_null( $params['from'] )
+ ? null
+ : $this->titlePartToKey( $params['from'] );
$to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
$this->addWhereRange( $pfx . $fieldTitle, 'newer', $from, $to );
if ( isset( $params['prefix'] ) ) {
- $this->addWhere( $pfx . $fieldTitle . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ $this->addWhere( $pfx . $fieldTitle .
+ $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
}
$this->addFields( array( 'pl_title' => $pfx . $fieldTitle ) );
$count = 0;
$result = $this->getResult();
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
if ( $params['unique'] ) {
$this->setContinueEnumParameter( 'continue', $row->pl_title );
} else {
if ( !$this->hasNamespace ) {
unset( $allowedParams['namespace'] );
}
+
return $allowedParams;
}
if ( !$this->hasNamespace ) {
unset( $paramDescription['namespace'] );
}
+
return $paramDescription;
}
public function getPossibleErrors() {
$m = $this->getModuleName();
$what = $this->descriptionWhat;
+
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'params', 'info' => "{$m} cannot return corresponding page ids in unique {$what}s mode" ),
+ array(
+ 'code' => 'params',
+ 'info' => "{$m} cannot return corresponding page ids in unique {$what}s mode"
+ ),
) );
}
$name = $this->getModuleName();
$what = $this->descriptionWhat;
$targets = $this->descriptionTargets;
+
return array(
"api.php?action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
- => "List $targets with page ids they are from, including missing ones. Start at B",
+ => "List $targets with page ids they are from, including missing ones. Start at B",
"api.php?action=query&list={$name}&{$p}unique=&{$p}from=B"
- => "List unique $targets",
+ => "List unique $targets",
"api.php?action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
- => "Gets all $targets, marking the missing ones",
+ => "Gets all $targets, marking the missing ones",
"api.php?action=query&generator={$name}&g{$p}from=B"
- => "Gets pages containing the {$what}s",
+ => "Gets pages containing the {$what}s",
);
}
public function getHelpUrls() {
$name = ucfirst( $this->getModuleName() );
+
return "https://www.mediawiki.org/wiki/API:{$name}";
}
}
'messages' => 'Which messages to output. "*" (default) means all messages',
'prop' => 'Which properties to get',
'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
- 'Will substitute magic words, handle templates etc.' ),
+ 'Will substitute magic words, handle templates etc.' ),
'nocontent' => 'If set, do not include the content of the messages in the output.',
'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
- "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
+ "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
),
'title' => 'Page name to use as context when parsing message (for enableparser option)',
'args' => 'Arguments to be substituted into message',
*/
public function executeGenerator( $resultPageSet ) {
if ( $resultPageSet->isResolvingRedirects() ) {
- $this->dieUsage( 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator', 'params' );
+ $this->dieUsage(
+ 'Use "gapfilterredir=nonredirects" option instead of "redirects" ' .
+ 'when using allpages as a generator',
+ 'params'
+ );
}
$this->run( $resultPageSet );
$this->addWhereRange( 'page_title', $dir, $from, $to );
if ( isset( $params['prefix'] ) ) {
- $this->addWhere( 'page_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ $this->addWhere( 'page_title' .
+ $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
}
if ( is_null( $resultPageSet ) ) {
}
$this->addOption( 'DISTINCT' );
-
} elseif ( isset( $params['prlevel'] ) ) {
$this->dieUsage( 'prlevel may not be used without prtype', 'params' );
}
$count = 0;
$result = $this->getResult();
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'continue', $row->page_title );
break;
}
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'from' => 'The page title to start enumerating from',
'continue' => 'When more results are available, use this to continue',
'maxsize' => 'Limit to pages with at most this many bytes',
'prtype' => 'Limit to protected pages only',
'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
- 'prfiltercascade' => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
+ 'prfiltercascade'
+ => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
'filterlanglinks' => array(
'Filter based on whether a page has langlinks',
'Note that this may not consider langlinks added by extensions.',
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'params', 'info' => 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator' ),
+ array(
+ 'code' => 'params',
+ 'info' => 'Use "gapfilterredir=nonredirects" option instead of ' .
+ '"redirects" when using allpages as a generator'
+ ),
array( 'code' => 'params', 'info' => 'prlevel may not be used without prtype' ),
) );
}
'Using as Generator',
'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 beginning at "Re"',
- )
+ '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 beginning at "Re"' )
);
}
$fld_registration = isset( $prop['registration'] );
$fld_implicitgroups = isset( $prop['implicitgroups'] );
} else {
- $fld_blockinfo = $fld_editcount = $fld_groups = $fld_registration = $fld_rights = $fld_implicitgroups = false;
+ $fld_blockinfo = $fld_editcount = $fld_groups = $fld_registration =
+ $fld_rights = $fld_implicitgroups = false;
}
$limit = $params['limit'];
// no group with the given right(s) exists, no need for a query
if ( !count( $groups ) ) {
$this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), '' );
+
return;
}
// Filter only users that belong to a given group
$this->addTables( 'user_groups', 'ug1' );
$this->addJoinConds( array( 'ug1' => array( 'INNER JOIN', array( 'ug1.ug_user=user_id',
- 'ug1.ug_group' => $params['group'] ) ) ) );
+ 'ug1.ug_group' => $params['group'] ) ) ) );
}
if ( !is_null( $params['excludegroup'] ) && count( $params['excludegroup'] ) ) {
if ( count( $params['excludegroup'] ) == 1 ) {
$exclude = array( 'ug1.ug_group' => $params['excludegroup'][0] );
} else {
- $exclude = array( $db->makeList( array( 'ug1.ug_group' => $params['excludegroup'] ), LIST_OR ) );
+ $exclude = array( $db->makeList(
+ array( 'ug1.ug_group' => $params['excludegroup'] ),
+ LIST_OR
+ ) );
}
$this->addJoinConds( array( 'ug1' => array( 'LEFT OUTER JOIN',
array_merge( array( 'ug1.ug_user=user_id' ), $exclude )
- )
- ) );
+ ) ) );
$this->addWhere( 'ug1.ug_user IS NULL' );
}
$lastUser = false;
$result = $this->getResult();
- //
- // This loop keeps track of the last entry.
- // For each new row, if the new row is for different user then the last, the last entry is added to results.
- // Otherwise, the group of the new row is appended to the last entry.
- // The setContinue... is more complex because of this, and takes into account the higher sql limit
- // to make sure all rows that belong to the same user are received.
+ // This loop keeps track of the last entry. For each new row, if the
+ // new row is for different user then the last, the last entry is added
+ // to results. Otherwise, the group of the new row is appended to the
+ // last entry. The setContinue... is more complex because of this, and
+ // takes into account the higher sql limit to make sure all rows that
+ // belong to the same user are received.
foreach ( $res as $row ) {
$count++;
// Save the last pass's user data
if ( is_array( $lastUserData ) ) {
$fit = $result->addValue( array( 'query', $this->getModuleName() ),
- null, $lastUserData );
+ null, $lastUserData );
$lastUserData = null;
}
if ( $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'from', $row->user_name );
break;
}
}
if ( $sqlLimit == $count ) {
- // BUG! database contains group name that User::getAllGroups() does not return
- // TODO: should handle this more gracefully
- ApiBase::dieDebug( __METHOD__,
- 'MediaWiki configuration error: the database contains more user groups than known to User::getAllGroups() function' );
+ // @todo BUG! database contains group name that User::getAllGroups() does not return
+ // Should handle this more gracefully
+ ApiBase::dieDebug(
+ __METHOD__,
+ 'MediaWiki configuration error: The database contains more ' .
+ 'user groups than known to User::getAllGroups() function'
+ );
}
$lastUserObj = User::newFromId( $row->user_id );
public function getAllowedParams() {
$userGroups = User::getAllGroups();
+
return array(
'from' => null,
'to' => null,
public function getParamDescription() {
global $wgActiveUserDays;
+
return array(
'from' => 'The user name to start enumerating from',
'to' => 'The user name to stop enumerating at',
'dir' => 'Direction to sort in',
'group' => 'Limit users to given group name(s)',
'excludegroup' => 'Exclude users in given group name(s)',
- 'rights' => 'Limit users to given right(s) (does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
+ 'rights' => 'Limit users to given right(s) (does not include rights ' .
+ 'granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
'prop' => array(
'What pieces of information to include.',
' blockinfo - Adds the information about a current block on the user',
- ' groups - Lists groups that the user is in. This uses more server resources and may return fewer results than the limit',
+ ' groups - Lists groups that the user is in. This uses ' .
+ 'more server resources and may return fewer results than the limit',
' implicitgroups - Lists all the groups the user is automatically in',
' rights - Lists rights that the user has',
' editcount - Adds the edit count of the user',
' registration - Adds the timestamp of when the user registered if available (may be blank)',
- ),
+ ),
'limit' => 'How many total user names to return',
'witheditsonly' => 'Only list users who have made edits',
'activeusers' => "Only list users active in the last {$wgActiveUserDays} days(s)"
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'group-excludegroup', 'info' => 'group and excludegroup cannot be used together' ),
+ array(
+ 'code' => 'group-excludegroup',
+ 'info' => 'group and excludegroup cannot be used together'
+ ),
) );
}
if ( $this->params['filterredir'] == 'redirects' ) {
$this->addWhereFld( 'page_is_redirect', 1 );
} elseif ( $this->params['filterredir'] == 'nonredirects' && !$this->redirect ) {
- // bug 22245 - Check for !redirect, as filtering nonredirects, when getting what links to them is contradictory
+ // bug 22245 - Check for !redirect, as filtering nonredirects, when
+ // getting what links to them is contradictory
$this->addWhereFld( 'page_is_redirect', 0 );
}
$redirNs = $t->getNamespace();
$redirDBkey = $t->getDBkey();
$titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $redirDBkey ) .
- ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
+ ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
$allRedirNs[] = $redirNs;
$allRedirDBkey[] = $redirDBkey;
}
$from = $this->redirID;
if ( $this->hasNS ) {
$this->addWhere( "{$this->bl_ns} $op $ns OR " .
- "({$this->bl_ns} = $ns AND " .
- "({$this->bl_title} $op $title OR " .
- "({$this->bl_title} = $title AND " .
- "{$this->bl_from} $op= $from)))" );
+ "({$this->bl_ns} = $ns AND " .
+ "({$this->bl_title} $op $title OR " .
+ "({$this->bl_title} = $title AND " .
+ "{$this->bl_from} $op= $from)))" );
} else {
$this->addWhere( "{$this->bl_title} $op $title OR " .
- "({$this->bl_title} = $title AND " .
- "{$this->bl_from} $op= $from)" );
+ "({$this->bl_title} = $title AND " .
+ "{$this->bl_from} $op= $from)" );
}
}
if ( $this->params['filterredir'] == 'redirects' ) {
$count = 0;
foreach ( $res as $row ) {
- if ( ++ $count > $this->params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $this->params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
// Continue string preserved in case the redirect query doesn't pass the limit
$this->continueStr = $this->getContinueStr( $row->page_id );
break;
$count = 0;
foreach ( $res as $row ) {
if ( ++$count > $this->params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
// We need to keep the parent page of this redir in
if ( $this->hasNS ) {
$parentID = $this->pageMap[$row->{$this->bl_ns}][$row->{$this->bl_title}];
$parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
// Put all the results in an array first
$this->resultArr[$parentID]['redirlinks'][] = $a;
- $this->getResult()->setIndexedTagName( $this->resultArr[$parentID]['redirlinks'], $this->bl_code );
+ $this->getResult()->setIndexedTagName(
+ $this->resultArr[$parentID]['redirlinks'],
+ $this->bl_code
+ );
}
protected function processContinue() {
// only image titles are allowed for the root in imageinfo mode
if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
- $this->dieUsage( "The title for {$this->getModuleName()} query must be an image", 'bad_image_title' );
+ $this->dieUsage(
+ "The title for {$this->getModuleName()} query must be an image",
+ 'bad_image_title'
+ );
}
}
return;
}
$this->redirID = $redirID;
-
}
protected function getContinueStr( $lastPageID ) {
return $retval;
}
$retval['redirect'] = false;
+
return $retval;
}
);
if ( $this->getModuleName() != 'embeddedin' ) {
return array_merge( $retval, array(
- 'redirect' => 'If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.',
- 'filterredir' => "How to filter for redirects. If set to nonredirects when {$this->bl_code}redirect is enabled, this is only applied to the second level",
- 'limit' => "How many total pages to return. If {$this->bl_code}redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results)."
+ 'redirect' => 'If linking page is a redirect, find all pages ' .
+ 'that link to that redirect as well. Maximum limit is halved.',
+ 'filterredir' => 'How to filter for redirects. If set to ' .
+ "nonredirects when {$this->bl_code}redirect is enabled, " .
+ 'this is only applied to the second level',
+ 'limit' => 'How many total pages to return. If ' .
+ "{$this->bl_code}redirect is enabled, limit applies to each " .
+ 'level separately (which means you may get up to 2 * limit results).'
) );
}
+
return array_merge( $retval, array(
'filterredir' => 'How to filter for redirects',
'limit' => 'How many total pages to return'
return array_merge( parent::getPossibleErrors(),
$this->getTitleOrPageIdErrorMessage(),
array(
- array( 'code' => 'bad_image_title', 'info' => "The title for {$this->getModuleName()} query must be an image" ),
+ array(
+ 'code' => 'bad_image_title',
+ 'info' => "The title for {$this->getModuleName()} query must be an image"
+ ),
)
);
}
protected function addFieldsIf( $value, $condition ) {
if ( $condition ) {
$this->addFields( $value );
+
return true;
}
+
return false;
}
protected function addWhereIf( $value, $condition ) {
if ( $condition ) {
$this->addWhere( $value );
+
return true;
}
+
return false;
}
if ( $sort ) {
$order = $field . ( $isDirNewer ? '' : ' DESC' );
// Append ORDER BY
- $optionOrderBy = isset( $this->options['ORDER BY'] ) ? (array)$this->options['ORDER BY'] : array();
+ $optionOrderBy = isset( $this->options['ORDER BY'] )
+ ? (array)$this->options['ORDER BY']
+ : array();
$optionOrderBy[] = $order;
$this->addOption( 'ORDER BY', $optionOrderBy );
}
* @param string $method Function the query should be attributed to.
* You should usually use __METHOD__ here
* @param array $extraQuery Query data to add but not store in the object
- * Format is array( 'tables' => ..., 'fields' => ..., 'where' => ..., 'options' => ..., 'join_conds' => ... )
+ * Format is array(
+ * 'tables' => ...,
+ * 'fields' => ...,
+ * 'where' => ...,
+ * 'options' => ...,
+ * 'join_conds' => ...
+ * )
* @return ResultWrapper
*/
protected function select( $method, $extraQuery = array() ) {
- $tables = array_merge( $this->tables, isset( $extraQuery['tables'] ) ? (array)$extraQuery['tables'] : array() );
- $fields = array_merge( $this->fields, isset( $extraQuery['fields'] ) ? (array)$extraQuery['fields'] : array() );
- $where = array_merge( $this->where, isset( $extraQuery['where'] ) ? (array)$extraQuery['where'] : array() );
- $options = array_merge( $this->options, isset( $extraQuery['options'] ) ? (array)$extraQuery['options'] : array() );
- $join_conds = array_merge( $this->join_conds, isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : array() );
+ $tables = array_merge(
+ $this->tables,
+ isset( $extraQuery['tables'] ) ? (array)$extraQuery['tables'] : array()
+ );
+ $fields = array_merge(
+ $this->fields,
+ isset( $extraQuery['fields'] ) ? (array)$extraQuery['fields'] : array()
+ );
+ $where = array_merge(
+ $this->where,
+ isset( $extraQuery['where'] ) ? (array)$extraQuery['where'] : array()
+ );
+ $options = array_merge(
+ $this->options,
+ isset( $extraQuery['options'] ) ? (array)$extraQuery['options'] : array()
+ );
+ $join_conds = array_merge(
+ $this->join_conds,
+ isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : array()
+ );
// getDB has its own profileDBIn/Out calls
$db = $this->getDB();
protected function checkRowCount() {
$db = $this->getDB();
$this->profileDBIn();
- $rowcount = $db->estimateRowCount( $this->tables, $this->fields, $this->where, __METHOD__, $this->options );
+ $rowcount = $db->estimateRowCount(
+ $this->tables,
+ $this->fields,
+ $this->where,
+ __METHOD__,
+ $this->options
+ );
$this->profileDBOut();
global $wgAPIMaxDBRows;
if ( $rowcount > $wgAPIMaxDBRows ) {
return false;
}
+
return true;
}
protected function addPageSubItems( $pageId, $data ) {
$result = $this->getResult();
$result->setIndexedTagName( $data, $this->getModulePrefix() );
+
return $result->addValue( array( 'query', 'pages', intval( $pageId ) ),
$this->getModuleName(),
$data );
return false;
}
$result->setIndexedTagName_internal( array( 'query', 'pages', $pageId,
- $this->getModuleName() ), $elemname );
+ $this->getModuleName() ), $elemname );
+
return true;
}
if ( is_null( $this->mDb ) ) {
$this->mDb = $this->getQuery()->getDB();
}
+
return $this->mDb;
}
if ( !$t ) {
$this->dieUsageMsg( array( 'invalidtitle', $title ) );
}
+
return $t->getPrefixedDBkey();
}
if ( !$t ) {
$this->dieUsageMsg( array( 'invalidtitle', $key ) );
}
+
return $t->getPrefixedText();
}
* @return string Title part with underscores
*/
public function titlePartToKey( $titlePart ) {
- return substr( $this->titleToKey( $titlePart . 'x' ), 0, - 1 );
+ return substr( $this->titleToKey( $titlePart . 'x' ), 0, -1 );
}
/**
* @return string Key part with underscores
*/
public function keyPartToTitle( $keyPart ) {
- return substr( $this->keyToTitle( $keyPart . 'x' ), 0, - 1 );
+ return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 );
}
/**
*/
public function getDirectionDescription( $p = '', $extraDirText = '' ) {
return array(
- "In which direction to enumerate{$extraDirText}",
- " newer - List oldest first. Note: {$p}start has to be before {$p}end.",
- " older - List newest first (default). Note: {$p}start has to be later than {$p}end.",
- );
+ "In which direction to enumerate{$extraDirText}",
+ " newer - List oldest first. Note: {$p}start has to be before {$p}end.",
+ " older - List newest first (default). Note: {$p}start has to be later than {$p}end.",
+ );
}
/**
}
$likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
+
return 'el_index ' . $db->buildLike( $likeQuery );
} elseif ( !is_null( $protocol ) ) {
return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
* @return void
*/
public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
- $userCanViewHiddenUsers = $this->getUser()->isAllowed( 'hideuser' );
-
- if ( $showBlockInfo || !$userCanViewHiddenUsers ) {
- $this->addTables( 'ipblocks' );
- $this->addJoinConds( array(
- 'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
- ) );
+ $this->addTables( 'ipblocks' );
+ $this->addJoinConds( array(
+ 'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
+ ) );
- $this->addFields( 'ipb_deleted' );
+ $this->addFields( 'ipb_deleted' );
- if ( $showBlockInfo ) {
- $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
- }
+ if ( $showBlockInfo ) {
+ $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
+ }
- // Don't show hidden names
- if ( !$userCanViewHiddenUsers ) {
- $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
- }
+ // Don't show hidden names
+ if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+ $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
}
}
array( 'invalidtitle', 'title' ),
array( 'invalidtitle', 'key' ),
) );
+
return $errors;
}
}
if ( $this->mGeneratorPageSet !== null ) {
return $this->mGeneratorPageSet;
}
+
return parent::getPageSet();
}
$this->addFieldsIf( 'ipb_reason', $fld_reason );
$this->addFieldsIf( array( 'ipb_range_start', 'ipb_range_end' ), $fld_range );
$this->addFieldsIf( array( 'ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock',
- 'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk' ),
- $fld_flags );
+ 'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk' ),
+ $fld_flags );
$this->addOption( 'LIMIT', $params['limit'] + 1 );
- $this->addTimestampWhereRange( 'ipb_timestamp', $params['dir'], $params['start'], $params['end'] );
+ $this->addTimestampWhereRange(
+ 'ipb_timestamp',
+ $params['dir'],
+ $params['start'],
+ $params['end']
+ );
$db = $this->getDB();
# Check range validity, if it's a CIDR
list( $ip, $range ) = IP::parseCIDR( $params['ip'] );
if ( $ip !== false && $range !== false && $range < $cidrLimit ) {
- $this->dieUsage( "$type CIDR ranges broader than /$cidrLimit are not accepted", 'cidrtoobroad' );
+ $this->dieUsage(
+ "$type CIDR ranges broader than /$cidrLimit are not accepted",
+ 'cidrtoobroad'
+ );
}
# Let IP::parseRange handle calculating $upper, instead of duplicating the logic here.
/* Check for conflicting parameters. */
if ( ( isset( $show['account'] ) && isset( $show['!account'] ) )
- || ( isset( $show['ip'] ) && isset( $show['!ip'] ) )
- || ( isset( $show['range'] ) && isset( $show['!range'] ) )
- || ( isset( $show['temp'] ) && isset( $show['!temp'] ) )
+ || ( isset( $show['ip'] ) && isset( $show['!ip'] ) )
+ || ( isset( $show['range'] ) && isset( $show['!range'] ) )
+ || ( isset( $show['temp'] ) && isset( $show['!temp'] ) )
) {
$this->dieUsageMsg( 'show' );
}
$this->addWhereIf( 'ipb_user != 0', isset( $show['account'] ) );
$this->addWhereIf( 'ipb_user != 0 OR ipb_range_end > ipb_range_start', isset( $show['!ip'] ) );
$this->addWhereIf( 'ipb_user = 0 AND ipb_range_end = ipb_range_start', isset( $show['ip'] ) );
- $this->addWhereIf( 'ipb_expiry = ' . $db->addQuotes( $db->getInfinity() ), isset( $show['!temp'] ) );
- $this->addWhereIf( 'ipb_expiry != ' . $db->addQuotes( $db->getInfinity() ), isset( $show['temp'] ) );
+ $this->addWhereIf( 'ipb_expiry = ' .
+ $db->addQuotes( $db->getInfinity() ), isset( $show['!temp'] ) );
+ $this->addWhereIf( 'ipb_expiry != ' .
+ $db->addQuotes( $db->getInfinity() ), isset( $show['temp'] ) );
$this->addWhereIf( 'ipb_range_end = ipb_range_start', isset( $show['!range'] ) );
$this->addWhereIf( 'ipb_range_end > ipb_range_start', isset( $show['range'] ) );
}
public function getParamDescription() {
global $wgBlockCIDRLimit;
$p = $this->getModulePrefix();
+
return array(
'start' => 'The timestamp to start enumerating from',
'end' => 'The timestamp to stop enumerating at',
public function getPossibleErrors() {
global $wgBlockCIDRLimit;
+
return array_merge( parent::getPossibleErrors(),
$this->getRequireOnlyOneParameterErrorMessages( array( 'users', 'ip' ) ),
array(
if ( isset( $show['hidden'] ) && isset( $show['!hidden'] ) ) {
$this->dieUsageMsg( 'show' );
}
- if ( isset( $show['hidden'] ) || isset( $show['!hidden'] ) || isset( $prop['hidden'] ) )
- {
+ if ( isset( $show['hidden'] ) || isset( $show['!hidden'] ) || isset( $prop['hidden'] ) ) {
$this->addOption( 'STRAIGHT_JOIN' );
$this->addTables( array( 'page', 'page_props' ) );
$this->addFieldsIf( 'pp_propname', isset( $prop['hidden'] ) );
$this->addOption( 'ORDER BY', 'cl_to' . $sort );
} else {
$this->addOption( 'ORDER BY', array(
- 'cl_from' . $sort,
- 'cl_to' . $sort
- ));
+ 'cl_from' . $sort,
+ 'cl_to' . $sort
+ ) );
}
$res = $this->select( __METHOD__ );
return array(
'prop' => array(
'Which additional properties to get for each category',
- ' sortkey - Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category',
+ ' sortkey - Adds the sortkey (hexadecimal string) and sortkey prefix',
+ ' (human-readable part) for the category',
' timestamp - Adds timestamp of when the category was added',
' hidden - Tags categories that are hidden with __HIDDENCAT__',
),
'limit' => 'How many categories to return',
'show' => 'Which kind of categories to show',
'continue' => 'When more results are available, use this to continue',
- 'categories' => 'Only list these categories. Useful for checking whether a certain page is in a certain category',
+ 'categories' => 'Only list these categories. Useful for checking ' .
+ 'whether a certain page is in a certain category',
'dir' => 'The direction in which to list',
);
}
public function getExamples() {
return array(
- 'api.php?action=query&prop=categories&titles=Albert%20Einstein' => 'Get a list of categories [[Albert Einstein]] belongs to',
- 'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info' => 'Get information about all categories used in the [[Albert Einstein]]',
+ 'api.php?action=query&prop=categories&titles=Albert%20Einstein'
+ => 'Get a list of categories [[Albert Einstein]] belongs to',
+ 'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+ => 'Get information about all categories used in the [[Albert Einstein]]',
);
}
$categories = $alltitles[NS_CATEGORY];
$titles = $this->getPageSet()->getGoodTitles() +
- $this->getPageSet()->getMissingTitles();
+ $this->getPageSet()->getMissingTitles();
$cattitles = array();
foreach ( $categories as $c ) {
/** @var $t Title */
'pp_propname' => 'hiddencat' ) ),
) );
- $this->addFields( array( 'cat_title', 'cat_pages', 'cat_subcats', 'cat_files', 'cat_hidden' => 'pp_propname' ) );
+ $this->addFields( array(
+ 'cat_title',
+ 'cat_pages',
+ 'cat_subcats',
+ 'cat_files',
+ 'cat_hidden' => 'pp_propname'
+ ) );
$this->addWhere( array( 'cat_title' => $cattitles ) );
if ( !is_null( $params['continue'] ) ) {
$result = $this->getResult();
$count = 0;
foreach ( $rows as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- // TODO: Security issue - if the user has no right to view next title, it will still be shown
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // @todo Security issue - if the user has no right to view next
+ // title, it will still be shown
if ( $params['sort'] == 'timestamp' ) {
$this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->cl_timestamp ) );
} else {
$vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->cl_timestamp );
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ),
- null, $vals );
+ null, $vals );
if ( !$fit ) {
if ( $params['sort'] == 'timestamp' ) {
$this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->cl_timestamp ) );
global $wgMiserMode;
$p = $this->getModulePrefix();
$desc = array(
- 'title' => "Which category to enumerate (required). Must include Category: prefix. Cannot be used together with {$p}pageid",
+ 'title' => "Which category to enumerate (required). Must include ' .
+ 'Category: prefix. Cannot be used together with {$p}pageid",
'pageid' => "Page ID of the category to enumerate. Cannot be used together with {$p}title",
'prop' => array(
'What pieces of information to include',
' ids - Adds the page ID',
' title - Adds the title and namespace ID of the page',
' sortkey - Adds the sortkey used for sorting in the category (hexadecimal string)',
- ' sortkeyprefix - Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey)',
+ ' sortkeyprefix - Adds the sortkey prefix used for sorting in the ' .
+ 'category (human-readable part of the sortkey)',
' type - Adds the type that the page has been categorised as (page, subcat or file)',
' timestamp - Adds the timestamp of when the page was included',
),
'dir' => 'In which direction to sort',
'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
- 'startsortkey' => "Sortkey to start listing from. Must be given in binary format. Can only be used with {$p}sort=sortkey",
- 'endsortkey' => "Sortkey to end listing at. Must be given in binary format. Can only be used with {$p}sort=sortkey",
- 'startsortkeyprefix' => "Sortkey prefix to start listing from. Can only be used with {$p}sort=sortkey. Overrides {$p}startsortkey",
- 'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with {$p}sort=sortkey. Overrides {$p}endsortkey",
+ 'startsortkey' => "Sortkey to start listing from. Must be given in ' .
+ 'binary format. Can only be used with {$p}sort=sortkey",
+ 'endsortkey' => "Sortkey to end listing at. Must be given in binary ' .
+ 'format. Can only be used with {$p}sort=sortkey",
+ 'startsortkeyprefix' => "Sortkey prefix to start listing from. Can ' .
+ 'only be used with {$p}sort=sortkey. Overrides {$p}startsortkey",
+ 'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, ' .
+ 'if this value occurs it will not be included!). Can only be used with ' .
+ '{$p}sort=sortkey. Overrides {$p}endsortkey",
'continue' => 'For large categories, give the value returned from previous query',
'limit' => 'The maximum number of pages to return.',
);
"Note that you can use {$p}type=subcat or {$p}type=file instead of {$p}namespace=14 or 6.",
);
}
+
return $desc;
}
public function getExamples() {
return array(
- 'api.php?action=query&list=categorymembers&cmtitle=Category:Physics' => 'Get first 10 pages in [[Category:Physics]]',
- 'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info' => 'Get page info about first 10 pages in [[Category:Physics]]',
+ 'api.php?action=query&list=categorymembers&cmtitle=Category:Physics'
+ => 'Get first 10 pages in [[Category:Physics]]',
+ 'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+ => 'Get page info about first 10 pages in [[Category:Physics]]',
);
}
$user = $this->getUser();
// Before doing anything at all, let's check permissions
if ( !$user->isAllowed( 'deletedhistory' ) ) {
- $this->dieUsage( 'You don\'t have permission to view deleted revision information', 'permissiondenied' );
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted revision information',
+ 'permissiondenied'
+ );
}
$db = $this->getDB();
// This also means stricter restrictions
if ( !$user->isAllowed( 'undelete' ) ) {
- $this->dieUsage( 'You don\'t have permission to view deleted revision content', 'permissiondenied' );
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted revision content',
+ 'permissiondenied'
+ );
}
}
// Check limits
$this->addWhereRange( 'ar_title', $dir, $from, $to );
if ( isset( $params['prefix'] ) ) {
- $this->addWhere( 'ar_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ $this->addWhere( 'ar_title' .
+ $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
}
}
$ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
$op = ( $dir == 'newer' ? '>' : '<' );
$this->addWhere( "ar_namespace $op $ns OR " .
- "(ar_namespace = $ns AND " .
- "(ar_title $op $title OR " .
- "(ar_title = $title AND " .
- "ar_timestamp $op= $ts)))" );
+ "(ar_namespace = $ns AND " .
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "ar_timestamp $op= $ts)))" );
}
$this->addOption( 'LIMIT', $limit + 1 );
- $this->addOption( 'USE INDEX', array( 'archive' => ( $mode == 'user' ? 'usertext_timestamp' : 'name_title_timestamp' ) ) );
+ $this->addOption(
+ 'USE INDEX',
+ array( 'archive' => ( $mode == 'user' ? 'usertext_timestamp' : 'name_title_timestamp' ) )
+ );
if ( $mode == 'all' ) {
if ( $params['unique'] ) {
$this->addOption( 'GROUP BY', 'ar_title' );
$this->addOption( 'ORDER BY', array(
'ar_title' . $sort,
'ar_timestamp' . $sort
- ));
+ ) );
}
} else {
if ( $mode == 'revs' ) {
public function getDescription() {
$p = $this->getModulePrefix();
+
return array(
'List deleted revisions.',
'Operates in three modes:',
' 1) List deleted revisions for the given title(s), sorted by timestamp',
' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified)',
- " 3) List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, {$p}user not set)",
+ " 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
+ ' (no titles specified, {$p}user not set)",
'Certain parameters only apply to some modes and are ignored in others.',
'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3',
);
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revision information' ),
- array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together' ),
- array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted revision content' ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You don\'t have permission to view deleted revision information'
+ ),
+ array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together'
+ ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You don\'t have permission to view deleted revision content'
+ ),
array( 'code' => 'badparams', 'info' => "The 'from' parameter cannot be used in modes 1 or 2" ),
array( 'code' => 'badparams', 'info' => "The 'to' parameter cannot be used in modes 1 or 2" ),
- array( 'code' => 'badparams', 'info' => "The 'prefix' parameter cannot be used in modes 1 or 2" ),
+ array(
+ 'code' => 'badparams',
+ 'info' => "The 'prefix' parameter cannot be used in modes 1 or 2"
+ ),
array( 'code' => 'badparams', 'info' => "The 'start' parameter cannot be used in mode 3" ),
array( 'code' => 'badparams', 'info' => "The 'end' parameter cannot be used in mode 3" ),
) );
public function getExamples() {
return array(
- 'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&drprop=user|comment|content'
+ 'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+ 'drprop=user|comment|content'
=> 'List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)',
'api.php?action=query&list=deletedrevs&druser=Bob&drlimit=50'
=> 'List the last 50 deleted contributions by Bob (mode 2)',
$sha1s[$file->getName()] = $file->getSha1();
}
- // find all files with the hashes, result format is: array( hash => array( dup1, dup2 ), hash1 => ... )
+ // find all files with the hashes, result format is:
+ // array( hash => array( dup1, dup2 ), hash1 => ... )
$filesToFindBySha1s = array_unique( array_values( $sha1s ) );
if ( $params['localonly'] ) {
$filesBySha1s = RepoGroup::singleton()->getLocalRepo()->findBySha1s( $filesToFindBySha1s );
$result = $this->getResult();
$count = 0;
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'offset', $offset + $limit );
break;
}
if ( is_null( $resultPageSet ) ) {
$result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ),
- $this->getModulePrefix() );
+ $this->getModulePrefix() );
}
}
$protocols[] = substr( $p, 0, strpos( $p, ':' ) );
}
}
+
return $protocols;
}
"Protocol of the URL. If empty and {$p}query set, the protocol is http.",
"Leave both this and {$p}query empty to list all external links"
),
- 'query' => 'Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links',
+ 'query' => 'Search string without protocol. See [[Special:LinkSearch]]. ' .
+ 'Leave empty to list all external links',
'namespace' => 'The page namespace(s) to enumerate.',
'limit' => 'How many pages to return.',
'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'limit' => 'How many links to return',
'offset' => 'When more results are available, use this to continue',
"Protocol of the URL. If empty and {$p}query set, the protocol is http.",
"Leave both this and {$p}query empty to list all external links"
),
- 'query' => 'Search string without protocol. Useful for checking whether a certain page contains a certain external url',
+ 'query' => 'Search string without protocol. Useful for checking ' .
+ 'whether a certain page contains a certain external url',
'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
);
}
public function getExamples() {
return array(
- 'api.php?action=query&prop=extlinks&titles=Main%20Page' => 'Get a list of external links on the [[Main Page]]',
+ 'api.php?action=query&prop=extlinks&titles=Main%20Page'
+ => 'Get a list of external links on the [[Main Page]]',
);
}
$props = array_merge( $props, array_keys( $repo->getInfo() ) );
} );
- return array_values( array_unique( array_merge( $props, array_keys( $repoGroup->localRepo->getInfo() ) ) ) );
+ return array_values( array_unique( array_merge(
+ $props,
+ array_keys( $repoGroup->localRepo->getInfo() )
+ ) ) );
}
public function getParamDescription() {
- $p = $this->getModulePrefix();
return array(
'prop' => array(
'Which repository properties to get (there may be more available on some wikis):',
' apiurl - URL to the repository API - helpful for getting image info from the host.',
- ' name - The key of the repository - used in e.g. $wgForeignFileRepos and imageinfo return values.',
+ ' name - The key of the repository - used in e.g. ' .
+ '$wgForeignFileRepos and imageinfo return values.',
' displayname - The human-readable name of the repository wiki.',
' rooturl - Root URL for image paths.',
' local - Whether that repository is the local one or not.',
$user = $this->getUser();
// Before doing anything at all, let's check permissions
if ( !$user->isAllowed( 'deletedhistory' ) ) {
- $this->dieUsage( 'You don\'t have permission to view deleted file information', 'permissiondenied' );
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted file information',
+ 'permissiondenied'
+ );
}
$db = $this->getDB();
$to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
$this->addWhereRange( 'fa_name', $dir, $from, $to );
if ( isset( $params['prefix'] ) ) {
- $this->addWhere( 'fa_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ $this->addWhere( 'fa_name' .
+ $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
}
$sha1Set = isset( $params['sha1'] );
$result = $this->getResult();
foreach ( $res as $row ) {
if ( ++$count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'continue', $row->fa_name );
break;
}
}
if ( $fld_metadata ) {
$file['metadata'] = $row->fa_metadata
- ? ApiQueryImageInfo::processMetaData( unserialize( $row->fa_metadata ), $result )
- : null;
+ ? ApiQueryImageInfo::processMetaData( unserialize( $row->fa_metadata ), $result )
+ : null;
}
if ( $fld_bitdepth ) {
$file['bitdepth'] = $row->fa_bits;
' sha1 - Adds SHA-1 hash for the image',
' timestamp - Adds timestamp for the uploaded version',
' user - Adds user who uploaded the image version',
- ' size - Adds the size of the image in bytes and the height, width and page count (if applicable)',
+ ' size - Adds the size of the image in bytes and the height, ' .
+ 'width and page count (if applicable)',
' dimensions - Alias for size',
' description - Adds description the image version',
' parseddescription - Parse the description on the version',
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view deleted file information' ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You don\'t have permission to view deleted file information'
+ ),
array( 'code' => 'hashsearchdisabled', 'info' => 'Search by hash disabled in Miser Mode' ),
- array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
- array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
+ array( 'code' => 'invalidsha1hash', 'info' => 'The SHA-1 hash provided is not valid' ),
+ array(
+ 'code' => 'invalidsha1base36hash',
+ 'info' => 'The SHA1Base36 hash provided is not valid'
+ ),
) );
}
$this->addOption( 'ORDER BY', array(
'iwl_title' . $sort,
'iwl_from' . $sort
- ));
+ ) );
}
} else {
$this->addOption( 'ORDER BY', array(
'iwl_prefix' . $sort,
'iwl_title' . $sort,
'iwl_from' . $sort
- ));
+ ) );
}
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$count = 0;
$result = $this->getResult();
foreach ( $res as $row ) {
- if ( ++ $count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- // Continue string preserved in case the redirect query doesn't pass the limit
- $this->setContinueEnumParameter( 'continue', "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}" );
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // Continue string preserved in case the redirect query doesn't
+ // pass the limit
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}"
+ );
break;
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $entry );
if ( !$fit ) {
- $this->setContinueEnumParameter( 'continue', "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}" );
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_prefix}|{$row->iwl_title}|{$row->iwl_from}"
+ );
break;
}
}
$this->addOption( 'ORDER BY', 'iwl_from' . $sort );
} else {
$this->addOption( 'ORDER BY', array(
- 'iwl_from' . $sort,
- 'iwl_title' . $sort
- ));
+ 'iwl_from' . $sort,
+ 'iwl_title' . $sort
+ ) );
}
} else {
// Don't order by iwl_from if it's constant in the WHERE clause
$this->addOption( 'ORDER BY', 'iwl_prefix' . $sort );
} else {
$this->addOption( 'ORDER BY', array(
- 'iwl_from' . $sort,
- 'iwl_prefix' . $sort,
- 'iwl_title' . $sort
- ));
+ 'iwl_from' . $sort,
+ 'iwl_prefix' . $sort,
+ 'iwl_title' . $sort
+ ) );
}
}
if ( ++$count > $params['limit'] ) {
// We've reached the one extra which shows that
// there are additional pages to be had. Stop here...
- $this->setContinueEnumParameter( 'continue', "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}" );
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}"
+ );
break;
}
$entry = array( 'prefix' => $row->iwl_prefix );
ApiResult::setContent( $entry, $row->iwl_title );
$fit = $this->addPageSubItem( $row->iwl_from, $entry );
if ( !$fit ) {
- $this->setContinueEnumParameter( 'continue', "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}" );
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->iwl_from}|{$row->iwl_prefix}|{$row->iwl_title}"
+ );
break;
}
}
public function getExamples() {
return array(
- 'api.php?action=query&prop=iwlinks&titles=Main%20Page' => 'Get interwiki links from the [[Main Page]]',
+ 'api.php?action=query&prop=iwlinks&titles=Main%20Page'
+ => 'Get interwiki links from the [[Main Page]]',
);
}
private static $transformCount = 0;
public function __construct( $query, $moduleName, $prefix = 'ii' ) {
- // We allow a subclass to override the prefix, to create a related API module.
- // Some other parts of MediaWiki construct this with a null $prefix, which used to be ignored when this only took two arguments
+ // We allow a subclass to override the prefix, to create a related API
+ // module. Some other parts of MediaWiki construct this with a null
+ // $prefix, which used to be ignored when this only took two arguments
if ( is_null( $prefix ) ) {
$prefix = 'ii';
}
'version' => $params['metadataversion'],
'language' => $params['extmetadatalanguage'],
'multilang' => $params['extmetadatamultilang'],
+ 'extmetadatafilter' => $params['extmetadatafilter'],
);
$pageIds = $this->getPageSet()->getAllTitlesByNamespace();
/** @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...
+ // We've reached the extra one which shows that there are
+ // additional pages to be had. Stop here...
// Only set a query-continue if there was only one title
if ( count( $pageIds[NS_FILE] ) == 1 ) {
$this->setContinueEnumParameter( 'start',
if ( !$h ) {
$this->setWarning( 'Could not create thumbnail because ' .
$image->getName() . ' does not have an associated image handler' );
+
return $thumbParams;
}
// handlers.
$this->setWarning( "Could not parse {$p}urlparam for " . $image->getName()
. '. Using only width and height' );
+
return $thumbParams;
}
if ( isset( $paramList['width'] ) ) {
if ( intval( $paramList['width'] ) != intval( $thumbParams['width'] ) ) {
$this->setWarning( "Ignoring width value set in {$p}urlparam ({$paramList['width']}) "
- . "in favor of width value derived from {$p}urlwidth/{$p}urlheight ({$thumbParams['width']})" );
+ . "in favor of width value derived from {$p}urlwidth/{$p}urlheight "
+ . "({$thumbParams['width']})" );
}
}
* @param array $prop of properties to get (in the keys)
* @param $result ApiResult object
* @param array $thumbParams containing 'width' and 'height' items, or null
- * @param string|array $metadataOpts Options for metadata fetching.
+ * @param array|bool|string $metadataOpts Options for metadata fetching.
* This is an array consisting of the keys:
* 'version': The metadata version for the metadata option
* 'language': The language for extmetadata property
'version' => $metadataOpts ?: 'latest',
'language' => $wgContLang,
'multilang' => false,
+ 'extmetadatafilter' => array(),
);
}
$version = $metadataOpts['version'];
$uploadwarning = isset( $prop['uploadwarning'] );
if ( ( $url || $sha1 || $meta || $mime || $mediatype || $archive || $bitdepth )
- && $file->isDeleted( File::DELETED_FILE ) ) {
+ && $file->isDeleted( File::DELETED_FILE )
+ ) {
$vals['filehidden'] = '';
//Early return, tidier than indenting all following things one level
$format->setSingleLanguage( !$metadataOpts['multilang'] );
$format->getContext()->setLanguage( $metadataOpts['language'] );
$extmetaArray = $format->fetchExtendedMetadata( $file );
+ if ( $metadataOpts['extmetadatafilter'] ) {
+ $extmetaArray = array_intersect_key(
+ $extmetaArray, array_flip( $metadataOpts['extmetadatafilter'] )
+ );
+ }
$vals['extmetadata'] = $extmetaArray;
}
}
}
$result->setIndexedTagName( $retval, 'metadata' );
+
return $retval;
}
if ( $start === null ) {
$start = $img->getTimestamp();
}
+
return $img->getOriginalTitle()->getDBkey() . '|' . $start;
}
public function getAllowedParams() {
global $wgContLang;
+
return array(
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => 'boolean',
ApiBase::PARAM_DFLT => false,
),
+ 'extmetadatafilter' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
'urlparam' => array(
ApiBase::PARAM_DFLT => '',
ApiBase::PARAM_TYPE => 'string',
'comment' => ' comment - Comment on the version',
'parsedcomment' => ' parsedcomment - Parse the comment on the version',
'url' => ' url - Gives URL to the image and the description page',
- 'size' => ' size - Adds the size of the image in bytes and the height, width and page count (if applicable)',
- 'dimensions' => ' dimensions - Alias for size', // For backwards compatibility with Allimages
+ 'size' => ' size - Adds the size of the image in bytes ' .
+ 'and the height, width and page count (if applicable)',
+ 'dimensions' => ' dimensions - Alias for size', // B/C with Allimages
'sha1' => ' sha1 - Adds SHA-1 hash for the image',
'mime' => ' mime - Adds MIME type of the image',
'thumbmime' => ' thumbmime - Adds MIME type of the image thumbnail' .
' (requires url and param ' . $modulePrefix . 'urlwidth)',
'mediatype' => ' mediatype - Adds the media type of the image',
'metadata' => ' metadata - Lists Exif metadata for the version of the image',
- 'extmetadata' => ' extmetadata - Lists formatted metadata combined from multiple sources. Results are HTML formatted.',
- 'archivename' => ' archivename - Adds the file name of the archive version for non-latest versions',
+ 'extmetadata' => ' extmetadata - Lists formatted metadata combined ' .
+ 'from multiple sources. Results are HTML formatted.',
+ 'archivename' => ' archivename - Adds the file name of the archive ' .
+ 'version for non-latest versions',
'bitdepth' => ' bitdepth - Adds the bit depth of the version',
- 'uploadwarning' => ' uploadwarning - Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core',
+ 'uploadwarning' => ' uploadwarning - Used by the Special:Upload page to ' .
+ 'get information about an existing file. Not intended for use outside MediaWiki core',
);
}
*/
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'prop' => self::getPropertyDescriptions( array(), $p ),
- 'urlwidth' => array( "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
+ 'urlwidth' => array(
+ "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
'For performance reasons if this option is used, ' .
- 'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.' ),
+ 'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
+ ),
'urlheight' => "Similar to {$p}urlwidth.",
'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
"might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
'limit' => 'How many image revisions to return per image',
'start' => 'Timestamp to start listing from',
'end' => 'Timestamp to stop listing at',
- 'metadataversion' => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
- "Defaults to '1' for backwards compatibility" ),
- 'extmetadatalanguage' => array( 'What language to fetch extmetadata in. This affects both which',
- 'translation to fetch, if multiple are available, as well as how things',
- 'like numbers and various values are formatted.' ),
- 'extmetadatamultilang' => 'If translations for extmetadata property are available, fetch all of them.',
- 'continue' => 'If the query response includes a continue value, use it here to get another page of results',
+ 'metadataversion'
+ => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
+ "Defaults to '1' for backwards compatibility" ),
+ 'extmetadatalanguage' => array(
+ 'What language to fetch extmetadata in. This affects both which',
+ 'translation to fetch, if multiple are available, as well as how things',
+ 'like numbers and various values are formatted.'
+ ),
+ 'extmetadatamultilang'
+ =>'If translations for extmetadata property are available, fetch all of them.',
+ 'extmetadatafilter'
+ => "If specified and non-empty, only these keys will be returned for {$p}prop=extmetadata",
+ 'continue' => 'If the query response includes a continue value, ' .
+ 'use it here to get another page of results',
'localonly' => 'Look only for files in the local repository',
);
}
)
),
);
+
return array_diff_key( $props, array_flip( $filter ) );
}
public function getPossibleErrors() {
$p = $this->getModulePrefix();
+
return array_merge( parent::getPossibleErrors(), array(
array( 'code' => "{$p}urlwidth", 'info' => "{$p}urlheight cannot be used without {$p}urlwidth" ),
array( 'code' => 'urlparam', 'info' => "Invalid value for {$p}urlparam" ),
public function getExamples() {
return array(
'api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo',
- 'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&iiend=20071231235959&iiprop=timestamp|user|url',
+ 'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+ 'iiend=20071231235959&iiprop=timestamp|user|url',
);
}
$this->addOption( 'ORDER BY', 'il_to' . $sort );
} else {
$this->addOption( 'ORDER BY', array(
- 'il_from' . $sort,
- 'il_to' . $sort
- ));
+ 'il_from' . $sort,
+ 'il_to' . $sort
+ ) );
}
$this->addOption( 'LIMIT', $params['limit'] + 1 );
return array(
'limit' => 'How many images to return',
'continue' => 'When more results are available, use this to continue',
- 'images' => 'Only list these images. Useful for checking whether a certain page has a certain Image.',
+ 'images' => 'Only list these images. Useful for checking whether a ' .
+ 'certain page has a certain Image.',
'dir' => 'The direction in which to list',
);
}
public function getExamples() {
return array(
- 'api.php?action=query&prop=images&titles=Main%20Page' => 'Get a list of images used in the [[Main Page]]',
- 'api.php?action=query&generator=images&titles=Main%20Page&prop=info' => 'Get information about all images used in the [[Main Page]]',
+ 'api.php?action=query&prop=images&titles=Main%20Page'
+ => 'Get a list of images used in the [[Main Page]]',
+ 'api.php?action=query&generator=images&titles=Main%20Page&prop=info'
+ => 'Get information about all images used in the [[Main Page]]',
);
}
private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
$pageLatest, $pageLength;
- private $protections, $watched, $watchers, $notificationtimestamps, $talkids, $subjectids, $displaytitles;
+ private $protections, $watched, $watchers, $notificationtimestamps,
+ $talkids, $subjectids, $displaytitles;
private $showZeroWatchers = false;
private $tokenFunctions;
'watch' => array( 'ApiQueryInfo', 'getWatchToken' ),
);
wfRunHooks( 'APIQueryInfoTokens', array( &$this->tokenFunctions ) );
+
return $this->tokenFunctions;
}
- static $cachedTokens = array();
+ static protected $cachedTokens = array();
public static function resetTokenCache() {
ApiQueryInfo::$cachedTokens = array();
), $pageid, $pageInfo );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue',
- $title->getNamespace() . '|' .
- $title->getText() );
+ $title->getNamespace() . '|' .
+ $title->getText() );
break;
}
}
*/
private function extractPageInfo( $pageid, $title ) {
$pageInfo = array();
- $titleExists = $pageid > 0; //$title->exists() needs pageid, which is not set for all title objects
+ // $title->exists() needs pageid, which is not set for all title objects
+ $titleExists = $pageid > 0;
$ns = $title->getNamespace();
$dbkey = $title->getDBkey();
if ( $this->fld_notificationtimestamp ) {
$pageInfo['notificationtimestamp'] = '';
if ( isset( $this->notificationtimestamps[$ns][$dbkey] ) ) {
- $pageInfo['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
+ $pageInfo['notificationtimestamp'] =
+ wfTimestamp( TS_ISO_8601, $this->notificationtimestamps[$ns][$dbkey] );
}
}
$this->resetQueryParams();
$this->addTables( 'page_restrictions' );
$this->addFields( array( 'pr_page', 'pr_type', 'pr_level',
- 'pr_expiry', 'pr_cascade' ) );
+ 'pr_expiry', 'pr_cascade' ) );
$this->addWhereFld( 'pr_page', array_keys( $this->titles ) );
$res = $this->select( __METHOD__ );
$this->resetQueryParams();
$this->addTables( array( 'page_restrictions', 'page', 'templatelinks' ) );
$this->addFields( array( 'pr_type', 'pr_level', 'pr_expiry',
- 'page_title', 'page_namespace',
- 'tl_title', 'tl_namespace' ) );
+ 'page_title', 'page_namespace',
+ 'tl_title', 'tl_namespace' ) );
$this->addWhere( $lb->constructSet( 'tl', $db ) );
$this->addWhere( 'pr_page = page_id' );
$this->addWhere( 'pr_page = tl_from' );
$this->resetQueryParams();
$this->addTables( array( 'page_restrictions', 'page', 'imagelinks' ) );
$this->addFields( array( 'pr_type', 'pr_level', 'pr_expiry',
- 'page_title', 'page_namespace', 'il_to' ) );
+ 'page_title', 'page_namespace', 'il_to' ) );
$this->addWhere( 'pr_page = page_id' );
$this->addWhere( 'pr_page = il_from' );
$this->addWhereFld( 'pr_cascade', 1 );
foreach ( $res as $row ) {
if ( MWNamespace::isTalk( $row->page_namespace ) ) {
$this->talkids[MWNamespace::getSubject( $row->page_namespace )][$row->page_title] =
- intval( $row->page_id );
+ intval( $row->page_id );
} else {
$this->subjectids[MWNamespace::getTalk( $row->page_namespace )][$row->page_title] =
- intval( $row->page_id );
+ intval( $row->page_id );
}
}
}
$this->watched[$row->wl_namespace][$row->wl_title] = true;
}
if ( $this->fld_notificationtimestamp ) {
- $this->notificationtimestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+ $this->notificationtimestamps[$row->wl_namespace][$row->wl_title] =
+ $row->wl_notificationtimestamp;
}
}
}
if ( !is_null( $params['token'] ) ) {
return 'private';
}
+
return 'public';
}
$this->addOption( 'ORDER BY', array(
'll_title' . $sort,
'll_from' . $sort
- ));
+ ) );
}
} else {
$this->addOption( 'ORDER BY', array(
'll_lang' . $sort,
'll_title' . $sort,
'll_from' . $sort
- ));
+ ) );
}
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$count = 0;
$result = $this->getResult();
foreach ( $res as $row ) {
- if ( ++ $count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- // Continue string preserved in case the redirect query doesn't pass the limit
- $this->setContinueEnumParameter( 'continue', "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}" );
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here... Continue string
+ // preserved in case the redirect query doesn't pass the limit.
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}"
+ );
break;
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $entry );
if ( !$fit ) {
- $this->setContinueEnumParameter( 'continue', "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}" );
+ $this->setContinueEnumParameter(
+ 'continue',
+ "{$row->ll_lang}|{$row->ll_title}|{$row->ll_from}"
+ );
break;
}
}
$this->addOption( 'ORDER BY', 'll_lang' . $sort );
} else {
$this->addOption( 'ORDER BY', array(
- 'll_from' . $sort,
- 'll_lang' . $sort
- ));
+ 'll_from' . $sort,
+ 'll_lang' . $sort
+ ) );
}
}
public function getExamples() {
return array(
- 'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects=' => 'Get interlanguage links from the [[Main Page]]',
+ 'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects='
+ => 'Get interlanguage links from the [[Main Page]]',
);
}
$this->prefix = 'pl';
$this->description = 'link';
$this->titlesParam = 'titles';
- $this->titlesParamDescription = 'Only list links to these titles. Useful for checking whether a certain page links to a certain title.';
+ $this->titlesParamDescription = 'Only list links to these titles. Useful ' .
+ 'for checking whether a certain page links to a certain title.';
$this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
break;
case self::TEMPLATES:
$this->prefix = 'tl';
$this->description = 'template';
$this->titlesParam = 'templates';
- $this->titlesParamDescription = 'Only list these templates. Useful for checking whether a certain page uses a certain template.';
+ $this->titlesParamDescription = 'Only list these templates. Useful ' .
+ 'for checking whether a certain page uses a certain template.';
$this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
break;
default:
}
/**
- * @param $resultPageSet ApiPageSet
- * @return
+ * @param ApiPageSet $resultPageSet
*/
private function run( $resultPageSet = null ) {
if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
public function getParamDescription() {
$desc = $this->description;
+
return array(
'namespace' => "Show {$desc}s in this namespace(s) only",
'limit' => "How many {$desc}s to return",
public function getExamples() {
$desc = $this->description;
$name = $this->getModuleName();
+
return array(
"api.php?action=query&prop={$name}&titles=Main%20Page" => "Get {$desc}s from the [[Main Page]]",
- "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info" => "Get information about the {$desc} pages in the [[Main Page]]",
- "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10" => "Get {$desc}s from the Main Page in the User and Template namespaces",
+ "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info"
+ => "Get information about the {$desc} pages in the [[Main Page]]",
+ "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+ => "Get {$desc}s from the Main Page in the User and Template namespaces",
);
}
$this->addFieldsIf( array( 'log_id', 'page_id' ), $this->fld_ids );
$this->addFieldsIf( array( 'log_user', 'log_user_text', 'user_name' ), $this->fld_user );
$this->addFieldsIf( 'log_user', $this->fld_userid );
- $this->addFieldsIf( array( 'log_namespace', 'log_title' ), $this->fld_title || $this->fld_parsedcomment );
+ $this->addFieldsIf(
+ array( 'log_namespace', 'log_title' ),
+ $this->fld_title || $this->fld_parsedcomment
+ );
$this->addFieldsIf( 'log_comment', $this->fld_comment || $this->fld_parsedcomment );
$this->addFieldsIf( 'log_params', $this->fld_details );
if ( !is_null( $params['tag'] ) ) {
$this->addTables( 'change_tag' );
- $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'log_id=ct_log_id' ) ) ) );
+ $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN',
+ array( 'log_id=ct_log_id' ) ) ) );
$this->addWhereFld( 'ct_tag', $params['tag'] );
$index['change_tag'] = 'change_tag_tag_id';
}
$index['logging'] = 'type_time';
}
- $this->addTimestampWhereRange( 'log_timestamp', $params['dir'], $params['start'], $params['end'] );
+ $this->addTimestampWhereRange(
+ 'log_timestamp',
+ $params['dir'],
+ $params['start'],
+ $params['end']
+ );
$limit = $params['limit'];
$this->addOption( 'LIMIT', $limit + 1 );
$res = $this->select( __METHOD__ );
$result = $this->getResult();
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->log_timestamp ) );
break;
}
* @param $legacy bool
* @return array
*/
- public static function addLogParams( $result, &$vals, $params, $type, $action, $ts, $legacy = false ) {
+ public static function addLogParams( $result, &$vals, $params, $type,
+ $action, $ts, $legacy = false
+ ) {
switch ( $type ) {
case 'move':
if ( $legacy ) {
$result->setIndexedTagName_recursive( $logParams, 'param' );
$vals = array_merge( $vals, $logParams );
}
+
return $vals;
}
public function getAllowedParams() {
global $wgLogTypes, $wgLogActions, $wgLogActionsHandlers;
+
return array(
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'prop' => array(
'Which properties to get',
public function getResultProperties() {
global $wgLogTypes;
+
return array(
'ids' => array(
'logid' => 'integer',
protected function getParams() {
return array_filter(
$this->extractRequestParams(),
- function( $prop ) {
+ function ( $prop ) {
return isset( $prop );
}
);
return array_merge( $this->getTable()->getFieldDescriptions(), $descriptions );
}
-
}
$count = 0;
foreach ( $this->select( __METHOD__ ) as $row ) {
if ( ++$count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'continue', $row->pp_propname );
break;
}
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', $page );
}
+
return $fit;
}
public function getParamDescription() {
return array(
'continue' => 'When more results are available, use this to continue',
- 'prop' => 'Only list these props. Useful for checking whether a certain page uses a certain page prop',
+ 'prop' => 'Only list these props. Useful for checking whether a ' .
+ 'certain page uses a certain page prop',
);
}
$count = 0;
foreach ( $this->select( __METHOD__ ) as $row ) {
if ( ++$count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'continue', $row->page_id );
break;
}
public function getExamples() {
return array(
- 'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value' => 'Get first 10 pages using {{DISPLAYTITLE:}}',
- 'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info' => 'Get page info about first 10 pages using __NOTOC__',
+ 'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+ => 'Get first 10 pages using {{DISPLAYTITLE:}}',
+ 'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+ => 'Get page info about first 10 pages using __NOTOC__',
);
}
$titles = array();
foreach ( $res as $row ) {
- if ( ++ $count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->pt_timestamp ) );
break;
}
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $this->getModulePrefix() );
+ $result->setIndexedTagName_internal(
+ array( 'query', $this->getModuleName() ),
+ $this->getModulePrefix()
+ );
} else {
$resultPageSet->populateFromTitles( $titles );
}
public function getAllowedParams() {
global $wgRestrictionLevels;
+
return array(
'namespace' => array(
ApiBase::PARAM_ISMULTI => true,
public function getResultProperties() {
global $wgRestrictionLevels;
+
return array(
'' => array(
'ns' => 'namespace',
}
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName(), 'results' ), 'page' );
+ $result->setIndexedTagName_internal(
+ array( 'query', $this->getModuleName(), 'results' ),
+ 'page'
+ );
} else {
$resultPageSet->populateFromTitles( $titles );
}
if ( $qp->getRestriction() != '' ) {
return 'private';
}
+
return 'public';
}
*
* @ingroup API
*/
-
class ApiQueryRandom extends ApiQueryGeneratorBase {
-
private $pageIDs;
public function __construct( $query, $moduleName ) {
// Prevent duplicates
if ( !in_array( $row->page_id, $this->pageIDs ) ) {
$fit = $this->getResult()->addValue(
- array( 'query', $this->getModuleName() ),
- null, $this->extractRowInfo( $row ) );
+ array( 'query', $this->getModuleName() ),
+ null, $this->extractRowInfo( $row ) );
if ( !$fit ) {
// We can't really query-continue a random list.
// Return an insanely high value so
$result = $this->getResult();
$this->pageIDs = array();
- $this->prepareQuery( wfRandom(), $params['limit'], $params['namespace'], $resultPageSet, $params['redirect'] );
+ $this->prepareQuery(
+ wfRandom(),
+ $params['limit'],
+ $params['namespace'],
+ $resultPageSet,
+ $params['redirect']
+ );
$count = $this->runQuery( $resultPageSet );
if ( $count < $params['limit'] ) {
/* We got too few pages, we probably picked a high value
* for page_random. We'll just take the lowest ones, see
* also the comment in Title::getRandomTitle()
*/
- $this->prepareQuery( 0, $params['limit'] - $count, $params['namespace'], $resultPageSet, $params['redirect'] );
+ $this->prepareQuery(
+ 0,
+ $params['limit'] - $count,
+ $params['namespace'],
+ $resultPageSet,
+ $params['redirect']
+ );
$this->runQuery( $resultPageSet );
}
$vals = array();
$vals['id'] = intval( $row->page_id );
ApiQueryBase::addTitleInfo( $vals, $title );
+
return $vals;
}
public function getDescription() {
return array(
'Get a set of random pages',
- 'NOTE: Pages are listed in a fixed sequence, only the starting point is random. This means that if, for example, "Main Page" is the first',
- ' random page on your list, "List of fictional monkeys" will *always* be second, "List of people on stamps of Vanuatu" third, etc',
- 'NOTE: If the number of pages in the namespace is lower than rnlimit, you will get fewer pages. You will not get the same page twice'
+ 'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
+ ' This means that if, for example, "Main Page" is the first random page on',
+ ' your list, "List of fictional monkeys" will *always* be second, "List of',
+ ' people on stamps of Vanuatu" third, etc',
+ 'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
+ ' get fewer pages. You will not get the same page twice'
);
}
}
private $fld_comment = false, $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
- $fld_flags = false, $fld_timestamp = false, $fld_title = false, $fld_ids = false,
- $fld_sizes = false, $fld_redirect = false, $fld_patrolled = false, $fld_loginfo = false,
- $fld_tags = false, $fld_sha1 = false, $token = array();
+ $fld_flags = false, $fld_timestamp = false, $fld_title = false, $fld_ids = false,
+ $fld_sizes = false, $fld_redirect = false, $fld_patrolled = false, $fld_loginfo = false,
+ $fld_tags = false, $fld_sha1 = false, $token = array();
private $tokenFunctions;
'patrol' => array( 'ApiQueryRecentChanges', 'getPatrolToken' )
);
wfRunHooks( 'APIQueryRecentChangesTokens', array( &$this->tokenFunctions ) );
+
return $this->tokenFunctions;
}
* @param $pageid
* @param $title
* @param $rc RecentChange (optional)
- * @return bool|String
+ * @return bool|string
*/
public static function getPatrolToken( $pageid, $title, $rc = null ) {
global $wgUser;
if ( $rc ) {
if ( ( $wgUser->useRCPatrol() && $rc->getAttribute( 'rc_type' ) == RC_EDIT ) ||
- ( $wgUser->useNPPatrol() && $rc->getAttribute( 'rc_type' ) == RC_NEW ) )
- {
- $validTokenUser = true;
- }
- } else {
- if ( $wgUser->useRCPatrol() || $wgUser->useNPPatrol() ) {
+ ( $wgUser->useNPPatrol() && $rc->getAttribute( 'rc_type' ) == RC_NEW )
+ ) {
$validTokenUser = true;
}
+ } elseif ( $wgUser->useRCPatrol() || $wgUser->useNPPatrol() ) {
+ $validTokenUser = true;
}
if ( $validTokenUser ) {
// The patrol token is always the same, let's exploit that
static $cachedPatrolToken = null;
+
if ( is_null( $cachedPatrolToken ) ) {
$cachedPatrolToken = $wgUser->getEditToken( 'patrol' );
}
+
return $cachedPatrolToken;
- } else {
- return false;
}
+ return false;
}
/**
$cont = explode( '|', $params['continue'] );
if ( count( $cont ) != 2 ) {
$this->dieUsage( 'Invalid continue param. You should pass the ' .
- 'original value returned by the previous query', '_badcontinue' );
+ 'original value returned by the previous query', '_badcontinue' );
}
$timestamp = $this->getDB()->addQuotes( wfTimestamp( TS_MW, $cont[0] ) );
/* Check for conflicting parameters. */
if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
- || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
- || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
- || ( isset( $show['redirect'] ) && isset( $show['!redirect'] ) )
- || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+ || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
+ || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
+ || ( isset( $show['redirect'] ) && isset( $show['!redirect'] ) )
+ || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+ || ( isset( $show['patrolled'] ) && isset( $show['unpatrolled'] ) )
+ || ( isset( $show['!patrolled'] ) && isset( $show['unpatrolled'] ) )
) {
$this->dieUsageMsg( 'show' );
}
// Check permissions
- if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ) {
+ if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) || isset( $show['unpatrolled'] ) ) {
if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
- $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+ $this->dieUsage(
+ 'You need the patrol right to request the patrolled flag',
+ 'permissiondenied'
+ );
}
}
$this->addWhereIf( 'rc_patrolled != 0', isset( $show['patrolled'] ) );
$this->addWhereIf( 'page_is_redirect = 1', isset( $show['redirect'] ) );
+ if ( isset( $show['unpatrolled'] ) ) {
+ // See ChangesList:isUnpatrolled
+ if ( $user->useRCPatrol() ) {
+ $this->addWhere( 'rc_patrolled = 0' );
+ } elseif ( $user->useNPPatrol() ) {
+ $this->addWhere( 'rc_patrolled = 0' );
+ $this->addWhereFld( 'rc_type', RC_NEW );
+ }
+ }
+
// Don't throw log entries out the window here
- $this->addWhereIf( 'page_is_redirect = 0 OR page_is_redirect IS NULL', isset( $show['!redirect'] ) );
+ $this->addWhereIf(
+ 'page_is_redirect = 0 OR page_is_redirect IS NULL',
+ isset( $show['!redirect'] )
+ );
}
if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
$this->initProperties( $prop );
if ( $this->fld_patrolled && !$user->useRCPatrol() && !$user->useNPPatrol() ) {
- $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+ $this->dieUsage(
+ 'You need the patrol right to request the patrolled flag',
+ 'permissiondenied'
+ );
}
$this->addFields( 'rc_id' );
$this->addFieldsIf( array( 'rc_minor', 'rc_type', 'rc_bot' ), $this->fld_flags );
$this->addFieldsIf( array( 'rc_old_len', 'rc_new_len' ), $this->fld_sizes );
$this->addFieldsIf( 'rc_patrolled', $this->fld_patrolled );
- $this->addFieldsIf( array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ), $this->fld_loginfo );
- $showRedirects = $this->fld_redirect || isset( $show['redirect'] ) || isset( $show['!redirect'] );
+ $this->addFieldsIf(
+ array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ),
+ $this->fld_loginfo
+ );
+ $showRedirects = $this->fld_redirect || isset( $show['redirect'] )
+ || isset( $show['!redirect'] );
}
if ( $this->fld_tags ) {
if ( $this->fld_sha1 ) {
$this->addTables( 'revision' );
- $this->addJoinConds( array( 'revision' => array( 'LEFT JOIN', array( 'rc_this_oldid=rev_id' ) ) ) );
+ $this->addJoinConds( array( 'revision' => array( 'LEFT JOIN',
+ array( 'rc_this_oldid=rev_id' ) ) ) );
$this->addFields( array( 'rev_sha1', 'rev_deleted' ) );
}
if ( $params['toponly'] || $showRedirects ) {
$this->addTables( 'page' );
- $this->addJoinConds( array( 'page' => array( 'LEFT JOIN', array( 'rc_namespace=page_namespace', 'rc_title=page_title' ) ) ) );
+ $this->addJoinConds( array( 'page' => array( 'LEFT JOIN',
+ array( 'rc_namespace=page_namespace', 'rc_title=page_title' ) ) ) );
$this->addFields( 'page_is_redirect' );
if ( $params['toponly'] ) {
/* Iterate through the rows, adding data extracted from them to our query result. */
foreach ( $res as $row ) {
- if ( ++ $count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- $this->setContinueEnumParameter( 'continue', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id );
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter(
+ 'continue',
+ wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id
+ );
break;
}
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
if ( !$fit ) {
- $this->setContinueEnumParameter( 'continue', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id );
+ $this->setContinueEnumParameter(
+ 'continue',
+ wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id
+ );
break;
}
} else {
foreach ( $type as $t ) {
$retval[] = $this->parseRCType( $t );
}
+
return $retval;
}
switch ( $type ) {
// formatComment() calls wfMessage() among other things
return 'anon-public-user-private';
}
+
return 'public';
}
'redirect',
'!redirect',
'patrolled',
- '!patrolled'
+ '!patrolled',
+ 'unpatrolled'
)
),
'limit' => array(
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'start' => 'The timestamp to start enumerating from',
'end' => 'The timestamp to end enumerating',
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
array( 'show' ),
- array( 'code' => 'permissiondenied', 'info' => 'You need the patrol right to request the patrolled flag' ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You need the patrol right to request the patrolled flag'
+ ),
array( 'code' => 'user-excludeuser', 'info' => 'user and excludeuser cannot be used together' ),
) );
}
*/
/**
- * A query action to enumerate revisions of a given page, or show top revisions of multiple pages.
- * Various pieces of information may be shown - flags, comments, and the actual wiki markup of the rev.
- * In the enumeration mode, ranges of revisions may be requested and filtered.
+ * A query action to enumerate revisions of a given page, or show top revisions
+ * of multiple pages. Various pieces of information may be shown - flags,
+ * comments, and the actual wiki markup of the rev. In the enumeration mode,
+ * ranges of revisions may be requested and filtered.
*
* @ingroup API
*/
parent::__construct( $query, $moduleName, 'rv' );
}
- private $fld_ids = false, $fld_flags = false, $fld_timestamp = false, $fld_size = false, $fld_sha1 = false,
- $fld_comment = false, $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
- $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
+ private $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
+ $fld_size = false, $fld_sha1 = false, $fld_comment = false,
+ $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
+ $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
private $tokenFunctions;
'rollback' => array( 'ApiQueryRevisions', 'getRollbackToken' )
);
wfRunHooks( 'APIQueryRevisionsTokens', array( &$this->tokenFunctions ) );
+
return $this->tokenFunctions;
}
if ( !$wgUser->isAllowed( 'rollback' ) ) {
return false;
}
+
return $wgUser->getEditToken(
array( $title->getPrefixedText(), $rev->getUserText() ) );
}
// Enumerating revisions on multiple pages make it extremely
// difficult to manage continuations and require additional SQL indexes
$enumRevMode = ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ||
- !is_null( $params['limit'] ) || !is_null( $params['startid'] ) ||
- !is_null( $params['endid'] ) || $params['dir'] === 'newer' ||
- !is_null( $params['start'] ) || !is_null( $params['end'] ) );
+ !is_null( $params['limit'] ) || !is_null( $params['startid'] ) ||
+ !is_null( $params['endid'] ) || $params['dir'] === 'newer' ||
+ !is_null( $params['start'] ) || !is_null( $params['end'] ) );
$pageSet = $this->getPageSet();
$pageCount = $pageSet->getGoodTitleCount();
}
if ( $revCount > 0 && $enumRevMode ) {
- $this->dieUsage( 'The revids= parameter may not be used with the list options (limit, startid, endid, dirNewer, start, end).', 'revids' );
+ $this->dieUsage(
+ 'The revids= parameter may not be used with the list options ' .
+ '(limit, startid, endid, dirNewer, start, end).',
+ 'revids'
+ );
}
if ( $pageCount > 1 && $enumRevMode ) {
- $this->dieUsage( 'titles, pageids or a generator was used to supply multiple pages, but the limit, startid, endid, dirNewer, user, excludeuser, start and end parameters may only be used on a single page.', 'multpages' );
+ $this->dieUsage(
+ 'titles, pageids or a generator was used to supply multiple pages, ' .
+ 'but the limit, startid, endid, dirNewer, user, excludeuser, start ' .
+ 'and end parameters may only be used on a single page.',
+ 'multpages'
+ );
}
if ( !is_null( $params['difftotext'] ) ) {
$params['diffto'] = 0;
}
if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
- && $params['diffto'] != 'prev' && $params['diffto'] != 'next' ) {
- $this->dieUsage( 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"', 'diffto' );
+ && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
+ ) {
+ $this->dieUsage(
+ 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"',
+ 'diffto'
+ );
}
// Check whether the revision exists and is readable,
// DifferenceEngine returns a rather ambiguous empty
if ( isset( $prop['tags'] ) ) {
$this->fld_tags = true;
$this->addTables( 'tag_summary' );
- $this->addJoinConds( array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) ) );
+ $this->addJoinConds(
+ array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) )
+ );
$this->addFields( 'ts_tags' );
}
if ( !is_null( $params['tag'] ) ) {
$this->addTables( 'change_tag' );
- $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) ) );
+ $this->addJoinConds(
+ array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) )
+ );
$this->addWhereFld( 'ct_tag', $params['tag'] );
$index['change_tag'] = 'change_tag_tag_id';
}
$this->addOption( 'ORDER BY', array(
'rev_page',
'rev_id'
- ));
+ ) );
// assumption testing -- we should never get more then $pageCount rows.
$limit = $pageCount;
$res = $this->select( __METHOD__ );
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
if ( !$enumRevMode ) {
ApiBase::dieDebug( __METHOD__, 'Got more rows then expected' ); // bug report
}
if ( $content && $this->section !== false ) {
$content = $content->getSection( $this->section, false );
if ( !$content ) {
- $this->dieUsage( "There is no section {$this->section} in r" . $revision->getId(), 'nosuchsection' );
+ $this->dieUsage(
+ "There is no section {$this->section} in r" . $revision->getId(),
+ 'nosuchsection'
+ );
}
}
}
if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
$t = $content->getNativeData(); # note: don't set $text
- $wgParser->startExternalParse( $title, ParserOptions::newFromContext( $this->getContext() ), OT_PREPROCESS );
+ $wgParser->startExternalParse(
+ $title,
+ ParserOptions::newFromContext( $this->getContext() ),
+ OT_PREPROCESS
+ );
$dom = $wgParser->preprocessToDom( $t );
if ( is_callable( array( $dom, 'saveXML' ) ) ) {
$xml = $dom->saveXML();
$vals['parsetree'] = $xml;
} else {
$this->setWarning( "Conversion to XML is supported for wikitext only, " .
- $title->getPrefixedDBkey() .
- " uses content model " . $content->getModel() );
+ $title->getPrefixedDBkey() .
+ " uses content model " . $content->getModel() );
}
}
if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
$text = $content->getNativeData();
- $text = $wgParser->preprocess( $text, $title, ParserOptions::newFromContext( $this->getContext() ) );
+ $text = $wgParser->preprocess(
+ $text,
+ $title,
+ ParserOptions::newFromContext( $this->getContext() )
+ );
} else {
$this->setWarning( "Template expansion is supported for wikitext only, " .
$title->getPrefixedDBkey() .
}
}
if ( $this->parseContent ) {
- $po = $content->getParserOutput( $title, $revision->getId(), ParserOptions::newFromContext( $this->getContext() ) );
+ $po = $content->getParserOutput(
+ $title,
+ $revision->getId(),
+ ParserOptions::newFromContext( $this->getContext() )
+ );
$text = $po->getText();
}
$name = $title->getPrefixedDBkey();
$this->dieUsage( "The requested format {$this->contentFormat} is not supported " .
- "for content model $model used by $name", 'badformat' );
+ "for content model $model used by $name", 'badformat' );
}
$text = $content->serialize( $format );
$model = $title->getContentModel();
if ( $this->contentFormat
- && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat ) ) {
+ && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
+ ) {
$name = $title->getPrefixedDBkey();
$this->dieUsage( "The requested format {$this->contentFormat} is not supported for " .
- "content model $model used by $name", 'badformat' );
+ "content model $model used by $name", 'badformat' );
}
- $difftocontent = ContentHandler::makeContent( $this->difftotext, $title, $model, $this->contentFormat );
+ $difftocontent = ContentHandler::makeContent(
+ $this->difftotext,
+ $title,
+ $model,
+ $this->contentFormat
+ );
$engine = $handler->createDifferenceEngine( $context );
$engine->setContent( $content, $difftocontent );
$vals['diff']['notcached'] = '';
}
}
+
return $vals;
}
// formatComment() calls wfMessage() among other things
return 'anon-public-user-private';
}
+
return 'public';
}
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'prop' => array(
'Which properties to get for each revision:',
'continue' => 'When more results are available, use this to continue',
'diffto' => array( 'Revision ID to diff each revision to.',
'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
- 'difftotext' => array( 'Text to diff each revision to. Only diffs a limited number of revisions.',
- "Overrides {$p}diffto. If {$p}section is set, only that section will be diffed against this text" ),
+ 'difftotext' => array(
+ 'Text to diff each revision to. Only diffs a limited number of revisions.',
+ "Overrides {$p}diffto. If {$p}section is set, only that section will be",
+ 'diffed against this text',
+ ),
'tag' => 'Only list revisions tagged with this tag',
'contentformat' => 'Serialization format used for difftotext and expected for output of content',
);
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
array( 'nosuchrevid', 'diffto' ),
- array( 'code' => 'revids', 'info' => 'The revids= parameter may not be used with the list options '
- . '(limit, startid, endid, dirNewer, start, end).' ),
- array( 'code' => 'multpages', 'info' => 'titles, pageids or a generator was used to supply multiple pages, '
+ array(
+ 'code' => 'revids',
+ 'info' => 'The revids= parameter may not be used with the list options '
+ . '(limit, startid, endid, dirNewer, start, end).'
+ ),
+ array(
+ 'code' => 'multpages',
+ 'info' => 'titles, pageids or a generator was used to supply multiple pages, '
. ' but the limit, startid, endid, dirNewer, user, excludeuser, '
- . 'start and end parameters may only be used on a single page.' ),
- array( 'code' => 'diffto', 'info' => 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"' ),
+ . 'start and end parameters may only be used on a single page.'
+ ),
+ array(
+ 'code' => 'diffto',
+ 'info' => 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"'
+ ),
array( 'code' => 'badparams', 'info' => 'start and startid cannot be used together' ),
array( 'code' => 'badparams', 'info' => 'end and endid cannot be used together' ),
array( 'code' => 'badparams', 'info' => 'user and excludeuser cannot be used together' ),
array( 'code' => 'nosuchsection', 'info' => 'There is no section section in rID' ),
array( 'code' => 'badformat', 'info' => 'The requested serialization format can not be applied '
- . ' to the page\'s content model' ),
+ . ' to the page\'s content model' ),
) );
}
public function getExamples() {
return array(
'Get data with content for the last revision of titles "API" and "Main Page"',
- ' api.php?action=query&prop=revisions&titles=API|Main%20Page&rvprop=timestamp|user|comment|content',
+ ' api.php?action=query&prop=revisions&titles=API|Main%20Page&' .
+ 'rvprop=timestamp|user|comment|content',
'Get last 5 revisions of the "Main Page"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment',
+ ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment',
'Get first 5 revisions of the "Main Page"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer',
+ ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvdir=newer',
'Get first 5 revisions of the "Main Page" made after 2006-05-01',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
+ ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
'Get first 5 revisions of the "Main Page" that were not made made by anonymous user "127.0.0.1"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
+ ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
'Get first 5 revisions of the "Main Page" that were made by the user "MediaWiki default"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
+ ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
);
}
$totalhits = $matches->getTotalHits();
if ( $totalhits !== null ) {
$apiResult->addValue( array( 'query', 'searchinfo' ),
- 'totalhits', $totalhits );
+ 'totalhits', $totalhits );
}
}
if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
$apiResult->addValue( array( 'query', 'searchinfo' ),
- 'suggestion', $matches->getSuggestionQuery() );
+ 'suggestion', $matches->getSuggestionQuery() );
}
// Add the search results to the result
$result = $matches->next();
while ( $result ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional items to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional items to be had. Stop here...
$this->setContinueEnumParameter( 'offset', $params['offset'] + $params['limit'] );
break;
}
// Add item to results and see whether it fits
$fit = $apiResult->addValue( array( 'query', $this->getModuleName() ),
- null, $vals );
+ null, $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'offset', $params['offset'] + $count - 1 );
break;
if ( is_null( $resultPageSet ) ) {
$apiResult->setIndexedTagName_internal( array(
- 'query', $this->getModuleName()
- ), 'p' );
+ 'query', $this->getModuleName()
+ ), 'p' );
} else {
$resultPageSet->populateFromTitles( $titles );
}
// Abuse siprop as a query-continue parameter
// and set it to all unprocessed props
$this->setContinueEnumParameter( 'prop', implode( '|',
- array_diff( $params['prop'], $done ) ) );
+ array_diff( $params['prop'], $done ) ) );
break;
}
$done[] = $p;
}
protected function appendGeneralInfo( $property ) {
- global $wgContLang,
- $wgDisableLangConversion,
- $wgDisableTitleConversion;
+ global $wgContLang, $wgDisableLangConversion, $wgDisableTitleConversion;
$data = array();
$mainPage = Title::newMainPage();
}
$this->getResult()->setIndexedTagName( $data, 'ns' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
sort( $data );
$this->getResult()->setIndexedTagName( $data, 'ns' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
}
}
$this->getResult()->setIndexedTagName( $data, 'specialpage' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
$data[] = $arr;
}
$this->getResult()->setIndexedTagName( $data, 'magicword' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
}
$this->getResult()->setIndexedTagName( $data, 'iw' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
$lb = wfGetLB();
if ( $includeAll ) {
if ( !$wgShowHostnames ) {
- $this->dieUsage( 'Cannot view all servers info unless $wgShowHostnames is true', 'includeAllDenied' );
+ $this->dieUsage(
+ 'Cannot view all servers info unless $wgShowHostnames is true',
+ 'includeAllDenied'
+ );
}
$lags = $lb->getLagTimes();
$result = $this->getResult();
$result->setIndexedTagName( $data, 'db' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
if ( $group == 'user' ) {
$arr['number'] = SiteStats::users();
-
// '*' and autopromote groups have no size
} elseif ( $group !== '*' && !isset( $wgAutopromote[$group] ) ) {
$arr['number'] = SiteStats::numberInGroup( $group );
}
$result->setIndexedTagName( $data, 'group' );
+
return $result->addValue( 'query', $property, $data );
}
$data[] = array( 'ext' => $ext );
}
$this->getResult()->setIndexedTagName( $data, 'fe' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
$ret['url'] = $ext['url'];
}
if ( isset( $ext['version'] ) ) {
- $ret['version'] = $ext['version'];
+ $ret['version'] = $ext['version'];
} elseif ( isset( $ext['svn-revision'] ) &&
preg_match( '/\$(?:Rev|LastChangedRevision|Revision): *(\d+)/',
- $ext['svn-revision'], $m ) )
- {
- $ret['version'] = 'r' . $m[1];
+ $ext['svn-revision'], $m )
+ ) {
+ $ret['version'] = 'r' . $m[1];
}
$data[] = $ret;
}
}
$this->getResult()->setIndexedTagName( $data, 'ext' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
$data[] = $lang;
}
$this->getResult()->setIndexedTagName( $data, 'lang' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
$data[] = $skin;
}
$this->getResult()->setIndexedTagName( $data, 'skin' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
$wgParser->firstCallInit();
$tags = array_map( array( $this, 'formatParserTags' ), $wgParser->getTags() );
$this->getResult()->setIndexedTagName( $tags, 't' );
+
return $this->getResult()->addValue( 'query', $property, $tags );
}
$wgParser->firstCallInit();
$hooks = $wgParser->getFunctionHooks();
$this->getResult()->setIndexedTagName( $hooks, 'h' );
+
return $this->getResult()->addValue( 'query', $property, $hooks );
}
public function appendVariables( $property ) {
$variables = MagicWord::getVariableIDs();
$this->getResult()->setIndexedTagName( $variables, 'v' );
+
return $this->getResult()->addValue( 'query', $property, $variables );
}
// Make a copy of the global so we don't try to set the _element key of it - bug 45130
$protocols = array_values( $wgUrlProtocols );
$this->getResult()->setIndexedTagName( $protocols, 'p' );
+
return $this->getResult()->addValue( 'query', $property, $protocols );
}
}
$this->getResult()->setIndexedTagName( $data, 'hook' );
+
return $this->getResult()->addValue( 'query', $property, $data );
}
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'prop' => array(
'Which sysinfo properties to get:',
' specialpagealiases - List of special page aliases',
' magicwords - List of magic words and their aliases',
' statistics - Returns site statistics',
- " interwikimap - Returns interwiki map " .
+ ' interwikimap - Returns interwiki map ' .
"(optionally filtered, (optionally localised by using {$p}inlanguagecode))",
' dbrepllag - Returns database server with the highest replication lag',
' usergroups - Returns user groups and the associated permissions',
' extensions - Returns extensions installed on the wiki',
' fileextensions - Returns list of file extensions allowed to be uploaded',
' rightsinfo - Returns wiki rights (license) information if available',
- " languages - Returns a list of languages MediaWiki supports" .
+ ' languages - Returns a list of languages MediaWiki supports' .
"(optionally localised by using {$p}inlanguagecode)",
' skins - Returns a list of all enabled skins',
' extensiontags - Returns a list of parser extension tags',
'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
'showalldb' => 'List all database servers, not just the one lagging the most',
'numberingroup' => 'Lists the number of users in user groups',
- 'inlanguagecode' => 'Language code for localised language names (best effort, use CLDR extension)',
+ 'inlanguagecode' => 'Language code for localised language names ' .
+ '(best effort, use CLDR extension)',
);
}
$result->addValue( array( 'query', $this->getModuleName() ), null, $imageInfo );
$result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $modulePrefix );
}
- //TODO: update exception handling here to understand current getFile exceptions
+ // @todo Update exception handling here to understand current getFile exceptions
} catch ( UploadStashNotAvailableException $e ) {
$this->dieUsage( "Session not available: " . $e->getMessage(), "nosession" );
} catch ( UploadStashFileNotFoundException $e ) {
*/
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'prop' => self::getPropertyDescriptions( $this->propertyFilter, $p ),
'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
public function getExamples() {
return array(
'api.php?action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567',
- 'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&siiurlwidth=120&siiprop=url',
+ 'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+ 'siiurlwidth=120&siiprop=url',
);
}
-
}
private $limit;
private $fld_displayname = false, $fld_description = false,
- $fld_hitcount = false;
+ $fld_hitcount = false;
public function __construct( $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'tg' );
if ( ++$count > $this->limit ) {
$this->setContinueEnumParameter( 'continue', $tagName );
+
return false;
}
$fit = $this->result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', $tagName );
+
return false;
}
private $params, $prefixMode, $userprefix, $multiUserMode, $usernames, $parentLens;
private $fld_ids = false, $fld_title = false, $fld_timestamp = false,
- $fld_comment = false, $fld_parsedcomment = false, $fld_flags = false,
- $fld_patrolled = false, $fld_tags = false, $fld_size = false, $fld_sizediff = false;
+ $fld_comment = false, $fld_parsedcomment = false, $fld_flags = false,
+ $fld_patrolled = false, $fld_tags = false, $fld_size = false, $fld_sizediff = false;
public function execute() {
// Parse some parameters
// Fetch each row
foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ if ( ++$count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
if ( $this->multiUserMode ) {
$this->setContinueEnumParameter( 'continue', $this->continueStr( $row ) );
} else {
}
}
- $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'item' );
+ $this->getResult()->setIndexedTagName_internal(
+ array( 'query', $this->getModuleName() ),
+ 'item'
+ );
}
/**
}
// We only want pages by the specified users.
if ( $this->prefixMode ) {
- $this->addWhere( 'rev_user_text' . $this->getDB()->buildLike( $this->userprefix, $this->getDB()->anyString() ) );
+ $this->addWhere( 'rev_user_text' .
+ $this->getDB()->buildLike( $this->userprefix, $this->getDB()->anyString() ) );
} else {
$this->addWhereFld( 'rev_user_text', $this->usernames );
}
if ( !is_null( $show ) ) {
$show = array_flip( $show );
if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
- || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) ) ) {
+ || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+ ) {
$this->dieUsageMsg( 'show' );
}
) );
if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ||
- $this->fld_patrolled ) {
+ $this->fld_patrolled
+ ) {
if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
- $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+ $this->dieUsage(
+ 'You need the patrol right to request the patrolled flag',
+ 'permissiondenied'
+ );
}
// Use a redundant join condition on both
if ( $this->fld_tags ) {
$this->addTables( 'tag_summary' );
- $this->addJoinConds( array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) ) );
+ $this->addJoinConds(
+ array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) )
+ );
$this->addFields( 'ts_tags' );
}
if ( isset( $this->params['tag'] ) ) {
$this->addTables( 'change_tag' );
- $this->addJoinConds( array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) ) );
+ $this->addJoinConds(
+ array( 'change_tag' => array( 'INNER JOIN', array( 'rev_id=ct_rev_id' ) ) )
+ );
$this->addWhereFld( 'ct_tag', $this->params['tag'] );
$index['change_tag'] = 'change_tag_tag_id';
}
$vals['size'] = intval( $row->rev_len );
}
- if ( $this->fld_sizediff && !is_null( $row->rev_len ) && !is_null( $row->rev_parent_id ) ) {
- $parentLen = isset( $this->parentLens[$row->rev_parent_id] ) ? $this->parentLens[$row->rev_parent_id] : 0;
+ if ( $this->fld_sizediff
+ && !is_null( $row->rev_len )
+ && !is_null( $row->rev_parent_id )
+ ) {
+ $parentLen = isset( $this->parentLens[$row->rev_parent_id] )
+ ? $this->parentLens[$row->rev_parent_id]
+ : 0;
$vals['sizediff'] = intval( $row->rev_len - $parentLen );
}
public function getParamDescription() {
global $wgRCMaxAge;
$p = $this->getModulePrefix();
+
return array(
'limit' => 'The maximum number of contributions to return',
'start' => 'The start timestamp to return from',
'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 contributions for all users whose names begin with this value. Overrides {$p}user",
+ 'userprefix' => array(
+ "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(
' patrolled - Tags patrolled edits',
' tags - Lists tags for the edit',
),
- 'show' => array( "Show only items that meet this criteria, e.g. non minor edits only: {$p}show=!minor",
- "NOTE: if {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than \$wgRCMaxAge ($wgRCMaxAge) won't be shown", ),
+ 'show' => array(
+ "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
+ "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
+ "\$wgRCMaxAge ($wgRCMaxAge) won't be shown",
+ ),
'tag' => 'Only list revisions tagged with this tag',
'toponly' => 'Only list changes which are the latest revision',
);
array( 'code' => 'param_user', 'info' => 'User parameter may not be empty.' ),
array( 'code' => 'param_user', 'info' => 'User name user is not valid' ),
array( 'show' ),
- array( 'code' => 'permissiondenied', 'info' => 'You need the patrol right to request the patrolled flag' ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You need the patrol right to request the patrolled flag'
+ ),
) );
}
$result->setIndexedTagName( $acceptLang, 'lang' );
$vals['acceptlang'] = $acceptLang;
}
+
return $vals;
}
}
}
}
+
return $retval;
}
' ratelimits - Lists all rate limits applying to the current user',
' realname - Adds the user\'s real name',
' email - Adds the user\'s email address and email authentication date',
- ' acceptlang - Echoes the Accept-Language header sent by the client in a structured format',
+ ' acceptlang - Echoes the Accept-Language header sent by ' .
+ 'the client in a structured format',
' registrationdate - Adds the user\'s registration date',
)
);
'userrights' => array( 'ApiQueryUsers', 'getUserrightsToken' ),
);
wfRunHooks( 'APIQueryUsersTokens', array( &$this->tokenFunctions ) );
+
return $this->tokenFunctions;
}
*/
public static function getUserrightsToken( $user ) {
global $wgUser;
+
// Since the permissions check for userrights is non-trivial,
// don't bother with it here
return $wgUser->getEditToken( $user->getName() );
if ( $n === false || $n === '' ) {
$vals = array( 'name' => $u, 'invalid' => '' );
$fit = $result->addValue( array( 'query', $this->getModuleName() ),
- null, $vals );
+ null, $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'users',
- implode( '|', array_diff( $users, $done ) ) );
+ implode( '|', array_diff( $users, $done ) ) );
$goodNames = array();
break;
}
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ),
- null, $data[$u] );
+ null, $data[$u] );
if ( !$fit ) {
$this->setContinueEnumParameter( 'users',
- implode( '|', array_diff( $users, $done ) ) );
+ implode( '|', array_diff( $users, $done ) ) );
break;
}
$done[] = $u;
}
public function getCacheMode( $params ) {
- if ( isset( $params['token'] ) ) {
- return 'private';
- } else {
- return 'anon-public-user-private';
- }
+ return isset( $params['token'] ) ? 'private' : 'anon-public-user-private';
}
public function getAllowedParams() {
' rights - Lists all the rights the user(s) has',
' editcount - Adds the user\'s edit count',
' registration - Adds the user\'s registration timestamp',
- ' emailable - Tags if the user can and wants to receive email through [[Special:Emailuser]]',
+ ' emailable - Tags if the user can and wants to receive ' .
+ 'email through [[Special:Emailuser]]',
' gender - Tags the gender of the user. Returns "male", "female", or "unknown"',
),
'users' => 'A list of users to obtain the same information for',
$this->run( $resultPageSet );
}
- private $fld_ids = false, $fld_title = false, $fld_patrol = false, $fld_flags = false,
- $fld_timestamp = false, $fld_user = false, $fld_comment = false, $fld_parsedcomment = false, $fld_sizes = false,
- $fld_notificationtimestamp = false, $fld_userid = false, $fld_loginfo = false;
+ private $fld_ids = false, $fld_title = false, $fld_patrol = false,
+ $fld_flags = false, $fld_timestamp = false, $fld_user = false,
+ $fld_comment = false, $fld_parsedcomment = false, $fld_sizes = false,
+ $fld_notificationtimestamp = false, $fld_userid = false,
+ $fld_loginfo = false;
/**
* @param $resultPageSet ApiPageSet
$this->addFieldsIf( 'rc_patrolled', $this->fld_patrol );
$this->addFieldsIf( array( 'rc_old_len', 'rc_new_len' ), $this->fld_sizes );
$this->addFieldsIf( 'wl_notificationtimestamp', $this->fld_notificationtimestamp );
- $this->addFieldsIf( array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ), $this->fld_loginfo );
+ $this->addFieldsIf(
+ array( 'rc_logid', 'rc_log_type', 'rc_log_action', 'rc_params' ),
+ $this->fld_loginfo
+ );
} elseif ( $params['allrev'] ) {
$this->addFields( 'rc_this_oldid' );
} else {
'wl_user' => $userId,
'wl_namespace=rc_namespace',
'wl_title=rc_title'
- ) ) ) );
+ )
+ ) ) );
$this->addWhere( array(
'rc_deleted' => 0,
/* Check for conflicting parameters. */
if ( ( isset( $show['minor'] ) && isset( $show['!minor'] ) )
- || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
- || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
- || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
+ || ( isset( $show['bot'] ) && isset( $show['!bot'] ) )
+ || ( isset( $show['anon'] ) && isset( $show['!anon'] ) )
+ || ( isset( $show['patrolled'] ) && isset( $show['!patrolled'] ) )
) {
$this->dieUsageMsg( 'show' );
}
if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) ) {
$user = $this->getUser();
if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
- $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
+ $this->dieUsage(
+ 'You need the patrol right to request the patrolled flag',
+ 'permissiondenied'
+ );
}
}
}
// This is an index optimization for mysql, as done in the Special:Watchlist page
- $this->addWhereIf( "rc_timestamp > ''", !isset( $params['start'] ) && !isset( $params['end'] ) && $db->getType() == 'mysql' );
+ $this->addWhereIf(
+ "rc_timestamp > ''",
+ !isset( $params['start'] ) && !isset( $params['end'] ) && $db->getType() == 'mysql'
+ );
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$res = $this->select( __METHOD__ );
foreach ( $res as $row ) {
- if ( ++ $count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter(
+ 'start',
+ wfTimestamp( TS_ISO_8601, $row->rc_timestamp )
+ );
break;
}
$fit = $this->getResult()->addValue( array( 'query', $this->getModuleName() ), null, $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'start',
- wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
+ wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
break;
}
} else {
}
if ( is_null( $resultPageSet ) ) {
- $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'item' );
+ $this->getResult()->setIndexedTagName_internal(
+ array( 'query', $this->getModuleName() ),
+ 'item'
+ );
} elseif ( $params['allrev'] ) {
$resultPageSet->populateFromRevisionIDs( $ids );
} else {
foreach ( $type as $t ) {
$retval[] = $this->parseRCType( $t );
}
+
return $retval;
}
switch ( $type ) {
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
'allrev' => 'Include multiple revisions of the same page within given timeframe',
'start' => 'The timestamp to start enumerating from',
' log - Log entries',
),
'owner' => 'The name of the user whose watchlist you\'d like to access',
- 'token' => 'Give a security token (settable in preferences) to allow access to another user\'s watchlist'
+ 'token' => 'Give a security token (settable in preferences) to ' .
+ 'allow access to another user\'s watchlist'
);
}
public function getResultProperties() {
global $wgLogTypes;
+
return array(
'' => array(
'type' => array(
public function getPossibleErrors() {
return array_merge( parent::getPossibleErrors(), array(
array( 'code' => 'bad_wlowner', 'info' => 'Specified user does not exist' ),
- array( 'code' => 'bad_wltoken', 'info' => 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences' ),
+ array(
+ 'code' => 'bad_wltoken',
+ 'info' => 'Incorrect watchlist token provided -- ' .
+ 'please set a correct token in Special:Preferences'
+ ),
array( 'code' => 'notloggedin', 'info' => 'You must be logged-in to have a watchlist' ),
array( 'code' => 'patrol', 'info' => 'patrol property is not available' ),
array( 'show' ),
- array( 'code' => 'permissiondenied', 'info' => 'You need the patrol right to request the patrolled flag' ),
+ array(
+ 'code' => 'permissiondenied',
+ 'info' => 'You need the patrol right to request the patrolled flag'
+ ),
array( 'code' => 'user-excludeuser', 'info' => 'user and excludeuser cannot be used together' ),
) );
}
$this->addOption( 'ORDER BY', array(
'wl_namespace' . $sort,
'wl_title' . $sort
- ));
+ ) );
}
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$res = $this->select( __METHOD__ );
$count = 0;
foreach ( $res as $row ) {
if ( ++$count > $params['limit'] ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
$this->setContinueEnumParameter( 'continue', $row->wl_namespace . '|' . $row->wl_title );
break;
}
if ( is_null( $resultPageSet ) ) {
$vals = array();
ApiQueryBase::addTitleInfo( $vals, $t );
- if ( isset( $prop['changed'] ) && !is_null( $row->wl_notificationtimestamp ) )
- {
+ if ( isset( $prop['changed'] ) && !is_null( $row->wl_notificationtimestamp ) ) {
$vals['changed'] = wfTimestamp( TS_ISO_8601, $row->wl_notificationtimestamp );
}
$fit = $this->getResult()->addValue( $this->getModuleName(), null, $vals );
),
'show' => 'Only list items that meet these criteria',
'owner' => 'The name of the user whose watchlist you\'d like to access',
- 'token' => 'Give a security token (settable in preferences) to allow access to another user\'s watchlist',
+ 'token' => 'Give a security token (settable in preferences) to allow ' .
+ 'access to another user\'s watchlist',
'dir' => 'Direction to sort the titles and namespaces in',
);
}
array( 'code' => 'notloggedin', 'info' => 'You must be logged-in to have a watchlist' ),
array( 'show' ),
array( 'code' => 'bad_wlowner', 'info' => 'Specified user does not exist' ),
- array( 'code' => 'bad_wltoken', 'info' => 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences' ),
+ array(
+ 'code' => 'bad_wltoken',
+ 'info' => 'Incorrect watchlist token provided -- ' .
+ 'please set a correct token in Special:Preferences'
+ ),
) );
}
/**
* This class represents the result of the API operations.
- * It simply wraps a nested array() structure, adding some functions to simplify array's modifications.
- * As various modules execute, they add different pieces of information to this result,
- * structuring it as it will be given to the client.
+ * It simply wraps a nested array() structure, adding some functions to simplify
+ * array's modifications. As various modules execute, they add different pieces
+ * of information to this result, structuring it as it will be given to the client.
*
* Each subarray may either be a dictionary - key-value pairs with unique keys,
* or lists, where the items are added using $data[] = $value notation.
// Objects can't always be cast to string
$s = strlen( $value );
}
+
return $s;
}
* @param array $arr to add $value to
* @param string $name Index of $arr to add $value at
* @param $value mixed
- * @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.
+ * @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.
*
* @since 1.21 int $flags replaced boolean $override
*/
public static function setElement( &$arr, $name, $value, $flags = 0 ) {
- if ( $arr === null || $name === null || $value === null || !is_array( $arr ) || is_array( $name ) ) {
+ if ( $arr === null || $name === null || $value === null
+ || !is_array( $arr ) || is_array( $name )
+ ) {
ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
}
ApiBase::dieDebug( __METHOD__, "Attempting to merge element $name" );
}
} else {
- ApiBase::dieDebug( __METHOD__, "Attempting to add element $name=$value, existing value is {$arr[$name]}" );
+ ApiBase::dieDebug(
+ __METHOD__,
+ "Attempting to add element $name=$value, existing value is {$arr[$name]}"
+ );
}
}
* @param $path array|string|null
* @param $name string
* @param $value mixed
- * @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.
+ * @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
*
* @since 1.21 int $flags replaced boolean $override
if ( $newsize > $wgAPIMaxResultSize ) {
$this->setWarning(
"This result was truncated because it would otherwise be larger than the " .
- "limit of {$wgAPIMaxResultSize} bytes" );
+ "limit of {$wgAPIMaxResultSize} bytes" );
+
return false;
}
$this->mSize = $newsize;
// Add named element
self::setElement( $data, $name, $value, $flags );
}
+
return true;
}
$result[] = $error;
}
$this->setIndexedTagName( $result, $errorType );
+
return $result;
}
$pageObj = WikiPage::factory( $titleObj );
$summary = $params['summary'];
$details = array();
- $retval = $pageObj->doRollback( $this->getRbUser(), $summary, $params['token'], $params['markbot'], $details, $this->getUser() );
+ $retval = $pageObj->doRollback(
+ $this->getRbUser(),
+ $summary,
+ $params['token'],
+ $params['markbot'],
+ $details,
+ $this->getUser()
+ );
if ( $retval ) {
// We don't care about multiple errors, just report one of them
public function getParamDescription() {
return array(
'title' => 'Title of the page you want to rollback.',
- 'user' => 'Name of the user whose edits are to be rolled back. If set incorrectly, you\'ll get a badtoken error.',
- 'token' => "A rollback token previously retrieved through {$this->getModulePrefix()}prop=revisions",
+ 'user' => 'Name of the user whose edits are to be rolled back. If ' .
+ 'set incorrectly, you\'ll get a badtoken error.',
+ 'token' => 'A rollback token previously retrieved through ' .
+ "{$this->getModulePrefix()}prop=revisions",
'summary' => 'Custom edit summary. If empty, default summary will be used',
'markbot' => 'Mark the reverted edits and the revert as bot edits',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+ 'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
+ 'use preferences or do not change watch',
);
}
public function getDescription() {
return array(
- 'Undo the last edit to the page. If the last user who edited the page made multiple edits in a row,',
- 'they will all be rolled back'
+ 'Undo the last edit to the page. If the last user who edited the page made',
+ 'multiple edits in a row, they will all be rolled back'
);
}
public function getExamples() {
return array(
'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
- 'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&token=123ABC&summary=Reverting%20vandalism&markbot=1'
+ 'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&' .
+ 'token=123ABC&summary=Reverting%20vandalism&markbot=1'
);
}
),
);
wfRunHooks( 'ApiRsdServiceApis', array( &$apis ) );
+
return $apis;
}
}
$outputData[] = $data;
}
+
return $outputData;
}
}
$pageSet = $this->getPageSet();
if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
- $this->dieUsage( "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'", 'multisource' );
+ $this->dieUsage(
+ "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'",
+ 'multisource'
+ );
}
$dbw = wfGetDB( DB_MASTER, 'api' );
__METHOD__
);
- $result['notificationtimestamp'] = ( is_null( $timestamp ) ? '' : wfTimestamp( TS_ISO_8601, $timestamp ) );
+ $result['notificationtimestamp'] = is_null( $timestamp )
+ ? ''
+ : wfTimestamp( TS_ISO_8601, $timestamp );
} else {
// First, log the invalid titles
foreach ( $pageSet->getInvalidTitles() as $title ) {
// Query the results of our update
$timestamps = array();
- $res = $dbw->select( 'watchlist', array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
+ $res = $dbw->select(
+ 'watchlist',
+ array( 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ),
array( 'wl_user' => $user->getID(), $lb->constructSet( 'wl', $dbw ) ),
__METHOD__
);
if ( !isset( $this->mPageSet ) ) {
$this->mPageSet = new ApiPageSet( $this );
}
+
return $this->mPageSet;
}
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
}
- return $result;
+ return $result;
}
public function getParamDescription() {
public function getPossibleErrors() {
$ps = $this->getPageSet();
+
return array_merge(
parent::getPossibleErrors(),
$ps->getFinalPossibleErrors(),
$this->getRequireOnlyOneParameterErrorMessages(
array_merge( array( 'entirewatchlist' ), array_keys( $ps->getFinalParams() ) ) ),
array(
- array( 'code' => 'notloggedin', 'info' => 'Anonymous users cannot use watchlist change notifications' ),
+ array( 'code' => 'notloggedin', 'info'
+ => 'Anonymous users cannot use watchlist change notifications' ),
array( 'code' => 'multpages', 'info' => 'torevid may only be used with a single page' ),
array( 'code' => 'multpages', 'info' => 'newerthanrevid may only be used with a single page' ),
)
public function getExamples() {
return array(
- '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',
+ '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&' .
+ 'timestamp=2012-01-01T00:00:00Z&token=123ABC'
+ => 'Set the notification timestamp for "Main page" so all edits ' .
+ 'since 1 January 2012 are unviewed',
);
}
wfRunHooks( 'ApiTokensGetTokenTypes', array( &$types ) );
ksort( $types );
wfProfileOut( __METHOD__ );
+
return $types;
}
public function getParamDescription() {
$p = $this->getModulePrefix();
+
return array(
- 'id' => "ID of the block you want to unblock (obtained through list=blocks). Cannot be used together with {$p}user",
- 'user' => "Username, IP address or IP range you want to unblock. Cannot be used together with {$p}id",
+ 'id' => "ID of the block you want to unblock (obtained through list=blocks). ' .
+ 'Cannot be used together with {$p}user",
+ 'user' => "Username, IP address or IP range you want to unblock. ' .
+ 'Cannot be used together with {$p}id",
'token' => "An unblock token previously obtained through prop=info",
'reason' => 'Reason for unblock',
);
'title' => 'Title of the page you want to restore',
'token' => 'An undelete token previously retrieved through list=deletedrevs',
'reason' => 'Reason for restoring',
- 'timestamps' => 'Timestamps of the revisions to restore. If not set, all revisions will be restored.',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+ 'timestamps' => 'Timestamps of the revisions to restore. If not set, all ' .
+ 'revisions will be restored.',
+ 'watchlist' => 'Unconditionally add or remove the page from your ' .
+ 'watchlist, use preferences or do not change watch',
);
}
public function getDescription() {
return array(
- 'Restore certain revisions of a deleted page. A list of deleted revisions (including timestamps) can be',
- 'retrieved through list=deletedrevs'
+ 'Restore certain revisions of a deleted page. A list of deleted revisions ',
+ '(including timestamps) can be retrieved through list=deletedrevs'
);
}
// Stash the file and get stash result
return $this->getStashResult( $warnings );
}
+
// This is the most common case -- a normal upload with no warnings
// performUpload will return a formatted properly for the API with status
return $this->performUpload( $warnings );
} catch ( MWException $e ) {
$this->dieUsage( $e->getMessage(), 'stashfailed' );
}
+
return $result;
}
} catch ( MWException $e ) {
$result['warnings']['stashfailed'] = $e->getMessage();
}
+
return $result;
}
$chunkPath, $chunkSize, $this->mParams['offset'] );
if ( !$status->isGood() ) {
$this->dieUsage( $status->getWikiText(), 'stashfailed' );
+
return array();
}
}
$status = $this->mUpload->concatenateChunks();
if ( !$status->isGood() ) {
$this->dieUsage( $status->getWikiText(), 'stashfailed' );
+
return array();
}
}
$result['filekey'] = $filekey;
$result['offset'] = $this->mParams['offset'] + $chunkSize;
+
return $result;
}
wfDebug( __METHOD__ . ' ' . $message . "\n" );
throw new MWException( $message );
}
+
return $fileKey;
}
}
unset( $progress['status'] ); // remove Status object
$this->getResult()->addValue( null, $this->getModuleName(), $progress );
+
return false;
}
$sessionData['sessionkey'] = $this->mParams['statuskey'];
}
$this->getResult()->addValue( null, $this->getModuleName(), $sessionData );
+
return false;
}
if ( $permission !== true ) {
if ( !$user->isLoggedIn() ) {
$this->dieUsageMsg( array( 'mustbeloggedin', 'upload' ) );
- } else {
- $this->dieUsageMsg( 'badaccess-groups' );
}
+
+ $this->dieUsageMsg( 'badaccess-groups' );
}
}
break;
case UploadBase::ILLEGAL_FILENAME:
$this->dieRecoverableError( 'illegal-filename', 'filename',
- array( 'filename' => $verification['filtered'] ) );
+ array( 'filename' => $verification['filtered'] ) );
break;
case UploadBase::FILENAME_TOO_LONG:
$this->dieRecoverableError( 'filename-toolong', 'filename' );
case UploadBase::VERIFICATION_ERROR:
$this->getResult()->setIndexedTagName( $verification['details'], 'detail' );
$this->dieUsage( 'This file did not pass file verification', 'verification-error',
- 0, array( 'details' => $verification['details'] ) );
+ 0, array( 'details' => $verification['details'] ) );
break;
case UploadBase::HOOK_ABORTED:
$this->dieUsage( "The modification you tried to make was aborted by an extension hook",
- 'hookaborted', 0, array( 'error' => $verification['error'] ) );
+ 'hookaborted', 0, array( 'error' => $verification['error'] ) );
break;
default:
$this->dieUsage( 'An unknown error occurred', 'unknown-error',
- 0, array( 'code' => $verification['status'] ) );
+ 0, array( 'code' => $verification['status'] ) );
break;
}
}
if ( isset( $warnings['exists'] ) ) {
$warning = $warnings['exists'];
unset( $warnings['exists'] );
- $localFile = isset( $warning['normalizedFile'] ) ? $warning['normalizedFile'] : $warning['file'];
+ $localFile = isset( $warning['normalizedFile'] )
+ ? $warning['normalizedFile']
+ : $warning['file'];
$warnings[$warning['warning']] = $localFile->getName();
}
}
+
return $warnings;
}
'result' => 'Queued',
'statuskey' => $error[0][1],
);
- } else {
- $this->getResult()->setIndexedTagName( $error, 'error' );
-
- $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
}
+
+ $this->getResult()->setIndexedTagName( $error, 'error' );
+ $this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
}
$result['result'] = 'Success';
}
$params = array(
'filename' => 'Target filename',
'token' => 'Edit token. You can get one of these through prop=info',
- 'comment' => 'Upload comment. Also used as the initial page text for new files if "text" is not specified',
+ 'comment' => 'Upload comment. Also used as the initial page text for new ' .
+ 'files if "text" is not specified',
'text' => 'Initial page text for new files',
'watch' => 'Watch the page',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
+ 'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
+ 'use preferences or do not change watch',
'ignorewarnings' => 'Ignore any warnings',
'file' => 'File contents',
'url' => 'URL to fetch the file from',
'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
'sessionkey' => 'Same as filekey, maintained for backward compatibility.',
- 'stash' => 'If set, the server will not add the file to the repository and stash it temporarily.',
+ 'stash' => 'If set, the server will not add the file to the repository ' .
+ 'and stash it temporarily.',
'chunk' => 'Chunk contents',
'offset' => 'Offset of chunk in bytes',
);
return $params;
-
}
public function getResultProperties() {
public function getExamples() {
return array(
- 'api.php?action=upload&filename=Wiki.png&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png'
+ 'api.php?action=upload&filename=Wiki.png' .
+ '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png'
=> 'Upload from a URL',
'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1'
=> 'Complete an upload that failed due to warnings',
$form->setContext( $this->getContext() );
$r['user'] = $user->getName();
$r['userid'] = $user->getId();
- list( $r['added'], $r['removed'] ) =
- $form->doSaveUserGroups(
- $user, (array)$params['add'],
- (array)$params['remove'], $params['reason'] );
+ list( $r['added'], $r['removed'] ) = $form->doSaveUserGroups(
+ $user, (array)$params['add'],
+ (array)$params['remove'], $params['reason']
+ );
$result = $this->getResult();
$result->setIndexedTagName( $r['added'], 'group' );
$status = $form->fetchUser( $params['user'] );
if ( !$status->isOK() ) {
$this->dieStatus( $status );
- } else {
- $user = $status->value;
}
- $this->mUser = $user;
- return $user;
+ $this->mUser = $status->value;
+
+ return $status->value;
}
public function mustBePosted() {
$res = array( 'title' => $title->getPrefixedText() );
- // Currently unnecessary, code to act as a safeguard against any change in current behavior of uselang
+ // Currently unnecessary, code to act as a safeguard against any change
+ // in current behavior of uselang.
// Copy from ApiParse
$oldLang = null;
- if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+ if ( isset( $params['uselang'] ) &&
+ $params['uselang'] != $this->getContext()->getLanguage()->getCode()
+ ) {
$oldLang = $this->getContext()->getLanguage(); // Backup language
$this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
}
if ( $params['unwatch'] ) {
$res['unwatched'] = '';
- $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
+ $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )
+ ->title( $title )->parseAsBlock();
$status = UnwatchAction::doUnwatch( $title, $user );
} else {
$res['watched'] = '';
- $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
+ $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )
+ ->title( $title )->parseAsBlock();
$status = WatchAction::doWatch( $title, $user );
}
/**
* Multi dimensions array representing batches. Keys are:
* > (string) links table name
+ * > (int) batch size
* > 'numRows' : Number of rows for this link table
* > 'batches' : array( $start, $end )
*
if ( !self::$cache->has( $dbKey, 'obj', 3600 ) ) {
self::$cache->set( $dbKey, 'obj', new self( $title ) );
}
+
return self::$cache->get( $dbKey, 'obj' );
}
if ( !isset( $this->db ) ) {
$this->db = wfGetDB( DB_SLAVE );
}
+
return $this->db;
}
* @param $startId Integer|false
* @param $endId Integer|false
* @param $max Integer|INF
+ * @param $select string 'all' or 'ids'
* @return ResultWrapper
*/
- protected function queryLinks( $table, $startId, $endId, $max ) {
+ protected function queryLinks( $table, $startId, $endId, $max, $select = 'all' ) {
wfProfileIn( __METHOD__ );
$fromField = $this->getPrefix( $table ) . '_from';
if ( !$startId && !$endId && is_infinite( $max )
- && isset( $this->fullResultCache[$table] ) )
- {
+ && isset( $this->fullResultCache[$table] )
+ ) {
wfDebug( __METHOD__ . ": got results from cache\n" );
$res = $this->fullResultCache[$table];
} else {
if ( $endId ) {
$conds[] = "$fromField <= " . intval( $endId );
}
- $options = array( 'STRAIGHT_JOIN', 'ORDER BY' => $fromField );
+ $options = array( 'ORDER BY' => $fromField );
if ( is_finite( $max ) && $max > 0 ) {
$options['LIMIT'] = $max;
}
- $res = $this->getDB()->select(
- array( $table, 'page' ),
- array( 'page_namespace', 'page_title', 'page_id' ),
- $conds,
- __METHOD__,
- $options
- );
+ if ( $select === 'ids' ) {
+ // Just select from the backlink table and ignore the page JOIN
+ $res = $this->getDB()->select(
+ $table,
+ array( $this->getPrefix( $table ) . '_from AS page_id' ),
+ array_filter( $conds, function ( $clause ) { // kind of janky
+ return !preg_match( '/(\b|=)page_id(\b|=)/', $clause );
+ } ),
+ __METHOD__,
+ $options
+ );
+ } else {
+ // Select from the backlink table and JOIN with page title information
+ $res = $this->getDB()->select(
+ array( $table, 'page' ),
+ array( 'page_namespace', 'page_title', 'page_id' ),
+ $conds,
+ __METHOD__,
+ array_merge( array( 'STRAIGHT_JOIN' ), $options )
+ );
+ }
- if ( !$startId && !$endId && $res->numRows() < $max ) {
+ if ( $select === 'all' && !$startId && !$endId && $res->numRows() < $max ) {
// The full results fit within the limit, so cache them
$this->fullResultCache[$table] = $res;
} else {
}
wfProfileOut( __METHOD__ );
+
return $res;
}
case 'imagelinks':
$conds = array(
'il_to' => $this->title->getDBkey(),
- 'page_id=il_from'
+ "page_id={$prefix}_from"
);
break;
case 'categorylinks':
$conds = array(
'cl_to' => $this->title->getDBkey(),
- 'page_id=cl_from',
+ "page_id={$prefix}_from"
);
break;
default:
* @return integer
*/
public function getNumLinks( $table, $max = INF ) {
- global $wgMemc;
+ global $wgMemc, $wgUpdateRowsPerJob;
// 1) try partition cache ...
if ( isset( $this->partitionCache[$table] ) ) {
$entry = reset( $this->partitionCache[$table] );
+
return min( $max, $entry['numRows'] );
}
}
// 4) fetch from the database ...
- $count = $this->getLinks( $table, false, false, $max )->count();
- if ( $count < $max ) { // full count
- $wgMemc->set( $memcKey, $count, self::CACHE_EXPIRY );
+ if ( is_infinite( $max ) ) { // no limit at all
+ // Use partition() since it will batch the query and skip the JOIN.
+ // Use $wgUpdateRowsPerJob just to encourage cache reuse for jobs.
+ $this->partition( $table, $wgUpdateRowsPerJob ); // updates $this->partitionCache
+ return $this->partitionCache[$table][$wgUpdateRowsPerJob]['numRows'];
+ } else { // probably some sane limit
+ // Fetch the full title info, since the caller will likely need it next
+ $count = $this->getLinks( $table, false, false, $max )->count();
+ if ( $count < $max ) { // full count
+ $wgMemc->set( $memcKey, $count, self::CACHE_EXPIRY );
+ }
}
return min( $max, $count );
// 1) try partition cache ...
if ( isset( $this->partitionCache[$table][$batchSize] ) ) {
wfDebug( __METHOD__ . ": got from partition cache\n" );
+
return $this->partitionCache[$table][$batchSize]['batches'];
}
if ( isset( $this->fullResultCache[$table] ) ) {
$cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
wfDebug( __METHOD__ . ": got from full result cache\n" );
+
return $cacheEntry['batches'];
}
if ( is_array( $memcValue ) ) {
$cacheEntry = $memcValue;
wfDebug( __METHOD__ . ": got from memcached $memcKey\n" );
+
return $cacheEntry['batches'];
}
$selectSize = max( $batchSize, 200000 - ( 200000 % $batchSize ) );
$start = false;
do {
- $res = $this->queryLinks( $table, $start, false, $selectSize );
+ $res = $this->queryLinks( $table, $start, false, $selectSize, 'ids' );
$partitions = $this->partitionResult( $res, $batchSize, false );
// Merge the link count and range partitions for this chunk
$cacheEntry['numRows'] += $partitions['numRows'];
$wgMemc->set( $memcKey, $cacheEntry['numRows'], self::CACHE_EXPIRY );
wfDebug( __METHOD__ . ": got from database\n" );
+
return $cacheEntry['batches'];
}
* @ingroup Cache
*/
class DependencyWrapper {
- var $value;
- var $deps;
+ private $value;
+ private $deps;
/**
* Create an instance.
* callback was defined.
*/
static function getValueFromCache( $cache, $key, $expiry = 0, $callback = false,
- $callbackParams = array(), $deps = array() )
- {
+ $callbackParams = array(), $deps = array()
+ ) {
$obj = $cache->get( $key );
if ( is_object( $obj ) && $obj instanceof DependencyWrapper && !$obj->isExpired() ) {
/**
* Hook to perform any expensive pre-serialize loading of dependency values.
*/
- function loadDependencyValues() { }
+ function loadDependencyValues() {
+ }
}
/**
* @ingroup Cache
*/
class FileDependency extends CacheDependency {
- var $filename, $timestamp;
+ private $filename;
+ private $timestamp;
/**
* Create a file dependency
*/
function __sleep() {
$this->loadDependencyValues();
+
return array( 'filename', 'timestamp' );
}
} else {
# Deleted
wfDebug( "Dependency triggered: {$this->filename} deleted.\n" );
+
return true;
}
} else {
if ( $lastmod > $this->timestamp ) {
# Modified or created
wfDebug( "Dependency triggered: {$this->filename} changed.\n" );
+
return true;
} else {
# Not modified
}
}
-/**
- * @ingroup Cache
- */
-class TitleDependency extends CacheDependency {
- var $titleObj;
- var $ns, $dbk;
- var $touched;
-
- /**
- * Construct a title dependency
- * @param $title Title
- */
- function __construct( Title $title ) {
- $this->titleObj = $title;
- $this->ns = $title->getNamespace();
- $this->dbk = $title->getDBkey();
- }
-
- function loadDependencyValues() {
- $this->touched = $this->getTitle()->getTouched();
- }
-
- /**
- * Get rid of bulky Title object for sleep
- *
- * @return array
- */
- function __sleep() {
- return array( 'ns', 'dbk', 'touched' );
- }
-
- /**
- * @return Title
- */
- function getTitle() {
- if ( !isset( $this->titleObj ) ) {
- $this->titleObj = Title::makeTitle( $this->ns, $this->dbk );
- }
-
- return $this->titleObj;
- }
-
- /**
- * @return bool
- */
- function isExpired() {
- $touched = $this->getTitle()->getTouched();
-
- if ( $this->touched === false ) {
- if ( $touched === false ) {
- # Still missing
- return false;
- } else {
- # Created
- return true;
- }
- } elseif ( $touched === false ) {
- # Deleted
- return true;
- } elseif ( $touched > $this->touched ) {
- # Updated
- return true;
- } else {
- # Unmodified
- return false;
- }
- }
-}
-
-/**
- * @ingroup Cache
- */
-class TitleListDependency extends CacheDependency {
- var $linkBatch;
- var $timestamps;
-
- /**
- * Construct a dependency on a list of titles
- * @param $linkBatch LinkBatch
- */
- function __construct( LinkBatch $linkBatch ) {
- $this->linkBatch = $linkBatch;
- }
-
- /**
- * @return array
- */
- function calculateTimestamps() {
- # Initialise values to false
- $timestamps = array();
-
- foreach ( $this->getLinkBatch()->data as $ns => $dbks ) {
- if ( count( $dbks ) > 0 ) {
- $timestamps[$ns] = array();
-
- foreach ( $dbks as $dbk => $value ) {
- $timestamps[$ns][$dbk] = false;
- }
- }
- }
-
- # Do the query
- if ( count( $timestamps ) ) {
- $dbr = wfGetDB( DB_SLAVE );
- $where = $this->getLinkBatch()->constructSet( 'page', $dbr );
- $res = $dbr->select(
- 'page',
- array( 'page_namespace', 'page_title', 'page_touched' ),
- $where,
- __METHOD__
- );
-
- foreach ( $res as $row ) {
- $timestamps[$row->page_namespace][$row->page_title] = $row->page_touched;
- }
- }
-
- return $timestamps;
- }
-
- function loadDependencyValues() {
- $this->timestamps = $this->calculateTimestamps();
- }
-
- /**
- * @return array
- */
- function __sleep() {
- return array( 'timestamps' );
- }
-
- /**
- * @return LinkBatch
- */
- function getLinkBatch() {
- if ( !isset( $this->linkBatch ) ) {
- $this->linkBatch = new LinkBatch;
- $this->linkBatch->setArray( $this->timestamps );
- }
- return $this->linkBatch;
- }
-
- /**
- * @return bool
- */
- function isExpired() {
- $newTimestamps = $this->calculateTimestamps();
-
- foreach ( $this->timestamps as $ns => $dbks ) {
- foreach ( $dbks as $dbk => $oldTimestamp ) {
- $newTimestamp = $newTimestamps[$ns][$dbk];
-
- if ( $oldTimestamp === false ) {
- if ( $newTimestamp === false ) {
- # Still missing
- } else {
- # Created
- return true;
- }
- } elseif ( $newTimestamp === false ) {
- # Deleted
- return true;
- } elseif ( $newTimestamp > $oldTimestamp ) {
- # Updated
- return true;
- } else {
- # Unmodified
- }
- }
- }
-
- return false;
- }
-}
-
/**
* @ingroup Cache
*/
class GlobalDependency extends CacheDependency {
- var $name, $value;
+ private $name;
+ private $value;
function __construct( $name ) {
$this->name = $name;
if ( !isset( $GLOBALS[$this->name] ) ) {
return true;
}
+
return $GLOBALS[$this->name] != $this->value;
}
}
* @ingroup Cache
*/
class ConstantDependency extends CacheDependency {
- var $name, $value;
+ private $name;
+ private $value;
function __construct( $name ) {
$this->name = $name;
*/
final protected function baseCacheDirectory() {
global $wgFileCacheDirectory;
+
return $wgFileCacheDirectory;
}
if ( $this->mCached === null ) {
$this->mCached = file_exists( $this->cachePath() );
}
+
return $this->mCached;
}
*/
public function cacheTimestamp() {
$timestamp = filemtime( $this->cachePath() );
+
return ( $timestamp !== false )
? wfTimestamp( TS_MW, $timestamp )
: false;
$cachetime = $this->cacheTimestamp();
$good = ( $timestamp <= $cachetime && $wgCacheEpoch <= $cachetime );
- wfDebug( __METHOD__ . ": cachetime $cachetime, touched '{$timestamp}' epoch {$wgCacheEpoch}, good $good\n" );
+ wfDebug( __METHOD__ .
+ ": cachetime $cachetime, touched '{$timestamp}' epoch {$wgCacheEpoch}, good $good\n" );
return $good;
}
public function fetchText() {
if ( $this->useGzip() ) {
$fh = gzopen( $this->cachePath(), 'rb' );
+
return stream_get_contents( $fh );
} else {
return file_get_contents( $this->cachePath() );
if ( !file_put_contents( $this->cachePath(), $text, LOCK_EX ) ) {
wfDebug( __METHOD__ . "() failed saving " . $this->cachePath() . "\n" );
$this->mCached = null;
+
return false;
}
$this->mCached = true;
+
return $text;
}
*/
public function getMissesRecent() {
global $wgMemc;
+
return self::MISS_FACTOR * $wgMemc->get( $this->cacheMissKey() );
}
if ( $that === null ) {
$that = new self();
}
+
return $that;
}
- protected function __construct() {}
+ protected function __construct() {
+ }
/**
* Returns the default gender option in this wiki.
if ( $this->default === null ) {
$this->default = User::getDefaultOption( 'gender' );
}
+
return $this->default;
}
$this->misses++;
wfDebug( __METHOD__ . ": too many misses, returning default onwards\n" );
}
- return $this->getDefault();
+ return $this->getDefault();
} else {
$this->misses++;
$this->doQuery( $username, $caller );
if ( $indexSlash !== false ) {
$username = substr( $username, 0, $indexSlash );
}
+
// normalize underscore/spaces
return strtr( $username, '_', ' ' );
}
}
if ( $wgShowIPinHeader || $wgDebugToolbar ) {
wfDebug( "HTML file cache skipped. Either \$wgShowIPinHeader and/or \$wgDebugToolbar on\n" );
+
return false;
}
} elseif ( $query === 'maxage' || $query === 'smaxage' ) {
continue;
}
+
return false;
}
$user = $context->getUser();
// and extensions for auto-detecting user language.
$ulang = $context->getLanguage()->getCode();
$clang = $wgContLang->getCode();
+
// Check that there are no other sources of variation
return !$user->getId() && !$user->getNewtalk() && $ulang == $clang;
}
// @todo Ugly wfClientAcceptsGzip() function - use context!
if ( wfClientAcceptsGzip() ) {
header( 'Content-Encoding: gzip' );
+
return $compressed;
} else {
return $text;
/**
* 2-d array, first index namespace, second index dbkey, value arbitrary
*/
- var $data = array();
+ public $data = array();
/**
* For debugging which method is using this class.
*/
public function execute() {
$linkCache = LinkCache::singleton();
+
return $this->executeInto( $linkCache );
}
$this->doGenderQuery();
$ids = $this->addResultToCache( $cache, $res );
wfProfileOut( __METHOD__ );
+
return $ids;
}
$ids[$title->getPrefixedDBkey()] = 0;
}
}
+
return $ids;
}
}
$res = $dbr->select( $table, $fields, $conds, $caller );
wfProfileOut( __METHOD__ );
+
return $res;
}
$genderCache = GenderCache::singleton();
$genderCache->doLinkBatch( $this->data, $this->caller );
+
return true;
}
return self::$instance;
}
self::$instance = new LinkCache;
+
return self::$instance;
}
/**
* Add a link for the title to the link cache
*
- * @param $id Integer: page's ID
- * @param $title Title object
- * @param $len Integer: text's length
- * @param $redir Integer: whether the page is a redirect
- * @param $revision Integer: latest revision's ID
- * @param $model Integer: latest revision's content model ID
+ * @param int $id Page's ID
+ * @param Title $title
+ * @param int $len Text's length
+ * @param int $redir Whether the page is a redirect
+ * @param int $revision Latest revision's ID
+ * @param int $model Latest revision's content model ID
*/
- public function addGoodLinkObj( $id, $title, $len = -1, $redir = null, $revision = false, $model = false ) {
+ public function addGoodLinkObj( $id, $title, $len = -1, $redir = null,
+ $revision = 0, $model = 0
+ ) {
$dbkey = $title->getPrefixedDBkey();
- $this->mGoodLinks[$dbkey] = intval( $id );
+ $this->mGoodLinks[$dbkey] = (int)$id;
$this->mGoodLinkFields[$dbkey] = array(
- 'length' => intval( $len ),
- 'redirect' => intval( $redir ),
- 'revision' => intval( $revision ),
- 'model' => intval( $model ) );
+ 'length' => (int)$len,
+ 'redirect' => (int)$redir,
+ 'revision' => (int)$revision,
+ 'model' => (int)$model
+ );
}
/**
$key = $nt->getPrefixedDBkey();
if ( $this->isBadLink( $key ) || $nt->isExternal() ) {
wfProfileOut( __METHOD__ );
+
return 0;
}
$id = $this->getGoodLinkID( $key );
if ( $id != 0 ) {
wfProfileOut( __METHOD__ );
+
return $id;
}
if ( $key === '' ) {
wfProfileOut( __METHOD__ );
+
return 0;
}
}
wfProfileOut( __METHOD__ );
+
return $id;
}
*/
class LocalisationCache {
/** Configuration associative array */
- var $conf;
+ private $conf;
/**
* True if recaching should only be done on an explicit call to recache().
* Setting this reduces the overhead of cache freshness checking, which
* requires doing a stat() for every extension i18n file.
*/
- var $manualRecache = false;
+ private $manualRecache = false;
/**
* True to treat all files as expired until they are regenerated by this object.
*/
- var $forceRecache = false;
+ private $forceRecache = false;
/**
* The cache data. 3-d array, where the first key is the language code,
* an item specific subkey index. Some items are not arrays and so for those
* items, there are no subkeys.
*/
- var $data = array();
+ protected $data = array();
/**
* The persistent store object. An instance of LCStore.
*
* @var LCStore
*/
- var $store;
+ private $store;
/**
* A 2-d associative array, code/key, where presence indicates that the item
* For split items, if set, this indicates that all of the subitems have been
* loaded.
*/
- var $loadedItems = array();
+ private $loadedItems = array();
/**
* A 3-d associative array, code/key/subkey, where presence indicates that
* the subitem is loaded. Only used for the split items, i.e. messages.
*/
- var $loadedSubitems = array();
+ private $loadedSubitems = array();
/**
* An array where presence of a key indicates that that language has been
* initialised. Initialisation includes checking for cache expiry and doing
* any necessary updates.
*/
- var $initialisedLangs = array();
+ private $initialisedLangs = array();
/**
* An array mapping non-existent pseudo-languages to fallback languages. This
* is filled by initShallowFallback() when data is requested from a language
* that lacks a Messages*.php file.
*/
- var $shallowFallbacks = array();
+ private $shallowFallbacks = array();
/**
* An array where the keys are codes that have been recached by this instance.
*/
- var $recachedLangs = array();
+ private $recachedLangs = array();
/**
* All item keys
* Associative array of cached plural rules. The key is the language code,
* the value is an array of plural rules for that language.
*/
- var $pluralRules = null;
+ private $pluralRules = null;
/**
* Associative array of cached plural rule types. The key is the language
* example, {{plural:count|wordform1|wordform2|wordform3}}, rather than
* {{plural:count|one=wordform1|two=wordform2|many=wordform3}}.
*/
- var $pluralRuleTypes = null;
+ private $pluralRuleTypes = null;
- var $mergeableKeys = null;
+ private $mergeableKeys = null;
/**
* Constructor.
switch ( $conf['store'] ) {
case 'files':
case 'file':
- $storeClass = 'LCStore_CDB';
+ $storeClass = 'LCStoreCDB';
break;
case 'db':
- $storeClass = 'LCStore_DB';
+ $storeClass = 'LCStoreDB';
break;
case 'accel':
- $storeClass = 'LCStore_Accel';
+ $storeClass = 'LCStoreAccel';
break;
case 'detect':
- $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
+ $storeClass = $wgCacheDirectory ? 'LCStoreCDB' : 'LCStoreDB';
break;
default:
throw new MWException(
self::$magicWordKeys
) );
}
+
return isset( $this->mergeableKeys[$key] );
}
*/
public function getSubitem( $code, $key, $subkey ) {
if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
- !isset( $this->loadedItems[$code][$key] ) ) {
+ !isset( $this->loadedItems[$code][$key] )
+ ) {
wfProfileIn( __METHOD__ . '-load' );
$this->loadSubitem( $code, $key, $subkey );
wfProfileOut( __METHOD__ . '-load' );
if ( isset( $this->shallowFallbacks[$code] ) ) {
$this->loadItem( $this->shallowFallbacks[$code], $key );
+
return;
}
protected function loadSubitem( $code, $key, $subkey ) {
if ( !in_array( $key, self::$splitKeys ) ) {
$this->loadItem( $code, $key );
+
return;
}
// Check to see if initLanguage() loaded it for us
if ( isset( $this->loadedItems[$code][$key] ) ||
- isset( $this->loadedSubitems[$code][$key][$subkey] ) ) {
+ isset( $this->loadedSubitems[$code][$key][$subkey] )
+ ) {
return;
}
if ( isset( $this->shallowFallbacks[$code] ) ) {
$this->loadSubitem( $this->shallowFallbacks[$code], $key, $subkey );
+
return;
}
public function isExpired( $code ) {
if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
wfDebug( __METHOD__ . "($code): forced reload\n" );
+
return true;
}
$deps = $this->store->get( $code, 'deps' );
$keys = $this->store->get( $code, 'list' );
$preload = $this->store->get( $code, 'preload' );
- // Different keys may expire separately, at least in LCStore_Accel
+ // Different keys may expire separately, at least in LCStoreAccel
if ( $deps === null || $keys === null || $preload === null ) {
wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
+
return true;
}
if ( !$dep instanceof CacheDependency || $dep->isExpired() ) {
wfDebug( __METHOD__ . "($code): cache for $code expired due to " .
get_class( $dep ) . "\n" );
+
return true;
}
}
# If the code is of the wrong form for a Messages*.php file, do a shallow fallback
if ( !Language::isValidBuiltInCode( $code ) ) {
$this->initShallowFallback( $code, 'en' );
+
return;
}
} else {
$this->initShallowFallback( $code, 'en' );
}
+
return;
}
'Please run maintenance/rebuildLocalisationCache.php.' );
}
$this->initShallowFallback( $code, 'en' );
+
return;
} else {
throw new MWException( 'Invalid or missing localisation cache.' );
throw new MWException( __METHOD__ . ": Invalid file type: $_fileType" );
}
wfProfileOut( __METHOD__ );
+
return $data;
}
$compiledRules = CLDRPluralRuleEvaluator::compile( $rules );
} catch ( CLDRPluralRuleError $e ) {
wfDebugLog( 'l10n', $e->getMessage() . "\n" );
+
return array();
}
+
return $compiledRules;
}
$fileName = Language::getMessagesFileName( $code );
if ( !file_exists( $fileName ) ) {
wfProfileOut( __METHOD__ );
+
return false;
}
$deps['plurals-mw'] = new FileDependency( "$IP/languages/data/plurals-mediawiki.xml" );
wfProfileOut( __METHOD__ );
+
return $data;
}
foreach ( $data as $key => $value ) {
$this->mergeItem( $key, $coreData[$key], $value );
}
-
}
# Fill in the fallback if it's not there already
# Clear out the MessageBlobStore
# HACK: If using a null (i.e. disabled) storage backend, we
# can't write to the MessageBlobStore either
- if ( !$this->store instanceof LCStore_Null ) {
+ if ( !$this->store instanceof LCStoreNull ) {
MessageBlobStore::clear();
}
* Disable the storage backend
*/
public function disableBackend() {
- $this->store = new LCStore_Null;
+ $this->store = new LCStoreNull;
$this->manualRecache = false;
}
}
* This will work if one of XCache, WinCache or APC cacher is configured.
* (See ObjectCache.php)
*/
-class LCStore_Accel implements LCStore {
- var $currentLang;
- var $keys;
+class LCStoreAccel implements LCStore {
+ private $currentLang;
+ private $keys;
public function __construct() {
$this->cache = wfGetCache( CACHE_ACCEL );
public function get( $code, $key ) {
$k = wfMemcKey( 'l10n', $code, 'k', $key );
$r = $this->cache->get( $k );
+
return $r === false ? null : $r;
}
* LCStore implementation which uses the standard DB functions to store data.
* This will work on any MediaWiki installation.
*/
-class LCStore_DB implements LCStore {
- var $currentLang;
- var $writesDone = false;
+class LCStoreDB implements LCStore {
+ private $currentLang;
+ private $writesDone = false;
/**
* @var DatabaseBase
*/
- var $dbw;
- var $batch;
- var $readOnly = false;
+ private $dbw;
+ private $batch;
+ private $readOnly = false;
public function get( $code, $key ) {
if ( $this->writesDone ) {
if ( $this->dbw->wasReadOnlyError() ) {
$this->readOnly = true;
$this->dbw->rollback( __METHOD__ );
+
return;
} else {
throw $e;
*
* See Cdb.php and http://cr.yp.to/cdb.html
*/
-class LCStore_CDB implements LCStore {
- var $readers, $writer, $currentLang, $directory;
+class LCStoreCDB implements LCStore {
+ private $readers;
+ private $writer;
+ private $currentLang;
+ private $directory;
function __construct( $conf = array() ) {
global $wgCacheDirectory;
if ( $value === false ) {
return null;
}
+
return unserialize( $value );
}
}
if ( strval( $code ) === '' || strpos( $code, '/' ) !== false ) {
throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
}
+
return "{$this->directory}/l10n_cache-$code.cdb";
}
}
/**
* Null store backend, used to avoid DB errors during install
*/
-class LCStore_Null implements LCStore {
+class LCStoreNull implements LCStore {
public function get( $code, $key ) {
return null;
}
- public function startWrite( $code ) {}
- public function finishWrite() {}
- public function set( $key, $value ) {}
+ public function startWrite( $code ) {
+ }
+
+ public function finishWrite() {
+ }
+
+ public function set( $key, $value ) {
+ }
}
/**
* A localisation cache optimised for loading large amounts of data for many
* languages. Used by rebuildLocalisationCache.php.
*/
-class LocalisationCache_BulkLoad extends LocalisationCache {
+class LocalisationCacheBulkLoad extends LocalisationCache {
/**
* A cache of the contents of data files.
* Core files are serialized to avoid using ~1GB of RAM during a recache.
*/
- var $fileCache = array();
+ private $fileCache = array();
/**
* Most recently used languages. Uses the linked-list aspect of PHP hashtables
* to keep the most recently used language codes at the end of the array, and
* the language codes that are ready to be deleted at the beginning.
*/
- var $mruLangs = array();
+ private $mruLangs = array();
/**
* Maximum number of languages that may be loaded into $this->data
*/
- var $maxLoadedLangs = 10;
+ private $maxLoadedLangs = 10;
/**
* @param $fileName
public function getItem( $code, $key ) {
unset( $this->mruLangs[$code] );
$this->mruLangs[$code] = true;
+
return parent::getItem( $code, $key );
}
public function getSubitem( $code, $key, $subkey ) {
unset( $this->mruLangs[$code] );
$this->mruLangs[$code] = true;
+
return parent::getSubitem( $code, $key, $subkey );
}
$wgMsgCacheExpiry
);
}
+
return self::$instance;
}
$this->mParserOptions = new ParserOptions;
$this->mParserOptions->setEditSection( false );
}
+
return $this->mParserOptions;
}
$serialized .= fread( $file, 100000 );
}
fclose( $file );
+
return unserialize( $serialized );
} else {
fclose( $file );
+
return false; // Wrong hash
}
}
if ( !$file ) {
wfDebug( "Unable to open local cache file for writing\n" );
+
return;
}
wfDebug( __METHOD__ . ": disabled\n" );
$shownDisabled = true;
}
+
return true;
}
$info = implode( ', ', $where );
wfDebug( __METHOD__ . ": Loading $code... $info\n" );
wfProfileOut( __METHOD__ );
+
return $success;
}
$cache['VERSION'] = MSG_CACHE_VERSION;
$cache['EXPIRY'] = wfTimestamp( TS_MW, time() + $this->mExpiry );
wfProfileOut( __METHOD__ );
+
return $cache;
}
if ( $this->mDisable ) {
wfProfileOut( __METHOD__ );
+
return;
}
if ( wfTimestampNow() >= $cache['EXPIRY'] ) {
return true;
}
+
return false;
}
}
wfProfileOut( __METHOD__ );
+
return $success;
}
* "msg/lang".
*
* @throws MWException when given an invalid key
- * @return string|bool False if the message doesn't exist, otherwise the message (which can be empty)
+ * @return string|bool False if the message doesn't exist, otherwise the
+ * message (which can be empty)
*/
function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) {
global $wgContLang;
// Loop through each language in the fallback list until we find something useful
$lang = wfGetLangObj( $langcode );
- $message = $this->getMessageFromFallbackChain( $lang, $lckey, $uckey, !$this->mDisable && $useDB );
+ $message = $this->getMessageFromFallbackChain(
+ $lang,
+ $lckey,
+ $uckey,
+ !$this->mDisable && $useDB
+ );
// If we still have no message, maybe the key was in fact a full key so try that
if ( $message === false ) {
return $message;
}
- list( $fallbackChain, $siteFallbackChain ) = Language::getFallbacksIncludingSiteLanguage( $langcode );
+ list( $fallbackChain, $siteFallbackChain ) =
+ Language::getFallbacksIncludingSiteLanguage( $langcode );
// Next try checking the database for all of the fallback languages of the requested language.
if ( $useDB ) {
if ( $entry ) {
if ( substr( $entry, 0, 1 ) === ' ' ) {
$this->mCache[$code][$title] = $entry;
+
// The message exists, so make sure a string
// is returned.
return (string)substr( $entry, 1 );
} elseif ( $entry === '!NONEXISTENT' ) {
$this->mCache[$code][$title] = '!NONEXISTENT';
+
return false;
} else {
# Corrupt/obsolete entry, delete it
$this->mInParser = false;
$popts->setUserLang( $userlang );
}
+
return $message;
}
$this->mParser = clone $wgParser;
}
}
+
return $this->mParser;
}
$this->mInParser = false;
wfProfileOut( __METHOD__ );
+
return $res;
}
}
$message = implode( '/', $pieces );
+
return array( $message, $lang );
}
unset( $cache['EXPIRY'] );
// Remove any !NONEXISTENT keys
$cache = array_diff( $cache, array( '!NONEXISTENT' ) );
+
// Keys may appear with a capital first letter. lcfirst them.
return array_map( array( $wgContLang, 'lcfirst' ), array_keys( $cache ) );
}
if ( isset( $this->cache[$key][$prop] ) ) {
return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
}
+
return false;
}
} elseif ( $query === 'debug' && $val === 'false' ) {
continue;
}
+
return false;
}
+
return true; // cacheable
}
$this->getMissesRecent() >= self::MISS_THRESHOLD // many misses
);
}
+
return $this->mCacheWorthy;
}
}
if ( $instance === null ) {
$instance = new self();
}
+
return $instance;
}
- protected function __construct() {}
+ protected function __construct() {
+ }
/**
* Get a property of a user based on their user ID
wfDebug( __METHOD__ . ": querying DB for prop '$prop' for user ID '$userId'.\n" );
$this->doQuery( array( $userId ) ); // cache miss
}
+
return isset( $this->cache[$userId][$prop] )
? $this->cache[$userId][$prop]
: false; // user does not exist?
*/
class ChangesList extends ContextSource {
-
/**
* @var Skin
*/
public $skin;
protected $watchlist = false;
-
+ protected $lastdate;
protected $message;
+ protected $rc_cache;
+ protected $rcCacheIndex;
+ protected $rclistOpen;
+ protected $rcMoveIndex;
/**
* Changeslist constructor
*
- * @param $obj Skin or IContextSource
+ * @param Skin|IContextSource $obj
*/
public function __construct( $obj ) {
if ( $obj instanceof IContextSource ) {
* Fetch an appropriate changes list class for the specified context
* Some users might want to use an enhanced list format, for instance
*
- * @param $context IContextSource to use
- * @return ChangesList|EnhancedChangesList|OldChangesList derivative
+ * @param IContextSource $context
+ * @return ChangesList derivative
*/
public static function newFromContext( IContextSource $context ) {
$user = $context->getUser();
$list = null;
if ( wfRunHooks( 'FetchChangesList', array( $user, &$sk, &$list ) ) ) {
$new = $context->getRequest()->getBool( 'enhanced', $user->getOption( 'usenewrc' ) );
+
return $new ? new EnhancedChangesList( $context ) : new OldChangesList( $context );
} else {
return $list;
* Returns the appropriate flags for new page, minor change and patrolling
* @param array $flags Associative array of 'flag' => Bool
* @param string $nothing to use for empty space
- * @return String
+ * @return string
*/
public function recentChangesFlags( $flags, $nothing = ' ' ) {
global $wgRecentChangesFlags;
? self::flag( $flag )
: $nothing;
}
+
return $f;
}
* "!" respectively, plus it will have an appropriate title and class.
*
* @param string $flag One key of $wgRecentChangesFlags
- * @return String: Raw HTML
+ * @return string Raw HTML
*/
public static function flag( $flag ) {
static $flagInfos = null;
$flag = $map[$flag];
}
- return "<abbr class='" . $flagInfos[$flag]['class'] . "' title='" . $flagInfos[$flag]['title'] . "'>" .
- $flagInfos[$flag]['letter'] .
+ return "<abbr class='" . $flagInfos[$flag]['class'] . "' title='" .
+ $flagInfos[$flag]['title'] . "'>" . $flagInfos[$flag]['letter'] .
'</abbr>';
}
/**
* Returns text for the start of the tabular part of RC
- * @return String
+ * @return string
*/
public function beginRecentChangesList() {
$this->rc_cache = array();
$this->lastdate = '';
$this->rclistOpen = false;
$this->getOutput()->addModuleStyles( 'mediawiki.special.changeslist' );
+
return '';
}
/**
* Show formatted char difference
- * @param $old Integer: bytes
- * @param $new Integer: bytes
- * @param $context IContextSource context to use
- * @return String
+ * @param int $old Number of bytes
+ * @param int $new Number of bytes
+ * @param IContextSource $context
+ * @return string
*/
public static function showCharacterDifference( $old, $new, IContextSource $context = null ) {
global $wgRCChangedSizeThreshold, $wgMiserMode;
if ( $szdiff === 0 ) {
$formattedSizeClass = 'mw-plusminus-null';
- }
- if ( $szdiff > 0 ) {
+ } elseif ( $szdiff > 0 ) {
$formattedSize = '+' . $formattedSize;
$formattedSizeClass = 'mw-plusminus-pos';
- }
- if ( $szdiff < 0 ) {
+ } else {
$formattedSizeClass = 'mw-plusminus-neg';
}
'action' => 'history'
)
);
- $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' <span class="mw-changeslist-separator">. .</span> ';
+ // @todo FIXME: Hard coded ". .". Is there a message for this? Should there be?
+ $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() .
+ ' <span class="mw-changeslist-separator">. .</span> ';
}
/**
* @return string HTML fragment
*/
public function getTimestamp( $rc ) {
+ // @todo FIXME: Hard coded ". .". Is there a message for this? Should there be?
return $this->message['semicolon-separator'] . '<span class="mw-changeslist-date">' .
- $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() ) . '</span> <span class="mw-changeslist-separator">. .</span> ';
+ $this->getLanguage()->userTime(
+ $rc->mAttribs['rc_timestamp'],
+ $this->getUser()
+ ) . '</span> <span class="mw-changeslist-separator">. .</span> ';
}
/**
*/
public function insertUserRelatedLinks( &$s, &$rc ) {
if ( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
- $s .= ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+ $s .= ' <span class="history-deleted">' .
+ $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
} else {
$s .= $this->getLanguage()->getDirMark() . Linker::userLink( $rc->mAttribs['rc_user'],
$rc->mAttribs['rc_user_text'] );
$formatter->setContext( $this->getContext() );
$formatter->setShowUserToolLinks( true );
$mark = $this->getLanguage()->getDirMark();
+
return $formatter->getActionText() . " $mark" . $formatter->getComment();
}
public function insertComment( $rc ) {
if ( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
if ( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
- return ' <span class="history-deleted">' . $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
+ return ' <span class="history-deleted">' .
+ $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
} else {
return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
}
}
+
return '';
}
/**
* Returns the string which indicates the number of watching users
+ * @param int $count Number of user watching a page
* @return string
*/
protected function numberofWatchingusers( $count ) {
static $cache = array();
if ( $count > 0 ) {
if ( !isset( $cache[$count] ) ) {
- $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )->numParams( $count )->escaped();
+ $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )
+ ->numParams( $count )->escaped();
}
+
return $cache[$count];
} else {
return '';
/**
* Determine if said field of a revision is hidden
- * @param $rc RCCacheEntry
- * @param $field Integer: one of DELETED_* bitfield constants
- * @return Boolean
+ * @param RCCacheEntry|RecentChange $rc
+ * @param int $field One of DELETED_* bitfield constants
+ * @return bool
*/
public static function isDeleted( $rc, $field ) {
return ( $rc->mAttribs['rc_deleted'] & $field ) == $field;
/**
* Determine if the current user is allowed to view a particular
* field of this revision, if it's marked as deleted.
- * @param $rc RCCacheEntry
- * @param $field Integer
- * @param $user User object to check, or null to use $wgUser
- * @return Boolean
+ * @param RCCacheEntry|RecentChange $rc
+ * @param int $field
+ * @param User $user User object to check, or null to use $wgUser
+ * @return bool
*/
public static function userCan( $rc, $field, User $user = null ) {
if ( $rc->mAttribs['rc_type'] == RC_LOG ) {
* @param $rc RecentChange
*/
public function insertRollback( &$s, &$rc ) {
- if ( $rc->mAttribs['rc_type'] == RC_EDIT && $rc->mAttribs['rc_this_oldid'] && $rc->mAttribs['rc_cur_id'] ) {
+ if ( $rc->mAttribs['rc_type'] == RC_EDIT
+ && $rc->mAttribs['rc_this_oldid']
+ && $rc->mAttribs['rc_cur_id']
+ ) {
$page = $rc->getTitle();
/** Check for rollback and edit permissions, disallow special pages, and only
- * show a link on the top-most revision */
- if ( $this->getUser()->isAllowed( 'rollback' ) && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid'] )
- {
+ * show a link on the top-most revision */
+ if ( $this->getUser()->isAllowed( 'rollback' )
+ && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid']
+ ) {
$rev = new Revision( array(
'title' => $page,
'id' => $rc->mAttribs['rc_this_oldid'],
return;
}
- list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( $rc->mAttribs['ts_tags'], 'changeslist' );
+ list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow(
+ $rc->mAttribs['ts_tags'],
+ 'changeslist'
+ );
$classes = array_merge( $classes, $newClasses );
$s .= ' ' . $tagSummary;
}
$logtitle = SpecialPage::getTitleFor( 'Log', $logType );
$logpage = new LogPage( $logType );
$logname = $logpage->getName()->escaped();
- $clink = $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped();
+ $clink = $this->msg( 'parentheses' )
+ ->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped();
} else {
$clink = Linker::link( $cacheEntry->getTitle() );
}
# Make user links
if ( $this->isDeleted( $cacheEntry, Revision::DELETED_USER ) ) {
- $cacheEntry->userlink = ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+ $cacheEntry->userlink = ' <span class="history-deleted">' .
+ $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
} else {
$cacheEntry->userlink = Linker::userLink(
$cacheEntry->mAttribs['rc_user'],
if ( $block[0]->mAttribs['rc_log_type'] ) {
# Log entry
$classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
- . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] );
+ . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] );
} else {
$classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns'
- . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
+ . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
}
$classes[] = $block[0]->watched && $block[0]->mAttribs['rc_timestamp'] >= $block[0]->watched
? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
$text = $userlink;
$text .= $this->getLanguage()->getDirMark();
if ( $count > 1 ) {
- $text .= ' ' . $this->msg( 'parentheses' )->rawParams( $this->getLanguage()->formatNum( $count ) . '×' )->escaped();
+ // @todo FIXME: Hardcoded '×'. Should be a message.
+ $formattedCount = $this->getLanguage()->formatNum( $count ) . '×';
+ $text .= ' ' . $this->msg( 'parentheses' )->rawParams( $formattedCount )->escaped();
}
array_push( $users, $text );
}
implode( $this->message['semicolon-separator'], $users )
)->escaped() . '</span>';
- $tl = '<span class="mw-collapsible-toggle mw-collapsible-arrow mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>';
+ $tl = '<span class="mw-collapsible-toggle mw-collapsible-arrow ' .
+ 'mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>';
$r .= "<td>$tl</td>";
# Main line
# Article link
if ( $namehidden ) {
- $r .= ' <span class="history-deleted">' . $this->msg( 'rev-deleted-event' )->escaped() . '</span>';
+ $r .= ' <span class="history-deleted">' .
+ $this->msg( 'rev-deleted-event' )->escaped() . '</span>';
} elseif ( $allLogs ) {
$r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
} else {
$r .= $users;
$r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
+ $r .= '</td></tr>';
# Sub-entries
foreach ( $block as $rcObj ) {
} else {
$link = Linker::linkKnown(
- $rcObj->getTitle(),
- $rcObj->timestamp,
- array(),
- $params
- );
+ $rcObj->getTitle(),
+ $rcObj->timestamp,
+ array(),
+ $params
+ );
if ( $this->isDeleted( $rcObj, Revision::DELETED_TEXT ) ) {
$link = '<span class="history-deleted">' . $link . '</span> ';
}
$r .= $link . '</span>';
if ( !$type == RC_LOG || $type == RC_NEW ) {
- $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->curlink . $this->message['pipe-separator'] . $rcObj->lastlink )->escaped();
+ $r .= ' ' . $this->msg( 'parentheses' )->rawParams(
+ $rcObj->curlink .
+ $this->message['pipe-separator'] .
+ $rcObj->lastlink
+ )->escaped();
}
$r .= ' <span class="mw-changeslist-separator">. .</span> ';
$encUrl = htmlspecialchars( $wgStylePath . '/common/images/Arr_' . $dir . '.png' );
$encAlt = htmlspecialchars( $alt );
$encTitle = htmlspecialchars( $title );
+
return "<img src=\"$encUrl\" width=\"12\" height=\"12\" alt=\"$encAlt\" title=\"$encTitle\" />";
}
*/
protected function sideArrow() {
$dir = $this->getLanguage()->isRTL() ? 'l' : 'r';
+
return $this->arrow( $dir, '+', $this->msg( 'rc-enhanced-expand' )->text() );
}
if ( $logType ) {
# Log entry
$classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
- . $logType . '-' . $rcObj->mAttribs['rc_title'] );
+ . $logType . '-' . $rcObj->mAttribs['rc_title'] );
} else {
$classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
- $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
+ $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
}
$classes[] = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
$logPage = new LogPage( $logType );
$logTitle = SpecialPage::getTitleFor( 'Log', $logType );
$logName = $logPage->getName()->escaped();
- $r .= $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $logTitle, $logName ) )->escaped();
+ $r .= $this->msg( 'parentheses' )
+ ->rawParams( Linker::linkKnown( $logTitle, $logName ) )->escaped();
} else {
$this->insertArticleLink( $r, $rcObj, $rcObj->unpatrolled, $rcObj->watched );
}
# Diff and hist links
if ( $type != RC_LOG ) {
$query['action'] = 'history';
- $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->difflink . $this->message['pipe-separator'] . Linker::linkKnown(
- $rcObj->getTitle(),
- $this->message['hist'],
- array(),
- $query
- ) )->escaped();
+ $r .= ' ' . $this->msg( 'parentheses' )
+ ->rawParams( $rcObj->difflink . $this->message['pipe-separator'] . Linker::linkKnown(
+ $rcObj->getTitle(),
+ $this->message['hist'],
+ array(),
+ $query
+ ) )->escaped();
}
$r .= ' <span class="mw-changeslist-separator">. .</span> ';
# Character diff
* @return string
*/
protected function recentChangesBlock() {
- if ( count ( $this->rc_cache ) == 0 ) {
+ if ( count( $this->rc_cache ) == 0 ) {
return '';
}
public function endRecentChangesList() {
return $this->recentChangesBlock() . parent::endRecentChangesList();
}
-
}
* @file
*/
class OldChangesList extends ChangesList {
-
/**
* Format a line using the old system (aka without any javascript).
*
- * @param $rc RecentChange, passed by reference
+ * @param RecentChange $rc Passed by reference
* @param bool $watched (default false)
* @param int $linenumber (default null)
*
}
if ( $this->watchlist ) {
- $classes[] = Sanitizer::escapeClass( 'watchlist-' . $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+ $classes[] = Sanitizer::escapeClass( 'watchlist-' .
+ $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
}
if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc, &$classes ) ) ) {
wfProfileOut( __METHOD__ );
+
return false;
}
wfProfileOut( __METHOD__ );
+
return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $s . "</li>\n";
}
}
* @file
*/
class RCCacheEntry extends RecentChange {
- var $secureName, $link;
- var $curlink, $difflink, $lastlink, $usertalklink, $versionlink;
- var $userlink, $timestamp, $watched;
+ public $curlink;
+ public $difflink;
+ public $lastlink;
+ public $link;
+ public $timestamp;
+ public $unpatrolled;
+ public $userlink;
+ public $usertalklink;
+ public $watched;
/**
* @param $rc RecentChange
$rc2 = new RCCacheEntry;
$rc2->mAttribs = $rc->mAttribs;
$rc2->mExtra = $rc->mExtra;
+
return $rc2;
}
}
* mAttribs:
* rc_id id of the row in the recentchanges table
* rc_timestamp time the entry was made
- * rc_cur_time timestamp on the cur row
* rc_namespace namespace #
* rc_title non-prefixed db key
* rc_type is new entry, used to determine whether updating is necessary
* @todo document functions and variables
*/
class RecentChange {
-
// Constants for the rc_source field. Extensions may also have
// their own source constants.
const SRC_EDIT = 'mw.edit';
const SRC_LOG = 'mw.log';
const SRC_EXTERNAL = 'mw.external'; // obsolete
- var $mAttribs = array(), $mExtra = array();
+ public $mAttribs = array();
+ public $mExtra = array();
/**
* @var Title
*/
- var $mTitle = false;
+ public $mTitle = false;
/**
* @var User
*/
private $mPerformer = false;
+ public $numberofWatchingusers = 0; # Dummy to prevent error message in SpecialRecentchangeslinked
+ public $notificationtimestamp;
+
/**
- * @var Title
+ * @var int Line number of recent change. Default -1.
*/
- var $mMovedToTitle = false;
- var $numberofWatchingusers = 0; # Dummy to prevent error message in SpecialRecentchangeslinked
- var $notificationtimestamp;
+ public $counter = -1;
# Factory methods
public static function newFromRow( $row ) {
$rc = new RecentChange;
$rc->loadFromRow( $row );
+
return $rc;
}
/**
+ * No uses left in Gerrit on 2013-11-19.
* @deprecated in 1.22
* @param $row
* @return RecentChange
$rc->loadFromCurRow( $row );
$rc->notificationtimestamp = false;
$rc->numberofWatchingusers = false;
+
return $rc;
}
return array(
'rc_id',
'rc_timestamp',
- 'rc_cur_time',
'rc_user',
'rc_user_text',
'rc_namespace',
if ( $this->mTitle === false ) {
$this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
}
+
return $this->mTitle;
}
$this->mPerformer = User::newFromName( $this->mAttribs['rc_user_text'], false );
}
}
+
return $this->mPerformer;
}
# Fixup database timestamps
$this->mAttribs['rc_timestamp'] = $dbw->timestamp( $this->mAttribs['rc_timestamp'] );
- $this->mAttribs['rc_cur_time'] = $dbw->timestamp( $this->mAttribs['rc_cur_time'] );
$this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' );
## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
'add_interwiki_prefix' => $wgRC2UDPInterwikiPrefix,
);
- return $engine->send( $feed, $line );
+ $engine->send( $feed, $line );
}
/**
continue;
}
+ /** @var $formatter RCFeedFormatter */
$formatter = new $feed['formatter']();
$line = $formatter->getLine( $feed, $this, $actionComment );
/**
* Gets the stream engine object for a given URI from $wgRCEngines
*
- * @param $uri string URI to get the engine object for
+ * @param string $uri URI to get the engine object for
+ * @throws MWException
* @return object The engine object
*/
private static function getEngine( $uri ) {
*/
public static function cleanupForIRC( $text ) {
wfDeprecated( __METHOD__, '1.22' );
+
return IRCColourfulRCFeedFormatter::cleanupForIRC( $text );
}
if ( !$change instanceof RecentChange ) {
return null;
}
+
return $change->doMarkPatrolled( $wgUser, $auto );
}
/**
* Mark this RecentChange as patrolled
*
- * NOTE: Can also return 'rcpatroldisabled', 'hookaborted' and 'markedaspatrollederror-noautopatrol' as errors
+ * NOTE: Can also return 'rcpatroldisabled', 'hookaborted' and
+ * 'markedaspatrollederror-noautopatrol' as errors
* @param $user User object doing the action
* @param $auto Boolean: for automatic patrol
* @return array of permissions errors, see Title::getUserPermissionsErrors()
}
// Users without the 'autopatrol' right can't patrol their
// own revisions
- if ( $user->getName() == $this->getAttribute( 'rc_user_text' ) && !$user->isAllowed( 'autopatrol' ) ) {
+ if ( $user->getName() == $this->getAttribute( 'rc_user_text' )
+ && !$user->isAllowed( 'autopatrol' )
+ ) {
$errors[] = array( 'markedaspatrollederror-noautopatrol' );
}
if ( $errors ) {
// Log this patrol event
PatrolLog::record( $this, $auto, $user );
wfRunHooks( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) );
+
return array();
}
// Invalidate the page cache after the page has been patrolled
// to make sure that the Patrol link isn't visible any longer!
$this->getTitle()->invalidateCache();
+
return $dbw->affectedRows();
}
$rc->mTitle = $title;
$rc->mPerformer = $user;
$rc->mAttribs = array(
- 'rc_timestamp' => $timestamp,
- 'rc_cur_time' => $timestamp,
- 'rc_namespace' => $title->getNamespace(),
- 'rc_title' => $title->getDBkey(),
- 'rc_type' => RC_EDIT,
- 'rc_source' => self::SRC_EDIT,
- 'rc_minor' => $minor ? 1 : 0,
- 'rc_cur_id' => $title->getArticleID(),
- 'rc_user' => $user->getId(),
- 'rc_user_text' => $user->getName(),
- 'rc_comment' => $comment,
+ 'rc_timestamp' => $timestamp,
+ 'rc_namespace' => $title->getNamespace(),
+ 'rc_title' => $title->getDBkey(),
+ 'rc_type' => RC_EDIT,
+ 'rc_source' => self::SRC_EDIT,
+ 'rc_minor' => $minor ? 1 : 0,
+ 'rc_cur_id' => $title->getArticleID(),
+ 'rc_user' => $user->getId(),
+ 'rc_user_text' => $user->getName(),
+ 'rc_comment' => $comment,
'rc_this_oldid' => $newId,
'rc_last_oldid' => $oldId,
- 'rc_bot' => $bot ? 1 : 0,
- 'rc_ip' => self::checkIPAddress( $ip ),
- 'rc_patrolled' => intval( $patrol ),
- 'rc_new' => 0, # obsolete
- 'rc_old_len' => $oldSize,
- 'rc_new_len' => $newSize,
- 'rc_deleted' => 0,
- 'rc_logid' => 0,
- 'rc_log_type' => null,
+ 'rc_bot' => $bot ? 1 : 0,
+ 'rc_ip' => self::checkIPAddress( $ip ),
+ 'rc_patrolled' => intval( $patrol ),
+ 'rc_new' => 0, # obsolete
+ 'rc_old_len' => $oldSize,
+ 'rc_new_len' => $newSize,
+ 'rc_deleted' => 0,
+ 'rc_logid' => 0,
+ 'rc_log_type' => null,
'rc_log_action' => '',
- 'rc_params' => ''
+ 'rc_params' => ''
);
$rc->mExtra = array(
'prefixedDBkey' => $title->getPrefixedDBkey(),
'lastTimestamp' => $lastTimestamp,
- 'oldSize' => $oldSize,
- 'newSize' => $newSize,
- 'pageStatus' => 'changed'
+ 'oldSize' => $oldSize,
+ 'newSize' => $newSize,
+ 'pageStatus' => 'changed'
);
$rc->save();
+
return $rc;
}
$rc->mTitle = $title;
$rc->mPerformer = $user;
$rc->mAttribs = array(
- 'rc_timestamp' => $timestamp,
- 'rc_cur_time' => $timestamp,
- 'rc_namespace' => $title->getNamespace(),
- 'rc_title' => $title->getDBkey(),
- 'rc_type' => RC_NEW,
- 'rc_source' => self::SRC_NEW,
- 'rc_minor' => $minor ? 1 : 0,
- 'rc_cur_id' => $title->getArticleID(),
- 'rc_user' => $user->getId(),
- 'rc_user_text' => $user->getName(),
- 'rc_comment' => $comment,
- 'rc_this_oldid' => $newId,
- 'rc_last_oldid' => 0,
- 'rc_bot' => $bot ? 1 : 0,
- 'rc_ip' => self::checkIPAddress( $ip ),
- 'rc_patrolled' => intval( $patrol ),
- 'rc_new' => 1, # obsolete
- 'rc_old_len' => 0,
- 'rc_new_len' => $size,
- 'rc_deleted' => 0,
- 'rc_logid' => 0,
- 'rc_log_type' => null,
- 'rc_log_action' => '',
- 'rc_params' => ''
+ 'rc_timestamp' => $timestamp,
+ 'rc_namespace' => $title->getNamespace(),
+ 'rc_title' => $title->getDBkey(),
+ 'rc_type' => RC_NEW,
+ 'rc_source' => self::SRC_NEW,
+ 'rc_minor' => $minor ? 1 : 0,
+ 'rc_cur_id' => $title->getArticleID(),
+ 'rc_user' => $user->getId(),
+ 'rc_user_text' => $user->getName(),
+ 'rc_comment' => $comment,
+ 'rc_this_oldid' => $newId,
+ 'rc_last_oldid' => 0,
+ 'rc_bot' => $bot ? 1 : 0,
+ 'rc_ip' => self::checkIPAddress( $ip ),
+ 'rc_patrolled' => intval( $patrol ),
+ 'rc_new' => 1, # obsolete
+ 'rc_old_len' => 0,
+ 'rc_new_len' => $size,
+ 'rc_deleted' => 0,
+ 'rc_logid' => 0,
+ 'rc_log_type' => null,
+ 'rc_log_action' => '',
+ 'rc_params' => ''
);
$rc->mExtra = array(
'pageStatus' => 'created'
);
$rc->save();
+
return $rc;
}
* @return bool
*/
public static function notifyLog( $timestamp, &$title, &$user, $actionComment, $ip, $type,
- $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' )
- {
+ $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = ''
+ ) {
global $wgLogRestrictions;
+
# Don't add private logs to RC!
if ( isset( $wgLogRestrictions[$type] ) && $wgLogRestrictions[$type] != '*' ) {
return false;
$rc = self::newLogEntry( $timestamp, $title, $user, $actionComment, $ip, $type, $action,
$target, $logComment, $params, $newId, $actionCommentIRC );
$rc->save();
+
return true;
}
$rc->mTitle = $target;
$rc->mPerformer = $user;
$rc->mAttribs = array(
- 'rc_timestamp' => $timestamp,
- 'rc_cur_time' => $timestamp,
- 'rc_namespace' => $target->getNamespace(),
- 'rc_title' => $target->getDBkey(),
- 'rc_type' => RC_LOG,
- 'rc_source' => self::SRC_LOG,
- 'rc_minor' => 0,
- 'rc_cur_id' => $target->getArticleID(),
- 'rc_user' => $user->getId(),
- 'rc_user_text' => $user->getName(),
- 'rc_comment' => $logComment,
+ 'rc_timestamp' => $timestamp,
+ 'rc_namespace' => $target->getNamespace(),
+ 'rc_title' => $target->getDBkey(),
+ 'rc_type' => RC_LOG,
+ 'rc_source' => self::SRC_LOG,
+ 'rc_minor' => 0,
+ 'rc_cur_id' => $target->getArticleID(),
+ 'rc_user' => $user->getId(),
+ 'rc_user_text' => $user->getName(),
+ 'rc_comment' => $logComment,
'rc_this_oldid' => 0,
'rc_last_oldid' => 0,
- 'rc_bot' => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
- 'rc_ip' => self::checkIPAddress( $ip ),
- 'rc_patrolled' => 1,
- 'rc_new' => 0, # obsolete
- 'rc_old_len' => null,
- 'rc_new_len' => null,
- 'rc_deleted' => 0,
- 'rc_logid' => $newId,
- 'rc_log_type' => $type,
+ 'rc_bot' => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
+ 'rc_ip' => self::checkIPAddress( $ip ),
+ 'rc_patrolled' => 1,
+ 'rc_new' => 0, # obsolete
+ 'rc_old_len' => null,
+ 'rc_new_len' => null,
+ 'rc_deleted' => 0,
+ 'rc_logid' => $newId,
+ 'rc_log_type' => $type,
'rc_log_action' => $action,
- 'rc_params' => $params
+ 'rc_params' => $params
);
$rc->mExtra = array(
'prefixedDBkey' => $title->getPrefixedDBkey(),
'lastTimestamp' => 0,
'actionComment' => $actionComment, // the comment appended to the action, passed from LogPage
- 'pageStatus' => $pageStatus,
+ 'pageStatus' => $pageStatus,
'actionCommentIRC' => $actionCommentIRC
);
+
return $rc;
}
wfDeprecated( __METHOD__, '1.22' );
$this->mAttribs = array(
'rc_timestamp' => wfTimestamp( TS_MW, $row->rev_timestamp ),
- 'rc_cur_time' => $row->rev_timestamp,
'rc_user' => $row->rev_user,
'rc_user_text' => $row->rev_user_text,
'rc_namespace' => $row->page_namespace,
} else {
$trail = '';
}
+
return $trail;
}
if ( $old === null || $new === null ) {
return '';
}
+
return ChangesList::showCharacterDifference( $old, $new );
}
$method = __METHOD__;
$dbw = wfGetDB( DB_MASTER );
- $dbw->onTransactionIdle( function() use ( $dbw, $method ) {
+ $dbw->onTransactionIdle( function () use ( $dbw, $method ) {
global $wgRCMaxAge;
$cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
global $wgRequest;
if ( $ip ) {
if ( !IP::isIPAddress( $ip ) ) {
- throw new MWException( "Attempt to write \"" . $ip . "\" as an IP address into recent changes" );
+ throw new MWException( "Attempt to write \"" . $ip .
+ "\" as an IP address into recent changes" );
}
} else {
$ip = $wgRequest->getIP();
$ip = '';
}
}
+
return $ip;
}
*/
public static function isInRCLifespan( $timestamp, $tolerance = 0 ) {
global $wgRCMaxAge;
+
return wfTimestamp( TS_UNIX, $timestamp ) > time() - $tolerance - $wgRCMaxAge;
}
}
protected $serializer;
/** @} */
- /** @var integer Current idle pool size */
+ /** @var int Current idle pool size */
protected $idlePoolSize = 0;
- /** @var Array (server name => ((connection info array),...) */
+ /** @var array (server name => ((connection info array),...) */
protected $connections = array();
- /** @var Array (server name => UNIX timestamp) */
+ /** @var array (server name => UNIX timestamp) */
protected $downServers = array();
- /** @var Array (pool ID => RedisConnectionPool) */
+ /** @var array (pool ID => RedisConnectionPool) */
protected static $instances = array();
/** integer; seconds to cache servers as "down". */
/**
* @param array $options
+ * @throws MWException
*/
protected function __construct( array $options ) {
if ( !class_exists( 'Redis' ) ) {
}
/**
- * @param $options Array
- * @return Array
+ * @param array $options
+ * @return array
*/
protected static function applyDefaultConfig( array $options ) {
if ( !isset( $options['connectTimeout'] ) ) {
if ( !isset( $options['password'] ) ) {
$options['password'] = null;
}
+
return $options;
}
/**
- * @param $options Array
+ * @param array $options
* $options include:
* - connectTimeout : The timeout for new connections, in seconds.
* Optional, default is 1 second.
self::$instances[$id] = new self( $options );
wfDebug( "Creating a new " . __CLASS__ . " instance with id $id." );
}
+
return self::$instances[$id];
}
// Server is dead
wfDebug( "server $server is marked down for another " .
( $this->downServers[$server] - $now ) . " seconds, can't get connection" );
+
return false;
}
}
if ( $connection['free'] ) {
$connection['free'] = false;
--$this->idlePoolSize;
+
return new RedisConnRef( $this, $server, $connection['conn'] );
}
}
wfDebugLog( 'redis', "Could not connect to server $server" );
// Mark server down for some time to avoid further timeouts
$this->downServers[$server] = time() + self::SERVER_DOWN_TTL;
+
return false;
}
if ( $this->password !== null ) {
} catch ( RedisException $e ) {
$this->downServers[$server] = time() + self::SERVER_DOWN_TTL;
wfDebugLog( 'redis', "Redis exception: " . $e->getMessage() . "\n" );
+
return false;
}
if ( $conn ) {
$conn->setOption( Redis::OPT_SERIALIZER, $this->serializer );
$this->connections[$server][] = array( 'conn' => $conn, 'free' => false );
+
return new RedisConnRef( $this, $server, $conn );
} else {
return false;
/**
* Mark a connection to a server as free to return to the pool
*
- * @param $server string
- * @param $conn Redis
- * @return boolean
+ * @param string $server
+ * @param Redis $conn
+ * @return bool
*/
public function freeConnection( $server, Redis $conn ) {
$found = false;
/**
* Close any extra idle connections if there are more than the limit
- *
- * @return void
*/
protected function closeExcessIdleConections() {
if ( $this->idlePoolSize <= count( $this->connections ) ) {
return; // nothing to do (no more connections than servers)
}
- foreach ( $this->connections as $server => &$serverConnections ) {
+ foreach ( $this->connections as &$serverConnections ) {
foreach ( $serverConnections as $key => &$connection ) {
if ( $connection['free'] ) {
unset( $serverConnections[$key] );
* not. The safest response for us is to explicitly destroy the connection
* object and let it be reopened during the next request.
*
- * @param $server string
- * @param $cref RedisConnRef
- * @param $e RedisException
- * @return void
+ * @param string $server
+ * @param RedisConnRef $cref
+ * @param RedisException $e
*/
public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() . "\n" );
}
/**
- * Resend an AUTH request to the redis server (useful after disconnects)
+ * Re-send an AUTH request to the redis server (useful after disconnects).
+ *
+ * This works around an upstream bug in phpredis. phpredis hides disconnects by transparently
+ * reconnecting, but it neglects to re-authenticate the new connection. To the user of the
+ * phpredis client API this manifests as a seemingly random tendency of connections to lose
+ * their authentication status.
*
- * This method is for internal use only
+ * This method is for internal use only.
+ *
+ * @see https://github.com/nicolasff/phpredis/issues/403
*
* @param string $server
* @param Redis $conn
if ( $this->password !== null ) {
if ( !$conn->auth( $this->password ) ) {
wfDebugLog( 'redis', "Authentication error connecting to $server" );
+
return false;
}
}
+
return true;
}
+
+ /**
+ * Make sure connections are closed for sanity
+ */
+ function __destruct() {
+ foreach ( $this->connections as $server => &$serverConnections ) {
+ foreach ( $serverConnections as $key => &$connection ) {
+ $connection['conn']->close();
+ }
+ }
+ }
}
/**
* Helper class to handle automatically marking connectons as reusable (via RAII pattern)
*
+ * This class simply wraps the Redis class and can be used the same way
+ *
* @ingroup Redis
* @since 1.21
*/
protected $conn;
protected $server; // string
+ protected $lastError; // string
/**
- * @param $pool RedisConnectionPool
- * @param $server string
- * @param $conn Redis
+ * @param RedisConnectionPool $pool
+ * @param string $server
+ * @param Redis $conn
*/
public function __construct( RedisConnectionPool $pool, $server, Redis $conn ) {
$this->pool = $pool;
$this->conn = $conn;
}
+ /**
+ * @return string
+ * @since 1.23
+ */
+ public function getServer() {
+ return $this->server;
+ }
+
+ public function getLastError() {
+ return $this->lastError;
+ }
+
+ public function clearLastError() {
+ $this->lastError = null;
+ }
+
public function __call( $name, $arguments ) {
- return call_user_func_array( array( $this->conn, $name ), $arguments );
+ $conn = $this->conn; // convenience
+
+ $conn->clearLastError();
+ $res = call_user_func_array( array( $conn, $name ), $arguments );
+ if ( preg_match( '/^ERR operation not permitted\b/', $conn->getLastError() ) ) {
+ $this->pool->reauthenticateConnection( $this->server, $conn );
+ $conn->clearLastError();
+ $res = call_user_func_array( array( $conn, $name ), $arguments );
+ wfDebugLog( 'redis', "Used automatic re-authentication for method '$name'." );
+ }
+
+ $this->lastError = $conn->getLastError() ?: $this->lastError;
+
+ return $res;
}
/**
wfDebugLog( 'redis', "Lua script error on server $server: " . $conn->getLastError() );
}
+ $this->lastError = $conn->getLastError() ?: $this->lastError;
+
return $res;
}
/**
- * @param RedisConnRef $conn
+ * @param Redis $conn
* @return bool
*/
public function isConnIdentical( Redis $conn ) {
* @ingroup Content
*/
abstract class AbstractContent implements Content {
-
/**
* Name of the content model this Content object represents.
* Use with CONTENT_MODEL_XXX constants
break;
}
// Redirects to some special pages are not permitted
- if ( $newtitle instanceOf Title && $newtitle->isValidRedirectTarget() ) {
+ if ( $newtitle instanceof Title && $newtitle->isValidRedirectTarget() ) {
// The new title passes the checks, so make that our current
// title so that further recursion can be checked
$title = $newtitle;
break;
}
}
+
return $titles;
}
*/
public function getUltimateRedirectTarget() {
$titles = $this->getRedirectChain();
+
return $titles ? array_pop( $titles ) : null;
}
* database after deletion.
*/
public function getDeletionUpdates( WikiPage $page,
- ParserOutput $parserOutput = null )
- {
+ ParserOutput $parserOutput = null
+ ) {
return array(
new LinksDeletionUpdate( $page ),
);
}
/**
- * This default implementation always returns false. Subclasses may override this to supply matching logic.
+ * This default implementation always returns false. Subclasses may override
+ * this to supply matching logic.
*
* @see Content::matchMagicWord
*
* 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
$result = false;
wfRunHooks( 'ConvertContent', array( $this, $toModel, $lossy, &$result ) );
+
return $result;
}
}
* @ingroup Content
*/
interface Content {
-
/**
* @since 1.21
*
public function getParserOutput( Title $title,
$revId = null,
ParserOptions $options = null, $generateHtml = true );
+
// TODO: make RenderOutput and RenderOptions base classes
/**
*
* @param Title $target the new redirect target
*
- * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect)
+ * @return Content a new Content object with the updated redirect (or $this
+ * if this Content object isn't a redirect)
*/
public function updateRedirect( Title $target );
* This may be used to check the content's consistency with global state. This function should
* NOT write any information to the database.
*
- * Note that this method will usually be called inside the same transaction bracket that will be used
- * to save the new revision.
+ * Note that this method will usually be called inside the same transaction
+ * bracket that will be used to save the new revision.
*
- * Note that this method is called before any update to the page table is performed. This means that
- * $page may not yet know a page ID.
+ * Note that this method is called before any update to the page table is
+ * performed. This means that $page may not yet know a page ID.
*
* @since 1.21
*
* @param WikiPage $page The page to be saved.
- * @param int $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
- * @param int $baseRevId the ID of the current revision
- * @param User $user
+ * @param int $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
+ * @param int $baseRevId the ID of the current revision
+ * @param User $user
*
- * @return Status A status object indicating whether the content was successfully prepared for saving.
- * If the returned status indicates an error, a rollback will be performed and the
- * transaction aborted.
+ * @return Status A status object indicating whether the content was
+ * successfully prepared for saving. If the returned status indicates
+ * an error, a rollback will be performed and the transaction aborted.
*
* @see see WikiPage::doEditContent()
*/
* 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
* that conversion is not supported.
*/
public function convert( $toModel, $lossy = '' );
-
- // TODO: ImagePage and CategoryPage interfere with per-content action handlers
- // TODO: nice&sane integration of GeSHi syntax highlighting
+ // @todo ImagePage and CategoryPage interfere with per-content action handlers
+ // @todo nice&sane integration of GeSHi syntax highlighting
// [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
// config to set the class which handles syntax highlighting
// [12:00] <vvv> And default it to a DummyHighlighter
* @ingroup Content
*/
class MWContentSerializationException extends MWException {
-
}
/**
* @ingroup Content
*/
abstract class ContentHandler {
-
/**
* Switch for enabling deprecation warnings. Used by ContentHandler::deprecated()
* and ContentHandler::runLegacyHooks().
* not be unserialized using $format.
*/
public static function makeContent( $text, Title $title = null,
- $modelId = null, $format = null )
- {
+ $modelId = null, $format = null
+ ) {
if ( is_null( $modelId ) ) {
if ( is_null( $title ) ) {
throw new MWException( "Must provide a Title object or a content model ID." );
}
$handler = ContentHandler::getForModelID( $modelId );
+
return $handler->unserializeContent( $text, $format );
}
*/
public static function getForTitle( Title $title ) {
$modelId = $title->getContentModel();
+
return ContentHandler::getForModelID( $modelId );
}
*/
public static function getForContent( Content $content ) {
$modelId = $content->getModel();
+
return ContentHandler::getForModelID( $modelId );
}
/**
- * @var Array A Cache of ContentHandler instances by model id
+ * @var array A Cache of ContentHandler instances by model id
*/
- static $handlers;
+ protected static $handlers;
/**
* Returns the ContentHandler singleton for the given model ID. Use the
$handler = new $class( $modelId );
if ( !( $handler instanceof ContentHandler ) ) {
- throw new MWException( "$class from \$wgContentHandlers is not compatible with ContentHandler" );
+ throw new MWException( "$class from \$wgContentHandlers is not " .
+ "compatible with ContentHandler" );
}
}
wfDebugLog( 'ContentHandler', 'Created handler for ' . $modelId
- . ': ' . get_class( $handler ) );
+ . ': ' . get_class( $handler ) );
ContentHandler::$handlers[$modelId] = $handler;
+
return ContentHandler::$handlers[$modelId];
}
* @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.
+ * @return string The content model's localized name.
* @throws MWException if the model id isn't known.
*/
public static function getLocalizedName( $name ) {
+ // Messages: content-model-wikitext, content-model-text,
+ // content-model-javascript, content-model-css
$key = "content-model-$name";
$msg = wfMessage( $key );
}
$formats = array_unique( $formats );
+
return $formats;
}
/**
* Get the language in which the content of the given page is written.
*
- * This default implementation just returns $wgContLang (except for pages in the MediaWiki namespace)
+ * This default implementation just returns $wgContLang (except for pages
+ * in the MediaWiki namespace)
*
- * Note that the pages language is not cacheable, since it may in some cases depend on user settings.
+ * Note that the pages language is not cacheable, since it may in some
+ * cases depend on user settings.
*
* Also note that the page language may or may not depend on the actual content of the page,
* that is, this method may load the content in order to determine the language.
*
* @since 1.21
*
- * @param Title $title the page to determine the language for.
+ * @param Title $title the page to determine the language for.
* @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
*
* @return Language the page's language
}
wfRunHooks( 'PageContentLanguage', array( $title, &$pageLang, $wgLang ) );
+
return wfGetLangObj( $pageLang );
}
*
* @since 1.21
*
- * @param Title $title the page to determine the language for.
+ * @param Title $title the page to determine the language for.
* @param Content|null $content the page's content, if you have it handy, to avoid reloading it.
*
* @return Language the page's language for viewing
if ( is_object( $rt ) ) {
if ( !is_object( $ot )
|| !$rt->equals( $ot )
- || $ot->getFragment() != $rt->getFragment() )
- {
+ || $ot->getFragment() != $rt->getFragment()
+ ) {
$truncatedtext = $newContent->getTextForSummary(
250
- - strlen( wfMessage( 'autoredircomment' )->inContentLanguage()->text() )
- - strlen( $rt->getFullText() ) );
+ - strlen( wfMessage( 'autoredircomment' )->inContentLanguage()->text() )
+ - strlen( $rt->getFullText() ) );
return wfMessage( 'autoredircomment', $rt->getFullText() )
- ->rawParams( $truncatedtext )->inContentLanguage()->text();
+ ->rawParams( $truncatedtext )->inContentLanguage()->text();
}
}
200 - strlen( wfMessage( 'autosumm-new' )->inContentLanguage()->text() ) );
return wfMessage( 'autosumm-new' )->rawParams( $truncatedtext )
- ->inContentLanguage()->text();
+ ->inContentLanguage()->text();
}
// Blanking auto-summaries
return wfMessage( 'autosumm-blank' )->inContentLanguage()->text();
} elseif ( !empty( $oldContent )
&& $oldContent->getSize() > 10 * $newContent->getSize()
- && $newContent->getSize() < 500 )
- {
+ && $newContent->getSize() < 500
+ ) {
// Removing more than 90% of the article
$truncatedtext = $newContent->getTextForSummary(
200 - strlen( wfMessage( 'autosumm-replace' )->inContentLanguage()->text() ) );
return wfMessage( 'autosumm-replace' )->rawParams( $truncatedtext )
- ->inContentLanguage()->text();
+ ->inContentLanguage()->text();
}
// If we reach this point, there's no applicable auto-summary for our
* 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 $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.
- * If false, it is assumed the function is in MediaWiki core.
+ * @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.
+ * If false, it is assumed the function is in MediaWiki core.
*
* @see ContentHandler::$enableDeprecationWarnings
* @see wfDeprecated
* @see ContentHandler::$enableDeprecationWarnings
*/
public static function runLegacyHooks( $event, $args = array(),
- $warn = null ) {
+ $warn = null
+ ) {
if ( $warn === null ) {
$warn = self::$enableDeprecationWarnings;
wfRestoreWarnings();
- wfWarn( "Using obsolete hook $event via ContentHandler::runLegacyHooks()! Handlers: " . implode( ', ', $handlerInfo ), 2 );
+ wfWarn( "Using obsolete hook $event via ContentHandler::runLegacyHooks()! Handlers: " .
+ implode( ', ', $handlerInfo ), 2 );
}
// convert Content objects to text
* @ingroup Content
*/
class CssContentHandler extends TextContentHandler {
-
public function __construct( $modelId = CONTENT_MODEL_CSS ) {
parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
}
/**
* Returns the english language, because CSS is english, and should be handled as such.
*
+ * @param Title $title
+ * @param Content $content
* @return Language wfGetLangObj( 'en' )
*
* @see ContentHandler::getPageLanguage()
/**
* Returns the english language, because CSS is english, and should be handled as such.
*
+ * @param Title $title
+ * @param Content $content
* @return Language wfGetLangObj( 'en' )
*
* @see ContentHandler::getPageViewLanguage()
* @todo make ScriptContentHandler base class, do highlighting stuff there?
*/
class JavaScriptContentHandler extends TextContentHandler {
-
public function __construct( $modelId = CONTENT_MODEL_JAVASCRIPT ) {
parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
}
/**
* Returns the english language, because JS is english, and should be handled as such.
*
+ * @param Title $title
+ * @param Content $content
* @return Language wfGetLangObj( 'en' )
*
* @see ContentHandler::getPageLanguage()
/**
* Returns the english language, because JS is english, and should be handled as such.
*
+ * @param Title $title
+ * @param Content $content
* @return Language wfGetLangObj( 'en' )
*
* @see ContentHandler::getPageViewLanguage()
* @ingroup Content
*/
class MessageContent extends AbstractContent {
-
/**
* @var Message
*/
protected $mMessage;
/**
- * @param Message|String $msg A Message object, or a message key
- * @param array|null $params An optional array of message parameters
+ * @param Message|String $msg A Message object, or a message key
+ * @param array|null $params An optional array of message parameters
*/
public function __construct( $msg, $params = null ) {
# XXX: messages may be wikitext, html or plain text! and maybe even something else entirely.
/**
* @see Content::isCountable
*
+ * @param bool $hasLinks
* @return bool false
*/
public function isCountable( $hasLinks = null ) {
/**
* @see Content::getParserOutput
*
+ * @param Title $title
+ * @param int $revId Optional revision ID
+ * @param ParserOptions $options
+ * @param bool $generateHtml Wether to generate HTML
* @return ParserOutput
*/
public function getParserOutput(
}
$po = new ParserOutput( $html );
+
return $po;
}
}
* @ingroup Content
*/
class TextContent extends AbstractContent {
-
public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
parent::__construct( $model_id );
if ( $text === null || $text === false ) {
wfWarn( "TextContent constructed with \$text = " . var_export( $text, true ) . "! "
- . "This may indicate an error in the caller's scope." );
+ . "This may indicate an error in the caller's scope." );
$text = '';
}
*/
public function getSize() {
$text = $this->getNativeData();
+
return strlen( $text );
}
*/
public function getNativeData() {
$text = $this->mText;
+
return $text;
}
/**
* Diff this content object with another content object.
*
- * @since 1.21diff
+ * @since 1.21
*
* @param $that Content: The other content object to compare this content
* object to.
* @param $lang Language: The language object to use for text segmentation.
* If not given, $wgContentLang is used.
*
- * @return DiffResult: A diff representing the changes that would have to be
+ * @return Diff A diff representing the changes that would have to be
* made to this content object to make it equal to $that.
*/
public function diff( Content $that, Language $lang = null ) {
}
$otext = $this->getNativeData();
- $ntext = $this->getNativeData();
+ $ntext = $that->getNativeData();
# Note: Use native PHP diff, external engines don't give us abstract output
$ota = explode( "\n", $lang->segmentForDiff( $otext ) );
$nta = explode( "\n", $lang->segmentForDiff( $ntext ) );
$diff = new Diff( $ota, $nta );
+
return $diff;
}
}
$po->setText( $html );
+
return $po;
}
* 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
* @ingroup Content
*/
class TextContentHandler extends ContentHandler {
-
- public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = array( CONTENT_FORMAT_TEXT ) ) {
+ public function __construct( $modelId = CONTENT_MODEL_TEXT,
+ $formats = array( CONTENT_FORMAT_TEXT )
+ ) {
parent::__construct( $modelId, $formats );
}
*/
public function serializeContent( Content $content, $format = null ) {
$this->checkFormat( $format );
+
return $content->getNativeData();
}
}
$mergedContent = $this->unserializeContent( $result, $format );
+
return $mergedContent;
}
* @ingroup Content
*/
class WikitextContent extends TextContent {
-
public function __construct( $text ) {
parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
}
if ( $section === '' ) {
wfProfileOut( __METHOD__ );
+
return $with; # XXX: copy first?
- } if ( $section == 'new' ) {
+ }
+
+ if ( $section == 'new' ) {
# Inserting a new section
$subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' )
- ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
+ ->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
$text = strlen( trim( $oldtext ) ) > 0
? "{$oldtext}\n\n{$subject}{$text}"
$newContent = new WikitextContent( $text );
wfProfileOut( __METHOD__ );
+
return $newContent;
}
if ( !$title instanceof Title || !$title->isValidRedirectTarget() ) {
return null;
}
+
return $title;
}
}
+
return null;
}
/**
- * @see Content::updateRedirect()
+ * @see Content::updateRedirect()
*
* This implementation replaces the first link on the page with the given new target
* if this Content object is a redirect. Otherwise, this method returns $this.
*
* @param Title $target
*
- * @return Content a new Content object with the updated redirect (or $this if this Content object isn't a redirect)
+ * @return Content a new Content object with the updated redirect (or $this
+ * if this Content object isn't a redirect)
*/
public function updateRedirect( Title $target ) {
if ( !$this->isRedirect() ) {
* Returns true if this content is not a redirect, and this content's text
* is countable according to the criteria defined by $wgArticleCountMethod.
*
- * @param bool $hasLinks 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)
}
$po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId );
+
return $po;
}
* @ingroup Content
*/
class WikitextContentHandler extends TextContentHandler {
-
public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
}
}
$mwRedir = MagicWord::get( 'redirect' );
- $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $optionalColon . $destination->getFullText() . ']]';
+ $redirectText = $mwRedir->getSynonym( 0 ) .
+ ' [[' . $optionalColon . $destination->getFullText() . ']]';
+
if ( $text != '' ) {
$redirectText .= "\n" . $text;
}
public function getContext() {
if ( $this->context === null ) {
$class = get_class( $this );
- wfDebug( __METHOD__ . " ($class): called and \$context is null. Using RequestContext::getMain() for sanity\n" );
+ wfDebug( __METHOD__ . " ($class): called and \$context is null. " .
+ "Using RequestContext::getMain() for sanity\n" );
$this->context = RequestContext::getMain();
}
+
return $this->context;
}
*/
public function getLang() {
wfDeprecated( __METHOD__, '1.19' );
+
return $this->getLanguage();
}
*/
public function msg( /* $args */ ) {
$args = func_get_args();
+
return call_user_func_array( array( $this->getContext(), 'msg' ), $args );
}
* Set the Title object
*
* @param Title $t
+ * @throws MWException
*/
public function setTitle( $t ) {
if ( $t !== null && !$t instanceof Title ) {
*/
public function msg() {
$args = func_get_args();
+
return call_user_func_array( 'wfMessage', $args )->setContext( $this );
}
}
global $wgRequest; # fallback to $wg till we can improve this
$this->request = $wgRequest;
}
+
return $this->request;
}
* Set the Title object
*
* @param Title $t
+ * @throws MWException
*/
public function setTitle( $t ) {
if ( $t !== null && !$t instanceof Title ) {
global $wgTitle; # fallback to $wg till we can improve this
$this->title = $wgTitle;
}
+
return $this->title;
}
}
$this->wikipage = WikiPage::factory( $title );
}
+
return $this->wikipage;
}
if ( $this->output === null ) {
$this->output = new OutputPage( $this );
}
+
return $this->output;
}
if ( $this->user === null ) {
$this->user = User::newFromSession( $this->getRequest() );
}
+
return $this->user;
}
*/
public function getLang() {
wfDeprecated( __METHOD__, '1.19' );
+
return $this->getLanguage();
}
$this->skin->setContext( $this );
wfProfileOut( __METHOD__ . '-createskin' );
}
+
return $this->skin;
}
*/
public function msg() {
$args = func_get_args();
+
return call_user_func_array( 'wfMessage', $args )->setContext( $this );
}
if ( $instance === null ) {
$instance = new self;
}
+
return $instance;
}
$user = User::newFromName( $params['ip'], false );
}
- $importSessionFunction = function( User $user, array $params ) {
+ $importSessionFunction = function ( User $user, array $params ) {
global $wgRequest, $wgUser;
$context = RequestContext::getMain();
$importSessionFunction( $user, $params );
// Set callback to save and close the new session and reload the old one
- return new ScopedCallback( function() use ( $importSessionFunction, $oUser, $oParams ) {
+ return new ScopedCallback( function () use ( $importSessionFunction, $oUser, $oParams ) {
$importSessionFunction( $oUser, $oParams );
} );
}
$context->setRequest( new FauxRequest( $request ) );
}
$context->user = User::newFromName( '127.0.0.1', false );
+
return $context;
}
}
* @author Daniel Kinzler
*/
abstract class DBAccessBase implements IDBAccessObject {
-
/**
* @var String|bool $wiki The target wiki's name. This must be an ID
* that LBFactory can understand.
*/
protected function getConnection( $id, $groups = array() ) {
$loadBalancer = wfGetLB( $this->wiki );
+
return $loadBalancer->getConnection( $id, $groups, $this->wiki );
}
*
* @since 1.21
*
- * @param DatabaseBase $db the database connection to release.
+ * @param DatabaseBase $db the database connection to release.
*/
protected function releaseConnection( DatabaseBase $db ) {
if ( $this->wiki !== false ) {
$info = $lb->parentInfo();
if ( !$db || !$db->doneWrites() ) {
wfDebug( __METHOD__ . ": LB {$info['id']}, no writes done\n" );
+
return;
}
$pos = $db->getMasterPos();
*/
class CloneDatabase {
-
/**
* Table prefix for cloning
* @var String
* @param $dropCurrentTables bool
*/
public function __construct( DatabaseBase $db, array $tablesToClone,
- $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true )
- {
+ $newTablePrefix, $oldTablePrefix = '', $dropCurrentTables = true
+ ) {
$this->db = $db;
$this->tablesToClone = $tablesToClone;
$this->newTablePrefix = $newTablePrefix;
self::changePrefix( $this->newTablePrefix );
$newTableName = $this->db->tableName( $tbl, 'raw' );
- if ( $this->dropCurrentTables && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) ) ) {
+ if ( $this->dropCurrentTables
+ && !in_array( $this->db->getType(), array( 'postgres', 'oracle' ) )
+ ) {
$this->db->dropTable( $tbl, __METHOD__ );
wfDebug( __METHOD__ . " dropping {$newTableName}\n", true );
//Dropping the oldTable because the prefix was changed
* Interface for classes that implement or wrap DatabaseBase
* @ingroup Database
*/
-interface IDatabase {}
+interface IDatabase {
+}
/**
* Database abstraction object
protected $mTablePrefix;
protected $mFlags;
protected $mForeign;
- protected $mTrxLevel = 0;
protected $mErrorCount = 0;
protected $mLBInfo = array();
protected $mFakeSlaveLag = null, $mFakeMaster = false;
protected $delimiter = ';';
+ /**
+ * Either 1 if a transaction is active or 0 otherwise.
+ * The other Trx fields may not be meaningfull if this is 0.
+ *
+ * @var int
+ */
+ protected $mTrxLevel = 0;
+
/**
* Remembers the function name given for starting the most recent transaction via begin().
* Used to provide additional context for error reporting.
}
/**
- * Gets or sets the current transaction level.
+ * Gets the current transaction level.
*
* Historically, transactions were allowed to be "nested". This is no
* longer supported, so this function really only returns a boolean.
*
- * @param int $level An integer (0 or 1), or omitted to leave it unchanged.
* @return int The previous value
*/
- public function trxLevel( $level = null ) {
- return wfSetVar( $this->mTrxLevel, $level );
+ public function trxLevel() {
+ return $this->mTrxLevel;
}
/**
/**
* Clear a flag for this connection
*
- * @param $flag: same as setFlag()'s $flag param
+ * @param $flag : same as setFlag()'s $flag param
*/
public function clearFlag( $flag ) {
global $wgDebugDBTransactions;
/**
* Returns a boolean whether the flag $flag is set for this connection
*
- * @param $flag: same as setFlag()'s $flag param
+ * @param $flag : same as setFlag()'s $flag param
* @return Boolean
*/
public function getFlag( $flag ) {
* not restored on unserialize.
*/
public function __sleep() {
- throw new MWException( 'Database serialization may cause problems, since the connection is not restored on wakeup.' );
+ throw new MWException( 'Database serialization may cause problems, since ' .
+ 'the connection is not restored on wakeup.' );
}
/**
* Given a DB type, construct the name of the appropriate child class of
* DatabaseBase. This is designed to replace all of the manual stuff like:
- * $class = 'Database' . ucfirst( strtolower( $dbType ) );
+ * $class = 'Database' . ucfirst( strtolower( $dbType ) );
* as well as validate against the canonical list of DB types we have
*
* This factory function is mostly useful for when you need to connect to a
*/
final public static function factory( $dbType, $p = array() ) {
$canonicalDBTypes = array(
- 'mysql' => array( 'mysqli', 'mysql' ),
+ 'mysql' => array( 'mysqli', 'mysql' ),
'postgres' => array(),
- 'sqlite' => array(),
- 'oracle' => array(),
- 'mssql' => array(),
+ 'sqlite' => array(),
+ 'oracle' => array(),
+ 'mssql' => array(),
);
$driver = false;
'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
);
+
return new $class( $params );
} else {
return null;
if ( $this->mPHPError ) {
$error = preg_replace( '!\[<a.*</a>\]!', '', $this->mPHPError );
$error = preg_replace( '!^.*?:\s?(.*)$!', '$1', $error );
+
return $error;
} else {
return false;
$ret = $this->closeConnection();
$this->mConn = false;
+
return $ret;
} else {
return true;
# If DBO_TRX is set, start a transaction
if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
- $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' )
- {
+ $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK'
+ ) {
# Avoid establishing transactions for SHOW and SET statements too -
# that would delay transaction initializations to once connection
# is really used by application
# Try reconnecting if the connection was lost
if ( false === $ret && $this->wasErrorReissuable() ) {
# Transaction is gone, like it or not
+ $hadTrx = $this->mTrxLevel; // possible lost transaction
+ wfDebug( "Connection lost, reconnecting...\n" );
$this->mTrxLevel = 0;
- $this->mTrxIdleCallbacks = array(); // cancel
- $this->mTrxPreCommitCallbacks = array(); // cancel
wfDebug( "Connection lost, reconnecting...\n" );
if ( $this->ping() ) {
# Not a database error to lose a transaction after a minute or two
wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx\n" );
}
- $ret = $this->doQuery( $commentedSql );
+ if ( !$hadTrx ) {
+ # Should be safe to silently retry
+ $ret = $this->doQuery( $commentedSql );
+ }
} else {
wfDebug( "Failed\n" );
}
wfDebug( "SQL ERROR (ignored): $error\n" );
$this->ignoreErrors( $ignore );
} else {
- $sql1line = str_replace( "\n", "\\n", $sql );
+ $sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5*1024 );
wfLogDBError( "$fname\t{$this->mServer}\t$errno\t$error\t$sql1line\n" );
wfDebug( "SQL ERROR: " . $error . "\n" );
throw new DBQueryError( $this, $error, $errno, $sql, $fname );
return $arg;
case '&':
# return $this->addQuotes( file_get_contents( $arg ) );
- throw new DBUnexpectedError( $this, '& mode is not implemented. If it\'s really needed, uncomment the line above.' );
+ throw new DBUnexpectedError(
+ $this,
+ '& mode is not implemented. If it\'s really needed, uncomment the line above.'
+ );
default:
- throw new DBUnexpectedError( $this, 'Received invalid match. This should never happen!' );
+ throw new DBUnexpectedError(
+ $this,
+ 'Received invalid match. This should never happen!'
+ );
}
}
: $options['HAVING'];
$sql .= ' HAVING ' . $having;
}
+
return $sql;
}
$ob = is_array( $options['ORDER BY'] )
? implode( ',', $options['ORDER BY'] )
: $options['ORDER BY'];
+
return ' ORDER BY ' . $ob;
}
+
return '';
}
* @see DatabaseBase::select()
*/
public function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
- $options = array(), $join_conds = array() )
- {
+ $options = array(), $join_conds = array()
+ ) {
if ( is_array( $vars ) ) {
$vars = implode( ',', $this->fieldNamesWithAlias( $vars ) );
}
* @return object|bool
*/
public function selectRow( $table, $vars, $conds, $fname = __METHOD__,
- $options = array(), $join_conds = array() )
- {
+ $options = array(), $join_conds = array()
+ ) {
$options = (array)$options;
$options['LIMIT'] = 1;
$res = $this->select( $table, $vars, $conds, $fname, $options, $join_conds );
* @return Integer: row count
*/
public function estimateRowCount( $table, $vars = '*', $conds = '',
- $fname = __METHOD__, $options = array() )
- {
+ $fname = __METHOD__, $options = array()
+ ) {
$rows = 0;
$res = $this->select( $table, array( 'rowcount' => 'COUNT(*)' ), $conds, $fname, $options );
* @param $table String name of the table to UPDATE. This will be passed through
* DatabaseBase::tableName().
*
- * @param array $values An array of values to SET. For each array element,
+ * @param array $values An array of values to SET. For each array element,
* the key gives the field name, and the value gives the data
* to set that field to. The data will be quoted by
* DatabaseBase::addQuotes().
return 'CONCAT(' . implode( ',', $stringList ) . ')';
}
+ /**
+ * Build a GROUP_CONCAT or equivalent statement for a query.
+ *
+ * This is useful for combining a field for several rows into a single string.
+ * NULL values will not appear in the output, duplicated values will appear,
+ * and the resulting delimiter-separated values have no defined sort order.
+ * Code using the results may need to use the PHP unique() or sort() methods.
+ *
+ * @param string $delim Glue to bind the results together
+ * @param string|array $table Table name
+ * @param string $field Field name
+ * @param string|array $conds Conditions
+ * @param string|array $join_conds Join conditions
+ * @return String SQL text
+ * @since 1.23
+ */
+ public function buildGroupConcatField(
+ $delim, $table, $field, $conds = '', $join_conds = array()
+ ) {
+ $fld = "GROUP_CONCAT($field SEPARATOR " . $this->addQuotes( $delim ) . ')';
+
+ return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+ }
+
/**
* Change the current database
*
# if your database engine supports a concept similar to MySQL's
# databases you may as well.
$this->mDBname = $db;
+
return true;
}
list( $table ) = $dbDetails;
if ( $wgSharedDB !== null # We have a shared database
&& $this->mForeign == false # We're not working on a foreign database
- && !$this->isQuotedIdentifier( $table ) # Paranoia check to prevent shared tables listing '`table`'
+ && !$this->isQuotedIdentifier( $table ) # Prevent shared tables listing '`table`'
&& in_array( $table, $wgSharedTables ) # A shared table is selected
) {
$database = $wgSharedDB;
}
$retval[] = $this->tableNameWithAlias( $table, $alias );
}
+
return $retval;
}
}
$retval[] = $this->fieldNameWithAlias( $field, $alias );
}
+
return $retval;
}
}
/**
- * LIKE statement wrapper, receives a variable-length argument list with parts of pattern to match
- * containing either string literals that will be escaped or tokens returned by anyChar() or anyString().
- * Alternatively, the function could be provided with an array of aforementioned parameters.
+ * LIKE statement wrapper, receives a variable-length argument list with
+ * parts of pattern to match containing either string literals that will be
+ * escaped or tokens returned by anyChar() or anyString(). Alternatively,
+ * the function could be provided with an array of aforementioned
+ * parameters.
*
- * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns a LIKE clause that searches
- * for subpages of 'My page title'.
- * Alternatively: $pattern = array( 'My_page_title/', $dbr->anyString() ); $query .= $dbr->buildLike( $pattern );
+ * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns
+ * a LIKE clause that searches for subpages of 'My page title'.
+ * Alternatively:
+ * $pattern = array( 'My_page_title/', $dbr->anyString() );
+ * $query .= $dbr->buildLike( $pattern );
*
* @since 1.16
* @return String: fully built LIKE statement
* @throws DBUnexpectedError
*/
public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
- $fname = __METHOD__ )
- {
+ $fname = __METHOD__
+ ) {
if ( !$conds ) {
throw new DBUnexpectedError( $this,
'DatabaseBase::deleteJoin() called with empty $conds' );
*/
public function insertSelect( $destTable, $srcTable, $varMap, $conds,
$fname = __METHOD__,
- $insertOptions = array(), $selectOptions = array() )
- {
+ $insertOptions = array(), $selectOptions = array()
+ ) {
$destTable = $this->tableName( $destTable );
if ( is_array( $insertOptions ) ) {
if ( !is_numeric( $limit ) ) {
throw new DBUnexpectedError( $this, "Invalid non-numeric limit passed to limitResult()\n" );
}
+
return "$sql LIMIT "
. ( ( is_numeric( $offset ) && $offset != 0 ) ? "{$offset}," : "" )
. "{$limit} ";
*/
public function unionQueries( $sqls, $all ) {
$glue = $all ? ') UNION ALL (' : ') UNION (';
+
return '(' . implode( $glue, $sqls ) . ')';
}
if ( is_array( $cond ) ) {
$cond = $this->makeList( $cond, LIST_AND );
}
+
return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
}
if ( $tries <= 0 ) {
$this->rollback( __METHOD__ );
$this->reportQueryError( $error, $errno, $sql, $fname );
+
return false;
} else {
$this->commit( __METHOD__ );
+
return $retVal;
}
}
if ( $wait > $timeout * 1e6 ) {
wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" );
wfProfileOut( __METHOD__ );
+
return -1;
} elseif ( $wait > 0 ) {
wfDebug( "Fake slave waiting $wait us\n" );
usleep( $wait );
wfProfileOut( __METHOD__ );
+
return 1;
} else {
wfDebug( "Fake slave up to date ($wait us)\n" );
wfProfileOut( __METHOD__ );
+
return 0;
}
}
if ( !is_null( $this->mFakeSlaveLag ) ) {
$pos = new MySQLMasterPos( 'fake', microtime( true ) - $this->mFakeSlaveLag );
wfDebug( __METHOD__ . ": fake slave pos = $pos\n" );
+
return $pos;
} else {
# Stub
$this->clearFlag( DBO_TRX ); // make each query its own transaction
call_user_func( $phpCallback );
$this->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
- } catch ( Exception $e ) {}
+ } catch ( Exception $e ) {
+ }
}
} while ( count( $this->mTrxIdleCallbacks ) );
try {
list( $phpCallback ) = $callback;
call_user_func( $phpCallback );
- } catch ( Exception $e ) {}
+ } catch ( Exception $e ) {
+ }
}
} while ( count( $this->mTrxPreCommitCallbacks ) );
*
* @since 1.23
* @param string $fname
+ * @throws DBError
*/
final public function startAtomic( $fname = __METHOD__ ) {
if ( !$this->mTrxLevel ) {
}
/**
- * Begin a transaction. If a transaction is already in progress, that transaction will be committed before the
- * new transaction is started.
+ * Ends an atomic section of SQL statements
*
- * Note that when the DBO_TRX flag is set (which is usually the case for web requests, but not for maintenance scripts),
- * any previous database query will have started a transaction automatically.
+ * Ends the next section of atomic SQL statements and commits the transaction
+ * if necessary.
*
- * Nesting of transactions is not supported. Attempts to nest transactions will cause a warning, unless the current
- * transaction was started automatically because of the DBO_TRX flag.
+ * @since 1.23
+ * @see DatabaseBase::startAtomic
+ * @param string $fname
+ * @throws DBError
+ */
+ final public function endAtomic( $fname = __METHOD__ ) {
+ if ( !$this->mTrxLevel ) {
+ throw new DBUnexpectedError( $this, 'No atomic transaction is open.' );
+ }
+ if ( $this->mTrxAtomicLevels->isEmpty() ||
+ $this->mTrxAtomicLevels->pop() !== $fname
+ ) {
+ throw new DBUnexpectedError( $this, 'Invalid atomic section ended.' );
+ }
+
+ if ( $this->mTrxAtomicLevels->isEmpty() && $this->mTrxAutomaticAtomic ) {
+ $this->commit( $fname, 'flush' );
+ }
+ }
+
+ /**
+ * Begin a transaction. If a transaction is already in progress,
+ * that transaction will be committed before the new transaction is started.
+ *
+ * Note that when the DBO_TRX flag is set (which is usually the case for web
+ * requests, but not for maintenance scripts), any previous database query
+ * will have started a transaction automatically.
+ *
+ * Nesting of transactions is not supported. Attempts to nest transactions
+ * will cause a warning, unless the current transaction was started
+ * automatically because of the DBO_TRX flag.
*
* @param $fname string
+ * @throws DBError
*/
final public function begin( $fname = __METHOD__ ) {
global $wgDebugDBTransactions;
$this->mTrxAutomatic = false;
$this->mTrxAutomaticAtomic = false;
$this->mTrxAtomicLevels = new SplStack;
+ $this->mTrxIdleCallbacks = array();
+ $this->mTrxPreCommitCallbacks = array();
}
/**
$this->mTrxLevel = 1;
}
- /**
- * Ends an atomic section of SQL statements
- *
- * Ends the next section of atomic SQL statements and commits the transaction
- * if necessary.
- *
- * @since 1.23
- * @see DatabaseBase::startAtomic
- * @param string $fname
- */
- final public function endAtomic( $fname = __METHOD__ ) {
- if ( $this->mTrxAtomicLevels->isEmpty() ||
- $this->mTrxAtomicLevels->pop() !== $fname
- ) {
- throw new DBUnexpectedError( $this, 'Invalid atomic section ended.' );
- }
-
- if ( $this->mTrxAtomicLevels->isEmpty() && $this->mTrxAutomaticAtomic ) {
- $this->commit( $fname, 'flush' );
- }
- }
-
/**
* Commits a transaction previously started using begin().
* If no transaction is in progress, a warning is issued.
* Nesting of transactions is not supported.
*
* @param $fname string
- * @param string $flush Flush flag, set to 'flush' to disable warnings about explicitly committing implicit
- * transactions, or calling commit when no transaction is in progress.
- * This will silently break any ongoing explicit transaction. Only set the flush flag if you are sure
- * that it is safe to ignore these warnings in your context.
+ * @param string $flush Flush flag, set to 'flush' to disable warnings about
+ * explicitly committing implicit transactions, or calling commit when no
+ * transaction is in progress. This will silently break any ongoing
+ * explicit transaction. Only set the flush flag if you are sure that it
+ * is safe to ignore these warnings in your context.
*/
final public function commit( $fname = __METHOD__, $flush = '' ) {
if ( !$this->mTrxAtomicLevels->isEmpty() ) {
// There are still atomic sections open. This cannot be ignored
- throw new DBUnexpectedError( $this, "Attempted to commit transaction while atomic sections are still open" );
+ throw new DBUnexpectedError(
+ $this,
+ "Attempted to commit transaction while atomic sections are still open"
+ );
}
if ( $flush != 'flush' ) {
if ( $this->mTrxDoneWrites ) {
Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname );
}
- $this->mTrxDoneWrites = false;
$this->runOnTransactionIdleCallbacks();
}
if ( $this->mTrxDoneWrites ) {
Profiler::instance()->transactionWritingOut( $this->mServer, $this->mDBname );
}
- $this->mTrxDoneWrites = false;
}
/**
* For caching purposes the list of all views should be stored in
* $this->allViews. The process cache can be cleared with clearViewsCache()
*
- * @param string $prefix Only show VIEWs with this prefix, eg. unit_test_
- * @param string $fname Name of calling function
+ * @param string $prefix Only show VIEWs with this prefix, eg. unit_test_
+ * @param string $fname Name of calling function
* @throws MWException
* @since 1.22
*/
* @param bool|callable $lineCallback Optional function called before reading each line
* @param bool|callable $resultCallback Optional function called for each MySQL result
* @param bool|string $fname Calling function name or false if name should be
- * generated dynamically using $filename
- * @param bool|callable $inputCallback Callback: Optional function called for each complete line sent
+ * generated dynamically using $filename
+ * @param bool|callable $inputCallback Callback: Optional function called
+ * for each complete line sent
* @throws MWException
* @throws Exception|MWException
* @return bool|string
try {
$error = $this->sourceStream( $fp, $lineCallback, $resultCallback, $fname, $inputCallback );
- }
- catch ( MWException $e ) {
+ } catch ( MWException $e ) {
fclose( $fp );
throw $e;
}
* @return bool|string
*/
public function sourceStream( $fp, $lineCallback = false, $resultCallback = false,
- $fname = __METHOD__, $inputCallback = false )
- {
+ $fname = __METHOD__, $inputCallback = false
+ ) {
$cmd = '';
while ( !feof( $fp ) ) {
if ( false === $res ) {
$err = $this->lastError();
+
return "Query \"{$cmd}\" failed with error code \"$err\".\n";
}
}
return true;
}
}
+
return false;
}
// replace /*$var*/
$ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
}
+
return $ins;
}
if ( $this->cascadingDeletes() ) {
$sql .= " CASCADE";
}
+
return $this->query( $sql, $fName );
}
$callers = array();
foreach ( $this->mTrxIdleCallbacks as $callbackInfo ) {
$callers[] = $callbackInfo[1];
-
}
$callers = implode( ', ', $callers );
trigger_error( "DB transaction callbacks still pending (from $callers)." );
* @ingroup Database
*/
class DBError extends MWException {
-
/**
* @var DatabaseBase
*/
} else {
$message = $fallback;
}
+
return wfMsgReplaceArgs( $message, $args );
}
function getHTML() {
global $wgShowDBErrorBacktrace, $wgShowHostnames, $wgShowSQLErrors;
- $sorry = htmlspecialchars( $this->msg( 'dberr-problems', 'Sorry! This site is experiencing technical difficulties.' ) );
- $again = htmlspecialchars( $this->msg( 'dberr-again', 'Try waiting a few minutes and reloading.' ) );
+ $sorry = htmlspecialchars( $this->msg(
+ 'dberr-problems',
+ 'Sorry! This site is experiencing technical difficulties.'
+ ) );
+ $again = htmlspecialchars( $this->msg(
+ 'dberr-again',
+ 'Try waiting a few minutes and reloading.'
+ ) );
if ( $wgShowHostnames || $wgShowSQLErrors ) {
$info = str_replace(
htmlspecialchars( $this->msg( 'dberr-info', '(Cannot contact the database server: $1)' ) )
);
} else {
- $info = htmlspecialchars( $this->msg( 'dberr-info-hidden', '(Cannot contact the database server)' ) );
+ $info = htmlspecialchars( $this->msg(
+ 'dberr-info-hidden',
+ '(Cannot contact the database server)'
+ ) );
}
# No database access
// Output cached page with notices on bottom and re-close body
echo "{$cache}<hr />{$this->getHTML()}</body></html>";
+
return;
}
} catch ( MWException $e ) {
function searchForm() {
global $wgSitename, $wgCanonicalServer, $wgRequest;
- $usegoogle = htmlspecialchars( $this->msg( 'dberr-usegoogle', 'You can try searching via Google in the meantime.' ) );
- $outofdate = htmlspecialchars( $this->msg( 'dberr-outofdate', 'Note that their indexes of our content may be out of date.' ) );
+ $usegoogle = htmlspecialchars( $this->msg(
+ 'dberr-usegoogle',
+ 'You can try searching via Google in the meantime.'
+ ) );
+ $outofdate = htmlspecialchars( $this->msg(
+ 'dberr-outofdate',
+ 'Note that their indexes of our content may be out of date.'
+ ) );
$googlesearch = htmlspecialchars( $this->msg( 'searchbutton', 'Search' ) );
$search = htmlspecialchars( $wgRequest->getVal( 'search' ) );
</p>
</form>
EOT;
+
return $trygoogle;
}
* @param $fname string
*/
function __construct( DatabaseBase $db, $error, $errno, $sql, $fname ) {
- $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading? See: https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+ $message = "A database error has occurred. Did you forget to run " .
+ "maintenance/update.php after upgrading? See: " .
+ "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
"Query: $sql\n" .
"Function: $fname\n" .
"Error: $errno $error\n";
'databaseerror-function' => 'Function: $1',
'databaseerror-error' => 'Error: $1',
);
+
return $messages[$key];
}
-
}
/**
* @ingroup Database
*/
-class DBUnexpectedError extends DBError {}
+class DBUnexpectedError extends DBError {
+}
function open( $server, $user, $password, $dbName ) {
# Test for driver support, to avoid suppressed fatal error
if ( !function_exists( 'sqlsrv_connect' ) ) {
- throw new DBConnectionError( $this, "MS Sql Server Native (sqlsrv) functions missing. You can download the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
+ throw new DBConnectionError(
+ $this,
+ "MS Sql Server Native (sqlsrv) functions missing. You can download " .
+ "the driver from: http://go.microsoft.com/fwlink/?LinkId=123470\n" );
}
global $wgDBport;
- if ( !strlen( $user ) ) { # e.g. the class is being loaded
+ # e.g. the class is being loaded
+ if ( !strlen( $user ) ) {
return;
}
// Start NT Auth Hack
// Quick and dirty work around to provide NT Auth designation support.
- // Current solution requires installer to know to input 'ntauth' for both username and password
- // to trigger connection via NT Auth. - ugly, ugly, ugly
- // TO-DO: Make this better and add NT Auth choice to MW installer when SQL Server option is chosen.
+ // Current solution requires installer to know to input 'ntauth' for
+ // both username and password to trigger connection via NT Auth. Ugly,
+ // ugly, ugly!
+ // @todo Make this better and add NT Auth choice to MW installer when
+ // SQL Server option is chosen.
$ntAuthUserTest = strtolower( $user );
$ntAuthPassTest = strtolower( $password );
if ( $this->mConn === false ) {
wfDebug( "DB connection error\n" );
- wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+ wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
+ substr( $password, 0, 3 ) . "...\n" );
wfDebug( $this->lastError() . "\n" );
+
return false;
}
$this->mOpened = true;
+
return $this->mConn;
}
wfDebug( "SQL: [$sql]\n" );
$this->offset = 0;
- // several extensions seem to think that all databases support limits via LIMIT N after the WHERE clause
- // well, MSSQL uses SELECT TOP N, so to catch any of those extensions we'll do a quick check for a LIMIT
- // clause and pass $sql through $this->LimitToTopN() which parses the limit clause and passes the result to
- // $this->limitResult();
+ // several extensions seem to think that all databases support limits
+ // via LIMIT N after the WHERE clause well, MSSQL uses SELECT TOP N,
+ // so to catch any of those extensions we'll do a quick check for a
+ // LIMIT clause and pass $sql through $this->LimitToTopN() which parses
+ // the limit clause and passes the result to $this->limitResult();
if ( preg_match( '/\bLIMIT\s*/i', $sql ) ) {
// massage LIMIT -> TopN
$sql = $this->LimitToTopN( $sql );
// perform query
$stmt = sqlsrv_query( $this->mConn, $sql );
if ( $stmt == false ) {
- $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading? See: http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+ $message = "A database error has occurred. Did you forget " .
+ "to run maintenance/update.php after upgrading? See: " .
+ "http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
"Query: " . htmlentities( $sql ) . "\n" .
"Function: " . __METHOD__ . "\n";
// process each error (our driver will give us an array of errors unlike other providers)
// remember number of rows affected
$this->mAffectedRows = sqlsrv_rows_affected( $stmt );
- // if it is a SELECT statement, or an insert with a request to output something we want to return a row.
+ // if it is a SELECT statement, or an insert with a request to output
+ // something we want to return a row.
if ( ( preg_match( '#\bSELECT\s#i', $sql ) ) ||
- ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) ) ) {
+ ( preg_match( '#\bINSERT\s#i', $sql ) && preg_match( '#\bOUTPUT\s+INSERTED\b#i', $sql ) )
+ ) {
// this is essentially a rowset, but Mediawiki calls these 'result'
// the rowset owns freeing the statement
$res = new MssqlResult( $stmt );
// otherwise we simply return it was successful, failure throws an exception
$res = true;
}
+
return $res;
}
$res = $res->result;
}
$row = $res->fetch( 'OBJECT' );
+
return $row;
}
} else {
$strRet = "No errors found";
}
+
return $strRet;
}
$res = $res->result;
}
$row = $res->fetch( SQLSRV_FETCH_BOTH );
+
return $row;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->numrows() : 0;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->numfields() : 0;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->fieldname( $n ) : 0;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return ( $res ) ? $res->seek( $row ) : false;
}
* @param $vars Mixed: array or string, field name(s) to be retrieved
* @param $conds Mixed: array or string, condition(s) for WHERE
* @param $fname String: calling function name (use __METHOD__) for logs/profiling
- * @param array $options associative array of options (e.g. array('GROUP BY' => 'page_title')),
- * see Database::makeSelectOptions code for list of supported stuff
- * @param $join_conds Array: Associative array of table join conditions (optional)
- * (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
- * @return Mixed: database result resource (feed to Database::fetchObject or whatever), or false on failure
+ * @param array $options associative array of options (e.g.
+ * array('GROUP BY' => 'page_title')), see Database::makeSelectOptions
+ * code for list of supported stuff
+ * @param $join_conds Array: Associative array of table join conditions
+ * (optional) (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
+ * @return Mixed: database result resource (feed to Database::fetchObject
+ * or whatever), or false on failure
*/
- function select( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() )
- {
+ function select( $table, $vars, $conds = '', $fname = __METHOD__,
+ $options = array(), $join_conds = array()
+ ) {
$sql = $this->selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
if ( isset( $options['EXPLAIN'] ) ) {
sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL ON;" );
$ret = $this->query( $sql, $fname );
sqlsrv_query( $this->mConn, "SET SHOWPLAN_ALL OFF;" );
+
return $ret;
}
+
return $this->query( $sql, $fname );
}
* @param $vars Mixed: Array or string, field name(s) to be retrieved
* @param $conds Mixed: Array or string, condition(s) for WHERE
* @param $fname String: Calling function name (use __METHOD__) for logs/profiling
- * @param array $options Associative array of options (e.g. array('GROUP BY' => 'page_title')),
+ * @param array $options Associative array of options (e.g. array('GROUP BY' => 'page_title')),
* see Database::makeSelectOptions code for list of supported stuff
* @param $join_conds Array: Associative array of table join conditions (optional)
* (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
* @return string, the SQL text
*/
- function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+ function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
+ $options = array(), $join_conds = array()
+ ) {
if ( isset( $options['EXPLAIN'] ) ) {
unset( $options['EXPLAIN'] );
}
+
return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
}
* Takes same arguments as Database::select()
* @return int
*/
- function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
- $options['EXPLAIN'] = true;// http://msdn2.microsoft.com/en-us/library/aa259203.aspx
+ function estimateRowCount( $table, $vars = '*', $conds = '',
+ $fname = __METHOD__, $options = array()
+ ) {
+ // http://msdn2.microsoft.com/en-us/library/aa259203.aspx
+ $options['EXPLAIN'] = true;
$res = $this->select( $table, $vars, $conds, $fname, $options );
$rows = -1;
$rows = $row['EstimateRows'];
}
}
+
return $rows;
}
* @return array|bool|null
*/
function indexInfo( $table, $index, $fname = __METHOD__ ) {
- # This does not return the same info as MYSQL would, but that's OK because MediaWiki never uses the
- # returned value except to check for the existance of indexes.
+ # This does not return the same info as MYSQL would, but that's OK
+ # because MediaWiki never uses the returned value except to check for
+ # the existance of indexes.
$sql = "sp_helpindex '" . $table . "'";
$res = $this->query( $sql, $fname );
if ( !$res ) {
}
}
}
+
return empty( $result ) ? false : $result;
}
$table = $this->tableName( $table );
- if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) {// Not multi row
- $arrToInsert = array( 0 => $arrToInsert );// make everything multi row compatible
+ if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) { // Not multi row
+ $arrToInsert = array( 0 => $arrToInsert ); // make everything multi row compatible
}
$allOk = true;
// We know the table we're inserting into, get its identity column
$identity = null;
- $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table ); // strip matching square brackets from table name
- $res = $this->doQuery( "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'" );
+ // strip matching square brackets from table name
+ $tableRaw = preg_replace( '#\[([^\]]*)\]#', '$1', $table );
+ $res = $this->doQuery(
+ "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS " .
+ "WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'"
+ );
if ( $res && $res->numrows() ) {
// There is an identity for this table.
$identity = array_pop( $res->fetch( SQLSRV_FETCH_ASSOC ) );
unset( $res );
foreach ( $arrToInsert as $a ) {
- // start out with empty identity column, this is so we can return it as a result of the insert logic
+ // start out with empty identity column, this is so we can return
+ // it as a result of the insert logic
$sqlPre = '';
$sqlPost = '';
$identityClause = '';
// there is a value being passed to us, we need to turn on and off inserted identity
$sqlPre = "SET IDENTITY_INSERT $table ON;";
$sqlPost = ";SET IDENTITY_INSERT $table OFF;";
-
} else {
// we can't insert NULL into an identity column, so remove the column from the insert.
unset( $a[$k] );
}
}
}
- $identityClause = "OUTPUT INSERTED.$identity "; // we want to output an identity column as result
+
+ // we want to output an identity column as result
+ $identityClause = "OUTPUT INSERTED.$identity ";
}
$keys = array_keys( $a );
// translate MySQL INSERT IGNORE to something SQL Server can use
// example:
// MySQL: INSERT IGNORE INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
- // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1') INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
+ // MSSQL: IF NOT EXISTS (SELECT * FROM user_groups WHERE ug_user = '1')
+ // INSERT INTO user_groups (ug_user,ug_group) VALUES ('1','sysop')
if ( $ignoreClause ) {
$prival = $a[$keys[0]];
$sqlPre .= "IF NOT EXISTS (SELECT * FROM $table WHERE $keys[0] = '$prival')";
}
$allOk = false;
}
+
return $allOk;
}
/**
* INSERT SELECT wrapper
* $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
- * Source items may be literals rather than field names, but strings should be quoted with Database::addQuotes()
- * $conds may be "*" to copy the whole table
- * srcTable may be an array of tables.
+ * Source items may be literals rather than field names, but strings should
+ * be quoted with Database::addQuotes().
* @param string $destTable
- * @param array|string $srcTable
+ * @param array|string $srcTable May be an array of tables.
* @param array $varMap
- * @param array $conds
+ * @param array $conds May be "*" to copy the whole table.
* @param string $fname
* @param array $insertOptions
* @param array $selectOptions
*/
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
$insertOptions = array(), $selectOptions = array() ) {
- $ret = parent::insertSelect( $destTable, $srcTable, $varMap, $conds, $fname, $insertOptions, $selectOptions );
+ $ret = parent::insertSelect(
+ $destTable,
+ $srcTable,
+ $varMap,
+ $conds,
+ $fname,
+ $insertOptions,
+ $selectOptions
+ );
if ( $ret === false ) {
throw new DBQueryError( $this, $this->getErrors(), $this->lastErrno(), /*$sql*/ '', $fname );
} elseif ( $ret != null ) {
// remember number of rows affected
$this->mAffectedRows = sqlsrv_rows_affected( $ret );
+
return $ret;
}
+
return null;
}
*/
function nextSequenceValue( $seqName ) {
if ( !$this->tableExists( 'sequence_' . $seqName ) ) {
- sqlsrv_query( $this->mConn, "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)" );
+ sqlsrv_query(
+ $this->mConn,
+ "CREATE TABLE [sequence_$seqName] (id INT NOT NULL IDENTITY PRIMARY KEY, junk varchar(10) NULL)"
+ );
}
sqlsrv_query( $this->mConn, "INSERT INTO [sequence_$seqName] (junk) VALUES ('')" );
$ret = sqlsrv_query( $this->mConn, "SELECT TOP 1 id FROM [sequence_$seqName] ORDER BY id DESC" );
- $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );// KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
+ // KEEP ASSOC THERE, weird weird bug dealing with the return value if you don't
+ $row = sqlsrv_fetch_array( $ret, SQLSRV_FETCH_ASSOC );
sqlsrv_free_stmt( $ret );
$this->mInsertId = $row['id'];
+
return $row['id'];
}
if ( $ret !== false ) {
$row = sqlsrv_fetch_array( $ret );
sqlsrv_free_stmt( $ret );
+
return $row['id'];
} else {
return $this->nextSequenceValue( $seqName );
if ( strtolower( $row['DATA_TYPE'] ) != 'text' ) {
$size = $row['CHARACTER_MAXIMUM_LENGTH'];
}
+
return $size;
}
) as sub2
) AS sub3
WHERE line3 BETWEEN ' . ( $offset + 1 ) . ' AND ' . ( $offset + $limit );
+
return $sql;
}
}
- // If there is a limit clause, parse it, strip it, and pass the remaining sql through limitResult()
- // with the appropriate parameters. Not the prettiest solution, but better than building a whole new parser.
- // This exists becase there are still too many extensions that don't use dynamic sql generation.
+ // If there is a limit clause, parse it, strip it, and pass the remaining
+ // SQL through limitResult() with the appropriate parameters. Not the
+ // prettiest solution, but better than building a whole new parser. This
+ // exists becase there are still too many extensions that don't use dynamic
+ // sql generation.
function LimitToTopN( $sql ) {
// Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
$pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
$row_count = $matches[4];
// offset = $matches[3] OR $matches[6]
$offset = $matches[3] or
- $offset = $matches[6] or
- $offset = false;
+ $offset = $matches[6] or
+ $offset = false;
// strip the matching LIMIT clause out
$sql = str_replace( $matches[0], '', $sql );
+
return $this->limitResult( $sql, $row_count, $offset );
}
+
return $sql;
}
if ( isset( $server_info['SQLServerVersion'] ) ) {
$version = $server_info['SQLServerVersion'];
}
+
return $version;
}
WHERE table_type='BASE TABLE' AND table_name = '$table'" );
if ( $res === false ) {
print "Error in tableExists query: " . $this->getErrors();
+
return false;
}
if ( sqlsrv_fetch( $res ) ) {
WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
if ( $res === false ) {
print "Error in fieldExists query: " . $this->getErrors();
+
return false;
}
if ( sqlsrv_fetch( $res ) ) {
WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
if ( $res === false ) {
print "Error in fieldInfo query: " . $this->getErrors();
+
return false;
}
$meta = $this->fetchRow( $res );
if ( $meta ) {
return new MssqlField( $meta );
}
+
return false;
}
throw new MWException( "The identifier '$identifier' is too long (max. 128)" );
}
if ( ( strpos( $identifier, '[' ) !== false ) || ( strpos( $identifier, ']' ) !== false ) ) {
- // It may be allowed if you quoted with double quotation marks, but that would break if QUOTED_IDENTIFIER is OFF
+ // It may be allowed if you quoted with double quotation marks, but
+ // that would break if QUOTED_IDENTIFIER is OFF
throw new MWException( "You can't use square brackers in the identifier '$identifier'" );
}
+
return "[$identifier]";
}
}
function encodeBlob( $b ) {
- // we can't have zero's and such, this is a simple encoding to make sure we don't barf
+ // we can't have zero's and such, this is a simple encoding to make sure we don't barf
return base64_encode( $b );
}
function decodeBlob( $b ) {
- // we can't have zero's and such, this is a simple encoding to make sure we don't barf
- return base64_decode( $b );
+ // we can't have zero's and such, this is a simple encoding to make sure we don't barf
+ return base64_decode( $b );
}
/**
// We can't separate explicit JOIN clauses with ',', use ' ' for those
$straightJoins = !empty( $ret ) ? implode( ',', $ret ) : "";
$otherJoins = !empty( $retJOIN ) ? implode( ' ', $retJOIN ) : "";
+
// Compile our final table clause
return implode( ' ', array( $straightJoins, $otherJoins ) );
}
public function getInfinity() {
return '3000-01-31 00:00:00.000';
}
-
} // end DatabaseMssql class
/**
*/
class MssqlField implements Field {
private $name, $tablename, $default, $max_length, $nullable, $type;
+
function __construct( $info ) {
$this->name = $info['COLUMN_NAME'];
$this->tablename = $info['TABLE_NAME'];
}
/**
- * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows into an array and maintain our
- * own cursor index into that array...This is similar to the way the Oracle driver handles this same issue
+ * The MSSQL PHP driver doesn't support sqlsrv_num_rows, so we recall all rows
+ * into an array and maintain our own cursor index into that array... This is
+ * similar to the way the Oracle driver handles this same issue
*
* @ingroup Database
*/
foreach ( $rows as $row ) {
if ( $row !== null ) {
foreach ( $row as $k => $v ) {
- if ( is_object( $v ) && method_exists( $v, 'format' ) ) {// DateTime Object
+ if ( is_object( $v ) && method_exists( $v, 'format' ) ) { // DateTime Object
$row[$k] = $v->format( "Y-m-d\TH:i:s\Z" );
}
}
- $this->mRows[] = $row;// read results into memory, cursors are not supported
+ $this->mRows[] = $row; // read results into memory, cursors are not supported
}
}
$this->mRowCount = count( $this->mRows );
}
}
}
+
return $obj;
}
}
$this->mCursor++;
+
return $ret;
}
public function fieldname( $nr ) {
$arrKeys = array_keys( $this->mRows[0] );
+
return $arrKeys[$nr];
}
default:
$strType = $intType;
}
+
return $strType;
}
* @see Database
*/
class DatabaseMysql extends DatabaseMysqlBase {
-
/**
* @param $sql string
* @return resource
} else {
$ret = mysql_unbuffered_query( $sql, $this->mConn );
}
+
return $ret;
}
# Fail now
# Otherwise we get a suppressed fatal error, which is very hard to track down
if ( !extension_loaded( 'mysql' ) ) {
- throw new DBConnectionError( $this, "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n" );
+ throw new DBConnectionError(
+ $this,
+ "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n"
+ );
}
$connFlags = 0;
return $conn;
}
+ /**
+ * @return bool
+ */
+ protected function mysqlSetCharset( $charset ) {
+ if ( function_exists( 'mysql_set_charset' ) ) {
+ return mysql_set_charset( $charset, $this->mConn );
+ } else {
+ return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
+ }
+ }
+
/**
* @return bool
*/
*/
function selectDB( $db ) {
$this->mDBname = $db;
+
return mysql_select_db( $db, $this->mConn );
}
} catch ( Exception $ex ) {
wfProfileOut( "dbconnect-$server" );
wfProfileOut( __METHOD__ );
+ $this->restoreErrorHandler();
throw $ex;
}
$error = $this->restoreErrorHandler();
substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError( $error );
}
"from client host " . wfHostname() . "\n" );
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError( "Error selecting database $dbName" );
}
}
// Tell the server we're communicating with it in UTF-8.
// This may engage various charset conversions.
if ( $wgDBmysql5 ) {
- $this->query( 'SET NAMES utf8', __METHOD__ );
+ $this->mysqlSetCharset( 'utf8' );
} else {
- $this->query( 'SET NAMES binary', __METHOD__ );
+ $this->mysqlSetCharset( 'binary' );
}
// Set SQL mode, default is turning them all off, can be overridden or skipped with null
if ( is_string( $wgSQLMode ) ) {
$mode = $this->addQuotes( $wgSQLMode );
- $this->query( "SET sql_mode = $mode", __METHOD__ );
+ // Use doQuery() to avoid opening implicit transactions (DBO_TRX)
+ $success = $this->doQuery( "SET sql_mode = $mode", __METHOD__ );
+ if ( !$success ) {
+ wfLogDBError( "Error setting sql_mode to $mode on server {$this->mServer}" );
+ wfProfileOut( __METHOD__ );
+ return $this->reportConnectionError( "Error setting sql_mode to $mode" );
+ }
}
$this->mOpened = true;
wfProfileOut( __METHOD__ );
+
return true;
}
*/
abstract protected function mysqlConnect( $realServer );
+ /**
+ * Set the character set of the MySQL link
+ *
+ * @param string $charset
+ * @return bool
+ */
+ abstract protected function mysqlSetCharset( $charset );
+
/**
* @param $res ResultWrapper
* @throws DBUnexpectedError
// these are the only errors mysql_fetch_object can cause.
// See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
if ( $errno == 2000 || $errno == 2013 ) {
- throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() )
+ );
}
+
return $row;
}
// these are the only errors mysql_fetch_array can cause.
// See http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html.
if ( $errno == 2000 || $errno == 2013 ) {
- throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() )
+ );
}
+
return $row;
}
wfSuppressWarnings();
$n = $this->mysqlNumRows( $res );
wfRestoreWarnings();
+
// Unfortunately, mysql_num_rows does not reset the last errno.
// We are not checking for any errors here, since
// these are no errors mysql_num_rows can cause.
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return $this->mysqlNumFields( $res );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return $this->mysqlFieldName( $res, $n );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return $this->mysqlDataSeek( $res, $row );
}
if ( $error ) {
$error .= ' (' . $this->mServer . ')';
}
+
return $error;
}
* @param $options string|array
* @return int
*/
- public function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
+ public function estimateRowCount( $table, $vars = '*', $conds = '',
+ $fname = __METHOD__, $options = array()
+ ) {
$options['EXPLAIN'] = true;
$res = $this->select( $table, $vars, $conds, $fname, $options );
if ( $res === false ) {
foreach ( $res as $plan ) {
$rows *= $plan->rows > 0 ? $plan->rows : 1; // avoid resetting to zero
}
+
return $rows;
}
return new MySQLField( $meta );
}
}
+
return false;
}
$result[] = $row;
}
}
+
return empty( $result ) ? false : $result;
}
$this->ping();
$sQuoted = $this->mysqlRealEscapeString( $s );
}
+
return $sQuoted;
}
public function addIdentifierQuotes( $s ) {
// Characters in the range \u0001-\uFFFF are valid in a quoted identifier
// Remove NUL bytes and escape backticks by doubling
- return '`' . str_replace( array( "\0", '`' ), array( '', '``' ), $s ) . '`';
+ return '`' . str_replace( array( "\0", '`' ), array( '', '``' ), $s ) . '`';
}
/**
$this->mOpened = false;
$this->mConn = false;
$this->open( $this->mServer, $this->mUser, $this->mPassword, $this->mDBname );
+
return true;
}
function getLag() {
if ( !is_null( $this->mFakeSlaveLag ) ) {
wfDebug( "getLag: fake slave lagged {$this->mFakeSlaveLag} seconds\n" );
+
return $this->mFakeSlaveLag;
}
$row->State != 'Waiting to reconnect after a failed master event read' &&
$row->State != 'Reconnecting after a failed master event read' &&
$row->State != 'Registering slave on master'
- ) {
+ ) {
# This is it, return the time (except -ve)
if ( $row->Time > 0x7fffffff ) {
return false;
}
}
}
+
return false;
}
if ( !is_null( $this->mFakeSlaveLag ) ) {
$status = parent::masterPosWait( $pos, $timeout );
wfProfileOut( __METHOD__ );
+
return $status;
}
}
wfProfileOut( __METHOD__ );
+
return $status;
}
$row = $this->fetchObject( $res );
if ( $row ) {
- $pos = isset( $row->Exec_master_log_pos ) ? $row->Exec_master_log_pos : $row->Exec_Master_Log_Pos;
+ $pos = isset( $row->Exec_master_log_pos )
+ ? $row->Exec_master_log_pos
+ : $row->Exec_Master_Log_Pos;
+
return new MySQLMasterPos( $row->Relay_Master_Log_File, $pos );
} else {
return false;
$this->delimiter = $m[1];
$newLine = '';
}
+
return parent::streamStatementEnd( $sql, $newLine );
}
$lockName = $this->addQuotes( $lockName );
$result = $this->query( "SELECT IS_FREE_LOCK($lockName) AS lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus == 1 );
}
return true;
} else {
wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
return false;
}
}
/**
- * FROM MYSQL DOCS: http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
+ * FROM MYSQL DOCS:
+ * http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
* @param $lockName string
* @param $method string
* @return bool
$lockName = $this->addQuotes( $lockName );
$result = $this->query( "SELECT RELEASE_LOCK($lockName) as lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus == 1 );
}
foreach ( $write as $table ) {
$tbl = $this->tableName( $table ) .
- ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
- ' WRITE';
+ ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
+ ' WRITE';
$items[] = $tbl;
}
foreach ( $read as $table ) {
}
$sql = "LOCK TABLES " . implode( ',', $items );
$this->query( $sql, $method );
+
return true;
}
*/
public function unlockTables( $method ) {
$this->query( "UNLOCK TABLES", $method );
+
return true;
}
*/
function getServerUptime() {
$vars = $this->getMysqlStatus( 'Uptime' );
+
return (int)$vars['Uptime'];
}
if ( !$this->tableExists( $tableName, $fName ) ) {
return false;
}
+
return $this->query( "DROP TABLE IF EXISTS " . $this->tableName( $tableName ), $fName );
}
protected function getDefaultSchemaVars() {
$vars = parent::getDefaultSchemaVars();
$vars['wgDBTableOptions'] = str_replace( 'TYPE', 'ENGINE', $GLOBALS['wgDBTableOptions'] );
- $vars['wgDBTableOptions'] = str_replace( 'CHARSET=mysql4', 'CHARSET=binary', $vars['wgDBTableOptions'] );
+ $vars['wgDBTableOptions'] = str_replace(
+ 'CHARSET=mysql4',
+ 'CHARSET=binary',
+ $vars['wgDBTableOptions']
+ );
+
return $vars;
}
/**
* Lists VIEWs in the database
*
- * @param string $prefix Only show VIEWs with this prefix, eg.
+ * @param string $prefix Only show VIEWs with this prefix, eg.
* unit_test_, or $wgDBprefix. Default: null, would return all views.
- * @param string $fname Name of calling function
+ * @param string $fname Name of calling function
* @return array
* @since 1.22
*/
// Query for the VIEWS
$result = $this->query( 'SHOW FULL TABLES WHERE TABLE_TYPE = "VIEW"' );
$this->allViews = array();
- while ( ($row = $this->fetchRow($result)) !== false ) {
+ while ( ( $row = $this->fetchRow( $result ) ) !== false ) {
array_push( $this->allViews, $row[$propertyName] );
}
}
- if ( is_null($prefix) || $prefix === '' ) {
+ if ( is_null( $prefix ) || $prefix === '' ) {
return $this->allViews;
}
array_push( $filteredViews, $viewName );
}
}
+
return $filteredViews;
}
public function isView( $name, $prefix = null ) {
return in_array( $name, $this->listViews( $prefix ) );
}
-
}
-
-
/**
* Utility class.
* @ingroup Database
if ( preg_match( '!\.(\d+)/(\d+)$!', (string)$this, $m ) ) {
return array( (int)$m[1], (int)$m[2] );
}
+
return false;
}
function hasReached( MySQLMasterPos $pos ) {
$thisPos = $this->getCoordinates();
$thatPos = $pos->getCoordinates();
+
return ( $thisPos && $thatPos && $thisPos >= $thatPos );
}
}
* @see Database
*/
class DatabaseMysqli extends DatabaseMysqlBase {
-
/**
* @param $sql string
* @return resource
} else {
$ret = $this->mConn->query( $sql, MYSQLI_USE_RESULT );
}
+
return $ret;
}
usleep( 1000 );
}
if ( $mysqli->real_connect( $realServer, $this->mUser,
- $this->mPassword, $this->mDBname, null, null, $connFlags ) )
- {
+ $this->mPassword, $this->mDBname, null, null, $connFlags )
+ ) {
return $mysqli;
}
}
return false;
}
+ /**
+ * @return bool
+ */
+ protected function mysqlSetCharset( $charset ) {
+ if ( method_exists( $this->mConn, 'set_charset' ) ) {
+ return $this->mConn->set_charset( $charset );
+ } else {
+ return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
+ }
+ }
+
/**
* @return bool
*/
*/
function selectDB( $db ) {
$this->mDBname = $db;
+
return $this->mConn->select_db( $db );
}
protected function mysqlFreeResult( $res ) {
$res->free_result();
+
return true;
}
if ( $object === null ) {
return false;
}
+
return $object;
}
if ( $array === null ) {
return false;
}
+
return $array;
}
$field->unique_key = $field->flags & MYSQLI_UNIQUE_KEY_FLAG;
$field->multiple_key = $field->flags & MYSQLI_MULTIPLE_KEY_FLAG;
$field->binary = $field->flags & MYSQLI_BINARY_FLAG;
+
return $field;
}
protected function mysqlFieldName( $res, $n ) {
$field = $res->fetch_field_direct( $n );
+
return $field->name;
}
}
protected function mysqlError( $conn = null ) {
- if ($conn === null) {
+ if ( $conn === null ) {
return mysqli_connect_error();
} else {
return $conn->error;
protected function mysqlPing() {
return $this->mConn->ping();
}
-
}
function __construct( &$db, $stmt, $unique = false ) {
$this->db =& $db;
- if ( ( $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, - 1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM ) ) === false ) {
+ $this->nrows = oci_fetch_all( $stmt, $this->rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM );
+ if ( $this->nrows === false ) {
$e = oci_error( $stmt );
$db->reportQueryError( $e['message'], $e['code'], '', __METHOD__ );
$this->free();
+
return;
}
$ret[$lc] = $v;
$ret[$k] = $v;
}
+
return $ret;
}
}
function cascadingDeletes() {
return true;
}
+
function cleanupTriggers() {
return true;
}
+
function strictIPs() {
return true;
}
+
function realTimestamps() {
return true;
}
+
function implicitGroupby() {
return false;
}
+
function implicitOrderby() {
return false;
}
+
function searchableIPs() {
return true;
}
function open( $server, $user, $password, $dbName ) {
global $wgDBOracleDRCP;
if ( !function_exists( 'oci_connect' ) ) {
- throw new DBConnectionError( $this, "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+ throw new DBConnectionError(
+ $this,
+ "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n " .
+ "(Note: if you recently installed PHP, you may need to restart your webserver\n " .
+ "and database)\n" );
}
$this->close();
wfSuppressWarnings();
if ( $this->mFlags & DBO_PERSISTENT ) {
- $this->mConn = oci_pconnect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+ $this->mConn = oci_pconnect(
+ $this->mUser,
+ $this->mPassword,
+ $this->mServer,
+ $this->defaultCharset,
+ $session_mode
+ );
} elseif ( $this->mFlags & DBO_DEFAULT ) {
- $this->mConn = oci_new_connect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+ $this->mConn = oci_new_connect(
+ $this->mUser,
+ $this->mPassword,
+ $this->mServer,
+ $this->defaultCharset,
+ $session_mode
+ );
} else {
- $this->mConn = oci_connect( $this->mUser, $this->mPassword, $this->mServer, $this->defaultCharset, $session_mode );
+ $this->mConn = oci_connect(
+ $this->mUser,
+ $this->mPassword,
+ $this->mServer,
+ $this->defaultCharset,
+ $session_mode
+ );
}
wfRestoreWarnings();
$this->doQuery( 'ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'DD-MM-YYYY HH24:MI:SS.FF6\'' );
$this->doQuery( 'ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT=\'DD-MM-YYYY HH24:MI:SS.FF6\'' );
$this->doQuery( 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=\'.,\'' );
+
return $this->mConn;
}
// you have to select data from plan table after explain
$explain_id = MWTimestamp::getLocalInstance()->format( 'dmYHis' );
- $sql = preg_replace( '/^EXPLAIN /', 'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR', $sql, 1, $explain_count );
+ $sql = preg_replace(
+ '/^EXPLAIN /',
+ 'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR',
+ $sql,
+ 1,
+ $explain_count
+ );
wfSuppressWarnings();
if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
$e = oci_error( $this->mConn );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
$e = oci_error( $stmt );
if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
}
wfRestoreWarnings();
if ( $explain_count > 0 ) {
- return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table WHERE statement_id = \'' . $explain_id . '\'' );
+ return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table ' .
+ 'WHERE statement_id = \'' . $explain_id . '\'' );
} elseif ( oci_statement_type( $stmt ) == 'SELECT' ) {
return new ORAResult( $this, $stmt, $union_unique );
} else {
$this->mAffectedRows = oci_num_rows( $stmt );
+
return true;
}
}
} else {
$e = oci_error( $this->mConn );
}
+
return $e['message'];
}
} else {
$e = oci_error( $this->mConn );
}
+
return $e['code'];
}
if ( is_numeric( $col ) ) {
$bind = $val;
$val = null;
+
return $bind;
} elseif ( $includeCol ) {
$bind = "$col = ";
if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
$e = oci_error( $this->mConn );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
foreach ( $row as $col => &$val ) {
if ( oci_bind_by_name( $stmt, ":$col", $val, -1, SQLT_CHR ) === false ) {
$e = oci_error( $stmt );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
} else {
if ( $col_type == 'BLOB' ) {
$lob[$col]->writeTemporary( $val, OCI_TEMP_BLOB );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_BLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_BLOB );
} else {
$lob[$col]->writeTemporary( $val, OCI_TEMP_CLOB );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_CLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
}
}
}
$e = oci_error( $stmt );
if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
} else {
$this->mAffectedRows = oci_num_rows( $stmt );
}
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
- $insertOptions = array(), $selectOptions = array() )
- {
+ $insertOptions = array(), $selectOptions = array()
+ ) {
$destTable = $this->tableName( $destTable );
if ( !is_array( $selectOptions ) ) {
$selectOptions = array( $selectOptions );
}
if ( ( $sequenceData = $this->getSequenceData( $destTable ) ) !== false &&
- !isset( $varMap[$sequenceData['column']] ) )
- {
+ !isset( $varMap[$sequenceData['column']] )
+ ) {
$varMap[$sequenceData['column']] = 'GET_SEQUENCE_VALUE(\'' . $sequenceData['sequence'] . '\')';
}
function tableNameInternal( $name ) {
$name = $this->tableName( $name );
+
return preg_replace( '/.*\.(.*)/', '$1', $name );
}
+
/**
* Return the next in a sequence, save the value for retrieval via insertId()
* @return null
$res = $this->query( "SELECT $seqName.nextval FROM dual" );
$row = $this->fetchRow( $res );
$this->mInsertId = $row[0];
+
return $this->mInsertId;
}
private function getSequenceData( $table ) {
if ( $this->sequenceData == null ) {
$result = $this->doQuery( "SELECT lower(asq.sequence_name),
- lower(atc.table_name),
- lower(atc.column_name)
- FROM all_sequences asq, all_tab_columns atc
- WHERE decode(atc.table_name, '{$this->mTablePrefix}MWUSER', '{$this->mTablePrefix}USER', atc.table_name) || '_' ||
- atc.column_name || '_SEQ' = '{$this->mTablePrefix}' || asq.sequence_name
- AND asq.sequence_owner = upper('{$this->mDBname}')
- AND atc.owner = upper('{$this->mDBname}')" );
+ lower(atc.table_name),
+ lower(atc.column_name)
+ FROM all_sequences asq, all_tab_columns atc
+ WHERE decode(
+ atc.table_name,
+ '{$this->mTablePrefix}MWUSER',
+ '{$this->mTablePrefix}USER',
+ atc.table_name
+ ) || '_' ||
+ atc.column_name || '_SEQ' = '{$this->mTablePrefix}' || asq.sequence_name
+ AND asq.sequence_owner = upper('{$this->mDBname}')
+ AND atc.owner = upper('{$this->mDBname}')" );
while ( ( $row = $result->fetchRow() ) !== false ) {
$this->sequenceData[$row[1]] = array(
}
}
$table = strtolower( $this->removeIdentifierQuotes( $this->tableName( $table ) ) );
+
return ( isset( $this->sequenceData[$table] ) ) ? $this->sequenceData[$table] : false;
}
# Returns the size of a text field, or -1 for "unlimited"
function textFieldSize( $table, $field ) {
$fieldInfoData = $this->fieldInfo( $table, $field );
+
return $fieldInfoData->maxLength();
}
if ( $offset === false ) {
$offset = 0;
}
+
return "SELECT * FROM ($sql) WHERE rownum >= (1 + $offset) AND rownum < (1 + $limit + $offset)";
}
if ( $b instanceof Blob ) {
$b = $b->fetch();
}
+
return $b;
}
function unionQueries( $sqls, $all ) {
$glue = ' UNION ALL ';
- return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) . 'FROM (' . implode( $glue, $sqls ) . ')';
+
+ return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) .
+ 'FROM (' . implode( $glue, $sqls ) . ')';
}
function wasDeadlock() {
return $this->lastErrno() == 'OCI-00060';
}
- function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
+ function duplicateTableStructure( $oldName, $newName, $temporary = false,
+ $fname = __METHOD__
+ ) {
$temporary = $temporary ? 'TRUE' : 'FALSE';
$newName = strtoupper( $newName );
$oldPrefix = substr( $oldName, 0, strlen( $oldName ) - strlen( $tabName ) );
$newPrefix = strtoupper( $this->mTablePrefix );
- return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', '$oldPrefix', '$newPrefix', $temporary ); END;" );
+ return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', " .
+ "'$oldPrefix', '$newPrefix', $temporary ); END;" );
}
function listTables( $prefix = null, $fname = __METHOD__ ) {
}
$owner = strtoupper( $this->mDBname );
- $result = $this->doQuery( "SELECT table_name FROM all_tables WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
+ $result = $this->doQuery( "SELECT table_name FROM all_tables " .
+ "WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
// dirty code ... i know
$endArray = array();
*/
function getServerVersion() {
//better version number, fallback on driver
- $rset = $this->doQuery( 'SELECT version FROM product_component_version WHERE UPPER(product) LIKE \'ORACLE DATABASE%\'' );
+ $rset = $this->doQuery(
+ 'SELECT version FROM product_component_version ' .
+ 'WHERE UPPER(product) LIKE \'ORACLE DATABASE%\''
+ );
if ( !( $row = $rset->fetchRow() ) ) {
return oci_server_version( $this->mConn );
}
+
return $row['version'];
}
} else {
$count = 0;
}
+
return $count != 0;
}
}
$res->free();
+
return $exists;
}
$tableWhere = '= \'' . $table . '\'';
}
- $fieldInfoStmt = oci_parse( $this->mConn, 'SELECT * FROM wiki_field_info_full WHERE table_name ' . $tableWhere . ' and column_name = \'' . $field . '\'' );
+ $fieldInfoStmt = oci_parse(
+ $this->mConn,
+ 'SELECT * FROM wiki_field_info_full WHERE table_name ' .
+ $tableWhere . ' and column_name = \'' . $field . '\''
+ );
if ( oci_execute( $fieldInfoStmt, $this->execFlags() ) === false ) {
$e = oci_error( $fieldInfoStmt );
$this->reportQueryError( $e['message'], $e['code'], 'fieldInfo QUERY', __METHOD__ );
+
return false;
}
$res = new ORAResult( $this, $fieldInfoStmt );
$this->mFieldInfoCache["$table.$field"] = $fieldInfoTemp;
}
$res->free();
+
return $fieldInfoTemp;
}
if ( is_array( $table ) ) {
throw new DBUnexpectedError( $this, 'DatabaseOracle::fieldInfo called with table array!' );
}
+
return $this->fieldInfoMulti( $table, $field );
}
$replacements = array();
- while ( ! feof( $fp ) ) {
+ while ( !feof( $fp ) ) {
if ( $lineCallback ) {
call_user_func( $lineCallback );
}
if ( $sl < 0 ) {
continue;
}
- if ( '-' == $line { 0 } && '-' == $line { 1 } ) {
+ if ( '-' == $line[0] && '-' == $line[1] ) {
continue;
}
$dollarquote = true;
}
} elseif ( !$dollarquote ) {
- if ( ';' == $line { $sl } && ( $sl < 2 || ';' != $line { $sl - 1 } ) ) {
+ if ( ';' == $line[$sl] && ( $sl < 2 || ';' != $line[$sl - 1] ) ) {
$done = true;
$line = substr( $line, 0, $sl );
}
if ( false === $res ) {
$err = $this->lastError();
+
return "Query \"{$cmd}\" failed with error code \"$err\".\n";
}
}
$done = false;
}
}
+
return true;
}
if ( $e['code'] != '1435' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
}
+
return false;
}
+
return true;
}
if ( isset( $wgContLang->mLoaded ) && $wgContLang->mLoaded ) {
$s = $wgContLang->checkTitleEncoding( $s );
}
+
return "'" . $this->strencode( $s ) . "'";
}
if ( !$this->getFlag( DBO_DDLMODE ) ) {
$s = '/*Q*/' . $s;
}
+
return $s;
}
$conds2[$col] = $val;
}
}
+
return $conds2;
}
- function selectRow( $table, $vars, $conds, $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+ function selectRow( $table, $vars, $conds, $fname = __METHOD__,
+ $options = array(), $join_conds = array()
+ ) {
if ( is_array( $conds ) ) {
$conds = $this->wrapConditionsForWhere( $table, $conds );
}
+
return parent::selectRow( $table, $vars, $conds, $fname, $options, $join_conds );
}
$startOpts .= 'DISTINCT';
}
- if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) {
+ if ( isset( $options['USE INDEX'] ) && !is_array( $options['USE INDEX'] ) ) {
$useIndex = $this->useIndexClause( $options['USE INDEX'] );
} else {
$useIndex = '';
// all deletions on these tables have transactions so final failure rollbacks these updates
$table = $this->tableName( $table );
if ( $table == $this->tableName( 'user' ) ) {
- $this->update( 'archive', array( 'ar_user' => 0 ), array( 'ar_user' => $conds['user_id'] ), $fname );
- $this->update( 'ipblocks', array( 'ipb_user' => 0 ), array( 'ipb_user' => $conds['user_id'] ), $fname );
- $this->update( 'image', array( 'img_user' => 0 ), array( 'img_user' => $conds['user_id'] ), $fname );
- $this->update( 'oldimage', array( 'oi_user' => 0 ), array( 'oi_user' => $conds['user_id'] ), $fname );
- $this->update( 'filearchive', array( 'fa_deleted_user' => 0 ), array( 'fa_deleted_user' => $conds['user_id'] ), $fname );
- $this->update( 'filearchive', array( 'fa_user' => 0 ), array( 'fa_user' => $conds['user_id'] ), $fname );
- $this->update( 'uploadstash', array( 'us_user' => 0 ), array( 'us_user' => $conds['user_id'] ), $fname );
- $this->update( 'recentchanges', array( 'rc_user' => 0 ), array( 'rc_user' => $conds['user_id'] ), $fname );
- $this->update( 'logging', array( 'log_user' => 0 ), array( 'log_user' => $conds['user_id'] ), $fname );
+ $this->update( 'archive', array( 'ar_user' => 0 ),
+ array( 'ar_user' => $conds['user_id'] ), $fname );
+ $this->update( 'ipblocks', array( 'ipb_user' => 0 ),
+ array( 'ipb_user' => $conds['user_id'] ), $fname );
+ $this->update( 'image', array( 'img_user' => 0 ),
+ array( 'img_user' => $conds['user_id'] ), $fname );
+ $this->update( 'oldimage', array( 'oi_user' => 0 ),
+ array( 'oi_user' => $conds['user_id'] ), $fname );
+ $this->update( 'filearchive', array( 'fa_deleted_user' => 0 ),
+ array( 'fa_deleted_user' => $conds['user_id'] ), $fname );
+ $this->update( 'filearchive', array( 'fa_user' => 0 ),
+ array( 'fa_user' => $conds['user_id'] ), $fname );
+ $this->update( 'uploadstash', array( 'us_user' => 0 ),
+ array( 'us_user' => $conds['user_id'] ), $fname );
+ $this->update( 'recentchanges', array( 'rc_user' => 0 ),
+ array( 'rc_user' => $conds['user_id'] ), $fname );
+ $this->update( 'logging', array( 'log_user' => 0 ),
+ array( 'log_user' => $conds['user_id'] ), $fname );
} elseif ( $table == $this->tableName( 'image' ) ) {
- $this->update( 'oldimage', array( 'oi_name' => 0 ), array( 'oi_name' => $conds['img_name'] ), $fname );
+ $this->update( 'oldimage', array( 'oi_name' => 0 ),
+ array( 'oi_name' => $conds['img_name'] ), $fname );
}
+
return parent::delete( $table, $conds, $fname );
}
if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
$e = oci_error( $this->mConn );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
foreach ( $values as $col => &$val ) {
if ( oci_bind_by_name( $stmt, ":$col", $val ) === false ) {
$e = oci_error( $stmt );
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
}
} else {
if ( $col_type == 'BLOB' ) {
$lob[$col]->writeTemporary( $val );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, SQLT_BLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, SQLT_BLOB );
} else {
$lob[$col]->writeTemporary( $val );
- oci_bind_by_name( $stmt, ":$col", $lob[$col], - 1, OCI_B_CLOB );
+ oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
}
}
}
$e = oci_error( $stmt );
if ( !$this->ignore_DUP_VAL_ON_INDEX || $e['code'] != '1' ) {
$this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
+
return false;
} else {
$this->mAffectedRows = oci_num_rows( $stmt );
return $this->mServer;
}
+ public function buildGroupConcatField(
+ $delim, $table, $field, $conds = '', $join_conds = array()
+ ) {
+ $fld = "LISTAGG($field," . $this->addQuotes( $delim ) . ") WITHIN GROUP (ORDER BY $field)";
+
+ return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+ }
+
public function getSearchEngine() {
return 'SearchOracle';
}
public function getInfinity() {
return '31-12-2030 12:00:00.000000';
}
-
} // end DatabaseOracle class
$n->conname = $row->conname;
$n->has_default = ( $row->atthasdef === 't' );
$n->default = $row->adsrc;
+
return $n;
}
function conname() {
return $this->conname;
}
+
/**
* @since 1.19
*/
return false;
}
}
-
}
/**
}
$old = next( $this->mCurrentState );
$new = next( $this->mNewState );
-
}
}
}
$this->didbegin = false;
/* If we are not in a transaction, we need to be for savepoint trickery */
if ( !$dbw->trxLevel() ) {
- $dbw->begin( "FOR SAVEPOINT" );
- $this->didbegin = true;
+ $dbw->begin( "FOR SAVEPOINT" );
+ $this->didbegin = true;
}
}
global $wgDebugDBTransactions;
if ( $this->dbw->doQuery( $keyword . " " . $this->id ) !== false ) {
if ( $wgDebugDBTransactions ) {
- wfDebug( sprintf ( $msg_ok, $this->id ) );
+ wfDebug( sprintf( $msg_ok, $this->id ) );
}
} else {
- wfDebug( sprintf ( $msg_failed, $this->id ) );
+ wfDebug( sprintf( $msg_failed, $this->id ) );
}
}
function cascadingDeletes() {
return true;
}
+
function cleanupTriggers() {
return true;
}
+
function strictIPs() {
return true;
}
+
function realTimestamps() {
return true;
}
+
function implicitGroupby() {
return false;
}
+
function implicitOrderby() {
return false;
}
+
function searchableIPs() {
return true;
}
+
function functionalIndexes() {
return true;
}
function hasConstraint( $name ) {
- $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n WHERE c.connamespace = n.oid AND conname = '" .
- pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
+ $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
+ "WHERE c.connamespace = n.oid AND conname = '" .
+ pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" .
+ pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
$res = $this->doQuery( $SQL );
+
return $this->numRows( $res );
}
function open( $server, $user, $password, $dbName ) {
# Test for Postgres support, to avoid suppressed fatal error
if ( !function_exists( 'pg_connect' ) ) {
- throw new DBConnectionError( $this, "Postgres functions missing, have you compiled PHP with the --with-pgsql option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+ throw new DBConnectionError(
+ $this,
+ "Postgres functions missing, have you compiled PHP with the --with-pgsql\n" .
+ "option? (Note: if you recently installed PHP, you may need to restart your\n" .
+ "webserver and database)\n"
+ );
}
global $wgDBport;
$this->connectString = $this->makeConnectionString( $connectVars, PGSQL_CONNECT_FORCE_NEW );
$this->close();
$this->installErrorHandler();
- $this->mConn = pg_connect( $this->connectString );
+
+ try {
+ $this->mConn = pg_connect( $this->connectString );
+ } catch ( Exception $ex ) {
+ $this->restoreErrorHandler();
+ throw $ex;
+ }
+
$phpError = $this->restoreErrorHandler();
if ( !$this->mConn ) {
wfDebug( "DB connection error\n" );
- wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+ wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " .
+ substr( $password, 0, 3 ) . "...\n" );
wfDebug( $this->lastError() . "\n" );
throw new DBConnectionError( $this, str_replace( "\n", ' ', $phpError ) );
}
foreach ( $vars as $name => $value ) {
$s .= "$name='" . str_replace( "'", "\\'", $value ) . "' ";
}
+
return $s;
}
if ( pg_result_error( $this->mLastResult ) ) {
return false;
}
+
return $this->mLastResult;
}
protected function dumpError() {
- $diags = array( PGSQL_DIAG_SEVERITY,
- PGSQL_DIAG_SQLSTATE,
- PGSQL_DIAG_MESSAGE_PRIMARY,
- PGSQL_DIAG_MESSAGE_DETAIL,
- PGSQL_DIAG_MESSAGE_HINT,
- PGSQL_DIAG_STATEMENT_POSITION,
- PGSQL_DIAG_INTERNAL_POSITION,
- PGSQL_DIAG_INTERNAL_QUERY,
- PGSQL_DIAG_CONTEXT,
- PGSQL_DIAG_SOURCE_FILE,
- PGSQL_DIAG_SOURCE_LINE,
- PGSQL_DIAG_SOURCE_FUNCTION );
+ $diags = array(
+ PGSQL_DIAG_SEVERITY,
+ PGSQL_DIAG_SQLSTATE,
+ PGSQL_DIAG_MESSAGE_PRIMARY,
+ PGSQL_DIAG_MESSAGE_DETAIL,
+ PGSQL_DIAG_MESSAGE_HINT,
+ PGSQL_DIAG_STATEMENT_POSITION,
+ PGSQL_DIAG_INTERNAL_POSITION,
+ PGSQL_DIAG_INTERNAL_QUERY,
+ PGSQL_DIAG_CONTEXT,
+ PGSQL_DIAG_SOURCE_FILE,
+ PGSQL_DIAG_SOURCE_LINE,
+ PGSQL_DIAG_SOURCE_FUNCTION
+ );
foreach ( $diags as $d ) {
- wfDebug( sprintf( "PgSQL ERROR(%d): %s\n", $d, pg_result_error_field( $this->mLastResult, $d ) ) );
+ wfDebug( sprintf( "PgSQL ERROR(%d): %s\n",
+ $d, pg_result_error_field( $this->mLastResult, $d ) ) );
}
}
/* Check for constraint violation */
if ( $errno === '23505' ) {
parent::reportQueryError( $error, $errno, $sql, $fname, $tempIgnore );
+
return;
}
}
# @todo hashar: not sure if the following test really trigger if the object
# fetching failed.
if ( pg_last_error( $this->mConn ) ) {
- throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+ );
}
+
return $row;
}
$row = pg_fetch_array( $res );
wfRestoreWarnings();
if ( pg_last_error( $this->mConn ) ) {
- throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+ );
}
+
return $row;
}
$n = pg_num_rows( $res );
wfRestoreWarnings();
if ( pg_last_error( $this->mConn ) ) {
- throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) );
+ throw new DBUnexpectedError(
+ $this,
+ 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+ );
}
+
return $n;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_num_fields( $res );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_field_name( $res, $n );
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_result_seek( $res, $row );
}
return 'No database connection';
}
}
+
function lastErrno() {
if ( $this->mLastResult ) {
return pg_result_error_field( $this->mLastResult, PGSQL_DIAG_SQLSTATE );
if ( empty( $this->mLastResult ) ) {
return 0;
}
+
return pg_affected_rows( $this->mLastResult );
}
* Takes same arguments as Database::select()
* @return int
*/
- function estimateRowCount( $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array() ) {
+ function estimateRowCount( $table, $vars = '*', $conds = '',
+ $fname = __METHOD__, $options = array()
+ ) {
$options['EXPLAIN'] = true;
$res = $this->select( $table, $vars, $conds, $fname, $options );
$rows = -1;
$rows = $count[1];
}
}
+
return $rows;
}
return $row;
}
}
+
return false;
}
} else {
return null;
}
+
return $a;
}
foreach ( $res as $row ) {
return true;
}
+
return false;
}
/**
* INSERT SELECT wrapper
* $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
- * Source items may be literals rather then field names, but strings should be quoted with Database::addQuotes()
+ * Source items may be literals rather then field names, but strings should
+ * be quoted with Database::addQuotes()
* $conds may be "*" to copy the whole table
* srcTable may be an array of tables.
* @todo FIXME: Implement this a little better (seperate select/insert)?
* @return bool
*/
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
- $insertOptions = array(), $selectOptions = array() )
- {
+ $insertOptions = array(), $selectOptions = array() ) {
$destTable = $this->tableName( $destTable );
if ( !is_array( $insertOptions ) ) {
}
$sql = "INSERT INTO $destTable (" . implode( ',', array_keys( $varMap ) ) . ')' .
- " SELECT $startOpts " . implode( ',', $varMap ) .
- " FROM $srcTable $useIndex";
+ " SELECT $startOpts " . implode( ',', $varMap ) .
+ " FROM $srcTable $useIndex";
if ( $conds != '*' ) {
$sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
$res = $this->query( "SELECT nextval('$safeseq')" );
$row = $this->fetchRow( $res );
$this->mInsertId = $row[0];
+
return $this->mInsertId;
}
$res = $this->query( "SELECT currval('$safeseq')" );
$row = $this->fetchRow( $res );
$currval = $row[0];
+
return $currval;
}
} else {
$size = $row->size;
}
+
return $size;
}
function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
$newName = $this->addIdentifierQuotes( $newName );
$oldName = $this->addIdentifierQuotes( $oldName );
- return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName (LIKE $oldName INCLUDING DEFAULTS)", $fname );
+
+ return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName " .
+ "(LIKE $oldName INCLUDING DEFAULTS)", $fname );
}
function listTables( $prefix = null, $fname = __METHOD__ ) {
$text, $match, 0, $offset );
$offset += strlen( $match[0] );
$output[] = ( '"' != $match[1][0]
- ? $match[1]
- : stripcslashes( substr( $match[1], 1, -1 ) ) );
+ ? $match[1]
+ : stripcslashes( substr( $match[1], 1, -1 ) ) );
if ( '},' == $match[3] ) {
return $output;
}
$offset = $this->pg_array_parse( $text, $output, $limit, $offset + 1 );
}
} while ( $limit > $offset );
+
return $output;
}
function getCurrentSchema() {
$res = $this->query( "SELECT current_schema()", __METHOD__ );
$row = $this->fetchRow( $res );
+
return $row[0];
}
$res = $this->query( "SELECT current_schemas(false)", __METHOD__ );
$row = $this->fetchRow( $res );
$schemas = array();
+
/* PHP pgsql support does not support array type, "{a,b}" string is returned */
+
return $this->pg_array_parse( $row[0], $schemas );
}
function getSearchPath() {
$res = $this->query( "SHOW search_path", __METHOD__ );
$row = $this->fetchRow( $res );
+
/* PostgreSQL returns SHOW values as strings */
+
return explode( ",", $row[0] );
}
*/
$search_path = $this->getSearchPath();
array_unshift( $search_path,
- $this->addIdentifierQuotes( $desired_schema ));
+ $this->addIdentifierQuotes( $desired_schema ) );
$this->setSearchPath( $search_path );
$this->mCoreSchema = $desired_schema;
wfDebug( "Schema \"" . $desired_schema . "\" added to the search path\n" );
}
} else {
$this->mCoreSchema = $this->getCurrentSchema();
- wfDebug( "Schema \"" . $desired_schema . "\" not found, using current \"" . $this->mCoreSchema . "\"\n" );
+ wfDebug( "Schema \"" . $desired_schema . "\" not found, using current \"" .
+ $this->mCoreSchema . "\"\n" );
}
/* Commit SET otherwise it will be rollbacked on error or IGNORE SELECT */
$this->commit( __METHOD__ );
$this->numeric_version = pg_parameter_status( $this->mConn, 'server_version' );
}
}
+
return $this->numeric_version;
}
. "AND c.relkind IN ('" . implode( "','", $types ) . "')";
$res = $this->query( $SQL );
$count = $res ? $res->numRows() : 0;
+
return (bool)$count;
}
return null;
}
$rows = $res->numRows();
+
return $rows;
}
'schemaname' => $this->getCoreSchema()
)
);
+
return $exists === $rule;
}
function constraintExists( $table, $constraint ) {
$SQL = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
- "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
+ "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
$this->addQuotes( $this->getCoreSchema() ),
$this->addQuotes( $table ),
$this->addQuotes( $constraint )
return null;
}
$rows = $res->numRows();
+
return $rows;
}
function schemaExists( $schema ) {
$exists = $this->selectField( '"pg_catalog"."pg_namespace"', 1,
array( 'nspname' => $schema ), __METHOD__ );
+
return (bool)$exists;
}
function roleExists( $roleName ) {
$exists = $this->selectField( '"pg_catalog"."pg_roles"', 1,
array( 'rolname' => $roleName ), __METHOD__ );
+
return (bool)$exists;
}
if ( $res instanceof ResultWrapper ) {
$res = $res->result;
}
+
return pg_field_type( $res, $index );
}
if ( $b instanceof Blob ) {
$b = $b->fetch();
}
+
return pg_unescape_bytea( $b );
}
} elseif ( $s instanceof Blob ) {
return "'" . $s->fetch( $s ) . "'";
}
+
return "'" . pg_escape_string( $this->mConn, $s ) . "'";
}
return implode( ' || ', $stringList );
}
+ public function buildGroupConcatField(
+ $delimiter, $table, $field, $conds = '', $options = array(), $join_conds = array()
+ ) {
+ $fld = "array_to_string(array_agg($field)," . $this->addQuotes( $delimiter ) . ')';
+
+ return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+ }
+
public function getSearchEngine() {
return 'SearchPostgres';
}
if ( substr( $newLine, 0, 4 ) == '$mw$' ) {
if ( $this->delimiter ) {
$this->delimiter = false;
- }
- else {
+ } else {
$this->delimiter = ';';
}
}
+
return parent::streamStatementEnd( $sql, $newLine );
}
$result = $this->query( "SELECT (CASE(pg_try_advisory_lock($key))
WHEN 'f' THEN 'f' ELSE pg_advisory_unlock($key) END) AS lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus === 't' );
}
}
}
wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
return false;
}
/**
- * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
+ * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM
+ * PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
* @param $lockName string
* @param $method string
* @return bool
$key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
$result = $this->query( "SELECT pg_advisory_unlock($key) as lockstatus", $method );
$row = $this->fetchObject( $result );
+
return ( $row->lockstatus === 't' );
}
* @ingroup Database
*/
class DatabaseSqlite extends DatabaseBase {
-
private static $fulltextEnabled = null;
var $mAffectedRows;
throw new DBConnectionError( $this, "SQLite database not accessible" );
}
$this->openFile( $fileName );
+
return $this->mConn;
}
$this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
# Enforce LIKE to be case sensitive, just like MySQL
$this->query( 'PRAGMA case_sensitive_like = 1' );
+
return true;
}
}
*/
protected function closeConnection() {
$this->mConn = null;
+
return true;
}
self::$fulltextEnabled = stristr( $row['sql'], 'fts' ) !== false;
}
}
+
return self::$fulltextEnabled;
}
$cachedResult = 'FTS3';
}
$db->close();
+
return $cachedResult;
}
* Attaches external database to our connection, see http://sqlite.org/lang_attach.html
* for details.
*
- * @param string $name database name to be used in queries like SELECT foo FROM dbname.table
- * @param string $file database file name. If omitted, will be generated using $name and $wgSQLiteDataDir
+ * @param string $name database name to be used in queries like
+ * SELECT foo FROM dbname.table
+ * @param string $file database file name. If omitted, will be generated
+ * using $name and $wgSQLiteDataDir
* @param string $fname calling function name
*
* @return ResultWrapper
$file = self::generateFileName( $wgSQLiteDataDir, $name );
}
$file = $this->addQuotes( $file );
+
return $this->query( "ATTACH DATABASE $file AS $name", $fname );
}
$this->mAffectedRows = $r->rowCount();
$res = new ResultWrapper( $this, $r->fetchAll() );
}
+
return $res;
}
return $obj;
}
+
return false;
}
$cur = current( $r );
if ( is_array( $cur ) ) {
next( $r );
+
return $cur;
}
+
return false;
}
*/
function numRows( $res ) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
+
return count( $r );
}
*/
function numFields( $res ) {
$r = $res instanceof ResultWrapper ? $res->result : $res;
+
return is_array( $r ) ? count( $r[0] ) : 0;
}
$r = $res instanceof ResultWrapper ? $res->result : $res;
if ( is_array( $r ) ) {
$keys = array_keys( $r[0] );
+
return $keys[$n];
}
+
return false;
}
if ( strpos( $name, 'sqlite_' ) === 0 ) {
return $name;
}
+
return str_replace( '"', '', parent::tableName( $name, $format ) );
}
return "Cannot return last error, no db connection";
}
$e = $this->mConn->errorInfo();
+
return isset( $e[2] ) ? $e[2] : '';
}
return "Cannot return last error, no db connection";
} else {
$info = $this->mConn->errorInfo();
+
return $info[1];
}
}
foreach ( $res as $row ) {
$info[] = $row->name;
}
+
return $info;
}
}
$firstPart = substr( $row->sql, 0, $indexPos );
$options = explode( ' ', $firstPart );
+
return in_array( 'UNIQUE', $options );
}
$options[$k] = '';
}
}
+
return parent::makeSelectOptions( $options );
}
*/
function makeUpdateOptions( $options ) {
$options = self::fixIgnore( $options );
+
return parent::makeUpdateOptions( $options );
}
$options[$k] = 'OR IGNORE';
}
}
+
return $options;
}
*/
function makeInsertOptions( $options ) {
$options = self::fixIgnore( $options );
+
return parent::makeInsertOptions( $options );
}
*/
function unionQueries( $sqls, $all ) {
$glue = $all ? ' UNION ALL ' : ' UNION ';
+
return implode( $glue, $sqls );
}
*/
function getServerVersion() {
$ver = $this->mConn->getAttribute( PDO::ATTR_SERVER_VERSION );
+
return $ver;
}
* @return string User-friendly database information
*/
public function getServerInfo() {
- return wfMessage( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() )->text();
+ return wfMessage( self::getFulltextSearchModule()
+ ? 'sqlite-has-fts'
+ : 'sqlite-no-fts', $this->getServerVersion() )->text();
}
/**
return new SQLiteField( $row, $tableName );
}
}
+
return false;
}
* @return string
*/
function strencode( $s ) {
- return substr( $this->addQuotes( $s ), 1, - 1 );
+ return substr( $this->addQuotes( $s ), 1, -1 );
}
/**
if ( $b instanceof Blob ) {
$b = $b->fetch();
}
+
return $b;
}
if ( count( $params ) > 0 && is_array( $params[0] ) ) {
$params = $params[0];
}
+
return parent::buildLike( $params ) . "ESCAPE '\' ";
}
public function deadlockLoop( /*...*/ ) {
$args = func_get_args();
$function = array_shift( $args );
+
return call_user_func_array( $function, $args );
}
// INT -> INTEGER
$s = preg_replace( '/\b(tiny|small|medium|big|)int(\s*\(\s*\d+\s*\)|\b)/i', 'INTEGER', $s );
// floating point types -> REAL
- $s = preg_replace( '/\b(float|double(\s+precision)?)(\s*\(\s*\d+\s*(,\s*\d+\s*)?\)|\b)/i', 'REAL', $s );
+ $s = preg_replace(
+ '/\b(float|double(\s+precision)?)(\s*\(\s*\d+\s*(,\s*\d+\s*)?\)|\b)/i',
+ 'REAL',
+ $s
+ );
// varchar -> TEXT
$s = preg_replace( '/\b(var)?char\s*\(.*?\)/i', 'TEXT', $s );
// TEXT normalization
// DROP INDEX is database-wide, not table-specific, so no ON <table> clause.
$s = preg_replace( '/\sON\s+[^\s]*/i', '', $s );
}
+
return $s;
}
return '(' . implode( ') || (', $stringList ) . ')';
}
+ public function buildGroupConcatField(
+ $delim, $table, $field, $conds = '', $join_conds = array()
+ ) {
+ $fld = "group_concat($field," . $this->addQuotes( $delim ) . ')';
+
+ return '(' . $this->selectSQLText( $table, $fld, $conds, null, array(), $join_conds ) . ')';
+ }
+
/**
* @throws MWException
* @param $oldName
* @return bool|ResultWrapper
*/
function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
- $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name=" . $this->addQuotes( $oldName ) . " AND type='table'", $fname );
+ $res = $this->query( "SELECT sql FROM sqlite_master WHERE tbl_name=" .
+ $this->addQuotes( $oldName ) . " AND type='table'", $fname );
$obj = $this->fetchObject( $res );
if ( !$obj ) {
throw new MWException( "Couldn't retrieve structure for table $oldName" );
}
$sql = $obj->sql;
- $sql = preg_replace( '/(?<=\W)"?' . preg_quote( trim( $this->addIdentifierQuotes( $oldName ), '"' ) ) . '"?(?=\W)/', $this->addIdentifierQuotes( $newName ), $sql, 1 );
+ $sql = preg_replace(
+ '/(?<=\W)"?' . preg_quote( trim( $this->addIdentifierQuotes( $oldName ), '"' ) ) . '"?(?=\W)/',
+ $this->addIdentifierQuotes( $newName ),
+ $sql,
+ 1
+ );
if ( $temporary ) {
if ( preg_match( '/^\\s*CREATE\\s+VIRTUAL\\s+TABLE\b/i', $sql ) ) {
wfDebug( "Table $oldName is virtual, can't create a temporary duplicate.\n" );
$sql = str_replace( 'CREATE TABLE', 'CREATE TEMPORARY TABLE', $sql );
}
}
+
return $this->query( $sql, $fname );
}
if ( strpos( $table, 'sqlite_' ) !== 0 ) {
$endArray[] = $table;
}
-
}
}
return $endArray;
}
-
} // end DatabaseSqlite class
/**
*/
class SQLiteField implements Field {
private $info, $tableName;
+
function __construct( $info, $tableName ) {
$this->info = $info;
$this->tableName = $tableName;
return str_replace( "''", "'", $this->info->dflt_value );
}
}
+
return $this->info->dflt_value;
}
function type() {
return $this->info->type;
}
-
} // end SQLiteField
if ( is_null( $this->currentRow ) ) {
$this->next();
}
+
return $this->currentRow;
}
function next() {
$this->pos++;
$this->currentRow = $this->fetchObject();
+
return $this->currentRow;
}
}
/**
- * Used by DatabaseBase::buildLike() to represent characters that have special meaning in SQL LIKE clauses
- * and thus need no escaping. Don't instantiate it manually, use DatabaseBase::anyChar() and anyString() instead.
+ * Used by DatabaseBase::buildLike() to represent characters that have special
+ * meaning in SQL LIKE clauses and thus need no escaping. Don't instantiate it
+ * manually, use DatabaseBase::anyChar() and anyString() instead.
*/
class LikeMatch {
private $str;
*/
interface IORMRow {
-
/**
* Load the specified fields from the database.
*
* @return IORMTable
*/
public function getTable();
-
}
*/
interface IORMTable {
-
/**
* Returns the name of the database table objects of this type are stored in.
*
* * array
* * blob
*
- * TODO: get rid of the id field. Every row instance needs to have
- * one so this is just causing hassle at various locations by requiring an extra check for field name.
+ * @todo Get rid of the id field. Every row instance needs to have one so
+ * this is just causing hassle at various locations by requiring an extra
+ * check for field name.
*
* @since 1.20
*
* @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode)
*/
public function select( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the records matching the provided
* @return array of self
*/
public function selectObjects( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Do the actual select.
* @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode)
*/
public function rawSelect( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the records matching the provided
* @return array of array
*/
public function selectFields( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null );
+ array $options = array(), $collapse = true, $functionName = null );
/**
* Selects the the specified fields of the first matching record.
* @return IORMRow|bool False on failure
*/
public function selectRow( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the records matching the provided
* @return ResultWrapper
*/
public function rawSelectRow( array $fields, array $conditions = array(),
- array $options = array(), $functionName = null );
+ array $options = array(), $functionName = null );
/**
* Selects the the specified fields of the first record matching the provided
* @return mixed|array|bool False on failure
*/
public function selectFieldsRow( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null );
+ array $options = array(), $collapse = true, $functionName = null );
/**
* Returns if there is at least one record matching the provided conditions.
*
* @since 1.20
*
- * @return String|bool The target wiki, in a form that LBFactory understands (or false if the local wiki is used)
+ * @return String|bool The target wiki, in a form that LBFactory
+ * understands (or false if the local wiki is used)
*/
public function getTargetWiki();
/**
* Set the ID of the any foreign wiki to use as a target for database operations
*
- * @param string|bool $wiki The target wiki, in a form that LBFactory understands (or false if the local wiki shall be used)
+ * @param string|bool $wiki The target wiki, in a form that LBFactory
+ * understands (or false if the local wiki shall be used)
*
* @since 1.20
*/
* @return boolean
*/
public function canHaveField( $name );
-
}
* @ingroup Database
*/
abstract class LBFactory {
-
/**
* @var LBFactory
*/
$class = $wgLBFactoryConf['class'];
self::$instance = new $class( $wgLBFactoryConf );
}
+
return self::$instance;
}
'type' => $wgDBtype,
'load' => 1,
'flags' => $flags
- ));
+ ) );
}
return new LoadBalancer( array(
'servers' => $servers,
'masterWaitTimeout' => $wgMasterWaitTimeout
- ));
+ ) );
}
/**
$this->mainLB->parentInfo( array( 'id' => 'main' ) );
$this->chronProt->initLB( $this->mainLB );
}
+
return $this->mainLB;
}
if ( !isset( $wgExternalServers[$cluster] ) ) {
throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
}
+
return new LoadBalancer( array(
'servers' => $wgExternalServers[$cluster]
- ));
+ ) );
}
/**
$this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
$this->chronProt->initLB( $this->extLBs[$cluster] );
}
+
return $this->extLBs[$cluster];
}
*/
class DBAccessError extends MWException {
function __construct() {
- parent::__construct( "Mediawiki tried to access the database via wfGetDB(). This is not allowed." );
+ parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " .
+ "This is not allowed." );
}
}
* Configuration:
* sectionsByDB A map of database names to section names
*
- * sectionLoads A 2-d map. For each section, gives a map of server names to load ratios.
- * For example: array( 'section1' => array( 'db1' => 100, 'db2' => 100 ) )
+ * sectionLoads A 2-d map. For each section, gives a map of server names to
+ * load ratios. For example:
+ * array(
+ * 'section1' => array(
+ * 'db1' => 100,
+ * 'db2' => 100
+ * )
+ * )
*
- * serverTemplate A server info associative array as documented for $wgDBservers. The host,
- * hostName and load entries will be overridden.
+ * serverTemplate A server info associative array as documented for $wgDBservers.
+ * The host, hostName and load entries will be overridden.
*
- * groupLoadsBySection A 3-d map giving server load ratios for each section and group. For example:
- * array( 'section1' => array( 'group1' => array( 'db1' => 100, 'db2' => 100 ) ) )
+ * groupLoadsBySection A 3-d map giving server load ratios for each section and group.
+ * For example:
+ * array(
+ * 'section1' => array(
+ * 'group1' => array(
+ * 'db1' => 100,
+ * 'db2' => 100
+ * )
+ * )
+ * )
*
* groupLoadsByDB A 3-d map giving server load ratios by DB name.
*
*
* externalLoads A map of external storage cluster name to server load map
*
- * externalTemplateOverrides A set of server info keys overriding serverTemplate for external storage
+ * externalTemplateOverrides A set of server info keys overriding serverTemplate for external
+ * storage
*
- * templateOverridesByServer A 2-d map overriding serverTemplate and externalTemplateOverrides on a
- * server-by-server basis. Applies to both core and external storage.
+ * templateOverridesByServer A 2-d map overriding serverTemplate and
+ * externalTemplateOverrides on a server-by-server basis. Applies
+ * to both core and external storage.
*
* templateOverridesByCluster A 2-d map overriding the server info by external storage cluster
*
* masterTemplateOverrides An override array for all master servers.
*
- * readOnlyBySection A map of section name to read-only message. Missing or false for read/write.
+ * readOnlyBySection A map of section name to read-only message.
+ * Missing or false for read/write.
*
* @ingroup Database
*/
}
$this->lastSection = $section;
$this->lastWiki = $wiki;
+
return $section;
}
if ( isset( $this->groupLoadsByDB[$dbName] ) ) {
$groupLoads = $this->groupLoadsByDB[$dbName];
}
+
if ( isset( $this->groupLoadsBySection[$section] ) ) {
$groupLoads = array_merge_recursive( $groupLoads, $this->groupLoadsBySection[$section] );
}
- return $this->newLoadBalancer( $this->serverTemplate, $this->sectionLoads[$section], $groupLoads );
+
+ return $this->newLoadBalancer(
+ $this->serverTemplate,
+ $this->sectionLoads[$section],
+ $groupLoads
+ );
}
/**
$this->chronProt->initLB( $lb );
$this->mainLBs[$section] = $lb;
}
+
return $this->mainLBs[$section];
}
if ( isset( $this->templateOverridesByCluster[$cluster] ) ) {
$template = $this->templateOverridesByCluster[$cluster] + $template;
}
+
return $this->newLoadBalancer( $template, $this->externalLoads[$cluster], array() );
}
$this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
$this->chronProt->initLB( $this->extLBs[$cluster] );
}
+
return $this->extLBs[$cluster];
}
$lb = new LoadBalancer( array(
'servers' => $servers,
'masterWaitTimeout' => $wgMasterWaitTimeout
- ));
+ ) );
+
return $lb;
}
$serverInfo['load'] = $load;
$servers[] = $serverInfo;
}
+
return $servers;
}
$reindexed[$server][$group] = $load;
}
}
+
return $reindexed;
}
function getDBNameAndPrefix( $wiki = false ) {
if ( $wiki === false ) {
global $wgDBname, $wgDBprefix;
+
return array( $wgDBname, $wgDBprefix );
} else {
return wfSplitWikiID( $wiki );
$class = $this->mLoadMonitorClass;
$this->mLoadMonitor = new $class( $this );
}
+
return $this->mLoadMonitor;
}
# No loads for this group, return false and the caller can use some other group
wfDebug( __METHOD__ . ": no loads for group $group\n" );
wfProfileOut( __METHOD__ );
+
return false;
}
} else {
# wants us to return false.
wfDebugLog( 'connect', __METHOD__ . ": pickRandom() returned false\n" );
wfProfileOut( __METHOD__ );
+
return false;
}
}
}
wfProfileOut( __METHOD__ );
+
return $i;
}
wfDebug( __METHOD__ . ": waiting $t us\n" );
usleep( $t );
wfProfileOut( __METHOD__ );
+
return $t;
}
public function waitForAll( $pos ) {
wfProfileIn( __METHOD__ );
$this->mWaitForPos = $pos;
- for ( $i = 1; $i < count( $this->mServers ); $i++ ) {
- $this->doWait( $i, true );
+ $serverCount = count( $this->mServers );
+ for ( $i = 1; $i < $serverCount; $i++ ) {
+ if ( $this->mLoads[$i] > 0 ) {
+ $this->doWait( $i, true );
+ }
}
wfProfileOut( __METHOD__ );
}
return reset( $conns[$i] );
}
}
+
return false;
}
if ( !$conn ) {
if ( !$open ) {
wfDebug( __METHOD__ . ": no connection open\n" );
+
return false;
} else {
$conn = $this->openConnection( $index, '' );
if ( !$conn ) {
wfDebug( __METHOD__ . ": failed to open connection\n" );
+
return false;
}
}
if ( $result == -1 || is_null( $result ) ) {
# Timed out waiting for slave, use master instead
wfDebug( __METHOD__ . ": Timed out waiting for slave #$index pos {$this->mWaitForPos}\n" );
+
return false;
} else {
wfDebug( __METHOD__ . ": Done\n" );
+
return true;
}
}
if ( $i == DB_LAST ) {
wfProfileOut( __METHOD__ );
- throw new MWException( 'Attempt to call ' . __METHOD__ . ' with deprecated server index DB_LAST' );
+ throw new MWException( 'Attempt to call ' . __METHOD__ .
+ ' with deprecated server index DB_LAST' );
} elseif ( $i === null || $i === false ) {
wfProfileOut( __METHOD__ );
- throw new MWException( 'Attempt to call ' . __METHOD__ . ' with invalid server index' );
+ throw new MWException( 'Attempt to call ' . __METHOD__ .
+ ' with invalid server index' );
}
if ( $wiki === wfWikiID() ) {
if ( $i === false ) {
$this->mLastError = 'No working slave server: ' . $this->mLastError;
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError();
}
}
$conn = $this->openConnection( $i, $wiki );
if ( !$conn ) {
wfProfileOut( __METHOD__ );
+
return $this->reportConnectionError();
}
wfProfileOut( __METHOD__ );
+
return $conn;
}
}
if ( $serverIndex === null || $refCount === null ) {
wfDebug( __METHOD__ . ": this connection was not opened as a foreign connection\n" );
+
/**
* This can happen in code like:
* foreach ( $dbs as $db ) {
* When a connection to the local DB is opened in this way, reuseConnection()
* should be ignored
*/
+
return;
}
if ( $this->mConns['foreignUsed'][$serverIndex][$wiki] !== $conn ) {
- throw new MWException( __METHOD__ . ": connection not found, has the connection been freed already?" );
+ throw new MWException( __METHOD__ . ": connection not found, has " .
+ "the connection been freed already?" );
}
$conn->setLBInfo( 'foreignPoolRefCount', --$refCount );
if ( $refCount <= 0 ) {
if ( $wiki !== false ) {
$conn = $this->openForeignConnection( $i, $wiki );
wfProfileOut( __METHOD__ );
+
return $conn;
}
if ( isset( $this->mConns['local'][$i][0] ) ) {
}
}
wfProfileOut( __METHOD__ );
+
return $conn;
}
$conn->setLBInfo( 'foreignPoolRefCount', $refCount + 1 );
}
wfProfileOut( __METHOD__ );
+
return $conn;
}
if ( !is_integer( $index ) ) {
return false;
}
+
return (bool)$this->getAnyOpenConnection( $index );
}
if ( isset( $server['fakeMaster'] ) ) {
$db->setFakeMaster( true );
}
+
return $db;
}
wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
$conn->reportConnectionError( "{$this->mLastError} ({$server})" ); // throws DBConnectionError
}
+
return false; /* not reached */
}
}
/**
- * Sets the server info structure for the given index. Entry at index $i is created if it doesn't exist
+ * Sets the server info structure for the given index. Entry at index $i
+ * is created if it doesn't exist
* @param $i
* @param $serverInfo
*/
# master (however unlikely that may be), then we can fetch the position from the slave.
$masterConn = $this->getAnyOpenConnection( 0 );
if ( !$masterConn ) {
- for ( $i = 1; $i < count( $this->mServers ); $i++ ) {
+ $serverCount = count( $this->mServers );
+ for ( $i = 1; $i < $serverCount; $i++ ) {
$conn = $this->getAnyOpenConnection( $i );
if ( $conn ) {
wfDebug( "Master pos fetched from slave\n" );
+
return $conn->getSlavePos();
}
}
} else {
wfDebug( "Master pos fetched from master\n" );
+
return $masterConn->getMasterPos();
}
+
return false;
}
return $this->mAllowLagged;
}
$this->mAllowLagged = $mode;
+
return $this->mAllowLagged;
}
}
}
}
+
return $success;
}
}
}
}
+
return array( $host, $maxLag, $maxIndex );
}
$this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
array_keys( $this->mServers ), $wiki );
}
+
return $this->mLagTimes;
}
list( $db, $groups, $wiki ) = $this->params;
$this->conn = $this->lb->getConnection( $db, $groups, $wiki );
}
+
return call_user_func_array( array( $this->conn, $name ), $arguments );
}
if ( mt_rand( 0, $chance ) != 0 ) {
unset( $times['timestamp'] ); // hide from caller
wfProfileOut( __METHOD__ );
+
return $times;
}
wfIncrStats( 'lag_cache_miss_expired' );
# Cache key missing or expired
if ( $wgMemc->add( "$memcKey:lock", 1, 10 ) ) {
# Let this process alone update the cache value
- $unlocker = new ScopedCallback( function() use ( $wgMemc, $memcKey ) {
+ $unlocker = new ScopedCallback( function () use ( $wgMemc, $memcKey ) {
$wgMemc->delete( $memcKey );
} );
} elseif ( is_array( $times ) ) {
# Could not acquire lock but an old cache exists, so use it
unset( $times['timestamp'] ); // hide from caller
wfProfileOut( __METHOD__ );
+
return $times;
}
unset( $times['timestamp'] ); // hide from caller
wfProfileOut( __METHOD__ );
+
return $times;
}
if ( $status['Threads_running'] > $threshold ) {
$server = $conn->getProperty( 'mServer' );
wfLogDBError( "LB backoff from $server - Threads_running = {$status['Threads_running']}\n" );
+
return $status['Threads_connected'];
} else {
return 0;
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
interface ORMIterator extends Iterator {
-
}
*/
class ORMResult implements ORMIterator {
-
/**
* @var ResultWrapper
*/
public function valid() {
return $this->current !== false;
}
-
}
*/
class ORMRow implements IORMRow {
-
/**
* The fields of the object.
* field name (w/o prefix) => value
if ( $result !== false ) {
$this->setFields( $this->table->getFieldsFromDBResult( $result ), $override );
+
return true;
}
+
return false;
}
* @return boolean
*/
public function hasIdField() {
- return $this->hasField( 'id' )
- && !is_null( $this->getField( 'id' ) );
+ return $this->hasField( 'id' ) && !is_null( $this->getField( 'id' ) );
}
/**
$value = $this->fields[$name];
// Skip null id fields so that the DBMS can set the default.
- if ( $name === 'id' && is_null ( $value ) ) {
+ if ( $name === 'id' && is_null( $value ) ) {
continue;
}
/**
* Before removal of an object happens, @see beforeRemove gets called.
- * This method loads the fields of which the names have been returned by this one (or all fields if null is returned).
- * This allows for loading info needed after removal to get rid of linked data and the like.
+ * This method loads the fields of which the names have been returned by
+ * this one (or all fields if null is returned). This allows for loading
+ * info needed after removal to get rid of linked data and the like.
*
* @since 1.20
*
* @param array|string|null $summaryFields
*/
public function loadSummaryFields( $summaryFields = null ) {
-
}
/**
public function getTable() {
return $this->table;
}
-
}
*/
class ORMTable extends DBAccessBase implements IORMTable {
-
/**
* Cache for instances, used by the singleton method.
*
* @param string|null $rowClass
* @param string $fieldPrefix
*/
- public function __construct( $tableName = '', array $fields = array(), array $defaults = array(), $rowClass = null, $fieldPrefix = '' ) {
+ public function __construct( $tableName = '', array $fields = array(),
+ array $defaults = array(), $rowClass = null, $fieldPrefix = ''
+ ) {
$this->tableName = $tableName;
$this->fields = $fields;
$this->defaults = $defaults;
* @return ORMResult
*/
public function select( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$res = $this->rawSelect( $fields, $conditions, $options, $functionName );
+
return new ORMResult( $this, $res );
}
* @throws DBQueryError if the query failed (even if the database was in ignoreErrors mode).
*/
public function selectObjects( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$result = $this->selectFields( $fields, $conditions, $options, false, $functionName );
$objects = array();
* @since 1.20
*
* @param null|string|array $fields
- * @param array $conditions
- * @param array $options
- * @param null|string $functionName
+ * @param array $conditions
+ * @param array $options
+ * @param null|string $functionName
*
* @return ResultWrapper
* @throws DBQueryError if the quey failed (even if the database was in ignoreErrors mode).
*/
public function rawSelect( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
if ( is_null( $fields ) ) {
$fields = array_keys( $this->getFields() );
- }
- else {
+ } else {
$fields = (array)$fields;
}
* @return array of array
*/
public function selectFields( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null ) {
+ array $options = array(), $collapse = true, $functionName = null
+ ) {
$objects = array();
$result = $this->rawSelect( $fields, $conditions, $options, $functionName );
if ( $collapse ) {
if ( count( $fields ) === 1 ) {
$objects = array_map( 'array_shift', $objects );
- }
- elseif ( count( $fields ) === 2 ) {
+ } elseif ( count( $fields ) === 2 ) {
$o = array();
foreach ( $objects as $object ) {
* @return IORMRow|bool False on failure
*/
public function selectRow( $fields = null, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$options['LIMIT'] = 1;
$objects = $this->select( $fields, $conditions, $options, $functionName );
* @return ResultWrapper
*/
public function rawSelectRow( array $fields, array $conditions = array(),
- array $options = array(), $functionName = null ) {
+ array $options = array(), $functionName = null
+ ) {
$dbr = $this->getReadDbConnection();
$result = $dbr->selectRow(
);
$this->releaseConnection( $dbr );
+
return $result;
}
* @return mixed|array|bool False on failure
*/
public function selectFieldsRow( $fields = null, array $conditions = array(),
- array $options = array(), $collapse = true, $functionName = null ) {
+ array $options = array(), $collapse = true, $functionName = null
+ ) {
$options['LIMIT'] = 1;
$objects = $this->selectFields( $fields, $conditions, $options, $collapse, $functionName );
) !== false; // DatabaseBase::delete does not always return true for success as documented...
$this->releaseConnection( $dbw );
+
return $result;
}
}
if ( $setDefaults && $hasDefault ) {
- $default = is_array( $defaults[$field] ) ? implode( '|', $defaults[$field] ) : $defaults[$field];
+ $default = is_array( $defaults[$field] )
+ ? implode( '|', $defaults[$field] )
+ : $defaults[$field];
$params[$field][ApiBase::PARAM_DFLT] = $default;
}
}
}
/**
- * Set the database ID to use for read operations, use DB_XXX constants or an index to the load balancer setup.
+ * Set the database ID to use for read operations, use DB_XXX constants or
+ * an index to the load balancer setup.
*
* @param integer $db
*
*
* @since 1.20
*
- * @return String|bool The target wiki, in a form that LBFactory understands (or false if the local wiki is used)
+ * @return String|bool The target wiki, in a form that LBFactory understands
+ * (or false if the local wiki is used)
*/
public function getTargetWiki() {
return $this->wiki;
/**
* Set the ID of the any foreign wiki to use as a target for database operations
*
- * @param string|bool $wiki The target wiki, in a form that LBFactory understands (or false if the local wiki shall be used)
+ * @param string|bool $wiki The target wiki, in a form that LBFactory
+ * understands (or false if the local wiki shall be used)
*
* @since 1.20
*/
*
* @since 1.20
*/
+ // @codingStandardsIgnoreStart Suppress "useless method overriding" sniffer warning
public function releaseConnection( DatabaseBase $db ) {
parent::releaseConnection( $db ); // just make it public
}
+ // @codingStandardsIgnoreEnd
/**
* Update the records matching the provided conditions by
) !== false; // DatabaseBase::update does not always return true for success as documented...
$this->releaseConnection( $dbw );
+
return $result;
}
if ( is_array( $value ) ) {
$field = $value[0];
$value = $value[1];
- }
- else {
+ } else {
$value = explode( ' ', $value, 2 );
$value[0] = $this->getPrefixedField( $value[0] );
$prefixedValues[] = implode( ' ', $value );
return $success;
}
-
}
* @since 1.19
*/
class MWDebug {
-
/**
* Log lines
*
* MWDebug::deprecated() (Added in 1.20).
* @return mixed
*/
- public static function deprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
+ public static function deprecated( $function, $version = false,
+ $component = false, $callerOffset = 2
+ ) {
$callerDescription = self::getCallerDescription( $callerOffset );
$callerFunc = $callerDescription['func'];
if ( $sendToLog ) {
global $wgDevelopmentWarnings; // we could have a more specific $wgDeprecationWarnings setting.
- self::sendWarning( $msg, $callerDescription, $wgDevelopmentWarnings ? E_USER_DEPRECATED : false );
+ self::sendWarning(
+ $msg,
+ $callerDescription,
+ $wgDevelopmentWarnings ? E_USER_DEPRECATED : false
+ );
}
if ( self::$enabled ) {
$display = "\xc2\xa0";
}
- if ( !$ident && $diff < 0 && substr( $display, 0, 9 ) != 'Entering ' && substr( $display, 0, 8 ) != 'Exiting ' ) {
+ if ( !$ident
+ && $diff < 0
+ && substr( $display, 0, 9 ) != 'Entering '
+ && substr( $display, 0, 8 ) != 'Exiting '
+ ) {
$ident = $curIdent;
$diff = 0;
- $display = '<span style="background:yellow;">' . nl2br( htmlspecialchars( $display ) ) . '</span>';
+ $display = '<span style="background:yellow;">' .
+ nl2br( htmlspecialchars( $display ) ) . '</span>';
} else {
$display = nl2br( htmlspecialchars( $display ) );
}
} else {
$ret .= str_repeat( "<ul><li>\n", $diff );
}
- $ret .= "<tt>$display</tt>\n";
+ $ret .= "<code>$display</code>\n";
$curIdent = $ident;
}
global $wgVersion, $wgRequestTime;
$request = $context->getRequest();
+
return array(
'mwVersion' => $wgVersion,
'phpVersion' => PHP_VERSION,
* Deferrable Update for closure/callback
*/
class MWCallableUpdate implements DeferrableUpdate {
-
/**
- * @var closure/callabck
+ * @var closure/callback
*/
private $callback;
/**
* @param callable $callback
+ * @throws MWException
*/
public function __construct( $callback ) {
if ( !is_callable( $callback ) ) {
public function doUpdate() {
call_user_func( $this->callback );
}
-
}
* subclasses can override the beginTransaction() and commitTransaction() methods.
*/
abstract class DataUpdate implements DeferrableUpdate {
-
/**
* Constructor
*/
throw $exception; // rethrow after cleanup
}
}
-
}
/**
* Add an update to the deferred list
- * @param $update DeferrableUpdate Some object that implements doUpdate()
+ * @param DeferrableUpdate $update Some object that implements doUpdate()
*/
public static function addUpdate( DeferrableUpdate $update ) {
array_push( self::$updates, $update );
* HTMLCacheUpdates are the most common deferred update people use. This
* is a shortcut method for that.
* @see HTMLCacheUpdate::__construct()
- * @param $title
- * @param $table
+ * @param Title $title
+ * @param string $table
*/
public static function addHTMLCacheUpdate( $title, $table ) {
self::addUpdate( new HTMLCacheUpdate( $title, $table ) );
* Do any deferred updates and clear the list
*
* @param string $commit set to 'commit' to commit after every update to
- * prevent lock contention
+ * prevent lock contention
*/
public static function doUpdates( $commit = '' ) {
global $wgDeferredUpdateList;
// No need to get master connections in case of empty updates array
if ( !count( $updates ) ) {
wfProfileOut( __METHOD__ );
+
return;
}
+ $dbw = false;
$doCommit = $commit == 'commit';
if ( $doCommit ) {
$dbw = wfGetDB( DB_MASTER );
}
+ /** @var DeferrableUpdate $update */
foreach ( $updates as $update ) {
try {
$update->doUpdate();
* @ingroup Cache
*/
class HTMLCacheUpdate implements DeferrableUpdate {
- /**
- * @var Title
- */
+ /** @var Title */
public $mTitle;
+ /** @var string */
public $mTable;
/**
- * @param $titleTo
- * @param $table
+ * @param Title $titleTo
+ * @param string $table
*/
function __construct( Title $titleTo, $table ) {
$this->mTitle = $titleTo;
JobQueueGroup::singleton()->deduplicateRootJob( $job );
} else { // few backlinks ($count might be off even if 0)
$dbw = wfGetDB( DB_MASTER );
- $dbw->onTransactionIdle( function() use ( $job ) {
+ $dbw->onTransactionIdle( function () use ( $job ) {
$job->run(); // just do the purge query now
} );
}
* @todo document (e.g. one-sentence top-level class description).
*/
class LinksUpdate extends SqlDataUpdate {
-
// @todo make members protected, but make sure extensions don't break
- public $mId, //!< Page ID of the article linked from
- $mTitle, //!< Title object of the article linked from
- $mParserOutput, //!< Parser output
- $mLinks, //!< Map of title strings to IDs for the links in the document
- $mImages, //!< DB keys of the images used, in the array key only
- $mTemplates, //!< Map of title strings to IDs for the template references, including broken ones
- $mExternals, //!< URLs of external links, array key only
- $mCategories, //!< Map of category names to sort keys
- $mInterlangs, //!< Map of language codes to titles
- $mProperties, //!< Map of arbitrary name to value
- $mDb, //!< Database connection reference
- $mOptions, //!< SELECT options to be used (array)
- $mRecursive; //!< Whether to queue jobs for recursive updates
+ /** @var int Page ID of the article linked from */
+ public $mId;
+
+ /** @var Title object of the article linked from */
+ public $mTitle;
+
+ /** @var ParserOutput */
+ public $mParserOutput;
+
+ /** @var array Map of title strings to IDs for the links in the document */
+ public $mLinks;
+
+ /** @var array DB keys of the images used, in the array key only */
+ public $mImages;
+
+ /** @var array Map of title strings to IDs for the template references, including broken ones */
+ public $mTemplates;
+
+ /** @var array URLs of external links, array key only */
+ public $mExternals;
+
+ /** @var array Map of category names to sort keys */
+ public $mCategories;
+
+ /** @var array ap of language codes to titles */
+ public $mInterlangs;
+
+ /** @var array Map of arbitrary name to value */
+ public $mProperties;
+
+ /** @var DatabaseBase Database connection reference */
+ public $mDb;
+
+ /** @var array SELECT options to be used */
+ public $mOptions;
+
+ /** @var bool Whether to queue jobs for recursive updates */
+ public $mRecursive;
/**
* @var null|array Added links if calculated.
/**
* Constructor
*
- * @param $title Title of the page we're updating
- * @param $parserOutput ParserOutput: output from a full parse of this page
- * @param $recursive Boolean: queue jobs for recursive updates?
+ * @param Title $title Title of the page we're updating
+ * @param ParserOutput $parserOutput Output from a full parse of this page
+ * @param bool $recursive Queue jobs for recursive updates?
* @throws MWException
*/
function __construct( $title, $parserOutput, $recursive = true ) {
$this->mId = $title->getArticleID();
if ( !$this->mId ) {
- throw new MWException( "The Title object did not provide an article ID. Perhaps the page doesn't exist?" );
+ throw new MWException( "The Title object did not provide an article " .
+ "ID. Perhaps the page doesn't exist?" );
}
$this->mParserOutput = $parserOutput;
* Queue a RefreshLinks job for any table.
*
* @param Title $title Title to do job for
- * @param String $table Table to use (e.g. 'templatelinks')
+ * @param string $table Table to use (e.g. 'templatelinks')
*/
public static function queueRecursiveJobsForTable( Title $title, $table ) {
wfProfileIn( __METHOD__ );
/**
* Update all the appropriate counts in the category table.
- * @param array $added associative array of category name => sort key
- * @param array $deleted 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 );
/**
* Update a table by doing a delete query then an insert query
- * @param $table
- * @param $prefix
- * @param $deletions
- * @param $insertions
+ * @param string $table Table name
+ * @param string $prefix Field name prefix
+ * @param array $deletions
+ * @param array $insertions Rows to insert
*/
function incrTableUpdate( $table, $prefix, $deletions, $insertions ) {
if ( $table == 'page_props' ) {
/**
* Get an array of pagelinks insertions for passing to the DB
* Skips the titles specified by the 2-D array $existing
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getLinkInsertions( $existing = array() ) {
);
}
}
+
return $arr;
}
/**
* Get an array of template insertions. Like getLinkInsertions()
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getTemplateInsertions( $existing = array() ) {
);
}
}
+
return $arr;
}
/**
* Get an array of image insertions
* Skips the names specified in $existing
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getImageInsertions( $existing = array() ) {
'il_to' => $iname
);
}
+
return $arr;
}
/**
* Get an array of externallinks insertions. Skips the names specified in $existing
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getExternalInsertions( $existing = array() ) {
);
}
}
+
return $arr;
}
'cl_type' => $type,
);
}
+
return $arr;
}
'll_title' => $title
);
}
+
return $arr;
}
/**
* Get an array of page property insertions
- * @param $existing array
+ * @param array $existing
* @return array
*/
function getPropertyInsertions( $existing = array() ) {
'pp_value' => $value,
);
}
+
return $arr;
}
/**
* Get an array of interwiki insertions for passing to the DB
* Skips the titles specified by the 2-D array $existing
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getInterwikiInsertions( $existing = array() ) {
$arr = array();
foreach ( $this->mInterwikis as $prefix => $dbkeys ) {
- $diffs = isset( $existing[$prefix] ) ? array_diff_key( $dbkeys, $existing[$prefix] ) : $dbkeys;
+ $diffs = isset( $existing[$prefix] )
+ ? array_diff_key( $dbkeys, $existing[$prefix] )
+ : $dbkeys;
+
foreach ( $diffs as $dbk => $id ) {
$arr[] = array(
'iwl_from' => $this->mId,
);
}
}
+
return $arr;
}
/**
* Given an array of existing links, returns those links which are not in $this
* and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getLinkDeletions( $existing ) {
$del[$ns] = $existing[$ns];
}
}
+
return $del;
}
/**
* Given an array of existing templates, returns those templates which are not in $this
* and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getTemplateDeletions( $existing ) {
$del[$ns] = $existing[$ns];
}
}
+
return $del;
}
/**
* Given an array of existing images, returns those images which are not in $this
* and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getImageDeletions( $existing ) {
/**
* Given an array of existing external links, returns those links which are not
* in $this and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getExternalDeletions( $existing ) {
/**
* Given an array of existing categories, returns those categories which are not in $this
* and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getCategoryDeletions( $existing ) {
/**
* Given an array of existing interlanguage links, returns those links which are not
* in $this and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getInterlangDeletions( $existing ) {
/**
* Get array of properties which should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
function getPropertyDeletions( $existing ) {
/**
* Given an array of existing interwiki links, returns those links which are not in $this
* and thus should be deleted.
- * @param $existing array
+ * @param array $existing
* @return array
*/
private function getInterwikiDeletions( $existing ) {
$del[$prefix] = $existing[$prefix];
}
}
+
return $del;
}
}
$arr[$row->pl_namespace][$row->pl_title] = 1;
}
+
return $arr;
}
}
$arr[$row->tl_namespace][$row->tl_title] = 1;
}
+
return $arr;
}
foreach ( $res as $row ) {
$arr[$row->il_to] = 1;
}
+
return $arr;
}
foreach ( $res as $row ) {
$arr[$row->el_to] = 1;
}
+
return $arr;
}
foreach ( $res as $row ) {
$arr[$row->cl_to] = $row->cl_sortkey_prefix;
}
+
return $arr;
}
foreach ( $res as $row ) {
$arr[$row->ll_lang] = $row->ll_title;
}
+
return $arr;
}
}
$arr[$row->iwl_prefix][$row->iwl_title] = 1;
}
+
return $arr;
}
/**
* Get an array of existing categories, with the name in the key and sort key in the value.
*
- * @return array
+ * @return array of property names and values
*/
private function getExistingProperties() {
$res = $this->mDb->select( 'page_props', array( 'pp_propname', 'pp_value' ),
foreach ( $res as $row ) {
$arr[$row->pp_propname] = $row->pp_value;
}
+
return $arr;
}
/**
* Invalidate any necessary link lists related to page property changes
- * @param $changed
+ * @param array $changed
*/
private function invalidateProperties( $changed ) {
global $wgPagePropLinkInvalidations;
}
$result = array();
foreach ( $this->linkInsertions as $insertion ) {
- $result[] = Title::makeTitle( $insertion[ 'pl_namespace' ], $insertion[ 'pl_title' ] );
+ $result[] = Title::makeTitle( $insertion['pl_namespace'], $insertion['pl_title'] );
}
+
return $result;
}
$result[] = Title::makeTitle( $ns, $title );
}
}
+
return $result;
}
}
* Update object handling the cleanup of links tables after a page was deleted.
**/
class LinksDeletionUpdate extends SqlDataUpdate {
-
- protected $mPage; //!< WikiPage the wikipage that was deleted
+ /** @var WikiPage The WikiPage that was deleted */
+ protected $mPage;
/**
* Constructor
*
- * @param $page WikiPage Page we are updating
+ * @param WikiPage $page Page we are updating
* @throws MWException
*/
function __construct( WikiPage $page ) {
/**
* Update all the appropriate counts in the category table.
- * @param array $added associative array of category name => sort key
- * @param array $deleted 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 );
* @ingroup Search
*/
class SearchUpdate implements DeferrableUpdate {
- /**
- * Page id being updated
- * @var int
- */
+ /** @var int Page id being updated */
private $id = 0;
- /**
- * Title we're updating
- * @var Title
- */
+ /** @var Title Title we're updating */
private $title;
- /**
- * Content of the page (not text)
- * @var Content|false
- */
+ /** @var Content|false Content of the page (not text) */
private $content;
/**
*
* @param int $id Page id to update
* @param Title|string $title Title of page to update
- * @param Content|string|false $c Content of the page to update.
+ * @param Content|string|bool $c Content of the page to update. Default: false.
* If a Content object, text will be gotten from it. String is for back-compat.
* Passing false tells the backend to just update the title, not the content
*/
# Strip wiki '' and '''
$text = preg_replace( "/''[']*/", " ", $text );
wfProfileOut( __METHOD__ . '-regexps' );
+
return $text;
}
}
* Class for handling updates to the site_stats table
*/
class SiteStatsUpdate implements DeferrableUpdate {
+ /** @var int */
protected $views = 0;
+
+ /** @var int */
protected $edits = 0;
+
+ /** @var int */
protected $pages = 0;
+
+ /** @var int */
protected $articles = 0;
+
+ /** @var int */
protected $users = 0;
+
+ /** @var int */
protected $images = 0;
// @todo deprecate this constructor
}
/**
- * @param $deltas Array
+ * @param array $deltas
* @return SiteStatsUpdate
*/
public static function factory( array $deltas ) {
/**
* Do not call this outside of SiteStatsUpdate
- *
- * @return void
*/
public function tryDBUpdateInternal() {
global $wgSiteStatsAsyncFactor;
$dbw = wfGetDB( DB_MASTER );
$lockKey = wfMemcKey( 'site_stats' ); // prepend wiki ID
+ $pd = array();
if ( $wgSiteStatsAsyncFactor ) {
// Lock the table so we don't have double DB/memcached updates
if ( !$dbw->lockIsFree( $lockKey, __METHOD__ )
|| !$dbw->lock( $lockKey, __METHOD__, 1 ) // 1 sec timeout
) {
$this->doUpdatePendingDeltas();
+
return;
}
$pd = $this->getPendingDeltas();
}
/**
- * @param $dbw DatabaseBase
+ * @param DatabaseBase $dbw
* @return bool|mixed
*/
public static function cacheUpdate( $dbw ) {
'rc_user != 0',
'rc_bot' => 0,
'rc_log_type != ' . $dbr->addQuotes( 'newusers' ) . ' OR rc_log_type IS NULL',
- 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays * 24 * 3600 ) ),
+ 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX )
+ - $wgActiveUserDays * 24 * 3600 ) ),
),
__METHOD__
);
array( 'ss_row_id' => 1 ),
__METHOD__
);
+
return $activeUsers;
}
}
/**
- * @param $sql string
- * @param $field string
- * @param $delta integer
+ * @param string $sql
+ * @param string $field
+ * @param int $delta
*/
protected function appendUpdate( &$sql, $field, $delta ) {
if ( $delta ) {
}
/**
- * @param $type string
+ * @param string $type
* @param string $sign ('+' or '-')
* @return string
*/
/**
* Adjust the pending deltas for a stat type.
* Each stat type has two pending counters, one for increments and decrements
- * @param $type string
- * @param $delta integer Delta (positive or negative)
- * @return void
+ * @param string $type
+ * @param int $delta Delta (positive or negative)
*/
protected function adjustPending( $type, $delta ) {
global $wgMemc;
/**
* Get pending delta counters for each stat type
- * @return Array Positive and negative deltas for each type
- * @return void
+ * @return array Positive and negative deltas for each type
*/
protected function getPendingDeltas() {
global $wgMemc;
$pending = array();
foreach ( array( 'ss_total_views', 'ss_total_edits',
- 'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type )
- {
+ 'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type
+ ) {
// Get pending increments and pending decrements
$pending[$type]['+'] = (int)$wgMemc->get( $this->getTypeCacheKey( $type, '+' ) );
$pending[$type]['-'] = (int)$wgMemc->get( $this->getTypeCacheKey( $type, '-' ) );
/**
* Reduce pending delta counters after updates have been applied
* @param array $pd Result of getPendingDeltas(), used for DB update
- * @return void
*/
protected function removePendingDeltas( array $pd ) {
global $wgMemc;
}
}
}
-
* the beginTransaction() and commitTransaction() methods.
*/
abstract class SqlDataUpdate extends DataUpdate {
+ /** @var DatabaseBase Database connection reference */
+ protected $mDb;
- protected $mDb; //!< Database connection reference
- protected $mOptions; //!< SELECT options to be used (array)
+ /** @var array SELECT options to be used (array) */
+ protected $mOptions;
- private $mHasTransaction; //!< bool whether a transaction is open on this object (internal use only!)
- protected $mUseTransaction; //!< bool whether this update should be wrapped in a transaction
+ /** @var bool Whether a transaction is open on this object (internal use only!) */
+ private $mHasTransaction;
+
+ /** @var bool Whether this update should be wrapped in a transaction */
+ protected $mUseTransaction;
/**
* Constructor
*
- * @param bool $withTransaction whether this update should be wrapped in a transaction (default: true).
- * A transaction is only started if no transaction is already in progress,
- * see beginTransaction() for details.
- **/
+ * @param bool $withTransaction whether this update should be wrapped in a
+ * transaction (default: true). A transaction is only started if no
+ * transaction is already in progress, see beginTransaction() for details.
+ */
public function __construct( $withTransaction = true ) {
global $wgAntiLockFlags;
$this->mOptions = array( 'FOR UPDATE' );
}
- // @todo get connection only when it's needed? make sure that doesn't break anything, especially transactions!
+ // @todo Get connection only when it's needed? Make sure that doesn't
+ // break anything, especially transactions!
$this->mDb = wfGetDB( DB_MASTER );
$this->mWithTransaction = $withTransaction;
}
/**
- * Begin a database transaction, if $withTransaction was given as true in the constructor for this SqlDataUpdate.
+ * Begin a database transaction, if $withTransaction was given as true in
+ * the constructor for this SqlDataUpdate.
*
- * Because nested transactions are not supported by the Database class, this implementation
- * checks Database::trxLevel() and only opens a transaction if none is already active.
+ * Because nested transactions are not supported by the Database class,
+ * this implementation checks Database::trxLevel() and only opens a
+ * transaction if none is already active.
*/
public function beginTransaction() {
if ( !$this->mWithTransaction ) {
* Invalidate the cache of a list of pages from a single namespace.
* This is intended for use by subclasses.
*
- * @param $namespace Integer
- * @param $dbkeys Array
+ * @param int $namespace Namespace number
+ * @param array $dbkeys
*/
protected function invalidatePages( $namespace, array $dbkeys ) {
if ( $dbkeys === array() ) {
), __METHOD__
);
}
-
}
* @ingroup Cache
*/
class SquidUpdate {
-
/**
* Collection of URLs to purge.
* @var array
}
wfProfileOut( __METHOD__ );
+
return new SquidUpdate( $blurlArr );
}
public static function newFromTitles( $titles, $urlArr = array() ) {
global $wgMaxSquidPurgeTitles;
$i = 0;
+ /** @var Title $title */
foreach ( $titles as $title ) {
$urlArr[] = $title->getInternalURL();
if ( $i++ > $wgMaxSquidPurgeTitles ) {
break;
}
}
+
return new SquidUpdate( $urlArr );
}
*/
public static function newSimplePurge( Title $title ) {
$urlArr = $title->getSquidURLs();
+
return new SquidUpdate( $urlArr );
}
// pfsockopen doesn't work because we need set_sock_opt
$conn = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
- if ( ! $conn ) {
+ if ( !$conn ) {
$errstr = socket_strerror( socket_last_error() );
wfDebugLog( 'squid', __METHOD__ .
": Error opening UDP socket: $errstr\n" );
wfProfileOut( __METHOD__ );
+
return;
}
return $routing;
}
}
+
return false;
}
}
* from that table to update the 'page_counter' field in a batch operation.
*/
class ViewCountUpdate implements DeferrableUpdate {
+ /** @var int Page ID to increment the view count */
protected $id;
/**
* Constructor
*
- * @param $id Integer: page ID to increment the view count
+ * @param int $id Page ID to increment the view count
*/
public function __construct( $id ) {
$this->id = intval( $id );
$dbw = wfGetDB( DB_MASTER );
if ( $wgHitcounterUpdateFreq <= 1 || $dbw->getType() == 'sqlite' ) {
- $dbw->update( 'page', array( 'page_counter = page_counter + 1' ), array( 'page_id' => $this->id ), __METHOD__ );
+ $dbw->update(
+ 'page', array( 'page_counter = page_counter + 1' ),
+ array( 'page_id' => $this->id ),
+ __METHOD__
+ );
+
return;
}
if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
$this->collect();
}
- } catch ( DBError $e ) {}
+ } catch ( DBError $e ) {
+ }
}
protected function collect() {
* @ingroup DifferenceEngine
*/
class ArrayDiffFormatter extends DiffFormatter {
-
/**
* @param $diff
* @return array
$newline += count( $edit->orig );
}
}
+
return $retval;
}
}
public $orig;
public $closing;
- public abstract function reverse();
+ abstract public function reverse();
/**
* @return int
* @private
* @ingroup DifferenceEngine
*/
-class DiffOp_Copy extends DiffOp {
+class DiffOpCopy extends DiffOp {
public $type = 'copy';
function __construct( $orig, $closing = false ) {
}
/**
- * @return DiffOp_Copy
+ * @return DiffOpCopy
*/
function reverse() {
- return new DiffOp_Copy( $this->closing, $this->orig );
+ return new DiffOpCopy( $this->closing, $this->orig );
}
}
* @private
* @ingroup DifferenceEngine
*/
-class DiffOp_Delete extends DiffOp {
+class DiffOpDelete extends DiffOp {
public $type = 'delete';
function __construct( $lines ) {
}
/**
- * @return DiffOp_Add
+ * @return DiffOpAdd
*/
function reverse() {
- return new DiffOp_Add( $this->orig );
+ return new DiffOpAdd( $this->orig );
}
}
* @private
* @ingroup DifferenceEngine
*/
-class DiffOp_Add extends DiffOp {
+class DiffOpAdd extends DiffOp {
public $type = 'add';
function __construct( $lines ) {
}
/**
- * @return DiffOp_Delete
+ * @return DiffOpDelete
*/
function reverse() {
- return new DiffOp_Delete( $this->closing );
+ return new DiffOpDelete( $this->closing );
}
}
* @private
* @ingroup DifferenceEngine
*/
-class DiffOp_Change extends DiffOp {
+class DiffOpChange extends DiffOp {
public $type = 'change';
function __construct( $orig, $closing ) {
}
/**
- * @return DiffOp_Change
+ * @return DiffOpChange
*/
function reverse() {
- return new DiffOp_Change( $this->closing, $this->orig );
+ return new DiffOpChange( $this->closing, $this->orig );
}
}
*
* The algorithm used here is mostly lifted from the perl module
* Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
- * http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
+ * http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
*
* More ideas are taken from:
- * http://www.ics.uci.edu/~eppstein/161/960229.html
+ * http://www.ics.uci.edu/~eppstein/161/960229.html
*
* Some ideas are (and a bit of code) are from from analyze.c, from GNU
* diffutils-2.7, which can be found at:
- * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
+ * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
*
* closingly, some ideas (subdivision by NCHUNKS > 2, and some optimizations)
* are my own.
* @ingroup DifferenceEngine
*/
class DiffEngine {
-
const MAX_XREF_LENGTH = 10000;
protected $xchanged, $ychanged;
// Skip matching "snake".
$copy = array();
while ( $xi < $n_from && $yi < $n_to
- && !$this->xchanged[$xi] && !$this->ychanged[$yi] ) {
+ && !$this->xchanged[$xi] && !$this->ychanged[$yi]
+ ) {
$copy[] = $from_lines[$xi++];
++$yi;
}
if ( $copy ) {
- $edits[] = new DiffOp_Copy( $copy );
+ $edits[] = new DiffOpCopy( $copy );
}
// Find deletes & adds.
}
if ( $delete && $add ) {
- $edits[] = new DiffOp_Change( $delete, $add );
+ $edits[] = new DiffOpChange( $delete, $add );
} elseif ( $delete ) {
- $edits[] = new DiffOp_Delete( $delete );
+ $edits[] = new DiffOpDelete( $delete );
} elseif ( $add ) {
- $edits[] = new DiffOp_Add( $add );
+ $edits[] = new DiffOpAdd( $add );
}
}
wfProfileOut( __METHOD__ );
+
return $edits;
}
for ( $chunk = 0; $chunk < $nchunks; $chunk++ ) {
if ( $chunk > 0 ) {
for ( $i = 0; $i <= $this->lcs; $i++ ) {
- $ymids[$i][$chunk -1] = $this->seq[$i];
+ $ymids[$i][$chunk - 1] = $this->seq[$i];
}
}
- $x1 = $xoff + (int)( ( $numer + ( $xlim -$xoff ) * $chunk ) / $nchunks );
+ $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
for ( ; $x < $x1; $x++ ) {
$line = $flip ? $this->yv[$x] : $this->xv[$x];
if ( empty( $ymatches[$line] ) ) {
continue;
}
+
+ $k = 0;
$matches = $ymatches[$line];
reset( $matches );
while ( list( , $y ) = each( $matches ) ) {
if ( empty( $this->in_seq[$y] ) ) {
$k = $this->lcsPos( $y );
assert( '$k > 0' );
- $ymids[$k] = $ymids[$k -1];
+ $ymids[$k] = $ymids[$k - 1];
break;
}
}
+
while ( list( , $y ) = each( $matches ) ) {
- if ( $y > $this->seq[$k -1] ) {
+ if ( $y > $this->seq[$k - 1] ) {
assert( '$y < $this->seq[$k]' );
// Optimization: this is a common case:
// next match is just replacing previous match.
} elseif ( empty( $this->in_seq[$y] ) ) {
$k = $this->lcsPos( $y );
assert( '$k > 0' );
- $ymids[$k] = $ymids[$k -1];
+ $ymids[$k] = $ymids[$k - 1];
}
}
}
if ( $end == 0 || $ypos > $this->seq[$end] ) {
$this->seq[++$this->lcs] = $ypos;
$this->in_seq[$ypos] = 1;
+
return $this->lcs;
}
$this->in_seq[$this->seq[$end]] = false;
$this->seq[$end] = $ypos;
$this->in_seq[$ypos] = 1;
+
return $end;
}
// Slide up the top initial diagonal.
while ( $xlim > $xoff && $ylim > $yoff
- && $this->xv[$xlim - 1] == $this->yv[$ylim - 1] ) {
+ && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]
+ ) {
--$xlim;
--$ylim;
}
$j++;
}
- while ( $i < $len && ! $changed[$i] ) {
+ while ( $i < $len && !$changed[$i] ) {
assert( '$j < $other_len && ! $other_changed[$j]' );
$i++;
$j++;
* Computes diff between sequences of strings.
*
* @param $from_lines array An array of strings.
- * (Typically these are lines from a file.)
+ * Typically these are lines from a file.
* @param $to_lines array An array of strings.
*/
function __construct( $from_lines, $to_lines ) {
$eng = new DiffEngine;
$this->edits = $eng->diff( $from_lines, $to_lines );
- // $this->check($from_lines, $to_lines);
}
/**
*
* SYNOPSIS:
*
- * $diff = new Diff($lines1, $lines2);
- * $rev = $diff->reverse();
+ * $diff = new Diff($lines1, $lines2);
+ * $rev = $diff->reverse();
* @return Object A Diff object representing the inverse of the
- * original diff.
+ * original diff.
*/
function reverse() {
$rev = $this;
foreach ( $this->edits as $edit ) {
$rev->edits[] = $edit->reverse();
}
+
return $rev;
}
return false;
}
}
+
return true;
}
$lcs += count( $edit->orig );
}
}
+
return $lcs;
}
array_splice( $lines, count( $lines ), 0, $edit->orig );
}
}
+
return $lines;
}
array_splice( $lines, count( $lines ), 0, $edit->closing );
}
}
- return $lines;
- }
-
- /**
- * Check a Diff for validity.
- *
- * This is here only for debugging purposes.
- * @param $from_lines
- * @param $to_lines
- */
- private function check( $from_lines, $to_lines ) {
- wfProfileIn( __METHOD__ );
- if ( serialize( $from_lines ) != serialize( $this->orig() ) ) {
- trigger_error( "Reconstructed original doesn't match", E_USER_ERROR );
- }
- if ( serialize( $to_lines ) != serialize( $this->closing() ) ) {
- trigger_error( "Reconstructed closing doesn't match", E_USER_ERROR );
- }
-
- $rev = $this->reverse();
- if ( serialize( $to_lines ) != serialize( $rev->orig() ) ) {
- trigger_error( "Reversed original doesn't match", E_USER_ERROR );
- }
- if ( serialize( $from_lines ) != serialize( $rev->closing() ) ) {
- trigger_error( "Reversed closing doesn't match", E_USER_ERROR );
- }
-
- $prevtype = 'none';
- foreach ( $this->edits as $edit ) {
- if ( $prevtype == $edit->type ) {
- trigger_error( 'Edit sequence is non-optimal', E_USER_ERROR );
- }
- $prevtype = $edit->type;
- }
- $lcs = $this->lcs();
- trigger_error( 'Diff okay: LCS = ' . $lcs, E_USER_NOTICE );
- wfProfileOut( __METHOD__ );
+ return $lines;
}
}
* changes in white-space.
*
* @param $from_lines array An array of strings.
- * (Typically these are lines from a file.)
+ * Typically these are lines from a file.
*
* @param $to_lines array An array of strings.
*
* @param $mapped_from_lines array This array should
- * have the same size number of elements as $from_lines.
- * The elements in $mapped_from_lines and
- * $mapped_to_lines are what is actually compared
- * when computing the diff.
+ * have the same size number of elements as $from_lines.
+ * The elements in $mapped_from_lines and
+ * $mapped_to_lines are what is actually compared
+ * when computing the diff.
*
* @param $mapped_to_lines array This array should
- * have the same number of elements as $to_lines.
+ * have the same number of elements as $to_lines.
*/
function __construct( $from_lines, $to_lines,
$mapped_from_lines, $mapped_to_lines ) {
parent::__construct( $mapped_from_lines, $mapped_to_lines );
$xi = $yi = 0;
- for ( $i = 0; $i < count( $this->edits ); $i++ ) {
+ $editCount = count( $this->edits );
+ for ( $i = 0; $i < $editCount; $i++ ) {
$orig = &$this->edits[$i]->orig;
if ( is_array( $orig ) ) {
$orig = array_slice( $from_lines, $xi, count( $orig ) );
* @private
* @ingroup DifferenceEngine
*/
-class HWLDF_WordAccumulator {
+class HWLDFWordAccumulator {
private $lines = array();
private $line = '';
private $group = '';
if ( $this->group !== '' ) {
if ( $this->tag == 'ins' ) {
$this->line .= '<ins class="diffchange diffchange-inline">' .
- htmlspecialchars( $this->group ) . '</ins>';
+ htmlspecialchars( $this->group ) . '</ins>';
} elseif ( $this->tag == 'del' ) {
$this->line .= '<del class="diffchange diffchange-inline">' .
- htmlspecialchars( $this->group ) . '</del>';
+ htmlspecialchars( $this->group ) . '</del>';
} else {
$this->line .= htmlspecialchars( $this->group );
}
*/
public function getLines() {
$this->flushLine( '~done' );
+
return $this->lines;
}
}
list( $closing_words, $closing_stripped ) = $this->split( $closing_lines );
parent::__construct( $orig_words, $closing_words,
- $orig_stripped, $closing_stripped );
+ $orig_stripped, $closing_stripped );
wfProfileOut( __METHOD__ );
}
} else {
$m = array();
if ( preg_match_all( '/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
- $line, $m ) )
- {
+ $line, $m )
+ ) {
foreach ( $m[0] as $word ) {
$words[] = $word;
}
}
}
wfProfileOut( __METHOD__ );
+
return array( $words, $stripped );
}
*/
public function orig() {
wfProfileIn( __METHOD__ );
- $orig = new HWLDF_WordAccumulator;
+ $orig = new HWLDFWordAccumulator;
foreach ( $this->edits as $edit ) {
if ( $edit->type == 'copy' ) {
}
$lines = $orig->getLines();
wfProfileOut( __METHOD__ );
+
return $lines;
}
*/
public function closing() {
wfProfileIn( __METHOD__ );
- $closing = new HWLDF_WordAccumulator;
+ $closing = new HWLDFWordAccumulator;
foreach ( $this->edits as $edit ) {
if ( $edit->type == 'copy' ) {
}
$lines = $closing->getLines();
wfProfileOut( __METHOD__ );
+
return $lines;
}
}
* @ingroup DifferenceEngine
*/
abstract class DiffFormatter {
- /**
- * Number of leading context "lines" to preserve.
+ /** @var int Number of leading context "lines" to preserve.
*
* This should be left at zero for this class, but subclasses
* may want to set this to other values.
*/
protected $leadingContextLines = 0;
- /**
- * Number of trailing context "lines" to preserve.
+ /** @var int Number of trailing context "lines" to preserve.
*
* This should be left at zero for this class, but subclasses
* may want to set this to other values.
$this->startDiff();
+ // Initialize $x0 and $y0 to prevent IDEs from getting confused.
+ $x0 = $y0 = 0;
foreach ( $diff->edits as $edit ) {
if ( $edit->type == 'copy' ) {
if ( is_array( $block ) ) {
} else {
if ( $ntrail ) {
$context = array_slice( $edit->orig, 0, $ntrail );
- $block[] = new DiffOp_Copy( $context );
+ $block[] = new DiffOpCopy( $context );
}
$this->block( $x0, $ntrail + $xi - $x0,
$y0, $ntrail + $yi - $y0,
$y0 = $yi - count( $context );
$block = array();
if ( $context ) {
- $block[] = new DiffOp_Copy( $context );
+ $block[] = new DiffOpCopy( $context );
}
}
$block[] = $edit;
$end = $this->endDiff();
wfProfileOut( __METHOD__ );
+
return $end;
}
/**
- * @param $xbeg
- * @param $xlen
- * @param $ybeg
- * @param $ylen
+ * @param int $xbeg
+ * @param int $xlen
+ * @param int $ybeg
+ * @param int $ylen
* @param $edits
+ * @throws MWException
*/
protected function block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
wfProfileIn( __METHOD__ );
protected function endDiff() {
$val = ob_get_contents();
ob_end_clean();
+
return $val;
}
* @ingroup DifferenceEngine
*/
class DifferenceEngine extends ContextSource {
+ /** @var int */
public $mOldid;
+
+ /** @var int */
public $mNewid;
+
private $mOldTags;
private $mNewTags;
- /**
- * @var Content
- */
+ /** @var Content */
public $mOldContent;
+
+ /** @var Content */
public $mNewContent;
+
+ /** @var Language */
protected $mDiffLang;
- /**
- * @var Title
- */
+ /** @var Title */
public $mOldPage;
+
+ /** @var Title */
public $mNewPage;
- /**
- * @var Revision
- */
+ /** @var Revision */
public $mOldRev;
+
+ /** @var Revision */
public $mNewRev;
- private $mRevisionsIdsLoaded = false; // Have the revisions IDs been loaded
- public $mRevisionsLoaded = false; // Have the revisions been loaded
- public $mTextLoaded = 0; // How many text blobs have been loaded, 0, 1 or 2?
- public $mCacheHit = false; // Was the diff fetched from cache?
+
+ /** @var bool Have the revisions IDs been loaded */
+ private $mRevisionsIdsLoaded = false;
+
+ /** @var bool Have the revisions been loaded */
+ public $mRevisionsLoaded = false;
+
+ /** @var int How many text blobs have been loaded, 0, 1 or 2? */
+ public $mTextLoaded = 0;
+
+ /** @var bool Was the diff fetched from cache? */
+ public $mCacheHit = false;
/**
* Set this to true to add debug info to the HTML output.
*/
public $enableDebugComment = false;
- // If true, line X is not displayed when X is 1, for example to increase
- // readability and conserve space with many small diffs.
+ /** @var bool If true, line X is not displayed when X is 1, for example
+ * to increase readability and conserve space with many small diffs.
+ */
protected $mReducedLineNumbers = false;
- // Link to action=markpatrolled
+ /** @var string Link to action=markpatrolled */
protected $mMarkPatrolledLink = null;
- protected $unhide = false; # show rev_deleted content if allowed
+ /** @var bool Show rev_deleted content if allowed */
+ protected $unhide = false;
/**#@-*/
/**
# Default language in which the diff text is written.
$this->mDiffLang = $this->getTitle()->getPageLanguage();
}
+
return $this->mDiffLang;
}
*/
function getOldid() {
$this->loadRevisionIds();
+
return $this->mOldid;
}
*/
function getNewid() {
$this->loadRevisionIds();
+
return $this->mNewid;
}
if ( $row ) {
$rev = Revision::newFromArchiveRow( $row );
$title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
+
return SpecialPage::getTitleFor( 'Undelete' )->getFullURL( array(
'target' => $title->getPrefixedText(),
'timestamp' => $rev->getTimestamp()
- ));
+ ) );
}
}
+
return false;
}
if ( !$this->loadRevisionData() ) {
$this->showMissingRevision();
wfProfileOut( __METHOD__ );
+
return;
}
'href' => $this->mNewPage->getLocalURL( array(
'action' => 'edit',
'undoafter' => $this->mOldid,
- 'undo' => $this->mNewid ) ),
+ 'undo' => $this->mNewid
+ ) ),
'title' => Linker::titleAttrib( 'undo' )
),
$this->msg( 'editundo' )->text()
$oldHeader = '<div id="mw-diff-otitle1"><strong>' . $oldRevisionHeader . '</strong></div>' .
'<div id="mw-diff-otitle2">' .
- Linker::revUserTools( $this->mOldRev, !$this->unhide ) . '</div>' .
+ Linker::revUserTools( $this->mOldRev, !$this->unhide ) . '</div>' .
'<div id="mw-diff-otitle3">' . $oldminor .
- Linker::revComment( $this->mOldRev, !$diffOnly, !$this->unhide ) . $ldel . '</div>' .
+ Linker::revComment( $this->mOldRev, !$diffOnly, !$this->unhide ) . $ldel . '</div>' .
'<div id="mw-diff-otitle5">' . $oldChangeTags[0] . '</div>' .
'<div id="mw-diff-otitle4">' . $prevlink . '</div>';
$newHeader = '<div id="mw-diff-ntitle1"><strong>' . $newRevisionHeader . '</strong></div>' .
'<div id="mw-diff-ntitle2">' . Linker::revUserTools( $this->mNewRev, !$this->unhide ) .
- " $rollback</div>" .
+ " $rollback</div>" .
'<div id="mw-diff-ntitle3">' . $newminor .
- Linker::revComment( $this->mNewRev, !$diffOnly, !$this->unhide ) . $rdel . '</div>' .
+ Linker::revComment( $this->mNewRev, !$diffOnly, !$this->unhide ) . $rdel . '</div>' .
'<div id="mw-diff-ntitle5">' . $newChangeTags[0] . '</div>' .
'<div id="mw-diff-ntitle4">' . $nextlink . $this->markPatrolledLink() . '</div>';
if ( $link !== '' ) {
$link = '   ' . $link . ' ';
}
+
return $link;
}
}
$parserOutput = $page->getParserOutput( $parserOptions, $rev->getId() );
+
return $parserOutput;
}
$diff = $this->getDiff( $otitle, $ntitle, $notice );
if ( $diff === false ) {
$this->showMissingRevision();
+
return false;
} else {
$this->showDiffStyle();
$this->getOutput()->addHTML( $diff );
+
return true;
}
}
// Check if the diff should be hidden from this user
if ( !$this->loadRevisionData() ) {
wfProfileOut( __METHOD__ );
+
return false;
} elseif ( $this->mOldRev &&
!$this->mOldRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
) {
wfProfileOut( __METHOD__ );
+
return false;
} elseif ( $this->mNewRev &&
!$this->mNewRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
) {
wfProfileOut( __METHOD__ );
+
return false;
}
// Short-circuit
if ( $this->mOldRev === false || ( $this->mOldRev && $this->mNewRev
- && $this->mOldRev->getID() == $this->mNewRev->getID() ) )
- {
+ && $this->mOldRev->getID() == $this->mNewRev->getID() )
+ ) {
wfProfileOut( __METHOD__ );
+
return '';
}
// Cacheable?
$difftext = $this->localiseLineNumbers( $difftext );
$difftext .= "\n<!-- diff cache key $key -->\n";
wfProfileOut( __METHOD__ );
+
return $difftext;
}
} // don't try to load but save the result
// Loadtext is permission safe, this just clears out the diff
if ( !$this->loadText() ) {
wfProfileOut( __METHOD__ );
+
return false;
}
$difftext = $this->localiseLineNumbers( $difftext );
}
wfProfileOut( __METHOD__ );
+
return $difftext;
}
*/
function generateContentDiffBody( Content $old, Content $new ) {
if ( !( $old instanceof TextContent ) ) {
- throw new MWException( "Diff not implemented for " . get_class( $old ) . "; "
- . "override generateContentDiffBody to fix this." );
+ throw new MWException( "Diff not implemented for " . get_class( $old ) . "; " .
+ "override generateContentDiffBody to fix this." );
}
if ( !( $new instanceof TextContent ) ) {
if ( $wgExternalDiffEngine == 'wikidiff' && function_exists( 'wikidiff_do_diff' ) ) {
# For historical reasons, external diff engine expects
# input text to be HTML-escaped already
- $otext = htmlspecialchars ( $wgContLang->segmentForDiff( $otext ) );
- $ntext = htmlspecialchars ( $wgContLang->segmentForDiff( $ntext ) );
+ $otext = htmlspecialchars( $wgContLang->segmentForDiff( $otext ) );
+ $ntext = htmlspecialchars( $wgContLang->segmentForDiff( $ntext ) );
wfProfileOut( __METHOD__ );
+
return $wgContLang->unsegmentForDiff( wikidiff_do_diff( $otext, $ntext, 2 ) ) .
$this->debug( 'wikidiff1' );
}
$text .= $this->debug( 'wikidiff2' );
wfProfileOut( 'wikidiff2_do_diff' );
wfProfileOut( __METHOD__ );
+
return $text;
}
if ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) {
$tempFile1 = fopen( $tempName1, "w" );
if ( !$tempFile1 ) {
wfProfileOut( __METHOD__ );
+
return false;
}
$tempFile2 = fopen( $tempName2, "w" );
if ( !$tempFile2 ) {
wfProfileOut( __METHOD__ );
+
return false;
}
fwrite( $tempFile1, $otext );
unlink( $tempName1 );
unlink( $tempName2 );
wfProfileOut( __METHOD__ );
+
return $difftext;
}
$diffs = new Diff( $ota, $nta );
$formatter = new TableDiffFormatter();
$difftext = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) ) .
- wfProfileOut( __METHOD__ );
+ wfProfileOut( __METHOD__ );
+
return $difftext;
}
* Generate a debug comment indicating diff generating time,
* server node, and generator backend.
*
- * @param String $generator: What diff engine was used
+ * @param String $generator : What diff engine was used
*
* @return string
*/
$data[] = wfHostname();
}
$data[] = wfTimestamp( TS_DB );
- return "<!-- diff generator: "
- . implode( " ",
- array_map(
- "htmlspecialchars",
- $data )
- )
- . " -->\n";
+
+ return "<!-- diff generator: " .
+ implode( " ", array_map( "htmlspecialchars", $data ) ) .
+ " -->\n";
}
/**
* @return mixed
*/
function localiseLineNumbers( $text ) {
- return preg_replace_callback( '/<!--LINE (\d+)-->/',
- array( &$this, 'localiseLineNumbersCb' ), $text );
+ return preg_replace_callback(
+ '/<!--LINE (\d+)-->/',
+ array( &$this, 'localiseLineNumbersCb' ),
+ $text
+ );
}
function localiseLineNumbersCb( $matches ) {
if ( $matches[1] === '1' && $this->mReducedLineNumbers ) {
return '';
}
+
return $this->msg( 'lineno' )->numParams( $matches[1] )->escaped();
}
if ( $nEdits > 0 ) {
$limit = 100; // use diff-multi-manyusers if too many users
$numUsers = $this->mNewPage->countAuthorsBetween( $oldRev, $newRev, $limit );
+
return self::intermediateEditsMsg( $nEdits, $numUsers, $limit );
}
+
return ''; // nothing
}
} else {
$msg = 'diff-multi';
}
+
return wfMessage( $msg )->numParams( $numEdits, $numUsers )->parse();
}
/**
* Add the header to a diff body
*
- * @param String $diff: Diff body
- * @param String $otitle: Old revision header
- * @param String $ntitle: New revision header
- * @param String $multi: Notice telling user that there are intermediate revisions between the ones being compared
- * @param String $notice: Other notices, e.g. that user is viewing deleted content
+ * @param string $diff Diff body
+ * @param string $otitle Old revision header
+ * @param string $ntitle New revision header
+ * @param string $multi Notice telling user that there are intermediate
+ * revisions between the ones being compared
+ * @param string $notice Other notices, e.g. that user is viewing deleted content
*
* @return string
*/
$this->mNewid = 0;
}
- wfRunHooks( 'NewDifferenceEngine', array( $this->getTitle(), &$this->mOldid, &$this->mNewid, $old, $new ) );
+ wfRunHooks(
+ 'NewDifferenceEngine',
+ array( $this->getTitle(), &$this->mOldid, &$this->mNewid, $old, $new )
+ );
}
/**
$msg = preg_replace( '/^ /m', '  ', $msg );
$msg = preg_replace( '/ $/m', '  ', $msg );
$msg = preg_replace( '/ /', '  ', $msg );
+
return $msg;
}
protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
$r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
'<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
+
return $r;
}
// The <div> wrapper is needed for 'overflow: auto' style to scroll properly
$line = Xml::tags( 'div', null, $this->escapeWhiteSpace( $line ) );
}
+
return "<td class='diff-marker'>$marker</td><td class='$class'>$line</td>";
}
echo '<tr>' . $this->deletedLine( $line ) .
$this->addedLine( $aline ) . "</tr>\n";
}
- foreach ( $add as $line ) { # If any leftovers
+ foreach ( $add as $line ) { # If any leftovers
echo '<tr>' . $this->emptyLine() .
$this->addedLine( $line ) . "</tr>\n";
}
* @ingroup DifferenceEngine
*/
class UnifiedDiffFormatter extends DiffFormatter {
+ /** @var int */
protected $leadingContextLines = 2;
+
+ /** @var int */
protected $trailingContextLines = 2;
/**
*/
$max = min( $this->m, $this->n );
for ( $forwardBound = 0; $forwardBound < $max
- && $this->from[$forwardBound] === $this->to[$forwardBound];
- ++$forwardBound ) {
+ && $this->from[$forwardBound] === $this->to[$forwardBound];
+ ++$forwardBound
+ ) {
$this->removed[$forwardBound] = $this->added[$forwardBound] = false;
}
$backBoundL2 = $this->n - 1;
while ( $backBoundL1 >= $forwardBound && $backBoundL2 >= $forwardBound
- && $this->from[$backBoundL1] === $this->to[$backBoundL2] ) {
+ && $this->from[$backBoundL1] === $this->to[$backBoundL2]
+ ) {
$this->removed[$backBoundL1--] = $this->added[$backBoundL2--] = false;
}
$snake = array( 0, 0, 0 );
$this->length = $forwardBound + $this->m - $backBoundL1 - 1
- + $this->lcs_rec( $forwardBound, $backBoundL1,
- $forwardBound, $backBoundL2, $V, $snake );
+ + $this->lcs_rec(
+ $forwardBound,
+ $backBoundL1,
+ $forwardBound,
+ $backBoundL2,
+ $V,
+ $snake
+ );
}
$this->m = $m;
while ( $xi < $this->m || $yi < $this->n ) {
// Matching "snake".
while ( $xi < $this->m && $yi < $this->n
- && !$this->removed[$xi]
- && !$this->added[$yi] ) {
+ && !$this->removed[$xi]
+ && !$this->added[$yi]
+ ) {
++$xi;
++$yi;
}
}
if ( $xi > $xstart || $yi > $ystart ) {
- $ranges[] = new RangeDifference( $xstart, $xi,
- $ystart, $yi );
+ $ranges[] = new RangeDifference( $xstart, $xi, $ystart, $yi );
}
}
+
return $ranges;
}
}
$d = $this->find_middle_snake( $bottoml1, $topl1, $bottoml2,
- $topl2, $V, $snake );
+ $topl2, $V, $snake );
// need to store these so we don't lose them when they're
// overwritten by the recursion
if ( $d > 1 ) {
return $len
+ $this->lcs_rec( $bottoml1, $startx - 1, $bottoml2,
- $starty - 1, $V, $snake )
+ $starty - 1, $V, $snake )
+ $this->lcs_rec( $startx + $len, $topl1, $starty + $len,
- $topl2, $V, $snake );
+ $topl2, $V, $snake );
} elseif ( $d == 1 ) {
/*
* In this case the sequences differ by exactly 1 line. We have
$this->removed[$bottoml1 + $i] =
$this->added[$bottoml2 + $i] = false;
}
+
return $max + $len;
}
+
return $len;
}
$snake0 = &$snake[0];
$snake1 = &$snake[1];
$snake2 = &$snake[2];
- $bottoml1_min_1 = $bottoml1 -1;
- $bottoml2_min_1 = $bottoml2 -1;
+ $bottoml1_min_1 = $bottoml1 - 1;
+ $bottoml2_min_1 = $bottoml2 - 1;
$N = $topl1 - $bottoml1_min_1;
$M = $topl2 - $bottoml2_min_1;
$delta = $N - $M;
// compute forward furthest reaching paths
for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
if ( $k == -$d || ( $k < $d
- && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] ) ) {
+ && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] )
+ ) {
$x = $V0[$limit_plus_1 + $k];
} else {
$x = $V0[$limit_min_1 + $k] + 1;
++$absx;
++$absy;
}
- $x = $absx -$bottoml1;
+ $x = $absx - $bottoml1;
- $snake2 = $absx -$snake0;
+ $snake2 = $absx - $snake0;
$V0[$limit + $k] = $x;
if ( $k >= $delta - $d + 1 && $k <= $delta + $d - 1
- && $x >= $V1[$limit + $k - $delta] ) {
+ && $x >= $V1[$limit + $k - $delta]
+ ) {
return 2 * $d - 1;
}
// compute backward furthest reaching paths
for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
if ( $k == $d
- || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] ) ) {
+ || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] )
+ ) {
$x = $V1[$limit_min_1 + $k];
} else {
$x = $V1[$limit_plus_1 + $k] - 1;
$snake2 = 0;
while ( $x > 0 && $y > 0
- && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1] ) {
+ && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1]
+ ) {
--$x;
--$y;
++$snake2;
// compute forward furthest reaching paths
for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
if ( $k == -$d
- || ( $k < $d && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] ) ) {
+ || ( $k < $d && $V0[$limit_min_1 + $k] < $V0[$limit_plus_1 + $k] )
+ ) {
$x = $V0[$limit_plus_1 + $k];
} else {
$x = $V0[$limit_min_1 + $k] + 1;
++$absx;
++$absy;
}
- $x = $absx -$bottoml1;
- $snake2 = $absx -$snake0;
+ $x = $absx - $bottoml1;
+ $snake2 = $absx - $snake0;
$V0[$limit + $k] = $x;
// check to see if we can cut down the diagonal range
if ( $x >= $N && $end_forward > $k - 1 ) {
$end_forward = $k - 1;
- } elseif ( $absy -$bottoml2 >= $M ) {
+ } elseif ( $absy - $bottoml2 >= $M ) {
$start_forward = $k + 1;
$value_to_add_forward = 0;
}
// compute backward furthest reaching paths
for ( $k = $start_diag; $k <= $end_diag; $k += 2 ) {
if ( $k == $d
- || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] ) ) {
+ || ( $k != -$d && $V1[$limit_min_1 + $k] < $V1[$limit_plus_1 + $k] )
+ ) {
$x = $V1[$limit_min_1 + $k];
} else {
$x = $V1[$limit_plus_1 + $k] - 1;
$snake2 = 0;
while ( $x > 0 && $y > 0
- && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1] ) {
+ && $from[$x + $bottoml1_min_1] === $to[$y + $bottoml2_min_1]
+ ) {
--$x;
--$y;
++$snake2;
$V1[$limit + $k] = $x;
if ( $k >= -$delta - $d && $k <= $d - $delta
- && $x <= $V0[$limit + $k + $delta] ) {
+ && $x <= $V0[$limit + $k + $delta]
+ ) {
$snake0 = $bottoml1 + $x;
$snake1 = $bottoml2 + $y;
+
return 2 * $d;
}
$snake2 = 0;
wfDebug( "Computing the LCS is too expensive. Using a heuristic.\n" );
$this->heuristicUsed = true;
+
return 5; /*
* HACK: since we didn't really finish the LCS computation
* we don't really know the length of the SES. We don't do
public function getLcsLength() {
if ( $this->heuristicUsed && !$this->lcsLengthCorrectedForHeuristic ) {
$this->lcsLengthCorrectedForHeuristic = true;
- $this->length = $this->m -array_sum( $this->added );
+ $this->length = $this->m - array_sum( $this->added );
}
+
return $this->length;
}
-
}
/**
* @ingroup DifferenceEngine
*/
class RangeDifference {
-
+ /** @var int */
public $leftstart;
+
+ /** @var int */
public $leftend;
+
+ /** @var int */
public $leftlength;
+ /** @var int */
public $rightstart;
+
+ /** @var int */
public $rightend;
+
+ /** @var int */
public $rightlength;
function __construct( $leftstart, $leftend, $rightstart, $rightend ) {
// Dont return when false to allow for simpler implementations.
// errored urls are handled in ExternalStore::batchFetchFromURLs
if ( $data !== false ) {
- $retval[$urls] = $data;
+ $retval[$url] = $data;
}
}
return $retval;
}
$blobs = array();
foreach ( $pathsByBackend as $backendName => $paths ) {
- $be = FileBackendGroup::get( $backendName );
+ $be = FileBackendGroup::singleton()->get( $backendName );
$blobs = $blobs + $be->getFileContentsMulti( array( 'srcs' => $paths ) );
}
return $blobs;
* @ingroup FileBackend
*/
class FSFile {
- protected $path; // path to file
- protected $sha1Base36; // file SHA-1 in base 36
+ /** @var string Path to file */
+ protected $path;
+
+ /** @var string File SHA-1 in base 36 */
+ protected $sha1Base36;
/**
* Sets up the file object
if ( $timestamp !== false ) {
$timestamp = wfTimestamp( TS_MW, $timestamp );
}
+
return $timestamp;
}
* Get an associative array containing information about
* a file with the given storage path.
*
- * @param Mixed $ext: the file extension, or true to extract it from the filename.
+ * @param mixed $ext The file extension, or true to extract it from the filename.
* Set it to false to ignore the extension.
*
* @return array
}
wfProfileOut( __METHOD__ );
+
return $info;
}
/**
* Placeholder file properties to use for files that don't exist
*
- * @return Array
+ * @return array
*/
public static function placeholderProps() {
$info = array();
$info['width'] = 0;
$info['height'] = 0;
$info['bits'] = 0;
+
return $info;
}
* Exract image size information
*
* @param array $gis
- * @return Array
+ * @return array
*/
protected function extractImageSizeInfo( array $gis ) {
$info = array();
} else {
$info['bits'] = 0;
}
+
return $info;
}
if ( $this->sha1Base36 !== null && !$recache ) {
wfProfileOut( __METHOD__ );
+
return $this->sha1Base36;
}
}
wfProfileOut( __METHOD__ );
+
return $this->sha1Base36;
}
*/
public static function extensionFromPath( $path ) {
$i = strrpos( $path, '.' );
+
return strtolower( $i ? substr( $path, $i + 1 ) : '' );
}
* Get an associative array containing information about a file in the local filesystem.
*
* @param string $path absolute local filesystem path
- * @param Mixed $ext: the file extension, or true to extract it from the filename.
- * Set it to false to ignore the extension.
+ * @param mixed $ext The file extension, or true to extract it from the filename.
+ * Set it to false to ignore the extension.
* @return array
*/
public static function getPropsFromPath( $path, $ext = true ) {
$fsFile = new self( $path );
+
return $fsFile->getProps( $ext );
}
*/
public static function getSha1Base36FromPath( $path ) {
$fsFile = new self( $path );
+
return $fsFile->getSha1Base36();
}
}
* @since 1.19
*/
class FSFileBackend extends FileBackendStore {
- protected $basePath; // string; directory holding the container directories
- /** @var Array Map of container names to root paths */
- protected $containerPaths = array(); // for custom container paths
- protected $fileMode; // integer; file permission mode
- protected $fileOwner; // string; required OS username to own files
- protected $currentUser; // string; OS username running this script
-
- /** @var Array */
+ /** @var string Directory holding the container directories */
+ protected $basePath;
+
+ /** @var array Map of container names to root paths for custom container paths */
+ protected $containerPaths = array();
+
+ /** @var int File permission mode */
+ protected $fileMode;
+
+ /** @var string Required OS username to own files */
+ protected $fileOwner;
+
+ /** @var string OS username running this script */
+ protected $currentUser;
+
+ /** @var array */
protected $hadWarningErrors = array();
/**
return $relStoragePath;
}
}
+
return null;
}
} elseif ( isset( $this->basePath ) ) {
return "{$this->basePath}/{$fullCont}";
}
+
return null; // no container base path defined
}
if ( $relPath != '' ) {
$fsPath .= "/{$relPath}";
}
+
return $fsPath;
}
$dest = $this->resolveToFSPath( $params['dst'] );
if ( $dest === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
$tempFile = TempFSFile::factory( 'create_', 'tmp' );
if ( !$tempFile ) {
$status->fatal( 'backend-fail-create', $params['dst'] );
+
return $status;
}
$this->trapWarnings();
$this->untrapWarnings();
if ( $bytes === false ) {
$status->fatal( 'backend-fail-create', $params['dst'] );
+
return $status;
}
$cmd = implode( ' ', array(
$this->untrapWarnings();
if ( $bytes === false ) {
$status->fatal( 'backend-fail-create', $params['dst'] );
+
return $status;
}
$this->chmod( $dest );
/**
* @see FSFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseCreate( $errors, Status $status, array $params, $cmd ) {
+ protected function getResponseCreate( $errors, Status $status, array $params, $cmd ) {
if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
$status->fatal( 'backend-fail-create', $params['dst'] );
trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
$dest = $this->resolveToFSPath( $params['dst'] );
if ( $dest === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
trigger_error( __METHOD__ . ": copy() failed but returned true." );
}
$status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
+
return $status;
}
$this->chmod( $dest );
/**
* @see FSFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseStore( $errors, Status $status, array $params, $cmd ) {
+ protected function getResponseStore( $errors, Status $status, array $params, $cmd ) {
if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
$status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
$source = $this->resolveToFSPath( $params['src'] );
if ( $source === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
$dest = $this->resolveToFSPath( $params['dst'] );
if ( $dest === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
if ( empty( $params['ignoreMissingSource'] ) ) {
$status->fatal( 'backend-fail-copy', $params['src'] );
}
+
return $status; // do nothing; either OK or bad status
}
trigger_error( __METHOD__ . ": copy() failed but returned true." );
}
$status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
return $status;
}
$this->chmod( $dest );
/**
* @see FSFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseCopy( $errors, Status $status, array $params, $cmd ) {
+ protected function getResponseCopy( $errors, Status $status, array $params, $cmd ) {
if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
$status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
$source = $this->resolveToFSPath( $params['src'] );
if ( $source === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
$dest = $this->resolveToFSPath( $params['dst'] );
if ( $dest === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
if ( empty( $params['ignoreMissingSource'] ) ) {
$status->fatal( 'backend-fail-move', $params['src'] );
}
+
return $status; // do nothing; either OK or bad status
}
clearstatcache(); // file no longer at source
if ( !$ok ) {
$status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+
return $status;
}
}
/**
* @see FSFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseMove( $errors, Status $status, array $params, $cmd ) {
+ protected function getResponseMove( $errors, Status $status, array $params, $cmd ) {
if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
$status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
$source = $this->resolveToFSPath( $params['src'] );
if ( $source === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
if ( empty( $params['ignoreMissingSource'] ) ) {
$status->fatal( 'backend-fail-delete', $params['src'] );
}
+
return $status; // do nothing; either OK or bad status
}
$this->untrapWarnings();
if ( !$ok ) {
$status->fatal( 'backend-fail-delete', $params['src'] );
+
return $status;
}
}
/**
* @see FSFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseDelete( $errors, Status $status, array $params, $cmd ) {
+ protected function getResponseDelete( $errors, Status $status, array $params, $cmd ) {
if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
$status->fatal( 'backend-fail-delete', $params['src'] );
trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
}
}
+ /**
+ * @param string $fullCont
+ * @param $dirRel
+ * @param array $params
+ * @return Status
+ */
protected function doPrepareInternal( $fullCont, $dirRel, array $params ) {
$status = Status::newGood();
list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
if ( is_dir( $dir ) && !$existed ) {
$status->merge( $this->doSecureInternal( $fullCont, $dirRel, $params ) );
}
+
return $status;
}
$status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
}
}
+
return $status;
}
}
$this->untrapWarnings();
}
+
return $status;
}
rmdir( $dir ); // remove directory if empty
}
$this->untrapWarnings();
+
return $status;
}
/**
* @see FileBackendStore::getDirectoryListInternal()
- * @return Array|null
+ * @param string $fullCont
+ * @param string $dirRel
+ * @param array $params
+ * @return array|null
*/
public function getDirectoryListInternal( $fullCont, $dirRel, array $params ) {
list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$exists = is_dir( $dir );
if ( !$exists ) {
wfDebug( __METHOD__ . "() given directory does not exist: '$dir'\n" );
+
return array(); // nothing under this dir
} elseif ( !is_readable( $dir ) ) {
wfDebug( __METHOD__ . "() given directory is unreadable: '$dir'\n" );
+
return null; // bad permissions?
}
+
return new FSFileBackendDirList( $dir, $params );
}
/**
* @see FileBackendStore::getFileListInternal()
- * @return Array|FSFileBackendFileList|null
+ * @param string $fullCont
+ * @param string $dirRel
+ * @param array $params
+ * @return array|FSFileBackendFileList|null
*/
public function getFileListInternal( $fullCont, $dirRel, array $params ) {
list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
$exists = is_dir( $dir );
if ( !$exists ) {
wfDebug( __METHOD__ . "() given directory does not exist: '$dir'\n" );
+
return array(); // nothing under this dir
} elseif ( !is_readable( $dir ) ) {
wfDebug( __METHOD__ . "() given directory is unreadable: '$dir'\n" );
+
return null; // bad permissions?
}
+
return new FSFileBackendFileList( $dir, $params );
}
foreach ( $fileOpHandles as $index => $fileOpHandle ) {
$status = Status::newGood();
- $function = '_getResponse' . $fileOpHandle->call;
+ $function = 'getResponse' . $fileOpHandle->call;
$this->$function( $errs[$index], $status, $fileOpHandle->params, $fileOpHandle->cmd );
$statuses[$index] = $status;
if ( $status->isOK() && $fileOpHandle->chmodPath ) {
/**
* Listen for E_WARNING errors and track whether any happen
- *
- * @return void
*/
protected function trapWarnings() {
$this->hadWarningErrors[] = false; // push to stack
}
/**
- * @param integer $errno
+ * @param int $errno
* @param string $errstr
* @return bool
* @access private
public function handleWarning( $errno, $errstr ) {
wfDebugLog( 'FSFileBackend', $errstr ); // more detailed error logging
$this->hadWarningErrors[count( $this->hadWarningErrors ) - 1] = true;
+
return true; // suppress from PHP handler
}
}
* @param array $params
* @param string $call
* @param string $cmd
- * @param integer|null $chmodPath
+ * @param int|null $chmodPath
*/
public function __construct(
FSFileBackend $backend, array $params, $call, $cmd, $chmodPath = null
abstract class FSFileBackendList implements Iterator {
/** @var Iterator */
protected $iter;
- protected $suffixStart; // integer
- protected $pos = 0; // integer
- /** @var Array */
+
+ /** @var int */
+ protected $suffixStart;
+
+ /** @var int */
+ protected $pos = 0;
+
+ /** @var array */
protected $params = array();
/**
# RecursiveDirectoryIterator extends FilesystemIterator.
# FilesystemIterator::SKIP_DOTS default is inconsistent in PHP 5.3.x.
$flags = FilesystemIterator::CURRENT_AS_SELF | FilesystemIterator::SKIP_DOTS;
+
return new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( $dir, $flags ),
RecursiveIteratorIterator::CHILD_FIRST // include dirs
/**
* @see Iterator::key()
- * @return integer
+ * @return int
*/
public function key() {
return $this->pos;
/**
* @see Iterator::next()
- * @return void
+ * @throws FileBackendError
*/
public function next() {
try {
/**
* @see Iterator::rewind()
- * @return void
+ * @throws FileBackendError
*/
public function rewind() {
$this->pos = 0;
/**
* Filter out items by advancing to the next ones
*/
- protected function filterViaNext() {}
+ protected function filterViaNext() {
+ }
/**
* Return only the relative path and normalize slashes to FileBackend-style.
* Uses the "real path" since the suffix is based upon that.
*
- * @param string $path
+ * @param string $dir
* @return string
*/
protected function getRelPath( $dir ) {
if ( $path === false ) {
$path = $dir;
}
+
return strtr( substr( $path, $this->suffixStart ), '\\', '/' );
}
}
* @since 1.19
*/
abstract class FileBackend {
- protected $name; // string; unique backend name
- protected $wikiId; // string; unique wiki name
- protected $readOnly; // string; read-only explanation message
- protected $parallelize; // string; when to do operations in parallel
- protected $concurrency; // integer; how many operations can be done in parallel
+ /** @var string Unique backend name */
+ protected $name;
+
+ /** @var string Unique wiki name */
+ protected $wikiId;
+
+ /** @var string Read-only explanation message */
+ protected $readOnly;
+
+ /** @var string When to do operations in parallel */
+ protected $parallelize;
+
+ /** @var int How many operations can be done in parallel */
+ protected $concurrency;
/** @var LockManager */
protected $lockManager;
+
/** @var FileJournal */
protected $fileJournal;
* Create a new backend instance from configuration.
* This should only be called from within FileBackendGroup.
*
- * $config includes:
+ * @param array $config Parameters include:
* - name : The unique name of this backend.
* This should consist of alphanumberic, '-', and '_' characters.
* This name should not be changed after use (e.g. with journaling).
* - parallelize : When to do file operations in parallel (when possible).
* Allowed values are "implicit", "explicit" and "off".
* - concurrency : How many file operations can be done in parallel.
- *
- * @param array $config
* @throws MWException
*/
public function __construct( array $config ) {
* otherwise safe from modification from other processes. Normally,
* the file will be a new temp file, which should be adequate.
*
- * @param array $params Operation parameters
- * $params include:
+ * @param array $params Operation parameters, include:
* - srcs : ordered source storage paths (e.g. chunk1, chunk2, ...)
* - dst : file system path to 0-byte temp file
* - parallelize : try to do operations in parallel when possible
* However, setting them is not guaranteed to actually do anything.
* Additional server configuration may be needed to achieve the desired effect.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - noAccess : try to deny file access (since 1.20)
* - noListing : try to deny file listing (since 1.20)
* This is not guaranteed to actually make files or listings publically hidden.
* Additional server configuration may be needed to achieve the desired effect.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - noAccess : try to deny file access
* - noListing : try to deny file listing
* This is not guaranteed to actually make files or listings publically viewable.
* Additional server configuration may be needed to achieve the desired effect.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - access : try to allow file access
* - listing : try to allow file listing
* 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 array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - recursive : recursively delete empty subdirectories first (since 1.20)
* - bypassReadOnly : allow writes in read-only mode (since 1.20)
final protected function getScopedPHPBehaviorForOps() {
if ( PHP_SAPI != 'cli' ) { // http://bugs.php.net/bug.php?id=47540
$old = ignore_user_abort( true ); // avoid half-finished operations
- return new ScopedCallback( function() use ( $old ) {
+ return new ScopedCallback( function () use ( $old ) {
ignore_user_abort( $old );
} );
}
+
return null;
}
* Check if a file exists at a storage path in the backend.
* This returns false if only a directory exists at the path.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
* @return bool|null Returns null on failure
/**
* Get the last-modified timestamp of the file at a storage path.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
* @return string|bool TS_MW timestamp or false on failure
* Get the contents of a file at a storage path in the backend.
* This should be avoided for potentially large files.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
* @return string|bool Returns false on failure
*
* @see FileBackend::getFileContents()
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - srcs : list of source storage paths
* - latest : use the latest available data
* - parallelize : try to do operations in parallel when possible
- * @return Array Map of (path name => string or false on failure)
+ * @return array Map of (path name => string or false on failure)
* @since 1.20
*/
abstract public function getFileContentsMulti( array $params );
/**
* Get the size (bytes) of a file at a storage path in the backend.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
- * @return integer|bool Returns false on failure
+ * @return int|bool Returns false on failure
*/
abstract public function getFileSize( array $params );
* - size : the file size (bytes)
* Additional values may be included for internal use only.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
- * @return Array|bool|null Returns null on failure
+ * @return array|bool|null Returns null on failure
*/
abstract public function getFileStat( array $params );
/**
* Get a SHA-1 hash of the file at a storage path in the backend.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
* @return string|bool Hash string or false on failure
* 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 array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
- * @return Array Returns FSFile::placeholderProps() on failure
+ * @return array Returns FSFile::placeholderProps() on failure
*/
abstract public function getFileProps( array $params );
* will be sent if streaming began, while none will be sent otherwise.
* Implementations should flush the output buffer before sending data.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - headers : list of additional HTTP headers to send on success
* - latest : use the latest available data
* 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 array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
* @return FSFile|null Returns null on failure
*
* @see FileBackend::getLocalReference()
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - srcs : list of source storage paths
* - latest : use the latest available data
* - parallelize : try to do operations in parallel when possible
- * @return Array Map of (path name => FSFile or null on failure)
+ * @return array Map of (path name => FSFile or null on failure)
* @since 1.20
*/
abstract public function getLocalReferenceMulti( array $params );
* 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 array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - latest : use the latest available data
* @return TempFSFile|null Returns null on failure
*
* @see FileBackend::getLocalCopy()
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - srcs : list of source storage paths
* - latest : use the latest available data
* - parallelize : try to do operations in parallel when possible
- * @return Array Map of (path name => TempFSFile or null on failure)
+ * @return array Map of (path name => TempFSFile or null on failure)
* @since 1.20
*/
abstract public function getLocalCopyMulti( array $params );
* Otherwise, one would need to use getLocalReference(), which involves loading
* the entire file on to local disk.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - src : source storage path
* - ttl : lifetime (seconds) if pre-authenticated; default is 1 day
* @return string|null
*
* Storage backends with eventual consistency might return stale data.
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* @return bool|null Returns null on failure
* @since 1.20
*
* Failures during iteration can result in FileBackendError exceptions (since 1.22).
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - topOnly : only return direct child dirs of the directory
* @return Traversable|Array|null Returns null on failure
*
* Failures during iteration can result in FileBackendError exceptions (since 1.22).
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* @return Traversable|Array|null Returns null on failure
* @since 1.20
*
* Failures during iteration can result in FileBackendError exceptions (since 1.22).
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - topOnly : only return direct child files of the directory (since 1.20)
* - adviseStat : set to true if stat requests will be made on the files (since 1.22)
*
* Failures during iteration can result in FileBackendError exceptions (since 1.22).
*
- * @param array $params
- * $params include:
+ * @param array $params Parameters include:
* - dir : storage directory
* - adviseStat : set to true if stat requests will be made on the files (since 1.22)
* @return Traversable|Array|null Returns null on failure
* This should be used when stat calls will be made on a known list of a many files.
*
* @param array $paths Storage paths
- * @return void
*/
- public function preloadCache( array $paths ) {}
+ 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 array $paths Storage paths (optional)
- * @return void
*/
- public function clearCache( array $paths = null ) {}
+ public function clearCache( array $paths = null ) {
+ }
/**
* Lock the files at the given storage paths in the backend.
* Callers should consider using getScopedFileLocks() instead.
*
* @param array $paths Storage paths
- * @param integer $type LockManager::LOCK_* constant
+ * @param int $type LockManager::LOCK_* constant
* @return Status
*/
final public function lockFiles( array $paths, $type ) {
$paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
+
return $this->lockManager->lock( $paths, $type );
}
* Unlock the files at the given storage paths in the backend.
*
* @param array $paths Storage paths
- * @param integer $type LockManager::LOCK_* constant
+ * @param int $type LockManager::LOCK_* constant
* @return Status
*/
final public function unlockFiles( array $paths, $type ) {
$paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
+
return $this->lockManager->unlock( $paths, $type );
}
* @see ScopedLock::factory()
*
* @param array $paths List of storage paths or map of lock types to path lists
- * @param integer|string $type LockManager::LOCK_* constant or "mixed"
+ * @param int|string $type LockManager::LOCK_* constant or "mixed"
* @param Status $status Status to update on lock/unlock
* @return ScopedLock|null Returns null on failure
*/
} else {
$paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
}
+
return ScopedLock::factory( $this->lockManager, $paths, $type, $status );
}
*
* @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
+ * @return array List of ScopedFileLocks or null values
* @since 1.20
*/
abstract public function getScopedLocksForOps( array $ops, Status $status );
* This does not do any path normalization or traversal checks.
*
* @param string $storagePath
- * @return Array (backend, container, rel object) or (null, null, null)
+ * @return array (backend, container, rel object) or (null, null, null)
*/
final public static function splitStoragePath( $storagePath ) {
if ( self::isStoragePath( $storagePath ) ) {
}
}
}
+
return array( null, null, null );
}
: "mwstore://{$backend}/{$container}";
}
}
+
return null;
}
final public static function parentStoragePath( $storagePath ) {
$storagePath = dirname( $storagePath );
list( , , $rel ) = self::splitStoragePath( $storagePath );
+
return ( $rel === null ) ? null : $storagePath;
}
*/
final public static function extensionFromPath( $path ) {
$i = strrpos( $path, '.' );
+
return strtolower( $i ? substr( $path, $i + 1 ) : '' );
}
return null;
}
}
+
return $path;
}
}
* @ingroup FileBackend
* @since 1.22
*/
-class FileBackendError extends MWException {}
+class FileBackendError extends MWException {
+}
* @since 1.19
*/
class FileBackendGroup {
- /**
- * @var FileBackendGroup
- */
+ /** @var FileBackendGroup */
protected static $instance = null;
- /** @var Array (name => ('class' => string, 'config' => array, 'instance' => object)) */
+ /** @var array (name => ('class' => string, 'config' => array, 'instance' => object)) */
protected $backends = array();
- protected function __construct() {}
+ protected function __construct() {
+ }
/**
* @return FileBackendGroup
self::$instance = new self();
self::$instance->initFromGlobals();
}
+
return self::$instance;
}
/**
* Destroy the singleton instance
- *
- * @return void
*/
public static function destroySingleton() {
self::$instance = null;
/**
* Register file backends from the global variables
- *
- * @return void
*/
protected function initFromGlobals() {
global $wgLocalFileRepo, $wgForeignFileRepos, $wgFileBackends;
/**
* Register an array of file backend configurations
*
- * @param Array $configs
- * @return void
+ * @param array $configs
* @throws MWException
*/
protected function register( array $configs ) {
$config = $this->backends[$name]['config'];
$this->backends[$name]['instance'] = new $class( $config );
}
+
return $this->backends[$name]['instance'];
}
* Get the config array for a backend object with a given name
*
* @param string $name
- * @return Array
+ * @return array
* @throws MWException
*/
public function config( $name ) {
throw new MWException( "No backend defined with the name `$name`." );
}
$class = $this->backends[$name]['class'];
+
return array( 'class' => $class ) + $this->backends[$name]['config'];
}
if ( $backend !== null && isset( $this->backends[$backend] ) ) {
return $this->get( $backend );
}
+
return null;
}
}
* @since 1.19
*/
class FileBackendMultiWrite extends FileBackend {
- /** @var Array Prioritized list of FileBackendStore objects */
- protected $backends = array(); // array of (backend index => backends)
- protected $masterIndex = -1; // integer; index of master backend
- protected $syncChecks = 0; // integer; bitfield
- protected $autoResync = false; // boolean
+ /** @var array Prioritized list of FileBackendStore objects.
+ * array of (backend index => backends)
+ */
+ protected $backends = array();
+
+ /** @var int Index of master backend */
+ protected $masterIndex = -1;
+
+ /** @var int Bitfield */
+ protected $syncChecks = 0;
+
+ /** @var string|bool */
+ protected $autoResync = false;
- /** @var Array */
+ /** @var array */
protected $noPushDirConts = array();
- protected $noPushQuickOps = false; // boolean
+
+ /** @var bool */
+ protected $noPushQuickOps = false;
/* Possible internal backend consistency checks */
const CHECK_SIZE = 1;
* - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
* - noPushDirConts : (hack) Only apply directory functions to the master backend.
*
- * @param Array $config
+ * @param array $config
* @throws MWException
*/
public function __construct( array $config ) {
// Try to resync the clone backends to the master on the spot...
if ( !$this->autoResync || !$this->resyncFiles( $relevantPaths )->isOK() ) {
$status->merge( $syncStatus );
+
return $status; // abort
}
}
// already synced; nothing to do
} elseif ( $mSha1 !== false ) { // file is in master
if ( $this->autoResync === 'conservative'
- && $cStat && $cStat['mtime'] > $mStat['mtime'] )
- {
+ && $cStat && $cStat['mtime'] > $mStat['mtime']
+ ) {
$status->fatal( 'backend-fail-synced', $path );
continue; // don't rollback data
}
* Get a list of file storage paths to read or write for a list of operations
*
* @param array $ops Same format as doOperations()
- * @return Array List of storage paths to files (does not include directories)
+ * @return array List of storage paths to files (does not include directories)
*/
protected function fileStoragePathsForOps( array $ops ) {
$paths = array();
// 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'] ) ) )
- {
+ || $this->fileExists( array( 'src' => $op['src'] ) )
+ ) {
$paths[] = $op['src'];
}
}
$paths[] = $op['dst'];
}
}
+
return array_values( array_unique( array_filter( $paths, 'FileBackend::isStoragePath' ) ) );
}
*
* @param array $ops List of file operation arrays
* @param FileBackendStore $backend
- * @return Array
+ * @return array
*/
protected function substOpBatchPaths( array $ops, FileBackendStore $backend ) {
$newOps = array(); // operations
}
$newOps[] = $newOp;
}
+
return $newOps;
}
*
* @param array $ops File operation array
* @param FileBackendStore $backend
- * @return Array
+ * @return array
*/
protected function substOpPaths( array $ops, FileBackendStore $backend ) {
$newOps = $this->substOpBatchPaths( array( $ops ), $backend );
+
return $newOps[0];
}
*
* @param array|string $paths List of paths or single string path
* @param FileBackendStore $backend
- * @return Array|string
+ * @return array|string
*/
protected function substPaths( $paths, FileBackendStore $backend ) {
return preg_replace(
* Substitute the backend of internal storage paths with the proxy backend's name
*
* @param array|string $paths List of paths or single string path
- * @return Array|string
+ * @return array|string
*/
protected function unsubstPaths( $paths ) {
return preg_replace(
$status->success = $masterStatus->success;
$status->successCount = $masterStatus->successCount;
$status->failCount = $masterStatus->failCount;
+
return $status;
}
*/
protected function replicateContainerDirChanges( $path ) {
list( , $shortCont, ) = self::splitStoragePath( $path );
+
return !in_array( $shortCont, $this->noPushDirConts );
}
$status->merge( $backend->doPrepare( $realParams ) );
}
}
+
return $status;
}
$status->merge( $backend->doSecure( $realParams ) );
}
}
+
return $status;
}
$status->merge( $backend->doPublish( $realParams ) );
}
}
+
return $status;
}
$status->merge( $backend->doClean( $realParams ) );
}
}
+
return $status;
}
public function concatenate( array $params ) {
// We are writing to an FS file, so we don't need to do this per-backend
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->concatenate( $realParams );
}
public function fileExists( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->fileExists( $realParams );
}
public function getFileTimestamp( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileTimestamp( $realParams );
}
public function getFileSize( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileSize( $realParams );
}
public function getFileStat( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileStat( $realParams );
}
foreach ( $contentsM as $path => $data ) {
$contents[$this->unsubstPaths( $path )] = $data;
}
+
return $contents;
}
public function getFileSha1Base36( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileSha1Base36( $realParams );
}
public function getFileProps( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileProps( $realParams );
}
public function streamFile( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->streamFile( $realParams );
}
foreach ( $fsFilesM as $path => $fsFile ) {
$fsFiles[$this->unsubstPaths( $path )] = $fsFile;
}
+
return $fsFiles;
}
foreach ( $tempFilesM as $path => $tempFile ) {
$tempFiles[$this->unsubstPaths( $path )] = $tempFile;
}
+
return $tempFiles;
}
public function getFileHttpUrl( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileHttpUrl( $realParams );
}
public function directoryExists( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->directoryExists( $realParams );
}
public function getDirectoryList( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getDirectoryList( $realParams );
}
public function getFileList( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
return $this->backends[$this->masterIndex]->getFileList( $realParams );
}
LockManager::LOCK_UW => $this->unsubstPaths( $paths[LockManager::LOCK_UW] ),
LockManager::LOCK_EX => $this->unsubstPaths( $paths[LockManager::LOCK_EX] )
);
+
// Actually acquire the locks
return array( $this->getScopedFileLocks( $pbPaths, 'mixed', $status ) );
}
/** @var ProcessCacheLRU Map of paths to large (RAM/disk) cache items */
protected $expensiveCache;
- /** @var Array Map of container names to sharding config */
+ /** @var array Map of container names to sharding config */
protected $shardViaHashLevels = array();
/** @var callback Method to get the MIME type of files */
parent::__construct( $config );
$this->mimeCallback = isset( $config['mimeCallback'] )
? $config['mimeCallback']
- : function( $storagePath, $content, $fsPath ) {
+ : function ( $storagePath, $content, $fsPath ) {
// @TODO: handle the case of extension-less files using the contents
- return StreamFile::contentTypeFromPath( $storagePath ) ?: 'unknown/unknown';
+ return StreamFile::contentTypeFromPath( $storagePath ) ? : 'unknown/unknown';
};
$this->memCache = new EmptyBagOStuff(); // disabled by default
$this->cheapCache = new ProcessCacheLRU( self::CACHE_CHEAP_SIZE );
* medium restrictions and basic performance constraints.
* Do not call this function from places outside FileBackend and FileOp.
*
- * @return integer Bytes
+ * @return int Bytes
*/
final public function maxFileSizeInternal() {
return $this->maxFileSize;
$this->deleteFileCache( $params['dst'] ); // persistent cache
}
}
+
return $status;
}
/**
* @see FileBackendStore::createInternal()
+ * @param array $params
* @return Status
*/
abstract protected function doCreateInternal( array $params );
$this->deleteFileCache( $params['dst'] ); // persistent cache
}
}
+
return $status;
}
/**
* @see FileBackendStore::storeInternal()
+ * @param array $params
* @return Status
*/
abstract protected function doStoreInternal( array $params );
if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
$this->deleteFileCache( $params['dst'] ); // persistent cache
}
+
return $status;
}
/**
* @see FileBackendStore::copyInternal()
+ * @param array $params
* @return Status
*/
abstract protected function doCopyInternal( array $params );
/**
* @see FileBackendStore::deleteInternal()
+ * @param array $params
* @return Status
*/
abstract protected function doDeleteInternal( array $params );
if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
$this->deleteFileCache( $params['dst'] ); // persistent cache
}
+
return $status;
}
/**
* @see FileBackendStore::moveInternal()
+ * @param array $params
* @return Status
*/
protected function doMoveInternal( array $params ) {
$status->merge( $this->deleteInternal( array( 'src' => $params['src'] ) ) );
$status->setResult( true, $status->value ); // ignore delete() errors
}
+
return $status;
}
} else {
$status = Status::newGood(); // nothing to do
}
+
return $status;
}
/**
* @see FileBackendStore::describeInternal()
+ * @param array $params
* @return Status
*/
protected function doDescribeInternal( array $params ) {
/**
* @see FileBackendStore::concatenate()
+ * @param array $params
* @return Status
*/
protected function doConcatenate( array $params ) {
wfRestoreWarnings();
if ( !$ok ) { // not present or not empty
$status->fatal( 'backend-fail-opentemp', $tmpPath );
+
return $status;
}
$fsFile = $this->getLocalReference( array( 'src' => $path ) );
if ( !$fsFile ) { // retry failed?
$status->fatal( 'backend-fail-read', $path );
+
return $status;
}
}
$tmpHandle = fopen( $tmpPath, 'ab' );
if ( $tmpHandle === false ) {
$status->fatal( 'backend-fail-opentemp', $tmpPath );
+
return $status;
}
if ( $sourceHandle === false ) {
fclose( $tmpHandle );
$status->fatal( 'backend-fail-read', $virtualSource );
+
return $status;
}
// Append chunk to file (pass chunk size to avoid magic quotes)
fclose( $sourceHandle );
fclose( $tmpHandle );
$status->fatal( 'backend-fail-writetemp', $tmpPath );
+
return $status;
}
fclose( $sourceHandle );
}
if ( !fclose( $tmpHandle ) ) {
$status->fatal( 'backend-fail-closetemp', $tmpPath );
+
return $status;
}
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
if ( $dir === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
return $status; // invalid storage path
}
/**
* @see FileBackendStore::doPrepare()
+ * @param $container
+ * @param string $dir
+ * @param array $params
* @return Status
*/
protected function doPrepareInternal( $container, $dir, array $params ) {
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
if ( $dir === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
return $status; // invalid storage path
}
/**
* @see FileBackendStore::doSecure()
+ * @param $container
+ * @param string $dir
+ * @param array $params
* @return Status
*/
protected function doSecureInternal( $container, $dir, array $params ) {
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
if ( $dir === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
return $status; // invalid storage path
}
/**
* @see FileBackendStore::doPublish()
+ * @param $container
+ * @param string $dir
+ * @param array $params
* @return Status
*/
protected function doPublishInternal( $container, $dir, array $params ) {
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
if ( $dir === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
return $status; // invalid storage path
}
/**
* @see FileBackendStore::doClean()
+ * @param $container
+ * @param string $dir
+ * @param array $params
* @return Status
*/
protected function doCleanInternal( $container, $dir, array $params ) {
final public function fileExists( array $params ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
$stat = $this->getFileStat( $params );
+
return ( $stat === null ) ? null : (bool)$stat; // null => failure
}
final public function getFileTimestamp( array $params ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
$stat = $this->getFileStat( $params );
+
return $stat ? $stat['mtime'] : false;
}
final public function getFileSize( array $params ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
$stat = $this->getFileStat( $params );
+
return $stat ? $stat['size'] : false;
}
}
}
}
- wfProfileIn( __METHOD__ . '-miss' );
wfProfileIn( __METHOD__ . '-miss-' . $this->name );
$stat = $this->doGetFileStat( $params );
wfProfileOut( __METHOD__ . '-miss-' . $this->name );
- wfProfileOut( __METHOD__ . '-miss' );
if ( is_array( $stat ) ) { // file exists
$stat['latest'] = $latest;
$this->cheapCache->set( $path, 'stat', $stat );
} else { // an error occurred
wfDebug( __METHOD__ . ": Could not stat file $path.\n" );
}
+
return $stat;
}
/**
* @see FileBackendStore::getFileContentsMulti()
- * @return Array
+ * @param array $params
+ * @return array
*/
protected function doGetFileContentsMulti( array $params ) {
$contents = array();
$contents[$path] = $fsFile ? file_get_contents( $fsFile->getPath() ) : false;
wfRestoreWarnings();
}
+
return $contents;
}
return $stat['hash'];
}
}
- wfProfileIn( __METHOD__ . '-miss' );
wfProfileIn( __METHOD__ . '-miss-' . $this->name );
$hash = $this->doGetFileSha1Base36( $params );
wfProfileOut( __METHOD__ . '-miss-' . $this->name );
- wfProfileOut( __METHOD__ . '-miss' );
$this->cheapCache->set( $path, 'sha1', array( 'hash' => $hash, 'latest' => $latest ) );
+
return $hash;
}
/**
* @see FileBackendStore::getFileSha1Base36()
+ * @param array $params
* @return bool|string
*/
protected function doGetFileSha1Base36( array $params ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
$fsFile = $this->getLocalReference( $params );
$props = $fsFile ? $fsFile->getProps() : FSFile::placeholderProps();
+
return $props;
}
/**
* @see FileBackendStore::getLocalReferenceMulti()
- * @return Array
+ * @param array $params
+ * @return array
*/
protected function doGetLocalReferenceMulti( array $params ) {
return $this->doGetLocalCopyMulti( $params );
/**
* @see FileBackendStore::getLocalCopyMulti()
- * @return Array
+ * @param array $params
+ * @return array
*/
abstract protected function doGetLocalCopyMulti( array $params );
/**
* @see FileBackend::getFileHttpUrl()
+ * @param array $params
* @return string|null
*/
public function getFileHttpUrl( array $params ) {
if ( $res == StreamFile::NOT_MODIFIED ) {
// do nothing; client cache is up to date
} elseif ( $res == StreamFile::READY_STREAM ) {
- wfProfileIn( __METHOD__ . '-send' );
wfProfileIn( __METHOD__ . '-send-' . $this->name );
$status = $this->doStreamFile( $params );
wfProfileOut( __METHOD__ . '-send-' . $this->name );
- wfProfileOut( __METHOD__ . '-send' );
if ( !$status->isOK() ) {
// Per bug 41113, nasty things can happen if bad cache entries get
// stuck in cache. It's also possible that this error can come up
/**
* @see FileBackendStore::streamFile()
+ * @param array $params
* @return Status
*/
protected function doStreamFile( array $params ) {
$res = null; // if we don't find anything, it is indeterminate
}
}
+
return $res;
}
}
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
// File listing spans multiple containers/shards
list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
+
return new FileBackendStoreShardDirIterator( $this,
$fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
}
wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
// File listing spans multiple containers/shards
list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
+
return new FileBackendStoreShardFileIterator( $this,
$fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
}
* An exception is thrown if an unsupported operation is requested.
*
* @param array $ops Same format as doOperations()
- * @return Array List of FileOp objects
+ * @return array List of FileOp objects
* @throws MWException
*/
final public function getOperationsInternal( array $ops ) {
* normalized.
*
* @param array $performOps List of FileOp objects
- * @return Array (LockManager::LOCK_UW => path list, LockManager::LOCK_EX => path list)
+ * @return array (LockManager::LOCK_UW => path list, LockManager::LOCK_EX => path list)
*/
final public function getPathsToLockForOpsInternal( array $performOps ) {
// Build up a list of files to lock...
public function getScopedLocksForOps( array $ops, Status $status ) {
$paths = $this->getPathsToLockForOpsInternal( $this->getOperationsInternal( $ops ) );
+
return array( $this->getScopedFileLocks( $paths, 'mixed', $status ) );
}
* The resulting Status object fields will correspond
* to the order in which the handles where given.
*
- * @param array $handles List of FileBackendStoreOpHandle objects
- * @return Array Map of Status objects
+ * @param array $fileOpHandles
* @throws MWException
+ * @internal param array $handles List of FileBackendStoreOpHandle objects
+ * @return array Map of Status objects
*/
final public function executeOpHandlesInternal( array $fileOpHandles ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
foreach ( $fileOpHandles as $fileOpHandle ) {
$fileOpHandle->closeResources();
}
+
return $res;
}
* @see FileBackendStore::executeOpHandlesInternal()
* @param array $fileOpHandles
* @throws MWException
- * @return Array List of corresponding Status objects
+ * @return array List of corresponding Status objects
*/
protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
- foreach ( $fileOpHandles as $fileOpHandle ) { // OK if empty
+ if ( count( $fileOpHandles ) ) {
throw new MWException( "This backend supports no asynchronous operations." );
}
+
return array();
}
* specific errors, especially in the middle of batch file operations.
*
* @param array $op Same format as doOperation()
- * @return Array
+ * @return array
*/
protected function stripInvalidHeadersFromOp( array $op ) {
static $longs = array( 'Content-Disposition' );
}
}
}
+
return $op;
}
* @see FileBackend::clearCache()
*
* @param array $paths Storage paths (optional)
- * @return void
*/
- protected function doClearCache( array $paths = null ) {}
+ protected function doClearCache( array $paths = null ) {
+ }
/**
* Is this a key/value store where directories are just virtual?
* be scanned by looking in all the container shards.
*
* @param string $storagePath
- * @return Array (container, path, container suffix) or (null, null, null) if invalid
+ * @return array (container, path, container suffix) or (null, null, null) if invalid
*/
final protected function resolveStoragePath( $storagePath ) {
list( $backend, $container, $relPath ) = self::splitStoragePath( $storagePath );
}
}
}
+
return array( null, null, null );
}
* @see FileBackendStore::resolveStoragePath()
*
* @param string $storagePath
- * @return Array (container, path) or (null, null) if invalid
+ * @return array (container, path) or (null, null) if invalid
*/
final protected function resolveStoragePathReal( $storagePath ) {
list( $container, $relPath, $cShard ) = $this->resolveStoragePath( $storagePath );
if ( $cShard !== null && substr( $relPath, -1 ) !== '/' ) {
return array( $container, $relPath );
}
+
return array( null, null );
}
if ( preg_match( "!^(?:[^/]{2,}/)*$hashDirRegex(?:/|$)!", $relPath, $m ) ) {
return '.' . implode( '', array_slice( $m, 1 ) );
}
+
return null; // failed to match
}
+
return ''; // no sharding
}
*/
final public function isSingleShardPathInternal( $storagePath ) {
list( , , $shard ) = $this->resolveStoragePath( $storagePath );
+
return ( $shard !== null );
}
* the container are required to be hashed accordingly.
*
* @param string $container
- * @return Array (integer levels, integer base, repeat flag) or (0, 0, false)
+ * @return array (integer levels, integer base, repeat flag) or (0, 0, false)
*/
final protected function getContainerHashLevels( $container ) {
if ( isset( $this->shardViaHashLevels[$container] ) ) {
}
}
}
+
return array( 0, 0, false ); // no sharding
}
* Get a list of full container shard suffixes for a container
*
* @param string $container
- * @return Array
+ * @return array
*/
final protected function getContainerSuffixes( $container ) {
$shards = array();
$shards[] = '.' . wfBaseConvert( $index, 10, $base, $digits );
}
}
+
return $shards;
}
*
* @param string $container Resolved container name
* @param array $val Information to cache
- * @return void
*/
final protected function setContainerCache( $container, array $val ) {
$this->memCache->add( $this->containerCacheKey( $container ), $val, 14 * 86400 );
* The cache key is salted for a while to prevent race conditions.
*
* @param string $container Resolved container name
- * @return void
*/
final protected function deleteContainerCache( $container ) {
if ( !$this->memCache->set( $this->containerCacheKey( $container ), 'PURGED', 300 ) ) {
* used in a list of container names, storage paths, or FileOp objects.
* This loads the persistent cache values into the process cache.
*
- * @param Array $items
- * @return void
+ * @param array $items
*/
final protected function primeContainerCache( array $items ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
* Only containers that actually exist should appear in the map.
*
* @param array $containerInfo Map of resolved container names to cached info
- * @return void
*/
- protected function doPrimeContainerCache( array $containerInfo ) {}
+ protected function doPrimeContainerCache( array $containerInfo ) {
+ }
/**
* Get the cache key for a file path
*
* @param string $path Storage path
* @param array $val Stat information to cache
- * @return void
*/
final protected function setFileCache( $path, array $val ) {
$path = FileBackend::normalizeStoragePath( $path );
* a file is created at a path were there was none before.
*
* @param string $path Storage path
- * @return void
*/
final protected function deleteFileCache( $path ) {
$path = FileBackend::normalizeStoragePath( $path );
* This loads the persistent cache values into the process cache.
*
* @param array $items List of storage paths or FileOps
- * @return void
*/
final protected function primeFileCache( array $items ) {
$section = new ProfileSection( __METHOD__ . "-{$this->name}" );
* Set the 'concurrency' option from a list of operation options
*
* @param array $opts Map of operation options
- * @return Array
+ * @return array
*/
final protected function setConcurrencyFlags( array $opts ) {
$opts['concurrency'] = 1; // off
$opts['concurrency'] = $this->concurrency;
}
}
+
return $opts;
}
* passed to FileBackendStore::executeOpHandlesInternal().
*/
abstract class FileBackendStoreOpHandle {
- /** @var Array */
+ /** @var array */
public $params = array(); // params to caller functions
/** @var FileBackendStore */
public $backend;
- /** @var Array */
+ /** @var array */
public $resourcesToClose = array();
public $call; // string; name that identifies the function called
/**
* Close all open file handles
- *
- * @return void
*/
public function closeResources() {
array_map( 'fclose', $this->resourcesToClose );
abstract class FileBackendStoreShardListIterator extends FilterIterator {
/** @var FileBackendStore */
protected $backend;
- /** @var Array */
+
+ /** @var array */
protected $params;
- protected $container; // string; full container name
- protected $directory; // string; resolved relative path
+ /** @var string Full container name */
+ protected $container;
+
+ /** @var string Resolved relative path */
+ protected $directory;
- /** @var Array */
+ /** @var array */
protected $multiShardPaths = array(); // (rel path => 1)
/**
return false;
} else {
$this->multiShardPaths[$rel] = 1;
+
return true;
}
}
* @since 1.19
*/
abstract class FileOp {
- /** @var Array */
+ /** @var array */
protected $params = array();
+
/** @var FileBackendStore */
protected $backend;
- protected $state = self::STATE_NEW; // integer
- protected $failed = false; // boolean
- protected $async = false; // boolean
- protected $batchId; // string
+ /** @var int */
+ protected $state = self::STATE_NEW;
+
+ /** @var bool */
+ protected $failed = false;
+
+ /** @var bool */
+ protected $async = false;
+
+ /** @var string */
+ protected $batchId;
+
+ /** @var bool Operation is not a no-op */
+ protected $doOperation = true;
+
+ /** @var string */
+ protected $sourceSha1;
+
+ /** @var bool */
+ protected $overwriteSameCase;
- protected $doOperation = true; // boolean; operation is not a no-op
- protected $sourceSha1; // string
- protected $overwriteSameCase; // boolean
- protected $destExists; // boolean
+ /** @var bool */
+ protected $destExists;
/* Object life-cycle */
const STATE_NEW = 1;
* Build a new batch file operation transaction
*
* @param FileBackendStore $backend
- * @param Array $params
+ * @param array $params
* @throws MWException
*/
final public function __construct( FileBackendStore $backend, array $params ) {
}
}
-
/**
* Normalize a string if it is a valid storage path
*
protected static function normalizeIfValidStoragePath( $path ) {
if ( FileBackend::isStoragePath( $path ) ) {
$res = FileBackend::normalizeStoragePath( $path );
+
return ( $res !== null ) ? $res : $path;
}
+
return $path;
}
* Set the batch UUID this operation belongs to
*
* @param string $batchId
- * @return void
*/
final public function setBatchId( $batchId ) {
$this->batchId = $batchId;
/**
* Get a new empty predicates array for precheck()
*
- * @return Array
+ * @return array
*/
final public static function newPredicates() {
return array( 'exists' => array(), 'sha1' => array() );
/**
* Get a new empty dependency tracking array for paths read/written to
*
- * @return Array
+ * @return array
*/
final public static function newDependencies() {
return array( 'read' => array(), 'write' => array() );
* Update a dependency tracking array to account for this operation
*
* @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
- * @return Array
+ * @return array
*/
final public function applyDependencies( array $deps ) {
$deps['read'] += array_fill_keys( $this->storagePathsRead(), 1 );
$deps['write'] += array_fill_keys( $this->storagePathsChanged(), 1 );
+
return $deps;
}
/**
* Check if this operation changes files listed in $paths
*
- * @param array $paths Prior path reads/writes; format of FileOp::newPredicates()
+ * @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
* @return boolean
*/
final public function dependsOn( array $deps ) {
return true; // "flow" dependency
}
}
+
return false;
}
*
* @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
+ * @return array
*/
final public function getJournalEntries( array $oPredicates, array $nPredicates ) {
if ( !$this->doOperation ) {
);
}
}
+
return array_merge( $nullEntries, $updateEntries, $deleteEntries );
}
* This must update $predicates for each path that the op can change
* except when a failing status object is returned.
*
- * @param Array $predicates
+ * @param array $predicates
* @return Status
*/
final public function precheck( array &$predicates ) {
if ( !$status->isOK() ) {
$this->failed = true;
}
+
return $status;
}
/**
+ * @param array $predicates
* @return Status
*/
protected function doPrecheck( array &$predicates ) {
} else { // no-op
$status = Status::newGood();
}
+
return $status;
}
$this->async = true;
$result = $this->attempt();
$this->async = false;
+
return $result;
}
/**
* Get the file operation parameters
*
- * @return Array (required params list, optional params list, list of params that are paths)
+ * @return array (required params list, optional params list, list of params that are paths)
*/
protected function allowedParams() {
return array( array(), array(), array() );
/**
* Adjust params to FileBackendStore internal file calls
*
- * @param Array $params
- * @return Array (required params list, optional params list)
+ * @param array $params
+ * @return array (required params list, optional params list)
*/
protected function setFlags( array $params ) {
return array( 'async' => $this->async ) + $params;
/**
* Get a list of storage paths read from for this operation
*
- * @return Array
+ * @return array
*/
public function storagePathsRead() {
return array();
/**
* Get a list of storage paths written to for this operation
*
- * @return Array
+ * @return array
*/
public function storagePathsChanged() {
return array();
* Also set the destExists, overwriteSameCase and sourceSha1 member variables.
* A bad status will be returned if there is no chance it can be overwritten.
*
- * @param Array $predicates
+ * @param array $predicates
* @return Status
*/
protected function precheckDestExistence( array $predicates ) {
} else {
$this->overwriteSameCase = true; // OK
}
+
return $status; // do nothing; either OK or bad status
} else {
$status->fatal( 'backend-fail-alreadyexists', $this->params['dst'] );
+
return $status;
}
}
+
return $status;
}
* Check if a file will exist in storage when this operation is attempted
*
* @param string $source Storage path
- * @param Array $predicates
+ * @param array $predicates
* @return bool
*/
final protected function fileExists( $source, array $predicates ) {
return $predicates['exists'][$source]; // previous op assures this
} else {
$params = array( 'src' => $source, 'latest' => true );
+
return $this->backend->fileExists( $params );
}
}
* Get the SHA-1 of a file in storage when this operation is attempted
*
* @param string $source Storage path
- * @param Array $predicates
+ * @param array $predicates
* @return string|bool False on failure
*/
final protected function fileSha1( $source, array $predicates ) {
return false; // previous op assures this
} else {
$params = array( 'src' => $source, 'latest' => true );
+
return $this->backend->getFileSha1Base36( $params );
}
}
* Log a file operation failure and preserve any temp files
*
* @param string $action
- * @return void
*/
final public function logFailure( $action ) {
$params = $this->params;
$status->fatal( 'backend-fail-maxsize',
$this->params['dst'], $this->backend->maxFileSizeInternal() );
$status->fatal( 'backend-fail-create', $this->params['dst'] );
+
return $status;
// Check if a file can be placed/changed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
$status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-create', $this->params['dst'] );
+
return $status;
}
// Check if destination file exists
$predicates['exists'][$this->params['dst']] = true;
$predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
}
+
return $status; // safe to call attempt()
}
// Create the file at the destination
return $this->backend->createInternal( $this->setFlags( $this->params ) );
}
+
return Status::newGood();
}
// Check if the source file exists on the file system
if ( !is_file( $this->params['src'] ) ) {
$status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
return $status;
// Check if the source file is too big
} elseif ( filesize( $this->params['src'] ) > $this->backend->maxFileSizeInternal() ) {
$status->fatal( 'backend-fail-maxsize',
$this->params['dst'], $this->backend->maxFileSizeInternal() );
$status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+
return $status;
// Check if a file can be placed/changed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
$status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+
return $status;
}
// Check if destination file exists
$predicates['exists'][$this->params['dst']] = true;
$predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
}
+
return $status; // safe to call attempt()
}
// Store the file at the destination
return $this->backend->storeInternal( $this->setFlags( $this->params ) );
}
+
return Status::newGood();
}
if ( $hash !== false ) {
$hash = wfBaseConvert( $hash, 16, 36, 31 );
}
+
return $hash;
}
// Update file existence predicates (cache 404s)
$predicates['exists'][$this->params['src']] = false;
$predicates['sha1'][$this->params['src']] = false;
+
return $status; // nothing to do
} else {
$status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
return $status;
}
- // Check if a file can be placed/changed at the destination
+ // Check if a file can be placed/changed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
$status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-copy', $this->params['src'], $this->params['dst'] );
+
return $status;
}
// Check if destination file exists
$predicates['exists'][$this->params['dst']] = true;
$predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
}
+
return $status; // safe to call attempt()
}
$status = Status::newGood(); // nothing to do
} elseif ( $this->params['src'] === $this->params['dst'] ) {
// Just update the destination file headers
- $headers = $this->getParam( 'headers' ) ?: array();
+ $headers = $this->getParam( 'headers' ) ? : array();
$status = $this->backend->describeInternal( $this->setFlags( array(
'src' => $this->params['dst'], 'headers' => $headers
) ) );
// Copy the file to the destination
$status = $this->backend->copyInternal( $this->setFlags( $this->params ) );
}
+
return $status;
}
// Update file existence predicates (cache 404s)
$predicates['exists'][$this->params['src']] = false;
$predicates['sha1'][$this->params['src']] = false;
+
return $status; // nothing to do
} else {
$status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
return $status;
}
// Check if a file can be placed/changed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
$status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-move', $this->params['src'], $this->params['dst'] );
+
return $status;
}
// Check if destination file exists
$predicates['exists'][$this->params['dst']] = true;
$predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
}
+
return $status; // safe to call attempt()
}
// Move the file to the destination
$status = $this->backend->moveInternal( $this->setFlags( $this->params ) );
}
+
return $status;
}
// Update file existence predicates (cache 404s)
$predicates['exists'][$this->params['src']] = false;
$predicates['sha1'][$this->params['src']] = false;
+
return $status; // nothing to do
} else {
$status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
return $status;
}
// Check if a file can be placed/changed at the source
} elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
$status->fatal( 'backend-fail-usable', $this->params['src'] );
$status->fatal( 'backend-fail-delete', $this->params['src'] );
+
return $status;
}
// Update file existence predicates
$predicates['exists'][$this->params['src']] = false;
$predicates['sha1'][$this->params['src']] = false;
+
return $status; // safe to call attempt()
}
// Check if the source file exists
if ( !$this->fileExists( $this->params['src'], $predicates ) ) {
$status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
return $status;
// Check if a file can be placed/changed at the source
} elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
$status->fatal( 'backend-fail-usable', $this->params['src'] );
$status->fatal( 'backend-fail-describe', $this->params['src'] );
+
return $status;
}
// Update file existence predicates
$this->fileExists( $this->params['src'], $predicates );
$predicates['sha1'][$this->params['src']] =
$this->fileSha1( $this->params['src'], $predicates );
+
return $status; // safe to call attempt()
}
/**
* Placeholder operation that has no params and does nothing
*/
-class NullFileOp extends FileOp {}
+class NullFileOp extends FileOp {
+}
if ( $n > self::MAX_BATCH_SIZE ) {
$status->fatal( 'backend-fail-batchsize', $n, self::MAX_BATCH_SIZE );
wfProfileOut( __METHOD__ );
+
return $status;
}
++$status->failCount;
if ( !$ignoreErrors ) {
wfProfileOut( __METHOD__ );
+
return $status; // abort
}
}
$subStatus = $journal->logChangeBatch( $entries, $batchId );
if ( !$subStatus->isOK() ) {
wfProfileOut( __METHOD__ );
+
return $subStatus; // abort
}
}
self::runParallelBatches( $pPerformOps, $status );
wfProfileOut( __METHOD__ );
+
return $status;
}
* within any given sub-batch do not depend on each other.
* This will abort remaining ops on failure.
*
- * @param Array $pPerformOps
+ * @param array $pPerformOps
* @param Status $status
* @return bool Success
*/
}
}
}
+
return $status;
}
}
* @since 1.19
*/
class SwiftFileBackend extends FileBackendStore {
- /** @var CF_Authentication */
- protected $auth; // Swift authentication handler
- protected $authTTL; // integer seconds
- protected $swiftTempUrlKey; // string; shared secret value for making temp urls
- protected $swiftAnonUser; // string; username to handle unauthenticated requests
- protected $swiftUseCDN; // boolean; whether CloudFiles CDN is enabled
- protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
- protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
+ /** @var CF_Authentication Swift authentication handler */
+ protected $auth;
+
+ /** @var int TTL in seconds */
+ protected $authTTL;
+
+ /** @var string Shared secret value for making temp URLs */
+ protected $swiftTempUrlKey;
+
+ /** @var string Username to handle unauthenticated requests */
+ protected $swiftAnonUser;
+
+ /** @var bool Whether CloudFiles CDN is enabled */
+ protected $swiftUseCDN;
+
+ /** @var int How long to cache things in the CDN */
+ protected $swiftCDNExpiry;
+
+ /** @var bool Whether object CDN purging is enabled */
+ protected $swiftCDNPurgable;
// Rados Gateway specific options
- protected $rgwS3AccessKey; // string; S3 access key
- protected $rgwS3SecretKey; // string; S3 authentication key
+ /** @var string S3 access key */
+ protected $rgwS3AccessKey;
- /** @var CF_Connection */
- protected $conn; // Swift connection handle
- protected $sessionStarted = 0; // integer UNIX timestamp
+ /** @var string S3 authentication key */
+ protected $rgwS3SecretKey;
+
+ /** @var CF_Connection Swift connection handle*/
+ protected $conn;
+
+ /** @var int UNIX timestamp */
+ protected $sessionStarted = 0;
/** @var CloudFilesException */
protected $connException;
- protected $connErrorTime = 0; // UNIX timestamp
+
+ /** @var int UNIX timestamp */
+ protected $connErrorTime = 0;
/** @var BagOStuff */
protected $srvCache;
} else {
try { // look for APC, XCache, WinCache, ect...
$this->srvCache = ObjectCache::newAccelerator( array() );
- } catch ( Exception $e ) {}
+ } catch ( Exception $e ) {
+ }
}
}
$this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
/**
* @see FileBackendStore::resolveContainerPath()
- * @return null
+ * @param string $container
+ * @param string $relStoragePath
+ * @return string|null Returns null when the URL encoded storage path is
+ * longer than 1024 characters or not UTF-8 encoded.
*/
protected function resolveContainerPath( $container, $relStoragePath ) {
if ( !mb_check_encoding( $relStoragePath, 'UTF-8' ) ) { // mb_string required by CF
} elseif ( strlen( urlencode( $relStoragePath ) ) > 1024 ) {
return null; // too long for Swift
}
+
return $relStoragePath;
}
try {
$this->getContainer( $container );
+
return true; // container exists
} catch ( NoSuchContainerException $e ) {
} catch ( CloudFilesException $e ) { // some other exception?
if ( isset( $headers['Content-Disposition'] ) ) {
$headers['Content-Disposition'] = $this->truncDisp( $headers['Content-Disposition'] );
}
+
return $headers;
}
break; // too long; sigh
}
}
+
return $res;
}
list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
if ( $dstRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
$dContObj = $this->getContainer( $dstCont );
} catch ( NoSuchContainerException $e ) {
$status->fatal( 'backend-fail-create', $params['dst'] );
+
return $status;
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
/**
* @see SwiftFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseCreate( CF_Async_Op $cfOp, Status $status, array $params ) {
+ protected function getResponseCreate( CF_Async_Op $cfOp, Status $status, array $params ) {
try {
$cfOp->getLastResponse();
} catch ( BadContentTypeException $e ) {
list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
if ( $dstRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
$dContObj = $this->getContainer( $dstCont );
} catch ( NoSuchContainerException $e ) {
$status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
return $status;
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
wfRestoreWarnings();
if ( $sha1Hash === false ) { // source doesn't exist?
$status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
return $status;
}
$sha1Hash = wfBaseConvert( $sha1Hash, 16, 36, 31 );
/**
* @see SwiftFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseStore( CF_Async_Op $cfOp, Status $status, array $params ) {
+ protected function getResponseStore( CF_Async_Op $cfOp, Status $status, array $params ) {
try {
$cfOp->getLastResponse();
} catch ( BadContentTypeException $e ) {
list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
if ( $srcRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
if ( $dstRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
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 );
+
return $status;
}
/**
* @see SwiftFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseCopy( CF_Async_Op $cfOp, Status $status, array $params ) {
+ protected function getResponseCopy( CF_Async_Op $cfOp, Status $status, array $params ) {
try {
$cfOp->getLastResponse();
} catch ( NoSuchObjectException $e ) { // source object does not exist
list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
if ( $srcRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
if ( $dstRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
return $status;
}
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 );
+
return $status;
}
/**
* @see SwiftFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseMove( CF_Async_Op $cfOp, Status $status, array $params ) {
+ protected function getResponseMove( CF_Async_Op $cfOp, Status $status, array $params ) {
try {
$cfOp->getLastResponse();
} catch ( NoSuchObjectException $e ) { // source object does not exist
list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
if ( $srcRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
/**
* @see SwiftFileBackend::doExecuteOpHandlesInternal()
*/
- protected function _getResponseDelete( CF_Async_Op $cfOp, Status $status, array $params ) {
+ protected function getResponseDelete( CF_Async_Op $cfOp, Status $status, array $params ) {
try {
$cfOp->getLastResponse();
} catch ( NoSuchContainerException $e ) {
list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
if ( $srcRel === null ) {
$status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
return $status;
}
// (a) Check if container already exists
try {
$this->getContainer( $fullCont );
+
// NoSuchContainerException not thrown: container must exist
return $status; // already exists
} catch ( NoSuchContainerException $e ) {
// NoSuchContainerException thrown: container does not exist
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
// CDN not enabled; nothing to see here
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
/**
* @see FileBackendStore::doSecureInternal()
+ * @param string $fullCont
+ * @param string $dir
+ * @param array $params
* @return Status
*/
protected function doSecureInternal( $fullCont, $dir, array $params ) {
/**
* @see FileBackendStore::doPublishInternal()
+ * @param string $fullCont
+ * @param string $dir
+ * @param array $params
* @return Status
*/
protected function doPublishInternal( $fullCont, $dir, array $params ) {
return $status; // ok, nothing to do
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
return $status; // race? consistency delay?
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
}
*/
protected function convertSwiftDate( $ts, $format = TS_MW ) {
$timestamp = new MWTimestamp( $ts );
+
return $timestamp->getTimestamp( $format );
}
$obj->setMetadataValues( array( 'Sha1base36' => $hash ) );
$obj->sync_metadata(); // save to Swift
wfProfileOut( __METHOD__ );
+
return true; // success
}
}
trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING );
$obj->setMetadataValues( array( 'Sha1base36' => false ) );
wfProfileOut( __METHOD__ );
+
return false; // failed
}
/**
* @see FileBackendStore::doDirectoryExists()
+ * @param string $fullCont
+ * @param string $dir
+ * @param array $params
* @return bool|null
*/
protected function doDirectoryExists( $fullCont, $dir, array $params ) {
try {
$container = $this->getContainer( $fullCont );
$prefix = ( $dir == '' ) ? null : "{$dir}/";
+
return ( count( $container->list_objects( 1, null, $prefix ) ) > 0 );
} catch ( NoSuchContainerException $e ) {
return false;
/**
* @see FileBackendStore::getDirectoryListInternal()
+ * @param string $fullCont
+ * @param string $dir
+ * @param array $params
* @return SwiftFileBackendDirList
*/
public function getDirectoryListInternal( $fullCont, $dir, array $params ) {
/**
* @see FileBackendStore::getFileListInternal()
+ * @param string $fullCont
+ * @param string $dir
+ * @param array $params
* @return SwiftFileBackendFileList
*/
public function getFileListInternal( $fullCont, $dir, array $params ) {
* @param string $fullCont Resolved container name
* @param string $dir Resolved storage directory with no trailing slash
* @param string|null $after Resolved container relative path to list items after
- * @param integer $limit Max number of items to list
+ * @param int $limit Max number of items to list
* @param array $params Parameters for getDirectoryList()
- * @return Array List of container relative resolved paths of directories directly under $dir
+ * @return array List of container relative resolved paths of directories directly under $dir
* @throws FileBackendError
*/
public function getDirListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
* @param string $fullCont Resolved container name
* @param string $dir Resolved storage directory with no trailing slash
* @param string|null $after Resolved container relative path of file to list items after
- * @param integer $limit Max number of items to list
+ * @param int $limit Max number of items to list
* @param array $params Parameters for getDirectoryList()
- * @return Array List of resolved container relative paths of files under $dir
+ * @return array List of resolved container relative paths of files under $dir
* @throws FileBackendError
*/
public function getFileListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
try {
$container = $this->getContainer( $fullCont );
$prefix = ( $dir == '' ) ? null : "{$dir}/";
- $objects = array(); // list of unfiltered names or CF_Object items
+
+ // $objects will contain a list of unfiltered names or CF_Object items
// Non-recursive: only list files right under $dir
if ( !empty( $params['topOnly'] ) ) {
if ( !empty( $params['adviseStat'] ) ) {
if ( is_object( $object ) ) {
$stat = array(
// Convert various random Swift dates to TS_MW
- 'mtime' => $this->convertSwiftDate( $object->last_modified, TS_MW ),
- 'size' => (int)$object->content_length,
+ 'mtime' => $this->convertSwiftDate( $object->last_modified, TS_MW ),
+ 'size' => (int)$object->content_length,
'latest' => false // eventually consistent
);
$names[] = array( $object->name, $stat );
$names[] = array( $object, null );
}
}
+
return $names;
}
*
* @param string $path Storage path
* @param array $val Stat value
- * @return void
*/
public function loadListingStatInternal( $path, array $val ) {
$this->cheapCache->set( $path, 'stat', $val );
$this->clearCache( array( $params['src'] ) );
$stat = $this->getFileStat( $params );
}
+
return $stat['sha1'];
} else {
return false;
$cont = $this->getContainer( $srcCont );
} catch ( NoSuchContainerException $e ) {
$status->fatal( 'backend-fail-stream', $params['src'] );
+
return $status;
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
+
return $status;
}
public function getFileHttpUrl( array $params ) {
if ( $this->swiftTempUrlKey != '' ||
- ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' ) )
- {
+ ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' )
+ ) {
list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
if ( $srcRel === null ) {
return null; // invalid path
$this->rgwS3SecretKey,
true // raw
) );
+
// See http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html.
// Note: adding a newline for empty CanonicalizedAmzHeaders does not work.
return wfAppendQuery(
$this->handleException( $e, null, __METHOD__, $params );
}
}
+
return null;
}
* $params is currently only checked for a 'latest' flag.
*
* @param array $params
- * @return Array
+ * @return array
*/
protected function headersFromParams( array $params ) {
$hdrs = array();
if ( !empty( $params['latest'] ) ) {
$hdrs[] = 'X-Newest: true';
}
+
return $hdrs;
}
$cfOps = $batch->execute();
foreach ( $cfOps as $index => $cfOp ) {
$status = Status::newGood();
- $function = '_getResponse' . $fileOpHandles[$index]->call;
+ $function = 'getResponse' . $fileOpHandles[$index]->call;
try { // catch exceptions; update status
$this->$function( $cfOp, $status, $fileOpHandles[$index]->params );
$this->purgeCDNCache( $fileOpHandles[$index]->affectedObjects );
/**
* Set read/write permissions for a Swift container.
*
- * $readGrps is a list of the possible criteria for a request to have
+ * @see http://swift.openstack.org/misc.html#acls
+ *
+ * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
+ * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
+ *
+ * @param CF_Container $contObj Swift container
+ * @param array $readGrps List of the possible criteria for a request to have
* access to read a container. Each item is one of the following formats:
* - account:user : Grants access if the request is by the given user
* - ".r:<regex>" : Grants access if the request is from a referrer host that
* Setting this to '*' effectively makes a container public.
* -".rlistings:<regex>" : Grants access if the request is from a referrer host that
* matches the expression and the request is for a listing.
- *
- * $writeGrps is a list of the possible criteria for a request to have
+ * @param array $writeGrps A list of the possible criteria for a request to have
* access to write to a container. Each item is of the following format:
* - account:user : Grants access if the request is by the given user
- *
- * @see http://swift.openstack.org/misc.html#acls
- *
- * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
- * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
- *
- * @param CF_Container $contObj Swift container
- * @param array $readGrps List of read access routes
- * @param array $writeGrps List of write access routes
* @return Status
*/
protected function setContainerAccess(
* This is for Rackspace/Akamai CDNs.
*
* @param array $objects List of CF_Object items
- * @return void
*/
public function purgeCDNCache( array $objects ) {
if ( $this->swiftUseCDN && $this->swiftCDNPurgable ) {
}
$this->conn = new CF_Connection( $this->auth );
}
+
return $this->conn;
}
/**
* Close the connection to the Swift proxy
- *
- * @return void
*/
protected function closeConnection() {
if ( $this->conn ) {
);
}
}
+
return $this->connContainerCache->get( $container, 'obj' );
}
* Delete a Swift container
*
* @param string $container Container name
- * @return void
* @throws CloudFilesException
*/
protected function deleteContainer( $container ) {
* This also sets the Status object to have a fatal error.
*
* @param Exception $e
- * @param Status $status|null
+ * @param Status $status null
* @param string $func
* @param array $params
- * @return void
*/
protected function handleException( Exception $e, $status, $func, array $params ) {
if ( $status instanceof Status ) {
class SwiftFileOpHandle extends FileBackendStoreOpHandle {
/** @var CF_Async_Op */
public $cfOp;
- /** @var Array */
+
+ /** @var array */
public $affectedObjects = array();
/**
* @ingroup FileBackend
*/
abstract class SwiftFileBackendList implements Iterator {
- /** @var Array List of path or (path,stat array) entries */
+ /** @var array List of path or (path,stat array) entries */
protected $bufferIter = array();
- protected $bufferAfter = null; // string; list items *after* this path
- protected $pos = 0; // integer
- /** @var Array */
+
+ /** @var string List items *after* this path */
+ protected $bufferAfter = null;
+
+ /** @var int */
+ protected $pos = 0;
+
+ /** @var array */
protected $params = array();
/** @var SwiftFileBackend */
protected $backend;
- protected $container; // string; container name
- protected $dir; // string; storage directory
- protected $suffixStart; // integer
+
+ /** @var string Container name */
+ protected $container;
+
+ /** @var string Storage directory */
+ protected $dir;
+
+ /** @var int */
+ protected $suffixStart;
const PAGE_SIZE = 9000; // file listing buffer size
/**
* @see Iterator::key()
- * @return integer
+ * @return int
*/
public function key() {
return $this->pos;
/**
* @see Iterator::next()
- * @return void
*/
public function next() {
// Advance to the next file in the page
/**
* @see Iterator::rewind()
- * @return void
*/
public function rewind() {
$this->pos = 0;
*
* @param string $container Resolved container name
* @param string $dir Resolved path relative to container
- * @param string $after|null
- * @param integer $limit
+ * @param string $after null
+ * @param int $limit
* @param array $params
- * @return Traversable|Array
+ * @return Traversable|array
*/
abstract protected function pageFromList( $container, $dir, &$after, $limit, array $params );
}
/**
* @see SwiftFileBackendList::pageFromList()
- * @return Array
+ * @param string $container
+ * @param string $dir
+ * @param string $after
+ * @param int $limit
+ * @param array $params
+ * @return array
*/
protected function pageFromList( $container, $dir, &$after, $limit, array $params ) {
return $this->backend->getDirListPageInternal( $container, $dir, $after, $limit, $params );
$storageDir = rtrim( $this->params['dir'], '/' );
$this->backend->loadListingStatInternal( "$storageDir/$relPath", $stat );
}
+
return $relPath;
}
/**
* @see SwiftFileBackendList::pageFromList()
- * @return Array
+ * @param string $container
+ * @param string $dir
+ * @param string $after
+ * @param int $limit
+ * @param array $params
+ * @return array
*/
protected function pageFromList( $container, $dir, &$after, $limit, array $params ) {
return $this->backend->getFileListPageInternal( $container, $dir, $after, $limit, $params );
* @ingroup FileBackend
*/
class TempFSFile extends FSFile {
- protected $canDelete = false; // bool; garbage collect the temp file
+ /** @var bool Garbage collect the temp file */
+ protected $canDelete = false;
- /** @var Array of active temp files to purge on shutdown */
+ /** @var array Active temp files to purge on shutdown */
protected static $instances = array();
/**
}
if ( $attempt >= 5 ) {
wfProfileOut( __METHOD__ );
+
return null; // give up
}
}
$tmpFile = new self( $path );
$tmpFile->canDelete = true; // safely instantiated
wfProfileOut( __METHOD__ );
+
return $tmpFile;
}
wfSuppressWarnings();
$ok = unlink( $this->path );
wfRestoreWarnings();
+
return $ok;
}
/**
* Clean up the temporary file only after an object goes out of scope
*
- * @param Object $object
+ * @param stdClass $object
* @return TempFSFile This object
*/
public function bind( $object ) {
}
$object->tempFSFileReferences[] = $this;
}
+
return $this;
}
*/
public function preserve() {
$this->canDelete = false;
+
return $this;
}
*/
public function autocollect() {
$this->canDelete = true;
+
return $this;
}
/**
* Construct a new instance from configuration.
- * $config includes:
- * 'wiki' : wiki name to use for LoadBalancer
*
- * @param $config Array
+ * @param array $config Includes:
+ * 'wiki' : wiki name to use for LoadBalancer
*/
protected function __construct( array $config ) {
parent::__construct( $config );
/**
* @see FileJournal::logChangeBatch()
+ * @param array $entries
+ * @param string $batchId
* @return Status
*/
protected function doLogChangeBatch( array $entries, $batchId ) {
$dbw = $this->getMasterDB();
} catch ( DBError $e ) {
$status->fatal( 'filejournal-fail-dbconnect', $this->backend );
+
return $status;
}
}
} catch ( DBError $e ) {
$status->fatal( 'filejournal-fail-dbquery', $this->backend );
+
return $status;
}
/**
* @see FileJournal::doGetCurrentPosition()
- * @return integer|false
+ * @return bool|mixed The value from the field, or false on failure.
*/
protected function doGetCurrentPosition() {
$dbw = $this->getMasterDB();
/**
* @see FileJournal::doGetPositionAtTime()
- * @param $time integer|string timestamp
- * @return integer|false
+ * @param int|string $time Timestamp
+ * @return bool|mixed The value from the field, or false on failure.
*/
protected function doGetPositionAtTime( $time ) {
$dbw = $this->getMasterDB();
$encTimestamp = $dbw->addQuotes( $dbw->timestamp( $time ) );
+
return $dbw->selectField( 'filejournal', 'fj_id',
array( 'fj_backend' => $this->backend, "fj_timestamp <= $encTimestamp" ),
__METHOD__,
/**
* @see FileJournal::doGetChangeEntries()
- * @return Array
- * @throws DBError
+ * @param int $start
+ * @param int $limit
+ * @return array
*/
protected function doGetChangeEntries( $start, $limit ) {
$dbw = $this->getMasterDB();
$this->dbw = $lb->getConnection( DB_MASTER, array(), $this->wiki );
$this->dbw->clearFlag( DBO_TRX );
}
+
return $this->dbw;
}
}
* @since 1.20
*/
abstract class FileJournal {
- protected $backend; // string
- protected $ttlDays; // integer
+ /** @var string */
+ protected $backend;
+
+ /** @var int */
+ protected $ttlDays;
/**
* Construct a new instance from configuration.
- * $config includes:
- * 'ttlDays' : days to keep log entries around (false means "forever")
*
- * @param $config Array
+ * @param array $config Includes:
+ * 'ttlDays' : days to keep log entries around (false means "forever")
*/
protected function __construct( array $config ) {
$this->ttlDays = isset( $config['ttlDays'] ) ? $config['ttlDays'] : false;
/**
* Create an appropriate FileJournal object from config
*
- * @param $config Array
+ * @param array $config
* @param string $backend A registered file backend name
* @throws MWException
* @return FileJournal
throw new MWException( "Class given is not an instance of FileJournal." );
}
$jrn->backend = $backend;
+
return $jrn;
}
$s .= mt_rand( 0, 2147483647 );
}
$s = wfBaseConvert( sha1( $s ), 16, 36, 31 );
+
return substr( wfBaseConvert( wfTimestamp( TS_MW ), 10, 36, 9 ) . $s, 0, 31 );
}
/**
* Log changes made by a batch file operation.
- * $entries is an array of log entries, each of which contains:
+ *
+ * @param array $entries List of file operations (each an array of parameters) which contain:
* op : Basic operation name (create, update, delete)
* path : The storage path of the file
* 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 array $entries List of file operations (each an array of parameters)
+ * Note that 'false' should be used as the SHA-1 for non-existing files.
* @param string $batchId UUID string that identifies the operation batch
* @return Status
*/
if ( !count( $entries ) ) {
return Status::newGood();
}
+
return $this->doLogChangeBatch( $entries, $batchId );
}
/**
* Get the position ID of the latest journal entry
*
- * @return integer|false
+ * @return int|bool
*/
final public function getCurrentPosition() {
return $this->doGetCurrentPosition();
/**
* @see FileJournal::getCurrentPosition()
- * @return integer|false
+ * @return int|bool
*/
abstract protected function doGetCurrentPosition();
/**
* Get the position ID of the latest journal entry at some point in time
*
- * @param $time integer|string timestamp
- * @return integer|false
+ * @param int|string $time timestamp
+ * @return int|bool
*/
final public function getPositionAtTime( $time ) {
return $this->doGetPositionAtTime( $time );
/**
* @see FileJournal::getPositionAtTime()
- * @param $time integer|string timestamp
- * @return integer|false
+ * @param int|string $time Timestamp
+ * @return int|bool
*/
abstract protected function doGetPositionAtTime( $time );
* Get an array of file change log entries.
* A starting change ID and/or limit can be specified.
*
- * The result as a list of associative arrays, each having:
+ * @param $start integer Starting change ID or null
+ * @param $limit integer Maximum number of items to return
+ * @param &$next string Updated to the ID of the next entry.
+ * @return array List of associative arrays, each having:
* id : unique, monotonic, ID for this change
* batch_uuid : UUID for an operation batch
* backend : the backend name
* path : affected storage path
* new_sha1 : base 36 sha1 of the new file had the operation succeeded
* timestamp : TS_MW timestamp of the batch change
-
- * Also, $next is updated to the ID of the next entry.
- *
- * @param $start integer Starting change ID or null
- * @param $limit integer Maximum number of items to return
- * @param &$next string
- * @return Array
+ * Also, $next is updated to the ID of the next entry.
*/
final public function getChangeEntries( $start = null, $limit = 0, &$next = null ) {
$entries = $this->doGetChangeEntries( $start, $limit ? $limit + 1 : 0 );
} else {
$next = null; // end of list
}
+
return $entries;
}
/**
* @see FileJournal::getChangeEntries()
- * @return Array
+ * @param int $start
+ * @param int $limit
+ * @return array
*/
abstract protected function doGetChangeEntries( $start, $limit );
class NullFileJournal extends FileJournal {
/**
* @see FileJournal::doLogChangeBatch()
- * @param $entries array
- * @param $batchId string
+ * @param array $entries
+ * @param string $batchId
* @return Status
*/
protected function doLogChangeBatch( array $entries, $batchId ) {
/**
* @see FileJournal::doGetCurrentPosition()
- * @return integer|false
+ * @return int|bool
*/
protected function doGetCurrentPosition() {
return false;
/**
* @see FileJournal::doGetPositionAtTime()
- * @param $time integer|string timestamp
- * @return integer|false
+ * @param int|string $time timestamp
+ * @return int|bool
*/
protected function doGetPositionAtTime( $time ) {
return false;
/**
* @see FileJournal::doGetChangeEntries()
- * @return Array
+ * @param int $start
+ * @param int $limit
+ * @return array
*/
protected function doGetChangeEntries( $start, $limit ) {
return array();
* @since 1.19
*/
abstract class DBLockManager extends QuorumLockManager {
- /** @var Array Map of DB names to server config */
+ /** @var array Map of DB names to server config */
protected $dbServers; // (DB name => server config array)
/** @var BagOStuff */
protected $statusCache;
protected $safeDelay; // integer number of seconds
protected $session = 0; // random integer
- /** @var Array Map Database connections (DB name => Database) */
+ /** @var array Map Database connections (DB name => Database) */
protected $conns = array();
/**
* Construct a new instance from configuration.
*
- * $config paramaters include:
+ * @param array $config Paramaters include:
* - dbServers : Associative array of DB names to server configuration.
* Configuration is an associative array that includes:
* - host : DB server name
* - lockExpiry : Lock timeout (seconds) for dropped connections. [optional]
* This tells the DB server how long to wait before assuming
* connection failure and releasing all the locks for a session.
- *
- * @param array $config
*/
public function __construct( array $config ) {
parent::__construct( $config );
foreach ( $pathsByType as $type => $paths ) {
$status->merge( $this->doGetLocksOnServer( $lockSrv, $paths, $type ) );
}
+
return $status;
}
/**
* @see QuorumLockManager::isServerUp()
+ * @param string $lockSrv
* @return bool
*/
protected function isServerUp( $lockSrv ) {
$this->getConnection( $lockSrv );
} catch ( DBError $e ) {
$this->cacheRecordFailure( $lockSrv );
+
return false; // failed to connect
}
+
return true;
}
/**
* Get (or reuse) a connection to a lock DB
*
- * @param $lockDb string
+ * @param string $lockDb
* @return DatabaseBase
* @throws DBError
*/
if ( !$this->conns[$lockDb]->trxLevel() ) {
$this->conns[$lockDb]->begin( __METHOD__ ); // start transaction
}
+
return $this->conns[$lockDb];
}
/**
* Do additional initialization for new lock DB connection
*
- * @param $lockDb string
- * @param $db DatabaseBase
- * @return void
+ * @param string $lockDb
+ * @param DatabaseBase $db
* @throws DBError
*/
- protected function initConnection( $lockDb, DatabaseBase $db ) {}
+ protected function initConnection( $lockDb, DatabaseBase $db ) {
+ }
/**
* Checks if the DB has not recently had connection/query errors.
/**
* Log a lock request failure to the cache
*
- * @param $lockDb string
+ * @param string $lockDb
* @return bool Success
*/
protected function cacheRecordFailure( $lockDb ) {
/**
* Get a cache key for recent query misses for a DB
*
- * @param $lockDb string
+ * @param string $lockDb
* @return string
*/
protected function getMissKey( $lockDb ) {
* @ingroup LockManager
*/
class MySqlLockManager extends DBLockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
);
/**
- * @param $lockDb string
- * @param $db DatabaseBase
+ * @param string $lockDb
+ * @param DatabaseBase $db
*/
protected function initConnection( $lockDb, DatabaseBase $db ) {
# Let this transaction see lock rows from other transactions
* This does not use GET_LOCK() per http://bugs.mysql.com/bug.php?id=1118.
*
* @see DBLockManager::getLocksOnServer()
+ * @param string $lockSrv
+ * @param array $paths
+ * @param string $type
* @return Status
*/
protected function doGetLocksOnServer( $lockSrv, array $paths, $type ) {
* @ingroup LockManager
*/
class PostgreSqlLockManager extends DBLockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
$db = $this->getConnection( $lockSrv ); // checked in isServerUp()
$bigints = array_unique( array_map(
- function( $key ) {
+ function ( $key ) {
return wfBaseConvert( substr( $key, 0, 15 ), 16, 10 );
},
array_map( array( $this, 'sha1Base16Absolute' ), $paths )
* @since 1.19
*/
class FSLockManager extends LockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
protected $lockDir; // global dir for all servers
- /** @var Array Map of (locked key => lock file handle) */
+ /** @var array Map of (locked key => lock file handle) */
protected $handles = array();
/**
* Construct a new instance from configuration.
*
- * $config includes:
+ * @param array $config Includes:
* - lockDirectory : Directory containing the lock files
- *
- * @param array $config
*/
function __construct( array $config ) {
parent::__construct( $config );
/**
* @see LockManager::doLock()
- * @param $paths array
- * @param $type int
+ * @param array $paths
+ * @param int $type
* @return Status
*/
protected function doLock( array $paths, $type ) {
} else {
// Abort and unlock everything
$status->merge( $this->doUnlock( $lockedPaths, $type ) );
+
return $status;
}
}
/**
* @see LockManager::doUnlock()
- * @param $paths array
- * @param $type int
+ * @param array $paths
+ * @param int $type
* @return Status
*/
protected function doUnlock( array $paths, $type ) {
/**
* Lock a single resource key
*
- * @param $path string
- * @param $type integer
+ * @param string $path
+ * @param int $type
* @return Status
*/
protected function doSingleLock( $path, $type ) {
/**
* Unlock a single resource key
*
- * @param $path string
- * @param $type integer
+ * @param string $path
+ * @param int $type
* @return Status
*/
protected function doSingleUnlock( $path, $type ) {
}
/**
- * @param $path string
- * @param $handlesToClose array
+ * @param string $path
+ * @param array $handlesToClose
* @return Status
*/
private function closeLockHandles( $path, array $handlesToClose ) {
$status->warning( 'lockmanager-fail-closelock', $path );
}
}
+
return $status;
}
/**
- * @param $path string
+ * @param string $path
* @return Status
*/
private function pruneKeyLockFiles( $path ) {
}
unset( $this->handles[$path] );
}
+
return $status;
}
/**
* Get the path to the lock file for a key
- * @param $path string
+ * @param string $path
* @return string
*/
protected function getLockPath( $path ) {
* @since 1.19
*/
class LSLockManager extends QuorumLockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
self::LOCK_EX => self::LOCK_EX
);
- /** @var Array Map of server names to server config */
+ /** @var array Map of server names to server config */
protected $lockServers; // (server name => server config array)
- /** @var Array Map Server connections (server name => resource) */
+ /** @var array Map Server connections (server name => resource) */
protected $conns = array();
protected $connTimeout; // float number of seconds
/**
* Construct a new instance from configuration.
*
- * $config paramaters include:
+ * @param array $config Paramaters include:
* - lockServers : Associative array of server names to configuration.
* Configuration is an associative array that includes:
* - host : IP address/hostname
* - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
* each having an odd-numbered list of server names (peers) as values.
* - connTimeout : Lock server connection attempt timeout. [optional]
- *
- * @param array $config
*/
public function __construct( array $config ) {
parent::__construct( $config );
/**
* @see QuorumLockManager::getLocksOnServer()
+ * @param string $lockSrv
+ * @param array $paths
+ * @param int $type
* @return Status
*/
protected function getLocksOnServer( $lockSrv, array $paths, $type ) {
/**
* @see QuorumLockManager::freeLocksOnServer()
+ * @param string $lockSrv
+ * @param array $paths
+ * @param int $type
* @return Status
*/
protected function freeLocksOnServer( $lockSrv, array $paths, $type ) {
/**
* @see QuorumLockManager::isServerUp()
+ * @param string $lockSrv
* @return bool
*/
protected function isServerUp( $lockSrv ) {
/**
* Send a command and get back the response
*
- * @param $lockSrv string
- * @param $action string
- * @param $type string
- * @param $values Array
+ * @param string $lockSrv
+ * @param string $action
+ * @param string $type
+ * @param array $values
* @return string|bool
*/
protected function sendCommand( $lockSrv, $action, $type, $values ) {
if ( $response === false ) {
return false;
}
+
return trim( $response );
}
/**
* Get (or reuse) a connection to a lock server
*
- * @param $lockSrv string
+ * @param string $lockSrv
* @return resource
*/
protected function getConnection( $lockSrv ) {
stream_set_timeout( $conn, $sec, $usec );
$this->conns[$lockSrv] = $conn;
}
+
return $this->conns[$lockSrv];
}
* @since 1.19
*/
abstract class LockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_EX, // subclasses may use self::LOCK_SH
self::LOCK_EX => self::LOCK_EX
);
- /** @var Array Map of (resource path => lock type => count) */
+ /** @var array Map of (resource path => lock type => count) */
protected $locksHeld = array();
protected $domain; // string; domain (usually wiki ID)
/**
* Construct a new instance from configuration
*
- * $config paramaters include:
+ * @param array $config Paramaters include:
* - 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();
* Lock the resources at the given abstract paths
*
* @param array $paths List of resource names
- * @param $type integer LockManager::LOCK_* constant
- * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
+ * @param int $type LockManager::LOCK_* constant
+ * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
* @return Status
*/
final public function lock( array $paths, $type = self::LOCK_EX, $timeout = 0 ) {
* Lock the resources at the given abstract paths
*
* @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
- * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
+ * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
* @return Status
* @since 1.22
*/
$elapsed = microtime( true ) - $start;
} while ( $elapsed < $timeout && $elapsed >= 0 );
wfProfileOut( __METHOD__ );
+
return $status;
}
* Unlock the resources at the given abstract paths
*
* @param array $paths List of paths
- * @param $type integer LockManager::LOCK_* constant
+ * @param int $type LockManager::LOCK_* constant
* @return Status
*/
final public function unlock( array $paths, $type = self::LOCK_EX ) {
$pathsByType = $this->normalizePathsByType( $pathsByType );
$status = $this->doUnlockByType( $pathsByType );
wfProfileOut( __METHOD__ );
+
return $status;
}
* Before hashing, the path will be prefixed with the domain ID.
* This should be used interally for lock key or file names.
*
- * @param $path string
+ * @param string $path
* @return string
*/
final protected function sha1Base36Absolute( $path ) {
* Before hashing, the path will be prefixed with the domain ID.
* This should be used interally for lock key or file names.
*
- * @param $path string
+ * @param string $path
* @return string
*/
final protected function sha1Base16Absolute( $path ) {
* Normalize the $paths array by converting LOCK_UW locks into the
* appropriate type and removing any duplicated paths for each lock type.
*
- * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
- * @return Array
+ * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
+ * @return array
* @since 1.22
*/
final protected function normalizePathsByType( array $pathsByType ) {
foreach ( $pathsByType as $type => $paths ) {
$res[$this->lockTypeMap[$type]] = array_unique( $paths );
}
+
return $res;
}
/**
* @see LockManager::lockByType()
- * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
+ * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
* @return Status
* @since 1.22
*/
$lockedByType[$type] = $paths;
} else {
// Release the subset of locks that were acquired
- foreach ( $lockedByType as $type => $paths ) {
- $status->merge( $this->doUnlock( $paths, $type ) );
+ foreach ( $lockedByType as $lType => $lPaths ) {
+ $status->merge( $this->doUnlock( $lPaths, $lType ) );
}
break;
}
}
+
return $status;
}
* Lock resources with the given keys and lock type
*
* @param array $paths List of paths
- * @param $type integer LockManager::LOCK_* constant
+ * @param int $type LockManager::LOCK_* constant
* @return Status
*/
abstract protected function doLock( array $paths, $type );
/**
* @see LockManager::unlockByType()
- * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
+ * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
* @return Status
* @since 1.22
*/
foreach ( $pathsByType as $type => $paths ) {
$status->merge( $this->doUnlock( $paths, $type ) );
}
+
return $status;
}
* Unlock resources with the given keys and lock type
*
* @param array $paths List of paths
- * @param $type integer LockManager::LOCK_* constant
+ * @param int $type LockManager::LOCK_* constant
* @return Status
*/
abstract protected function doUnlock( array $paths, $type );
* @since 1.19
*/
class LockManagerGroup {
- /** @var Array (domain => LockManager) */
+ /** @var array (domain => LockManager) */
protected static $instances = array();
protected $domain; // string; domain (usually wiki ID)
- /** @var Array of (name => ('class' => ..., 'config' => ..., 'instance' => ...)) */
+ /** @var array of (name => ('class' => ..., 'config' => ..., 'instance' => ...)) */
protected $managers = array();
/**
}
/**
- * @param string $domain Domain (usually wiki ID)
+ * @param bool|string $domain Domain (usually wiki ID). Default: false.
* @return LockManagerGroup
*/
public static function singleton( $domain = false ) {
self::$instances[$domain] = new self( $domain );
self::$instances[$domain]->initFromGlobals();
}
+
return self::$instances[$domain];
}
/**
* Destroy the singleton instances
- *
- * @return void
*/
public static function destroySingletons() {
self::$instances = array();
/**
* Register lock managers from the global variables
- *
- * @return void
*/
protected function initFromGlobals() {
global $wgLockManagers;
/**
* Register an array of file lock manager configurations
*
- * @param $configs Array
- * @return void
+ * @param array $configs
* @throws MWException
*/
protected function register( array $configs ) {
/**
* Get the lock manager object with a given name
*
- * @param $name string
+ * @param string $name
* @return LockManager
* @throws MWException
*/
$config = $this->managers[$name]['config'];
$this->managers[$name]['instance'] = new $class( $config );
}
+
return $this->managers[$name]['instance'];
}
/**
* Get the config array for a lock manager object with a given name
*
- * @param $name string
- * @return Array
+ * @param string $name
+ * @return array
* @throws MWException
*/
public function config( $name ) {
throw new MWException( "No lock manager defined with the name `$name`." );
}
$class = $this->managers[$name]['class'];
+
return array( 'class' => $class ) + $this->managers[$name]['config'];
}
* @since 1.20
*/
class MemcLockManager extends QuorumLockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
self::LOCK_EX => self::LOCK_EX
);
- /** @var Array Map server names to MemcachedBagOStuff objects */
+ /** @var array Map server names to MemcachedBagOStuff objects */
protected $bagOStuffs = array();
- /** @var Array */
- protected $serversUp = array(); // (server name => bool)
- protected $session = ''; // string; random UUID
+ /** @var array (server name => bool) */
+ protected $serversUp = array();
+
+ /** @var string random UUID */
+ protected $session = '';
/**
* Construct a new instance from configuration.
*
- * $config paramaters include:
+ * @param array $config Paramaters include:
* - lockServers : Associative array of server names to "<IP>:<port>" strings.
* - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
* each having an odd-numbered list of server names (peers) as values.
* - memcConfig : Configuration array for ObjectCache::newFromParams. [optional]
* If set, this must use one of the memcached classes.
- *
- * @param array $config
* @throws MWException
*/
public function __construct( array $config ) {
$this->session = wfRandomString( 32 );
}
- // @TODO: change this code to work in one batch
+ // @todo Change this code to work in one batch
protected function getLocksOnServer( $lockSrv, array $pathsByType ) {
$status = Status::newGood();
? array_merge( $lockedPaths[$type], $paths )
: $paths;
} else {
- foreach ( $lockedPaths as $type => $paths ) {
- $status->merge( $this->doFreeLocksOnServer( $lockSrv, $paths, $type ) );
+ foreach ( $lockedPaths as $lType => $lPaths ) {
+ $status->merge( $this->doFreeLocksOnServer( $lockSrv, $lPaths, $lType ) );
}
break;
}
return $status;
}
- // @TODO: change this code to work in one batch
+ // @todo Change this code to work in one batch
protected function freeLocksOnServer( $lockSrv, array $pathsByType ) {
$status = Status::newGood();
/**
* @see QuorumLockManager::getLocksOnServer()
+ * @param string $lockSrv
+ * @param array $paths
+ * @param string $type
* @return Status
*/
protected function doGetLocksOnServer( $lockSrv, array $paths, $type ) {
foreach ( $paths as $path ) {
$status->fatal( 'lockmanager-fail-acquirelock', $path );
}
+
return $status;
}
/**
* @see QuorumLockManager::freeLocksOnServer()
+ * @param string $lockSrv
+ * @param array $paths
+ * @param string $type
* @return Status
*/
protected function doFreeLocksOnServer( $lockSrv, array $paths, $type ) {
foreach ( $paths as $path ) {
$status->fatal( 'lockmanager-fail-releaselock', $path );
}
- return;
+
+ return $status;
}
// Fetch all the existing lock records...
/**
* @see QuorumLockManager::isServerUp()
+ * @param string $lockSrv
* @return bool
*/
protected function isServerUp( $lockSrv ) {
return null; // server appears to be down
}
}
+
return $memc;
}
/**
- * @param $path string
+ * @param string $path
* @return string
*/
protected function recordKeyForPath( $path ) {
}
/**
- * @return Array An empty lock structure for a key
+ * @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
+ * @param array $a
+ * @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 MemcachedBagOStuff $memc
* @param array $keys List of keys to acquire
* @return bool
*/
}
/**
- * @param $memc MemcachedBagOStuff
+ * @param MemcachedBagOStuff $memc
* @param array $keys List of acquired keys
- * @return void
*/
protected function releaseMutexes( MemcachedBagOStuff $memc, array $keys ) {
foreach ( $keys as $key ) {
* @since 1.20
*/
abstract class QuorumLockManager extends LockManager {
- /** @var Array Map of bucket indexes to peer server lists */
+ /** @var array Map of bucket indexes to peer server lists */
protected $srvsByBucket = array(); // (bucket index => (lsrv1, lsrv2, ...))
- /** @var Array Map of degraded buckets */
+
+ /** @var array Map of degraded buckets */
protected $degradedBuckets = array(); // (buckey index => UNIX timestamp)
final protected function doLock( array $paths, $type ) {
$status->merge( $this->doLockingRequestBucket( $bucket, $pathsToLockByType ) );
if ( !$status->isOK() ) {
$status->merge( $this->doUnlockByType( $lockedPaths ) );
+
return $status;
}
// Record these locks as active
* Attempt to acquire locks with the peers for a bucket.
* This is all or nothing; if any key is locked then this totally fails.
*
- * @param $bucket integer
+ * @param int $bucket
* @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
* @return Status
*/
/**
* Attempt to release locks with the peers for a bucket
*
- * @param $bucket integer
+ * @param int $bucket
* @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
* @return Status
*/
* Get the bucket for resource path.
* This should avoid throwing any exceptions.
*
- * @param $path string
- * @return integer
+ * @param string $path
+ * @return int
*/
protected function getBucketFromPath( $path ) {
$prefix = substr( sha1( $path ), 0, 2 ); // first 2 hex chars (8 bits)
* Check if a lock server is up.
* This should process cache results to reduce RTT.
*
- * @param $lockSrv string
+ * @param string $lockSrv
* @return bool
*/
abstract protected function isServerUp( $lockSrv );
/**
* Get a connection to a lock server and acquire locks
*
- * @param $lockSrv string
+ * @param string $lockSrv
* @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
* @return Status
*/
*
* Subclasses must effectively implement this or releaseAllLocks().
*
- * @param $lockSrv string
+ * @param string $lockSrv
* @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
* @return Status
*/
* @since 1.22
*/
class RedisLockManager extends QuorumLockManager {
- /** @var Array Mapping of lock types to the type actually used */
+ /** @var array Mapping of lock types to the type actually used */
protected $lockTypeMap = array(
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
/** @var RedisConnectionPool */
protected $redisPool;
- /** @var Array Map server names to hostname/IP and port numbers */
+
+ /** @var array Map server names to hostname/IP and port numbers */
protected $lockServers = array();
- protected $session = ''; // string; random UUID
+ /** @var string random UUID */
+ protected $session = '';
/**
* Construct a new instance from configuration.
*
- * $config paramaters include:
+ * @param array $config Parameters include:
* - lockServers : Associative array of server names to "<IP>:<port>" strings.
* - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
* each having an odd-numbered list of server names (peers) as values.
* - redisConfig : Configuration for RedisConnectionPool::__construct().
- *
- * @param Array $config
* @throws MWException
*/
public function __construct( array $config ) {
? array_merge( $lockedPaths[$type], $paths )
: $paths;
} else {
- foreach ( $lockedPaths as $type => $paths ) {
- $status->merge( $this->doFreeLocksOnServer( $lockSrv, $paths, $type ) );
+ foreach ( $lockedPaths as $lType => $lPaths ) {
+ $status->merge( $this->doFreeLocksOnServer( $lockSrv, $lPaths, $lType ) );
}
break;
}
return $status;
}
- // @TODO: change this code to work in one batch
+ // @todo Change this code to work in one batch
protected function freeLocksOnServer( $lockSrv, array $pathsByType ) {
$status = Status::newGood();
foreach ( $paths as $path ) {
$status->fatal( 'lockmanager-fail-acquirelock', $path );
}
+
return $status;
}
foreach ( $paths as $path ) {
$status->fatal( 'lockmanager-fail-releaselock', $path );
}
+
return $status;
}
}
/**
- * @param $path string
+ * @param string $path
* @return string
*/
protected function recordKeyForPath( $path ) {
class ScopedLock {
/** @var LockManager */
protected $manager;
+
/** @var Status */
protected $status;
- /** @var Array Map of lock types to resource paths */
+
+ /** @var array Map of lock types to resource paths */
protected $pathsByType;
/**
* Any locks are released once this object goes out of scope.
* The status object is updated with any errors or warnings.
*
- * $type can be "mixed" and $paths can be a map of types to paths (since 1.22).
- * Otherwise $type should be an integer and $paths should be a list of paths.
- *
* @param LockManager $manager
* @param array $paths List of storage paths or map of lock types to path lists
- * @param integer|string $type LockManager::LOCK_* constant or "mixed"
+ * @param int|string $type LockManager::LOCK_* constant or "mixed" and $paths
+ * can be a map of types to paths (since 1.22). Otherwise $type should be an
+ * integer and $paths should be a list of paths.
* @param Status $status
- * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
+ * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
* @return ScopedLock|null Returns null on failure
*/
public static function factory(
if ( $lockStatus->isOK() ) {
return new self( $manager, $pathsByType, $status );
}
+
return null;
}
* This is the same as setting the lock object to null.
*
* @param ScopedLock $lock
- * @return void
* @since 1.21
*/
public static function release( ScopedLock &$lock = null ) {
* @deprecated since 1.19
*/
class FSRepo extends FileRepo {
-
/**
* @param $info array
* @throws MWException
/** @var FileBackend */
protected $backend;
+
/** @var Array Map of zones to config */
protected $zones = array();
- var $thumbScriptUrl, $transformVia404;
- var $descBaseUrl, $scriptDirUrl, $scriptExtension, $articleUrl;
- var $fetchDescription, $initialCapital;
- var $pathDisclosureProtection = 'simple'; // 'paranoid'
- var $descriptionCacheExpiry, $url, $thumbUrl;
- var $hashLevels, $deletedHashLevels;
+ /** @var string URL of thumb.php */
+ protected $thumbScriptUrl;
+
+ /** @var bool Whether to skip media file transformation on parse and rely
+ * on a 404 handler instead. */
+ protected $transformVia404;
+
+ /** @var string URL of image description pages, e.g.
+ * http://en.wikipedia.org/wiki/File:
+ */
+ protected $descBaseUrl;
+
+ /** @var string URL of the MediaWiki installation, equivalent to
+ * $wgScriptPath, e.g. https://en.wikipedia.org/w
+ */
+ protected $scriptDirUrl;
+
+ /** @var string Script extension of the MediaWiki installation, equivalent
+ * to $wgScriptExtension, e.g. .php5 defaults to .php */
+ protected $scriptExtension;
+
+ /** @var string Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 */
+ protected $articleUrl;
+
+ /** @var bool Whether to fetch commons image description pages and display them on the local wiki */
+ public $fetchDescription;
+
+ /** @var bool Equivalent to $wgCapitalLinks (or $wgCapitalLinkOverrides[NS_FILE],
+ * determines whether filenames implicitly start with a capital letter.
+ * The current implementation may give incorrect description page links
+ * when the local $wgCapitalLinks and initialCapital are mismatched.
+ */
+ protected $initialCapital;
+
+ /** @var string May be 'paranoid' to remove all parameters from error
+ * messages, 'none' to leave the paths in unchanged, or 'simple' to
+ * replace paths with placeholders. Default for LocalRepo is
+ * 'simple'.
+ */
+ protected $pathDisclosureProtection = 'simple';
+
+ /** @var int */
+ public $descriptionCacheExpiry;
+
+ /** @var bool Public zone URL. */
+ protected $url;
+
+ /** @var string The base thumbnail URL. Defaults to "<url>/thumb". */
+ protected $thumbUrl;
+
+ /** @var int The number of directory levels for hash-based division of files */
+ protected $hashLevels;
+
+ /** @var int The number of directory levels for hash-based division of deleted files */
+ protected $deletedHashLevels;
+
+ /** @var int File names over this size will use the short form of thumbnail
+ * names. Short thumbnail names only have the width, parameters, and the
+ * extension.
+ */
protected $abbrvThreshold;
/**
* Factory functions for creating new files
* Override these in the base class
*/
- var $fileFactory = array( 'UnregisteredLocalFile', 'newFromTitle' );
- var $oldFileFactory = false;
- var $fileFactoryKey = false, $oldFileFactoryKey = false;
+ protected $fileFactory = array( 'UnregisteredLocalFile', 'newFromTitle' );
+ protected $oldFileFactory = false;
+ protected $fileFactoryKey = false;
+ protected $oldFileFactoryKey = false;
/**
* @param $info array|null
|| !array_key_exists( 'name', $info )
|| !array_key_exists( 'backend', $info )
) {
- throw new MWException( __CLASS__ . " requires an array of options having both 'name' and 'backend' keys.\n" );
+ throw new MWException( __CLASS__ .
+ " requires an array of options having both 'name' and 'backend' keys.\n" );
}
// Required settings
throw new MWException( "No '$zone' zone defined in the {$this->name} repo." );
}
}
+
return $status;
}
if ( $suffix !== false ) {
$path .= '/' . rawurlencode( $suffix );
}
+
return $path;
}
*
* @param string $zone One of: public, deleted, temp, thumb
* @param string|null $ext Optional file extension
- * @return String or false
+ * @return string|bool
*/
public function getZoneUrl( $zone, $ext = null ) {
- if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) { // standard public zones
+ if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) {
+ // standard public zones
if ( $ext !== null && isset( $this->zones[$zone]['urlsByExt'][$ext] ) ) {
- return $this->zones[$zone]['urlsByExt'][$ext]; // custom URL for extension/zone
+ // custom URL for extension/zone
+ return $this->zones[$zone]['urlsByExt'][$ext];
} elseif ( isset( $this->zones[$zone]['url'] ) ) {
- return $this->zones[$zone]['url']; // custom URL for zone
+ // custom URL for zone
+ return $this->zones[$zone]['url'];
}
}
switch ( $zone ) {
*/
public function getZoneHandlerUrl( $zone ) {
if ( isset( $this->zones[$zone]['handlerUrl'] )
- && in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) )
- {
+ && in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) )
+ ) {
return $this->zones[$zone]['handlerUrl'];
}
+
return false;
}
if ( !$base ) {
throw new MWException( __METHOD__ . ": invalid zone: $zone" );
}
+
return $base . '/' . rawurldecode( $rel );
}
if ( !isset( $this->zones[$zone] ) ) {
return array( null, null ); // bogus
}
+
return array( $this->zones[$zone]['container'], $this->zones[$zone]['directory'] );
}
if ( $base != '' ) { // may not be set
$base = "/{$base}";
}
+
return "mwstore://$backendName/{$container}{$base}";
}
}
if ( $img->exists() ) {
$img->redirectedFrom( $title->getDBkey() );
+
return $img;
}
}
+
return false;
}
$result[$file->getTitle()->getDBkey()] = $file;
}
}
+
return $result;
}
}
}
}
+
return false;
}
$result[$hash] = $files;
}
}
+
return $result;
}
}
/**
- * Get the name of an image from its title object
+ * Get the name of a file from its title object
*
* @param $title Title
* @return String
} else {
$name = $title->getDBkey();
}
+
return $name;
}
for ( $i = 1; $i <= $levels; $i++ ) {
$path .= substr( $hash, 0, $i ) . '/';
}
+
return $path;
}
}
public function makeUrl( $query = '', $entry = 'index' ) {
if ( isset( $this->scriptDirUrl ) ) {
$ext = isset( $this->scriptExtension ) ? $this->scriptExtension : '.php';
+
return wfAppendQuery( "{$this->scriptDirUrl}/{$entry}{$ext}", $query );
}
+
return false;
}
public function getDescriptionUrl( $name ) {
$encName = wfUrlencode( $name );
if ( !is_null( $this->descBaseUrl ) ) {
- # "http://example.com/wiki/Image:"
+ # "http://example.com/wiki/File:"
return $this->descBaseUrl . $encName;
}
if ( !is_null( $this->articleUrl ) ) {
# and just sort of hope index.php is right. ;)
return $this->makeUrl( "title=Image:$encName" );
}
+
return false;
}
return $this->makeUrl( 'title=MediaWiki:Filepage.css&' .
wfArrayToCgi( Skin::getDynamicStylesheetQuery() ) );
}
+
return false;
}
$temp = $this->getVirtualUrl( 'temp' );
if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
wfDebug( __METHOD__ . ": Invalid temp virtual URL\n" );
+
return false;
}
*/
public function fileExists( $file ) {
$result = $this->fileExistsBatch( array( $file ) );
+
return $result[0];
}
$file = $this->resolveToStoragePath( $file );
$result[$key] = $this->backend->fileExists( array( 'src' => $file ) );
}
+
return $result;
}
for ( $i = 0; $i < $this->deletedHashLevels; $i++ ) {
$path .= $key[$i] . '/';
}
+
return $path;
}
if ( $this->isVirtualUrl( $path ) ) {
return $this->resolveVirtualUrl( $path );
}
+
return $path;
}
*/
public function getLocalCopy( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
+
return $this->backend->getLocalCopy( array( 'src' => $path ) );
}
*/
public function getLocalReference( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
+
return $this->backend->getLocalReference( array( 'src' => $path ) );
}
*/
public function getFileProps( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
+
return $this->backend->getFileProps( array( 'src' => $path ) );
}
*/
public function getFileTimestamp( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
+
return $this->backend->getFileTimestamp( array( 'src' => $path ) );
}
*/
public function getFileSize( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
+
return $this->backend->getFileSize( array( 'src' => $path ) );
}
*/
public function getFileSha1( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
+
return $this->backend->getFileSha1Base36( array( 'src' => $path ) );
}
public function streamFile( $virtualUrl, $headers = array() ) {
$path = $this->resolveToStoragePath( $virtualUrl );
$params = array( 'src' => $path, 'headers' => $headers );
+
return $this->backend->streamFile( $params )->isOK();
}
if ( strval( $filename ) == '' ) {
return false;
}
+
return FileBackend::isPathTraversalFree( $filename );
}
public function newFatal( $message /*, parameters...*/ ) {
$params = func_get_args();
array_unshift( $params, $this );
+
return call_user_func_array( array( 'FileRepoStatus', 'newFatal' ), $params );
}
* STUB
* @param $title Title of image
*/
- public function invalidateImageRedirect( Title $title ) {}
+ public function invalidateImageRedirect( Title $title ) {
+ }
/**
* Get the human-readable name of the repo
if ( $this->isLocal() ) {
return null;
}
+
// 'shared-repo-name-wikimediacommons' is used when $wgUseInstantCommons = true
return wfMessageFallback( 'shared-repo-name-' . $this->name, 'shared-repo' )->text();
}
$ext = FileBackend::extensionFromPath( $name );
$name = ( $ext == '' ) ? 'thumbnail' : "thumbnail.$ext";
}
+
return $name;
}
public function getLocalCacheKey( /*...*/ ) {
$args = func_get_args();
array_unshift( $args, 'filerepo', $this->getName() );
+
return call_user_func_array( 'wfMemcKey', $args );
}
),
'thumb' => array(
'container' => $this->zones['thumb']['container'],
- 'directory' => ( $this->zones['thumb']['directory'] == '' )
+ 'directory' => $this->zones['thumb']['directory'] == ''
? 'temp'
: $this->zones['thumb']['directory'] . '/temp'
),
'transcoded' => array(
'container' => $this->zones['transcoded']['container'],
- 'directory' => ( $this->zones['transcoded']['directory'] == '' )
+ 'directory' => $this->zones['transcoded']['directory'] == ''
? 'temp'
: $this->zones['transcoded']['directory'] . '/temp'
)
* @return void
* @throws MWException
*/
- protected function assertWritableRepo() {}
-
+ protected function assertWritableRepo() {
+ }
/**
* Return information about the repository.
* @since 1.22
*/
public function getInfo() {
- return array(
+ $ret = array(
'name' => $this->getName(),
'displayname' => $this->getDisplayName(),
- 'rootUrl' => $this->getRootUrl(),
+ 'rootUrl' => $this->getZoneUrl( 'public' ),
'local' => $this->isLocal(),
);
+
+ $optionalSettings = array(
+ 'url', 'thumbUrl', 'initialCapital', 'descBaseUrl', 'scriptDirUrl', 'articleUrl',
+ 'fetchDescription', 'descriptionCacheExpiry', 'scriptExtension'
+ );
+ foreach ( $optionalSettings as $k ) {
+ if ( isset( $this->$k ) ) {
+ $ret[$k] = $this->$k;
+ }
+ }
+
+ return $ret;
}
}
$result = new self( $repo );
call_user_func_array( array( &$result, 'error' ), $params );
$result->ok = false;
+
return $result;
}
static function newGood( $repo = false, $value = null ) {
$result = new self( $repo );
$result->value = $value;
+
return $result;
}
if ( $time ) {
return false;
}
+
return parent::newFile( $title, $time );
}
}
}
- $data = $this->fetchImageQuery( array( 'titles' => implode( $files, '|' ),
- 'prop' => 'imageinfo' ) );
+ $data = $this->fetchImageQuery( array(
+ 'titles' => implode( $files, '|' ),
+ 'prop' => 'imageinfo' )
+ );
+
if ( isset( $data['query']['pages'] ) ) {
# First, get results from the query. Note we only care whether the image exists,
# not whether it has a description page.
$results[$key] = $this->mFileExists[$file];
}
}
+
return $results;
}
* @return string
*/
function fetchImageQuery( $query ) {
- global $wgMemc, $wgLanguageCode;
+ global $wgLanguageCode;
$query = array_merge( $query,
array(
}
}
}
+
return false;
}
$ret[] = new ForeignAPIFile( Title::makeTitle( NS_FILE, $img['name'] ), $this, $img );
}
}
+
return $ret;
}
if ( $data && $info && isset( $info['thumburl'] ) ) {
wfDebug( __METHOD__ . " got remote thumb " . $info['thumburl'] . "\n" );
$result = $info;
+
return $info['thumburl'];
} else {
return false;
if ( $data && $info && isset( $info['thumberror'] ) ) {
wfDebug( __METHOD__ . " got remote thumb error " . $info['thumberror'] . "\n" );
+
return new MediaTransformError(
'thumbnail_error_remote',
$width,
* @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 = "" ) {
if ( isset( $knownThumbUrls[$sizekey] ) ) {
wfDebug( __METHOD__ . ': Got thumburl from local cache: ' .
"{$knownThumbUrls[$sizekey]} \n" );
+
return $knownThumbUrls[$sizekey];
}
/* This size is not yet known */
if ( !$foreignUrl ) {
wfDebug( __METHOD__ . " Could not find thumburl\n" );
+
return false;
}
$fileName = rawurldecode( pathinfo( $foreignUrl, PATHINFO_BASENAME ) );
if ( !$this->validateFilename( $fileName ) ) {
wfDebug( __METHOD__ . " The deduced filename $fileName is not safe\n" );
+
return false;
}
$localPath = $this->getZonePath( 'thumb' ) . "/" . $this->getHashPath( $name ) . $name;
$localFilename = $localPath . "/" . $fileName;
- $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName );
+ $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) .
+ rawurlencode( $name ) . "/" . rawurlencode( $fileName );
if ( $backend->fileExists( array( 'src' => $localFilename ) )
- && isset( $metadata['timestamp'] ) ) {
+ && isset( $metadata['timestamp'] )
+ ) {
wfDebug( __METHOD__ . " Thumbnail was already downloaded before\n" );
$modified = $backend->getFileTimestamp( array( 'src' => $localFilename ) );
$remoteModified = strtotime( $metadata['timestamp'] );
/* Use our current and already downloaded thumbnail */
$knownThumbUrls[$sizekey] = $localUrl;
$wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
+
return $localUrl;
}
/* There is a new Commons file, or existing thumbnail older than a month */
$thumb = self::httpGet( $foreignUrl );
if ( !$thumb ) {
wfDebug( __METHOD__ . " Could not download thumb\n" );
+
return false;
}
$params = array( 'dst' => $localFilename, 'content' => $thumb );
if ( !$backend->quickCreate( $params )->isOK() ) {
wfDebug( __METHOD__ . " could not write to thumb path '$localFilename'\n" );
+
return $foreignUrl;
}
$knownThumbUrls[$sizekey] = $localUrl;
$wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" );
+
return $localUrl;
}
if ( in_array( $zone, $supported ) ) {
return parent::getZonePath( $zone );
}
+
return false;
}
)
);
}
+
return $this->dbConn;
}
if ( $this->hasSharedCache() ) {
$args = func_get_args();
array_unshift( $args, $this->dbName, $this->tablePrefix );
+
return call_user_func_array( 'wfForeignMemcKey', $args );
} else {
return false;
if ( $this->hasSharedCache() ) {
$args = func_get_args();
array_unshift( $args, $this->wiki );
+
return implode( ':', $args );
} else {
return false;
* @ingroup FileRepo
*/
class LocalRepo extends FileRepo {
- var $fileFactory = array( 'LocalFile' , 'newFromTitle' );
- var $fileFactoryKey = array( 'LocalFile' , 'newFromKey' );
- var $fileFromRowFactory = array( 'LocalFile' , 'newFromRow' );
- var $oldFileFactory = array( 'OldLocalFile', 'newFromTitle' );
- var $oldFileFactoryKey = array( 'OldLocalFile', 'newFromKey' );
- var $oldFileFromRowFactory = array( 'OldLocalFile', 'newFromRow' );
+ var $fileFactory = array( 'LocalFile', 'newFromTitle' );
+ var $fileFactoryKey = array( 'LocalFile', 'newFromKey' );
+ var $fileFromRowFactory = array( 'LocalFile', 'newFromRow' );
+ var $oldFileFactory = array( 'OldLocalFile', 'newFromTitle' );
+ var $oldFileFactoryKey = array( 'OldLocalFile', 'newFromKey' );
+ var $oldFileFromRowFactory = array( 'OldLocalFile', 'newFromRow' );
/**
* @throws MWException
}
$dbw->commit( __METHOD__ );
}
+
return $status;
}
$options = ( $lock === 'lock' ) ? array( 'FOR UPDATE' ) : array();
$dbw = $this->getMasterDB();
+
return (bool)$dbw->selectField( 'filearchive', '1',
array( 'fa_storage_group' => 'deleted', 'fa_storage_key' => $key ),
__METHOD__, $options
$ext = File::normalizeExtension( substr( $key, strcspn( $key, '.' ) + 1 ) );
$dbw = $this->getMasterDB();
+
return (bool)$dbw->selectField( 'oldimage', '1',
array( 'oi_sha1' => $sha1,
'oi_archive_name ' . $dbw->buildLike( $dbw->anyString(), ".$ext" ),
$id = $this->getArticleID( $title );
if ( !$id ) {
$wgMemc->add( $memcKey, " ", $expiry );
+
return false;
}
$dbr = $this->getSlaveDB();
if ( $row && $row->rd_namespace == NS_FILE ) {
$targetTitle = Title::makeTitle( $row->rd_namespace, $row->rd_title );
$wgMemc->add( $memcKey, $targetTitle->getDBkey(), $expiry );
+
return $targetTitle;
} else {
$wgMemc->add( $memcKey, '', $expiry );
+
return false;
}
}
),
__METHOD__ //Function name
);
+
return $id;
}
'img_name ' . $dbr->buildLike( $prefix, $dbr->anyString() ),
__METHOD__,
$selectOptions
- );
+ );
// Build file objects
$files = array();
foreach ( $res as $row ) {
$files[] = $this->newFileFromRow( $row );
}
+
return $files;
}
*/
function getSharedCacheKey( /*...*/ ) {
$args = func_get_args();
+
return call_user_func_array( 'wfMemcKey', $args );
}
/**
* @param $info array|null
*/
- function __construct( $info ) {}
+ function __construct( $info ) {
+ }
protected function assertWritableRepo() {
throw new MWException( get_class( $this ) . ': write operations are not supported.' );
}
global $wgLocalFileRepo, $wgForeignFileRepos;
self::$instance = new RepoGroup( $wgLocalFileRepo, $wgForeignFileRepos );
+
return self::$instance;
}
# Check the cache
if ( empty( $options['ignoreRedirect'] )
&& empty( $options['private'] )
- && empty( $options['bypassCache'] ) )
- {
+ && empty( $options['bypassCache'] )
+ ) {
$time = isset( $options['time'] ) ? $options['time'] : '';
$dbkey = $title->getDBkey();
if ( isset( $this->cache[$dbkey][$time] ) ) {
wfDebug( __METHOD__ . ": got File:$dbkey from process cache\n" );
# Move it to the end of the list so that we can delete the LRU entry later
$this->pingCache( $dbkey );
+
# Return the entry
return $this->cache[$dbkey][$time];
}
$images = array_merge( $images, $repo->findFiles( $items ) );
}
+
return $images;
}
return $redir;
}
}
+
return false;
}
}
}
}
+
return $file;
}
$result = array_merge( $result, $repo->findBySha1( $hash ) );
}
usort( $result, 'File::compare' );
+
return $result;
}
foreach ( $result as $hash => $files ) {
usort( $result[$hash], 'File::compare' );
}
+
return $result;
}
return $repo;
}
}
+
return false;
}
return true;
}
}
+
return false;
}
*/
protected function newRepo( $info ) {
$class = $info['class'];
+
return new $class( $info );
}
if ( count( $bits ) != 3 ) {
throw new MWException( __METHOD__ . ": invalid mwrepo URL: $url" );
}
+
return $bits;
}
$repoName = 'local';
}
$repo = $this->getRepo( $repoName );
+
return $repo->getFileProps( $fileName );
} else {
return FSFile::getPropsFromPath( $fileName );
*/
var $id, # filearchive row ID
$name, # image name
- $group, # FileStore storage group
+ $group, # FileStore storage group
$key, # FileStore sha1 key
$size, # file dimensions
- $bits, # size in bytes
+ $bits, # size in bytes
$width, # width
$height, # height
$metadata, # metadata string
public static function newFromRow( $row ) {
$file = new ArchivedFile( Title::makeTitle( NS_FILE, $row->fa_name ) );
$file->loadFromRow( $row );
+
return $file;
}
*/
public function getID() {
$this->load();
+
return $this->id;
}
*/
public function exists() {
$this->load();
+
return $this->exists;
}
*/
public function getKey() {
$this->load();
+
return $this->key;
}
*/
public function getWidth() {
$this->load();
+
return $this->width;
}
*/
public function getHeight() {
$this->load();
+
return $this->height;
}
*/
public function getMetadata() {
$this->load();
+
return $this->metadata;
}
*/
public function getSize() {
$this->load();
+
return $this->size;
}
*/
public function getBits() {
$this->load();
+
return $this->bits;
}
*/
public function getMimeType() {
$this->load();
+
return $this->mime;
}
if ( !isset( $this->handler ) ) {
$this->handler = MediaHandler::getHandler( $this->getMimeType() );
}
+
return $this->handler;
}
$this->pageCount = false;
}
}
+
return $this->pageCount;
}
*/
public function getMediaType() {
$this->load();
+
return $this->media_type;
}
*/
public function getTimestamp() {
$this->load();
+
return wfTimestamp( TS_MW, $this->timestamp );
}
*/
function getSha1() {
$this->load();
+
return $this->sha1;
}
*/
public function getRawUser() {
$this->load();
+
return $this->user;
}
*/
public function getRawUserText() {
$this->load();
+
return $this->user_text;
}
*/
public function getRawDescription() {
$this->load();
+
return $this->description;
}
*/
public function getVisibility() {
$this->load();
+
return $this->deleted;
}
*/
public function isDeleted( $field ) {
$this->load();
+
return ( $this->deleted & $field ) == $field;
}
*/
public function userCan( $field, User $user = null ) {
$this->load();
+
return Revision::userCanBitfield( $this->deleted, $field, $user );
}
}
if ( !$ret && $exception !== false ) {
throw new MWException( "`$title` is not a valid file title." );
}
+
return $ret;
}
return null;
} else {
$this->$name = call_user_func( $function );
+
return $this->$name;
}
}
$n = strrpos( $new, '.' );
$newExt = self::normalizeExtension( $n ? substr( $new, $n + 1 ) : '' );
$mimeMagic = MimeMagic::singleton();
+
return $mimeMagic->isMatchingExtension( $newExt, $oldMime );
}
* Called by ImagePage
* STUB
*/
- function upgradeRow() {}
+ function upgradeRow() {
+ }
/**
* Split an internet media type into its two components; if not
$this->assertRepoDefined();
$this->name = $this->repo->getNameFromTitle( $this->title );
}
+
return $this->name;
}
$this->extension = self::normalizeExtension(
$n ? substr( $this->getName(), $n + 1 ) : '' );
}
+
return $this->extension;
}
if ( $this->redirected ) {
return $this->getRedirectedTitle();
}
+
return $this->title;
}
$ext = $this->getExtension();
$this->url = $this->repo->getZoneUrl( 'public', $ext ) . '/' . $this->getUrlRel();
}
+
return $this->url;
}
} else {
wfDebug( __METHOD__ . ': supposed to render ' . $this->getName() .
' (' . $this->getMimeType() . "), but can't!\n" );
+
return $this->getURL(); #hm... return NULL?
}
} else {
$this->assertRepoDefined();
$this->path = $this->repo->getZonePath( 'public' ) . '/' . $this->getRel();
}
+
return $this->path;
}
$this->fsFile = false; // null => false; cache negative hits
}
}
+
return ( $this->fsFile )
? $this->fsFile->getPath()
: false;
*/
public function getCommonMetaArray() {
$handler = $this->getHandler();
+
return $handler->getCommonMetaArray( $this );
}
if ( !isset( $this->canRender ) ) {
$this->canRender = $this->getHandler() && $this->handler->canRender( $this );
}
+
return $this->canRender;
}
if ( !isset( $this->isSafeFile ) ) {
$this->isSafeFile = $this->_getIsSafeFile();
}
+
return $this->isSafeFile;
}
}
}
}
+
return $this->transformScript;
}
return $this->iconThumb();
}
$hp['width'] = $width;
+
return $this->transform( $hp );
}
$name = ( $this->repo && !( $flags & self::THUMB_FULL_NAME ) )
? $this->repo->nameForThumb( $this->getName() )
: $this->getName();
+
return $this->generateThumbName( $name, $params );
}
if ( $thumbExt != $extension ) {
$thumbName .= ".$thumbExt";
}
+
return $thumbName;
}
if ( is_null( $thumb ) || $thumb->isError() ) {
return '';
}
+
return $thumb->getUrl();
}
} while ( false );
wfProfileOut( __METHOD__ );
+
return is_object( $thumb ) ? $thumb : false;
}
if ( $thumbExt != '' && $thumbExt !== $this->getExtension() ) {
$fileName .= ".$thumbExt";
}
+
return FileBackend::makeContentDisposition( 'inline', $fileName );
}
* STUB
* Overridden by LocalFile
*/
- function migrateThumbFile( $thumbName ) {}
+ function migrateThumbFile( $thumbName ) {
+ }
/**
* Get a MediaHandler instance for this file
if ( !isset( $this->handler ) ) {
$this->handler = MediaHandler::getHandler( $this->getMimeType() );
}
+
return $this->handler;
}
$filepath = $wgStyleDirectory . $path;
if ( file_exists( $filepath ) ) { // always FS
$params = array( 'width' => 120, 'height' => 120 );
+
return new ThumbnailImage( $this, $wgStylePath . $path, false, $params );
}
}
+
return null;
}
* @param array $options Options, which include:
* 'forThumbRefresh' : The purging is only to refresh thumbnails
*/
- function purgeCache( $options = array() ) {}
+ function purgeCache( $options = array() ) {
+ }
/**
* Purge the file description page, but don't go after
* STUB
* Overridden in LocalFile.
*/
- public function resetHistory() {}
+ public function resetHistory() {
+ }
/**
* Get the filename hash component of the directory including trailing slash,
$this->assertRepoDefined();
$this->hashPath = $this->repo->getHashPath( $this->getName() );
}
+
return $this->hashPath;
}
} else {
$path .= $suffix;
}
+
return $path;
}
if ( $suffix !== false ) {
$path .= '/' . $suffix;
}
+
return $path;
}
} else {
$path .= $suffix;
}
+
return $path;
}
*/
function getArchivePath( $suffix = false ) {
$this->assertRepoDefined();
+
return $this->repo->getZonePath( 'public' ) . '/' . $this->getArchiveRel( $suffix );
}
*/
function getArchiveThumbPath( $archiveName, $suffix = false ) {
$this->assertRepoDefined();
+
return $this->repo->getZonePath( 'thumb' ) . '/' .
$this->getArchiveThumbRel( $archiveName, $suffix );
}
*/
function getThumbPath( $suffix = false ) {
$this->assertRepoDefined();
+
return $this->repo->getZonePath( 'thumb' ) . '/' . $this->getThumbRel( $suffix );
}
*/
function getTranscodedPath( $suffix = false ) {
$this->assertRepoDefined();
+
return $this->repo->getZonePath( 'transcoded' ) . '/' . $this->getThumbRel( $suffix );
}
} else {
$path .= rawurlencode( $suffix );
}
+
return $path;
}
} else {
$path .= rawurlencode( $suffix );
}
+
return $path;
}
if ( $suffix !== false ) {
$path .= '/' . rawurlencode( $suffix );
}
+
return $path;
}
if ( $suffix !== false ) {
$path .= '/' . rawurlencode( $suffix );
}
+
return $path;
}
} else {
$path .= rawurlencode( $suffix );
}
+
return $path;
}
if ( $suffix !== false ) {
$path .= '/' . rawurlencode( $suffix );
}
+
return $path;
}
*/
function isHashed() {
$this->assertRepoDefined();
+
return (bool)$this->repo->getHashLevels();
}
* @return bool
* @throws MWException
*/
- function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '', $watch = false, $timestamp = false, User $user = null ) {
+ function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
+ $watch = false, $timestamp = false, User $user = null
+ ) {
$this->readOnlyError();
}
if ( !$this->getHandler() ) {
return false;
}
+
return $this->getHandler()->formatMetadata( $this, $this->getMetadata() );
}
*/
function wasDeleted() {
$title = $this->getTitle();
+
return $title && $title->isDeletedQuick();
}
$this->pageCount = false;
}
}
+
return $this->pageCount;
}
if ( !$this->getHandler() ) {
return false;
}
+
return $this->handler->getImageSize( $this, $fileName );
}
if ( $renderUrl ) {
if ( $this->repo->descriptionCacheExpiry > 0 ) {
wfDebug( "Attempting to get the description from cache..." );
- $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', $lang->getCode(),
- $this->getName() );
+ $key = $this->repo->getLocalCacheKey(
+ 'RemoteFileDescription',
+ 'url',
+ $lang->getCode(),
+ $this->getName()
+ );
$obj = $wgMemc->get( $key );
if ( $obj ) {
wfDebug( "success!\n" );
+
return $obj;
}
wfDebug( "miss\n" );
if ( $res && $this->repo->descriptionCacheExpiry > 0 ) {
$wgMemc->set( $key, $res, $this->repo->descriptionCacheExpiry );
}
+
return $res;
} else {
return false;
*/
function getTimestamp() {
$this->assertRepoDefined();
+
return $this->repo->getFileTimestamp( $this->getPath() );
}
*/
function getSha1() {
$this->assertRepoDefined();
+
return $this->repo->getFileSha1( $this->getPath() );
}
}
$ext = $this->getExtension();
$dotExt = $ext === '' ? '' : ".$ext";
+
return $hash . $dotExt;
}
wfDeprecated( __METHOD__, '1.19' );
$fsFile = new FSFile( $path );
+
return $fsFile->getProps();
}
wfDeprecated( __METHOD__, '1.19' );
$fsFile = new FSFile( $path );
+
return $fsFile->getSha1Base36();
}
if ( !$this->redirectTitle ) {
$this->redirectTitle = Title::makeTitle( NS_FILE, $this->redirected );
}
+
return $this->redirectTitle;
}
+
return null;
}
} else {
$img = new self( $title, $repo, $info, true );
}
+
return $img;
} else {
return null;
);
if ( $thumbUrl === false ) {
global $wgLang;
+
return $this->repo->getThumbError(
$this->getName(),
$width,
$wgLang->getCode()
);
}
+
return $this->handler->getTransform( $this, 'bogus', $thumbUrl, $params );
}
if ( isset( $this->mInfo['metadata'] ) ) {
return serialize( self::parseMetadata( $this->mInfo['metadata'] ) );
}
+
return null;
}
if ( isset( $this->mInfo['extmetadata'] ) ) {
return $this->mInfo['extmetadata'];
}
+
return null;
}
foreach ( $metadata as $meta ) {
$ret[$meta['name']] = self::parseMetadata( $meta['value'] );
}
+
return $ret;
}
$magic = MimeMagic::singleton();
$this->mInfo['mime'] = $magic->guessTypesForExtension( $this->getExtension() );
}
+
return $this->mInfo['mime'];
}
return $this->mInfo['mediatype'];
}
$magic = MimeMagic::singleton();
+
return $magic->getMediaType( null, $this->getMimeType() );
}
if ( $suffix ) {
$path = $path . $suffix . '/';
}
+
return $path;
} else {
return null;
* @ingroup FileAbstraction
*/
class ForeignDBFile extends LocalFile {
-
/**
* @param $title
* @param $repo
$title = Title::makeTitle( NS_FILE, $row->img_name );
$file = new self( $title, $repo );
$file->loadFromRow( $row );
+
return $file;
}
if ( !$key ) {
wfProfileOut( __METHOD__ );
+
return false;
}
}
wfProfileOut( __METHOD__ );
+
return $this->dataLoaded;
}
*/
function getCacheFields( $prefix = 'img_' ) {
static $fields = array( 'size', 'width', 'height', 'bits', 'media_type',
- 'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user', 'user_text', 'description' );
+ 'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user',
+ 'user_text', 'description' );
static $results = array();
if ( $prefix == '' ) {
foreach ( $array as $name => $value ) {
$decoded[substr( $name, $prefixLength )] = $value;
}
+
return $decoded;
}
if ( !$this->fileExists ) {
wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
wfProfileOut( __METHOD__ );
+
return;
}
if ( wfReadOnly() ) {
wfProfileOut( __METHOD__ );
+
return;
}
wfDebug( __METHOD__ . ': upgrading ' . $this->getName() . " to the current schema\n" );
'img_media_type' => $this->media_type,
'img_major_mime' => $major,
'img_minor_mime' => $minor,
- 'img_metadata' => $dbw->encodeBlob($this->metadata),
+ 'img_metadata' => $dbw->encodeBlob( $this->metadata ),
'img_sha1' => $this->sha1,
),
array( 'img_name' => $this->getName() ),
list( $fileExists ) = $this->repo->fileExists( $this->getVirtualUrl() );
$this->missing = !$fileExists;
}
+
return $this->missing;
}
*/
function getBitDepth() {
$this->load();
+
return $this->bits;
}
*/
public function getSize() {
$this->load();
+
return $this->size;
}
*/
function getMimeType() {
$this->load();
+
return $this->mime;
}
*/
function getMediaType() {
$this->load();
+
return $this->media_type;
}
*/
public function exists() {
$this->load();
+
return $this->fileExists;
}
clearstatcache();
}
*/
-
/*
if ( $this->repo->fileExists( $thumbDir ) ) {
// Delete file where directory should be
foreach ( $iterator as $file ) {
$files[] = $file;
}
- } catch ( FileBackendError $e ) {} // suppress (bug 54674)
+ } catch ( FileBackendError $e ) {
+ } // suppress (bug 54674)
return $files;
}
$dbr = $this->repo->getSlaveDB();
- if ( $this->historyLine == 0 ) {// called for the first time, return line from cur
+ if ( $this->historyLine == 0 ) { // called for the first time, return line from cur
$this->historyRes = $dbr->select( 'image',
array(
'*',
if ( 0 == $dbr->numRows( $this->historyRes ) ) {
$this->historyRes = null;
+
return false;
}
} elseif ( $this->historyLine == 1 ) {
array( 'ORDER BY' => 'oi_timestamp DESC' )
);
}
- $this->historyLine ++;
+ $this->historyLine++;
return $dbr->fetchObject( $this->historyRes );
}
* @return FileRepoStatus object. On success, the value member contains the
* archive name, or an empty string if it was a new file.
*/
- function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false, $timestamp = false, $user = null ) {
+ function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false,
+ $timestamp = false, $user = null
+ ) {
global $wgContLang;
if ( $this->getRepo()->getReadOnlyReason() !== false ) {
if ( !$props ) {
wfProfileIn( __METHOD__ . '-getProps' );
if ( $this->repo->isVirtualUrl( $srcPath )
- || FileBackend::isStoragePath( $srcPath ) )
- {
+ || FileBackend::isStoragePath( $srcPath )
+ ) {
$props = $this->repo->getFileProps( $srcPath );
} else {
$props = FSFile::getPropsFromPath( $srcPath );
* @return bool
*/
function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
- $watch = false, $timestamp = false, User $user = null )
- {
+ $watch = false, $timestamp = false, User $user = null ) {
if ( !$user ) {
global $wgUser;
$user = $wgUser;
if ( $watch ) {
$user->addWatch( $this->getTitle() );
}
+
return true;
}
if ( !$this->fileExists ) {
wfDebug( __METHOD__ . ": File " . $this->getRel() . " went missing!\n" );
wfProfileOut( __METHOD__ );
+
return false;
}
'img_description' => $comment,
'img_user' => $user->getId(),
'img_user_text' => $user->getName(),
- 'img_metadata' => $dbw->encodeBlob($this->metadata),
+ 'img_metadata' => $dbw->encodeBlob( $this->metadata ),
'img_sha1' => $this->sha1
),
__METHOD__,
# Insert previous contents into oldimage
$dbw->insertSelect( 'oldimage', 'image',
array(
- 'oi_name' => 'img_name',
+ 'oi_name' => 'img_name',
'oi_archive_name' => $dbw->addQuotes( $oldver ),
- 'oi_size' => 'img_size',
- 'oi_width' => 'img_width',
- 'oi_height' => 'img_height',
- 'oi_bits' => 'img_bits',
- 'oi_timestamp' => 'img_timestamp',
- 'oi_description' => 'img_description',
- 'oi_user' => 'img_user',
- 'oi_user_text' => 'img_user_text',
- 'oi_metadata' => 'img_metadata',
- 'oi_media_type' => 'img_media_type',
- 'oi_major_mime' => 'img_major_mime',
- 'oi_minor_mime' => 'img_minor_mime',
- 'oi_sha1' => 'img_sha1'
+ 'oi_size' => 'img_size',
+ 'oi_width' => 'img_width',
+ 'oi_height' => 'img_height',
+ 'oi_bits' => 'img_bits',
+ 'oi_timestamp' => 'img_timestamp',
+ 'oi_description' => 'img_description',
+ 'oi_user' => 'img_user',
+ 'oi_user_text' => 'img_user_text',
+ 'oi_metadata' => 'img_metadata',
+ 'oi_media_type' => 'img_media_type',
+ 'oi_major_mime' => 'img_major_mime',
+ 'oi_minor_mime' => 'img_minor_mime',
+ 'oi_sha1' => 'img_sha1'
),
array( 'img_name' => $this->getName() ),
__METHOD__
# Update the current image row
$dbw->update( 'image',
array( /* SET */
- 'img_size' => $this->size,
- 'img_width' => intval( $this->width ),
- 'img_height' => intval( $this->height ),
- 'img_bits' => $this->bits,
- 'img_media_type' => $this->media_type,
- 'img_major_mime' => $this->major_mime,
- 'img_minor_mime' => $this->minor_mime,
- 'img_timestamp' => $timestamp,
+ 'img_size' => $this->size,
+ 'img_width' => intval( $this->width ),
+ 'img_height' => intval( $this->height ),
+ 'img_bits' => $this->bits,
+ 'img_media_type' => $this->media_type,
+ 'img_major_mime' => $this->major_mime,
+ 'img_minor_mime' => $this->minor_mime,
+ 'img_timestamp' => $timestamp,
'img_description' => $comment,
- 'img_user' => $user->getId(),
- 'img_user_text' => $user->getName(),
- 'img_metadata' => $dbw->encodeBlob($this->metadata),
- 'img_sha1' => $this->sha1
+ 'img_user' => $user->getId(),
+ 'img_user_text' => $user->getName(),
+ 'img_metadata' => $dbw->encodeBlob( $this->metadata ),
+ 'img_sha1' => $this->sha1
),
array( 'img_name' => $this->getName() ),
__METHOD__
# There's already a log entry, so don't make a second RC entry
# Squid and file cache for the description page are purged by doEditContent.
$content = ContentHandler::makeContent( $pageText, $descTitle );
- $status = $wikiPage->doEditContent( $content, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
+ $status = $wikiPage->doEditContent(
+ $content,
+ $comment,
+ EDIT_NEW | EDIT_SUPPRESS_RC,
+ false,
+ $user
+ );
$dbw->begin( __METHOD__ ); // XXX; doEdit() uses a transaction
// Now that the page exists, make an RC entry.
$dbw->commit( __METHOD__ ); // commit before anything bad can happen
}
-
wfProfileOut( __METHOD__ . '-edit' );
# Save to cache and purge the squid
}
wfProfileOut( __METHOD__ );
+
return true;
}
*
* @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
+ * File::DELETE_SOURCE Delete the source file, i.e. move rather than copy
* @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.
* @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
+ * File::DELETE_SOURCE Delete the source file, i.e. move rather than copy
* @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.
// Hack: the lock()/unlock() pair is nested in a transaction so the locking is not
// tied to BEGIN/COMMIT. To avoid slow purges in the transaction, move them outside.
$this->getRepo()->getMasterDB()->onTransactionIdle(
- function() use ( $oldTitleFile, $newTitleFile, $archiveNames ) {
+ function () use ( $oldTitleFile, $newTitleFile, $archiveNames ) {
$oldTitleFile->purgeEverything();
foreach ( $archiveNames as $archiveName ) {
$oldTitleFile->purgeOldThumbnails( $archiveName );
// tied to BEGIN/COMMIT. To avoid slow purges in the transaction, move them outside.
$file = $this;
$this->getRepo()->getMasterDB()->onTransactionIdle(
- function() use ( $file, $archiveNames ) {
+ function () use ( $file, $archiveNames ) {
global $wgUseSquid;
$file->purgeEverything();
return false;
}
$pout = $content->getParserOutput( $this->title, null, new ParserOptions( null, $lang ) );
+
return $pout->getText();
}
if ( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_COMMENT ) ) {
return '';
} elseif ( $audience == self::FOR_THIS_USER
- && !$this->userCan( self::DELETED_COMMENT, $user ) )
- {
+ && !$this->userCan( self::DELETED_COMMENT, $user )
+ ) {
return '';
} else {
return $this->description;
*/
function getTimestamp() {
$this->load();
+
return $this->timestamp;
}
*/
function isCacheable() {
$this->load();
+
// If extra data (metadata) was not loaded then it must have been large
return $this->extraDataLoaded
- && strlen( serialize( $this->metadata ) ) <= self::CACHE_FIELD_MAX_LEN;
+ && strlen( serialize( $this->metadata ) ) <= self::CACHE_FIELD_MAX_LEN;
}
/**
if ( !$cache->lock( $key, 60 ) ) {
throw new MWException( "Could not acquire lock for '{$this->getName()}.'" );
}
- $dbw->onTransactionIdle( function() use ( $cache, $key ) {
+ $dbw->onTransactionIdle( function () use ( $cache, $key ) {
$cache->unlock( $key ); // release on commit
} );
}
$dbw->insertSelect( 'filearchive', 'image',
array(
'fa_storage_group' => $encGroup,
- 'fa_storage_key' => "CASE WHEN img_sha1='' THEN '' ELSE $concat END",
- 'fa_deleted_user' => $encUserId,
+ 'fa_storage_key' => "CASE WHEN img_sha1='' THEN '' ELSE $concat END",
+ 'fa_deleted_user' => $encUserId,
'fa_deleted_timestamp' => $encTimestamp,
- 'fa_deleted_reason' => $encReason,
- 'fa_deleted' => $this->suppress ? $bitfield : 0,
+ 'fa_deleted_reason' => $encReason,
+ 'fa_deleted' => $this->suppress ? $bitfield : 0,
- 'fa_name' => 'img_name',
+ 'fa_name' => 'img_name',
'fa_archive_name' => 'NULL',
- 'fa_size' => 'img_size',
- 'fa_width' => 'img_width',
- 'fa_height' => 'img_height',
- 'fa_metadata' => 'img_metadata',
- 'fa_bits' => 'img_bits',
- 'fa_media_type' => 'img_media_type',
- 'fa_major_mime' => 'img_major_mime',
- 'fa_minor_mime' => 'img_minor_mime',
- 'fa_description' => 'img_description',
- 'fa_user' => 'img_user',
- 'fa_user_text' => 'img_user_text',
- 'fa_timestamp' => 'img_timestamp',
- 'fa_sha1' => 'img_sha1',
+ 'fa_size' => 'img_size',
+ 'fa_width' => 'img_width',
+ 'fa_height' => 'img_height',
+ 'fa_metadata' => 'img_metadata',
+ 'fa_bits' => 'img_bits',
+ 'fa_media_type' => 'img_media_type',
+ 'fa_major_mime' => 'img_major_mime',
+ 'fa_minor_mime' => 'img_minor_mime',
+ 'fa_description' => 'img_description',
+ 'fa_user' => 'img_user',
+ 'fa_user_text' => 'img_user_text',
+ 'fa_timestamp' => 'img_timestamp',
+ 'fa_sha1' => 'img_sha1',
), $where, __METHOD__ );
}
$dbw->insertSelect( 'filearchive', 'oldimage',
array(
'fa_storage_group' => $encGroup,
- 'fa_storage_key' => "CASE WHEN oi_sha1='' THEN '' ELSE $concat END",
- 'fa_deleted_user' => $encUserId,
+ 'fa_storage_key' => "CASE WHEN oi_sha1='' THEN '' ELSE $concat END",
+ 'fa_deleted_user' => $encUserId,
'fa_deleted_timestamp' => $encTimestamp,
- 'fa_deleted_reason' => $encReason,
- 'fa_deleted' => $this->suppress ? $bitfield : 'oi_deleted',
+ 'fa_deleted_reason' => $encReason,
+ 'fa_deleted' => $this->suppress ? $bitfield : 'oi_deleted',
- 'fa_name' => 'oi_name',
+ 'fa_name' => 'oi_name',
'fa_archive_name' => 'oi_archive_name',
- 'fa_size' => 'oi_size',
- 'fa_width' => 'oi_width',
- 'fa_height' => 'oi_height',
- 'fa_metadata' => 'oi_metadata',
- 'fa_bits' => 'oi_bits',
- 'fa_media_type' => 'oi_media_type',
- 'fa_major_mime' => 'oi_major_mime',
- 'fa_minor_mime' => 'oi_minor_mime',
- 'fa_description' => 'oi_description',
- 'fa_user' => 'oi_user',
- 'fa_user_text' => 'oi_user_text',
- 'fa_timestamp' => 'oi_timestamp',
- 'fa_sha1' => 'oi_sha1',
+ 'fa_size' => 'oi_size',
+ 'fa_width' => 'oi_width',
+ 'fa_height' => 'oi_height',
+ 'fa_metadata' => 'oi_metadata',
+ 'fa_bits' => 'oi_bits',
+ 'fa_media_type' => 'oi_media_type',
+ 'fa_major_mime' => 'oi_major_mime',
+ 'fa_minor_mime' => 'oi_minor_mime',
+ 'fa_description' => 'oi_description',
+ 'fa_user' => 'oi_user',
+ 'fa_user_text' => 'oi_user_text',
+ 'fa_timestamp' => 'oi_timestamp',
+ 'fa_sha1' => 'oi_sha1',
), $where, __METHOD__ );
}
}
// TODO: delete the defunct filearchive rows if we are using a non-transactional DB
$this->file->unlockAndRollback();
wfProfileOut( __METHOD__ );
+
return $this->status;
}
continue;
}
- $deletedRel = $this->file->repo->getDeletedHashPath( $row->fa_storage_key ) . $row->fa_storage_key;
+ $deletedRel = $this->file->repo->getDeletedHashPath( $row->fa_storage_key ) .
+ $row->fa_storage_key;
$deletedUrl = $this->file->repo->getVirtualUrl() . '/deleted/' . $deletedRel;
if ( isset( $row->fa_sha1 ) ) {
if ( is_null( $row->fa_major_mime ) || $row->fa_major_mime == 'unknown'
|| is_null( $row->fa_minor_mime ) || $row->fa_minor_mime == 'unknown'
|| is_null( $row->fa_media_type ) || $row->fa_media_type == 'UNKNOWN'
- || is_null( $row->fa_metadata ) ) {
+ || is_null( $row->fa_metadata )
+ ) {
// Refresh our metadata
// Required for a new current revision; nice for older ones too. :)
$props = RepoGroup::singleton()->getFileProps( $deletedUrl );
'minor_mime' => $row->fa_minor_mime,
'major_mime' => $row->fa_major_mime,
'media_type' => $row->fa_media_type,
- 'metadata' => $row->fa_metadata
+ 'metadata' => $row->fa_metadata
);
}
// This revision will be published as the new current version
$destRel = $this->file->getRel();
$insertCurrent = array(
- 'img_name' => $row->fa_name,
- 'img_size' => $row->fa_size,
- 'img_width' => $row->fa_width,
- 'img_height' => $row->fa_height,
- 'img_metadata' => $props['metadata'],
- 'img_bits' => $row->fa_bits,
- 'img_media_type' => $props['media_type'],
- 'img_major_mime' => $props['major_mime'],
- 'img_minor_mime' => $props['minor_mime'],
+ 'img_name' => $row->fa_name,
+ 'img_size' => $row->fa_size,
+ 'img_width' => $row->fa_width,
+ 'img_height' => $row->fa_height,
+ 'img_metadata' => $props['metadata'],
+ 'img_bits' => $row->fa_bits,
+ 'img_media_type' => $props['media_type'],
+ 'img_major_mime' => $props['major_mime'],
+ 'img_minor_mime' => $props['minor_mime'],
'img_description' => $row->fa_description,
- 'img_user' => $row->fa_user,
- 'img_user_text' => $row->fa_user_text,
- 'img_timestamp' => $row->fa_timestamp,
- 'img_sha1' => $sha1
+ 'img_user' => $row->fa_user,
+ 'img_user_text' => $row->fa_user_text,
+ 'img_timestamp' => $row->fa_timestamp,
+ 'img_sha1' => $sha1
);
// The live (current) version cannot be hidden!
$archiveNames[$archiveName] = true;
$destRel = $this->file->getArchiveRel( $archiveName );
$insertBatch[] = array(
- 'oi_name' => $row->fa_name,
+ 'oi_name' => $row->fa_name,
'oi_archive_name' => $archiveName,
- 'oi_size' => $row->fa_size,
- 'oi_width' => $row->fa_width,
- 'oi_height' => $row->fa_height,
- 'oi_bits' => $row->fa_bits,
- 'oi_description' => $row->fa_description,
- 'oi_user' => $row->fa_user,
- 'oi_user_text' => $row->fa_user_text,
- 'oi_timestamp' => $row->fa_timestamp,
- 'oi_metadata' => $props['metadata'],
- 'oi_media_type' => $props['media_type'],
- 'oi_major_mime' => $props['major_mime'],
- 'oi_minor_mime' => $props['minor_mime'],
- 'oi_deleted' => $this->unsuppress ? 0 : $row->fa_deleted,
- 'oi_sha1' => $sha1 );
+ 'oi_size' => $row->fa_size,
+ 'oi_width' => $row->fa_width,
+ 'oi_height' => $row->fa_height,
+ 'oi_bits' => $row->fa_bits,
+ 'oi_description' => $row->fa_description,
+ 'oi_user' => $row->fa_user,
+ 'oi_user_text' => $row->fa_user_text,
+ 'oi_timestamp' => $row->fa_timestamp,
+ 'oi_metadata' => $props['metadata'],
+ 'oi_media_type' => $props['media_type'],
+ 'oi_major_mime' => $props['major_mime'],
+ 'oi_minor_mime' => $props['minor_mime'],
+ 'oi_deleted' => $this->unsuppress ? 0 : $row->fa_deleted,
+ 'oi_sha1' => $sha1 );
}
$deleteIds[] = $row->fa_id;
if ( !$statusDb->isGood() ) {
$this->file->unlockAndRollback();
$statusDb->ok = false;
+
return $statusDb;
}
- wfDebugLog( 'imagemove', "Renamed {$this->file->getName()} in database: {$statusDb->successCount} successes, {$statusDb->failCount} failures" );
+ wfDebugLog( 'imagemove', "Renamed {$this->file->getName()} in database: " .
+ "{$statusDb->successCount} successes, {$statusDb->failCount} failures" );
// Copy the files into their new location.
// If a prior process fataled copying or cleaning up files we tolerate any
// of the existing files if they are identical to the ones being stored.
$statusMove = $repo->storeBatch( $triplets, FileRepo::OVERWRITE_SAME );
- wfDebugLog( 'imagemove', "Moved files for {$this->file->getName()}: {$statusMove->successCount} successes, {$statusMove->failCount} failures" );
+ wfDebugLog( 'imagemove', "Moved files for {$this->file->getName()}: " .
+ "{$statusMove->successCount} successes, {$statusMove->failCount} failures" );
if ( !$statusMove->isGood() ) {
// Delete any files copied over (while the destination is still locked)
$this->cleanupTarget( $triplets );
$this->file->unlockAndRollback(); // unlocks the destination
wfDebugLog( 'imagemove', "Error in moving files: " . $statusMove->getWikiText() );
$statusMove->ok = false;
+
return $statusMove;
}
$this->file->unlock(); // done
} else {
$status->failCount++;
$status->fatal( 'imageinvalidfilename' );
+
return $status;
}
// $move: (oldRelativePath, newRelativePath)
$srcUrl = $this->file->repo->getVirtualUrl() . '/public/' . rawurlencode( $move[0] );
$triplets[] = array( $srcUrl, 'public', $move[1] );
- wfDebugLog( 'imagemove', "Generated move triplet for {$this->file->getName()}: {$srcUrl} :: public :: {$move[1]}" );
+ wfDebugLog(
+ 'imagemove',
+ "Generated move triplet for {$this->file->getName()}: {$srcUrl} :: public :: {$move[1]}"
+ );
}
return $triplets;
if ( $time === null ) {
throw new MWException( __METHOD__ . ' got null for $time parameter' );
}
+
return new self( $title, $repo, $time, null );
}
$title = Title::makeTitle( NS_FILE, $row->oi_name );
$file = new self( $title, $repo, null, $row->oi_archive_name );
$file->loadFromRow( $row, 'oi_' );
+
return $file;
}
if ( !isset( $this->archive_name ) ) {
$this->load();
}
+
return $this->archive_name;
}
$fields = parent::getCacheFields( $prefix );
$fields[] = $prefix . 'archive_name';
$fields[] = $prefix . 'deleted';
+
return $fields;
}
if ( !$this->fileExists ) {
wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
wfProfileOut( __METHOD__ );
+
return;
}
wfDebug( __METHOD__ . ': upgrading ' . $this->archive_name . " to the current schema\n" );
$dbw->update( 'oldimage',
array(
- 'oi_size' => $this->size, // sanity
- 'oi_width' => $this->width,
- 'oi_height' => $this->height,
- 'oi_bits' => $this->bits,
+ 'oi_size' => $this->size, // sanity
+ 'oi_width' => $this->width,
+ 'oi_height' => $this->height,
+ 'oi_bits' => $this->bits,
'oi_media_type' => $this->media_type,
'oi_major_mime' => $major,
'oi_minor_mime' => $minor,
- 'oi_metadata' => $this->metadata,
- 'oi_sha1' => $this->sha1,
+ 'oi_metadata' => $this->metadata,
+ 'oi_sha1' => $this->sha1,
), array(
'oi_name' => $this->getName(),
'oi_archive_name' => $this->archive_name ),
*/
function isDeleted( $field ) {
$this->load();
+
return ( $this->deleted & $field ) == $field;
}
*/
function getVisibility() {
$this->load();
+
return (int)$this->deleted;
}
*/
function userCan( $field, User $user = null ) {
$this->load();
+
return Revision::userCanBitfield( $this->deleted, $field, $user );
}
$dbw->insert( 'oldimage',
array(
- 'oi_name' => $this->getName(),
+ 'oi_name' => $this->getName(),
'oi_archive_name' => $archiveName,
- 'oi_size' => $props['size'],
- 'oi_width' => intval( $props['width'] ),
- 'oi_height' => intval( $props['height'] ),
- 'oi_bits' => $props['bits'],
- 'oi_timestamp' => $dbw->timestamp( $timestamp ),
- 'oi_description' => $comment,
- 'oi_user' => $user->getId(),
- 'oi_user_text' => $user->getName(),
- 'oi_metadata' => $props['metadata'],
- 'oi_media_type' => $props['media_type'],
- 'oi_major_mime' => $props['major_mime'],
- 'oi_minor_mime' => $props['minor_mime'],
- 'oi_sha1' => $props['sha1'],
+ 'oi_size' => $props['size'],
+ 'oi_width' => intval( $props['width'] ),
+ 'oi_height' => intval( $props['height'] ),
+ 'oi_bits' => $props['bits'],
+ 'oi_timestamp' => $dbw->timestamp( $timestamp ),
+ 'oi_description' => $comment,
+ 'oi_user' => $user->getId(),
+ 'oi_user_text' => $user->getName(),
+ 'oi_metadata' => $props['metadata'],
+ 'oi_media_type' => $props['media_type'],
+ 'oi_major_mime' => $props['major_mime'],
+ 'oi_minor_mime' => $props['minor_mime'],
+ 'oi_sha1' => $props['sha1'],
), __METHOD__
);
return true;
}
-
}
*/
function __construct( $title = false, $repo = false, $path = false, $mime = false ) {
if ( !( $title && $repo ) && !$path ) {
- throw new MWException( __METHOD__ . ': not enough parameters, must specify title and repo, or a full path' );
+ throw new MWException( __METHOD__ .
+ ': not enough parameters, must specify title and repo, or a full path' );
}
if ( $title instanceof Title ) {
$this->title = File::normalizeTitle( $title, 'exception' );
}
$this->dims[$page] = $this->handler->getPageDimensions( $this, $page );
}
+
return $this->dims[$page];
}
*/
function getWidth( $page = 1 ) {
$dim = $this->cachePageDimensions( $page );
+
return $dim['width'];
}
*/
function getHeight( $page = 1 ) {
$dim = $this->cachePageDimensions( $page );
+
return $dim['height'];
}
$magic = MimeMagic::singleton();
$this->mime = $magic->guessMimeType( $this->getLocalRefPath() );
}
+
return $this->mime;
}
if ( !$this->getHandler() ) {
return false;
}
+
return $this->handler->getImageSize( $this, $this->getLocalRefPath() );
}
$this->metadata = $this->handler->getMetadata( $this, $this->getLocalRefPath() );
}
}
+
return $this->metadata;
}
*/
function getSize() {
$this->assertRepoDefined();
+
return $this->repo->getFileSize( $this->path );
}
}
}
- static private function loadModes() {
+ private static function loadModes() {
if ( self::$modeMapping === false ) {
self::$modeMapping = array(
'traditional' => 'TraditionalImageGallery',
class TraditionalImageGallery extends ImageGalleryBase {
-
/**
* Return a HTML representation of the image gallery
*
) . "<br />\n" :
'';
-
$galleryText = $textlink . $text . $fileSize;
$galleryText = $this->wrapGalleryText( $galleryText, $thumb );
return $output;
}
-
/**
* Add the wrapper html around the thumb's caption
*
if ( $status->isOK() ) {
$status->value->setSchemaVars( $this->getSchemaVars() );
} else {
- throw new MWException( __METHOD__ . ': unexpected DB connection error' );
+ $msg = __METHOD__ . ': unexpected error while establishing'
+ . ' a database connection with message: '
+ . $status->getMessage()->plain();
+ throw new MWException( $msg );
}
}
protected function disableContentHandlerUseDB() {
global $wgContentHandlerUseDB;
- if( $wgContentHandlerUseDB ) {
+ if ( $wgContentHandlerUseDB ) {
$this->output( "Turning off Content Handler DB fields for this part of upgrade.\n" );
$this->holdContentHandlerUseDB = $wgContentHandlerUseDB;
$wgContentHandlerUseDB = false;
protected function enableContentHandlerUseDB() {
global $wgContentHandlerUseDB;
- if( $this->holdContentHandlerUseDB ) {
+ if ( $this->holdContentHandlerUseDB ) {
$this->output( "Content Handler DB fields should be usable now.\n" );
$wgContentHandlerUseDB = $this->holdContentHandlerUseDB;
}
}
}
- $wgServerSetting = "";
+ $serverSetting = "";
if ( array_key_exists( 'wgServer', $this->values ) && $this->values['wgServer'] !== null ) {
- $wgServerSetting = "\n## The protocol and server name to use in fully-qualified URLs\n";
- $wgServerSetting .= "\$wgServer = \"{$this->values['wgServer']}\";\n";
+ $serverSetting = "\n## The protocol and server name to use in fully-qualified URLs\n";
+ $serverSetting .= "\$wgServer = \"{$this->values['wgServer']}\";\n";
}
switch ( $this->values['wgMainCacheType'] ) {
## http://www.mediawiki.org/wiki/Manual:Short_URL
\$wgScriptPath = \"{$this->values['wgScriptPath']}\";
\$wgScriptExtension = \"{$this->values['wgScriptExtension']}\";
-${wgServerSetting}
+${serverSetting}
## The relative URL path to the skins directory
\$wgStylePath = \"\$wgScriptPath/skins\";
array( 'addSequence', 'logging', false, 'logging_log_id_seq' ),
array( 'addSequence', 'page_restrictions', false, 'page_restrictions_pr_id_seq' ),
array( 'addSequence', 'filearchive', 'fa_id', 'filearchive_fa_id_seq' ),
+ array( 'addSequence', 'archive', false, 'archive_ar_id_seq' ),
+ array( 'addSequence', 'externallinks', false, 'externallinks_el_id_seq' ),
# new tables
array( 'addTable', 'category', 'patch-category.sql' ),
$this->phpErrors = array();
set_error_handler( array( $this, 'errorHandler' ) );
- session_start();
+ try {
+ session_start();
+ } catch ( Exception $e ) {
+ restore_error_handler();
+ throw $e;
+ }
restore_error_handler();
if ( $this->phpErrors ) {
</div></div>
-
<div id="mw-panel">
<div class="portal" id="p-logo">
<a style="background-image: url(../skins/common/images/mediawiki.png);"
/** @var RedisConnectionPool */
protected $redisPool;
+ /** @var Array List of Redis server addresses */
+ protected $servers;
+
/**
* @params include:
- * - redisConfig : An array of parameters to RedisConnectionPool::__construct().
- * - redisServer : A hostname/port combination or the absolute path of a UNIX socket.
- * If a hostname is specified but no port, the standard port number
- * 6379 will be used. Required.
+ * - redisConfig : An array of parameters to RedisConnectionPool::__construct().
+ * - redisServers : Array of server entries, the first being the primary and the
+ * others being fallback servers. Each entry is either a hostname/port
+ * combination or the absolute path of a UNIX socket.
+ * If a hostname is specified but no port, the standard port number
+ * 6379 will be used. Required.
* @param array $params
*/
protected function __construct( array $params ) {
parent::__construct( $params );
- $this->server = $params['redisServer'];
+ $this->servers = isset( $params['redisServers'] )
+ ? $params['redisServers']
+ : array( $params['redisServer'] ); // b/c
$this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
}
- /**
- * @see JobQueueAggregator::doNotifyQueueEmpty()
- */
protected function doNotifyQueueEmpty( $wiki, $type ) {
$conn = $this->getConnection();
if ( !$conn ) {
}
}
- /**
- * @see JobQueueAggregator::doNotifyQueueNonEmpty()
- */
protected function doNotifyQueueNonEmpty( $wiki, $type ) {
$conn = $this->getConnection();
if ( !$conn ) {
}
}
- /**
- * @see JobQueueAggregator::doAllGetReadyWikiQueues()
- */
protected function doGetAllReadyWikiQueues() {
$conn = $this->getConnection();
if ( !$conn ) {
}
}
- /**
- * @see JobQueueAggregator::doPurge()
- */
protected function doPurge() {
$conn = $this->getConnection();
if ( !$conn ) {
/**
* Get a connection to the server that handles all sub-queues for this queue
*
- * @return Array (server name, Redis instance)
+ * @return RedisConnRef|bool Returns false on failure
* @throws MWException
*/
protected function getConnection() {
- return $this->redisPool->getConnection( $this->server );
+ $conn = false;
+ foreach ( $this->servers as $server ) {
+ $conn = $this->redisPool->getConnection( $server );
+ if ( $conn ) {
+ break;
+ }
+ }
+ return $conn;
}
/**
* @return void
*/
protected function handleException( RedisConnRef $conn, $e ) {
- $this->redisPool->handleException( $this->server, $conn, $e );
+ $this->redisPool->handleException( $conn->getServer(), $conn, $e );
}
/**
/**
* Construct a job
- * @param $title Title: the title linked to
+ * @param Title $title The title linked to
* @param array $params job parameters (table, start and end page_ids)
- * @param $id Integer: job id
+ * @param int $id Job id
*/
function __construct( $title, $params, $id = 0 ) {
global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
* using a pre-calculated title array which gives the links in that range.
* Queue the resulting jobs.
*
- * @param $titleArray array
- * @param $rootJobParams array
- * @return void
+ * @param array $titleArray
+ * @param array $rootJobParams
*/
protected function insertJobsFromTitles( $titleArray, $rootJobParams = array() ) {
// Carry over any "root job" information
}
/**
- * @param $rootJobParams array
- * @return void
+ * @param array $rootJobParams
*/
protected function insertPartitionJobs( $rootJobParams = array() ) {
// Carry over any "root job" information
/**
* Invalidate an array (or iterator) of Title objects, right now
- * @param $titleArray array
+ * @param array $titleArray
*/
protected function invalidateTitles( $titleArray ) {
global $wgUseFileCache, $wgUseSquid;
# Get all IDs in this query into an array
$ids = array();
+ /** @var Title $title */
foreach ( $titleArray as $title ) {
$ids[] = $title->getArticleID();
}
return false;
}
-
UploadBase::setSessionStatus(
$this->params['filekey'],
array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
imagejpeg( $dst_image, $thumbPath, 95 );
}
-
/**
* Returns whether the current scaler supports rotation (im and gd do)
*
function getMetadataArray() {
// this seems a bit ugly... This is all so its merged in right order
// based on the MWG recomendation.
- $temp = Array();
+ $temp = array();
krsort( $this->metaPriority );
foreach ( $this->metaPriority as $pri ) {
foreach ( $pri as $type ) {
$seg = JpegMetadataExtractor::segmentSplitter( $filename );
if ( isset( $seg['COM'] ) && isset( $seg['COM'][0] ) ) {
- $meta->addMetadata( Array( 'JPEGFileComment' => $seg['COM'] ), 'native' );
+ $meta->addMetadata( array( 'JPEGFileComment' => $seg['COM'] ), 'native' );
}
if ( isset( $seg['PSIR'] ) && count( $seg['PSIR'] ) > 0 ) {
foreach ( $seg['PSIR'] as $curPSIRValue ) {
* Make $this->mFilteredExifData
*/
function makeFilteredData() {
- $this->mFilteredExifData = Array();
+ $this->mFilteredExifData = array();
foreach ( array_keys( $this->mRawExifData ) as $section ) {
if ( !in_array( $section, array_keys( $this->mExifTags ) ) ) {
// This seems ugly to wrap non-array's in an array just to unwrap again,
// especially when most of the time it is not an array
if ( !is_array( $tags[$tag] ) ) {
- $vals = Array( $vals );
+ $vals = array( $vals );
}
// _type is a special value to say what array type
$defaultItem = $vals['x-default'];
unset( $vals['x-default'] );
}
- foreach( $priorityLanguages as $pLang ) {
+ foreach ( $priorityLanguages as $pLang ) {
if ( isset( $vals[$pLang] ) ) {
$isDefault = false;
if ( $vals[$pLang] === $defaultItem ) {
// If revision deleted, exit immediately
if ( $file->isDeleted( File::DELETED_FILE ) ) {
+ wfProfileOut( __METHOD__ );
return array();
}
// This is an API-specific function so it would be cleaner to call it from
// outside fetchExtendedMetadata, but this way we don't need to redo the
// computation on a cache hit.
- $this->sanitizeArrayForXml($extendedMetadata);
+ $this->sanitizeArrayForXml( $extendedMetadata );
$valueToCache = array( 'data' => $extendedMetadata, 'timestamp' => wfTimestampNow() );
$wgMemc->set( $cacheKey, $valueToCache, $maxCacheTime );
}
// choose the language best matching user or site settings
$priorityLanguages = $this->getPriorityLanguages();
- foreach( $priorityLanguages as $lang ) {
+ foreach ( $priorityLanguages as $lang ) {
if ( isset( $value[$lang] ) ) {
return $value[$lang];
}
}
// otherwise just return any one language
- unset($value['_type']);
- if (!empty($value)) {
- return reset($value);
+ unset( $value['_type'] );
+ if ( !empty( $value ) ) {
+ return reset( $value );
}
// this should not happen; signal error
*/
static function parse( $rawData ) {
$parsed = iptcparse( $rawData );
- $data = Array();
+ $data = array();
if ( !is_array( $parsed ) ) {
return $data;
}
if ( isset( $parsed['2#060'] ) ) {
$time = $parsed['2#060'];
} else {
- $time = Array();
+ $time = array();
}
$timestamp = self::timeHelper( $val, $time, $c );
if ( $timestamp ) {
if ( isset( $parsed['2#063'] ) ) {
$time = $parsed['2#063'];
} else {
- $time = Array();
+ $time = array();
}
$timestamp = self::timeHelper( $val, $time, $c );
if ( $timestamp ) {
if ( isset( $parsed['2#035'] ) ) {
$time = $parsed['2#035'];
} else {
- $time = Array();
+ $time = array();
}
$timestamp = self::timeHelper( $val, $time, $c );
if ( $timestamp ) {
if ( isset( $parsed['2#038'] ) ) {
$time = $parsed['2#038'];
} else {
- $time = Array();
+ $time = array();
}
$timestamp = self::timeHelper( $val, $time, $c );
if ( $timestamp ) {
return $image->getWidth() * $image->getHeight();
}
-
/**
* @param $file File
* @return string
/**
* Get a MediaHandler for a given MIME type from the instance cache
*
- * @param $type string
+ * @param string $type
*
* @return MediaHandler
*/
* Return true to accept the parameter, and false to reject it.
* If you return false, the parser will do something quiet and forgiving.
*
- * @param $name
+ * @param string $name
* @param $value
*/
abstract function validateParam( $name, $value );
/**
* Merge a parameter array into a string appropriate for inclusion in filenames
*
- * @param $params array Array of parameters that have been through normaliseParams.
- * @return String
+ * @param array $params Array of parameters that have been through normaliseParams.
+ * @return string
*/
abstract function makeParamString( $params );
/**
* Parse a param string made with makeParamString back into an array
*
- * @param $str string The parameter string without file name (e.g. 122px)
- * @return Array|Boolean Array of parameters or false on failure.
+ * @param string $str The parameter string without file name (e.g. 122px)
+ * @return array|bool Array of parameters or false on failure.
*/
abstract function parseParamString( $str );
* Get an image size array like that returned by getimagesize(), or false if it
* can't be determined.
*
- * @param $image File: the image object, or false if there isn't one
+ * @param File $image The image object, or false if there isn't one
* @param string $path the filename
- * @return Array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
+ * @return array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
*/
abstract function getImageSize( $image, $path );
/**
* Get handler-specific metadata which will be saved in the img_metadata field.
*
- * @param $image File: the image object, or false if there isn't one.
+ * @param File $image The image object, or false if there isn't one.
* Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
- * @param string $path the filename
- * @return String
+ * @param string $path The filename
+ * @return string
*/
function getMetadata( $image, $path ) {
return '';
* version 3 it might add to the end of the array the element 'foo=3'. if the core metadata
* version is 2, the end version string would look like '2;foo=3'.
*
- * @return string version string
+ * @return string Version string
*/
static function getMetadataVersion() {
- $version = Array( '2' ); // core metadata version
- wfRunHooks( 'GetMetadataVersion', Array( &$version ) );
+ $version = array( '2' ); // core metadata version
+ wfRunHooks( 'GetMetadataVersion', array( &$version ) );
return implode( ';', $version );
}
* By default just returns $metadata, but can be used to allow
* media handlers to convert between metadata versions.
*
- * @param $metadata Mixed String or Array metadata array (serialized if string)
- * @param $version Integer target version
- * @return Array serialized metadata in specified version, or $metadata on fail.
+ * @param mixed|string|array $metadata Metadata array (serialized if string)
+ * @param int $version Target version
+ * @return array Serialized metadata in specified version, or $metadata on fail.
*/
function convertMetadataVersion( $metadata, $version = 1 ) {
if ( !is_array( $metadata ) ) {
/**
* Get a string describing the type of metadata, for display purposes.
- *
+ * @param $image
* @return string
*/
function getMetadataType( $image ) {
*
* @param File $file
*
- * @return Array or false if interface not supported
+ * @return array|bool False if interface not supported
* @since 1.23
*/
public function getCommonMetaArray( File $file ) {
* Get a MediaTransformOutput object representing the transformed output. Does not
* actually do the transform.
*
- * @param $image File: the image object
+ * @param File $image The image object
* @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()
* Get a MediaTransformOutput object representing the transformed output. Does the
* transform unless $flags contains self::TRANSFORM_LATER.
*
- * @param $image File: the image object
+ * @param File $image The image object
* @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()
* Note: These parameters have *not* gone through $this->normaliseParams()
- * @param $flags Integer: a bitfield, may contain self::TRANSFORM_LATER
+ * @param int $flags A bitfield, may contain self::TRANSFORM_LATER
*
* @return MediaTransformOutput
*/
/**
* Get the thumbnail extension and MIME type for a given source MIME type
*
- * @param String $ext Extension of original file
- * @param String $mime Mime type of original file
- * @param Array $params Handler specific rendering parameters
+ * @param string $ext Extension of original file
+ * @param string $mime Mime type of original file
+ * @param array $params Handler specific rendering parameters
* @return array thumbnail extension and MIME type
*/
function getThumbType( $ext, $mime, $params = null ) {
/**
* Get useful response headers for GET/HEAD requests for a file with the given metadata
- * @param $metadata mixed Result of the getMetadata() function of this handler for a file
- * @return Array
+ * @param mixed $metadata Result of the getMetadata() function of this handler for a file
+ * @return array
*/
public function getStreamHeaders( $metadata ) {
return array();
private $reader = null;
private $mDebug = false;
- private $metadata = Array();
+ private $metadata = array();
/**
* Constructor
$data = $this->results;
- wfRunHooks( 'XMPGetResults', Array( &$data ) );
+ wfRunHooks( 'XMPGetResults', array( &$data ) );
if ( isset( $data['xmp-special']['AuthorsPosition'] )
&& is_string( $data['xmp-special']['AuthorsPosition'] )
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.
- wfRunHooks( 'XMPGetInfo', Array( &self::$items ) );
+ wfRunHooks( 'XMPGetInfo', array( &self::$items ) );
self::$ranHooks = true; // Only want to do this once.
}
return self::$items;
$db = $this->getDB( $row->serverIndex );
if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
$this->debug( "get: key has expired, deleting" );
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
# Put the expiry time in the WHERE condition to avoid deleting a
# newly-inserted value
$db->delete( $row->tableName,
array( 'keyname' => $key, 'exptime' => $row->exptime ),
__METHOD__ );
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
$values[$key] = false;
} else { // HIT
$values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
$encExpiry = $db->timestamp( $exptime );
}
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
// (bug 24425) use a replace if the db supports it instead of
// delete/insert to avoid clashes with conflicting keynames
$db->replace(
'value' => $db->encodeBlob( $this->serialize( $value ) ),
'exptime' => $encExpiry
), __METHOD__ );
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
} catch ( DBError $e ) {
$this->handleWriteError( $e, $serverIndex );
return false;
}
$encExpiry = $db->timestamp( $exptime );
}
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
// (bug 24425) use a replace if the db supports it instead of
// delete/insert to avoid clashes with conflicting keynames
$db->update(
),
__METHOD__
);
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
} catch ( DBQueryError $e ) {
$this->handleWriteError( $e, $serverIndex );
list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
try {
$db = $this->getDB( $serverIndex );
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
$db->delete(
$tableName,
array( 'keyname' => $key ),
__METHOD__ );
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
} catch ( DBError $e ) {
$this->handleWriteError( $e, $serverIndex );
return false;
try {
$db = $this->getDB( $serverIndex );
$step = intval( $step );
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
$row = $db->selectRow(
$tableName,
array( 'value', 'exptime' ),
array( 'FOR UPDATE' ) );
if ( $row === false ) {
// Missing
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
return null;
}
$db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ );
if ( $this->isExpired( $db, $row->exptime ) ) {
// Expired, do not reinsert
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
return null;
}
// Race condition. See bug 28611
$newValue = null;
}
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
} catch ( DBError $e ) {
$this->handleWriteError( $e, $serverIndex );
return null;
$maxExpTime = $row->exptime;
}
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
$db->delete(
$this->getTableNameByShard( $i ),
array(
'keyname' => $keys
),
__METHOD__ );
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
if ( $progressCallback ) {
if ( intval( $totalSeconds ) === 0 ) {
try {
$db = $this->getDB( $serverIndex );
for ( $i = 0; $i < $this->shards; $i++ ) {
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
$db->delete( $this->getTableNameByShard( $i ), '*', __METHOD__ );
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
}
} catch ( DBError $e ) {
$this->handleWriteError( $e, $serverIndex );
}
for ( $i = 0; $i < $this->shards; $i++ ) {
- $db->begin( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
$db->query(
'CREATE TABLE ' . $db->tableName( $this->getTableNameByShard( $i ) ) .
' LIKE ' . $db->tableName( 'objectcache' ),
__METHOD__ );
- $db->commit( __METHOD__ );
+ $db->commit( __METHOD__, 'flush' );
}
}
}
* @ingroup Parser
*/
class CacheTime {
+ /** @var array|bool ParserOptions which have been taken into account to
+ * produce output or false if not available.
+ */
+ public $mUsedOptions;
var $mVersion = Parser::VERSION, # Compatibility check
$mCacheTime = '', # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
* @param mixed $value value to match
* @return boolean true on successful match
*/
- static private function matchAgainstMagicword( $magicword, $value ) {
+ private static function matchAgainstMagicword( $magicword, $value ) {
if ( strval( $value ) === '' ) {
return false;
}
}
/**
- * @param $parserOutput ParserOutput
- * @param $article Article
- * @param $popts ParserOptions
- * @param $cacheTime Time when the cache was generated
+ * @param ParserOutput $parserOutput
+ * @param Article $article
+ * @param ParserOptions $popts
+ * @param string $cacheTime Time when the cache was generated
*/
public function save( $parserOutput, $article, $popts, $cacheTime = null ) {
$expire = $parserOutput->getCacheExpiry();
* so users sharign the options with vary for the same page share
* the same cached data safely.
*
- * Replaces User::getPageRenderingHash()
- *
* Extensions which require it should install 'PageRenderingHash' hook,
* which will give them a chance to modify this key based on their own
* settings.
$text = str_replace( array( Parser::TOC_START, Parser::TOC_END ), '', $text );
} else {
$text = preg_replace(
- '#'. preg_quote( Parser::TOC_START ) . '.*?' . preg_quote( Parser::TOC_END ) . '#s',
+ '#' . preg_quote( Parser::TOC_START ) . '.*?' . preg_quote( Parser::TOC_END ) . '#s',
'',
$text
);
$xml = $this->preprocessToXml( $text, $flags );
}
-
// Fail if the number of elements exceeds acceptable limits
// Do not attempt to generate the DOM
$this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
/**
* ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (the one from mediawiki/trunk/udpprofile SVN )
+ * (the one from
+ * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
* @ingroup Profiler
*/
class ProfilerSimpleUDP extends ProfilerSimple {
break;
case RC_NEW:
- $packet['length'] = array( 'old' => NULL, 'new' => $attrib['rc_new_len'] );
- $packet['revision'] = array( 'old' => NULL, 'new' => $attrib['rc_this_oldid'] );
+ $packet['length'] = array( 'old' => null, 'new' => $attrib['rc_new_len'] );
+ $packet['revision'] = array( 'old' => null, 'new' => $attrib['rc_this_oldid'] );
break;
case RC_LOG:
*/
public function preloadModuleInfo( array $modules, ResourceLoaderContext $context ) {
if ( !count( $modules ) ) {
- return; // or else Database*::select() will explode, plus it's cheaper!
+ // Or else Database*::select() will explode, plus it's cheaper!
+ return;
}
$dbr = wfGetDB( DB_SLAVE );
$skin = $context->getSkin();
wfProfileIn( __METHOD__ );
$errors = '';
- // Split requested modules into two groups, modules and missing
+ // Find out which modules are missing and instantiate the others
$modules = array();
$missing = array();
foreach ( $context->getModules() as $name ) {
}
// Save response to file cache unless there are errors
- if ( isset( $fileCache ) && !$errors && !$missing ) {
+ if ( isset( $fileCache ) && !$errors && !count( $missing ) ) {
// Cache single modules...and other requests if there are enough hits
if ( ResourceFileCache::useFileCache( $context ) ) {
if ( $fileCache->isCacheWorthy() ) {
/**
* Generates code for a response
*
- * @param $context ResourceLoaderContext: Context in which to generate a response
+ * @param $context ResourceLoaderContext Context in which to generate a response
* @param array $modules List of module objects keyed by module name
- * @param array $missing List of unavailable modules (optional)
- * @return String: Response data
+ * @param array $missing List of requested module names that are unregistered (optional)
+ * @return string Response data
*/
public function makeModuleResponse( ResourceLoaderContext $context,
- array $modules, $missing = array()
+ array $modules, array $missing = array()
) {
$out = '';
$exceptions = '';
- if ( $modules === array() && $missing === array() ) {
+ $states = array();
+
+ if ( !count( $modules ) && !count( $missing ) ) {
return '/* No modules requested. Max made me put this here */';
}
wfProfileIn( __METHOD__ );
+
// Pre-fetch blobs
if ( $context->shouldIncludeMessages() ) {
try {
$blobs = array();
}
+ foreach ( $missing as $name ) {
+ $states[$name] = 'missing';
+ }
+
// Generate output
$isRaw = false;
foreach ( $modules as $name => $module ) {
// Add exception to the output as a comment
$exceptions .= self::formatException( $e );
- // Register module as missing
- $missing[] = $name;
+ // Respond to client with error-state instead of module implementation
+ $states[$name] = 'error';
unset( $modules[$name] );
}
$isRaw |= $module->isRaw();
// Update module states
if ( $context->shouldIncludeScripts() && !$context->getRaw() && !$isRaw ) {
- // Set the state of modules loaded as only scripts to ready
if ( count( $modules ) && $context->getOnly() === 'scripts' ) {
- $out .= self::makeLoaderStateScript(
- array_fill_keys( array_keys( $modules ), 'ready' ) );
+ // Set the state of modules loaded as only scripts to ready as
+ // they don't have an mw.loader.implement wrapper that sets the state
+ foreach ( $modules as $name => $module ) {
+ $states[$name] = 'ready';
+ }
}
- // Set the state of modules which were requested but unavailable as missing
- if ( is_array( $missing ) && count( $missing ) ) {
- $out .= self::makeLoaderStateScript( array_fill_keys( $missing, 'missing' ) );
+
+ // Set the state of modules we didn't respond to with mw.loader.implement
+ if ( count( $states ) ) {
+ $out .= self::makeLoaderStateScript( $states );
}
}
*/
public function getAllStyleFiles() {
$files = array();
- foreach( (array)$this->styles as $key => $value ) {
+ foreach ( (array)$this->styles as $key => $value ) {
if ( is_array( $value ) ) {
$path = $key;
} else {
* recompiles as necessary.
*
* @since 1.22
+ * @throws Exception If Less encounters a parse error
+ * @throws MWException If Less compilation returns unexpection result
* @param string $fileName File path of LESS source
* @return string: CSS source
*/
return call_user_func( array( self::$allowedTypes[$typeName], 'suggestTarget' ), $target, $ids );
}
-
/**
* Checks if a revision still exists in the revision table.
* If it doesn't, returns the corresponding ar_timestamp field
*/
protected $maxPageLength = 70;
+ /**
+ * Maximum number of pages in a hierarchical ("top level") list.
+ *
+ * Traversal of the entire page list by spidering the top levels is thought
+ * to require O(N^3) DB CPU time where N is the number of pages on the wiki.
+ * See bug 56840. If this limit is exceeded, the behaviour becomes like a
+ * simple alphabetic pager.
+ */
+ protected $maxTopLevelPages = 50000;
+
/**
* Determines, which message describes the input field 'nsfrom'.
*
$lines = $wgMemc->get( $key );
$count = $dbr->estimateRowCount( 'page', '*', $where, __METHOD__ );
+
+ // Don't show a hierarchical list if the number of pages is very large,
+ // since generating it will cause a lot of scanning
+ if ( $count > $this->maxTopLevelPages ) {
+ $this->showChunk( $namespace, $from, $to, $hideredirects );
+ return;
+ }
+
$maxPerSubpage = intval( $count / $this->maxLineCount );
$maxPerSubpage = max( $maxPerSubpage, $this->maxPerPage );
$user = $this->getUser();
$request = $this->getRequest();
- if ( !$user->isLoggedIn() ) {
- $this->error( 'changeemail-no-info' );
-
- return;
- }
+ $this->requireLogin( 'changeemail-no-info' );
if ( $request->wasPosted() && $request->getBool( 'wpCancel' ) ) {
$this->doReturnTo();
// This could also let someone check the current email address, so
// require both permissions.
- if ( !$this->getUser()->isAllowed( 'viewmyprivateinfo' ) ) {
+ if ( !$user->isAllowed( 'viewmyprivateinfo' ) ) {
throw new PermissionsError( 'viewmyprivateinfo' );
}
$this->getOutput()->disallowUserJs();
$request = $this->getRequest();
+
+ if ( !$request->wasPosted() ) {
+ $this->requireLogin( 'resetpass-no-info' );
+ }
+
$this->mUserName = trim( $request->getVal( 'wpName' ) );
$this->mOldpass = $request->getVal( 'wpPassword' );
$this->mNewpass = $request->getVal( 'wpNewPassword' );
$this->mDomain = $request->getVal( 'wpDomain' );
$user = $this->getUser();
- if ( !$request->wasPosted() && !$user->isLoggedIn() ) {
- $this->error( $this->msg( 'resetpass-no-info' )->text() );
-
- return;
- }
if ( $request->wasPosted() && $request->getBool( 'wpCancel' ) ) {
$titleObj = Title::newFromText( $request->getVal( 'returnto' ) );
'wpLoginToken' => $token,
'wpPassword' => $request->getVal( 'wpNewPassword' ),
) + $request->getValues( 'wpRemember', 'returnto', 'returntoquery' );
- $login = new LoginForm( new FauxRequest( $data, true ) );
+ $login = new LoginForm( new DerivativeRequest( $request, $data, true ) );
$login->setContext( $this->getContext() );
$login->execute( null );
}
$this->checkReadOnly();
$this->checkPermissions();
+ $this->requireLogin( 'confirmemail_needlogin' );
+
// This could also let someone check the current email address, so
// require both permissions.
if ( !$this->getUser()->isAllowed( 'viewmyprivateinfo' ) ) {
}
if ( $code === null || $code === '' ) {
- if ( $this->getUser()->isLoggedIn() ) {
- if ( Sanitizer::validateEmail( $this->getUser()->getEmail() ) ) {
- $this->showRequestForm();
- } else {
- $this->getOutput()->addWikiMsg( 'confirmemail_noemail' );
- }
+ if ( Sanitizer::validateEmail( $this->getUser()->getEmail() ) ) {
+ $this->showRequestForm();
} else {
- $llink = Linker::linkKnown(
- SpecialPage::getTitleFor( 'Userlogin' ),
- $this->msg( 'loginreqlink' )->escaped(),
- array(),
- array( 'returnto' => $this->getTitle()->getPrefixedText() )
- );
- $this->getOutput()->addHTML(
- $this->msg( 'confirmemail_needlogin' )->rawParams( $llink )->parse()
- );
+ $this->getOutput()->addWikiMsg( 'confirmemail_noemail' );
}
} else {
$this->attemptConfirm( $code );
# Get the current user name for accounts
$join_cond['user'] = Revision::userJoinCond();
+ $options = array();
+ if ( $index ) {
+ $options['USE INDEX'] = array( 'revision' => $index );
+ }
+
$queryInfo = array(
'tables' => $tables,
'fields' => array_merge(
'page_latest', 'page_is_redirect', 'page_len' )
),
'conds' => $conds,
- 'options' => array( 'USE INDEX' => array( 'revision' => $index ) ),
+ 'options' => $options,
'join_conds' => $join_cond
);
$condition = array();
$join_conds = array();
$tables = array( 'revision', 'page', 'user' );
+ $index = false;
if ( $this->contribs == 'newbie' ) {
$max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ );
$condition[] = 'rev_user >' . (int)( $max - $max / 100 );
- $index = 'user_timestamp';
# ignore local groups with the bot right
# @todo FIXME: Global groups may have 'bot' rights
$groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
public function execute( $mode ) {
$this->setHeaders();
- $out = $this->getOutput();
-
# Anons don't get a watchlist
- if ( $this->getUser()->isAnon() ) {
- $out->setPageTitle( $this->msg( 'watchnologin' ) );
- $llink = Linker::linkKnown(
- SpecialPage::getTitleFor( 'Userlogin' ),
- $this->msg( 'loginreqlink' )->escaped(),
- array(),
- array( 'returnto' => $this->getTitle()->getPrefixedText() )
- );
- $out->addHTML( $this->msg( 'watchlistanontext' )->rawParams( $llink )->parse() );
+ $this->requireLogin( 'watchlistanontext' );
- return;
- }
+ $out = $this->getOutput();
$this->checkPermissions();
$this->checkReadOnly();
--- /dev/null
+<?php
+/**
+ * Implements Special:ExpandTemplates
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * A special page that expands submitted templates, parser functions,
+ * and variables, allowing easier debugging of these.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialExpandTemplates extends SpecialPage {
+
+ /** @var boolean whether or not to show the XML parse tree */
+ protected $generateXML;
+
+ /** @var boolean whether or not to remove comments in the expanded wikitext */
+ protected $removeComments;
+
+ /** @var boolean whether or not to remove <nowiki> tags in the expanded wikitext */
+ protected $removeNowiki;
+
+ /** @var maximum size in bytes to include. 50MB allows fixing those huge pages */
+ const MAX_INCLUDE_SIZE = 50000000;
+
+ function __construct() {
+ parent::__construct( 'ExpandTemplates' );
+ }
+
+ /**
+ * Show the special page
+ */
+ function execute( $subpage ) {
+ global $wgParser, $wgUseTidy, $wgAlwaysUseTidy;
+
+ $this->setHeaders();
+
+ $request = $this->getRequest();
+ $titleStr = $request->getText( 'wpContextTitle' );
+ $title = Title::newFromText( $titleStr );
+
+ if ( !$title ) {
+ $title = $this->getTitle();
+ }
+ $input = $request->getText( 'wpInput' );
+ $this->generateXML = $request->getBool( 'wpGenerateXml' );
+
+ if ( strlen( $input ) ) {
+ $this->removeComments = $request->getBool( 'wpRemoveComments', false );
+ $this->removeNowiki = $request->getBool( 'wpRemoveNowiki', false );
+ $options = ParserOptions::newFromContext( $this->getContext() );
+ $options->setRemoveComments( $this->removeComments );
+ $options->setTidy( true );
+ $options->setMaxIncludeSize( self::MAX_INCLUDE_SIZE );
+
+ if ( $this->generateXML ) {
+ $wgParser->startExternalParse( $title, $options, OT_PREPROCESS );
+ $dom = $wgParser->preprocessToDom( $input );
+
+ if ( method_exists( $dom, 'saveXML' ) ) {
+ $xml = $dom->saveXML();
+ } else {
+ $xml = $dom->__toString();
+ }
+ }
+
+ $output = $wgParser->preprocess( $input, $title, $options );
+ } else {
+ $this->removeComments = $request->getBool( 'wpRemoveComments', true );
+ $this->removeNowiki = $request->getBool( 'wpRemoveNowiki', false );
+ $output = false;
+ }
+
+ $out = $this->getOutput();
+ $out->addWikiMsg( 'expand_templates_intro' );
+ $out->addHTML( $this->makeForm( $titleStr, $input ) );
+
+ if( $output !== false ) {
+ if ( $this->generateXML && strlen( $output ) > 0 ) {
+ $out->addHTML( $this->makeOutput( $xml, 'expand_templates_xml_output' ) );
+ }
+
+ $tmp = $this->makeOutput( $output );
+
+ if ( $this->removeNowiki ) {
+ $tmp = preg_replace(
+ array( '_<nowiki>_', '_</nowiki>_', '_<nowiki */>_' ),
+ '',
+ $tmp
+ );
+ }
+
+ if( ( $wgUseTidy && $options->getTidy() ) || $wgAlwaysUseTidy ) {
+ $tmp = MWTidy::tidy( $tmp );
+ }
+
+ $out->addHTML( $tmp );
+ $this->showHtmlPreview( $title, $output, $out );
+ }
+
+ }
+
+ /**
+ * Generate a form allowing users to enter information
+ *
+ * @param string $title Value for context title field
+ * @param string $input Value for input textbox
+ * @return string
+ */
+ private function makeForm( $title, $input ) {
+ $self = $this->getTitle();
+ $form = Xml::openElement(
+ 'form',
+ array( 'method' => 'post', 'action' => $self->getLocalUrl() )
+ );
+ $form .= "<fieldset><legend>" . $this->msg( 'expandtemplates' )->escaped() . "</legend>\n";
+
+ $form .= '<p>' . Xml::inputLabel(
+ $this->msg( 'expand_templates_title' )->plain(),
+ 'wpContextTitle',
+ 'contexttitle',
+ 60,
+ $title,
+ array( 'autofocus' => true )
+ ) . '</p>';
+ $form .= '<p>' . Xml::label(
+ $this->msg( 'expand_templates_input' )->text(),
+ 'input'
+ ) . '</p>';
+ $form .= Xml::textarea(
+ 'wpInput',
+ $input,
+ 10,
+ 10,
+ array( 'id' => 'input' )
+ );
+
+ $form .= '<p>' . Xml::checkLabel(
+ $this->msg( 'expand_templates_remove_comments' )->text(),
+ 'wpRemoveComments',
+ 'removecomments',
+ $this->removeComments
+ ) . '</p>';
+ $form .= '<p>' . Xml::checkLabel(
+ $this->msg( 'expand_templates_remove_nowiki' )->text(),
+ 'wpRemoveNowiki',
+ 'removenowiki',
+ $this->removeNowiki
+ ) . '</p>';
+ $form .= '<p>' . Xml::checkLabel(
+ $this->msg( 'expand_templates_generate_xml' )->text(),
+ 'wpGenerateXml',
+ 'generate_xml',
+ $this->generateXML
+ ) . '</p>';
+ $form .= '<p>' . Xml::submitButton(
+ $this->msg( 'expand_templates_ok' )->text(),
+ array( 'accesskey' => 's' )
+ ) . '</p>';
+ $form .= "</fieldset>\n";
+ $form .= Xml::closeElement( 'form' );
+
+ return $form;
+ }
+
+ /**
+ * Generate a nice little box with a heading for output
+ *
+ * @param string $output Wiki text output
+ * @param string $heading
+ * @return string
+ */
+ private function makeOutput( $output, $heading = 'expand_templates_output' ) {
+ $out = "<h2>" . $this->msg( $heading )->escaped() . "</h2>\n";
+ $out .= Xml::textarea(
+ 'output',
+ $output,
+ 10,
+ 10,
+ array( 'id' => 'output', 'readonly' => 'readonly' )
+ );
+
+ return $out;
+ }
+
+ /**
+ * Render the supplied wiki text and append to the page as a preview
+ *
+ * @param Title $title
+ * @param string $text
+ * @param OutputPage $out
+ */
+ private function showHtmlPreview( Title $title, $text, OutputPage $out ) {
+ global $wgParser;
+
+ $popts = ParserOptions::newFromContext( $this->getContext() );
+ $popts->setTargetLanguage( $title->getPageLanguage() );
+ $pout = $wgParser->parse( $text, $title, $popts );
+ $lang = $title->getPageViewLanguage();
+
+ $out->addHTML( "<h2>" . $this->msg( 'expand_templates_preview' )->escaped() . "</h2>\n" );
+ $out->addHTML( Html::openElement( 'div', array(
+ 'class' => 'mw-content-' . $lang->getDir(),
+ 'dir' => $lang->getDir(),
+ 'lang' => $lang->getHtmlCode(),
+ ) ) );
+
+ $out->addHTML( $pout->getText() );
+ $out->addHTML( Html::closeElement( 'div' ) );
+ }
+}
private $mOriginalPageOutCallback = null;
private $mLogItemCount = 0;
-
/**
* @param WikiImporter $importer
* @param $upload
// For protocols without '//' like 'mailto:'
$protocol = substr( $target2, 0, $pr_cl + 1 );
$target2 = substr( $target2, $pr_cl + 1 );
- } elseif ( $protocol == '' && $target2 != '' ) {
+ } elseif ( $target2 != '' ) {
// default
$protocol = 'http://';
}
if ( $protocol != '' && !in_array( $protocol, $protocols_list ) ) {
- // unsupported protocol, show original search request
+ // Unsupported protocol, show original search request
$target2 = $target;
- $protocol = '';
+ // Since links with unsupported protocols don't end up in
+ // externallinks, assume $protocol is actually part of a link
+ // containing ':' or '//' and default to http as above.
+ $protocol = 'http://';
}
$out->addWikiMsg(
}
$field = $prefix . substr( $field, 3 ) . ' AS ' . $field;
}
- $fields[array_search('top', $fields)] = "'no' AS top";
+ $fields[array_search( 'top', $fields )] = "'no' AS top";
} else {
if ( $this->mShowAll ) {
$fields[array_search( 'top', $fields )] = "'yes' AS top";
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
- $batch = new LinkBatch;
+ if ( !$res->numRows() ) {
+ return;
+ }
+ $batch = new LinkBatch;
foreach ( $res as $row ) {
$batch->add( $row->namespace, $row->title );
$batch->addObj( $this->getRedirectTarget( $row ) );
}
-
$batch->execute();
// Back to start for display
- if ( $res->numRows() > 0 ) {
- // If there are no rows we get an error seeking.
- $db->dataSeek( $res, 0 );
- }
+ $res->seek( 0 );
}
protected function getRedirectTarget( $row ) {
# Some log types are only for a 'User:' title but we might have been given
# only the username instead of the full title 'User:username'. This part try
# to lookup for a user by that name and eventually fix user input. See bug 1697.
+ wfRunHooks( 'GetLogTypesOnUser', array( &$this->typeOnUser ) );
if ( in_array( $opts->getValue( 'type' ), $this->typeOnUser ) ) {
# ok we have a type of log which expect a user title.
$target = Title::newFromText( $opts->getValue( 'page' ) );
// from a FormSpecialPage class.
$form->setWrapperLegend( false );
+ $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
+
$i = 0;
if ( isset( $wgPasswordResetRoutes['username'] ) && $wgPasswordResetRoutes['username'] ) {
$i++;
$out = $this->getOutput();
$out->disallowUserJs(); # Prevent hijacked user scripts from sniffing passwords etc.
- $user = $this->getUser();
- if ( $user->isAnon() ) {
- throw new ErrorPageError(
- 'prefsnologin',
- 'prefsnologintext',
- array( $this->getTitle()->getPrefixedDBkey() )
- );
- }
+ $this->requireLogin( 'prefsnologintext2' );
$this->checkReadOnly();
if ( $par == 'reset' ) {
);
}
- $htmlForm = Preferences::getFormObject( $user, $this->getContext() );
+ $htmlForm = Preferences::getFormObject( $this->getUser(), $this->getContext() );
$htmlForm->setSubmitCallback( array( 'Preferences', 'tryUISubmit' ) );
$htmlForm->show();
$this->setCategory( $cat );
}
-
if ( !$this->category && $categoryStr ) {
$this->setHeaders();
$this->getOutput()->addWikiMsg( 'randomincategory-invalidcategory',
$nondefaults = $opts->getChangedValues();
$panel = array();
+ $panel[] = self::makeLegend( $this->getContext() );
$panel[] = $this->optionsPanel( $defaults, $nondefaults );
$panel[] = '<hr />';
return $extraOpts;
}
+ /**
+ * Return the legend displayed within the fieldset
+ *
+ * @param $context the object available as $this in non-static functions
+ * @return string
+ */
+ public static function makeLegend( IContextSource $context ) {
+ global $wgRecentChangesFlags;
+ $user = $context->getUser();
+ # The legend showing what the letters and stuff mean
+ $legend = Xml::openElement( 'dl', array( 'class' => 'mw-changeslist-legend' ) ) . "\n";
+ # Iterates through them and gets the messages for both letter and tooltip
+ $legendItems = $wgRecentChangesFlags;
+ if ( !$user->useRCPatrol() ) {
+ unset( $legendItems['unpatrolled'] );
+ }
+ foreach ( $legendItems as $key => $legendInfo ) { # generate items of the legend
+ $label = $legendInfo['title'];
+ $letter = $legendInfo['letter'];
+ $cssClass = isset( $legendInfo['class'] ) ? $legendInfo['class'] : $key;
+
+ $legend .= Xml::element( 'dt',
+ array( 'class' => $cssClass ), $context->msg( $letter )->text()
+ ) . "\n";
+ if ( $key === 'newpage' ) {
+ $legend .= Xml::openElement( 'dd' );
+ $legend .= $context->msg( $label )->escaped();
+ $legend .= ' ' . $context->msg( 'recentchanges-legend-newpage' )->parse();
+ $legend .= Xml::closeElement( 'dd' ) . "\n";
+ } else {
+ $legend .= Xml::element( 'dd', array(),
+ $context->msg( $label )->text()
+ ) . "\n";
+ }
+ }
+ # (+-123)
+ $legend .= Xml::tags( 'dt',
+ array( 'class' => 'mw-plusminus-pos' ),
+ $context->msg( 'recentchanges-legend-plusminus' )->parse()
+ ) . "\n";
+ $legend .= Xml::element(
+ 'dd',
+ array( 'class' => 'mw-changeslist-legend-plusminus' ),
+ $context->msg( 'recentchanges-label-plusminus' )->text()
+ ) . "\n";
+ $legend .= Xml::closeElement( 'dl' ) . "\n";
+ return $legend;
+ }
+
/**
* Send the text to be displayed above the options
*
public function execute( $par ) {
// This is a preferences page, so no user JS for y'all.
$this->getOutput()->disallowUserJs();
+ $this->requireLogin();
parent::execute( $par );
protected function showConvenienceLinks() {
# Give a link to the logs/hist for this page
if ( $this->targetObj ) {
+ // Also set header tabs to be for the target.
+ $this->getSkin()->setRelevantTitle( $this->targetObj );
+
$links = array();
$links[] = Linker::linkKnown(
SpecialPage::getTitleFor( 'Log' ),
}
if ( $includesRestrictedPages || $includesCachedPages ) {
+ $out->wrapWikiMsg( "<h2 class=\"mw-specialpages-note-top\">$1</h2>", 'specialpages-note-top' );
$out->wrapWikiMsg( "<div class=\"mw-specialpages-notes\">\n$1\n</div>", 'specialpages-note' );
}
}
header( "Content-Type: $contentType", true );
header( 'Content-Transfer-Encoding: binary', true );
header( 'Expires: Sun, 17-Jan-2038 19:14:07 GMT', true );
+ // Bug 53032 - It shouldn't be a problem here, but let's be safe and not cache
+ header( 'Cache-Control: private' );
header( "Content-Length: $size", true );
}
return;
}
- $status = $this->addNewaccountInternal();
+ $status = $this->addNewAccountInternal();
if ( !$status->isGood() ) {
$error = $status->getMessage();
$this->mainLoginForm( $error->toString() );
* @return Status object
*/
function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext' ) {
- global $wgCanonicalServer, $wgScript, $wgNewPasswordExpiry;
+ global $wgNewPasswordExpiry;
if ( $u->getEmail() == '' ) {
return Status::newFatal( 'noemail', $u->getName() );
$u->setNewpassword( $np, $throttle );
$u->saveSettings();
$userLanguage = $u->getOption( 'language' );
- $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $wgCanonicalServer . $wgScript . '>',
+
+ $mainPage = Title::newMainPage();
+ $mainPageUrl = $mainPage->getCanonicalURL();
+
+ $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $mainPageUrl . '>',
round( $wgNewPasswordExpiry / 86400 ) )->inLanguage( $userLanguage )->text();
$result = $u->sendMail( $this->msg( $emailTitle )->inLanguage( $userLanguage )->text(), $m );
$user = $this->getUser();
$output = $this->getOutput();
+ $output->addModuleStyles( 'mediawiki.special.changeslist' );
# Anons don't get a watchlist
- if ( $user->isAnon() ) {
- $output->setPageTitle( $this->msg( 'watchnologin' ) );
- $output->setRobotPolicy( 'noindex,nofollow' );
- $llink = Linker::linkKnown(
- SpecialPage::getTitleFor( 'Userlogin' ),
- $this->msg( 'loginreqlink' )->escaped(),
- array(),
- array( 'returnto' => $this->getTitle()->getPrefixedText() )
- );
- $output->addHTML( $this->msg( 'watchlistanontext' )->rawParams( $llink )->parse() );
- return;
- }
+ $this->requireLogin( 'watchlistanontext' );
// Check permissions
$this->checkPermissions();
array( 'id' => 'mw-watchlist-options' )
);
+ $form .= SpecialRecentChanges::makeLegend( $this->getContext() );
+
$tables = array( 'recentchanges', 'watchlist' );
$fields = RecentChange::selectFields();
$join_conds = array(
<?php
if ( $this->data['usedomain'] ) {
- $doms = "";
+ $select = new XmlSelect( 'wpDomain', false, $this->data['domain'] );
+ $select->setAttribute( 'tabindex', 4 );
foreach ( $this->data['domainnames'] as $dom ) {
- $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+ $select->addOption( $dom );
}
?>
<div id="mw-user-domain-section">
<label for="wpDomain"><?php $this->msg( 'yourdomainname' ); ?></label>
<div class="mw-input">
- <select name="wpDomain" value="<?php $this->text( 'domain' ); ?>" tabindex="4">
- <?php echo $doms ?>
- </select>
+ <?php echo $select->getHTML(); ?>
</div>
</div>
<?php } ?>
<?php
if ( isset( $this->data['usedomain'] ) && $this->data['usedomain'] ) {
- $doms = "";
+ $select = new XmlSelect( 'wpDomain', false, $this->data['domain'] );
+ $select->setAttribute( 'tabindex', 3 );
foreach ( $this->data['domainnames'] as $dom ) {
- $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+ $select->addOption( $dom );
}
?>
<div id="mw-user-domain-section">
<label for='wpDomain'><?php $this->msg( 'yourdomainname' ); ?></label>
- <select name="wpDomain" value="<?php $this->text( 'domain' ); ?>" tabindex="3">
- <?php echo $doms; ?>
- </select>
+ <?php echo $select->getHTML(); ?>
</div>
<?php } ?>
return true;
}
-
/**
* Verifies that it's ok to include the uploaded file
*
}
}
-
$handler = MediaHandler::getHandler( $mime );
if ( $handler ) {
$handlerStatus = $handler->verifyUpload( $this->mTempPath );
return false;
}
-
/**
* Check a whitelist of xml encodings that are known not to be interpreted differently
* by the server's xml parser (expat) and some common browsers.
// Get a 0-byte temp file to perform the concatenation at
$tmpFile = TempFSFile::factory( 'chunkedupload_', $ext );
$tmpPath = false; // fail in concatenate()
- if( $tmpFile ) {
+ if ( $tmpFile ) {
// keep alive with $this
$tmpPath = $tmpFile->bind( $this )->getPath();
}
* http://cr.yp.to/cdb.html
*/
abstract class CdbReader {
+ /**
+ * The file handle
+ */
+ protected $handle;
+
/**
* Open a file and return a subclass instance
*
* @return CdbReader
*/
public static function open( $fileName ) {
- if ( self::haveExtension() ) {
- return new CdbReaderDBA( $fileName );
- } else {
- wfDebug( "Warning: no dba extension found, using emulation.\n" );
-
- return new CdbReaderPHP( $fileName );
- }
+ return self::haveExtension() ?
+ new CdbReaderDBA( $fileName ) :
+ new CdbReaderPHP( $fileName );
}
/**
}
/**
- * Construct the object and open the file
+ * Create the object and open the file
+ *
+ * @param $fileName string
*/
- abstract function __construct( $fileName );
+ abstract public function __construct( $fileName );
/**
* Close the file. Optional, you can just let the variable go out of scope.
*/
- abstract function close();
+ abstract public function close();
/**
* Get a value with a given key. Only string values are supported.
* Native and pure PHP implementations are provided.
*/
abstract class CdbWriter {
+ /**
+ * The file handle
+ */
+ protected $handle;
+
+ /**
+ * File we'll be writing to when we're done
+ * @var string
+ */
+ protected $realFileName;
+
+ /**
+ * File we write to temporarily until we're done
+ * @var string
+ */
+ protected $tmpFileName;
+
/**
* Open a writer and return a subclass instance.
* The user must have write access to the directory, for temporary file creation.
* @return CdbWriterDBA|CdbWriterPHP
*/
public static function open( $fileName ) {
- if ( CdbReader::haveExtension() ) {
- return new CdbWriterDBA( $fileName );
- } else {
- wfDebug( "Warning: no dba extension found, using emulation.\n" );
-
- return new CdbWriterPHP( $fileName );
- }
+ return CdbReader::haveExtension() ?
+ new CdbWriterDBA( $fileName ) :
+ new CdbWriterPHP( $fileName );
}
/**
*
* @param $fileName string
*/
- abstract function __construct( $fileName );
+ abstract public function __construct( $fileName );
/**
* Set a key to a given value. The value will be converted to string.
* goes out of scope, to write out the final hashtables.
*/
abstract public function close();
-}
-
-/**
- * Reader class which uses the DBA extension
- */
-class CdbReaderDBA {
- var $handle;
- function __construct( $fileName ) {
- $this->handle = dba_open( $fileName, 'r-', 'cdb' );
- if ( !$this->handle ) {
- throw new MWException( 'Unable to open CDB file "' . $fileName . '"' );
- }
- }
-
- function close() {
+ /**
+ * If the object goes out of scope, close it for sanity
+ */
+ public function __destruct() {
if ( isset( $this->handle ) ) {
- dba_close( $this->handle );
+ $this->close();
}
- unset( $this->handle );
}
- function get( $key ) {
- return dba_fetch( $key, $this->handle );
+ /**
+ * Are we running on Windows?
+ */
+ protected function isWindows() {
+ return substr( php_uname(), 0, 7 ) == 'Windows';
}
}
/**
- * Writer class which uses the DBA extension
+ * Exception for Cdb errors
*/
-class CdbWriterDBA {
- var $handle, $realFileName, $tmpFileName;
-
- function __construct( $fileName ) {
- $this->realFileName = $fileName;
- $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
- $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' );
- if ( !$this->handle ) {
- throw new MWException( 'Unable to open CDB file for write "' . $fileName . '"' );
- }
- }
-
- function set( $key, $value ) {
- return dba_insert( $key, $value, $this->handle );
- }
-
- function close() {
- if ( isset( $this->handle ) ) {
- dba_close( $this->handle );
- }
- if ( wfIsWindows() ) {
- unlink( $this->realFileName );
- }
- if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
- throw new MWException( 'Unable to move the new CDB file into place.' );
- }
- unset( $this->handle );
- }
-
- function __destruct() {
- if ( isset( $this->handle ) ) {
- $this->close();
- }
- }
-}
+class CdbException extends MWException {}
--- /dev/null
+<?php
+/**
+ * DBA-based CDB reader/writer
+ *
+ * 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
+ */
+
+/**
+ * Reader class which uses the DBA extension
+ */
+class CdbReaderDBA extends CdbReader {
+ public function __construct( $fileName ) {
+ $this->handle = dba_open( $fileName, 'r-', 'cdb' );
+ if ( !$this->handle ) {
+ throw new CdbException( 'Unable to open CDB file "' . $fileName . '"' );
+ }
+ }
+
+ public function close() {
+ if ( isset( $this->handle ) ) {
+ dba_close( $this->handle );
+ }
+ unset( $this->handle );
+ }
+
+ public function get( $key ) {
+ return dba_fetch( $key, $this->handle );
+ }
+}
+
+/**
+ * Writer class which uses the DBA extension
+ */
+class CdbWriterDBA extends CdbWriter {
+ public function __construct( $fileName ) {
+ $this->realFileName = $fileName;
+ $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
+ $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' );
+ if ( !$this->handle ) {
+ throw new CdbException( 'Unable to open CDB file for write "' . $fileName . '"' );
+ }
+ }
+
+ public function set( $key, $value ) {
+ return dba_insert( $key, $value, $this->handle );
+ }
+
+ public function close() {
+ if ( isset( $this->handle ) ) {
+ dba_close( $this->handle );
+ }
+ if ( $this->isWindows() ) {
+ unlink( $this->realFileName );
+ }
+ if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
+ throw new CdbException( 'Unable to move the new CDB file into place.' );
+ }
+ unset( $this->handle );
+ }
+}
*
* @param $s string
*
- * @return
+ * @return int
*/
public static function hash( $s ) {
$h = 5381;
/** The filename */
var $fileName;
- /** The file handle */
- var $handle;
-
/* number of hash slots searched under this key */
var $loop;
/**
* @param $fileName string
- * @throws MWException
+ * @throws CdbException
*/
- function __construct( $fileName ) {
+ public function __construct( $fileName ) {
$this->fileName = $fileName;
$this->handle = fopen( $fileName, 'rb' );
if ( !$this->handle ) {
- throw new MWException( 'Unable to open CDB file "' . $this->fileName . '".' );
+ throw new CdbException( 'Unable to open CDB file "' . $this->fileName . '".' );
}
$this->findStart();
}
- function close() {
+ public function close() {
if ( isset( $this->handle ) ) {
fclose( $this->handle );
}
}
/**
- * @throws MWException
+ * @throws CdbException
* @param $length
* @param $pos
* @return string
protected function read( $length, $pos ) {
if ( fseek( $this->handle, $pos ) == -1 ) {
// This can easily happen if the internal pointers are incorrect
- throw new MWException(
+ throw new CdbException(
'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
}
$buf = fread( $this->handle, $length );
if ( $buf === false || strlen( $buf ) !== $length ) {
- throw new MWException(
+ throw new CdbException(
'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' );
}
/**
* Unpack an unsigned integer and throw an exception if it needs more than 31 bits
* @param $s
- * @throws MWException
+ * @throws CdbException
* @return mixed
*/
protected function unpack31( $s ) {
$data = unpack( 'V', $s );
if ( $data[1] > 0x7fffffff ) {
- throw new MWException(
+ throw new CdbException(
'Error in CDB file "' . $this->fileName . '", integer too big.' );
}
* CDB writer class
*/
class CdbWriterPHP extends CdbWriter {
- var $handle, $realFileName, $tmpFileName;
-
var $hplist;
var $numentries, $pos;
/**
* @param $fileName string
*/
- function __construct( $fileName ) {
+ public function __construct( $fileName ) {
$this->realFileName = $fileName;
$this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
$this->handle = fopen( $this->tmpFileName, 'wb' );
}
}
- function __destruct() {
- if ( isset( $this->handle ) ) {
- $this->close();
- }
- }
-
/**
- * @param $key
- * @param $value
- * @return
+ * @param string $key
+ * @param string $value
*/
public function set( $key, $value ) {
if ( strval( $key ) === '' ) {
}
/**
- * @throws MWException
+ * @throws CdbException
*/
public function close() {
$this->finish();
if ( isset( $this->handle ) ) {
fclose( $this->handle );
}
- if ( wfIsWindows() && file_exists( $this->realFileName ) ) {
+ if ( $this->isWindows() && file_exists( $this->realFileName ) ) {
unlink( $this->realFileName );
}
if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
}
/**
- * @throws MWException
+ * @throws CdbException
* @param $buf
*/
protected function write( $buf ) {
}
/**
- * @throws MWException
+ * @throws CdbException
* @param $len
*/
protected function posplus( $len ) {
}
/**
- * @throws MWException
+ * @throws CdbException
* @param $keylen
* @param $datalen
*/
}
/**
- * @throws MWException
+ * @throws CdbException
*/
protected function finish() {
// Hack for DBA cross-check
* Clean up the temp file and throw an exception
*
* @param $msg string
- * @throws MWException
+ * @throws CdbException
*/
protected function throwException( $msg ) {
if ( $this->handle ) {
fclose( $this->handle );
unlink( $this->tmpFileName );
}
- throw new MWException( $msg );
+ throw new CdbException( $msg );
}
}
# Initialise common code. This gives us access to GlobalFunctions, the
# AutoLoader, and the globals $wgRequest, $wgOut, $wgUser, $wgLang and
-# $wgContLang, amongst others; it does *not* load $wgTitle
+# $wgContLang, amongst others
require __DIR__ . '/includes/WebStart.php';
$mediaWiki = new MediaWiki();
$length -= $eLength;
$string = substr( $string, 0, $length ); // xyz...
$string = $this->removeBadCharLast( $string );
+ $string = rtrim( $string );
$string = $string . $ellipsis;
} else {
$length += $eLength;
$string = substr( $string, $length ); // ...xyz
$string = $this->removeBadCharFirst( $string );
+ $string = ltrim( $string );
$string = $ellipsis . $string;
}
}
'lmo' => 'lumbaart', # Lombard
'ln' => 'lingála', # Lingala
'lo' => 'ລາວ', # Laotian
+ 'lrc' => 'لوری', # Northern Luri
'loz' => 'Silozi', # Lozi
'lt' => 'lietuvių', # Lithuanian
'ltg' => 'latgaļu', # Latgalian
*/
class LanguageBs extends Language {
-
/**
* Convert from the nominative form of a noun to some other case
* Invoked with {{GRAMMAR:case|word}}
$lastLetter[0] = $ar[count( $ar ) - 1];
// Find the last vowel in the word
- $lastLetter[1] = NULL;
+ $lastLetter[1] = null;
foreach ( $wordReversed as $xvalue ) {
foreach ( $allVowels as $yvalue ) {
if ( strcmp( $xvalue, $yvalue ) == 0 ) {
continue;
}
}
- if ( $lastLetter[1] !== NULL ) {
+ if ( $lastLetter[1] !== null ) {
break;
} else {
continue;
# Variable for ending
$ending = '';
-
# CHecking if the $word is in plural form
if ( preg_match( '/тæ$/u', $word ) ) {
$word = mb_substr( $word, 0, -1 );
* @ingroup Language
*/
-
/**
* Turkish (Türkçe)
*
$wordReversed = array_reverse( $ar[0] ); // Here's an array with the order of the letters in the word reversed so we can find a match quicker *shrug*
// Find the last vowel in the word
- $wordLastVowel = NULL;
+ $wordLastVowel = null;
foreach ( $wordReversed as $xvalue ) {
foreach ( $allVowels as $yvalue ) {
if ( strcmp( $xvalue, $yvalue ) == 0 ) {
continue;
}
}
- if ( $wordLastVowel !== NULL ) {
+ if ( $wordLastVowel !== null ) {
break;
} else {
continue;
* @author Ezagren
* @author Fadli Idris
* @author Meno25
+ * @author Rachmat.Wahidi
* @author Sayed Muddasir
* @author Si Gam Acèh
*/
'badaccess-group0' => 'Droeneuh hana geupeuidin keu neupeulaku buët nyang neulakèë',
'badaccess-groups' => 'Buët nyang neulakèë geupeubatah keu ureuëng ngui lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.',
-'versionrequired' => 'Peureulèë MediaWiki versi $1',
+'versionrequired' => 'Peureulèë MediaWiki vèrsi $1',
'versionrequiredtext' => "MediaWiki versi $1 geupeureulèë keu neungui laman nyoë. Neu'eu [[Special:Version|on versi]]",
'ok' => 'Ka göt',
'retrievedfrom' => 'Geurumpok nibak "$1"',
'youhavenewmessages' => 'Droëneuh na $1 ($2).',
-'newmessageslink' => 'peusan barô',
-'newmessagesdifflink' => 'neuubah seuneulheuëh',
'youhavenewmessagesfromusers' => "Droeneuh na $1 nibak {{PLURAL:$3|ureueng nguy la'en|$3 ureueng nguy}} ($2).",
'youhavenewmessagesmanyusers' => "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
'newmessageslinkplural' => '{{PLURAL:$1|saboh peusan baro|peusan baro}}',
Keu neuk tamah atawa ubah teujeumah keu ban dum wiki, neungui [//translatewiki.net/ translatewiki.net], proyek lokalisasi MediaWiki.',
'mycustomcssprotected' => 'Droëneuh hana hak neuandam halaman CSS nyoe.',
'mycustomjsprotected' => 'Droëneuh hana idin neuandam halaman JavaScript nyoe.',
+'mypreferencesprotected' => 'Droeneuh hana izin keu neuandam geunalak droeneuh.',
'ns-specialprotected' => 'Laman khusuih bèk neuandam',
+'titleprotected' => 'Nan nyoe ka geupeulindông nibak neuandam lé [[User:$1|$1]].
+Dalèhjih nakeuh "\'\'$2\'\'".',
+'invalidtitle-knownnamespace' => 'Nan nyang hana sah ngön ruweueng nan "$2" ngön "$3"',
'exception-nologin' => 'Hana tamöng lom',
'exception-nologin-text' => 'halaman atawa buët nyoe beu neutamöng dilèë bak wiki nyoe.',
+# Virus scanner
+'virus-unknownscanner' => 'Antivirus hana meuturi:',
+
# Login and logout pages
+'logouttext' => "'''Droeneuh ka neutubiet log.'''
+
+Beuneuteupue meunyoe na padum-padum laman nyang deuh lagèe na neutamöng log, sampoe ka lheuh neupeugléh ''cache''.",
'welcomeuser' => 'Seulamat trôk teuka, $1 !',
'welcomecreation-msg' => 'Nan droëneuh ka geupeugöt.
Bèk tuwo neuatô [[Special:Preferences|geunalak {{SITENAME}}]] droëneuh.',
'loginerror' => 'Salah bak tamöng',
'createacct-error' => 'Peudapeuta nan barô hana meuhasé',
'createaccounterror' => 'H‘an jeuët peudapeuta nan: $1',
+'nocookiesnew' => "Nan ureueng ngui nyoe ka meupeugöt, tapi goh meutamöng.
+{{SITENAME}} jingui ''cookies'' keu peutamöng ureueng ngui.
+''Cookies'' droeneuh hana meupeuudép.
+Neupeuudép ''cookies'' dilèe, lheuh nyan neutamöng ngön nan ureueng ngui ngön lageuem rahsia droeneuh.",
'noname' => 'Nan ureuëng ngui nyang Droënueh peutamöng hana sah.',
'loginsuccesstitle' => 'Meuhasé tamöng',
'loginsuccess' => "'''Droëneuh jinoë ka neutamöng di {{SITENAME}} sibagoë \"\$1\".'''",
'noemailcreate' => 'Droeneuh suwah neuseudia alamt surat-e nyang jeut ngui.',
'passwordsent' => 'Lageuëm barô ka geupeu\'et u surat-e nyang geupeudapeuta keu "$1". Neutamöng teuma lheuëh neuteurimöng surat-e nyan.',
'eauthentsent' => 'Saboh surat-e keu peunyö ka geukirém u alamat surat-e Droëneuh. Droëneuh beuneuseutöt préntah lam surat nyan keu neupeunyö meunyö alamat nyan nakeuh beutôi atra Droëneuh. {{SITENAME}} h‘an geupeuudép surat Droëneuh meunyö langkah nyoë hana neupeubuet lom.',
+'cannotchangeemail' => 'Alamat surat-e han jeut geugantoe bak wiki nyoe.',
+'emaildisabled' => 'Situs nyoe han jeut geukirém surat-e.',
'accountcreated' => 'Ureuëng ngui ka teupeugöt',
'accountcreatedtext' => 'Ureuëng ngui keu [[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|talk]]) ka teupeugöt.',
'createaccount-title' => 'Peugöt ureuëng ngui keu {{SITENAME}}',
+'usernamehasherror' => 'Nan ureueng ngui han jeut na tanda pageue',
+'login-throttled' => 'Droeneuh ka lé that neuujoe tamöng.
+Neuprèh $1 sigohlom neuujoe lom.',
'loginlanguagelabel' => 'Bahsa: $1',
+'createacct-another-realname-tip' => 'Nan aseuli hana meucéh neupasoe.
+Meunyö neupasoe, euntreuk nan droëneuh nyan geupeuleumah mangat jitupeue soe nyang tuléh.',
+
+# Email sending
+'user-mail-no-addy' => 'Ujoe kirém surat-e ngön hana alamat surat-e.',
# Change password dialog
'resetpass' => 'Gantoë lageuëm rahsia',
'resetpass-no-info' => "Droëneuh suwah neutamöng mangat jeuët neu'eu laman nyoë",
'resetpass-submit-loggedin' => 'Gantoë lageuëm rahsia',
'resetpass-submit-cancel' => 'Pubateuë',
+'resetpass-temp-password' => 'Lageuem rahsia keu siat:',
+
+# Special:PasswordReset
+'passwordreset-username' => 'Ureueng ngui:',
+'passwordreset-capture' => 'Eu hasé surat-e?',
+'passwordreset-email' => 'Alamat surat-e:',
+'passwordreset-emailtitle' => 'Teuneurang nan ureueng ngui bak {{SITENAME}}',
+
+# Special:ChangeEmail
+'changeemail' => 'Gantoe alamat surat-e',
+'changeemail-header' => 'Gantoe alamat surat-e',
+'changeemail-no-info' => "Droeneuh suwah neutamöng mangat jeuet neu'eu laman nyoe",
+'changeemail-oldemail' => 'Alamat surat-e jinoe:',
+'changeemail-newemail' => 'Alamat surat-e barô:',
+'changeemail-none' => '(hana)',
+'changeemail-password' => 'Lageuem rahsia {{SITENAME}} droeneuh:',
+'changeemail-submit' => 'Gantoe surat-e',
+'changeemail-cancel' => 'Peubateue',
# Edit page toolbar
'bold_sample' => 'Rakam teubai',
'showdiff' => 'Peuleumah neuubah',
'anoneditwarning' => 'Droëneuh hana teudapeuta tamong. Alamat IP Droëneuh teucatat lam tarèh (riwayat away) ôn nyoë.',
'summary-preview' => 'Eu dilèë neuringkaih:',
+'blockedtitle' => 'Ureueng ngui geutheun',
'blockedtext' => "'''Nan ureuëng nguy atawa alamat IP Droëneuh ka geutheun.'''
Geutheun lé $1. Dalèh jih nakeuh ''$2''.
Droëneuh h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.
Alamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
+'autoblockedtext' => "'''Nan ureuëng nguy atawa alamat IP Droëneuh ka geutheun.'''
+
+Geutheun lé $1. Dalèh jih nakeuh ''$2''.
+
+* Geutheun yôh: $8
+* Neutheun maté tanggay bak: $6
+* Nyang geutheun: $7
+
+Droëneuh jeuët neutanyong bak $1 atawa [[{{MediaWiki:Grouppage-sysop}}|nyang urôh nyang la’én]] keu peugah haba bhah nyoë.
+
+Droëneuh h’an jeuët neunguy alat 'Kirém surat-e ureuëng nguy nyoë' keucuali ka neupasoë alamat surat-e nyang sah di [[Special:Preferences|Geunalak]] Droëneuh ngön Droëneuh ka geutheun keu nguy nyan.
+
+Alamat IP Droëneuh nakeuh $3, ngön ID neutheun nakeuh $5. Tulông peuseureuta salah saboh atawa ban duwa beurita nyoë bak tiëp teunanyöng nyang neupeugöt.",
+'blockednoreason' => 'hana dalèh nyang geubri',
+'whitelistedittext' => 'Droeneuh suwah $1 keu neuandam ôn.',
+'nosuchsectiontitle' => 'Bideueng hana geutumèe',
+'loginreqtitle' => 'Droeneuh payah neutamöng log.',
+'loginreqlink' => 'tamöng',
+'loginreqpagetext' => "Droeneuh payah $1 keu neu'eu ôn-ôn la'én.",
+'accmailtitle' => 'Lageuem rahsia ka meukirém',
'newarticle' => '(Barô)',
'newarticletext' => "Droëneuh ka neuseutöt peunawôt u laman nyang goh na.
Keu neupeugöt laman nyan, neukeutik lam plôk di yup (eu [[{{MediaWiki:Helppage}}|laman beunantu]] keu haba leubèh le).
Meunyö droëneuh trôk keunoë hana neusaja, neuteugön tèk '''back''' bak ''browser'''droëneuh.",
+'anontalkpagetext' => "----''Nyoe nakeuh ôn marit ureueng ngui nyang hana tamöng atawa hana geungui.''
+Saweub nyan, kamoe payah meukubah alamat IP-geuh keu meuparéksa.
+Alamat IP mungkén jingui lé padum-padum droe ureueng.
+Meunyoe droeneuh ureueng nyang hana tamöng nyan, tulông [[Special:UserLogin/signup|peugöt nan ureueng ngui]] atawa [[Special:UserLogin|tamöng log]] mangat meuteugah nibak bhah nyang hana meuphôm bak uroe la'én.",
'noarticletext' => 'Hana naseukah jinoë lam laman nyoë.
Ji Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak ôn-ôn la’én, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log nyang na hubôngan], atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} neu\'andam ôn nyoë]</span>.',
'noarticletext-nopermission' => 'Hana asoë bak laman nyoë jinoë.
Droëneuh jeuët [[Special:Search/{{PAGENAME}}|neumita keu nan ôn nyoë]] bak laman-laman la\'én,
atawa <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} neumita log nyang na meuhubông]</span>, tapi Droëneuh hana idin keu neupeugöt laman nyoë',
+'userpage-userdoesnotexist-view' => 'Ureueng ngui "$1" hana teudapeuta.',
'updated' => '(Seubarô)',
'note' => "'''Hareutoë:'''",
'previewnote' => "'''Beu neuingat meunyo laman nyoë goh lom neukeubah!'''",
'editing' => 'Andam $1',
+'creating' => 'Teungöh meupeugöt $1',
'editingsection' => 'Andam $1 (bideuëng)',
+'editingcomment' => 'Andam $1 (bideuëng)',
+'storedversion' => 'Riwayat meukubah',
+'yourdiff' => 'Bida',
'copyrightwarning' => "Beu neuingat bahwa ban mandum nyang Droëneuh tuléh keu {{SITENAME}} geukira geupeuteubiët di yup $2 (ngiëng $1 keu leubèh jeulah). Meunyoë Droëneuh h‘an neutém teunuléh Droëneuh ji’andam ngön jiba ho ho la’én, bèk neupasoë teunuléh Droëneuh keunoë.<br />Droëneuh neumeujanji chit meunyoë teunuléh nyoë nakeuh atra neutuléh keudroë, atawa neucok nibak nè nè atra umôm atawa nè bibeuëh la’én.
'''BÈK NEUPASOË TEUNULÉH NYANG GEUPEULINDÔNG HAK KARANG NYANG HANA IDIN'''",
'templatesused' => '{{PLURAL:$1|Templat|Templates}} nyang geungui bak laman nyoë:',
'template-semiprotected' => '(siteungoh-lindông)',
'hiddencategories' => 'Laman nyoë nakeuh anggèëta nibak {{PLURAL:$1|1 kawan teusom |$1 kawan teusom}}:',
'nocreatetext' => '{{SITENAME}} ka jiköt bak peugöt laman barô. Ji Droëneuh jeuët neuriwang teuma ngön neu’andam laman nyang ka na, atawa [[Special:UserLogin|neutamong atawa neudapeuta]].',
+'nocreate-loggedin' => 'Droeneuh hana khut keu neupeugöt laman-laman barô.',
+'sectioneditnotsupported-title' => 'Andam bideung hana meudukông',
+'sectioneditnotsupported-text' => 'Andam bideung hana meudukông bak ôn nyoe.',
+'permissionserrors' => 'Salah khut/hak tamöng',
+'permissionserrorstext' => 'Droëneuh hana hak tamöng keu $2, muroë {{PLURAL:$1|choë|choë}} nyoë:',
'permissionserrorstext-withaction' => 'Droëneuh hana hak tamöng keu $2, muroë {{PLURAL:$1|choë|choë}} nyoë:',
'recreate-moveddeleted-warn' => "'''Ingat: Droëneuh neupeugöt ulang saboh laman nyang ka tom geusampôh. ''',
Nyoë pat nakeuh log seunampôh nibak laman nyoë:",
'moveddeleted-notice' => 'Laman nyoë ka geusampôh.
Log seunampôh ngön log pinah laman nyoë geupeuseudia di yup nyoë keu keuneubah.',
+'log-fulllog' => 'Eu ban dum ceunatat',
+'edit-hook-aborted' => "Seunampôh geupeubateuë lé kaw'ét parser.
+Hana jeuneulaih.",
+'edit-gone-missing' => 'Han jeut peubarô ôn.
+Ôn nyoe mungkén ka geusampôh.',
+'postedit-confirmation' => 'Neuandam droeneuh ka meukubah.',
+'edit-already-exists' => 'Han jeut peugöt ôn barô.
+Ôn nyoe ka lheuh na.',
# Parser/template warnings
'post-expand-template-inclusion-warning' => "'''Ingat:''' Seunipat seunaleuëk nyang neunguy rayek that.
Alasan-alasan nyan hana geupeureumeuën.",
'post-expand-template-argument-category' => 'Laman ngön dalèh seunaleuëk nyang hana geupeureumeuën',
+# Account creation failure
+'cantcreateaccounttitle' => 'Han jeut peugöt nan ureueng ngui',
+'cantcreateaccount-text' => "Peuneugöt nan ureueng ngui nibak alamat IP ('''$1''') ka geutheun lé [[User:$3|$3]].
+
+Dalèh $3 nyoe nakeuh ''$2''",
+
# History pages
'viewpagelogs' => 'Eu log laman nyoë',
+'nohistory' => 'Hana riwayat neuandam awai keu ôn nyoe.',
'currentrev' => 'Geunantoë jinoë',
'currentrev-asof' => 'Geunantoë barô bak $1',
'revisionasof' => 'Geunantoë tiëp $1',
'nextrevision' => 'Geunantoë lheuëh nyan→',
'currentrevisionlink' => 'Geunantoë jinoë',
'cur' => 'jin',
+'next' => 'u keu',
'last' => 'sigohlom',
'page_first' => 'phôn',
'page_last' => 'keuneulheuëh',
'history-show-deleted' => 'Nyang geusampôh mantöng',
'histfirst' => 'paléng trép',
'histlast' => 'paléng barô',
+'historyempty' => '(soh)',
# Revision feed
+'history-feed-title' => 'Riwayat neupeupah',
+'history-feed-description' => 'Riwayat neupeupah keu ôn nyoe bak wiki',
'history-feed-item-nocomment' => '$1 bak $2',
# Revision deletion
+'rev-deleted-comment' => '(mohtasa neuandam geusampôh)',
+'rev-deleted-user' => '(nan ureueng ngui geusampôh)',
+'rev-deleted-user-contribs' => '[nan ureueng ngui atawa alamat IP geusampôh - neuandam geupeusom bak dapeuta beuneuri]',
'rev-delundel' => 'peuleumah/peusom',
+'rev-showdeleted' => 'peudeuh',
+'revdelete-show-file-submit' => 'Nyoe',
+'revdelete-hide-comment' => 'Mohtasa neuandam',
+'revdelete-radio-same' => '(bèk neugantoe)',
+'revdelete-radio-set' => 'Deuh',
+'revdelete-radio-unset' => 'Teusom',
+'revdelete-log' => 'Dalèh:',
'revdel-restore' => 'Gantoë seuneudeuih',
'revdel-restore-deleted' => 'geunantoe nyang ka geusampôh',
'revdel-restore-visible' => 'geunantoë nyang deuih',
'pagehist' => 'Taréh laman',
'deletedhist' => 'Taréh nyang meusampôh',
+# History merging
+'mergehistory-from' => 'Asai ôn:',
+'mergehistory-invalid-source' => 'Asai ôn payah nan nyang beutôi.',
+'mergehistory-reason' => 'Dalèh:',
+
# Merge log
+'mergelog' => 'Peugabông log',
'revertmerge' => 'Hana jadèh peugabông',
# Diffs
'lineno' => 'Baréh $1:',
'compareselectedversions' => 'Peubandéng curak teupiléh',
'editundo' => 'pubateuë',
+'diff-empty' => '(Hana bida)',
'diff-multi' => '({{PLURAL:$1|Saboh|$1}} geunantoë antara nyang geupeugot le {{PLURAL:$2|sidroe|$2}} ureueng nguy hana geupeuleumah)',
# Search results
'powersearch-ns' => 'Mita bak ruweuëng nan:',
'powersearch-redir' => 'Dapeuta peuninah',
'powersearch-field' => 'Mita',
+'powersearch-toggleall' => 'Ban dum',
+'powersearch-togglenone' => 'Hana',
# Preferences page
'preferences' => 'Galak',
'mypreferences' => 'Atô',
+'prefs-edits' => 'Jumeulah neuandam:',
+'changepassword' => 'Gantoe lageuem rahsia',
+'prefs-skin' => 'Kulét',
+'skin-preview' => 'Eu dilèe',
+'datedefault' => 'Hana geunalak',
+'prefs-beta' => 'Fitur bèta',
+'prefs-datetime' => 'Uroe ngön jeum',
+'prefs-user-pages' => 'Laman ureueng ngui',
+'prefs-personal' => 'Profil ureueng ngui',
'prefs-rc' => 'Ban meuubah',
+'prefs-watchlist' => 'Dapeuta keunalön',
+'prefs-watchlist-days' => 'Jumeulah uroe nyang meupeudeuh bak dapeuta keunalön:',
+'prefs-watchlist-days-max' => '{{PLURAL:$1|uroë}}',
+'prefs-misc' => "La'én-la'én",
+'prefs-resetpass' => 'Gantoe lageuem rahsia',
+'prefs-changeemail' => 'Gantoe alamat surat-e',
+'prefs-setemail' => 'Pasoe alamat surat-e',
'prefs-email' => 'Peuniléh surat-e',
+'prefs-rendering' => 'Seuneudeuh',
+'saveprefs' => 'Kubah',
+'resetprefs' => 'Peugléh neuubah nyang goh meukubah',
+'prefs-editing' => 'Neuandam',
+'rows' => 'Baréh:',
'searchresultshead' => 'Mita',
+'resultsperpage' => 'Hasé lam saboh laman:',
+'stub-threshold-disabled' => 'Geupeumaté',
+'timezoneuseoffset' => "La'én (peuteuntèe bidajih)",
+'timezoneoffset' => 'Bida:',
+'timezoneregion-america' => 'Amirika',
+'timezoneregion-antarctica' => 'Antartika',
+'timezoneregion-atlantic' => 'Laôt Atlantik',
+'timezoneregion-europe' => 'Ierupa',
+'timezoneregion-indian' => 'Laôt India',
+'timezoneregion-pacific' => 'Laôt Pasifik',
+'allowemail' => "Peuudép surat-e nibak ureueng ngui la'én",
'prefs-searchoptions' => 'Mita',
'prefs-namespaces' => 'Ruweuëng nan',
+'defaultns' => 'Atawa neumita lam ruweueng nan nyoe:',
+'default' => 'meuneumat',
'prefs-files' => 'Beureukaih',
'youremail' => 'Surat-e:',
+'prefs-registration' => 'Watèe neudapeuta:',
'yourrealname' => 'Nan aseuli:',
'yourlanguage' => 'Bahsa:',
+'yournick' => 'Tanda jaroe barô:',
+'prefs-help-signature' => 'Komèntar bak ôn marit suwah neubôh "<nowiki>~~~~</nowiki>", nyang eunteuk meugantoe keu tanda jaroe droeneuh ngön watèe jinoe.',
+'badsiglength' => 'Tanda jaroe droeneuh panyang that.
+Panyangjih bèk leubèh nibak $1 {{PLURAL:$1|haraih|haraih}}.',
+'gender-unknown' => 'Hana geupeunyata',
+'gender-male' => 'Ureueng agam',
+'gender-female' => 'Ureueng inöng',
'email' => 'Surat-e',
'prefs-help-realname' => '* Nan aseuli hana meucéh neupasoë.
Meunyö neupasoë, euntreuk nan Droëneuh nyan geupeuleumah mangat jitupeuë soë nyang tuléh.',
'prefs-help-email' => 'Alamat surat-e hana meucéh na, tapi geupeureulèë keu seumeugöt ulang lageuem, meunyö droeneuh tuwö lageuëm.',
'prefs-help-email-others' => "Droeneuh jeuet cit neupiléh neupubiyeuë ureuëng la'én geupeu'et surat keu droeneuh röt surat-e röt seunambat bak laman ureueng ngui atawa on mariët.
Surat-e droeneuh h'an geupeugah keu ureuëng nyan.",
+'prefs-help-email-required' => 'Peureulèe alamat surat-e.',
+'prefs-signature' => 'Tanda jaroe',
+'prefs-dateformat' => 'Format uroe/watèe',
+'prefs-timeoffset' => 'Bida watèe',
+'prefs-advancedediting' => 'Peuniléh umom',
+'prefs-editor' => 'Ureueng andam',
+'prefs-preview' => 'Eu dilèe',
+'prefs-diffs' => 'Bida',
+'prefs-help-prefershttps' => 'Geunalak nyoe geupeudeuh watèe neutamöng lom.',
+
+# User preference: email validation using jQuery
+'email-address-validity-valid' => 'Alamat surat-e sah',
+'email-address-validity-invalid' => 'Pasoe alamat surat-e nyang sah',
+
+# User rights
+'userrights-user-editname' => 'Pasoe nan ureueng ngui:',
+'editusergroup' => 'Ubah kawan ureueng ngui',
+'editinguser' => "Gantoe khut ureueng ngui '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Ubah kawan ureueng ngui',
+'saveusergroups' => 'Ubah kawan ureueng ngui',
+'userrights-groupsmember' => 'Anggèeta nibak:',
+'userrights-reason' => 'Dalèh:',
+'userrights-no-interwiki' => "Droeneuh hana izin keu neuubah khut ureueng ngui bak wiki la'én.",
+'userrights-notallowed' => 'Droeneuh hana izin keu neutamah atawa neupeugadöh khut ureueng ngui.',
+'userrights-changeable-col' => 'Kawan nyang jeut neugantoe',
+'userrights-unchangeable-col' => 'Kawan nyang han jeut neugantoe',
# Groups
+'group' => 'Kawan:',
+'group-user' => 'Ureueng-ureueng ngui',
+'group-autoconfirmed' => 'Ureueng ngui nyang meu-konfirmasi otomatis',
'group-sysop' => 'Ureuëng urôh',
-
+'group-bureaucrat' => 'Birôkrat',
+'group-suppress' => 'Ureueng kalön',
+'group-all' => '(ban dum)',
+
+'group-user-member' => '{{GENDER:$1|ureueng ngui}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|ureueng ngui meu-konfirmasi otomatis}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|ureueng urôh}}',
+'group-bureaucrat-member' => '{{GENDER:$1|birôkrat}}',
+'group-suppress-member' => '{{GENDER:$1|ureueng kalön}}',
+
+'grouppage-user' => '{{ns:project}}:Ureueng ngui',
+'grouppage-autoconfirmed' => '{{ns:project}}:Ureueng ngui meu-konfirmasi otomatis',
+'grouppage-bot' => '{{ns:project}}:Bots',
'grouppage-sysop' => '{{ns:project}}:Ureuëng urôh',
+'grouppage-bureaucrat' => '{{ns:project}}:Birôkrat',
+'grouppage-suppress' => '{{ns:project}}:Ureueng kalön',
+
+# Rights
+'right-read' => 'Beuet laman',
+'right-edit' => 'Andam laman',
+'right-createpage' => 'Peugöt laman barô (nyang kön laman marit)',
+'right-createtalk' => 'Peugöt ôn marit',
+'right-createaccount' => 'Peugöt nan ureueng ngui barô',
+'right-minoredit' => 'Bôh tanda seubagoe andam ubeut',
+'right-move' => 'Pinah laman',
+'right-move-subpages' => 'Pinah laman ngön ban dum aneuk laman',
+'right-move-rootuserpages' => 'Pinah laman ureueng ngui',
+'right-movefile' => 'Pinah beureukaih',
+'right-upload' => 'Peutamöng beureukaih',
+'right-upload_by_url' => 'Peutamöng beureukaih nibak URL',
+'right-delete' => 'Sampôh laman',
+'right-bigdelete' => 'Sampôh laman ngön ban dum riwayatjih',
+'right-browsearchive' => 'Mita laman nyang geusampôh',
# Special:Log/newusers
'newuserlogpage' => 'Ureuëng ngui barô',
'minoreditletter' => 'b',
'newpageletter' => 'B',
'boteditletter' => 'b',
+'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|ureueng kalön|ureueng kalön}}]',
+'rc_categories_any' => 'Pue-pue mantöng',
+'rc-change-size-new' => '$1 {{PLURAL:$1|bita|bita}} lheuh meuandam',
+'newsectionsummary' => '/* $1 */ bideung barô',
'rc-enhanced-expand' => 'Peuleumah rincian',
'rc-enhanced-hide' => 'Peusom rincian',
+'rc-old-title' => 'sigohlom nyan geupeugöt "$1"',
# Recent changes linked
'recentchangeslinked' => "Neuubah meukaw'èt",
# Upload
'upload' => 'Peutamöng beureukaih',
'uploadbtn' => 'Peutamong beureukaih',
+'reuploaddesc' => 'Riwang u laman peutamöng',
+'uploadnologin' => 'Hana lom meutamöng',
+'uploadnologintext' => 'Droeneuh suwah $1 keu neupeutamöng beureukaih.',
+'uploadlog' => 'ceunatat peutamöng',
'uploadlogpage' => 'Log peutamöng',
+'uploadlogpagetext' => 'Nyoe nakeuh dapeuta peutamöng barô.
+Eu [[Special:NewFiles|galeri beureukaih barô]] keu seuneudeuh barô.',
+'filename' => 'Nan beureukaih',
'filedesc' => 'Ehtisa',
+'fileuploadsummary' => 'Éhtisa:',
+'filesource' => 'Nè',
+'uploadedfiles' => 'Beureukaih nyang meupeutamöng',
+'minlength1' => 'Nan beureukaih beuna saboh haraih.',
+'illegalfilename' => 'Nan beureukaih "$1" meuasoe seunurat nyang han jeut na bak nan. Tulông gantoe nan nyan sigohlom neupeutamöng lom.',
+'filename-toolong' => 'Nan beureukaih han jeut leubèh nibak 240 bita.',
+'badfilename' => 'Nan beureukaih ka meugantoe keu "$1".',
+'empty-file' => 'Beureukaih nyang neupeutamöng soh.',
+'file-too-large' => 'Beureukaih nyang neupeutamöng rayek that.',
+'filename-tooshort' => 'Nan beureukaih paneuk that.',
+'filetype-banned' => 'Jeunèh beureukaih nyoe geutheun.',
+'illegal-filename' => 'Nan beureukaih han jeut lagèe nyoe.',
+'savefile' => 'Kubah beureukaih',
'uploadedimage' => 'peutamöng "[[$1]]"',
+'overwroteimage' => 'peutamöng vèrsi barô "[[$1]]"',
+'upload-source' => 'Asai beureukaih',
+'sourcefilename' => 'Asai nan beureukaih:',
+'sourceurl' => 'Asai URL:',
+'upload-maxfilesize' => 'Paléng rayek beureukaih: $1',
+'upload-description' => 'Teuneurang beureukaih',
+'watchthisupload' => 'Kalön beureukaih nyoe',
+'upload-success-subj' => 'Ka meupeutamöng',
+
+# img_auth script messages
+'img-auth-nofile' => 'Hana beureukaih "$1".',
'license' => 'Jeunèh lisensi:',
'license-header' => 'Jeunèh lisensi',
# Special:ListFiles
+'imgfile' => 'beureukaih',
'listfiles' => 'Dapeuta beureukah',
+'listfiles_thumb' => 'Beuntuk ubeut',
+'listfiles_date' => 'Uroe',
+'listfiles_name' => 'Nan',
+'listfiles_user' => 'Ureueng ngui',
+'listfiles_size' => 'Rayek',
+'listfiles_description' => 'Teuneurang',
+'listfiles_count' => 'Vèrsi',
+'listfiles-show-all' => 'Peurôh vèrsi awai gamba',
+'listfiles-latestversion' => 'Vèrsi jinoe',
+'listfiles-latestversion-yes' => 'Nyoe',
+'listfiles-latestversion-no' => 'Kön',
# File description page
'file-anchor-link' => 'Beureukaih',
'filehist' => 'Riwayat beureukaih',
'filehist-help' => "Neuteugon bak uroë buleuën/watèë keu neu'eu beureukaih nyoë ‘oh watèë nyan.",
+'filehist-deleteall' => 'sampôh ban dum',
+'filehist-deleteone' => 'sampôh',
'filehist-revert' => 'peuriwang',
'filehist-current' => 'jinoë hat',
'filehist-datetime' => 'Uroë buleuën/Watèë',
'filehist-thumb' => 'Beuntuk ubeut',
'filehist-thumbtext' => 'Beuntuk ubeut keu seunalén tiëp $1',
+'filehist-nothumb' => 'Hana beuntuk ubeut',
'filehist-user' => 'Ureuëng ngui',
'filehist-dimensions' => 'Dimènsi',
'filehist-filesize' => 'Rayek beureukah',
'filehist-comment' => "Seuneu'ôt",
+'filehist-missing' => 'Beureukaih hana meutumèe',
'imagelinks' => 'Seuneungui beureukaih',
'linkstoimage' => '{{PLURAL:$1|laman}} di yup nyoë mupawôt u beureukaih nyoë:',
'nolinkstoimage' => 'Hana laman nyang na meupawôt u beureukaih nyoë.',
'allpagesfrom' => 'Peuleumah laman peuphôn nibak:',
'allpagesto' => 'Peuleumah laman geupeuakhé bak:',
'allarticles' => 'Dapeuta teunuléh',
+'allpagesprev' => 'U likôt',
+'allpagesnext' => 'U keue',
'allpagessubmit' => 'Mita',
'allpagesprefix' => 'Peuleumah laman ngön harah phôn:',
+'allpages-hide-redirects' => 'Peusom peuninah',
# Special:Categories
'categories' => 'Dapeuta kawan',
+'special-categories-sort-count' => 'atôe meunurôt jumeulah',
+'special-categories-sort-abc' => 'atôe meunurôt seunurat',
+
+# Special:DeletedContributions
+'deletedcontributions' => 'Beuneuri nyang geusampôh',
+'deletedcontributions-title' => 'Beuneuri nyang geusampôh',
+'sp-deletedcontributions-contribs' => 'beuneuri',
# Special:LinkSearch
'linksearch' => 'Mita seuneumat luwa',
+'linksearch-pat' => 'Pola mita:',
+'linksearch-ns' => 'Ruweueng nan:',
'linksearch-ok' => 'Mita',
'linksearch-line' => '$1 meupawôt nibak $2',
+# Special:ListUsers
+'listusersfrom' => 'Peuleumah ureueng ngui nyang neuawai ngön:',
+'listusers-submit' => 'Peuleumah',
+'listusers-noresult' => 'Hana ureueng ngui nyang meutumèe.',
+'listusers-blocked' => '(geutheun)',
+
+# Special:ActiveUsers
+'activeusers' => 'Dapeuta ureueng ngui udép',
+'activeusers-intro' => 'Nyoe nakeuh dapeuta ureueng ngui nyang na geuandam $1 {{PLURAL:$1|uroe|uroe}} u likôt.',
+'activeusers-count' => '$1 {{PLURAL:$1|buet|buet}} lam {{PLURAL:$3|uroe|$3 uroe}} u likôt',
+'activeusers-from' => 'Peuleumah ureueng ngui nyang neuawai ngön:',
+'activeusers-hidebots' => 'Peusom bot',
+'activeusers-hidesysops' => 'Peusom ureueng urôh',
+'activeusers-noresult' => 'Hana ureueng ngui nyang meutumèe.',
+
# Special:ListGroupRights
+'listgrouprights' => 'Dapeuta khut ureueng ngui',
+'listgrouprights-key' => 'Teuneurang:
+* <span class="listgrouprights-granted">Khut nyang geubri</span>
+* <span class="listgrouprights-revoked">Khut nyang hana geubri</span>',
+'listgrouprights-group' => 'Kawan',
+'listgrouprights-rights' => 'Khut',
+'listgrouprights-helppage' => 'Beunantu:Khut kawan',
'listgrouprights-members' => '(dapeuta anggèëta)',
+'listgrouprights-addgroup' => 'Tamah {{PLURAL:$2|kawan|kawan}}: $1',
+'listgrouprights-removegroup' => 'Sampôh {{PLURAL:$2|kawan|kawan}}: $1',
+'listgrouprights-addgroup-all' => 'Tamah ban dum kawan',
+'listgrouprights-removegroup-all' => 'Sampôh ban dum kawan',
# Email user
'emailuser' => 'Surat-e ureuëng ngui',
'emailuser-title-target' => "Peu'ét surat-e keu {{GENDER:$1|ureuëng ngui}} nyoë",
'emailuser-title-notarget' => "Peu'ét surat-e",
'emailpage' => "Peu'ét surat-e keu ureuëng ngui",
+'emailusername' => 'Ureueng ngui:',
+'emailusernamesubmit' => 'Kirém',
+'email-legend' => "Kirém surat-e keu ureueng ngui {{SITENAME}} la'én",
+'emailfrom' => 'Ureueng kirém:',
+'emailto' => 'Ureueng teurimöng:',
+'emailsubject' => 'Bhah:',
+'emailmessage' => 'Peusan:',
+'emailsend' => 'Kirém',
+'emailccme' => 'Kubah saboh seunalén surat-e lôn.',
+'emailccsubject' => 'Salén peusan droeneuh keu $1: $2',
+'emailsent' => 'Surat-e meukirém',
+'emailsenttext' => 'Surat-e droeneuh ka meukirém.',
# Watchlist
'watchlist' => 'Dapeuta keunalön',
'tooltip-rollback' => 'Peuriwang neu’andam-neu’andam bak laman nyoë u nyang tuléh keuneulheuëh lam sigo teugön',
'tooltip-undo' => 'Peuriwang geunantoë nyoë ngön peuhah plôk neu’andam ngön cara eu dilèë. Choë jeuët geupeutamah bak plôk ehtisa.',
'tooltip-summary' => 'Pasoë éhtisa paneuk',
+'interlanguage-link-title' => '$1 – $2',
# Info page
'pageinfo-toolboxlink' => 'Teuneurang laman',
# Special:SpecialPages
'specialpages' => 'Laman kusuih',
-'specialpages-note' => '----
-* Laman kusuih lagèë biasa.
+'specialpages-note' => '* Laman kusuih lagèë biasa.
* <span class="mw-specialpagerestricted">Laman kusuih meuhat.</span>',
'specialpages-group-maintenance' => 'Beuneuri thèë plara',
'specialpages-group-other' => "La'én-la'én",
'ok' => 'ok',
'retrievedfrom' => 'تم الاسترجاع من "$1"',
'youhavenewmessages' => 'توجد لديك $1 ($2).',
-'newmessageslink' => 'رسائل جديدة',
-'newmessagesdifflink' => 'آخر تغيير',
'youhavenewmessagesmulti' => 'لديك رسائل جديدة على $1',
'editsection' => 'modifi el page (baddelha)',
'editold' => 'modifi el page (baddelha)',
# External editor support
'edit-externally' => 'عدل هذا الملف باستخدام تطبيق خارجي',
-'edit-externally-help' => '(انظر [//www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
+'edit-externally-help' => '(انظر [https://www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'الكل',
'ok' => 'OK',
'retrievedfrom' => 'Ontsluit van "$1"',
'youhavenewmessages' => 'U het $1 (sien $2).',
-'newmessageslink' => 'nuwe boodskappe',
-'newmessagesdifflink' => 'die laaste wysiging',
'youhavenewmessagesfromusers' => "U het $1 van {{PLURAL:$3|'n ander gebruiker|$3 gebruikers}} ($2).",
'youhavenewmessagesmanyusers' => 'U het $1 van baie gebruikers ($2).',
'newmessageslinkplural' => "{{PLURAL:$1|'n nuwe boodskap|nuwe boodskappe}}",
'preferences' => 'Voorkeure',
'mypreferences' => 'Voorkeure',
'prefs-edits' => 'Aantal wysigings:',
-'prefsnologin' => 'Nie ingeteken nie',
-'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aanmeld]</span> om voorkeure te kan verander.',
'changepassword' => 'Verander wagwoord',
'prefs-skin' => 'Omslag',
'skin-preview' => 'Voorskou',
'recentchanges-label-minor' => "Hierdie is 'n klein wysiging",
'recentchanges-label-bot' => "Hierdie wysiging was deur 'n bot uitgevoer",
'recentchanges-label-unpatrolled' => 'Die wysiging is nog nie gekontroleer nie',
+'recentchanges-legend-newpage' => '$1 - nuwe bladsy',
'rcnote' => "Hier volg die laaste {{PLURAL:$1|'''$1''' wysiging|'''$1''' wysigings}} gedurende die afgelope {{PLURAL:$2|dag|'''$2''' dae}}, soos vanaf $4 om $5.",
'rcnotefrom' => "Hier volg wysigings sedert '''$2''' (maksimum van '''$1''' word gewys).",
'rclistfrom' => 'Vertoon wysigings vanaf $1',
'allmessagesdefault' => 'Verstekteks',
'allmessagescurrent' => 'Huidige teks',
'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.",
+Gaan na [https://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',
'allmessages-filter' => 'Filtreer op staat van verandering:',
U kan daar \'n wysigingsopsomming byvoeg.',
'tooltip-preferences-save' => 'Stoor voorkeure',
'tooltip-summary' => "Verskaf 'n kort opsomming",
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/** Gemeenskaplike CSS vir alle omslae */',
# External editor support
'edit-externally' => "Wysig hierdie lêer met 'n eksterne program",
-'edit-externally-help' => '(Sien [//www.mediawiki.org/wiki/Manual:External_editors instruksies] vir meer inligting)',
+'edit-externally-help' => '(Sien [https://www.mediawiki.org/wiki/Manual:External_editors instruksies] vir meer inligting)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alles',
'version-hook-subscribedby' => 'Gebruik deur',
'version-version' => '(Weergawe $1)',
'version-license' => 'Lisensie',
-'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[//www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
+'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[https://www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
'version-poweredby-others' => 'andere',
'version-poweredby-translators' => 'translatewiki.net-vertalers',
'version-credits-summary' => 'Ons erken graag die volgende persone vir hul bydrae aan [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Spesiale bladsye',
-'specialpages-note' => '----
-* Normale spesiale bladsye.
+'specialpages-note' => '* Normale spesiale bladsye.
* <span class="mw-specialpagerestricted">Spesiale bladsye met beperkte toegang.</span>
* <span class="mw-specialpagecached">Spesiale bladsye met gegewens uit die kas (kan verouderd wees).</span>',
'specialpages-group-maintenance' => 'Onderhoud verslae',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|greep|grepe}}',
'limitreport-expansiondepth' => 'Hoogste uitbreidingsdiepte',
+# Special:ExpandTemplates
+'expandtemplates' => 'Brei sjablone uit',
+'expand_templates_intro' => 'Hierdie spesiale bladsy lees die invoerteks en vervang al die sjablone rekursief.
+Dit vervang ook ontlederfunksies soos
+<nowiki>{{</nowiki>#language:…}}, en veranderlikes soos
+<nowiki>{{</nowiki>CURRENTDAY}}— omtrent alles tussen dubbele krulhakkies word vervang.
+Dit word gedoen deur die relevante funksies in die MediaWiki-ontleder te roep.',
+'expand_templates_title' => 'Kontekstitel, vir {{FULLPAGENAME}}, ensovoorts:',
+'expand_templates_input' => 'Invoerteks:',
+'expand_templates_output' => 'Resultaat',
+'expand_templates_xml_output' => 'XML-afvoer',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Verwyder kommentaar',
+'expand_templates_remove_nowiki' => 'Onderdruk <nowiki> etikette in die resultaat',
+'expand_templates_generate_xml' => 'Wys XML-ontledingsboom',
+'expand_templates_preview' => 'Voorskou',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Marrë nga "$1"',
'youhavenewmessages' => 'Keni $1 ($2).',
-'newmessageslink' => 'mesazhe të reja',
-'newmessagesdifflink' => 'ndryshimi i fundit',
'youhavenewmessagesmulti' => 'Keni mesazhe të reja në $1',
'editsection' => 'redakto',
'editold' => 'redakto',
'preferences' => 'Parapëlqimet',
'mypreferences' => 'Parapëlqimet e mija',
'prefs-edits' => 'Numri i redaktimeve:',
-'prefsnologin' => 'Nuk jeni kyçë',
-'prefsnologintext' => 'Duheni me qenë <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} i kyçun]</span> për me i caktue parapëlqimet.',
'changepassword' => 'Ndërrimi i fjalëkalimit',
'prefs-skin' => 'Doka',
'skin-preview' => 'Parapâmja',
# External editor support
'edit-externally' => 'Ndryshoni kët figurë/skedë me një mjet të jashtëm',
-'edit-externally-help' => '(Shih [//www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për mâ shumë informata)',
+'edit-externally-help' => '(Shih [https://www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për mâ shumë informata)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'krejt',
'ok' => 'እሺ',
'retrievedfrom' => 'ከ «$1» የተወሰደ',
'youhavenewmessages' => '$1 አሉዎት ($2)።',
-'newmessageslink' => 'አዲስ መልእክቶች',
-'newmessagesdifflink' => 'የመጨረሻ ለውጥ',
'youhavenewmessagesfromusers' => 'ከ{{PLURAL:$3|ሌላ አባል|$3 አባላት}} $1 {{PLURAL:$1|አለዎት|አሉልዎ}}። ($2).',
'youhavenewmessagesmanyusers' => 'ከአሥር አባላት በላይ $1 አሉልዎ! ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|፩ አዲስ መልዕክት|አዲስ መልእክቶች}}',
'preferences' => 'ምርጫዎች፤',
'mypreferences' => 'ምርጫዎች፤',
'prefs-edits' => 'የለውጦች ቁጥር:',
-'prefsnologin' => 'ገና አልገቡም',
-'prefsnologintext' => 'ምርጫዎችዎን ለማስተካከል አስቀድሞ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} መግባት]</span> ያስፈልግዎታል።',
'changepassword' => 'መግቢያ ቃልዎን ለመቀየር',
'prefs-skin' => 'የድህረ-ገጽ መልክ',
'skin-preview' => 'ቅድመ-ዕይታ',
'recentchanges-label-minor' => 'ይህ ለውጥ ጥቃቅን ነው።',
'recentchanges-label-bot' => 'ይኸው ለውጥ በሎሌ ተደረገ።',
'recentchanges-label-unpatrolled' => 'ይህ እርማት ገና አልተገመገመም',
+'recentchanges-legend-newpage' => '$1 - አዲስ ገጽ',
'rcnote' => "ከ$5 $4 እ.ኤ.አ. {{PLURAL:$2|ባለፈው 1 ቀን|ባለፉት '''$2''' ቀኖች}} {{PLURAL:$1|የተደረገው '''1''' ለውጥ እታች ይገኛል|የተደረጉት '''$1''' መጨረሻ ለውጦች እታች ይገኛሉ}}።",
'rcnotefrom' => "ከ'''$2''' ጀምሮ የተቀየሩት ገጾች (እስከ '''$1''' ድረስ) ክዚህ በታች ይታያሉ።",
'rclistfrom' => '(ከ $1 ጀምሮ አዲስ ለውጦቹን ለማየት)',
'allmessagesdefault' => 'የቆየው ጽሕፈት',
'allmessagescurrent' => 'ያሁኑ ጽሕፈት',
'allmessagestext' => 'በ«MediaWiki» ክፍለ-ዊኪ ያሉት የድረገጽ መልክ መልእክቶች ሙሉ ዝርዝር ይህ ነው።
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ስለ ተዘጋ '''{{ns:special}}:Allmessages''' ሊጠቀም አይችልም።",
'allmessages-filter-legend' => 'ማጣሪያ',
'allmessages-filter-all' => 'ሁሉ',
# External editor support
'edit-externally' => 'ይህንን ፋይል በአፍአዊ ሶፍትዌር ለማዘጋጀት',
-'edit-externally-help' => '(ለተጨማሪ መረጃ ይህን ገፅ ተመልከቱ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(ለተጨማሪ መረጃ ይህን ገፅ ተመልከቱ [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ሁሉ',
'api-error-uploaddisabled' => 'ፋይል መላክ በዚህ ውኪ ላይ አልተፈቀደም።',
'api-error-verification-error' => 'ይህ ፋይል የተበላሸ ወይም ትክክል ያልሆነ ቅጥያ ያለው ሊሆን ይችላል።',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'እሺ',
+
);
'pagetitle' => '$1 - {{SITENAME}}',
'retrievedfrom' => 'Obtenito de "$1"',
'youhavenewmessages' => 'Tiene $1 ($2).',
-'newmessageslink' => 'mensaches nuevos',
-'newmessagesdifflink' => 'Esferencias con a versión anterior',
'youhavenewmessagesmulti' => 'Tiene nuevos mensaches en $1',
'editsection' => 'editar',
'editold' => 'editar',
'preferences' => 'Preferencias',
'mypreferences' => 'Preferencias',
'prefs-edits' => "Numero d'edicions:",
-'prefsnologin' => 'No ye identificato',
-'prefsnologintext' => 'Ha d\'haber <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} encetato una sesión] </span> ta cambiar as preferencias d\'usuario.',
'changepassword' => 'Cambiar a clau',
'prefs-skin' => 'Aparencia',
'skin-preview' => 'Fer una prebatina',
'recentchanges-label-minor' => 'Ista ye una edición menor',
'recentchanges-label-bot' => 'Ista edición fue feita por un bot',
'recentchanges-label-unpatrolled' => "Esta edición encara no s'ha controlato",
+'recentchanges-legend-newpage' => '$1 - pachina nueva',
'rcnote' => "Contino {{PLURAL:$1|s'amuestra o unico cambeo feito|s'amuestran os zaguers '''$1''' cambeos feitos}} en {{PLURAL:$2|o zaguer día|os zaguers '''$2''' días}}, dica o $5, $4.",
'rcnotefrom' => "Contino s'amuestran os cambeos dende '''$2''' (dica '''$1''').",
'rclistfrom' => 'Amostrar cambeos recients dende $1',
'allmessagesdefault' => 'texto por defecto',
'allmessagescurrent' => 'texto actual',
'allmessagestext' => "Ista ye una lista de totz os mensaches disponibles en o espacio de nombres MediaWiki.
-Vesite por favor [//www.mediawiki.org/wiki/Localisation a pachina sobre localización de MediaWiki] y [//translatewiki.net translatewiki.net] si deseya contrebuyir t'a localización cheneral de MediaWiki.",
+Vesite por favor [https://www.mediawiki.org/wiki/Localisation a pachina sobre localización de MediaWiki] y [//translatewiki.net translatewiki.net] si deseya contrebuyir t'a localización cheneral de MediaWiki.",
'allmessagesnotsupportedDB' => 'Ista pachina no ye disponible porque wgUseDatabaseMessages ye desactivato.',
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtrar por estau de personalización:',
# External editor support
'edit-externally' => 'Editar iste fichero fendo servir una aplicación externa',
-'edit-externally-help' => '(Ta más información, leiga as [//www.mediawiki.org/wiki/Manual:External_editors instruccions de configuración])',
+'edit-externally-help' => '(Ta más información, leiga as [https://www.mediawiki.org/wiki/Manual:External_editors instruccions de configuración])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'totz',
'version-hook-subscribedby' => 'Suscrito por',
'version-version' => '(Versión $1)',
'version-license' => 'Licencia',
-'version-poweredby-credits' => "Iste wiki funciona gracias a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Iste wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'atros',
'version-license-info' => "MediaWiki ye software libre, puet redistribuyir-lo y/u modificar-lo baixo os terminos d'a Licencia Publica Cheneral GNU publicada por a Free Software Foundation, ya siga d'a suya versión 2 u (a la suya esleción) qualsiquier versión posterior.
# Special:SpecialPages
'specialpages' => 'Pachinas especials',
-'specialpages-note' => '----
-* Pachinas especials normals.
+'specialpages-note' => '* Pachinas especials normals.
* <strong class="mw-specialpagerestricted">Pachinas especials restrinchitas.</strong>',
'specialpages-group-maintenance' => 'Informes de mantenimiento',
'specialpages-group-other' => 'Atras pachinas especials',
'api-error-uploaddisabled' => 'As cargas de fichers son desactivadas en iste wiki.',
'api-error-verification-error' => 'Iste fichero puede estar danyau, u tiene una extensión incorrecta.',
+# Special:ExpandTemplates
+'expandtemplates' => 'Espandir plantillas',
+'expand_templates_intro' => 'Ista pachina especial prene bel testo y espande recursivament todas as plantillas que bi ha en el. Tamién espande as funcions parser como <nowiki>{{</nowiki>#language:...}}, y as variables como <nowiki>{{</nowiki>CURRENTDAY}}— en cheneral tot o que sía entre dobles claus.
+Isto lo fa clamando ta o parser correspondient dende o propio MediaWiki.',
+'expand_templates_title' => 'Títol ta contestualizar ({{FULLPAGENAME}} etz.):',
+'expand_templates_input' => 'Testo ta espandir:',
+'expand_templates_output' => 'Resultau',
+'expand_templates_xml_output' => 'salida XML',
+'expand_templates_ok' => 'Confirmar',
+'expand_templates_remove_comments' => 'Sacar comentarios',
+'expand_templates_generate_xml' => "Amostrar l'árbol de parseyo XML",
+'expand_templates_preview' => 'Previsualización',
+
);
* @author Espreon
* @author Gott wisst
* @author JJohnson
+ * @author JJohnson1701
* @author Omnipaedista
+ * @author Shirayuki
* @author Spacebirdy
* @author Tsepelcory
* @author Wōdenhelm
'protect' => 'Beorgan',
'protect_change' => 'Wendan',
'protectthispage' => 'Beorgan þisne tramet',
-'unprotect' => 'Andwendan beorgunge',
+'unprotect' => 'Wendan beorgunge',
'unprotectthispage' => 'Andwendan beorgune þisses trametes',
'newpage' => 'Nīwe tramet',
'talkpage' => 'Sprecan ymbe þisne tramet',
'ok' => 'Gōd lā',
'retrievedfrom' => 'Fram "$1" begeten',
'youhavenewmessages' => 'Þū hæfst $1 ($2).',
-'newmessageslink' => 'nīwu ǣrendgewritu',
-'newmessagesdifflink' => 'nīwost andwendung',
'youhavenewmessagesfromusers' => 'Þū hafast $1 fram {{PLURAL:$3|ōðrum brūcende|$3 brūcenda}} ($2).',
'youhavenewmessagesmanyusers' => 'Þū hafast $1 fram manigum brūcendum ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|nīwe ǣrendgewrit|nīwra ǣrendgewrita}}',
'page-rss-feed' => '$1 RSS strēam',
'page-atom-feed' => '$1 Atom strēam',
'red-link-title' => '$1 (tramet ne biþ)',
+'sort-descending' => 'sīgende behweorfan',
+'sort-ascending' => 'stīgende behweorfan',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Tramet',
'badarticleerror' => 'Þēos dǣd ne cann bēon gefremed on þissum tramete.',
'badtitle' => 'Nā genge titul',
'viewsource' => 'Sēon fruman',
+'viewsource-title' => 'Fruman for $1 sēon',
'cascadeprotected' => 'Þes trament wæs geborgen wiþ adihtunge, for þǣm þe hē is befangen in þissum {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgen settum wyrcende þǣm cyre "cascading": $2',
+'exception-nologin' => 'Ne inloggod',
# Virus scanner
'virus-badscanner' => 'Bad configuration: Unknown virus scanner: $1',
-'virus-unknownscanner' => 'unknown antivirus:',
+'virus-unknownscanner' => 'uncūþ andgund:',
# Login and logout pages
'logouttext' => "'''Þū eart nū ūtmeldod.'''
'yourname' => 'Þīn brūcendnama:',
'userlogin-yourname' => 'Brūcendnama:',
'userlogin-yourname-ph' => 'Inwrīt þīnne brūcendnaman',
+'createacct-another-username-ph' => 'Wrīt þone brūcendnaman in',
'yourpassword' => 'Þafungword:',
'userlogin-yourpassword' => 'Þafungword',
'userlogin-yourpassword-ph' => 'Inwrīt þīn þafungword',
'logout' => 'Ūtmeldian',
'userlogout' => 'Ūtmeldian',
'notloggedin' => 'Nā ingemeldod',
-'userlogin-noaccount' => "Don't have an account?",
+'userlogin-noaccount' => 'Næfst þu hordcleofan?',
'userlogin-joinproject' => 'Join {{SITENAME}}',
'nologin' => 'Næfst þū reccinge? $1',
'nologinlink' => 'Scieppan reccinge',
'createaccount' => 'Scieppan reccinge',
'gotaccount' => 'Hafast þū reccinge ǣr? $1.',
'gotaccountlink' => 'Inmeldian',
+'userlogin-resetpassword-link' => 'Forgēate þū þīn gelēafword?',
+'helplogin-url' => 'Help:Inmeldung',
'createaccountmail' => 'Notian sceortne tīman hlētlic þafungword and sendan hit to þǣm spearcǣrenda naman þe is niðer',
'createaccountreason' => 'Racu:',
'badretype' => 'Þā þafungword þe write þū, bēoþ ungelīc.',
'nosuchusershort' => 'Þǣr nis nān brūcend mid þǣm naman "$1". Scēawa þīne wrītunge.',
'passwordtooshort' => 'Þafungword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafena}}.',
'mailmypassword' => 'Sendan nīwe þafungword on spearcǣrende',
-'acct_creation_throttle_hit' => 'Hwæt, þu hæfst gēo geseted {{PLURAL:$1|1 hordcleofan|$1 -}}. Þu ne canst settan ǣnige māran.',
+'acct_creation_throttle_hit' => 'Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.',
'accountcreated' => 'Scōp reccinge',
'loginlanguagelabel' => 'Sprǣc: $1',
'resetpass-submit-loggedin' => 'Andwendan þafungword',
'resetpass-submit-cancel' => 'Undōn',
+# Special:PasswordReset
+'passwordreset-username' => 'Brūcendnama:',
+
# Edit page toolbar
'bold_sample' => 'Þicce traht',
'bold_tip' => 'Þicce traht',
'revdelete-hide-comment' => 'Hȳdan adihtunge sceortnesse',
'revdelete-hide-user' => 'Hȳdan adihtendes brūcendnaman/IP address',
'revdelete-radio-same' => '(nā andwendan)',
-'revdelete-radio-set' => 'Gēa',
-'revdelete-radio-unset' => 'Nese',
+'revdelete-radio-set' => 'Gehȳdd',
+'revdelete-radio-unset' => 'Gesīene',
'revdel-restore' => 'andwendan īwunge',
'pagehist' => 'Trametes stǣr',
'revdelete-reasonotherlist' => 'Ōðru racu',
# Preferences page
'preferences' => 'Fōreberunga',
'mypreferences' => 'Mīna fōreberunga',
-'prefsnologin' => 'Nā inmeldod',
'prefs-skin' => 'Scynn',
'skin-preview' => 'Fōrebysen',
'prefs-datetime' => 'Tælmearc and tīd',
'recentchanges-label-newpage' => 'Þēos adihtung scōp nīwne tramet',
'recentchanges-label-minor' => 'Þēos is lytel adihtung',
'recentchanges-label-bot' => 'Searuþrǣl fremede þās adihtunge',
+'recentchanges-legend-newpage' => '$1 - nīƿu sīde',
'rcnote' => "Beneoðan {{PLURAL:$1|is '''1''' andwendung|sind þā æftemestan '''$1''' andwendunga}} in {{PLURAL:$2|þǣm æftermestan dæge|þǣm æftemestum '''$2''' daga}}, fram $5 on $4.",
'rcnotefrom' => "Niðer sind þā andwendunga fram '''$2''' (mǣst īweþ '''$1''').",
'rclistfrom' => 'Īwan nīwa andwendunga fram $1 and siþþan',
'exif-gpsdirection-t' => 'Sōþ rihtung',
# External editor support
-'edit-externally-help' => '(Sēon þā [//www.mediawiki.org/wiki/Manual:External_editors gearwunge gewissunga] ymb mā cȳþþe)',
+'edit-externally-help' => '(Sēon þā [https://www.mediawiki.org/wiki/Manual:External_editors gearwunge gewissunga] ymb mā cȳþþe)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'eall',
'ok' => 'موافق',
'retrievedfrom' => 'مجلوبة من "$1"',
'youhavenewmessages' => 'لك $1 ($2).',
-'newmessageslink' => 'رسائل جديدة',
-'newmessagesdifflink' => 'أحدث تغيير',
'youhavenewmessagesfromusers' => 'لديك $1 من {{PLURAL:$3|مستخدم واحد|مستخدم واحد|مستخدمين اثنين|$3 مستخدمين|$3 مستخدما|$3 مستخدم}} ($2).',
'youhavenewmessagesmanyusers' => 'لديك $1 من مستخدمين كثر ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|رسالة جديدة|رسائل جديدة}}',
'revdelete-hide-user' => 'أخف اسم/آيبي المستخدم',
'revdelete-hide-restricted' => 'أخف البيانات عن الإداريين إضافة إلى الآخرين',
'revdelete-radio-same' => '(لا تغير)',
-'revdelete-radio-set' => 'Ù\86عÙ\85',
-'revdelete-radio-unset' => 'Ù\84ا',
+'revdelete-radio-set' => 'Ù\85Ø®Ù\81Ù\8a',
+'revdelete-radio-unset' => 'Ù\85رئÙ\8a',
'revdelete-suppress' => 'أخف البيانات عن مديري النظام والبقية',
'revdelete-unsuppress' => 'إزالة الضوابط من المراجعات المسترجعة',
'revdelete-log' => 'السبب:',
'preferences' => 'تفضيلات',
'mypreferences' => 'تفضيلات',
'prefs-edits' => 'عدد التعديلات:',
-'prefsnologin' => 'غير مسجل الدخول',
-'prefsnologintext' => 'يجب أن تكون <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} مسجل الدخول]</span> حتى تتمكن من تعديل تفضيلات المستخدم.',
'changepassword' => 'غير كلمة السر',
'prefs-skin' => 'واجهة',
'skin-preview' => 'عرض مسبق',
'recentchanges-label-minor' => 'هذا تعديل طفيف',
'recentchanges-label-bot' => 'أُجْرِيَ هذا التعديل بواسطة بوت',
'recentchanges-label-unpatrolled' => 'لم يراجع هذا التعديل إلى الآن',
+'recentchanges-legend-newpage' => '$1 - صفحة جديدة',
'rcnote' => "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''اليوم''' الماضي|'''اليومين''' الماضيين|ال'''$2''' أيام الماضية|ال'''$2''' يوما الماضيا|ال'''$2''' يوم الماضي}}، كما في $5، $4.",
'rcnotefrom' => "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
'rclistfrom' => 'أظهر التغييرات بدءا من $1',
'allmessagesdefault' => 'النص الافتراضي',
'allmessagescurrent' => 'النص الحالي',
'allmessagestext' => 'هذه قائمة برسائل النظام المتوفرة في نطاق ميدياويكي.
-من فضلك زر [//www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت ترغب في المساهمة في ترجمة ميدياويكي الأساسية.',
+من فضلك زر [https://www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت ترغب في المساهمة في ترجمة ميدياويكي الأساسية.',
'allmessagesnotsupportedDB' => "هذه الصفحة لا يمكن استخدامها لأن '''\$wgUseDatabaseMessages''' تم تعطيله.",
'allmessages-filter-legend' => 'المرشح',
'allmessages-filter' => 'رشح حسب حالة التخصيص:',
'svg-long-desc' => 'ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3',
'svg-long-desc-animated' => 'ملف SVG متحرك، بمقاسات $1 × $2 بكسل، حجم الملف: $3',
'svg-long-error' => 'ملف SVG غير صالح: $1',
-'show-big-image' => 'دÙ\82Ø© Ù\83اÙ\85Ù\84Ø©',
+'show-big-image' => 'اÙ\84Ù\85Ù\84Ù\81 اÙ\84أصÙ\84Ù\8a',
'show-big-image-preview' => 'حجم هذه المعاينة: $1.',
'show-big-image-other' => '{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.',
'show-big-image-size' => '$1 × $2 بكسل',
# External editor support
'edit-externally' => 'عدل هذا الملف باستخدام تطبيق خارجي',
-'edit-externally-help' => '(انظر [//www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
+'edit-externally-help' => '(انظر [https://www.mediawiki.org/wiki/Manual:External_editors تعليمات الإعداد] لمزيد من المعلومات)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'الكل',
'version-version' => '(نسخة $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'الرخصة',
-'version-poweredby-credits' => "تدار هذه الويكي بواسطة '''[//www.mediawiki.org/ ميدياويكي]'''، حقوق النشر © 2001-$1 $2.",
+'version-poweredby-credits' => "تدار هذه الويكي بواسطة '''[https://www.mediawiki.org/ ميدياويكي]'''، حقوق النشر © 2001-$1 $2.",
'version-poweredby-others' => 'آخرون',
'version-poweredby-translators' => 'مترجمو translatewiki.net',
'version-credits-summary' => 'نود أن نعرف بالأشخاص التالية أسماؤهم لمساهمتهم في [[Special:Version|ميدياويكي]].',
# Special:SpecialPages
'specialpages' => 'الصفحات الخاصة',
-'specialpages-note' => '----
-* صفحات خاصة عادية.
+'specialpages-note-top' => 'المفتاح',
+'specialpages-note' => '* صفحات خاصة عادية.
* <span class="mw-specialpagerestricted">صفحات خاصة للمخولين.</span>
* <span class="mw-specialpagecached">صفحات خاصة لبيانات مخزنة فقط (قد تكون مهجورة).</span>',
'specialpages-group-maintenance' => 'تقارير الصيانة',
'limitreport-postexpandincludesize-value' => '$1/$2 بايت',
'limitreport-templateargumentsize-value' => '$1/$2 بايت',
+# Special:ExpandTemplates
+'expandtemplates' => 'فرد القوالب',
+'expand_templates_intro' => 'تتعامل هذه الصفحة الخاصة مع نصوص الويكي وتقوم بفرد كل القوالب الموجودة به.
+وتقوم أيضا بفرد دوال القوالب مثل
+<nowiki>{{</nowiki>#language:...}}، والمتغيرات مثل
+<nowiki>{{</nowiki>يوم}}-- وتقوم التعامل مع كل ما بين الأقواس المزدوجة.
+تقوم بفعل هذا عن طريق استدعاء المعالج المناسب من الميدياويكي.',
+'expand_templates_title' => 'عنوان صفحة هذا النص، لأجل معالجة {{FULLPAGENAME}} إلخ.:',
+'expand_templates_input' => 'النص المدخل:',
+'expand_templates_output' => 'النتيجة',
+'expand_templates_xml_output' => 'خرج XML',
+'expand_templates_ok' => 'موافق',
+'expand_templates_remove_comments' => 'أزل التعليقات',
+'expand_templates_remove_nowiki' => 'أخفِ وسوم <nowiki> في الناتج',
+'expand_templates_generate_xml' => 'اعرض شجرة XML parse',
+'expand_templates_preview' => 'عرض مسبق',
+
);
'ok' => 'ܛܒ',
'youhavenewmessages' => 'ܐܝܬ ܠܟ $1 ($2).',
-'newmessageslink' => 'ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ',
-'newmessagesdifflink' => 'ܫܘܚܠܦܐ ܐܚܪܝܐ',
'youhavenewmessagesfromusers' => 'ܐܝܬ ܠܟ $1 ܡܢ {{PLURAL:$3|ܡܦܠܚܢܐ ܐܚܪܢܐ|$3 ܡܦܠܚܢ̈ܐ}} ($2).',
'youhavenewmessagesmanyusers' => 'ܐܝܬ ܠܟ $1 ܡܢ ܡܦܠܚܢ̈ܐ ܣܓܝܐ̈ܐ ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ܐܓܪܬܐ ܚܕܬܐ|ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ}}',
'preferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
'mypreferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
'prefs-edits' => 'ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ:',
-'prefsnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
'changepassword' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
'prefs-skin' => 'ܓܠܕܐ',
'skin-preview' => 'ܚܝܪܐ ܩܕܡܝܐ',
'recentchanges-label-minor' => 'ܗܢܘ ܫܘܚܠܦܐ ܙܥܘܪܐ',
'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ',
'recentchanges-label-unpatrolled' => 'ܫܘܚܠܦܐ ܗܢܐ ܠܐ ܗܘ ܟܪܝܟܐ ܠܗܫܐ',
+'recentchanges-legend-newpage' => '$1 - ܦܐܬܐ ܚܕܬܐ',
'rcnotefrom' => "ܠܬܚܬ ܫܘܚܠܦ̈ܐ ܕܡܢ '''$2''' (ܥܕ '''$1''' ܡܬܚܙܝܢ̈ܐ).",
'rclistfrom' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $1',
'rcshowhideminor' => '$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ',
# Special:SpecialPages
'specialpages' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
-'specialpages-note' => '----
-* ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܥܝܕ̈ܝܬܐ.
+'specialpages-note' => '* ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܥܝܕ̈ܝܬܐ.
* <span class="mw-specialpagerestricted">ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܕܩܝܘܡ̈ܐ ܒܠܚܘܕ.</span>',
'specialpages-group-maintenance' => 'ܬܫܪܪ̈ܐ ܕܚܕܬܘܬܐ',
'specialpages-group-other' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܐܚܪ̈ܢܝܬܐ',
'searchsuggest-search' => 'ܒܨܝ',
'searchsuggest-containing' => 'ܬܚܒܘܫ...',
+# Special:ExpandTemplates
+'expandtemplates' => 'ܐܪܘܚ ܩܠܒ̈ܐ',
+'expand_templates_output' => 'ܦܠܛܐ',
+'expand_templates_ok' => 'ܛܒ',
+'expand_templates_preview' => 'ܚܝܪܐ ܩܕܡܝܐ',
+
);
'ok' => 'Feley',
'retrievedfrom' => 'Nentungey "$1" mew',
'youhavenewmessages' => 'Nieymi $1 ($2).',
-'newmessageslink' => 'weke werkün',
-'newmessagesdifflink' => 'we kalekünun',
'newmessagesdifflinkplural' => 'we {{PLURAL:$1|kalekünuy|kalekünuy}}',
'youhavenewmessagesmulti' => 'Nieymi we yefalzugu $1 mew.',
'editsection' => 'Wirin',
# Preferences page
'mypreferences' => 'Dullin',
'prefs-edits' => 'Rakin Wirin:',
-'prefsnologin' => 'Mülelay Konün',
'skin-preview' => 'Pen chum müley',
'prefs-editing' => 'Wirin',
'searchresultshead' => 'Kintun',
'recentchanges-label-minor' => 'Tüfachi ta kiñe pichi wirin',
'recentchanges-label-bot' => 'Kiñe kizuamukelu küzauwe dewmay tüfachi wirin.',
'recentchanges-label-unpatrolled' => 'Pukintulelay tüfachi wirin.',
+'recentchanges-legend-newpage' => '$1 - We Pakina',
'rcnote' => 'Nagpüle {{PLURAL:müley $1 kalekünun}}, rupalu {{PLURAL:$2 antü}}, $5, $4.',
'rcnotefrom' => "Nagpüle müley fill wirin tuwülu '''$2''' mew (tripalu '''$1''' mew).",
'rclistfrom' => 'Adkintun weke kalekünun amuamugelu $1',
# External editor support
'edit-externally' => 'Kümeelün tüfachi eltukawün wekun küdauwe mew',
-'edit-externally-help' => '(Pen feychi [//www.mediawiki.org/wiki/Manual:External_editors adtukünun chumngechi pünengeael] doy dungungeam)',
+'edit-externally-help' => '(Pen feychi [https://www.mediawiki.org/wiki/Manual:External_editors adtukünun chumngechi pünengeael] doy dungungeam)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kom',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Mrejjĝa men "$1"',
'youhavenewmessages' => 'Ĝendek $1 ($2).',
-'newmessageslink' => 'méṣajaṫ jdad',
-'newmessagesdifflink' => 'ṫ-ṫeġyir l-leĥĥer',
'youhavenewmessagesmulti' => 'Jawek méṣajaṫ jdad fe $1',
'editsection' => 'Ṣayeb',
'editold' => 'ṣayeb',
'preferences' => 'ṫfḍilaṫ',
'mypreferences' => 'Ḫajaṫ li kanfeḍḍel',
'prefs-edits' => 'ĝadad ṫ-ṫĝdilaṫ:',
-'prefsnologin' => 'nta mamkoniktich',
-'prefsnologintext' => 'ĥaṣṣk ṫkon <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daĥol]</span> baċ ṫĝyyer ṫfḍilaṫ l-moṣṫĥdim.',
'changepassword' => 'tbdl lmot de passe',
'prefs-skin' => 'skin',
'skin-preview' => 'L-Prévizualizasyon',
# External editor support
'edit-externally' => 'Ṣayeb had l-fiċyé be ċi aplikasyon ĥarijiya',
-'edit-externally-help' => '(Ċof [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] ila ḫṫajiṫi meĝlomaṫ ĥrin)',
+'edit-externally-help' => '(Ċof [https://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] ila ḫṫajiṫi meĝlomaṫ ĥrin)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kolċi',
'ok' => 'موافئ',
'retrievedfrom' => 'اتجابت من "$1"',
'youhavenewmessages' => 'عندك $1 ($2).',
-'newmessageslink' => 'رسايل جديده',
-'newmessagesdifflink' => 'اخر تعديل',
'youhavenewmessagesmulti' => 'عندك ميسيدج جديدة فى $1',
'editsection' => 'تعديل',
'editold' => 'تعديل',
'preferences' => 'تفضيلات',
'mypreferences' => 'تفضيلاتى',
'prefs-edits' => 'عدد التعديلات:',
-'prefsnologin' => 'مش متسجل',
-'prefsnologintext' => 'لازم تكون <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} مسجل الدخول]</span> علشان تقدر تعدل تفضيلاتك.',
'changepassword' => 'غير الباسورد',
'prefs-skin' => 'الوش',
'skin-preview' => 'بروفه',
'recentchanges-label-minor' => 'ده تعديل صغير',
'recentchanges-label-bot' => 'التعديل ده عمله بوت',
'recentchanges-label-unpatrolled' => 'التعديل ده مإتراجعش لسه',
+'recentchanges-legend-newpage' => '$1 - صفحه جديده',
'rcnote' => "فيه تحت {{PLURAL:$1|'''1''' تغيير|آخر '''$1''' تغيير}} فى آخر {{PLURAL:$2|يوم|'''$2''' يوم}}، بدءا من $5، $4.",
'rcnotefrom' => "دى التعديلات من '''$2''' (ل '''$1''' معروضه).",
'rclistfrom' => 'اظهر التعديلات بدايه من $1',
'allmessagesdefault' => 'النص الاوتوماتيكي',
'allmessagescurrent' => 'النص دلوقتى',
'allmessagestext' => 'دى لستة برسايل النظام المتوفرة فى نطاق ميدياويكي.
-لو سمحت تزور[//www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت عايز تساهم فى ترجمة ميدياويكى الاصلية.',
+لو سمحت تزور[https://www.mediawiki.org/wiki/Localisation ترجمة ميدياويكي] و [//translatewiki.net بيتاويكي] لو كنت عايز تساهم فى ترجمة ميدياويكى الاصلية.',
'allmessagesnotsupportedDB' => "الصفحة دى مش يمكن حد يستعملها علشان'''\$wgUseDatabaseMessages''' متعطل.",
'allmessages-filter-legend' => 'فيلتر',
'allmessages-filter' => 'فلتره بحالة التهيئه:',
# External editor support
'edit-externally' => 'استعمل تطبيق من بره علشان تعدل الملف دا',
-'edit-externally-help' => '(بص على [//www.mediawiki.org/wiki/Manual:External_editors تعليمات الاعداد] علشان معلومات اكتر.)',
+'edit-externally-help' => '(بص على [https://www.mediawiki.org/wiki/Manual:External_editors تعليمات الاعداد] علشان معلومات اكتر.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'الكل',
# Special:SpecialPages
'specialpages' => 'صفح مخصوصه',
-'specialpages-note' => '----
-* صفحات خاصة عادية.
+'specialpages-note' => '* صفحات خاصة عادية.
* <strong class="mw-specialpagerestricted">صفحات خاصة للناس اللى مسموح لهم.</strong>',
'specialpages-group-maintenance' => 'تقارير الصيانة',
'specialpages-group-other' => 'صفحات خاصه تا نيه',
'searchsuggest-search' => 'تدوير',
'searchsuggest-containing' => 'جوّاه...',
+# Special:ExpandTemplates
+'expandtemplates' => 'تكبير القوالب',
+'expand_templates_intro' => 'الصفحة المخصوصة دى بتاخد بعض النصوص و بتفرد كل القوالب اللى موجودة فيها.
+و كمان بتفرد دوال القوالب زي
+<nowiki>{{</nowiki>#language:…}}, و المتغيرات زي
+<nowiki>{{</nowiki>CURRENTDAY}}—فى الحقيقة كل حاجة بين قوسين مزدوجين.
+و بتعمل دا عن طريق استعداء المعالج المناسب من الميدياويكى نفسها..',
+'expand_templates_title' => 'عنوان السياق, لـ {{FULLPAGENAME}} الخ.:',
+'expand_templates_input' => 'النص المدخل:',
+'expand_templates_output' => 'النتيجه',
+'expand_templates_xml_output' => 'خرج XML',
+'expand_templates_ok' => 'موافق',
+'expand_templates_remove_comments' => 'امسح التعليقات',
+'expand_templates_generate_xml' => 'اعرض شجرة XML',
+'expand_templates_preview' => 'بروفه',
+
);
'articlepage' => 'সমল পৃষ্ঠা চাওক',
'talk' => 'আলোচনা',
'views' => 'দৰ্শন',
-'toolbox' => 'সা-সৰà¦\9eà§\8dà¦\9cাম',
+'toolbox' => 'সà¦\81à¦\9cà§\81লিসমà§\82হ',
'userpage' => 'সদস্য পৃষ্ঠা চাওক',
'projectpage' => 'প্ৰকল্প পৃষ্ঠা চাওক',
'imagepage' => 'নথি পৃষ্ঠা চাওক',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
'aboutsite' => '{{SITENAME}}ৰ বিষয়ে',
'aboutpage' => 'Project:ইতিবৃত্ত',
-'copyright' => 'এই বিষয়বস্তু $1 ৰ আওতাত উপলব্ধ।',
+'copyright' => 'à¦\86ন à¦\8fà¦\95à§\8b à¦\89লà§\8dলà§\87à¦\96 নাথাà¦\95িলà§\87 à¦\8fà¦\87 বিষয়বসà§\8dতà§\81 $1 ৰ à¦\86à¦\93তাত à¦\89পলবà§\8dধ।',
'copyrightpage' => '{{ns:project}}:স্বত্ব',
'currentevents' => 'সাম্প্ৰতিক ঘটনাৱলী',
'currentevents-url' => 'Project:শেহতীয়া ঘটনাৱলী',
'ok' => 'ঠিক আছে',
'retrievedfrom' => '"$1"ৰ পৰা সংকলিত',
'youhavenewmessages' => 'আপোনাৰ কাৰণে $1 আছে। ($2)',
-'newmessageslink' => 'নতুন সংবাদ',
-'newmessagesdifflink' => 'শেহতীয়া সাল-সলনি',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|আন এজন সদস্য|$3 জন সদস্য}}ৰ পৰা আপোনালৈ $1 আহিছে ($2)।',
'youhavenewmessagesmanyusers' => 'কেইবাজনো সদস্যৰ পৰা আপোনালৈ $1 আহিছে ($2)।',
'newmessageslinkplural' => '{{PLURAL:$1|এটা নতুন বাৰ্তা|নতুন বাৰ্তা}}',
'databaseerror-text' => "এটা ডেটাবে'ছ কুৱেৰী ত্ৰুটি হৈছে।
ইয়ে ছফ্টৱেৰটোত কিবা বাগ্ থকাটো সূচাব পাৰে।",
'databaseerror-textcl' => "এটা ডেটাবে'ছ কুৱেৰী ত্ৰুটি হৈছে।",
+'databaseerror-query' => 'অনুসন্ধান: $1',
'databaseerror-function' => 'ফাংচন: $1',
'databaseerror-error' => 'ত্ৰুটি: $1',
'laggedslavemode' => 'সাৱধানবাণী: ইয়াত সাম্প্ৰতিক সাল-সলনি নাথাকিব পাৰে',
'gotaccount' => "আপুনি সদস্য হয়নে? '''$1'''",
'gotaccountlink' => 'প্ৰৱেশ',
'userlogin-resetlink' => 'আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?',
-'userlogin-resetpassword-link' => 'à¦\86পà§\8bনাৰ à¦\97à§\81পà§\8dতশবà§\8dদ ন-à¦\95à§\88 বহà§\81ৱাà¦\93à¦\95',
+'userlogin-resetpassword-link' => 'à¦\86পà§\8bনাৰ à¦\97à§\81পà§\8dতশবà§\8dদ পাহৰিà¦\9bà§\87?',
'helplogin-url' => 'Help:প্ৰৱেশ/লগ্-ইন',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|প্ৰৱেশ সম্পৰ্কীয় সাহায্য]]',
+'userlogin-loggedin' => 'আপুনি ইতিমধ্যে {{GENDER:$1|$1}} হিচাপে প্ৰৱেশ কৰিছে। তলৰ আন সদস্যৰূপে প্ৰৱেশ কৰিবলৈ তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক।',
+'userlogin-createanother' => 'আন এটা একাউণ্ট সৃষ্টি কৰক',
'createacct-join' => 'আপোনাৰ তথ্যসমূহ তলত লিখক।',
'createacct-another-join' => 'নতুন একাউণ্টৰ তথ্যসমূহ তলত লিখক।',
'createacct-emailrequired' => 'ই-মেইল ঠিকনা',
'noemailcreate' => 'আপুনি এটা সঠিক ই-মেইল ঠিকনা দিব লাগিব',
'passwordsent' => '"$1" ৰ ই-মেইল ঠিকনাত নতুন গুপ্তশব্দ এটা পঠোৱা হৈছে। অনুগ্ৰহ কৰি সেয়া পোৱাৰ পাছত পুনৰ প্ৰৱেশ কৰক।',
'blocked-mailpassword' => 'আপোনাৰ আইপি ঠিকনাৰ পৰা সম্পাদনা কৰা বাৰণ কৰা হৈছে, এনে অৱস্থাত দুৰ্ব্যৱহাৰ ৰোধ কৰিবলৈ গুপ্তশব্দ পুনঃউদ্ধাৰ কৰা সুবিধাতো বাতিল কৰা হৈছে।',
-'eauthentsent' => 'সà¦\9eà§\8dà¦\9aিত à¦\87-মà§\87à¦\87ল ঠিà¦\95নাত নিশà§\8dà¦\9aিতà¦\95ৰণ à¦\87-মà§\87à¦\87ল à¦\8fà¦\96ন পঠà§\8bৱা হৈছে।
-à¦\86ৰà§\81 à¦\85নà§\8dযানà§\8dয à¦\87-মà§\87à¦\87ল পঠà§\8bৱাৰ à¦\86à¦\97তà§\87, à¦\86পà§\8bনাৰ সদসà§\8dযতাৰ নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।',
+'eauthentsent' => 'সà¦\9eà§\8dà¦\9aিত à¦\87-মà§\87à¦\87ল ঠিà¦\95নালà§\88 নিশà§\8dà¦\9aিতà¦\95ৰণ à¦\87-মà§\87à¦\87ল à¦\8fà¦\96ন পঠিà¦\93ৱা হৈছে।
+à¦\8fà¦\95াà¦\89ণà§\8dà¦\9fà¦\9fà§\8bলà§\88 à¦\86ন à¦\87-মà§\87à¦\87ল পঠিà¦\93ৱাৰ à¦\86à¦\97তà§\87 à¦\86পà§\8bনাৰ সদসà§\8dযতা নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।',
'throttled-mailpassword' => "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে।
অবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।",
'mailerror' => 'ই-মেইল পঠিওৱাত সমস্যা হৈছে: $1',
'acct_creation_throttle_hit' => 'যোৱা ২৪ ঘন্টাত আপোনাৰ আই-পি ঠিকনাৰ পৰা এই ৱিকিৰ পঢ়োঁতাই {{PLURAL:$1|১-টা একাউন্ট|$1-টা একাউন্ট}} সৃষ্টি কৰিলে, যিটো সৰ্বোচ্চ অনুমোদনকৃত ।
এতেকে, এই আই-পি ঠিকনাৰ পৰা এই মূহুৰ্তত একাউন্ট সৃষ্টি কৰিব নোৱাৰিব ।',
-'emailauthenticated' => 'আপোনাৰ ই-মেইল ঠিকনাটো $2 তাৰিখৰ $3 বজাত নিশ্চিত কৰা হৈছিল ।',
-'emailnotauthenticated' => 'à¦\86পà§\8bনাৰ à¦\87-মà§\87à¦\87ল ঠিà¦\95নাতà§\8b à¦\8fতিয়ালà§\88 পà§\8dৰমাণিত হà§\8bৱা নাà¦\87 ।
-à¦\86পà§\81নি তলৰ বিষয়বà§\8bৰৰ à¦\95াৰণà§\87 মà§\87à¦\87ল পঠাব নà§\8bৱাৰà§\87 ।',
+'emailauthenticated' => 'আপোনাৰ ই-মেইল ঠিকনাটো $2 তাৰিখৰ $3 বজাত নিশ্চিত কৰা হৈছিল।',
+'emailnotauthenticated' => 'à¦\86পà§\8bনাৰ à¦\87-মà§\87à¦\87ল ঠিà¦\95নাতà§\8b à¦\8fতিয়ালà§\88 নিশà§\8dà¦\9aিত হà§\8bৱা নাà¦\87।
+à¦\86পà§\81নি তলৰ বিষয়বà§\8bৰৰ à¦\95াৰণà§\87 মà§\87à¦\87ল পঠিয়াব নà§\8bৱাৰà§\87।',
'noemailprefs' => 'এই সুবিধাবোৰ ব্যৱহাৰ কৰিবলৈ এটা ই-মেইল ঠিকনা দিয়ক।',
'emailconfirmlink' => 'আপোনাৰ ই-মেইল ঠিকনাটো প্ৰমাণিত কৰক',
'invalidemailaddress' => 'এই ই-মেইল ঠিকনাতো গ্ৰহনযোগ্য নহয়, কাৰণ ই অবৈধ প্ৰকাৰৰ যেন লাগিছে।
# Special:PasswordReset
'passwordreset' => 'গুপ্তশব্দ ন-কৈ বহুৱাওক',
'passwordreset-text-one' => 'আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ এই প্ৰপত্ৰ পূৰণ কৰক।',
+'passwordreset-text-many' => '{{PLURAL:$1|আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ এই তথ্যসমূহৰ যিকোনো এটা দিয়ক।}}',
'passwordreset-legend' => 'গুপ্তশব্দ ন-কৈ বহাওক',
'passwordreset-disabled' => 'এই ৱিকিত গুপ্তশব্দ নবীকৰণ নিষ্ক্ৰিয় কৰা হৈছে ।',
'passwordreset-emaildisabled' => 'এই ৱিকিত ই-মেইল বৈশিষ্টসমূহ নিষ্ক্ৰিয় কৰা হৈছে।',
# Special:ResetTokens
'resettokens' => "ট'কেন ৰিছে'ট কৰক",
+'resettokens-text' => "আপোনাৰ একাউণ্টৰ সৈতে জড়িত কিছুমান ব্যক্তিগত তথ্য চাবলৈ আপুনি ট'কেন ৰিছে'ট কৰিব পাৰে।
+
+আপুনি দুৰ্ঘটনাবশতঃ আন কাৰোবাক সেই ট'কেন দিলে বা আপোনাৰ একাউণ্টৰ বিসংগতি হ'লে আপুনি এনে কৰাটো উচিত।",
+'resettokens-no-tokens' => "ৰিছে'ট কৰিবলৈ কোনো ট'কেন নাই।",
+'resettokens-legend' => "ট'কেন ৰিছে'ট কৰক",
+'resettokens-tokens' => "ট'কেনসমূহ:",
+'resettokens-token-label' => '$1 (বর্তমান: $2)',
+'resettokens-done' => "ট'কেন ৰিছে'ট কৰা হ'ল।",
+'resettokens-resetbutton' => "নিৰ্বাচিত ট'কেনসমূহ ৰিছে'ট কৰক",
# Edit page toolbar
'bold_sample' => 'গাঢ় পাঠ্য',
'loginreqlink' => 'প্ৰৱেশ',
'loginreqpagetext' => 'অন্যান্য পৃষ্ঠা চাবলৈ আপুনি $1 কৰিব লাগিব।',
'accmailtitle' => "গুপ্তশব্দ পঠোৱা হ'ল।",
-'accmailtext' => "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিক ভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2লৈ পঠোৱা হ'ল ।
-à¦\8fà¦\87 নতà§\81ন à¦\8fà¦\95াà¦\89নà§\8dà¦\9fত পà§\8dৰৱà§\87শ à¦\95ৰি ''[[Special:ChangePassword|à¦\97à§\81পà§\8dতশবà§\8dদ সলনি à¦\95ৰà¦\95]]'' পà§\83ষà§\8dঠাà¦\96নত à¦\97à§\81পà§\8dতশবà§\8dদতà§\8b সলনি à¦\95ৰি লâ\80\99ব পাৰিব ।",
+'accmailtext' => "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিকভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2লৈ পঠোৱা হ'ল ।
+এই নতুন একাউন্টত প্ৰৱেশ কৰি ''[[Special:ChangePassword|গুপ্তশব্দ সলনি কৰক]]'' পৃষ্ঠাখনত শব্দতো সলনি কৰি ল’ব পাৰিব ।",
'newarticle' => '(নতুন)',
'newarticletext' => "আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগ'ল।
'nocreate-loggedin' => 'নতুন পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই ।',
'sectioneditnotsupported-title' => 'অনুচ্ছেদ সম্পাদনাৰ সমৰ্থন নাই',
'sectioneditnotsupported-text' => 'এই পৃষ্ঠাত অনুচ্ছেদ সম্পাদনাৰ সমৰ্থন নাই',
-'permissionserrors' => 'à¦\85নà§\81মতি à¦à§\81লসমà§\82হ',
+'permissionserrors' => 'à¦\85নà§\81মà§\8bদন তà§\8dৰà§\81à¦\9fি',
'permissionserrorstext' => "আপোনাৰ এই কামটো কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
'permissionserrorstext-withaction' => "আপোনাৰ $2 কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
'recreate-moveddeleted-warn' => "'''সাৱধান: আগতে বিলোপ কৰা পৃষ্ঠা এটা আপুনি পুনঃনিৰ্মাণ কৰি আছে। '''
'undo-failure' => "এই সম্পাদনা মধ্যৱৰ্তী সম্পাদনাসমূহৰ দ্বন্দৰ কাৰণে পূৰ্ববৎ কৰা নহ'ব ।",
'undo-norev' => "এই সম্পাদনাটি ৰদ কৰিব নোৱাৰি, কাৰণ ই আৰু নাই বা ইয়াক বাতিল কৰা হ'ল ।",
'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|আলোচনা]]) সম্পাদিত $1 সংশোধনটি বাতিল কৰক',
+'undo-summary-username-hidden' => 'এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক',
# Account creation failure
'cantcreateaccounttitle' => "একাউন্ট সৃষ্টি কৰা নহ'ব",
'revdelete-suppress-text' => "নিবাৰণ '''কেৱল''' তলত দিয়া কাৰণসমূহত ব্যৱহৃত হ’ব:
* সম্ভাব্য ক্ষতিকাৰক তথ্য
* অনুপযুক্ত ব্যক্তিগত তথ্য
-* : ''à¦\98ৰৰ ঠিà¦\95না à¦\86ৰà§\81 à¦\9fà§\87লিফà§\8bন সà¦\82à¦\96à§\8dযা, সামাà¦\9cিà¦\95 সà§\81ৰà¦\95à§\8dষা সংখ্যা, আদি । ''",
+* : ''à¦\98ৰৰ ঠিà¦\95না à¦\86ৰà§\81 à¦\9fà§\87লিফà§\8bন সà¦\82à¦\96à§\8dযা, ৰাষà§\8dà¦\9fà§\8dৰà§\80য় পৰিà¦\9aয় সংখ্যা, আদি । ''",
'revdelete-legend' => 'দৃষ্টিপাত সীমাবদ্ধ কৰক',
-'revdelete-hide-text' => 'সংশোধিত পাঠ গোপন কৰক',
+'revdelete-hide-text' => 'সংশোধিত পাঠ',
'revdelete-hide-image' => 'ফাইলৰ বিষয়বস্তু গোপন কৰক',
'revdelete-hide-name' => 'কাৰ্য আৰু লক্ষ্য গোপন কৰক',
-'revdelete-hide-comment' => 'সম্পাদনা সাৰাংশ গোপন কৰক',
-'revdelete-hide-user' => 'সম্পাদকৰ সদস্যনাম/আই-পি ঠিকনা গোপন কৰক',
+'revdelete-hide-comment' => 'সম্পাদনা সাৰাংশ',
+'revdelete-hide-user' => 'সম্পাদকৰ সদস্যনাম/আই-পি ঠিকনা',
'revdelete-hide-restricted' => 'প্ৰশাসকবৃন্দৰ লগতে আনৰ পৰাও তথ্য ৰোধ কৰক',
'revdelete-radio-same' => '(সলনি নকৰিব)',
-'revdelete-radio-set' => 'হয়',
-'revdelete-radio-unset' => 'নহয়',
+'revdelete-radio-set' => 'à¦\97à§\8bপন',
+'revdelete-radio-unset' => 'দà§\83শà§\8dযমান',
'revdelete-suppress' => 'প্ৰশাসকবৃন্দৰ লগতে আনৰ পৰাও তথ্য ৰোধ কৰক',
'revdelete-unsuppress' => 'পুনৰ্স্থাপন কৰা সংশোধনসমূহৰ সীমাবদ্ধতা আতৰাওক',
'revdelete-log' => 'কাৰণ:',
'compareselectedversions' => 'নিৰ্বাচিত কৰা সংকলন সমূহৰ মাজত পাৰ্থক্য চাওক',
'showhideselectedversions' => 'নিৰ্বাচিত সংশোধনসমূহ দেখুৱাওক/আঁৰ কৰক',
'editundo' => 'পূৰ্ববত কৰক',
+'diff-empty' => '(কোনো পাৰ্থক্য নাই)',
'diff-multi' => '({{PLURAL:$2|এজন সদস্যৰ|$2জন সদস্যৰ}} দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখোৱা হোৱা নাই)',
'diff-multi-manyusers' => '({{PLURAL:$2|এজনতকৈ|$2-জনতকৈ}} অধিক সদস্যৰ দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)',
'difference-missing-revision' => '{{PLURAL:$2|এটা সংস্কৰণ|$2 সংস্কৰণসমূহৰ}} সংশোধনৰ পাৰ্থক্য ($1) {{PLURAL:$2| পোৱা নগ’ল}}।
'preferences' => 'পছন্দসমূহ',
'mypreferences' => 'পছন্দসমূহ',
'prefs-edits' => 'সম্পাদনাৰ সংখ্যা:',
-'prefsnologin' => 'প্ৰৱেশ কৰা নাই',
-'prefsnologintext' => 'আপোনাৰ পছন্দ সলনি কৰিবলৈ হ’লে <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} প্ৰৱেশ]</span> কৰাতো আৱশ্যক।',
'changepassword' => 'গুপ্তশব্দ সলনি কৰক',
'prefs-skin' => 'আৱৰণ',
'skin-preview' => 'খচৰা',
'prefs-rendering' => 'ৰূপ',
'saveprefs' => 'সাঁচি থওক',
'resetprefs' => 'অসঞ্চিত সাল-সলনি বাতিল কৰক',
-'restoreprefs' => 'সকলো পূৰ্বনিৰ্ধাৰিত ছেটিং ঘূৰাই আনক',
+'restoreprefs' => 'সকলো পূৰ্বনিৰ্ধাৰিত ছেটিং ঘূৰাই আনক (সকলো ছেক্শ্যনতে)',
'prefs-editing' => 'সম্পাদন',
'rows' => 'পথালী শাৰী:',
'columns' => 'ঠিয় শাৰী:',
'recentchangesdays-max' => 'সৰ্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}',
'recentchangescount' => 'শেহতীয়া সাল-সলনি, ইতিহাস আৰু লগ পৃষ্ঠাত দেখুৱাব লগা সম্পাদনাৰ সংখ্যা:',
'prefs-help-recentchangescount' => 'ইয়াত শেহতীয়া সাল-সলনি, পৃষ্ঠাৰ ইতিহাস আৰু লগ অন্তৰ্ভুক্ত ।',
+'prefs-help-watchlist-token2' => "এইটো আপোনাৰ লক্ষ্য-তালিকাৰ ৱেব্ ফীডৰ গোপন চাবি। এইটো জনা লোকে আপোনাৰ লক্ষ্য-তালিকা পঢ়িবলৈ সমৰ্থ হ'ব। গতিকে ইয়াক আনৰ আগত প্ৰকাশ নকৰিব।
+[[Special:ResetTokens|এইটো ৰিছে'ট কৰিবলৈ ইয়াত ক্লিক কৰক।]].",
'savedprefs' => 'আপোনাৰ পছন্দসমূহ সাঁচি ৰখা হ’ল।',
'timezonelegend' => 'সময় স্থান:',
'localtime' => 'স্থানীয় সময়:',
'badsig' => 'অনুপযোগী স্বাক্ষ্যৰ, HTML টেগ পৰীক্ষা কৰি লওক।',
'badsiglength' => 'আপোনাৰ স্বাক্ষৰ অত্যাধিক দীঘলীয়া ।
আপোনাৰ স্বাক্ষৰ {{PLURAL:$1|এটা আখৰৰ|টা আখৰৰ}} বেছি হ’ব নালাগে ।',
-'yourgender' => 'লিঙ্গ:',
-'gender-unknown' => 'অনিধাৰ্য্য',
-'gender-male' => 'পুৰুষ',
-'gender-female' => 'মহিলা',
-'prefs-help-gender' => 'বৈকল্পিক: ছফ্টৱেৰৰ দ্বাৰা কৰা সম্বোধনৰ লিংগ-শুদ্ধতাৰ বাবে ব্যৱহৃত ।
-এই তথ্য ৰাজহুৱা কৰা হ’ব ।',
+'yourgender' => 'আপুনি কিদৰে নিজৰ বৰ্ণনা দিবলৈ ভাল পাব?',
+'gender-unknown' => "মই ক'বলৈ বিচৰা নাই",
+'gender-male' => 'তেওঁ (পুৰুষ) ৱিকি পৃষ্ঠা সম্পাদনা কৰে',
+'gender-female' => 'তেওঁ (মহিলা) ৱিকি পৃষ্ঠা সম্পাদনা কৰে',
+'prefs-help-gender' => "এই পছন্দ ছে'ট কৰাটো বৈকল্পিক।
+এই ছফ্টৱেৰে আপোনাক সম্বোধন কৰিবলৈ আৰু আনৰ আগত আপোনাৰ উল্লেখ কৰিবলৈ উপযুক্ত ব্যাকৰণগত লিংগ ব্যৱহাৰ কৰিব পাৰে।
+এই তথ্য ৰাজহুৱা কৰা হ’ব ।",
'email' => 'ই-মেইল',
'prefs-help-realname' => 'আপোনাৰ আচল নাম দিয়াতো জৰুৰী নহয়, কিন্তু দিলে আপোনাৰ কামবোৰ আপোনাৰ নামত দেখুওৱা হব।',
'prefs-help-email' => 'ই-মেইল ঠিকনা দিয়াটো বৈকল্পিক, কিন্তু আপুনি গুপ্তশব্দ পাহৰি গ’লে ন-কৈ বহুৱাবৰ বাবে ই প্ৰয়োজনীয়।',
'prefs-signature' => 'স্বাক্ষৰ',
'prefs-dateformat' => 'তাৰিখ বিন্যাস',
'prefs-timeoffset' => 'সময় অফচেট',
-'prefs-advancedediting' => 'উচ্চতৰ বিকল্পসমূহ',
+'prefs-advancedediting' => 'সাধাৰণ বিকল্পসমূহ',
+'prefs-editor' => 'সম্পাদক',
+'prefs-preview' => 'প্ৰাক্দৰ্শন',
'prefs-advancedrc' => 'উচ্চতৰ বিকল্পসমূহ',
'prefs-advancedrendering' => 'উচ্চতৰ বিকল্পসমূহ',
'prefs-advancedsearchoptions' => 'উচ্চতৰ বিকল্পসমূহ',
'prefs-displayrc' => 'প্ৰদৰ্শন বিকল্পসমূহ',
'prefs-displaysearchoptions' => 'বিকল্পসমূহ প্ৰদৰ্শন কৰক',
'prefs-displaywatchlist' => 'বিকল্পসমূহ প্ৰদৰ্শন কৰক',
+'prefs-tokenwatchlist' => "ট'কেন",
'prefs-diffs' => 'পাৰ্থক্য',
+'prefs-help-prefershttps' => "আপোনাৰ পৰৱৰ্তী প্ৰৱেশত এই পছন্দ কাৰ্যকৰী হ'ব।",
# User preference: email validation using jQuery
'email-address-validity-valid' => 'ই-মেইল ঠিকনাটো সঠিক',
'userrights-no-interwiki' => 'আপোনাৰ অন্য ৱিকিত সদস্যৰ অধিকাৰ সম্পাদনা কৰাৰ অনুমতি নাই',
'userrights-nodatabase' => '$1 তথ্যকোষৰ কোনো অস্তিত্ব নাই অথবা ই স্থানীয় নহয় ।',
'userrights-nologin' => 'সদস্যৰ অধিকাৰ নিৰূপণ কৰিবলৈ আপুনি কোনো প্ৰশাসকৰ একাউণ্টৰ জৰিয়তে [[Special:UserLogin|প্ৰৱেশ]] কৰিব লাগিব ।',
-'userrights-notallowed' => 'সদসà§\8dযৰ à¦\85ধিà¦\95াৰ যà§\8bà¦\97 à¦\95ৰিবলà§\88 বা à¦\86à¦\81তৰ à¦\95ৰিবলà§\88 à¦\86পà§\8bনাৰ à¦\8fà¦\95াà¦\89ণà§\8dà¦\9fৰ অনুমতি নাই ।',
+'userrights-notallowed' => 'সদসà§\8dযৰ à¦\85ধিà¦\95াৰ যà§\8bà¦\97 বা à¦\86à¦\81তৰ à¦\95ৰিবলà§\88 à¦\86পà§\8bনাৰ অনুমতি নাই ।',
'userrights-changeable-col' => 'আপুনি সলনি কৰিব পৰা গোটসমূহ',
'userrights-unchangeable-col' => 'আপুনি সলনি কৰিব নোৱাৰা গোটসমূহ',
-'userrights-conflict' => 'সদসà§\8dয à¦\85ধিà¦\95াৰ দà§\8dবনà§\8dদà§\8dব! à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦\86পà§\8bনাৰ সালসলনি à¦\86à¦\95à§\8c à¦\8fবাৰ পà§\8dৰয়à§\8bà¦\97 কৰক।',
+'userrights-conflict' => 'সদসà§\8dয à¦\85ধিà¦\95াৰ সালসলনিৰ দà§\8dবনà§\8dদà§\8dব! à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি পà§\81নৰাà¦\87 à¦\9aà¦\95à§\81 ফà§\81ৰাà¦\87 à¦\86পà§\8bনাৰ সালসলনি নিশà§\8dà¦\9aিত কৰক।',
'userrights-removed-self' => 'আপুনি সফলতাৰে নিজৰ অধিকাৰসমূহ আঁতৰ কৰিলে। গতিকে আপুনি এতিয়া এই পৃষ্ঠা চাব নোৱাৰে।',
# Groups
'right-reupload-shared' => 'উমৈহতীয়া মিডিয়া ভঁৰালত থকা ফাইলসমূহ স্থানীয়ভাৱে উপেক্ষা কৰক ।',
'right-upload_by_url' => "ইউ-আৰ-এলৰ পৰা ফাইল আপল'ড কৰক",
'right-purge' => 'চাইট কেচৰ পৰা নিশ্চয়তা নোহোৱা পৃষ্ঠা মচি পেলাওক ।',
-'right-autoconfirmed' => 'à¦\85ৰà§\8dদà§\8dধ-সà§\81ৰà¦\95à§\8dষিত পà§\83ষà§\8dঠা সমà§\8dপাদনা à¦\95ৰà¦\95',
+'right-autoconfirmed' => 'à¦\86à¦\87-পি à¦à¦¿à¦¤à§\8dতিà¦\95 à¦\97তি সà§\80মাৰ দà§\8dবাৰা পà§\8dৰà¦à¦¾à§±à¦¿à¦¤ নহâ\80\99ব',
'right-bot' => 'স্বয়ংক্ৰিয় প্ৰক্ৰিয়া হিচাপে ব্যৱহৃত হওক',
'right-nominornewtalk' => 'আলোচনা পৃষ্ঠাৰ লঘূ সম্পাদনা হওঁতে নতুন সদস্য বাৰ্তা নালাগে',
'right-apihighlimits' => 'API প্ৰশ্নৰ বাবে উচ্চতৰ সীমা ব্যৱহাৰ কৰক',
'right-ipblock-exempt' => 'আই.পি. প্ৰতিবন্ধক, অট’-প্ৰতিবন্ধক আৰু ৰে’ঞ্জ-প্ৰতিবন্ধক এৰাই চলক',
'right-proxyunbannable' => 'প্ৰক্সীৰ স্বয়ংক্ৰিয় প্ৰতিবন্ধক এৰাই চলক',
'right-unblockself' => 'আপোনা-আপুনি খোলা',
-'right-protect' => 'সà§\81ৰà¦\95à§\8dষাৰ মাতà§\8dৰা পৰিৱৰà§\8dতন à¦\95ৰà¦\95 à¦\86ৰà§\81 সুৰক্ষিত পৃষ্ঠাসমূহ সম্পাদনা কৰক',
+'right-protect' => 'সà§\81ৰà¦\95à§\8dষাৰ সà§\8dতৰ পৰিৱৰà§\8dতন à¦\95ৰà¦\95 à¦\86ৰà§\81 পà§\8dৰপাতাà¦\95াৰ-সুৰক্ষিত পৃষ্ঠাসমূহ সম্পাদনা কৰক',
'right-editprotected' => 'সুৰক্ষিত পৃষ্ঠা (কেশ্বকেডিঙ সুৰক্ষাৰ অবিহনে) সম্পাদনা কৰক',
'right-editinterface' => 'সদস্যৰ ইণ্টাৰফে’চ সম্পাদনা কৰক',
'right-editusercssjs' => 'আন সদস্যৰ CSS আৰু JavaScript সম্পাদনা কৰক',
'rc_categories_any' => 'যিকোনো',
'rc-change-size-new' => 'সালসলনিৰ পিছত $1 {{PLURAL:$1|বাইট|বাইট}}',
'newsectionsummary' => '/* $1 */ নতুন অনুচ্ছেদ',
-'rc-enhanced-expand' => 'সবিশেষ দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ প্ৰয়োজন)',
+'rc-enhanced-expand' => 'সবিশেষ দেখুৱাওক',
'rc-enhanced-hide' => 'সবিশেষ লুকুৱাওক',
'rc-old-title' => 'পূৰ্বে "$1" নামেৰে সৃষ্ট',
'listfiles_size' => 'আকাৰ',
'listfiles_description' => 'বিৱৰণ',
'listfiles_count' => 'সংস্কৰণ',
+'listfiles-latestversion-yes' => 'হয়',
+'listfiles-latestversion-no' => 'নহয়',
# File description page
'file-anchor-link' => 'চিত্ৰ',
'randompage' => 'যিকোনো পৃষ্ঠা',
'randompage-nopages' => 'তলত দিয়া {{PLURAL:$2|নামস্থানত|নামস্থানসমূহত}} কোনো পৃষ্ঠা নাই: $1 ।',
+# Random page in category
+'randomincategory' => 'শ্ৰেণীৰ যিকোনো পৃষ্ঠা',
+
# Random redirect
'randomredirect' => 'অনিৰ্ধাৰিত পুননিৰ্দেশ',
'randomredirect-nopages' => '"$1" নামস্থানত কোনো পুননিৰ্দেশ নাই ।',
'contributions' => '{{GENDER:$1|সদস্যৰ}} বৰঙণিসমূহ',
'contributions-title' => '$1ৰ বৰঙণিসমূহ',
'mycontris' => 'বৰঙণিসমূহ',
-'contribsub2' => '$1 ৰ কাৰণে ($2)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2)ৰ কাৰণে',
'nocontribs' => 'এই গুণসমূহৰ লগত মিল থকা কোনো সালসলনি পোৱা নগ’ল ।',
'uctop' => '(বৰ্তমান)',
'month' => 'এই মাহৰ পৰা (আৰু আগৰ):',
'allmessagesdefault' => 'সাধাৰণ বাৰ্তা পাঠ্য',
'allmessagescurrent' => 'বৰ্তমানৰ বাৰ্তাৰ পাঠ',
'allmessagestext' => 'মিডিয়াৱিকি নামস্থানত থকা প্ৰণালী বাৰ্তাসমূহৰ তালিকা ইয়াত দিয়া হৈছে ।
-যদি আপুনি মিডিয়াৱিকিৰ স্থানীয়কৰণত আগ্ৰহী, তেন্তে অনুগ্ৰহ কৰি [//www.mediawiki.org/wiki/Localisation মিডিয়াৱিকি স্থানীয়কৰণ] আৰু [//translatewiki.net translatewiki.net] চাওক ।',
+যদি আপুনি মিডিয়াৱিকিৰ স্থানীয়কৰণত আগ্ৰহী, তেন্তে অনুগ্ৰহ কৰি [https://www.mediawiki.org/wiki/Localisation মিডিয়াৱিকি স্থানীয়কৰণ] আৰু [//translatewiki.net translatewiki.net] চাওক ।',
'allmessagesnotsupportedDB' => "এই পৃষ্ঠা ব্যৱহাৰ কৰিব নোৱাৰি কাৰণ '''\$wgUseDatabaseMessages''' নিষ্ক্ৰিয় কৰা হৈছে ।",
'allmessages-filter-legend' => 'ছেকনী',
'allmessages-filter' => 'স্বনিৰ্বাচন অৱস্থাৰে পৰিস্ৰাৱন কৰক:',
'svg-long-desc' => 'SVG ফাইল, সাধাৰণতঃ $1 × $2 পিক্সেল, ফাইল মাত্ৰা: $3',
'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধাৰণতে $1 × $2 পিক্সেল, ফাইলৰ আকাৰ: $3',
'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
-'show-big-image' => "সম্পূৰ্ণ ৰিজ'লিউশ্যন",
+'show-big-image' => 'মূল ফাইল',
'show-big-image-preview' => 'এই খচৰাৰ আকাৰ: $1.',
'show-big-image-other' => "আন {{PLURAL:$2|ৰিজ'লিউশ্যন|ৰিজ'লিউশ্যনসমূহ}}: $1।",
'show-big-image-size' => '$1 × $2 পিক্সেল',
# External editor support
'edit-externally' => 'বাহিৰা আহিলা ব্যৱহাৰ কৰি এই ফাইলটো সম্পাদনা কৰক ।',
-'edit-externally-help' => 'অধিক তথ্যৰ কাৰণে [//www.mediawiki.org/wiki/Manual:External_editors প্ৰস্তুত কৰা নিৰ্দেশনা] চাওক ।',
+'edit-externally-help' => 'অধিক তথ্যৰ কাৰণে [https://www.mediawiki.org/wiki/Manual:External_editors প্ৰস্তুত কৰা নিৰ্দেশনা] চাওক ।',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'সকলো',
'version-hook-subscribedby' => 'চাবস্ক্ৰাইব কৰিছে',
'version-version' => '(সংস্কৰণ $1)',
'version-license' => 'অনুজ্ঞাপত্ৰ',
-'version-poweredby-credits' => "এই ৱিকি '''[//www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
+'version-poweredby-credits' => "এই ৱিকি '''[https://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
'version-poweredby-others' => 'অন্য',
'version-credits-summary' => 'আমি নিম্নোক্ত ব্যক্তিসকলক তেওঁলোকে [[Special:Version|মিডিয়াৱিকি]]লৈ দিয়া দিয়া বৰঙনিৰ বাবে চিনাকী কৰিব বিচাৰিছো।',
'version-license-info' => "মিডিয়াৱিকি এটা বিনামূলীয়া চফ্টৱেৰ; আপুনি Free Software Foundation -ৰ দ্বাৰা প্ৰকাশিত GNU General Public License -ৰ চুক্তিসমূহৰ অন্তৰ্গত ইয়াক পুনৰ বিতৰণ কৰিব পাৰিব অথবা সলনি কৰিব পাৰিব; হয়তো অনুজ্ঞাপত্ৰৰ সংস্কৰণ ২
# Special:SpecialPages
'specialpages' => 'বিশেষ পৃষ্ঠাসমূহ',
-'specialpages-note' => '----
-* সাধাৰণ বিশেষ পৃষ্ঠাসমূহ।
+'specialpages-note' => '* সাধাৰণ বিশেষ পৃষ্ঠাসমূহ।
* <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পৃষ্ঠাসমূহ।</span>
* <span class="mw-specialpagecached">কেশ্ব কৰা বিশেষ পৃষ্ঠাসমূহ (অপ্ৰচলিতও হ\'ব পাৰে)।</span>',
'specialpages-group-maintenance' => 'তত্বাৱধানৰ কাৰ্যবিৱৰণীসমূহ',
'tags-tag' => 'টেগ নাম',
'tags-display-header' => 'পৰিৱৰ্তন তালিকাসমূহত ৰূপ',
'tags-description-header' => 'অৰ্থৰ পূৰ্ণ বৰ্ণনা',
+'tags-active-header' => 'সক্ৰিয়?',
'tags-hitcount-header' => 'টেগকৃত সালসলনি',
+'tags-active-yes' => 'হয়',
+'tags-active-no' => 'নহয়',
'tags-edit' => 'সম্পাদনা',
'tags-hitcount' => '$1 {{PLURAL:$1|সাল-সলনি|সাল-সলনিসমূহ}}',
'dberr-problems' => 'দুঃখিত! চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।',
'dberr-again' => "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
'dberr-info' => '(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)',
+'dberr-info-hidden' => '(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি)',
'dberr-usegoogle' => 'এই পৰিস্থিতিত আপুনি গুগলৰ মাধ্যমেৰে অনুসন্ধান কৰিব পাৰে ।',
'dberr-outofdate' => "মন কৰক যে, আমাৰ বিষয়বস্তু সম্পৰ্কে তেওঁলোকৰ সূচী পুৰণা হ'ব পাৰে ।",
'dberr-cachederror' => "এইখন অনুৰোধ কৰা পৃষ্ঠাৰ কেচ্ড লিপি, যিখন নবীকৰণ নকৰাও হ'ব পাৰে ।",
# Image rotation
'rotate-comment' => 'ছবিখন ঘড়ীৰ কাটাৰ দিশত $1 {{PLURAL:$1|ডিগ্ৰী}} ঘূৰোৱা হৈছে।',
+# Special:ExpandTemplates
+'expandtemplates' => 'সাঁচবোৰ বহলাওক',
+'expand_templates_input' => 'পাঠ্য ভৰাওক',
+'expand_templates_output' => 'ফলাফল',
+'expand_templates_ok' => 'ওকে',
+'expand_templates_remove_comments' => 'মন্তব্য গু়চাওক',
+'expand_templates_preview' => 'খচৰা',
+
);
'ok' => 'Aceutar',
'retrievedfrom' => 'Sacáu de «$1»',
'youhavenewmessages' => 'Tienes $1 ($2).',
-'newmessageslink' => 'mensaxes nuevos',
-'newmessagesdifflink' => 'cambéu postreru',
'youhavenewmessagesfromusers' => "Tienes $1 {{PLURAL:$3|d'otru usuariu|de $3 usuarios}} ($2).",
'youhavenewmessagesmanyusers' => 'Tienes $1 de munchos usuarios ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un mensaxe nuevu|$1 mensaxes nuevos}}',
'invalidtitle-knownnamespace' => "Títulu inválidu col espaciu de nomes «$2» ya'l testu «$3»",
'invalidtitle-unknownnamespace' => "Títulu inválidu col númberu $1 d'espaciu de nomes desconocíu ya'l testu «$2»",
'exception-nologin' => 'Nun anició sesión',
-'exception-nologin-text' => "Esta páxina o aición necesita qu'anicies sesión nesta wiki.",
+'exception-nologin-text' => 'Por favor, [[Special:Userlogin|anicie sesión]] pa tener accesu a esta páxina o aición.',
+'exception-nologin-text-manual' => 'Por favor, $1 pa tener accesu a esta páxina o aición.',
# Virus scanner
'virus-badscanner' => "Fallu de configuración: Escáner de virus desconocíu: ''$1''",
'gotaccount' => '¿Yá tienes una cuenta? $1.',
'gotaccountlink' => 'Entrar',
'userlogin-resetlink' => "¿Escaeció los datos d'accesu?",
-'userlogin-resetpassword-link' => 'Reaniciar la contraseña',
+'userlogin-resetpassword-link' => '¿Escaeció la contraseña?',
'helplogin-url' => 'Help:Aniciar sesión',
'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Ayuda p'aniciar sesión]]",
'userlogin-loggedin' => "Yá anició sesión como {{GENDER:$1|$1}}.
'mailerror' => 'Fallu al unviar el corréu: $1',
'acct_creation_throttle_hit' => "Los visitantes d'esta wiki qu'usen la to direición IP yá crearon güei {{PLURAL:$1|1 cuenta|$1 cuentes}}, que ye'l máximu almitíu nesti periodu de tiempu.
Poro, los visitantes qu'usen esta direición IP nun puen crear más cuentes de momentu.",
-'emailauthenticated' => "La to direición de corréu electrónicu confirmóse'l $2 a les $3.",
-'emailnotauthenticated' => "La to direición de corréu electrónicu inda nun se comprobó.
+'emailauthenticated' => "La so direición de corréu electrónicu confirmóse'l $2 a les $3.",
+'emailnotauthenticated' => "La so direición de corréu electrónicu inda nun se confirmó.
Nun s'unviará corréu pa nenguna de les funciones siguientes.",
'noemailprefs' => 'Conseña una direición de corréu electrónicu nes tos preferencies pa que funcionen eses carauterístiques.',
'emailconfirmlink' => 'Confirmar la direición de corréu electrónicu',
'revdelete-confirm' => "Confirma que quies facer esto, qu'entiendes les consecuencies, y que vas facer esto d'alcuerdo [[{{MediaWiki:Policy-url}}|cola política]].",
'revdelete-suppress-text' => "La supresión '''namái''' tendría d'usase nos casos darréu:
* Información que pudiere ser bilordiosa
-* Información personal non apropiada
-*: ''direiciones de llares y númberos de teléfonu, númberos de seguridá social, etc.''",
+* Información personal inapropiada
+*: ''direiciones de llares y númberos de teléfonu, númberos d'identidá nacional, etc.''",
'revdelete-legend' => 'Establecer torgues de visibilidá',
-'revdelete-hide-text' => 'Tapecer testu de la revisión',
+'revdelete-hide-text' => 'Testu de la revisión',
'revdelete-hide-image' => 'Tapecer el conteníu del ficheru',
'revdelete-hide-name' => 'Tapecer aición y oxetivu',
-'revdelete-hide-comment' => "Tapecer el resume d'edición",
-'revdelete-hide-user' => "Tapecer el nome d'usuariu/IP del editor",
+'revdelete-hide-comment' => "Resume d'edición",
+'revdelete-hide-user' => 'Nome del editor/Direición IP',
'revdelete-hide-restricted' => "Desaniciar datos de los alministradores y d'otros",
'revdelete-radio-same' => '(ensin cambeos)',
-'revdelete-radio-set' => 'Sí',
-'revdelete-radio-unset' => 'Non',
+'revdelete-radio-set' => 'Tapecíu',
+'revdelete-radio-unset' => 'Visible',
'revdelete-suppress' => "Desaniciar datos de los alministradores igual que d'otros",
'revdelete-unsuppress' => 'Desaniciar les torgues nes revisiones restauraes',
'revdelete-log' => 'Motivu:',
'preferences' => 'Preferencies',
'mypreferences' => 'Preferencies',
'prefs-edits' => "Númberu d'ediciones:",
-'prefsnologin' => 'Nun anició sesión',
-'prefsnologintext' => 'Necesita <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aniciar sesión]</span> pa camudar la configuración d\'usuariu.',
+'prefsnologintext2' => "Por favor, $1 pa configurar les preferencies d'usuariu",
'changepassword' => 'Camudar la clave',
'prefs-skin' => 'Apariencia',
'skin-preview' => 'Vista previa',
'recentchanges-label-minor' => 'Esta ye una edición menor',
'recentchanges-label-bot' => 'Esta edición ta fecha por un bot',
'recentchanges-label-unpatrolled' => 'Esta edición ta ensin patrullar entá',
+'recentchanges-legend-newpage' => '$1 - páxina nueva',
'rcnote' => "Equí embaxo {{PLURAL:$1|pue vese '''1''' cambiu|puen vese los caberos '''$1''' cambios}} {{PLURAL:$2|del caberu día|de los caberos '''$2''' díes}}, a fecha de $5, $4.",
'rcnotefrom' => "Abaxo tan los cambeos dende '''$2''' (s'amuesen fasta '''$1''').",
'rclistfrom' => 'Amosar los nuevos cambios dende $1',
corréu: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-En casu de producise más cambios, nun habrá más notificaciones a nun ser que visites esta páxina. Tamién podríes reaniciar na to llista de vixilancia los marcadores de notificación de toles páxines que tengas vixilaes.
+En casu de producise más actividá, nun habrá más notificaciones a nun ser que visites esta páxina teniendo sesión aniciada. Tamién podríes reaniciar na to llista de vixilancia los marcadores de notificación de toles páxines que tengas vixilaes.
El to abertable sistema de notificación de {{SITENAME}}
'allmessagesdefault' => 'Testu predetermináu',
'allmessagescurrent' => 'Testu actual',
'allmessagestext' => 'Esta ye una llista de los mensaxes de sistema disponibles nel espaciu de nomes de MediaWiki.
-Por favor visita [//www.mediawiki.org/wiki/Localisation Llocalización de MediaWiki] y [//translatewiki.net translatewiki.net] si quies contribuyer a la llocalización xenérica de MediaWiki.',
+Por favor visita [https://www.mediawiki.org/wiki/Localisation Llocalización de MediaWiki] y [//translatewiki.net translatewiki.net] si quies contribuyer a la llocalización xenérica de MediaWiki.',
'allmessagesnotsupportedDB' => "Nun pue usase '''{{ns:special}}:Allmessages''' porque '''\$wgUseDatabaseMessages''' ta deshabilitáu.",
'allmessages-filter-legend' => 'Peñerar',
'allmessages-filter' => 'Peñerar por estáu de personalización:',
'pageinfo-length' => 'Llonxitú de la páxina (en bytes)',
'pageinfo-article-id' => 'ID de la páxina',
'pageinfo-language' => 'Llingua del conteníu de la páxina',
+'pageinfo-content-model' => 'Plantía del conteníu de la páxina',
'pageinfo-robot-policy' => 'Indexación por robots',
'pageinfo-robot-index' => 'Permitío',
'pageinfo-robot-noindex' => 'Torgao',
'svg-long-desc' => 'ficheru SVG, $1 × $2 píxels nominales, tamañu de ficheru: $3',
'svg-long-desc-animated' => 'Ficheru SVG animáu; nominalmente de $1 × $2 pixels; tamañu del ficheru: $3',
'svg-long-error' => 'Ficheru SVG inválidu: $1',
-'show-big-image' => 'Resolución completa',
+'show-big-image' => 'Ficheru orixinal',
'show-big-image-preview' => "Tamañu d'esta previsualización: $1.",
'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otres resoluciones}}: $1.',
'show-big-image-size' => '$1 × $2 pixels',
# External editor support
'edit-externally' => 'Editar esti ficheru usando una aplicación esterna',
-'edit-externally-help' => '(Pa más información ver les [//www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración])',
+'edit-externally-help' => '(Pa más información ver les [https://www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'too',
'confirm-unwatch-button' => 'Aceutar',
'confirm-unwatch-top' => '¿Desaniciar esta páxina de la to llista de vixilancia?',
+# Separators for various lists, etc.
+'quotation-marks' => '«$1»',
+
# Multipage image navigation
'imgmultipageprev' => '← páxina anterior',
'imgmultipagenext' => 'páxina siguiente →',
'version-hook-subscribedby' => 'Suscritu por',
'version-version' => '(Versión $1)',
'version-license' => 'Llicencia',
-'version-poweredby-credits' => "Esta wiki funciona con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Esta wiki funciona con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'otros',
'version-poweredby-translators' => 'los traductores de translatewiki.net',
'version-credits-summary' => 'Nos prestaría dar reconocimientu a les siguientes persones pola so contribución a [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => "Redireición por nome de ficheru, o ID d'usuariu o de revisión",
'redirect-legend' => 'Redirixir a un ficheru o una páxina',
-'redirect-summary' => "Esta páxina especial redirixe a un ficheru (dando'l nome), una páxina (dando una ID de revisión) o una páxina d'usuariu (dando una ID d'usuariu).",
+'redirect-summary' => "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión) o una páxina d'usuariu (dando un númberu d'ID d'usuariu). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
'redirect-submit' => 'Dir',
'redirect-lookup' => 'Buscar:',
'redirect-value' => 'Valor:',
# Special:SpecialPages
'specialpages' => 'Páxines especiales',
-'specialpages-note' => '----
-* Páxines especiales normales.
-* <span class="mw-specialpagerestricted">Páxines especiales restrinxíes.</span>
-* <span class="mw-specialpagecached">Páxines especiales en caché (seique nun tean actualizaes).</span>',
+'specialpages-note-top' => 'Lleenda',
+'specialpages-note' => '* Páxines especiales normales.
+* <span class="mw-specialpagerestricted">Páxines especiales restrinxíes.</span>',
'specialpages-group-maintenance' => 'Informes de mantenimientu',
'specialpages-group-other' => 'Otres páxines especiales',
'specialpages-group-login' => 'Entrar / crear cuenta',
'limitreport-expansiondepth' => "Máxima fondura d'espansión",
'limitreport-expensivefunctioncount' => "Cuenta de funciones d'analís costoses",
+# Special:ExpandTemplates
+'expandtemplates' => 'Esparder plantíes',
+'expand_templates_intro' => "Esta páxina especial toma un testu y espande toles plantíes del mesmu de forma recursiva.
+ Tamién espande les funciones d'análisis sintáuticu como
+<code><nowiki>{{</nowiki>#language:...}}</code>, y variables como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+En realidá cuasi tolo qu'apaeza ente llaves dobles.",
+'expand_templates_title' => 'Títulu del contestu, pa {{FULLPAGENAME}}, etc.:',
+'expand_templates_input' => "Testu d'entrada:",
+'expand_templates_output' => 'Resultáu',
+'expand_templates_xml_output' => 'Salida XML',
+'expand_templates_ok' => 'Aceutar',
+'expand_templates_remove_comments' => 'Eliminar comentarios',
+'expand_templates_remove_nowiki' => 'Quitar les etiquetes <nowiki> nos resultaos',
+'expand_templates_generate_xml' => "Amosar l'árbole d'análisis sintáuticu XML",
+'expand_templates_preview' => 'Vista previa',
+
);
'ok' => 'Tuenara',
'retrievedfrom' => 'Dimnarin mal « $1 »',
'youhavenewmessages' => 'Va $1 ($2) al kazawal.',
-'newmessageslink' => 'warzafa staksa',
-'newmessagesdifflink' => 'amid- gu ironokaf siatos',
'youhavenewmessagesmulti' => 'Rin dil va warzafa staksa moe $1',
'editsection' => 'betara',
'editold' => 'betara',
'preferences' => 'Lodamaceem',
'mypreferences' => 'Jinaf lodamaceem',
'prefs-edits' => 'Ota va betaks :',
-'prefsnologin' => 'Dogluyariskaf',
-'prefsnologintext' => 'Ede va favesiklodamaceem djubetal, gotil <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} dogluyarakiraf]</span>.',
'changepassword' => 'Betara va remravlem',
'prefs-skin' => 'Laviuca',
'skin-preview' => 'Abdiwira',
'allmessagescurrent' => 'Noelaf krent',
'allmessagestext' => 'Batcoba tir vexala dem bolkstakseem koe MediaWiki yoltxo.
-Va [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] is [//translatewiki.net translatewiki.net] vay woral ede va tulizukara va Mediawiki co-rowebel.',
+Va [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] is [//translatewiki.net translatewiki.net] vay woral ede va tulizukara va Mediawiki co-rowebel.',
'allmessagesnotsupportedDB' => "Batu bu me zo rofaver kire '''\$wgUseDatabaseMessages''' mea tir tegis.",
# Thumbnails
# External editor support
'edit-externally' => 'Betara va bat iyeltak faveson va divef talpey',
-'edit-externally-help' => '(Ta lo giva va [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] disukel !)',
+'edit-externally-help' => '(Ta lo giva va [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] disukel !)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kot',
* @author Gulmammad
* @author Kaganer
* @author Khan27
+ * @author Mushviq Abdulla
* @author PPerviz
* @author PrinceValiant
* @author Sortilegus
'tog-diffonly' => 'Versiyaların müqayisəsi zamanı səhifənin məzmununu göstərmə',
'tog-showhiddencats' => 'Gizli kateqoriyaları göstər',
'tog-norollbackdiff' => 'Geri qaytardıqdan sonra, edilmiş dəyişikikləri dəyişikliklər siyahısından sil',
+'tog-useeditwarning' => 'Qeyd edilməmiş dəyişikliyə sahib bir dəyişiklik səhifəsindən çıxarkən məni xəbərdar et',
+'tog-prefershttps' => 'Sessiya aaçarkən hər zaman etibarlı bağlantıdan istifadə et.',
'underline-always' => 'Həmişə',
'underline-never' => 'Heç vaxt',
'oct' => 'Oktyabr',
'nov' => 'Noyabr',
'dec' => 'Dekabr',
+'january-date' => '$1 Yanvar',
+'february-date' => '$1 Fevral',
+'march-date' => '$1 Mart',
+'april-date' => '$1 Aprel',
+'may-date' => '$1 May',
+'june-date' => '$1 İyun',
+'july-date' => '$1 İyul',
+'august-date' => '$1 Avqust',
+'september-date' => ' $1 Sentyabr',
+'october-date' => '$1 Oktyabr',
+'november-date' => '$1 Noyabr',
+'december-date' => '$1 Dekabr',
# Categories related messages
'pagecategories' => '$1 {{PLURAL:$1|Kateqoriya|Kateqoriya}}',
'newwindow' => '(yeni pəncərədə açılır)',
'cancel' => 'Ləğv et',
'moredotdotdot' => 'Daha...',
+'morenotlisted' => 'Bu siyahı tam deyil.',
'mypage' => 'Mənim səhifəm',
'mytalk' => 'Danışıqlarım',
'anontalk' => 'Bu IP-yə aid müzakirə',
'create-this-page' => 'Bu səhifəni yarat',
'delete' => 'Sil',
'deletethispage' => 'Bu səhifəni sil',
+'undeletethispage' => 'Bu səhifənin silmə əməliyyatını geri qaytar',
'undelete_short' => '$1 {{PLURAL:$1|dəyişikliyi|dəyişiklikləri}} bərpa et',
'viewdeleted_short' => '{{PLURAL:$1|bir silinmiş redaktəyə|$1 silinmiş redaktəyə}}',
'protect' => 'Mühafizə et',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Mənbə — "$1"',
'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)',
-'newmessageslink' => 'yeni ismarıclar',
-'newmessagesdifflink' => 'Sonuncu və əvvəlki versiya arasındakı fərq',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir istifadəçidən|$3 istifadəçidən}} $1 var ($2).',
+'youhavenewmessagesmanyusers' => 'Bir çox istifadəçidən $1 var ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
+'newmessagesdifflinkplural' => 'son {{PLURAL:$1|dəyişiklik|dəyişikliklər}}',
'youhavenewmessagesmulti' => '"$1"da yeni mesajınız var.',
'editsection' => 'redaktə',
'editold' => 'redaktə',
# General errors
'error' => 'Xəta',
'databaseerror' => 'Verilənlər bazası xətası',
+'databaseerror-text' => 'Bir verilənlər bazası sorğu xətası baş verdi.
+Bu proqramdan qaynaqlanan bir xətanı göstərmiş ola bilər.',
+'databaseerror-textcl' => 'Bir verilənlər bazası sorğu xətası baş verdi.',
+'databaseerror-query' => 'Sorğu: $1',
+'databaseerror-function' => 'Funksiya: $1',
+'databaseerror-error' => 'Xəta: $1',
'laggedslavemode' => "'''Xəbərdarlıq:''' Səhifə son əlavələri əks etdirməyə bilər.",
'readonly' => 'Verilənlər bazası bloklanıb',
'enterlockreason' => 'Bloklamanın səbəbini və nəzərdə tutulan müddətini qeyd edin',
'cannotdelete' => 'İstədiyiniz "$1" səhifə və ya faylını silmək mümkün deyil.
Bu səhifə və ya fayl başqa bir istifadəçi tərəfindən silinmiş ola bilər.',
'cannotdelete-title' => '"$1" səhifəsinin silinməsi mümkünsüzdür.',
+'delete-hook-aborted' => 'Silmə əməliyyatı qarmaq tərəfindən dayandırıldı.
+Heç bir açıqlama edilmədi.',
+'no-null-revision' => '"$1" səhifəsi üçün yeni boş bir versiya yaradıla bilmədi',
'badtitle' => 'Səhv başlıq',
'badtitletext' => 'Axtarılan səhifə adı səhvdir və ya boşdur, ya da düzgün olmayan dillərarası, yaxud vikilərarası keçid istifadə edilib.
Başlıqlarda istifadə edilməsi qadağan olunan bir və ya daha çox simvol istifadə edilmiş ola bilər.',
'actionthrottledtext' => 'Anti-spam hərəkətləri səbəbilə, bir hərəkəti qısa bir zaman aralığında çoxetməniz əngəlləndi, və siz həddi aşmısınız. Lütfən bir neçə dəqiqə sonra yenidən yoxlayın.',
'protectedpagetext' => 'Bu səhifə redaktə üçün bağlıdır.',
'viewsourcetext' => 'Siz bu səhifənin məzmununu görə və köçürə bilərsiniz:',
+'viewyourtext' => "Bu səhifəyə '''etdiyiniz dəyişikliklərin''' mənbəyini görüntüləyib köçürə bilərsiniz:",
'protectedinterface' => 'Bu səhifədə proqram təminatı üçün sistem məlumatları var və sui-istifadənin qarşısını almaq üçün mühafizə olunmalıdır.',
'editinginterface' => "'''Diqqət!''' Siz proqram təminatı interfeysinin mətn olan səhifəsini redaktə edirsiniz.
Onun dəyişdirilməsi digər istifadəçilərin interfeysinin xarici görünüşünə təsir göstərir.
'cascadeprotected' => 'Səhifə mühafizə olunub, çünki o kaskad mühafizə olunan {{PLURAL:$1|növbəti səhifəyə|növbəti səhifələrə}} qoşulub:
$2',
'namespaceprotected' => 'Sizin adlarında $1 olan məqalələrdə redaktə etməyə icazəniz yoxdur.',
+'customcssprotected' => 'Bu səhifəni redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.',
+'customjsprotected' => 'Bu Java Script səhifəsini redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.',
+'mycustomcssprotected' => 'Bu CSS ssəhifəsini redaktə etmə izniniz yoxdur.',
+'mycustomjsprotected' => 'Bu JavaScript səhifəsini redaktə etmə izniniz yoxdur.',
+'myprivateinfoprotected' => 'Sizin özəl məlumatlarınızı redaktə etmə izniniz yoxdur.',
+'mypreferencesprotected' => 'Seçimlərinizi redaktə etmək üçün izniniz yoxdur.',
'ns-specialprotected' => 'Xüsusi səhifələr redaktə oluna bilməz.',
'titleprotected' => 'Bu adda səhifənin yaradılması istifadəçi [[User:$1|$1]] tərəfindən qadağan edilmişdir.
Göstərilən səbəb: "\'\'$2\'\'".',
+'filereadonlyerror' => '"$2" fayl deposundakı "$1" faylı ancaq oxunula bilən rejimdə olduğuna görə dəyişdirmək üçün açıla bimir.
+
+Rejimi qoyan nəzarətçinin izahı: "$3".',
+'invalidtitle-knownnamespace' => '"$2" sahə adı üçün "$3" mətni keçərsiz bir başlıq',
+'invalidtitle-unknownnamespace' => 'Naməlum $1 ad sahəsi miqdarı və keçərsiz "$2" başlıq',
+'exception-nologin' => 'Giriş edilməmişdir',
+'exception-nologin-text' => 'Bu səhifəyə daxi olmaq üçün [[Special:Userlogin|özünüzü təqdim]], edin.',
+'exception-nologin-text-manual' => ' bu səhifəyə və ya hərəkətə daxil olmaq üçün $1 lazımdır.',
# Virus scanner
'virus-badscanner' => "Düzgün olmayan konfiqurasiya: naməlum ''$1'' virus yoxlayanı",
'welcomecreation-msg' => 'Hesabınız yaradıldı.
[[Special:Preferences|{{SITENAME}} nizamlamalarınızı]] dəyişdirməyi unutmayın.',
'yourname' => 'İstifadəçi adı',
+'userlogin-yourname' => 'İstifadəçi adı',
+'userlogin-yourname-ph' => 'İstifadəçi adınızı daxil edin',
+'createacct-another-username-ph' => 'İstifadəçi adınızı daxil edin:',
'yourpassword' => 'Parol:',
+'userlogin-yourpassword' => 'Parol',
+'userlogin-yourpassword-ph' => 'Parolunuzu daxil edin',
+'createacct-yourpassword-ph' => 'Parol daxil edin',
'yourpasswordagain' => 'Parolu təkrar yazın:',
+'createacct-yourpasswordagain' => 'Parolu təsdiqlə',
+'createacct-yourpasswordagain-ph' => 'Parolu təkrar daxil edin',
'remembermypassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
+'userlogin-remembermypassword' => 'Sistemdə qal',
+'userlogin-signwithsecure' => 'Etibarlı bağlantıdan istifadə edin',
'yourdomainname' => 'Sizin domain',
'password-change-forbidden' => 'Bu vikidə parolunuzu dəyişdirə bilməzsiniz.',
'externaldberror' => 'Verilənlər bazasının doğruluğunu yoxlamada xəta baş verib və yaxud sizin xarici istifadəçi qeydiyyatını yeniləmək hüququnuz yoxdur.',
'logout' => 'Çıxış',
'userlogout' => 'Çıxış',
'notloggedin' => 'Daxil olmamısınız',
+'userlogin-noaccount' => 'İstifadəçi hesabınız yoxdur?',
+'userlogin-joinproject' => '{{SITENAME}} qoşulun',
'nologin' => "İstifadəçi hesabınız yoxdur? '''$1'''.",
'nologinlink' => 'hesab açın',
'createaccount' => 'Hesab aç',
'gotaccount' => "Giriş hesabınız varsa '''$1'''.",
'gotaccountlink' => 'Daxil olun',
'userlogin-resetlink' => 'Daxilolma məlumatlarınızı unutmusunuz?',
-'createaccountmail' => 'e-məktub ilə',
+'userlogin-resetpassword-link' => 'Parolu unutdunuzmu?',
+'helplogin-url' => 'Help:Sistemə daxil ol',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|daxil olma haqqında yardım alın]]',
+'userlogin-loggedin' => 'Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.
+Aşağıdakı formadan istifadə edərək, bağqa bir istifadəçi kimi daxil ola bilərsiniz.',
+'userlogin-createanother' => 'Başqa bir istifadəçi hesabı yarat',
+'createacct-join' => 'Aşağıda məlumatlarınızı daxil edin.',
+'createacct-another-join' => 'Aşağıda yeni hesabınızın məlumatlarını daxil edin.',
+'createacct-emailrequired' => 'E-poçt ünvanı',
+'createacct-emailoptional' => 'E-poçt ünvanı (istəyə bağlı)',
+'createacct-email-ph' => 'E-poçt ünvanınızı daxil edin',
+'createacct-another-email-ph' => 'E-poçt ünvanını daxil edin',
+'createaccountmail' => 'Müvəqqəti təsadüfi bir paroldan istifadə edə bilər və bu parolu göstərilən e-poçt ünvanına göndərə bilərsiniz',
+'createacct-realname' => 'Gərçək adı (istəyə bağlı)',
'createaccountreason' => 'Səbəb:',
+'createacct-reason' => 'Səbəb',
+'createacct-reason-ph' => 'Niyə başqa bir hesab yaradırsınız',
+'createacct-captcha' => 'Təhlükəsizlik nəzarəti',
+'createacct-imgcaptcha-ph' => 'Yuxarıda gördüyünüz mətni daxil edin',
+'createacct-submit' => 'İstifadəçi hesabı yarat',
+'createacct-another-submit' => 'Başqa bir istifadəçi hesabı yarat',
+'createacct-benefit-heading' => '{{SITENAME}} sizin kimi insanlar tərəfindən yaradılır.',
+'createacct-benefit-body1' => '$1 {{PLURAL:$1|redaktə}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|səhifə|səhifə}}',
+'createacct-benefit-body3' => 'ən son {{PLURAL:$1|iştirakçılar|iştirakçılar}}',
'badretype' => 'Daxil etdiyiniz parol uyğun gəlmir.',
'userexists' => 'Daxil edilmiş ad artıq istifadədədir.
Lütfən başqa ad seçin.',
'loginerror' => 'Daxil olma xətası',
+'createacct-error' => 'Hesab yaratma xətası',
'createaccounterror' => 'Bu istifadəçi adını yaratmaq mümkün olmadı: $1',
'nocookiesnew' => 'İstifadəçi qeydiyyatı yaradıldı, lakin daxil ola bilmədiniz.
{{SITENAME}} iştirakçıların təqdim olunması üçün "cookie"lərdən istifadə edir.
'password-login-forbidden' => 'Bu istifadəçi adından və paroldan istifadə qadağan olunub.',
'mailmypassword' => 'E-mail ilə yeni parol göndər',
'passwordremindertitle' => '{{SITENAME}} parol xatırladıcı',
+'passwordremindertext' => 'Birisi (yəqin ki siz, $1 IP ünvanından) {{SITENAME}} ($4) üçün yeni bir parol göndərilməsini istədi. "$2" istifadəçisinə müvəqqəti olaraq "$3" parolu yaradıldı. Əgər bu sizin istyinizdirsə, hesab açıb yeni bir parol yaratmağınız vacibdir. Müvəqqəti parolunuzun müddəti {{PLURAL:$5|1 gün|$5 gün}} içində dolacaqdır.
+
+Parol dəyişdirməni siz istəməmisinizsə və ya parolunuzu xatırladınızsa və artıq parolunuzu dəyişdirmək isteəmirsinizsə; bu mesaja əhəmiyyət vermədən əski parolunuzdan istifadə etməyə davam edə bilərsiniz.',
'noemail' => '"$1" adlı istifadəçi e-poçt ünvanını qeyd etməmişdir.',
'noemailcreate' => 'Düzgün e-poçt ünvanı qeyd etməlisiniz',
'passwordsent' => 'Yeni parol "$1" üçün qeydiyyata alınan e-poçt ünvanına göndərilmişdir.
Xahiş edirik, e-məktubu aldıqdan sonra yenidən daxil olasınız.',
'blocked-mailpassword' => 'İP ünvanınız bloklu olduğuna görə, yeni parol göndərmə mümkün deyil.',
+'eauthentsent' => 'Göstərilən bu e-poçt ünvanına məktub göndərildi.
+Gələcəkdə e-poçt almaq üçün,bu e-poçtun sizə aid olması haqqındakı qaydalarla tanış olun.',
+'throttled-mailpassword' => 'Bir parol sıfırlama e-poçtu son {{PLURAL:$1|bir saat|$1 saat}} içində zatən göndərildi. Xidməti pis niyyətlə istifadə etməyi önləmək üçün, hər {{PLURAL:$1|bir saatda|$1 saatda}} sadəcə bir parol sıfırlama e-poçtu göndəriləcəkdir.',
'mailerror' => 'Məktub göndərmə xətası: $1',
'acct_creation_throttle_hit' => 'Sizin IP ünvanınızdan bu viki-də son bir gün ərzində {{PLURAL:$1|1 hesab|$1 hesab}} açılmışdır. Bu bir gün ərzində icazə verilən maksimum say olduğu üçün, indiki anda daha çox hesab aça bilməzsiniz.',
'emailauthenticated' => 'E-poçt ünvanınız $2 saat $3 tarixində təsdiq edilib.',
'emailconfirmlink' => 'E-poçt ünvanını təsdiq et',
'invalidemailaddress' => 'E-poçt ünvanınızı qeyri-düzgün formatda olduğu üçün qəbul edə bilmirik.
Xahiş edirik düzgün formatlı ünvan daxil edin və ya bu sahəni boş qoyun.',
+'cannotchangeemail' => 'Hesabın e-poçt ünvanı bu wiki üzərindən dəyişdirilə bilməz.',
'emaildisabled' => 'Bu saytdan e-poçt göndərə bilməzsiniz.',
'accountcreated' => 'Hesab yaradıldı',
'accountcreatedtext' => '$1 üçün istifadəçi hesabı yaradıldı.',
'createaccount-title' => '{{SITENAME}} hesabın yaradılması',
+'createaccount-text' => 'Biriləri {{SITENAME}} saytında ($4) sizin e-poçt ünvanınızdan istifadə edərək, parolu "$3" olan, "$2" adlı bir hesab yaratdı.
+
+Sayta daxil olmalı və parolunuzu dəyişdirməlisiniz.
+
+Əgər istifadəçi hesabını səhvən yaratmısınızsa, bu mesajı gözardı edə bilərsiniz.',
'usernamehasherror' => 'İstifadəçi adında "diyez" simvolunun istifadəsi mümkün deyil',
'login-throttled' => 'Sistemə daxil olmaq üçün həddən artıq cəhd etmisiniz.
Yeni cəhd etməzdən əvvəl bir qədər gözləyin.',
'login-abort-generic' => 'Giriş uğursuz alındı - Rədd',
'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.',
+'createacct-another-realname-tip' => 'Gərçək adınız istəyə bağlıdır.
+Əgər gərçək adınızı göstərsəniz, çalışmalarınıza müraciət etmək üçün istifadə ediləcəkdir.',
# Email sending
'php-mail-error-unknown' => 'PHP-nin mail() funksiyasında naməlum xəta',
+'user-mail-no-addy' => 'Bir e-poçt ünvanı olmadan e-poçt göndərməyə çalışdı.',
+'user-mail-no-body' => 'Boş və ya keçərli olmayan bir şəkildə e-poçt göndərilməyə çalışıldı.',
# Change password dialog
'resetpass' => 'Parolu dəyiş',
'resetpass-wrong-oldpass' => 'Müvəqqəti və ya daimi parolda yanlışlıq var.
Ola bilər siz parolu müvəffəqiyyətlə dəyişmisiniz yaxud müvəqqəti parol üçün müraciət etmisiniz.',
'resetpass-temp-password' => 'Müvəqqəti parol:',
+'resetpass-abort-generic' => 'Parol dəyişikliyi bir genişlənmə tərəfindən ləğv edildi.',
# Special:PasswordReset
'passwordreset' => 'Parolu yenilə',
+'passwordreset-text-one' => 'Parolunuzu sıfırlamaq üçün bu formanı doldurun.',
+'passwordreset-text-many' => '{{PLURAL:$1|Parolunuzu sıfırlamaq üçün sahələrdən birini doldurun.}}',
'passwordreset-legend' => 'Parolu yenilə',
'passwordreset-disabled' => 'Yenidən qurulma parolu bu vikidə işləmir',
+'passwordreset-emaildisabled' => 'Bu wiki-dəki e-poçt özəllikləri bağlandı.',
'passwordreset-username' => 'İstifadəçi adı:',
'passwordreset-domain' => 'Domen:',
'passwordreset-email' => 'E-mail ünvanı:',
'revdelete-hide-user' => 'Redaktə müəllifinin istifadəçi adını/IP ünvanını gizlə',
'revdelete-hide-restricted' => 'Məlumatları idarəçilərdən də gizlə',
'revdelete-radio-same' => '(dəyişdirmə)',
-'revdelete-radio-set' => 'Bəli',
-'revdelete-radio-unset' => 'Xeyr',
+'revdelete-radio-set' => 'Gizli',
+'revdelete-radio-unset' => 'Görünür',
'revdelete-suppress' => 'Məlumatları idarəçilərdən də gizlə',
'revdelete-unsuppress' => 'Bərpa olunan versiyalar üzərindən məhdudiyyətləri qaldır',
'revdelete-log' => 'Səbəb:',
'preferences' => 'Nizamlamalar',
'mypreferences' => 'Nizamlamalar',
'prefs-edits' => 'Redaktələrin sayı:',
-'prefsnologin' => 'Daxil olmamısınız',
-'prefsnologintext' => 'Nizamlamaları dəyişmək üçün <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} daxil olmaq]</span> zəruridir.',
'changepassword' => 'Parolu dəyiş',
'prefs-skin' => 'Cild',
'skin-preview' => 'Sınaq görüntüsü',
'recentchanges-label-minor' => 'Bu kiçik redaktədir',
'recentchanges-label-bot' => 'Bu redaktə bot tərəfindən edilmişdir',
'recentchanges-label-unpatrolled' => 'Bu redaktə hələ nəzərdən keçirilməmişdir',
+'recentchanges-legend-newpage' => '$1 - yeni səhifə',
'rcnote' => "Aşağıdakı {{PLURAL:$1|'''1''' dəyişiklik|'''$1''' dəyişiklik}} saat $5, $4 tarixinə qədər son {{PLURAL:$2|gün|'''$2''' gün}} ərzində edilmişdir.",
'rcnotefrom' => "Aşağıda '''$2'''-dən ('''$1'''-ə qədər) dəyişikliklər sadalanmışdır.",
'rclistfrom' => '$1 vaxtından başlayaraq yeni dəyişiklikləri göstər',
# Random page
'randompage' => 'İxtiyari səhifə',
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Keç',
+
# Random redirect
'randomredirect' => 'İxtiyari istiqamətləndirmə',
+'randomredirect-nopages' => '"$1" ad sahəsində heç bir yönləndirmə yoxdur.',
# Statistics
'statistics' => 'Statistika',
'allmessagesname' => 'Ad',
'allmessagesdefault' => 'İlkin mətn',
'allmessagescurrent' => 'İndiki mətn',
-'allmessagestext' => 'Bu MediaWiki-də olan sistem mesajlarının siyahısıdır. Əgər MediaWiki-ni lokallaşdırmaq işində kömək etmək isəyirsinizsə, lütfən [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] və [//translatewiki.net translatewiki.net]-ə baş çəkin.',
+'allmessagestext' => 'Bu MediaWiki-də olan sistem mesajlarının siyahısıdır. Əgər MediaWiki-ni lokallaşdırmaq işində kömək etmək isəyirsinizsə, lütfən [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] və [//translatewiki.net translatewiki.net]-ə baş çəkin.',
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter-unmodified' => 'Dəyişdirilməmiş',
'allmessages-filter-all' => 'Hamısı',
# External editor support
'edit-externally' => 'Bu faylı kənar proqram vasitəsilə redaktə et.',
-'edit-externally-help' => '(Daha ətraflı məlumat üçün [//www.mediawiki.org/wiki/Manual:External_editors tətbiqetmə qaydalarına] baxa bilərsiniz)',
+'edit-externally-help' => '(Daha ətraflı məlumat üçün [https://www.mediawiki.org/wiki/Manual:External_editors tətbiqetmə qaydalarına] baxa bilərsiniz)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'hamısını',
'version-hook-subscribedby' => 'Abunə olan',
'version-version' => '(Versiya $1)',
'version-license' => 'Lisenziya',
-'version-poweredby-credits' => "Bu wiki '''[//www.mediawiki.org/ MediaWiki]''' proqramı istifadə edilərək yaradılmışdır, müəlliflik © 2001-$1 $2.",
+'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' proqramı istifadə edilərək yaradılmışdır, müəlliflik © 2001-$1 $2.",
'version-poweredby-others' => 'digərləri',
'version-software-product' => 'Məhsul',
'version-software-version' => 'Versiya',
'duration-centuries' => '$1 {{PLURAL:$1|əsr|əsr}}',
'duration-millennia' => '$1 {{PLURAL:$1|minillik|minillik}}',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Nəticə',
+'expand_templates_ok' => 'OK',
+
);
'ok' => 'اولدو',
'retrievedfrom' => '«$1»-دن آلینمیشدیر',
'youhavenewmessages' => 'سیزین $1 ($2) وارینیزدیر.',
-'newmessageslink' => 'یئنی مئساژلار',
-'newmessagesdifflink' => 'سون دَییشیکلیک',
'youhavenewmessagesfromusers' => 'سیزین {{PLURAL:$3|بیر آیری ایستیفادهچیدن|$3 ایستیفادهچیدن}} $1 وارینیزدیر ($2).',
'youhavenewmessagesmanyusers' => 'سیزین چوخلو ایشلدنلردن $1 وارینیزدیر ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|بیر یئنی مئساژ|یئنی مئساژلار}}',
'preferences' => 'ترجیحلر',
'mypreferences' => 'ترجیحلر',
'prefs-edits' => 'دَییشمهلرین سایی:',
-'prefsnologin' => 'گیرمهمیسینیز',
-'prefsnologintext' => 'ایستیفادهچی تنظیملرینی دَییشمک اوچون، <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} گیرمهلیسینیز]</span>.',
'changepassword' => 'رمزی دَییشدیر',
'prefs-skin' => 'قابیق',
'skin-preview' => 'اؤنگؤستریش',
'allmessagesname' => 'آد',
'allmessagesdefault' => 'دفالت دانیشیق متنی',
'allmessagescurrent' => 'ایندیکی متن',
-'allmessagestext' => 'بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهیسیدیر. اگر مئدیا ویکی-نی لوکاللاشدیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.',
+'allmessagestext' => 'بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهیسیدیر. اگر مئدیا ویکی-نی لوکاللاشدیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.',
'allmessagesnotsupportedDB' => "'''\$ wgUseDatabaseMessages''' باغلی اولدوغو اوچون '{{ns:special}}: Allmessages ایستیفادهیه آچیق دئییل.",
'allmessages-filter-legend' => 'سۆزگَج',
'allmessages-filter' => 'خصوصی ائتمک وضعیتینه گؤره فیلترلی:',
# External editor support
'edit-externally' => 'بو فایلی خاریجی یازیلیملا دَییشدیر',
-'edit-externally-help' => '(آرتیق بیلگیلر اوچون [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] صحیفهسینه باخ)',
+'edit-externally-help' => '(آرتیق بیلگیلر اوچون [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] صحیفهسینه باخ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'بوتون',
'version-hook-subscribedby' => 'طرفیندن گیریشمیش',
'version-version' => '(نسخه $1)',
'version-license' => 'لیسانس',
-'version-poweredby-credits' => "بو wیکی ' ''[//www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیلهرک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
+'version-poweredby-credits' => "بو wیکی ' ''[https://www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیلهرک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
'version-poweredby-others' => 'آیریلار',
'version-credits-summary' => 'بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.',
'version-license-info' => 'مئدیاویکی بیر اؤزگور یازیلیمدیر؛ سیز اونو، اؤزگور یازیلیم قورولوشو یایان GNU گنل عمومی لیسانسی اساسیله یئنیدن داغیدیب یوخسا دَییشه بیلرسینیز؛ یا لیسانسین ۲-نجی نوسخهسی، یا دا (اؤز سئچدیگینیزله) هر هانکی سونراکی نوسخهسی.
# Special:SpecialPages
'specialpages' => 'اؤزل صحیفهلر',
-'specialpages-note' => '----
-* نورمال اؤزل صحیفهلر.
+'specialpages-note' => '* نورمال اؤزل صحیفهلر.
* <span class="mw-specialpagerestricted">محدودلاشدیریلمیش اؤزل صحیفهلر.</span>',
'specialpages-group-maintenance' => 'جاری مروزهلر',
'specialpages-group-other' => 'دیگر خصوصی صحیفهلر',
'pagetitle' => '{{SITENAME}} проектынан',
'retrievedfrom' => 'Сығанағы — «$1»',
'youhavenewmessages' => 'Яңы $1 бар ($2).',
-'newmessageslink' => 'яңы хәбәр',
-'newmessagesdifflink' => 'һуңғы үҙгәртеү',
'youhavenewmessagesfromusers' => 'Һеҙгә {{PLURAL:$3|башҡа ҡатнашыусынан|$3 ҡатнашыусынан}} $1 бар ($2).',
'youhavenewmessagesmanyusers' => 'Һеҙгә күп ҡатнашыусынан $1 бар ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|яңы хәбәр|яңы хәбәр}}',
'yourdomainname' => 'Һеҙҙең домен',
'password-change-forbidden' => 'Был викила серһүҙегеҙҙе үҙгәртә алмайһығыҙ.',
'externaldberror' => 'Тышҡы мәғлүмәт базаһы менән танылғанда хата барлыҡҡа килде йәки тышҡы үҙ көйләүҙәрегеҙҙе үҙгәртер өсөн хоҡуҡтарығыҙ етәрле түгел.',
-'login' => 'Танышыу йәки теркәлеү',
-'nav-login-createaccount' => 'Танышыу йәки теркәлеү',
+'login' => 'Танылыу',
+'nav-login-createaccount' => 'Танылыу йәки теркәлеү',
'loginprompt' => '{{SITENAME}} проектына кереү өсөн «cookies» рөхсәт ителгән булырға тейеш.',
'userlogin' => 'Танылыу йәки теркәлеү',
'userloginnocreate' => 'Танылыу',
'preferences' => 'Көйләүҙәр',
'mypreferences' => 'Көйләүҙәр',
'prefs-edits' => 'Төҙәтеүҙәр һаны:',
-'prefsnologin' => 'Танылмағанһығыҙ',
-'prefsnologintext' => 'Ҡатнашыусы көйләүҙәрен үҙгәртеү өсөн, һеҙ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}танылырға]</span> тейешһегеҙ.',
'changepassword' => 'Серһүҙҙе үҙгәртергә',
'prefs-skin' => 'Күренеш',
'skin-preview' => 'Алдан байҡау',
'recentchanges-label-minor' => 'Был әҙ үҙгәреш',
'recentchanges-label-bot' => 'Был төҙәтеү бот тарафынан башҡарылды',
'recentchanges-label-unpatrolled' => 'Был төҙәтеү ҡаралмаған әле',
+'recentchanges-legend-newpage' => '$1 — яңы бит',
'rcnote' => 'Аҫта $4 $5 тиклем эшләнгән, һуңғы {{PLURAL:$2|1|$2}} көн эсендәге һуңғы {{PLURAL:$1|1|$1}} үҙгәртеү күрһәтелгән.',
'rcnotefrom' => "Түбәндә '''$2''' башлап ('''$1''' тиклем) үҙгәртеүҙәр күрһәтелгән.",
'rclistfrom' => '$1 башлап яңы үҙгәртеүҙәрҙе күрһәт.',
'allmessagesdefault' => 'Ғәҙәттәге яҙма',
'allmessagescurrent' => 'Хәҙерге яҙма',
'allmessagestext' => 'Түбәндә MediaWiki исемдәр арауығында ҡулланылған система хәбәрҙәре исемлеге килтерелгән.
-Әгәр MediaWiki программаһын дөйөм локалләштереү эшенә үҙ өлөшөгөҙҙө керетергә теләһәгеҙ, [//www.mediawiki.org/wiki/Localisation MediaWiki программаһын локалләштереү] битен һәм [//translatewiki.net translatewiki.net] проектын ҡарап сығығыҙ.',
+Әгәр MediaWiki программаһын дөйөм локалләштереү эшенә үҙ өлөшөгөҙҙө керетергә теләһәгеҙ, [https://www.mediawiki.org/wiki/Localisation MediaWiki программаһын локалләштереү] битен һәм [//translatewiki.net translatewiki.net] проектын ҡарап сығығыҙ.',
'allmessagesnotsupportedDB' => "Был бит ҡулланыла алмай, сөнки '''\$wgUseDatabaseMessages''' мөмкинлеге һүндерелгән.",
'allmessages-filter-legend' => 'Һайлау',
'allmessages-filter' => 'Үҙгәртеү торошо буйынса һайлау:',
# External editor support
'edit-externally' => 'Был файлды тышҡы программа ҡулланып мөхәррирләргә',
-'edit-externally-help' => '(Тулыраҡ мәғлүмәт өсөн металағы [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] (инглизсә) битен ҡарағыҙ)',
+'edit-externally-help' => '(Тулыраҡ мәғлүмәт өсөн металағы [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] (инглизсә) битен ҡарағыҙ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'бөтә',
'version-hook-subscribedby' => 'Яҙҙырылған',
'version-version' => '($1 өлгөһө)',
'version-license' => 'Рөхсәтнамә',
-'version-poweredby-credits' => "Был вики проект '''[//www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Был вики проект '''[https://www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
'version-poweredby-others' => 'башҡалар',
'version-poweredby-translators' => 'translatewiki.net тәржемәселәре',
'version-credits-summary' => '[[Special:Version|MediaWiki]] үҫешенә өлөш индергәндәре өсөн киләһе ҡатнашыусыларға рәхмәт әйтәбеҙ.',
# Special:SpecialPages
'specialpages' => 'Махсус биттәр',
-'specialpages-note' => '----
-* Ябай махсус биттәр.
+'specialpages-note' => '* Ябай махсус биттәр.
* <span class="mw-specialpagerestricted">Сикле махсус биттәр.</span>
* <span class="mw-specialpagecached">Кешланған махсус биттәр (иҫкергән булыуы мөмкин).</span>',
'specialpages-group-maintenance' => 'Техник хеҙмәтләндереү хисапламалары',
'specialpages-group-other' => 'Башҡа махсус биттәр',
-'specialpages-group-login' => 'Танышыу йәки теркәлеү',
+'specialpages-group-login' => 'Танылыу йәки теркәлеү',
'specialpages-group-changes' => 'Һуңғы үҙгәртеүҙәр һәм журналдар',
'specialpages-group-media' => 'Медиа хисапламалары һәм тейәүҙәр',
'specialpages-group-users' => 'Ҡатнашыусылар һәм хоҡуҡтар',
'limitreport-expansiondepth' => 'Киңәйеүҙең иң ҙур тәрәнлеге',
'limitreport-expensivefunctioncount' => 'Анализаторҙың "ҡиммәтле" функцияларының һаны',
+# Special:ExpandTemplates
+'expandtemplates' => 'Ҡалыптарҙы йәйелдереү',
+'expand_templates_intro' => 'Был махсус бит бирелгән тексттың бөтә ҡалыптарын ҡабатланмалы рәүештә йәйелдерә.
+Шулай уҡ <nowiki>{{</nowiki>#language:…}} һымаҡ уҡыу ҡоралдары һәм <nowiki>{{</nowiki>CURRENTDAY}} һымаҡ үҙгәреүсән дәүмәлдәр,— ғөмүмән, икәүле йәйәләр эсендә барыһы ла йәйелдерелә.
+Был MediaWiki-ның кәрәкле эшкәртеүсе ҡоралын саҡырыу ярҙамында эшләнә.',
+'expand_templates_title' => '{{FULLPAGENAME}} һ.б. өсөн бит исеме:',
+'expand_templates_input' => 'Сығанаҡ текст:',
+'expand_templates_output' => 'Һөҙөмтә',
+'expand_templates_xml_output' => 'XML һөҙөмтә',
+'expand_templates_ok' => 'Тамам',
+'expand_templates_remove_comments' => 'Аңлатмаларҙы юйырға',
+'expand_templates_remove_nowiki' => 'Һөҙөмтәлә <nowiki> билдәләрен йәшерергә',
+'expand_templates_generate_xml' => 'XML уҡыу ағасын күрһәтергә',
+'expand_templates_preview' => 'Ҡарап сығыу',
+
);
'ok' => 'Passt',
'retrievedfrom' => 'Vh „$1“',
'youhavenewmessages' => 'Du host $1 ($2).',
-'newmessageslink' => 'neiche Nochrichtn',
-'newmessagesdifflink' => 'Letzte Endarung',
'youhavenewmessagesmulti' => 'Du host neiche Nochrichtn: $1',
'editsection' => 'Werkln',
'editold' => 'Werkln',
'allmessagesdefault' => 'Standardtext',
'allmessagescurrent' => 'Aktuella Text',
'allmessagestext' => 'Des is a Listen vo de MediaWiki-Systemtextt.
-Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisiarung] und [//translatewiki.net translatewiki.net], wånn du de ån da Lokalisiarung vo MediaWiki betailing mechadst.',
+Bsuach bittschee de Saiten [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisiarung] und [//translatewiki.net translatewiki.net], wånn du de ån da Lokalisiarung vo MediaWiki betailing mechadst.',
'allmessagesnotsupportedDB' => "'''Special:Allmessages''' is im Moment net möglich, wei de Datenbank offline is.",
# Thumbnails
# External editor support
'edit-externally' => 'De Datei mid am externa Programm beorbatn',
-'edit-externally-help' => '(Schaug unter [//www.mediawiki.org/wiki/Manual:External_editors Installationsoweisunga] fia weidane Infos)',
+'edit-externally-help' => '(Schaug unter [https://www.mediawiki.org/wiki/Manual:External_editors Installationsoweisunga] fia weidane Infos)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'olle',
'version-hook-subscribedby' => 'Aufruaff voh',
'version-version' => '(Versión $1)',
'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dé Nétzseiten braucht '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Dé Nétzseiten braucht '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'åndre',
# Special:FileDuplicateSearch
# Special:SpecialPages
'specialpages' => 'Spezialseitn',
-'specialpages-note' => '----
-* Reguläre Speziaalseiten
+'specialpages-note' => '* Reguläre Speziaalseiten
* <span class="mw-specialpagerestricted">Zuagrifsbschränkde Speziaalseiten</span>
* <span class="mw-specialpagecached">Cachegenerrirde Speziaalseiten (Da Inhoid is méglicherweis vaoiterd)</span>',
'specialpages-group-maintenance' => 'Wartungslisten',
'ok' => 'هوبنت',
'retrievedfrom' => 'درگیجگ بیت چه "$1"',
'youhavenewmessages' => 'شما هست $1 ($2).',
-'newmessageslink' => 'نوکین کوله یان',
-'newmessagesdifflink' => 'اهری تغییر',
'youhavenewmessagesmulti' => 'شما را نوکین کوله یان هست ته $1',
'editsection' => 'اصلاح',
'editold' => 'اصلاح',
'preferences' => 'ترجیحات',
'mypreferences' => 'منی ترجیحات',
'prefs-edits' => 'تعداد اصلاحات:',
-'prefsnologin' => 'وارد نهیت',
-'prefsnologintext' => 'شما بایدن <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} وارد بیت]</span> په تنظیم کتن ترجیحات.',
'changepassword' => 'کلمه رمز عوض کن',
'prefs-skin' => 'پوست',
'skin-preview' => 'بازین',
'allmessagesdefault' => 'پیش فرضین متن',
'allmessagescurrent' => 'هنوکین متن',
'allmessagestext' => 'شی یک لیستی چه کوله یان موجود ته نام فضای مدیا وی کی انت.
-لطفا بچاریت [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net] اگر شما لوٹیت ته ملکی کتن مدیا وی کی کمک کنیت.',
+لطفا بچاریت [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net] اگر شما لوٹیت ته ملکی کتن مدیا وی کی کمک کنیت.',
'allmessagesnotsupportedDB' => "ای صفحه نه تونیت استفاده بیت په چی که'''\$wgUseDatabaseMessages''' غیر فعالنت.",
'allmessages-filter-legend' => 'فیلتر',
'allmessages-filter' => 'فیلتر گون حالت دلواهی',
# External editor support
'edit-externally' => 'ای صفحه یا اصلاح کن گون یک درآین برنامه ای',
-'edit-externally-help' => '(په گیشترین اطلاعات بچار[//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(په گیشترین اطلاعات بچار[https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'کل',
# Special:SpecialPages
'specialpages' => 'حاصین صفحات',
-'specialpages-note' => '----
-* نرمال صفحات حاص.
+'specialpages-note' => '* نرمال صفحات حاص.
* <strong class="mw-specialpagerestricted">محدودین صفحات حاص.</strong>',
'specialpages-group-maintenance' => 'گزارشات دارگ',
'specialpages-group-other' => 'دگر حاصین صفحات',
'revdelete-unrestricted' => 'به زور چه مدیران سیستم محدودیتان',
'rightsnone' => '(هچ یک)',
+# Special:ExpandTemplates
+'expandtemplates' => 'پچ کن تمپلیت آنء',
+'expand_templates_intro' => 'ای صفحه حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.
+آیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب
+<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب
+<nowiki>{{</nowiki>CURRENTDAY}}— در حقیقت هر چیزی که ته دو براکتن.
+آیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.',
+'expand_templates_title' => 'عنوان متن په {{FULLPAGENAME}} و دگه.:',
+'expand_templates_input' => 'ورودی متن',
+'expand_templates_output' => 'نتیجه',
+'expand_templates_xml_output' => 'خروجی XML',
+'expand_templates_ok' => 'هوبنت',
+'expand_templates_remove_comments' => 'بزور نظرات',
+'expand_templates_generate_xml' => 'پیش دار درچک تجزیه XMLء',
+'expand_templates_preview' => 'بازبین',
+
);
'ok' => 'Sige',
'retrievedfrom' => 'Pinaghugot gikan sa "$1"',
'youhavenewmessages' => 'Ika igwa nin $1 ($2).',
-'newmessageslink' => 'bàgong mga mensahe',
-'newmessagesdifflink' => 'huring kaliwatan',
'youhavenewmessagesfromusers' => 'Ika igwa nin $1 gikan sa {{PLURAL:$3|ibang paragamit|$3 mga paragamit}} ($2).',
'youhavenewmessagesmanyusers' => 'Ika igwa nin $1 gikan sa kadakol na mga paragamit ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|sarong bagong mensahe|bagong mga mensahe}}',
'revdelete-text' => "'''Pinagpurang mga pagbabago asin mga pangyayari mahihiling pa man sa historiyang pahina asin mga talaan, pero an mga parte kan saindang laman dae puwedeng magamit kan publiko.'''
An ibang administrador sa {{SITENAME}} puwede pa man makagamit sa pinagtagong laman asin balewalaon an pagpura kaini giraray sa paagi nin kaparehong panlaog-olay, laen lang kun may kadagdagang pangilin an inilapat.",
'revdelete-confirm' => 'Pakikumpirma tabi na ika tuyong gumibo kaini, na saimong naintindihan an mga konsekuwensiya, asin ta ika pinaghihimo ini na uyon sa [[{{MediaWiki:Policy-url}}|an palisiya]].',
-'revdelete-suppress-text' => "An paglulubog dapat '''sana''' makakagamit sana para sa minasunod na mga kaso:
+'revdelete-suppress-text' => "An paglulubog dapat '''sana''' magagamit para sa minasunod na mga kaso:
*Potensiyal na libeloso an impormasyon
*Bakong angay an personal na impormasyon
-*: ''mga address kan harong asin mga numero kan telepono, sosyal na seguridad, iba pa.''",
+*:''mga estada nin ini-erokan asin mga numero kan telepono, nasyunal na numero nin kabistohan, asin iba pa.''",
'revdelete-legend' => 'Ilapat an mga restriksyon sa bisibilidad',
'revdelete-hide-text' => 'Teksto nin rebisyon',
'revdelete-hide-image' => 'Tagoon an laog kan file',
'revdelete-hide-user' => 'Paraliwat na ngaran-paragamit/IP na estada',
'revdelete-hide-restricted' => 'Ilubog an mga datos gikan sa mga administrador asin man kan iba',
'revdelete-radio-same' => '(dae pagribayan)',
-'revdelete-radio-set' => 'Namamansayan',
-'revdelete-radio-unset' => 'Itinago',
+'revdelete-radio-set' => 'Itinago',
+'revdelete-radio-unset' => 'Hiling-hiling',
'revdelete-suppress' => 'Dai ipahilíng an mga datos sa mga sysops asin sa mga iba pa',
'revdelete-unsuppress' => 'Halîon an mga restriksyón sa mga ibinalík na pagpakarhay',
'revdelete-log' => 'Rason:',
'preferences' => 'Mga kabòtan',
'mypreferences' => 'Mga Kamuyahan ko',
'prefs-edits' => 'Bilang kan mga hirá:',
-'prefsnologin' => 'Dai nakalaog',
-'prefsnologintext' => 'Ika dapat na magin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakalaog na]</span> tanganing tuytuyon an mga kabotan nin paragamit.',
'changepassword' => 'Ribayan an sekretong panlaog',
'prefs-skin' => "''Skin''",
'skin-preview' => 'Tânawon',
'allmessagesdefault' => 'Panugmad na tekstong mensahe',
'allmessagescurrent' => 'Presenteng teksto',
'allmessagestext' => 'Ini sarong listahan nin pansistemang mga mensahe na mananagboan sa espasyong-pangaran kan MediaWiki.
-Pakibisita an [//www.mediawiki.org/wiki/Localisation Mediawiki Lokalisasyon] asin [//translatewiki.net translatewiki.net] kun boot mong mag-ambag sa henerikong lokalisasyon kan MediaWiki.',
+Pakibisita an [https://www.mediawiki.org/wiki/Localisation Mediawiki Lokalisasyon] asin [//translatewiki.net translatewiki.net] kun boot mong mag-ambag sa henerikong lokalisasyon kan MediaWiki.',
'allmessagesnotsupportedDB' => "Dai pwedeng gamiton an '''{{ns:special}}:Allmessages''' ta sarado an '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'An Pansara',
'allmessages-filter' => 'Pansara sa paagi kan estado nin kustomisasyon:',
'tooltip-undo' => '"Gibohang ibalik" an mga pinagbagong pagliliwat asin bukasi an porma nin pagliliwat sa modong patanaw. Ini minatugot na magdadagdag nin rason sa sumaryo.',
'tooltip-preferences-save' => 'Itagama an mga kagustuhan',
'tooltip-summary' => 'Magkaag nin sarong halipot na sumaryo',
+'interlanguage-link-title' => '$1 - $2',
# Stylesheets
'common.css' => '/** an CSS na pigbugtak digdi maiaaplikar sa gabos na mga skin */',
'pageinfo-length' => 'Kalabaan kan pahina (yaon sa mga bayta)',
'pageinfo-article-id' => 'ID kan pahina',
'pageinfo-language' => 'Lengguwahe kan laog sa pahina',
+'pageinfo-content-model' => 'Modelo nin kalamnan nin pahina',
'pageinfo-robot-policy' => 'Pinaghuhukdo sa paagi nin mga robot',
'pageinfo-robot-index' => 'Pinagtutugotan',
'pageinfo-robot-noindex' => 'Dae pinagtutugotan',
# External editor support
'edit-externally' => 'Liwaton ining sagunson na pinaggagamit an panluwasan na aplikasyon',
-'edit-externally-help' => '(Hilngon an [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa kadagdagang impormasyon)',
+'edit-externally-help' => '(Hilngon an [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa kadagdagang impormasyon)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'gabos',
'version-hook-subscribedby' => 'Pinaghaguhot ni',
'version-version' => '(Bersyon na $1)',
'version-license' => 'Lisensiya',
-'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'mga iba pa',
'version-poweredby-translators' => 'translatewiki.net na mga paradakit-taramon',
'version-credits-summary' => 'Gusto niyamong rekonosiron an minasunod na mga persona nin huli kan saindang ambag sa [[Special:Version|Mediawiki]].',
# Special:SpecialPages
'specialpages' => 'Mga espesyal na pahina',
-'specialpages-note' => '----
-* Normal espesyal na mga pahina.
+'specialpages-note' => '* Normal espesyal na mga pahina.
* <span class="mw-specialpagerestricted">Restriktadong espesyal na mga pahina.</span>',
'specialpages-group-maintenance' => 'Mga talaan nin pagpangataman',
'specialpages-group-other' => 'Iba pang mga espesyal na pahina',
'limitreport-expansiondepth' => 'Kinatugmadan kan pinakahalangkaw na kahiwasan',
'limitreport-expensivefunctioncount' => 'Bilang kan hiro nin mamahalon na parabangay',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Resulta',
+'expand_templates_remove_comments' => 'Tanggalon an mga komento',
+'expand_templates_preview' => 'Patânaw',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Узята з "$1"',
'youhavenewmessages' => 'Вы маеце $1 ($2).',
-'newmessageslink' => 'новыя паведамленні',
-'newmessagesdifflink' => 'розн. з найноўшай версіяй',
'youhavenewmessagesfromusers' => 'Вы атрымалі $1 ад {{PLURAL:$3|$3 ўдзельніка|$3 удзельнікаў}} ($2).',
'youhavenewmessagesmanyusers' => 'Вы атрымалі $1 ад мноства карыстальнікаў ($2).',
'youhavenewmessagesmulti' => 'У вас ёсць новыя паведамленні на $1',
'preferences' => 'Настройкі',
'mypreferences' => 'Настройкі',
'prefs-edits' => 'Колькасць правак:',
-'prefsnologin' => 'Не ўвайшлі',
-'prefsnologintext' => 'Неабходна <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} увайсці ў сістэму]</span>, каб мяняць свае настройкі.',
'changepassword' => 'Пароль',
'prefs-skin' => 'Вокладка',
'skin-preview' => 'перадпаказ',
'recentchanges-label-minor' => 'Гэта дробная па значэнні праўка',
'recentchanges-label-bot' => 'Праўка была зробленая праграмай-робатам',
'recentchanges-label-unpatrolled' => 'Праўка яшчэ не атрымала адзнакі ўхваленасці (за ёй не сочыць "патруль")',
+'recentchanges-legend-newpage' => '$1 - новая старонка',
'rcnote' => "Ніжэй паказан{{PLURAL:$1|а '''1''' змяненне|ыя апошнія '''$1''' змяненняў}} за апошні{{PLURAL:$2| дзень|я '''$2''' дзён}}, паводле стану на $5, $4.",
'rcnotefrom' => 'Ніжэй знаходзяцца змены з <b>$2</b> (да <b>$1</b> на старонку).',
'rclistfrom' => 'Паказаць змены з $1',
# External editor support
'edit-externally' => 'Правіць файл у вонкавай праграме',
-'edit-externally-help' => '(Гл. падрабязней [//www.mediawiki.org/wiki/Manual:External_editors пра настаўлянне старонніх праграм-рэдактараў])',
+'edit-externally-help' => '(Гл. падрабязней [https://www.mediawiki.org/wiki/Manual:External_editors пра настаўлянне старонніх праграм-рэдактараў])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'усе',
'version-hook-subscribedby' => 'Сюды падпісаныя',
'version-version' => '(Версія $1)',
'version-license' => 'Ліцэнзія',
-'version-poweredby-credits' => "Пляцоўка працуе на '''[//www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.",
+'version-poweredby-credits' => "Пляцоўка працуе на '''[https://www.mediawiki.org/ MediaWiki]''', капірайт © 2001-$1 $2.",
'version-poweredby-others' => 'іншыя',
'version-license-info' => "MediaWiki з'яўляецца свабодным праграмным забеспячэннем. Такім чынам, вы можаце паўторна распаўсюджваць прадукт і(або) змяняць яго на ўмовах пагаднення GNU General Public License у тым выглядзе, у якім яно публікуецца фондам Free Software Foundation; сілу мае версія (выпуск) 2 гэтага пагаднення або, на ваш выбар, навейшая версія (выпуск) пагаднення.
# Special:SpecialPages
'specialpages' => 'Адмысловыя старонкі',
-'specialpages-note' => '----
-* Звычайныя адмысловыя старонкі.
+'specialpages-note' => '* Звычайныя адмысловыя старонкі.
* <span class="mw-specialpagerestricted">Адмысловыя старонкі з абмежаваным доступам.</span>
* <span class="mw-specialpagecached">Закэшаваныя адмысловыя старонкі (могуць быць састарэлымі).</span>',
'specialpages-group-maintenance' => 'Звесткі аб працы',
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Атрымана з «$1»',
'youhavenewmessages' => 'Вы атрымалі $1 ($2).',
-'newmessageslink' => 'новыя паведамленьні',
-'newmessagesdifflink' => 'апошняя зьмена',
'youhavenewmessagesfromusers' => 'Вы атрымалі $1 ад {{PLURAL:$3|іншага ўдзельніка|$3 удзельнікаў}} ($2).',
'youhavenewmessagesmanyusers' => 'Вы атрымалі $1 ад некалькіх удзельнікаў ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|новае паведамленьне|новыя паведамленьні}}',
'preferences' => 'Налады',
'mypreferences' => 'Налады',
'prefs-edits' => 'Колькасьць рэдагаваньняў:',
-'prefsnologin' => 'Вы не ўвайшлі ў сыстэму',
-'prefsnologintext' => 'Вам трэба <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ўвайсьці ў сыстэму]</span>, каб зьмяняць свае налады.',
'changepassword' => 'Зьмяніць пароль',
'prefs-skin' => 'Афармленьне',
'skin-preview' => 'Папярэдні прагляд',
'recentchanges-label-minor' => 'Гэтае рэдагаваньне — дробнае',
'recentchanges-label-bot' => 'Гэтае рэдагаваньне зробленае робатам',
'recentchanges-label-unpatrolled' => 'Гэтае рэдагаваньне яшчэ не было адпатруляванае',
+'recentchanges-legend-newpage' => '$1 — новая старонка',
'rcnote' => "Ніжэй {{PLURAL:$1|пададзена '''$1''' апошняя зьмена|пададзеныя '''$1''' апошнія зьмены|пададзеныя '''$1''' апошніх зьменаў}} за {{PLURAL:$2|апошні '''$2''' дзень|апошнія '''$2''' дні|апошнія '''$2''' дзён}}, па стане на $5, $4.",
'rcnotefrom' => "Ніжэй знаходзяцца зьмены з '''$2''' (да '''$1''' на старонку).",
'rclistfrom' => 'Паказаць зьмены з $1',
'allmessagesdefault' => 'Тэкст па змоўчаньні',
'allmessagescurrent' => 'Цяперашні тэкст',
'allmessagestext' => 'Сьпіс усіх сыстэмных паведамленьняў, якія існуюць у прасторы назваў MediaWiki.
-Калі ласка, наведайце [//www.mediawiki.org/wiki/Localisation старонку пра лякалізацыю MediaWiki] і [//translatewiki.net translatewiki.net], калі Вы жадаеце ўдзельнічаць у перакладзе MediaWiki.',
+Калі ласка, наведайце [https://www.mediawiki.org/wiki/Localisation старонку пра лякалізацыю MediaWiki] і [//translatewiki.net translatewiki.net], калі Вы жадаеце ўдзельнічаць у перакладзе MediaWiki.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' не падтрымліваецца, таму што адключанае '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Фільтар',
'allmessages-filter' => 'Фільтар па стане зьменаў:',
# External editor support
'edit-externally' => 'Рэдагаваць гэты файл з выкарыстаньнем вонкавай праграмы',
-'edit-externally-help' => '(Глядзіце падрабязнасьці ў [//www.mediawiki.org/wiki/Manual:External_editors інструкцыі па наладцы] (па-ангельску))',
+'edit-externally-help' => '(Глядзіце падрабязнасьці ў [https://www.mediawiki.org/wiki/Manual:External_editors інструкцыі па наладцы] (па-ангельску))',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'усё',
'version-version' => '(Вэрсія $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'Ліцэнзія',
-'version-poweredby-credits' => "{{SITENAME}} працуе на праграмным забесьпячэньні '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "{{SITENAME}} працуе на праграмным забесьпячэньні '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'іншыя',
'version-poweredby-translators' => 'перакладчыкі з translatewiki.net',
'version-credits-summary' => 'Нам вельмі хацелася б адзначыць наступных асобаў, што зрабілі ўнёсак у [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Спэцыяльныя старонкі',
-'specialpages-note' => '----
-* Звычайныя спэцыяльныя старонкі.
+'specialpages-note' => '* Звычайныя спэцыяльныя старонкі.
* <strong class="mw-specialpagerestricted">Спэцыяльныя старонкі з абмежаваным доступам.</strong>
* <span class="mw-specialpagecached">Кэшаваныя спэцыяльныя старонкі (могуць быць састарэлымі).</span>',
'specialpages-group-maintenance' => 'Тэхнічныя справаздачы',
'limitreport-expansiondepth' => 'Найбольшая глыбіня разгортваньня',
'limitreport-expensivefunctioncount' => 'Колькасьць дарагіх функцыяў парсэра',
+# Special:ExpandTemplates
+'expandtemplates' => 'Разгортваньне шаблёнаў',
+'expand_templates_intro' => 'Гэтая спэцыяльная старонка пераўтварае тэкст і разгортвае ўсе шаблёны рэкурсіўна.
+Адначасова разгортваюцца функцыі парсэра накшталт
+<code><nowiki>{{</nowiki>#language:…}}</code>, і зьменныя накшталт
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>
+Фактычна, гэтая старонка разгортвае амаль усё ўнутры падвойных фігурных дужак.',
+'expand_templates_title' => 'Загаловак старонкі, для {{FULLPAGENAME}} і г.д.:',
+'expand_templates_input' => 'Крынічны тэкст:',
+'expand_templates_output' => 'Вынік',
+'expand_templates_xml_output' => 'вынік у фармаце XML',
+'expand_templates_ok' => 'Добра',
+'expand_templates_remove_comments' => 'Выдаліць камэнтары',
+'expand_templates_remove_nowiki' => 'Падаўляць тэгі <nowiki> у выніку',
+'expand_templates_generate_xml' => 'Паказаць дрэва аналізу XML',
+'expand_templates_preview' => 'Папярэдні прагляд',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Взето от „$1“.',
'youhavenewmessages' => 'Имате $1 ($2).',
-'newmessageslink' => 'нови съобщения',
-'newmessagesdifflink' => 'разлика с предишната версия',
'youhavenewmessagesfromusers' => 'Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).',
'youhavenewmessagesmanyusers' => 'Имате $1 от много потребители ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ново съобщение|нови съобщения}}',
'preferences' => 'Настройки',
'mypreferences' => 'Настройки',
'prefs-edits' => 'Брой редакции:',
-'prefsnologin' => 'Не сте влезли',
-'prefsnologintext' => 'Необходимо е <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} да влезете]</span>, за да може да променяте потребителските си настройки.',
'changepassword' => 'Смяна на парола',
'prefs-skin' => 'Облик',
'skin-preview' => 'предварителен преглед',
'recentchanges-label-minor' => 'Това е малка промяна',
'recentchanges-label-bot' => 'Тази редакция е извършена от робот',
'recentchanges-label-unpatrolled' => 'Тази редакция все още не е проверена',
+'recentchanges-legend-newpage' => '$1 - нова страница',
'rcnote' => "{{PLURAL:$1|Показана е '''1''' промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния ден|последните '''$2''' дни}}, към $5, $4.",
'rcnotefrom' => 'Дадени са промените от <strong>$2</strong> (до <strong>$1</strong> показани).',
'rclistfrom' => 'Показване на промени, като се започва от $1.',
'allmessagesdefault' => 'Текст по подразбиране',
'allmessagescurrent' => 'Текущ текст',
'allmessagestext' => 'Тази страница съдържа списък на системните съобщения от именното пространство „МедияУики“.
-Посетете [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] и [//translatewiki.net translatewiki.net], ако желаете да допринесете за общата локализация на софтуера МедияУики.',
+Посетете [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] и [//translatewiki.net translatewiki.net], ако желаете да допринесете за общата локализация на софтуера МедияУики.',
'allmessagesnotsupportedDB' => "Тази страница не може да бъде използвана, тъй като е изключена възможността '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Филтър',
'allmessages-filter' => 'Филтриране по ниво на персонализация:',
'svg-long-desc' => 'Файл във формат SVG, основен размер: $1 × $2 пиксела, големина на файла: $3',
'svg-long-desc-animated' => 'Анимиран SVG файл, основен размер $1 × $2 пиксела, големина на файла: $3',
'svg-long-error' => 'Невалиден SVG файл: $1',
-'show-big-image' => 'Ð\9fÑ\8aлна Ñ\80азделиÑ\82елна Ñ\81поÑ\81обноÑ\81Ñ\82',
+'show-big-image' => 'Ð\9eÑ\80игинален Ñ\84айл',
'show-big-image-preview' => 'Размер на този преглед: $1.',
'show-big-image-other' => '{{PLURAL:$2|Друга разделителна способност|Други разделителни способности}}: $1.',
'show-big-image-size' => '$1 × $2 пиксела',
# External editor support
'edit-externally' => 'Редактиране на файла чрез външно приложение',
-'edit-externally-help' => '(За повече информация прегледайте [//www.mediawiki.org/wiki/Manual:External_editors указанията за настройките]).',
+'edit-externally-help' => '(За повече информация прегледайте [https://www.mediawiki.org/wiki/Manual:External_editors указанията за настройките]).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'всички',
'confirm-unwatch-button' => 'Потвърждаване',
'confirm-unwatch-top' => 'Премахване на страницата от списъка ви за наблюдение?',
+# Separators for various lists, etc.
+'quotation-marks' => '„$1“',
+
# Multipage image navigation
'imgmultipageprev' => '← предишна страница',
'imgmultipagenext' => 'следваща страница →',
'version-hook-subscribedby' => 'Ползвана от',
'version-version' => '(Версия $1)',
'version-license' => 'Лиценз',
-'version-poweredby-credits' => "Това уики се задвиждва от '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Това уики се задвиждва от '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'други',
'version-poweredby-translators' => 'преводачи в translatewiki.net',
'version-credits-summary' => 'Бихме искали да изкажем признателност на следните хора за техните приноси към [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Специални страници',
-'specialpages-note' => '----
-* Обикновени специални страници.
+'specialpages-note' => '* Обикновени специални страници.
* <strong class="mw-specialpagerestricted">Специални страници с ограничения.</strong>
* <span class="mw-specialpagecached">Само складирани специални страници (възможно е да са остарели).</span>',
'specialpages-group-maintenance' => 'Доклади по поддръжката',
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|байт|байта}}',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|байт|байта}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Разгръщане на шаблони',
+'expand_templates_title' => 'Заглавие на страницата (напр. за {{FULLPAGENAME}}):',
+'expand_templates_input' => 'Входящ текст:',
+'expand_templates_output' => 'Резултат',
+'expand_templates_xml_output' => 'Изход на XML',
+'expand_templates_ok' => 'ОК',
+'expand_templates_remove_comments' => 'Премахване на коментари',
+'expand_templates_remove_nowiki' => 'Потискане на елементите <nowiki> в резултата',
+'expand_templates_generate_xml' => 'Показване на дървото от разбора на XML',
+'expand_templates_preview' => 'Преглед',
+
);
'ok' => 'ठिक',
'retrievedfrom' => '"$1" से लियल गईल',
'youhavenewmessages' => 'रउआ लगे बा $1 ($2).',
-'newmessageslink' => 'नया सन्देश',
-'newmessagesdifflink' => 'अन्तिम परिवर्तन',
'youhavenewmessagesfromusers' => 'रउआ खातिर {{PLURAL:$3|एगो अन्य सदस्य|$3 अन्य सदस्यन}} के $1 बा। ($2)',
'youhavenewmessagesmanyusers' => 'रउआ खातिर कई सदस्यन द्वारा $1 बा। ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|एगो नया सन्देश बा|नया सन्देश बाड़न}}',
'preferences' => 'वरीयता',
'mypreferences' => 'राउर पसन्द',
'prefs-edits' => 'सम्पादन संख्या',
-'prefsnologin' => 'खाता में प्रवेश नईखीं कईले',
'changepassword' => 'गुप्त शब्द बदलीं',
'prefs-skin' => 'त्वचा',
'skin-preview' => 'पूर्वावलोकन',
'ok' => 'OK',
'retrievedfrom' => 'Dijumput matan "$1"',
'youhavenewmessages' => 'Pian baisi $1 ($2)',
-'newmessageslink' => 'pasan hanyar',
-'newmessagesdifflink' => 'paubahan pauncitnya',
'youhavenewmessagesfromusers' => 'Pian baisi $1 matan {{PLURAL:$3|$3 pamakai lain}} ($2).',
'youhavenewmessagesmanyusers' => 'Pian baisi $1 matan pamakai lain ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|pasan hanyar}}',
'preferences' => 'Kakatujuan',
'mypreferences' => 'Nang ulun katuju',
'prefs-edits' => 'Rikinan babakan-babakan:',
-'prefsnologin' => 'Balum babuat log',
-'prefsnologintext' => 'Pian harus <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} babuat log]</span> gasat mengeset kakatujuan Pian.',
'changepassword' => 'Ubah katasunduk',
'prefs-skin' => 'Kulimbit',
'skin-preview' => 'Titilikan',
'recentchanges-label-minor' => 'Ngini sabuting babakan sapalih',
'recentchanges-label-bot' => 'Babakan ngini digawi ulih saikung bot',
'recentchanges-label-unpatrolled' => "Babakan ngini baluman ta'awasi",
+'recentchanges-legend-newpage' => '$1 - tungkaran puga',
'rcnote' => "Di bawah ni {{PLURAL:$1|'''1'''|'''$1'''}} paubahan pahanyarnya dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} tauncit, sampai $4 pukul $5.",
'rcnotefrom' => "Di bawah ngini paubahan tumatan '''$2''' (ditampaiakan sampai '''$1''' paubahan)",
'rclistfrom' => 'Tampaiakan paubahan pahanyarnya matan $1',
'allmessagesdefault' => 'Naskah baku pasan',
'allmessagescurrent' => 'Naskah pasan wayahini.',
'allmessagestext' => 'Ngini adalah sabuah daptar pasan sistem tasadia dalam ruang-ngaran MediaWiki.
-Muhun ilangi [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] wan [//translatewiki.net translatewiki.net] amun Pian hakun manyumbang palukalan umum MediaWiki.',
+Muhun ilangi [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] wan [//translatewiki.net translatewiki.net] amun Pian hakun manyumbang palukalan umum MediaWiki.',
'allmessagesnotsupportedDB' => "Tungkaran ngini kada kawa dipuruk karana '''\$wgUseDatabaseMessages''' sudah dipajahakan.",
'allmessages-filter-legend' => 'Saringan',
'allmessages-filter' => 'Saringan lawan kaadaan kustom:',
# External editor support
'edit-externally' => 'Babak barakas ngini puruk sabuah aplikasi luar',
-'edit-externally-help' => '(Lihati [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] untuk panjalasan labih)',
+'edit-externally-help' => '(Lihati [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] untuk panjalasan labih)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'samunyaan',
'version-hook-subscribedby' => 'Dilanggani ulih',
'version-version' => '(Pirsi $1)',
'version-license' => 'Lisansi',
-'version-poweredby-credits' => "Wiki ngini disukung ulih '''[//www.mediawiki.org/ MediaWiki]''', hak salin © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ngini disukung ulih '''[https://www.mediawiki.org/ MediaWiki]''', hak salin © 2001-$1 $2.",
'version-poweredby-others' => 'lainnya',
'version-credits-summary' => 'Kami ingin ma-akui urang-urang ini atas sumbangan pikiran-tanaga kapada [[Special:Version|MediaWiki]].',
'version-license-info' => 'MediaWiki adalah parangkat lunak bibas; Pian kawa manyabarakan wan/atawa maubahi ngini di bawah syarat Lisansi Publik Umum sawagai tarbitan ulih Free Software Foundation; apakah Lisansi virsi 2, atawa (pilihan Pian) pahanyarnya.
# Special:SpecialPages
'specialpages' => 'Tungkaran istimiwa',
-'specialpages-note' => '----
-* Tutungkaran istimiwa normal
+'specialpages-note' => '* Tutungkaran istimiwa normal
* <span class="mw-specialpagerestricted">Tutungkaran istimiwa tabatas.</span>
* <span class="mw-specialpagecached">Tutungkaran istimiwa timbuluk (pinanya bakulat).</span>',
'specialpages-group-maintenance' => 'Lapuran pamaliharaan',
'ok' => 'ঠিক আছে',
'retrievedfrom' => "'$1' থেকে আনীত",
'youhavenewmessages' => 'আপনার $1 এসেছে ($2)৷',
-'newmessageslink' => 'নতুন বার্তা',
-'newmessagesdifflink' => 'সর্বশেষ পরিবর্তন',
'youhavenewmessagesfromusers' => 'আপনি {{PLURAL:$3|অন্য ব্যবহারকারীর|$3 ব্যবহারকারীর}} কাছ থেকে $1 পেয়েছেন ($2)।',
'youhavenewmessagesmanyusers' => 'আপনি অনেক ব্যবহারকারীর কাছ থেকে $1 পেয়েছেন ($2)।',
'newmessageslinkplural' => '{{PLURAL:$1|একটি নতুন বার্তা|নতুন বার্তা}}',
'headline_tip' => '২য় স্তরের শিরোনাম',
'nowiki_sample' => 'অ-ফরম্যাটকৃত টেক্সট এখানে প্রবিষ্ট করুন',
'nowiki_tip' => 'উইকি ফরম্যাটিং উপেক্ষা করা হোক',
+'image_sample' => 'উদাহরণ.jpg',
'image_tip' => 'গ্রথিত ফাইল',
'media_tip' => 'ফাইল সংযোগ',
'sig_tip' => 'সময় ও তারিখসহ আপনার স্বাক্ষর',
'revdelete-hide-user' => 'সম্পাদকে ব্যবহারকারীর নাম/আইপি',
'revdelete-hide-restricted' => 'প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো',
'revdelete-radio-same' => 'পরিবর্তন নয়',
-'revdelete-radio-set' => 'দà§\83শà§\8dযমান',
-'revdelete-radio-unset' => 'লà§\81à¦\95ানà§\8b',
+'revdelete-radio-set' => 'লà§\81à¦\95ানà§\8b',
+'revdelete-radio-unset' => 'দà§\83শà§\8dযমান',
'revdelete-suppress' => 'সব প্রশাসক ও অন্যান্যদের কাছ থেকে উপাত্ত লুকিয়ে রাখা হোক।',
'revdelete-unsuppress' => 'সংশোধন পুনঃস্থাপনের উপর সীমাবদ্ধতা দূর করো',
'revdelete-log' => 'কারণ:',
'preferences' => 'আমার পছন্দ',
'mypreferences' => 'পছন্দসমূহ',
'prefs-edits' => 'সম্পাদনা সংখ্যা:',
-'prefsnologin' => 'আপনি লগ-ইন করেননি',
-'prefsnologintext' => 'ব্যবহারকারীর পছন্দ ঠিক করতে হলে আপনাকে অবশ্যই <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} লগইন]</span> করা অবস্থায় থাকতে হবে।',
'changepassword' => 'শব্দচাবি পরিবর্তন',
'prefs-skin' => 'আবরণ (Skin)',
'skin-preview' => 'প্রাকদর্শন',
'recentchanges-label-minor' => 'এটি একটি অনুল্লেখিত সম্পাদনা',
'recentchanges-label-bot' => 'এটি বট দ্বারা সম্পাদিত',
'recentchanges-label-unpatrolled' => 'এই সম্পাদনাটি এখনও পরীক্ষিত নয়',
+'recentchanges-legend-newpage' => '$1 - নতুন পাতা',
'rcnote' => "বিগত {{PLURAL:$2|দিনে|'''$2''' দিনে}} সংঘটিত {{PLURAL:$1|'''১'''|'''$1'''}}টি পরিবর্তন নীচে দেখানো হল (যেখানে বর্তমান সময় ও তারিখ $5, $4)।",
'rcnotefrom' => "'''$2'''-এর পরে সংঘটিত পরিবর্তনগুলো নিচে দেখানো হল ('''$1'''টি)।",
'rclistfrom' => '$1-এর পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও।',
ইমেইল: $PAGEEDITOR_EMAIL
উইকি: $PAGEEDITOR_WIKI
-পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
+পাতাà¦\9fির পরবরà§\8dতà§\80 পরিবরà§\8dতনà¦\97à§\81লà§\8b à¦\9cনà§\8dয à¦\86র à¦\95à§\8bন বিà¦\9cà§\8dà¦\9eপà§\8dতি পাঠানà§\8b হবà§\87 না, যতà¦\95à§\8dষণ না à¦\86পনি লà¦\97 à¦\87ন à¦\95রার সময় à¦\8fà¦\87 পাতায় বà§\8dরাà¦\89à¦\9c à¦\95রবà§\87ন। à¦\8fà¦\9bাড়া à¦\86পনি à¦\86পনার নà¦\9cরতালিà¦\95ায় রাà¦\96া সবà¦\97à§\81লি পাতা à¦\9cনà§\8dয বিà¦\9cà§\8dà¦\9eপà§\8dতি ফà§\8dলà§\8dযাà¦\97 শà§\81রà§\81র à¦\85বসà§\8dথায় ফিরিয়à§\87 নিতà§\87 পারà§\87ন।
{{SITENAME}} নোটিফিকেশন
'allmessagesdefault' => 'আদি টেক্সট',
'allmessagescurrent' => 'বর্তমান টেক্সট',
'allmessagestext' => 'এটি মিডিয়াউইকি নামস্থানে অন্তর্ভুক্ত সিস্টেম বার্তাগুলোর একটি তালিকা।
-আপনি যদি সাধারণ মিডিয়াউইকির স্থানীয়করণে অবদান রাখতে আগ্রহী হন, অনুগ্রহ করে [//www.mediawiki.org/wiki/Localisation মিডিয়াউইকি স্থানীয়করণ] এবং [//translatewiki.net translatewiki.net] দেখুন।',
+আপনি যদি সাধারণ মিডিয়াউইকির স্থানীয়করণে অবদান রাখতে আগ্রহী হন, অনুগ্রহ করে [https://www.mediawiki.org/wiki/Localisation মিডিয়াউইকি স্থানীয়করণ] এবং [//translatewiki.net translatewiki.net] দেখুন।',
'allmessagesnotsupportedDB' => "এই পাতা ব্যবহার করা যাবে না কারণ '''\$wgUseDatabaseMessages''' বন্ধ করে রাখা আছে।",
'allmessages-filter-legend' => 'ছাকনী',
'allmessages-filter' => 'Filter by customization state:',
'pageinfo-length' => 'পাতার দৈর্ঘ্য (বাইটে)',
'pageinfo-article-id' => 'পাতার আইডি',
'pageinfo-language' => 'পাতার তথ্যের ভাষা',
+'pageinfo-content-model' => 'পাতার বিষয়বস্তুর মডেল',
'pageinfo-robot-policy' => 'রোবটের মাধ্যমে ইন্ডেক্স করা হচ্ছে',
'pageinfo-robot-index' => 'অনুমোদিত',
'pageinfo-robot-noindex' => 'অনুনমোদিন',
'svg-long-desc' => 'এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3',
'svg-long-desc-animated' => 'এনিমেটেড এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3',
'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
-'show-big-image' => 'পà§\82রà§\8dণ রà§\87à¦\9cà§\8bলিà¦\89শন',
+'show-big-image' => 'মà§\82ল ফাà¦\87ল',
'show-big-image-preview' => 'এই প্রিভিউ-এর আকার: $1।',
'show-big-image-other' => 'অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।',
'show-big-image-size' => '$1 × $2 পিক্সেল',
# External editor support
'edit-externally' => 'ফাইলটি অন্য কোন সফটওয়্যার দিয়ে সম্পাদনা করুন',
-'edit-externally-help' => 'আরও তথ্যের জন্য [//www.mediawiki.org/wiki/Manual:External_editors সেটআপ নির্দেশমালা] দেখুন।',
+'edit-externally-help' => 'আরও তথ্যের জন্য [https://www.mediawiki.org/wiki/Manual:External_editors সেটআপ নির্দেশমালা] দেখুন।',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'সবগুলো',
'version-hook-subscribedby' => 'সাবস্ক্রাইব করেছেন',
'version-version' => '(সংস্করণ $1)',
'version-license' => 'লাইসেন্স',
-'version-poweredby-credits' => "এইক উইকিটি পরিচালিত হচ্ছে '''[//www.mediawiki.org/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
+'version-poweredby-credits' => "এইক উইকিটি পরিচালিত হচ্ছে '''[https://www.mediawiki.org/ মিডিয়াউইকি]'''-এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
'version-poweredby-others' => 'অন্যান্য',
'version-poweredby-translators' => 'translatewiki.net অনুবাদকগণ',
'version-credits-summary' => '[[Special:Version|মিডিয়াউইকি]] সফটওয়্যারে অবদানের জন্য আমরা এই ব্যক্তিকে স্বীকৃতি দিতে চাই।',
# Special:SpecialPages
'specialpages' => 'বিশেষ পাতাসমূহ',
-'specialpages-note' => '----
-* সাধারণ বিশেষ পাতাসমূহ।
+'specialpages-note' => '* সাধারণ বিশেষ পাতাসমূহ।
* <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>',
'specialpages-group-maintenance' => 'রক্ষণাবেক্ষণের কার্যবিবরণীসমূহ',
'specialpages-group-other' => 'অন্যান্য বিশেষ পাতাসমূহ',
'limitreport-expansiondepth' => 'সর্বোচ্চ গভীরতা বিস্তার',
'limitreport-expensivefunctioncount' => 'ব্যয়বহুল পার্সার ফাংশন গণনা',
+# Special:ExpandTemplates
+'expandtemplates' => 'টেমপ্লেট সম্প্রসারণ',
+'expand_templates_intro' => 'এই বিশেষ পাতাটি কিছু টেক্সট গ্রহণ করে এবং এর ভেতরের সব টেম্পলেট বারংবার সম্প্রসারিত করে।
+এছাড়াও এটি
+<nowiki>{{</nowiki>#language:...}}-এর মত পার্সার ফাংশন,
+<nowiki>{{</nowiki>CURRENTDAY}}-এর মত ভ্যারিয়েবল — মোটকথা দ্বিতীয় বন্ধনীর মধ্যে অবস্থিত সবকিছুকেই সম্প্রসারিত করতে পারে।
+এটি সংশ্লিষ্ট পার্সার পর্যায় থেকে স্বয়ং মিডিয়াউইকিকে কল করে এই কাজটি করে থাকে।',
+'expand_templates_title' => 'প্রাতিবেশিক শিরোনাম, {{FULLPAGENAME}}, ইত্যাদির জন্য:',
+'expand_templates_input' => 'ইনপুটকৃত লেখা:',
+'expand_templates_output' => 'ফলাফল',
+'expand_templates_xml_output' => 'XML আউটপুট',
+'expand_templates_ok' => 'ঠিক আছে',
+'expand_templates_remove_comments' => 'মন্তব্য মুছে ফেলো',
+'expand_templates_remove_nowiki' => 'ফলাফলে <nowiki> ট্যাগগুলো বাতিল করো',
+'expand_templates_generate_xml' => 'XML পার্স বৃক্ষ দেখাও',
+'expand_templates_preview' => 'প্রাকদর্শন',
+
);
*
* @author Freeyak
* @author Jason (on bo.wikipedia.org)
+ * @author Phurbutsering
* @author Shirayuki
* @author YeshiTuhden
*/
'cancel' => 'རྩིས་མེད།',
'moredotdotdot' => 'དེ་ལས་མང་བ་་་',
'mypage' => 'ངའི་ཤོག་ངོས།',
-'mytalk' => 'à½\84འིà¼\8bà½\82ླེà½\84à¼\8bà½\98ོལ།',
+'mytalk' => 'à½\82à½\8fà½\98à¼\8bà½\82ླེà½\84།',
'anontalk' => 'IP གནས་ཡུལ་འདི་ལ་གླེང་མོལ།',
'navigation' => 'ཕྱོགས་ཁྲིད།',
'and' => ' དང་',
'articlepage' => 'ནང་དོན་ཤོག་ངོས་ལ་ལྟ་བ།',
'talk' => 'གྲོས་བསྡུར།',
'views' => 'མཐོང་རིས།',
-'toolbox' => 'ལà½\82à¼\8bà½\86འིà¼\8bསà¾\92ྲོà½\98à¼\8d',
+'toolbox' => 'ལག་ཆའི་སྒམ།',
'userpage' => 'སྤྱོད་མིའི་ཤོག་ངོས་ལ་ལྟ་བ།',
'projectpage' => 'ལས་འཆར་ཤོག་ངོས་ལ་ལྟ་བ།',
'imagepage' => 'ཡིག་ཆའི་ཤོག་ངོས་ལ་ལྟ་བ།',
'ok' => 'འགྲིག',
'retrievedfrom' => '"$1"ལས་རྙེད་པ།',
'youhavenewmessages' => 'ཁྱེད་ལ་འཕྲིན་གསར་$1($2)ཡོད།',
-'newmessageslink' => 'འཕྲིན་གསར།',
-'newmessagesdifflink' => 'བཟོ་བཅོས་མཐའ་མ།',
'youhavenewmessagesmulti' => 'ཁྱེད་ལ་ $1 སྟེང་དུ་འཕྲིན་ཡིག་འདུག',
'editsection' => 'རྩོམ་སྒྲིག',
'editold' => 'རྩོམ་སྒྲིག',
'loginreqpagetext' => 'ཤོག་ངོས་གཞན་རྣམས་ལྟ་བར་ངེས་པར་དུ་$1བྱ་དགོས།',
'accmailtitle' => 'ལམ་ཡིག་བཏང་ཟིན།',
'newarticle' => '(གསར་བ)',
-'previewnote' => '༼འདི་ནི་སྔོན་ལྟ་ཙམ་ཡིན་པ་མ་བརྗེད།༽ ཁྱེད་ཀྱི་བཟོ་བཅོས་ད་དུང་ཉར་ཚགས་བྱས་མི་འདུག',
+'previewnote' => '"འདི་ནི་སྔོན་ལྟ་ཙམ་ཡིན་པ་ཡིད་ལ་འཇགས་རོགས། "ཁྱེད་ཀྱི་བཟོ་བཅོས་ད་དུང་ཉར་ཚགས་བྱས་མི་འདུག',
'editing' => '$1རྩོམ་སྒྲིག་བྱེད་བཞིན་པ།',
'editingsection' => ' $1 (སྡེ་ཚན) ལ་རྩོམ་སྒྲིག་བྱེད་བཞིན་པ།',
'yourtext' => 'ཁྱོད་ཀྱི་ཡིག་འབྲུ།',
'page_last' => 'མཐའ་མ།',
'history-fieldset-title' => 'ལོ་རྒྱུས་བཤར་ལྟ།',
'history-show-deleted' => 'དོར་ཟིན་ཁོ་ན།',
-'histfirst' => 'སྔ་ཤོས།',
-'histlast' => 'ཕྱི་ཤོས།',
+'histfirst' => 'à½\86ེསà¼\8bསà¾\94à¼\8bཤོསà¼\8d',
+'histlast' => 'à½\86ེསà¼\8bà½\95ྱིà¼\8bཤོསà¼\8d',
'historyempty' => '༼སྟོང་པ།༽',
# Revision deletion
'notextmatches' => 'ཤོག་ངོས་ཡིག་འབྲུ་མཚུངས་པ་མི་འདུག',
'prevn' => 'སྔོན་མ་{{PLURAL:$1|$1}}',
'nextn' => 'རྗེས་མ་{{PLURAL:$1|$1}}',
+'shown-title' => 'མིག་སྔར་སྟོན་པ། $1{{PLURAL:$1|གྲུབ་འབྲས།}}ཤོག་ངོས་ལྟར།',
'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)ལ་ལྟ་བ།',
'searchmenu-legend' => 'འཚོལ་ཞིབ་འདེམས་ཚན།',
'searchmenu-new' => 'ལྦེ་ཁེ་སྟེང་ལ་ཤོག་ལེ་ [[:$1]]བཟོས།',
'powersearch-togglenone' => 'མེད།',
# Preferences page
-'mypreferences' => 'à½\84འིà¼\8bལེà½\82སà¼\8bསà¾\92ྲིà½\82',
+'mypreferences' => 'à½\91à½\82འà¼\8bའà½\91ེà½\98སà¼\8d',
'prefs-edits' => 'རྩོམ་སྒྲིག་གྲངས་ཚད།',
-'prefsnologin' => 'ནང་འཛུལ་བྱས་མེད།',
'changepassword' => 'ལམ་ཡིག་བརྗེ་བ།',
'skin-preview' => 'སྔོན་ལྟ།',
'prefs-personal' => 'སྤྱོད་མིའི་སྤྱི་ཁོག',
'minoreditletter' => 'སྒྲིག་ཆུང་།',
'newpageletter' => 'ཤོག་གསར།',
'rc_categories_any' => 'གང་རུང་།',
-'rc-enhanced-expand' => 'ཞིབ་ཕྲ་སྟོན།',
+'rc-enhanced-expand' => 'à½\9eིà½\96à¼\8bà½\95ྲརà¼\8bསà¾\9fོà½\93à¼\8d',
'rc-enhanced-hide' => 'ཞིབ་ཕྲ་སྦས་བ།',
# Recent changes linked
'filehist-filesize' => 'ཡིག་ཆའི་ཆེ་ཆུང་།',
'filehist-comment' => 'བསམ་ཚུལ།',
'filehist-missing' => 'ཡིག་ཆ་ཆད་པ།',
-'imagelinks' => 'à½\82à½\84à¼\8bལà¼\8bསྦྲེལà¼\8bà½\96།',
+'imagelinks' => 'ཡིà½\82à¼\8bà½\86à¼\8bà½\96ེà½\91à¼\8bསྤྱོà½\91à¼\8bà½\81ུལ།',
'linkstoimage' => '{{PLURAL:$1|pagelinks|$1pagelink}} འདི་ལ་སྦྲེལ་ཡོད།',
'shared-repo-from' => '$1 ནས།',
'emailmessage' => 'སྐད་ཆ།',
# Watchlist
-'watchlist' => 'à½\84འིà¼\8bà½\98à½\89à½\98à¼\8bའà½\87ོà½\82་ཐོ།',
-'mywatchlist' => 'à½\84འིà¼\8bà½\98à½\89à½\98à¼\8bའà½\87ོà½\82་ཐོ།',
+'watchlist' => 'ལà¾\9fà¼\8bà½\9eིà½\96་ཐོ།',
+'mywatchlist' => 'ལà¾\9fà¼\8bà½\9eིà½\96་ཐོ།',
'watchnologin' => 'ནང་འཛུལ་བྱས་མེད།',
'watch' => 'མཉམ་འཇོག་ཐོ།',
'watchthispage' => 'དྲ་ངོས་འདི་ལ་གཟིགས།',
'blanknamespace' => '༼གཙོ་ངོས།༽',
# Contributions
-'contributions' => 'སྤྱོà½\91à¼\8bà½\98ིའིà¼\8bà½\96ྱསà¼\8bརà¾\97ེས།',
-'mycontris' => 'à½\84འིà¼\8bà½\96ྱསà¼\8bརà¾\97ེས།',
+'contributions' => 'à½\98à½\90ུà½\93à¼\8bའà½\82ྱུར།',
+'mycontris' => 'à½\98à½\90ུà½\93à¼\8bའà½\82ྱུར།',
'month' => 'ཟླ་བ་འདི་ནས།',
'year' => 'ལོ་འདི་ནས།',
'whatlinkshere-title' => '"$1" ལ སྦྲེལ་ཡོད་པའི་ཤོག་ངོས།',
'whatlinkshere-page' => 'ཤོག་ངོས།',
'linkshere' => "གཤམ་གྱི་ཤོག་ངོས་རྣམས་ '''[[:$1]]''': ལ་སྦྲེལ་ཡོད།",
-'isimage' => 'à½\96རà¾\99à½\93་རིས་སྦྲེལ་མཐུད།',
+'isimage' => 'ཡིà½\82་རིས་སྦྲེལ་མཐུད།',
'whatlinkshere-links' => '← སྦྲེལ་མཐུད།',
'whatlinkshere-hidelinks' => '$1 སྦྲེལ་མཐུད།',
'whatlinkshere-filters' => 'ཡིག་ཚགས།',
'nextdiff' => 'རྩོམ་སྒྲིག་གསར་གྲས། →',
# Media information
-'show-big-image' => 'à½\82à½\8fà½\93à¼\8bའà½\96ེà½\96à¼\8bà½\86à¼\8bà½\9aà½\84à¼\8b།',
+'show-big-image' => 'à½\90ོà½\82à¼\8bà½\98འིà¼\8bཡིà½\82à¼\8bà½\86།',
# Special:NewFiles
'ilsubmit' => 'འཚོལ།',
'ok' => 'চুমিসে',
'retrievedfrom' => "'$1' -ত্ত আনানি অসে",
'youhavenewmessages' => 'তরতা $1 ($2) আসে।',
-'newmessageslink' => 'নুৱা পৌ',
-'newmessagesdifflink' => 'গেলগা সিলপা',
'youhavenewmessagesmulti' => 'তরতা নুৱা পৌ $1হান আহিসে',
'editsection' => 'পতিক',
'editold' => 'পতিক',
'allmessagesdefault' => 'আদ্যকার টেক্সট',
'allmessagescurrent' => 'হাদি এহানর ৱাহি',
'allmessagestext' => 'তলে মিডিয়াউইকির নাঙরথাকে পানা একরের সিস্টেম পৌহানির তালিকাহান দেনা ইল।
-কৃপা করিয়া [//www.mediawiki.org/wiki/Localisation মিডিয়াউইকি অনুবাদর হেইচা পাতাত] বারো [//translatewiki.net translatewiki.net] মিডিয়াউইকি অনুবাদ করানির কা যানা পারর।',
+কৃপা করিয়া [https://www.mediawiki.org/wiki/Localisation মিডিয়াউইকি অনুবাদর হেইচা পাতাত] বারো [//translatewiki.net translatewiki.net] মিডিয়াউইকি অনুবাদ করানির কা যানা পারর।',
'allmessages-filter-legend' => 'সাক',
'allmessages-filter-unmodified' => 'নাসিলথাইতে',
'allmessages-filter-all' => 'হাব্বি',
# External editor support
'edit-externally' => 'এর ফাইল এগ পতানির কা বারেদের এপ্লিকেশন আতা',
-'edit-externally-help' => 'আরাকউ হারপানির কা [//www.mediawiki.org/wiki/Manual:External_editors সেটাপর নির্দেশহানি] চা।',
+'edit-externally-help' => 'আরাকউ হারপানির কা [https://www.mediawiki.org/wiki/Manual:External_editors সেটাপর নির্দেশহানি] চা।',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'হাব্বি',
'ok' => 'Mat eo',
'retrievedfrom' => 'Adtapet diwar « $1 »',
'youhavenewmessages' => "$1 zo ganeoc'h ($2).",
-'newmessageslink' => 'Kemennoù nevez',
-'newmessagesdifflink' => "Diforc'hioù e-keñver ar stumm kent",
'youhavenewmessagesfromusers' => '$1 ho peus eus {{PLURAL:$3|un implijer all|$3 implijer}} ($2).',
'youhavenewmessagesmanyusers' => ' $1 ho peus implijerien a-leizh ($2).',
'newmessageslinkplural' => "{{PLURAL:$1ur c'hemennad nevez|kemennadoù nevez}}",
'preferences' => 'Penndibaboù',
'mypreferences' => 'Penndibaboù',
'prefs-edits' => 'Niver a zegasadennoù :',
-'prefsnologin' => 'Digevreet',
-'prefsnologintext' => 'Ret eo deoc\'h bezañ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kevreet]</span> a-benn gellout cheñch ho tibaboù implijer.',
'changepassword' => 'Kemmañ ar ger-tremen',
'prefs-skin' => 'Gwiskadur',
'skin-preview' => 'Rakwelet',
'recentchanges-label-minor' => "Ur c'hemm dister eo hemañ",
'recentchanges-label-bot' => "Gant ur bot eo bet degaset ar c'hemm-mañ.",
'recentchanges-label-unpatrolled' => "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.",
+'recentchanges-legend-newpage' => '$1 - pajenn nevez',
'rcnote' => "Setu aze an {{PLURAL:$1|'''1''' change|'''$1''' kemm diwezhañ}} bet c'hoarvezet e-pad an {{PLURAL:$2|deiz|'''$2''' deiz}} diwezhañ, savet d'an $4 da $5.",
'rcnotefrom' => "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an '''$2''' ('''$1''' d'ar muiañ).",
'rclistfrom' => "Diskouez ar c'hemmoù diwezhañ abaoe an $1.",
'allmessagesdefault' => 'Kemennadenn dre ziouer',
'allmessagescurrent' => 'Kemennadenn zo bremañ',
'allmessagestext' => "Setu roll ar c'hemennadennoù reizhiad a c'haller kaout en esaouennoù anv MediaWiki.
-Kit da welet [//www.mediawiki.org/wiki/Localisation Lec'heladur MediaWiki] ha [//translatewiki.net translatewiki.net] mar fell deoc'h kemer perzh e lec'heladur boutin MediaWiki.",
+Kit da welet [https://www.mediawiki.org/wiki/Localisation Lec'heladur MediaWiki] ha [//translatewiki.net translatewiki.net] mar fell deoc'h kemer perzh e lec'heladur boutin MediaWiki.",
'allmessagesnotsupportedDB' => "N'haller ket kaout {{ns:special}}:AllMessages rak diweredekaet eo bet wgUseDatabaseMessages.",
'allmessages-filter-legend' => 'Sil',
'allmessages-filter' => "Silañ dre stad ar c'hemmoù",
# External editor support
'edit-externally' => 'Kemmañ ar restr-mañ dre un arload diavaez',
-'edit-externally-help' => "(Gwelet [//www.mediawiki.org/wiki/Manual:External_editors erbedadennoù staliañ an aozer diavaez] a-benn gouzout hiroc'h).",
+'edit-externally-help' => "(Gwelet [https://www.mediawiki.org/wiki/Manual:External_editors erbedadennoù staliañ an aozer diavaez] a-benn gouzout hiroc'h).",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'pep tra',
'version-hook-subscribedby' => 'Termenet gant',
'version-version' => '(Stumm $1)',
'version-license' => 'Aotre-implijout',
-'version-poweredby-credits' => "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 're all',
'version-poweredby-translators' => 'troerien translatewiki.net',
'version-credits-summary' => 'Karout a rafemp trugarekaat an dud-mañ evit ho kenlabour e [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Pajennoù dibar',
-'specialpages-note' => '----
-* Pajennoù dibar boutin.
+'specialpages-note' => '* Pajennoù dibar boutin.
* <span class="mw-specialpagerestricted">Pajennoù dibar miret strizh.</span>
* <span class="mw-specialpagecached">Pajennoù dibar krubuilhet hepken (a c\'hellfe bezañ re gozh).</span>',
'specialpages-group-maintenance' => "Rentaoù-kont trezalc'h",
'limitreport-templateargumentsize' => 'Ment arguzenn ar patrom',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|okted}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Emled ar patromoù',
+'expand_templates_intro' => "Kemer a ra ar bajenn dibar-mañ tammoù testenn hag astenn a ra an holl batromoù enni en un doare azkizat.
+Astenn a ra ivez an arc'hwelioù parser evel
+<nowiki>{{</nowiki>#language:…}}, hag an argemmoù evel
+<nowiki>{{</nowiki>CURRENTDAY}}— e gwirionez, koulz lavaret kement tra zo etre briataennoù.
+Ober a ra kement-mañ dre c'hervel ar bazenn a zegouezh digant parser MediaWiki e-unan.",
+'expand_templates_title' => 'Titl ar gendestenn, evit {{FULLPAGENAME}} h.a. :',
+'expand_templates_input' => 'Merkañ ho testenn amañ :',
+'expand_templates_output' => "Disoc'h",
+'expand_templates_xml_output' => 'Ezvont XML',
+'expand_templates_ok' => 'Mat eo',
+'expand_templates_remove_comments' => 'Lemel an notennoù kuit',
+'expand_templates_remove_nowiki' => "Diverkañ a ra ar balizennoù <nowiki> en disoc'h",
+'expand_templates_generate_xml' => 'Gwelet ar gwezennadur XML',
+'expand_templates_preview' => 'Rakwelet',
+
);
'ok' => 'U redu',
'retrievedfrom' => 'Dobavljeno iz "$1"',
'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'novih poruka',
-'newmessagesdifflink' => 'posljednja promjena',
'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika}} ($2).',
'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|nove poruke}}',
'preferences' => 'Postavke',
'mypreferences' => 'Postavke',
'prefs-edits' => 'Broj izmjena:',
-'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Da biste mogli podešavati korisničke postavke, morate <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} biti prijavljeni]</span>.',
'changepassword' => 'Promijeni šifru',
'prefs-skin' => 'Koža',
'skin-preview' => 'Pregled',
'recentchanges-label-minor' => 'Ovo je mala izmjena',
'recentchanges-label-bot' => 'Ova izmjenu je načinio bot',
'recentchanges-label-unpatrolled' => 'Ova izmjena još nije patrolirana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
'rcnote' => "Ispod {{PLURAL:$1|je '''$1''' promjena|su '''$1''' zadnje promjene|su '''$1''' zadnjih promjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
'rcnotefrom' => 'Ispod su izmjene od <b>$2</b> (do <b>$1</b> prikazano).',
'rclistfrom' => 'Prikaži nove izmjene počev od $1',
'allmessagesdefault' => 'Uobičajeni tekst',
'allmessagescurrent' => 'Trenutni tekst',
'allmessagestext' => 'Ovo je spisak svih sistemskih poruka u dostupnih u MediaWiki imenskom prostoru.
-Molimo posjetite [//www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
+Molimo posjetite [https://www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
'allmessagesnotsupportedDB' => 'Ova stranica ne može biti korištena jer je <i>wgUseDatabaseMessages</i> isključen.',
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter po stanju podešavanja:',
# External editor support
'edit-externally' => 'Izmjeni ovu datoteku koristeći vanjski program',
-'edit-externally-help' => '(Pogledajte [//www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
+'edit-externally-help' => '(Pogledajte [https://www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'sve',
'version-hook-subscribedby' => 'Pretplaćeno od',
'version-version' => '(Verzija $1)',
'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ova wiki je zasnovana na '''[//www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
+'version-poweredby-credits' => "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
'version-poweredby-others' => 'ostali',
'version-credits-summary' => 'Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].',
'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija.
# Special:SpecialPages
'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* Normalne posebne stranice.
+'specialpages-note' => '* Normalne posebne stranice.
* <strong class="mw-specialpagerestricted">Zaštićene posebne stranice.</strong>',
'specialpages-group-maintenance' => 'Izvještaji za održavanje',
'specialpages-group-other' => 'Ostale posebne stranice',
# Limit report
'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Proširi šablone',
+'expand_templates_intro' => 'Ova posebna stranica uzima neki tekst i proširuje sve šablone u njemu rekurzivno.
+Ona također proširuje parserske funkcije poput
+<nowiki>{{</nowiki>#language:…}} i varijable poput
+<nowiki>{{</nowiki>CURRENTDAY}}—u principu gotovo sve između dvostrukih zagrada.
+Ovo se uradi putem poziva relevantnog parserskog nivoa iz same MediaWiki.',
+'expand_templates_title' => 'Naslov konteksta, za {{FULLPAGENAME}} itd.:',
+'expand_templates_input' => 'Tekst unosa:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'XML izlaz',
+'expand_templates_ok' => 'U redu',
+'expand_templates_remove_comments' => 'Ukloni komentare',
+'expand_templates_remove_nowiki' => 'Onemogući oznake <nowiki> u rezultatima',
+'expand_templates_generate_xml' => 'Prikaži XML stablo parsera',
+'expand_templates_preview' => 'Pregled',
+
);
* @author Cedric31
* @author Davidpar
* @author El libre
+ * @author Fitoschido
* @author Gemmaa
* @author Grondin
* @author Iradigalesc
'undeletethispage' => "Desfés l'eliminació d'aquesta pàgina",
'undelete_short' => "Restaura {{PLURAL:$1|l'edició eliminada|$1 edicions eliminades}}",
'viewdeleted_short' => 'Mostra {{PLURAL:$1|una edició eliminada|$1 edicions eliminades}}',
-'protect' => 'Protecció',
+'protect' => 'Protegeix',
'protect_change' => 'canvia',
-'protectthispage' => 'Protecció de la pàgina',
-'unprotect' => 'Desprotecció',
+'protectthispage' => 'Protegeix aquesta pàgina',
+'unprotect' => 'Desprotegeix',
'unprotectthispage' => 'Desprotegeix aquesta pàgina',
'newpage' => 'Pàgina nova',
'talkpage' => 'Discussió',
'ok' => 'OK',
'retrievedfrom' => 'Obtingut de «$1»',
'youhavenewmessages' => 'Tens $1 ($2).',
-'newmessageslink' => 'nous missatges',
-'newmessagesdifflink' => 'últims canvis',
'youhavenewmessagesfromusers' => "Tens $1 {{PLURAL:$3|d'un altre usuari|de $3 usuaris}} ($2).",
'youhavenewmessagesmanyusers' => 'Tens $1 de molts usuaris ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un nou missatge|nous missatges}}',
'databaseerror-textcl' => "S'ha produït un error en la consulta de la base de dades.",
'databaseerror-query' => 'Consulta: $1',
'databaseerror-function' => 'Funció: $1',
+'databaseerror-error' => 'Error:$1',
'laggedslavemode' => 'Avís: La pàgina podria mancar de modificacions recents.',
'readonly' => 'La base de dades es troba bloquejada',
'enterlockreason' => 'Escriviu una raó pel bloqueig, així com una estimació de quan tindrà lloc el desbloqueig',
'actionthrottled' => 'Acció limitada',
'actionthrottledtext' => "Com a mesura per a prevenir la propaganda indiscriminada (spam), no podeu fer aquesta acció tantes vegades en un període de temps tan curt. Torneu-ho a intentar d'ací uns minuts.",
'protectedpagetext' => "S'ha protegit la pàgina per evitar-hi modificacions.",
-'viewsourcetext' => "Podeu visualitzar i copiar la font d'aquesta pàgina:",
+'viewsourcetext' => 'Podeu visualitzar i copiar el codi font d’aquesta pàgina:',
'viewyourtext' => "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
'protectedinterface' => "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.
Per agregar o canviar les traduccions per a tots els wikis, si us plau fes servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
'invalidtitle-unknownnamespace' => 'Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»',
'exception-nologin' => 'No has iniciat sessió',
'exception-nologin-text' => 'Aquesta pàgina o acció requereix que iniciïs sessió a aquest wiki.',
+'exception-nologin-text-manual' => 'Si us plau, $1 per poder accedir a aquesta pàgina o acció.',
# Virus scanner
'virus-badscanner' => "Mala configuració: antivirus desconegut: ''$1''",
'gotaccount' => 'Ja teniu un compte? $1.',
'gotaccountlink' => 'Inicia una sessió',
'userlogin-resetlink' => "Heu oblidat les vostres dades d'accés?",
-'userlogin-resetpassword-link' => 'Reinicia la contrasenya',
+'userlogin-resetpassword-link' => 'Has oblidat la teva contrasenya?',
'helplogin-url' => 'Help:Registrar-se',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda]]',
'userlogin-loggedin' => 'Heu iniciat una sessió com {{GENDER:$1|$1}}.
'preferences' => 'Preferències',
'mypreferences' => 'Preferències',
'prefs-edits' => "Nombre d'edicions:",
-'prefsnologin' => 'No heu iniciat cap sessió',
-'prefsnologintext' => 'Heu d\'estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticats]</span> per a seleccionar les preferències d\'usuari.',
'changepassword' => 'Canvia la contrasenya',
'prefs-skin' => 'Aparença',
'skin-preview' => 'prova',
'prefs-help-watchlist-token2' => 'Aquesta és la clau secreta pel canal de continguts de la vostra llista de seguiment.
Qualsevol que la conegui podria llegir la vostra llista de seguiment, així que no la compartiu.
[[Special:ResetTokens|Cliqueu aquí si voleu restaurar-la]].',
-'savedprefs' => "S'han desat les vostres preferències",
+'savedprefs' => 'S’han desat les vostres preferències.',
'timezonelegend' => 'Fus horari:',
'localtime' => 'Hora local:',
'timezoneuseserverdefault' => "Utilitza l'hora per defecte del wiki ($1)",
'recentchanges-label-minor' => 'Aquesta és una modificació menor',
'recentchanges-label-bot' => 'Aquesta modificació fou feta per un bot',
'recentchanges-label-unpatrolled' => 'Aquesta modificació encara no ha estat patrullada',
+'recentchanges-legend-newpage' => '$1 - nova pàgina',
'rcnote' => 'A continuació hi ha {{PLURAL:$1|el darrer canvi|els darrers <strong>$1</strong> canvis}} en {{PLURAL:$2|el darrer dia|els darrers <strong>$2</strong> dies}}, actualitzats a les $5 del $4.',
'rcnotefrom' => 'A sota hi ha els canvis des de <b>$2</b> (es mostren fins <b>$1</b>).',
'rclistfrom' => 'Mostra els canvis nous des de $1',
'allmessagesname' => 'Nom',
'allmessagesdefault' => 'Text per defecte',
'allmessagescurrent' => 'Text actual',
-'allmessagestext' => "Tot seguit hi ha una llista dels missatges del sistema que es troben a l'espai de noms ''MediaWiki''. La traducció genèrica d'aquests missatges no s'hauria de fer localment sinó a la traducció del programari MediaWiki. Si voleu ajudar-hi visiteu [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net].",
+'allmessagestext' => "Tot seguit hi ha una llista dels missatges del sistema que es troben a l'espai de noms ''MediaWiki''. La traducció genèrica d'aquests missatges no s'hauria de fer localment sinó a la traducció del programari MediaWiki. Si voleu ajudar-hi visiteu [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net].",
'allmessagesnotsupportedDB' => "No es pot processar '''{{ns:special}}:Allmessages''' perquè la variable '''\$wgUseDatabaseMessages''' està desactivada.",
'allmessages-filter-legend' => 'Filtre',
'allmessages-filter' => "Filtra per l'estat de personalització:",
'pageinfo-length' => 'Mida de la pàgina (en bytes)',
'pageinfo-article-id' => 'ID de la pàgina',
'pageinfo-language' => 'Llengua del contingut de la pàgina',
+'pageinfo-content-model' => 'Plantilla de contingut de pàgina',
'pageinfo-robot-policy' => 'Indexació per robots',
'pageinfo-robot-index' => 'Permès',
'pageinfo-robot-noindex' => 'No permès',
# External editor support
'edit-externally' => 'Edita aquest fitxer fent servir una aplicació externa',
-'edit-externally-help' => '(Vegeu les [//www.mediawiki.org/wiki/Manual:External_editors instruccions de configuració] per a més informació)',
+'edit-externally-help' => '(Vegeu les [https://www.mediawiki.org/wiki/Manual:External_editors instruccions de configuració] per a més informació)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'totes',
'version-hook-subscribedby' => 'Subscrit per',
'version-version' => '(Versió $1)',
'version-license' => 'Llicència',
-'version-poweredby-credits' => "El wiki funciona gràcies a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "El wiki funciona gràcies a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'altres',
'version-poweredby-translators' => 'Traductors de translatewiki.net',
'version-credits-summary' => 'El nostre reconeixement a les següents persones per la seva aportació a [[Special:Version|MediaWiki]]',
# Special:SpecialPages
'specialpages' => 'Pàgines especials',
-'specialpages-note' => '----
-* Pàgines especials normals.
+'specialpages-note-top' => 'Llegenda',
+'specialpages-note' => '* Pàgines especials normals.
* <span class="mw-specialpagerestricted">Pàgines especials restringides.</span>
* <span class="mw-specialpagecached">Pàgines especials en memòria cau (poden ser obsoletes).</span>',
'specialpages-group-maintenance' => 'Informes de manteniment',
'limitreport-expansiondepth' => "Profunditat màxima d'expansió",
'limitreport-expensivefunctioncount' => "Número de funcions d'anàlisi dispendioses",
+# Special:ExpandTemplates
+'expandtemplates' => 'Expansió de plantilles',
+'expand_templates_intro' => "Aquesta pàgina especial expandeix de forma recursiva totes les plantilles d'un text donat.
+També expandeix les funcions sintàctiques, com ara <code><nowiki>{{</nowiki>#language:…}}</code>, i les variables predefinides, com <code><nowiki>{{</nowiki>CURRENTDAY}}</code> —de fet, gairebé tot que estigui entre claus dobles.",
+'expand_templates_title' => 'Títol per contextualitzar ({{FULLPAGENAME}}, etc):',
+'expand_templates_input' => 'El vostre text:',
+'expand_templates_output' => 'Resultat:',
+'expand_templates_xml_output' => 'Sortida XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Elimina els comentaris',
+'expand_templates_remove_nowiki' => "Suprimeix l'etiqueta <nowiki> en el resultat",
+'expand_templates_generate_xml' => "Mostra l'arbre XML",
+'expand_templates_preview' => 'Previsualitza',
+
);
'ok' => '好',
'retrievedfrom' => '趁「$1」退過來',
'youhavenewmessages' => '汝有$1($2)。',
-'newmessageslink' => '新信息',
-'newmessagesdifflink' => '最後其改變',
'youhavenewmessagesfromusers' => '汝有趁$3用戶($2)來其$1萆信息{{PLURAL:$3}}',
'youhavenewmessagesmanyusers' => '汝有趁雅価用戶($2)其$1信息',
'newmessageslinkplural' => '$1條新其信息{{PLURAL:$1}}',
'preferences' => '設定',
'mypreferences' => '我其設定',
'prefs-edits' => '修改數量:',
-'prefsnologin' => '未躒底其',
'changepassword' => '改變密碼',
'prefs-skin' => '皮膚',
'datedefault' => '無設定',
'allmessagesdefault' => '默認其消息文字',
'allmessagescurrent' => '現時其文字',
'allmessagestext' => '茲是敆媒體維基命名空間底裏系統消息其蜀萆單單。
-如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[//www.mediawiki.org/wiki/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。',
+如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[https://www.mediawiki.org/wiki/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。',
'allmessagesnotsupportedDB' => "茲蜀頁𣍐使其,因為'''\$wgUseDatabaseMessages'''已經乞禁止去了。",
# Thumbnails
# External editor support
'edit-externally' => '使外程序來編輯茲文件',
-'edit-externally-help' => '(參考[//www.mediawiki.org/wiki/Manual:External_editors setup instructions]來瞭解更価信息)',
+'edit-externally-help' => '(參考[https://www.mediawiki.org/wiki/Manual:External_editors setup instructions]來瞭解更価信息)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '所有',
'Activeusers' => array( 'Жигара_декъашхой' ),
'Allmessages' => array( 'ГӀирса_хаамаш' ),
'Allpages' => array( 'Массо_агӀонаш' ),
- 'Ancientpages' => array( 'Яззамаш_оцу_терахьца_тяххьара_тадар_дина_долу' ),
+ 'Ancientpages' => array( 'Яззамаш_оцу_терахьца_тӀаьххьара_тадар_дина_долу' ),
'Badtitle' => array( 'Хилийта_йиш_йоцу_цӀе' ),
'Blankpage' => array( 'Еса_агӀо' ),
'Block' => array( 'Блоктоха' ),
- 'Blockme' => array( 'Блоктоха_суна' ),
- 'Booksources' => array( 'Жайнашан_хьосташ' ),
+ 'Booksources' => array( 'Жайнийн_хьосташ' ),
'BrokenRedirects' => array( 'ДIахаьдна_долу_дIасахьажораш' ),
'Categories' => array( 'Категореш' ),
'ChangeEmail' => array( 'Хийца_e-mail' ),
- 'ChangePassword' => array( 'ХийÑ\86а_иÑ\88аÑ\80' ),
+ 'ChangePassword' => array( 'ХийÑ\86а_паÑ\80олÑ\8c' ),
'ComparePages' => array( 'АгӀонаш_юстар' ),
'Confirmemail' => array( 'Бакъе_e-mail' ),
'Contributions' => array( 'Къинхьегам' ),
- 'CreateAccount' => array( 'Кхолла_декъашхон_дӀаяздар' ),
+ 'CreateAccount' => array( 'Кхолла_декъашхочун_дӀаяздар' ),
'Deadendpages' => array( 'Дика_йоцу_агӀонаш' ),
- 'DeletedContributions' => array( 'ДӀабяхкина_къинхьегам' ),
- 'Disambiguations' => array( 'Цхьатера_маьӀна_дерш' ),
- 'DoubleRedirects' => array( 'ШалгӀа_дӀасахьажийнарш' ),
+ 'DeletedContributions' => array( 'ДӀабаьккхина_къинхьегам' ),
+ 'DoubleRedirects' => array( 'Шалха_дӀасахьажийнарш' ),
'EditWatchlist' => array( 'Табе_тергаме_могӀам' ),
'Emailuser' => array( 'Декъашхочунга_кехат' ),
'Export' => array( 'Экспорт' ),
- 'Fewestrevisions' => array( 'Наггахь_беш_болу_хицамаш' ),
+ 'Fewestrevisions' => array( 'Наггахь_беш_болу_хийцамаш' ),
'FileDuplicateSearch' => array( 'Цхьатера_файлаш_лахар' ),
'Filepath' => array( 'Файл_йолче' ),
'Import' => array( 'Импорт' ),
'Invalidateemail' => array( 'Адрес_бакъдар_юхадаккха' ),
'JavaScriptTest' => array( 'JavaScript_тестировать_ян' ),
'BlockList' => array( 'Блоктоьхнарш' ),
- 'LinkSearch' => array( 'Ð¥Ñ\8cажоÑ\80игаш_лахар' ),
- 'Listadmins' => array( 'Куьгалхойн_могӀам' ),
+ 'LinkSearch' => array( 'Ð¥Ñ\8cажоÑ\80агаш_лахар' ),
+ 'Listadmins' => array( 'Ð\9aÑ\83Ñ\8cйгалÑ\85ойн_могÓ\80ам' ),
'Listbots' => array( 'Шаболх_бечара_могӀам' ),
- 'Listfiles' => array( 'Файланши_могӀам' ),
- 'Listgrouprights' => array( 'Декъашхошан_бакъонаш' ),
+ 'Listfiles' => array( 'Файлаш' ),
+ 'Listgrouprights' => array( 'Декъашхойн_бакъонаш' ),
'Listredirects' => array( 'ДIасахьажоран_могIам' ),
'Listusers' => array( 'Декъашхойн_могӀам' ),
'Lockdb' => array( 'Хааман_базан_блоктохар' ),
'Log' => array( 'Тептарш' ),
- 'Lonelypages' => array( 'Байлахь_йисина_агIонаш' ),
+ 'Lonelypages' => array( 'Байлахь_йисина_агӀонаш' ),
'Longpages' => array( 'Беха_яззамаш' ),
- 'MergeHistory' => array( 'ЦÑ\85Ñ\8cаÑ\8cнаÑ\82оÑ\8cÑ\85на_каÑ\82егоÑ\80еÑ\88' ),
+ 'MergeHistory' => array( 'Ð\98Ñ\81Ñ\82оÑ\80и_Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80' ),
'MIMEsearch' => array( 'MIME_чухула_лахар' ),
'Mostcategories' => array( 'Дуккха_категореш_тӀе_тоьхна_йолу_агӀонаш' ),
'Mostimages' => array( 'Массарел_дуккха_лелайо_файлаш' ),
- 'Mostinterwikis' => array( 'Ð\94Ñ\83кÑ\85а_Ñ\8eкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80игаш' ),
- 'Mostlinked' => array( 'Ð\94Ñ\83ккÑ\85а_Ñ\85Ñ\8cажоÑ\80игаÑ\88_Ñ\82Iе_Ñ\82оÑ\8cÑ\85на_йолÑ\83_агIонаш' ),
+ 'Mostinterwikis' => array( 'Ð\94Ñ\83кÑ\85а_Ñ\8eкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80агаш' ),
+ 'Mostlinked' => array( 'Ð\94Ñ\83ккÑ\85а_Ñ\85Ñ\8cажоÑ\80агаÑ\88_Ñ\82Ó\80е_Ñ\82оÑ\8cÑ\85на_йолÑ\83_агÓ\80онаш' ),
'Mostlinkedcategories' => array( 'Дуккха_тӀе_хьажораш_йолу_категореш' ),
'Mostlinkedtemplates' => array( 'Массарел_дуккха_а_леладо_кепаш' ),
- 'Mostrevisions' => array( 'Сих_сиха_нисйина_йолу_агIонаш' ),
+ 'Mostrevisions' => array( 'Сих_сиха_нисйина_йолу_агӀонаш' ),
'Movepage' => array( 'АгӀона_цӀе_хийцар' ),
'Mycontributions' => array( 'Сан_къинхьегам' ),
'Mypage' => array( 'Сан_агӀо' ),
'Myuploads' => array( 'Сан_файлаш' ),
'Newimages' => array( 'Керла_файлаш' ),
'Newpages' => array( 'Керла_агӀонаш' ),
- 'PermanentLink' => array( 'Гуттарлера_хьажориг' ),
- 'Popularpages' => array( 'ГӀарялла_агӀонаш' ),
+ 'PasswordReset' => array( 'Пароль_кхоссар' ),
+ 'PermanentLink' => array( 'Гуттарлера_хьажораг' ),
+ 'Popularpages' => array( 'ГӀараяьлла_агӀонаш' ),
'Preferences' => array( 'ГӀирсаш' ),
- 'Prefixindex' => array( 'Хьалха_агIонашан_цIераш_хIотто_йеза' ),
- 'Protectedpages' => array( 'ГIаролла_дина_агIонаш' ),
- 'Protectedtitles' => array( 'ГIаролла_дина_цIераш' ),
+ 'Prefixindex' => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
+ 'Protectedpages' => array( 'ГӀаролла_дина_агӀонаш' ),
+ 'Protectedtitles' => array( 'ГӀаролла_дина_цӀераш' ),
'Randompage' => array( 'Цахууш_нисйелла_агIо' ),
'Randomredirect' => array( 'Цахууш_нисделла_дIасахьажор' ),
'Recentchanges' => array( 'Керла_нисдарш' ),
'Recentchangeslinked' => array( 'Кхуьнца_долу_нисдарш' ),
'Revisiondelete' => array( 'ДӀадяхна_нисдарш' ),
'Search' => array( 'Лахар' ),
- 'Shortpages' => array( 'Ð\91оÑ\86оа_Ñ\8fззамаÑ\88' ),
+ 'Shortpages' => array( 'Боца_яззамаш' ),
'Specialpages' => array( 'Леррина_агӀонаш' ),
'Statistics' => array( 'Бухехьдерг' ),
'Tags' => array( 'Билгалонаш' ),
- 'Unblock' => array( 'БлокдӀаякхар' ),
+ 'Unblock' => array( 'БлокдӀаяккхар' ),
'Uncategorizedcategories' => array( 'Категореш_йоцу_категореш' ),
'Uncategorizedimages' => array( 'Категореш_йоцу_файлаш' ),
- 'Uncategorizedpages' => array( 'Категореш_йоцу_агIонаш' ),
+ 'Uncategorizedpages' => array( 'Категореш_йоцу_агӀонаш' ),
'Uncategorizedtemplates' => array( 'Категореш_йоцу_кепаш' ),
'Undelete' => array( 'МеттахӀоттор' ),
'Unlockdb' => array( 'БлокдӀаякхар_ХБ' ),
'Unusedtemplates' => array( 'Лелош_доцу_кепаш' ),
'Upload' => array( 'Файл_чуяккхар' ),
'UploadStash' => array( 'ДӀахьулйина_файл_чуяккхар' ),
- 'Userlogin' => array( 'ЧÑ\83валаÑ\80/Ñ\8fлар' ),
- 'Userlogout' => array( 'Ð\90Ñ\80авалаÑ\80/Ñ\8fлар' ),
+ 'Userlogin' => array( 'ЧÑ\83далар' ),
+ 'Userlogout' => array( 'Ð\90Ñ\80адалар' ),
'Userrights' => array( 'Бакъона_урхалладар' ),
'Version' => array( 'Верси' ),
'Wantedcategories' => array( 'Оьшуш_йолу_категореш' ),
'Wantedfiles' => array( 'Оьшуш_йолу_файлаш' ),
- 'Wantedpages' => array( 'Оьшуш_йолу_агIонаш' ),
+ 'Wantedpages' => array( 'Оьшуш_йолу_агӀонаш' ),
'Wantedtemplates' => array( 'Оьшуш_йолу_кепаш' ),
'Watchlist' => array( 'Тергаме_могӀам' ),
'Whatlinkshere' => array( 'Хьажоригаш_кхузе' ),
- 'Withoutinterwiki' => array( 'Ð\9aÑ\85еÑ\87Ñ\83_меÑ\82Ñ\82анаÑ\88ан_Ñ\85Ñ\8cажоÑ\80иг_йоÑ\86Ñ\83_агIонаш' ),
+ 'Withoutinterwiki' => array( 'ЮкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80агаÑ\88_йоÑ\86Ñ\83_агÓ\80онаш' ),
);
$magicWords = array(
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Хьост — «$1»',
'youhavenewmessages' => 'Хьуна кхечи $1 ($2).',
-'newmessageslink' => 'керла хаамаш',
-'newmessagesdifflink' => 'тӀаьххьара хийцамаш',
'youhavenewmessagesfromusers' => 'Хьуна кхачанна $1 {{PLURAL:$3|$3 декъашхочунгара|$3 декъашхошкара|$3 декъашхошкара}} ($2).',
'youhavenewmessagesmanyusers' => 'Хьона еъна $1 дукху декъашхошкар ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|керла хаам}}',
'virus-unknownscanner' => 'йозуш йоцу антивирус:',
# Login and logout pages
-'logouttext' => "'''Ð¥Ñ\8cо аÑ\80авела/ела.'''
-Хьан йиш ю {{grammar:genitive|{{SITENAME}}}} чохь хьой ца вовзийташ/йовзийташ болх бан я <span class='plainlinks'>[$1 кхин чувала/яла ]</span> хьой чохь хила цӀарца я кхин цӀарца.
-Цхьа йолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
+'logouttext' => "'''Ð\90Ñ\85Ñ\8cа болÑ\85 дÓ\80абеÑ\80зийна.'''
+
+Цхьайолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
'welcomeuser' => 'Марша ДогӀийла, $1!',
'yourname' => 'Декъашхочун цӀе:',
'userlogin-yourname' => 'Декъашхочун цӀе',
'right-nominornewtalk' => 'агӀонашкахь къезиг нисдарш цахиларо хуьлуьйту керла хаамийн хӀоттам',
'right-apihighlimits' => 'API-дехарш кхочушдан кӀезиг дихкар',
'right-writeapi' => 'дӀаяздеш лелойо API',
-'right-delete' => 'агӀош дӀаяхар',
+'right-delete' => 'агӀонаш дӀаяхар',
'right-bigdelete' => 'еха хийцаман истори йолу агӀонаш дӀаяхар',
'right-deletelogentry' => 'тептар чура билгала дӀаяздарш дӀадахар а меттахӀиттадар а.',
'right-deleterevision' => 'агӀонийн билгала версеш дӀаяхар а меттахӀиттаяр а',
'recentchanges-label-minor' => 'Хlара нисдинарг къастийна жимо долушсан',
'recentchanges-label-bot' => 'ХӀара нисдар шаболх бечо дина',
'recentchanges-label-unpatrolled' => 'ХӀара нисдар хӀинца цхьано патрулировать дина дац',
+'recentchanges-legend-newpage' => '$1 — керла агlо',
'rcnote' => "{{PLURAL:$1|Тlаьххьара '''$1''' хийцам|Тlаьххьара '''$1''' хийцамаш|Тlаьххьара '''$1''' хийцамаш}} за '''$2''' {{PLURAL:$2|де|дийнахь|дийнахь}}, оцу хан чохь $5 $4.",
'rcnotefrom' => "Лахахь гайтина тӀера '''$2''' хийцамаш ('''$1''' къезиг).",
'rclistfrom' => 'Гайта хийцам оцу $1.',
Декъашхо къастичи, цун керла файлаш гойту.',
'listfiles_search_for' => 'Лаха хIуман цIарца:',
'imgfile' => 'файл',
-'listfiles' => 'Файлийн могÓ\80ам',
+'listfiles' => 'ФайлаÑ\88',
'listfiles_date' => 'Терахь',
'listfiles_name' => 'Файлан цӀе',
'listfiles_user' => 'Декъашхо',
'filerevert-success' => "Юхаерзина файл '''[[Media:$1|$1]]''' оцу [$4 верси $3, $2].",
# File deletion
+'filedelete' => '$1 — дӀаяккхар',
'filedelete-legend' => 'ДӀаяккха файл',
'filedelete-intro' => "Хьо файл '''[[Media:$1|$1]]''' дӀаяккха гӀерта цунна массо истори цхьан.",
'filedelete-comment' => 'Бахьан:',
'emailuser' => 'Декъашхочун хааман кехат',
'emailuser-title-target' => 'Декъашхочунга кехат яздар',
'emailuser-title-notarget' => 'Декъашхочунга кехат яздар',
+'emailpagetext' => 'ХӀокху агӀона гӀоьнца йиш ю {{GENDER:$1|декъашхочун}} электронан почте хаам бахьийта.
+Хьоьга жоп лур ду ахьа [[Special:Preferences|хьайн гӀирса чу]] дӀаяздина долу адрес тӀе.',
'defemailsubject' => 'Хаам {{grammar:genitive|{{SITENAME}}}} чура бу',
'emailusername' => 'Декъашхочун цӀе:',
'emailusernamesubmit' => 'ДӀадахьийта',
'emailfrom' => 'Хьаьнгара',
'emailto' => 'Хьаьнга:',
'emailmessage' => 'Хаам:',
+'emailsend' => 'ДӀадахьийта',
+'emailccme' => 'Соьга а кхосса хааман копи.',
'emailsent' => 'Кехат дӏадахьийтина',
'emailsenttext' => 'Хьан электроннан хаам дӏабахьийтина.',
'allmessagesdefault' => 'Шаьшха йоза',
'allmessagescurrent' => 'Карарчу хенан йоза',
'allmessagestext' => 'ХӀара «MediaWiki» цӀерийн меттигера системан хаамийн могӀа бу.
-Хьайна MediaWiki тая лууш делахь, дехар до, проект [//translatewiki.net translatewiki.net] [//www.mediawiki.org/wiki/Localisation юьйцучу хьажа].',
+Хьайна MediaWiki тая лууш делахь, дехар до, проект [//translatewiki.net translatewiki.net] [https://www.mediawiki.org/wiki/Localisation юьйцучу хьажа].',
'allmessages-filter-legend' => 'Литтар',
'allmessages-filter' => 'Литтар оцу хьола хийцамца:',
'allmessages-filter-unmodified' => 'Хийцан йоцурш',
# External editor support
'edit-externally' => 'Рéдаккха хlокху хlуман, арахьара диллагlарам лелош',
-'edit-externally-help' => '(мадарра хьажа. оцу [//www.mediawiki.org/wiki/Manual:External_editors куьйгалийца дlахlотторе])',
+'edit-externally-help' => '(мадарра хьажа. оцу [https://www.mediawiki.org/wiki/Manual:External_editors куьйгалийца дlахlотторе])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'массо',
# Special:SpecialPages
'specialpages' => 'Леррина агlонаш',
-'specialpages-note' => '----
-* Гуттарлера белха агlонаш.
+'specialpages-note' => '* Гуттарлера белха агlонаш.
* <strong class="mw-specialpagerestricted">Кlеззиг таронаш йолу леррина агlонаш.</strong>',
'specialpages-group-maintenance' => 'Жамlаш гlирса хьашташ кхочушдар',
'specialpages-group-other' => 'Кхин гlуллакхан агlонаш',
'limitreport-expansiondepth' => 'Шордаларан уггар йокха кӀоргалла',
'limitreport-expensivefunctioncount' => 'АгӀона хӀоттам къасторан «еза» функцеш',
+# Special:ExpandTemplates
+'expandtemplates' => 'Кепаш схьаястар',
+'expand_templates_output' => 'Хилам',
+'expand_templates_remove_comments' => 'ДӀаяха комментареш',
+'expand_templates_preview' => 'Хьалха муха ю хьажа',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Gikuha gikan sa "$1"',
'youhavenewmessages' => 'Aduna kay $1 ($2).',
-'newmessageslink' => 'bag-ong mensahe',
-'newmessagesdifflink' => 'ulahing pag-usab',
'youhavenewmessagesmulti' => 'Adunay kay bag-ong mensahe sa $1',
'editsection' => 'usba',
'editold' => 'usba',
'preferences' => 'Mga preperensiya',
'mypreferences' => 'Akong preperensiya',
'prefs-edits' => 'Gidaghanon sa nausab:',
-'prefsnologin' => 'Wala maka-log-in',
-'prefsnologintext' => 'Kinahanglan ikaw <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} naka-log-in]</span> aron ma-set ang imong mga preperensiya.',
'changepassword' => 'Usba ang pasword',
'prefs-skin' => 'Panit',
'skin-preview' => 'Paunang tan-aw',
# External editor support
'edit-externally' => 'Usba kining payl gamit ang eksternal nga aplikasyon',
-'edit-externally-help' => '(Tan-awa ang [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa dugang nga impormasyon)',
+'edit-externally-help' => '(Tan-awa ang [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] para sa dugang nga impormasyon)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tanan',
* @author Jatrobat
* @author Magalahi
* @author MisterWiki
+ * @author Shirayuki
*/
$namespaceNames = array(
'ok' => 'OK',
'retrievedfrom' => 'Ginen "$1"',
'youhavenewmessages' => 'Guåha $1 ($2).',
-'newmessageslink' => 'mannuebu na mensåhe',
-'newmessagesdifflink' => 'tinilaika mas nuebu',
'youhavenewmessagesmulti' => 'Guåha nuebu mensahe-mu gi $1',
'editsection' => 'tulaika',
'editold' => 'tulaika',
'preferences' => "I ga'ña-mu",
'mypreferences' => "I ga'ña-hu",
'prefs-edits' => 'Numirun tinilaika:',
-'prefsnologin' => "Ti ma'log in",
-'prefsnologintext' => "Un nesisita [[Special:UserLogin|muna'log in]] para un tulaika i ga'ña-mu muna'sesetbi.",
'changepassword' => 'Tulaika password',
'prefs-skin' => 'Låssas',
'skin-preview' => "Na'annok",
# External editor support
'edit-externally' => 'Tulaika i atkibu yan un aplikasion sanhiyong',
-'edit-externally-help' => 'Hånao para [//www.mediawiki.org/wiki/Manual:External_editors i plantan chinachalani] para mas infotmasion.',
+'edit-externally-help' => 'Hånao para [https://www.mediawiki.org/wiki/Manual:External_editors i plantan chinachalani] para mas infotmasion.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todu',
'subcategories' => 'ژێرپۆلەکان',
'category-media-header' => 'میدیای پۆلی «$1»',
'category-empty' => "''ئەم پۆلە ھەنووکە ھیچ پەڕە یان پەڕگەیەک لە خۆ ناگرێت.''",
-'hidden-categories' => '{{PLURAL:$1|Ù¾Û\86Ù\84Û\8c شاراÙ\88Û\95|Ù¾Û\86Ù\84Û\8c شاراÙ\88Û\95}}',
+'hidden-categories' => '{{PLURAL:$1|Ù¾Û\86Ù\84Û\8c شارداÙ\88Û\95|Ù¾Û\86Ù\84Û\95 شارداÙ\88Û\95کاÙ\86}}',
'hidden-category-category' => 'پۆلە شاردراوەکان',
'category-subcat-count' => '{{PLURAL:$2|ئەم پۆلە تەنھا ژێرپۆلی خوارەوەی تێدایە.| ئەم پۆلە ئەم {{PLURAL:$1|ژێرپۆلەی|$1 ژێرپۆلانەی}} خوارەوەی تێدایە، لە کۆی سەرجەم $2 دانە.}}',
'category-subcat-count-limited' => 'ئەم هاوپۆلە {{PLURAL:$1|ژێرهاوپۆلی}} لەخۆ گرتووە.',
'backlinksubtitle' => '→ $1',
'retrievedfrom' => 'وەرگیراو لە «$1»',
'youhavenewmessages' => '$1ت ھەیە ($2).',
-'newmessageslink' => 'پەیامی نوێ',
-'newmessagesdifflink' => 'دوایین گۆڕانکاری',
'youhavenewmessagesfromusers' => 'لە {{PLURAL:$3|بەکارھێنەرێک|$3 بەکارھێنەران}} $1ت ھەیە ($2).',
'youhavenewmessagesmanyusers' => '$1ت لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
ئەمە بڕێجار کاتێ ڕوو ئەدات کە لە خزمەتی پرۆکسی سەر وێب کەڵک وەر بگریت.",
'editing' => 'دەستکاریکردنی $1',
'creating' => 'دروستکردنی $1',
-'editingsection' => 'دەستکاریکردنی: $1 (بەش)',
-'editingcomment' => 'دەستکاریکردنی $1 (بەشی نوێ)',
+'editingsection' => 'دەستکاریکردنی $1 (بەش)',
+'editingcomment' => 'دەستکاریکردنی $1 (بەشی نوێ)',
'editconflict' => 'کێشەی دەستکاری: $1',
'explainconflict' => "کەسێکی تر ئەم پەڕەیە گۆڕیوە لەو کاتەوە تۆ دەستکاریکردنیت دەستپێکردووە.
بەشی سەرەوەی دەق، شێوازی ئێستای پەڕەکە لە خۆ ئەگرێت.
'searchmenu-new' => "'''لەم ویکییەدا پەڕەی « [[:$1]] » دروست بکە!'''",
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|گەڕیان لە پەڕەکانی بەم پێشگرەوە]]',
'searchprofile-articles' => 'پەڕە بە ناوەڕۆکەکان',
-'searchprofile-project' => 'پەڕەکانی یارمەتی و پڕۆژە',
+'searchprofile-project' => 'پەڕەکانی یارمەتی و پرۆژە',
'searchprofile-images' => 'ڕەنگاڵە',
'searchprofile-everything' => 'ھەموو شتێک',
'searchprofile-advanced' => 'پێشکەوتوو',
'searchall' => 'ھەموو',
'showingresults' => "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
'showingresultsnum' => "لە خوارەوە {{PLURAL:$3|'''١''' ئەنجام|'''$3''' ئەنجام}} دەبینن کە لە ئەنجامی ژمارە '''$2'''ەوە دەست{{PLURAL:$3|پێدەکات|پێدەکەن}}",
-'showingresultsheader' => "{{PLURAL:$5|ئەنجامی '''$1''' لە '''$3'''|ئەنجامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''",
+'showingresultsheader' => "{{PLURAL:$5|ئاکامی '''$1''' لە '''$3'''|ئاکامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''",
'nonefound' => "'''تێبینی''': لە حاڵەتی بنچینەیی تەنھا لە ھەندێک لە بۆشاییناوەکان گەڕان دەکرێت.
وشەی ''all:'' بکە بە پێشگری پرسەکە بۆ گەڕان لە نێو ھەموو کەرستەکان (پەڕەکانی وتووێژ، داڕێژەکان و هتد)، یان بۆشاییناوێکی دڵخواز وەک پێشگر بەکار بێنە.",
'search-nonefound' => 'ھیچ ئاکامێک کە بە داواکارییەکەت بخوا نەدۆزرایەوە.',
'powersearch' => 'پێشکەوتوو بگەڕێ',
'powersearch-legend' => 'گەڕانی پێشکەوتوو',
-'powersearch-ns' => 'گەڕان لە بۆشاییناوەکانی:',
-'powersearch-redir' => 'ڕەوانەکراوەکان لیست بکرێن',
+'powersearch-ns' => 'گەڕان لە بۆشاییی ناوەکانی:',
+'powersearch-redir' => 'ڕەوانەکەرەکان پێرست بکە',
'powersearch-field' => 'گەڕان بۆ',
-'powersearch-togglelabel' => 'پشکنینی:',
+'powersearch-togglelabel' => 'تاوتوێ بکە:',
'powersearch-toggleall' => 'ھەموو',
'powersearch-togglenone' => 'ھیچیان',
'search-external' => 'گەڕانی دەرەکی',
'preferences' => 'ھەڵبژاردەکان',
'mypreferences' => 'ھەڵبژاردەکان',
'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
-'prefsnologin' => 'لەژوورەوە نیت',
-'prefsnologintext' => 'بۆ دانانی هەڵبژاردەکانی بەکارهێنەر دەبێ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} بچیتە ژوورەوە]</span>.',
'changepassword' => 'تێپەڕوشە بگۆڕە',
'prefs-skin' => 'پێستە',
'skin-preview' => 'پێش بینین',
'recentchanges-label-minor' => 'ئەمە دەستکارییەکی بچووکە',
'recentchanges-label-bot' => 'ئەم دەستکاریە لە لایەن بۆتەوە پێک هاتووە',
'recentchanges-label-unpatrolled' => 'ئەم دەستکارییە ھێشتا پاس نەدراوە',
+'recentchanges-legend-newpage' => '$1 - لاپەڕەی نوێ',
'rcnote' => "لە خوارەوەدا {{PLURAL:$1|'''۱''' گۆڕانکاری |دوایین '''$1''' گۆڕانکارییەکان}} لە دوایین {{PLURAL:$2|ڕۆژ|'''$2''' ڕۆژەوە}} ، تا $5، $4 دەبینن.",
'rcnotefrom' => "ئەوی خوارەوە گۆڕانکارییەکانە لە '''$2'''ەوە (ھەتا '''$1''' نیشاندراو).",
'rclistfrom' => 'گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $1',
'sp-contributions-newbies' => 'تەنھا بەشدارییەکانی بەکارھێنەرە تازەکان نیشان بدە',
'sp-contributions-newbies-sub' => 'لە بەکارھێنەرە تازەکانەوە',
-'sp-contributions-newbies-title' => 'هاوبەشیەکانی بەکارهێنەر بۆ هەژمارە نوێکان',
+'sp-contributions-newbies-title' => 'بەشدارییەکانی بەکارھێنەر بۆ ھەژمارە نوێکان',
'sp-contributions-blocklog' => 'لۆگی بەربەستن',
'sp-contributions-deleted' => 'بەشدارییە سڕاوەکان',
'sp-contributions-uploads' => 'بارکردنەکان',
'cant-move-user-page' => 'ڕێگەت پێنەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).',
'cant-move-to-user-page' => 'ڕێگەت پێنەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).',
'newtitle' => 'بۆ ناوی نوێی:',
-'move-watch' => 'ئەم پەڕەیە بخە ژێر چاودێری',
+'move-watch' => 'پەڕەی سەرچاوە و مەبەست بخە ژێر چاودێری',
'movepagebtn' => 'ئەم پەڕەیە بگوازەوە',
'pagemovedsub' => 'گواستنەوە بە سەرکەوتوویی جێبەجێ کرا',
'movepage-moved' => "'''«$1» گوازرایەوە بۆ «$2»'''",
'allmessagesdefault' => 'دەقی بنەڕەتی',
'allmessagescurrent' => 'دەقی ھەنووکە',
'allmessagestext' => 'ئەمە لیستێکە لە پەیامەکانی بەردەست لە بۆشاییناوی میدیاویکی.
-تکایە سەردانی [//www.mediawiki.org/wiki/Localisation ناوچەییکردنی میدیاویکی] و [//translatewiki.net translatewiki.net] بکە ئەگەر دەتەوێ لە ناوچەییکردنی میدیاویکی بە گشتی بەشداری بکەیت.',
+تکایە سەردانی [https://www.mediawiki.org/wiki/Localisation ناوچەییکردنی میدیاویکی] و [//translatewiki.net translatewiki.net] بکە ئەگەر دەتەوێ لە ناوچەییکردنی میدیاویکی بە گشتی بەشداری بکەیت.',
'allmessagesnotsupportedDB' => "ئەم لاپەڕە ناتوانی بەکاربێت لەبەر ئەوەی '''\$wgUseDatabaseMessages''' لەکار خستراوە.",
'allmessages-filter-legend' => 'پاڵێو',
'allmessages-filter-unmodified' => 'نەگۆڕدراو',
# External editor support
'edit-externally' => 'دەستکاریی ئەم پەڕەیە بکە بە بەکارھێنانی پڕۆگرامێکی دەرەکی',
-'edit-externally-help' => '(بۆ زانیاریی زیاتر سەیری [//www.mediawiki.org/wiki/Manual:External_editors ڕێنماییەکانی دامەزراندن] بکە)',
+'edit-externally-help' => '(بۆ زانیاریی زیاتر سەیری [https://www.mediawiki.org/wiki/Manual:External_editors ڕێنماییەکانی دامەزراندن] بکە)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ھەموو',
# Special:SpecialPages
'specialpages' => 'پەڕە تایبەتەکان',
-'specialpages-note' => '----
-* پەڕە تایبەتە ئاسایییەکان.
+'specialpages-note' => '* پەڕە تایبەتە ئاسایییەکان.
* <span class="mw-specialpagerestricted">پەڕە تایبەتە بەرگریلێکراوەکان.</span>',
'specialpages-group-maintenance' => 'ڕاپۆرتەکانی چاکسازی',
'specialpages-group-other' => 'پەڕە تایبەتەکانی دیکە',
'ok' => 'Sige',
'retrievedfrom' => 'Nakuha halin sa "$1"',
'youhavenewmessages' => 'May ara ka sang $1 ($2).',
-'newmessageslink' => 'mga bag-o nga mensahe',
-'newmessagesdifflink' => 'katapusan nga pag-ilis',
'youhavenewmessagesmulti' => 'May mga bag-o ka nga mensahe sa $1',
'editsection' => 'bag-uhon',
'editold' => 'bag-uhon',
# External editor support
'edit-externally' => 'Islan ang mini nga file gamit ang panluwas nga aplikasyon',
-'edit-externally-help' => '(Tan-awa ang [//www.mediawiki.org/wiki/Manual:External_editors mga pama-agi sa paghanda kag pag-ayos] para sa mga dugang nga impormasyon)',
+'edit-externally-help' => '(Tan-awa ang [https://www.mediawiki.org/wiki/Manual:External_editors mga pama-agi sa paghanda kag pag-ayos] para sa mga dugang nga impormasyon)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tanan',
'ok' => 'Ок',
'retrievedfrom' => 'Менба – "$1"',
'youhavenewmessages' => 'Янъы $1 бар ($2).',
-'newmessageslink' => 'беянатынъыз',
-'newmessagesdifflink' => 'музакере саифенъизнинъ сонъки денъиштирильмеси',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башкъа бир къулланыджыдан|$3 къулланыджыдан}} $1 бар. ($2)',
'youhavenewmessagesmanyusers' => 'Бир къач къулланыджыдан $1 бар. ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|янъы беянатынъыз|янъы беянатларынъыз}}',
'preferences' => 'Сазламалар',
'mypreferences' => 'Сазламалар',
'prefs-edits' => 'Денъиштирмелер сайысы:',
-'prefsnologin' => 'Отурым ачмадынъыз',
-'prefsnologintext' => 'Шахсий сазламаларынъызны денъиштирмек ичюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} отурым ачмакъ]</span> керексинъиз.',
'changepassword' => 'Пароль денъиштир',
'prefs-skin' => 'Ресимлеме',
'skin-preview' => 'Бакъып чыкъув',
'recentchanges-label-minor' => 'Бу, кичик бир денъиштирме',
'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъиштирмеси',
'recentchanges-label-unpatrolled' => 'Бу денъиштирме аля даа тешкерильмеген',
+'recentchanges-legend-newpage' => '$1 - янъы саифе',
'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъиштирме:",
'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъиштирмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
'rclistfrom' => '$1 тарихындан берли япылгъан денъиштирмелерни косьтер',
'allmessagesdefault' => 'Оригиналь метин',
'allmessagescurrent' => 'Шимди къулланылгъан метин',
'allmessagestext' => 'Ишбу джедвель MediaWiki-де мевджут олгъан бутюн система беянатларынынъ джедвелидир.
-MediaWiki интерфейсининъ чешит тиллерге терджиме этювде иштирак этмеге истесенъиз [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ве [//translatewiki.net translatewiki.net] саифелерине зиярет этинъиз.',
+MediaWiki интерфейсининъ чешит тиллерге терджиме этювде иштирак этмеге истесенъиз [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ве [//translatewiki.net translatewiki.net] саифелерине зиярет этинъиз.',
# Thumbnails
'thumbnail-more' => 'Буют',
# External editor support
'edit-externally' => 'Файл узеринде компьютеринъизде булунгъан программалар иле денъишикликлер япынъыз',
-'edit-externally-help' => '(Даа зияде малюмат ичюн [//www.mediawiki.org/wiki/Manual:External_editors бу саифеге] (Инглиздже) бакъып оласынъыз.)',
+'edit-externally-help' => '(Даа зияде малюмат ичюн [https://www.mediawiki.org/wiki/Manual:External_editors бу саифеге] (Инглиздже) бакъып оласынъыз.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'эписини',
'ok' => 'Ok',
'retrievedfrom' => 'Menba – "$1"',
'youhavenewmessages' => 'Yañı $1 bar ($2).',
-'newmessageslink' => 'beyanatıñız',
-'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}}',
'preferences' => 'Sazlamalar',
'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',
'prefs-skin' => 'Resimleme',
'skin-preview' => 'Baqıp çıquv',
'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',
+'recentchanges-legend-newpage' => '$1 - yañı saife',
'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',
'allmessagesdefault' => 'Original metin',
'allmessagescurrent' => 'Şimdi qullanılğan metin',
'allmessagestext' => 'İşbu cedvel MediaWikide mevcut olğan bütün sistema beyanatlarınıñ cedvelidir.
-MediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege isteseñiz [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ve [//translatewiki.net translatewiki.net] saifelerine ziyaret etiñiz.',
+MediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege isteseñiz [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ve [//translatewiki.net translatewiki.net] saifelerine ziyaret etiñiz.',
# Thumbnails
'thumbnail-more' => 'Büyüt',
# External editor support
'edit-externally' => 'Fayl üzerinde kompyuteriñizde bulunğan programmalar ile deñişiklikler yapıñız',
-'edit-externally-help' => '(Daa ziyade malümat içün [//www.mediawiki.org/wiki/Manual:External_editors bu saifege] (İnglizce) baqıp olasıñız.)',
+'edit-externally-help' => '(Daa ziyade malümat içün [https://www.mediawiki.org/wiki/Manual:External_editors bu saifege] (İnglizce) baqıp olasıñız.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'episini',
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Citováno z „$1“',
'youhavenewmessages' => 'Máte $1 ($2).',
-'newmessageslink' => 'nové zprávy',
-'newmessagesdifflink' => 'rozdíl oproti předchozí verzi',
'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|jiného uživatele|$3 jiných uživatelů}} ($2).',
'youhavenewmessagesmanyusers' => 'Máte $1 od mnoha dalších uživatelů ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|novou zprávu|nové zprávy}}',
-'newmessagesdifflinkplural' => 'poslední {{PLURAL:$1|změna|změny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|novou zprávu|999=nové zprávy}}',
+'newmessagesdifflinkplural' => 'poslední {{PLURAL:$1|změna|999=změny}}',
'youhavenewmessagesmulti' => 'Na $1 máte nové zprávy',
'editsection' => 'editovat',
'editold' => 'editovat',
'invalidtitle-knownnamespace' => 'Neplatný název se jmenným prostorem „$2“ a textem „$3“',
'invalidtitle-unknownnamespace' => 'Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“',
'exception-nologin' => 'Nejste přihlášen(a)',
-'exception-nologin-text' => 'Tato stránka nebo akce vyžaduje, abyste byli na této wiki přihlášeni.',
+'exception-nologin-text' => 'Pro přístup na tuto stránku nebo k této akci se prosím [[Special:Userlogin|přihlaste]].',
+'exception-nologin-text-manual' => 'Pro přístup na tuto stránku nebo k této akci se musíte $1.',
# Virus scanner
'virus-badscanner' => "Špatná konfigurace: neznámý antivirový program: ''$1''",
'revdelete-hide-user' => 'Uživatelské jméno / IP adresa',
'revdelete-hide-restricted' => 'Utajit data i před správci',
'revdelete-radio-same' => '(neměnit)',
-'revdelete-radio-set' => 'Viditelný',
-'revdelete-radio-unset' => 'Skrytý',
+'revdelete-radio-set' => 'Skrytý',
+'revdelete-radio-unset' => 'Viditelný',
'revdelete-suppress' => 'Utajit data i před správci',
'revdelete-unsuppress' => 'Odstranit omezení na vrácené verze',
'revdelete-log' => 'Důvod:',
'preferences' => 'Nastavení',
'mypreferences' => 'Nastavení',
'prefs-edits' => 'Počet editací:',
-'prefsnologin' => 'Nejste přihlášen(a)!',
-'prefsnologintext' => 'Pokud chcete měnit uživatelská nastavení, musíte se <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} přihlásit]</span>.',
+'prefsnologintext2' => 'Pro změnu uživatelských nastavení se musíte $1.',
'changepassword' => 'Změna hesla',
'prefs-skin' => 'Vzhled',
'skin-preview' => 'Náhled',
'prefs-help-recentchangescount' => 'Týká se posledních změn, historie stránek a protokolovacích záznamů.',
'prefs-help-watchlist-token2' => 'Toto je tajný klíč k webovému kanálu vašich sledovaných stránek. Kdokoli, kdo bude tento klíč znát, bude moci váš seznam sledovaných stránek číst, takže ho nešiřte.
[[Special:ResetTokens|Kliknutím sem ho můžete reinicializovat.]]',
-'savedprefs' => 'Vaše nastavení bylo uloženo.',
+'savedprefs' => 'Nastavení byla uložena.',
'timezonelegend' => 'Časové pásmo:',
'localtime' => 'Místní čas:',
'timezoneuseserverdefault' => 'Použít časové pásmo wiki ($1)',
'recentchanges-label-minor' => 'Toto je malá editace',
'recentchanges-label-bot' => 'Tuto editaci provedl bot',
'recentchanges-label-unpatrolled' => 'Tato změna dosud nebyla prověřena',
+'recentchanges-legend-newpage' => '$1 – nová stránka',
'rcnote' => 'Níže {{plural:$1|je poslední|jsou poslední|je posledních}} <strong>$1</strong> {{plural:$1|změna|změny|změn}} za {{PLURAL:$2|poslední|poslední|posledních}} <strong>$2</strong> {{plural:$2|den|dny|dnů}} před $4, $5.',
'rcnotefrom' => 'Níže {{PLURAL:$1|je|jsou|je}} nejvýše <b>$1</b> {{PLURAL:$1|změna|změny|změn}} od <b>$2</b>.',
'rclistfrom' => 'Ukázat nové změny, počínaje od $1',
e-mailem: $PAGEEDITOR_EMAIL
na wiki: $PAGEEDITOR_WIKI
-Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
+Do doby, než stránku navštívíte jako přihlášený uživatel, vám další oznámení k této stránce nebudou zasílána. Případně si můžete vynulovat příznaky ve svém seznamu sledovaných stránek.
- S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
+S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
--
Změnit nastavení e-mailových oznámení můžete na
'allmessagesdefault' => 'Původní text',
'allmessagescurrent' => 'Aktuální text',
'allmessagestext' => 'Toto je seznam všech hlášení dostupných ve jmenném prostoru MediaWiki.
-Pokud si přejete přispívat k lokalizaci softwaru MediaWiki, navštivte [//www.mediawiki.org/wiki/Localisation lokalizační stránku na mediawiki.org] a [//translatewiki.net server translatewiki.net].',
+Pokud si přejete přispívat k lokalizaci softwaru MediaWiki, navštivte [https://www.mediawiki.org/wiki/Localisation lokalizační stránku na mediawiki.org] a [//translatewiki.net server translatewiki.net].',
'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages není podporováno, neboť wgUseDatabaseMessages je vypnuto.',
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter' => 'Filtr podle stavu:',
'tooltip-undo' => '„Zrušit editaci“ otevře okno editace, které neobsahuje změny provedené v rušené editaci. Je možné doplnit zdůvodnění do shrnutí editace.',
'tooltip-preferences-save' => 'Uložit nastavení',
'tooltip-summary' => 'Zadejte stručné shrnutí',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/* Zde uvedené CSS bude ovlivňovat všechny styly */',
'svg-long-desc' => 'soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
'svg-long-desc-animated' => 'Animovaný soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
'svg-long-error' => 'Neplatný soubor SVG: $1',
-'show-big-image' => 'Obrázek ve vyšším rozlišení',
+'show-big-image' => 'Původní soubor',
'show-big-image-preview' => 'Velikost tohoto náhledu: $1.',
'show-big-image-other' => '{{PLURAL:$2|Jiné|Jiná}} rozlišení: $1.',
'show-big-image-size' => '$1 × $2 pixelů',
# External editor support
'edit-externally' => 'Editovat tento soubor v externím programu',
-'edit-externally-help' => '(Více informací najdete v [//www.mediawiki.org/wiki/Manual:External_editors nápovědě pro nastavení].)',
+'edit-externally-help' => '(Více informací najdete v [https://www.mediawiki.org/wiki/Manual:External_editors nápovědě pro nastavení].)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'všechny',
# Separators for various lists, etc.
'ellipsis' => '…',
'percent' => '$1 %',
+'quotation-marks' => '„$1“',
# Multipage image navigation
'imgmultipageprev' => '← předchozí stránka',
'version-hook-subscribedby' => 'Volán z',
'version-version' => '(Verze $1)',
'version-license' => 'Licence',
-'version-poweredby-credits' => "Tato wiki běží na '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Tato wiki běží na '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
'version-poweredby-others' => 'další',
'version-poweredby-translators' => 'překladatelé na translatewiki.net',
'version-credits-summary' => 'Následujícím lidem bychom rádi poděkovali za jejich příspěvky [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Speciální stránky',
-'specialpages-note' => '----
-* Normální speciální stránky
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normální speciální stránky
* <span class="mw-specialpagerestricted">Speciální stránky s vyhrazeným přístupem</span>',
'specialpages-group-maintenance' => 'Údržba',
'specialpages-group-other' => 'Ostatní',
'limitreport-expansiondepth' => 'Největší hloubka expanze',
'limitreport-expensivefunctioncount' => 'Počet náročných funkcí parseru',
+# Special:ExpandTemplates
+'expandtemplates' => 'Substituce šablon',
+'expand_templates_intro' => 'Tato speciální stránka vezme text a rekurzivně rozbalí všechny použité šablony.
+Také rozbalí podporované funkce parseru jako
+<code><nowiki>{{</nowiki>#language:…}}</code> a proměnné jako
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+V podstatě rozbalí prakticky všechno v dvojitých složených závorkách.',
+'expand_templates_title' => 'Název stránky kvůli kontextu pro {{FULLPAGENAME}} apod.:',
+'expand_templates_input' => 'Vstupní text:',
+'expand_templates_output' => 'Výstup',
+'expand_templates_xml_output' => 'Výstup XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Odstranit komentáře',
+'expand_templates_remove_nowiki' => 'Potlačit ve výsledku značky <nowiki>',
+'expand_templates_generate_xml' => 'Zobrazit syntaktický strom v XML',
+'expand_templates_preview' => 'Náhled',
+
);
'ok' => 'Jo!',
'retrievedfrom' => 'Z "$1"',
'youhavenewmessages' => 'Môsz $1 ($2).',
-'newmessageslink' => 'nowe wiadła',
-'newmessagesdifflink' => 'slédnô zmiana',
'youhavenewmessagesmulti' => 'Môsz nowé klëczi: $1',
'editsection' => 'Edicëjô',
'editold' => 'Edicëjô',
'preferences' => 'Preferencëje',
'mypreferences' => 'Mòje nastôwë',
'prefs-edits' => 'Lëczba edicëjów:',
-'prefsnologin' => 'Felënk logòwóniô',
'changepassword' => 'Zmiana parolë',
'prefs-skin' => 'Wëzdrzatk',
'skin-preview' => 'Pòdzérk',
'allmessagesdefault' => 'Domëslny tekst',
'allmessagescurrent' => 'Aktualny tekst',
'allmessagestext' => 'To je zestôwk systemòwëch ògłosów przistãpnëch w rumie mionów MediaWiki.
-Proszã zazdrzë na [//www.mediawiki.org/wiki/Localisation Lokalizacëjô MediaWiki] ë [//translatewiki.net translatewiki.net] jeżlë chcesz dolmaczëc softwôrã MediaWiki.',
+Proszã zazdrzë na [https://www.mediawiki.org/wiki/Localisation Lokalizacëjô MediaWiki] ë [//translatewiki.net translatewiki.net] jeżlë chcesz dolmaczëc softwôrã MediaWiki.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nie mòże bëc brëkòwónô, temù że '''\$wgUseDatabaseMessages''' je wëłączony.",
# Thumbnails
# External editor support
'edit-externally' => 'Editëjë nen lopk brëkùjąc bùtnowi aplikacëji',
-'edit-externally-help' => '(Zdrzë na [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] dlô dobëcô wicy wëdowiédzë).',
+'edit-externally-help' => '(Zdrzë na [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] dlô dobëcô wicy wëdowiédzë).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'wszëtczé',
'pagetitle' => '$1 · {{SITENAME}}',
'retrievedfrom' => 'поѩто иꙁ ⁖ $1 ⁖',
'youhavenewmessages' => '$1 тєбѣ напьсанꙑ сѫтъ ($2)',
-'newmessageslink' => 'нови напьсаниꙗ',
-'newmessagesdifflink' => 'послѣдьнꙗ мѣна',
'newmessageslinkplural' => '{{PLURAL:$1|ново напьсаниѥ|нова напьсании|новꙑ напьсаниꙗ}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|послѣдьнꙗ мѣна|послѣдьни мѣни|послѣдьн҄ь мѣнъ}}',
'editsection' => 'исправи',
# External editor support
'edit-externally' => 'дѣла иꙁмѣнѥниѥ вънѣщьниимь орѫдиѥмь',
-'edit-externally-help' => '(ꙁьри [//www.mediawiki.org/wiki/Manual:External_editors помощь] вѧщєи плирофорїѩ дѣлꙗ)',
+'edit-externally-help' => '(ꙁьри [https://www.mediawiki.org/wiki/Manual:External_editors помощь] вѧщєи плирофорїѩ дѣлꙗ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'вьсꙗ',
'ok' => 'OK',
'retrievedfrom' => 'Çăлкуç — «$1»',
'youhavenewmessages' => 'Сирĕн $1 пур ($2).',
-'newmessageslink' => 'çĕнĕ пĕлтерӳсем',
-'newmessagesdifflink' => 'юлашки улшăну',
'youhavenewmessagesmulti' => '$1-та çĕнĕ пĕлтерӳсем пур.',
'editsection' => 'тӳрлет',
'editold' => 'тӳрлет',
'preferences' => 'Ĕнерлевсем',
'mypreferences' => 'Ман ĕнерлевсем',
'prefs-edits' => 'Тӳрлетӳсен шучĕ:',
-'prefsnologin' => 'Эсир сайта кĕмен',
'changepassword' => 'Пароле улăштар',
'prefs-skin' => 'Ерешленӳ',
'skin-preview' => 'Малтанхи курăну',
'recentchanges' => 'Улшăнусем',
'recentchanges-legend' => 'Çĕнĕ улшăнусен ĕнерлевĕ',
'recentchanges-label-bot' => 'Ку улшăнăва бот тунă',
+'recentchanges-legend-newpage' => '$1 — çĕнĕ страница',
'rcnote' => 'Юлашки <strong>$2</strong> кун хушшинчи <strong>$1</strong> улшăнусем. Халě пěтěмпе <strong>{{NUMBEROFARTICLES}}</strong> статья.',
'rclistfrom' => 'Юлашки улшăнусене $1 вăхăтран пуçласа кăтартнă',
'rcshowhideminor' => 'пĕчĕк тӳрлетӳсене $1',
'ok' => 'Iawn',
'retrievedfrom' => 'Wedi dod o "$1"',
'youhavenewmessages' => 'Mae gennych chi $1 ($2).',
-'newmessageslink' => 'Neges(eueon) newydd',
-'newmessagesdifflink' => 'y newid diweddaraf',
'youhavenewmessagesfromusers' => 'Mae gennych $1 oddi wrth {{PLURAL:$3||ddefnyddiwr arall|$2 ddefnyddiwr arall|$3 defnyddiwr arall|$3 defnyddiwr arall|$3 defnyddiwr arall}} ($2).',
'youhavenewmessagesmanyusers' => 'Mae gennych $1 oddi wrth lu o ddefnyddwyr eraill ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|neges newydd|neges newydd|negeseuon newydd}}',
'invalidtitle-knownnamespace' => 'Teitl annilys o\'r enw "$3" yn y parth "$2"',
'invalidtitle-unknownnamespace' => 'Teitl annilys ag iddi\'r rhif parth anhysbys $1 a\'r enw "$2"',
'exception-nologin' => 'Nid ydych wedi mewngofnodi',
-'exception-nologin-text' => "Rhaid mewngofnodi i'r wici er mwyn gweld y dudalen neu gyflawni'r weithred.",
+'exception-nologin-text' => "[[Special:Userlogin|Mewngofnodwch]] er mwyn gweld y dudalen neu gyflawni'r weithred.",
+'exception-nologin-text-manual' => "Mae angen $1 er mwyn gweld y dudalen neu gyflawni'r weithred.",
# Virus scanner
'virus-badscanner' => "Cyfluniad gwael: sganiwr firysau anhysbys: ''$1''",
Fe fydd gweinyddwyr eraill {{SITENAME}} o hyd yn gallu gweld yr hyn a guddiwyd. Fe allant ei ddatguddio trwy ddefnyddio'r dudalen arbennig hon, cyhyd ag nad oes cyfyngiadau ychwanegol wedi eu gosod.",
'revdelete-confirm' => "Byddwch gystal â chadarnhau eich bod yn bwriadu gwneud hyn, eich bod yn deall yr effaith a gaiff, a'ch bod yn ei wneud yn ôl y [[{{MediaWiki:Policy-url}}|y polisi]].",
'revdelete-suppress-text' => "'''Dim ond''' yn yr achosion sy'n dilyn y dylech fentro cuddio gwybodaeth:
+* Gwybodaeth a all fod yn enllib
* Gwybodaeth bersonol anaddas
*: ''cyfeiriad cartref, rhif ffôn, rhif yswiriant cenedlaethol, ayb.''",
'revdelete-legend' => 'Gosod cyfyngiadau ar y gallu i weld',
'revdelete-hide-user' => 'Enw defnyddiwr/IP y golygydd',
'revdelete-hide-restricted' => 'Gosod y cyfyngiadau gweld data ar weinyddwyr yn ogystal ag eraill',
'revdelete-radio-same' => '(peidier â newid)',
-'revdelete-radio-set' => 'Gweladwy',
-'revdelete-radio-unset' => 'Cudd',
+'revdelete-radio-set' => 'Cudd',
+'revdelete-radio-unset' => 'Gweladwy',
'revdelete-suppress' => 'Atal data oddi wrth Weinyddwyr yn ogystal ag eraill',
'revdelete-unsuppress' => "Tynnu'r cyfyngiadau ar y golygiadau a adferwyd",
'revdelete-log' => 'Rheswm:',
'preferences' => 'Dewisiadau',
'mypreferences' => 'Dewisiadau',
'prefs-edits' => 'Nifer y golygiadau:',
-'prefsnologin' => 'Nid ydych wedi mewngofnodi',
-'prefsnologintext' => 'Rhaid i chi <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} fewngofnodi]</span> er mwyn gosod eich dewisiadau defnyddiwr.',
+'prefsnologintext2' => 'Mae angen $1 er mwyn gosod eich dewisiadau personol.',
'changepassword' => 'Newid y cyfrinair',
'prefs-skin' => 'Gwedd',
'skin-preview' => 'Rhagolwg',
'recentchanges-label-minor' => 'Mân olygiad',
'recentchanges-label-bot' => 'Golygwyd gan fot',
'recentchanges-label-unpatrolled' => "Nid yw'r golygiad hwn wedi derbyn ymweliad patrôl eto",
+'recentchanges-legend-newpage' => '$1 - tudalen newydd',
'rcnote' => "Isod mae'r '''$1''' newid diweddaraf yn ystod y {{PLURAL:$2|diwrnod|diwrnod|deuddydd|tridiau|'''$2''' diwrnod|'''$2''' diwrnod}} diwethaf, hyd at $5, $4.",
'rcnotefrom' => "Isod rhestrir pob newid ers '''$2''' (hyd at '''$1''' ohonynt).",
'rclistfrom' => 'Dangos newidiadau newydd, gan ddechrau ers $1',
e-bost: $PAGEEDITOR_EMAIL
wici: $PAGEEDITOR_WIKI
-Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
+Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi tra eich bod wedi mewngofnodi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
Sustem hysbysu {{SITENAME}}
'allmessagesdefault' => 'Testun rhagosodedig',
'allmessagescurrent' => 'Testun cyfredol',
'allmessagestext' => "Dyma restr o'r holl negeseuon yn y parth MediaWici.
-Os ydych am gyfrannu at y gwaith o gyfieithu ar gyfer holl prosiectau MediaWiki ar y cyd, mae croeso i chi ymweld â [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net].",
+Os ydych am gyfrannu at y gwaith o gyfieithu ar gyfer holl prosiectau MediaWiki ar y cyd, mae croeso i chi ymweld â [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net].",
'allmessagesnotsupportedDB' => "Nid yw '''{{ns:special}}:PobNeges''' yn cael ei gynnal gan fod '''\$wgUseDatabaseMessages''' wedi ei ddiffodd.",
'allmessages-filter-legend' => 'Hidl',
'allmessages-filter' => 'Hidlo yn ôl eu cyflwr addasu:',
Gellir ychwanegu rheswm dros y dadwneud yn y crynodeb.',
'tooltip-preferences-save' => 'Rhodder y dewisiadau ar gadw',
'tooltip-summary' => 'Rhowch grynodeb byr',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
# Metadata
'notacceptable' => "Dydy gweinydd y wici ddim yn medru rhoi'r data mewn fformat darllenadwy i'ch cleient.",
'pageinfo-length' => 'Hyd y dudalen (beitiau)',
'pageinfo-article-id' => 'ID y dudalen',
'pageinfo-language' => 'Iaith cynnwys y dudalen',
+'pageinfo-content-model' => 'Ffurf cynnwys y dudalen',
'pageinfo-robot-policy' => 'Rhestrwyd gan robot',
'pageinfo-robot-index' => 'Caniateir',
'pageinfo-robot-noindex' => 'Gwrthodedig',
'svg-long-desc' => 'Ffeil SVG, maint mewn enw $1 × $2 picsel, maint y ffeil: $3',
'svg-long-desc-animated' => 'Ffeil SVG animeiddiedig, maint mewn enw $1 × $2 picsel, maint y ffeil: $3',
'svg-long-error' => 'Ffeil SVG annilys: $1',
-'show-big-image' => 'Maint llawn',
+'show-big-image' => 'Y ffeil gwreiddiol',
'show-big-image-preview' => 'Maint y rhagolwg: $1.',
'show-big-image-other' => '{{PLURAL:$2|Datrysiad arall|Datrysiad arall|Datrysiadau eraill|Datrysiadau eraill|Datrysiadau eraill|Datrysiadau eraill}}: $1.',
'show-big-image-size' => '$1 × $2 picsel',
# External editor support
'edit-externally' => 'Golygwch y ffeil gyda rhaglen allanol',
-'edit-externally-help' => '(Gwelwch y [//www.mediawiki.org/wiki/Manual:External_editors cyfarwyddiadau gosod] am fwy o wybodaeth)',
+'edit-externally-help' => '(Gwelwch y [https://www.mediawiki.org/wiki/Manual:External_editors cyfarwyddiadau gosod] am fwy o wybodaeth)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'holl',
'confirm-unwatch-button' => 'Iawn',
'confirm-unwatch-top' => 'Tynner y dudalen hon oddi ar eich rhestr wylio?',
+# Separators for various lists, etc.
+'quotation-marks' => "'$1'",
+
# Multipage image navigation
'imgmultipageprev' => "← i'r dudalen gynt",
'imgmultipagenext' => "i'r dudalen nesaf →",
'version-hook-subscribedby' => 'Tanysgrifwyd gan',
'version-version' => '(Fersiwn $1)',
'version-license' => 'Trwydded',
-'version-poweredby-credits' => "Mae'r wici hwn wedi'i nerthu gan '''[//www.mediawiki.org/ MediaWiki]''', hawlfraint © 2001 - $1 $2.",
+'version-poweredby-credits' => "Mae'r wici hwn wedi'i nerthu gan '''[https://www.mediawiki.org/ MediaWiki]''', hawlfraint © 2001 - $1 $2.",
'version-poweredby-others' => 'eraill',
'version-poweredby-translators' => 'cyfieithwyr translatewiki.net',
'version-credits-summary' => 'Hoffem gydnabod cyfraniad y bobl canlynol i [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Tudalennau arbennig',
-'specialpages-note' => '----
-* Tudalennau arbennig ar gael i bawb.
-* <span class="mw-specialpagerestricted">Tudalennau arbennig cyfyngedig.</span>
-* <span class="mw-specialpagecached">Tudalennau arbennig wedi eu cynhyrchu o\'r celc (gallant fod heb eu harfer rhagor).</span>',
+'specialpages-note-top' => 'Allwedd',
+'specialpages-note' => '* Tudalennau arbennig ar gael i bawb.
+* <span class="mw-specialpagerestricted">Tudalennau arbennig cyfyngedig.</span>',
'specialpages-group-maintenance' => 'Adroddiadau cynnal a chadw',
'specialpages-group-other' => 'Eraill',
'specialpages-group-login' => 'Mewngofnodi / creu cyfrif',
* @author Qaqqalik
* @author Remember the dot
* @author Sarrus
+ * @author Shirayuki
* @author Simeondahl
* @author Sir48
* @author Slomox
'ok' => 'OK',
'retrievedfrom' => 'Hentet fra "$1"',
'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye beskeder',
-'newmessagesdifflink' => 'ændringer siden sidste visning',
'youhavenewmessagesfromusers' => 'Du har $1 fra {{PLURAL:$3|en anden bruger| $3 brugere}} ($2).',
'youhavenewmessagesmanyusers' => 'Du har $1 fra mange brugere ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|en ny besked|nye beskeder}}',
'gotaccount' => 'Har du allerede en konto? $1.',
'gotaccountlink' => 'Log på',
'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
-'userlogin-resetpassword-link' => 'Nulstil din adgangskode',
+'userlogin-resetpassword-link' => 'Glemt din adgangskode?',
'helplogin-url' => 'Help:Logge på',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjælp til at logge på]]',
'userlogin-loggedin' => 'Du er allerede logget på som {{GENDER:$1|$1}}.
'passwordsent' => 'En ny adgangskode er sendt til e-mailadressen, som er registreret for "$1".
Du bør logge på og ændre din adgangskode straks efter du har modtaget e-mailen.',
'blocked-mailpassword' => 'Din IP-adresse er spærret for ændring af sider. For at forhindre misbrug, er det heller ikke muligt, at bestille en ny adgangskode.',
-'eauthentsent' => 'En bekræftelsesmail er sendt til den angivne e-mailadresse.
+'eauthentsent' => 'En e-mailbekræftelse er sendt til den angivne e-mailadresse.
-Før en e-mail kan modtages af andre brugere af {{SITENAME}}-mailfunktionen, skal adressen og dens tilhørsforhold til denne bruger bekræftes. Følg venligst anvisningerne i denne mail.',
+Før flere e-mails bliver sendt til kontoen, skal du følge instruktionerne i e-mailen, for at bekræfte at kontoen rent faktisk er din.',
'throttled-mailpassword' => 'Indenfor {{PLURAL:$1|den sidste time|de sidste $1 timer}} er der allerede sendt en ny adgangskode. For at forhindre misbrug af funktionen, kan der kun bestilles en ny adgangskode én gang for hver {{PLURAL:$1|time|$1 timer}}.',
'mailerror' => 'Fejl ved afsendelse af e-mail: $1',
'acct_creation_throttle_hit' => 'Besøgende med samme IP-adresse som dig har oprettet {{PLURAL:$1|en konto|$1 kontoer}} det sidste døgn, og det er ikke tilladt at oprette flere.
Derfor kan besøgende ikke oprette flere kontoer fra denne IP-adresse i øjeblikket.',
-'emailauthenticated' => 'Din e-mailadresse blev bekræftet $2 $3.',
+'emailauthenticated' => 'Din e-mailadresse blev bekræftet den $2 kl. $3.',
'emailnotauthenticated' => 'Din e-mailadresse er endnu ikke bekræftet.
Ingen e-mail vil blive sendt for de følgende funktioner.',
'noemailprefs' => 'Angiv en e-mailadresse, så følgende funktioner er til rådighed.',
'revdelete-text' => "'''Slettede versioner vil fortsat vises i sidehistorik og på logsider, men dele af deres indhold vil ikke være offentligt tilgængeligt.'''
Andre administratorer på {{SITENAME}} vil fortsat være i stand til at se det skjulte indhold og kan gendanne det igen, medmindre der laves yderligere restriktioner.",
'revdelete-confirm' => 'Vær venlig at bekræfte at du vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].',
-'revdelete-suppress-text' => "Skjulning bør '''kun''' bruges i de følgende tilfælde:
+'revdelete-suppress-text' => "Der bør '''kun''' skjules i de følgende tilfælde:
+* Potentielt injurierende oplysninger
* Upassende personlige oplysninger
-*: ''hjemadresser og -telefonnumre, CPR-numre og lign.''",
+*: ''hjemmeadresser og -telefonnumre, CPR-numre og lign.''",
'revdelete-legend' => 'Fastlægge begrænsninger for versionerne:',
-'revdelete-hide-text' => 'Skjul versionens tekst',
+'revdelete-hide-text' => 'Tekst for versionen',
'revdelete-hide-image' => 'Skjul filindhold',
'revdelete-hide-name' => 'Skjul handling og mål',
-'revdelete-hide-comment' => 'Skjul ændringskommentar',
-'revdelete-hide-user' => 'Skjul brugerens brugernavn/IP',
+'revdelete-hide-comment' => 'Redigeringssammendrag',
+'revdelete-hide-user' => 'Brugerens brugernavn/IP-adrsse',
'revdelete-hide-restricted' => 'Skjul også informationen for administratorer',
'revdelete-radio-same' => '(ikke ændre)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nej',
+'revdelete-radio-set' => 'Skjult',
+'revdelete-radio-unset' => 'Synligt',
'revdelete-suppress' => 'Skjul også informationen for administratorer',
'revdelete-unsuppress' => 'Ophæv begrænsninger for gendannede versioner',
'revdelete-log' => 'Begrundelse:',
'preferences' => 'Indstillinger',
'mypreferences' => 'Indstillinger',
'prefs-edits' => 'Antal redigeringer:',
-'prefsnologin' => 'Ikke logget på',
-'prefsnologintext' => 'Du skal være <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logget på]</span> for at ændre brugerindstillinger.',
'changepassword' => 'Skift adgangskode',
'prefs-skin' => 'Udseende',
'skin-preview' => 'Forhåndsvisning',
'recentchanges-label-minor' => 'Dette er en mindre ændring',
'recentchanges-label-bot' => 'Denne redigering blev udført af en bot',
'recentchanges-label-unpatrolled' => 'Denne redigering er endnu ikke blevet patruljeret',
+'recentchanges-legend-newpage' => '$1 – ny side',
'rcnote' => "Herunder ses {{PLURAL:$1|'''1''' ændring|de sidste '''$1''' ændringer}} fra {{PLURAL:$2|i dag|de sidste '''$2''' dage}} fra den $4, kl. $5.",
'rcnotefrom' => "Nedenfor er op til '''$1''' ændringer siden '''$2''' vist.",
'rclistfrom' => 'Vis nye ændringer startende fra $1',
'ipblocklist-no-results' => 'Den angivene IP-addresse eller brugernavn er ikke blokeret.',
'blocklink' => 'bloker',
'unblocklink' => 'ophæv blokering',
-'change-blocklink' => 'ændr blokering',
+'change-blocklink' => 'ændring af blokering',
'contribslink' => 'bidrag',
'emaillink' => 'send e-mail',
'autoblocker' => 'Du er automatisk blokeret, fordi du deler IP-adresse med "[[User:$1|$1]]".
'allmessagesdefault' => 'Standardtekst',
'allmessagescurrent' => 'Nuværende tekst',
'allmessagestext' => 'Dette er en liste med alle systembeskeder i MediaWiki-navnerummet.
-Besøg venligst [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisering] og [//translatewiki.net translatewiki.net] hvis du ønsker at bidrage til den generelle lokalisering (oversættelse og andre lokale tilpasninger) af MediaWiki.',
+Besøg venligst [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisering] og [//translatewiki.net translatewiki.net] hvis du ønsker at bidrage til den generelle lokalisering (oversættelse og andre lokale tilpasninger) af MediaWiki.',
'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages ikke understøttet fordi wgUseDatabaseMessages er slået fra.',
'allmessages-filter-legend' => 'Filtrér',
'allmessages-filter' => 'Filtrér efter tilpasningsstatus:',
'pageinfo-length' => 'Sidelængde (i bytes)',
'pageinfo-article-id' => 'Side-ID',
'pageinfo-language' => 'Sprog for sideindholdet',
+'pageinfo-content-model' => 'Sidens indhold er',
'pageinfo-robot-policy' => 'Indeksering af robotter',
'pageinfo-robot-index' => 'Tilladt',
'pageinfo-robot-noindex' => 'Ikke tilladt',
'svg-long-desc' => 'SVG fil, basisstørrelse $1 × $2 punkters, størrelse: $3',
'svg-long-desc-animated' => 'Animeret SVG-fil, basisstørrelse $1 × $2 punkter, filstørrelse: $3',
'svg-long-error' => 'Ugyldig SVG-fil: $1',
-'show-big-image' => 'Version i større opløsning',
+'show-big-image' => 'Oprindelige fil',
'show-big-image-preview' => 'Størrelse af denne forhåndsvisning: $1.',
'show-big-image-other' => '{{PLURAL:$2|Anden opløsning|Andre opløsninger}}: $1.',
'show-big-image-size' => '$1 × $2 pixels',
# External editor support
'edit-externally' => 'Rediger denne fil med en ekstern editor',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors setup instruktionerne] for mere information)',
+'edit-externally-help' => '(Se [https://www.mediawiki.org/wiki/Manual:External_editors setup instruktionerne] for mere information)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alle',
'version-hook-subscribedby' => 'Brugt af',
'version-version' => '(Version $1)',
'version-license' => 'Licens',
-'version-poweredby-credits' => "Denne wiki er drevet af '''[//www.mediawiki.org/ MediaWiki ]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wiki er drevet af '''[https://www.mediawiki.org/ MediaWiki ]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'andre',
'version-poweredby-translators' => 'translatewiki.net oversættere',
'version-credits-summary' => 'Vi vil gerne anerkende følgende personer for deres bidrag til [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Omdirigering pga. fil, bruger eller udgave ID',
'redirect-legend' => 'Omstilling til en fil eller en side',
-'redirect-summary' => "Denne side omdirigerer en (hvis filnavnet er angivet), en side (hvis udgave ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet).",
+'redirect-summary' => "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].",
'redirect-submit' => 'Kør',
'redirect-lookup' => 'Slå op:',
'redirect-value' => 'Værdi:',
# Special:SpecialPages
'specialpages' => 'Specialsider',
-'specialpages-note' => '----
-* Normale specialsider.
+'specialpages-note' => '* Normale specialsider.
* <span class="mw-specialpagerestricted">Specialsider med begrænset adgang.</span>',
'specialpages-group-maintenance' => 'Vedligeholdelsesside',
'specialpages-group-other' => 'Andre specialsider',
'tags-hitcount-header' => 'Taggede ændringer',
'tags-active-yes' => 'Ja',
'tags-active-no' => 'Nej',
-'tags-edit' => 'Redigér',
+'tags-edit' => 'redigér',
'tags-hitcount' => '{{PLURAL:$1|en ændring|$1 ændringer}}',
# Special:ComparePages
'limitreport-expansiondepth' => 'Største udvidelsesdybde',
'limitreport-expensivefunctioncount' => 'Antal dyre parserfunktioner',
+# Special:ExpandTemplates
+'expandtemplates' => 'Udfold skabeloner',
+'expand_templates_intro' => 'Denne specialside tager en tekst og udfolder alle benyttede skabeloner rekursivt.
+Den udfolder også understøttede parserfunktioner så som
+<code><nowiki>{{</nowiki>#language:…}}</code> og variabler så som
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>
+Faktisk udfolder den stort set alt i dobbelte tuborgklammer.',
+'expand_templates_title' => 'Sammenhængstitel, for {{FULLPAGENAME}} osv.:',
+'expand_templates_input' => 'Inputtekst:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-kode',
+'expand_templates_ok' => 'Udfold',
+'expand_templates_remove_comments' => 'Fjern kommentarer',
+'expand_templates_remove_nowiki' => 'Undertryk <nowiki>-tags i resultatet',
+'expand_templates_generate_xml' => 'Vis analysetræ som XML',
+'expand_templates_preview' => 'Forhåndsvisning',
+
);
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Von „$1“',
'youhavenewmessages' => 'Du hast $1 ($2).',
-'newmessageslink' => 'neue Nachrichten',
-'newmessagesdifflink' => 'Letzte Änderung',
'youhavenewmessagesfromusers' => 'Du hast $1 von {{PLURAL:$3|einem anderen Benutzer|$3 Benutzern}} ($2).',
'youhavenewmessagesmanyusers' => 'Du hast $1 von vielen Benutzern ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|eine neue Nachricht|neue Nachrichten}}',
-'newmessagesdifflinkplural' => 'letzte {{PLURAL:$1|Änderung|Änderungen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|eine neue Nachricht|999=neue Nachrichten}}',
+'newmessagesdifflinkplural' => 'letzte {{PLURAL:$1|Änderung|999=Änderungen}}',
'youhavenewmessagesmulti' => 'Du hast neue Nachrichten: $1',
'editsection' => 'Bearbeiten',
'editold' => 'Bearbeiten',
'invalidtitle-knownnamespace' => 'Ungültiger Titel mit Namensraum „$2“ und Text „$3“',
'invalidtitle-unknownnamespace' => 'Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“',
'exception-nologin' => 'Nicht angemeldet',
-'exception-nologin-text' => 'Diese Seite oder Aktion erfordert, dass du auf diesem Wiki angemeldet bist.',
+'exception-nologin-text' => 'Du musst dich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.',
+'exception-nologin-text-manual' => 'Du musst dich $1, um auf diese Seite oder Aktion zugreifen zu können.',
# Virus scanner
'virus-badscanner' => "Fehlerhafte Konfiguration: unbekannter Virenscanner: ''$1''",
Andere Administratoren auf {{SITENAME}} haben Zugriff auf den versteckten Inhalt und können ihn mit der gleichen Seite wiederherstellen, sofern nicht zusätzliche Einschränkungen bestehen.",
'revdelete-confirm' => 'Bitte bestätige, dass du beabsichtigst, dies zu tun, die Konsequenzen verstehst und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tust.',
'revdelete-suppress-text' => "Unterdrückungen sollten '''nur''' in den folgenden Fällen vorgenommen werden:
+* Potentiell beleidigende Informationen
* Unangebrachte persönliche Informationen
*: ''Adressen, Telefonnummern, Sozialversicherungsnummern etc.''",
'revdelete-legend' => 'Setzen der Sichtbarkeitseinschränkungen',
'revdelete-hide-user' => 'Benutzername/IP-Adresse des Bearbeiters',
'revdelete-hide-restricted' => 'Daten sowohl vor Administratoren als auch anderen Benutzern unterdrücken',
'revdelete-radio-same' => '(nicht ändern)',
-'revdelete-radio-set' => 'Sichtbar',
-'revdelete-radio-unset' => 'Versteckt',
+'revdelete-radio-set' => 'Versteckt',
+'revdelete-radio-unset' => 'Sichtbar',
'revdelete-suppress' => 'Grund der Löschung auch vor Administratoren verstecken',
'revdelete-unsuppress' => 'Einschränkungen für wiederhergestellte Versionen aufheben',
'revdelete-log' => 'Grund:',
'preferences' => 'Einstellungen',
'mypreferences' => 'Einstellungen',
'prefs-edits' => 'Anzahl der Bearbeitungen:',
-'prefsnologin' => 'Nicht angemeldet',
-'prefsnologintext' => 'Du musst <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} angemeldet]</span> sein, um deine Einstellungen ändern zu können.',
+'prefsnologintext2' => 'Du musst dich $1, um Benutzereinstellungen festzulegen.',
'changepassword' => 'Passwort ändern',
'prefs-skin' => 'Benutzeroberfläche',
'skin-preview' => 'Vorschau',
'recentchanges-label-minor' => 'Kleine Änderung',
'recentchanges-label-bot' => 'Änderung durch einen Bot',
'recentchanges-label-unpatrolled' => 'Nicht-kontrollierte Änderung',
+'recentchanges-label-plusminus' => 'Die geänderte Seitengröße (Anzahl in Bytes)',
+'recentchanges-legend-newpage' => '(siehe auch die [[Special:NewPages|Liste neuer Seiten]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
'rcnote' => "{{PLURAL:$1|'''1''' Änderung|'''$1''' Änderungen}} in den {{PLURAL:$2|letzten 24 Stunden|letzten '''$2''' Tagen}}.
Stand: $4, $5 Uhr.",
'rcnotefrom' => "Angezeigt werden die Änderungen seit '''$2''' (max. '''$1''' Einträge).",
E-Mail: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
-Bei weiterer Aktivität auf der Seite werden dir so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.
+Bei weiterer Aktivität auf der Seite werden dir so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder angemeldet besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.
Dein freundliches {{SITENAME}}-Benachrichtigungssystem
'allmessagesdefault' => 'Standardtext',
'allmessagescurrent' => 'Aktueller Text',
'allmessagestext' => 'Dies ist eine Liste der MediaWiki-Systemtexte.
-Bitte besuche die Seiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern du dich an der Lokalisierung von MediaWiki beteiligen möchtest.',
+Bitte besuche die Seiten [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern du dich an der Lokalisierung von MediaWiki beteiligen möchtest.',
'allmessagesnotsupportedDB' => 'Diese Spezialseite steht nicht zur Verfügung, da sie über den Parameter <tt>$wgUseDatabaseMessages</tt> deaktiviert wurde.',
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter für angepassten Zustand:',
'tooltip-undo' => 'Macht lediglich diese eine Änderung rückgängig und zeigt das Resultat in der Vorschau an, damit in der Zusammenfassungszeile eine Begründung angegeben werden kann.',
'tooltip-preferences-save' => 'Einstellungen speichern',
'tooltip-summary' => 'Gib eine kurze Zusammenfassung ein.',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */',
'svg-long-desc' => 'SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3',
'svg-long-desc-animated' => 'Animierte SVG-Datei, Basisgröße $1 × $2 Pixel, Dateigröße: $3',
'svg-long-error' => 'Ungültige SVG-Datei: $1',
-'show-big-image' => 'Volle Auflösung',
+'show-big-image' => 'Originaldatei',
'show-big-image-preview' => 'Größe dieser Vorschau: $1.',
'show-big-image-other' => 'Weitere {{PLURAL:$2|Auflösung|Auflösungen}}: $1.',
'show-big-image-size' => '$1 × $2 Pixel',
# External editor support
'edit-externally' => 'Diese Datei mit einem externen Programm bearbeiten',
-'edit-externally-help' => '(weitere Informationen in den [//www.mediawiki.org/wiki/Manual:External_editors Installationsanweisungen])',
+'edit-externally-help' => '(weitere Informationen in den [https://www.mediawiki.org/wiki/Manual:External_editors Installationsanweisungen])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alle',
# Separators for various lists, etc.
'ellipsis' => '…',
'percent' => '$1 %',
+'quotation-marks' => '„$1“',
# Multipage image navigation
'imgmultipageprev' => '← vorherige Seite',
'version-version' => '(Version $1)',
'version-svn-revision' => '(Version $2)',
'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Diese Website nutzt '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Diese Website nutzt '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'andere',
'version-poweredby-translators' => 'Übersetzer von translatewiki.net',
'version-credits-summary' => 'Wir danken folgenden Personen für ihre Beiträge zu [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Spezialseiten',
-'specialpages-note' => '----
-* Reguläre Spezialseiten
-* <span class="mw-specialpagerestricted">Zugriffsbeschränkte Spezialseiten</span>
-* <span class="mw-specialpagecached">Gecachte Spezialseiten (Deren Inhalt ist möglicherweise veraltet.)</span>',
+'specialpages-note-top' => 'Legende',
+'specialpages-note' => '* Normale Spezialseiten.
+* <span class="mw-specialpagerestricted">Spezialseiten mit beschränktem Zugang.</span>',
'specialpages-group-maintenance' => 'Wartungslisten',
'specialpages-group-other' => 'Andere Spezialseiten',
'specialpages-group-login' => 'Benutzerkonto',
'rotate-comment' => 'Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn gedreht',
# Limit report
-'limitreport-title' => 'Parser-Profiling-Daten:',
+'limitreport-title' => 'Profilingdaten des Parsers:',
'limitreport-cputime' => 'CPU-Zeit-Nutzung',
'limitreport-cputime-value' => '{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}',
'limitreport-walltime' => 'Echtzeitnutzung',
'limitreport-expansiondepth-value' => '$1/$2',
'limitreport-expensivefunctioncount' => 'Anzahl aufwändiger Parserfunktionen',
+# Special:ExpandTemplates
+'expandtemplates' => 'Vorlagen expandieren',
+'expand_templates_intro' => 'Auf dieser Spezialseite kann Text eingegeben werden. Alle enthaltenen Vorlagen werden dabei rekursiv expandiert.
+Auch Parserfunktionen wie
+<code><nowiki>{{</nowiki>#language:…}}</code> und Variablen wie
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> werden ausgewertet –
+faktisch alles was in doppelten geschweiften Klammern enthalten ist.',
+'expand_templates_title' => 'Kontexttitel, für {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Eingabefeld:',
+'expand_templates_output' => 'Ergebnis',
+'expand_templates_xml_output' => 'XML-Ausgabe',
+'expand_templates_ok' => 'Okay',
+'expand_templates_remove_comments' => 'Kommentare entfernen',
+'expand_templates_remove_nowiki' => '<nowiki>-Tags in der Ausgabe unterdrücken',
+'expand_templates_generate_xml' => 'XML-Parser-Baum zeigen',
+'expand_templates_preview' => 'Vorschau',
+
);
* @author George Animal
* @author Gorizon
* @author Kaganer
+ * @author Marmase
* @author Mirzali
* @author Nemo bis
* @author Neribij
'editfont-serif' => 'Babetê serifi',
# Dates
-'sunday' => 'Kırê',
-'monday' => 'Dışeme',
-'tuesday' => 'Sêşeme',
-'wednesday' => 'Çeharşeme',
-'thursday' => 'Pancşeme',
-'friday' => 'Ã\8ane',
-'saturday' => 'Şeme',
-'sun' => 'Krê',
-'mon' => 'Dış',
-'tue' => 'Sêş',
+'sunday' => 'Bazar',
+'monday' => 'Berarek',
+'tuesday' => 'Telete',
+'wednesday' => 'Çarşeme',
+'thursday' => 'Panşeme',
+'friday' => 'Ã\89ne',
+'saturday' => 'Bahdé éni',
+'sun' => 'Baz',
+'mon' => 'Bbz',
+'tue' => 'Tlt',
'wed' => 'Çrş',
'thu' => 'Pşm',
'fri' => 'Êne',
-'sat' => 'Şem',
+'sat' => 'Bdé',
'january' => 'Çele',
-'february' => 'Sıbate',
-'march' => 'Adar',
-'april' => 'Nisane',
-'may_long' => 'Gulane',
+'february' => 'Zemherı',
+'march' => 'Mert',
+'april' => 'Lisan',
+'may_long' => 'Gúlan',
'june' => 'Heziran',
-'july' => 'Temuze',
-'august' => 'Tebaxe',
+'july' => 'Temuz',
+'august' => 'Ağustos',
'september' => 'Keşkelun',
-'october' => 'Tışrino Verên',
-'november' => 'Tışrino Peyên',
-'december' => 'Kanun',
+'october' => 'Cetan',
+'november' => 'Kelverdan',
+'december' => 'Gağand',
'january-gen' => 'Çele',
-'february-gen' => 'Sıbate',
-'march-gen' => 'Adar',
-'april-gen' => 'Nisane',
-'may-gen' => 'Gulane',
+'february-gen' => 'Zemherı',
+'march-gen' => 'Mert',
+'april-gen' => 'Lisan',
+'may-gen' => 'Gúlan',
'june-gen' => 'Heziran',
-'july-gen' => 'Temuze',
-'august-gen' => 'Tebaxe',
+'july-gen' => 'Temuz',
+'august-gen' => 'Ağustos',
'september-gen' => 'Keşkelun',
-'october-gen' => 'Tışrino Verên',
-'november-gen' => 'Tışrino Peyên',
-'december-gen' => 'Kanun',
+'october-gen' => 'Cetan',
+'november-gen' => 'Kelverdan',
+'december-gen' => 'Gağand',
'jan' => 'Çel',
'feb' => 'Sbt',
'mar' => 'Adr',
'apr' => 'Nsn',
'may' => 'Gln',
-'jun' => 'Hzr',
+'jun' => 'Hez',
'jul' => 'Tmz',
'aug' => 'Tbx',
'sep' => 'Kşk',
'december-date' => 'Kanun $1',
# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategoriye|Kategoriy}}',
-'category_header' => 'Pelê ke kategoriya "$1" derê',
+'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriy}}',
+'category_header' => 'Perré ke kategori da "$1" de yé',
'subcategories' => 'Kategoriyê bınêni',
'category-media-header' => 'Dosyeyê ke kategoriya "$1" derê',
'category-empty' => "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
'category-file-count' => '<noinclude>{{PLURAL:$2|Na kategoriye tenya dosyayanê cêrênan muhtewa kena.}}</noinclude>
*Na kategoriye de $2 dosyayan ra {{PLURAL:$1|yew dosya tenêka esta| $1 dosyey asenê}}.',
'category-file-count-limited' => '{{PLURAL:$1|Dosya cêrêne|$1 Dosyê cêrêni}} na kategoriye derê.',
-'listingcontinuesabbrev' => '(dewam)',
+'listingcontinuesabbrev' => 'dewam...',
'index-category' => 'Pelê endeksıni',
'noindex-category' => 'Pelê ke zerrekê cı çıniyo',
'broken-file-category' => 'Peleye ke gıreyê dosyeyanê ğeletan muhtewa kenê',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'about' => 'Heqa cı de',
+'about' => 'Heqdé cı',
'article' => 'Wesiqe',
'newwindow' => '(pençereyê newey de beno a)',
-'cancel' => 'Bıtexelne',
+'cancel' => 'Bıterkne',
'moredotdotdot' => 'Vêşi...',
'morenotlisted' => 'Vêşi lista nêbi...',
-'mypage' => 'Pele',
-'mytalk' => 'Werênayış',
+'mypage' => 'Per',
+'mytalk' => 'Vaten',
'anontalk' => 'Pela werênayışê nê IPy',
-'navigation' => 'Geyrayış',
+'navigation' => 'Pusula',
'and' => ' u',
# Cologne Blue skin
'qbfind' => 'Bıvêne',
'qbbrowse' => 'Rovete',
-'qbedit' => 'Bıvurne',
+'qbedit' => 'Timar ke',
'qbpageoptions' => 'Ena pele',
-'qbmyoptions' => 'Pelê mı',
+'qbmyoptions' => 'Peré mı',
'qbspecialpages' => 'Pelê xısusiy',
'faq' => 'PZP (Persê ke zehf persiyenê)',
'faqpage' => 'Project: PZP',
# Vector skin
'vector-action-addsection' => 'Mewzu vıraze',
'vector-action-delete' => 'Bestere',
-'vector-action-move' => 'Berê',
-'vector-action-protect' => 'Bıpawe',
+'vector-action-move' => 'Beré',
+'vector-action-protect' => 'Star ke',
'vector-action-undelete' => 'Esterıtışi peyser bıgê',
'vector-action-unprotect' => 'Starkerdışi bıvurne',
'vector-simplesearch-preference' => 'Çuweya cı geyreyış de rehater aktiv ke (Tenya vector skin de)',
-'vector-view-create' => 'Vıraze',
-'vector-view-edit' => 'Bıvurne',
-'vector-view-history' => 'Vurnayışê verêni',
-'vector-view-view' => 'Bıwane',
-'vector-view-viewsource' => 'Çımey bıvêne',
-'actions' => 'Kerdışi',
+'vector-view-create' => 'Qeyd bike',
+'vector-view-edit' => 'Binusî',
+'vector-view-history' => 'Versîyonê Verênî',
+'vector-view-view' => 'Biwanî',
+'vector-view-viewsource' => 'Çimeyî Bivînî',
+'actions' => 'Hereketi',
'namespaces' => 'Cayê namey',
'variants' => 'Varyanti',
'navigation-heading' => 'Menuya Navigasyoni',
-'errorpagetitle' => 'Xırab',
+'errorpagetitle' => 'Heta',
'returnto' => 'Peyser şo $1.',
'tagline' => '{{SITENAME}} ra',
-'help' => 'Peşti',
+'help' => 'Desteg',
'search' => 'Cı geyre',
'searchbutton' => 'Cı geyre',
'go' => 'Şo',
'searcharticle' => 'Şo',
'history' => 'Verora perer',
-'history_short' => 'Vurnayışê verêni',
+'history_short' => 'Verén',
'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
'printableversion' => 'Asayışê çapkerdışi',
'permalink' => 'Gıreyo jûqere',
'print' => 'Nusten ke',
-'view' => 'Bıvin',
+'view' => 'Bivînî',
'edit' => 'Bıvurnên',
-'create' => 'Vıraze',
+'create' => 'Binusî',
'editthispage' => 'Ena pele bıvurne',
'create-this-page' => 'Na pele bınuse',
'delete' => 'Bestere',
'undeletethispage' => 'Na perer mebesterne',
'undelete_short' => '{{PLURAL:$1|Yew vurnayışi|$1 Vurnayışan}} mestere',
'viewdeleted_short' => '{{PLURAL:$1|Yew vurnayışo esterıte|$1 Vurnayışanê esterıtan}} bımocne',
-'protect' => 'Bıpawe',
+'protect' => 'Star ke',
'protect_change' => 'bıvurne',
'protectthispage' => 'Ena pele bıpawe',
'unprotect' => 'Starkerdışi bıvurne',
'unprotectthispage' => 'Starkerdışe ena peler bıvurne',
'newpage' => 'Pera newiye',
'talkpage' => 'Ena pele sero werêne',
-'talkpagelinktext' => 'Mesac',
+'talkpagelinktext' => 'Vaten',
'specialpage' => 'Pela xısusiye',
'personaltools' => 'Hacetê şexsiy',
'postcomment' => 'Qısımo newe',
'articlepage' => 'Pela zerreki bıvêne',
-'talk' => 'Werênayış',
+'talk' => 'Vaten',
'views' => 'Asayışi',
'toolbox' => 'Haceti',
'userpage' => 'Pela karberi bıvêne',
'viewcount' => 'Ena pele {{PLURAL:$1|rae|$1 rey}} vêniya.',
'protectedpage' => 'Pela pawıtiye',
'jumpto' => 'Şo:',
-'jumptonavigation' => 'karfiyê',
+'jumptonavigation' => 'Pusula',
'jumptosearch' => 'cı geyre',
'view-pool-error' => 'Qaytê qısuri mekerên, serverê ma enıka zêde bar gırewto xo ser.
Hedê xo ra zêde karberi kenê ke seyrê na pele bıkerê.
'pool-errorunknown' => 'Xeta nêzanıtiye',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'Heqa {{SITENAME}}i de',
+'aboutsite' => 'Heqdé {{SITENAME}}',
'aboutpage' => 'Project:Heqdê cı',
'copyright' => 'Zerrekacı $1 bındı not biya.',
'copyrightpage' => '{{ns:project}}:Heqa telifi',
'disclaimers' => 'Redê mesuliyeti',
'disclaimerpage' => 'Project:Reddê mesuliyetê bıngey',
'edithelp' => 'Peştdariya vurnayışi',
-'helppage' => 'Help:Estêni',
+'helppage' => 'Help:Zerrek',
'mainpage' => 'Pera Seri',
-'mainpage-description' => 'Pela Seri',
+'mainpage-description' => 'Pera Seri',
'policy-url' => 'Project:Terzê hereketi',
'portal' => 'Portalê cemaeti',
'portal-url' => 'Project:Portalê cemaeti',
'backlinksubtitle' => '← $1',
'retrievedfrom' => '"$1" ra ard',
'youhavenewmessages' => 'To rê $1 esto ($2).',
-'newmessageslink' => 'mesacê şıma',
-'newmessagesdifflink' => 'vurnayışo peyên',
'youhavenewmessagesfromusers' => 'Zey $1 ra {{PLURAL:$3|zewbi karber|$3 karberi}} ($2) esto.',
'youhavenewmessagesmanyusers' => '$1 ra tay karberi ($2) dı estê.',
-'newmessageslinkplural' => '{{PLURAL:$1|yew mesac|mesacê newey}}',
-'newmessagesdifflinkplural' => 'peyni {{PLURAL:$1|vurnayış|vurnayışi}}',
+'newmessageslinkplural' => '{{PLURAL:$1|zew mesac|999=mesacê newey}}',
+'newmessagesdifflinkplural' => 'Peyén {{PLURAL:$1|vurnayış|999=vurnayışi}}',
'youhavenewmessagesmulti' => '$1 mesaco newe esto',
'editsection' => 'bıvurne',
'editold' => 'bıvurne',
'viewsourceold' => 'çımey cı bıvinê',
'editlink' => 'bıvurne',
-'viewsourcelink' => 'çımey bıvêne',
+'viewsourcelink' => 'Ã\87ımi bıvin',
'editsectionhint' => 'Leteyo ke bıvuriyo: $1',
'toc' => 'Sernameyê meselan',
'showtoc' => 'bımocne',
'sort-ascending' => 'Ratnayışê Zeydnayışi',
# Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Pele',
+'nstab-main' => 'Wesiqe',
'nstab-user' => 'Pera Karberi',
-'nstab-media' => 'Pela Medya',
-'nstab-special' => 'Pela xısusiye',
+'nstab-media' => 'Pera Medya',
+'nstab-special' => 'Pera bağsi',
'nstab-project' => 'Pera proci',
'nstab-image' => 'Dosya',
'nstab-mediawiki' => 'Mesac',
-'nstab-template' => 'Şablon',
+'nstab-template' => 'Tewre',
'nstab-help' => 'Pela peşti',
-'nstab-category' => 'Kategoriye',
+'nstab-category' => 'Kategori',
# Main script and global functions
'nosuchaction' => 'Fealiyeto wınasi çıniyo',
Seba lista pelanê xasanê vêrdeyan reca kena: [[Special:SpecialPages|{{int:specialpages}}]].',
# General errors
-'error' => 'Xırab',
-'databaseerror' => 'Xeta serveri',
+'error' => 'Ğeta',
+'databaseerror' => 'Ğetay ardoği',
'databaseerror-query' => 'Perskerdış:$1',
'databaseerror-function' => 'Fonksiyon: $1',
'databaseerror-error' => 'Xırab: $1',
'wrong_wfQuery_params' => 'wfQuery() parametreyo şaş<br />
Fonksiyon: $1<br />
Perse: $2',
-'viewsource' => 'Çımey bıvêne',
+'viewsource' => 'Çımi bıvin',
'viewsource-title' => "Cı geyrayışê $1'i bıvin",
'actionthrottled' => 'Kerden peysnaya',
'actionthrottledtext' => 'Riyê tedbirê anti-spami ra, wextê do kılmek de şıma nê fealiyeti nêşkenê zaf zêde bıkerê, şıma ki no hedi viyarna ra.
'customjsprotected' => 'Mısadeyê şıma çıniyo ke na pela Java Scripti bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.',
'mycustomcssprotected' => "Na pera CSS'i re tenya idarekari şene bıvurne",
'mycustomjsprotected' => "Na pera JavaScript'i re tenya idarekari şene bıvurne",
+'myprivateinfoprotected' => 'Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.',
+'mypreferencesprotected' => 'Terciha timar kerdışire icazeta şıam çıniya.',
'ns-specialprotected' => 'Pelê xısusiy nênê vurnayış.',
'titleprotected' => 'Eno [[User:$1|$1]] zerreyê ena peli nişeno vuriye.
Sebeb: "\'\'$2\'\'".',
'invalidtitle-knownnamespace' => 'Canemey "$2" u metnê "$3" xırabo',
'invalidtitle-unknownnamespace' => 'Sernameye nêşınasiya yana amraiya canameyo $1 u metno "$2" xırab',
'exception-nologin' => 'Şıma cıkewtış nêvıraşto',
-'exception-nologin-text' => 'Na pele ya zi nê karkerdışi rê nê wiki de cıkewtış icab keno.',
+'exception-nologin-text' => 'Na pera ya zi na karkerdışi de na wiki de [[Special:Userlogin|cıkewtış]] icab keno.',
# Virus scanner
'virus-badscanner' => "Eyaro şaş: no virus-cıgerayox nêzanyeno: ''$1''",
'logouttext' => "'''Şıma hesabra newke vicyay.'''
Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de hesabe şıma akerde aseno.",
-'welcomeuser' => 'Xeyr ameyê $1',
+'welcomeuser' => 'Xeyr amey, $1!',
'welcomecreation-msg' => 'Hesabê şıma abiyo.
[[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.',
'yourname' => 'Nameyê karberi:',
'userlogin-yourname' => 'Nameyê karberi',
-'userlogin-yourname-ph' => 'Nameyê xoye karberi cıkewe',
+'userlogin-yourname-ph' => 'Namey ğoyé karberi cı kewe',
'createacct-another-username-ph' => 'Namey karberi de fi',
'yourpassword' => 'Parola',
'userlogin-yourpassword' => 'Parola',
'gotaccount' => "Hesabê şıma esto? '''$1'''.",
'gotaccountlink' => 'Cı kewe',
'userlogin-resetlink' => 'Melumatê cıkewtışi xo vira kerdê?',
-'userlogin-resetpassword-link' => 'Parolaya xo reset ke',
+'userlogin-resetpassword-link' => 'To parola ke xo vira?',
'helplogin-url' => 'Help:Qeydbiyayış',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Desteg be qeydbiyayış ra]]',
'userlogin-createanother' => 'Zewbi hesab vıraz',
'mailerror' => 'Erşawıtışe xetayê e-posta: $1',
'acct_creation_throttle_hit' => 'Yew ten IP adresê şıma xebıtnayo u kewto no wiki, roco peyin de {{PLURAL:$1|1 hesab|$1 hesab}} vıraşto.
xulasa ney kesê ke IP adresê şıma xebıtneni hini nêeşkeni ney ra zêdêr hesab akeri.',
-'emailauthenticated' => "Adresê E-posta da şıma '''$2''' seate $3 dı kerdo araşt.",
-'emailnotauthenticated' => 'No format de nuştışê e-postayi qebul nêbeno.
-Yew formato meqbul de adresê e-posta bınuse ya zi veng bıverde.',
+'emailauthenticated' => 'E-postay şıma $2 sehat $3 dı biya araşt',
+'emailnotauthenticated' => 'Adresa e-pota da şıma qebul nébiya.
+Qandé céréna şımaré teba do nérışiyo.',
'noemailprefs' => 'Hesab biyo a.',
'emailconfirmlink' => 'E-postayê xo araşt kerê',
'invalidemailaddress' => 'No format de nuştışê e-postayi qebul nêbeno. Yew formato meqbul de adresê e-posta bınuse ya zi veng bıverde.',
'cannotchangeemail' => 'E-postay hesabi ena wiki sera nêvurneyêno.',
'emaildisabled' => 'Na site ra e-posta nêrışêno.',
-'accountcreated' => 'Hesab vıraciya',
+'accountcreated' => 'Hesab iycat bı',
'accountcreatedtext' => 'Qandê [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) hesabê karberi vıraziyayo.',
-'createaccount-title' => 'Qey {{SITENAME}} newe yew heab vıraştış',
+'createaccount-title' => 'Qandé {{SITENAME}} hesabé karberi iycat kerdış',
'createaccount-text' => 'Kesê, be e-posteyê şıma ra {{SITENAME}} ($4) de, ebe nameyê "$2" u parola "$3" ra yew hesab vıraşto.
Şıma gani cı kewê u parola xo nıka bıvurnê.',
'usernamehasherror' => 'Namey karberi de karakteri gani têmiyan ra mebê',
'resetpass_forbidden' => 'parolayi nêvuryayi',
'resetpass-no-info' => 'şıma gani hesab akere u hona bıeşke bırese cı',
'resetpass-submit-loggedin' => 'Parola bıvurne',
-'resetpass-submit-cancel' => 'Bıtexelne',
+'resetpass-submit-cancel' => 'Bıterkne',
'resetpass-wrong-oldpass' => 'parolayo parola maqbul niyo.
şıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.',
'resetpass-temp-password' => 'parolayo muweqet:',
'changeemail-none' => '(Çıno)',
'changeemail-password' => 'Parolaya şımaya {{SITENAME}}i:',
'changeemail-submit' => 'E-postay xo bıvurne',
-'changeemail-cancel' => 'Bıtexelne',
+'changeemail-cancel' => 'Bıterkne',
# Special:ResetTokens
'resettokens' => 'Reset fi ye',
# Edit pages
'summary' => "<font style=\"color:Blue\">'''Xulasa:'''</font>",
'subject' => 'Mewzu/sernuşte:',
-'minoredit' => "<font style=\"color:Green\">'''Eno vurnayışo de qıckeko'''</font>",
-'watchthis' => "<font style=\"color:Green\">'''Ena pele seyr ke'''</font>",
+'minoredit' => "'''Eno vurnayışo de qıckeko'''",
+'watchthis' => "'''Ena pele seyr ke'''",
'savearticle' => 'Pele qeyd ke',
'preview' => 'Verqayt',
'showpreview' => 'Verqayti bımocne',
'''hewna qayd nebı!'''",
'userinvalidcssjstitle' => "'''Teme:''' Mewzuyê \"\$1\" çıniyo.
Dosyanê be namey .css u .js'i de herfa werdiye bıgurêne, mesela herında {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.",
-'updated' => '(Newenyaya)',
+'updated' => '(Rozeneya)',
'note' => "'''Not:'''",
'previewnote' => "'''Xo vira mekerê ke ena yew verqayta.'''
Vurnayışê şıma hona qeyd nêbiyo!",
'recreate-moveddeleted-warn' => "'''Hişyari: no pel o ke şıma vırazeni vere cû vırazyayo.'''
Diqet bıkeri no vurnayişê şıma re gerek esto:",
-'moveddeleted-notice' => 'Ma ena pele wederna.
-Qe referansi logê wedernayışi bın de mocnayiya.',
+'moveddeleted-notice' => 'Na per besternyaya.
+Qeydé besternayışi uq hewadayışi cér dé deyayo.',
'log-fulllog' => 'Temamê rocaneyi bıvine',
'edit-hook-aborted' => 'Vurnayiş vınderiya.
Yew sebeb beyan nibı.',
'nextrevision' => 'Rewizyono newên →',
'currentrevisionlink' => 'Tewr halê rocaniye bımocne',
'cur' => 'ferq',
-'next' => 'badên',
+'next' => 'bahdoyên',
'last' => 'peyên',
'page_first' => 'verên',
'page_last' => 'peyên',
'histfirst' => 'Verênêr',
'histlast' => 'Peyênêr',
'historysize' => '({{PLURAL:$1|1 bayt|$1 bayti}})',
-'historyempty' => '(thal)',
+'historyempty' => '(veng)',
# Revision feed
'history-feed-title' => 'Tarixê çımraviyarnayışi',
'revdelete-nologid-text' => 'Şıma vıraştışê nê fonksiyoni rê ya yew cıkewtışo waşte diyar nêkerdo, ya ki çıkewtışo diyarkerde çıniyo.',
'revdelete-no-file' => 'Dosya diyarkerdiye çıniya.',
'revdelete-show-file-confirm' => 'Şıma eminê ke wazenê çımraviyarnayışê esterıtey na dosya "<nowiki>$1</nowiki>" $2 ra $3 de bıvênê?',
-'revdelete-show-file-submit' => 'Eya',
+'revdelete-show-file-submit' => 'E',
'revdelete-selected' => "'''[[:$1]]: ra {{PLURAL:$2|çımraviyarnayışo weçinıte|çımraviyarnayışê weçinıtey}}'''",
'logdelete-selected' => "'''{{PLURAL:$1|Qeydbiyayışo weçinıte|Qeydbiyayışê weçinıtey}}:'''",
'revdelete-text' => "'''Çımraviyarnayışê esterıtey u kerdışi hewna tarixê pele u qeydan de asenê, hema parçeyê zerrekê dinan areze nêbenê.'''
* Melumatê şexio bêmınasıb
*: ''adresa keyey u numreyê têlefoni, numreyê siğorta sosyale, uêb.''",
'revdelete-legend' => 'Şertanê vênayışi rone',
-'revdelete-hide-text' => 'Nuştey çımraviyarnayışi bınımne',
+'revdelete-hide-text' => 'Nuştey revizyoni',
'revdelete-hide-image' => 'zerreyê dosyay bınımnê',
'revdelete-hide-name' => "hedef u vaqa' bınımne",
-'revdelete-hide-comment' => 'kılmvatış memocne',
-'revdelete-hide-user' => 'Karber u IP ê ke vurnayiş kerdo bınım.',
+'revdelete-hide-comment' => 'Menıni timar ke',
+'revdelete-hide-user' => 'IP asresa/namey vırnoği',
'revdelete-hide-restricted' => 'Malumatan pa serkaran u karberan ra bınım.',
'revdelete-radio-same' => '(mevurne)',
-'revdelete-radio-set' => 'Eya',
-'revdelete-radio-unset' => 'Nê',
+'revdelete-radio-set' => 'Nımnaye',
+'revdelete-radio-unset' => 'Aseno',
'revdelete-suppress' => 'Hem ê binan ra hem zi serkaran ra malumatan bınım',
'revdelete-unsuppress' => 'reizyonê ke tepiya anciye serbest ker',
'revdelete-log' => 'Sebeb:',
'mergehistory-header' => 'No pel, reviyonê yew peli eşkeno yewna pelo newe de piyawano.
no vurnayişo ke şıma keni kontrol bıkere yew pelo kehen nêbo.',
'mergehistory-box' => 'revizyonê pelanî yew bike:',
-'mergehistory-from' => 'Pela çimeyî',
+'mergehistory-from' => 'Para Çımi:',
'mergehistory-into' => 'Pela destinasyonî',
'mergehistory-list' => 'tarixê vurnayîşî ke eşkeno yew bi.',
'mergehistory-merge' => '[[:$1]] qey ney revizyonê cêrini [[:$2]] şıma ekeni piyawani. Benatê wexto muwaqqet de piyayanayişê rezizyonan de tuşa radyo bıxebitne.',
'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
# Merge log
-'mergelog' => 'Logê yew kerdişî',
+'mergelog' => 'Qeydé zew kerdışi',
'pagemerge-logentry' => '[[$1]] u [[$2]] yew kerd (revizyonî heta $3)',
'revertmerge' => 'Abırnê',
'mergelogpagetext' => 'Cêr de yew liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.',
'lineno' => 'Xeta $1i:',
'compareselectedversions' => 'Rewizyonanê weçineyan pêver ke',
'showhideselectedversions' => 'Revizyonanê weçinıtan bımocne/bınımne',
-'editundo' => 'peyser bia',
+'editundo' => 'peyser bıgi',
'diff-empty' => '(Babetna niyo)',
'diff-multi' => '({{PLURAL:$1|Yew revizyono miyanên|$1 revizyonê miyanêni}} terefê {{PLURAL:$2|yew karberi|$2 karberan}} nêmocno)',
'diff-multi-manyusers' => '({{PLURAL:$1|jew timar kerdışo qıckeko|$1 timar kerdışo qıckeko}} timar kerdo, $2 {{PLURAL:$2|Karber|karberi}} memocne)',
Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.',
# Search results
-'searchresults' => 'Neticeyê geyrayışi',
+'searchresults' => 'Neticeya geyrayışi',
'searchresults-title' => 'Qandê "$1" neticeyê geyrayışi',
'searchresulttext' => 'Zerrey {{SITENAME}} de heqa cıgeyrayışi de seba melumat gırewtışi, şenay qaytê [[{{MediaWiki:Helppage}}|{{int:help}}]] ke.',
'searchsubtitle' => 'Tı semedê \'\'\'[[:$1]]\'\'\' cıgeyra. ([[Special:Prefixindex/$1|pelê ke pêro be "$1" ra dest niyaê pıra]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|pelê ke pêro be "$1"\' ra gırê xo esto]])',
'searchmenu-exists' => "''Ena 'Wikipediya de ser \"[[:\$1]]\" yew pel esto'''",
'searchmenu-new' => "''Na Wiki de pelay \"[[:\$1]]\" vıraze!'''",
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|pê eno prefix ser pelan de bigêre]]',
-'searchprofile-articles' => 'Pelê tedeestey',
-'searchprofile-project' => 'Pelê yardım u procey',
+'searchprofile-articles' => 'Perré muhteway',
+'searchprofile-project' => 'Pera Destegi uw Procan',
'searchprofile-images' => 'Multimedya',
-'searchprofile-everything' => 'Her çi',
-'searchprofile-advanced' => 'Raverşiyaye',
+'searchprofile-everything' => 'Heme çi',
+'searchprofile-advanced' => 'Ravérden',
'searchprofile-articles-tooltip' => '$1 de bigêre',
'searchprofile-project-tooltip' => '$1 de bigêre',
'searchprofile-images-tooltip' => 'Dosya cı geyr',
'search-suggest' => 'To va: $1',
'search-interwiki-caption' => 'Projey Bıray',
'search-interwiki-default' => '$1 neticeyan:',
-'search-interwiki-more' => '(hona)',
-'search-relatedarticle' => 'Eqreba',
+'search-interwiki-more' => '(véşi)',
+'search-relatedarticle' => 'Eleqeyın',
'mwsuggest-disable' => 'Tewsiyay AJAXi bıgê',
'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
'searchrelated' => 'eleqeyın',
'preferences' => 'Tercihi',
'mypreferences' => 'Tercihi',
'prefs-edits' => 'Amarê vurnayışan:',
-'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
-'prefsnologintext' => 'Şıma gani be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cikewte]</span> ke tercihanê karberi xo eyar bıkerê.',
'changepassword' => 'Parola bıvurne',
'prefs-skin' => 'Çerme',
'skin-preview' => 'Verasayış',
'recentchangesdays-max' => 'Tewr zaf $1 {{PLURAL:$1|roc|roci}}',
'recentchangescount' => 'Amarê vurnayışê ke hesıbyaye deye bımocneyê:',
'prefs-help-recentchangescount' => 'Ney de vurnayışê peyêni, tarixê pelan u cıkewteni asenê.',
-'savedprefs' => 'Tecihê şıma qeyd biy.',
+'savedprefs' => 'Tecihey şıma qeyd biyey.',
'timezonelegend' => 'Warey saete:',
'localtime' => 'saeta mehelliye:',
'timezoneuseserverdefault' => 'Zey karkerdışê Wiki ($1)',
'yourvariant' => 'Varyante miyandê zuwani:',
'prefs-help-variant' => 'Zerrey ena viki mocnayışi rê varyant yana ortografi re şıre tercihan dê xo.',
'yournick' => 'imza:',
-'prefs-help-signature' => 'mesajê ke pelê werenayişi de gani pê ney "<nowiki>~~~~</nowiki>" imza bıbi.',
+'prefs-help-signature' => 'Peran de vatenana de vatışi"<nowiki>~~~~</nowiki>" ya do imza bé, no bahdo beno çerğé imza u wahdey zemani',
'badsig' => 'Îmzayê tu raşt niyo.
Etiketê HTMLî kontrol bike.',
'badsiglength' => 'İmzayê şıma zaf dergo.
$1 gani bınê no {{PLURAL:$1|karakter|karakter}} de bıbo.',
'yourgender' => 'Çıçiy cı esto?',
'gender-unknown' => 'Ez detay nivana',
-'gender-male' => 'Ey pera viki vurni',
-'gender-female' => 'Ay pera wiki vurni',
-'prefs-help-gender' => 'Eyar kerdış keyfiyo.
- sofware qey adersê cinsiyet şuxulneno, no malumat umumiyo.Şaryayış malumat wazem.',
+'gender-male' => 'Perané wiki camérd deyne ezo vırnena',
+'gender-female' => 'Perané wiki cıni deyne eza vırnena',
+'prefs-help-gender' => 'Na tercih keyfiya.
+Na nustenek ercana qısan de qandé grameri karneyéna, na malumater herkes şeno bıvino .',
'email' => 'E-posta',
'prefs-help-realname' => 'Nameyo raşt waştena şıma rê mendo.
Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de mocnenê.',
'prefs-help-email' => 'Dayışê adresa e-postey keyfiyo, labelê seba eyarê parola lazıma, wexto ke şıma naye xo vira kerê.',
-'prefs-help-email-others' => 'Şıma şenê weçinê ke ê bini be yew gırey pela şımaya karberi ya zi pela werênayışi sera şıma de ebe e-poste irtıbat kewê.
-Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena.',
+'prefs-help-email-others' => 'Pera ğoya kerderi de zew link vırazése karberé bini şımaré şenê mesac bırşé. Lakin e-posta adresa şıma héç cayé de niasena.',
'prefs-help-email-required' => 'E-mail adrese mecburiya.',
-'prefs-info' => 'Melumato bıngeh',
-'prefs-i18n' => 'Beynelmılelkerdış',
+'prefs-info' => 'Melumata şıma',
+'prefs-i18n' => 'Şar şélıg kerdış',
'prefs-signature' => 'İmza',
'prefs-dateformat' => 'Formatê tarixi',
'prefs-timeoffset' => 'Wext offset',
'prefs-displaywatchlist' => 'Weçinayışê mocnayışi',
'prefs-tokenwatchlist' => 'Morge',
'prefs-diffs' => 'Ferqi',
+'prefs-help-prefershttps' => 'Na tercih, fına dekewten dı bena aktiv.',
# User preference: email validation using jQuery
'email-address-validity-valid' => 'e-posta adresi raştayo',
# Groups
'group' => 'Grube:',
'group-user' => 'Karberi',
-'group-autoconfirmed' => 'Karberê ke xob xo biyê araşt',
+'group-autoconfirmed' => 'Karberê ke otomatikmen biyê araşt',
'group-bot' => 'Boti',
'group-sysop' => 'İdarekari',
'group-bureaucrat' => 'Burokrati',
'group-all' => '(pêro)',
'group-user-member' => '{{GENDER:$1|karber}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|Karberê ke xob xo biyê araşt}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|Karberê ke otomatikmen biyê araşt}}',
'group-bot-member' => '{{GENDER:$1|bot}}',
'group-sysop-member' => '{{GENDER:$1|İdarekar}}',
'group-bureaucrat-member' => '{{GENDER:$1|buroqrat}}',
'group-suppress-member' => '{{GENDER:$1|Temaşekar}}',
'grouppage-user' => '{{ns:project}}:Karberi',
-'grouppage-autoconfirmed' => '{{ns:project}}:Karberê ke xob xo biyê araşt',
+'grouppage-autoconfirmed' => '{{ns:project}}:Karberê ke otomatikmen biyê araşt',
'grouppage-bot' => '{{ns:project}}:Boti',
'grouppage-sysop' => '{{ns:project}}:İdarekeri',
'grouppage-bureaucrat' => '{{ns:project}}:Burokrati',
'grouppage-suppress' => '{{ns:project}}:Qontrol',
# Rights
-'right-read' => 'Pelan bıwane',
+'right-read' => 'Pera bıwané',
'right-edit' => 'Pele bıvurne',
'right-createpage' => 'Pele vıraze (pelê ke ê werênayışi niyê)',
'right-createtalk' => 'Pela werênayışi vıraze',
'action-browsearchive' => 'pelanê esterıteyan bıgeyre',
'action-undelete' => 'ena pele reyna biyere',
'action-suppressrevision' => 'revizyone ki nimnaye biye reyna bivîne u restore bike',
-'action-suppressionlog' => 'ena logê xasî bivîne',
+'action-suppressionlog' => 'Ena bağse qeydi bıvin',
'action-block' => 'enê karberi vurnayışi ra bıreyne',
'action-protect' => 'seviyeyê pawitişî se ena pele bivurne',
'action-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
'recentchanges-label-minor' => 'Eno yew vurnayışo qıckeko',
'recentchanges-label-bot' => 'Yew boti xo het ra no vurnayış vıraşto',
'recentchanges-label-unpatrolled' => 'Eno vurnayış hewna dewriya nêbiyo',
-'rcnote' => "Bıni dı {{PLURAL:$1|'''1''' vurnayış|peyni de '''$1''' vurnayışi estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetana $5, $4.",
+'recentchanges-legend-newpage' => '$1 - pela newi',
+'rcnote' => "Bıni dı {{PLURAL:$2|roc|'''$2''' rocan}} ra {{PLURAL:$1|'''1''' vurnayış|'''$1''' vurnayışi}} éyé cér de yé , $5 ra hetana $4.",
'rcnotefrom' => "Cêr de '''$2''' ra nata vurnayışiyê asenê (tewr vêşi <b> '''$1'''</b> asenê).",
-'rclistfrom' => '$1 ra vurnayışanê neweyan bımocne',
+'rclistfrom' => '$1 ra tepya vırnayışané newan bıasne',
'rcshowhideminor' => 'Vurnayışanê werdiyan $1',
'rcshowhidebots' => 'Botan $1',
'rcshowhideliu' => 'Karberanê qeydınan $1',
'rcshowhideanons' => 'Karberê bênamey $1',
'rcshowhidepatr' => '$1 vurnayışê ke dewriya geyrayê',
'rcshowhidemine' => 'Vurnayışanê mı $1',
-'rclinks' => 'Peyniya $2 rocan de $1 vurnayışan bımocne <br />$3',
+'rclinks' => '$2 rocan peynira $1 vurnayışan bıasne <br />$3',
'diff' => 'ferq',
'hist' => 'verên',
'hide' => 'Bınımne',
'statistics-pages' => 'Peli',
'statistics-pages-desc' => 'Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.',
'statistics-files' => 'Dosyayê bar biye',
-'statistics-edits' => 'Amarê vurnayîşî ke wextê {{SITENAME}} ronayîşî ra',
+'statistics-edits' => '{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan',
'statistics-edits-average' => 'Ser her pele de amarê vurnayîşîyê averageyî',
'statistics-views-total' => 'Yekunî bivîne',
'statistics-views-total-desc' => 'Peleyê ke çınyê yana xısusiyê e nina zerre nêkerdê',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|bayt|bayti}}',
-'ncategories' => '$1 {{PLURAL:$1|Kategoriye|Kategoriy}}',
+'ncategories' => '$1 {{PLURAL:$1|Kategori|Kategoriy}}',
'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikiy}}',
'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
'newpages' => 'Pelê newey',
'newpages-username' => 'Nameyê karberi:',
'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Berdış',
-'movethispage' => 'Ena pele bere',
+'move' => 'Beré',
+'movethispage' => 'Na perer beré',
'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
'unusedcategoriestext' => 'kategoriyê cêrıni bıbo zi çı nêşuxulyena.',
# Special:LinkSearch
'linksearch' => 'Gıreyê teberi cı geyrê',
'linksearch-pat' => 'bıgêr motif:',
-'linksearch-ns' => 'Cayê namey:',
+'linksearch-ns' => 'Heruna naman:',
'linksearch-ok' => 'Cı geyre',
'linksearch-text' => 'Jokeri ê zey "*.wikipedia.org"i benê ke bıgureniyê.
Tewr senık yew sewiya serêna cayê tesiri lazıma, mesela "*.org".<br />
'enotif_anon_editor' => 'karbero anonim $1',
'enotif_body' => 'Erciyayê $WATCHINGUSERNAME,
-{{SITENAME}} keyepel de no $PAGETITLE pelo sernameyın re $PAGEEDITDATE no tarix de $PAGEEDITOR no karberi $CHANGEDORCREATED. şıma eşkeni bıresi halê no peli re $PAGETITLE_URL na adresi ra.
+$PAGEINTRO $NEWPAGE
-$NEWPAGE
+eniya timaroği: $PAGESUMMARY $PAGEMINOREDIT
-beyanatê karber o ke vurnayiş kerdo: $PAGESUMMARY $PAGEMINOREDIT
-
-cıresayişê karber o ke vurnayiş kerdo:
-e-posta: $PAGEEDITOR_EMAIL
+Timaroğiya irtibat:
+mail: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
no pel o ke behs beno heta ziyaret kerdışê yewna heli, mesajê vuriyayişi nêşawiyeno.
# Restrictions (nouns)
'restriction-edit' => 'Bıvurne',
-'restriction-move' => 'Berê',
-'restriction-create' => 'Vıraze',
+'restriction-move' => 'Beré',
+'restriction-create' => 'İycad ke',
'restriction-upload' => 'Bar ke',
# Restriction levels
'undelete-revisionrow' => '$1 $2 ($3) $4 . . $5 $6 $7',
# Namespace form on various pages
-'namespace' => 'Cayê namey:',
+'namespace' => 'Heruna naman:',
'invert' => 'Weçinıtışo peyserki',
'tooltip-invert' => 'nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan zerrekan nımtışi re ena dore tesdiqi nışan kerê',
'namespace_association' => 'Cayê nameyanê elaqedaran',
'movepage-page-moved' => 'pelê $1i kırışiya pelê $2i.',
'movepage-page-unmoved' => 'pelê $1i nêkırışiyeno sernameyê $2i.',
'movepage-max-pages' => 'tewr ziyed $1 {{PLURAL:$1|peli|peli}} kırışiya u hıni ziyedê ıney otomotikmen nêkırışiyeno.',
-'movelogpage' => 'Qeydê berdışi',
+'movelogpage' => 'Qeydé berdışi',
'movelogpagetext' => 'nameyê liste ya ke cêr de yo, pelê vuriyayeyani mocneno',
'movesubpage' => '{{PLURAL:$1|Subpage|pelê bınıni}}',
'movesubpagetext' => '{{PLURAL:$1|pelê bınıni yê|pelê bınıni yê}} no $1 peli cer de yo.',
'movenosubpage' => 'pelê bınıni yê no peli çino.',
'movereason' => 'Sebeb:',
'revertmove' => 'peyser bia',
-'delete_and_move' => 'Bestere u bere',
+'delete_and_move' => 'Besterné uw beré',
'delete_and_move_text' => '==gani hewn a bıbıo/bıesteriyo==
" no [[:$1]]" name de yew pel ca ra esto. şıma wazeni pê hewn a kerdışê ey peli vurnayişê nameyi bıkeri?',
'allmessagesdefault' => 'Metnê mesacê hesabiyayey',
'allmessagescurrent' => 'Nuşteyê mesacê rocaney',
'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
-eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
+eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [https://www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' qefelnaye yo u ey ra '''{{ns:special}}:Allmessages''' karkerdışi re akerde niyo.",
'allmessages-filter-legend' => 'Avrêc',
'allmessages-filter' => 'goreyê xususi kerdışi re filtre bıker',
'pageinfo-title' => 'Heq tê "$1"\'i',
'pageinfo-not-current' => 'Qısur de mevêne, rewizyonanê verênan rê nê melumatan dayış mumkın niyo',
'pageinfo-header-basic' => 'Seron zanayış',
-'pageinfo-header-edits' => 'Vurnayışê verêni',
+'pageinfo-header-edits' => 'Veréna timar kerdışi',
'pageinfo-header-restrictions' => 'Sıtarkerdışê pele',
'pageinfo-header-properties' => 'Xısusiyetê pele',
'pageinfo-display-title' => 'Sernuştey bımocne',
'pageinfo-length' => 'Derdeya pela (bayti heta)',
'pageinfo-article-id' => 'Kamiya pele',
'pageinfo-language' => 'Zıwanê zerreyê pele',
+'pageinfo-content-model' => 'Modela zerreka perer',
'pageinfo-robot-policy' => 'Weziyetê motor de cıgeyrayışi',
'pageinfo-robot-index' => 'İndeksbiyayen',
'pageinfo-robot-noindex' => 'İndeksnêbiyayen',
'markedaspatrollederrornotify' => 'Nışan kerdışê dewriyey nêbı',
# Patrol log
-'patrol-log-page' => 'Logê devriye',
+'patrol-log-page' => 'Qeydé çımsernayoğan',
'patrol-log-header' => 'Ena listeyê logi revizyonê devriyeyi mocneno.',
-'log-show-hide-patrol' => '$1 logê devriye',
+'log-show-hide-patrol' => 'Qeydé Çımsernayoğan $1',
# Image deletion
'deletedrevision' => 'Veriyono kihan $1 wederna',
'svg-long-desc' => 'Dosyay SVG, zek vanê $1 × $2 piksela, ebatê dosya: $3',
'svg-long-desc-animated' => 'SVG dosya, nominalin $1 × $2 piksela, ebatê dosya: $3',
'svg-long-error' => "Nêmeqbul dosyaya SVG'i: $1",
-'show-big-image' => 'Tam agoznayen',
+'show-big-image' => 'Oricinal dosya',
'show-big-image-preview' => "Verqayd dergiya: $1'i.",
'show-big-image-other' => 'Zewmi{{PLURAL:$2|Vılêşnayış|Vılêşnayışê}}: $1.',
'show-big-image-size' => '$1 × $2 piksel',
'noimages' => 'Çik çini yo.',
'ilsubmit' => 'Cı geyre',
'bydate' => 'goreyê zemani',
-'sp-newimages-showfrom' => 'Dosyayê newi ke $2, $1 ra dest pe keni bimocne',
+'sp-newimages-showfrom' => '$1, sehat $2 ra tepya dosyayané newan bıasné',
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'video-dims' => '$1, $2 × $3',
'exif-writer' => 'Nuştekar',
'exif-languagecode' => 'Zıwan',
'exif-iimversion' => 'Verqaydê IIM',
-'exif-iimcategory' => 'Kategoriye',
+'exif-iimcategory' => 'Kategori',
'exif-iimsupplementalcategory' => 'Oleyê Kategoriyan',
'exif-datetimeexpires' => 'No peyra mekarênê',
'exif-datetimereleased' => 'Bıroşe',
# External editor support
'edit-externally' => 'Ena dosya bıvurne pe yew programê harici',
-'edit-externally-help' => '(Qe informasyonê zafyer ena bevinin [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(Qe informasyonê zafyer ena bevinin [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'pêro',
'percent' => '$1%',
'parentheses' => '($1)',
'brackets' => '[$1]',
+'quotation-marks' => '"$1".',
# Multipage image navigation
'imgmultipageprev' => '← peleyê verin',
'version-version' => '(Versiyon $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'Lisans',
-'version-poweredby-credits' => "Ena wiki, dezginda '''[//www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
+'version-poweredby-credits' => "Ena wiki, dezginda '''[https://www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
'version-poweredby-others' => 'Zewmi',
'version-poweredby-translators' => "Açernere translatewiki.net'i",
'version-credits-summary' => 'Ma qayılime ke [[Special:Version|MediaWiki]] rê ke kami destek dayo wa mayê vanime inan bışınasne.',
'redirect-submit' => 'Şo',
'redirect-lookup' => 'Bewni',
'redirect-value' => 'Erc:',
-'redirect-user' => "ID'ê Karberi",
+'redirect-user' => 'Kamiya Karberi:',
'redirect-revision' => 'Rewizyona pela',
'redirect-file' => 'Namey dosya',
'redirect-not-exists' => 'Erc nêvineyê',
# Special:SpecialPages
'specialpages' => 'Pelê xısusiy',
-'specialpages-note' => '----
-* Xısusi pelaya normal
-* <span class="mw-specialpagerestricted">Xısusi peleyê keı rê ray nê deyaya.</span>
-* <strong class="mw-specialpagerestricted">Peleya xısusiya ke grota verhefıza.</strong>',
+'specialpages-note-top' => 'Lecand',
+'specialpages-note' => '*Normal pera bağsi.
+* <span class="mw-specialpagerestricted">Peré bağseyé ke groté ver hafıza.</span>',
'specialpages-group-maintenance' => 'Raporê tepıştışi',
'specialpages-group-other' => 'Pelê xasiyê bini',
'specialpages-group-login' => 'Cı kewe / hesab vıraze',
'limitreport-expansiondepth' => 'Tewr veşi herayina dergbiyayışi',
'limitreport-expensivefunctioncount' => 'Amoriya fonksiyonde vay agozni',
+# Special:ExpandTemplates
+'expandtemplates' => 'şablonan hêra ker',
+'expand_templates_intro' => 'Na pela xususi metın geno u şablonê ke tedeyê reyna reyna hêra keno.
+U hem zi nê fonksiyonan hêra keno
+<nowiki>{{</nowiki>#language:…}}</code>, u zey nê parametreyan
+<nowiki>{{</nowiki>CURRENTDAY}}</code>
+Eneri Medya wiki sera xo keno.',
+'expand_templates_title' => 'Sernameyê weziyeti, misal qandê {{FULLPAGENAME}}.:',
+'expand_templates_input' => 'sernameyê cıkewtışi:',
+'expand_templates_output' => 'netice',
+'expand_templates_xml_output' => 'XML vıraştış',
+'expand_templates_ok' => 'temam',
+'expand_templates_remove_comments' => 'Tefsiran wedare',
+'expand_templates_remove_nowiki' => 'neticeyan de etiketê <nowiki> yan çap bıker',
+'expand_templates_generate_xml' => 'Dara XML arêdayoği bımocne',
+'expand_templates_preview' => 'Verqayt',
+
);
'tog-extendwatchlist' => 'Wobglědowańku wócyniś, aby wšě změny pokazał, nic jano nejnowše',
'tog-usenewrc' => 'Kupkowe změny pó boku w aktualnych změnach a wobglědowanjach (trjeba JavaScript)',
'tog-numberheadings' => 'Nadpisma awtomatiski numerěrowaś',
-'tog-showtoolbar' => 'Wobźěłańsku lejstwu pokazaś (pótrjebujo JavaScript)',
-'tog-editondblclick' => 'Boki z dwójnym kliknjenim wobźěłaś (pótrjebujo JavaScript)',
+'tog-showtoolbar' => 'Wobźěłowańsku rědku pokazaś',
+'tog-editondblclick' => 'Boki z dwójnym kliknjenim wobźěłaś',
'tog-editsection' => 'Wobźěłanje wótstawkow pśez wótkaze [wobźěłaś] zmóžniś',
-'tog-editsectiononrightclick' => 'Wobźěłanje wótstawkow pśez kliknjenje z pšaweju tastu myški zmóžniś (JavaScript)',
+'tog-editsectiononrightclick' => 'Wobźěłowanje wótrězkow pśez kliknjenje z pšaweju tastu myški zmóžniś',
'tog-showtoc' => 'Wopśimjeśe pokazaś, jolic ma bok wěcej nježli 3 nadpisma',
'tog-rememberpassword' => 'Z toś tym wobglědowakom pśizjawjony wóstaś (za maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})',
'tog-watchcreations' => 'Boki, kótarež napórajom a dataje, kótarež nagrawam, wobglědowaś',
'tog-shownumberswatching' => 'Licbu wobglědujucych wužywarjow pokazaś',
'tog-oldsig' => 'Eksistěrujuca signatura:',
'tog-fancysig' => 'Ze signaturu kaž z wikitekstom wobchadaś (bźez awtomatiskego wótkaza)',
-'tog-uselivepreview' => 'Live-pśeglěd wužywaś (JavaScript) (eksperimentelnje)',
+'tog-uselivepreview' => 'Live-pśeglěd wužywaś (eksperimentelnje)',
'tog-forceeditsummary' => 'Warnowaś, gaž pśi składowanju zespominanje felujo',
'tog-watchlisthideown' => 'Móje změny na wobglědowańskej lisćinje schowaś',
'tog-watchlisthidebots' => 'Změny awtomatiskich programow (botow) na wobglědowańskej lisćinje schowaś',
'newwindow' => '(se wótcynijo w nowem woknje)',
'cancel' => 'Pśetergnuś',
'moredotdotdot' => 'Wěcej…',
-'morenotlisted' => 'Dalšne njepódane...',
+'morenotlisted' => 'Toś ta lisćina njejo dopołna.',
'mypage' => 'Bok',
'mytalk' => 'Diskusija',
'anontalk' => 'Diskusija z toś teju IP',
'articlepage' => 'Nastawk',
'talk' => 'Diskusija',
'views' => 'Naglědy',
-'toolbox' => 'Pomocne srědki',
+'toolbox' => 'Rědy',
'userpage' => 'Wužywarski bok pokazaś',
'projectpage' => 'Projektowy bok pokazaś',
'imagepage' => 'Datajowy bok se woglědaś',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
'aboutsite' => 'Wó {{GRAMMAR:lokatiw|{{SITENAME}}}}',
'aboutpage' => 'Project:Wó_{{GRAMMAR:lokatiw|{{SITENAME}}}}',
-'copyright' => 'Wopśimjeśe stoj pód $1.',
+'copyright' => 'Wopśimjeśe stoj pód $1 k dispoziciji, jolic njejo se hynac pódało.',
'copyrightpage' => '{{ns:project}}:Stwóriśelske pšawo',
'currentevents' => 'Aktualne tšojenja',
'currentevents-url' => 'Project:Aktualne tšojenja',
'ok' => 'Pytaś',
'retrievedfrom' => 'Z {{GRAMMAR:genitiw|$1}}',
'youhavenewmessages' => 'Maš $1 ($2).',
-'newmessageslink' => 'nowe powěsći',
-'newmessagesdifflink' => 'slědna změna',
'youhavenewmessagesfromusers' => 'Maš $1 wót {{PLURAL:$3|drugego wužywarja|$3 wužywarjowu|$3 wužywarjow|$3 wužywarjow}} ($2).',
'youhavenewmessagesmanyusers' => 'Maš $1 wót wjele wužywarjow ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|nowa powěsć|nowej powěsći|nowe powěsći|nowe powěsći}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|slědna změna|slědnej změnje|slědne změny|slědne změny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|nowa powěsć|nowej powěsći|nowe powěsći}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|slědna změna|slědnej změnje|slědne změny}}',
'youhavenewmessagesmulti' => 'Maš nowe powěsći: $1',
'editsection' => 'wobźěłaś',
'editold' => 'wobźěłaś',
'invalidtitle-knownnamespace' => 'Njepłaśiwy titel z mjenjowym rumom "$2" a tekstom "$3"',
'invalidtitle-unknownnamespace' => 'Njepłaśiwy titel z njeznatym mjenjowym rumom $1 a tekstom "$2"',
'exception-nologin' => 'Njejsy se pśizjawił',
-'exception-nologin-text' => 'Toś ten bok abo toś ta akcija pomina, až sy na toś tom wikiju pśizjawjony.',
+'exception-nologin-text' => 'Pšosym [[Special:Userlogin|pśizjaw se]], aby pśistup na toś ten bok abo akciju měł.',
# Virus scanner
'virus-badscanner' => "Špatna konfiguracija: njeznaty wirusowy scanner: ''$1''",
'virus-unknownscanner' => 'njeznaty antiwirus:',
# Login and logout pages
-'logouttext' => "'''Sy se něnto wótzjawił.'''
+'logouttext' => "'''{{GENDER:|Sy|Sy}} něnto {{GENDER:|wótzjawjony|wótzjawjona}}.'''
-Móžoš {{SITENAME}} anomymnje dalej wužywaś abo móžoš <span class='plainlinks'>[$1 se znowego pśizjawiś]</span> ako samski abo hynakšy wužywaŕ.
-Źiwaj na to, až někotare boki se dalej tak zwobraznjuju ako by hyšći pśizjawjeny był, až njewuproznijoš cache swójego wobglědowaka.",
+Glědaj: Jo móžno, až někotare boki pokazuju se snaź tak, ako by ty hyšći pśizjawjony był, až njewuproznijoš pufrowak twójogo wobglědowaka.",
'welcomeuser' => 'Witaj $1',
'welcomecreation-msg' => 'Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences|nastajenja za {{SITENAME}}]].',
'yourname' => 'mě wužywarja',
'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ś.',
'emailauthenticated' => 'Twója e-mailowa adresa jo se $2 $3 goź. wobkšuśiła.',
-'emailnotauthenticated' => 'Twója e-mailowa adresa njejo hyšći wobkšuśona. E-mailowe funkcije móžoš aklej pó wuspěšnem wobkšuśenju wužywaś.',
+'emailnotauthenticated' => 'Twója e-mailowa adresa hyšći njejo wobkšuśona. Žedna e-mail buźo se za slědujuce funkcije słaś.',
'noemailprefs' => 'Zapódaj e-mailowu adresu w swójich nastajenjach, aby toś te funkcije stali k dispoziciji.',
'emailconfirmlink' => 'Wobkšuś swóju e-mailowu adresu.',
'invalidemailaddress' => 'Toś ta e-mailowa adresa njamóžo se akceptěrowaś, dokulaž zda se, až jo njepłaśiwy format. Pšošym zapódaj adresu w korektnem formaśe abo wuprozń to pólo.',
'resetpass-wrong-oldpass' => 'Njepłaśiwe nachylne abo aktualne gronidło.
Sy snaź swójo gronidło južo wuspěšnje změnił abo nowe nachylne gronidło pominał.',
'resetpass-temp-password' => 'Nachylne gronidło:',
+'resetpass-abort-generic' => 'Změnjanje gronidła jo se pśez rozšyrjenje pśetergnuło.',
# Special:PasswordReset
'passwordreset' => 'Gronidło slědk stajiś',
'nocreate-loggedin' => 'Njamaš pšawo nowe boki napóraś.',
'sectioneditnotsupported-title' => 'Wobźěłowanje wótrězka se njepódpěra',
'sectioneditnotsupported-text' => 'Wobźěłowanje wótrězka njepódpěra se na toś tom wobźěłowańskem boku.',
-'permissionserrors' => 'Problem z pšawami',
+'permissionserrors' => 'Wopšawnjeńska zmólka',
'permissionserrorstext' => 'Njamaš pšawo to cyniś. {{PLURAL:$1|Pśicyna|Pśicynje|Pśicyny}}:',
'permissionserrorstext-withaction' => 'Njamaš pšawo $2. {{PLURAL:$1|Pśicyna|Pśicynje|Pśicyny|Pśicyny}}:',
'recreate-moveddeleted-warn' => "'''Glědaj: Ty wótžywijoš bok, kótaryž jo pjerwjej se wulašował.'''
* Njegóźece se wósobinske informacije
*: ''bydleńske adrese a telefonowe numery, numery socialnego zawěsćenja atd.''",
'revdelete-legend' => 'wobgranicowanja widobnosći póstajiś',
-'revdelete-hide-text' => 'Tekst wersije schowaś',
+'revdelete-hide-text' => 'Tekst wersije',
'revdelete-hide-image' => 'Wopśimjeśe dataje schowaś',
'revdelete-hide-name' => 'Akciju log-lisćiny schowaś',
-'revdelete-hide-comment' => 'Komentar wobźěłanja schowaś',
-'revdelete-hide-user' => 'mě/IP-adresu wobźěłarja schowaś',
+'revdelete-hide-comment' => 'Zespominanje wobźěłanja',
+'revdelete-hide-user' => 'Mě/IP-adresa wobźěłarja',
'revdelete-hide-restricted' => 'Daty wót administratorow ako teke te drugich wužywarjow pódtłocyś',
'revdelete-radio-same' => '(njezměniś)',
-'revdelete-radio-set' => 'Jo',
-'revdelete-radio-unset' => 'Ně',
+'revdelete-radio-set' => 'Schowany',
+'revdelete-radio-unset' => 'Widobny',
'revdelete-suppress' => 'Pśicynu wulašowanja teke za administratorow schowaś',
'revdelete-unsuppress' => 'Wobgranicowanja za wótnowjone wersije zasej zwignuś.',
'revdelete-log' => 'Pśicyna:',
'preferences' => 'Nastajenja',
'mypreferences' => 'Nastajenja',
'prefs-edits' => 'Licba wobźěłanjow:',
-'prefsnologin' => 'Njejsy pśizjawjony',
-'prefsnologintext' => 'Musyš se <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} pśizjawiś]</span>, aby mógał swóje nastajenja změniś.',
'changepassword' => 'Šćitne gronidło změniś',
'prefs-skin' => 'Šat',
'skin-preview' => 'Pśeglěd',
'prefs-rendering' => 'Naglěd',
'saveprefs' => 'Składowaś',
'resetprefs' => 'Njeskłaźone změny zachyśiś',
-'restoreprefs' => 'Wše standardne nastajenja wobnowiś',
+'restoreprefs' => 'Wšykne standardne nastajenja wótnowiś (we wšych wótrězkach)',
'prefs-editing' => 'Wobźěłaś',
'rows' => 'Rědki:',
'columns' => 'Słupy:',
'prefs-help-signature' => 'Komentary na diskusijnych bokach měli se pśez "<nowiki>~~~~</nowiki>" pódpisaś, kótarež konwertěrujo se do twójeje signatury a casowego kołka.',
'badsig' => 'Signatura njejo dobra; pšosym HTML pśekontrolěrowaś.',
'badsiglength' => 'Twója signatura jo pśedłujka. Musy mjenjej ako $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} měś.',
-'yourgender' => 'Rod:',
-'gender-unknown' => 'Njepódany',
-'gender-male' => 'Muskecy',
-'gender-female' => 'Žeńscyny',
+'yourgender' => 'Co coš pódaś?',
+'gender-unknown' => 'Njok nic wó tom pódaś',
+'gender-male' => 'Wón wobźěłujo wikiboki',
+'gender-female' => 'Wóna wobźěłujo wikiboki',
'prefs-help-gender' => 'Opcionalny: wužywa se za pó roźe specifiske nagronjenje pśez softwaru. Toś ta informacija buźo zjawna.',
'email' => 'E-mail',
'prefs-help-realname' => 'Realne mě jo opcionalne. Jolic až jo zapódajośo wužywa se za pódpisanje wašych pśinoskow.',
'prefs-signature' => 'Pódpis',
'prefs-dateformat' => 'Datumowy format',
'prefs-timeoffset' => 'Casowy rozdźěl',
-'prefs-advancedediting' => 'Rozšyrjone opcije',
+'prefs-advancedediting' => 'Powšykne nastajenja',
'prefs-advancedrc' => 'Rozšyrjone opcije',
'prefs-advancedrendering' => 'Rozšyrjone opcije',
'prefs-advancedsearchoptions' => 'Rozšyrjone opcije',
'userrights-no-interwiki' => 'Njamaš pšawo wužywarske pšawa w drugich wikijach změniś.',
'userrights-nodatabase' => 'Datowa banka $1 njeeksistěrujo abo njejo lokalna.',
'userrights-nologin' => 'Musyš se z administratorowym kontom [[Special:UserLogin|pśizjawiś]], aby wužywarske pšawa změnił.',
-'userrights-notallowed' => 'Twóje konto njama pšawa, aby wužywarske pšawa pśidało abo wótpórało.',
+'userrights-notallowed' => 'Njamaš trěbne pšawa, aby wužywarske pšawa pśipokazało abo zajmjeł.',
'userrights-changeable-col' => 'Kupki, kótarež móžoš změniś',
'userrights-unchangeable-col' => 'Kupki, kótarež njamóžoš změniś',
'right-reupload-shared' => 'Dataje w zgromadnje wužywanem repozitoriju lokalnje pśepisaś',
'right-upload_by_url' => 'Dataju z URL-adrese nagraś',
'right-purge' => 'Sedłowy cache za bok bźez wobkšuśenja prozniś',
-'right-autoconfirmed' => 'Połšćitane boki wobźěłaś',
+'right-autoconfirmed' => 'Žedne wobgranicowanje pśez IP-bazěrowane limity',
'right-bot' => 'Wobchadanje ako awtomatiski proces',
'right-nominornewtalk' => 'Snadne změny na diskusijnych bokach njedowjedu k pokazanjeju "Nowe powěsći"',
'right-apihighlimits' => 'Wuše limity w API-wótpšašanjach wužywaś',
'right-hideuser' => 'Wužywarske mě blokěrowaś a schowaś',
'right-ipblock-exempt' => 'Blokěrowanja IP, awtomatiske blokěrowanja a blokěrowanja wobcerkow se wobinuś',
'right-proxyunbannable' => 'Awtomatiske blokěrowanje proksyjow se wobinuś',
-'right-unblockself' => 'Wótblokěrowaś se samogo',
+'right-unblockself' => 'Wótblokěrowaś se',
'right-protect' => 'Šćitowe schójźeńki změniś a šćitane boki wobźěłaś',
'right-editprotected' => 'Šćitane boki wobźěłaś (bśez kaskadowego šćita)',
'right-editinterface' => 'Wužywański pówjerch wobźěłaś',
'action-block' => 'Toś tomu wužiwarjeju wobźěłowanje zawoboraś',
'action-protect' => 'Šćitowe stopnje za toś ten bok změniś',
'action-rollback' => 'změny slědnego wužywarja, kótaryž jo wobźěłał wěsty bok, malsnje slědk stajiś',
-'action-import' => 'toś ten bok z drugego wikija importěrowaś',
-'action-importupload' => 'toś ten bok z datajowego nagraśa importěrowaś',
+'action-import' => 'boki z drugego wikija importěrowaś',
+'action-importupload' => 'boki z datajowego nagraśa importěrowaś',
'action-patrol' => 'změny drugich wužywarjow ako doglědowane markěrowaś',
'action-autopatrol' => 'twóju změnu ako doglědowanu markěrowaś daś',
'action-unwatchedpages' => 'lisćinu njewobglědowanych bokow zwobrazniś',
'recentchanges-label-minor' => 'To jo snadna změna',
'recentchanges-label-bot' => 'Toś ta změna jo se pśez bośik wuwjadła.',
'recentchanges-label-unpatrolled' => 'Toś ta změna hyšći njejo se pśekontrolěrowała',
+'recentchanges-legend-newpage' => '$1 - nowy bok',
'rcnote' => "Dołojce {{PLURAL:$1|jo '''1''' změna|stej slědnej '''$1''' změnje|su slědne '''$1''' změny}} w {{PLURAL:$2|slědnem dnju|slědnyma '''$2''' dnjoma|slědnych '''$2''' dnjach}}, staw wót $4, $5.",
'rcnotefrom' => "Dołojce pokazuju se změny wót '''$2''' (maks. '''$1''' zapisow).",
'rclistfrom' => 'Nowe změny wót $1 pokazaś.',
'rc_categories_any' => 'wše',
'rc-change-size-new' => '$1 {{PLURAL:$1|byte|byta|byty|bytow}} pó změnje',
'newsectionsummary' => 'Nowy wótrězk /* $1 */',
-'rc-enhanced-expand' => 'Drobnosći pokazaś (pomina se JavaScript)',
+'rc-enhanced-expand' => 'Drobnostki pokazaś',
'rc-enhanced-hide' => 'Drobnosći schowaś',
'rc-old-title' => 'spócetnje napórany ako "$1"',
'upload_source_file' => ' (dataja na twójom kompjuterje)',
# Special:ListFiles
-'listfiles-summary' => 'Toś ten specialny bok pokazujo wšykne nagrate dataje.
-Jolic se pó wužywarju filtrujo, budu se jano dataje pokazowaś, pśi kótarychž ten wužywaŕ jo nejnowšu wersiju nagrał.',
+'listfiles-summary' => 'Toś ten specialny bok pokazujo wšykne nagrate dataje.',
'listfiles_search_for' => 'Za medijowym mjenim pytaś:',
'imgfile' => 'dataja',
'listfiles' => 'Lisćina datajow',
# Special:ListGroupRights
'listgrouprights' => 'Pšawa wužywarskeje kupki',
'listgrouprights-summary' => 'To jo lisćina wužywarskich kupkow definěrowanych w toś tom wikiju z jich zwězanymi pśistupnymi pšawami. Móžo [[{{MediaWiki:Listgrouprights-helppage}}|pśidatne informacije]] wó jadnotliwych pšawach daś.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Zagarantěrowane pšawo</span>
+'listgrouprights-key' => 'Legenda:
+* <span class="listgrouprights-granted">Zagarantěrowane pšawo</span>
* <span class="listgrouprights-revoked">Slědk wzete pšawo</span>',
'listgrouprights-group' => 'Kupka',
'listgrouprights-rights' => 'Pšawa',
'deletecomment' => 'Pśicyna:',
'deleteotherreason' => 'Druga/pśidatna pśicyna:',
'deletereasonotherlist' => 'Druga pśicyna',
-'deletereason-dropdown' => '* Powšykne pśicyny za lašowanja
-** Žycenje awtora
-** Pśekśiwjenje stworiśelskego pšawa
-** Wandalizm',
+'deletereason-dropdown' => '* Zwucone pśicyny za wulašowanje
+** Spam
+** Wandalizm
+** Pśekśiwjenje awtorskego pšawa
+** Pominanje awtora
+** Defektne dalejpósrědnjenje',
'delete-edit-reasonlist' => 'Pśicyny za lašowanje wobźěłaś',
'delete-toobig' => 'Toś ten bok ma z wěcej nježli $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujku historiju. Lašowanje takich bokow bu wobgranicowane, aby wobškoźenju {{GRAMMAR:genitiw|{{SITENAME}}}} z pśigódy zajźowało.',
'delete-warning-toobig' => 'Toś ten bok ma z wěcej ako $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujke stawizny. Jich wulašowanje móžo źěło datoweje banki na {{SITENAME}} kazyś;
'contributions' => 'Pśinoski {{GENDER:$1|wužywarja|wužywarki}}',
'contributions-title' => 'Wužywarske pśinoski wót $1',
'mycontris' => 'Pśinoski',
-'contribsub2' => 'Za $1 ($2)',
+'contribsub2' => 'Za {{GENDER:$3|$1}} ($2)',
'nocontribs' => 'Za toś te kriterije njejsu žedne změny se namakali.',
'uctop' => '(aktualny)',
'month' => 'wót mjaseca (a jěsnjej):',
'allmessagesdefault' => 'Standardny tekst',
'allmessagescurrent' => 'Aktualny tekst',
'allmessagestext' => 'How jo lisćina systemowych powěsćow w mjenowem rumje MediaWiki.
-Pšosym wobglědaj [//www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jolic coš k lokalizaciji MediaWiki pśinosowaś.',
+Pšosym wobglědaj [https://www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jolic coš k lokalizaciji MediaWiki pśinosowaś.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' njejo tuchylu móžno, dokulaž jo datowa banka offline.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Pó pśiměrjeńskem stawje filtrěrowaś:',
'tooltip-pt-anonuserpage' => 'Wužywarski bok za IP-adresu, z kótarejuž bok wobźěłajoš',
'tooltip-pt-mytalk' => 'Twój diskusijny bok',
'tooltip-pt-anontalk' => 'Diskusija wó změnach z tuteje IP-adresy.',
-'tooltip-pt-preferences' => 'Móje pśistajenja',
+'tooltip-pt-preferences' => 'Móje nastajenja',
'tooltip-pt-watchlist' => 'Lisćina bokow, kótarež se wobglěduju',
'tooltip-pt-mycontris' => 'Lisćina twójich pśinoskow',
'tooltip-pt-login' => 'Pśizjawjenje njejo obligatoriske, ale lubje witane.',
'pageinfo-length' => 'Dłujkosć boka (w bajtach)',
'pageinfo-article-id' => 'ID boka',
'pageinfo-language' => 'Rěc bokowego wopśimjeśa',
-'pageinfo-robot-policy' => 'Status pytawy',
-'pageinfo-robot-index' => 'Indeksěrujobny',
-'pageinfo-robot-noindex' => 'Njeindeksěrujobny',
+'pageinfo-robot-policy' => 'Indicěrowanje pśez roboty',
+'pageinfo-robot-index' => 'Dowólony',
+'pageinfo-robot-noindex' => 'Zakazany',
'pageinfo-views' => 'Licba zwobraznjenjow',
'pageinfo-watchers' => 'Licba wobglědowarjow boka',
'pageinfo-few-watchers' => 'Mjenjej ako $1 {{PLURAL:$1|wobglědowaŕ|wobglědowarja|wobglědowarje|wobglědowarjow}}',
-'pageinfo-redirects-name' => 'Dalejpósrědnjenja k toś tomu bokoju',
+'pageinfo-redirects-name' => 'Licba dalejpósrědnjenjow k toś tomu bokoju',
'pageinfo-redirects-value' => '$1',
'pageinfo-subpages-name' => 'Pódboki toś togo boka',
'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|dalejpósrědnjenja|dalejpósrědnjeni|dalejpósrědnjenja|dalejpósrědnjenjow}}; $3 {{PLURAL:$3|njedalejpósrědnjenja|njedalejpósrědnjeni|njedalejpósrědnjenja|njedalejpósrědnjenjow}})',
'svg-long-desc' => 'dataja SVG, nominalnje: $1 × $2 piksele, wjelikosć dataje: $3',
'svg-long-desc-animated' => 'Animěrowana SVG-dataja, zakładnej wótměra $1 × $2 pikselow, datajowa wjelikosć: $3',
'svg-long-error' => 'Njepłaśiwa SVG-dataja: $1',
-'show-big-image' => 'Połne optiske wótgranicowanje.',
+'show-big-image' => 'Originalna dataja',
'show-big-image-preview' => 'Wjelikosć toś togo pśeglěda: $1.',
'show-big-image-other' => '{{PLURAL:$2|Druge rozeznaśe||Drugej rozeznaśi|Druge rozeznaśa|Druge rozeznaśa}}: $1.',
'show-big-image-size' => '$1 × $2 pikselow',
'exif-compression-4' => 'CCITT kupka 4 faksowe koděrowanje',
'exif-copyrighted-true' => 'Pśez awtorske pšawo šćitany',
-'exif-copyrighted-false' => 'Zjawnosći pśistupny',
+'exif-copyrighted-false' => 'Status awtorskego pšawa njepóstajony',
'exif-unknowndate' => 'Njeznaty datum',
# External editor support
'edit-externally' => 'Dataje z eksternym programom wobźěłaś',
-'edit-externally-help' => '(Za dalšne informacije glědaj [//www.mediawiki.org/wiki/Manual:External_editors instalaciske instrukcije]).',
+'edit-externally-help' => '(Za dalšne informacije glědaj [https://www.mediawiki.org/wiki/Manual:External_editors instalaciske instrukcije]).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'wšykne',
'version-hook-subscribedby' => 'Aboněrowany wót',
'version-version' => '(Wersija $1)',
'version-license' => 'Licenca',
-'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'druge',
'version-credits-summary' => 'Źěkujomy se slědujucym wósobam za jich pśinoski k [[Special:Version|MediaWiki]]',
'version-license-info' => 'MediaWiki jo licha softwara: móžoš ju pód wuměnjenjami licence GNU General Public License, wózjawjeneje wót załožby Free Software Foundation, rozdźěliś a/abo změniś: pak pód wersiju 2 licence pak pód někakeju pózdźejšeju wersiju.
# Special:SpecialPages
'specialpages' => 'Specialne boki',
-'specialpages-note' => '----
-* Normalne specialne boki
+'specialpages-note' => '* Normalne specialne boki
* <span class="mw-specialpagerestricted">Specialne boki z wobgranicowanym pśistupom.</span>',
'specialpages-group-maintenance' => 'Wótwardowańske lisćiny',
'specialpages-group-other' => 'Druge specialne boki',
# Image rotation
'rotate-comment' => 'Wobraz wó $1 {{PLURAL:$1|stopjeń|stopnja|stopnje|stopnjow}} ako špěra źo wobwjertnjony',
+# Special:ExpandTemplates
+'expandtemplates' => 'Pśedłogi ekspanděrowaś',
+'expand_templates_intro' => 'Na toś tom boku dajo se tekst zapódaś a wšykne pśedłogi na njom se rekursiwnje ekspanděruju. Teke parserowe funkcije kaž <code><nowiki>{{</nowiki>#language:…}}</code> a wariable kaž <code><nowiki>{{</nowiki>CURRENTDAY}}</code> se ekspanděruju - faktiski wšo, což stoj mjazy dwójnymi wugibnjonymi spinkami.',
+'expand_templates_title' => 'Kontekstowy titel, za {{FULLPAGENAME}} atd.',
+'expand_templates_input' => 'Zapódany tekst:',
+'expand_templates_output' => 'Wuslědk',
+'expand_templates_xml_output' => 'Wudany XML',
+'expand_templates_ok' => 'W pórěźe',
+'expand_templates_remove_comments' => 'Komentary wótwónoźeś',
+'expand_templates_remove_nowiki' => 'Toflicki <nowiki> we wuslědku pódtłocyś',
+'expand_templates_generate_xml' => 'Parsowański bom XML pokazaś',
+'expand_templates_preview' => 'Pśeglěd',
+
);
'ok' => 'Oboh',
'retrievedfrom' => 'Naanu mantad "$1"',
'youhavenewmessages' => 'Kiharo $1 montok dia ($2).',
-'newmessageslink' => 'pason kawawagu',
-'newmessagesdifflink' => 'naalanan kawawagu',
'youhavenewmessagesfromusers' => 'Nakaramit ko do $1 mantad {{PLURAL:$3|momomoguno suai|$3 tongomomomoguno}} ($2).',
'youhavenewmessagesmanyusers' => 'Nakaramit koh do $1 mantad do tongomomomoguno ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|pason kawawagu|tangapason kawawagu}}',
'preferences' => 'Pipilion',
'mypreferences' => 'Pipilion',
'prefs-edits' => 'Ginumu niditan:',
-'prefsnologin' => 'Amu nokolog sumuang',
'changepassword' => 'Alanai kaatalib',
'prefs-skin' => 'Kulit',
'skin-preview' => 'Kokitanan',
# External editor support
'edit-externally' => 'Idito pail diti momoguno do kangkaraja pongi-ngidit poinlabus',
-'edit-externally-help' => '(Intaai [//www.mediawiki.org/wiki/Manual:External_editors karalan-ralanon papasang] do lobi gumu kointalangan)',
+'edit-externally-help' => '(Intaai [https://www.mediawiki.org/wiki/Manual:External_editors karalan-ralanon papasang] do lobi gumu kointalangan)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'oinsanan',
'ok' => 'ރަނގަޅު',
'retrievedfrom' => '$1 އިން',
'youhavenewmessages' => 'ތިޔަބޭފުޅާއަށް $1 ($2)',
-'newmessageslink' => 'އައު މެސެޖުތައް',
-'newmessagesdifflink' => 'އެންމެ ފަހުގެ ބަދަލު',
'youhavenewmessagesfromusers' => 'ތިބޭފުޅާއަށް {{PLURAL:$3|މެމްބަރެއް|$3 މެމްބަރުން}} $1 ފޮނުއްވާފައިވެއެވެ. ($2)',
'youhavenewmessagesmanyusers' => 'ތިބޭފުޅާއަށް ގިނަ މެމްބަރުން $1 ފޮނުއްވާފައިވެއެވެ. ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|އާ މެސެޖެއް|މެސެޖުތައް}}',
* @author Protnet
* @author Reedy
* @author Remember the dot
+ * @author Sfyrakis
* @author Sinopeus
* @author Tifa93
* @author Urhixidur
'ok' => 'Εντάξει',
'retrievedfrom' => 'Ανακτήθηκε από «$1»',
'youhavenewmessages' => 'Έχετε $1 ($2).',
-'newmessageslink' => 'νέα μηνύματα',
-'newmessagesdifflink' => 'τελευταία αλλαγή',
'youhavenewmessagesfromusers' => 'Έχετε $1 από {{PLURAL:$3|έναν άλλο χρήστη|$3 χρήστες}} ($2).',
'youhavenewmessagesmanyusers' => 'Έχετε $1 από πολλούς χρήστες ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ένα νέο μήνυμα|νέα μηνύματα}}',
'gotaccount' => 'Έχετε ήδη λογαριασμό; $1.',
'gotaccountlink' => 'Είσοδος',
'userlogin-resetlink' => 'Ξεχάσατε τα στοιχεία εισόδου σας;',
-'userlogin-resetpassword-link' => 'Î\88κδοÏ\83η νÎοÏ\85 κÏ\89δικοÏ\8d πρόσβασης',
+'userlogin-resetpassword-link' => 'Î\9eεÏ\87λαÏ\83αÏ\84ε Ï\84ον κÏ\89δικÏ\8c πρόσβασης',
'helplogin-url' => 'Help:Σύνδεση',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Βοήθεια για τη σύνδεσή σας]]',
'createacct-join' => 'Εισάγετε τα στοιχεία σας παρακάτω.',
'revdelete-hide-user' => 'Κρύψε όνομα χρήστη/IP συντάκτη',
'revdelete-hide-restricted' => 'Απόκρυψη δεδομένων από διαχειριστές καθώς και από άλλους',
'revdelete-radio-same' => '(μην αλλάξετε)',
-'revdelete-radio-set' => 'Î\9dαι',
-'revdelete-radio-unset' => 'Î\8cÏ\87ι',
+'revdelete-radio-set' => 'Î\95μÏ\86ανÎÏ\82',
+'revdelete-radio-unset' => 'Î\9aÏ\81Ï\85Ï\86Ï\8c',
'revdelete-suppress' => 'Απόκρυψε δεδομένα από διαχειριστές όπως και από άλλους',
'revdelete-unsuppress' => 'Αφαίρεσε περιορισμούς στις αποκατεστημένες αναθεωρήσεις',
'revdelete-log' => 'Αιτία:',
'preferences' => 'Προτιμήσεις',
'mypreferences' => 'Προτιμήσεις',
'prefs-edits' => 'Αριθμός επεξεργασιών:',
-'prefsnologin' => 'Δεν έχετε συνδεθεί.',
-'prefsnologintext' => 'Πρέπει να έχετε <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} συνδεθεί]</span> για να καθορίσετε τις προτιμήσεις χρήστη.',
'changepassword' => 'Αλλαγή κωδικού',
'prefs-skin' => 'Οπτική οργάνωση (skin)',
'skin-preview' => 'Προεπισκόπηση',
'recentchanges-label-minor' => 'Αυτή είναι μια μικροαλλαγή',
'recentchanges-label-bot' => 'Αυτή η επεξεργασία έγινε από ένα ρομπότ',
'recentchanges-label-unpatrolled' => 'Αυτή η επεξεργασία δεν έχει ελεγχθεί ακόμα',
+'recentchanges-legend-newpage' => '$1 - νέα σελίδα',
'rcnote' => "Παρακάτω {{PLURAL:$1|υπάρχει '''1''' αλλαγή|υπάρχουν οι τελευταίες '''$1''' αλλαγές}} στο διάστημα {{PLURAL:$2|της τελευταίας ημέρας|των τελευταίων '''$2''' ημερών}}, από τις $5, $4 και εξής.",
'rcnotefrom' => "Παρακάτω είναι οι αλλαγές από τις '''$2''' (εμφανίζονται μέχρι '''$1''').",
'rclistfrom' => 'Εμφάνιση νέων αλλαγών αρχίζοντας από $1',
'uploadnewversion-linktext' => 'Φορτώστε μια νέα έκδοση αυτού του αρχείου',
'shared-repo-from' => 'από το $1',
'shared-repo' => 'ένα κοινό εναποθετήριο',
-'shared-repo-name-wikimediacommons' => 'Κοινά Wikimedia',
+'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
'upload-disallowed-here' => 'Δεν μπορείτε να αντικαταστήσετε αυτό το αρχείο.',
# File reversion
'allmessagesdefault' => 'Προεπιλεγμένο κείμενο μηνύματος',
'allmessagescurrent' => 'Παρόν κείμενο',
'allmessagestext' => 'Αυτή είναι μια λίστα με όλα τα μηνύματα συστήματος που βρίσκονται στην περιοχή MediaWiki.
-Παρακαλούμε επισκεφθείτε τα [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] και [//translatewiki.net translatewiki.net] αν επιθυμείτε να συνεισφέρετε σε μια γενική μετάφραση του MediaWiki.',
+Παρακαλούμε επισκεφθείτε τα [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] και [//translatewiki.net translatewiki.net] αν επιθυμείτε να συνεισφέρετε σε μια γενική μετάφραση του MediaWiki.',
'allmessagesnotsupportedDB' => "Αυτή η σελίδα δεν υποστηρίζεται επειδή το ''wgUseDatabaseMessages'' είναι απενεργοποιημένο.",
'allmessages-filter-legend' => 'Φίλτρο',
'allmessages-filter' => 'Ταξινόμηση βάσει της δήλωσης προσαρμογής:',
# External editor support
'edit-externally' => 'Επεξεργαστείτε αυτό το αρχείο χρησιμοποιώντας κάποια εξωτερική εφαρμογή',
-'edit-externally-help' => '(Βλ. [//www.mediawiki.org/wiki/Manual:External_editors οδηγίες εγκατάστασης] για περισσότερες πληροφορίες)',
+'edit-externally-help' => '(Βλ. [https://www.mediawiki.org/wiki/Manual:External_editors οδηγίες εγκατάστασης] για περισσότερες πληροφορίες)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'όλες',
'version-hook-subscribedby' => 'Υπογεγραμμένο από',
'version-version' => '(Έκδοση $1)',
'version-license' => 'Άδεια χρήσης',
-'version-poweredby-credits' => "Αυτό το wiki λειτουργεί με το λογισμικό '''[//www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
+'version-poweredby-credits' => "Αυτό το wiki λειτουργεί με το λογισμικό '''[https://www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
'version-poweredby-others' => 'άλλοι',
'version-poweredby-translators' => 'translatewiki.net μεταφραστές',
'version-credits-summary' => 'Θα θέλαμε να αναγνωρίσουμε τη συμβολή των παρακάτω προσώπων στο [[Special:Version|MediaWiki]].',
'limitreport-expansiondepth' => 'Μεγαλύτερο βάθος ανάπτυξης',
'limitreport-expensivefunctioncount' => 'Πλήθος ακριβών συναρτήσεων συντακτικού αναλυτή',
+# Special:ExpandTemplates
+'expandtemplates' => 'Επέκτεινε τα πρότυπα',
+'expand_templates_intro' => 'Αυτή η ειδική σελίδα παίρνει κείμενο και αναπτύσσει όλα τα πρότυπα σε αυτό αναδρομικά.
+Επίσης αναπτύσσει συναρτήσεις συντακτικού αναλυτή όπως η
+<nowiki>{{</nowiki>#language:…}}, και μεταβλητές όπως η
+<nowiki>{{</nowiki>CURRENTDAY}}.
+Ουσιαστικά επεκτείνει οτιδήποτε βρίσκεται σε διπλές αγκύλες.',
+'expand_templates_title' => 'Τίτλων συμφραζόμενων, για την {{FULLPAGENAME}} κ.τ.λ.:',
+'expand_templates_input' => 'Κείμενο εισόδου:',
+'expand_templates_output' => 'Αποτέλεσμα',
+'expand_templates_xml_output' => 'Έξοδος XML',
+'expand_templates_ok' => 'Εντάξει',
+'expand_templates_remove_comments' => 'Αφαίρεση σχολίων',
+'expand_templates_remove_nowiki' => 'Απόκρυψη της ετικέτας <nowiki> στο αποτέλεσμα',
+'expand_templates_generate_xml' => 'Εμφάνιση δέντρου συντακτικής ανάλυσης XML',
+'expand_templates_preview' => 'Προεπισκόπηση',
+
);
'DoubleRedirects' => array( 'DoubleRedirects' ),
'EditWatchlist' => array( 'EditWatchlist' ),
'Emailuser' => array( 'EmailUser' ),
+ 'ExpandTemplates' => array( 'ExpandTemplates', 'Expantemplates' ),
'Export' => array( 'Export' ),
'Fewestrevisions' => array( 'FewestRevisions' ),
'FileDuplicateSearch' => array( 'FileDuplicateSearch' ),
'disclaimers' => 'Disclaimers',
'disclaimerpage' => 'Project:General disclaimer',
'edithelp' => 'Editing help',
-'edithelppage' => '//www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
+'edithelppage' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
'helppage' => 'Help:Contents',
'mainpage' => 'Main Page',
'mainpage-description' => 'Main page',
'backlinksubtitle' => '← $1', # only translate this message to other languages if you have to change it
'retrievedfrom' => 'Retrieved from "$1"',
'youhavenewmessages' => 'You have $1 ($2).',
-'newmessageslink' => 'new messages',
-'newmessagesdifflink' => 'last change',
'youhavenewmessagesfromusers' => 'You have $1 from {{PLURAL:$3|another user|$3 users}} ($2).',
'youhavenewmessagesmanyusers' => 'You have $1 from many users ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|a new message|new messages}}',
-'newmessagesdifflinkplural' => 'last {{PLURAL:$1|change|changes}}',
+'newmessageslinkplural' => '{{PLURAL:$1|a new message|999=new messages}}',
+'newmessagesdifflinkplural' => 'last {{PLURAL:$1|change|999=changes}}',
'youhavenewmessagesmulti' => 'You have new messages on $1',
'newtalkseparator' => ', ', # do not translate or duplicate this message to other languages
'editsection' => 'edit',
'sort-descending' => 'Sort descending',
'sort-ascending' => 'Sort ascending',
'interlanguage-link-title' => '$1 – $2', # only translate this message to other languages if you have to change it
+'interlanguage-link-title-langonly' => '$1', # do not translate or duplicate this message to other languages
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Page',
'invalidtitle-knownnamespace' => 'Invalid title with namespace "$2" and text "$3"',
'invalidtitle-unknownnamespace' => 'Invalid title with unknown namespace number $1 and text "$2"',
'exception-nologin' => 'Not logged in',
-'exception-nologin-text' => 'This page or action requires you to be logged in on this wiki.',
+'exception-nologin-text' => 'Please [[Special:Userlogin|log in]] to be able to access this page or action.',
+'exception-nologin-text-manual' => 'Please $1 to be able to access this page or action.',
# Virus scanner
'virus-badscanner' => "Bad configuration: Unknown virus scanner: ''$1''",
Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
'welcomeuser' => 'Welcome, $1!',
'welcomecreation-msg' => 'Your account has been created.
-Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
+You can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.',
'yourname' => 'Username:',
'userlogin-yourname' => 'Username',
'userlogin-yourname-ph' => 'Enter your username',
'revdelete-suppress-text' => "Suppression should '''only''' be used for the following cases:
* Potentially libelous information
* Inappropriate personal information
-*: ''home addresses and telephone numbers, social security numbers, etc.''",
+*: ''home addresses and telephone numbers, national identification numbers, etc.''",
'revdelete-legend' => 'Set visibility restrictions',
'revdelete-hide-text' => 'Revision text',
'revdelete-hide-image' => 'Hide file content',
'revdelete-hide-user' => "Editor's username/IP address",
'revdelete-hide-restricted' => 'Suppress data from administrators as well as others',
'revdelete-radio-same' => '(do not change)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Hidden',
+'revdelete-radio-set' => 'Hidden',
+'revdelete-radio-unset' => 'Visible',
'revdelete-suppress' => 'Suppress data from administrators as well as others',
'revdelete-unsuppress' => 'Remove restrictions on restored revisions',
'revdelete-log' => 'Reason:',
'showingresultsnum' => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
'showingresultsheader' => "{{PLURAL:$5|Result '''$1''' of '''$3'''|Results '''$1 - $2''' of '''$3'''}} for '''$4'''",
'nonefound' => "'''Note:''' Only some namespaces are searched by default.
-Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc), or use the desired namespace as prefix.",
+Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc.), or use the desired namespace as prefix.",
'search-nonefound' => 'There were no results matching the query.',
'powersearch' => 'Advanced search',
'powersearch-legend' => 'Advanced search',
'preferences-summary' => '', # do not translate or duplicate this message to other languages
'mypreferences' => 'Preferences',
'prefs-edits' => 'Number of edits:',
-'prefsnologin' => 'Not logged in',
-'prefsnologintext' => 'You must be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> to set user preferences.',
+'prefsnologintext2' => 'Please $1 to set user preferences.',
'changepassword' => 'Change password',
'changepassword-summary' => '', # do not translate or duplicate this message to other languages
'prefs-skin' => 'Skin',
'recentchanges-label-minor' => 'This is a minor edit',
'recentchanges-label-bot' => 'This edit was performed by a bot',
'recentchanges-label-unpatrolled' => 'This edit has not yet been patrolled',
+'recentchanges-label-plusminus' => 'The page size changed by this number of bytes',
+'recentchanges-legend-newpage' => '(also see [[Special:NewPages|list of new pages]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
'rcnote' => "Below {{PLURAL:$1|is '''1''' change|are the last '''$1''' changes}} in the last {{PLURAL:$2|day|'''$2''' days}}, as of $5, $4.",
'rcnotefrom' => "Below are the changes since '''$2''' (up to '''$1''' shown).",
'rclistfrom' => 'Show new changes starting from $1',
mail: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-There will be no other notifications in case of further activity unless you visit this page. You could also reset the notification flags for all your watched pages on your watchlist.
+There will be no other notifications in case of further activity unless you visit this page while logged in. You could also reset the notification flags for all your watched pages on your watchlist.
- Your friendly {{SITENAME}} notification system
+Your friendly {{SITENAME}} notification system
--
To change your email notification settings, visit
'allmessagesdefault' => 'Default message text',
'allmessagescurrent' => 'Current message text',
'allmessagestext' => 'This is a list of system messages available in the MediaWiki namespace.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "This page cannot be used because '''\$wgUseDatabaseMessages''' has been disabled.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter by customization state:',
'svg-long-desc' => 'SVG file, nominally $1 × $2 pixels, file size: $3',
'svg-long-desc-animated' => 'Animated SVG file, nominally $1 × $2 pixels, file size: $3',
'svg-long-error' => 'Invalid SVG file: $1',
-'show-big-image' => 'Full resolution',
+'show-big-image' => 'Original file',
'show-big-image-preview' => 'Size of this preview: $1.',
'show-big-image-other' => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
'show-big-image-size' => '$1 × $2 pixels',
# External editor support
'edit-externally' => 'Edit this file using an external application',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'all',
'percent' => '$1%', # only translate this message to other languages if you have to change it
'parentheses' => '($1)', # only translate this message to other languages if you have to change it
'brackets' => '[$1]', # only translate this message to other languages if you have to change it
-'quotation-marks' => '"$1"', # only translate this message to other languages if you have to change it
+'quotation-marks' => '"$1"',
# Multipage image navigation
'imgmultipageprev' => '← previous page',
'version-version' => '(Version $1)',
'version-svn-revision' => '(r$2)', # only translate this message to other languages if you have to change it
'version-license' => 'License',
-'version-poweredby-credits' => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "This wiki is powered by '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'others',
'version-poweredby-translators' => 'translatewiki.net translators',
'version-credits-summary' => 'We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Special pages',
'specialpages-summary' => '', # do not translate or duplicate this message to other languages
-'specialpages-note' => '----
-* Normal special pages.
+'specialpages-note-top' => 'Legend',
+'specialpages-note' => '* Normal special pages.
* <span class="mw-specialpagerestricted">Restricted special pages.</span>',
'specialpages-group-maintenance' => 'Maintenance reports',
'specialpages-group-other' => 'Other special pages',
'limitreport-expensivefunctioncount' => 'Expensive parser function count',
'limitreport-expensivefunctioncount-value' => '$1/$2', # only translate this message to other languages if you have to change it
+# ExpandTemplates
+'expandtemplates' => 'Expand templates',
+'expand_templates_intro' => 'This special page takes text and expands all templates in it recursively.
+It also expands supported parser functions like
+<code><nowiki>{{</nowiki>#language:…}}</code> and variables like
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+In fact, it expands pretty much everything in double-braces.',
+'expand_templates_title' => 'Context title, for {{FULLPAGENAME}}, etc.:',
+'expand_templates_input' => 'Input text:',
+'expand_templates_output' => 'Result',
+'expand_templates_xml_output' => 'XML output',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Remove comments',
+'expand_templates_remove_nowiki' => 'Suppress <nowiki> tags in result',
+'expand_templates_generate_xml' => 'Show XML parse tree',
+'expand_templates_preview' => 'Preview',
);
'ok' => 'Ek!',
'retrievedfrom' => 'Elŝutita el "$1"',
'youhavenewmessages' => 'Por vi estas $1 ($2).',
-'newmessageslink' => 'novaj mesaĝoj',
-'newmessagesdifflink' => 'ŝanĝoj kompare kun antaŭlasta versio',
'youhavenewmessagesfromusers' => 'Riceviĝis $1 de {{PLURAL:$3|alia uzanto|$3 uzantoj}} ($2).',
'youhavenewmessagesmanyusers' => 'Riceviĝis $1 de multaj uzantoj ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|nova mesaĝo|novaj mesaĝoj}}',
'preferences' => 'Preferoj',
'mypreferences' => 'Preferoj',
'prefs-edits' => 'Nombro de redaktoj:',
-'prefsnologin' => 'Ne jam salutis!',
-'prefsnologintext' => 'Vi devas esti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ensalutita]</span> por fari viajn preferojn.',
'changepassword' => 'Ŝanĝi pasvorton',
'prefs-skin' => 'Etoso',
'skin-preview' => 'Antaŭrigardo',
'recentchanges-label-minor' => 'Ĉi tiu estas eta redakto',
'recentchanges-label-bot' => 'Ĉi tiu redakto estis farita per roboto.',
'recentchanges-label-unpatrolled' => 'Ĉi tiu redakto ne jam estis patrolata.',
+'recentchanges-legend-newpage' => '$1 - nova paĝo',
'rcnote' => "Jen la {{PLURAL:$1|lasta '''1''' ŝanĝo|lastaj '''$1''' ŝanĝoj}} dum la {{PLURAL:$2|lasta tago|lastaj '''$2''' tagoj}}, ekde $5, $4.",
'rcnotefrom' => "Jen la ŝanĝoj ekde '''$2''' (lastaj ĝis '''$1''').",
'rclistfrom' => 'Montri novajn ŝanĝojn ekde "$1"',
'allmessagesdefault' => 'Defaŭlta teksto',
'allmessagescurrent' => 'Nuna teksto',
'allmessagestext' => 'Ĉi tio estas listo de ĉiuj mesaĝoj haveblaj en la MediaWiki-nomspaco.
-Bonvolu aliri [//www.mediawiki.org/wiki/Localisation MediaWiki-Asimilado] kaj [//translatewiki.net translatewiki.net]
+Bonvolu aliri [https://www.mediawiki.org/wiki/Localisation MediaWiki-Asimilado] kaj [//translatewiki.net translatewiki.net]
se vi volus kontribui al la komuna MediaWiki-asimilado.',
'allmessagesnotsupportedDB' => '{{ns:special}}:Allmessages ne subtenata ĉar la variablo wgUseDatabaseMessages estas malkonektita.',
'allmessages-filter-legend' => 'Filtri',
# External editor support
'edit-externally' => 'Ŝanĝi ĉi tiun dosieron per ekstera programaro',
-'edit-externally-help' => "(Vidu la [//www.mediawiki.org/wiki/Manual:External_editors instalinstrukciojn] por pliaj informoj.) ''[angle]''.",
+'edit-externally-help' => "(Vidu la [https://www.mediawiki.org/wiki/Manual:External_editors instalinstrukciojn] por pliaj informoj.) ''[angle]''.",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ĉiuj',
'version-hook-subscribedby' => 'Abonita de',
'version-version' => '(Versio $1)',
'version-license' => 'Permesilo',
-'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[//www.mediawiki.org/ MediaWiki]''', aŭtorrajto © 2001–$1 $2.",
+'version-poweredby-credits' => "Ĉi tiu vikio funkcias per '''[https://www.mediawiki.org/ MediaWiki]''', aŭtorrajto © 2001–$1 $2.",
'version-poweredby-others' => 'aliaj',
'version-credits-summary' => 'Ni ŝatus agnoski la sekvajn personojn pro siaj kontribuoj al [[Special:Version|MediaWiki]].',
'version-license-info' => 'MediaWiki estas libera programaro. Vi povas redistribui ĝin kaj/aŭ modifi ĝin sub la kondiĉoj de la GNU General Public Licens (GNU Ĝenerala Publika Permesilo) en ties eldono de la Free Software Foundation (Libera Softvara Fondaĵo) - aŭ versio 2 de la Permesilo, aŭ (laŭ via elekto) iu ajn posta versio.
# Special:SpecialPages
'specialpages' => 'Specialaj paĝoj',
-'specialpages-note' => '----
-* Normaj specialaj paĝoj.
+'specialpages-note' => '* Normaj specialaj paĝoj.
* <strong class="mw-specialpagerestricted">Limigitaj specialaj paĝoj.</strong>
* <span class="mw-specialpagecached">Memorkaŝitaj specialaj paĝoj (eble malaktualaj).</span>',
'specialpages-group-maintenance' => 'Raportoj pri prizorgado',
'duration-centuries' => '$1 {{PLURAL:$1|jarcento|jarcentoj}}',
'duration-millennia' => '$1 {{PLURAL:$1|jarmilo|jarmiloj}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Ampleksigi ŝablonojn',
+'expand_templates_intro' => 'Ĉi tiu speciala paĝo traktas tekston kaj ampleksigas ĉiujn ŝablonojn en ĝi rekursie.
+Ĝi ankaŭ ampleksigas sintaksajn funkciojn kiel
+<code><nowiki>{{</nowiki>#language:…}}</code> kaj variablojn kiel
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Fakte preskaŭ iujn ajn en duoblaj krampoj.',
+'expand_templates_title' => 'Kunteksta titolo, por {{FULLPAGENAME}}, ktp.:',
+'expand_templates_input' => 'Enigita teksto:',
+'expand_templates_output' => 'Rezulto',
+'expand_templates_xml_output' => 'XML-eligo',
+'expand_templates_ok' => 'Ek!',
+'expand_templates_remove_comments' => 'Forigi komentojn',
+'expand_templates_remove_nowiki' => 'Nuligi <nowiki> etikedojn en rezulto',
+'expand_templates_generate_xml' => 'Montri XML-sintaksarbon',
+'expand_templates_preview' => 'Antaŭrigardo',
+
);
* @author Hazard-SJ
* @author Hercule
* @author Icvav
+ * @author Ihojose
* @author Imre
* @author Invadinado
* @author Jatrobat
'tog-extendwatchlist' => 'Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes',
'tog-usenewrc' => 'Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento (requiere JavaScript)',
'tog-numberheadings' => 'Numerar automáticamente los encabezados',
-'tog-showtoolbar' => 'Mostrar la barra de edición (requiere JavaScript)',
-'tog-editondblclick' => 'Editar las páginas con doble clic (requiere JavaScript)',
-'tog-editsection' => 'Habilitar la edición de secciones mediante el enlace [editar]',
-'tog-editsectiononrightclick' => 'Habilitar la edición de secciones pulsando el botón derecho en los títulos de secciones (requiere JavaScript)',
+'tog-showtoolbar' => 'Mostrar la barra de edición',
+'tog-editondblclick' => 'Editar las páginas al pulsar dos veces en ellos con el ratón',
+'tog-editsection' => 'Activar la edición de secciones mediante el enlace [editar]',
+'tog-editsectiononrightclick' => 'Activar la edición de secciones pulsando el botón derecho en los títulos de secciones',
'tog-showtoc' => 'Mostrar el índice (para páginas con más de 3 encabezados)',
'tog-rememberpassword' => 'Recordar mi nombre de usuario y contraseña entre sesiones en este navegador (por un máximo de $1 {{PLURAL:$1|día|días}})',
'tog-watchcreations' => 'Añadir las páginas que cree y los archivos que suba a mi lista de seguimento',
'tog-shownumberswatching' => 'Mostrar el número de usuarios que la vigilan',
'tog-oldsig' => 'Firma actual:',
'tog-fancysig' => 'Tratar la firma como wikitexto (sin un enlace automático)',
-'tog-uselivepreview' => 'Usar previsualización en vivo (requiere JavaScript) (experimental)',
+'tog-uselivepreview' => 'Usar previsualización dinámica (experimental)',
'tog-forceeditsummary' => 'Avisarme cuando grabe la página sin introducir un resumen de edición',
'tog-watchlisthideown' => 'Ocultar mis ediciones en la lista de seguimiento',
'tog-watchlisthidebots' => 'Ocultar las ediciones de bots en la lista de seguimiento',
# Font style option in Special:Preferences
'editfont-style' => 'Estilo de tipografía del área de edición:',
'editfont-default' => 'Predeterminado del navegador',
-'editfont-monospace' => 'Tipografía monoespaciada',
+'editfont-monospace' => 'Tipo de letra monoespaciado',
'editfont-sansserif' => 'Tipo de letra de palo seco',
'editfont-serif' => 'Tipo de letra con serifas',
'sun' => 'dom',
'mon' => 'lun',
'tue' => 'mar',
-'wed' => 'mie',
+'wed' => 'mié',
'thu' => 'jue',
'fri' => 'vie',
'sat' => 'sab',
'feb' => 'feb',
'mar' => 'mar',
'apr' => 'abr',
-'may' => 'mayo',
+'may' => 'may',
'jun' => 'jun',
'jul' => 'jul',
'aug' => 'ago',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Categoría|Categorías}}',
-'category_header' => 'Artículos en la categoría «$1»',
+'category_header' => 'Páginas en la categoría «$1»',
'subcategories' => 'Subcategorías',
'category-media-header' => 'Archivos multimedia en la categoría «$1»',
-'category-empty' => "''La categoría no contiene actualmente ningún artículo o archivo multimedia.''",
+'category-empty' => "''La categoría no contiene ninguna página o archivo.''",
'hidden-categories' => '{{PLURAL:$1|Categoría escondida|Categorías escondidas}}',
'hidden-category-category' => 'Categorías ocultas',
'category-subcat-count' => '{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}',
'category-file-count' => '{{PLURAL:$2|Esta categoría contiene solamente el siguiente archivo.|{{PLURAL:$1|El siguiente archivo pertenece|Los siguientes $1 archivos pertenecen}} a esta categoría, de un total de $2.}}',
'category-file-count-limited' => '{{PLURAL:$1|El siguiente fichero pertenece|Los siguientes $1 ficheros pertenecen}} a esta categoría.',
'listingcontinuesabbrev' => 'cont.',
-'index-category' => 'Páginas indexadas',
-'noindex-category' => 'Páginas no indexadas',
+'index-category' => 'Páginas indizadas',
+'noindex-category' => 'Páginas no indizadas',
'broken-file-category' => 'Páginas con enlaces rotos a archivos',
'about' => 'Acerca de',
'cancel' => 'Cancelar',
'moredotdotdot' => 'Más...',
'morenotlisted' => 'Esta lista no está completa.',
-'mypage' => 'Mi página',
+'mypage' => 'Página',
'mytalk' => 'Discusión',
'anontalk' => 'Discusión para esta IP',
'navigation' => 'Navegación',
'qbmyoptions' => 'Mis páginas',
'qbspecialpages' => 'Páginas especiales',
'faq' => 'Preguntas más frecuentes',
-'faqpage' => 'Project:FAQ',
+'faqpage' => 'Project:P+F',
# Vector skin
'vector-action-addsection' => 'Nueva sección',
'vector-view-edit' => 'Editar',
'vector-view-history' => 'Ver historial',
'vector-view-view' => 'Leer',
-'vector-view-viewsource' => 'Ver fuente',
+'vector-view-viewsource' => 'Ver código',
'actions' => 'Acciones',
'namespaces' => 'Espacios de nombres',
'variants' => 'Variantes',
'talkpagelinktext' => 'Discusión',
'specialpage' => 'Página especial',
'personaltools' => 'Herramientas personales',
-'postcomment' => 'Nueva sección',
+'postcomment' => 'Sección nueva',
'articlepage' => 'Ver artículo',
'talk' => 'Discusión',
'views' => 'Vistas',
'disclaimers' => 'Aviso legal',
'disclaimerpage' => 'Project:Limitación general de responsabilidad',
'edithelp' => 'Ayuda de edición',
-'helppage' => 'Help:Contenidos',
+'helppage' => 'Help:Contenido',
'mainpage' => 'Página principal',
'mainpage-description' => 'Página principal',
'policy-url' => 'Project:Políticas',
'ok' => 'Aceptar',
'retrievedfrom' => 'Obtenido de «$1»',
'youhavenewmessages' => 'Tienes $1 ($2).',
-'newmessageslink' => 'mensajes nuevos',
-'newmessagesdifflink' => 'última modificación',
'youhavenewmessagesfromusers' => 'Tienes $1 de {{PLURAL:$3|otro usuario|$3 usuarios}} ($2).',
'youhavenewmessagesmanyusers' => 'Tienes $1 de muchos usuarios ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un nuevo mensaje|mensajes nuevos}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|última modificación|últimos cambios}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mensaje nuevo|999=mensajes nuevos}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|último cambio|999=últimos cambios}}',
'youhavenewmessagesmulti' => 'Tienes mensajes nuevos en $1',
'editsection' => 'editar',
'editold' => 'editar',
-'viewsourceold' => 'ver código fuente',
+'viewsourceold' => 'ver código',
'editlink' => 'modificar',
-'viewsourcelink' => 'ver fuente',
+'viewsourcelink' => 'ver código',
'editsectionhint' => 'Editar sección: $1',
'toc' => 'Contenido',
'showtoc' => 'mostrar',
'hidetoc' => 'ocultar',
-'collapsible-collapse' => 'Ocultar',
-'collapsible-expand' => 'Mostrar',
+'collapsible-collapse' => 'Contraer',
+'collapsible-expand' => 'Expandir',
'thisisdeleted' => '¿Ver o restaurar $1?',
-'viewdeleted' => '¿Deseas ver $1?',
+'viewdeleted' => '¿Quieres ver $1?',
'restorelink' => '{{PLURAL:$1|una edición borrada|$1 ediciones borradas}}',
-'feedlinks' => 'Sindicación:',
-'feed-invalid' => 'Tipo de subscripción a sindicación de noticias inválida.',
-'feed-unavailable' => 'Las fuentes web no están disponibles',
-'site-rss-feed' => '$1 Fuente RSS',
-'site-atom-feed' => 'Feed Atom de $1',
+'feedlinks' => 'Canal:',
+'feed-invalid' => 'El tipo de canal de suscripción no es válido.',
+'feed-unavailable' => 'Los canales de sindicación no están disponibles',
+'site-rss-feed' => 'Canal RSS de $1',
+'site-atom-feed' => 'Canal Atom de $1',
'page-rss-feed' => 'Canal RSS «$1»',
'page-atom-feed' => 'Canal Atom «$1»',
'red-link-title' => '$1 (la página no existe)',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Página',
'nstab-user' => 'Página {{GENDER:{{ROOTPAGENAME}}|del usuario|de la usuaria}}',
-'nstab-media' => 'Media',
+'nstab-media' => 'Multimedia',
'nstab-special' => 'Página especial',
'nstab-project' => 'Página del proyecto',
'nstab-image' => 'Archivo',
'nstab-category' => 'Categoría',
# Main script and global functions
-'nosuchaction' => 'No existe tal acción',
-'nosuchactiontext' => 'La acción especificada en la dirección es inválida.
+'nosuchaction' => 'No existe esa acción',
+'nosuchactiontext' => 'La acción especificada en la dirección no es válida.
Es posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto. Esto también podría indicar un error en el software utilizado en {{SITENAME}}.',
'nosuchspecialpage' => 'No existe esa página especial',
'nospecialpagetext' => '<strong>Ha solicitado una página especial inexistente.</strong>
'wrong_wfQuery_params' => 'Parámetros incorrectos para wfQuery()<br />
Función: $1<br />
Consulta: $2',
-'viewsource' => 'Ver fuente',
-'viewsource-title' => 'Ver el código fuente de «$1»',
-'actionthrottled' => 'Acción bloqueada',
+'viewsource' => 'Ver código',
+'viewsource-title' => 'Ver el código de «$1»',
+'actionthrottled' => 'Acción limitada',
'actionthrottledtext' => "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición u otras acciones.',
'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
'invalidtitle-knownnamespace' => 'Título no válido con el espacio de nombres "$2" y el texto "$3"',
'invalidtitle-unknownnamespace' => 'Título no válido con número de espacio de nombres desconocido $1 y el texto "$2"',
'exception-nologin' => 'No has iniciado sesión',
-'exception-nologin-text' => 'Esta página o acción requiere que inicies sesión en este wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Inicia sesión]] para acceder a esta página o acción.',
+'exception-nologin-text-manual' => 'Necesitas $1 para acceder a esta página o acción.',
# Virus scanner
'virus-badscanner' => "Error de configuración: Antivirus desconocido: ''$1''",
'nologinlink' => 'Crear una cuenta',
'createaccount' => 'Crear una cuenta',
'gotaccount' => '¿Ya tienes una cuenta? $1.',
-'gotaccountlink' => 'Entrar',
+'gotaccountlink' => 'Iniciar sesión',
'userlogin-resetlink' => '¿Olvidaste tus datos de acceso?',
'userlogin-resetpassword-link' => '¿Has olvidado tu contraseña?',
'helplogin-url' => 'Help:Inicio de sesión',
'createacct-imgcaptcha-ph' => 'Escribe el texto de arriba',
'createacct-submit' => 'Crea tu cuenta',
'createacct-another-submit' => 'Crear otra cuenta',
-'createacct-benefit-heading' => '{{SITENAME}} lo construye gente como tú.',
+'createacct-benefit-heading' => '{{SITENAME}} es hecha por gente como tú.',
'createacct-benefit-body1' => '{{PLURAL:$1|edición|ediciones}}',
'createacct-benefit-body2' => '{{PLURAL:$1|página|páginas}}',
'createacct-benefit-body3' => '{{PLURAL:$1|colaborador reciente|colaboradores recientes}}',
'badretype' => 'Las contraseñas no coinciden.',
'userexists' => 'El nombre de usuario indicado ya está en uso.
-Por favor escoge un nombre diferente.',
+Elige un nombre diferente.',
'loginerror' => 'Error de inicio de sesión',
'createacct-error' => 'Error al crear la cuenta',
'createaccounterror' => 'No se pudo crear la cuenta: $1',
Por favor, escribe una dirección en el formato adecuado o deja el campo en blanco.',
'cannotchangeemail' => 'Las direcciones de la correo electrónico de las cuentas de usuario no puedes cambiarse en esta wiki.',
'emaildisabled' => 'Este sitio no puede enviar mensajes de correo electrónico.',
-'accountcreated' => 'Cuenta creada',
+'accountcreated' => 'Se ha creado la cuenta',
'accountcreatedtext' => 'La cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ha sido creada.',
'createaccount-title' => 'Creación de cuenta para {{SITENAME}}',
'createaccount-text' => 'Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2».
'subject' => 'Asunto/encabezado:',
'minoredit' => 'Esta es una edición menor',
'watchthis' => 'Vigilar esta página',
-'savearticle' => 'Grabar la página',
+'savearticle' => 'Guardar la página',
'preview' => 'Previsualizar',
'showpreview' => 'Mostrar previsualización',
-'showlivepreview' => 'Previsualización inmediata',
-'showdiff' => 'Mostrar cambios',
+'showlivepreview' => 'Previsualización dinámica',
+'showdiff' => 'Mostrar los cambios',
'anoneditwarning' => "'''Aviso:''' No has iniciado sesión con una cuenta de usuario.
Tu dirección IP se almacenará en el historial de ediciones de la página.",
'anonpreviewwarning' => "''No has iniciado sesión con una cuenta de usuario. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de la página.''",
'missingsummary' => "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
-'missingcommenttext' => 'Por favor, introduce un texto debajo.',
+'missingcommenttext' => 'Escribe un comentario a continuación.',
'missingcommentheader' => "'''Recordatorio:''' No has escrito un título para este comentario. Si haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
'summary-preview' => 'Previsualización del resumen:',
'subject-preview' => 'Previsualización del tema/título:',
'loginreqtitle' => 'Es necesario iniciar sesión',
'loginreqlink' => 'iniciar sesión',
'loginreqpagetext' => 'Debes $1 para ver otras páginas.',
-'accmailtitle' => 'La contraseña ha sido enviada.',
+'accmailtitle' => 'Se ha enviado la contraseña',
'accmailtext' => 'Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]].
La contraseña para esta nueva cuenta puede cambiarse en [[Special:ChangePassword|la página destinada para ello]] después de haber iniciado sesión.',
Se rechazó la edición para evitar que el texto de la página se corrompa.
Esto sucede en ocasiones cuando se usa un servicio de proxy anónimo defectuoso.'''",
'edit_form_incomplete' => "'''Algunas partes del formulario de edición no llegaron al servidor, comprueba que tus ediciones están intactas e inténtalo de nuevo'''.",
-'editing' => 'Editando $1',
-'creating' => 'Creando la página $1',
-'editingsection' => 'Editando $1 (sección)',
-'editingcomment' => 'Editando $1 (nueva sección)',
+'editing' => 'Editar $1',
+'creating' => 'Crear la página $1',
+'editingsection' => 'Editar $1 (sección)',
+'editingcomment' => 'Editar $1 (sección nueva)',
'editconflict' => 'Conflicto de edición: $1',
'explainconflict' => "Alguien más ha cambiado esta página desde que empezaste a editarla.
El área de texto superior contiene el texto de la página como existe actualmente.
'''(ant)''' = diferencias con la versión anterior, '''m''' = edición menor",
'history-fieldset-title' => 'Buscar en el historial',
'history-show-deleted' => 'Solo ediciones ocultadas',
-'histfirst' => 'Primeras',
-'histlast' => 'Ã\9altimas',
+'histfirst' => 'primeras',
+'histlast' => 'últimas',
'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
'historyempty' => '(vacío)',
'revdelete-nooldid-text' => 'No se ha especificado una revisión o revisiones destino sobre las que realizar esta función.',
'revdelete-nologtype-title' => 'ningún nombre dado',
'revdelete-nologtype-text' => 'No has especificado ningún nombre para ejecutar esta acción.',
-'revdelete-nologid-title' => 'Entrada de registro inválida',
+'revdelete-nologid-title' => 'Entrada de registro no válida',
'revdelete-nologid-text' => 'Tampoco has especificado un objetivo de eventos para ejecutar esta función o la entrada especificada no existe.',
-'revdelete-no-file' => 'El fichero especificado no existe.',
-'revdelete-show-file-confirm' => '¿Realmente deseas ver la revisión borrada del archivo "<nowiki>$1</nowiki>" del $2 a las $3?',
+'revdelete-no-file' => 'El archivo especificado no existe.',
+'revdelete-show-file-confirm' => '¿Quieres ver la revisión borrada del archivo «<nowiki>$1</nowiki>» del $2 a las $3?',
'revdelete-show-file-submit' => 'Sí',
'revdelete-selected' => "'''{{PLURAL:$2|Revisión seleccionada|Revisiones seleccionadas}} de [[:$1]]:'''",
'logdelete-selected' => "'''{{PLURAL:$1|Seleccionado un evento|Seleccionados eventos}}:'''",
'revdelete-hide-user' => 'Nombre/IP del editor',
'revdelete-hide-restricted' => 'Suprimir datos a los administradores así como al resto',
'revdelete-radio-same' => '(no cambiar)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Oculto',
+'revdelete-radio-set' => 'Oculta',
+'revdelete-radio-unset' => 'Visible',
'revdelete-suppress' => 'Suprimir datos a los administradores así como al resto',
'revdelete-unsuppress' => 'Eliminar restricciones de revisiones restauradas',
'revdelete-log' => 'Motivo:',
** Comentario o información personal inapropiados
** Nombre de usuario inapropiado
** Información potencialmente injuriosa o calumniante',
-'revdelete-otherreason' => 'Otra/adicional razón:',
-'revdelete-reasonotherlist' => 'Otra razón',
-'revdelete-edit-reasonlist' => 'Editar razones de borrado',
+'revdelete-otherreason' => 'Otro motivo:',
+'revdelete-reasonotherlist' => 'Otro motivo',
+'revdelete-edit-reasonlist' => 'Editar motivos de borrado',
'revdelete-offender' => 'Autor de la revisión:',
# Suppression log
'mergehistory-autocomment' => 'Fusionando [[:$1]] en [[:$2]]',
'mergehistory-comment' => 'Fusionando [[:$1]] en [[:$2]]: $3',
'mergehistory-same-destination' => 'Las páginas de origen y destino no pueden ser la misma',
-'mergehistory-reason' => 'Razón:',
+'mergehistory-reason' => 'Motivo:',
# Merge log
'mergelog' => 'Registro de fusiones',
'preferences' => 'Preferencias',
'mypreferences' => 'Preferencias',
'prefs-edits' => 'Cantidad de ediciones:',
-'prefsnologin' => 'No has iniciado sesión',
-'prefsnologintext' => 'Necesitas <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} iniciar sesión]</span> para establecer las preferencias del usuario.',
+'prefsnologintext2' => 'Necesitas $1 para definir las preferencias del usuario.',
'changepassword' => 'Cambiar contraseña',
'prefs-skin' => 'Apariencia',
'skin-preview' => 'Previsualizar',
'prefs-watchlist-days' => 'Número de días a mostrar en la lista de seguimiento:',
'prefs-watchlist-days-max' => 'Máximo $1 {{PLURAL:$1|día|días}}',
'prefs-watchlist-edits' => 'Número de ediciones a mostrar en la lista expandida:',
-'prefs-watchlist-edits-max' => 'Máximo: 1000',
+'prefs-watchlist-edits-max' => 'Cantidad máxima: 1000',
'prefs-watchlist-token' => 'Ficha de lista de seguimiento:',
'prefs-misc' => 'Miscelánea',
'prefs-resetpass' => 'Cambiar contraseña',
'guesstimezone' => 'Rellenar a partir de la hora del navegador',
'timezoneregion-africa' => 'África',
'timezoneregion-america' => 'América',
-'timezoneregion-antarctica' => 'Antártica',
+'timezoneregion-antarctica' => 'Antártida',
'timezoneregion-arctic' => 'Ártico',
'timezoneregion-asia' => 'Asia',
'timezoneregion-atlantic' => 'Océano Atlántico',
'yourlanguage' => 'Idioma:',
'yourvariant' => 'Variante lingüística del contenido:',
'prefs-help-variant' => 'Tu variante u ortografía preferida para mostrar las páginas de contenido de este wiki.',
-'yournick' => 'Nueva firma:',
+'yournick' => 'Firma nueva:',
'prefs-help-signature' => 'Los comentarios en páginas de discusión deberían firmarse con «<nowiki>~~~~</nowiki>», que se convertirá en tu firma con fecha y hora.',
'badsig' => 'El código de tu firma no es válido; comprueba las etiquetas HTML.',
'badsiglength' => 'Tu firma es muy larga.
Debe contener un máximo de {{PLURAL:$1|un carácter|$1 caracteres}}.',
-'yourgender' => '¿Cómo prefieres ser descrito/a?',
-'gender-unknown' => 'Prefiero no especificar',
+'yourgender' => 'Sexo:',
+'gender-unknown' => 'Prefiero no especificarlo',
'gender-male' => 'Masculino',
'gender-female' => 'Femenino',
'prefs-help-gender' => 'Opcional: empleado para que sea usado correctamente el género por parte del software. Esta información será pública.',
'right-createpage' => 'Crear páginas que no sean páginas de discusión',
'right-createtalk' => 'Crear páginas de discusión',
'right-createaccount' => 'Crear cuentas de usuario nuevas',
-'right-minoredit' => 'Marcar ediciones como «menores»',
+'right-minoredit' => 'Marcar ediciones como menores',
'right-move' => 'Trasladar páginas',
'right-move-subpages' => 'Trasladar páginas con sus subpáginas',
'right-move-rootuserpages' => 'Trasladar páginas de usuario raíz',
'recentchanges-label-minor' => 'Esta es una edición menor',
'recentchanges-label-bot' => 'Esta edición fue realizada por un robot',
'recentchanges-label-unpatrolled' => 'Esta edición todavía no se ha patrullado',
+'recentchanges-legend-newpage' => '$1 - página nueva',
'rcnote' => "Debajo {{PLURAL:$1|hay '''1''' cambio efectuado|están los últimos '''$1''' cambios efectuados}} en {{PLURAL:$2|el último día|los últimos '''$2''' días}}, hasta el $4, $5.",
'rcnotefrom' => 'A continuación se muestran los cambios desde <b>$2</b> (hasta <b>$1</b>).',
'rclistfrom' => 'Mostrar nuevos cambios desde $1',
'allmessagesdefault' => 'Texto predeterminado',
'allmessagescurrent' => 'Texto actual',
'allmessagestext' => 'Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki:
-Por favor visita [//www.mediawiki.org/wiki/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir con la localización genérica MediaWiki.',
+Por favor visita [https://www.mediawiki.org/wiki/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir con la localización genérica MediaWiki.',
'allmessagesnotsupportedDB' => "Esta página no está disponible porque '''\$wgUseDatabaseMessages''' está deshabilitado.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtrar por estado de personalización:',
Permite añadir una razón al resumen de edición.',
'tooltip-preferences-save' => 'Guardar las preferencias',
'tooltip-summary' => 'Introduce un breve resumen',
+'interlanguage-link-title' => '$1 ($2)',
# Stylesheets
'common.css' => '/* El CSS colocado en esta página será aplicado a todas las apariencias */',
'pageinfo-length' => 'Longitud de la página (en bytes)',
'pageinfo-article-id' => 'Identificador ID de la página',
'pageinfo-language' => 'Idioma de la página',
+'pageinfo-content-model' => 'Modelo de contenido de la página',
'pageinfo-robot-policy' => 'Indización por robots',
'pageinfo-robot-index' => 'Permitido',
'pageinfo-robot-noindex' => 'No permitido',
'svg-long-desc' => 'archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3',
'svg-long-desc-animated' => 'Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3',
'svg-long-error' => 'Archivo SVG no válido: $1',
-'show-big-image' => 'Resolución original',
+'show-big-image' => 'Archivo original',
'show-big-image-preview' => 'Tamaño de esta previsualización: $1.',
'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otras resoluciones}}: $1.',
'show-big-image-size' => '$1 × $2 píxeles',
# External editor support
'edit-externally' => 'Editar este archivo usando una aplicación externa',
-'edit-externally-help' => '(Lee las [//www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración] -en inglés- para más información)',
+'edit-externally-help' => '(Lee las [https://www.mediawiki.org/wiki/Manual:External_editors instrucciones de configuración] -en inglés- para más información)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todos',
# Separators for various lists, etc.
'comma-separator' => ', ',
+'quotation-marks' => '«$1»',
# Multipage image navigation
'imgmultipageprev' => '← página anterior',
'version-hook-subscribedby' => 'Suscrito por',
'version-version' => '(Versión $1)',
'version-license' => 'Licencia',
-'version-poweredby-credits' => "Este wiki funciona gracias a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Este wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'otros',
'version-poweredby-translators' => 'Traductores de translatewiki.net',
'version-credits-summary' => 'Queremos reconocer a las siguientes personas por su contribución a [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Páginas especiales',
-'specialpages-note' => '----
-* Páginas especiales normales
+'specialpages-note-top' => 'Leyenda:',
+'specialpages-note' => '* Páginas especiales normales
* <span class="mw-specialpagerestricted">Páginas especiales restringidas.</span>
* <span class="mw-specialpagecached">Páginas especiales en caché (podrían ser obsoletas).</span>',
'specialpages-group-maintenance' => 'Reportes de mantenimiento',
'tags-active-header' => '¿Activo?',
'tags-hitcount-header' => 'Cambios etiquetados',
'tags-active-yes' => 'Sí',
+'tags-active-no' => 'No',
'tags-edit' => 'editar',
'tags-hitcount' => '$1 {{PLURAL:$1|cambio|cambios}}',
'limitreport-expansiondepth' => 'Profundidad máxima de expansión',
'limitreport-expensivefunctioncount' => 'Cuenta de la funcion expansiva del analizador',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir plantillas',
+'expand_templates_intro' => 'Esta página especial toma un texto wiki y expande todas sus plantillas recursivamente.
+También expande las funciones sintácticas como <code><nowiki>{{</nowiki>#language:…}}</code>, y variables como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. De hecho, expande casi cualquier cosa que esté entre llaves dobles.',
+'expand_templates_title' => 'Título de la página, útil para expandir <nowiki>{{PAGENAME}}</nowiki> o similares',
+'expand_templates_input' => 'Texto a expandir:',
+'expand_templates_output' => 'Resultado:',
+'expand_templates_xml_output' => 'Salida XML',
+'expand_templates_ok' => 'Aceptar',
+'expand_templates_remove_comments' => 'Eliminar comentarios (<!-- ... -->)',
+'expand_templates_remove_nowiki' => 'Suprimir <nowiki> etiquetas en resultado',
+'expand_templates_generate_xml' => 'Mostrar el árbol XML.',
+'expand_templates_preview' => 'Previsualización',
+
);
'returnto' => 'Naase lehele $1',
'tagline' => 'Allikas: {{SITENAME}}',
'help' => 'Juhend',
-'search' => 'Otsimine',
+'search' => 'Otsing',
'searchbutton' => 'Otsi',
'go' => 'Mine',
'searcharticle' => 'Mine',
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Pärit leheküljelt "$1"',
'youhavenewmessages' => 'Sulle on $1 ($2).',
-'newmessageslink' => 'uusi sõnumeid',
-'newmessagesdifflink' => 'viimane muudatus',
'youhavenewmessagesfromusers' => 'Sulle on $1 {{PLURAL:$3|ühelt|$3}} kasutajalt ($2).',
'youhavenewmessagesmanyusers' => 'Sulle on $1 paljudelt kasutajatelt ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|uus sõnum|uusi sõnumeid}}',
'editsection' => 'muuda',
'editold' => 'redigeeri',
'viewsourceold' => 'vaata lähteteksti',
-'editlink' => 'redigeeri',
+'editlink' => 'muuda',
'viewsourcelink' => 'vaata lähteteksti',
-'editsectionhint' => 'Redigeeri alaosa "$1"',
+'editsectionhint' => 'Muuda alaosa "$1"',
'toc' => 'Sisukord',
'showtoc' => 'näita',
'hidetoc' => 'peida',
'feedlinks' => 'Sööde:',
'feed-invalid' => 'Vigane vootüüp.',
'feed-unavailable' => 'Uudisvood ei ole saadaval.',
-'site-rss-feed' => '$1 RSS-toide',
-'site-atom-feed' => '$1 Atom-toide',
-'page-rss-feed' => '"$1" RSS-toide',
-'page-atom-feed' => '"$1" Atom-toide',
+'site-rss-feed' => '$1 (RSS-voog)',
+'site-atom-feed' => '$1 Atom-voog',
+'page-rss-feed' => '$1 (RSS-voog)',
+'page-atom-feed' => '$1 (Atom-voog)',
'red-link-title' => '$1 (pole veel kirjutatud)',
'sort-descending' => 'Järjesta laskuvalt',
'sort-ascending' => 'Järjesta tõusvalt',
'passwordsent' => 'Uus parool on saadetud kasutaja $1 registreeritud e-postiaadressil.
Pärast parooli saamist logige palun sisse.',
'blocked-mailpassword' => 'Sinu IP-aadressi jaoks on toimetamine blokeeritud, seetõttu ei saa sa kasutada ka parooli meeldetuletamise funktsiooni.',
-'eauthentsent' => 'Sisestatud e-posti aadressile on saadetud kinnituse e-kiri.
-Enne kui su kontole ükskõik milline muu e-kiri saadetakse, pead sa e-kirjas olevat juhist järgides kinnitama, et konto on tõepoolest sinu.',
+'eauthentsent' => 'Määratud e-posti aadressile on saadetud kinnituse e-kiri.
+Enne kui su kontole ükskõik milline muu e-kiri saadetakse, pead e-kirjas olevat juhist järgides kinnitama, et konto on tõepoolest sinu.',
'throttled-mailpassword' => 'Parooli lähtestamise e-kiri saadetud viimase {{PLURAL:$1|tunni|$1 tunni}} jooksul.
Väärtarvitamise vältimiseks saadetakse {{PLURAL:$1|tunni|$1 tunni}} jooksul ainult üks lähtestamise e-kiri.',
'mailerror' => 'Viga kirja saatmisel: $1',
'acct_creation_throttle_hit' => 'Selle viki külastajad, kes kasutavad sinu IP-aadressi, on viimase ööpäeva jooksul loonud {{PLURAL:$1|ühe konto|$1 kontot}}, mis on selles ajavahemikus ülemmääraks.
Seetõttu ei saa seda IP-aadressi kasutades hetkel rohkem kontosid luua.',
'emailauthenticated' => 'Sinu e-posti aadressi kinnitamisaeg: $2 kell $3.',
-'emailnotauthenticated' => 'Sinu e-posti aadress <strong>pole veel kinnitatud</strong>. Järgnevate funktsioonidega seotud e-kirju kinnitamata aadressile ei saadeta.',
+'emailnotauthenticated' => 'Sinu e-posti aadress pole veel kinnitatud.
+Järgnevate funktsioonidega seotud e-kirju ei saadeta.',
'noemailprefs' => 'Järgnevate võimaluste toimimiseks on vaja sisestada e-posti aadress.',
'emailconfirmlink' => 'Kinnita oma e-posti aadress',
'invalidemailaddress' => 'E-posti aadress ei ole aktsepteeritav, sest see on vigaselt kirjutatud.
'resettokens-legend' => 'Lubade lähtestamine',
'resettokens-tokens' => 'Load:',
'resettokens-token-label' => '$1 (praegune väärtus: $2)',
-'resettokens-watchlist-token' => '[[Special:Watchlist|Jälgimisloendis olevatel lehekülgedel tehtud muudatuste]] võrgutoite (Atom/RSS) luba',
+'resettokens-watchlist-token' => '[[Special:Watchlist|Jälgimisloendis olevatel lehekülgedel tehtud muudatuste]] veebivoo (Atom/RSS) luba',
'resettokens-done' => 'Load lähtestatud.',
'resettokens-resetbutton' => 'Lähtesta valitud load',
'headline_sample' => 'Pealkiri',
'headline_tip' => '2. taseme pealkiri',
'nowiki_sample' => 'Sisesta vormindamata tekst',
-'nowiki_tip' => 'Ignoreeri viki vormindust',
+'nowiki_tip' => 'Ignoreeri vikivormindust',
'image_sample' => 'Näidis.jpg',
'image_tip' => 'Pilt',
'media_sample' => 'Näidis.ogg',
See on juba olemas.',
'defaultmessagetext' => 'Sõnumi vaiketekst',
'invalid-content-data' => 'Vigased sisuandmed',
-'content-not-allowed-here' => 'Lehekülg [[$2]] ei või sisaldada $1.',
+'content-not-allowed-here' => 'Lehekülg [[$2]] ei või sisaldada $1i.',
'editwarning-warning' => 'Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.
Kui oled sisse loginud, saad selle hoiatuse eelistuste alaosas "Toimetamine" keelata.',
# Content models
-'content-model-wikitext' => 'vikiteksti',
-'content-model-text' => 'lihtteksti',
-'content-model-javascript' => 'JavaScripti',
-'content-model-css' => 'CSSi',
+'content-model-wikitext' => 'vikitekst',
+'content-model-text' => 'lihttekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
'expensive-parserfunction-category' => 'Liiga palju aeglasi laiendusfunktsioone kasutavad leheküljed',
-'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur.
-Mistõttu osasid malle ei näidata.",
-'post-expand-template-inclusion-category' => 'Leheküljed, milledel on mallide väljakutsumise limiit ületatud',
+'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
+'post-expand-template-inclusion-category' => 'Leheküljed, kus mallide väljakutsumise limiit on ületatud',
'post-expand-template-argument-warning' => "'''Hoiatus:''' See lehekülg sisaldab argumendina vähemalt üht malli, mille määratud maht on liiga suur.
Need argumendid on välja jäetud.",
'post-expand-template-argument-category' => 'Malli vahele jäetud argumente sisaldavad leheküljed',
{{GRAMMAR:genitive|{{SITENAME}}}} administraatorid saavad peidetud sisu siiski vaadata ning seda vajadusel selle liidese kaudu taastada, kui see pole just täiendavalt keelatud.",
'revdelete-confirm' => 'Kinnita, et soovid tõesti seda teha ning et saad aru tagajärgedest ja tegevus on kooskõlas [[{{MediaWiki:Policy-url}}|siinsete kokkulepetega]].',
'revdelete-suppress-text' => "Andmed tuleks varjata '''ainult''' järgnevatel juhtudel:
+* Võimalik laim
* Sobimatu isiklik teave
-*: ''kodune aadress ja telefoninumber, sotsiaalhoolekandenumber jne''",
+*: ''kodune aadress ja telefoninumber, isikukood jne''",
'revdelete-legend' => 'Nähtavuse piirangute seadmine',
-'revdelete-hide-text' => 'Peida redaktsiooni tekst',
+'revdelete-hide-text' => 'Redaktsiooni tekst',
'revdelete-hide-image' => 'Peida faili sisu',
'revdelete-hide-name' => 'Peida toiming ja sihtmärk',
-'revdelete-hide-comment' => 'Peida resümee',
-'revdelete-hide-user' => 'Peida toimetaja kasutajanimi või IP-aadress',
+'revdelete-hide-comment' => 'Resümee',
+'revdelete-hide-user' => 'Toimetaja kasutajanimi või IP-aadress',
'revdelete-hide-restricted' => 'Varja andmeid nii administraatorite kui ka teiste eest.',
'revdelete-radio-same' => '(ära muuda)',
-'revdelete-radio-set' => 'Jah',
-'revdelete-radio-unset' => 'Ei',
+'revdelete-radio-set' => 'Peidetud',
+'revdelete-radio-unset' => 'Nähtav',
'revdelete-suppress' => 'Varja andmed nii administraatorite kui ka teiste eest',
'revdelete-unsuppress' => 'Eemalda taastatud redaktsioonidelt piirangud',
'revdelete-log' => 'Põhjus:',
'preferences' => 'Eelistused',
'mypreferences' => 'Eelistused',
'prefs-edits' => 'Redigeerimiste arv:',
-'prefsnologin' => 'Sisse logimata',
-'prefsnologintext' => 'Oma eelistuste määramiseks pead olema <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} sisse logitud]</span>.',
'changepassword' => 'Muuda parool',
'prefs-skin' => 'Kujundus',
'skin-preview' => 'eelvaade',
'recentchangesdays-max' => 'Ülemmäär $1 {{PLURAL:$1|päev|päeva}}',
'recentchangescount' => 'Mitut redaktsiooni vaikimisi näidata:',
'prefs-help-recentchangescount' => 'See käib viimaste muudatuste, lehekülgede ajalugude ja logide kohta.',
-'prefs-help-watchlist-token2' => 'See on sinu jälgimisloendi võrgutoite salavõti.
+'prefs-help-watchlist-token2' => 'See on sinu jälgimisloendi veebivoo salavõti.
Igaüks, kes seda teab, saab lugeda sinu jälgimisloendit. Seega ära jaga seda.
[[Special:ResetTokens|Klõpsa siia, kui sul on vaja see lähtestada]].',
'savedprefs' => 'Sinu eelistused on salvestatud.',
'recentchanges-feed-description' => 'Jälgi vikisse tehtud viimaseid muudatusi.',
'recentchanges-label-newpage' => 'See muudatus lõi uue lehekülje',
'recentchanges-label-minor' => 'See on pisiparandus',
-'recentchanges-label-bot' => 'Selle muudatuse sooritas robot',
+'recentchanges-label-bot' => 'Selle muudatuse tegi robot',
'recentchanges-label-unpatrolled' => 'Seda muudatust ei ole veel kontrollitud',
+'recentchanges-legend-newpage' => '$1 – uus lehekülg',
'rcnote' => "Allpool on esitatud {{PLURAL:$1|'''1''' muudatus|viimased '''$1''' muudatust}} viimase {{PLURAL:$2|päeva|'''$2''' päeva}} jooksul seisuga $4, kell $5.",
'rcnotefrom' => "Allpool on toodud muudatused alates: '''$2''' (näidatakse kuni '''$1''' muudatust)",
'rclistfrom' => 'Näita muudatusi alates: $1',
'immobile-target-namespace-iw' => 'Keelelink ei ole sobiv koht lehekülje teisaldamiseks.',
'immobile-source-page' => 'Lehekülg ei ole teisaldatav.',
'immobile-target-page' => 'Soovitud pealkirja alla ei saa teisaldada.',
+'bad-target-model' => 'Soovitud sihtlehekülje sisumudel on erinev. {{ucfirst:$1}}i ei saa teisendada $2iks.',
'imagenocrossnamespace' => 'Faili ei saa teisaldada mõnda muusse nimeruumi.',
'nonfile-cannot-move-to-file' => 'Failinimeruumi saab ainult faile teisaldada.',
'imagetypemismatch' => 'Uus faililaiend ei sobi selle tüübiga',
'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].',
+Kui soovid MediaWiki tarkvara tõlkimises osaleda, siis vaata lehti [https://www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
'allmessagesnotsupportedDB' => "Seda lehekülge ei saa kasutada, sest '''\$wgUseDatabaseMessages''' ei tööta.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Muutmisoleku filter:',
'tooltip-pt-mytalk' => 'Sinu arutelulehekülg',
'tooltip-pt-anontalk' => 'Arutelu sellelt IP-aadressilt tehtud muudatuste kohta',
'tooltip-pt-preferences' => 'Sinu eelistused',
-'tooltip-pt-watchlist' => 'Lehekülgede loend, mida jälgid muudatuste osas',
+'tooltip-pt-watchlist' => 'Lehekülgede loend, mille muudatusi jälgid',
'tooltip-pt-mycontris' => 'Sinu kaastööde loend',
'tooltip-pt-login' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
'tooltip-pt-anonlogin' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
'tooltip-pt-logout' => 'Logi välja',
'tooltip-ca-talk' => 'Selle artikli arutelu',
-'tooltip-ca-edit' => 'Saad seda lehekülge redigeerida. Palun kasuta enne salvestamist eelvaadet.',
+'tooltip-ca-edit' => 'Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.',
'tooltip-ca-addsection' => 'Lisa uus alaosa',
'tooltip-ca-viewsource' => 'See lehekülg on kaitstud.
Saad vaadata selle lähteteksti.',
'tooltip-n-randompage' => 'Mine juhuslikule leheküljele',
'tooltip-n-help' => 'Kuidas redigeerida',
'tooltip-t-whatlinkshere' => 'Kõik viki leheküljed, mis siia viitavad',
-'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, milledele on siit viidatud',
-'tooltip-feed-rss' => 'Selle lehekülje RSS-toide',
-'tooltip-feed-atom' => 'Selle lehekülje Atom-toide',
+'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, millele on siit viidatud',
+'tooltip-feed-rss' => 'Selle lehekülje RSS-voog',
+'tooltip-feed-atom' => 'Selle lehekülje Atom-voog',
'tooltip-t-contributions' => 'Kuva selle kasutaja kaastöö',
'tooltip-t-emailuser' => 'Saada sellele kasutajale e-kiri',
'tooltip-t-upload' => 'Laadi faile üles',
'tooltip-save' => 'Salvesta muudatused',
'tooltip-preview' => 'Näita tehtavaid muudatusi. Palun kasutage seda enne salvestamist!',
'tooltip-diff' => 'Näita tehtavaid muudatusi.',
-'tooltip-compareselectedversions' => 'Näita erinevusi kahe selle lehe valitud versiooni vahel.',
+'tooltip-compareselectedversions' => 'Näita erinevusi selle lehe kahe valitud versiooni vahel.',
'tooltip-watch' => 'Lisa see lehekülg oma jälgimisloendisse',
'tooltip-watchlistedit-normal-submit' => 'Eemalda leheküljed',
'tooltip-watchlistedit-raw-submit' => 'Uuenda jälgimisloendit',
'pageinfo-length' => 'Lehekülje pikkus (baitides)',
'pageinfo-article-id' => 'Lehekülje identifikaator',
'pageinfo-language' => 'Lehekülje sisu keel',
+'pageinfo-content-model' => 'Lehekülje sisumudel',
'pageinfo-robot-policy' => 'Robotindekseering',
'pageinfo-robot-index' => 'Lubatud',
'pageinfo-robot-noindex' => 'Keelatud',
'svg-long-desc' => 'SVG-fail, algsuurus $1 × $2 pikslit, faili suurus: $3',
'svg-long-desc-animated' => 'Animeeritud SVG-fail, algsuurus $1 × $2 pikslit, faili suurus: $3',
'svg-long-error' => 'Vigane SVG-fail: $1',
-'show-big-image' => 'Originaalsuurus',
+'show-big-image' => 'Algfail',
'show-big-image-preview' => 'Selle eelvaate suurus: $1.',
'show-big-image-other' => '{{PLURAL:$2|Teine eraldusvõime|Teised eraldusvõimed}}: $1.',
'show-big-image-size' => '$1 × $2 pikslit',
# External editor support
'edit-externally' => 'Töötle faili välise programmiga',
-'edit-externally-help' => '(Vaata väliste redaktorite [//www.mediawiki.org/wiki/Manual:External_editors kasutusjuhendit])',
+'edit-externally-help' => '(Vaata väliste redaktorite [https://www.mediawiki.org/wiki/Manual:External_editors kasutusjuhendit])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Näita kõiki',
'version-hook-subscribedby' => 'Tellijad',
'version-version' => '(Versioon $1)',
'version-license' => 'Litsents',
-'version-poweredby-credits' => "See viki kasutab '''[//www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
+'version-poweredby-credits' => "See viki kasutab '''[https://www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
'version-poweredby-others' => 'teised',
'version-poweredby-translators' => 'translatewiki.net-i tõlkijad',
'version-credits-summary' => 'Tahame tunnustada järgmisi inimesi [[Special:Version|MediaWikile]] tehtud kaastöö eest.',
# Special:Redirect
'redirect' => 'Ümbersuunamine faili, kasutaja või redaktsiooni identifikaatori järgi',
'redirect-legend' => 'Ümbersuunamine faili juurde või leheküljele',
-'redirect-summary' => 'See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde.',
+'redirect-summary' => 'See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde. Kasutamine: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] või [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Mine',
'redirect-lookup' => 'Leia:',
'redirect-value' => 'Väärtus:',
# Special:SpecialPages
'specialpages' => 'Erileheküljed',
-'specialpages-note' => '----
-* Harilikud erileheküljed
+'specialpages-note' => '* Harilikud erileheküljed
* <span class="mw-specialpagerestricted">Piiranguga erileheküljed</span>
* <span class="mw-specialpagecached">Uuendamata sisuga erileheküljed (ei pruugi enam kasutuses olla)</span>',
'specialpages-group-maintenance' => 'Hooldusaruanded',
'limitreport-expansiondepth' => 'Suurim hõrendussügavus',
'limitreport-expensivefunctioncount' => 'Kulukate parserifunktsioonide arv',
+# Special:ExpandTemplates
+'expandtemplates' => 'Mallide hõrendamine',
+'expand_templates_intro' => 'See erilehekülg hõrendab siia sisestatud tekstis kõik mallid rekursiivselt.
+Samuti hõrendab see parserifunktsioonid nagu
+<code><nowiki>{{</nowiki>#language:…}}</code> ja muutujad nagu
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Õigupoolest hõrendab see kahekordsete looksulgude vahel pea kõike.',
+'expand_templates_title' => 'Sisu pealkiri, näiteks {{FULLPAGENAME}} jaoks:',
+'expand_templates_input' => 'Sisendtekst:',
+'expand_templates_output' => 'Tulemus',
+'expand_templates_xml_output' => 'XML-väljund',
+'expand_templates_ok' => 'Hõrenda',
+'expand_templates_remove_comments' => 'Eemalda selgitavad märkused',
+'expand_templates_remove_nowiki' => 'Ära näita tulemuses <nowiki>-silte',
+'expand_templates_generate_xml' => 'Näita XML sõelumispuud',
+'expand_templates_preview' => 'Eelvaade',
+
);
'ok' => 'Ados',
'retrievedfrom' => '"$1"(e)tik jasota',
'youhavenewmessages' => '$1 dauzkazu ($2).',
-'newmessageslink' => 'Mezu berriak',
-'newmessagesdifflink' => 'azken aldaketa ikusi',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|Beste erabiltzaile baten|$3 erabiltzaileren}} $1 ($2).',
'youhavenewmessagesmanyusers' => 'Hainbat erabiltzaileren $1 ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|Mezu berri bat duzu|Mezu berriak dituzu}}',
'preferences' => 'Hobespenak',
'mypreferences' => 'Hobespenak',
'prefs-edits' => 'Aldaketa kopurua:',
-'prefsnologin' => 'Saioa hasi gabe',
-'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Izena eman]</span> behar duzu zure hobespenak ezartzeko.',
'changepassword' => 'Pasahitza aldatu',
'prefs-skin' => 'Itxura',
'skin-preview' => 'Aurrebista',
'recentchanges-label-minor' => 'Hau aldaketa txikia da',
'recentchanges-label-bot' => 'Aldaketa hau bot batek egin du',
'recentchanges-label-unpatrolled' => 'Aldaketa hau ez da oraindik patruilatua izan',
+'recentchanges-legend-newpage' => '$1 - orrialde berria',
'rcnote' => "Beheko azken {{PLURAL:$2|eguneko|'''$2''' egunetako}} azken {{PLURAL:$1|aldaketa|'''$1''' aldaketak}} hurrengo datan egin ziren: $5, $4.",
'rcnotefrom' => 'Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).',
'rclistfrom' => 'Erakutsi $1 ondorengo aldaketa berriak',
'undeleterevisions' => '$1 {{PLURAL:$1|berrikuspen|berrikuspen}} artxibatuta',
'undeletehistory' => 'Orrialdea leheneratzen baduzu, berrikuspena guztiak leheneratuko dira historian.
Ezabatu ondoren izen berdina duen orrialde berri bat sortzen bada leheneratutako berrikuspenak azalduko dira historian.',
-'undeleterevdel' => 'Berrezarpena ez da egingo goreneko orrialde edo fitxategia partzialki ezabatua suertatzen bada.
-Kasu horietan ezabatutako azken aldaketen aukeraketa kendu edo agertarazi beharko dituzu.
-
-Undeletion will not be performed if it will result in the top page or file revision being partially deleted.
-In such cases, you must uncheck or unhide the newest deleted revision.',
+'undeleterevdel' => 'Desezabatzea ez da egingo, baldin horren ondorioz goreneko orria edo fitxategia partzialki ezabatuko bada.
+Halakoetan, ezabatutako azken aldaketak desaukeratu edo atzera agerrarazi beharko dituzu.',
'undeletehistorynoadmin' => 'Artikulua ezabatu egin da. Ezabatzeko azalpena beheko laburpenean erakusten da, ezabatu aurretik parte hartu zuten erabiltzaileen xehetasunekin batera. Ezabatutako berrikuspenen oraingo testua administratzaileek bakarrik ikus dezakete.',
'undelete-revision' => '$1(e)n berrikuspen $3(e)k ezabatu du ($4(e)ko $5(e)tan):',
'undeleterevision-missing' => 'Baliogabeko berrikuspena. Baliteke lotura ezegokia izatea, edo berriskupena leheneratu edo kendu izana.',
'undeletelink' => 'ikusi/leheneratu',
'undeleteviewlink' => 'ikusi',
'undeletereset' => 'Hasieratu',
-'undeleteinvert' => 'Aukeraketa alderanztu',
+'undeleteinvert' => 'Alderanztu aukera',
'undeletecomment' => 'Arrazoia:',
'undeletedrevisions' => '{{PLURAL:$1|Berrikuspen 1 leheneratu da|$1 berrikuspen leheneratu dira}}',
'undeletedrevisions-files' => '{{PLURAL:$1|berrikuspen|berrikuspen}} eta {{PLURAL:$2|fitxategi|fitxategi}} leheneratu dira',
'allmessagesdefault' => 'Testu lehenetsia',
'allmessagescurrent' => 'Oraingo testua',
'allmessagestext' => 'MediaWikin erabiltzen diren mezu guztien zerrenda.
-Mesedez bisitatu [//www.mediawiki.org/wiki/Localisation MediaWiki] eta [//translatewiki.net translatewiki.net] orrialdeak MediaWikira ekarpenak egin badituzu.',
+Mesedez bisitatu [https://www.mediawiki.org/wiki/Localisation MediaWiki] eta [//translatewiki.net translatewiki.net] orrialdeak MediaWikira ekarpenak egin badituzu.',
'allmessagesnotsupportedDB' => "Ezin da '''{{ns:special}}:Allmessages''' erabili '''\$wgUseDatabaseMessages''' ezgaituta dagoelako.",
'allmessages-filter-legend' => 'Iragazi',
'allmessages-filter' => 'Aldaketa-egoeraren arabera iragazi:',
# External editor support
'edit-externally' => 'Fitxategi hau editatu kanpo-aplikazio bat erabiliz',
-'edit-externally-help' => '(Ikus [//www.mediawiki.org/wiki/Manual:External_editors konfiguraziorako argibideak] informazio gehiagorako)',
+'edit-externally-help' => '(Ikus [https://www.mediawiki.org/wiki/Manual:External_editors konfiguraziorako argibideak] informazio gehiagorako)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'guztiak',
'version-hook-subscribedby' => 'Hauen harpidetzarekin',
'version-version' => '(Bertsioa $1)',
'version-license' => 'Lizentzia',
-'version-poweredby-credits' => "Wiki hau '''[//www.mediawiki.org/ MediaWiki]'''k sustatzen du (copyright © 2001-$1 $2).",
+'version-poweredby-credits' => "Wiki hau '''[https://www.mediawiki.org/ MediaWiki]'''k sustatzen du (copyright © 2001-$1 $2).",
'version-poweredby-others' => 'beste batzuk',
'version-software' => 'Instalatutako softwarea',
'version-software-product' => 'Produktua',
# Special:SpecialPages
'specialpages' => 'Orri bereziak',
-'specialpages-note' => '----
-* Orri berezi arruntak.
+'specialpages-note' => '* Orri berezi arruntak.
* <strong class="mw-specialpagerestricted">Mugatutako orri bereziak.</strong>',
'specialpages-group-maintenance' => 'Mantentze-oharrak',
'specialpages-group-other' => 'Beste orri berezi batzuk',
# Image rotation
'rotate-comment' => 'Irudia erlojuaren norantzan {{PLURAL:$1|gradu 1|$1 gradu}} biratua izan da',
+# Special:ExpandTemplates
+'expandtemplates' => 'Txantiloi ordezkatzailea',
+'expand_templates_intro' => 'Aparteko orrialde honek modu errekurtsiboan txantiloiak ordezkatu egiten ditu.
+Funtzioak ere ordezkatu egiten ditu, hala nola
+<code><nowiki>{{</nowiki>#language:…}}</code>, eta
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> bezalako aldagaiak ere.
+Kortxete bikoitzarekin hobeto egiten da lan.',
+'expand_templates_title' => 'Izenburua ({{FULLPAGENAME}} ordezkatzeko, eta abar):',
+'expand_templates_input' => 'Sarrerako testua:',
+'expand_templates_output' => 'Emaitza',
+'expand_templates_xml_output' => 'XML irteera',
+'expand_templates_ok' => 'Ados',
+'expand_templates_remove_comments' => 'Iruzkinak kendu',
+'expand_templates_generate_xml' => 'Erakutsi XML parse zuhaitza',
+'expand_templates_preview' => 'Aurreikusi',
+
);
'ok' => 'Dalcuerdu',
'retrievedfrom' => 'Arrecuperau dendi "$1"',
'youhavenewmessages' => 'Tiinis $1 ($2).',
-'newmessageslink' => 'nuevus mensahis',
-'newmessagesdifflink' => 'úrtimu chambu',
'youhavenewmessagesmulti' => 'Tiinis nuevus mensahis en $1',
'editsection' => 'eital',
'editold' => 'eital',
'preferences' => 'Preferéncias',
'mypreferences' => 'Las mis preferéncias',
'prefs-edits' => "Númiru d'eicionis:",
-'prefsnologin' => "Nu t'alcuentras rustriu",
-'prefsnologintext' => 'Ebis estal [[Special:UserLogin|rustriu]] pa chambal las tus preferéncias.',
'changepassword' => 'Chambal consínia',
'prefs-skin' => 'Aparéncia',
'skin-preview' => 'Previsoreal',
'allmessagesdefault' => 'Testu pol defeutu',
'allmessagescurrent' => 'Testu atual',
'allmessagestext' => 'Esta es una lista e mensahis del sistema disponibris nel espaciu e nombris MediaWiki:
-Pol favol, vesita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net] si quieis colabutal.',
+Pol favol, vesita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] i [//translatewiki.net translatewiki.net] si quieis colabutal.',
'allmessagesnotsupportedDB' => "Nu se puei gastal esta páhina polque '''\$wgUseDatabaseMessages''' está desativau.",
# Thumbnails
# External editor support
'edit-externally' => 'Eital esti archivu gastandu una apricación esterna',
-'edit-externally-help' => 'Pa mas enholmación, lei las [//www.mediawiki.org/wiki/Manual:External_editors istrucionis de configuración] (en ingrés).',
+'edit-externally-help' => 'Pa mas enholmación, lei las [https://www.mediawiki.org/wiki/Manual:External_editors istrucionis de configuración] (en ingrés).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tó',
'revdelete-unrestricted' => 'las restricionis a los çahorilis án siu esborrás',
'rightsnone' => '(dengunu)',
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Previsoreal',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'برگرفته از «$1»',
'youhavenewmessages' => '$1 دارید ($2).',
-'newmessageslink' => 'پیامهای جدید',
-'newmessagesdifflink' => 'آخرین تغییر',
'youhavenewmessagesfromusers' => 'شما از {{PLURAL:$3|یک کاربر دیگر|$3 کاربر}} $1 دارید ($2).',
'youhavenewmessagesmanyusers' => 'شما از تعدادی کاربر $1 دارید ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید}}',
'shown-title' => 'نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه',
'viewprevnext' => 'نمایش ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-legend' => 'گزینههای جستجو',
-'searchmenu-exists' => "'''صفحهای با عنوان \"[[:\$1]]\" در این ویکی وجود دارد.'''",
+'searchmenu-exists' => "'''صفحهای با عنوان «[[:$1]]» در این ویکی وجود دارد.'''",
'searchmenu-new' => "'''صفحهٔ «[[:$1]]» را در این ویکی بسازید!'''",
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|مرور صفحههای با این پیشوند]]',
'searchprofile-articles' => 'صفحههای محتوایی',
'preferences' => 'ترجیحات',
'mypreferences' => 'ترجیحات',
'prefs-edits' => 'تعداد ویرایشها:',
-'prefsnologin' => 'به سامانه وارد نشدهاید',
-'prefsnologintext' => 'برای تنظیم ترجیحات کاربر باید <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} به سامانه وارد شوید]</span>.',
'changepassword' => 'تغییر گذرواژه',
'prefs-skin' => 'پوسته',
'skin-preview' => 'پیشنمایش',
'recentchanges-label-minor' => 'این ویرایش جزئیاست',
'recentchanges-label-bot' => 'این ویرایش را یک ربات انجام دادهاست',
'recentchanges-label-unpatrolled' => 'این ویرایش هنوز گشتزنی نشدهاست',
+'recentchanges-legend-newpage' => '$1 - صفحهٔ جدید',
'rcnote' => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $4 ساعت $5 میبینید.",
'rcnotefrom' => 'در زیر تغییرات از تاریخ <b>$2</b> آمدهاند (تا <b>$1</b> مورد نشان داده میشود).',
'rclistfrom' => 'نمایش تغییرات جدید با شروع از $1',
'allmessagesdefault' => 'متن پیشفرض پیغام',
'allmessagescurrent' => 'متن کنونی پیغام',
'allmessagestext' => 'این فهرستی از پیغامهای سامانهای موجود در فضای نام مدیاویکی است.
-چنانچه مایل به مشارکت در محلیسازی مدیاویکی هستید لطفاً [//www.mediawiki.org/wiki/Localisation محلیسازی مدیاویکی] و [//translatewiki.net translatewiki.net] را ببینید.',
-'allmessagesnotsupportedDB' => "نمیتوان از '''{{ns:special}}:همهٔ پیغامها''' استفاده کرد چود '''‎\$wgUseDatabaseMessages''' خاموش شده است.",
+چنانچه مایل به مشارکت در محلیسازی مدیاویکی هستید لطفاً [https://www.mediawiki.org/wiki/Localisation محلیسازی مدیاویکی] و [//translatewiki.net translatewiki.net] را ببینید.',
+'allmessagesnotsupportedDB' => "این صفحه نمیتواند استفاده شود به این دلیل که <bdi>'''\$wgUseDatabaseMessages'''</bdi> غیرفعال شدهاست.",
'allmessages-filter-legend' => 'پالایه',
'allmessages-filter' => 'پالودن بر اساس وضعیت شخصیسازی:',
'allmessages-filter-unmodified' => 'تغییر نیافته',
# External editor support
'edit-externally' => 'ویرایش این پرونده با یک ویرایشگر بیرونی',
-'edit-externally-help' => '(برای اطلاعات بیشتر [//www.mediawiki.org/wiki/Manual:External_editors دستورالعمل تنظیم] را ببینید)',
+'edit-externally-help' => '(برای اطلاعات بیشتر [https://www.mediawiki.org/wiki/Manual:External_editors دستورالعمل تنظیم] را ببینید)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'همه',
'version-version' => '(نسخه $1)',
'version-svn-revision' => '(&رلم;r$2)',
'version-license' => 'اجازهنامه',
-'version-poweredby-credits' => "این ویکی توسط '''[//www.mediawiki.org/ مدیاویکی]''' پشتیبانی میشود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.",
+'version-poweredby-credits' => "این ویکی توسط '''[https://www.mediawiki.org/ مدیاویکی]''' پشتیبانی میشود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.",
'version-poweredby-others' => 'دیگران',
'version-poweredby-translators' => 'مترجمان translatewiki.net',
'version-credits-summary' => 'افراد زیر را به خاطر ویرایشهایش در [[Special:Version|مدیاویکی]] معرفی مینمائیم.',
# Special:SpecialPages
'specialpages' => 'صفحههای ویژه',
-'specialpages-note' => '----
-* صفحههای ویژهٔ عادی.
+'specialpages-note' => '* صفحههای ویژهٔ عادی.
* <strong class="mw-specialpagerestricted">صفحههای ویژهٔ محدودشده.</strong>',
'specialpages-group-maintenance' => 'گزارشهای نگهداری',
'specialpages-group-other' => 'سایر صفحههای ویژه',
'limitreport-expansiondepth' => 'بیشترین عمق گسترش',
'limitreport-expensivefunctioncount' => 'تعداد تابع تجزیهگر پرمصرف',
+# Special:ExpandTemplates
+'expandtemplates' => 'بسطدادن الگوها',
+'expand_templates_intro' => 'این صفحهٔ ویژه متنی را دریافت کرده و تمام الگوهای بهکاررفته در آن را به طور بازگشتی بسط میدهد. همچنین تابعهای تجزیه چون <code><nowiki>{{</nowiki>#language:…}}</code> و متغیرهایی چون <code><nowiki>{{</nowiki>CURRENTDAY}}</code> را هم بسط میدهد — در واقع تقریباً هرچه را که داخل دوآکولاد باشد. این کار با صدازدن مرحلهٔ تجزیهٔ مربوط در خود مدیاویکی صورت میگیرد.',
+'expand_templates_title' => 'عنوان موضوع، برای {{FULLPAGENAME}} و غیره:',
+'expand_templates_input' => 'متن ورودی:',
+'expand_templates_output' => 'نتیجه',
+'expand_templates_xml_output' => 'خروجی XML',
+'expand_templates_ok' => 'تأیید',
+'expand_templates_remove_comments' => 'حذف ملاحظات',
+'expand_templates_remove_nowiki' => 'خنثی کردن تگهای <nowiki> در نتیجه',
+'expand_templates_generate_xml' => 'نمایش درخت تجزیهٔ XML',
+'expand_templates_preview' => 'پیشنمایش',
+
);
* @author Kaganer
* @author Kulmalukko
* @author Linnea
+ * @author Mies
* @author Mobe
* @author Nedergard
* @author Nike
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Haettu osoitteesta $1',
'youhavenewmessages' => 'Sinulle on $1 ($2).',
-'newmessageslink' => 'uusia viestejä',
-'newmessagesdifflink' => 'viimeisin muutos',
'youhavenewmessagesfromusers' => 'Sinulle on $1 {{PLURAL:$3|toiselta käyttäjältä|$3 käyttäjältä}} ($2).',
'youhavenewmessagesmanyusers' => 'Sinulle on $1 uusia viestejä useilta käyttäjiltä ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|uusi viesti|uusia viestejä}}',
'invalidtitle-knownnamespace' => 'Virheellinen sivunimi, nimiavaruus "$2" ja teksti "$3"',
'invalidtitle-unknownnamespace' => 'Virheellinen sivunimi, tuntematon nimiavaruus numero $1 ja teksti "$2"',
'exception-nologin' => 'Et ole kirjautunut sisään',
-'exception-nologin-text' => 'Tämä sivu tai toiminto edellyttää sisäänkirjautumista tähän wikiin.',
+'exception-nologin-text' => 'Ole hyvä ja [[Special:Userlogin|kirjaudu sisään]], niin pääset tälle sivulle tai tähän toimintoon.',
+'exception-nologin-text-manual' => 'Sinun pitää $1 jotta pääset tälle sivulle tai toimintoon.',
# Virus scanner
'virus-badscanner' => "Virheellinen asetus: Tuntematon virustutka: ''$1''",
# Special:ResetTokens
'resettokens' => 'Uudista avaimet',
-'resettokens-text' => 'Tällä sivulla voit uudistaa avaimesi, jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.
+'resettokens-text' => "Tällä sivulla voit uudistaa avaimesi (''eng.'' reset tokens), jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.
-Sinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.',
+Sinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.",
'resettokens-no-tokens' => 'Avaimia ei ole uudistettavaksi.',
'resettokens-legend' => 'Uudista avaimet',
'resettokens-tokens' => 'Avaimet:',
# Content models
'content-model-wikitext' => 'wikiteksti',
-'content-model-text' => 'teksti',
+'content-model-text' => 'pelkkä teksti',
'content-model-javascript' => 'JavaScript',
'content-model-css' => 'CSS',
Muut ylläpitäjät {{GRAMMAR:inessive|{{SITENAME}}}} voivat silti tarkastella piilotettua sisältöä, ja he voivat palauttaa sen näkyviin tämän käyttöliittymän kautta, ellei tätä ole erikseen rajoitettu.",
'revdelete-confirm' => 'Varmista, että haluat tehdä tämän – ymmärrät seuraukset ja teet tämän [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
'revdelete-suppress-text' => "Häivytystä pitäisi käyttää '''vain''' seuraavissa tapauksissa:
+* Mahdollisesti henkilön kunniaa loukkaavia tietoja
* Sopimattomat henkilötiedot
-*: ''kotiosoitteet, puhelinnumerot, sosiaaliturvatunnukset ja muut.''",
+*: ''kotiosoitteet, puhelinnumerot, henkilötunnukset ja muut.''",
'revdelete-legend' => 'Aseta version näkyvyyden rajoitukset',
'revdelete-hide-text' => 'Piilota version tekstisisältö',
'revdelete-hide-image' => 'Piilota tiedoston sisältö',
'revdelete-hide-user' => 'Piilota tekijän tunnus tai IP-osoite',
'revdelete-hide-restricted' => 'Häivytä tiedot sekä ylläpitäjien että muiden käyttäjien näkyviltä',
'revdelete-radio-same' => '(älä muuta)',
-'revdelete-radio-set' => 'Kyllä',
-'revdelete-radio-unset' => 'Ei',
+'revdelete-radio-set' => 'Piilossa',
+'revdelete-radio-unset' => 'Näkyvissä',
'revdelete-suppress' => 'Häivytä tiedot myös ylläpitäjien näkyviltä samalla kun piilotat ne muilta käyttäjiltä',
'revdelete-unsuppress' => 'Poista rajoitukset palautetuilta versioilta',
'revdelete-log' => 'Syy:',
'revdel-restore-visible' => 'näkyvät versiot',
'pagehist' => 'Sivun muutoshistoria',
'deletedhist' => 'Poistettujen versioiden historia',
-'revdelete-hide-current' => 'Virhe piilotettaessa $1 kello $2 päivättyä kohdetta: Tämä on uusin versio.
+'revdelete-hide-current' => 'Virhe piilotettaessa kohdetta päivämäärällä $1 kello $2: Tämä on uusin versio.
Sitä ei voi piilottaa.',
'revdelete-show-no-access' => 'Virhe näyttäessä kohtaa $2 kello $1: kohta on merkitty ”rajoitetuksi”.
Sinulla ei ole oikeutta siihen.',
-'revdelete-modify-no-access' => 'Virhe tapahtui $2, $1 kohteen muokkauksessa: tämä kohde on merkitty "rajoitetuksi". Sinulla ei ole oikeuksia sen muokkaukseen.',
+'revdelete-modify-no-access' => 'Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: tämä kohde on merkitty "rajoitetuksi".
+Sinulla ei ole oikeutta muuttaa kohdetta.',
'revdelete-modify-missing' => 'Virhe muuttaessa kohdetta, jonka tunniste on $1: Se puuttuu tietokannasta.',
-'revdelete-no-change' => "'''Varoitus:''' kohteessa $2 kello $1 on jo valmiiksi haluamasi näkyvyysasetukset.",
-'revdelete-concurrent-change' => 'Virhe $2, $1 päivätyn kohteen muokkauksessa: sen tilan on näköjään muuttanut joku sillä aikaa kun yritit muokata sitä. Ole hyvä ja tarkista lokit.',
-'revdelete-only-restricted' => 'Virhe piilotettaessa $1 kello $2 päivättyä kohdetta: Et voi poistaa kohteita ylläpitäjien näkyviltä valitsematta myös jotain muuta näkyvyysasetusta.',
+'revdelete-no-change' => "'''Varoitus.''' Kohteessa päivämäärällä $1 kello $2 on jo valmiiksi haluamasi näkyvyysasetukset.",
+'revdelete-concurrent-change' => 'Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: sen näkyvyysasetuksia on ilmeisesti joku muuttanut sillä aikaa kun yritit muuttaa sitä.
+Ole hyvä ja tarkista lokit.',
+'revdelete-only-restricted' => 'Virhe piilotettaessa kohdetta päivämäärällä $1 kello $2: Et voi häivyttää kohteita ylläpitäjien näkyviltä valitsematta sen lisäksi jotain muuta näkyvyysasetusta.',
'revdelete-reason-dropdown' => '*Yleiset poistosyyt
** Tekijänoikeusrikkomus
** Sopimattomat henkilötiedot
'searchall' => 'kaikki',
'showingresults' => "{{PLURAL:$1|'''Yksi''' tulos|'''$1''' tulosta}} tuloksesta '''$2''' alkaen.",
'showingresultsnum' => "Alla on {{PLURAL:$3|'''Yksi''' hakutulos|'''$3''' hakutulosta}} alkaen '''$2.''' tuloksesta.",
-'showingresultsheader' => "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosto}} haulle '''$4'''",
+'showingresultsheader' => "{{PLURAL:$5|Tulokset '''$1'''–'''$3'''|Tulokset '''$1'''–'''$2''' kaikkiaan '''$3''' osuman joukosta}} haulle '''$4'''",
'nonefound' => "'''Huomautus''': Haku kohdistuu oletuksena vain tiettyihin nimiavaruuksiin.
Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön (mukaan lukien keskustelut, mallineet jne.) tai kohdista haku haluttuun nimiavaruuteen.",
'search-nonefound' => 'Hakusi ei tuottanut tulosta.',
'powersearch-field' => 'Etsi',
'powersearch-togglelabel' => 'Muuta valintaa',
'powersearch-toggleall' => 'Valitse kaikki',
-'powersearch-togglenone' => 'Poista valinnat',
+'powersearch-togglenone' => 'Ei mitään',
'search-external' => 'Ulkoinen haku',
'searchdisabled' => 'Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>',
'search-error' => 'Virhe ilmaantui haettaessa: $1',
'preferences' => 'Asetukset',
'mypreferences' => 'Asetukset',
'prefs-edits' => 'Muokkauksia',
-'prefsnologin' => 'Et ole kirjautunut sisään.',
-'prefsnologintext' => 'Sinun täytyy <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kirjautua sisään]</span>, jotta voisit muuttaa asetuksiasi.',
+'prefsnologintext2' => 'Sinun pitää $1 ennen kuin voit muuttaa käyttäjän asetuksia.',
'changepassword' => 'Salasanan vaihto',
'prefs-skin' => 'Ulkoasu',
'skin-preview' => 'esikatselu',
'right-reupload-own' => 'Korvata itsetallennettu tiedosto uudella tiedostolla',
'right-reupload-shared' => 'Korvata jaettuun mediavarastoon tallennettuja tiedostoja paikallisesti',
'right-upload_by_url' => 'Tallentaa tiedostoja verkko-osoitteella',
-'right-purge' => 'Päivittää tiedoston välimuistitetun version ilman varmennussivua',
+'right-purge' => 'Tyhjentää sivuston välimuisti ilman varmennussivua',
'right-autoconfirmed' => 'IP-pohjaiset nopeusrajoitukset eivät ole voimassa',
'right-bot' => 'Kohdellaan automaattisena prosessina',
'right-nominornewtalk' => 'Tehdä pieniä muokkauksia käyttäjien keskustelusivuille siten, että käyttäjälle ei ilmoiteta siitä uutena viestinä',
'right-bigdelete' => 'Poistaa sivuja, joilla on pitkä historia',
'right-deletelogentry' => 'Poistaa ja palauttaa tiettyjä lokimerkintöjä',
'right-deleterevision' => 'Poistaa ja palauttaa sivujen versioita',
-'right-deletedhistory' => 'Tarkastella poistettuja versiotietoja ilman niihin liittyvää sisältöä',
+'right-deletedhistory' => 'Tarkastella poistettujen versioiden tietoja ilman niihin liittyvää tekstisisältöä',
'right-deletedtext' => 'Tarkastella poistettujen sivujen tekstiä ja muutoksia poistettujen versioiden välillä',
-'right-browsearchive' => 'Tarkastella poistettuja sivuja',
+'right-browsearchive' => 'Hakea poistettuja sivuja',
'right-undelete' => 'Palauttaa poistettuja sivuja',
'right-suppressrevision' => 'Tarkastella ja palauttaa ylläpitäjiltä piilotettuja versioita',
'right-suppressionlog' => 'Tarkastella yksityisiä lokeja',
'right-edituserjs' => 'Muokata toisten käyttäjien JavaScript-tiedostoja',
'right-editmyusercss' => 'Muokata omia CSS-tiedostoja',
'right-editmyuserjs' => 'Muokata omia JavaScript-tiedostoja',
-'right-viewmywatchlist' => 'Tarkastella tarkkailulistaasi',
+'right-viewmywatchlist' => 'Nähdä oma tarkkailulista',
'right-editmywatchlist' => 'Muokata tarkkailulistaasi. Huomaa, että jotkin toiminnot lisäävät yhä sivuja listallesi riippumatta tästä oikeudesta.',
'right-viewmyprivateinfo' => 'Nähdä omat yksityiset tietosi (esim. sähköpostiosoite, oikea nimi)',
'right-editmyprivateinfo' => 'Muokata omia yksityisiä tietojasi (esim. sähköpostiosoite, oikea nimi)',
'right-editmyoptions' => 'Muokata omia asetuksiasi',
'right-rollback' => 'Palauttaa nopeasti käyttäjän viimeisimmät muokkaukset sivuun',
-'right-markbotedits' => 'Kumota muokkauksia bottimerkinnällä',
+'right-markbotedits' => 'Merkitä muokkausten palauttaminen botilla tehdyksi',
'right-noratelimit' => 'Ohittaa nopeusrajoitukset',
'right-import' => 'Tuoda sivuja muista wikeistä',
'right-importupload' => 'Tuoda sivuja tiedostosta',
-'right-patrol' => 'Merkitä muokkaukset tarkastetuiksi',
-'right-autopatrol' => 'Muokkaukset aina valmiiksi tarkastetuksi merkittyjä',
+'right-patrol' => 'Merkitä muiden tekemät muokkaukset tarkastetuiksi',
+'right-autopatrol' => 'Omat muokkaukset on automaattisesti merkitty tarkastetuksi',
'right-patrolmarks' => 'Nähdä tarkastusmerkit tuoreissa muutoksissa',
-'right-unwatchedpages' => 'Tarkastella listaa tarkkailemattomista sivuista',
+'right-unwatchedpages' => 'Nähdä luetteloa tarkkailemattomista sivuista',
'right-mergehistory' => 'Yhdistää sivujen historioita',
'right-userrights' => 'Muuttaa kaikkia käyttäjäoikeuksia',
'right-userrights-interwiki' => 'Muokata käyttäjien oikeuksia muissa wikeissä',
'action-createaccount' => 'luoda tätä käyttäjätunnusta',
'action-minoredit' => 'merkitä tätä muokkausta pieneksi',
'action-move' => 'siirtää tätä sivua',
-'action-move-subpages' => 'siirtää tätä sivua, ja sen alasivuja',
+'action-move-subpages' => 'siirtää tätä sivua eikä sen alasivuja',
'action-move-rootuserpages' => 'siirtää käyttäjäsivuja',
'action-movefile' => 'siirtää tätä tiedostoa',
'action-upload' => 'tallentaa tätä tiedostoa',
'action-deleterevision' => 'poistaa tätä versiota',
'action-deletedhistory' => 'tarkastella tämän sivun poistettua historiaa',
'action-browsearchive' => 'etsiä poistettuja sivuja',
-'action-undelete' => 'palauttaa tätä sivua',
+'action-undelete' => 'palauttaa tätä poistettua sivua',
'action-suppressrevision' => 'tarkastella ja palauttaa tätä piilotettua versiota',
'action-suppressionlog' => 'tarkastella tätä yksityislokia',
'action-block' => 'estää tätä käyttäjää muokkaamasta',
'action-rollback' => 'käyttää nopeaa palautusta kumoamaan viimeisen käyttäjän viimeiset muutokset sivuun',
'action-import' => 'tuoda sivuja toisesta wikistä',
'action-importupload' => 'tuoda sivuja tiedostosta',
-'action-patrol' => 'merkitä muiden muokkauksia tarkastetuiksi',
-'action-autopatrol' => 'saada muokkaukset automaattisesti tarkastetuiksi',
-'action-unwatchedpages' => 'tarkastella tarkkailemattomien sivujen listaa',
+'action-patrol' => 'merkitä muiden tekemiä muokkauksia tarkastetuiksi',
+'action-autopatrol' => 'merkitä omia muokkauksiasi tarkastetuiksi',
+'action-unwatchedpages' => 'nähdä luetteloa tarkkailemattomista sivuista',
'action-mergehistory' => 'yhdistää tämän sivun historiaa',
'action-userrights' => 'muokata kaikkia käyttöoikeuksia',
'action-userrights-interwiki' => 'muokata muiden wikien käyttäjien käyttöoikeuksia',
'recentchanges-label-minor' => 'Tämä on pieni muutos',
'recentchanges-label-bot' => 'Tämän muutoksen suoritti botti',
'recentchanges-label-unpatrolled' => 'Tätä muutosta ei ole vielä tarkastettu',
+'recentchanges-legend-newpage' => '$1 – uusi sivu',
'rcnote' => 'Alla on {{PLURAL:$1|yksi muutos|$1 tuoreinta muutosta}} {{PLURAL:$2|yhden päivän|$2 viime päivän}} ajalta $4 kello $5 asti.',
'rcnotefrom' => 'Alla on muutokset <b>$2</b> lähtien. Enintään <b>$1</b> merkintää näytetään.',
'rclistfrom' => 'Näytä uudet muutokset $1 alkaen',
'reuploaddesc' => 'Peruuta tallennus ja palaa tallennuslomakkeelle.',
'upload-tryagain' => 'Lähetä muutettu tiedostokuvaus',
'uploadnologin' => 'Et ole kirjautunut sisään',
-'uploadnologintext' => 'Sinun pitää $1 tallentaaksesi tiedostoja.',
+'uploadnologintext' => 'Sinun pitää $1, jotta voit tallentaa tiedostoja.',
'upload_directory_missing' => 'Tallennushakemisto $1 puuttuu, eikä palvelin pysty luomaan sitä.',
'upload_directory_read_only' => 'Palvelimella ei ole kirjoitusoikeuksia tallennushakemistoon $1.',
'uploaderror' => 'Tallennusvirhe',
'filehist-help' => 'Päiväystä napsauttamalla näet, millainen tiedosto oli kyseisellä hetkellä.',
'filehist-deleteall' => 'poista kaikki',
'filehist-deleteone' => 'poista tämä',
-'filehist-revert' => 'palauta tämä',
+'filehist-revert' => 'palauta',
'filehist-current' => 'nykyinen',
'filehist-datetime' => 'Päiväys',
'filehist-thumb' => 'Pienoiskuva',
'uploadnewversion-linktext' => 'Tallenna uusi versio tästä tiedostosta',
'shared-repo-from' => 'kohteesta $1',
'shared-repo' => 'jaettu mediavarasto',
-'upload-disallowed-here' => 'Et voi korvata tätä tiedostoa.',
+'upload-disallowed-here' => 'Et voi korvata tätä tiedostoa uudella tiedostolla.',
# File reversion
'filerevert' => 'Tiedoston $1 palautus',
'filedelete-submit' => 'Poista',
'filedelete-success' => "Tiedosto '''$1''' on poistettu.",
'filedelete-success-old' => "Tiedoston '''[[Media:$1|$1]]''' $2 kello $3 luotu versio on poistettu.",
-'filedelete-nofile' => "Tiedostoa '''$1''' ei ole olemassa.",
+'filedelete-nofile' => "Tiedostoa '''$1''' ei ole.",
'filedelete-nofile-old' => "Tiedostosta '''$1''' ei ole olemassa arkistossa olevaa versiota, jolla on annetut ominaisuudet.",
'filedelete-otherreason' => 'Muu syy tai tarkennus:',
'filedelete-reason-otherlist' => 'Muu syy',
'exblank' => 'oli tyhjä',
'delete-confirm' => 'Sivun ”$1” poistaminen',
'delete-legend' => 'Sivun poisto',
-'historywarning' => "'''Varoitus:''' Sivua, jota olet poistamassa on muokattu noin $1 {{PLURAL:$1|kerta|kertaa}}:",
+'historywarning' => "'''Varoitus:''' Sivua, jota olet poistamassa, on muokattu noin $1 {{PLURAL:$1|kerta|kertaa}}:",
'confirmdeletetext' => 'Olet poistamassa sivun tai tiedoston ja kaiken sen historian. Ymmärrä teon seuraukset ja tee poisto {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
'actioncomplete' => 'Toiminto suoritettu',
'actionfailed' => 'Toiminto epäonnistui',
'rollback' => 'palauta aiempaan versioon',
'rollback_short' => 'Palautus',
'rollbacklink' => 'palauta',
-'rollbacklinkcount' => 'palauta {{PLURAL:$1|muutos|$1 muutosta}}',
+'rollbacklinkcount' => 'palauta $1 {{PLURAL:$1|muutos|muutosta}}',
'rollbacklinkcount-morethan' => 'palauta yli $1 {{PLURAL:$1|muutos|muutosta}}',
'rollbackfailed' => 'Palautus epäonnistui',
'cantrollback' => 'Aiempaan versioon ei voi palauttaa, koska viimeisin kirjoittaja on sivun ainoa tekijä.',
'undeletepage' => 'Tarkastele ja palauta poistettuja sivuja',
'undeletepagetitle' => "'''Poistetut versiot sivusta [[:$1]]'''.",
'viewdeletedpage' => 'Poistettujen sivujen selaus',
-'undeletepagetext' => '{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se on|ne ovat}} palautettavissa. Arkisto saatetaan tyhjentää aika ajoin.',
+'undeletepagetext' => '{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se|ne}} voidaan palauttaa takaisin. Arkisto saatetaan tyhjentää aika ajoin.',
'undelete-fieldset-title' => 'Palauta versioita',
'undeleteextrahelp' => "Palauttaaksesi sivun koko muutoshistorian jätä kaikki valintalaatikot tyhjiksi ja napsauta '''''{{int:undeletebtn}}'''''.
Voit palauttaa versioita valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.",
-'undeleterevisions' => '{{PLURAL:$1|Versio|$1 versiota}} arkistoitu.',
+'undeleterevisions' => '$1 {{PLURAL:$1|versio|versiota}} on arkistoitu.',
'undeletehistory' => 'Jos palautat sivun, kaikki versiot lisätään sivun historiaan. Jos uusi sivu samalla nimellä on luotu poistamisen jälkeen, palautetut versiot lisätään sen historiaan.',
'undeleterevdel' => 'Palautusta ei tehdä, jos sen seurauksena sivun uusin versio olisi osittain piilotettu.
Tässä tilanteessa älä valitse palautettavaksi näkyviin viimeisintä poistettua versiota tai poista version piilotus.',
'undeletehistorynoadmin' => 'Tämä sivu on poistettu.
Syy sivun poistamiseen näkyy alla olevassa yhteenvedossa, jossa on myös tiedot, ketkä olivat muokanneet tätä sivua ennen poistamista.
Näiden poistettujen versioiden varsinainen tekstisisältö on vain ylläpitäjien luettavissa.',
-'undelete-revision' => 'Poistettu sivu $1 hetkellä $4 kello $5. Tekijä: $3.',
+'undelete-revision' => 'Poistettu versio sivusta $1 (aikaleima $4 kello $5). Version tekijä: $3.',
'undeleterevision-missing' => 'Virheellinen tai puuttuva versio.
-Sinulla on kenties käytössä väärä linkki, tai sitten versio on saatettu palauttaa tai poistaa arkistosta.',
+Sinulla on kenties käytössä väärä linkki, tai sitten versio on saatettu palauttaa takaisin tai poistaa arkistosta.',
'undelete-nodiff' => 'Aikaisempaa versiota ei löytynyt.',
'undeletebtn' => 'Palauta',
'undeletelink' => 'näytä tai palauta',
'undeletedfiles' => '{{PLURAL:$1|1 tiedosto|$1 tiedostoa}} palautettiin',
'cannotundelete' => 'Palauttaminen epäonnistui:
$1',
-'undeletedpage' => "'''$1 on palautettu takaisin'''
+'undeletedpage' => "'''$1 on palautettu.'''
[[Special:Log/delete|Poistolokista]] löydät listan viimeisimmistä poistoista ja palautuksista.",
'undelete-header' => '[[Special:Log/delete|Poistolokissa]] on lista viimeisimmistä poistoista.',
'ipb-edit-dropdown' => 'Muokkaa estosyitä',
'ipb-unblock-addr' => 'Poista käyttäjän $1 esto',
'ipb-unblock' => 'Poista käyttäjän tai IP-osoitteen muokkausesto',
-'ipb-blocklist' => 'Näytä estot',
+'ipb-blocklist' => 'Näytä voimassa olevat estot',
'ipb-blocklist-contribs' => 'Käyttäjän $1 muokkaukset',
-'unblockip' => 'Muokkauseston poisto',
+'unblockip' => 'Muokkauseston poisto käyttäjältä',
'unblockiptext' => 'Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.',
-'ipusubmit' => 'Poista esto',
+'ipusubmit' => 'Poista tämä esto',
'unblocked' => 'Käyttäjän [[User:$1|$1]] esto on poistettu',
'unblocked-range' => '$1 ei ole enää estettynä',
'unblocked-id' => 'Esto $1 on poistettu',
'block-log-flags-nousertalk' => 'oman keskustelusivun muokkaaminen estetty',
'block-log-flags-angry-autoblock' => 'kehittynyt automaattiesto käytössä',
'block-log-flags-hiddenname' => 'käyttäjänimi piilotettu',
-'range_block_disabled' => 'Ylläpitäjän oikeus luoda alue-estoja ei ole käytössä.',
+'range_block_disabled' => 'Ylläpitäjien mahdollisuus asettaa avaruusestoja on poistettu käytöstä.',
'ipb_expiry_invalid' => 'Virheellinen päättymisaika.',
'ipb_expiry_temp' => 'Piilotettujen käyttäjätunnusten estojen tulee olla pysyviä.',
'ipb_hide_invalid' => 'Tämän tunnuksen piilottaminen ei onnistu. Sillä saattaa olla liikaa muokkauksia.',
Valitse toinen nimi.',
# Export
-'export' => 'Sivujen vienti',
-'exporttext' => 'Voit viedä sivun tai sivujen tekstiä ja muokkaushistoriaa XML-muodossa.
-Tämä tieto voidaan tuoda toiseen käyttämällä MediaWikiä [[Special:Import|tuontisivun]] kautta.
+'export' => 'Vie sivuja',
+'exporttext' => "Voit viedä (''export'') sivun tai usean sivun tekstin ja muokkaushistorian XML-muodossa.
+Tämä tieto voidaan tuoda (''import'') toiseen wikiin käyttämällä MediaWikiä [[Special:Import|tuontisivun]] kautta.
-Syötä sivujen otsikoita jokainen omalle rivilleen alla olevaan laatikkoon.
-Valitse myös, haluatko kaikki versiot sivuista, vai ainoastaan nykyisen version.
+Kirjoita sivujen nimet, jokainen nimike omalle rivilleen, alla olevaan tietolaatikkoon. Valitse, haluatko viedä sivun uusimman version sekä samalla kaikki vanhat versiot ja sivun historian tietorivit, vai haluatko viedä sivun uusimman version, jossa on tieto viimeisimmästä muokkauksesta.
-Jälkimmäisessä tapauksessa voit myös käyttää linkkiä. Esimerkiksi sivun [[{{MediaWiki:Mainpage}}]] saa vietyä linkistä [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
+Jälkimmäisessä tapauksessa voit myös käyttää linkkiä. Esimerkiksi sivun [[{{MediaWiki:Mainpage}}]] saa vietyä linkistä [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
'exportall' => 'Vie kaikki sivut',
-'exportcuronly' => 'Liitä mukaan ainoastaan uusin versio – ei koko historiaa.',
-'exportnohistory' => '----
-Sivujen koko historian vienti on estetty suorituskykysyistä.',
+'exportcuronly' => 'Ota vientiin ainoastaan uusin versio – ei koko historiaa',
+'exportnohistory' => "----
+'''Huomautus:''' Sivujen koko muokkaushistorian vienti tämän lomakkeen kautta on poistettu käytöstä suorituskykysyistä.",
'exportlistauthors' => 'Lisää lista jokaisen sivun muokkaajista',
'export-submit' => 'Vie',
-'export-addcattext' => 'Lisää sivut luokasta',
+'export-addcattext' => 'Lisää sivut luokasta:',
'export-addcat' => 'Lisää',
-'export-addnstext' => 'Lisää sivut nimiavaruudesta',
+'export-addnstext' => 'Lisää sivut nimiavaruudesta:',
'export-addns' => 'Lisää',
'export-download' => 'Tallenna tiedostona',
-'export-templates' => 'Liitä mallineet',
-'export-pagelinks' => 'Sisällytä linkkien kohteina olevat sivut syvyydelle',
+'export-templates' => 'Ota mukaan mallineet',
+'export-pagelinks' => 'Sisällytä linkkien kohteina olevat sivut syvyydelle:',
# Namespace 8 related
'allmessages' => 'Järjestelmäviestit',
'allmessagesdefault' => 'Oletusarvo',
'allmessagescurrent' => 'Nykyinen arvo',
'allmessagestext' => 'Tämä on luettelo järjestelmäviesteistä, jotka ovat saatavilla MediaWiki-nimiavaruudessa.
-Jos haluat muokata MediaWikin yleistä kotoistusta, käy [//www.mediawiki.org/wiki/Localisation MediaWikin kotoistussivuilla] ja sivustolla [//translatewiki.net translatewiki.net].',
+Jos haluat muokata MediaWikin yleistä kotoistusta, käy [https://www.mediawiki.org/wiki/Localisation MediaWikin kotoistussivuilla] ja sivustolla [//translatewiki.net translatewiki.net].',
'allmessagesnotsupportedDB' => 'Tämä sivu ei ole käytössä, koska <tt>$wgUseDatabaseMessages</tt>-asetus on pois päältä.',
'allmessages-filter-legend' => 'Suodata',
'allmessages-filter' => 'Suodata muutosten perusteella',
# Special:Import
'import' => 'Tuo sivuja',
-'importinterwiki' => 'Tuo sivuja lähiwikeistä',
-'import-interwiki-text' => 'Valitse wiki ja sivun nimi. Versioiden päivämäärät ja muokkaajat säilytetään. Kaikki wikienväliset tuonnit kirjataan [[Special:Log/import|tuontilokiin]].',
+'importinterwiki' => 'Tuo sivuja muista wikeistä (transwiki import)',
+'import-interwiki-text' => 'Valitse wiki ja sivun nimi tuontia varten.
+Versioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan.
+Kaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].',
'import-interwiki-source' => 'Lähdewiki/sivu:',
-'import-interwiki-history' => 'Kopioi sivun koko historia',
-'import-interwiki-templates' => 'Liitä kaikki mallineet',
+'import-interwiki-history' => 'Kopioi sivun koko historia ja kaikki versiot',
+'import-interwiki-templates' => 'Ota mukaan kaikki mallineet',
'import-interwiki-submit' => 'Tuo',
'import-interwiki-namespace' => 'Kohdenimiavaruus:',
-'import-interwiki-rootpage' => 'Tuo annetun sivun alasivuiksi (valinnainen):',
+'import-interwiki-rootpage' => 'Kohteessa oleva perussivu (valinnainen):',
'import-upload-filename' => 'Tiedostonimi:',
-'import-comment' => 'Syy',
+'import-comment' => 'Kommentti:',
'importtext' => 'Vie sivuja lähdewikistä käyttäen [[Special:Export|vientityökalua]].
Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
'importstart' => 'Tuodaan sivuja...',
'importuploaderrorpartial' => 'Tuontitiedoston tallennus epäonnistui. Tiedostosta oli lähetetty vain osa.',
'importuploaderrortemp' => 'Tuontitiedoston tallennus epäonnistui. Väliaikaistiedostojen kansio puuttuu.',
'import-parse-failure' => 'XML-tuonti epäonnistui jäsennysvirheen takia.',
-'import-noarticle' => 'Ei tuotavaa sivua.',
+'import-noarticle' => 'Ei sivua tuotavaksi!',
'import-nonewrevisions' => 'Kaikki versiot on tuotu aiemmin.',
'xml-error-string' => '$1 rivillä $2, sarakkeessa $3 (tavu $4): $5',
'import-upload' => 'Tallenna XML-tiedosto',
'import-invalid-interwiki' => 'Määritellystä wikistä ei voi tuoda.',
'import-error-edit' => 'Sivua $1 ei tuotu, koska sinulla ei ole oikeutta muokata sitä.',
'import-error-create' => 'Sivua $1 ei tuotu, koska sinulla ei ole oikeutta luoda sitä.',
-'import-error-interwiki' => 'Sivua $1 ei voitu tuoda, koska sen nimi on varattu ulkoisen linkittämisen (interwiki).',
-'import-error-special' => 'Sivua $1 ei tuoda, koska se kuuluu nimitilaan, joka ei salli sivuja.',
-'import-error-invalid' => 'Sivua $1 ei tuoda, koska sen nimi ei kelpaa.',
+'import-error-interwiki' => 'Sivua $1 ei tuotu, koska sen nimi on varattu ulkoiseen linkittämiseen (interwiki).',
+'import-error-special' => 'Sivua $1 ei tuotu, koska se kuuluu erityiseen nimiavaruuteen, joka ei salli sivuja.',
+'import-error-invalid' => 'Sivua $1 ei tuotu, koska sen nimi ei kelpaa.',
'import-error-unserialize' => 'Versiota $2 sivusta $1 ei voida jakaa osiin. Version ilmoitettiin käyttävän sisältömallia $3 ja sarjoitusmuotoilua $4.',
'import-options-wrong' => '{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>',
-'import-rootpage-invalid' => 'Annettu sivun nimi ei kelpaa.',
-'import-rootpage-nosubpage' => 'Annetun sivun nimiavaruus $1 ei salli alasivuja.',
+'import-rootpage-invalid' => 'Annettu perussivun nimi ei kelpaa.',
+'import-rootpage-nosubpage' => 'Annetun perussivun nimiavaruus "$1" ei salli alasivuja.',
# Import log
'importlogpage' => 'Tuontiloki',
-'importlogpagetext' => 'Loki toisista wikeistä tuoduista sivuista.',
-'import-logentry-upload' => 'toi sivun [[$1]] lähettämällä tiedoston',
+'importlogpagetext' => 'Loki ylläpitäjien toisista wikeistä tuomista sivuista, joissa on muokkaushistoriaa.',
+'import-logentry-upload' => 'toi sivun [[$1]] tiedostomuodossa',
'import-logentry-upload-detail' => '{{PLURAL:$1|yksi versio|$1 versiota}}',
'import-logentry-interwiki' => 'toi toisesta wikistä sivun $1',
-'import-logentry-interwiki-detail' => '{{PLURAL:$1|yksi versio|$1 versiota}} wikistä $2',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|versio|versiota}} tuotiin wikistä $2',
# JavaScriptTest
'javascripttest' => 'JavaScriptin testaus',
Voit katsella sivun lähteenä olevaa wikitekstiä.',
'tooltip-ca-history' => 'Sivun aikaisemmat versiot',
'tooltip-ca-protect' => 'Suojaa tämä sivu',
-'tooltip-ca-unprotect' => 'Muuta tämän sivun suojauksia',
+'tooltip-ca-unprotect' => 'Muuta tämän sivun suojauksen asetuksia',
'tooltip-ca-delete' => 'Poista tämä sivu',
'tooltip-ca-undelete' => 'Palauta ne muokkaukset, jotka tehtiin tälle sivulle ennen kuin se poistettiin',
'tooltip-ca-move' => 'Siirrä tämä sivu',
'tooltip-n-mainpage-description' => 'Siirry etusivulle',
'tooltip-n-portal' => 'Keskustelua projektista',
'tooltip-n-currentevents' => 'Taustatietoa tämänhetkisistä tapahtumista',
-'tooltip-n-recentchanges' => 'Lista tuoreista muutoksista',
+'tooltip-n-recentchanges' => 'Luettelo tuoreista muutoksista',
'tooltip-n-randompage' => 'Avaa satunnainen sivu',
'tooltip-n-help' => 'Ohjeita',
'tooltip-t-whatlinkshere' => 'Lista sivuista, jotka viittaavat tänne',
'tooltip-watchlistedit-raw-submit' => 'Päivitä tarkkailulista',
'tooltip-recreate' => 'Luo sivu uudelleen',
'tooltip-upload' => 'Aloita tallennus',
-'tooltip-rollback' => 'Palauttaminen kumoaa viimeisimmän muokkaajan yhden tai useamman muutoksen yhdellä kertaa.',
+'tooltip-rollback' => 'Palautustyökalu kumoaa sivun viimeisen muokkaajan yhden tai useamman muutoksen yhdellä kertaa.',
'tooltip-undo' => 'Kumoaminen palauttaa tämän muutoksen ja avaa artikkelin esikatselussa. Yhteenvetokenttään voi kirjoittaa palautuksen syyn.',
'tooltip-preferences-save' => 'Tallenna asetukset',
'tooltip-summary' => 'Kirjoita lyhyt yhteenveto',
+'interlanguage-link-title' => '$1 — $2',
# Stylesheets
'common.css' => '/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */',
# Info page
'pageinfo-title' => 'Tietoja sivusta $1',
-'pageinfo-not-current' => 'Tätä tietoa on mahdoton näyttää vanhoille versiolle.',
+'pageinfo-not-current' => 'Valitettavasti ei ole mahdollista antaa tätä tietoa, joka liittyy vanhoihin versioihin.',
'pageinfo-header-basic' => 'Perustiedot',
'pageinfo-header-edits' => 'Muutoshistoria',
'pageinfo-header-restrictions' => 'Sivun suojaus',
'pageinfo-length' => 'Sivun pituus (tavuina)',
'pageinfo-article-id' => 'Sivun tunniste',
'pageinfo-language' => 'Sivun sisällön kieli',
+'pageinfo-content-model' => 'Sivun sisällön muoto',
'pageinfo-robot-policy' => 'Hakukonemerkinnät',
'pageinfo-robot-index' => 'Indeksoitava',
'pageinfo-robot-noindex' => 'Ei indeksoitava',
$1',
'filedelete-missing' => 'Tiedostoa $1 ei voi poistaa, koska sitä ei ole olemassa.',
-'filedelete-old-unregistered' => 'Tiedoston version $1 ei ole tietokannassa.',
-'filedelete-current-unregistered' => 'Tiedosto $1 ei ole tietokannassa.',
+'filedelete-old-unregistered' => 'Tiedoston määritettyä versiota $1 ei ole tietokannassa.',
+'filedelete-current-unregistered' => 'Tiedostoa $1 ei ole tietokannassa.',
'filedelete-archive-read-only' => 'Arkistohakemistoon ”$1” kirjoittaminen epäonnistui.',
# Browsing diffs
'svg-long-desc' => 'SVG-tiedosto; oletustarkkuus $1 × $2 kuvapistettä; tiedostokoko $3',
'svg-long-desc-animated' => 'Animoitu SVG-tiedosto; oletustarkkuus $1 × $2 kuvapistettä; tiedostokoko $3',
'svg-long-error' => 'Kelvoton SVG-tiedosto: $1',
-'show-big-image' => 'Korkeatarkkuuksinen versio',
+'show-big-image' => 'Alkuperäinen tiedosto',
'show-big-image-preview' => 'Tämän esikatselun koko: $1.',
'show-big-image-other' => '{{PLURAL:$2|Muu resoluutio|Muut resoluutiot}}: $1.',
'show-big-image-size' => '$1 × $2 kuvapistettä',
# External editor support
'edit-externally' => 'Muokkaa tätä tiedostoa ulkoisessa sovelluksessa',
-'edit-externally-help' => '(Katso [//www.mediawiki.org/wiki/Manual:External_editors ohjeet], jos haluat lisätietoja.)',
+'edit-externally-help' => '(Katso [https://www.mediawiki.org/wiki/Manual:External_editors ohjeet], jos haluat lisätietoja.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'koko historia',
'version-hook-subscribedby' => 'Kytkökset',
'version-version' => '(Versio $1)',
'version-license' => 'Lisenssi',
-'version-poweredby-credits' => "Tämä wiki käyttää '''[//www.mediawiki.org/ MediaWikiä]'''. Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Tämä wiki käyttää '''[https://www.mediawiki.org/ MediaWikiä]'''. Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'muut',
'version-poweredby-translators' => 'translatewiki.net-kääntäjät',
'version-credits-summary' => 'Haluaisimme kiittää seuraavia henkilöitä heidän panoksestaan [[Special:Version|MediaWiki-ohjelmistoon]].',
# Special:SpecialPages
'specialpages' => 'Toimintosivut',
-'specialpages-note' => '----
-* Normaalit toimintosivut.
+'specialpages-note-top' => 'Merkkien selitys',
+'specialpages-note' => '* Normaalit toimintosivut.
* <span class="mw-specialpagerestricted">Rajoitetut toimintosivut.</span>',
'specialpages-group-maintenance' => 'Sivujen huoltaminen',
'specialpages-group-other' => 'Muut',
'tag-filter-submit' => 'Suodata',
'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Merkintä|Merkinnät}}]]: $2)',
'tags-title' => 'Merkinnät',
-'tags-intro' => 'Tämä sivu luetteloi merkinnät, joilla ohjelmisto voi merkitä muokkauksia, ja niiden tarkoitukset.',
+'tags-intro' => "Tämä sivu luetteloi ne merkinnät (''eng.'' tags), joilla ohjelmisto voi merkitä muokkauksia, ja niiden tarkoitukset.",
'tags-tag' => 'Merkintänimi',
'tags-display-header' => 'Näkyvyys muutosluetteloissa',
'tags-description-header' => 'Täysi kuvaus tarkoituksesta',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
'limitreport-expansiondepth' => 'Suurin laajennussyvyys',
+# Special:ExpandTemplates
+'expandtemplates' => 'Mallineiden laajennus',
+'expand_templates_intro' => 'Tämä toimintosivu ottaa syötteekseen tekstiä ja laajentaa kaikki mallineet rekursiivisesti sekä jäsenninfunktiot, kuten
+<code><nowiki>{{</nowiki>#language:...}}</code>, ja -muuttujat, kuten
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Toisin sanoen melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.',
+'expand_templates_title' => 'Otsikko (esimerkiksi muuttujaa {{FULLPAGENAME}} varten)',
+'expand_templates_input' => 'Teksti',
+'expand_templates_output' => 'Tulos',
+'expand_templates_xml_output' => 'XML-tuloste',
+'expand_templates_ok' => 'Laajenna',
+'expand_templates_remove_comments' => 'Poista kommentit',
+'expand_templates_remove_nowiki' => 'Poista <nowiki>-tagit tulosteesta',
+'expand_templates_generate_xml' => 'Näytä XML-jäsennyspuu',
+'expand_templates_preview' => 'Esikatselu',
+
);
'ok' => 'Í lagi',
'retrievedfrom' => 'Heintað frá "$1"',
'youhavenewmessages' => 'Tú hevur $1 ($2).',
-'newmessageslink' => 'nýggj boð',
-'newmessagesdifflink' => 'seinasta broyting',
'youhavenewmessagesfromusers' => 'Tú hevur $1 frá {{PLURAL:$3|øðrum brúkara|$3 brúkarum}} ($2).',
'youhavenewmessagesmanyusers' => 'Tú hevur $1 frá fleiri brúkarum ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|eini nýggj boð|nýggj boð}}',
'preferences' => 'Innstillingar',
'mypreferences' => 'Innstillingar',
'prefs-edits' => 'Tal av rættingum:',
-'prefsnologin' => 'Tú hevur ikki ritað inn',
-'prefsnologintext' => 'Tú mást vera <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} innritað/ur]</span> fyri at broyta brúkarainnstillingar.',
'changepassword' => 'Broyt loyniorð',
'prefs-skin' => 'Hamur',
'skin-preview' => 'Forskoðan',
'allmessagesdefault' => 'Enskur tekstur',
'allmessagescurrent' => 'Verandi tekstur',
'allmessagestext' => 'Hetta er eitt yvirlit av tøkum kervisboðum í MediaWiki-navnarúmi.
-Vinarliga vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] um tú ynskir at geva títt íkast til ta generisku MediaWiki lokalisatiónina.',
+Vinarliga vitja [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] um tú ynskir at geva títt íkast til ta generisku MediaWiki lokalisatiónina.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' er ikki stuðlað orsakað av at '''\$wgUseDatabaseMessages''' er sløkt.",
'allmessages-filter-legend' => 'Filtur',
'allmessages-filter-unmodified' => 'Óbroytt',
# External editor support
'edit-externally' => 'Rætta hesa fílu við eksternari applikatión',
-'edit-externally-help' => '(Sí [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] fyri meira kunning)',
+'edit-externally-help' => '(Sí [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] fyri meira kunning)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alt',
'version-hook-name' => 'Krókurnavn',
'version-version' => '(Útgáva $1)',
'version-license' => 'Lisensur',
-'version-poweredby-credits' => "Henda wiki verður rikin av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Henda wiki verður rikin av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'onnur',
'version-poweredby-translators' => 'translatewiki.net týðarar',
'version-credits-summary' => 'Vit ynskja at takka fylgjandi persónum fyri teirra íkast til [[Special:Version|MediaWiki]].',
'duration-decades' => '$1 {{PLURAL:$1|áratíggju}}',
'duration-centuries' => '$1 {{PLURAL:$1|øld|øldir}}',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Úrslit',
+'expand_templates_ok' => 'Í lagi',
+'expand_templates_preview' => 'Forskoðan',
+
);
* @author Louperivois
* @author Ltrlg
* @author Lucyin
+ * @author Mattho69
* @author McDutchie
* @author Meithal
* @author Metroitendo
'tog-enotifusertalkpages' => "M'avertir par courriel si ma page de discussion est modifiée",
'tog-enotifminoredits' => "M'avertir par courriel pour les modifications mineures de pages ou de fichiers également",
'tog-enotifrevealaddr' => 'Afficher mon adresse de courriel dans les courriels de notification',
-'tog-shownumberswatching' => 'Afficher le nombre d’utilisateurs et d’utilisatrices qui suivent la page',
+'tog-shownumberswatching' => "Afficher le nombre d'utilisateurs qui suivent la page",
'tog-oldsig' => 'Signature existante :',
'tog-fancysig' => 'Traiter la signature comme du wikitexte (sans lien automatique)',
'tog-uselivepreview' => 'Utiliser l’aperçu rapide (expérimental)',
'talk' => 'Discussion',
'views' => 'Affichages',
'toolbox' => 'Outils',
-'userpage' => 'Page utilisateur/utilisatrice',
+'userpage' => 'Page utilisateur',
'projectpage' => 'Page méta',
'imagepage' => 'Voir la page du fichier',
'mediawikipage' => 'Voir la page du message',
'ok' => 'Valider',
'retrievedfrom' => 'Récupérée de « $1 »',
'youhavenewmessages' => 'Vous avez $1 ($2).',
-'newmessageslink' => 'de nouveaux messages',
-'newmessagesdifflink' => 'dernière modification',
-'youhavenewmessagesfromusers' => "Vous avez $1 {{PLURAL:$3|d'un(e) autre utilisateur/utilisatrice|de $3 autres utilisateurs/utilisatrices}} ($2).",
+'youhavenewmessagesfromusers' => "Vous avez $1 {{PLURAL:$3|d'un autre utilisateur|de $3 autres utilisateurs}} ($2).",
'youhavenewmessagesmanyusers' => 'Vous avez $1 de nombreux utilisateurs ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un message|de nouveaux messages}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un nouveau message|de nouveaux messages}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|dernière modification|dernières modifications}}',
'youhavenewmessagesmulti' => 'Vous avez de nouveaux messages sur $1.',
'editsection' => 'modifier',
'badtitle' => 'Mauvais titre',
'badtitletext' => 'Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal formé. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.',
'perfcached' => 'Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|un résultat|$1 résultats}} est disponible dans le cache.',
-'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois à $1. Un maximum de {{PLURAL:$4|un résultat|$4 résultats}} est disponible dans le cache.',
+'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois le $1. Un maximum de {{PLURAL:$4|un résultat est disponible|$4 résultats sont disponibles}} dans le cache.',
'querypage-no-updates' => 'Les mises à jour pour cette page sont actuellement désactivées. Les données ci-dessous ne sont pas mises à jour.',
'wrong_wfQuery_params' => 'Paramètres incorrects sur wfQuery()<br />
Fonction : $1<br />
'cascadeprotected' => 'Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :
$2',
'namespaceprotected' => "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
-'customcssprotected' => "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur ou utilisatrice.",
-'customjsprotected' => "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur ou utilisatrice.",
+'customcssprotected' => "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
+'customjsprotected' => "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur.",
'mycustomcssprotected' => 'Vous n’avez pas le droit de modifier cette page CSS.',
'mycustomjsprotected' => 'Vous n’avez pas le droit de modifier cette page JavaScript.',
'myprivateinfoprotected' => 'Vous n’avez pas les droits pour modifier vos informations personnelles.',
'invalidtitle-knownnamespace' => "Titre invalide avec l'espace de noms « $2 » et l'intitulé « $3 »",
'invalidtitle-unknownnamespace' => "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus",
'exception-nologin' => 'Non connecté(e)',
-'exception-nologin-text' => "Cette page ou cette action nécessite d'être connecté sur ce wiki.",
+'exception-nologin-text' => 'Veuillez [[Special:Userlogin|vous connecter]] pour pouvoir accéder à cette page ou cette action.',
+'exception-nologin-text-manual' => 'Veuillez $1 pour pouvoir accéder à cette page ou cette action.',
# Virus scanner
'virus-badscanner' => "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].",
'yourname' => "Nom d'utilisateur :",
'userlogin-yourname' => "Nom d'utilisateur",
-'userlogin-yourname-ph' => "Entrez votre nom d'utilisateur ou d'utilisatrice",
-'createacct-another-username-ph' => 'Saisir le nom d’utilisateur ou d’utilisatrice',
+'userlogin-yourname-ph' => "Entrez votre nom d'utilisateur",
+'createacct-another-username-ph' => 'Saisir le nom d’utilisateur',
'yourpassword' => 'Mot de passe :',
'userlogin-yourpassword' => 'Mot de passe',
'userlogin-yourpassword-ph' => 'Entrez votre mot de passe',
'createacct-benefit-body2' => '{{PLURAL:$1|article|articles}}',
'createacct-benefit-body3' => '{{PLURAL:$1|contributeur récent|contributeurs récents}}',
'badretype' => 'Les mots de passe que vous avez saisis ne correspondent pas.',
-'userexists' => "Nom d'utilisateur/utilisatrice entré déjà utilisé.
+'userexists' => "Nom d'utilisateur entré déjà utilisé.
Veuillez choisir un nom différent.",
'loginerror' => 'Erreur de connexion',
'createacct-error' => 'Erreur lors de la création du compte',
'nocookieslogin' => '{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.',
'nocookiesfornew' => "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.
Vérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
-'noname' => "Vous n'avez pas saisi un nom d'utilisateur/utilisatrice valide.",
+'noname' => "Vous n'avez pas saisi un nom d'utilisateur valide.",
'loginsuccesstitle' => 'Connexion réussie',
'loginsuccess' => 'Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».',
'nosuchuser' => "L'utilisateur « $1 » n'existe pas.
Les noms d'utilisateurs sont sensibles à la casse.
Vérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
-'nosuchusershort' => "Il n'y a pas de contributeur ni de contributrice avec le nom « $1 ». Veuillez vérifier l'orthographe.",
-'nouserspecified' => "Vous devez saisir un nom d'utilisateur/utilisatrice.",
-'login-userblocked' => 'Cet {{GENDER:$1|utilisateur|utilisatrice|utilisateur/utilisatrice}} est bloqué. Connexion non autorisée.',
+'nosuchusershort' => "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
+'nouserspecified' => "Vous devez saisir un nom d'utilisateur.",
+'login-userblocked' => 'Cet utilisateur est bloqué. Connexion non autorisée.',
'wrongpassword' => 'Le mot de passe est incorrect. Veuillez essayer à nouveau.',
'wrongpasswordempty' => "Vous n'avez pas entré de mot de passe. Veuillez essayer à nouveau.",
'passwordtooshort' => 'Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.',
-'password-name-match' => "Votre mot de passe doit être différent de votre nom d'utilisateur/utilisatrice.",
-'password-login-forbidden' => "L'utilisation de ce nom d'utilisateur/utilisatrice et de ce mot de passe a été interdite.",
+'password-name-match' => "Votre mot de passe doit être différent de votre nom d'utilisateur.",
+'password-login-forbidden' => "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
'mailmypassword' => 'Recevoir un nouveau mot de passe par courriel',
'passwordremindertitle' => 'Nouveau mot de passe temporaire pour {{SITENAME}}',
'passwordremindertext' => "Quelqu'un (probablement vous, ayant l'adresse IP $1) a demandé un nouveau mot de
Vous devriez ouvrir une session et modifier dès à présent votre mot de passe.
Ignorez ce message si ce compte a été créé par erreur.',
-'usernamehasherror' => "Le nom d'utilisateur/utilisatrice ne peut pas contenir des caractères de hachage",
+'usernamehasherror' => "Le nom d'utilisateur ne peut pas contenir des caractères de hachage",
'login-throttled' => "Vous avez tenté un trop grand nombre de connexions dernièrement.
Veuillez attendre $1 avant d'essayer à nouveau.",
'login-abort-generic' => 'Votre tentative de connexion a échoué',
'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-emaildisabled' => 'Les fonctionnalités e-mail ont été désactivées sur ce wiki.',
-'passwordreset-username' => "Nom d'utilisateur/utilisatrice :",
+'passwordreset-username' => "Nom d'utilisateur :",
'passwordreset-domain' => 'Domaine :',
'passwordreset-capture' => 'Voir le courriel résultant?',
'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.",
$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'{{GENDER:$1|utilisateur|utilisatrice|utilisateur/utilisatrice}} : $1
+'passwordreset-emailelement' => "Nom d'utilisateur : $1
Mot de passe temporaire : $2",
'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'{{GENDER:$2|utilisateur|utilisatrice|utilisateur/utilisatrice}} a échoué : $1",
+'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'{{GENDER:$2|utilisateur}} a échoué : $1",
# Special:ChangeEmail
'changeemail' => 'Changer l’adresse de courriel',
* Expiration du blocage : $6
* Compte bloqué : $7.
-Vous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur ou administratrice]] pour en discuter.
+Vous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.
Vous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.
Votre adresse IP actuelle est $3 et votre identifiant de blocage est $5.
Veuillez préciser ces indications dans toutes les requêtes que vous ferez.",
* Expiration du blocage : $6
* Compte bloqué : $7
-Vous pouvez contacter $1 ou l’un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs et administratrices]] pour discuter de ce blocage.
+Vous pouvez contacter $1 ou l’un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.
Notez que vous ne pourrez utiliser la fonctionnalité d’envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été désactivée.
'loginreqpagetext' => 'Vous devez vous $1 pour voir les autres pages.',
'accmailtitle' => 'Mot de passe envoyé.',
'accmailtext' => "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.
-Il peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après s’être connecté.",
+Il peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après s’être connecté{{GENDER:$1||e|(e)}}.",
'newarticle' => '(Nouveau)',
'newarticletext' => "Vous avez suivi un lien vers une page qui n'existe pas encore ou qui a été [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} effacée].
Pour créer cette page, entrez votre texte dans la boîte ci-dessous (vous pouvez consulter [[{{MediaWiki:Helppage}}|la page d'aide]] pour plus d'informations).
'editingold' => "'''Attention : vous êtes en train de modifier une ancienne version de cette page.
Si vous la publiez, toutes les modifications effectuées depuis cette version seront perdues.'''",
'yourdiff' => 'Différences',
-'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br
-/>Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
+'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
+Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br
/>Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).
'''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
Vous pouvez copier et coller votre texte dans un fichier texte et l’enregistrer pour plus tard.
L’administrateur ayant verrouillé la base de données a donné l’explication suivante : $1",
-'protectedpagewarning' => "'''AVERTISSEMENT : cette page est protégée. Seuls les utilisateurs et utilisatrices ayant le statut administrateur peuvent la modifier.'''<br />
+'protectedpagewarning' => "'''AVERTISSEMENT : cette page est protégée. Seuls les utilisateurs ayant le statut d'administrateur peuvent la modifier.'''<br />
La dernière entrée du journal est affichée ci-dessous pour référence :",
-'semiprotectedpagewarning' => "'''Note :''' Cette page a été protégée de telle façon que seuls les contributeurs et contributrices enregistré(e)s puissent la modifier. La dernière entrée du journal est affichée ci-dessous pour référence :",
-'cascadeprotectedwarning' => "'''ATTENTION :''' Cette page a été protégée de manière à ce que seul(e)s les administrateurs et administratrices puissent la modifier. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
+'semiprotectedpagewarning' => "'''Note :''' Cette page a été protégée de telle façon que seuls les contributeurs enregistrés puissent la modifier. La dernière entrée du journal est affichée ci-dessous pour référence :",
+'cascadeprotectedwarning' => "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent la modifier. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
'titleprotectedwarning' => "'''ATTENTION : Cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.''' La dernière entrée du journal est affichée ci-dessous pour référence :",
'templatesused' => '{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} par cette page :',
'templatesusedpreview' => '{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette prévisualisation :',
'undo-failure' => 'Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.',
'undo-norev' => "La modification n'a pas pu être défaite parce qu'elle est inexistante ou qu'elle a été supprimée.",
'undo-summary' => 'Annulation des modifications $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]])',
-'undo-summary-username-hidden' => 'Annuler la révision $1 par un(e) utilisateur/utilisatrice masqué(e)',
+'undo-summary-username-hidden' => 'Annuler la révision $1 par un utilisateur masqué',
# Account creation failure
'cantcreateaccounttitle' => 'Vous ne pouvez pas créer de compte.',
# Revision deletion
'rev-deleted-comment' => '(résumé de modification retiré)',
-'rev-deleted-user' => "(nom d'utilisateur/utilisatrice retiré)",
+'rev-deleted-user' => "(nom d'utilisateur retiré)",
'rev-deleted-event' => '(entrée retirée)',
-'rev-deleted-user-contribs' => "[nom d'utilisateur/utilisatrice ou adresse IP retiré - modification masquée sur les contributions]",
+'rev-deleted-user-contribs' => "[nom d'utilisateur ou adresse IP retiré - modification masquée sur les contributions]",
'rev-deleted-text-permission' => "Cette version de la page a été '''effacée'''.
Des détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].",
'rev-deleted-text-unhide' => "Cette version de la page a été '''effacée'''.
Les autres administrateurs de {{SITENAME}} pourront toujours accéder au contenu caché et le restaurer à travers cette même interface, à moins que des restrictions supplémentaires ne soient mises en place.",
'revdelete-confirm' => 'Confirmez que vous voulez effectuer cette action, que vous en comprenez les conséquences, et que vous le faites en accord avec [[{{MediaWiki:Policy-url}}|les règles]].',
'revdelete-suppress-text' => "La suppression ne doit être utilisée '''que''' dans les cas suivants :
+* Informations potentiellement diffamatoires
* Informations personnelles inappropriées
*: ''adresse, numéro de téléphone, numéro de sécurité sociale, …''",
'revdelete-legend' => 'Mettre en place des restrictions de visibilité :',
'revdelete-hide-image' => 'Masquer le contenu du fichier',
'revdelete-hide-name' => "Masquer l'action et la cible",
'revdelete-hide-comment' => 'Modifier le résumé',
-'revdelete-hide-user' => 'Nom d’utilisateur/utilisatrice ou adresse IP de l’éditeur/éditrice',
-'revdelete-hide-restricted' => "Supprimer ces données aux administrateurs et administratrices ainsi bien qu'aux autres",
+'revdelete-hide-user' => 'Nom d’utilisateur/Adresse IP de l’éditeur',
+'revdelete-hide-restricted' => "Supprimer ces données aux administrateurs ainsi qu'aux autres",
'revdelete-radio-same' => '(ne pas changer)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Masqué',
+'revdelete-radio-set' => 'Masqué',
+'revdelete-radio-unset' => 'Visible',
'revdelete-suppress' => 'Masquer également les données pour les administrateurs',
'revdelete-unsuppress' => 'Enlever les restrictions sur les versions restaurées',
'revdelete-log' => 'Motif :',
'revdelete-no-change' => "'''Attention :''' L'élément daté du $1 à $2 a déjà les paramètres de visibilité demandés.",
'revdelete-concurrent-change' => "Erreur lors de la modification de l'élément daté du $1 à $2 : son statut a été changé par quelqu'un d'autre pendant que vous le modifiez.
Vérifiez les journaux.",
-'revdelete-only-restricted' => "Erreur lors de la suppression de l'entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs et administratrices sans également sélectionner des autres options de suppression.",
+'revdelete-only-restricted' => "Erreur lors de la suppression de l'entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs sans également sélectionner des autres options de suppression.",
'revdelete-reason-dropdown' => "* Raisons courantes de suppression :
** Violation des droits d'auteurs ;
** Commentaires ou renseignements personnels inappropriés ;
'search-interwiki-caption' => 'Projets frères',
'search-interwiki-default' => 'Résultats sur $1 :',
'search-interwiki-more' => '(plus)',
-'search-relatedarticle' => 'Relaté',
+'search-relatedarticle' => 'Reliés',
'mwsuggest-disable' => 'Désactiver les suggestions de recherche',
'searcheverything-enable' => 'Rechercher dans tous les espaces de noms',
-'searchrelated' => 'relaté',
+'searchrelated' => 'reliés',
'searchall' => 'tout',
'showingresults' => 'Affichage de <b>$1</b> résultat{{PLURAL:$1||s}} à partir du n°<b>$2</b>.',
'showingresultsnum' => 'Affichage de <b>$3</b> résultat{{PLURAL:$3||s}} à partir du n°<b>$2</b>.',
'preferences' => 'Préférences',
'mypreferences' => 'Préférences',
'prefs-edits' => 'Nombre de modifications :',
-'prefsnologin' => 'Non connecté',
-'prefsnologintext' => 'Vous devez être <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connecté]</span> pour modifier vos préférences d\'utilisateur.',
+'prefsnologintext2' => 'Veuillez $1 pour définir les préférences utilisateur.',
'changepassword' => 'Changer de mot de passe',
'prefs-skin' => 'Habillage',
'skin-preview' => 'Prévisualiser',
'right-unblockself' => 'Se débloquer soi-même',
'right-protect' => 'Modifier les niveaux de protection et modifier les pages protégées en cascade',
'right-editprotected' => 'Modifier les pages protégées avec « {{int:protect-level-sysop}} »',
-'right-editsemiprotected' => 'Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »',
+'right-editsemiprotected' => 'Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »',
'right-editinterface' => "Modifier l'interface utilisateur",
'right-editusercssjs' => "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
'right-editusercss' => "Modifier les fichiers CSS d'autres utilisateurs",
'recentchanges-label-minor' => 'Cette modification est mineure',
'recentchanges-label-bot' => 'Cette modification a été effectuée par un robot.',
'recentchanges-label-unpatrolled' => "Cette modification n'a pas encore été patrouillée.",
+'recentchanges-legend-newpage' => '$1 - nouvelle page',
'rcnote' => "Voici {{PLURAL:$1|la dernière modification effectuée|les $1 dernières modifications effectuées}} durant {{PLURAL:$2|la dernière journée|les <b>$2</b> derniers jours}} jusqu'à $5 le $4.",
'rcnotefrom' => "Voici les modifications effectuées depuis le '''$2''' ('''$1''' au maximum).",
'rclistfrom' => 'Afficher les nouvelles modifications depuis le $1.',
'uploadbtn' => 'Importer le fichier',
'reuploaddesc' => "Annuler et retourner au formulaire d'import",
'upload-tryagain' => 'Envoyer la description du fichier modifiée',
-'uploadnologin' => 'Non connecté(e)',
+'uploadnologin' => 'Non connecté{{GENDER:||e|(e)}}',
'uploadnologintext' => 'Vous devez $1 pour importer des fichiers.',
'upload_directory_missing' => "Le répertoire d'import de fichier ($1) est introuvable et n'a pas pu être créé par le serveur web.",
'upload_directory_read_only' => "Le répertoire d'import de fichier ($1) n'est pas accessible en écriture depuis le serveur web.",
'img-auth-notindir' => "Le chemin demandé n'est pas le répertoire d'import configuré.",
'img-auth-badtitle' => 'Impossible de construire un titre valide à partir de « $1 ».',
'img-auth-nologinnWL' => "Vous n'êtes pas connecté et « $1 » n'est pas dans la liste blanche.",
-'img-auth-nofile' => "Le fichier « $1 » n'existe pas.",
+'img-auth-nofile' => "Le fichier « $1 » n'existe pas.",
'img-auth-isdir' => "Vous essayez d'accéder au répertoire « $1 ».
Seul l'accès aux fichiers est permis.",
'img-auth-streaming' => 'Lecture en continu de « $1 ».',
'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-prop' => 'Nom de la propriété :',
'pageswithprop-submit' => 'Aller',
'pageswithprop-prophidden-long' => 'valeur de propriété de texte long masquée ($1)',
'pageswithprop-prophidden-binary' => 'valeur de propriété binaire masquée ($1)',
'watchlistfor2' => 'Pour $1 $2',
'nowatchlist' => 'Votre liste de suivi ne référence aucune page.',
'watchlistanontext' => 'Veuillez vous $1 pour visualiser ou modifier les éléments de votre liste de suivi.',
-'watchnologin' => 'Non connecté',
-'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] pour modifier votre liste de suivi.',
+'watchnologin' => 'Non connecté(e)',
+'watchnologintext' => 'Vous devez être [[Special:UserLogin|identifié(e)]] pour modifier votre liste de suivi.',
'addwatch' => 'Ajouter à la liste de suivi',
'addedwatchtext' => 'La page « [[:$1]] » a été ajoutée à votre [[Special:Watchlist|liste de suivi]].
Les prochaines modifications de cette page et de la page de discussion associée y seront répertoriées.',
courriel : $PAGEEDITOR_EMAIL
wiki : $PAGEEDITOR_WIKI
-Il n\'y aura pas d\'autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page. Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
+Il n’y aura pas d’autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page une fois connecté. Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
- Votre système de notification de {{SITENAME}}
+Votre système de notification de {{SITENAME}}
--
Pour modifier les paramètres de notification par courriel, visitez
'blockipsuccesssub' => 'Blocage réussi',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />
Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.',
-'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain de vouloir faire cela ?',
+'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain{{GENDER:||e|(e)}} de vouloir faire cela ?',
'ipb-confirmhideuser' => "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?",
'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut',
'ipb-unblock-addr' => 'Débloquer $1',
'unblockip' => 'Débloquer un utilisateur ou une adresse IP',
'unblockiptext' => "Utilisez le formulaire ci-dessous pour rétablir l'accès aux modifications depuis une adresse IP ou un nom d'utilisateur.",
'ipusubmit' => 'Supprimer ce blocage',
-'unblocked' => '[[User:$1|$1]] a été débloqué',
-'unblocked-range' => '$1 a été débloqué',
+'unblocked' => '[[User:$1|$1]] a été débloqué{{GENDER:$1||e|(e)}}',
+'unblocked-range' => '$1 a été débloqué{{GENDER:$1||e|(e)}}',
'unblocked-id' => 'Le blocage $1 a été enlevé',
'blocklist' => 'Utilisateurs bloqués',
'ipblocklist' => 'Utilisateurs bloqués',
'cant-block-while-blocked' => 'Vous ne pouvez pas bloquer d’autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.',
'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
'ipbblocked' => "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
-'ipbnounblockself' => "Vous n'êtes pas autorisé à vous débloquer vous-même",
+'ipbnounblockself' => "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à vous débloquer vous-même",
# Developer tools
'lockdb' => 'Verrouiller la base de données',
'allmessagesdefault' => 'Message par défaut',
'allmessagescurrent' => 'Message actuel',
'allmessagestext' => "Ceci est la liste des messages disponibles dans l'espace MediaWiki.
-Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.",
+Veuillez visiter la [https://www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.",
'allmessagesnotsupportedDB' => "Cette page '''{{ns:special}}:Allmessages''' n'est pas utilisable car '''\$wgUseDatabaseMessages''' a été désactivé.",
'allmessages-filter-legend' => 'Filtrer',
'allmessages-filter' => 'Filtrer par état de modification :',
'tooltip-undo' => '« Annuler » rétablit la modification précédente et ouvre la fenêtre de modification en mode prévisualisation. Il est possible d’ajouter une raison dans le résumé.',
'tooltip-preferences-save' => 'Sauvegarder les préférences',
'tooltip-summary' => 'Entrez un bref résumé',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
# Stylesheets
'common.css' => '/* Le CSS placé ici sera appliqué à tous les habillages. */',
'svg-long-desc' => 'Fichier SVG, résolution de $1 × $2 pixels, taille : $3',
'svg-long-desc-animated' => 'Fichier SVG animé, taille $1 x $2 pixels, taille du fichier: $3',
'svg-long-error' => 'Fichier SVG non valide: $1',
-'show-big-image' => 'Image en plus haute résolution',
+'show-big-image' => "Fichier d'origine",
'show-big-image-preview' => 'Taille de cet aperçu : $1.',
'show-big-image-other' => '{{PLURAL:$2|Autre résolution|Autres résolutions}} : $1.',
'show-big-image-size' => '$1 × $2 pixels',
# External editor support
'edit-externally' => 'Modifier ce fichier en utilisant une application externe',
-'edit-externally-help' => "(Consulter [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d'installation] pour plus d'informations)",
+'edit-externally-help' => "(Consulter [https://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d'installation] pour plus d'informations)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tout',
'semicolon-separator' => ' ; ',
'colon-separator' => ' : ',
'percent' => '$1 %',
+'quotation-marks' => '« $1 »',
# Multipage image navigation
'imgmultipageprev' => '← page précédente',
'version-hook-subscribedby' => 'Abonnés :',
'version-version' => '(version $1)',
'version-license' => 'Licence',
-'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'autres',
'version-poweredby-translators' => 'traducteurs de translatewiki.net',
'version-credits-summary' => 'Nous tenons à remercier les personnes suivantes pour leur contribution à [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Pages spéciales',
-'specialpages-note' => '----
-* Pages spéciales normales.
-* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>
-* <span class="mw-specialpagecached">Pages spéciales seulement en cache (pourraient être désuètes).</span>',
+'specialpages-note-top' => 'Légende',
+'specialpages-note' => '* Pages spéciales normales.
+* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>',
'specialpages-group-maintenance' => 'Rapports de maintenance',
'specialpages-group-other' => 'Autres pages spéciales',
'specialpages-group-login' => "S'identifier / s'inscrire",
'limitreport-expansiondepth' => 'Plus grande profondeur d’expansion',
'limitreport-expensivefunctioncount' => 'Nombre de fonctions d’analyse coûteuses',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expansion des modèles',
+'expand_templates_intro' => "Cette page spéciale accepte un texte wiki source et permet de réaliser récursivement l’expansion des modèles qu’il contient.
+Elle réalise aussi l’expansion des fonctions du parseur telles que
+<code><nowiki>{{</nowiki>#language:...}}</code> et des variables telles que
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+En fait, elle réalise l'expansion de pratiquement tout ce qui est encadré par des doubles accolades.",
+'expand_templates_title' => 'Titre de la page, si le code utilise {{FULLPAGENAME}}, etc. :',
+'expand_templates_input' => 'Texte wiki source :',
+'expand_templates_output' => 'Texte wiki obtenu après expansion',
+'expand_templates_xml_output' => 'Résultat intermédiaire de l’analyse, au format XML',
+'expand_templates_ok' => 'Valider',
+'expand_templates_remove_comments' => 'Supprimer les commentaires',
+'expand_templates_remove_nowiki' => 'Supprime les marqueurs <nowiki> dans le résultat',
+'expand_templates_generate_xml' => 'Voir l’arborescence d’analyse XML',
+'expand_templates_preview' => 'Aperçu du rendu',
+
);
'ok' => 'D’acôrd',
'retrievedfrom' => 'Rècupèrâye de « $1 »',
'youhavenewmessages' => 'Vos éd de $1 ($2).',
-'newmessageslink' => 'mèssâjos novéls',
-'newmessagesdifflink' => 'dèrriér changement',
'youhavenewmessagesfromusers' => 'Vos éd $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).',
'youhavenewmessagesmanyusers' => 'Vos éd $1 d’un mouél d’utilisators ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un mèssâjo novél|de mèssâjos novéls}}',
'preferences' => 'Prèferences',
'mypreferences' => 'Prèferences',
'prefs-edits' => 'Nombro de changements :',
-'prefsnologin' => 'Pas branchiê',
-'prefsnologintext' => 'Vos dête étre <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê]</span> por dèfenir les prèferences utilisator.',
'changepassword' => 'Changiér lo contresegno',
'prefs-skin' => 'Habelyâjo',
'skin-preview' => 'Prèvêre',
'recentchanges-label-minor' => 'O est un petiôt changement',
'recentchanges-label-bot' => 'Ceti changement est étâ fêt per un robot',
'recentchanges-label-unpatrolled' => 'Ceti changement est p’oncor étâ gouardâ',
+'recentchanges-legend-newpage' => '$1 - pâge novèla',
'rcnote' => "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|lo jorn passâ|los '''$2''' jorns passâs}} tant qu’a $5 lo $4.",
'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' (tant qu’a '''$1''' montrâs).",
'rclistfrom' => 'Montrar los novéls changements dês lo $1',
'allmessagesdefault' => 'Mèssâjo per dèfôt',
'allmessagescurrent' => 'Tèxto d’ora',
'allmessagestext' => 'O est la lista des mèssâjos sistèmo disponiblos dens l’èspâço MediaWiki.
-Volyéd visitar la [//www.mediawiki.org/wiki/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.',
+Volyéd visitar la [https://www.mediawiki.org/wiki/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.',
'allmessagesnotsupportedDB' => "Ceta pâge '''{{ns:special}}:Allmessages''' est inutilisâbla perce que '''\$wgUseDatabaseMessages''' at étâ dèsactivâ.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtrar per ètat de changement :',
# External editor support
'edit-externally' => 'Changiér ceti fichiér en utilisent una aplicacion de defôr',
-'edit-externally-help' => '(Vêde les [//www.mediawiki.org/wiki/Manual:External_editors enstruccions d’enstalacion] por més d’enformacions)',
+'edit-externally-help' => '(Vêde les [https://www.mediawiki.org/wiki/Manual:External_editors enstruccions d’enstalacion] por més d’enformacions)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tot',
'version-version' => '(Vèrsion $1)',
'version-svn-revision' => '(v$2)',
'version-license' => 'Licence',
-'version-poweredby-credits' => "Ceti vouiqui fonccione grâce a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ceti vouiqui fonccione grâce a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'ôtros',
'version-license-info' => 'MediaWiki est una programeria libra ; vos la pouede tornar distribuar et / ou changiér d’aprés los tèrmos de la Licence publica g·ènèrala GNU coment publeyê per la Free Software Foundation ; seye la vèrsion 2 de la Licence, ou ben (a voutron chouèx) tota novèla vèrsion.
# Special:SpecialPages
'specialpages' => 'Pâges spèciâles',
-'specialpages-note' => '----
-* Pâges spèciâles normales.
+'specialpages-note' => '* Pâges spèciâles normales.
* <span class="mw-specialpagerestricted">Pâges spèciâles rètrentes.</span>
* <span class="mw-specialpagecached">Pâges spèciâles solament en cache (porriant étre dèpassâs).</span>',
'specialpages-group-maintenance' => 'Rapôrts de mantegnence',
'duration-centuries' => '$1 sièclo{{PLURAL:$1||s}}',
'duration-millennia' => '$1 milènèro{{PLURAL:$1||s}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Èxpension des modèlos',
+'expand_templates_intro' => 'Ceta pâge spèciâla accèpte un vouiquitèxto sôrsa et pèrmèt de rèalisar rècursivament l’èxpension des modèlos que contint.
+Rèalise asse-ben l’èxpension de les fonccions du parsor coment
+<code><nowiki>{{</nowiki>#language:...<nowiki>}}</nowiki></code> et de les variâbles prèdèfenies coment
+<code><nowiki>{{</nowiki>CURRENTDAY<nowiki>}}</nowiki></code> — en veré praticament tot cen qu’est encâdrâ per des dobles colâdes.
+Rèalise cen en apelent los étâjos succèssifs que vont avouéc du parsor de MediaWiki lui-mémo.',
+'expand_templates_title' => 'Titro de la pâge, se lo code utilise {{FULLPAGENAME}}, etc. :',
+'expand_templates_input' => 'Vouiquitèxto sôrsa :',
+'expand_templates_output' => 'Rèsultat',
+'expand_templates_xml_output' => 'Rèsultat u format XML',
+'expand_templates_ok' => 'D’acôrd',
+'expand_templates_remove_comments' => 'Suprimar los comentèros',
+'expand_templates_remove_nowiki' => 'Suprime les balises <nowiki> dens lo rèsultat',
+'expand_templates_generate_xml' => 'Fâre vêre l’âbro du parsor u format XML',
+'expand_templates_preview' => 'Prèvisualisacion du rendu',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Faan „$1“',
'youhavenewmessages' => 'Dü heest $1 ($2).',
-'newmessageslink' => 'nei bööd',
-'newmessagesdifflink' => 'Leest änring',
'youhavenewmessagesfromusers' => 'Dü heest $1 faan {{PLURAL:$3|en öödern brüker|$3 ööder brükern}} ($2).',
'youhavenewmessagesmanyusers' => 'Dü heest $1 faan flook ööder brükern ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ian nei nooracht|nei noorachten}}',
-'newmessagesdifflinkplural' => 'leetst {{PLURAL:$1|feranrang|feranrangen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ian nei bööd|999=nei bööd}}',
+'newmessagesdifflinkplural' => 'leetst {{PLURAL:$1|feranrang|999=feranrangen}}',
'youhavenewmessagesmulti' => 'Dü heest nei bööd üüb $1',
'editsection' => 'Bewerke',
'editold' => 'Bewerke',
'invalidtitle-knownnamespace' => 'Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“',
'invalidtitle-unknownnamespace' => 'Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“',
'exception-nologin' => 'Ei uunmeldet',
-'exception-nologin-text' => 'Det könst dü bluas bewerke, wan dü uunmeldet beest.',
+'exception-nologin-text' => 'Wees so gud an [[Special:Userlogin|melde di uun]], am detdiar sidj of aktjuun ütjtufeeren.',
+'exception-nologin-text-manual' => 'Wees so gud an $1 , am detdiar sidj of aktjuun ütjtufeeren.',
# Virus scanner
'virus-badscanner' => "Ferkiard iinstelang: Ünbekäänd wiirenscanner: ''$1''",
'createacct-benefit-body2' => '{{PLURAL:$1|sidj|sidjen}}',
'createacct-benefit-body3' => 'aktiif {{PLURAL:$1|skriiwer|skriiwern}}',
'badretype' => 'Jo tau paaswurden san ei likedenang.',
-'userexists' => 'Dideer brükernoome as ål ferjääwen.
-Wees sü gödj en kiis en ouderen.',
+'userexists' => 'Didiar brükernööm as al wech.
+Wees so gud an schük di en öödern.',
'loginerror' => "Bi't uunmeldin as wat skiaf gingen",
'createacct-error' => "Bi't iinrachten faan det brükerkonto as wat skiaf gingen",
'createaccounterror' => 'Brükerkonto küd ei iinracht wurd: $1',
Ferschük det man noch ans.',
'passwordtooshort' => 'Paaswurden skel tumanst {{PLURAL:$1|1 tiaken|$1 tiakens}} lung wees.',
'password-name-match' => 'Dü könst dan brükernööm ei üs paaswurd nem.',
-'password-login-forbidden' => 'Jüdeer brükernoome än paasuurd as ferbin.',
+'password-login-forbidden' => 'Didiar brükernööm mä detdiar paaswurd as ei tuläät.',
'mailmypassword' => 'Schüür mi en nei paaswurd.',
'passwordremindertitle' => 'Nei tidjwiis paaswurd för {{SITENAME}}',
'passwordremindertext' => 'En brüker (woorskiinelk dü, faan IP adres $1) hää am en nei paaswurd för {{SITENAME}} ($4) fraaget.
'createacct-another-realname-tip' => 'Stäänt tu wool. Wan dü dan rochten nööm uundääst, koon hi mä din feranrangen ferbünjen wurd.',
# Email sending
-'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktsjuun mail() faan PHP.',
+'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktjuun mail() faan PHP.',
'user-mail-no-addy' => 'Küd nian e-mail schüür saner e-mail-adres.',
'user-mail-no-body' => 'Dü wulst en e-mail saner tekst wechsjüür.',
'passwordreset-legend' => 'Paaswurd turagsaat',
'passwordreset-disabled' => 'Dü könst din paaswurd uun detdiar wiki ei turagsaat.',
'passwordreset-emaildisabled' => 'E-mail as üüb detheer Wiki ufknipset wurden.',
-'passwordreset-username' => 'Brükernoome:',
+'passwordreset-username' => 'Brükernööm:',
'passwordreset-domain' => 'Domain:',
'passwordreset-capture' => 'Wel dü det e-mail nooracht uunluke?',
-'passwordreset-capture-help' => 'Wan dü detheer kasje uunkrüsagst, woort det e-mail nooracht mä det nei paaswurd uunwiset an tu di brüker sjüürd.',
+'passwordreset-capture-help' => 'Wan dü detheer kasche uunkrüsagst, woort det e-mail nooracht mä det nei paaswurd uunwiset an tu di brüker schüürd.',
'passwordreset-email' => 'E-mail adres:',
'passwordreset-emailtitle' => 'Brükerkonto aw {{SITENAME}}',
'passwordreset-emailtext-ip' => 'Hoker mä det IP-Adres $1, woorskiinelk dü salew, wul hal brükerinformatsjuunen för {{SITENAME}} tusjüürd fu ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-adres ferbünjen:
$2
{{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-emailelement' => 'Brükernööm: $1
+Tidjwiis paaswurd: $2',
'passwordreset-emailsent' => 'Diar as en E-Mail tu di onerwais.',
'passwordreset-emailsent-capture' => 'Detdiar E-Mail, wat oner uunwiset woort, as tu di onerwais.',
'passwordreset-emailerror-capture' => 'Detdiar E-Mail, wat oner uunwiset woort, wiar tu di onerwais, oober küd ei tu di {{GENDER:$2|brüker}} ufsjüürd wurd: $1',
'summary-preview' => 'Föörskau faan det tuupfaadang:',
'subject-preview' => 'Föörskau faan det auerskraft:',
'blockedtitle' => 'Brüker as speret',
-'blockedtext' => "'''Dan brükernööm of IP adres as speret wurden.'''
+'blockedtext' => "'''Dan brükernööm of din IP-adres as speret wurden.'''
Det as maaget wurden faan $1.
Di grünj as ''$2''.
Dü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.
-Dü könst ei det E-Mail-funktsjuun 'E-mail tu dideere brüker' brük, so loong dü nian E-Mail-adres uun din [[Special:Preferences|brükerkonto iinstelangen]] uunden heest of wan det E-Mail-funktsjuun för di speret wurden as.
+Dü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.
-Uugenblakelk as din IP addres $3, an det sper ID as #$5.
-För arke uunfraag wurd aal jo informatsjuunen boowen brükt.",
-'autoblockedtext' => "'''Din IP adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''
+Uugenblakelk as din IP-addres $3, an det sper-ID as #$5.
+För arke uunfraag wurd aal jo informatjuunen boowen brükt.",
+'autoblockedtext' => "'''Din IP-adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''
Di grünj as:
: ''$2''.
Dü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.
-Dü könst ei det E-Mail-funktsjuun 'E-mail tu dideere brüker' brük, so loong dü nian E-Mail-adres uun din [[Special:Preferences|brükerkonto iinstelangen]] uunden heest of wan det E-Mail-funktsjuun för di speret wurden as.
+Dü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.
-Uugenblakelk as din IP addres $3, an det sper ID as #$5.
-För arke uunfraag wurd aal jo informatsjuunen boowen brükt.",
+Uugenblakelk as din IP-addres $3, an det sper-ID as #$5.
+För arke uunfraag wurd aal jo informatjuunen boowen brükt.",
'blockednoreason' => 'nään grünj uunden',
'whitelistedittext' => 'Dü skel di $1, am sidjen tu bewerkin.',
'confirmedittext' => 'Dü skel iarst din e-mail-adres gudkään, iar dü began könst tu werkin. Maage det üüb det sidj mä din persöönelk [[Special:Preferences|iinstelangen]].',
'revdelete-confirm' => 'Ferseekre noch ans, dat dü det würelk du wel, dat dü witjst, wat dü dääst, an dat det mä a [[{{MediaWiki:Policy-url}}|bestemangen]] auerian stemet.',
'revdelete-suppress-text' => "Det skul '''bluas''' onertrakt wurd bi:
* Persöönelk informatsjuunen, diar näämen wat uungung
-*: ''Adresen, Tilefoonnumern, Ferseekerangsnumern an sowat''",
+*: ''Adresen, tilefoonnumern, ferseekerangsnumern an sowat''",
'revdelete-legend' => 'Iinstelangen, hüföl tu sen wees skal',
'revdelete-hide-text' => 'Tekst faan det werjuun',
'revdelete-hide-image' => 'Fersteeg, wat uun det datei stäänt',
'revdelete-hide-user' => 'Brükernööm/IP-adres faan di brüker',
'revdelete-hide-restricted' => 'Dooten uk för administratooren an öödern fersteeg',
'revdelete-radio-same' => '(ei feranre)',
-'revdelete-radio-set' => 'Tu sen',
-'revdelete-radio-unset' => 'Ferbürgen',
+'revdelete-radio-set' => 'Ferbürgen',
+'revdelete-radio-unset' => 'Tu sen',
'revdelete-suppress' => "Grünj för't striken uk för administratooren an öödern fersteeg",
'revdelete-unsuppress' => 'Weder iinsteld werjuunen luasmaage',
'revdelete-log' => 'Grünj:',
'mergehistory-into' => 'Ööder sidj:',
'mergehistory-list' => 'Werjuunen, diar tuupfeerd wurd kön.',
'mergehistory-merge' => 'Jodiar werjuunen faan „[[:$1]]“ kön efter „[[:$2]]“ auerdraanj wurd.
-Kääntiakne det wersjuun, wat üs leetst mä auerdraanj wurd skal.
-A nawigatjuun links saat ales weder turag üüb di ual stant.',
+Kääntiakne det werjuun, wat üs leetst mä auerdraanj wurd skal.
+A nawigatjuun-links saat ales weder turag üüb di ual stant.',
'mergehistory-go' => 'Wise werjuunen, diar tuupfeerd wurd kön.',
'mergehistory-submit' => 'Werjuunen tuupfeer',
'mergehistory-empty' => 'Nian werjuunen kön tuupfeerd wurd.',
'preferences' => 'Iinstelangen',
'mypreferences' => 'Iinstelangen',
'prefs-edits' => 'Taal faan feranrangen:',
-'prefsnologin' => 'Ei uunmeldet',
-'prefsnologintext' => 'Dü skel <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} uunmeldet]</span> wees, am din iinstelangen tu feranrin.',
+'prefsnologintext2' => 'Wees so gud an $1 , am din brüker-iinstelangen fäästtuleien.',
'changepassword' => 'Paaswurd feranre',
'prefs-skin' => 'Skak',
'skin-preview' => 'Föörskau',
# Upload
'upload' => 'Datei huuchschüür',
-'uploadbtn' => 'Datei huuchsjüür',
+'uploadbtn' => 'Datei huuchschüür',
'reuploaddesc' => "Ufbreeg an turag tu't sidj för't huuchschüüren",
'upload-tryagain' => 'Feranert dateibeskriiwang ufsjüür',
'uploadnologin' => 'Ei uunmeldet',
'filetype-unwanted-type' => "'''„.$1“''' as üs dateiformaat ei tuläät. Tuläät {{PLURAL:$3|as detdiar formaat|san jodiar formaaten}}: $2.",
'filetype-banned-type' => "'''„.$1“''' {{PLURAL:$4|as nään tuläät slach faan datein|san nian tuläät slacher faan datein}}.
{{PLURAL:$3|En tuläät slach as|Tuläät slacher san}} $2.",
-'filetype-missing' => 'Det datei, wat dü huuchsjüür wel, hää nian aanj (t.b. „.jpg“).',
+'filetype-missing' => 'Det datei, wat dü huuchschüür wel, hää nian aanj (t.b. „.jpg“).',
'empty-file' => 'Det datei, wat dü huuchschüürd heest, as leesag.',
'file-too-large' => 'Det datei, wat dü huuchschüürd heest, as tu grat.',
'filename-tooshort' => 'Di dateinööm as tu kurt.',
'large-file' => 'Datein skul ei grater wees üs $1, wan mögelk. Detdiar datei as $2 grat.',
'largefileserver' => 'Detdiar datei as grater, üs di server üüb iinsteld as.',
'emptyfile' => 'Det datei, wat dü huuchschüürd heest, as leesag. Ferlicht heest dü di ferskrewen. Luke noch ans, of dü würelk detdiar datei huuchschüür wel.',
-'windows-nonascii-filename' => 'Detheer Wiki läät nian dateinöömer mä sondertiaken tu.',
+'windows-nonascii-filename' => 'Detheer wiki läät nian dateinöömer mä aparte tiakens tu.',
'fileexists' => 'En datei mä didiar nööm jaft at al. Luke noch ans efter <strong>[[:$1]]</strong>, wan dü ei gans seeker beest, of dü det anre wel.
[[$1|thumb]]',
'filepageexists' => "En beskriiwangssidj för <strong>[[:$1]]</strong> as al diar, oober nian datei. Din beskriiwang woort ei apnimen. Det beskriiwangssidj mut do man efter't huuchschüüren noch ans efterluket wurd.
* Nööm faan det nei datei: <strong>[[:$1]]</strong>
* Nööm faan det ual datei: <strong>[[:$2]]</strong>
Wees so gud an nem en öödern nööm.',
-'fileexists-thumbnail-yes' => "Detdiar datei as was en letjer maaget bil ''(thumbnail)''. [[$1|thumb]]
+'fileexists-thumbnail-yes' => "Detdiar datei as was en sümnaielbil ''(thumbnail)''. [[$1|thumb]]
Luke di det datei <strong>[[:$1]]</strong> noch ans uun.
-Wan det det originaal bil as, säärst dü nään letjer maaget bil huuchsjüür.",
-'file-thumbnail-no' => "Di dateinööm begant mä <strong>$1</strong>. Det as was en letjer maaget bil ''(thumbnail)''.
+Wan det det originaal bil as, säärst dü nian sümnaielbil huuchschüür.",
+'file-thumbnail-no' => "Di dateinööm begant mä <strong>$1</strong>. Det as was en sümnaielbil ''(thumbnail)''.
Luke noch ans efter, of dü det bil uun fol grate diar heest, an do schüür det huuch.",
'fileexists-forbidden' => 'En datei mä didiar nööm jaft at al an koon ei auerskrewen wurd.
Gung noch ans turag an schüür det datei mä en öödern nööm huuch.
[[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => "En datei mä didiar nööm stäänt al uun't gemiansoom archiif. Wan dü det bil likes huuchsjüür wel, gung turag nem en öödern nööm.
+'fileexists-shared-forbidden' => "En datei mä didiar nööm stäänt al uun't gemiansoom archiif. Wan dü det bil likes huuchschüür wel, gung turag an nem en öödern nööm.
[[File:$1|thumb|center|$1]]",
'file-exists-duplicate' => 'Detdiar datei as en duplikaat faan {{PLURAL:$1|detdiar datei|$1 datein}}:',
'file-deleted-duplicate' => "En duplikaat faan detdiar datei ([[:$1]]) as al ans stregen wurden. Luke iin uun logbuk för't striken, iar dü det noch ans huuchsjüürst.",
'uploadwarning' => 'Wäärnang',
-'uploadwarning-text' => 'Feranre det datei-beskriiwang an fersjük det noch ans nei.',
+'uploadwarning-text' => 'Feranre det datei-beskriiwang an ferschük det noch ans nei.',
'savefile' => 'Datei seekre',
'uploadedimage' => 'hää "[[$1]]" huuchschüürd',
'overwroteimage' => 'hää en nei werjuun faan „[[$1]]“ huuchschüürd',
'upload-curl-error6' => 'URL küd ei fünjen wurd',
'upload-curl-error6-text' => 'Det URL küd ei fünjen wurd. Luke di det URL noch ans uun, an of det sidj uk würelk diar as.',
'upload-curl-error28' => 'Det huuchschüüren hää tu loong düüret (time-out).',
-'upload-curl-error28-text' => 'Det sidj hää tu loong ei swaaret (time-out). Luke noch ans efter, of det sidj uk würelk diar as. Fersjük det beeder leeder noch ans weder.',
+'upload-curl-error28-text' => 'Det sidj hää tu loong ei swaaret (time-out). Luke noch ans efter, of det sidj uk würelk diar as. Ferschük det beeder leeder noch ans weder.',
'license' => 'Lisens:',
'license-header' => 'Lisens',
'sharedupload-desc-create' => 'Detdiar datei as faan $1 an koon faan ööder projekten brükt wurd.
Ferlicht wel dü det [$2 beskriiwangssidj] feranre.',
'filepage-nofile' => 'En datei mä didiar nööm jaft at ei.',
-'filepage-nofile-link' => 'En datei mä didiar nööm jaft at ei, man dü könst det [$1 huuchsjüür].',
+'filepage-nofile-link' => 'En datei mä didiar nööm jaft at ei, man dü könst det [$1 huuchschüür].',
'uploadnewversion-linktext' => 'En nei werjuun faan detdiar datei huuchschüür',
'shared-repo-from' => 'foon $1',
'shared-repo' => 'en gemiansoom archiif',
'usereditcount' => '{{PLURAL:$1|feranrang|$1 feranrangen}}',
'usercreated' => '{{GENDER:$3|Maaget}} di $1 am a klook $2',
'newpages' => 'Nei sidjen',
-'newpages-username' => 'Brükernoome:',
+'newpages-username' => 'Brükernööm:',
'ancientpages' => 'Al loong ei muar bewerket sidjen',
'move' => 'Fersküüw',
'movethispage' => 'Detdiar sidj fersküüw',
'usermaildisabledtext' => 'Dü könst nian e-mail tu ööder brükern schüür.',
'noemailtitle' => 'Nian e-mail adres',
'noemailtext' => 'Didiar brüker hää nian gudkäänd e-mail adres uunden.',
-'nowikiemailtitle' => 'E-mail koon ei sjüürd wurd',
+'nowikiemailtitle' => 'E-mail koon ei wechschüürd wurd',
'nowikiemailtext' => 'Didiar brüker maad nian e-mails faan ööder brükern fu.',
'emailnotarget' => 'Didiar brükernööm as ei bekäänd of ei gudkäänd, am ham en e-mail tu schüüren',
'emailtarget' => 'Brükernööm faan di ööder brüker iindu',
E-mail: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
-Di wurd iarst ans nian e-mails muar tu detdiar sidj schüürd, bit dü det sidj weder beschükst. Üüb din list faan sidjen, diar dü uun\'t uug behual wel, könst dü a noorachtenkääntiaken weder turagsaat.
+Di wurd iarst ans nian e-mails muar tu detdiar sidj schüürd, bit dü det sidj weder uunmeldet beschükst. Üüb din list faan sidjen, diar dü uun\'t uug behual wel, könst dü a noorachtenkääntiaken weder turagsaat.
Dan frinjelk {{SITENAME}}-noorachten siinst
'restriction-edit' => 'Bewerke',
'restriction-move' => 'Fersküüw',
'restriction-create' => 'Maage',
-'restriction-upload' => 'Huuchsjüür',
+'restriction-upload' => 'Huuchschüür',
# Restriction levels
'restriction-level-sysop' => 'seekert (bluas för administratooren)',
'allmessagesdefault' => 'Standard tekst',
'allmessagescurrent' => 'Aktuel tekst',
'allmessagestext' => "Det as en list mä MediaWiki-süsteemteksten.
-Wees so gud an beschük a sidjen [//www.mediawiki.org/wiki/Localisation MediaWiki-auersaatang] an [//translatewiki.net translatewiki.net], wan dü bi't auersaaten mähalep meest.",
+Wees so gud an beschük a sidjen [https://www.mediawiki.org/wiki/Localisation MediaWiki-auersaatang] an [//translatewiki.net translatewiki.net], wan dü bi't auersaaten mähalep meest.",
'allmessagesnotsupportedDB' => 'Detdiar spezial-sidj koon ei brükt wurd, auer <tt>$wgUseDatabaseMessages</tt> ei aktiif as.',
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter för di uunpaaset stant:',
'tooltip-undo' => 'Saat bluas det leetst feranrang turag an wiset det resultoot uun en föörskau uun. Uun det tuupfaadet beskriiwang skul en grünj för det turagsaaten uunden wurd.',
'tooltip-preferences-save' => 'Iinstelangen seekre',
'tooltip-summary' => 'Faade det kurt tuup',
+'interlanguage-link-title' => '$1 - $2',
# Metadata
'notacceptable' => 'Di Wiki-server koon a dooten ei för dan aperoot apwerke.',
'svg-long-desc' => 'SVG-datei, grate: $1 × $2 pixel, dateigrate: $3',
'svg-long-desc-animated' => 'Animiaret SVG-datei, grate $1 × $2 pixel, dateigrate: $3',
'svg-long-error' => 'Ferkiard SVG-datei: $1',
-'show-big-image' => 'Huuger apliasang',
+'show-big-image' => 'Originaal datei',
'show-big-image-preview' => 'Grate faan detdiar föörskaubil: $1.',
'show-big-image-other' => 'Ööder {{PLURAL:$2|apliasang|apliasangen}}: $1.',
'show-big-image-size' => '$1 × $2 pixel',
# External editor support
'edit-externally' => 'Detdiar datei mä en ekstern program bewerke',
-'edit-externally-help' => "(Luk efter uun't [//www.mediawiki.org/wiki/Manual:External_editors hoonbuk] am muar diartu)",
+'edit-externally-help' => "(Luk efter uun't [https://www.mediawiki.org/wiki/Manual:External_editors hoonbuk] am muar diartu)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'aaltumaal',
'confirm-unwatch-button' => 'OK',
'confirm-unwatch-top' => "Wel dü detdiar sidj ei muar uun't uug behual?",
+# Separators for various lists, etc.
+'quotation-marks' => '„$1“',
+
# Multipage image navigation
'imgmultipageprev' => '← leetst sidj (turag)',
'imgmultipagenext' => 'naist sidj →',
'version-hook-subscribedby' => 'Aprepen faan',
'version-version' => '(Werjuun $1)',
'version-license' => 'Lisens',
-'version-poweredby-credits' => "Detheer wääbsteed werket mä '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Detheer wääbsteed werket mä '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'öödern',
'version-poweredby-translators' => 'Auersaatern faan translatewiki.net',
'version-credits-summary' => 'Wi besoonke üs bi jodiar persuunen för hör bidracher tu [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Spezial-sidjen',
-'specialpages-note' => '----
-* Normool spezial-sidjen
-* <span class="mw-specialpagerestricted">Spezial-sidjen mä tugripsrochten</span>
-* <span class="mw-specialpagecached">Spezial-sidjen uun a cache (As ferlicht ei muar aktuel.)</span>',
+'specialpages-note-top' => 'Legend',
+'specialpages-note' => '* Normool spezial-sidjen
+* <span class="mw-specialpagerestricted">Spezial-sidjen mä tugripsrochten</span>',
'specialpages-group-maintenance' => 'Werksteedsidjen',
'specialpages-group-other' => 'Ööder spezial-sidjen',
'specialpages-group-login' => 'Melde di uun of skriiw di iin',
'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2}} hää stalswigin det uunlukin feranert faan werjuunen faan det sidj $3',
'revdelete-content-hid' => 'Ferbürgen',
'revdelete-summary-hid' => 'Ferbürgen tuupfaadang',
-'revdelete-uname-hid' => 'brükernoome ferstäägen',
+'revdelete-uname-hid' => 'brükernööm ferbürgen',
'revdelete-content-unhid' => 'Ei muar ferberag',
'revdelete-summary-unhid' => 'Tuupfaadang ei muar ferberag',
-'revdelete-uname-unhid' => 'brükernoome frijääwen',
+'revdelete-uname-unhid' => 'brükernööm weder tu sen',
'revdelete-restricted' => 'mögelkhaiden för administratooren wechnimen',
'revdelete-unrestricted' => 'mögelkhaiden för administratooren ütjwidjet',
'logentry-move-move' => '$1 {{GENDER:$2}} hää det sidj $3 efter $4 fersköwen.',
'limitreport-expansiondepth' => 'Maksimaal ütjwidjangsjipde',
'limitreport-expensivefunctioncount' => 'Taal faan apwendag parser-funktjuunen',
+# Special:ExpandTemplates
+'expandtemplates' => 'Föörlaagen ütjwidje',
+
);
'ok' => 'Va ben',
'retrievedfrom' => 'Cjapât fûr di $1',
'youhavenewmessages' => 'Tu âs $1 ($2).',
-'newmessageslink' => 'gnûfs messaçs',
-'newmessagesdifflink' => 'difarencis cu la penultime revision',
'youhavenewmessagesmulti' => 'Tu âs gnûfs messaçs su $1',
'editsection' => 'cambie',
'editold' => 'cambie',
'preferences' => 'Preferencis',
'mypreferences' => 'Preferencis',
'prefs-edits' => 'Numar di cambiaments fats:',
-'prefsnologin' => 'No tu sês jentrât',
'changepassword' => 'Gambie peraule clâf',
'prefs-skin' => 'Mascare',
'skin-preview' => 'Anteprime',
'allmessagesdefault' => 'Test predeterminât',
'allmessagescurrent' => 'Test curint',
'allmessagestext' => 'Cheste e je une liste dai messaçs di sisteme disponibii tal non dal spazi MediaWiki.
-Par plasê va su [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se tu vuelis contribuî ae traduzion gjeneriche di MediaWiki.',
+Par plasê va su [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se tu vuelis contribuî ae traduzion gjeneriche di MediaWiki.',
'allmessages-filter-all' => 'Ducj',
'allmessages-language' => 'Lenghe:',
'allmessages-filter-submit' => 'Va',
# External editor support
'edit-externally' => 'Modifiche chest file cuntune aplicazion esterne',
-'edit-externally-help' => '(Cjale lis [//www.mediawiki.org/wiki/Manual:External_editors istruzions] par vê altris informazions)',
+'edit-externally-help' => '(Cjale lis [https://www.mediawiki.org/wiki/Manual:External_editors istruzions] par vê altris informazions)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'dutis',
# Special:SpecialPages
'specialpages' => 'Pagjinis speciâls',
-'specialpages-note' => '----
-* Pagjinis speciâls no riservadis.
+'specialpages-note' => '* Pagjinis speciâls no riservadis.
* <strong class="mw-specialpagerestricted">Pagjinis speciâls a ciertis categoriis di utents.</strong>',
'specialpages-group-maintenance' => 'Rapuarts di manutenzion',
'specialpages-group-other' => 'Altris pagjinis speciâls',
# API errors
'api-error-unclassified' => 'Al è capitât un erôr no cognossût',
+# Special:ExpandTemplates
+'expandtemplates' => 'Espant i modei',
+'expand_templates_output' => 'Risultât',
+'expand_templates_ok' => 'Va ben',
+'expand_templates_remove_comments' => 'Gjave i coments',
+'expand_templates_preview' => 'Anteprime',
+
);
* @author Purodha
* @author Pyt
* @author SK-luuut
+ * @author Shirayuki
* @author Snakesteuben
* @author Urhixidur
* @author לערי ריינהארט
'ok' => 'Goed',
'retrievedfrom' => 'Untfongen fan "$1"',
'youhavenewmessages' => 'Jo hawwe $1 ($2).',
-'newmessageslink' => 'nije berjochten',
-'newmessagesdifflink' => 'ferskil mei foarlêste ferzje',
'youhavenewmessagesmulti' => 'Jo hawwe nije berjochten op $1',
'editsection' => 'bewurkje',
'editold' => 'bewurkje',
'preferences' => 'Ynstellings',
'mypreferences' => 'Myn foarkarynstellings',
'prefs-edits' => 'Tal bewurkings:',
-'prefsnologin' => 'Net oanmeld',
-'prefsnologintext' => 'Jo moatte <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} oanmeld]</span> wêze om jo foarkar-ynstellings te feroarje te kinnen.',
'changepassword' => 'Wachtwurd feroarje',
'prefs-skin' => 'Side-oansjen',
'skin-preview' => 'Proefbyld',
'recentchanges-label-minor' => 'Dit is in tekstwiziging',
'recentchanges-label-bot' => 'Dizze wiziging is troch in robot makke',
'recentchanges-label-unpatrolled' => 'Dizze wiziging is noch net neisjûn',
+'recentchanges-legend-newpage' => '$1 - nije side',
'rcnote' => "Dit {{PLURAL:$1|is de lêste feroaring|binne de lêste '''$1''' feroarings}} yn de lêste {{PLURAL:$2|dei|'''$2''' dagen}}, fan $4 $5.",
'rcnotefrom' => 'Dit binne de feroarings sûnt <b>$2</b> (maksimaal <b>$1</b>).',
'rclistfrom' => 'Jou nije feroarings, begjinnende mei $1',
'allmessagesdefault' => 'Standerttekst',
'allmessagescurrent' => 'Tekst yn de nijste ferzje',
'allmessagestext' => 'Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.
-Sjoch: [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].',
+Sjoch: [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].',
# Thumbnails
'thumbnail-more' => 'Fergrutsje',
# External editor support
'edit-externally' => 'Wizigje dizze triem mei in ekstern programma',
-'edit-externally-help' => 'Sjoch de [//www.mediawiki.org/wiki/Manual:External_editors ynstel-hantlieding] foar mear ynformaasje.',
+'edit-externally-help' => 'Sjoch de [https://www.mediawiki.org/wiki/Manual:External_editors ynstel-hantlieding] foar mear ynformaasje.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alles',
# Special:SpecialPages
'specialpages' => 'Bysûndere siden',
-'specialpages-note' => '----
-* Normale bysûndere siden.
+'specialpages-note' => '* Normale bysûndere siden.
* <strong class="mw-specialpagerestricted">Beheinde bysûndere siden.</strong>',
'specialpages-group-maintenance' => 'Underhâld siden',
'specialpages-group-other' => 'Oare bysûndere siden',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Aisghabháil ó "$1"',
'youhavenewmessages' => 'Tá $1 agat ($2).',
-'newmessageslink' => 'teachtaireachtaí nua',
-'newmessagesdifflink' => 'difear ón leasú leathdhéanach',
'youhavenewmessagesmulti' => 'Tá teachtaireachtaí nua agat ar $1',
'editsection' => 'athraigh',
'editold' => 'athraigh',
# Preferences page
'preferences' => 'Sainroghanna',
'mypreferences' => 'Sainroghanna',
-'prefsnologin' => 'Níl tú logáilte isteach',
-'prefsnologintext' => 'Ní mór duit <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logáil isteach]</span> chun do chuid sainroghanna phearsanta a shocrú.',
'changepassword' => "Athraigh d'fhocal faire",
'prefs-skin' => 'Craiceann',
'skin-preview' => 'Réamhamharc',
'recentchanges-feed-description' => 'Rianaigh na n-athruite vicí is déanaí sa fotha seo.',
'recentchanges-label-minor' => 'Mionathrú é seo',
'recentchanges-label-bot' => 'Chomhlíon róbó an t-athrú seo',
+'recentchanges-legend-newpage' => '$1 - leathanach nua',
'rcnote' => "Is {{PLURAL:$1|é seo a leanas <strong>an t-athrú amháin</strong>|iad seo a leanas na <strong>$1</strong> athruithe is déanaí}} {{PLURAL:$2|ar feadh an lae dheireanaigh|ar feadh na '''$2''' lá deireanacha}}, as $5, $4.",
'rcnotefrom' => 'Is iad seo a leanas na hathruithe ó <b>$2</b> (go dti <b>$1</b> taispeánaithe).',
'rclistfrom' => 'Taispeáin athruithe nua ó $1 anuas.',
'sp-contributions-submit' => 'Cuardaigh',
# What links here
-'whatlinkshere' => 'Naisc go dtí an lch seo',
-'whatlinkshere-title' => 'Naisc chuig $1',
+'whatlinkshere' => 'Naisc leis an lch seo',
+'whatlinkshere-title' => 'Naisc le $1',
'whatlinkshere-page' => 'Leathanach:',
'linkshere' => "Tá nasc chuig '''[[:$1]]''' ar na leathanaigh seo a leanas:",
'nolinkshere' => "Níl leathanach ar bith ann a bhfuil nasc chuig '''[[:$1]]''' air.",
'allmessagesdefault' => 'Téacs réamhshocraithe',
'allmessagescurrent' => 'Téacs reatha',
'allmessagestext' => 'Is liosta é seo de theachtaireachtaí córais atá le fáil san ainmspás MediaWiki.
-Tabhair cuairt ar [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] agus [//translatewiki.net translatewiki.net] le do thoil más mian leat cur leis an logánú ginearálta MediaWiki.',
+Tabhair cuairt ar [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] agus [//translatewiki.net translatewiki.net] le do thoil más mian leat cur leis an logánú ginearálta MediaWiki.',
'allmessagesnotsupportedDB' => "Ní féidir an leathanach seo a úsáid dá bharr gur díchumasaíodh '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-all' => 'Uile',
'allmessages-language' => 'Teanga:',
'spamprotectionmatch' => 'Truicear ár scagaire dramhála ag an téacs seo a leanas: $1',
'spambot_username' => 'MediaWiki turscar glanadh',
+# Info page
+'pageinfo-toolboxlink' => 'Faoin leathanach seo',
+
# Skin names
'skinname-cologneblue' => 'Gorm Köln',
'skinname-monobook' => 'MonoBook',
# External editor support
'edit-externally' => 'Athraigh an comhad seo le feidhmchlár seachtrach',
-'edit-externally-help' => '(Féach ar na [//www.mediawiki.org/wiki/Manual:External_editors treoracha cumraíochta] as Béarla le tuilleadh eolais)',
+'edit-externally-help' => '(Féach ar na [https://www.mediawiki.org/wiki/Manual:External_editors treoracha cumraíochta] as Béarla le tuilleadh eolais)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'an t-iomlán',
# Search suggestions
'searchsuggest-search' => 'Cuardaigh',
+# Special:ExpandTemplates
+'expand_templates_remove_comments' => 'Scrios nótaí tráchta',
+'expand_templates_preview' => 'Réamhamharc',
+
);
'ok' => 'TAMAN',
'retrievedfrom' => 'Alındı "$1"dän',
'youhavenewmessages' => 'Var eni $1 ($2).',
-'newmessageslink' => 'eni mesajlar',
-'newmessagesdifflink' => 'Bitki diişmäk',
'youhavenewmessagesmulti' => "$1'de eni mesajınız var.",
'editsection' => 'diiştir',
'editold' => 'diiştir',
# External editor support
'edit-externally' => 'Kompyuterinizdäki uygulamaklarlan faylı düz',
-'edit-externally-help' => 'Taa çok bilgi için var nicä bakmaa metadaki [//www.mediawiki.org/wiki/Manual:External_editors dış uygulama instrumentläri] (angliyça) sayfasına.',
+'edit-externally-help' => 'Taa çok bilgi için var nicä bakmaa metadaki [https://www.mediawiki.org/wiki/Manual:External_editors dış uygulama instrumentläri] (angliyça) sayfasına.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Hepsini göster',
'ok' => '做得',
'retrievedfrom' => '版本页 "$1"',
'youhavenewmessages' => '倷有 $1 ($2).',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '最晏𠮶改动',
'youhavenewmessagesmulti' => '$1 上有倷𠮶新消息',
'editsection' => '编写',
'editold' => '编写',
'preferences' => '参数设置',
'mypreferences' => '偶𠮶参数设置',
'prefs-edits' => '编辑数:',
-'prefsnologin' => '哈冇登入',
-'prefsnologintext' => '汝要<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>后才设得正个人参数。',
'changepassword' => '改过密码',
'prefs-skin' => '皮',
'skin-preview' => '(预览)',
'allmessagesdefault' => '默认文字',
'allmessagescurrent' => '眼前𠮶文字',
'allmessagestext' => '个首列到全部制定得正𠮶系统界面。
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:系统界面功能'''关卟嘞('''\$wgUseDatabaseMessages''')。",
# Thumbnails
# External editor support
'edit-externally' => '用外部程式来编辑个只档案',
-'edit-externally-help' => '请参看[//www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解别𠮶内容。',
+'edit-externally-help' => '请参看[https://www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解别𠮶内容。',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全部',
'version-hook-subscribedby' => '订阅人',
'version-version' => '(版本 $1)',
'version-license' => '许可证',
-'version-poweredby-credits' => "个只 Wiki 由 '''[//www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "个只 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
'version-software' => '装正𠮶软件',
'version-software-version' => '版本',
'ok' => '做得',
'retrievedfrom' => '版本頁「$1」',
'youhavenewmessages' => '汝有 $1 ($2).',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '頂晏嗰改動',
'youhavenewmessagesmulti' => '$1 上有倷嗰新消息',
'editsection' => '編寫',
'editold' => '編寫',
'preferences' => '參數設置',
'mypreferences' => '我嗰參數設置',
'prefs-edits' => '編輯數:',
-'prefsnologin' => '哈冇登入',
-'prefsnologintext' => '汝要<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>後才設得正個人參數。',
'changepassword' => '改過密碼',
'prefs-skin' => '皮',
'skin-preview' => '(預覽)',
'allmessagesdefault' => '默認文字',
'allmessagescurrent' => '眼前嗰文字',
'allmessagestext' => '箇首列到全部制定得正嗰系統界面。
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:系統界面功能'''關卟嘞('''\$wgUseDatabaseMessages''')。",
# Thumbnails
# External editor support
'edit-externally' => '用外部程式來編輯箇隻檔案',
-'edit-externally-help' => '請參看[//www.mediawiki.org/wiki/Manual:External_editors 設置步驟]瞭解別嗰內容。',
+'edit-externally-help' => '請參看[https://www.mediawiki.org/wiki/Manual:External_editors 設置步驟]瞭解別嗰內容。',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全部',
'version-hook-subscribedby' => '訂閱人',
'version-version' => '(版本 $1)',
'version-license' => '許可證',
-'version-poweredby-credits' => "箇隻 Wiki 由 '''[//www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "箇隻 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
'version-software' => '裝正嗰軟件',
'version-software-version' => '版本',
'ok' => 'Ceart ma-thà',
'retrievedfrom' => 'Air a tharraing à "$1"',
'youhavenewmessages' => 'Tha $1 ($2) agad.',
-'newmessageslink' => 'teachdaireachdan ùra',
-'newmessagesdifflink' => 'mùthadh mu dheireadh',
'youhavenewmessagesfromusers' => 'Tha $1 o {{PLURAL:$3|aon chleachdaiche|$3 chleachdaiche|$3 cleachdaichean|$3 cleachdaiche}} agad ($2).',
'youhavenewmessagesmanyusers' => 'Tha $1 agad o iomadh cleachdaiche ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|aon teachdaireachd ùr|$1 theachdaireachd ùr|$1 teachdaireachdan ùra|$1 teachdaireachd ùr}}',
'revdelete-no-change' => "'''Rabhadh:''' Bha na roghainnean faicsinneachd a dh'iarr thu aig an nì dhen $2, $1 mu thràth.",
'revdelete-concurrent-change' => "Mearachd ag atharrachadh an nì on $2, $1: Tha coltas gun deach a staid atharrachadh le cuideigin dìreach nuair a dh'fheuch thusa ri atharrachadh.
Thoir sùil air na logaichean.",
+'revdelete-only-restricted' => "Mearachd a' cur an nì on $2, $1 am falach: Chan urrainn dhut nithean le rianairean a mhùchadh gun a bhith a' taghadh aon dhe na roghainnean faicsinneachd eile cuideachd.",
+'revdelete-reason-dropdown' => "*Adhbharan cumanta airson sguabadh às rudan
+** Briseadh còrach-lethbhreac
+** Beachd no fiosrachadh pearsanta mì-iomchaidh
+** Ainm-cleachdaiche mì-iomchaidh
+** Fiosrachadh a dh'fhaodadh a bhith dìteachail",
'revdelete-otherreason' => 'Adhbhar eile/a bharrachd:',
'revdelete-reasonotherlist' => 'Adhbhar eile',
'revdelete-edit-reasonlist' => 'Deasaich adhbharan an sguabaidh às',
'revdelete-offender' => "Ùghdar a' mhùthaidh:",
+# Suppression log
+'suppressionlog' => 'Loga nam mùchaidhean',
+'suppressionlogtext' => "Chì thu liosta nan rudan a chaidh a sguabadh às agus a bhacadh gu h-ìosal, a' gabhail a-steach stuth a chaidh fhalach o rianairean. Faic [[Special:BlockList|liosta nam bacaidhean]] airson liosta nan toirmeasgan is bacaidhean beò.",
+
# History merging
+'mergehistory' => 'Co-aonaich eachdraidhean na duilleige',
+'mergehistory-header' => 'Leigidh an duilleag seo leat na lèirmheasan aig aon duilleag a cho-aonadh le duilleag nas ùire.
+Dèan cinnteach gun glèidh an t-atharrachadh seo leantainneachd eachdraidh na duilleige.',
+'mergehistory-box' => 'Co-aonaich na lèirmheasan aig dà dhuilleag:',
'mergehistory-from' => 'An duilleag thùsail:',
+'mergehistory-into' => 'An duilleag targaide:',
+'mergehistory-list' => 'Eachdraidh nan deasachaidhean a ghabhas a cho-aonadh',
+'mergehistory-merge' => 'Gabhaidh na lèirmheasan a leanas aig [[:$1]] a cho-aonadh le [[:$2]].
+Cleachd colbh nam putanan-rèidio gus dìreach na lèirmheasan a cho-aonadh a chaidh a chruthachadh aig an àm a chaidh a shònrachadh no roimhe sin.
+Thoir an aire gun dèid an colbh seo ath-shuidheachadh ma chleachdas tu ceanglaichean na seòladaireachd.',
+'mergehistory-go' => 'Seall na deasachaidhean a ghabhas a cho-aonadh',
+'mergehistory-submit' => 'Co-aonaich na lèirmheasan',
+'mergehistory-empty' => 'Chan eil lèirmheas sam bith ann a ghabhas a cho-aonadh.',
+'mergehistory-success' => 'Chaidh $3 {{PLURAL:$3|lèirmheas|lèirmheas|lèirmheasan|lèirmheas}} de [[:$1]] a cho-aonadh dha [[:$2]].',
+'mergehistory-fail' => "Cha ghabh an eachdraidh a cho-aonadh, thoir sùil air paramadairean na duilleige 's an ama.",
+'mergehistory-no-source' => 'Chan eil an tùs-duilleag $1 ann.',
+'mergehistory-no-destination' => 'Chan eil an an duilleag targaide $1 ann.',
+'mergehistory-invalid-source' => "Feumaidh an tùs-duilleag a bhith 'na thiotal dligheach.",
+'mergehistory-invalid-destination' => "Feumaidh an duilleag targaide a bhith 'na thiotal dligheach.",
'mergehistory-autocomment' => 'Chaidh [[:$1]] a cho-aonadh dha [[:$2]]',
'mergehistory-comment' => 'Chaidh [[:$1]] a cho-aonadh dha [[:$2]]: $3',
+'mergehistory-same-destination' => 'Chan fhaod an tùs-duilleag is an duilleag targaide a bhith co-ionnann',
'mergehistory-reason' => 'Adhbhar:',
# Merge log
'mergelog' => "Loga a' cho-aonaidh",
+'pagemerge-logentry' => 'chaidh [[$1]] a cho-aonadh dha [[$2]] (lèirmheasan suas ri $3)',
'revertmerge' => 'Dì-aontaich',
# Diffs
'preferences' => 'Roghainnean',
'mypreferences' => 'Na roghainnean agam',
'prefs-edits' => 'Co mheud deasachadh:',
-'prefsnologin' => 'Chan eil thu air clàradh a-steach',
-'prefsnologintext' => 'Feumaidh tu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} clàradh a-steach]</span> mus urrainn dhut roghainnean cleachdaiche a chur air gleus.',
'changepassword' => 'Atharraich facal-faire',
'prefs-skin' => 'Bian',
'skin-preview' => 'Ro-shealladh',
'allmessagesname' => 'Ainm',
'allmessagesdefault' => 'Teacsa bunaiteach na teachdaireachd',
'allmessagestext' => 'Seo liosta de theachdaireachdan an t-siostaim a tha ri làimh ann an namespace MediaWiki.
-Tadhail air [//www.mediawiki.org/wiki/Localisation Ionadaileadh MediaWiki] is [//translatewiki.net translatewiki.net] ma tha thu airson pàirt a ghabhail ann an ionadaileadh MediaWiki.',
+Tadhail air [https://www.mediawiki.org/wiki/Localisation Ionadaileadh MediaWiki] is [//translatewiki.net translatewiki.net] ma tha thu airson pàirt a ghabhail ann an ionadaileadh MediaWiki.',
# Thumbnails
'thumbnail-more' => 'Meudaich',
# External editor support
'edit-externally' => 'Deasaich am faidhle le prògram on taobh a-muigh',
-'edit-externally-help' => '(Seall air [//www.mediawiki.org/wiki/Manual:External_editors mìneachadh an t-suidheachaidh] airson barrachd fiosrachaidh)',
+'edit-externally-help' => '(Seall air [https://www.mediawiki.org/wiki/Manual:External_editors mìneachadh an t-suidheachaidh] airson barrachd fiosrachaidh)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'a h-uile',
'ok' => 'Aceptar',
'retrievedfrom' => 'Traído desde "$1"',
'youhavenewmessages' => 'Ten $1 ($2).',
-'newmessageslink' => 'mensaxes novas',
-'newmessagesdifflink' => 'diferenzas coa revisión anterior',
'youhavenewmessagesfromusers' => 'Ten $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).',
'youhavenewmessagesmanyusers' => 'Ten $1 de moitos usuarios ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|unha mensaxe nova|mensaxes novas}}',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Páxina',
-'nstab-user' => 'Páxina de {{GENDER:{{#titleparts:{{BASEPAGENAME}}|1}}|usuario|usuaria}}',
+'nstab-user' => 'Páxina de {{GENDER:{{ROOTPAGENAME}}|usuario|usuaria}}',
'nstab-media' => 'Páxina multimedia',
'nstab-special' => 'Páxina especial',
'nstab-project' => 'Páxina do proxecto',
'gotaccount' => 'Xa ten unha conta? $1.',
'gotaccountlink' => 'Acceda ao sistema',
'userlogin-resetlink' => 'Esqueceu os seus datos de rexistro?',
-'userlogin-resetpassword-link' => 'Restablecer o seu contrasinal',
+'userlogin-resetpassword-link' => 'Esqueceu o contrasinal?',
'helplogin-url' => 'Help:Rexistro',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Axuda co rexistro]]',
'userlogin-loggedin' => 'Xa accedeu ao sistema como {{GENDER:$1|$1}}.
'mailerror' => 'Produciuse un erro ao enviar o correo electrónico: $1',
'acct_creation_throttle_hit' => 'Alguén que visitou este wiki co seu enderezo IP creou, no último día, {{PLURAL:$1|unha conta|$1 contas}}, que é o máximo permitido neste período de tempo.
Como resultado, os visitantes que usen este enderezo IP non poden crear máis contas nestes intres.',
-'emailauthenticated' => 'O seu enderezo de correo electrónico foi autenticado o $2 ás $3.',
-'emailnotauthenticated' => 'O seu enderezo de correo electrónico aínda <strong>non foi autenticado</strong>. Non se enviou ningunha mensaxe por algunha das seguintes razóns.',
+'emailauthenticated' => 'O seu enderezo de correo electrónico foi confirmado o $2 ás $3.',
+'emailnotauthenticated' => 'O seu enderezo de correo electrónico aínda non foi confirmado.
+Non se enviará ningunha mensaxe por ningunha das seguintes características.',
'noemailprefs' => 'Especifique un enderezo de correo electrónico se quere que funcione esta opción.',
'emailconfirmlink' => 'Confirmar o enderezo de correo electrónico',
'invalidemailaddress' => 'Non se pode aceptar o enderezo de correo electrónico porque semella ter un formato incorrecto.
'revdelete-text' => "'''As revisións borradas seguirán aparecendo no historial da páxina e nos rexistros, pero partes do seu contido serán inaccesibles de cara ao público.'''
Os demais administradores de {{SITENAME}} poderán acceder ao contido agochado e poderán restaurar a páxina de novo a través desta mesma interface, a non ser que se estableza algunha restrición adicional.",
'revdelete-confirm' => 'Por favor, confirme que quere levar a cabo esta acción, que comprende as consecuencias e que o fai de acordo [[{{MediaWiki:Policy-url}}|coas políticas]].',
-'revdelete-suppress-text' => "A eliminación '''só''' debería ser usada nos seguintes casos:
+'revdelete-suppress-text' => "A eliminación '''unicamente''' debería utilizarse nos seguintes casos:
+* Información potencialmente difamatoria
* Información persoal inapropiada
-*: ''domicilios e números de teléfono, números da seguridade social, etc.''",
+*: ''domicilios e números de teléfono, números da seguridade social etc.''",
'revdelete-legend' => 'Aplicar restricións de visibilidade',
-'revdelete-hide-text' => 'Agochar o texto da revisión',
+'revdelete-hide-text' => 'Texto da revisión',
'revdelete-hide-image' => 'Agochar o contido do ficheiro',
'revdelete-hide-name' => 'Agochar a acción e o destino',
-'revdelete-hide-comment' => 'Agochar o resumo de edición',
-'revdelete-hide-user' => 'Agochar o nome de usuario ou o enderezo IP do editor',
+'revdelete-hide-comment' => 'Resumo de edición',
+'revdelete-hide-user' => 'Nome de usuario ou enderezo IP do editor',
'revdelete-hide-restricted' => 'Eliminar os datos da vista dos administradores así coma da doutros',
'revdelete-radio-same' => '(non cambiar)',
-'revdelete-radio-set' => 'Si',
-'revdelete-radio-unset' => 'Non',
+'revdelete-radio-set' => 'Agochado',
+'revdelete-radio-unset' => 'Visible',
'revdelete-suppress' => 'Eliminar os datos da vista dos administradores así coma da doutros',
'revdelete-unsuppress' => 'Retirar as restricións sobre as revisións restauradas',
'revdelete-log' => 'Motivo:',
'preferences' => 'Preferencias',
'mypreferences' => 'Preferencias',
'prefs-edits' => 'Número de edicións:',
-'prefsnologin' => 'Non accedeu ao sistema',
-'prefsnologintext' => 'Debe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} acceder ao sistema]</span> para modificar as preferencias de usuario.',
'changepassword' => 'Cambiar o meu contrasinal',
'prefs-skin' => 'Aparencia',
'skin-preview' => 'Vista previa',
'right-move-rootuserpages' => 'Mover páxinas de usuario raíz',
'right-movefile' => 'Mover ficheiros',
'right-suppressredirect' => 'Non crear unha redirección dende o nome vello ao mover unha páxina',
-'right-upload' => 'Cargar ficheiros',
+'right-upload' => 'Subir ficheiros',
'right-reupload' => 'Sobrescribir ficheiros existentes',
'right-reupload-own' => 'Sobrescribir un ficheiro existente cargado polo mesmo usuario',
'right-reupload-shared' => 'Sobrescribir localmente ficheiros do repositorio multimedia',
'recentchanges-label-minor' => 'Esta é unha edición pequena',
'recentchanges-label-bot' => 'Esta edición foi realizada por un bot',
'recentchanges-label-unpatrolled' => 'Esta edición aínda non foi comprobada',
+'recentchanges-legend-newpage' => '$1 - nova páxina',
'rcnote' => "A continuación {{PLURAL:$1|móstrase '''1''' cambio|móstranse os últimos '''$1''' cambios}} {{PLURAL:$2|no último día|nos últimos '''$2''' días}} ata o $4 ás $5.",
'rcnotefrom' => "A continuación móstranse os cambios feitos desde o '''$3''' ás '''$4''' (móstranse '''$1''' como máximo).",
'rclistfrom' => 'Mostrar os cambios novos desde o $1',
'recentchangeslinked-to' => 'Mostrar os cambios relacionados das páxinas que ligan coa dada',
# Upload
-'upload' => 'Cargar un ficheiro',
-'uploadbtn' => 'Cargar o ficheiro',
+'upload' => 'Subir un ficheiro',
+'uploadbtn' => 'Subir o ficheiro',
'reuploaddesc' => 'Cancelar a carga e volver ao formulario de carga',
'upload-tryagain' => 'Enviar a descrición do ficheiro modificada',
'uploadnologin' => 'Non accedeu ao sistema',
'allmessagesdefault' => 'Texto predeterminado',
'allmessagescurrent' => 'Texto actual',
'allmessagestext' => 'Esta é unha lista de todas as mensaxes dispoñibles no espazo de nomes MediaWiki.
-Por favor, visite a [//www.mediawiki.org/wiki/Localisation localización MediaWiki] e [//translatewiki.net translatewiki.net] se quere contribuír á localización xenérica de MediaWiki.',
+Por favor, visite a páxina de [https://www.mediawiki.org/wiki/Localisation localización de MediaWiki] e [//translatewiki.net translatewiki.net] se quere contribuír á localización xenérica de MediaWiki.',
'allmessagesnotsupportedDB' => "Esta páxina non está dispoñible porque '''\$wgUseDatabaseMessages''' está desactivado.",
'allmessages-filter-legend' => 'Filtrar',
'allmessages-filter' => 'Filtrar por estado de personalización:',
'tooltip-feed-atom' => 'Fonte de novas Atom desta páxina',
'tooltip-t-contributions' => 'Ver a lista de contribucións {{GENDER:{{BASEPAGENAME}}|deste usuario|desta usuaria}}',
'tooltip-t-emailuser' => 'Enviarlle unha mensaxe a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}} por correo electrónico',
-'tooltip-t-upload' => 'Cargar ficheiros',
+'tooltip-t-upload' => 'Subir ficheiros',
'tooltip-t-specialpages' => 'Lista de todas as páxinas especiais',
'tooltip-t-print' => 'Versión para imprimir da páxina',
'tooltip-t-permalink' => 'Ligazón permanente a esta versión da páxina',
'tooltip-undo' => '"Desfacer" reverte esta edición e abre o formulario de edición nun modo previo. Permite engadir un motivo no resumo de edición.',
'tooltip-preferences-save' => 'Gardar as preferencias',
'tooltip-summary' => 'Escriba un breve resumo',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/** O CSS que se coloque aquí será aplicado a todas as aparencias */',
'pageinfo-length' => 'Lonxitude da páxina (en bytes)',
'pageinfo-article-id' => 'ID da páxina',
'pageinfo-language' => 'Lingua do contido da páxina',
+'pageinfo-content-model' => 'Modelo do contido da páxina',
'pageinfo-robot-policy' => 'Indexación por robots',
'pageinfo-robot-index' => 'Permitida',
'pageinfo-robot-noindex' => 'Non permitida',
'svg-long-desc' => 'ficheiro SVG; resolución de $1 × $2 píxeles; tamaño do ficheiro: $3',
'svg-long-desc-animated' => 'ficheiro SVG animado; resolución de $1 × $2 píxeles; tamaño do ficheiro: $3',
'svg-long-error' => 'Ficheiro SVG non válido: $1',
-'show-big-image' => 'Imaxe na máxima resolución',
+'show-big-image' => 'Ficheiro orixinal',
'show-big-image-preview' => 'Tamaño desta vista previa: $1.',
'show-big-image-other' => '{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.',
'show-big-image-size' => '$1 × $2 píxeles',
# External editor support
'edit-externally' => 'Editar este ficheiro cunha aplicación externa',
-'edit-externally-help' => '(Vexa as seguintes [//www.mediawiki.org/wiki/Manual:External_editors instrucións] <small>(en inglés)</small> para obter máis información)',
+'edit-externally-help' => '(Consulte as seguintes [https://www.mediawiki.org/wiki/Manual:External_editors instrucións] para obter máis información)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todo',
'version-hook-subscribedby' => 'Subscrito por',
'version-version' => '(Versión $1)',
'version-license' => 'Licenza',
-'version-poweredby-credits' => "Este wiki está desenvolvido por '''[//www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autor © 2001-$1 $2.",
+'version-poweredby-credits' => "Este wiki está desenvolvido por '''[https://www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autoría © 2001-$1 $2.",
'version-poweredby-others' => 'outros',
'version-poweredby-translators' => 'os tradutores de translatewiki.net',
'version-credits-summary' => 'Queremos recoñecer as seguintes persoas polas súas achegas a [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Páxinas especiais',
-'specialpages-note' => '----
-* Páxinas especiais normais.
+'specialpages-note' => '* Páxinas especiais normais.
* <span class="mw-specialpagerestricted">Páxinas especiais restrinxidas.</span>',
'specialpages-group-maintenance' => 'Informes de mantemento',
'specialpages-group-other' => 'Outras páxinas especiais',
'limitreport-expansiondepth' => 'Máxima profundidade de expansión',
'limitreport-expensivefunctioncount' => 'Número de funcións de análise custosas',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir os modelos',
+'expand_templates_intro' => 'Esta páxina especial toma texto e expande todos os modelos dentro del recursivamente.
+Tamén expande as funcións de análise como
+<code><nowiki>{{</nowiki>#language:…}}</code> e variables como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+De feito, expande case calquera cousa entre dúas chaves.',
+'expand_templates_title' => 'Título do contexto, para {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto de entrada:',
+'expand_templates_output' => 'Resultado',
+'expand_templates_xml_output' => 'Saída XML',
+'expand_templates_ok' => 'Aceptar',
+'expand_templates_remove_comments' => 'Eliminar os comentarios',
+'expand_templates_remove_nowiki' => 'Suprimir as etiquetas <nowiki> no resultado',
+'expand_templates_generate_xml' => 'Mostrar as árbores de análise XML',
+'expand_templates_preview' => 'Vista previa',
+
);
'vector-action-move' => 'Fuddem voch',
'vector-action-protect' => 'Rakh',
'vector-view-create' => 'Roch',
-'vector-view-edit' => 'sudar',
+'vector-view-edit' => 'Sudar',
'vector-view-history' => 'Itihas polloi',
'vector-view-view' => 'Vach',
'vector-view-viewsource' => 'Mull polloi',
'jumptosearch' => 'sod',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => '(Thollachea) babtint',
+'aboutsite' => '{{SITENAME}} babtint',
'aboutpage' => 'Project:Vixoiavixim',
'copyrightpage' => '{{ns:project}}:Prat-hokk',
'currentevents' => 'Chalu ghoddnneo',
'ok' => 'Zait',
'retrievedfrom' => '"$1" savn prapt kelam',
'youhavenewmessages' => 'Tumkam $1 ($2) asat.',
-'newmessageslink' => 'nove sondex',
-'newmessagesdifflink' => 'nimannem bodlop',
'editsection' => 'sudar',
'editold' => 'sudar',
'viewsourceold' => 'mull poloi',
'nstab-category' => 'Vorg',
# General errors
+'error' => 'Chuk',
'missing-article' => 'Totv-kox (Database) hantun mellunk zai aslem tem mozkur "$1" $2 mellunk-nam.
Horxim, oxem ek pornem frk vo eka panachem itihasachem zodd vogllailem, tedna zata.
Oxem nhoi zalear, tuka softwer-an chuk sampodlam zait.
Upkar korun eka [[Special:ListUsers/sysop|karbhari]]chea nodrek hadd, Internet Zago Sodpi (URL) hachi nond gheun.',
'missingarticle-rev' => '(uzollnni#: $1)',
+'missingarticle-diff' => '(Frk: $1, $2)',
'badtitle' => 'Chukichem nanv',
'badtitletext' => 'Tuven maglelem panache nanv chukichem, rintem, vo ek sarkem zodunk-naslelem bhase-modlem vo wiki-modlem nanv.
'welcomeuser' => 'Ievkar, $1!',
'yourname' => 'Vapuddpeachem nanv:',
'yourpassword' => 'Gupitutor:',
+'userlogin-yourpassword' => 'Gupitutor',
'yourpasswordagain' => 'Gupit utor porot boroi:',
'remembermypassword' => 'Hea internet browseran mhojem sotrachem ugdas dovor (chodan chod $1 {{PLURAL:$1|disak|disank}})',
'login' => 'Sotrromb kor',
'newuserlogpage' => 'Vapurpi rochnnechem sotr',
# Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'hem pan bodol',
+'action-edit' => 'hem pan sudar',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|bodlop|bodlopam}}',
'watch' => 'Sadur rav',
'watchthispage' => 'Hea panar dixtt dovor',
'unwatch' => 'Nodor kadd',
-'watchlist-details' => '{{PLURAL:$1|$1 pan tujea sadurvollerint asa|$1 panam tujea sadurvollerint asat}} , ulovpachim panam meznastanam.',
+'watchlist-details' => 'Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam mezonastanam.',
+'wlheader-showupdated' => "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
'wlshowlast' => 'Xevottchim $1 voram $2 dis $3 dakhoi',
'watchlist-options' => 'Sadurvollericheo poryay',
'tooltip-undo' => '"Rodd\' kor" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.',
'tooltip-summary' => 'Mottvo sar ghal',
+# Info page
+'pageinfo-toolboxlink' => 'Panachi mahiti',
+
# Browsing diffs
'previousdiff' => '← Adlo sudar',
'nextdiff' => 'Fuddlem bodlop →',
'file-info-size' => '$1 × $2 pixelam, failicho akar: $3, MIME prokar: $4',
'file-nohires' => 'Odhik bariksai na.',
'svg-long-desc' => 'SVG fail, nanvak $1 × $2 pixeli, failcho akar: $3',
-'show-big-image' => 'Akhi bariksai',
+'show-big-image' => 'Mull fail',
# Bad image list
'bad_image_list' => 'Akar oso asa:
# External editor support
'edit-externally' => 'Hea failik bhaili program uzar korun bodol.',
-'edit-externally-help' => '(Odhik mahite khatir [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] polloi)',
+'edit-externally-help' => '(Odhik mahite khatir [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] polloi)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'soglle',
# Special:Tags
'tag-filter' => '[[Special:Tags|Dospi]] challni:',
+# Search suggestions
+'searchsuggest-search' => 'Sod',
+
);
'ok' => 'εἶεν',
'retrievedfrom' => 'Ἀνακτηθεῖσα ὑπὸ "$1"',
'youhavenewmessages' => 'Ἔχεις $1 ($2).',
-'newmessageslink' => 'νέας ἀγγελίας',
-'newmessagesdifflink' => 'ἐσχάτη μεταβολή',
'youhavenewmessagesmulti' => 'Νέας εἰσί σοι ἀγγελίας ἐν $1',
'editsection' => 'μεταγράφειν',
'editold' => 'μεταγράφειν',
'preferences' => 'Προαιρέσεις',
'mypreferences' => 'Αἱ προαιρέσεις μου',
'prefs-edits' => 'Τοσοῦται αἱ μεταβολαί:',
-'prefsnologin' => 'Μὴ συνδεδεμένος',
-'prefsnologintext' => 'Δεῖ σε <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} συνδεδεμένος εἶναι]</span> πρὸ τοῦ καθορίσειν τὰς ἐσοῦ προαιρέσεις χρωμένου.',
'changepassword' => 'Ἀλλάττειν σύνθημα',
'prefs-skin' => 'Ἐμφάνισις',
'skin-preview' => 'Προεπισκοπεῖν',
'recentchanges-label-minor' => 'Ἥδε μικρὰ μεταγραφή ἐστιν',
'recentchanges-label-bot' => 'Ἥδε ἡ μεταγραφὴ ἐτελέσθη ὑπὸ αὐτομάτου τινός',
'recentchanges-label-unpatrolled' => 'Ἥδε ἡ μεταγραφὴ μὴ ἐλεγμένη ἐστίν',
+'recentchanges-legend-newpage' => '$1 - νέα δέλτος',
'rcnote' => "Κατωτέρω {{PLURAL:$1|ἐστὶ '''1''' ἀλλαγὴ|εἰσὶν αἱ τελευταῖαι '''$1''' ἀλλαγαὶ}} ἐν {{PLURAL:$2|τῇ τελευταίᾳ ἡμέρᾳ|ταῖς τελευταίαις '''$2''' ἡμέραις}}, ἕως καὶ $5, $4.",
'rcnotefrom' => "Ἰδοῦ αἱ ἀλλαγαὶ ἐκ τοῦ '''$2''' (ἕως τὸ '''$1''').",
'rclistfrom' => 'Δεικνύναι νέας ἀλλαγάς. Ἐκκίνησις ἐκ τοῦ $1',
# External editor support
'edit-externally' => 'Μεταγράφειν τόδε τὸ ἀρχεῖον χρώμενος ἐξώτερήν τινα ἐφαρμογήν.',
-'edit-externally-help' => 'Εἰ πλείοντα βούλει μαθεῖν, [//www.mediawiki.org/wiki/Manual:External_editors τὰς περὶ τοῦ σχῆματος διδασκαλίας] ἴδε.',
+'edit-externally-help' => 'Εἰ πλείοντα βούλει μαθεῖν, [https://www.mediawiki.org/wiki/Manual:External_editors τὰς περὶ τοῦ σχῆματος διδασκαλίας] ἴδε.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ἅπασαι',
# Special:SpecialPages
'specialpages' => 'Εἰδικαὶ δέλτοι',
-'specialpages-note' => '----
-* Κανονικαὶ εἰδικαὶ δέλτοι.
+'specialpages-note' => '* Κανονικαὶ εἰδικαὶ δέλτοι.
* <strong class="mw-specialpagerestricted">Περιωρισμέναι εἰδικαὶ δἐλτοι.</strong>
* <span class="mw-specialpagecached">Μόναι δέλτοι ἀποτεταμιευμέναι.</span>',
'specialpages-group-maintenance' => 'Ἀναφοραὶ συντηρήσεως',
'searchsuggest-search' => 'Ζητεῖν',
'searchsuggest-containing' => 'περιέχον...',
+# Special:ExpandTemplates
+'expandtemplates' => 'Ἐπεκτείνειν τὰ πρότυπα',
+'expand_templates_output' => 'Ἀποτέλεσμα',
+'expand_templates_ok' => 'εἶεν',
+'expand_templates_preview' => 'Προθεώρησις',
+
);
'tog-hidepatrolled' => 'Vum Fäldhieter aagluegti Änderige in dr „Letschte Änderige“ usblände',
'tog-newpageshidepatrolled' => 'Aagluegti Syten uf dr Lischt „Neiji Syte“ verstecke',
'tog-extendwatchlist' => 'Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte',
-'tog-usenewrc' => 'Sytebezogeni Gruppierig bi dr «letschte Änderige» un uf dr Beobachtigslischte (brucht JavaScript)',
+'tog-usenewrc' => 'Änderigen uf „Letschte Änderige“ un dr Beobachtigslischt no Syte gruppiere',
'tog-numberheadings' => 'Überschrifte outomatisch numeriere',
-'tog-showtoolbar' => 'Editier-Wärchzüüg aazeige',
-'tog-editondblclick' => 'Syte ändere mit Doppelklick i d Syte (JavaScript)',
+'tog-showtoolbar' => 'Wärchzyyglyscht zum Bearbeite aazeige',
+'tog-editondblclick' => 'Syte ändere mit Doppelklick',
'tog-editsection' => 'Links aazeige für ds Bearbeite vo einzelnen Absätz',
-'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick (Javascript)',
+'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick uf d Iberschrifte',
'tog-showtoc' => 'Inhaltsverzeichnis aazeige bi Artikle mit meh als drei Überschrifte',
'tog-rememberpassword' => 'Mit däm Browser duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
'tog-watchcreations' => 'Sälber gmachti Sytene un uffegladeni Dateie automatisch beobachte',
'tog-shownumberswatching' => 'Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)',
'tog-oldsig' => 'Vorschau vu dr Unterschrift:',
'tog-fancysig' => 'Signatur as Wikitext behandle (ohni automatischi Vergleichig)',
-'tog-uselivepreview' => 'Live-Vorschau bruche (JavaScript) (experimentell)',
+'tog-uselivepreview' => 'Live-Vorschau bruche (experimentell)',
'tog-forceeditsummary' => 'Sag mer s, wänn i s Zämmefassigsfeld läär loss',
'tog-watchlisthideown' => 'Eigeni Änderige uf d Beobachtigslischt usblände',
'tog-watchlisthidebots' => 'Bot-Änderige in d Beobachtigslischt usblende',
'tog-noconvertlink' => 'Konvertierig vum Titel deaktiviere',
'tog-norollbackdiff' => 'Unterschid noch em Zrucksetze unterdrucke',
'tog-useeditwarning' => 'Warn mi, wänn I ne Syte verloss mit Bearbeitige, wu nonig gspycheret sin',
+'tog-prefershttps' => 'Wänn aagmäldet, alliwyl e sicheri Verbindig bruuche',
'underline-always' => 'immer',
'underline-never' => 'nie',
'oct' => 'Okt.',
'nov' => 'Nov.',
'dec' => 'Dez.',
+'january-date' => '$1. Jänner',
+'february-date' => '$1. Februar',
+'march-date' => '$1. Merz',
+'april-date' => '$1. April',
+'may-date' => '$1. Mai',
+'june-date' => '$1. Juni',
+'july-date' => '$1. Juli',
+'august-date' => '$1. Augschte',
+'september-date' => '$1. Septämber',
+'october-date' => '$1. Oktober',
+'november-date' => '$1. Novämber',
+'december-date' => '$1. Dezämber',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Kategori|Kategorie}}',
'newwindow' => '(imene nöie Fänschter)',
'cancel' => 'Abbräche',
'moredotdotdot' => 'Meh …',
+'morenotlisted' => 'Die Lischt isch nit vollständig.',
'mypage' => 'Syte',
'mytalk' => 'Diskussionsyte',
'anontalk' => 'Diskussionssyste vo sellere IP',
'namespaces' => 'Namensryym',
'variants' => 'Variante',
+'navigation-heading' => 'Navigationsmenü',
'errorpagetitle' => 'Fähler',
'returnto' => 'Zruck zur Syte $1.',
'tagline' => 'Us {{SITENAME}}',
'create-this-page' => 'Die Syte afange',
'delete' => 'Lesche',
'deletethispage' => 'Syte lösche',
+'undeletethispage' => 'Die Syte widerhärstelle',
'undelete_short' => '{{PLURAL:$1|1 Version|$1 Versione}} widerherstelle',
'viewdeleted_short' => '{{PLURAL:$1|ei gleschti Änderig|$1 gleschti Ändrige}} aaluege',
'protect' => 'Schütze',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
'aboutsite' => 'Über {{GRAMMAR:akkusativ|{{SITENAME}}}}',
'aboutpage' => 'Project:Über {{UCFIRST:{{GRAMMAR:akkusativ|{{SITENAME}}}}}}',
-'copyright' => 'Der Inhalt vo dere Syte stoht unter der $1.',
+'copyright' => 'Dr Inhalt vu dere Syte stoht unter dr Lizänz $1, wänn s nit andersch aagee isch.',
'copyrightpage' => '{{ns:project}}:Copyright',
'currentevents' => 'Aktuelli Mäldige',
'currentevents-url' => 'Project:Aktuelli Termin',
'ok' => 'OK',
'retrievedfrom' => 'Vun "$1"',
'youhavenewmessages' => 'Du hesch $1 ($2).',
-'newmessageslink' => 'nöji Nachrichte',
-'newmessagesdifflink' => 'Unterschid',
'youhavenewmessagesfromusers' => 'Du hesch $1 vu {{PLURAL:$3|eme andere Benutzer|$3 Benutzer}} ($2).',
'youhavenewmessagesmanyusers' => 'Du hesch $1 vu vil Benutzer ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|e neji Nochricht|neji Nochrichte}}',
# General errors
'error' => 'Fähler',
'databaseerror' => 'Fähler in dr Datebank',
+'databaseerror-text' => 'S het e Datebankabfrogfähler gee.
+Des chennt e Fähler in dr Software aazeige.',
+'databaseerror-textcl' => 'S het e Datebankabfrogfähler gee.',
+'databaseerror-query' => 'Abfrog: $1',
+'databaseerror-function' => 'Funktion: $1',
+'databaseerror-error' => 'Fähler: $1',
'laggedslavemode' => 'Warnig: di letschte Änderige wäre u. U. nonig aazeigt!',
'readonly' => 'Datebank isch gsperrt',
'enterlockreason' => 'Bitte gib e Grund y, worum d Datebank soll gsperrt wäre un e Yschätzig wie lang si soll gsperrt blybe',
'cannotdelete' => 'D Syte oder d Datei „$1“ cha nit glescht wäre. Si isch villicht scho vu eber anderem glescht wore.',
'cannotdelete-title' => 'Syte „$1“ cha nit glescht wäre',
'delete-hook-aborted' => 'D Leschig isch ohni Erchlärung dur e Schnittstell abbroche wore.',
+'no-null-revision' => 'Di nej Nullversion fir d Syte „$1“ het nit chennen aagleit wäre',
'badtitle' => 'Ugültiger Titel',
'badtitletext' => 'Dr Titel vu dr agforderte Syte isch nit giltig gsi, leer, oder e nit giltig Sprochgleich vun eme andre Wiki.',
'perfcached' => 'Die Informatione chemme us em Zwischespycher un sin derwyl villicht nit aktuäll. Maximal {{PLURAL:$1|ei Ergebnis isch|$1 Ergebnis sin}} im Cache verfiegbar.',
'namespaceprotected' => "Du hesch kei Berächtigung, die Syte im '''$1'''-Namensruum z bearbeite.",
'customcssprotected' => 'Du bisch nid berächtigt, die Syte mit CSS z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.',
'customjsprotected' => 'Du bisch nid berächtigt, die Javaskript-Syte z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.',
+'mycustomcssprotected' => 'Du derfsch die CSS-Syte nit bearbeite.',
+'mycustomjsprotected' => 'Du derfsch die JavaScript-Syte nit bearbeite.',
+'myprivateinfoprotected' => 'Du derfsch Dyni privaten Informatione nit bearbeite.',
+'mypreferencesprotected' => 'Du derfsch Dyni Yystellige nit bearbeite.',
'ns-specialprotected' => 'Spezialsyte chenne nid bearbeitet wäre.',
'titleprotected' => "E Syte mit däm Name cha nid aaglait wäre.
Die Sperri isch dur [[User:$1|$1]] yygrichtet wore mit dr Begrindig ''„$2“''.",
# Login and logout pages
'logouttext' => "'''Du bisch jetz abgmäldet.'''
-Du chasch {{SITENAME}} wyter anonym bruche, oder Du chasch di <span class='plainlinks'>[$1 wider aamälde]</span> mit em glyche oder eme andere Benutzername.
-
-Ochat: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmäldet wärsch, bis Du dr Zwischespycher vu Dyym Browser glescht hesch.",
+Obacht: s cha syy, ass bstimmti Syte eso aazeigt wäre, wie wänn Du allno aagmäldet wärsch, bis Du dr Zwischespycher vu Dyym Browser glescht hesch.",
+'welcomeuser' => 'Willchuu, $1!',
+'welcomecreation-msg' => 'Dyy Benutzerkonto isch aagleit wore.
+Vergiss nit, Dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] z ändere.',
'yourname' => 'Dyy Benutzername',
+'userlogin-yourname' => 'Benutzername',
+'userlogin-yourname-ph' => 'Gib Dyy Benutzernamen yy',
+'createacct-another-username-ph' => 'Gib Dyy Benutzernamen yy',
'yourpassword' => 'Passwort:',
+'userlogin-yourpassword' => 'Passwort',
+'userlogin-yourpassword-ph' => 'Gib Dyy Passwort yy',
+'createacct-yourpassword-ph' => 'Passwort yygee',
'yourpasswordagain' => 'Passwort no mol yygee:',
+'createacct-yourpasswordagain' => 'Passwort bstetige',
+'createacct-yourpasswordagain-ph' => 'Gib s Passwort nomol yy',
'remembermypassword' => 'Uf däm Computer duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
+'userlogin-remembermypassword' => 'Aagmäldet blyybe',
+'userlogin-signwithsecure' => 'Sicheri Verbindig bruuche',
'yourdomainname' => 'Dyyni Domäne',
'password-change-forbidden' => 'Du chasch uf däm Wiki kei Passwerter ändere.',
'externaldberror' => 'Entwäder s lit e Fähler bi dr externe Authentifizierung vor, oder Du derfsch Dyy extern Benutzerkonto nid aktualisiere.',
'logout' => 'Abmälde',
'userlogout' => 'Abmälde',
'notloggedin' => 'Nit aagmäldet',
+'userlogin-noaccount' => 'No kei Benutzerkonto?',
+'userlogin-joinproject' => 'Bi {{SITENAME}} aamälde',
'nologin' => 'No kei Benutzerkonto? $1.',
'nologinlink' => '»Konto aaleege«',
'createaccount' => 'Nöis Benutzerkonto aalege',
'gotaccount' => "Du häsch scho a Konto? '''$1'''",
'gotaccountlink' => '»Login fir Benutzer, wu scho aagmäldet sin«',
'userlogin-resetlink' => 'Hesch Dyy Aamäldedate vergässe?',
-'createaccountmail' => 'iber E-Mail',
+'userlogin-resetpassword-link' => 'Passwort vergässe?',
+'helplogin-url' => 'Help:Aamälde',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilf bim Aamälde]]',
+'userlogin-loggedin' => 'Du bisch scho as {{GENDER:$1|$1}} aagmäldet.
+Bruuch s Formular unte go Di unter eme andere Benutzername aamälde.',
+'userlogin-createanother' => 'En ander Benutzerkonto aalege',
+'createacct-join' => 'Gib unte Dyni Informationen yy.',
+'createacct-another-join' => 'Gib unte d Informatione vum neie Benutzerkonto yy.',
+'createacct-emailrequired' => 'E-Mail-Adräss',
+'createacct-emailoptional' => 'E-Mail-Adräss (optional)',
+'createacct-email-ph' => 'Gib Dyy E-Mail-Adräss yy',
+'createacct-another-email-ph' => 'Gib Dyy E-Mail-Adräss yy',
+'createaccountmail' => 'E temporär Zuefallspasswort bruuchen un an di aagee E-Mail-Adräss schicke',
+'createacct-realname' => 'Richtige Name (optional)',
'createaccountreason' => 'Grund:',
+'createacct-reason' => 'Grund',
+'createacct-reason-ph' => 'Wurum Du ne ander Benutzerkonto aaleisch',
+'createacct-captcha' => 'Sicherheitspriefig',
+'createacct-imgcaptcha-ph' => 'Gib dr Tekscht yy, wu Du obe siisch',
+'createacct-submit' => 'Dyy Benutzerkonto aalege',
+'createacct-another-submit' => 'En ander Benutzerkonto aalege',
+'createacct-benefit-heading' => '{{SITENAME}} wird vu Mänsche wie Dir gschaffe.',
+'createacct-benefit-body1' => '{{PLURAL:$1|Bearbeitig|Bearbeitige}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|Syte|Syte}}',
+'createacct-benefit-body3' => '{{PLURAL:$1|aktive Autor|aktivi Autore}}',
'badretype' => 'Di beidi Passwörter stimme nid zämme.',
'userexists' => 'Dä Benutzername git s scho.
Bitte nimm e andere.',
'loginerror' => 'Fähler bir Aamäldig',
+'createacct-error' => 'Fähler bim Aalege vum Benutzerkonto',
'createaccounterror' => 'Het s Benutzerkonto nit chenne aalege: $1',
'nocookiesnew' => 'Dr Benutzerzuegang isch aaglait wore, aber Du bisch nid yygloggt. {{SITENAME}} brucht fir die Funktion Cookies, bitte tue die aktiviere un logg Di derno mit Dyynem neje Benutzername un em Passwort, wu drzue ghert, yy.',
'nocookieslogin' => '{{SITENAME}} brucht Cookies fir e Aamäldig. Du hesch d Cookies deaktiviert. Aktivier si bitte un versuech s no mol.',
'acct_creation_throttle_hit' => 'Bsuecher vu däm Wiki, wu Dyyni IP-Adräss bruuche, hän innerhalb vum letschte Tag {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonte}} aagleit. Des isch di maximal Aazahl, wu in däm Zytruum erlaubt isch.
Bsuecher, wu die IP-Adräss bruuche, chenne im Momänt kei Benutzerkonte meh aalege.',
-'emailauthenticated' => 'Di E-Mail-Adräss isch am $2 um $3 Uhr bschtätigt worde.',
+'emailauthenticated' => 'Dyy E-Mail-Adräss isch am $2 am $3 Uhr bstetigt wore.',
'emailnotauthenticated' => 'Dyni E-Mail-Adräss isch nonig bstätigt. Wäg däm gehn di erwyterete E-Mail-Funktione nonig.
Fir d Bstätigung muesch em Link nogoh, wu Dir gschickt woren isch. Du chasch au e neie sonig Link aafordere:',
'noemailprefs' => 'Du hesch kei E-Mail-Adrässen aaggä, drum sy di folgende Funktione nid müglech.',
'cannotchangeemail' => 'E-Mail-Adrässe chönne in däm Wiki nit gänderet werde.',
'emaildisabled' => 'Iber die Websyte chenne kei E-Mail verschickt wäre.',
'accountcreated' => 'S Benutzerkonto isch aagleit wore.',
-'accountcreatedtext' => 'S Benutzerkonto $1 isch aagleit wore.',
+'accountcreatedtext' => 'S Benutzerkonto fir [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|Diskussion]]) isch aagleit wore.',
'createaccount-title' => 'Aalege vum e Benutzerkonto fir {{SITENAME}}',
'createaccount-text' => 'Fir Dii isch e Benutzerkonto "$2" uf {{SITENAME}} ($4) aaglait wore. S Passwort fir "$2" , wu automatisch generiert woren isch, isch "$3". Du sottsch Di jetz aamälde un s Passwort ändere.
Wänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignoriere.',
'usernamehasherror' => 'In Benutzernäme derf s kei Rautezeiche din haa',
-'login-throttled' => 'Du hesch z vilmol vergebli versuecht, Di aazmälde. Bitte wart, voreb Du s non emol versuechsch.',
+'login-throttled' => 'Du hesch z vilmol umesuscht versuecht, Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.',
'login-abort-generic' => 'Dyy Aamäldig isch nit erfolgryych gsii – Abbroche',
'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.',
+'createacct-another-realname-tip' => 'Dr richtig Name isch optional.
+Wänn Du ne aagiisch, wird er bruucht fir d Zueornig vu dr Byytreg.',
# 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.',
+'user-mail-no-body' => 'S isch versuecht wore, ne E-Mail mit eme lääre oder z churze Tekscht z verschicke.',
# Change password dialog
'resetpass' => 'Passwort fir s Benutzerkonto ändere oder zrucksetze',
'newpassword' => 'Nöis Passwort',
'retypenew' => 'Nöis Passwort (es zwöits Mal)',
'resetpass_submit' => 'Passwort ibermittle un aamälde',
-'changepassword-success' => 'Dyy Passwort isch erfolgryych gänderet wore. Jetz chunnt d Aamäldig …',
+'changepassword-success' => 'Dyy Passwort isch erfolgryych gänderet wore.',
'resetpass_forbidden' => 'S Passwort cha nid gänderet wäre.',
'resetpass-no-info' => 'Du muesch Di aamälde zum uf die Syte diräkt zuegryfe z chenne.',
'resetpass-submit-loggedin' => 'Passwort ändere',
'resetpass-wrong-oldpass' => 'S temporär oder aktuäll Passwort isch nimi giltig.
Villicht hesch Dyy Passwort scho gänderet oder e nej temporär Passwort aagforderet.',
'resetpass-temp-password' => 'Temporär Passwort:',
+'resetpass-abort-generic' => 'D Passwortänderig isch dur e Erwyterig abbroche wore.',
# Special:PasswordReset
'passwordreset' => 'Passwort zruggsetze',
+'passwordreset-text-one' => 'Fill des Formular uus go Dy Passwort zrucksetze.',
+'passwordreset-text-many' => '{{PLURAL:$1|Fill eis vu dr Fälder uus go Dy Passwort zrucksetze.}}',
'passwordreset-legend' => 'Passwort zrucksetze',
'passwordreset-disabled' => 'S Zrucksetze vu Passwerter isch in däm Wiki deaktiviert wore.',
+'passwordreset-emaildisabled' => 'D E-Mail-Funktione sin uf däm Wiki deaktiviert wore.',
'passwordreset-username' => 'Benutzername:',
'passwordreset-domain' => 'Domain:',
'passwordreset-capture' => 'Die E-Mail aaluege?',
'passwordreset-capture-help' => 'Wänn du des Chäschtli aachrüüzesch, no wird die E-Mail (mit em temporäre Passwort) dir aazeigt, un au em Benutzer zuegschiggt.',
'passwordreset-email' => 'E-Mail-Adräss:',
'passwordreset-emailtitle' => 'Benutzerkontoinformationen uf {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Eber mit dr IP-Adresse $1, wahrschyns Du sälber, het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4). {{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft:
+'passwordreset-emailtext-ip' => 'Eber mit dr IP-Adresse $1, wahrschyns Du sälber, het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4).
+
+{{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft:
-$2
+$2
{{PLURAL:$3|Des temporär Passwort lauft|Die temporäre Passwerter laufe}} in {{PLURAL:$5|eim Tag|$5 Täg}} ab.
Du sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gstellt het oder Du di wider an Dyy alt Passwort chasch erinnere un s nimi wettsch ändere, chasch die Nochricht ignorieren un alsfurt Dyy alt Passwort bruche.',
-'passwordreset-emailtext-user' => 'Benutzer $1 uf {{SITENAME}} het e Erinnerig an Dyyni Benutzerkonteninformatione fir {{SITENAME}} aagforderet ($4). {{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft:
+'passwordreset-emailtext-user' => 'Dr Benutzer $1 bi {{SITENAME}} het e Zrucksetzig vu Dym Passwort bi {{SITENAME}} aagforderet ($4).
-$2
+{{PLURAL:$3|Des Benutzerkonto isch|Die Benutzerkonte sin}} mit däre E-Mail-Adräss verchnipft:
+
+$2
{{PLURAL:$3|Des temporär Passwort lauft|Die temporäre Passwerter laufe}} in {{PLURAL:$5|eim Tag|$5 Täg}} ab.
Du sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gstellt het oder Du di wider an Dyy alt Passwort chasch erinnere un s nimi wettsch ändere, chasch die Nochricht ignorieren un alsfurt Dyy alt Passwort bruche.',
'passwordreset-emailelement' => 'Benutzername: $1
Temporär Passwort: $2',
-'passwordreset-emailsent' => 'E Erinnerig isch per E-Mail verschickt wore.',
-'passwordreset-emailsent-capture' => 'E Erinnerigsmail isch abgschiggt worde, un isch unte aazeigt.',
+'passwordreset-emailsent' => 'E Passwort-Zrucksetzig isch per E-Mail verschickt wore.',
+'passwordreset-emailsent-capture' => 'E Passwort-Zrucksetzigs-Mail isch vergschickt worde, un isch unte aazeigt.',
'passwordreset-emailerror-capture' => 'Die Erinnerigsmail, wo unte aazeigt isch, isch generiert worde, aber de Versand aa de Benutzer isch gschyyteret: $1',
# Special:ChangeEmail
'preferences' => 'Yystellige',
'mypreferences' => 'Yystellige',
'prefs-edits' => 'Aazahl vu dr Bearbeitige:',
-'prefsnologin' => 'Nid aagmäldet',
-'prefsnologintext' => 'Du muesch <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aagmäldet]</span> sy, für Benutzerystellige chönne z ändere',
'changepassword' => 'Passwort ändere',
'prefs-skin' => 'Benutzeroberflechi',
'skin-preview' => 'Vorschou',
'recentchanges-label-minor' => 'Des isch e chleini Änderig',
'recentchanges-label-bot' => 'Die Bearbeitig isch dur e Bott uusgfiert wore',
'recentchanges-label-unpatrolled' => 'Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore',
+'recentchanges-legend-newpage' => '$1 - neji Syte',
'rcnote' => "Azeigt {{PLURAL:$1|wird '''1''' Änderig|wärde di letschte '''$1''' Änderige}} {{PLURAL:$2|vom letschte Tag|i de letschte '''$2''' Täg}} (Stand: $4, $5)",
'rcnotefrom' => 'Des sin d Ändrige syter <b>$2</b> (bis zem <b>$1</b> zeigt).',
'rclistfrom' => '<small>Nöji Änderige ab $1 aazeige (UTC)</small>',
'allmessagesdefault' => 'Standardtext',
'allmessagescurrent' => 'jetzige Tekscht',
'allmessagestext' => 'Des isch e Lischt vu allene meglige Syschtemnochrichte us em MediaWiki Namensruum.
-Lueg au uf [//www.mediawiki.org/wiki/Localisation MediaWiki Lokalisierig] un [//translatewiki.net translatewiki.net], wänn Du zue dr MediaWiki-Lokalisierig wit byytrage.',
+Lueg au uf [https://www.mediawiki.org/wiki/Localisation MediaWiki Lokalisierig] un [//translatewiki.net translatewiki.net], wänn Du zue dr MediaWiki-Lokalisierig wit byytrage.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' cha nit bruucht wärde will '''\$wgUseDatabaseMessages''' abgschalte isch.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter fir dr aapasst Zuestand:',
'file-nohires' => 'Kei höcheri Uflösig verfüegbar.',
'svg-long-desc' => 'SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3',
'svg-long-desc-animated' => 'Animierti SVG-Datei, Basisgreßi $1 × $2 Pixel, Dateigreßi: $3',
-'show-big-image' => 'Originalgrößi',
+'show-big-image' => 'Originaldatei',
'show-big-image-preview' => 'Greßi vu däre Vorschau: $1.',
'show-big-image-other' => 'Wyteri {{PLURAL:$2|Ufflösig|Ufflösige}}: $1.',
'show-big-image-size' => '$1 × $2 Pixel',
# External editor support
'edit-externally' => 'Die Datei mit emnen externe Programm bearbeite',
-'edit-externally-help' => '(Lueg d [//www.mediawiki.org/wiki/Manual:External_editors Installationsaawisige] fir witeri Informatione)',
+'edit-externally-help' => '(Lueg d [https://www.mediawiki.org/wiki/Manual:External_editors Installationsaawisige] fir witeri Informatione)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alli',
'version-hook-subscribedby' => 'Ufruef vu',
'version-version' => '(Version $1)',
'version-license' => 'Lizänz',
-'version-poweredby-credits' => "Die Websyte nutzt '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Die Websyte nutzt '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'anderi',
'version-credits-summary' => 'Mir danke däne Lyt fir ihri Bytreg zue [[Special:Version|MediaWiki]].',
'version-license-info' => 'MediaWiki isch e freji Software, d. h. s cha, no dr Bedingige vu dr GNU General Public-Lizänz, wu vu dr Free Software Foundation vereffentligt woren isch, wyterverteilt un/oder modifiziert wäre. Doderbyy cha d Version 2, oder no eigenem Ermässe, jedi nejeri Version vu dr Lizänz brucht wäre.
'duration-centuries' => '$1 {{PLURAL:$1|Johrhundert|Johrhundert}}',
'duration-millennia' => '$1 {{PLURAL:$1|Jahrtöusert|Jahrtöusert}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Vorlage expandiere',
+'expand_templates_intro' => 'In däre Spezialsyte cha Täxt yygee wäre und alli Vorlage in ere wäre rekursiv expandiert. Au Parserfunkione wie <nowiki>{{</nowiki>#language:…}} un Variable wie <nowiki>{{</nowiki>CURRENTDAY}} wäre usgwärtet - faktisch alles was in dopplete gschweifte Chlammere din isch. Des gschiht dur dr Ufruef vu dr jewyylige Parser-Phase in MediaWiki.',
+'expand_templates_title' => 'Kontexttitel, fir {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Yygabfäld:',
+'expand_templates_output' => 'Ergebnis',
+'expand_templates_xml_output' => 'XML-Usgab',
+'expand_templates_ok' => 'Uusfiere',
+'expand_templates_remove_comments' => 'Kommentar useneh',
+'expand_templates_remove_nowiki' => '<nowiki>-Befähl im Ergebnis unterdrucke',
+'expand_templates_generate_xml' => 'Zeig XML-Parser-Baum',
+'expand_templates_preview' => 'Vorschou',
+
);
'ok' => 'મંજૂર',
'retrievedfrom' => '"$1"થી લીધેલું',
'youhavenewmessages' => 'તમારા માટે $1 ($2).',
-'newmessageslink' => 'નવીન સંદેશાઓ',
-'newmessagesdifflink' => 'છેલ્લો ફેરફાર',
'youhavenewmessagesfromusers' => 'આપને માટે {{PLURAL:$3|અન્ય સભ્ય|$3 અન્ય સભ્યો}} તરફથી $1 છે. ($2).',
'youhavenewmessagesmanyusers' => 'આપને માટે ઘણાં સભ્યો તરફથી $1 છે ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|નવો સંદેશો|નવા સંદેશા}}',
'invalidtitle-knownnamespace' => 'નામસ્થળ "$2" અને લખાણ "$3" સાથે અમાન્ય મથાળું',
'invalidtitle-unknownnamespace' => 'અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ "$2" વાળું અમાન્ય મથાળું',
'exception-nologin' => 'પ્રવેશ કરેલ નથી',
-'exception-nologin-text' => 'આ પાનું કે ક્રિયા માટે આ વિકિ પર લોગઈન થવું જરૂરી છે.',
+'exception-nologin-text' => 'આ પાનું કે પ્રક્રિયા પ્રાપ્તી માટે કૃપયા [[Special:Userlogin|લોગઈન]] કરો.',
+'exception-nologin-text-manual' => 'આ પાનું કે પ્રક્રિયા મેળવવા માટે કૃપયા $1.',
# Virus scanner
'virus-badscanner' => "ખરાબ રૂપરેખા: અજાણ્યું વાઇરસ સ્કેનર: ''$1''",
'gotaccount' => "પહેલેથી ખાતું ખોલેલું છે? '''$1'''.",
'gotaccountlink' => 'પ્રવેશ કરો',
'userlogin-resetlink' => 'પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?',
-'userlogin-resetpassword-link' => 'તમારà«\80 àª\97à«\81પà«\8dતસàª\82àª\9cà«\8dàª\9eા બદલà«\8b',
+'userlogin-resetpassword-link' => 'તમારà«\8b પાસવરà«\8dડ àªà«\82લà«\80 àª\97યા àª\9bà«\8b?',
'helplogin-url' => 'Help:પ્રવેશ માટે',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|પ્રવેશવા માટેની મદદ]]',
'userlogin-loggedin' => 'તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.
'passwordsent' => '"$1" ની નવી ગુપ્તસંજ્ઞા (પાસવર્ડ) આપના ઇમેઇલ પર મોકલવામાં આવ્યો છે.
કૃપા કરી તે મળ્યા બાદ ફરી લોગ ઇન કરો.',
'blocked-mailpassword' => 'ફેરફાર કરવા માટે તમારું IP એડ્રેસ સ્થગિત કરી દેવાયું છે, તેથી દૂરુપયોગ ટાળવા માટે તમને ગુપ્તસંજ્ઞા ફરી મેળવવાની છૂટ નથી.',
-'eauthentsent' => 'પà«\81ષà«\8dàª\9fિ àª\95રવા માàª\9fà«\87 તમà«\87 àª\86પેલા સરનામાં પર ઇમેલ મોકલવામાં આવ્યો છે.
+'eauthentsent' => 'પà«\81ષà«\8dàª\9fિ àª\95રવા માàª\9fà«\87 નિશà«\8dàª\9aિત થયેલા સરનામાં પર ઇમેલ મોકલવામાં આવ્યો છે.
એ જ સરનામે બીજો ઇમેલ થતાં પહેલાં તમારે ઇમેલમાં લખેલી સૂચનાઓ પ્રમાણે કરવું પડશે જેથી એ પુષ્ટિ થઇ શકે કે આપેલું સરનામું તમારું છે.',
'throttled-mailpassword' => 'ગુપ્ત સંજ્ઞા યાદ અપાવતી ઇમેઇલ છેલ્લા {{PLURAL:$1|કલાકમાં|$1 કલાકોમાં}} મોકલેલી છે.
દૂરુપયોગ રોકવા માટે, {{PLURAL:$1|કલાકમાં|$1 કલાકોમાં}} ફક્ત એક જ આવી મેઇલ કરવામાં આવે છે.',
# Email sending
'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ',
'user-mail-no-addy' => 'ઈ મેલ એડ્રસ વગર ઈ મેલ મોકલવા પ્રયત્ન કરેલ.',
+'user-mail-no-body' => 'કોરો કે નાનકડો ઈમેઇલ મોકલવાનો પ્રયાસ કરાયો.',
# Change password dialog
'resetpass' => 'ગુપ્તસંજ્ઞા બદલો',
# Special:PasswordReset
'passwordreset' => 'ગુપ્ત સંજ્ઞા ફરી ગોઠવો',
'passwordreset-text-one' => 'તમારો પાસવર્ડ બદલવા માટે આ ફોર્મ પૂરુ કરો.',
+'passwordreset-text-many' => '{{PLURAL:$1|તમારો પાસવર્ડ બદલવા માટે કોઈ એક ખાનું ભરો.}}',
'passwordreset-legend' => 'ગુપ્ત સંજ્ઞા ફરી ગોઠવો',
'passwordreset-disabled' => 'આ વિકી પર ગુપ્ત સંજ્ઞા ફરી ગોઠવવા પર પ્રતિબંધ છે.',
'passwordreset-emaildisabled' => 'આ વિકિ પર ઇમેઇલ સગવડ બંધ છે.',
તમે તમારું લખાણ કોઇ ટેક્સ્ટ ફાઇલ માં સેવ કરી મૂકી દો અને માહિતીસંચ ખુલતા વિકિ પર સાચવી શકશો.
જે પ્રબંધકે માહિતીસંચ બંધ કર્યો છે તેણે આ કારણ આપ્યું છે: $1",
-'protectedpagewarning' => "'''ચેતવણી : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
-તમારા સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદિ આપી છે:",
-'semiprotectedpagewarning' => "'''નોંધ : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
-તમારા સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદિ આપી છે:",
+'protectedpagewarning' => "'''ચેતવણી:''' આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે છે.
+સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદà«\80 નà«\80àª\9aà«\87 આપી છે:",
+'semiprotectedpagewarning' => "'''નોંધ :''' આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર નોંધાયેલાં સભ્યો જ આમાં ફેરફાર કરી શકે છે.
+સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદà«\80 નà«\80àª\9aà«\87 આપી છે:",
'cascadeprotectedwarning' => "'''ચેતવણી:''' આ પાનું સંરક્ષિત છે. પ્રબંધન અધિકાર ધરાવતા સભ્યો જ આમાં ફેરફાર કરી શકે છે. આ પાનું નીચેના પગથિયામય સંરક્ષણ{{PLURAL:$1|પાના|પાનાઓ}} દ્વારા સુરક્ષિત છે.",
'titleprotectedwarning' => "'''ચેતવણી: આ પાનું સંરક્ષિત છે આથી આની રચના માટે [[Special:ListGroupRights|વિશેષ અધિકારો]]ની જરૂર છે.'''
તે સંબંધી તાજેતરની ફેરફાર યાદી તમારા સંદર્ભ માટે આપેલી છે:",
'revdelete-text' => "''' રદ્દ કરાયેલ ફેરફારો અને ઘટનાઓ પાનાના ઈતિહાસ અને લોગમાં દેખાશે , પણ તેની અંદરની માહિતી જન સમુદાયથી અદ્રશ્ય રહેશે. '''
{{SITENAME}} પરના અન્ય પ્રબંધકો આ અદ્રશ્ય માહિતે જોઇ શકશે અને તેને પુનઃ જીવિત કરી શકશે સિવાય કે તેના પર વધારાની પાબંદી ન મુકાઇ હોય.",
'revdelete-confirm' => 'કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.',
-'revdelete-suppress-text' => "બળ પૂર્વક છુપાવવું માત્ર આજ સંજોગોમાં કરી શકાશે:
+'revdelete-suppress-text' => "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:
* સંભવતઃ ભયાજનક માહિતી
* અયોગ્ય નિજી માહિતી
-*: ''àª\98રનà«\81àª\82 સરનામà«\81àª\82 àª\85નà«\87 àª\9fà«\87લિફà«\8bન નàª\82બર, સામાàª\9cિàª\95 સà«\81રàª\95à«\8dષા àª\95à«\8dરà«\8dમ àª\88.''",
+*: ''àª\98રનà«\81àª\82 સરનામà«\81àª\82 àª\85નà«\87 àª\9fà«\87લિફà«\8bન નàª\82બર, રાષà«\8dàª\9fà«\8dરà«\80ય àª\93ળàª\96 àª\95à«\8dરમાàª\82àª\95à«\8b વàª\97à«\87રà«\87.''",
'revdelete-legend' => 'દ્રશ્યતા સંબંધી પ્રતિબંધોને ગોઠવો',
-'revdelete-hide-text' => 'પà«\81નરાવરà«\8dતન àª\9bà«\81પાવà«\8b',
+'revdelete-hide-text' => 'પà«\81નરાવરà«\8dતન લàª\96ાણ',
'revdelete-hide-image' => 'ફાઇલની માહિતી છુપાવો',
'revdelete-hide-name' => 'ક્રિયા અને લક્ષ્ય સંતાડો',
-'revdelete-hide-comment' => 'ફેરફાર સારાંશ છુપાવો',
-'revdelete-hide-user' => 'સંપાદકનું નામ /આઈ પી એડ્રેસ સંતાડો',
+'revdelete-hide-comment' => 'ફેરફાર સારાંશ',
+'revdelete-hide-user' => 'સંપાદકનું નામ /આઈ પી એડ્રેસ',
'revdelete-hide-restricted' => 'પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો',
'revdelete-radio-same' => '(બદલશો નહીઁ)',
-'revdelete-radio-set' => 'હા',
-'revdelete-radio-unset' => 'ના',
+'revdelete-radio-set' => 'àª\9bà«\81પાયà«\87લ',
+'revdelete-radio-unset' => 'દà«\8dશà«\8dયમાન',
'revdelete-suppress' => 'પ્રબંધક કે અન્યો સૌની માહિતી છુપાવો',
'revdelete-unsuppress' => 'સમા કરાયેલા પુનરાવર્તનો પરના પ્રતિબંધ હટાવો',
'revdelete-log' => 'કારણ:',
'preferences' => 'પસંદ',
'mypreferences' => 'પસંદગીઓ',
'prefs-edits' => 'સંપાદનોની સંખ્યા',
-'prefsnologin' => 'પ્રવેશ કરેલ નથી',
-'prefsnologintext' => 'સભ્યના અધિકારો બદલવા તમે <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> પ્રવેશ કરેલો હોવો જોઈએ',
+'prefsnologintext2' => 'તમારી પસંદગીઓ પસંદ કરવા માટે કૃપયા $1.',
'changepassword' => 'ગુપ્તસંજ્ઞા બદલો',
'prefs-skin' => 'ફલક',
'skin-preview' => 'ફેરફાર બતાવો',
'imageinvalidfilename' => 'લક્ષ્ય ફાઈલ અવૈધ છે',
'fix-double-redirects' => 'મૂળ શીર્ષક તરફ નિર્દેશન કરતા દિશા નિર્દેશકો અધ્યતન કરો',
'move-leave-redirect' => 'પાછળ દિશા સૂચન છોડો',
-'protectedpagemovewarning' => "'''નà«\8bàª\82ધ : àª\86 પાના પર સàª\82રàª\95à«\8dષણ વિàª\95લà«\8dપ સàª\95à«\8dરà«\80ય àª\9bà«\87 àª\85નà«\87 માતà«\8dર પà«\8dરબàª\82ધàª\95à«\8b àª\9c àª\86માàª\82 ફà«\87રફાર àª\95રà«\80 શàª\95à«\87.'''
-તમારા સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદિ આપી છે:",
-'semiprotectedpagemovewarning' => "'''નોંધ : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
-તમારા સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદિ આપી છે:",
+'protectedpagemovewarning' => "'''àª\9aà«\87તવણà«\80:''' àª\86 પાના પર સàª\82રàª\95à«\8dષણ વિàª\95લà«\8dપ સàª\95à«\8dરà«\80ય àª\9bà«\87 àª\85નà«\87 માતà«\8dર પà«\8dરબàª\82ધàª\95à«\8b àª\9c àª\86નà«\87 àª\96સà«\87ડà«\80 શàª\95à«\87 àª\9bà«\87.
+સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદà«\80 નà«\80àª\9aà«\87 આપી છે:",
+'semiprotectedpagemovewarning' => "'''નોંધ :''' આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર નોંધાયેલાં સભ્યો જ આને ખસેડી શકે છે.
+સàª\82દરà«\8dઠમાàª\9fà«\87 તાàª\9cà«\87તરનà«\80 લà«\8bàª\97 યાદà«\80 નà«\80àª\9aà«\87 આપી છે:",
'move-over-sharedrepo' => '== ફાઇલ અસ્તિત્વ ધારાવે છે ==
સર્વસામાન્ય ફાઇલ સંગ્રહમાં [[:$1]] પહેલેથી મોજૂદ છે. આ સ્થળે કોઇ અન્ય ફાઇલ હટાવતા વિહરમાન ફાઇલની માહિતી પર આ ફાઇલ લખાશે.',
'file-exists-sharedrepo' => 'પસંદ કરેલ ફાઇલ ના નામે અન્ય ફાઇલ પહેલેથી સર્વ સામાન્ય ફાઇલ સંગ્રહમાં મોજૂદ છે/
'allmessagesdefault' => 'મૂળ સંદેશ',
'allmessagescurrent' => 'વર્તમાન દસ્તાવેજ',
'allmessagestext' => 'આ મિડિયાવિકિ નામસ્થળમાં આવેલ પ્રણાલીજનિત સંદેશાની યાદી આ મુજબ છે.
-જો તમે મિડિયાયાવિકિના સ્થાનીયકરણમાં મદદરૂપ થવા ઇચ્છતા હોવ તો કૃપયા [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] અને [//translatewiki.net translatewiki.net]ની મુલાકાત લો.',
+જો તમે મિડિયાયાવિકિના સ્થાનીયકરણમાં મદદરૂપ થવા ઇચ્છતા હોવ તો કૃપયા [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] અને [//translatewiki.net translatewiki.net]ની મુલાકાત લો.',
'allmessagesnotsupportedDB' => "આ પાનું ન વાપરી શકાશે કેમકે '''\$wgUseDatabaseMessages''' નિષ્ક્રીય કરાયું છે",
'allmessages-filter-legend' => 'ચાળણી',
'allmessages-filter' => 'સ્થાનીયકરણ સ્થિતિ દ્વારા ચાળો',
'file-nohires' => 'આથી વધુ આવર્તન ઉપલબ્ધ નથી.',
'svg-long-desc' => 'SVG ફાઇલ, માત્ર $1 × $2 પીક્સલ, ફાઇલનું કદ: $3',
'svg-long-error' => 'અયોગ્ય SVG ફાઇલ: $1',
-'show-big-image' => 'મહતà«\8dતમ àª\86વરà«\8dતન',
+'show-big-image' => 'મà«\82ળàªà«\81ત ફાàª\87લ',
'show-big-image-preview' => 'આ મહાવરા દ્રશ્યનું માપ: $1.',
'show-big-image-other' => 'અન્ય {{PLURAL:$2|આવર્તન|આવર્તનો}}: $1.',
'show-big-image-size' => '$1 × $2 પીક્સલ',
# External editor support
'edit-externally' => 'બાહ્ય સોફ્ટવેર વાપરીને આ ફાઇલમાં ફેરફાર કરો',
-'edit-externally-help' => '(વધુ માહિતી માટે [//www.mediawiki.org/wiki/Manual:External_editors સેટ-અપ સૂચનાઓ] જુઓ)',
+'edit-externally-help' => '(વધુ માહિતી માટે [https://www.mediawiki.org/wiki/Manual:External_editors સેટ-અપ સૂચનાઓ] જુઓ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'બધા',
'version-hook-subscribedby' => 'દ્વ્રારા લાભાન્વીત',
'version-version' => '(આવૃત્તિ $1)',
'version-license' => 'પરવાનો',
-'version-poweredby-credits' => "આ વિકિ '''[//www.mediawiki.org/ MediaWiki]''' દ્વારા ચાલે છે, પ્રકાશનાધિકાર © 2001-$1 $2.",
+'version-poweredby-credits' => "આ વિકિ '''[https://www.mediawiki.org/ MediaWiki]''' દ્વારા ચાલે છે, પ્રકાશનાધિકાર © 2001-$1 $2.",
'version-poweredby-others' => 'અન્યો',
'version-poweredby-translators' => 'ટ્રાન્સલેટવિકિ.નેટ ભાષાંતરકર્તાઓ',
'version-license-info' => 'મિડિયાવિકિ એક મુક્ત સોફ્ટવેર છે. તમે તેનું પુનઃવિતરણ કરી શકો છો અને/અથવા તેને the Free Software Foundation દ્વારા પ્રકાશિત GNU General Public License હેઠળ તેના સંસ્કરણ 2 ને કે તે પછીના સંસ્કરણ મઠારી શકો છો .
# Special:SpecialPages
'specialpages' => 'ખાસ પાનાં',
-'specialpages-note' => '----
-* નિયમિત ખાસ પાનાં.
-* <span class="mw-specialpagerestricted">ખાસ પાનાં પ્રતિબંધિત.</span>',
+'specialpages-note' => '* નિયમિત ખાસ પાનાં.
+* <span class="mw-specialpagerestricted">પ્રતિબંધિત ખાસ પાનાં.</span>',
'specialpages-group-maintenance' => 'સમારકામ અહેવાલ',
'specialpages-group-other' => 'અન્ય ખાસ પાનાઓ',
'specialpages-group-login' => 'પ્રવેશ / ખાતુ બનાવો',
# Database error messages
'dberr-header' => 'આ વિકિમાં તકલીફ છે',
-'dberr-problems' => 'દિલàª\97à«\80રà«\80! àª\86 સાàª\87àª\9f તàª\95નિàª\95à«\80 àª\85ડàª\9aણ અનુભવી રહી છે.',
+'dberr-problems' => 'માફ àª\95રશà«\8b! àª\86 સાàª\87àª\9f તàª\95નિàª\95à«\80 àª\85ડàª\9aણà«\8b અનુભવી રહી છે.',
'dberr-again' => 'થોડી વાર રાહ જોઈને ફરી પેજ લોડ કરવાનો પ્રયત્ન કરો.',
'dberr-info' => '(માહિતી સંચય સર્વર : $1નો સંપર્ક નથી કરી શકાયો)',
'dberr-info-hidden' => '(ડેટાબેઝ સર્વર સાથે જોડાણ થઇ શકતું નથી)',
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}',
+# Special:ExpandTemplates
+'expand_templates_output' => 'પરિણામ:',
+'expand_templates_ok' => 'મંજૂર',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Feddynit ass "$1"',
'youhavenewmessages' => 'Ta $1 ayd ($2).',
-'newmessageslink' => 'çhaghteraghtyn noa',
-'newmessagesdifflink' => "caghlaa s'jerree",
'youhavenewmessagesmulti' => 'Ta çhaghteraghtyn noa ayd er $1',
'editsection' => 'reagh',
'editold' => 'reagh',
'preferences' => 'Tosheeaghtyn',
'mypreferences' => 'My hosheeaghtyn',
'prefs-edits' => 'Earroo caghlaaghyn:',
-'prefsnologin' => 'Cha nel oo loggit stiagh',
'changepassword' => 'Fockle yn arrey y cheaghley',
'prefs-skin' => 'Crackan',
'skin-preview' => 'Roie-haishbynys',
# External editor support
'edit-externally' => 'Reagh yn coadan shoh lesh sheeyntagh mooie',
-'edit-externally-help' => 'Jeeagh er [//www.mediawiki.org/wiki/Manual:External_editors saraghyn soiaghey seose] son tooilley oayllys.',
+'edit-externally-help' => 'Jeeagh er [https://www.mediawiki.org/wiki/Manual:External_editors saraghyn soiaghey seose] son tooilley oayllys.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'yn clane',
'searchsuggest-search' => 'Ronsaghey',
'searchsuggest-containing' => 'goaill stiagh...',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'OK',
+'expand_templates_preview' => 'Roie-haishbynys',
+
);
'ok' => '做得',
'retrievedfrom' => '來自"$1"',
'youhavenewmessages' => '汝有$1($2)。',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '上擺更改',
'youhavenewmessagesfromusers' => '汝有來自{{PLURAL:$3|另一位用戶|$3位用戶}}嘅$1($2)。',
'youhavenewmessagesmanyusers' => '汝有來自多位用戶嘅$1( $2 )。',
'newmessageslinkplural' => '{{PLURAL:$1|一條新信息|新信息}}',
# Preferences page
'preferences' => '偏好設定',
'mypreferences' => '偏好設定',
-'prefsnologin' => '還吂登入',
-'prefsnologintext' => 'Ngì pit-sî chhai-siên [[Special:UserLogin|tên-ngi̍p]] chhòi-nèn sat-chṳ ke-ngìn chhâm-su.',
'changepassword' => '更改密碼',
'prefs-skin' => '外皮',
'skin-preview' => '預覽',
'allmessagesdefault' => '默認信息文字',
'allmessagescurrent' => 'Tông-chhièn ke vùn-sṳ',
'allmessagestext' => 'Liá-piên lie̍t-chhut só-yû hí-khó thin-chṳ ke ne-thúng kie-mien.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => 'Ne-thúng kie-mien kûng-yung chhu-yî kôan-pit chong-thai (wgUseDatabaseMessages)。',
# Thumbnails
# External editor support
'edit-externally' => '用外部應用程序編寫本文件',
-'edit-externally-help' => '(請參詳[//www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
+'edit-externally-help' => '(請參詳[https://www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全部',
'ok' => 'Hiki nō',
'retrievedfrom' => 'Kiʻi ʻia mai "$1"',
'youhavenewmessages' => 'He $1 ($2) kāu.',
-'newmessageslink' => 'mau memo hou',
-'newmessagesdifflink' => 'loli hope',
'youhavenewmessagesmulti' => 'He mau memo kou ma $1',
'editsection' => 'e ho‘ololi',
'editold' => 'e ho‘ololi',
'ilsubmit' => 'Huli',
# External editor support
-'edit-externally-help' => '(E ʻike i nā [//www.mediawiki.org/wiki/Manual:External_editors aʻo palapala no ka hoʻokuene ʻana])',
+'edit-externally-help' => '(E ʻike i nā [https://www.mediawiki.org/wiki/Manual:External_editors aʻo palapala no ka hoʻokuene ʻana])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'apau',
# Special:Tags
'tags-edit' => 'e hoʻololi',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Hiki nō',
+'expand_templates_preview' => 'Nāmua',
+
);
'backlinksubtitle' => '→ $1',
'retrievedfrom' => 'מקור: $1',
'youhavenewmessages' => 'יש לך $1 ($2).',
-'newmessageslink' => 'הודעות חדשות',
-'newmessagesdifflink' => 'השוואה לגרסה הקודמת',
'youhavenewmessagesfromusers' => 'יש לך $1 {{PLURAL:$3|ממשתמש אחר|מ־$3 משתמשים}} ($2).',
'youhavenewmessagesmanyusers' => 'יש לך $1 ממשתמשים רבים ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|הודעה חדשה|הודעות חדשות}}',
'nosuchspecialpage' => 'אין דף מיוחד בשם זה',
'nospecialpagetext' => '<strong>ביקשתם דף מיוחד שאינו קיים.</strong>
-ר×\90×\95 ×\92×\9d ×\90ת [[Special:SpecialPages|רש×\99×\9eת ×\94×\93פ×\99×\9d ×\94×\9e×\99×\95×\97×\93×\99×\9d ×\94תק×\99× ×\99×\9d]].',
+ראו את [[Special:SpecialPages|רשימת הדפים המיוחדים התקינים]].',
# General errors
'error' => 'שגיאה',
'invalidtitle-knownnamespace' => 'כותרת בלתי־תקינה עם מרחב השם "$2" ושם דף "$3"',
'invalidtitle-unknownnamespace' => 'כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף "$2"',
'exception-nologin' => 'לא בחשבון',
-'exception-nologin-text' => 'כדי לראות את הדף הזה או לבצע את הפעולה הזאת צריך להיכנס לחשבון באתר הוויקי הזה.',
+'exception-nologin-text' => 'אנא [[Special:Userlogin|היכנסו לחשבון]] כדי לראות את הדף הזה או לבצע את הפעולה הזו.',
+'exception-nologin-text-manual' => 'אנא $1 כדי לראות את הדף הזה או לבצע את הפעולה הזו.',
# Virus scanner
'virus-badscanner' => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
שימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.",
'welcomeuser' => 'ברוך בואך, $1!',
'welcomecreation-msg' => 'חשבונך נוצר.
-× ×\90 ×\9c×\90 ×\9cש×\9b×\95×\97 ×\9c×\94ת×\90×\99×\9d ×\90ת [[Special:Preferences|×\94×¢×\93פ×\95ת ×\94×\9eשת×\9eש]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
+×\91×\90פשר×\95ת×\9a ×\9c×\94ת×\90×\99×\9d ×\90ת [[Special:Preferences|×\94×\94×¢×\93פ×\95ת]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
'yourname' => 'שם משתמש:',
'userlogin-yourname' => 'שם משתמש',
'userlogin-yourname-ph' => 'יש להקליד את שם המשתמש',
'headline_sample' => 'כותרת',
'headline_tip' => 'כותרת – דרגה 2',
'nowiki_sample' => 'טקסט לא מעוצב',
-'nowiki_tip' => '×\98קס×\98 ×\9c×\90 ×\9e×¢×\95צ×\91 (×\94תע×\9c×\9d ×\9eס×\99×\9e× ×\99 ×\95×\99ק×\99)',
+'nowiki_tip' => '×\94תע×\9c×\9e×\95ת ×\9e×¢×\99צ×\95×\91 ×\95×\99ק×\99',
'image_tip' => 'קובץ המוצג בתוך הדף',
'media_tip' => 'קישור לקובץ מדיה',
'sig_tip' => 'חתימה + שעה',
'revdelete-suppress-text' => "יש להשתמש בהסתרה מלאה '''אך ורק''' במקרים הבאים:
* מידע שעלול להיות לשון הרע
* חשיפת מידע אישי
-*: '''×\9bת×\95×\91×\95ת ×\91ת×\99×\9d ×\95×\9eספר×\99 ×\98×\9cפ×\95×\9f, ×\9eספר×\99 ×\91×\99×\98×\95×\97 ×\9c×\90×\95×\9e×\99, וכדומה'''",
+*: '''×\9bת×\95×\91×\95ת ×\91ת×\99×\9d ×\95×\9eספר×\99 ×\98×\9cפ×\95×\9f, ×\9eספר×\99 ×\96×\99×\94×\95×\99 ×\9e×\93×\99× ×ª×\99×\99×\9d, וכדומה'''",
'revdelete-legend' => 'הגדרת הגבלות התצוגה',
'revdelete-hide-text' => 'תוכן הגרסה',
'revdelete-hide-image' => 'הסתרת תוכן הקובץ',
'revdelete-hide-user' => 'שם המשתמש או כתובת ה־IP של העורך',
'revdelete-hide-restricted' => 'הסתרת המידע גם ממפעילי המערכת',
'revdelete-radio-same' => '(ללא שינוי)',
-'revdelete-radio-set' => '×\92×\9c×\95×\99',
-'revdelete-radio-unset' => '×\9e×\95סתר',
+'revdelete-radio-set' => '×\9e×\95סתר',
+'revdelete-radio-unset' => '×\92×\9c×\95×\99',
'revdelete-suppress' => 'הסתרת המידע גם ממפעילי המערכת',
'revdelete-unsuppress' => 'הסרת הגבלות בגרסאות המשוחזרות',
'revdelete-log' => 'סיבה:',
'preferences' => 'העדפות',
'mypreferences' => 'העדפות',
'prefs-edits' => 'מספר עריכות:',
-'prefsnologin' => 'לא נכנסת לחשבון',
-'prefsnologintext' => 'עליכם <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} להיכנס לחשבון]</span> כדי לשנות העדפות משתמש.',
+'prefsnologintext2' => 'אנא $1 כדי לשנות העדפות משתמש.',
'changepassword' => 'שינוי סיסמה',
'prefs-skin' => 'עיצוב',
'skin-preview' => 'תצוגה מקדימה',
'gender-unknown' => 'איני רוצה לומר',
'gender-male' => 'הוא עורך דפים בוויקי',
'gender-female' => 'היא עורכת דפים בוויקי',
-'prefs-help-gender' => '×\90×\99×\9f ×\97×\95×\91×\94 ×\9c×\9e×\9c×\90 ×\90ת ×\94×\94×¢×\93פ×\94 ×\94×\96×\90ת.
-×\94ת×\9b× ×\94 ×\9eשת×\9eשת ×\91×\9e×\99×\93×¢ ×\94×\96×\94 ×\9b×\93×\99 ×\9c×¤× ×\95ת ×\90×\9c×\99×\9a ×\90×\95 ×\90×\9c×\99×\99×\9a ×\95×\9c×\94×\96×\9b×\99ר ×\90×\95ת×\9a ×\9c×\90×\97ר×\99×\9d במין הדקדוקי הנכון.
-×\94×\9e×\99×\93×¢ ×\94×\96×\94 ×\99×\94×\99×\94 צ×\99×\91×\95ר×\99.',
+'prefs-help-gender' => '×\90×\99×\9f ×\97×\95×\91×\94 ×\9c×\9e×\9c×\90 ×\94×¢×\93פ×\94 ×\96×\95.
+×\94×\9eער×\9bת ×\9eשת×\9eשת ×\91×\9e×\99×\93×¢ ×\96×\94 ×\9b×\93×\99 ×\9c×¤× ×\95ת ×\90×\9c×\99×\9a/×\90×\9c×\99×\99×\9a ×\95×\9cצ×\99×\99×\9f ×\90ת ש×\9d ×\94×\9eשת×\9eש ש×\9c×\9a במין הדקדוקי הנכון.
+המידע יהיה ציבורי.',
'email' => 'דוא"ל',
'prefs-help-realname' => 'השם האמיתי הוא אופציונאלי.
אם תבחרו לספקו, הוא ישמש לייחוס עבודתכם אליכם.',
'recentchanges-label-minor' => 'זוהי עריכה משנית',
'recentchanges-label-bot' => 'עריכה זו בוצעה על ידי בוט',
'recentchanges-label-unpatrolled' => 'עריכה זו טרם נבדקה',
+'recentchanges-legend-newpage' => '$1 - דף חדש',
'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ביומיים האחרונים|ב־$2 הימים האחרונים}}, עד $5, $4:",
'rcnotefrom' => 'להלן <b>$1</b> השינויים האחרונים שבוצעו החל מתאריך <b>$2</b>:',
'rclistfrom' => 'הצגת שינויים חדשים החל מ־$1',
בדואר האלקטרוני: $PAGEEDITOR_EMAIL
באתר: $PAGEEDITOR_WIKI
-לא תהיינה הודעות על פעולות נוספות עד שתבקרו בדף. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
+לא תהיינה הודעות על פעולות נוספות עד שתבקרו בדף כשאתם מחוברים לחשבון. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
- מערכת ההודעות של {{SITENAME}}
+מערכת ההודעות של {{SITENAME}}
--
כדי לשנות את ההגדרות של הודעות הדוא"ל הנשלחות אליכם, בקרו בדף
'javascripttest-qunit-heading' => 'מערך בדיקות QUnit ל־JavaScript של מדיה־ויקי',
# Tooltip help for the actions
-'tooltip-pt-userpage' => '×\93×£ ×\94×\9eשת×\9eש ש×\9c×\9b×\9d',
+'tooltip-pt-userpage' => '×\93×£ ×\94×\9eשת×\9eש ש×\9c×\9a',
'tooltip-pt-anonuserpage' => 'דף המשתמש של משתמש אנונימי זה',
-'tooltip-pt-mytalk' => '×\93×£ ×\94ש×\99×\97×\94 ש×\9c×\9b×\9d',
+'tooltip-pt-mytalk' => '×\93×£ ×\94ש×\99×\97×\94 ש×\9c×\9a',
'tooltip-pt-anontalk' => 'שיחה על תרומות המשתמש האנונימי',
-'tooltip-pt-preferences' => '×\94×\94×¢×\93פ×\95ת ש×\9c×\9b×\9d',
+'tooltip-pt-preferences' => '×\94×\94×¢×\93פ×\95ת ש×\9c×\9a',
'tooltip-pt-watchlist' => 'רשימת הדפים שאתם עוקבים אחרי השינויים בהם',
-'tooltip-pt-mycontris' => 'רש×\99×\9eת ×\94תר×\95×\9e×\95ת ש×\9c×\9b×\9d',
+'tooltip-pt-mycontris' => 'רש×\99×\9eת ×\94תר×\95×\9e×\95ת ש×\9c×\9a',
'tooltip-pt-login' => 'מומלץ להירשם, אך אין חובה לעשות כן',
'tooltip-pt-anonlogin' => 'מומלץ להירשם, אך אין חובה לעשות כן',
'tooltip-pt-logout' => 'יציאה מהחשבון',
'tooltip-ca-nstab-help' => 'צפייה בדף העזרה',
'tooltip-ca-nstab-category' => 'צפייה בדף הקטגוריה',
'tooltip-minoredit' => 'סימון עריכה זו כמשנית',
-'tooltip-save' => 'שמירת השינויים שביצעתם',
+'tooltip-save' => 'שמירת השינויים שביצעת',
'tooltip-preview' => 'תצוגה מקדימה, אנא השתמשו באפשרות זו לפני השמירה!',
'tooltip-diff' => 'צפייה בשינויים שערכתם בטקסט',
'tooltip-compareselectedversions' => 'צפייה בהשוואת שתי גרסאות של דף זה',
'svg-long-desc' => 'קובץ SVG, הגודל המקורי: <span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3',
'svg-long-desc-animated' => 'קובץ SVG מונפש, הגודל המקורי: <span dir="ltr">$1 × $2</span> פיקסלים, גודל הקובץ: $3',
'svg-long-error' => 'קובץ SVG לא תקין: $1',
-'show-big-image' => 'ת×\9e×\95× ×\94 ×\91ר×\96×\95×\9c×\95צ×\99×\94 ×\92×\91×\95×\94×\94 ×\99×\95תר',
+'show-big-image' => '×\9cק×\95×\91×¥ ×\94×\9eק×\95ר×\99',
'show-big-image-preview' => 'גודל תצוגה זו: $1.',
'show-big-image-other' => '{{PLURAL:$2|רזולוציה אחרת|רזולוציות אחרות}}: $1.',
'show-big-image-size' => '<span dir="ltr">$1 × $2</span> פיקסלים',
'exif-compression-2' => 'קידוד הופמן מואתם חד-מימדי לאורך ריצה CCITT קבוצה 3',
'exif-compression-3' => 'קידוד פקס CCITT קבוצה 3',
'exif-compression-4' => 'קידוד פקס CCITT קבוצה 4',
+'exif-compression-6' => 'JPEG (ישן)',
+'exif-compression-8' => 'Deflate (של Adobe)',
+'exif-compression-32773' => 'PackBits (של Macintosh RLE)',
+'exif-compression-32946' => 'Deflate (של PKZIP)',
'exif-copyrighted-true' => 'מוגן בזכויות יוצרים',
'exif-copyrighted-false' => 'מצב זכויות היוצרים לא הוגדר',
'exif-isospeedratings-overflow' => 'מעל 65535',
+'exif-maxaperturevalue-value' => '$1 APEX (יחידות: f/$2)',
+
'exif-iimcategory-ace' => 'אמנויות, תרבות ובידור',
'exif-iimcategory-clj' => 'פשע ומשפט',
'exif-iimcategory-dis' => 'אסונות ותאונות',
# External editor support
'edit-externally' => 'עריכת קובץ זה באמצעות יישום חיצוני',
-'edit-externally-help' => '(ראו את [//www.mediawiki.org/wiki/Manual:External_editors הוראות ההתקנה] למידע נוסף)',
+'edit-externally-help' => '(ראו את [https://www.mediawiki.org/wiki/Manual:External_editors הוראות ההתקנה] למידע נוסף)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'הכול',
'version-hook-subscribedby' => 'הפונקציה הרושמת',
'version-version' => '(גרסה $1)',
'version-license' => 'רישיון',
-'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[//www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
+'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[https://www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
'version-poweredby-others' => 'אחרים',
'version-poweredby-translators' => 'מתרגמי translatewiki.net',
'version-credits-summary' => 'אנו רוצים להודות לאנשים הבאים על תרומתם ל[[Special:Version|מדיה־ויקי]].',
# Special:SpecialPages
'specialpages' => 'דפים מיוחדים',
-'specialpages-note' => '----
-* דפים מיוחדים רגילים.
+'specialpages-note-top' => 'מקרא',
+'specialpages-note' => '* דפים מיוחדים רגילים.
* <span class="mw-specialpagerestricted">דפים מיוחדים מוגבלים.</span>',
'specialpages-group-maintenance' => 'דיווחי תחזוקה',
'specialpages-group-other' => 'דפים מיוחדים אחרים',
'limitreport-expansiondepth' => 'עומק הפריסה הגבוה ביותר',
'limitreport-expensivefunctioncount' => 'מספר פונקציות המפענח שגוזלות משאבים',
+# Special:ExpandTemplates
+'expandtemplates' => 'פריסת תבניות',
+'expand_templates_intro' => 'הדף המיוחד הזה מקבל כמות מסוימת של טקסט ופורס את כל התבניות שבתוכו באופן רקורסיבי.
+הוא גם פורס פונקציות מפענח כגון
+<code><nowiki>{{</nowiki>#תנאי:...}}</code>, ומשתנים כגון
+<code><nowiki>{{</nowiki>יום נוכחי}}</code>.
+למעשה, הוא פורס פחות או יותר כל דבר בסוגריים מסולסלים כפולים.',
+'expand_templates_title' => 'כותרת ההקשר לפענוח, בשביל משתנים כגון {{FULLPAGENAME}} וכדומה:',
+'expand_templates_input' => 'טקסט הקלט:',
+'expand_templates_output' => 'תוצאה',
+'expand_templates_xml_output' => 'פלט XML',
+'expand_templates_ok' => 'אישור',
+'expand_templates_remove_comments' => 'הסרת הערות',
+'expand_templates_remove_nowiki' => 'הסרת תגי <nowiki> בתוצאה',
+'expand_templates_generate_xml' => 'הצגת עץ הפענוח של XML',
+'expand_templates_preview' => 'תצוגה מקדימה',
+
);
'ok' => 'ठीक है',
'retrievedfrom' => '"$1" से लिया गया',
'youhavenewmessages' => 'आपके लिए $1 हैं। ($2)',
-'newmessageslink' => 'नए सन्देश',
-'newmessagesdifflink' => 'पिछला बदलाव',
'youhavenewmessagesfromusers' => 'आपके लिये {{PLURAL:$3|एक अन्य सदस्य|$3 अन्य सदस्यों}} के $1 हैं। ($2)',
'youhavenewmessagesmanyusers' => 'आपके लिये $1 हैं। ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|एक नया सन्देश|नये सन्देश}}',
'preferences' => 'मेरी वरीयताएँ',
'mypreferences' => 'पसंद',
'prefs-edits' => 'संपादन संख्या:',
-'prefsnologin' => 'लॉग इन नहीं किया है',
-'prefsnologintext' => 'वरीयताएँ बदलने के लिए आपको <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} सत्रारंभ]</span> करना होगा।',
'changepassword' => 'कूटशब्द बदलें',
'prefs-skin' => 'त्वचा',
'skin-preview' => 'झलक',
'recentchanges-label-minor' => 'यह एक छोटा सम्पादन है',
'recentchanges-label-bot' => 'यह संपादन एक बॉट द्वारा किया गया था',
'recentchanges-label-unpatrolled' => 'यह संपादन अभी जाँचा नहीं गया है',
+'recentchanges-legend-newpage' => '$1 - नया पन्ना',
'rcnote' => "$5, $4 के पहले के '''$2''' {{PLURAL:$2|दिन|दिनों}} में {{PLURAL:$1|हुआ '''$1''' बदलाव निम्न है| हुए '''$1''' बदलाव निम्न हैं}}।",
'rcnotefrom' => "नीचे '''$2''' के बाद से ('''$1''' तक) हुए बदलाव दर्शाए गये हैं।",
'rclistfrom' => '$1 से नये बदलाव दिखाएँ',
'allmessagesname' => 'नाम',
'allmessagesdefault' => 'डिफॉल्ट पाठ',
'allmessagescurrent' => 'वर्तमान पाठ',
-'allmessagestext' => 'ये मीडियाविकि नामस्थान में उपलब्ध प्रणाली संदेशों की एक सूची है। यदि आप सामान्य मीडियाविकि क्षेत्रीयकरण में योगदान देना चाहें तो कृपया [//www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरण] व [//translatewiki.net translatewiki.net] को देखें।',
+'allmessagestext' => 'ये मीडियाविकि नामस्थान में उपलब्ध प्रणाली संदेशों की एक सूची है। यदि आप सामान्य मीडियाविकि क्षेत्रीयकरण में योगदान देना चाहें तो कृपया [https://www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरण] व [//translatewiki.net translatewiki.net] को देखें।',
'allmessagesnotsupportedDB' => "इस पृष्ठ का इस्तेमाल नहीं कर सकते क्योंकी '''\$wgUseDatabaseMessages''' बंद हैं।",
'allmessages-filter-legend' => 'छानें',
'allmessages-filter' => 'अनुकूलन स्थिति के आधार पर छानें:',
# External editor support
'edit-externally' => 'बाहरी प्रणाली का उपयोग करते हुए इस सञ्चिका को सम्पादित करें ।',
-'edit-externally-help' => '(और जानकारी के लिए [//www.mediawiki.org/wiki/Manual:External_editors जमाव निर्देश] देखें)',
+'edit-externally-help' => '(और जानकारी के लिए [https://www.mediawiki.org/wiki/Manual:External_editors जमाव निर्देश] देखें)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'सभी',
'version-hook-subscribedby' => 'ने सदस्यत्व लिया',
'version-version' => '(अवतरण $1)',
'version-license' => 'अनुज्ञापत्र',
-'version-poweredby-credits' => "यह विकि '''[//www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1 $2 ।",
+'version-poweredby-credits' => "यह विकि '''[https://www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1 $2 ।",
'version-poweredby-others' => 'अन्य',
'version-software' => 'इन्स्टॉल की हुई प्रणाली',
'version-software-product' => 'प्रोडक्ट',
# Special:SpecialPages
'specialpages' => 'विशेष पृष्ठ',
-'specialpages-note' => '----
-* साधारण विशेष पृष्ठ।
+'specialpages-note' => '* साधारण विशेष पृष्ठ।
* <span class="mw-specialpagerestricted">प्रतिबंधित विशेष पृष्ठ।</span>',
'specialpages-group-maintenance' => 'अनुरक्षण रिपोर्ट',
'specialpages-group-other' => 'अन्य विशेष पृष्ठ',
'duration-centuries' => '$1 {{PLURAL:$1|शताब्दी}}',
'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्दी}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'साँचा विस्तार',
+'expand_templates_intro' => 'यह विशेष पृष्ठ पाठ इनपुट लेता है और सभी साँचों को विस्तृत करता है।
+यह <code><nowiki>{{</nowiki>#language:…}}</code> जैसे पार्सर फंक्शनों और
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> जैसे वेरियेबलों को भी विस्तृत करता है।
+यह दोहरे कोष्ठकों में दिया लगभग सब कुछ विस्तृत करता है।',
+'expand_templates_title' => 'कन्टेक्स्ट शीर्षक, जैसे {{FULLPAGENAME}} आदि के लिए:',
+'expand_templates_input' => 'इनपुट पाठ:',
+'expand_templates_output' => 'परिणाम',
+'expand_templates_xml_output' => 'XML आउटपुट',
+'expand_templates_ok' => 'ओके',
+'expand_templates_remove_comments' => 'टिप्पणी हटायें',
+'expand_templates_remove_nowiki' => 'परिणाम में <nowiki> टैग हटाएँ',
+'expand_templates_generate_xml' => 'XML का पार्स (parse) वृक्ष दर्शायें',
+'expand_templates_preview' => 'झलक',
+
);
'ok' => 'OK',
'retrievedfrom' => '"$1" se lawa gais hae',
'youhavenewmessages' => 'Aapke pass hai $1 ($2).',
-'newmessageslink' => 'nawaa khabar',
-'newmessagesdifflink' => 'pahile waala badlao',
'youhavenewmessagesfromusers' => 'Aap ke lage {{PLURAL:$3|duusra sadasya|$3 sadasya}} ke lage se $1 hae ($2).',
'youhavenewmessagesmanyusers' => 'Aap ke lage dher sadasya se $1 hae ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ek nawaa sandes|nawaa sandes}}',
'preferences' => 'Pasand',
'mypreferences' => 'Pasand',
'prefs-edits' => 'Badlao ke number:',
-'prefsnologin' => 'Aap abhi logged in nai hai',
-'prefsnologintext' => 'Aaap ke <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> chaahi rahe ke user preferences ke badle ke khatir.',
'changepassword' => 'Pasword ke badlo',
'prefs-skin' => 'Skin',
'skin-preview' => 'Jhalak',
'recentchanges-label-minor' => 'Ii ek chhota badlao hae',
'recentchanges-label-bot' => 'Ii badlao ke ek bot karis hae',
'recentchanges-label-unpatrolled' => 'Ii badlao pe abhi pahraa nai dewa gais hae.',
+'recentchanges-legend-newpage' => '$1 - nawaa panna',
'rcnote' => "Niche {{PLURAL:$1|hai '''1''' badlao|aakhri hai '''$1''' badlao}} pahile {{PLURAL:$2|din|'''$2''' din}}, $5, $4 talak.",
'rcnotefrom' => "Niche '''$2''' se badlao hai ('''$1''' tak )",
'rclistfrom' => '$1 se suruu kar ke nawaa badlao dekhao',
'allmessagesdefault' => 'Default text',
'allmessagescurrent' => 'Abhi ke text',
'allmessagestext' => 'Ii ek system sandes ke suchi hai jon ki MediaWiki namespace me pawa jaae sake hai.
-Agar aap generic MediaWiki localisation ke yogdaan de mangtaa hai tab meharbani kar ke [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] aur [//translatewiki.net translatewiki.net] pe jao.',
+Agar aap generic MediaWiki localisation ke yogdaan de mangtaa hai tab meharbani kar ke [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] aur [//translatewiki.net translatewiki.net] pe jao.',
'allmessagesnotsupportedDB' => "Ii panna ke kaam me nai lawa jaae sake hai kahe ki '''\$wgUseDatabaseMessages''' ke band kar dewa gais hai.",
'allmessages-filter-legend' => 'Chaalo',
'allmessages-filter' => 'Customisation state se chhaano',
# External editor support
'edit-externally' => 'Ii file ke bahaari program me kaam me laae ke badlo',
-'edit-externally-help' => '(Aur jaankari khatir [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ke dekho)',
+'edit-externally-help' => '(Aur jaankari khatir [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] ke dekho)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'sab',
'ok' => 'Sige',
'retrievedfrom' => 'Ginkuha halin sa "$1"',
'youhavenewmessages' => 'Ikaw may $1 ($2).',
-'newmessageslink' => 'mga bag-ong mensahe',
-'newmessagesdifflink' => 'nagligad nga ginbag-o',
'youhavenewmessagesfromusers' => 'May yara ka sang $1 halin sa {{PLURAL:$3|lain nga manuggamit|$3 mga manuggamit}} ($2).',
'youhavenewmessagesmanyusers' => 'May yara ka sang $1 halin sa madamo nga manuggamit ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|isa ka bag-o nga mensahe|bag-o nga mga mensahe}}',
'preferences' => 'Mga Ginabasehan',
'mypreferences' => 'Mga Ginabasehan',
'prefs-edits' => 'Numero sang mga gin-ilisan:',
-'prefsnologin' => 'Wala naka-sulod',
-'prefsnologintext' => 'Kinahanglan nga ikaw <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakasulod]</span> agod nga mabuhat ang pag-ilis sang mga ginapalabi.',
'changepassword' => 'Ilisan ang pasword',
'prefs-skin' => 'Panit',
'skin-preview' => 'Ipakita subong',
# External editor support
'edit-externally' => 'Islan ini nga file gamit ang eksternal nga aplikasyon',
-'edit-externally-help' => '(Lantawa ang [//www.mediawiki.org/wiki/Manual:External_editors tudlo sa pag panugod] para sa mga dugang nga impormasyon)',
+'edit-externally-help' => '(Lantawa ang [https://www.mediawiki.org/wiki/Manual:External_editors tudlo sa pag panugod] para sa mga dugang nga impormasyon)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tanan',
'revdelete-unrestricted' => 'ginkakas nga pagbawal sa mga administrador',
'rightsnone' => '(wala)',
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Ipakita subong',
+
);
'ok' => 'U redu',
'retrievedfrom' => 'Dobavljeno iz "$1"',
'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'nove poruke',
-'newmessagesdifflink' => 'zadnja promjena na stranici za razgovor',
'youhavenewmessagesfromusers' => 'Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).',
'youhavenewmessagesmanyusers' => 'Imate $1 od više suradnika ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
'preferences' => 'Postavke',
'mypreferences' => 'Moje postavke',
'prefs-edits' => 'Broj uređivanja:',
-'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Morate biti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prijavljeni]</span> za podešavanje suradničkih postavki.',
'changepassword' => 'Promjena lozinke',
'prefs-skin' => 'Izgled',
'skin-preview' => 'Pregled',
'recentchanges-label-minor' => 'Ovo je manja izmjena',
'recentchanges-label-bot' => 'Ovu izmjenu napravio je bot',
'recentchanges-label-unpatrolled' => 'Ova izmjena još nije pregledana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
'rcnote' => "{{PLURAL:$1|Slijedi zadnja '''$1''' promjena|Slijede zadnje '''$1''' promjene|Slijedi zadnjih '''$1''' promjena}} u {{PLURAL:$2|zadnjem '''$2''' danu|zadnja '''$2''' dana|zadnjih '''$2''' dana}}, od $5, $4.",
'rcnotefrom' => 'Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).',
'rclistfrom' => 'Prikaži nove promjene počevši od $1',
'allmessagesname' => 'Ime',
'allmessagesdefault' => 'Prvotni tekst',
'allmessagescurrent' => 'Trenutačni tekst',
-'allmessagestext' => 'Ovo je popis svih sistemskih poruka u imenskom prostoru MediaWiki. Molimo posjetite [//www.mediawiki.org/wiki/Localisation lokalizaciju MediaWikija] i [//translatewiki.net translatewiki.net] ako želite doprinijeti lokalizaciji MediaWiki softvera.',
+'allmessagestext' => 'Ovo je popis svih sistemskih poruka u imenskom prostoru MediaWiki. Molimo posjetite [https://www.mediawiki.org/wiki/Localisation lokalizaciju MediaWikija] i [//translatewiki.net translatewiki.net] ako želite doprinijeti lokalizaciji MediaWiki softvera.',
'allmessagesnotsupportedDB' => "Ova stranica ne može biti korištena jer je isključen parametar '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Filtriraj',
'allmessages-filter' => 'Filtriraj prema prilagođenom obliku:',
# External editor support
'edit-externally' => 'Uredi koristeći se vanjskom aplikacijom',
-'edit-externally-help' => '(Vidi [//www.mediawiki.org/wiki/Manual:External_editors setup upute] za više informacija)',
+'edit-externally-help' => '(Vidi [https://www.mediawiki.org/wiki/Manual:External_editors setup upute] za više informacija)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'sve',
'version-hook-subscribedby' => 'Pretplaćeno od',
'version-version' => '(Inačica $1)',
'version-license' => 'Licencija',
-'version-poweredby-credits' => "Ovaj wiki pogoni '''[//www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
+'version-poweredby-credits' => "Ovaj wiki pogoni '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
'version-poweredby-others' => 'ostali',
'version-credits-summary' => 'Željeli bismo zahvaliti sljedećim suradnicima na njihovom doprinosu [[Special:Version|MediaWikiju]].',
'version-license-info' => 'MediaWiki je slobodni softver; možete ga distribuirati i/ili mijenjati pod uvjetima GNU opće javne licencije u obliku u kojem ju je objavila Free Software Foundation; bilo verzije 2 licencije, ili (Vama na izbor) bilo koje kasnije verzije.
# Special:SpecialPages
'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* Normalne posebne stranice
+'specialpages-note' => '* Normalne posebne stranice
* <span class="mw-specialpagerestricted">Posebne stranice s ograničenim pristupom.</span>',
'specialpages-group-maintenance' => 'Izvještaji za održavanje',
'specialpages-group-other' => 'Ostale posebne stranice',
# Image rotation
'rotate-comment' => 'Sliku je $1 zaokrenuo za {{PLURAL:$1|stupanj|stupnja|stupnjeva}} u smjeru kazaljke na satu.',
+# Special:ExpandTemplates
+'expandtemplates' => 'Prikaz sadržaja predložaka',
+'expand_templates_intro' => 'Ova posebna stranica omogućuje unos wikiteksta i prikazuje njegov rezultat,
+uključujući i (rekurzivno, tj. potpuno) sve uključene predloške u wikitekstu.
+Prikazuje i rezultate funkcija kao <nowiki>{{</nowiki>#language:...}} i varijabli
+kao <nowiki>{{</nowiki>CURRENTDAY}}. Funkcionira pozivanjem parsera same MedijeWiki.',
+'expand_templates_title' => 'Kontekstni naslov stranice, za {{FULLPAGENAME}} i sl.:',
+'expand_templates_input' => 'Ulazni tekst:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'XML kod',
+'expand_templates_ok' => 'Prikaži',
+'expand_templates_remove_comments' => 'Ukloni komentare',
+'expand_templates_remove_nowiki' => 'Ukloni <nowiki> tagove u rezultatima.',
+'expand_templates_generate_xml' => 'Prikaži XML stablo',
+'expand_templates_preview' => 'Vidi kako će izgledati',
+
);
'tog-hidepatrolled' => 'Dohladawane změny w aktualnych změnach schować',
'tog-newpageshidepatrolled' => 'Dohladowane strony z lisćiny nowych stronow schować',
'tog-extendwatchlist' => 'Lisćinu wobkedźbowankow wočinić, zo by wšě změny widźał, nic jenož najnowše',
-'tog-usenewrc' => 'Skupinske změny po stronje w aktualnych změnach a wobkedźbowankach (trjeba JavaScript)',
+'tog-usenewrc' => 'Změny po stronje w aktualnych změnach a wobkedźbowankach zeskupjeć',
'tog-numberheadings' => 'Nadpisma awtomatisce čisłować',
-'tog-showtoolbar' => 'Gratowu lajstu pokazać (wužaduje sej JavaScript)',
-'tog-editondblclick' => 'Strony z dwójnym kliknjenjom wobdźěłować (wužaduje sej JavaScript)',
+'tog-showtoolbar' => 'Wobdźěłowansku lajstu pokazać',
+'tog-editondblclick' => 'Strony z dwójnym kliknjenjom wobdźěłować',
'tog-editsection' => 'Wobdźěłowanje jednotliwych wotrězkow přez wotkazy [wobdźěłać] zmóžnić',
-'tog-editsectiononrightclick' => 'Wobdźěłowanje jednotliwych wotrězkow přez kliknjenje z prawej tastu na nadpisma wotrězkow zmóžnić (wužaduje sej JavaScript)',
+'tog-editsectiononrightclick' => 'Wobdźěłowanje wotrězkow přez kliknjenje z prawej tastu na nadpisma wotrězkow zmóžnić',
'tog-showtoc' => 'Zapis wobsaha pokazać (za strony z wjace hač 3 nadpismami)',
'tog-rememberpassword' => 'Přizjewjenje na tutym wobhladowaku sej spomjatkować (za maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})',
'tog-watchcreations' => 'Strony, kotrež wutworjam a dataje, kotrež nahrawam, swojim wobkedźbowankam přidać',
'tog-shownumberswatching' => 'Ličbu wobkedźbowacych wužiwarjow pokazać',
'tog-oldsig' => 'Eksistowaca signatura:',
'tog-fancysig' => 'Ze signaturu kaž z wikitekstom wobchadźeć (bjez awtomatiskeho wotkaza)',
-'tog-uselivepreview' => 'Live-přehlad wužiwać (wužaduje sej JavaScript) (eksperimentalny)',
+'tog-uselivepreview' => 'Live-přehlad wužiwać (eksperimentalny)',
'tog-forceeditsummary' => 'Mje skedźbnić, jeli zabudu zjeće',
'tog-watchlisthideown' => 'Moje změny we wobkedźbowankach schować',
'tog-watchlisthidebots' => 'Změny awtomatiskich programow (botow) we wobkedźbowankach schować',
'tog-showhiddencats' => 'Schowane kategorije pokazać',
'tog-norollbackdiff' => 'Rozdźěl po wróćostajenju zanjechać',
'tog-useeditwarning' => 'Warnować, hdyž so wobdźěłowanska strona z njeskładowanymi změnami wopušća',
+'tog-prefershttps' => 'Po přizjewjenju přeco wěsty zwisk wužiwać',
'underline-always' => 'Přeco',
'underline-never' => 'Ženje',
'newwindow' => '(wočinja so w nowym woknje)',
'cancel' => 'Přetorhnyć',
'moredotdotdot' => 'Wjace…',
-'morenotlisted' => 'Dalše njepodate...',
+'morenotlisted' => 'Tuta lisćina dospołna njeje.',
'mypage' => 'Strona',
'mytalk' => 'Diskusija',
'anontalk' => 'Diskusijna strona tuteje IP.adresy',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
'aboutsite' => 'Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}',
'aboutpage' => 'Project:Wo',
-'copyright' => 'Wobsah steji pod $1.',
+'copyright' => 'Wobsah pod $1 k dispoziciji steji, jeli njeje so hinak podało.',
'copyrightpage' => '{{ns:project}}:Awtorske prawa',
'currentevents' => 'Aktualne podawki',
'currentevents-url' => 'Project:Aktualne podawki',
'ok' => 'W porjadku',
'retrievedfrom' => 'Z "$1"',
'youhavenewmessages' => 'Maš $1 ($2).',
-'newmessageslink' => 'nowe powěsće',
-'newmessagesdifflink' => 'poslednja změna',
'youhavenewmessagesfromusers' => 'Maš $1 wot {{PLURAL:$3|druheho wužiwarja|$3 wužiwarjow|$3 wužiwarjow|$3 wužiwarjow}} ($2).',
'youhavenewmessagesmanyusers' => 'Maš $1 wot wjele wužiwarjow ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|nowu powěsć|nowej powěsći|nowe powěsće}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|poslednja změna|poslednjej změnje|poslednje změny|poslednje změny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|nowu powěsć|999=nowej powěsći|999=nowe powěsći}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|poslednja změna|999=poslednjej změnje|999=poslednje změny}}',
'youhavenewmessagesmulti' => 'Maš nowe powěsće: $1',
'editsection' => 'wobdźěłać',
'editold' => 'wobdźěłać',
# General errors
'error' => 'Zmylk',
'databaseerror' => 'Zmylk w datowej bance',
+'databaseerror-text' => 'Zmylk w datowej bance je wustupił.
+To móže na programowy zmylk w softwarje pokazać.',
+'databaseerror-textcl' => 'Zmylk w datowej bance je wustupił.',
+'databaseerror-query' => 'Wotprašenje: $1',
+'databaseerror-function' => 'Funkcija: $1',
+'databaseerror-error' => 'Zmylk: $1',
'laggedslavemode' => "'''Kedźbu:''' Je móžno, zo strona žane zaktualizowanja njewobsahuje.",
'readonly' => 'Datowa banka je zawrjena',
'enterlockreason' => 'Zapodaj přičinu za zawrjenje a přibližny čas, hdy budźe zawrjenje zběhnjene',
'cannotdelete-title' => 'Strona "$1" njehodźi so zhašeć',
'delete-hook-aborted' => 'Zhašenje přez hoku přetorhnjene.
Njeje žane wujasnjenje podała.',
+'no-null-revision' => 'Nowa nulowa wersija za stronu "$1" njeda so wutworić',
'badtitle' => 'Wopačny titul',
'badtitletext' => 'Požadane mjeno strony běše njepłaćiwy, prózdny abo njekorektny titul z mjezyrěčneho abo interwikijoweho wotkaza. Snano wobsahuje jedne znamješko abo wjacore znamješka, kotrež w titulach dowolene njejsu.',
'perfcached' => 'Slědowace daty pochadźeja z pufrowaka a njejsu snano cyle aktualne. Maksimalnje {{PLURAL:$1|jedyn wuslědk|$1 wuslědkaj|$1 wuslědki|$1 wuslědkow}} w pufrowaku k dispoziciji {{PLURAL:$1|steji|stejitej|steja|steji}}.',
'invalidtitle-knownnamespace' => 'Njepłaćiwy titul z mjenowym rumom "$2" a tekstom "$3"',
'invalidtitle-unknownnamespace' => 'Njepłaćiwy titul z njeznatym mjenowym rumom $1 a tekstom "$2"',
'exception-nologin' => 'Njejsy přizjewjeny',
-'exception-nologin-text' => 'Tuta strona abo akcija sej wužaduje, zo sy na tutym wikiju přizjewjeny.',
+'exception-nologin-text' => 'Prošu [[Special:Userlogin|přizjew so]], zo by přistup na tutu stronu abo akciju měł.',
+'exception-nologin-text-manual' => 'Zo by přistup na tutu stronu abo akciju měł, dyrbiš so $1.',
# Virus scanner
'virus-badscanner' => "Špatna konfiguracija: Njeznaty wirusowy skener: ''$1''",
# Login and logout pages
'logouttext' => "'''{{GENDER:|Sy|Sy}} nětko {{GENDER:|wotzjewjeny|wotzjewjena}}.'''
-Móžeš {{GRAMMAR:akuzatiw|{{SITENAME}}}} nětko anonymnje dale wužiwać abo so ze samsnym abo druhim wužiwarskim mjenom <span class='plainlinks'>[$1 zaso přizjewić]</span>.
-Wobkedźbuj, zo so někotre strony dale jewja, kaž by hišće přizjewjeny był, doniž pufrowak swojeho wobhladowaka njewuprózdnješ.",
+Kedźbu: Je móžno, zo někotre strony so snano takle pokazuja, kaž by ty hišće přizjewjeny był, doniž pufrowak twojeho wobhladowaka njewuprózdniš.",
'welcomeuser' => 'Witaj $1',
'welcomecreation-msg' => 'Twoje konto bu wutworjene.
Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENAME}}}}]] změnić.',
'yourname' => 'Wužiwarske mjeno:',
'userlogin-yourname' => 'Wužiwarske mjeno',
'userlogin-yourname-ph' => 'Zapodaj swoje wužiwarske mjeno',
+'createacct-another-username-ph' => 'Wužiwarske mjeno zapodać',
'yourpassword' => 'Hesło:',
'userlogin-yourpassword' => 'Hesło',
'userlogin-yourpassword-ph' => 'Zapodaj swoje hesło',
'gotaccount' => 'Maš hižo wužiwarske konto? $1.',
'gotaccountlink' => 'Přizjewić',
'userlogin-resetlink' => 'Přizjewjenske daty zabył?',
-'userlogin-resetpassword-link' => 'Hesło anulować',
+'userlogin-resetpassword-link' => 'Sy swoje hesło zabył?',
'helplogin-url' => 'Help:Přizjewić',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc za přizjewjenje]]',
+'userlogin-loggedin' => 'Sy hižo jako {{GENDER:$1|$1 přizjewjeny|$1 přizjewjena}}. Wužij slědowacy formular, zo by so jako druhi wužiwar přizjewił.',
+'userlogin-createanother' => 'Dalše konto załožić',
'createacct-join' => 'Zapodaj deleka swoje informacije.',
+'createacct-another-join' => 'Zapodaj deleka informacije noweho konta.',
'createacct-emailrequired' => 'E-mejlowa adresa',
'createacct-emailoptional' => 'E-mejlowa adresa (opcionalny)',
'createacct-email-ph' => 'Zapodaj swoju e-mejlowu adresu',
-'createaccountmail' => 'Nachwilne přidatne hesło wužiwać a jo na slědowacu e-mejlowu adresu pósłać',
+'createacct-another-email-ph' => 'E-mejlowu adresu zapodać',
+'createaccountmail' => 'Nachwilne připadne hesło wužiwać a jo na slědowacu e-mejlowu adresu pósłać',
'createacct-realname' => 'Woprawdźite mjeno (opcionalny)',
'createaccountreason' => 'Přičina:',
'createacct-reason' => 'Přičina',
'createacct-captcha' => 'Wěstotna kontrola',
'createacct-imgcaptcha-ph' => 'Zapodaj tekst, kotryž deleka widźiš',
'createacct-submit' => 'Twoje konto załožić',
+'createacct-another-submit' => 'Dalše konto załožić',
'createacct-benefit-heading' => '{{SITENAME}} je so wot ludźi kaž ty wutworił.',
'createacct-benefit-body1' => '{{PLURAL:$1|změna|změnje|změny|změnow}}',
'createacct-benefit-body2' => '{{PLURAL:$1|strona|stronje|strony|stronow}}',
'passwordsent' => 'Nowe hesło bu na e-mejlowu adresu zregistrowanu za wužiwarja „$1” pósłane.
Prošu přizjew so znowa, po tym zo sy je přijał.',
'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.',
+'eauthentsent' => 'Wobkrućenska e-mejlka je so na podatu e-mejlowu adresu pósłała.
+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 woprawdźe tebi słuša.',
'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.',
+'emailauthenticated' => 'Twoja e-mejlowa adresa je so $2 $3 hodź. wobkrućiła.',
'emailnotauthenticated' => 'Twoja e-mejlowa adresa hišće wobkrućena njeje. Žana e-mejlka budźe so za slědowace funkcije słać.',
'noemailprefs' => 'Podaj e-mejlowu adresu w swojich nastajenjach, zo bychu tute funkcije k dispoziciji stali.',
'emailconfirmlink' => 'Swoju e-mejlowu wobkrućić',
Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutworiło.',
'usernamehasherror' => 'Wužiwarske mjeno njesmě hašowe znamješka wpbsahować',
-'login-throttled' => 'Sy přehusto spytał so přizjewić. Počakaj prošu, prjedy hač znowa spytaš.',
+'login-throttled' => 'Sy přehusto spytał so přizjewić. Počakaj prošu $1, prjedy hač hišće raz spytaš.',
'login-abort-generic' => 'Twoje přizjewjenje njebě wuspěšne - přetorhnjene',
'loginlanguagelabel' => 'Rěč: $1',
'suspicious-userlogout' => 'Twoje naprašowanje za wotzjewjenje bu wotpokazane, dokelž zda so, jako by so přez wobškodźeny wobhladowak abo pufrowacy proksy pósłało',
+'createacct-another-realname-tip' => '* Woprawdźite mjeno je opcionalne.
+Jeli jo podaš, budźe so to wužiwać, zo by přinoški přirjadowało.',
# Email sending
'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()',
'newpassword' => 'Nowe hesło:',
'retypenew' => 'Nowe hesło wospjetować:',
'resetpass_submit' => 'Hesło posrědkować a so přizjewić',
-'changepassword-success' => 'Twoje hesło bu wuspěšnje změnjene! Nětko přizjewjenje běži...',
+'changepassword-success' => 'Twoje hesło je so wuspěšnje změniło!',
'resetpass_forbidden' => 'Hesła njedadźa so změnić.',
'resetpass-no-info' => 'Dyrbiš so přizjewić, zo by direktny přistup na tutu stronu měł.',
'resetpass-submit-loggedin' => 'Hesło změnić',
# Special:PasswordReset
'passwordreset' => 'Hesło wróćo stajić',
'passwordreset-text-one' => 'Wupjelń tutón formular, zo by swoje hesło anulował.',
-'passwordreset-text-many' => '{{PLURAL:$1|Zapodaj jedyn z datow, zo by swoje hesło anulował.}}',
+'passwordreset-text-many' => '{{PLURAL:$1|Zapodaj jedne z polow, zo by swoje hesło wróćo stajił.}}',
'passwordreset-legend' => 'Hesło wróćo stajić',
'passwordreset-disabled' => 'Wróćostajenje hesłow je so na tutym wikiju znjemóžniło.',
'passwordreset-emaildisabled' => 'E-mejlowe funkcije su so na tutym wikiju znjemóžnili.',
'changeemail-submit' => 'E-mejlowu adresu změnić',
'changeemail-cancel' => 'Přetorhnyć',
+# Special:ResetTokens
+'resettokens' => 'Tokeny wróćo stajić',
+'resettokens-no-tokens' => 'Tokeny za wróćostajenje njejsu.',
+'resettokens-legend' => 'Tokeny wróćo stajić',
+'resettokens-tokens' => 'Tokeny:',
+'resettokens-token-label' => '$1 (aktualna hódnota: $2)',
+'resettokens-done' => 'Tokeny wróćostajene.',
+'resettokens-resetbutton' => 'Wubrane tokeny wróćo stajić',
+
# Edit page toolbar
'bold_sample' => 'Tučny tekst',
'bold_tip' => 'Tučny tekst',
'loginreqlink' => 'přizjewić',
'loginreqpagetext' => 'Dyrbiš so $1, zo by strony čitać móhł.',
'accmailtitle' => 'Hesło bu pósłane.',
-'accmailtext' => "Připadnje spłodźene hesło za [[User talk:$1|$1]] bu do $2 pósłane.
-
-Hesło za tute nowe konto da so na stronje ''[[Special:ChangePassword|hesło změnić]]'' při přizjewjenju změnić.",
+'accmailtext' => "Připadnje spłodźene hesło za [[User talk:$1|$1]] bu na $2 pósłane. Daj so na stronje ''[[Special:ChangePassword|hesło změnić]]'' při přizjewjenju změnić.",
'newarticle' => '(Nowy)',
'newarticletext' => 'Sy wotkaz k stronje slědował, kotraž hišće njeeksistuje. Zo by stronu wutworił, wupjelń slědowace tekstowe polo (hlej [[{{MediaWiki:Helppage}}|stronu pomocy]] za dalše informacije). Jeli sy zmylnje tu, klikń prosće na tłóčatko <b>Wróćo</b> we swojim wobhladowaku.',
'anontalkpagetext' => "---- ''To je diskusijna strona za anonymneho wužiwarja, kiž hišće konto wutworił njeje abo je njewužiwa. Dyrbimy tohodla numerisku IP-adresu wužiwać, zo bychmy jeho/ju identifikowali. Tajka IP-adresa hodźi so wot wjacorych wužiwarjow zhromadnje wužiwać. Jeli sy anonymny wužiwar a měniš, zo buchu irelewantne komentary k tebi pósłane, [[Special:UserLogin/signup|wutwor prošu konto]] abo [[Special:UserLogin|přizjew so]], zo by přichodnu šmjatańcu z anonymnymi wužiwarjemi wobešoł.''",
Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na schowany tekst přistup měć a jón z pomocu samsneho interfejsa wobnowić, chibazo tež přidatne prawa su wobmjezowane.",
'revdelete-confirm' => 'Prošu potwjerdź, zo chceš to činić, zo rozumiš konsekwency a zo činiš to po [[{{MediaWiki:Policy-url}}|prawidłach]].',
'revdelete-suppress-text' => "Potłóčenje dyrbjało so '''jenož''' za slědowace pady wužiwać:
+* Potencielnje křiwdźace informacije
* Njepřihódne wosobinske informacije
-*: ''bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
+*: ''Bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
'revdelete-legend' => 'Wobmjezowanja za widźomnosć nastajić',
-'revdelete-hide-text' => 'Tekst tuteje wersije schować',
+'revdelete-hide-text' => 'Tekst wersije',
'revdelete-hide-image' => 'Wobsah wobraza schować',
'revdelete-hide-name' => 'Akciju a cil schować',
-'revdelete-hide-comment' => 'Zjeće schować',
-'revdelete-hide-user' => 'Wužiwarske mjeno/IP-adresu schować',
+'revdelete-hide-comment' => 'Zjeće změnow',
+'revdelete-hide-user' => 'Mjeno/IP-adresa wobdźěłarja',
'revdelete-hide-restricted' => 'Daty wot administratorow kaž tež te druhich wužiwarjow potłóčić',
'revdelete-radio-same' => '(njezměnić)',
-'revdelete-radio-set' => 'Haj',
-'revdelete-radio-unset' => 'Ně',
+'revdelete-radio-set' => 'Schowany',
+'revdelete-radio-unset' => 'Widźomny',
'revdelete-suppress' => 'Přičinu wušmórnjenja tež za administratorow schować',
'revdelete-unsuppress' => 'Wobmjezowanja za wobnowjene wersije zběhnyć',
'revdelete-log' => 'Přičina:',
'compareselectedversions' => 'Wubranej wersiji přirunać',
'showhideselectedversions' => 'Wubrane wersije pokazać/schować',
'editundo' => 'cofnyć',
+'diff-empty' => '(Žadyn rozdźěl)',
'diff-multi' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
'diff-multi-manyusers' => '({{PLURAL:$1|Jedna mjezywersija|$1 mjezywersiji|$1 mjezywersije|$1 mjezywersijow}} wot wjace hač {{PLURAL:$2|jednoho wužiwarja|$2 wužiwarjow|$2 wužiwarjow|$2 wužiwarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
'difference-missing-revision' => '{{PLURAL:$2|Jedna wersija|$2 wersiji|$2 wersije|$2 wersijow}} tutoho rozdźěla ($1) {{PLURAL:$2|njeje so namakała|njejstej so namakałoj|njejsu namakali|njeje so namakało}}.
'preferences' => 'Nastajenja',
'mypreferences' => 'Nastajenja',
'prefs-edits' => 'Ličba změnow:',
-'prefsnologin' => 'Njepřizjewjeny',
-'prefsnologintext' => 'Dyrbiš <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} přizjewjeny]</span> być, zo by móhł nastajenja postajić.',
+'prefsnologintext2' => 'Dyrbiš so $1, zo by wužiwarske nastajenja postajił.',
'changepassword' => 'Hesło změnić',
'prefs-skin' => 'Drasta',
'skin-preview' => 'Přehlad',
'prefs-rendering' => 'Napohlad',
'saveprefs' => 'Składować',
'resetprefs' => 'Njeskładowane změny zaćisnyć',
-'restoreprefs' => 'Wšě standardne nastajenja wobnowić',
+'restoreprefs' => 'Wšě standardne nastajenja wobnowić (w druhich wotrězkach)',
'prefs-editing' => 'Wobdźěłowanje',
'rows' => 'Rjadki:',
'columns' => 'Stołpiki:',
'badsig' => 'Njepłaćiwa signatura, prošu HTML přepruwować.',
'badsiglength' => 'Twoja signatura je předołha.
Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} dołha być.',
-'yourgender' => 'Splah:',
-'gender-unknown' => 'Njepodaty',
-'gender-male' => 'Muski',
-'gender-female' => 'Žónski',
-'prefs-help-gender' => 'Opcionalny: wužiwa so za po splahu specifiske narěčenje přez softwaru. Tuta informacija budźe zjawna.',
+'yourgender' => 'Što chceš podać?',
+'gender-unknown' => 'Nochcu ničo wo tym podać',
+'gender-male' => 'Wón wobdźěłuje wikistrony',
+'gender-female' => 'Wona wobdźěłuje wikistrony',
+'prefs-help-gender' => 'Tute podaće je opcionalne:
+Softwara wužiwa jeho hódnotu, zo by će z pomocu wotpowědneho gramatikaliskeho roda narěčała a druhich na tebje pokazała.
+Tuta informacija budźe zjawna.',
'email' => 'E-mejl',
'prefs-help-realname' => '* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.',
'prefs-help-email' => 'E-mejlowa adresa je opcionalna, ale zmóžnja ći nowe hesło emejlować, jeli sy swoje hesło zabył.',
'prefs-signature' => 'Podpis',
'prefs-dateformat' => 'Datumowy format',
'prefs-timeoffset' => 'Časowe wotchilenje',
-'prefs-advancedediting' => 'Powšitkowny',
+'prefs-advancedediting' => 'Powšitkowne nastajenja',
'prefs-editor' => 'Editor',
'prefs-preview' => 'Přehlad',
'prefs-advancedrc' => 'Rozšěrjene opcije',
'prefs-displaysearchoptions' => 'Zwobraznjenske opcije',
'prefs-displaywatchlist' => 'Zwobraznjenske opcije',
'prefs-diffs' => 'Rozdźěle',
+'prefs-help-prefershttps' => 'Tute nastajenje so po twojim přichodnym přizjewjenju wuskutkuje.',
# User preference: email validation using jQuery
'email-address-validity-valid' => 'Zda so, zo e-mejlowa adresa je płaćiwa',
'userrights-no-interwiki' => 'Nimaš prawo wužiwarske prawa w druhich wikijach změnić.',
'userrights-nodatabase' => 'Datowa banka $1 njeeksistuje abo lokalna njeje.',
'userrights-nologin' => 'Dyrbiš so z admininstratorowym kontom [[Special:UserLogin|přizjewić]], zo by wužiwarske prawa změnił.',
-'userrights-notallowed' => 'Twoje konto nima trěbne prawa, zo by wužiwarske prawa přidźěliło abo zebrało.',
+'userrights-notallowed' => 'Nimaš trěbne prawa, zo by wužiwarske prawa přidźěliło abo zebrało.',
'userrights-changeable-col' => 'Skupiny, kotrež móžeš změnić',
'userrights-unchangeable-col' => 'Skupiny, kotrež njemóžeš změnić',
-'userrights-conflict' => 'Konflikt wužiwarskich prawow! Prošu čiń swoje změny hišće raz.',
+'userrights-conflict' => 'Konflikt změnow wužiwarskich prawow! Prošu přepruwuj a wobkruć swoje změny.',
'userrights-removed-self' => 'Sy swoje prawa wuspěšnje wotstronił. Tohodla nimaš hižo přistup na tutu stronu měć.',
# Groups
'right-reupload-shared' => 'Dataje w hromadźe wužiwanej repozitoriju lokalnje přepisać',
'right-upload_by_url' => 'Dataju z URL-adresy nahrać',
'right-purge' => 'Pufrowak sydła za stronu bjez wobkrućenskeje strony wuprózdnić',
-'right-autoconfirmed' => 'Połzaškitane strony wobdźěłać',
+'right-autoconfirmed' => 'Žane wobmjezowanje přez IP-bazowane limity',
'right-bot' => 'Ma so jako awtomatiski proces wobjednać',
'right-nominornewtalk' => 'Snadne změny k diskusijnym stronam zwobraznjenje nowych powěsćow wuwołać njedać',
'right-apihighlimits' => 'Wyše limity wi API-naprašowanjach wužiwać',
'right-ipblock-exempt' => 'Blokowanja IP, awtomatiske blokowanje a blokowanja wobwodow wobeńć',
'right-proxyunbannable' => 'Automatiske blokowanja proksyjow wobeńć',
'right-unblockself' => 'Swójske blokowanje zběhnyć',
-'right-protect' => 'Škitowe schodźenki změnić a škitanu stronu wobdźěłać',
+'right-protect' => 'Škitowe schodźenki změnić a z kaskadami škitane strony wobdźěłać',
'right-editprotected' => 'Strony wobdźěłać, kotrež su přez "{{int:protect-level-sysop}}" škitane',
'right-editsemiprotected' => 'Strony wobdźěłać, kotrež su přez "{{int:protect-level-autoconfirmed}}" škitane',
'right-editinterface' => 'Wužiwarski powjerch wobdźěłać',
'action-block' => 'Wobdźěłanju přez wužiwarja zadźěwać',
'action-protect' => 'škitowe runiny za tutu stronu změnić',
'action-rollback' => 'Změny poslednjeho wužiwarja, kiž je wěstu stronu wobdźěłał, spěšnje wróćo stajić',
-'action-import' => 'Tutu stronu z druheho wikija importować',
-'action-importupload' => 'Tutu stronu z datajoweho nahraća importować',
+'action-import' => 'Strony z druheho wikija importować',
+'action-importupload' => 'Strony z datajoweho nahraća importować',
'action-patrol' => 'Změny druhich wužiwarjiw jako dohladowane markować',
'action-autopatrol' => 'twoju změnu jako dohladowanu markować dać',
'action-unwatchedpages' => 'lisćinu njewobkedźbowanych stronow zwobraznić',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|wot poslednjeho wopyta}}',
+'enhancedrc-history' => 'historija',
'recentchanges' => 'Aktualne změny',
'recentchanges-legend' => 'Opcije aktualnych změnow',
'recentchanges-summary' => 'Na tutej stronje móžeš najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.',
'recentchanges-label-minor' => 'To je snadna změna',
'recentchanges-label-bot' => 'Tuta změna bu přez roboćik přewjedźena',
'recentchanges-label-unpatrolled' => 'Tuta změnu hišće njebu přepruwowana',
+'recentchanges-legend-newpage' => '$1 - nowa strona',
'rcnote' => "Deleka {{PLURAL:$1|je '''1''' změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|posledni dźeń|poslednjej '''$2''' dnjej|poslednje '''$2''' dny|poslednich '''$2''' dnjow}}, staw wot $4, $5.",
'rcnotefrom' => "Deleka so změny wot '''$2''' pokazuja (hač k '''$1''').",
'rclistfrom' => 'Nowe změny pokazać, započinajo z $1',
'rc-change-size' => '$1 {{PLURAL:$1|bajt|bajtaj|bajty|bajtow}}',
'rc-change-size-new' => '$1 {{PLURAL:$1|bajt|bajtaj|bajty|bajtow}} po změnje',
'newsectionsummary' => 'Nowy wotrězk: /* $1 */',
-'rc-enhanced-expand' => 'Podrobnosće pokazać (wužaduje sej JavaScript)',
+'rc-enhanced-expand' => 'Podrobnosće pokazać',
'rc-enhanced-hide' => 'Podrobnosće schować',
'rc-old-title' => 'prěnjotnje wutworjeny jako "$1"',
'upload_source_file' => ' (dataja na twojim ličaku)',
# Special:ListFiles
-'listfiles-summary' => 'Tuta specialna strona pokazuje wšě nahrate dataje.
-Jeli so po wužiwarju filtruje, pokazuja so jenož dataje, při kotrychž tón wužiwar je najnowšu wersiju nahrał.',
+'listfiles-summary' => 'Tuta specialna strona pokazuje wšě nahrate dataje.',
'listfiles_search_for' => 'Za mjenom wobraza pytać:',
'imgfile' => 'dataja',
'listfiles' => 'Lisćina datajow',
'listfiles_size' => 'wulkosć (byte)',
'listfiles_description' => 'wopisanje',
'listfiles_count' => 'Wersije',
+'listfiles-show-all' => 'Stare wersije wobrazow zapřijeć',
+'listfiles-latestversion' => 'Aktualna wersija',
+'listfiles-latestversion-yes' => 'Haj',
+'listfiles-latestversion-no' => 'Ně',
# File description page
'file-anchor-link' => 'Dataja',
'randompage' => 'Připadny nastawk',
'randompage-nopages' => 'W {{PLURAL:$2|slědowacym mjenowym rumje|slědowacymaj mjenowymaj rumomaj|slědowacych mjenowych rumach|slědowacych mjenowych rumach}} žane strony njejsu: $1',
+# Random page in category
+'randomincategory' => 'Připadna strona w kategoriji',
+'randomincategory-invalidcategory' => '"$1" płaćiwe kategorijowe mjeno njeje.',
+'randomincategory-nopages' => 'W kategoriji [[:Category:$1|$1]] žane strony njejsu.',
+'randomincategory-selectcategory' => 'Připadna strona z kategorija: $1 $2',
+'randomincategory-selectcategory-submit' => 'Wotesłać',
+
# Random redirect
'randomredirect' => 'Připadne daleposrědkowanje',
'randomredirect-nopages' => 'Žane daleposrědkowanja w mjenowym rumje "$1".',
'pageswithprop-text' => 'Tuta strona nalistuje strony, kotrež wěstu kajkosć strony wužiwaja.',
'pageswithprop-prop' => 'Mjeno kajkosće:',
'pageswithprop-submit' => 'Wotpósłać',
+'pageswithprop-prophidden-long' => 'Hódnota kajkosće dołheho teksta schowana ($1)',
+'pageswithprop-prophidden-binary' => 'binarna kajkostna hódnota schowana ($1)',
'doubleredirects' => 'Dwójne daleposrědkowanja',
'doubleredirectstext' => 'Tuta strona nalistuje strony, kotrež k druhim daleposrědkowanskim stronam dale posrědkuja.
'mostrevisions' => 'Nastawki z najwjace wersijemi',
'prefixindex' => 'Wšě strony z prefiksom',
'prefixindex-namespace' => 'Wšě strony z prefiksom (mjenowy rum $1)',
+'prefixindex-strip' => 'Prefiks w lisćinje wotrězać',
'shortpages' => 'Krótke nastawki',
'longpages' => 'Dołhe nastawki',
'deadendpages' => 'Nastawki bjez wotkazow',
'listusers' => 'Lisćina wužiwarjow',
'listusers-editsonly' => 'Jenož wužiwarjow ze změnami pokazać',
'listusers-creationsort' => 'Po datumje wutworjenja sortěrować',
+'listusers-desc' => 'Po spadowacym porjedźe sortěrować',
'usereditcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
'usercreated' => 'je so $1 $2 hodź. {{GENDER:$3|wutworił|wutworiła}}',
'newpages' => 'Nowe strony',
# Special:ListGroupRights
'listgrouprights' => 'Prawa wužiwarskeje skupiny',
'listgrouprights-summary' => 'Slěduje lisćina wužiwarskich skupinow na tutej wikiju z jich wotpowědnymi přistupnymi prawami. Tu móžeš [[{{MediaWiki:Listgrouprights-helppage}}|dalše informacije]] wo jednotliwych prawach namakać.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Garantowane prawo</span>
+'listgrouprights-key' => 'Legenda:
+* <span class="listgrouprights-granted">Garantowane prawo</span>
* <span class="listgrouprights-revoked">Wotwołane prawo</span>',
'listgrouprights-group' => 'Skupina',
'listgrouprights-rights' => 'Prawa',
e-mejl: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-Njebudu žane druhe zdźělenki w padźe dalšich změnow, chibazo wopytaš tutu stronu.
+Njebudu žane druhe zdźělenki w padźe dalšeje aktiwity, chibazo wopytaš tutu stronu. mjeztym zo sy přizjewjeny.
Móžeš tež zdźělenske marki za wšě swoje wobkedźbowane strony we swojich wobkedźbowankach wróćo stajić.
Twój přećelny zdźělenski system {{GRAMMAR:genitiw|{{SITENAME}}}}
'deletecomment' => 'Přičina:',
'deleteotherreason' => 'Druha/přidatna přičina:',
'deletereasonotherlist' => 'Druha přičina',
-'deletereason-dropdown' => '*Zwučene přičiny za wušmórnjenje
+'deletereason-dropdown' => '* Zwučene přičiny za wušmórnjenje
+** Spam
+** Wandalizm
+** Přeńdźenje awtorskeho prawa
** Požadanje awtora
-** Zranjenje copyrighta
-** Wandalizm',
+** Defektne dalesposrědkowanje',
'delete-edit-reasonlist' => 'Přičiny za wušmórnjenje wobdźěłać',
'delete-toobig' => 'Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje tajkich stronow bu wobmjezowane, zo by připadne přetorhnjenje {{SITENAME}} wobešło.',
'delete-warning-toobig' => 'Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.',
Poslednja změna bě wot wužiwarja [[User:$3|$3]] ([[User talk:$3|Diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Zjeće wobdźěłanja bě: \"''\$1''\".",
'revertpage' => 'Změny [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) cofnjene a nawróćene k poslednjej wersiji wužiwarja [[User:$1|$1]]',
-'revertpage-nouser' => 'Staji změny wot (wužiwarske mjeno wotstronjene) na předchadnu wersiju wot [[User:$1|$1]] wróćo',
+'revertpage-nouser' => 'Změny su so wot schowaneho wužiwarja anulowali a předchadna wersija wužiwarja {{GENDER:$1|[[User:$1|$1]]}} je so wobnowiła',
'rollback-success' => 'Změny wužiwarja $1 cofnjene; wróćo na wersiju wužiwarja $2.',
# Edit tokens
'contributions' => 'Přinoški {{GENDER:$1|wužiwarja|wužiwarki}}',
'contributions-title' => 'Wužiwarske přinoški wot „$1“',
'mycontris' => 'Přinoški',
-'contribsub2' => 'za wužiwarja $1 ($2)',
+'contribsub2' => 'Za {{GENDER:$3|$1}} ($2)',
'nocontribs' => 'Žane změny, kotrež podatym kriterijam wotpowěduja.',
'uctop' => '(aktualny)',
'month' => 'wot měsaca (a do toho):',
'allmessagesname' => 'Mjeno',
'allmessagesdefault' => 'Standardny tekst',
'allmessagescurrent' => 'Aktualny tekst',
-'allmessagestext' => 'To je lisćina systemowych zdźělenkow, kotrež w mjenowym rumje MediaWiki k dispoziciji steja. Prošu wopytaj [//www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jeli chceš k powšitkownej lokalizaciji MediaWiki přinošować.',
+'allmessagestext' => 'To je lisćina systemowych zdźělenkow, kotrež w mjenowym rumje MediaWiki k dispoziciji steja. Prošu wopytaj [https://www.mediawiki.org/wiki/Localisation lokalizaciju MediaWiki] a [//translatewiki.net translatewiki.net], jeli chceš k powšitkownej lokalizaciji MediaWiki přinošować.',
'allmessagesnotsupportedDB' => "Tuta strona njeda so wužiwać, dokelž '''\$wgUseDatabaseMessages''' bu znjemóžnjeny.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Po přiměrjenskim stawje filtrować:',
'spam_blanking' => 'Wšě wersije z wotkazami do $1 so porjedźeja',
'spam_deleting' => 'Wšě wersije z wotkazami do $1 so zhašeja',
'simpleantispam-label' => "Kontrola přećiwo spamej.
-Tu '''ničo''' njezapisać!",
+Tu '''NIČO''' njezapisać!",
# Info page
'pageinfo-title' => 'Informacije za stronu "$1"',
'pageinfo-length' => 'Dołhosć strony (w bajtach)',
'pageinfo-article-id' => 'ID strony',
'pageinfo-language' => 'Rěč wobsaha strony',
-'pageinfo-robot-policy' => 'Status pytawy',
-'pageinfo-robot-index' => 'Indeksujomny',
-'pageinfo-robot-noindex' => 'Njeindeksujomny',
+'pageinfo-content-model' => 'Model wobsaha strony',
+'pageinfo-robot-policy' => 'Indicěrowanje přez roboty',
+'pageinfo-robot-index' => 'Dowoleny',
+'pageinfo-robot-noindex' => 'Zakazany',
'pageinfo-views' => 'Ličba zwobraznjenjow',
'pageinfo-watchers' => 'Ličba wobkedźbowarjow strony',
'pageinfo-few-watchers' => 'Mjenje hač $1 {{PLURAL:$1|wobkedźbowar|wobkedźbowarjej|wobkedźbowarje|wobkedźbowarjow}}',
-'pageinfo-redirects-name' => 'Dalesposrědkowanja k tutej stronje',
+'pageinfo-redirects-name' => 'Ličba dalesposrědkowanjow k tutej stronje',
'pageinfo-redirects-value' => '$1',
'pageinfo-subpages-name' => 'Podstrony tuteje strony',
'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|dalesposrědkowanje|dalesposrědkowani|dalesposrědkowanja|dalesposrědkowanjow}}; $3 {{PLURAL:$3|njedalesposrědkowanje|njedalesposrědkowani|njedalesposrědkowanja|njedalesposrědkowanjow}})',
'svg-long-desc' => 'SVG-dataja, zakładna wulkosć: $1 × $2 pikselow, datajowa wulkosć: $3',
'svg-long-desc-animated' => 'Animěrowana SVG-dataja, zakładnej wotměraj $1 × $2 pikselow, datajowa wulkosć: $3',
'svg-long-error' => 'Njepłaćiwa SVG-dataja: $1',
-'show-big-image' => 'Wersija z wyšim rozeznaćom',
+'show-big-image' => 'Originalna dataja',
'show-big-image-preview' => 'Wulkosć tutoho přehlada: $1.',
'show-big-image-other' => '{{PLURAL:$2|Druhe rozeznaće|Druhej rozeznaći|Druhe rozeznaća|Druhe rozeznaća}}: $1.',
'show-big-image-size' => '$1 × $2 pikselow',
'exif-compression-4' => 'CCITT skupina 4 faksowe kodowanje',
'exif-copyrighted-true' => 'Přez awtorske prawo škitany',
-'exif-copyrighted-false' => 'Zjawnosći přistupny',
+'exif-copyrighted-false' => 'Status awtorskeho prawa njepostajeny',
'exif-unknowndate' => 'Njeznaty datum',
# External editor support
'edit-externally' => 'Dataju z eksternym programom wobdźěłać',
-'edit-externally-help' => '(Hlej [//www.mediawiki.org/wiki/Manual:External_editors pokiwy za instalaciju] za dalše informacije)',
+'edit-externally-help' => '(Hlej [https://www.mediawiki.org/wiki/Manual:External_editors pokiwy za instalaciju] za dalše informacije)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'wšě',
'confirmemail_body_set' => 'Něchtó, najskerje ty, wot IP-adresy $1,
je e-mejlowu adresu konta "$2" na {{GRAMMAR:lokatiw|{{SITENAME}}}} na tutu adresu stajił.
-Zo by wobkrućił, zo tute konto ći woprawdźe słuša a zo bychu so e-mejlowe funkcije na {{GRAMMAR:lokatiw|{{SITENAME}}}} znowa aktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku:
+Zo by wobkrućił, zo tute konto ći woprawdźe słuša a zo bychu so e-mejlowe funkcije na {{GRAMMAR:lokatiw|{{SITENAME}}}} aktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku:
$3
'confirm-unwatch-button' => 'W porjadku',
'confirm-unwatch-top' => 'Tutu stronu z wobkedźbowankow wotstronić?',
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
# Multipage image navigation
'imgmultipageprev' => '← předchadna strona',
'imgmultipagenext' => 'přichodna strona →',
'version-hook-subscribedby' => 'Abonowany wot',
'version-version' => '(Wersija $1)',
'version-license' => 'Licenca',
-'version-poweredby-credits' => "Tutón wiki so wot '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2 podpěruje.",
+'version-poweredby-credits' => "Tutón wiki so wot '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2 podpěruje.",
'version-poweredby-others' => 'druzy',
+'version-poweredby-translators' => 'Přełožowarjo na translatewiki.net',
'version-credits-summary' => 'Dźakujemy so slědowacym wosobam za jich přinoški k [[Special:Version|MediaWiki]]',
'version-license-info' => 'MediaWiki je swobodna softwara: móžeš ju pod wuměnjenjemi licency GNU General Public License, wozjewjeneje wot załožby Free Software Foundation, rozdźělić a/abo změnić: pak pod wersiju 2 licency pak pod někajkej pozdźišej wersiju.
# Special:Redirect
'redirect' => 'Po datajowym mjenje, wužiwarju abo wersijowym ID dale sposrědkować',
'redirect-legend' => 'Do dataje abo strony dale sposrědkować',
-'redirect-summary' => 'Tuta specialna strona so do dataje (datajowe mjeno je podate), strony (wersijowy ID je podaty) abo wužiwarskeje strony (numeriski wužiwarski ID je podaty) dale sposrědkuje.',
+'redirect-summary' => 'Tuta specialna strona so do dataje (datajowe mjeno je podate), strony (wersijowy ID je podaty) abo wužiwarskeje strony (numeriski wužiwarski ID je podaty) dale sposrědkuje. Wužiće:
+[[{{#Special:Redirect}}/file/Přikład.jpg]], [[{{#Special:Redirect}}/revision/328429]] abo [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Los',
'redirect-lookup' => 'Pytać:',
'redirect-value' => 'Hódnota:',
# Special:SpecialPages
'specialpages' => 'Specialne strony',
-'specialpages-note' => '----
-* Normalne specialne strony.
-* <span class="mw-specialpagerestricted">Specialne strony z wobmjezowanym přistupom.</span>
-* <span class="mw-specialpagecached">Specialne strony z pufrowaka (móža zestarjene być).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normalne specialne strony.
+* <span class="mw-specialpagerestricted">Specialne strony z wobmjezowanym přistupom.</span>',
'specialpages-group-maintenance' => 'Hladanske lisćiny',
'specialpages-group-other' => 'Druhe specialne strony',
'specialpages-group-login' => 'Přizjewić/Konto załožić',
'tags' => 'Płaćiwe taflički změnow',
'tag-filter' => 'Filter [[Special:Tags|tafličkow]]:',
'tag-filter-submit' => 'Filter',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Značka|Značce|Znački}}]]: $2)',
'tags-title' => 'Taflički',
'tags-intro' => 'Tuta strona nalistuje taflički, z kotrymiž softwara móže změnu markěrować a jich woznam.',
'tags-tag' => 'Mjeno taflički',
'tags-display-header' => 'Napohlad na lisćinach změnow',
'tags-description-header' => 'Dospołne wopisanje woznama',
+'tags-active-header' => 'Aktiwny?',
'tags-hitcount-header' => 'Změny z tafličkami',
+'tags-active-yes' => 'Haj',
+'tags-active-no' => 'Ně',
'tags-edit' => 'změnić',
'tags-hitcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
'dberr-problems' => 'Wodaj! Tute sydło ma techniske ćežkosće.',
'dberr-again' => 'Počakń někotre mjeńšiny a zaktualizuj stronu.',
'dberr-info' => '(Njeje móžno ze serwerom datoweje banki zwjazać: $1)',
+'dberr-info-hidden' => '(Kontakt z datobankowym serwerom móžno njeje)',
'dberr-usegoogle' => 'Mjeztym móžeš z pomocu Google pytać.',
'dberr-outofdate' => 'Wobkedźbuj, zo jich indeksy našeho wobsaha móhli zestarjene być.',
'dberr-cachederror' => 'Slědowaca je pufrowana kopija požadaneje strony a móhła zestarjena być.',
# Image rotation
'rotate-comment' => 'Wobraz wo $1 {{PLURAL:$1|stopjeń|stopnjej|stopnje|stopnjow}} w směrje časnika wjerćany',
+# Limit report
+'limitreport-title' => 'Profilowanske daty parsera:',
+'limitreport-cputime' => 'Časowe wužiwanje CPU',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
+'limitreport-walltime' => 'Wužiwanje woprawdźiteho časa',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
+'limitreport-ppvisitednodes' => 'Ličba wopytanych sukow preprocesora',
+'limitreport-ppgeneratednodes' => 'Spłodźena ličba sukow preprocesora',
+'limitreport-postexpandincludesize' => 'Wulkosć zapřijimanja po ekspandowanju',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
+'limitreport-templateargumentsize' => 'Wulkosć předłohoweho argumenta',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
+'limitreport-expansiondepth' => 'Najwyša ekspansijowa hłubokosć',
+'limitreport-expensivefunctioncount' => 'Ličba naročnych parserowych funkcijow',
+
+# Special:ExpandTemplates
+'expandtemplates' => 'Předłohi ekspandować',
+'expand_templates_intro' => 'Na tutej specialnej stronje móžeš tekst zapodać a wšitke do njeje zapřijate předłohi so rekursiwnje ekspanduja. Tež funkcije parsera kaž <code><nowiki>{{</nowiki>#language:...}}</code> a wariable kaž <code><nowiki>{{</nowiki>CURRENTDAY}}</code> so wuhódnočeja – faktisce wšo, štož steji mjezy dwójnymaj wopušatymaj spinkomaj.',
+'expand_templates_title' => 'Kontekstowy titul, za {{FULLPAGENAME}} atd.:',
+'expand_templates_input' => 'Tekst zapodać:',
+'expand_templates_output' => 'Wuslědk',
+'expand_templates_xml_output' => 'Wudaće XML',
+'expand_templates_ok' => 'W porjadku',
+'expand_templates_remove_comments' => 'Komentary wotstronić',
+'expand_templates_remove_nowiki' => 'Taflički <nowiki> we wuslědku potłóčić',
+'expand_templates_generate_xml' => 'Analyzowy štom XML pokazać',
+'expand_templates_preview' => 'Přehlad',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Rekipere depi « $1 »',
'youhavenewmessages' => 'Ou genyen $1 ($2).',
-'newmessageslink' => 'nouvo mesaj',
-'newmessagesdifflink' => 'dènye chanjman',
'youhavenewmessagesmulti' => 'Ou genyen nouvo mesaj sou $1.',
'editsection' => 'modifye',
'editold' => 'modifye',
# External editor support
'edit-externally' => 'Modifye fichye sa a nan aplikasyon pa ou (ki pa nan sistèm an, sou machin ou pa egzanp).',
-'edit-externally-help' => '(Gade [//www.mediawiki.org/wiki/Manual:External_editors komand ak enstriksyon yo] pou plis enfòmasyon oubyen pou konnen plis)',
+'edit-externally-help' => '(Gade [https://www.mediawiki.org/wiki/Manual:External_editors komand ak enstriksyon yo] pou plis enfòmasyon oubyen pou konnen plis)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tout',
'ok' => 'OK',
'retrievedfrom' => 'A lap eredeti címe: „$1”',
'youhavenewmessages' => '$1 a vitalapodon! ($2 külön is megtekintheted.)',
-'newmessageslink' => 'új üzenet vár',
-'newmessagesdifflink' => 'az utolsó üzenetet',
'youhavenewmessagesfromusers' => '$2 kaptál {{PLURAL:$3|egy|$3}} szerkesztőtől $1!',
'youhavenewmessagesmanyusers' => '$2 kaptál több szerkesztőtől $1.',
'newmessageslinkplural' => '{{PLURAL:$1||}}a vitalapodon',
'preferences' => 'Beállítások',
'mypreferences' => 'Beállítások',
'prefs-edits' => 'Szerkesztéseid száma:',
-'prefsnologin' => 'Nem jelentkeztél be',
-'prefsnologintext' => 'Saját beállításaid elmentéséhez <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} be kell jelentkezned.] </span>',
'changepassword' => 'Jelszócsere',
'prefs-skin' => 'Felület',
'skin-preview' => 'előnézet',
'recentchanges-label-minor' => 'Ez egy apró szerkesztés',
'recentchanges-label-bot' => 'Ezt a szerkesztést egy bot hajtotta végre',
'recentchanges-label-unpatrolled' => 'Ezt a szerkesztést még nem ellenőrizték',
+'recentchanges-legend-newpage' => '$1 – új lap',
'rcnote' => "Alább az utolsó '''{{PLURAL:$2|egy|$2}}''' nap utolsó '''{{PLURAL:$1|egy|$1}}''' változtatása látható. A lap generálásának időpontja $4, $5.",
'rcnotefrom' => 'Alább a <b>$2</b> óta történt változtatások láthatóak (<b>$1</b> db).',
'rclistfrom' => '$1 után történt változtatások megtekintése',
'emailuser-title-target' => 'E-mail küldése ennek a felhasználónak: $1',
'emailuser-title-notarget' => 'E-mail küldése a felhasználónak',
'emailpage' => 'E-mail küldése',
-'emailpagetext' => '{{GENDER:$1|user}} nevű szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni.
+'emailpagetext' => '{{GENDER:$1|felhasználó}}nevű szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni.
Feladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címed fog szerepelni, így a címzett közvetlenül tud majd válaszolni neked.',
'usermailererror' => 'A levélküldő objektum hibával tért vissza:',
'defemailsubject' => '{{SITENAME}} e-mail a következő felhasználótól: „$1”',
'emailsubject' => 'Tárgy:',
'emailmessage' => 'Üzenet:',
'emailsend' => 'Küldés',
-'emailccme' => 'Az üzenet másolatát küldje el nekem is e-mailben.',
+'emailccme' => 'Az üzenet másolatát küldje el nekem is e-mailben',
'emailccsubject' => '$1 szerkesztőnek küldött $2 tárgyú üzenet másolata',
'emailsent' => 'E-mail elküldve',
-'emailsenttext' => 'Az e-mail üzenetedet elküldtem.',
+'emailsenttext' => 'E-mail üzenetedet elküldtük.',
'emailuserfooter' => 'Ezt az e-mailt $1 küldte $2 számára, az „E-mail küldése ezen szerkesztőnek” funkció használatával a(z) {{SITENAME}} wikin.',
# User Messenger
'allmessagesdefault' => 'Alapértelmezett szöveg',
'allmessagescurrent' => 'Jelenlegi szöveg',
'allmessagestext' => 'Ezen a lapon a MediaWiki-névtérben elérhető rendszerüzenetek listája látható.
-Ha részt szeretnél venni a MediaWiki fordításában, látogass el a [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation], valamint a [//translatewiki.net translatewiki.net] oldalra.',
+Ha részt szeretnél venni a MediaWiki fordításában, látogass el a [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation], valamint a [//translatewiki.net translatewiki.net] oldalra.',
'allmessagesnotsupportedDB' => "A '''''{{ns:special}}:Allmessages''''' lap nem használható, mert a '''\$wgUseDatabaseMessages''' ki van kapcsolva.",
'allmessages-filter-legend' => 'Elemek szűrése',
'allmessages-filter' => 'Módosítás állapota:',
# External editor support
'edit-externally' => 'A fájl szerkesztése külső alkalmazással',
-'edit-externally-help' => '(Lásd a [//www.mediawiki.org/wiki/Manual:External_editors használati utasítást] (angolul) a beállításához.)',
+'edit-externally-help' => '(Lásd a [https://www.mediawiki.org/wiki/Manual:External_editors használati utasítást] (angolul) a beállításához.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'bármikor',
'version-hook-subscribedby' => 'Használja',
'version-version' => '(verzió: $1)',
'version-license' => 'Licenc',
-'version-poweredby-credits' => "Ez a wiki '''[//www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ez a wiki '''[https://www.mediawiki.org/ MediaWiki]''' szoftverrel működik, copyright © 2001-$1 $2.",
'version-poweredby-others' => 'mások',
'version-poweredby-translators' => 'translatewiki.net fordítók',
'version-credits-summary' => 'Szeretnénk elismerni a következő személyek hozzájárulását a [[Special:Version|MediaWiki]] szoftverhez.',
# Special:SpecialPages
'specialpages' => 'Speciális lapok',
-'specialpages-note' => '----
-* Mindenki számára elérhető speciális lapok.
+'specialpages-note' => '* Mindenki számára elérhető speciális lapok.
* <span class="mw-specialpagerestricted">Korlátozott hozzáférésű speciális lapok.</span>',
'specialpages-group-maintenance' => 'Állapotjelentések',
'specialpages-group-other' => 'További speciális lapok',
# Image rotation
'rotate-comment' => 'Elforgattam a képet $1 fokkal, az óramutató járásával megegyező irányban',
+# Special:ExpandTemplates
+'expandtemplates' => 'Sablonok kibontása',
+'expand_templates_intro' => 'Ez a speciális lap a bevitt szövegekben megkeresi a sablonokat és rekurzívan kibontja őket.
+Kibontja az elemző függvényeket (pl. <nowiki>{{</nowiki>#language:...}}), és a változókat (pl. <nowiki>{{</nowiki>CURRENTDAY}}) is – mindent, ami a kettős kapcsos zárójelek között van.',
+'expand_templates_title' => 'Szöveg címe, például {{FULLPAGENAME}} sablonhoz:',
+'expand_templates_input' => 'Vizsgálandó szöveg',
+'expand_templates_output' => 'Eredmény',
+'expand_templates_xml_output' => 'XML kimenet',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Megjegyzések eltávolítása',
+'expand_templates_remove_nowiki' => '<nowiki> tagek mellőzése az eredményben',
+'expand_templates_generate_xml' => 'XML elemzési fa mutatása',
+'expand_templates_preview' => 'Előnézet',
+
);
*
* @author Ahmed-Najib-Biabani-Ibrahimkhel
* @author Chaojoker
+ * @author M hamlet
* @author Nemo bis
* @author Pandukht
* @author Reedy
'tog-extendwatchlist' => 'Ընդարձակել հսկացանկը՝ ցույց տալով բոլոր փոփոխությունները, այլ ոչ միայն վերջինները',
'tog-usenewrc' => 'Խմբավորել փոփոխությունները Վերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)',
'tog-numberheadings' => 'Ինքնաթվագրել վերնագրերը',
-'tog-showtoolbar' => 'Ցույց տալ խմբագրումների գործիքների վահանակը (JavaScript)',
-'tog-editondblclick' => 'Խմբագրել էջերը կրկնակի մատնահարմամբ (JavaScript)',
+'tog-showtoolbar' => 'Ցույց տալ խմբագրումների գործիքների վահանակը',
+'tog-editondblclick' => 'Խմբագրել էջերը կրկնակի մատնահարմամբ',
'tog-editsection' => 'Ցույց տալ [խմբագրել] հղումը ամեն բաժնի համար',
-'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ (JavaScript)',
+'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ',
'tog-showtoc' => 'Ցույց տալ բովանդակությունը (3 կամ ավել վերնագրեր ունեցող էջերի համար)',
'tog-rememberpassword' => 'Հիշել իմ մուտքագրված տվյալներն այս համակարգչում ($1 {{PLURAL:$1|օրից}} ոչ ավել ժամկետով)',
'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը հսկացանկին',
'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը և նիշքերը հսկացանկին',
'tog-watchmoves' => 'Ավելացնել իմ վերնավանած էջերը և նիշքերը հսկացանկին',
-'tog-watchdeletion' => 'Ավելացնել իմ ջնջած էջերը հսկացանկին',
+'tog-watchdeletion' => 'Ավելացնել իմ ջնջած էջերը և նիշքերը իմ հսկացանկին',
'tog-minordefault' => 'Նշել խմբագրումները որպես չնչին ըստ լռության',
'tog-previewontop' => 'Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ',
'tog-previewonfirst' => 'Նախադիտել մինչև առաջին խմբագրությունը',
'newwindow' => '(բացվելու է նոր պատուհանի մեջ)',
'cancel' => 'Բեկանել',
'moredotdotdot' => 'Ավելին...',
+'morenotlisted' => 'Այս ցանկը լիարժեք չէ։',
'mypage' => 'Իմ էջը',
'mytalk' => 'Քննարկում',
'anontalk' => 'Քննարկում այս IP-հասցեի համար',
'create-this-page' => 'Ստեղծել այս էջը',
'delete' => 'Ջնջել',
'deletethispage' => 'Ջնջել այս էջը',
+'undeletethispage' => 'Վերականգնել այս էջը',
'undelete_short' => 'Վերականգնել {{PLURAL:$1|մեկ խմբագրում|$1 խմբագրում}}',
'viewdeleted_short' => 'Դիտել {{PLURAL:$1|ջնջված խմբագրում}}',
'protect' => 'Պաշտպանել',
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Ստացված է «$1» էջից',
'youhavenewmessages' => 'Դուք ունեք $1 ($2)։',
-'newmessageslink' => 'Նոր հաղորդագրություն',
-'newmessagesdifflink' => 'վերջին փոփոխությունը',
-'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|նոր հաղորդագրություններ}}',
-'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|փոփոխում|փոփոխումներ}}',
+'youhavenewmessagesmanyusers' => 'Դուք ունեք $1 մի քանի օգտագործողից ($2)։',
+'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|999=նոր հաղորդագրություններ}}',
+'newmessagesdifflinkplural' => 'վերջին {{PLURAL:$1|փոփոխում|999=փոփոխումներ}}',
'youhavenewmessagesmulti' => 'Դուք նոր ուղերձներ եք ստացել $1 վրա',
'editsection' => 'խմբագրել',
'editold' => 'խմբագրել',
# General errors
'error' => 'Սխալ',
'databaseerror' => 'Տվյալների բազայի սխալ',
+'databaseerror-text' => 'Տվյալների բազայի հարցման սխալ է առաջացել։
+Սա կարող է ծրագրային բագի պատճառով լինել։',
+'databaseerror-textcl' => 'Տվյալների բազայի հարցման սխալ է առաջացել։',
+'databaseerror-query' => 'Հարցում՝ $1',
+'databaseerror-function' => 'Ֆունկցիա՝ $1',
+'databaseerror-error' => 'Սխալ՝ $1',
'laggedslavemode' => 'Զգուշացում. էջը կարող է չպարունակել վերջին փոփոխությունները։',
'readonly' => 'Տվյալների բազան կողպված է',
'enterlockreason' => 'Նշեք կողպման պատճառը և մոտավոր ժամկետը',
'namespaceprotected' => 'Դուք չունեք «$1» անվանատարածքի էջերի խմբագրման իրավունք։',
'customcssprotected' => 'Դուք չեք կարող խմբագրել այս CSS էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։',
'customjsprotected' => 'Դուք չեք կարող խմբագրել այս ՋավաՍկրիպտ էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։',
+'mycustomcssprotected' => 'Դուք բավարար իրավունքներ չունեք այս CSS էջը խմբագրելու համար։',
+'mycustomjsprotected' => 'Դուք բավարար իրավունքներ չունեք այս JavaScript էջը խմբագրելու համար։',
+'mypreferencesprotected' => 'Դուք բավարար իրավունքներ չունեք Ձեր նախընտրությունները խմբագրելու համար։',
'ns-specialprotected' => '«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։',
'titleprotected' => "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։
Տրված պատճառն է՝ ''$2''։",
'exception-nologin' => 'Չեք մտել համակարգ',
-'exception-nologin-text' => 'Ô±ÕµÕ½ Õ§Õ»Õ¨ Õ¤Õ«Õ¿Õ¥Õ¬Õ¸Ö\82 Õ¯Õ¡Õ´ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80 Õ¤Õ¸Ö\82Ö\84 ÕºÕ¥Õ¿Ö\84 Õ§ Õ´Õ¸Ö\82Õ¿Ö\84 Õ£Õ¸Ö\80Õ®Õ¥Ö\84 Õ¡ÕµÕ½ Õ¾Õ«Ö\84Õ«։',
+'exception-nologin-text' => 'Ô½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84, [[Special:Userlogin|Õ´Õ¸Ö\82Õ¿Ö\84 Õ£Õ¸Ö\80Õ®Õ¥Ö\84]]Õ\9d Õ¡ÕµÕ½ Õ§Õ»Õ¨ Õ¤Õ«Õ¿Õ¥Õ¬Õ¸Ö\82 Õ¯Õ¡Õ´ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¨ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80։',
# Virus scanner
'virus-badscanner' => "Սխալ կարգավորւմ։ Անծանոթ վիրուսների զննիչ. ''$1''",
'yourname' => 'Մասնակցի անուն՝',
'userlogin-yourname' => 'Մասնակցային անուն',
'userlogin-yourname-ph' => 'Մուտքագրեք ձեր մասնակցային անունը',
+'createacct-another-username-ph' => 'Մուտքագրեք մասնակցի անունը',
'yourpassword' => 'Գաղտնաբառ՝',
'userlogin-yourpassword' => 'Գաղտնաբառ',
'userlogin-yourpassword-ph' => 'Մուտքագրեք ձեր գաղտնաբառը',
'gotaccount' => "Դուք արդեն գրանցվա՞ծ եք։ '''$1'''։",
'gotaccountlink' => 'Մուտք գործեք համակարգ',
'userlogin-resetlink' => 'Մոռացե՞լ եք Ձեր հաշվի տվյալները։',
-'userlogin-resetpassword-link' => 'Զրոյացնել ձեր գաղտնաբառը։',
+'userlogin-resetpassword-link' => 'Մոռացե՞լ եք գաղտնաբառը',
+'userlogin-createanother' => 'Ստեղծել այլ հաշիվ',
'createacct-join' => 'Մուտքագրեք Ձեր տեղեկությունները ստորև',
'createacct-emailrequired' => 'Էլ–փոստի հասցե',
'createacct-emailoptional' => 'Էլ–փոստի հասցե (ոչ պարտադիր)',
'createacct-email-ph' => 'Մուտքագրեք ձեր էլ–փոստի հասցեն',
+'createacct-another-email-ph' => 'Մուտքագրեք էլ․ փոստի հասցեն',
'createaccountmail' => 'Օգտագործել ժամանակավոր պատահական գաղտնաբառ, որը կուղարկվի ձեր էլ–փոստի հասցեին։',
'createacct-realname' => 'Իրական անուն (պարտադիր չէ)',
'createaccountreason' => 'Պատճառը՝',
'preferences' => 'Նախընտրություններ',
'mypreferences' => 'Նախընտրություններ',
'prefs-edits' => 'Խմբագրումների քանակը.',
-'prefsnologin' => 'Դուք չեք մտել համակարգ',
-'prefsnologintext' => 'Մասնակցային նախընտրությունները փոփոխելու համար անհրաժեշտ է <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} մտնել համակարգ]</span>։',
+'prefsnologintext2' => 'Նախընտրությունները փոփոխելու համար անհրաժեշտ է $1։',
'changepassword' => 'Փոխել գաղտնաբառը',
'prefs-skin' => 'Տեսք',
'skin-preview' => 'նախադիտել',
'datedefault' => 'Առանց նախընտրության',
+'prefs-beta' => 'Փորձնական հնարավորություններ',
'prefs-datetime' => 'Օր ու ժամ',
'prefs-personal' => 'Անձնական',
'prefs-rc' => 'Վերջին փոփոխություններ',
'right-upload' => 'Նիշքերի բեռնում',
'right-upload_by_url' => 'Բեռնել նիշքեր ինտերնետային հասցեից',
'right-delete' => 'Էջերի ջնջում',
+'right-rollback' => 'Արագ հետ գլորել տվյալ էջը վերջին անգամ խմբագրած մասնակցի խմբագրումները',
# Special:Log/newusers
'newuserlogpage' => 'Մասնակիցների գրանցման տեղեկամատյան',
'action-delete' => 'Ջնջել այս էջը',
'action-deleterevision' => 'Ջնջել այս փոփոխությունը',
'action-deletedhistory' => 'Դիտել այս էջի ջնջված պատմությունը',
+'action-rollback' => 'արագ հետ գլորել էջը վերջին անգամ խմբագրած մասնակցի կատարած փոփոխությունները',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}',
'recentchanges-label-minor' => 'Սա չնչին խմբագրում է',
'recentchanges-label-bot' => 'Այս խմբագրումը կատարվել է բոտի կողմից',
'recentchanges-label-unpatrolled' => 'Այս խմբագրումը դեռ չի պարեկվել',
+'recentchanges-legend-newpage' => '$1 - նոր էջ',
'rcnote' => 'Ստորև բերված են վերջին <strong>$1</strong> փոփոխությունները վերջին <strong>$2</strong> {{PLURAL:$2|օրվա|օրվա}} ընթացքում՝ $5, $4-ի դրությամբ։',
'rcnotefrom' => "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
'rclistfrom' => 'Ցույց տալ նոր փոփոխությունները սկսած $1',
'rollback' => 'Հետ գլորել խմբագրումները',
'rollback_short' => 'Հետ գլորել',
'rollbacklink' => 'հետ գլորել',
+'rollbacklinkcount' => 'հետ գլորել $1 {{PLURAL:$1|խմբագրում}}',
'rollbackfailed' => 'Հետ գլորումը ձախողվեց',
'cantrollback' => 'Չհաջողվեց հետ շրջել խմբագրումը։ Վերջին ներդրումը կատարվել է էջի միակ հեղինակի կողմից։',
-'alreadyrolled' => 'Õ\89Õ°Õ¡Õ»Õ¸Õ²Õ¾Õ¥Ö\81 Õ°Õ¥Õ¿ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ [[:$1]] Õ§Õ»Õ« Õ¾Õ¥Ö\80Õ»Õ«Õ¶ ÕÕ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ¨Õ\9d Õ¯Õ¡Õ¿Õ¡Ö\80Õ¾Õ¡Õ® [[User:$2|$2]] ([[User talk:$2|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¸Õ²Õ´Õ«Ö\81Ö\89 Õ\84Õ¥Õ¯ Õ¸Ö\82Ö\80Õ«Õ·Õ¨ Õ¡Ö\80Õ¤Õ¥Õ¶ ÕÕ´Õ¢Õ¡Õ£Ö\80Õ¥Õ¬ Õ§ Õ¯Õ¡Õ´ Õ°Õ¥Õ¿ Õ§ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ էջը։
+'alreadyrolled' => 'Õ\89Õ°Õ¡Õ»Õ¸Õ²Õ¾Õ¥Ö\81 Õ°Õ¥Õ¿ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ [[:$1]] Õ§Õ»Õ¸Ö\82Õ´ [[User:$2|$2]] ([[User talk:$2|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¾Õ¥Ö\80Õ»Õ«Õ¶ ÕÕ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ¨â\80¤ Õ´Õ¥Õ¯ Õ¸Ö\82Ö\80Õ«Õ·Õ¶ Õ¡Ö\80Õ¤Õ¥Õ¶ Õ°Õ¥Õ¿ Õ§ Õ£Õ¬Õ¸Ö\80Õ¥Õ¬ Õ¯Õ¡Õ´ ÕÕ´Õ¢Õ¡Õ£Ö\80Õ¥Õ¬ Õ§ էջը։
-Õ\8eÕ¥Ö\80Õ»Õ«Õ¶ ÕÕ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¨ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¾Õ¥Õ¬ Õ§ [[User:$3|$3]] ([[User talk:$3|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ« Õ¯Õ¸Õ²Õ´Õ«Ö\81։',
+Õ\8eÕ¥Ö\80Õ»Õ«Õ¶ ÕÕ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¨ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬ Õ§ [[User:$3|$3]] ([[User talk:$3|Õ\94Õ¶Õ¶Õ¡Ö\80Õ¯Õ¸Ö\82Õ´]]) Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¨։',
'editcomment' => "Խմբագրման մեկնաբանումն էր. «''$1''»։",
'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) մասնակցի խմբագրումները հետ են շրջվել [[User:$1|$1]] մասնակցի վերջին տարբերակին։',
'revertpage-nouser' => 'Հետ շրջվեց (անունը ջնջված է) մասնակցի խմբագրումը՝ [[User:$1|$1]] մասնակցի տարբերակին',
'allmessagesdefault' => 'Ուղերձի լռելյայն տեքստ',
'allmessagescurrent' => 'Ընթացիկ տեքստ',
'allmessagestext' => 'Ստորև բերված է «MediaWiki» անվանատարածքի բոլոր համակարգային ուղերձների ցանկը։
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "Այս էջը չի գործում, քանի որ '''\$wgUseDatabaseMessages''' հատկանիշը անջատված է։",
'allmessages-filter-all' => 'Բոլորը',
'allmessages-language' => 'Լեզու',
# External editor support
'edit-externally' => 'Խմբագրել այս նիշքը արտաքին խմբագրիչով',
-'edit-externally-help' => '(Մանրամասնությունների համար տես [//www.mediawiki.org/wiki/Manual:External_editors տեղակայման հրահանգները])',
+'edit-externally-help' => '(Մանրամասնությունների համար տես [https://www.mediawiki.org/wiki/Manual:External_editors տեղակայման հրահանգները])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'բոլոր',
# Special:Version
'version' => 'ՄեդիաՎիքի տարբերակը',
+'version-poweredby-credits' => "Այս վիքին աշխատում է '''[https://www.mediawiki.org/ MediaWiki]'''֊ով, copyright © 2001-$1 $2։",
# Special:FileDuplicateSearch
'fileduplicatesearch' => 'Փնտրել կրկնօրինակ պատկերներ',
# Special:SpecialPages
'specialpages' => 'Սպասարկող էջեր',
-'specialpages-note' => '----
-* Հասարակ հատուկ էջեր։
-* <strong class="mw-specialpagerestricted">Սահմանափակված հատուկ էջեր։</strong>',
+'specialpages-note' => '* Հասարակ հատուկ էջեր։
+* <span class="mw-specialpagerestricted">Սահմանափակված հատուկ էջեր։</span>',
'specialpages-group-maintenance' => 'Տեխնիկական սպասարկման տեղեկատուներ',
'specialpages-group-other' => 'Այլ հատուկ էջեր',
'specialpages-group-login' => 'Մտնել / Գրանցվել',
'duration-centuries' => '$1 {{PLURAL:$1|դար}}',
'duration-millennia' => '$1 {{PLURAL:$1|հազարամյակ}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Կաղապարների ընդարձակում',
+
);
* @author McDutchie
* @author Nemo bis
* @author Reedy
+ * @author Shirayuki
* @author Yfdyh000
* @author לערי ריינהארט
*/
'ok' => 'OK',
'retrievedfrom' => 'Obtenite de "$1"',
'youhavenewmessages' => 'Tu ha $1 ($2).',
-'newmessageslink' => 'nove messages',
-'newmessagesdifflink' => 'ultime modification',
'youhavenewmessagesfromusers' => 'Tu ha $1 de {{PLURAL:$3|un altere usator|$3 usatores}} ($2).',
'youhavenewmessagesmanyusers' => 'Tu ha $1 de multe usatores ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un nove message|$1 nove messages}}',
'invalidtitle-knownnamespace' => 'Titulo invalide con spatio de nomines "$2" e texto "$3"',
'invalidtitle-unknownnamespace' => 'Titulo invalide con spatio de nomines incognite $1 e texto "$2"',
'exception-nologin' => 'Non identificate',
-'exception-nologin-text' => 'Iste pagina o action necessita que tu aperi session in iste wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Aperi session]] pro poter acceder a iste pagina o action.',
+'exception-nologin-text-manual' => 'Es necessari $1 pro poter acceder a iste pagina o action.',
# Virus scanner
'virus-badscanner' => "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
'nosuchsectiontext' => 'Tu ha tentate modificar un section que non existe.
Illo pote haber essite displaciate o delite durante que tu legeva le pagina.',
'loginreqtitle' => 'Identification necessari',
-'loginreqlink' => 'aperir un session',
+'loginreqlink' => 'aperir session',
'loginreqpagetext' => 'Tu debe $1 pro poter vider altere paginas.',
'accmailtitle' => 'Contrasigno inviate.',
'accmailtext' => "Un contrasigno generate aleatorimente pro [[User talk:$1|$1]] ha essite inviate a $2. Illo pote esser cambiate in le pagina ''[[Special:ChangePassword|Cambiar contrasigno]]'' post que tu ha aperite un session.",
Altere administratores in {{SITENAME}} continuara a poter acceder al contento celate e pote restaurar lo per medio de iste mesme interfacie, si non se ha definite restrictiones additional.",
'revdelete-confirm' => 'Per favor confirma que tu ha le intention de facer isto, que tu comprende le consequentias, e que tu face isto in accordo con [[{{MediaWiki:Policy-url}}|le politica]].',
'revdelete-suppress-text' => "Le suppression debe '''solmente''' esser usate pro le sequente casos:
-* Informationes personal inappropriate
+* Information potentialmente diffamatori
+* Information personal inappropriate
*: ''adresses de domicilio e numeros de telephono, numeros de securitate social, etc.''",
'revdelete-legend' => 'Definir restrictiones de visibilitate',
'revdelete-hide-text' => 'Texto del version',
'revdelete-hide-user' => 'Nomine de usator o adresse IP del modificator',
'revdelete-hide-restricted' => 'Supprimer le datos a administratores assi como a alteres',
'revdelete-radio-same' => '(non cambiar)',
-'revdelete-radio-set' => 'Visibile',
-'revdelete-radio-unset' => 'Celate',
+'revdelete-radio-set' => 'Celate',
+'revdelete-radio-unset' => 'Visibile',
'revdelete-suppress' => 'Supprimer le datos a administratores assi como a alteres',
'revdelete-unsuppress' => 'Eliminar restrictiones super versiones restaurate',
'revdelete-log' => 'Motivo:',
'preferences' => 'Preferentias',
'mypreferences' => 'Preferentias',
'prefs-edits' => 'Numero de modificationes:',
-'prefsnologin' => 'Tu non ha aperite un session',
-'prefsnologintext' => 'Tu debe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aperir session]</span> pro configurar preferentias de usator.',
+'prefsnologintext2' => 'Es necessari $1 pro definir le preferentias de usator.',
'changepassword' => 'Cambiar contrasigno',
'prefs-skin' => 'Apparentia',
'skin-preview' => 'Previsualisation',
'action-reupload' => 'superscriber iste file existente',
'action-reupload-shared' => 'supplantar iste file in un repositorio commun',
'action-upload_by_url' => 'incargar iste file ab un adresse URL',
-'action-writeapi' => 'usar le API de scriptura',
+'action-writeapi' => 'usar le API pro modificar le wiki',
'action-delete' => 'deler iste pagina',
'action-deleterevision' => 'deler iste version',
'action-deletedhistory' => 'vider le historia delite de iste pagina',
'recentchanges-label-minor' => 'Isto es un modification minor',
'recentchanges-label-bot' => 'Iste modification ha essite effectuate per un robot',
'recentchanges-label-unpatrolled' => 'Iste modification non ha ancora essite patruliate',
+'recentchanges-legend-newpage' => '$1 - nove pagina',
'rcnote' => "Infra es {{PLURAL:$1|'''1''' modification|le ultime '''$1''' modificationes}} in le ultime {{PLURAL:$2|die|'''$2''' dies}}, actualisate le $4 a $5.",
'rcnotefrom' => 'infra es le modificationes a partir de <b>$2</b> (usque a <b>$1</b>).',
'rclistfrom' => 'Monstrar nove modificationes a partir de $1',
mail: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-Tu non recipera altere notificationes de activitate si tu non visita iste pagina. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
+Tu non recipera altere notificationes de activitate si tu non visita iste pagina con session aperte. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
Le systema de notification de {{SITENAME}}, a tu servicio
'allmessagesdefault' => 'Texto predefinite',
'allmessagescurrent' => 'Texto actual',
'allmessagestext' => 'Isto es un lista de messages de systema disponibile in le spatio de nomines MediaWiki.
-Per favor visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si tu desira contribuer al localisation general de MediaWiki.',
+Per favor visita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si tu desira contribuer al localisation general de MediaWiki.',
'allmessagesnotsupportedDB' => "Iste pagina non pote esser usate proque '''\$wgUseDatabaseMessages''' ha essite disactivate.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtrar per stato de personalisation:',
'svg-long-desc' => 'File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
'svg-long-desc-animated' => 'File SVG animate, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
'svg-long-error' => 'File SVG invalide: $1',
-'show-big-image' => 'Plen resolution',
+'show-big-image' => 'File original',
'show-big-image-preview' => ' Dimension de iste previsualisation: $1.',
'show-big-image-other' => 'Altere {{PLURAL:$2|resolution|resolutiones}}: $1.',
'show-big-image-size' => '$1 × $2 pixels',
# External editor support
'edit-externally' => 'Modificar iste file con un programma externe',
-'edit-externally-help' => '(Vide le [//www.mediawiki.org/wiki/Manual:External_editors instructiones de configuration] pro ulterior informationes)',
+'edit-externally-help' => '(Vide le [https://www.mediawiki.org/wiki/Manual:External_editors instructiones de configuration] pro ulterior informationes)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'totes',
'confirm-unwatch-button' => 'OK',
'confirm-unwatch-top' => 'Remover iste pagina de tu observatorio?',
+# Separators for various lists, etc.
+'quotation-marks' => '“$1”',
+
# Multipage image navigation
'imgmultipageprev' => '← precedente pagina',
'imgmultipagenext' => 'sequente pagina →',
'version-hook-subscribedby' => 'Subscribite per',
'version-version' => '(Version $1)',
'version-license' => 'Licentia',
-'version-poweredby-credits' => "Iste wiki es actionate per '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Iste wiki es actionate per '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'alteres',
'version-poweredby-translators' => 'Traductores de translatewiki.net',
'version-credits-summary' => 'Nos vole recognoscer le sequente personas pro lor contribution a [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Paginas special',
-'specialpages-note' => '----
-* Paginas special normal.
-* <span class="mw-specialpagerestricted">Paginas special restringite.</span>
-* <span class="mw-specialpagecached">Paginas special del cache (poterea esser obsolete).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Paginas special normal.
+* <span class="mw-specialpagerestricted">Paginas special restringite.</span>',
'specialpages-group-maintenance' => 'Reportos de mantenentia',
'specialpages-group-other' => 'Altere paginas special',
'specialpages-group-login' => 'Aperir session / crear conto',
'limitreport-expansiondepth' => 'Maxime profunditate de expansion',
'limitreport-expensivefunctioncount' => 'Numero de functiones analysator costose',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expander patronos',
+'expand_templates_intro' => 'Iste pagina special prende texto e expande recursivemente tote le patronos in illo.
+Illo expande etiam le functiones del analysator syntactic como
+<code><nowiki>{{</nowiki>#language:…}}</code>, e variabiles como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+De facto, illo expande quasi toto inter accolladas duple.',
+'expand_templates_title' => 'Titulo de contexto, pro {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto de entrata:',
+'expand_templates_output' => 'Resultato',
+'expand_templates_xml_output' => 'Output XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Eliminar commentos',
+'expand_templates_remove_nowiki' => 'Supprimer le etiquettas <nowiki> in le resultato',
+'expand_templates_generate_xml' => 'Monstrar arbore syntactic XML',
+'expand_templates_preview' => 'Previsualisation',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Diperoleh dari "$1"',
'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
-'newmessageslink' => 'pesan baru',
-'newmessagesdifflink' => 'perubahan terakhir',
'youhavenewmessagesfromusers' => 'Anda memiliki $1 dari {{PLURAL:$3|$3 pengguna lain}} ($2).',
'youhavenewmessagesmanyusers' => 'Anda memiliki $1 dari pengguna lain ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|pesan baru}}',
'preferences' => 'Preferensi',
'mypreferences' => 'Preferensi',
'prefs-edits' => 'Jumlah suntingan:',
-'prefsnologin' => 'Belum masuk log',
-'prefsnologintext' => 'Anda harus <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} masuk log]</span> untuk mengeset preferensi Anda.',
'changepassword' => 'Ganti kata sandi',
'prefs-skin' => 'Kulit',
'skin-preview' => 'Pratayang',
'recentchanges-label-minor' => 'Ini adalah suntingan kecil',
'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot',
'recentchanges-label-unpatrolled' => 'Suntingan ini belum terpatroli',
+'recentchanges-legend-newpage' => '$1 - halaman baru',
'rcnote' => "Berikut adalah {{PLURAL:$1|'''1'''|'''$1'''}} perubahan terbaru dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} terakhir, sampai $4 pukul $5.",
'rcnotefrom' => 'Di bawah ini adalah perubahan sejak <strong>$2</strong> (ditampilkan sampai <strong>$1</strong> perubahan).',
'rclistfrom' => 'Perlihatkan perubahan terbaru sejak $1',
'allmessagesdefault' => 'Teks baku',
'allmessagescurrent' => 'Teks sekarang',
'allmessagestext' => 'Ini adalah daftar semua pesan sistem yang tersedia dalam ruang nama MediaWiki.
-Silakan kunjungi [//www.mediawiki.org/wiki/Localisation Pelokalan MediaWiki] dan [//translatewiki.net translatewiki.net] jika Anda ingin berkontribusi untuk pelokalan generik MediaWiki.',
+Silakan kunjungi [https://www.mediawiki.org/wiki/Localisation Pelokalan MediaWiki] dan [//translatewiki.net translatewiki.net] jika Anda ingin berkontribusi untuk pelokalan generik MediaWiki.',
'allmessagesnotsupportedDB' => "Halaman ini tidak dapat digunakan karena '''\$wgUseDatabaseMessages''' telah dimatikan.",
'allmessages-filter-legend' => 'Penyaring',
'allmessages-filter' => 'Saring dengan keadaan kustomisasi:',
# External editor support
'edit-externally' => 'Sunting berkas ini dengan aplikasi luar',
-'edit-externally-help' => '(Lihat [//www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuk informasi lebih lanjut)',
+'edit-externally-help' => '(Lihat [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pengaturan] untuk informasi lebih lanjut)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'semua',
'version-version' => '(Versi $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'Lisensi',
-'version-poweredby-credits' => "Wiki ini didukung oleh '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ini didukung oleh '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
'version-poweredby-others' => 'lainnya',
'version-poweredby-translators' => 'penerjemah translatewiki.net',
'version-credits-summary' => 'Kami ingin mengakui orang-orang berikut atas kontribusinya terhadap [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Halaman istimewa',
-'specialpages-note' => '----
-* Halaman istimewa normal.
+'specialpages-note' => '* Halaman istimewa normal.
* <span class="mw-specialpagerestricted">Halaman istimewa terlarang.</span>
* <span class="mw-specialpagecached">Halaman istimewa tersinggah (mungkin usang).</span>',
'specialpages-group-maintenance' => 'Laporan pemeliharaan',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bita|bita}}',
'limitreport-expensivefunctioncount' => 'Perhitungan fungsi parser yang mahal',
+# Special:ExpandTemplates
+'expandtemplates' => 'Pengembangan templat',
+'expand_templates_intro' => 'Halaman istimewa ini mengambil teks dan mengembangkan semua templat di dalamnya secara rekursif. Halaman ini juga menerjemahkan semua fungsi parser seperti <code><nowiki>{{</nowiki>#language:…}}</code> dan variabel seperti <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Bahkan bisa dibilang mengembangkan segala sesuatu yang berada di antara dua tanda kurung.',
+'expand_templates_title' => 'Judul konteks, untuk {{FULLPAGENAME}} dan lain-lain:',
+'expand_templates_input' => 'Teks masukan:',
+'expand_templates_output' => 'Hasil',
+'expand_templates_xml_output' => 'Hasil XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Buang komentar',
+'expand_templates_remove_nowiki' => 'Tidak menampilkan tag <nowiki> pada hasilnya',
+'expand_templates_generate_xml' => 'Tampilkan pohon parser XML',
+'expand_templates_preview' => 'Pratayang',
+
);
'retrievedfrom' => 'Recuperat de "$1"',
'youhavenewmessages' => 'Vu have $1 ($2).',
-'newmessageslink' => 'nov missages',
-'newmessagesdifflink' => 'vider missages antiqui',
'youhavenewmessagesmulti' => 'Vu have nov missages in $1',
'editsection' => 'redacter',
'editold' => 'redacter',
# Preferences page
'preferences' => 'Preferenties',
'mypreferences' => 'Mi preferenties',
-'prefsnologin' => 'Vu ne ha intrat',
'changepassword' => 'Modificar passa-parol',
'skin-preview' => 'Prevision',
'saveprefs' => 'Conservar',
# External editor support
'edit-externally' => 'Redacter ti file usant un aplication extern',
-'edit-externally-help' => '(Vider li [//www.mediawiki.org/wiki/Manual:External_editors instructiones de installation] por plu information)',
+'edit-externally-help' => '(Vider li [https://www.mediawiki.org/wiki/Manual:External_editors instructiones de installation] por plu information)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'omni',
'ok' => 'Ngwanu',
'retrievedfrom' => "Wefụtàrà ya shí ''$1''",
'youhavenewmessages' => 'I nwèrè $1 ($2).',
-'newmessageslink' => 'Ozi ohúrù',
-'newmessagesdifflink' => 'mkpete azu ihe gbanwere',
'youhavenewmessagesmulti' => 'Inwere eziohu na $1',
'editsection' => 'mèzi',
'editold' => 'mèzi',
# Preferences page
'preferences' => 'Otu ha dosẹrẹ ihe',
'mypreferences' => 'Otú m shị na dose ihem',
-'prefsnologin' => 'I bátà bò',
'changepassword' => 'Gbanwe okwu éjị à gáfe',
'prefs-skin' => 'Akpụkpọ',
'skin-preview' => 'Lètú',
'recentchanges-legend' => 'Nràlụ màkà Ihe gbanwere ubwá',
'recentchanges-feed-description' => 'Chóputà ihe ógẹ ǹsò na wiki ímé órírí nke á.',
'recentchanges-label-minor' => 'Ihe bu orü ntakírí',
+'recentchanges-legend-newpage' => '$1 - ihü ohúrù',
'rcnote' => "Na àlà {{PLURAL:$1|bu gbanwere '''1'''|bu gbanwere mgbèdè nke '''$1'''}} na mgbèdè {{PLURAL:$2|chi|chi '''$2'''}}, na mgbe $5, $4.",
'rclistfrom' => 'Zìrí ihe gbanwere ọhúrù shí $1',
'rcshowhideminor' => 'orü ntákírí $1',
# External editor support
'edit-externally' => 'Rüo na élú usòrò nke na ngwa ọrụ nsónùsòrò nke ọzȯ',
-'edit-externally-help' => '(Lé nà [//www.mediawiki.org/wiki/Manual:External_editors nkụzí mbídó] màkà nkúzí ozor)',
+'edit-externally-help' => '(Lé nà [https://www.mediawiki.org/wiki/Manual:External_editors nkụzí mbídó] màkà nkúzí ozor)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'nke níle',
# Search suggestions
'searchsuggest-search' => 'Chọwa',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Ngwanu',
+
);
'ok' => 'Sige',
'retrievedfrom' => 'Naala manipud idiay "$1"',
'youhavenewmessages' => 'Addaanka ti $1 ($2).',
-'newmessageslink' => 'dagiti baro a mensahe',
-'newmessagesdifflink' => 'naudi a sinukatan',
'youhavenewmessagesfromusers' => 'Adda $1 manipud {{PLURAL:$3|ti sabali nga agar-aramat|kadagiti $3 a sabsabali nga agar-aramat}} ($2).',
'youhavenewmessagesmanyusers' => 'Adda $1 manipud kadagiti adu nga agar-aramat ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|baro a mensahem|dagiti baro a mensahem}}',
'preferences' => 'Kakaykayatan',
'mypreferences' => 'Kakaykayatan',
'prefs-edits' => 'Bilang dagiti inurnos:',
-'prefsnologin' => 'Saan a nakastrek',
-'prefsnologintext' => 'Masapul a <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakastrekka]</span> tapno makapili kadagiti kakaykayatam.',
'changepassword' => 'Baliwan ti kontrasenias',
'prefs-skin' => 'Kudil',
'skin-preview' => 'Ipadas',
'allmessagesdefault' => 'Kasisigud a testo ti mensahe',
'allmessagescurrent' => 'Agdama a testo ti mensahe',
'allmessagestext' => 'Daytoy ti listaan dagiti mensahe ti sistema a magun-od idiay MediaWiki a nagan ti espasio.
-Pangngaasi a bisitaen ti [//www.mediawiki.org/wiki/Localisation Lokalisasion ti MediaWiki] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
+Pangngaasi a bisitaen ti [https://www.mediawiki.org/wiki/Localisation Lokalisasion ti MediaWiki] ken [//translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.',
'allmessagesnotsupportedDB' => "Saan a mausar daytoy a panid ngamin ket ti '''\$wgUseDatabaseMessages''' ket nabaldado.",
'allmessages-filter-legend' => 'Sagat',
'allmessages-filter' => 'Sagaten babaen ti naipaduma a kasasaad:',
'pageinfo-length' => 'Kaatiddog ti panid (kadagiti byte)',
'pageinfo-article-id' => 'ID ti panid',
'pageinfo-language' => 'Pagsasao ti naglaon a panid',
+'pageinfo-content-model' => 'Modelo ti linaon ti panid',
'pageinfo-robot-policy' => 'Panagpasurot babaen dagiti robot',
'pageinfo-robot-index' => 'Maipalubos',
'pageinfo-robot-noindex' => 'Saan a maipalubos',
# External editor support
'edit-externally' => 'Baliwan daytoy a papeles babaen ti akinruar nga aplikasion',
-'edit-externally-help' => '(Kitaen ti [//www.mediawiki.org/wiki/Manual:External_editors instruksion iti panangikabil] para iti ad-adu pay a pakaammo).',
+'edit-externally-help' => '(Kitaen ti [https://www.mediawiki.org/wiki/Manual:External_editors instruksion iti panangikabil] para iti ad-adu pay a pakaammo).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'amin',
'version-hook-subscribedby' => 'Umanamong babaen ti',
'version-version' => '(Bersion $1)',
'version-license' => 'Lisensia',
-'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[//www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
+'version-poweredby-credits' => "Daytoy a wiki ket pinaandar ti '''[https://www.mediawiki.org/ MediaWiki]''', karbengan a kopia © 2001-$1 $2.",
'version-poweredby-others' => 'dadduma pay',
'version-poweredby-translators' => 'agipatpatarus ti translatewiki.net',
'version-credits-summary' => 'Kayatmi koma a pammadayawan dagiti sumaganad a tao para kadagiti inparawadda iti [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Espesial a pampanid',
-'specialpages-note' => '----
-* Kadawyan nga espesial a pampanid.
+'specialpages-note' => '* Kadawyan nga espesial a pampanid.
* <span class="mw-specialpagerestricted">Nagawidan nga espesial a pampanid.</span>',
'specialpages-group-maintenance' => 'Dagiti padamag ti panagtaripato',
'specialpages-group-other' => 'Sabsabali pay nga espesial a pampanid',
'limitreport-expansiondepth' => 'Kangatuan a panagpadakkel ti kauneg',
'limitreport-expensivefunctioncount' => 'Bilang ti nangina nga annong ti parser',
+# Special:ExpandTemplates
+'expandtemplates' => 'Palawaen dagiti plantilia',
+'expand_templates_intro' => 'Daytoy nga espesial a panid ket agala ti testo ken palawaenna amin dagiti plantilia iti unegna a minaig iti daytoy.
+Palawaenna pay dagiti nasuportaran a parser a pamay-an a kas ti
+<code><nowiki>{{</nowiki>#language:…}}</code> ken dagiti nadumaduma a kita a kas ti
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Iti kinapudno, palawaenna amin dagiti adda ti doble a tukol.',
+'expand_templates_title' => 'Titulo ti kontesto, para iti {{FULLPAGENAME}} kdpy.:',
+'expand_templates_input' => 'Maikabil a testo:',
+'expand_templates_output' => 'Nagbanagan',
+'expand_templates_xml_output' => 'XML a maiparang',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ikkaten dagiti komentario',
+'expand_templates_remove_nowiki' => 'Parmeken dagiti <nowiki> nga etiketa kadagiti nagbanagan',
+'expand_templates_generate_xml' => 'Iparang ti XML parse a kayo',
+'expand_templates_preview' => 'Pamadasan',
+
);
'ok' => 'ХӀаа',
'retrievedfrom' => '"$1" ГӀувам',
'youhavenewmessages' => 'Оаш $1 ($2) дӀайийцад',
-'newmessageslink' => 'керда хоамаш',
-'newmessagesdifflink' => 'тӀехьара хувцамаш',
'youhavenewmessagesmulti' => 'Оаш $1чу керда хоамаш дӀайийцад',
'editsection' => 'хувца',
'editold' => 'хувца',
# Preferences page
'preferences' => 'Оттамаш',
'mypreferences' => 'Оттамаш',
-'prefsnologin' => 'Шо чудаьнна дац',
'changepassword' => 'КъайладIоaгIа дIахувцар',
'prefs-skin' => 'БIагала куц',
'skin-preview' => 'Хьажа',
# External editor support
'edit-externally' => 'Йола болхоагIувца паьла гIалатах мукъаяьккха',
-'edit-externally-help' => '(ма даррачунга хьажа [//www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])',
+'edit-externally-help' => '(ма даррачунга хьажа [https://www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'деррига',
'ok' => 'O.K.',
'retrievedfrom' => 'Obtenita de "$1"',
'youhavenewmessages' => 'Vu havas $1 ($2).',
-'newmessageslink' => 'nova mesaji',
-'newmessagesdifflink' => 'lasta chanjo',
'youhavenewmessagesmulti' => 'Vu havas nova mesaji ye $1',
'editsection' => 'redaktar',
'editold' => 'redaktar',
'preferences' => 'Preferaji',
'mypreferences' => 'Preferaji',
'prefs-edits' => 'Nombro di redaktaji:',
-'prefsnologin' => 'Vu ne eniris',
-'prefsnologintext' => 'Vu mustas <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} enirir]</span> por establisar la preferaji.',
'changepassword' => 'Chanjar pasovorto',
'prefs-skin' => 'Pelo',
'skin-preview' => 'Pre-videz',
'recentchanges-label-newpage' => 'Ca redaktajo kreis nova pagino',
'recentchanges-label-minor' => 'Ica es mikra redaktajo',
'recentchanges-label-bot' => 'Ta chanjo facita da bot',
+'recentchanges-legend-newpage' => '$1 - nova pagino',
'rcnote' => "Infre esas la lasta {{PLURAL:$1|'''1''' chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|dio|'''$2''' dii}} ye $5, $4.",
'rcnotefrom' => "Infre esas la lasta chanji depos '''$2''' (montrita til '''$1''').",
'rclistfrom' => 'Montrar nova chanji startante de $1',
'allmessages' => 'Omna sistemo-mesaji',
'allmessagesname' => 'Nomo',
'allmessagestext' => 'Ico esas listo di omna sistemo-mesaji disponebla en la MediaWiki nomaro.
-Voluntez vizitar [//www.mediawiki.org/wiki/Localisation MediaWiki Lokizado] e [//translatewiki.net translatewiki.net] se vu volus kontributar ad generala MediaWiki lokizado.',
+Voluntez vizitar [https://www.mediawiki.org/wiki/Localisation MediaWiki Lokizado] e [//translatewiki.net translatewiki.net] se vu volus kontributar ad generala MediaWiki lokizado.',
'allmessages-language' => 'Linguo:',
# Thumbnails
'searchsuggest-search' => 'Serchez',
'searchsuggest-containing' => 'quan kontenas...',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Rezulto',
+'expand_templates_ok' => 'O.K.',
+'expand_templates_preview' => 'Previdar',
+
);
'ok' => 'Í lagi',
'retrievedfrom' => 'Sótt frá „$1“',
'youhavenewmessages' => 'Þú hefur fengið $1 ($2).',
-'newmessageslink' => 'ný skilaboð',
-'newmessagesdifflink' => 'síðasta breyting',
'youhavenewmessagesfromusers' => 'Þú hefur $1 frá {{PLURAL:$3|öðrum notanda|$3 notendum}} ($2)',
'youhavenewmessagesmanyusers' => 'Þú hefur $1 frá mörgum notendum ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ein|}} ný skilaboð',
'preferences' => 'Stillingar',
'mypreferences' => 'Mínar stillingar',
'prefs-edits' => 'Fjöldi breytinga:',
-'prefsnologin' => 'Ekki innskráður',
-'prefsnologintext' => 'Þú verður að vera <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} skráð(ur) inn]</span> til að breyta notandastillingum.',
'changepassword' => 'Breyta lykilorði',
'prefs-skin' => 'Þema',
'skin-preview' => 'Forskoða',
'recentchanges-label-minor' => 'Þetta er minniháttar breyting',
'recentchanges-label-bot' => 'Þessi breytingar var gerð af vélmenni',
'recentchanges-label-unpatrolled' => 'Þessi breyting hefur ekki verið yfirfarin',
+'recentchanges-legend-newpage' => '$1 - ný síða',
'rcnote' => "Að neðan {{PLURAL:$1|er '''1''' breyting|eru síðustu '''$1''' breytingar}} síðast {{PLURAL:$2|liðinn dag|liðna '''$2''' daga}}, frá $5, $4.",
'rcnotefrom' => "Að neðan eru breytingar síðan '''$2''' (allt að '''$1''' sýndar).",
'rclistfrom' => 'Sýna breytingar frá og með $1',
'allmessagesdefault' => 'Sjálfgefinn skilaboða texti',
'allmessagescurrent' => 'Núverandi texti',
'allmessagestext' => 'Þetta er listi yfir kerfismeldingar í Melding-nafnrýminu.
-Vinsamlegast heimsæktu [//www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
+Vinsamlegast heimsæktu [https://www.mediawiki.org/wiki/Localisation MediaWiki-staðfæringuna] og [//translatewiki.net translatewiki.net] ef þú vilt taka þátt í almennri MediaWiki-staðfæringu.',
'allmessagesnotsupportedDB' => "Það er ekki hægt að nota '''{{ns:special}}:Allmessages''' því '''\$wgUseDatabaseMessages''' hefur verið gerð óvirk.",
'allmessages-filter-legend' => 'Sía',
'allmessages-filter' => 'Sía með breytingarstöðu:',
# External editor support
'edit-externally' => 'Breyta þessari skrá með utanaðkomandi hugbúnaði',
-'edit-externally-help' => '(Sjá [//www.mediawiki.org/wiki/Manual:External_editors leiðbeiningar] fyrir meiri upplýsingar)',
+'edit-externally-help' => '(Sjá [https://www.mediawiki.org/wiki/Manual:External_editors leiðbeiningar] fyrir meiri upplýsingar)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'allt',
'confirm-unwatch-button' => 'Í lagi',
'confirm-unwatch-top' => 'Fjarlægja þessa síðu af vaktlistanum þínum?',
+# Separators for various lists, etc.
+'quotation-marks' => '„$1”',
+
# Multipage image navigation
'imgmultipageprev' => '← fyrri síða',
'imgmultipagenext' => 'næsta síða →',
'version-hook-subscribedby' => 'Í áskrift af',
'version-version' => '(Útgáfa $1)',
'version-license' => 'Leyfi',
-'version-poweredby-credits' => "Þessi wiki er knúin af '''[//www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
+'version-poweredby-credits' => "Þessi wiki er knúin af '''[https://www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
'version-poweredby-others' => 'aðrir',
'version-license-info' => 'MediaWiki er frjáls hugbúnaður; þú mátt endurútgefa hann og/eða breyta honum undir GNU General Public leyfi eins og það er gefið út af Free Software stofnuninni, annaðhvort útgáfu 2 eða (að þínu mati) hvaða nýrri útgáfa sem er.
# Special:SpecialPages
'specialpages' => 'Kerfissíður',
-'specialpages-note' => '----
-* Venjulegar kerfisíður.
+'specialpages-note' => '* Venjulegar kerfisíður.
* <span class="mw-specialpagerestricted">Kerfisíður með takmörkuðum aðgangi.</span>',
'specialpages-group-maintenance' => 'Viðhaldsskýrslur',
'specialpages-group-other' => 'Aðrar kerfissíður',
'limitreport-walltime' => 'Rauntímanotkun',
'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekúnda|sekúndur}}',
+# Special:ExpandTemplates
+'expand_templates_input' => 'Inntakstexti:',
+'expand_templates_output' => 'Útkoma',
+'expand_templates_xml_output' => 'XML-úttak',
+'expand_templates_ok' => 'Í lagi',
+'expand_templates_remove_comments' => 'Fjarlægja athugasemdir',
+'expand_templates_preview' => 'Forskoða',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Estratto da "$1"',
'youhavenewmessages' => 'Hai $1 ($2).',
-'newmessageslink' => 'nuovi messaggi',
-'newmessagesdifflink' => 'ultima modifica',
'youhavenewmessagesfromusers' => 'Hai $1 da {{PLURAL:$3|un altro utente|$3 utenti}} ($2).',
'youhavenewmessagesmanyusers' => 'Hai $1 da molti utenti ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un nuovo messaggio|nuovi messaggi}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modifica|ultime modifiche}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un nuovo messaggio|999=nuovi messaggi}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modifica|999=ultime modifiche}}',
'youhavenewmessagesmulti' => 'Hai nuovi messaggi su $1',
'editsection' => 'modifica',
'editold' => 'modifica',
'invalidtitle-knownnamespace' => 'Titolo non valido con namespace "$2" e testo "$3"',
'invalidtitle-unknownnamespace' => 'Titolo non valido con namespace sconosciuto "$1" e testo "$2"',
'exception-nologin' => 'Accesso non effettuato',
-'exception-nologin-text' => "Questa pagina o azione richiede che tu abbia effettuato l'accesso su questa wiki.",
+'exception-nologin-text' => "Si prega di [[Special:Userlogin|eseguire l'accesso]] per poter accedere a questa pagina o azione.",
+'exception-nologin-text-manual' => 'Si prega di $1 per poter accedere a questa pagina o azione.',
# Virus scanner
'virus-badscanner' => "Errore di configurazione: antivirus sconosciuto: ''$1''",
'revdelete-text' => "'''Le versioni cancellate restano visibili nella cronologia della pagina, mentre il testo contenuto non è accessibile al pubblico.'''
Gli altri amministratori di {{SITENAME}} potranno accedere comunque ai contenuti nascosti e ripristinarli attraverso questa stessa interfaccia, se non sono state impostate altre limitazioni in fase di installazione del sito.",
'revdelete-confirm' => 'Per favore conferma che questo è quanto intendi fare, che sei consapevole delle conseguenze, e che stai facendo questo nel rispetto delle [[{{MediaWiki:Policy-url}}|linee guida]].',
-'revdelete-suppress-text' => "La rimozione deve essere utilizzata '''unicamente''' nei seguenti casi:
-* Dati personali inopportuni
+'revdelete-suppress-text' => "La rimozione dovrebbe essere utilizzata '''unicamente''' nei seguenti casi:
+* informazioni potenzialmente diffamatorie
+* dati personali inopportuni
*: ''indirizzi, numeri di telefono, codici fiscali, ecc.''",
'revdelete-legend' => 'Imposta le seguenti limitazioni sulle versioni cancellate:',
'revdelete-hide-text' => 'Testo della versione',
'revdelete-hide-user' => "Nome o indirizzo IP dell'autore",
'revdelete-hide-restricted' => 'Nascondi le informazioni indicate anche agli amministratori',
'revdelete-radio-same' => '(non cambiare)',
-'revdelete-radio-set' => 'Visibile',
-'revdelete-radio-unset' => 'Nascosto',
+'revdelete-radio-set' => 'Nascondi',
+'revdelete-radio-unset' => 'Mostra',
'revdelete-suppress' => 'Nascondi le informazioni anche agli amministratori',
'revdelete-unsuppress' => 'Elimina le limitazioni sulle revisioni ripristinate',
'revdelete-log' => 'Motivo:',
'preferences' => 'Preferenze',
'mypreferences' => 'preferenze',
'prefs-edits' => 'Modifiche effettuate:',
-'prefsnologin' => 'Accesso non effettuato',
-'prefsnologintext' => 'Per poter personalizzare le preferenze è necessario effettuare l\'<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} accesso]</span>.',
+'prefsnologintext2' => "Si prega di $1 per impostare le preferenze dell'utente.",
'changepassword' => 'Cambia password',
'prefs-skin' => 'Aspetto grafico (skin)',
'skin-preview' => 'Anteprima',
'recentchanges-label-minor' => 'Questa è una modifica minore',
'recentchanges-label-bot' => 'Questa modifica è stata effettuata da un bot',
'recentchanges-label-unpatrolled' => 'Questa modifica non è stata ancora verificata',
+'recentchanges-legend-newpage' => '$1 - nuova pagina',
'rcnote' => "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le '''$1''' modifiche più recenti apportate}} al sito {{PLURAL:$2|nelle ultime 24 ore|negli scorsi '''$2''' giorni}}; i dati sono aggiornati alle $5 del $4.",
'rcnotefrom' => "Di seguito sono elencate le modifiche apportate a partire da '''$2''' (fino a '''$1''').",
'rclistfrom' => 'Mostra le modifiche apportate a partire da $1',
via posta elettronica: $PAGEEDITOR_EMAIL
sul sito: $PAGEEDITOR_WIKI
-Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
+Non verranno inviate altre notifiche in caso di ulteriori attività, se non visiti la pagina dopo aver effettuato l\'accesso. Inoltre, è possibile modificare le impostazioni di notifica per tutte le pagine nella lista degli osservati speciali.
- Il sistema di notifica di {{SITENAME}}, al tuo servizio
+Il sistema di notifica di {{SITENAME}}, al tuo servizio
--
Per modificare le impostazioni delle notifiche via posta elettronica, visita
'allmessagesdefault' => 'Testo predefinito',
'allmessagescurrent' => 'Testo attuale',
'allmessagestext' => 'Questa è la lista di tutti i messaggi di sistema disponibili nel namespace MediaWiki.
-Visitare [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se si desidera contribuire alla localizzazione generica di MediaWiki.',
+Visitare [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se si desidera contribuire alla localizzazione generica di MediaWiki.',
'allmessagesnotsupportedDB' => "Non è possibile utilizzare questa pagina perché il flag '''\$wgUseDatabaseMessages''' non è attivo.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtra per stato di modifica:',
'svg-long-desc' => 'file in formato SVG, dimensioni nominali $1 × $2 pixel, dimensione del file: $3',
'svg-long-desc-animated' => 'file in formato SVG animato, dimensioni nominali $1 × $2 pixel, dimensione del file: $3',
'svg-long-error' => 'File SVG non valido: $1',
-'show-big-image' => 'Versione ad alta risoluzione',
+'show-big-image' => 'File originale',
'show-big-image-preview' => 'Dimensioni di questa anteprima: $1.',
'show-big-image-other' => '{{PLURAL:$2|Altra risoluzione|Altre risoluzioni}}: $1.',
'show-big-image-size' => '$1 × $2 pixel',
# External editor support
'edit-externally' => 'Modifica questo file usando un programma esterno',
-'edit-externally-help' => '(Per maggiori informazioni consultare le [//www.mediawiki.org/wiki/Manual:External_editors istruzioni])',
+'edit-externally-help' => '(Per maggiori informazioni consultare le [https://www.mediawiki.org/wiki/Manual:External_editors istruzioni])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tutte',
# Separators for various lists, etc.
'percent' => '$1 %',
+'quotation-marks' => '«$1»',
# Multipage image navigation
'imgmultipageprev' => '← pagina precedente',
'version-hook-subscribedby' => 'Sottoscrizioni',
'version-version' => '(Versione $1)',
'version-license' => 'Licenza',
-'version-poweredby-credits' => "Questo wiki è realizzato con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Questo wiki è realizzato con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'altri',
'version-poweredby-translators' => 'traduttori di translatewiki.net',
'version-credits-summary' => 'Siamo lieti di riconoscere le seguenti persone per aver contribuito a [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Pagine speciali',
-'specialpages-note' => '----
-* Pagine speciali non riservate.
-* <span class="mw-specialpagerestricted">Pagine speciali riservate ad alcune categorie di utenti.</span>
-* <span class="mw-specialpagecached">Pagine speciali disponibili in versione cache (potrebbero essere obsolete).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Pagine speciali non riservate.
+* <span class="mw-specialpagerestricted">Pagine speciali riservate ad alcune categorie di utenti.</span>',
'specialpages-group-maintenance' => 'Resoconti di manutenzione',
'specialpages-group-other' => 'Altre pagine speciali',
'specialpages-group-login' => 'Accesso / creazione utenze',
'limitreport-expansiondepth' => 'Massima profondità di espansione',
'limitreport-expensivefunctioncount' => 'Numero funzioni parser dispendiose',
+# Special:ExpandTemplates
+'expandtemplates' => 'Espansione dei template',
+'expand_templates_intro' => 'Questa pagina speciale elabora un testo espandendo tutti i template presenti.
+Calcola inoltre il risultato delle funzioni supportate dal parser come
+<code><nowiki>{{</nowiki>#language:…}}</code> e delle variabili di sistema quali
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>,
+vale a dire praticamente tutto ciò che si trova tra doppie parentesi graffe.',
+'expand_templates_title' => 'Contesto (per {{FULLPAGENAME}} ecc.):',
+'expand_templates_input' => 'Testo da espandere:',
+'expand_templates_output' => 'Risultato',
+'expand_templates_xml_output' => 'Output in formato XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ignora i commenti',
+'expand_templates_remove_nowiki' => 'Elimina il tag <nowiki> nel risultato',
+'expand_templates_generate_xml' => 'Mostra albero sintattico XML',
+'expand_templates_preview' => 'Anteprima',
+
);
'ok' => 'OK',
'retrievedfrom' => '「$1」から取得',
'youhavenewmessages' => '$1があります ($2)。',
-'newmessageslink' => '新着メッセージ',
-'newmessagesdifflink' => '最新の差分',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|他の利用者|$3 人の利用者}}からの$1があります ($2)。',
'youhavenewmessagesmanyusers' => '多数の利用者からの$1があります ($2)。',
'newmessageslinkplural' => '{{PLURAL:$1|新着メッセージ}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|最新の差分|最新版までの差分}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|最新の差分|999=最新版までの差分}}',
'youhavenewmessagesmulti' => '$1に新着メッセージがあります',
'editsection' => '編集',
'editold' => '編集',
'invalidtitle-knownnamespace' => '名前空間名「$2」と名前「$3」の組み合わせはページ名として無効です',
'invalidtitle-unknownnamespace' => '不明な名前空間番号 $1 と名前「$2」の組み合わせはページ名として無効です',
'exception-nologin' => 'ログインしていません',
-'exception-nologin-text' => 'このページまたは操作には、このウィキへのログインが必要です。',
+'exception-nologin-text' => 'このページまたは操作にアクセスできるようにするには[[Special:Userlogin|ログイン]]してください。',
+'exception-nologin-text-manual' => 'このページまたは操作にアクセスできるようにするには$1してください。',
# Virus scanner
'virus-badscanner' => "環境設定が不適合です: 不明なウイルス対策ソフトウェア: ''$1''",
ページによっては、ブラウザーのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
'welcomeuser' => 'ようこそ、$1さん!',
'welcomecreation-msg' => 'アカウントが作成されました。
-[[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
+お好みで[[Special:Preferences|{{SITENAME}}の個人設定]]を変更できます。',
'yourname' => '利用者名:',
'userlogin-yourname' => '利用者名',
'userlogin-yourname-ph' => '利用者名を入力',
'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
* 名誉毀損のおそれがある記述
* 非公開個人情報
-*: ''自宅の住所、電話番号、社会保障番号など''",
+*: ''自宅の住所、電話番号、個人を識別できる公的な番号など''",
'revdelete-legend' => '閲覧レベル制限を設定',
'revdelete-hide-text' => '版の本文',
'revdelete-hide-image' => 'ファイル内容を隠す',
'revdelete-hide-user' => '投稿者の利用者名/IPアドレス',
'revdelete-hide-restricted' => '他の利用者と同様に管理者からもデータを隠す',
'revdelete-radio-same' => '(変更しない)',
-'revdelete-radio-set' => '表示',
-'revdelete-radio-unset' => 'é\9d\9e表示',
+'revdelete-radio-set' => '非公開',
+'revdelete-radio-unset' => 'é\96²è¦§å\8f¯è\83½',
'revdelete-suppress' => '他の利用者と同様に管理者からもデータを隠す',
'revdelete-unsuppress' => '復元版に対する制限を除去',
'revdelete-log' => '理由:',
'preferences' => '個人設定',
'mypreferences' => '個人設定',
'prefs-edits' => '編集回数:',
-'prefsnologin' => 'ログインしていません',
-'prefsnologintext' => '個人設定を変更するためには<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ログイン]</span>する必要があります。',
+'prefsnologintext2' => '個人設定を変更するには$1してください。',
'changepassword' => 'パスワードの変更',
'prefs-skin' => '外装',
'skin-preview' => 'プレビュー',
'recentchanges-label-minor' => 'これは細部の編集です',
'recentchanges-label-bot' => 'この編集はボットによって行われました',
'recentchanges-label-unpatrolled' => 'この編集はまだ巡回されていません',
+'recentchanges-legend-newpage' => '$1 - 新しいページ',
'rcnote' => "$4 $5 までの{{PLURAL:$2|'''$2'''日間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
'rcnotefrom' => "以下は'''$2'''以降の更新です (最大 '''$1''' 件)。",
'rclistfrom' => '$1以降の更新を表示する',
メール: $PAGEEDITOR_EMAIL
ウィキ: $PAGEEDITOR_WIKI
-このページを訪れない限り、これ以上の活動に対する通知は送信されません。ウォッチリスト内のすべてのページについて、通知を再設定することもできます。
+ã\83ã\82°ã\82¤ã\83³ã\81\97ã\81\9fç\8a¶æ\85\8bã\81§ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92訪ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81ã\81\93ã\82\8c以ä¸\8aã\81®æ´»å\8b\95ã\81«å¯¾ã\81\99ã\82\8bé\80\9aç\9f¥ã\81¯é\80\81ä¿¡ã\81\95ã\82\8cã\81¾ã\81\9bã\82\93ã\80\82ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88å\86\85ã\81®ã\81\99ã\81¹ã\81¦ã\81®ã\83\9aã\83¼ã\82¸ã\81«ã\81¤ã\81\84ã\81¦ã\80\81é\80\9aç\9f¥ã\82\92å\86\8dè¨å®\9aã\81\99ã\82\8bã\81\93ã\81¨ã\82\82ã\81§ã\81\8dã\81¾ã\81\99ã\80\82
- {{SITENAME}}通知システム
+{{SITENAME}}通知システム
--
メール通知の設定は、以下のページで変更してください:
'allmessagesdefault' => '既定のメッセージ文',
'allmessagescurrent' => '現在のメッセージ文',
'allmessagestext' => 'これは MediaWiki 名前空間で利用できるシステム メッセージの一覧です。
-MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ]や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
+MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、[https://www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ]や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''が無効のため、このページを使用できません。",
'allmessages-filter-legend' => '絞り込み',
'allmessages-filter' => '変更状態により絞り込む:',
'tooltip-undo' => '「取り消し」はこの編集を差し戻し、編集画面をプレビュー付きで開きます。要約欄に理由を追加できます。',
'tooltip-preferences-save' => '設定を保存する',
'tooltip-summary' => '短い要約を入力してください',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/* ここに記述したCSSはすべての外装に反映されます */',
'svg-long-desc' => 'SVG ファイル、$1 × $2 ピクセル、ファイルサイズ: $3',
'svg-long-desc-animated' => 'アニメーション SVG ファイル、$1 × $2 ピクセル、ファイルサイズ: $3',
'svg-long-error' => '無効な SVG ファイル: $1',
-'show-big-image' => '高解像度での画像',
+'show-big-image' => '元のファイル',
'show-big-image-preview' => 'このプレビューのサイズ: $1。',
'show-big-image-other' => 'その他の{{PLURAL:$2|解像度}}: $1。',
'show-big-image-size' => '$1 × $2 ピクセル',
# External editor support
'edit-externally' => '外部アプリケーションを使用してこのファイルを編集',
-'edit-externally-help' => '(詳しくは[//www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
+'edit-externally-help' => '(詳しくは[https://www.mediawiki.org/wiki/Manual:External_editors 設定手順]をご覧ください)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'すべて',
'pipe-separator' => ' | ',
'word-separator' => ' ',
'parentheses' => '($1)',
+'quotation-marks' => '「$1」',
# Multipage image navigation
'imgmultipageprev' => '←前ページ',
'version-hook-subscribedby' => '使用個所',
'version-version' => '(バージョン $1)',
'version-license' => 'ライセンス',
-'version-poweredby-credits' => "このウィキは、'''[//www.mediawiki.org/ MediaWiki]''' (copyright © 2001-$1 $2) で動作しています。",
+'version-poweredby-credits' => "このウィキは、'''[https://www.mediawiki.org/ MediaWiki]''' (copyright © 2001-$1 $2) で動作しています。",
'version-poweredby-others' => 'その他',
'version-poweredby-translators' => 'translatewiki.net の翻訳者たち',
'version-credits-summary' => '[[Special:Version|MediaWiki]] に貢献した以下の人たちに感謝します。',
# Special:SpecialPages
'specialpages' => '特別ページ',
-'specialpages-note' => '----
-* 通常の特別ページ
+'specialpages-note-top' => '凡例',
+'specialpages-note' => '* 通常の特別ページ
* <span class="mw-specialpagerestricted">制限されている特別ページ</span>',
'specialpages-group-maintenance' => 'メンテナンス報告',
'specialpages-group-other' => 'その他の特別ページ',
'limitreport-expansiondepth' => '展開の最大深さ',
'limitreport-expensivefunctioncount' => '高負荷パーサー関数の数',
+# Special:ExpandTemplates
+'expandtemplates' => 'テンプレートを展開',
+'expand_templates_intro' => 'この特別ページは、入力したテキストに含まれるすべてのテンプレートを再帰的に展開します。
+<code><nowiki>{{</nowiki>#language:…}}</code> のようなパーサー関数や、
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> のような変数も展開します。
+つまり、二重中括弧で囲まれたものほぼすべてを展開します。',
+'expand_templates_title' => '{{FULLPAGENAME}} などで使用するページ名:',
+'expand_templates_input' => '展開するテキスト:',
+'expand_templates_output' => '展開結果',
+'expand_templates_xml_output' => 'XML 出力',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'コメントを除去',
+'expand_templates_remove_nowiki' => '結果に含まれる <nowiki> タグを表示しない',
+'expand_templates_generate_xml' => 'XML 構文解析ツリーを表示',
+'expand_templates_preview' => 'プレビュー',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Richriiv frahn "$1"',
'youhavenewmessages' => 'Yu gat $1 ($2).',
-'newmessageslink' => 'nyuu mechiz',
-'newmessagesdifflink' => 'laas chienj',
'youhavenewmessagesmulti' => 'Yu gat nyuu mechiz pahn $1',
'editsection' => 'edit',
'editold' => 'edit',
# External editor support
'edit-externally' => 'Yuuz extoernal aplikieshan fi edit dis fail',
-'edit-externally-help' => '(Si di [//www.mediawiki.org/wiki/Manual:External_editors setop inschrokshan] fi muo infamieshan)',
+'edit-externally-help' => '(Si di [https://www.mediawiki.org/wiki/Manual:External_editors setop inschrokshan] fi muo infamieshan)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'aal',
'ok' => 'OK',
'retrievedfrom' => 'Sumber artikel iki saka kaca situs web: "$1"',
'youhavenewmessages' => 'Panjenengan kagungan $1 ($2).',
-'newmessageslink' => 'warta énggal',
-'newmessagesdifflink' => 'mirsani bédané saka révisi sadurungé',
'youhavenewmessagesfromusers' => 'Sampéyan nduwé $1 saka {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).',
'youhavenewmessagesmanyusers' => 'Sampéyang nduwé $1 saka akèh panganggo ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|layang anyar|layang anyar}}',
'preferences' => 'Preferensi (pilihan)',
'mypreferences' => 'Préferènsi',
'prefs-edits' => 'Gunggungé suntingan:',
-'prefsnologin' => 'Durung mlebu log',
-'prefsnologintext' => 'Panjenengan kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}| mlebu log]</span> kanggo ngowahin préferènsi njenengan.',
'changepassword' => 'Ganti tembung sandi',
'prefs-skin' => 'Kulit',
'skin-preview' => 'Pratilik',
'recentchanges-label-minor' => 'Iki suntingan sithik',
'recentchanges-label-bot' => 'Suntingan iki diayahi déning bot',
'recentchanges-label-unpatrolled' => 'Suntingan iki durung dipatroli',
+'recentchanges-legend-newpage' => '$1 - kaca anyar',
'rcnote' => 'Ing ngisor iki kapacak {{PLURAL:$1|pangowahan|owah-owahan}} pungkasan ing <strong>$2</strong> dina pungkasan ing $5, $4.',
'rcnotefrom' => 'Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).',
'rclistfrom' => 'Saiki nuduhaké owah-owahan wiwit tanggal $1',
'allmessagesdefault' => 'Tèks baku',
'allmessagescurrent' => 'Tèks saiki',
'allmessagestext' => 'Iki dhaptar kabèh pesen saka sistem sing ana ing bilik jeneng MediaWiki.
-Mangga pirsani [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] lan [//translatewiki.net translatewiki.net] yèn panjenengan arep kontribusi ing lokalisasi generik MediaWiki.',
+Mangga pirsani [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] lan [//translatewiki.net translatewiki.net] yèn panjenengan arep kontribusi ing lokalisasi generik MediaWiki.',
'allmessagesnotsupportedDB' => "Kaca iki ora bisa dienggo amerga '''\$wgUseDatabaseMessages''' dipatèni.",
'allmessages-filter-legend' => 'Penyaring',
'allmessages-filter' => 'Saring nganggo kahanan kustomisasi:',
# External editor support
'edit-externally' => 'Sunting berkas iki mawa aplikasi jaba',
-'edit-externally-help' => '(Deleng [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
+'edit-externally-help' => '(Deleng [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kabèh',
'version-hook-subscribedby' => 'Dilanggani déning',
'version-version' => '(Vèrsi $1)',
'version-license' => 'Lisènsi',
-'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki iki disengkuyung déning '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
'version-poweredby-others' => 'liyané',
'version-credits-summary' => 'Kami ingin mengakui orang-orang berikut atas kontribusinya terhadap [[Special:Version|MediaWiki]].',
'version-license-info' => 'MediaWiki adalah perangkat lunak bebas; Anda diperbolehkan untuk mendistribusikan dan/atau memodfikasinya dengan persyaratan Lisensi Publik Umum GNU yang diterbitkan oleh Free Software Foundation; versi 2 atau terbaru.
# Special:SpecialPages
'specialpages' => 'Kaca istiméwa',
-'specialpages-note' => '----
-* Kaca astamiwa biasa.
+'specialpages-note' => '* Kaca astamiwa biasa.
* <span class="mw-specialpagerestricted">Kaca astamiwa kawatesan.</span>',
'specialpages-group-maintenance' => 'Lapuran pangopènan',
'specialpages-group-other' => 'Kaca-kaca astaméwa liyané',
# Image rotation
'rotate-comment' => 'Gambar diubengaké $1 {{PLURAL:$1|drajat|drajat}} sak arah domé jam',
+# Special:ExpandTemplates
+'expandtemplates' => 'Cithakan dikembangaké',
+'expand_templates_intro' => 'Kaca astaméwa iki njupuk sawetara tèks lan ngembangaké kabèh cithakan sajroning iku sacara rékursif.
+Kaca iki uga ngembangaké fungsi parser kaya ta
+<nowiki>{{</nowiki>#language:…}}, lan variabel kaya ta
+<nowiki>{{</nowiki>CURRENTDAY}}—sajatiné mèh kabèh sing ana ing antara rong tandha kurung akolade.
+Perkara iki dilakokaké caranémawa nyeluk tahapan parser sing rélévan saka MediaWiki dhéwé.',
+'expand_templates_title' => 'Irah-irahan kontèks, kanggo {{FULLPAGENAME}} lan sabanjuré:',
+'expand_templates_input' => 'Tèks sumber:',
+'expand_templates_output' => 'Pituwas (kasil)',
+'expand_templates_xml_output' => 'Pituwas XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Busaken komentar',
+'expand_templates_remove_nowiki' => 'Brèdèl tag <nowiki> nèng asilé',
+'expand_templates_generate_xml' => 'Tuduhna uwit parser XML',
+'expand_templates_preview' => 'Pratayang',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'მოძიებულია „$1“-დან',
'youhavenewmessages' => 'თქვენ გაქვთ $1 ($2).',
-'newmessageslink' => 'ახალი შეტყობინებები',
-'newmessagesdifflink' => 'განსხვავება წინა ვერსიასთან',
'youhavenewmessagesfromusers' => 'თქვენ გაქვთ $1 {{PLURAL:$3|სხვა მომხმარებლისგან|$3 მომხმარებლებისგან}} ($2).',
'youhavenewmessagesmanyusers' => 'თქვენ გაქვთ $1 ბევრი მომხმარებლისგან ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ახალი შეტყობინება|ახალი შეტყობინება}}',
'preferences' => 'კონფიგურაცია',
'mypreferences' => 'კონფიგურაცია',
'prefs-edits' => 'რედაქციების რაოდენობა:',
-'prefsnologin' => 'შესული არ ხართ',
-'prefsnologintext' => 'თქვენ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} რეგისტრირებული უნდა იყოთ]</span> მომხმარებლის კონფიგურაციის შესაცვლელად.',
'changepassword' => 'პაროლის შეცვლა',
'prefs-skin' => 'გარეკანი',
'skin-preview' => 'წინასწარი გადახედვა',
'recentchanges-label-minor' => 'ეს არის მცირე შესწორება',
'recentchanges-label-bot' => 'ეს არის ბოტის რედაქტირება',
'recentchanges-label-unpatrolled' => 'ეს რედაქტირება გადაუმოწმებელია',
+'recentchanges-legend-newpage' => '$1 - ახალი გვერდი',
'rcnote' => "ქვემოთ იხილეთ ბოლო '''$1''' ცვლილება უკანასკნელი '''$2''' დღის მანძილზე, $5, $4 მდგომარეობით.",
'rcnotefrom' => "ქვემოთ მოყვანილია ცვლილებები '''$2'''-დან (ნაჩვენებია '''$1''').",
'rclistfrom' => 'ახალი ცვლილებების ჩვენება დაწყებული $1-დან',
'allmessagesdefault' => 'სტანდარტული ტექსტი',
'allmessagescurrent' => 'მიმდინარე ტექსტი',
'allmessagestext' => 'ეს არის სისემურ შეტყობინებათა სია «MediaWiki» სახელთა სივრცეში.
-გთხოვთ ეწვიოთ [//www.mediawiki.org/wiki/Localisation ლოკალიზაციის აღმწერ] გვერდს [//translatewiki.net translatewiki.net] პროექტს, თუ გსურთ MediaWiki ლოკალიზაციაში წვლილის შეტანა.',
+გთხოვთ ეწვიოთ [https://www.mediawiki.org/wiki/Localisation ლოკალიზაციის აღმწერ] გვერდს [//translatewiki.net translatewiki.net] პროექტს, თუ გსურთ MediaWiki ლოკალიზაციაში წვლილის შეტანა.',
'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages-ის უზრუნველყოფა არ ხდება, ვინაიდან wgUseDatabaseMessages გამორთულია.',
'allmessages-filter-legend' => 'ფილტრი',
'allmessages-filter' => 'ფილტრი ცვლილებების სტატუსით:',
'tooltip-undo' => 'შეტანილი ცვლილებების გაუქმება და წინასწარ გადახედვის ჩვენება, გაუქმების მიზეზის სქოლიოში ჩაწერასთან ერთად.',
'tooltip-preferences-save' => 'შეინახეთ კონფიგურაცია',
'tooltip-summary' => 'შეიყვანეთ მოკლე სქოლიო',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
# Stylesheets
'common.css' => '/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */',
# External editor support
'edit-externally' => 'ამ ფაილის რედაქტირებისას გამოიყენეთ გარე პროგრამა',
-'edit-externally-help' => '(დაწვრილებითი ინფორმაციისთვის იხილეთ [//www.mediawiki.org/wiki/Manual:External_editors ჩადგმის ინსტრუქციები])',
+'edit-externally-help' => '(დაწვრილებითი ინფორმაციისთვის იხილეთ [https://www.mediawiki.org/wiki/Manual:External_editors ჩადგმის ინსტრუქციები])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ყველა',
'version-version' => '(ვერსია $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'ლიცენზია',
-'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[//www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[https://www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
'version-poweredby-others' => 'სხვები',
'version-poweredby-translators' => 'translatewiki.net-ის მთარგმნელები',
'version-credits-summary' => 'გვინდა მადლობა გადავუხადოთ შემდეგ მომხმარებლებს მათი წვლილისათვის [[Special:Version|მედიავიკის]] განვითარებაში.',
# Special:SpecialPages
'specialpages' => 'სპეციალური გვერდები',
-'specialpages-note' => '----
-* ჩვეულებრივი სპეცგვერდები.
+'specialpages-note' => '* ჩვეულებრივი სპეცგვერდები.
* <span class="mw-specialpagerestricted">სპეცგვერდები შეზღუდული მისაწვდომობით.</span>',
'specialpages-group-maintenance' => 'ტექნიკური მომსახურების ანგარიშები',
'specialpages-group-other' => 'სხვა სპეციალური გვერდები',
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'გაშლილი თარგები',
+'expand_templates_title' => 'კონტექსტის სათაური, {{FULLPAGENAME}}-სთვის და ა.შ.:',
+'expand_templates_input' => 'შესაყვანი ტექსტი:',
+'expand_templates_output' => 'შედეგი',
+'expand_templates_xml_output' => 'XML-ის გამოტანა',
+'expand_templates_ok' => 'შესრულება',
+'expand_templates_remove_comments' => 'კომენტარების წაშლა',
+'expand_templates_remove_nowiki' => 'ტეგების დათრგუნვა <nowiki> შედეგში',
+'expand_templates_preview' => 'წინა',
+
);
'ok' => 'OK',
'retrievedfrom' => '"$1" saytınan alıng\'an',
'youhavenewmessages' => 'Sizge $1 bar ($2).',
-'newmessageslink' => "jan'a xabarlar",
-'newmessagesdifflink' => "aqırg'ı o'zgeris",
'youhavenewmessagesmulti' => "$1 betinde sizge jan'a xabarlar bar",
'editsection' => "o'zgertiw",
'editold' => "o'zgertiw",
'preferences' => 'Sazlawlar',
'mypreferences' => "Menin' sazlawlarım",
'prefs-edits' => "O'zgertiwler sanı:",
-'prefsnologin' => 'Kirilmegen',
-'prefsnologintext' => 'Sazlawların\'ızdı ornatıw ushın <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kiriwin\'iz]</span> sha\'rt.',
'changepassword' => "Paroldi o'zgertiw",
'prefs-skin' => "Sırtqı ko'rinis",
'skin-preview' => 'Korip al',
'recentchanges-label-minor' => "Bul kishi o'zgeris",
'recentchanges-label-bot' => "Bul o'zgeristi bot kiritti",
'recentchanges-label-unpatrolled' => "Bul o'zgeris ele baqlanbag'an",
+'recentchanges-legend-newpage' => '$1 - taza bet',
'rcnote' => "To'mende $4, $5 waqtındag'ı aqırg'ı {{PLURAL:$2|ku'ndegi|'''$2''' ku'ndegi}} {{PLURAL:$1|'''1''' o'zgeris ko'rsetilgen|aqırg'ı '''$1''' o'zgeris ko'rsetilgen}}.",
'rcnotefrom' => "To'mende '''$2''' baslap '''$1''' shekemgi o'zgerisler ko'rsetilgen.",
'rclistfrom' => "$1 waqtınan baslap jan'a o'zgerisler ko'rset",
'allmessagesdefault' => 'Defolt tekst',
'allmessagescurrent' => "Ha'zirgi tekst",
'allmessagestext' => "Bul {{ns:mediawiki}} isimler ko'pligindegi bar bolg'an sistema xabarları dizimi.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
# Thumbnails
'thumbnail-more' => "U'lkeytiw",
# External editor support
'edit-externally' => "Bul fayldı sırtqı bag'darlama arqalı o'zgertiw",
-'edit-externally-help' => "(Ko'birek mag'lıwmat ushın [//www.mediawiki.org/wiki/Manual:External_editors ornatıw jolların] qaran')",
+'edit-externally-help' => "(Ko'birek mag'lıwmat ushın [https://www.mediawiki.org/wiki/Manual:External_editors ornatıw jolların] qaran')",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => "ha'mmesin",
'ok' => 'Seɣbel',
'retrievedfrom' => 'Yettwaddem seg "$1"',
'youhavenewmessages' => 'Ɣur-k $1 ($2).',
-'newmessageslink' => 'Izen amaynut',
-'newmessagesdifflink' => 'Abeddel aneggaru',
'youhavenewmessagesfromusers' => 'Tesɛiḍ $1 n {{PLURAL:$3|useqdac nniḍen|$3 iseqdacen nniḍen}} ( $2 ).',
'youhavenewmessagesmanyusers' => 'Tesɛiḍ $1 n aṭas n iseqdacen ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|izen amaynut|inzan imaynuten}}',
'preferences' => 'Isemyifiyen',
'mypreferences' => 'Isemyifiyen inu',
'prefs-edits' => 'Amḍan n ibeddlilen :',
-'prefsnologin' => 'Ur tekcimeḍ ara',
-'prefsnologintext' => 'Ilaq ad iliḍ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} qqeneḍ]</span> iwakken ad beddeleḍ iɣewwaren ik/im n useqdac.',
'changepassword' => 'Beddel awal n tbaḍnit',
'prefs-skin' => 'Aglim',
'skin-preview' => 'Pre-timeẓriwt',
'allmessagesdefault' => 'Aḍris ameslugen',
'allmessagescurrent' => 'Aḍris n tura',
'allmessagestext' => 'Wagi d-umuɣ n inzan yestufan deg tallunt MediaWiki.
-Ẓeṛ [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dɣa [//translatewiki.net translatewiki.net] ma tebɣiḍ ad ɛiweneḍ i usideg imcettel n MediaWiki.',
+Ẓeṛ [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dɣa [//translatewiki.net translatewiki.net] ma tebɣiḍ ad ɛiweneḍ i usideg imcettel n MediaWiki.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ut yezmir ara ad yettuseqdac axaṭer '''\$wgUseDatabaseMessages''' yettwakkes.",
'allmessages-filter-legend' => 'Tastayt',
'allmessages-filter-unmodified' => 'Ur yebeqqeḍ ara',
# External editor support
'edit-externally' => 'Beddel afaylu-yagi s usnas aberrani.',
-'edit-externally-help' => 'Ẓer [//www.mediawiki.org/wiki/Manual:External_editors taknut] iwakken ad tessneḍ kter.',
+'edit-externally-help' => 'Ẓer [https://www.mediawiki.org/wiki/Manual:External_editors taknut] iwakken ad tessneḍ kter.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'akk',
'ok' => 'ОК',
'retrievedfrom' => 'Къыздырахар: "$1"',
'youhavenewmessages' => 'КъыпхуэкӀуауэ уиӀэ $1 ($2).',
-'newmessageslink' => 'тхыгъэщIэхэр',
-'newmessagesdifflink' => 'иужьрей зэхъуэкІыныгъэр',
'youhavenewmessagesmulti' => 'КъыпхуэкӀуауэ уиӀэ тхыгъэщӀэхэр $1 идеж',
'editsection' => 'гъэтэрэзын',
'editold' => 'гъэтэрэзын',
'preferences' => 'Зэгъэзэхуэпхъэхэр',
'mypreferences' => 'Си зэгъэзэхуэгъуэхэр',
'prefs-edits' => 'Гъэтэрэзыгъуэхэм я бжыгъэр:',
-'prefsnologin' => 'Системэм зыкъебгъэцӀыхуакъым',
-'prefsnologintext' => 'ЦӀыхухэтым и зэгъэзэхуэгъуэхэм уелэжьын щхьэкӀэ системэм <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} зыкъебгъэцӀыхун хуэй]</span>',
'prefs-skin' => 'ЗэфӀэгъувэным и теухуапхъэ',
'prefs-datetime' => 'Махуэмрэ зэманымрэ',
'prefs-personal' => 'Ныбжыгъуэ къэӀохугъуэ',
# External editor support
'edit-externally' => 'Файлыр гъэтэрэзын, нэгъуэщӀ программэ и сэбэпкӀэ',
-'edit-externally-help' => '(нэхъыбу еплъ [//www.mediawiki.org/wiki/Manual:External_editors илъхьэным и тепсэлъыхьыгъуэ])',
+'edit-externally-help' => '(нэхъыбу еплъ [https://www.mediawiki.org/wiki/Manual:External_editors илъхьэным и тепсэлъыхьыгъуэ])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'псори',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => '‘‘$1’’ نقل کاردو',
'youhavenewmessages' => 'تہ بچے ای $1 شیر۔ ($2)',
-'newmessageslink' => 'نوغ پیغامات',
-'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـراری فـرق',
'youhavenewmessagesmulti' => 'ء$1 تہ بچے نوغ نوغ پیغامات شینی',
'editsection' => 'ترمیم',
'editold' => 'ترمیم',
# External editor support
'edit-externally' => 'ھیہ مسلو ایڈیٹ کورے',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)
-(مزید معلوماتو بچے ھیہ لنکہ بوغے [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] )',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)
+(مزید معلوماتو بچے ھیہ لنکہ بوغے [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] )',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'سف',
* @file
*
* @author Erdemaslancan
+ * @author Gorizon
* @author Mirzali
*/
'pool-errorunknown' => 'Xeta nêzanıtiye',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => 'Heqa {{SITENAME}} de',
+'aboutsite' => 'Heqdé {{SITENAME}}',
'aboutpage' => 'Project:Heqa',
'copyright' => 'Zerrek bınê $1 dero.',
'copyrightpage' => '{{ns:project}}:Telifheqiye',
'pagetitle-view-mainpage' => '',
'retrievedfrom' => '"$1" ra ard',
'youhavenewmessages' => 'Yê sıma $1 ($2) esto.',
-'newmessageslink' => 'mesacê newey',
-'newmessagesdifflink' => 'vurnaiso peyên',
'youhavenewmessagesmulti' => '$1 de mesacê sımaê newey estê',
'editsection' => 'bıvurne',
'editold' => 'bıvurne',
'preferences' => 'Tercihi',
'mypreferences' => 'Tercihê mı',
'prefs-edits' => 'Numra vurnaisun:',
-'prefsnologin' => 'Cı nêkota',
-'prefsnologintext' => 'Sıma gunê <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cı kuyê]</span> ke dıma tercihunê karberi bınusnê.',
'changepassword' => 'Parola bıvurne',
'prefs-skin' => 'Çerme',
'skin-preview' => 'Verqayt',
'recentchanges-label-minor' => 'No zu vurnaiso qıckeko',
'recentchanges-label-bot' => 'No vurnais terefê zu boti ra bi',
'recentchanges-label-unpatrolled' => 'No vurnais hona çım ra ranêvêrdo',
+'recentchanges-legend-newpage' => '$1 - pela newiye',
'rcnote' => "Cêr {{PLURAL:$1|'''1''' vurnaiso peyên|'''$1''' vurnaisê peyêni}} be {{PLURAL:$2|roza peyêne|'''$2''' rozunê peyênunê}} $5, $4 ra estê.",
'rcnotefrom' => "Cêr de vurnayîşê esto ke '''$2''' ra raver (heta '''$1''' mucnayiyo).",
'rclistfrom' => '$1 ra hata nıka vurnaisunê newu bıasne',
# External editor support
'edit-externally' => 'Na dosya be mırecaetê de teberi bıvurne',
-'edit-externally-help' => '(Serba daêna melumati qaytê pelga [//www.mediawiki.org/wiki/Manual:External_editors ayarê gurenaena teberi] be)',
+'edit-externally-help' => '(Serba daêna melumati qaytê pelga [https://www.mediawiki.org/wiki/Manual:External_editors ayarê gurenaena teberi] be)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'pêro',
# Special:SpecialPages
'specialpages' => 'Pelê xaşi',
-'specialpages-note' => '----
-* Pelê xususiyê normali.
+'specialpages-note' => '* Pelê xususiyê normali.
* <span class="mw-specialpagerestricted">Pelê xususiyê mehcuri.</span>',
'specialpages-group-maintenance' => 'Tebliğê baxımi',
'specialpages-group-other' => 'Pelê xususiyê bini',
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => '«$1» بەتىنەن الىنعان',
'youhavenewmessages' => 'سىزگە $1 بار ($2).',
-'newmessageslink' => 'جاڭا حابارلار',
-'newmessagesdifflink' => 'سوڭعى وزگەرىسىنە',
'youhavenewmessagesmulti' => '$1 دەگەندە جاڭا حابارلار بار',
'editsection' => 'وڭدەۋ',
'editold' => 'وڭدەۋ',
'preferences' => 'باپتالىمدار',
'mypreferences' => 'باپتالىمدارىم',
'prefs-edits' => 'وڭدەمە سانى:',
-'prefsnologin' => 'كىرمەگەنسىز',
-'prefsnologintext' => 'باپتاۋىڭىزدى قويۋ ٴۇشىن [[Special:UserLogin|كىرۋىڭىز]] ٴتىيىستى.',
'changepassword' => 'قۇپىييا ٴسوزدى وزگەرتۋ',
'prefs-skin' => 'مانەرلەر',
'skin-preview' => 'قاراپ شىعۋ',
'allmessagesdefault' => 'ادەپكى ٴماتىنى',
'allmessagescurrent' => 'اعىمدىق ٴماتىنى',
'allmessagestext' => 'مىندا {{ns:mediawiki}} ەسىم اياسىندا جەتىمدى جۇيە حابار ٴتىزىمى بەرىلەدى.
-ەگەر امبەباپ MediaWiki جەرسىندىرۋگە ۇلەس قوسقىڭىز كەلسە [//www.mediawiki.org/wiki/Localisation MediaWiki جەرسىندىرۋ بەتىنە] جانە [//translatewiki.net translatewiki.net جوباسىنا] بارىپ شىعىڭىز.',
+ەگەر امبەباپ MediaWiki جەرسىندىرۋگە ۇلەس قوسقىڭىز كەلسە [https://www.mediawiki.org/wiki/Localisation MediaWiki جەرسىندىرۋ بەتىنە] جانە [//translatewiki.net translatewiki.net جوباسىنا] بارىپ شىعىڭىز.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' وشىرىلگەن سەبەبىنەن '''{{ns:special}}:AllMessages''' بەتى قولدانىلمايدى.",
# Thumbnails
# External editor support
'edit-externally' => 'بۇل فايلدى شەتتىك قوندىرما ارقىلى وڭدەۋ',
-'edit-externally-help' => 'كوبىرەك اقپارات ٴۇشىن [//www.mediawiki.org/wiki/Manual:External_editors ورناتۋ نۇسقامالارىن] قاراڭىز.',
+'edit-externally-help' => 'كوبىرەك اقپارات ٴۇشىن [https://www.mediawiki.org/wiki/Manual:External_editors ورناتۋ نۇسقامالارىن] قاراڭىز.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'بارلىق',
# Special:SpecialPages
'specialpages' => 'ارنايى بەتتەر',
-'specialpages-note' => '----
-* كادىمگى ارنايى بەتتەر.
+'specialpages-note' => '* كادىمگى ارنايى بەتتەر.
* <strong class="mw-specialpagerestricted">شەكتەلگەن ارنايى بەتتەر.</strong>',
'specialpages-group-maintenance' => 'باپتاۋ باياناتتارى',
'specialpages-group-other' => 'تاعى باسقا ارنايى بەتتەر',
'revdelete-unrestricted' => 'اكىمشىلەردەن تىيىمداردى الاستادى',
'rightsnone' => '(ەشقانداي)',
+# Special:ExpandTemplates
+'expandtemplates' => 'ۇلگىلەردى ۇلعايتۋ',
+'expand_templates_intro' => 'وسى قۇرال ارنايى بەتى الدەبىر ٴماتىندى الادى دا,
+بۇنىڭ ىشىندەگى بارلىق كىرىكتەلگەن ۇلگىلەردى مەيلىنشە ۇلعايتادى.
+مىنا <nowiki>{{#language:...}} سىيياقتى جوڭدەتۋ فۋنكتسىييالارىن دا, جانە {{CURRENTDAY}}
+سىيياقتى اينامالىلارىن دا ۇلعايتادى (ناقتى ايتقاندا, قوس قابات ساداق جاقشالار اراسىنداعى بارلىعىن).
+بۇنى ٴوز MediaWiki باعدارلاماسىنان قاتىستى جوڭدەتۋ ساتىن شاقىرىپ ىستەلىنەدى.',
+'expand_templates_title' => 'ٴماتىن ارالىق اتاۋى ({{FULLPAGENAME}} ت.ب. بەتتەر ٴۇشىن):',
+'expand_templates_input' => 'كىرىس ٴماتىنى:',
+'expand_templates_output' => 'ناتىيجەسى',
+'expand_templates_xml_output' => 'XML شىعارۋى',
+'expand_templates_ok' => 'جارايدى',
+'expand_templates_remove_comments' => 'ماندەمەلەرىن الاستاتىپ?',
+'expand_templates_generate_xml' => 'XML وڭدەتۋ بۇتاقتارىن كورسەت',
+'expand_templates_preview' => 'قاراپ شىعۋ',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => '«$1» бетінен алынған',
'youhavenewmessages' => 'Сізде $1 бар ($2).',
-'newmessageslink' => 'жаңа хабарламалар',
-'newmessagesdifflink' => 'соңғы өзгерiсіне',
'youhavenewmessagesfromusers' => 'Сіз {{PLURAL:$3|басқа қатысушыдан|$3 қатысушыдан}} $1 алдыңыз ($2).',
'youhavenewmessagesmanyusers' => 'Сіз бірнеше қатысушыдан $1 алдыңыз ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|жаңа хабарлама|жаңа хабарламалар}}',
'preferences' => 'Баптаулар',
'mypreferences' => 'Баптаулар',
'prefs-edits' => 'Өңдеме саны:',
-'prefsnologin' => 'Кірмегенсіз',
-'prefsnologintext' => 'Қатысушы бапталымдарыңызды жөндеу үшін <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} кіруіңіз]</span> жөн.',
'changepassword' => 'Құпия сөзді өзгерту',
'prefs-skin' => 'Мәнерлер',
'skin-preview' => 'Қарап шығу',
'recentchanges-label-minor' => 'Бұл шағын өңдеме',
'recentchanges-label-bot' => 'Бұл өңдемені бот жасады.',
'recentchanges-label-unpatrolled' => 'Бұл өңдеме әлі тексеруден өтпеді.',
+'recentchanges-legend-newpage' => '$1 - жаңа бет',
'rcnote' => "Төменде $5, $4 кезіне дейінгі соңғы {{PLURAL:$2|күндегі|'''$2''' күндегі}}, {{PLURAL:$1| '''1''' өзгеріс|соңғы '''$1''' өзгеріс}} көрсетіледі.",
'rcnotefrom' => "Төменде '''$2''' кезінен бергі ('''$1''' жеткенше дейін) өзгерістер көрсетіледі.",
'rclistfrom' => '$1 кезінен бергі жаңа өзгерістерді көрсет.',
# Contributions
'contributions' => '{{GENDER:$1|Қатысушы}} үлестері',
'contributions-title' => '$1 есімді қатысушының үлесі',
-'mycontris' => 'ҮлеÑ\81Ñ\82еÑ\80',
+'mycontris' => 'ҮлеÑ\81Ñ\96м',
'contribsub2' => '$1 ($2) үлесі',
'nocontribs' => 'Осы іздеу шартына сәйкес өзгерістер табылған жоқ.',
'uctop' => '(ағымдағы)',
'allmessagesdefault' => 'Әдепкі мәтіні',
'allmessagescurrent' => 'Ағымдық мәтіні',
'allmessagestext' => 'Мында {{ns:mediawiki}} есім аясында жетімді жүйе хабар тізімі беріледі.
-Егер әмбебап MediaWiki жерсіндіруге үлес қосқыңыз келсе [//www.mediawiki.org/wiki/Localisation MediaWiki жерсіндіру бетіне] және [//translatewiki.net translatewiki.net жобасына] барып шығыңыз.',
+Егер әмбебап MediaWiki жерсіндіруге үлес қосқыңыз келсе [https://www.mediawiki.org/wiki/Localisation MediaWiki жерсіндіру бетіне] және [//translatewiki.net translatewiki.net жобасына] барып шығыңыз.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' өшірілген себебінен '''{{#special:AllMessages}}''' беті қолданылмайды.",
'allmessages-filter-legend' => 'Сүзгі',
'allmessages-filter-unmodified' => 'Өзгертілмегендер',
# External editor support
'edit-externally' => 'Бұл файлды шеттік қондырма арқылы өңдеу',
-'edit-externally-help' => '(көбірек ақпарат үшін [//www.mediawiki.org/wiki/Manual:External_editors орнату нұсқауларын] қараңыз)',
+'edit-externally-help' => '(көбірек ақпарат үшін [https://www.mediawiki.org/wiki/Manual:External_editors орнату нұсқауларын] қараңыз)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'барлық',
# Special:SpecialPages
'specialpages' => 'Арнайы беттер',
-'specialpages-note' => '----
-* Кәдімгі арнайы беттер.
+'specialpages-note' => '* Кәдімгі арнайы беттер.
* <span class=="mw-specialpagerestricted">Шектелген арнайы беттер.</span>',
'specialpages-group-maintenance' => 'Техникалық талқылау есептері',
'specialpages-group-other' => 'Тағы басқа арнайы беттер',
'duration-centuries' => '$1 {{PLURAL:$1|ғасыр|ғасыр}}',
'duration-millennia' => '$1 {{PLURAL:$1|мың жылдық|мың жылдық}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Үлгілерді ұлғайту',
+'expand_templates_intro' => 'Осы құрал арнайы беті әлдебір мәтінді алады да,
+бұның ішіндегі барлық кіріктелген үлгілерді мейлінше ұлғайтады.
+Мына <nowiki>{{</nowiki>#language:...}} сияқты жөңдету функцияларын да, және <nowiki>{{</nowiki>CURRENTDAY}}
+сияқты айнамалыларын да ұлғайтады (нақты айтқанда, қос қабат садақ жақшалар арасындағы барлығын).
+Бұны өз MediaWiki бағдарламасынан қатысты жөңдету сатын шақырып істелінеді.',
+'expand_templates_title' => 'Мәтін аралық атауы ({{FULLPAGENAME}} т.б. беттер үшін):',
+'expand_templates_input' => 'Кіріс мәтіні:',
+'expand_templates_output' => 'Нәтижесі',
+'expand_templates_xml_output' => 'XML шығаруы',
+'expand_templates_ok' => 'Жарайды',
+'expand_templates_remove_comments' => 'Мәндемелерін аластатып?',
+'expand_templates_generate_xml' => 'XML өңдету бұтақтарын көрсет',
+'expand_templates_preview' => 'Қарап шығу',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => '«$1» betinen alınğan',
'youhavenewmessages' => 'Sizge $1 bar ($2).',
-'newmessageslink' => 'jaña xabarlar',
-'newmessagesdifflink' => 'soñğı özgerisine',
'youhavenewmessagesmulti' => '$1 degende jaña xabarlar bar',
'editsection' => 'öñdew',
'editold' => 'öñdew',
'preferences' => 'Baptalımdar',
'mypreferences' => 'Baptalımdarım',
'prefs-edits' => 'Öñdeme sanı:',
-'prefsnologin' => 'Kirmegensiz',
-'prefsnologintext' => 'Baptawıñızdı qoyw üşin [[Special:UserLogin|kirwiñiz]] tïisti.',
'changepassword' => 'Qupïya sözdi özgertw',
'prefs-skin' => 'Mänerler',
'skin-preview' => 'Qarap şığw',
'allmessagesdefault' => 'Ädepki mätini',
'allmessagescurrent' => 'Ağımdıq mätini',
'allmessagestext' => 'Mında {{ns:mediawiki}} esim ayasında jetimdi jüýe xabar tizimi beriledi.
-Eger ämbebap MediaWiki jersindirwge üles qosqıñız kelse [//www.mediawiki.org/wiki/Localisation MediaWiki jersindirw betine] jäne [//translatewiki.net translatewiki.net jobasına] barıp şığıñız.',
+Eger ämbebap MediaWiki jersindirwge üles qosqıñız kelse [https://www.mediawiki.org/wiki/Localisation MediaWiki jersindirw betine] jäne [//translatewiki.net translatewiki.net jobasına] barıp şığıñız.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' öşirilgen sebebinen '''{{ns:special}}:AllMessages''' beti qoldanılmaýdı.",
# Thumbnails
# External editor support
'edit-externally' => 'Bul faýldı şettik qondırma arqılı öñdew',
-'edit-externally-help' => 'Köbirek aqparat üşin [//www.mediawiki.org/wiki/Manual:External_editors ornatw nusqamaların] qarañız.',
+'edit-externally-help' => 'Köbirek aqparat üşin [https://www.mediawiki.org/wiki/Manual:External_editors ornatw nusqamaların] qarañız.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'barlıq',
# Special:SpecialPages
'specialpages' => 'Arnaýı better',
-'specialpages-note' => '----
-* Kädimgi arnaýı better.
+'specialpages-note' => '* Kädimgi arnaýı better.
* <strong class="mw-specialpagerestricted">Şektelgen arnaýı better.</strong>',
'specialpages-group-maintenance' => 'Baptaw bayanattarı',
'specialpages-group-other' => 'Tağı basqa arnaýı better',
'revdelete-unrestricted' => 'äkimşilerden tïımdardı alastadı',
'rightsnone' => '(eşqandaý)',
+# Special:ExpandTemplates
+'expandtemplates' => 'Ülgilerdi ulğaýtw',
+'expand_templates_intro' => 'Osı qural arnaýı beti äldebir mätindi aladı da,
+bunıñ işindegi barlıq kiriktelgen ülgilerdi meýlinşe ulğaýtadı.
+Mına <nowiki>{{</nowiki>#language:...}} sïyaqtı jöñdetw fwnkcïyaların da, jäne <nowiki>{{</nowiki>CURRENTDAY}}
+sïyaqtı aýnamalıların da ulğaýtadı (naqtı aýtqanda, qos qabat sadaq jaqşalar arasındağı barlığın).
+Bunı öz MediaWiki bağdarlamasınan qatıstı jöñdetw satın şaqırıp istelinedi.',
+'expand_templates_title' => 'Mätin aralıq atawı ({{FULLPAGENAME}} t.b. better üşin):',
+'expand_templates_input' => 'Kiris mätini:',
+'expand_templates_output' => 'Nätïjesi',
+'expand_templates_xml_output' => 'XML şığarwı',
+'expand_templates_ok' => 'Jaraýdı',
+'expand_templates_remove_comments' => 'Mändemelerin alastatıp?',
+'expand_templates_generate_xml' => 'XML öñdetw butaqtarın körset',
+'expand_templates_preview' => 'Qarap şığw',
+
);
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
'aboutsite' => 'អំពី{{SITENAME}}',
'aboutpage' => 'Project:អំពី',
-'copyright' => 'á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\99á\9f\89á\9e¶á\9e\84á\9e\8aá\9f\84á\9e\99$1។',
+'copyright' => 'á\9e\81á\9f\92á\9e\9bá\9e¹á\9e\98á\9e\9fá\9e¶á\9e\9aá\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\94á\9e¶á\9e\93á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e¢á\9e¶á\9e\87á\9f\92á\9e\89á\9e¶á\9e\94á\9e\8eá\9f\92á\9e\8c$1 á\9e\9bá\9e¾á\9e\80á\9e\9bá\9f\82á\9e\84á\9e\8fá\9f\82á\9e\98á\9e¶á\9e\93á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\96á\9e¸á\9e\93á\9f\84á\9f\87។',
'copyrightpage' => '{{ns:project}}:រក្សាសិទ្ធិ',
'currentevents' => 'ព្រឹត្តិការណ៍ថ្មីៗ',
'currentevents-url' => 'Project:ព្រឹត្តិការណ៍ថ្មីៗ',
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'បានពី "$1"',
'youhavenewmessages' => 'អ្នកមាន $1 ($2)។',
-'newmessageslink' => 'សារថ្មីៗ',
-'newmessagesdifflink' => 'បន្លាស់ប្ដូរចុងក្រោយ',
'youhavenewmessagesfromusers' => 'អ្នកមាន $1 ទទួលបានពី {{PLURAL:$3|អ្នកប្រើប្រាស់ម្នាក់|អុ្នកប្រើប្រាស់ចំនួន $3 នាក់}} ($2)។',
'youhavenewmessagesmanyusers' => 'អ្នកមាន $1 ទទួលបានពីអ្នកប្រើប្រាស់ជាច្រើន ($2)។',
'newmessageslinkplural' => '{{PLURAL:$1|សារថ្មីមួយ|សារថ្មី}}',
'invalidtitle-knownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ "$2" និងអត្ថបទ "$3"',
'invalidtitle-unknownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ "$2"',
'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
-'exception-nologin-text' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9f\81á\9f\87á\9e\8fá\9e\98á\9f\92á\9e\9aá\9e¼á\9e\9cá\9e¢á\9f\84á\9e\99á\9e¢á\9f\92á\9e\93á\9e\80á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\9cá\9e·á\9e\82á\9e¸នេះ។',
+'exception-nologin-text' => 'á\9e\9fá\9e¼á\9e\98[[Special:Userlogin|lá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b]]á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\85á\9e¼á\9e\9bá\9e¢á\9e¶á\9e\93á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96នេះ។',
# Virus scanner
'virus-badscanner' => "ការកំណត់រចនាសម្ព័ន្ធមិនល្អ៖ កម្មវិធីស្កេនមេរោគមិនស្គាល់៖ ''$1''",
'gotaccount' => "បើលោកអ្នកមានគណនីសម្រាប់ប្រើហើយ សូម'''$1'''។",
'gotaccountlink' => 'កត់ឈ្មោះចូល',
'userlogin-resetlink' => 'តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?',
-'userlogin-resetpassword-link' => 'á\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80',
+'userlogin-resetpassword-link' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e á\9e¾á\9e\99?',
'helplogin-url' => 'Help:ការកត់ឈ្មោះចូល',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ជំនួយក្នុងការកត់ឈ្មោះចូល]]',
'userlogin-createanother' => 'បង្កើតគណនីមួយទៀត',
សូមកត់ឈ្មោះចូលម្តងទៀតបន្ទាប់ពីអ្នកបានទទួលពាក្យសម្ងាត់ថ្មីនោះ។',
'blocked-mailpassword' => 'អាសយដ្ឋានIPត្រូវបានហាមឃាត់មិនអោយធ្វើការកែប្រែ និងមិនអនុញ្ញាតឱ្យប្រើប្រាស់មុខងារសង្គ្រោះពាក្យសម្ងាត់ដើម្បីបង្ការការបំពានទេ។',
-'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\85á\9e»á\9f\87á\9e\8fá\9f\92á\9e\9aá\9e¶ហើយ។
+'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\87á\9e¼á\9e\93ហើយ។
មុននឹងមានអ៊ីមែលផ្សេងមួយទៀតត្រូវផ្ញើទៅគណនីនេះ អ្នកត្រូវតែធ្វើតាមសេចក្តីណែនាំក្នុងអ៊ីមែលនោះ ដើម្បីបញ្ជាក់ថាគណនីបច្ចុប្បន្នពិតជារបស់អ្នកពិតប្រាកដមែន។',
'throttled-mailpassword' => 'អ៊ីមែលប្ដូរពាក្យសម្ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
* ព័ត៌មានផ្ទាល់ខ្លួន ឯកជនមិនសមរម្យ
*: ''អាសយដ្ឋាននៃគេហដ្ឋាន លេខទូរស័ព្ទ និងលេខសន្តិសុខសង្គមជាដើម''",
'revdelete-legend' => 'ដាក់កំហិតគំហើញ',
-'revdelete-hide-text' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\83á\9f\92á\9e\9bá\9e¶á\9e\93á\9f\83កំណែប្រែ',
+'revdelete-hide-text' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91កំណែប្រែ',
'revdelete-hide-image' => 'បិទបាំងខ្លឹមសារនៃឯកសារ',
'revdelete-hide-name' => 'បិទបាំងសកម្មភាពនិងគោលដៅ',
-'revdelete-hide-comment' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9cá\9e·á\9e\85á\9e¶á\9e\9a',
-'revdelete-hide-user' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98â\80\8bá\9e¬á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IP របស់អ្នកកែប្រែ',
+'revdelete-hide-comment' => 'á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\9aá\9e\96á\9e\93á\9f\92á\9e\99á\9e\9bá\9f\8b',
+'revdelete-hide-user' => 'á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98â\80\8bá\9e¬á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IPរបស់អ្នកកែប្រែ',
'revdelete-hide-restricted' => 'ដាក់កំហិតទិន្នន័យពីអ្នកអភិបាល ក៏ដូចជាអ្នកដទៃទៀត',
'revdelete-radio-same' => '(មិនផ្លាស់ប្ដូរ)',
-'revdelete-radio-set' => 'á\9e\94á\9e¶á\9e\91/á\9e\85á\9e¶á\9e\9f',
-'revdelete-radio-unset' => 'á\9e\91á\9f\81',
+'revdelete-radio-set' => 'á\9e\9bá\9e¶á\9e\80á\9f\8b',
+'revdelete-radio-unset' => 'á\9e\98á\9e¾á\9e\9bá\9e\83á\9e¾á\9e\89',
'revdelete-suppress' => 'លាក់ទិន្នន័យពីអ្នកថែទាំប្រព័ន្ធ ព្រមទាំងពីសមាជិកដទៃទៀតផងដែរ',
'revdelete-unsuppress' => 'ដកចេញការដាក់កំហិតលើកំណែដែលបានស្តារឡើងវិញ',
'revdelete-log' => 'មូលហេតុ៖',
'preferences' => 'ចំណង់ចំណូលចិត្ត',
'mypreferences' => 'ចំណង់ចំណូលចិត្ត',
'prefs-edits' => 'ចំនួនកំណែប្រែ៖',
-'prefsnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
-'prefsnologintext' => 'អ្នកចាំបាច់ត្រូវតែ<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} កត់ឈ្មោះចូល]</span> ដើម្បីកំណត់ចំណង់ចំណូលចិត្តរបស់អ្នក។',
'changepassword' => 'ប្តូរពាក្យសម្ងាត់',
'prefs-skin' => 'សំបក',
'skin-preview' => 'មើលជាមុន',
'action-block' => 'ហាមឃាត់អ្នកប្រើប្រាស់នេះមិនឱ្យធ្វើការកែប្រែ',
'action-protect' => 'ប្ដូរកម្រិតការពារសម្រាប់ទំព័រនេះ',
'action-rollback' => 'ត្រឡប់យ៉ាងរហ័សនូវកំណែប្រែទំព័រវិសេសណាមួយដែលធ្វើឡើងដោយអ្នកប្រើប្រាស់ចុងក្រោយគេ។',
-'action-import' => 'á\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\96á\9e¸á\9e\9cá\9e·á\9e\82á\9e¸á\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\98á\9e½á\9e\99á\9e\91á\9f\80á\9e\8f',
-'action-importupload' => 'á\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\96á\9e¸á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¡á\9e¾á\9e\84',
+'action-import' => 'នាំចូលទំព័រពីវិគីផ្សេងមួយទៀត',
+'action-importupload' => 'នាំចូលទំព័រពីឯកសារដែលបានផ្ទុកឡើង',
'action-patrol' => 'ចំណាំកំណែប្រែរបស់អ្នកដទៃថាបានល្បាត',
'action-autopatrol' => 'ផ្ដល់សិទ្ធិឱ្យគេចំណាំកំណែរបស់អ្នកថាបានល្បាត',
'action-unwatchedpages' => 'មើលបញ្ជីនៃទំព័រមិនតាមដាន',
'recentchanges-label-minor' => 'នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ',
'recentchanges-label-bot' => 'ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត',
'recentchanges-label-unpatrolled' => 'ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ',
+'recentchanges-legend-newpage' => '$1 - ទំព័រថ្មី',
'rcnote' => "ខាងក្រោមនេះជា{{PLURAL:$1|១បន្លាស់ប្ដូរ|'''$1'''បន្លាស់ប្ដូរ}}ចុងក្រោយក្នុងរយៈពេល{{PLURAL:$2|ថ្ងៃ|'''$2'''ថ្ងៃ}}ចុងក្រោយគិតត្រឹម$5 $4 ។",
'rcnotefrom' => "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
'rclistfrom' => 'បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $1',
'listusers' => 'បញ្ជីអ្នកប្រើប្រាស់',
'listusers-editsonly' => 'បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ',
'listusers-creationsort' => 'តម្រៀបតាមលំដាប់កាលបរិច្ឆេទបង្កើត',
+'listusers-desc' => 'តម្រៀបជាលំដាប់ពីលើចុះក្រោម',
'usereditcount' => '$1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}',
'usercreated' => '{{GENDER:$3|បានបង្កើត}}នៅ$1 $2',
'newpages' => 'ទំព័រថ្មីៗ',
'contributions' => 'ការរួមចំណែករបស់{{GENDER:$1|អ្នកប្រើប្រាស់}}',
'contributions-title' => 'ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1',
'mycontris' => 'ការរួមចំណែក',
-'contribsub2' => 'សម្រាប់ $1 ($2)',
+'contribsub2' => 'សម្រាប់{{GENDER:$3|$1}} ($2)',
'nocontribs' => 'គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។',
'uctop' => '(បច្ចុប្បន្ន)',
'month' => 'ខែ៖',
'svg-long-desc' => 'ឯកសារប្រភេទSVG $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3',
'svg-long-desc-animated' => 'ឯកសារជីវចល SVG, ជាធម្មតា $1 × $2 ភិចសែល, ទំហំឯកសារ: $3',
'svg-long-error' => 'ឯកសារ SVG គ្មានសុពលភាព៖ $1',
-'show-big-image' => 'á\9e\9aá\9e¼á\9e\94á\9e\97á\9e¶á\9e\96á\9e\96á\9f\81á\9e\89',
+'show-big-image' => 'á\9e\9aá\9e¼á\9e\94á\9e\97á\9e¶á\9e\96á\9e\8aá\9e¾á\9e\98',
'show-big-image-preview' => 'ទំហំរបស់ការមើលមុននេះ: $1។',
'show-big-image-other' => '{{PLURAL:$2|ភាពម៉ត់|ភាពម៉ត់}}ផ្សេងទៀត៖ $1។',
'show-big-image-size' => '$1 × $2 ភីកសែ',
# External editor support
'edit-externally' => 'កែប្រែឯកសារនេះដោយប្រើប្រាស់កម្មវិធីខាងក្រៅ',
-'edit-externally-help' => '(សូមមើល[//www.mediawiki.org/wiki/Manual:External_editors ការណែនាំអំពីការប្រើប្រាស់]សម្រាប់ព័ត៌មានបន្ថែម)',
+'edit-externally-help' => '(សូមមើល[https://www.mediawiki.org/wiki/Manual:External_editors ការណែនាំអំពីការប្រើប្រាស់]សម្រាប់ព័ត៌មានបន្ថែម)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ទាំងអស់',
'version-hook-subscribedby' => 'បានជាវ ជាប្រចាំ ដោយ',
'version-version' => '(កំណែ $1)',
'version-license' => 'អាជ្ញាប័ណ្ណ',
-'version-poweredby-credits' => "វិគីនេះឧបត្ថម្ភដោយ '''[//www.mediawiki.org/ មេឌាវិគី]''', រក្សាសិទ្ធ © ២០០១-$1 $2។",
+'version-poweredby-credits' => "វិគីនេះឧបត្ថម្ភដោយ '''[https://www.mediawiki.org/ មេឌាវិគី]''', រក្សាសិទ្ធ © ២០០១-$1 $2។",
'version-poweredby-others' => 'អ្នកដទៃទៀត',
'version-software' => 'ផ្នែកទន់ដែលបានដំឡើង',
'version-software-product' => 'ផលិតផល',
'duration-centuries' => '$1 {{PLURAL:$1|សតវត្សរ៍|សតវត្សរ៍}}',
'duration-millennia' => '$1 {{PLURAL:$1|សហសវត្សរ៍|សហសវត្សរ៍}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'ពង្រីកទំព័រគំរូ',
+'expand_templates_input' => 'សរសេរឃ្លា',
+'expand_templates_output' => 'លទ្ធផល',
+'expand_templates_ok' => 'យល់ព្រម',
+'expand_templates_remove_comments' => 'ដកចេញ វិចារនានា',
+'expand_templates_preview' => 'បង្ហាញការមើលជាមុន',
+
);
'ok' => 'ಸರಿ',
'retrievedfrom' => '"$1" ಇಂದ ಪಡೆಯಲ್ಪಟ್ಟಿದೆ',
'youhavenewmessages' => 'ನಿಮಗೆ $1 ಇವೆ ($2).',
-'newmessageslink' => 'ಹೊಸ ಸಂದೇಶಗಳು',
-'newmessagesdifflink' => 'ಕೊನೆಯ ಬದಲಾವಣೆ',
'newmessagesdifflinkplural' => 'ಕಡೆಯ {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}',
'youhavenewmessagesmulti' => '$1 ಅಲ್ಲಿ ನಿಮಗೆ ಹೊಸ ಸಂದೇಶಗಳಿವೆ',
'editsection' => 'ಬದಲಾಯಿಸಿ',
'preferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
'mypreferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
'prefs-edits' => 'ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ:',
-'prefsnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
-'prefsnologintext' => 'ಬಳಕೆದಾರ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಬದಲಾಯಿಸಲು ನೀವು <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ಲಾಗ್ ಇನ್]</span> ಆಗಿರಬೇಕು.',
'changepassword' => 'ಪ್ರವೇಶ ಪದ ಬದಲಾಯಿಸಿ',
'prefs-skin' => 'ಚರ್ಮ',
'skin-preview' => 'ಮುನ್ನೋಟ',
# External editor support
'edit-externally' => 'ಬಾಹ್ಯ ತಂತ್ರಾಂಶವನ್ನು ಉಪಯೋಗಿಸಿ ಇದನ್ನು ಸಂಪಾದಿಸಿ',
-'edit-externally-help' => '(ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ [//www.mediawiki.org/wiki/Manual:External_editors ಸ್ಥಾಪನೆಯ ನಿರ್ದೇಶಗಳನ್ನು] ನೋಡಿ)',
+'edit-externally-help' => '(ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ [https://www.mediawiki.org/wiki/Manual:External_editors ಸ್ಥಾಪನೆಯ ನಿರ್ದೇಶಗಳನ್ನು] ನೋಡಿ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ಎಲ್ಲಾ',
'duration-centuries' => '$1 {{PLURAL:$1|ಶತಮಾನ|ಶತಮಾನಗಳು}}',
'duration-millennia' => '$1 {{PLURAL:$1|ಸಹಸ್ರಮಾನ|ಸಹಸ್ರಮಾನಗಳು}}',
+# Special:ExpandTemplates
+'expand_templates_preview' => 'ಮುನ್ನೋಟ',
+
);
# Cologne Blue skin
'qbfind' => '찾기',
-'qbbrowse' => '탐색',
+'qbbrowse' => '찾아보기',
'qbedit' => '편집',
'qbpageoptions' => '문서 기능',
'qbmyoptions' => '내 사용자 문서',
'vector-action-protect' => '보호',
'vector-action-undelete' => '되살리기',
'vector-action-unprotect' => '보호 설정 바꾸기',
-'vector-simplesearch-preference' => '단순한 찾기 막대 사용하기 (벡터 스킨 전용)',
+'vector-simplesearch-preference' => '단순한 검색 막대 사용하기 (벡터 스킨 전용)',
'vector-view-create' => '만들기',
'vector-view-edit' => '편집',
'vector-view-history' => '역사',
'returnto' => '$1 문서로 돌아갑니다.',
'tagline' => '{{SITENAME}}',
'help' => '도움말',
-'search' => '찾기',
-'searchbutton' => '찾기',
+'search' => '검색',
+'searchbutton' => '검색',
'go' => '보기',
'searcharticle' => '보기',
'history' => '문서 역사',
'protectedpage' => '보호된 문서',
'jumpto' => '이동:',
'jumptonavigation' => '둘러보기',
-'jumptosearch' => '찾기',
+'jumptosearch' => '검색',
'view-pool-error' => '서버가 과부하에 걸렸습니다.
너무 많은 사용자가 이 문서를 보려고 하고 있습니다.
이 문서를 다시 열기 전에 잠시만 기다려주세요.
'ok' => '확인',
'retrievedfrom' => '원본 주소 "$1"',
-'youhavenewmessages' => '다른 사용자가 $1에 글을 남겼습니다. ($2)',
-'newmessageslink' => '사용자 토론',
-'newmessagesdifflink' => '마지막으로 바뀐 내용',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1에 글을 남겼습니다. ($2)',
-'youhavenewmessagesmanyusers' => '여러 사용자가 $1에 글을 남겼습니다. ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|사용자 토론}}',
+'youhavenewmessages' => '다른 사용자가 남긴 $1가 있습니다. ($2)',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} 남긴 $1가 있습니다. ($2)',
+'youhavenewmessagesmanyusers' => '여러 사용자가 남긴 $1가 있습니다. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|새 메시지}}',
'newmessagesdifflinkplural' => '마지막으로 {{PLURAL:$1|바뀐 내용}}',
'youhavenewmessagesmulti' => '다른 사용자가 $1에 글을 남겼습니다',
'editsection' => '편집',
관리자가 데이터베이스를 잠글 때 남긴 메시지는 다음과 같습니다: $1',
'missing-article' => '데이터베이스에서 "$1" 문서의 $2 텍스트를 찾지 못했습니다.
-ì\82ì \9cë\90\9c 문ì\84\9cì\9d\98 ì\97ì\82¬/ë¹\84êµ\90 문ì\84\9c를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
+ì\82ì \9cë\90\9c 문ì\84\9cì\9d\98 ì\98¤ë\9e\98ë\90\9c ì°¨ì\9d´ë\82\98 ì\97ì\82¬ ë§\81í\81¬를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
-또는, 프로그램 버그가 발생했을 수도 있습니다. [[Special:ListUsers/sysop|관리자]]에게 오류가 나는 URL을 알려주세요.',
+그렇지 않다면, 소프트웨어에 버그가 발생했을 수도 있습니다.
+[[Special:ListUsers/sysop|관리자]]에게 URL을 참조하여 알려주세요.',
'missingarticle-rev' => '(판번호: $1)',
'missingarticle-diff' => '(차이: $1, $2)',
'readonly_lag' => '슬레이브 데이터베이스가 마스터 서버의 자료를 새로 고치는 중입니다. 데이터베이스가 자동으로 잠겨 있습니다.',
'invalidtitle-knownnamespace' => '제목 오류: "$2" 이름공간과 "$3" 텍스트',
'invalidtitle-unknownnamespace' => '제목 오류: 알 수 없는 $1 이름공간 번호와, "$2" 텍스트',
'exception-nologin' => '로그인하지 않음',
-'exception-nologin-text' => '이 문서나 행동은 이 위키에 로그인을 해야 합니다.',
+'exception-nologin-text' => '이 행동을 하거나 이 문서에 접근하려면 [[Special:Userlogin|로그인]]하십시오.',
+'exception-nologin-text-manual' => '이 문서에 접근하거나 이 행동을 하려면 $1하십시오.',
# Virus scanner
'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
'accmailtitle' => '비밀번호를 보냈습니다',
'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2(으)로 보냈습니다. 로그인하고 나서 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.',
'newarticle' => '(새 문서)',
-'newarticletext' => "ì\9d´ 문ì\84\9cë\8a\94 ì\95\84ì§\81 ë§\8cë\93¤ì\96´ì§\80ì§\80 ì\95\8aì\95\98습니다.
-새 문서를 만들려면 아래의 상자에 문서 내용을 입력하면 됩니다(자세한 내용은 [[{{MediaWiki:Helppage}}|도움말]]을 읽어 주세요).
-ë§\8cì\95½ ì\9e\98못 ì°¾ì\95\84ì\98¨ 문ì\84\9cë\9d¼ë©´ ì\9b¹ 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+'newarticletext' => "ì\95\84ì§\81 ì\97\86ë\8a\94 문ì\84\9cì\9d\98 ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ì\99\94습니다.
+새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [[{{MediaWiki:Helppage}}|도움말 문서]]를 참고하세요)
+ë§\8cì\95½ ì\9e\98못 ì°¾ì\95\84ì\99\94ë\8b¤ë©´, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
'anontalkpagetext' => '----
여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.
익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.
IP 주소는 여러 사용자가 공유할 수 있습니다.
자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인해서]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.',
'noarticletext' => '이 문서가 현재 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]],
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],
이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,
문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.',
'noarticletext-nopermission' => '이 문서가 현재 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]], 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.',
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]], 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.',
'missing-revision' => '"{{PAGENAME}}"이라는 문서의 #$1판이 존재하지 않습니다.
이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.
'history-feed-item-nocomment' => '$2에 대한 $1의 편집',
'history-feed-empty' => '요청한 문서가 존재하지 않습니다.
해당 문서가 삭제되었거나, 문서 이름이 바뀌었을 수 있습니다.
-[[Special:Search|찾기]]를 사용해 관련 문서를 찾아보세요.',
+[[Special:Search|ì\9c\84í\82¤ì\9d\98 ê²\80ì\83\89]]ì\9d\84 사용해 관련 문서를 찾아보세요.',
# Revision deletion
'rev-deleted-comment' => '(편집 요약 삭제됨)',
'revdelete-hide-user' => '편집자의 사용자 이름/IP 주소',
'revdelete-hide-restricted' => '관리자도 보지 못하게 숨기기',
'revdelete-radio-same' => '(바꾸지 않음)',
-'revdelete-radio-set' => '보이기',
-'revdelete-radio-unset' => '숨기기',
+'revdelete-radio-set' => '숨겨짐',
+'revdelete-radio-unset' => '보여짐',
'revdelete-suppress' => '문서 내용을 관리자에게도 보이지 않게 숨기기',
'revdelete-unsuppress' => '되살린 판에 대한 제한을 해제',
'revdelete-log' => '이유:',
자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.',
# Search results
-'searchresults' => '찾기 결과',
-'searchresults-title' => '"$1"에 대한 찾기 결과',
-'searchresulttext' => '{{SITENAME}}의 찾기 기능에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고해주세요.',
-'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 찾고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
-'searchsubtitleinvalid' => "찾은 단어 '''$1'''",
+'searchresults' => '검색 결과',
+'searchresults-title' => '"$1"에 대한 검색 결과',
+'searchresulttext' => '{{SITENAME}} 검색에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고하세요.',
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 검색하고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
+'searchsubtitleinvalid' => "'''$1''' 검색어로 검색했습니다",
'toomanymatches' => '일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.',
'titlematches' => '문서 제목 일치',
'notitlematches' => '해당하는 제목 없음',
'nextn-title' => '다음 {{PLURAL:$1|결과}} $1개',
'shown-title' => '쪽마다 {{PLURAL:$1|결과}} $1개씩 보기',
'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) 보기',
-'searchmenu-legend' => '찾기 설정',
+'searchmenu-legend' => '검색 설정',
'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
'searchmenu-new' => "'''이 위키에 \"[[:\$1]]\" 문서를 만드세요!'''",
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾기]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾아보기]]',
'searchprofile-articles' => '본문',
'searchprofile-project' => '도움말 및 프로젝트 문서',
'searchprofile-images' => '멀티미디어',
-'searchprofile-everything' => '모든 문서 찾기',
+'searchprofile-everything' => '모든 문서',
'searchprofile-advanced' => '고급',
-'searchprofile-articles-tooltip' => '$1에서 찾기',
-'searchprofile-project-tooltip' => '$1에서 찾기',
-'searchprofile-images-tooltip' => '파일 찾기',
-'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기',
-'searchprofile-advanced-tooltip' => '다음 설정한 이름공간에서 찾기',
+'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-category-size' => '{{PLURAL:$1|문서 1개|문서 $1개}}, {{PLURAL:$2|하위 분류 1개|하위 분류 $2개}}, {{PLURAL:$3|파일 1개|파일 $3개}}',
'search-result-score' => '유사도: $1%',
'search-interwiki-default' => '$1 결과:',
'search-interwiki-more' => '(더 보기)',
'search-relatedarticle' => '관련',
-'mwsuggest-disable' => '찾기 제안 비활성화',
-'searcheverything-enable' => '모든 이름공간에서 찾기',
+'mwsuggest-disable' => '검색 제안 비활성화',
+'searcheverything-enable' => '모든 이름공간에서 검색',
'searchrelated' => '관련',
'searchall' => '모두',
'showingresults' => "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}} 입니다.",
'showingresultsheader' => "'''$4''' 검색어에 대하여 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}를 보여 주고 있습니다",
-'nonefound' => "'''참고''': 몇개의 이름공간만 기본 찾을 범위입니다. 토론이나 틀 등의 모든 자료를 찾하기 위해서는 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
-'search-nonefound' => '찾기 결과가 없습니다.',
-'powersearch' => '고급 찾기',
-'powersearch-legend' => '고급 찾기',
-'powersearch-ns' => '다음 이름공간에서 찾기:',
+'nonefound' => "'''참고''': 일부 이름공간만 기본으로 검색합니다.
+토론 문서나 틀 등의 모든 내용을 검색하려면 접두어로 '''all:'''를 시도하거나, 원하는 이름공간을 접두어로 사용하세요.",
+'search-nonefound' => '검색어와 일치하는 결과가 없습니다.',
+'powersearch' => '고급 검색',
+'powersearch-legend' => '고급 검색',
+'powersearch-ns' => '다음 이름공간에서 검색:',
'powersearch-redir' => '넘겨주기 목록',
-'powersearch-field' => '찾기',
+'powersearch-field' => '검색',
'powersearch-togglelabel' => '확인:',
'powersearch-toggleall' => '모두',
'powersearch-togglenone' => '모두 제외',
-'search-external' => '바깥 찾기',
-'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
-기ë\8a¥ì\9d´ ì\9e\91ë\8f\99í\95\98ì§\80 ì\95\8aë\8a\94 ë\8f\99ì\95\88ì\97\90ë\8a\94 구ê¸\80(Google)ì\9d\84 ì\9d´ì\9a©í\95´ ì°¾ì\9d\84 수 있습니다.
-ê²\80ì\83\89 ì\97\94ì§\84ì\9d\98 ë\82´ì\9a©ì\9d\80 ìµ\9cì\8b ì\9d´ ì\95\84ë\8b\90 ì\88\98 ì\9e\88ë\8b¤ë\8a\94 ì \90ì\9d\84 주ì\9d\98í\95´ì£¼세요.',
-'search-error' => '찾는 동안 오류가 발생했습니다: $1',
+'search-external' => '바깥 검색',
+'searchdisabled' => '{{SITENAME}} 검색이 비활성화되어 있습니다.
+ê²\80ì\83\89ì\9d´ ì\9e\91ë\8f\99í\95\98ì§\80 ì\95\8aë\8a\94 ë\8f\99ì\95\88ì\97\90ë\8a\94 Google(구ê¸\80)ì\9d\84 í\86µí\95´ ê²\80ì\83\89í\95 수 있습니다.
+ê²\80ì\83\89 ì\97\94ì§\84ì\9d\98 ë\82´ì\9a©ì\9d\80 ìµ\9cì\8b ì\9d´ ì\95\84ë\8b\90 ì\88\98 ì\9e\88ë\8b¤ë\8a\94 ì \90ì\9d\84 ì°¸ê³ í\95\98세요.',
+'search-error' => '검색하는 동안 오류가 발생했습니다: $1',
# Preferences page
'preferences' => '사용자 환경 설정',
'mypreferences' => '환경 설정',
'prefs-edits' => '편집 횟수:',
-'prefsnologin' => '로그인하지 않음',
-'prefsnologintext' => '사용자 환경 설정을 바꾸려면 먼저 <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 로그인]</span>해야 합니다.',
+'prefsnologintext2' => '사용자 환경 설정을 설정하려면 $1하십시오.',
'changepassword' => '비밀번호 바꾸기',
'prefs-skin' => '스킨',
'skin-preview' => '미리 보기',
'prefs-editing' => '편집 상자',
'rows' => '줄 수:',
'columns' => '열 수:',
-'searchresultshead' => '찾기',
+'searchresultshead' => '검색',
'resultsperpage' => '쪽마다 보이는 결과 수:',
'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 보여줄 문서 크기 (바이트 수):',
'stub-threshold-disabled' => '비활성화됨',
'timezoneregion-indian' => '인도양',
'timezoneregion-pacific' => '태평양',
'allowemail' => '다른 사용자가 보낸 이메일을 받음',
-'prefs-searchoptions' => '찾기',
+'prefs-searchoptions' => '검색',
'prefs-namespaces' => '이름공간',
-'defaultns' => '다음 이름공간에서 찾기:',
+'defaultns' => '다음 이름공간에서 검색:',
'default' => '기본값',
'prefs-files' => '파일',
'prefs-custom-css' => '사용자 CSS',
'group-bot' => '봇',
'group-sysop' => '관리자',
'group-bureaucrat' => '사무관',
-'group-suppress' => '오버사이트',
+'group-suppress' => '기록보호자',
'group-all' => '(모두)',
'group-user-member' => '{{GENDER:$1|사용자}}',
'group-bot-member' => '{{GENDER:$1|봇}}',
'group-sysop-member' => '{{GENDER:$1|관리자}}',
'group-bureaucrat-member' => '{{GENDER:$1|사무관}}',
-'group-suppress-member' => '{{GENDER:$1|오버사이트}}',
+'group-suppress-member' => '{{GENDER:$1|기록보호자}}',
'grouppage-user' => '{{ns:project}}:일반 사용자',
'grouppage-autoconfirmed' => '{{ns:project}}:자동 인증된 사용자',
'grouppage-bot' => '{{ns:project}}:봇',
'grouppage-sysop' => '{{ns:project}}:관리자',
'grouppage-bureaucrat' => '{{ns:project}}:사무관',
-'grouppage-suppress' => '{{ns:project}}:오버사이트',
+'grouppage-suppress' => '{{ns:project}}:기록보호자',
# Rights
'right-read' => '문서 읽기',
'right-deleterevision' => '문서의 특정 판을 삭제하고 되살리기',
'right-deletedhistory' => '삭제된 문서의 내용을 제외한 역사를 보기',
'right-deletedtext' => '삭제된 문서의 내용과 편집상의 차이를 보기',
-'right-browsearchive' => '삭제된 문서 찾기',
+'right-browsearchive' => '삭제된 문서 검색',
'right-undelete' => '삭제된 문서 되살리기',
'right-suppressrevision' => '관리자도 보지 못하도록 숨겨진 판을 검토하고 되살리기',
'right-suppressionlog' => '숨겨진 기록을 보기',
'action-delete' => '이 문서 삭제하기',
'action-deleterevision' => '이 판을 삭제',
'action-deletedhistory' => '이 문서의 삭제된 기여의 역사 보기',
-'action-browsearchive' => '삭제된 문서 찾기',
+'action-browsearchive' => '삭제된 문서 검색',
'action-undelete' => '이 문서 되살리기',
'action-suppressrevision' => '이 숨겨진 판을 검토하고 되살릴',
'action-suppressionlog' => '비공개 기록 보기',
'recentchanges-label-minor' => '사소한 편집',
'recentchanges-label-bot' => '봇의 편집',
'recentchanges-label-unpatrolled' => '아직 검토하지 않은 편집',
+'recentchanges-legend-newpage' => '$1 - 새 문서',
'rcnote' => "다음은 $4 $5 까지의 {{PLURAL:$2|'''$2'''일}}동안 {{PLURAL:$1|바뀐 문서 '''$1'''개입니다}}.",
'rcnotefrom' => "다음은 '''$2'''에서부터 바뀐 문서 '''$1'''개입니다.",
'rclistfrom' => '$1 이래로 새로 바뀐 문서 보기',
이 문서의 최근 삭제 기록과 이동 기록을 참고하십시오:",
'uploadtext' => "파일을 올리기 위해서는 아래의 양식을 채워주세요.
-[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 찾을 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.
+[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 검색할 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.
문서에 파일을 넣으려면 아래 방법 중 하나를 사용하세요.
* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' 파일의 온전한 모양을 사용하고자 할 때
# Special:ListFiles
'listfiles-summary' => '이 특수 문서는 모든 올려진 파일을 보여줍니다.',
-'listfiles_search_for' => '다음 이름을 가진 미디어 찾기:',
+'listfiles_search_for' => '다음 미디어 이름 검색:',
'imgfile' => '파일',
'listfiles' => '파일 목록',
'listfiles_thumb' => '섬네일',
'filehist-dimensions' => '크기',
'filehist-filesize' => '파일 크기',
'filehist-comment' => '덧글',
-'filehist-missing' => 'í\8c\8cì\9d¼ì\9d\84 ì°¾ì\9d\84 ì\88\98 없음',
+'filehist-missing' => 'í\8c\8cì\9d¼ì\9d´ 없음',
'imagelinks' => '이 파일을 사용하는 문서',
'linkstoimage' => '다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:',
'linkstoimage-more' => '$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.
'filedelete-maintenance-title' => '파일을 삭제할 수 없습니다',
# MIME search
-'mimesearch' => 'MIME 찾기',
-'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 찾습니다.
+'mimesearch' => 'MIME 검색',
+'mimesearch-summary' => 'MIME 유형에 해당하는 파일을 검색합니다.
다음 형태로 입력해주세요: 내용종류/하위종류, 예를 들어 <code>image/jpeg</code>',
'mimetype' => 'MIME 종류:',
'download' => '다운로드',
'notargettitle' => '해당하는 문서 없음',
'notargettext' => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
'nopagetitle' => '해당하는 문서 없음',
-'nopagetext' => 'ì°¾ë\8a\94 문서가 존재하지 않습니다.',
+'nopagetext' => 'ì§\80ì \95í\95\9c ë\8c\80ì\83\81 문서가 존재하지 않습니다.',
'pager-newer-n' => '{{PLURAL:$1|다음 1개|다음 $1개}}',
'pager-older-n' => '{{PLURAL:$1|이전 1개|이전 $1개}}',
'suppress' => '오버사이트',
'querypage-disabled' => '이 특수 문서는 성능상의 이유로 비활성화되었습니다.',
# Book sources
-'booksources' => 'ì±\85 찾기',
-'booksources-search-legend' => 'ì±\85 찾기',
+'booksources' => 'ì±\85 ì\9e\90ë£\8c',
+'booksources-search-legend' => 'ì±\85 ì\9b\90본 ê²\80ì\83\89',
'booksources-isbn' => 'ISBN:',
-'booksources-go' => '찾기',
+'booksources-go' => '검색',
'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.',
'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
'alllogstext' => '{{SITENAME}}에서의 기록이 모두 나와 있습니다.
기록 종류, 사용자 이름, 문서 이름을 선택해서 볼 수 있습니다. (대소문자를 구별합니다.)',
'logempty' => '일치하는 항목이 없습니다.',
-'log-title-wildcard' => '다음 글로 시작하는 제목 찾기',
+'log-title-wildcard' => '다음 글로 시작하는 제목 검색',
'showhideselectedlogentries' => '선택한 기록 항목 보이기/숨기기',
# Special:AllPages
'sp-deletedcontributions-contribs' => '기여',
# Special:LinkSearch
-'linksearch' => '바깥 링크 찾기',
-'linksearch-pat' => '찾기 패턴:',
+'linksearch' => '바깥 링크 검색',
+'linksearch-pat' => '검색 패턴:',
'linksearch-ns' => '이름공간:',
-'linksearch-ok' => '찾기',
+'linksearch-ok' => '검색',
'linksearch-text' => '"*.wikipedia.org"와 같이 와일드 카드를 사용할 수 있습니다.
적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
지원하는 {{PLURAL:$2|프로토콜}}: <code>$1</code> (프로토콜을 지정하지 않을 때 기본값은 http://)',
이메일: $PAGEEDITOR_EMAIL
위키: $PAGEEDITOR_WIKI
-이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
+로그인한 상태에서 이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다. 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
{{SITENAME}} 알림 시스템
[[Special:Log/delete|삭제 기록]]에서 최근의 삭제와 되살리기 기록을 볼 수 있습니다.",
'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
-'undelete-search-title' => '삭제된 문서 찾기',
-'undelete-search-box' => '삭제된 문서 찾기',
+'undelete-search-title' => '삭제된 문서 검색',
+'undelete-search-box' => '삭제된 문서 검색',
'undelete-search-prefix' => '다음으로 시작하는 문서 보기:',
-'undelete-search-submit' => '찾기',
-'undelete-no-results' => 'ì\82ì \9cë\90\9c 문ì\84\9c ë³´ì¡´ì\97\90ì\84\9c ì\9d¼ì§\80하는 문서를 찾을 수 없습니다.',
+'undelete-search-submit' => '검색',
+'undelete-no-results' => 'ì\82ì \9cë\90\9c 문ì\84\9c ë³´ì¡´ì\97\90ì\84\9c ì\9d¼ì¹\98하는 문서를 찾을 수 없습니다.',
'undelete-filename-mismatch' => '타임스탬프가 $1인 파일의 버전을 되살릴 수 없습니다: 파일 이름이 일치하지 않습니다.',
'undelete-bad-store-key' => '타임스탬프가 $1인 파일의 버전을 되살릴 수 없습니다: 파일이 삭제되기 전에 사라졌습니다.',
'undelete-cleanup-error' => '사용되지 않는 보존된 파일 "$1"을 삭제하는 데 오류가 발생했습니다.',
해당 사용자의 차단 기록은 다음과 같습니다:',
'sp-contributions-blocked-notice-anon' => '이 IP 주소는 현재 차단되어 있습니다.
차단 기록은 다음과 같습니다:',
-'sp-contributions-search' => '기여 찾기',
+'sp-contributions-search' => '기여 검색',
'sp-contributions-username' => 'IP 주소 또는 사용자 이름:',
'sp-contributions-toponly' => '최신판만 보기',
-'sp-contributions-submit' => '찾기',
+'sp-contributions-submit' => '검색',
'sp-contributions-explain' => '',
# What links here
'unblocked-id' => '$1 차단이 해제되었습니다.',
'blocklist' => '차단된 사용자 목록',
'ipblocklist' => '차단된 사용자',
-'ipblocklist-legend' => '차단 중인 사용자 찾기',
+'ipblocklist-legend' => '차단된 사용자 찾기',
'blocklist-userblocks' => '계정에 대한 차단 숨기기',
'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
'blocklist-addressblocks' => '단일 IP 차단을 숨기기',
'blocklist-by' => '차단한 관리자',
'blocklist-params' => '차단 설정',
'blocklist-reason' => '이유',
-'ipblocklist-submit' => '찾기',
+'ipblocklist-submit' => '검색',
'ipblocklist-localblock' => '로컬 차단',
'ipblocklist-otherblocks' => '다른 {{PLURAL:$1|차단}} 기록',
'infiniteblock' => '무기한',
'allmessagesdefault' => '기본 메시지 글',
'allmessagescurrent' => '현재 문자열',
'allmessagestext' => '미디어위키 이름공간에 있는 모든 시스템 메시지의 목록입니다.
-미디어위키의 번역 작업에 관심이 있으면 [//www.mediawiki.org/wiki/Localisation 미디어위키 지역화]나 [//translatewiki.net translatewiki.net]에 참가해주세요.',
+미디어위키의 번역 작업에 관심이 있으면 [https://www.mediawiki.org/wiki/Localisation 미디어위키 지역화]나 [//translatewiki.net translatewiki.net]에 참가해주세요.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''가 비활성화되어 있어서 이 문서를 사용할 수 없습니다.",
'allmessages-filter-legend' => '필터',
'allmessages-filter' => '수정 상태로 거르기:',
# Thumbnails
'thumbnail-more' => '실제 크기로',
-'filemissing' => '파일 사라짐',
+'filemissing' => '파일이 없음',
'thumbnail_error' => '섬네일을 만드는 중 오류 발생: $1',
'thumbnail_error_remote' => '$1에서 반환한 오류 메시지:
$2',
'thumbnail-dest-create' => '대상 경로에 섬네일을 저장할 수 없습니다.',
'thumbnail_invalid_params' => '섬네일 매개변수가 잘못되었습니다.',
'thumbnail_dest_directory' => '새 목적 디렉터리를 만들 수 없습니다.',
-'thumbnail_image-type' => 'í\95´ë\8b¹ í\8c\8cì\9d¼ í\98\95ì\8b\9dì\9d\80 ì§\80ì\9b\90í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤',
+'thumbnail_image-type' => '그림 í\98\95ì\8b\9dì\9d´ ì§\80ì\9b\90ë\90\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤',
'thumbnail_gd-library' => 'GD 라이브러리 설정이 잘못되었습니다: $1 함수를 찾을 수 없습니다.',
'thumbnail_image-missing' => '파일을 찾을 수 없습니다: $1',
'tooltip-ca-move' => '문서 이동하기',
'tooltip-ca-watch' => '이 문서를 주시문서 목록에 추가',
'tooltip-ca-unwatch' => '이 문서를 주시문서 목록에서 제거',
-'tooltip-search' => '{{SITENAME}} 찾기',
+'tooltip-search' => '{{SITENAME}} 검색',
'tooltip-search-go' => '이 이름의 문서가 존재하면 그 문서로 바로 가기',
-'tooltip-search-fulltext' => '이 문자열이 포함된 문서 찾기',
+'tooltip-search-fulltext' => '이 문자열이 포함된 문서 검색',
'tooltip-p-logo' => '대문으로 가기',
'tooltip-n-mainpage' => '대문으로 가기',
'tooltip-n-mainpage-description' => '대문으로 가기',
'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고 차이 보기 기능이 미리 보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
'tooltip-preferences-save' => '환경 설정 저장하기',
'tooltip-summary' => '짧은 요약을 적어주세요',
-'tooltip-iwiki' => '$2 - $1',
+'interlanguage-link-title' => '$2 - $1',
# Stylesheets
'common.css' => '/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
'pageinfo-length' => '문서 길이 (바이트)',
'pageinfo-article-id' => '문서 ID',
'pageinfo-language' => '문서 내용 언어',
+'pageinfo-content-model' => '문서 콘텐츠 모델',
'pageinfo-robot-policy' => '로봇에 의한 색인',
'pageinfo-robot-index' => '허용됨',
'pageinfo-robot-noindex' => '불허됨',
'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
'svg-long-desc-animated' => '애니메이션 SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
'svg-long-error' => '잘못된 SVG 파일: $1',
-'show-big-image' => 'ìµ\9cë\8c\80 í\95´ì\83\81ë\8f\84',
+'show-big-image' => 'ì\9b\90본 í\8c\8cì\9d¼',
'show-big-image-preview' => '미리 보기 크기: $1',
'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1',
'show-big-image-size' => '$1 × $2 픽셀',
'newimages-label' => '파일 이름 (또는 그 일부분):',
'showhidebots' => '(봇을 $1)',
'noimages' => '그림이 없습니다.',
-'ilsubmit' => '찾기',
+'ilsubmit' => '검색',
'bydate' => '날짜',
'sp-newimages-showfrom' => '$1 $2부터 올라온 파일 목록 보기',
'minutes' => '$1분',
'hours' => '$1시간',
'days' => '$1일',
-'weeks' => '{{PLURAL:$1|$1주}}',
+'weeks' => '$1주',
'months' => '$1달',
'years' => '$1년',
'ago' => '$1 전',
# Metadata
'metadata' => '메타데이터',
-'metadata-help' => '이 파일은 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
-프로그램에서 파일을 편집할 경우, 새로 저장한 그림 파일에 일부 부가 정보가 빠질 수 있습니다.',
+'metadata-help' => '이 파일은 그 파일을 만들거나 디지털화하는 데 사용되는 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
+프로그램에서 파일을 편집할 경우, 새로 저장한 파일에 일부 부가 정보가 빠질 수 있습니다.',
'metadata-expand' => '자세한 정보 보이기',
'metadata-collapse' => '자세한 정보 숨기기',
'metadata-fields' => '파일 메타데이터 표가 접혀 있을 때, 이 메시지에 올라와 있는 다음 속성값만이 기본적으로 보이게 됩니다.
'exif-urgency-other' => '사용자 정의 ($1)',
# External editor support
-'edit-externally' => '이 파일을 바깥 프로그램을 사용해서 편집하기',
-'edit-externally-help' => '(자세한 정보는 [//www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
+'edit-externally' => '이 파일을 바깥 어플리케이션을 사용해 편집하기',
+'edit-externally-help' => '(자세한 정보는 [https://www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '모두',
'confirmemail_send' => '인증 코드를 메일로 보내기',
'confirmemail_sent' => '인증 이메일을 보냈습니다.',
'confirmemail_oncreate' => '확인 이메일을 보냈습니다.
-이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
+이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
'confirmemail_sendfailed' => '{{SITENAME}}에서 인증 이메일을 보낼 수 없습니다.
이메일 주소를 잘못 입력했는지 확인해주세요.
'confirm-unwatch-button' => '확인',
'confirm-unwatch-top' => '이 문서를 주시문서 목록에서 뺄까요?',
+# Separators for various lists, etc.
+'quotation-marks' => '“$1”',
+
# Multipage image navigation
'imgmultipageprev' => '← 이전 페이지',
'imgmultipagenext' => '다음 페이지 →',
'version-hook-subscribedby' => '훅이 사용된 위치',
'version-version' => '(버전 $1)',
'version-license' => '라이선스',
-'version-poweredby-credits' => "이 위키는 '''[//www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "이 위키는 '''[https://www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
'version-poweredby-others' => '그 외 다른 개발자',
'version-poweredby-translators' => 'translatewiki.net 번역자',
-'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람í\95\9cí\85\8c ê°\90ì\82¬ë\93\9c립ë\8b\88ë\8b¤.',
+'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람ì\97\90ê²\8c ê°\90ì\82¬ë\93\9c립ë\8b\88ë\8b¤.',
'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
-'version-software' => '설치된 프로그램',
+'version-software' => '설치된 소프트웨어',
'version-software-product' => '제품',
'version-software-version' => '버전',
'version-entrypoints' => 'URL 진입점',
'redirect' => '파일, 사용자나 판 ID별 넘겨주기',
'redirect-legend' => '파일이나 문서로 넘겨주기',
'redirect-summary' => '이 특수 문서는 파일(파일 이름을 지정), 문서(판 ID를 지정)나 사용자 문서(사용자 ID를 정수로 지정)로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], 혹은 [[{{#Special:Redirect}}/user/101]].',
-'redirect-submit' => '찾기',
+'redirect-submit' => '보기',
'redirect-lookup' => '찾을 종류:',
'redirect-value' => '값:',
'redirect-user' => '사용자 ID',
'redirect-not-exists' => '값을 찾을 수 없습니다',
# Special:FileDuplicateSearch
-'fileduplicatesearch' => '중복된 파일 찾기',
-'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 찾습니다.',
-'fileduplicatesearch-legend' => '중복 찾기',
+'fileduplicatesearch' => '중복된 파일 검색',
+'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 검색합니다.',
+'fileduplicatesearch-legend' => '중복 검색',
'fileduplicatesearch-filename' => '파일 이름:',
-'fileduplicatesearch-submit' => '찾기',
+'fileduplicatesearch-submit' => '검색',
'fileduplicatesearch-info' => '$1 × $2 픽셀<br />파일 크기: $3<br />MIME 유형: $4',
'fileduplicatesearch-result-1' => '"$1" 파일과 중복된 파일이 없습니다.',
'fileduplicatesearch-result-n' => '"$1" 파일은 {{PLURAL:$2|중복 파일이 $2개}} 있습니다.',
# Special:SpecialPages
'specialpages' => '특수 문서 목록',
-'specialpages-note' => '----
-* 일반 특수 문서입니다.
+'specialpages-note-top' => '범례',
+'specialpages-note' => '* 일반 특수 문서입니다.
* <span class="mw-specialpagerestricted">제한된 특수 문서입니다.</span>',
'specialpages-group-maintenance' => '관리용 목록',
'specialpages-group-other' => '다른 특수 문서',
'htmlform-chosen-placeholder' => '선택하세요',
# SQLite database support
-'sqlite-has-fts' => '$1 (본문 전체 찾기)',
-'sqlite-no-fts' => '$1 (본문은 찾기에서 제외)',
+'sqlite-has-fts' => '$1 (본문 전체 검색 지원)',
+'sqlite-no-fts' => '$1 (본문 전체 검색 지원 제외)',
# New logging system
'logentry-delete-delete' => '$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}',
'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
# Search suggestions
-'searchsuggest-search' => '찾기',
+'searchsuggest-search' => '검색',
'searchsuggest-containing' => '다음 문자열 포함...',
# API errors
'limitreport-expansiondepth' => '최대 전개 깊이',
'limitreport-expensivefunctioncount' => '부하 높은 파서 함수 수',
+# Special:ExpandTemplates
+'expandtemplates' => '틀 전개',
+'expand_templates_intro' => '이 특수 문서는 글의 모든 틀을 끝까지 풀어 줍니다.
+<code><nowiki>{{</nowiki>#language:…}}</code> 같은 파서 함수나
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> 같은 변수를 풀어줍니다.
+사실 두개의 중괄호 사이에 있는 것은 거의 모두 풀어줍니다.',
+'expand_templates_title' => '문서 이름 ({{FULLPAGENAME}} 등):',
+'expand_templates_input' => '전개할 내용:',
+'expand_templates_output' => '결과',
+'expand_templates_xml_output' => 'XML 출력',
+'expand_templates_ok' => '확인',
+'expand_templates_remove_comments' => '주석 제거',
+'expand_templates_remove_nowiki' => '결과에서 <nowiki> 태그를 숨기기',
+'expand_templates_generate_xml' => 'XML 구문 트리 보기',
+'expand_templates_preview' => '미리 보기',
+
);
'retrievedfrom' => 'Öшмöс "$1"',
'youhavenewmessages' => 'Тэныт локтiс $1 ($2).',
-'newmessageslink' => 'виль юöррез',
-'newmessagesdifflink' => 'медбöрьяись вильмöтöм',
'youhavenewmessagesmulti' => '$1 юкöтын тэ понда мыйкö эм',
'editsection' => 'мöдкодьсьöтны',
'editold' => 'мöдкодьсьöтны',
# External editor support
'edit-externally' => 'Редактируйтны этiйö файлсö мöд программа пыр',
-'edit-externally-help' => '(унажык видзöт: [//www.mediawiki.org/wiki/Manual:External_editors удж кежö лöсьöтны туйдöтан])',
+'edit-externally-help' => '(унажык видзöт: [https://www.mediawiki.org/wiki/Manual:External_editors удж кежö лöсьöтны туйдöтан])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'быдöс',
'ok' => 'ОК',
'retrievedfrom' => 'Чыкъгъаны — «$1»',
'youhavenewmessages' => 'Сизге $1 келдиле ($2).',
-'newmessageslink' => 'джангы билдириуле',
-'newmessagesdifflink' => 'сюзюу бетигизни ахыр тюрлениую',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башха бир къошулуучудан|$3 къошулуучудан}} сеннге $1 келди ($2).',
'youhavenewmessagesmanyusers' => 'Талай къошулуучудан $1 барды. ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|джангы билдириу|джангы билдириуле}}',
'preferences' => 'Джарашдырыула',
'mypreferences' => 'Джарашдырыула',
'prefs-edits' => 'Тюрлендириулени саны:',
-'prefsnologin' => 'Системагъа кесигизни танытмагъансыз',
-'prefsnologintext' => 'Къошулуучуну джарашдырыуларын тюрлендирир ючюн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} системагъа кесигизни танытыргъа]</span> керексиз.',
'changepassword' => 'Паролну ауушдур',
'prefs-skin' => 'Джасауу',
'skin-preview' => 'Ал къарау',
'recentchanges-label-minor' => 'Бу гитче тюрлениудю',
'recentchanges-label-bot' => 'Бу тюрлендириуню бот этгенди',
'recentchanges-label-unpatrolled' => 'Бу тюрлендириу алкъын патруль этилинмегенди',
+'recentchanges-legend-newpage' => '$1 — джангы бет',
'rcnote' => '$4 $5 заманнга, арт {{PLURAL:$1|1|$1}} тюрлениу {{PLURAL:$2|1|$2}} кюнню ичинде',
'rcnotefrom' => 'Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле',
'rclistfrom' => '$1 башлаб джангы тюрлениулени кёргюз',
'allmessagesdefault' => 'Оригинал текст',
'allmessagescurrent' => 'Хайырлана тургъан текст',
'allmessagestext' => 'Бу тизме MediaWiki ат аламында бар болгъан система билдириулени тизмесиди.
-MediaWiki локализациясына юлюш къошаргъа излей эсегиз, [//www.mediawiki.org/wiki/Localisation MediaWiki локализация] бла [//translatewiki.net translatewiki.net] сайтлагъа киригиз.',
+MediaWiki локализациясына юлюш къошаргъа излей эсегиз, [https://www.mediawiki.org/wiki/Localisation MediaWiki локализация] бла [//translatewiki.net translatewiki.net] сайтлагъа киригиз.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' джабыкъ болгъаны ючюн '''{{ns:special}}:Allmessages''' хайырланыугъа ачыкъ тюлдю.",
'allmessages-filter-legend' => 'Фильтр',
'allmessages-filter' => 'Тюрлендириуюне кёре фильтрлендир:',
# External editor support
'edit-externally' => 'Бу файлны тыш программа бла тюрлендиригиз',
-'edit-externally-help' => '(толу информациягъа мында къарагъыз: [//www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
+'edit-externally-help' => '(толу информациягъа мында къарагъыз: [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'бютеу',
'version-hook-subscribedby' => 'Абонент болгъан',
'version-version' => '(Версия $1)',
'version-license' => 'Лицензия',
-'version-poweredby-credits' => "Бу вики '''[//www.mediawiki.org/ MediaWiki]''' программа бла ишлейди, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Бу вики '''[https://www.mediawiki.org/ MediaWiki]''' программа бла ишлейди, copyright © 2001-$1 $2.",
'version-poweredby-others' => 'башхала',
'version-license-info' => 'MediaWiki эркин программа джазыуду, сиз аны GNU General Public License лицензияны (эркин программа джазыуланы фонду чыгъаргъан; экинчи версиясы неда андан кеч къайсысы да) шартларына кёре джаяргъа эмда/неда тюрлендирирге боллукъсуз.
# Special:SpecialPages
'specialpages' => 'Къуллукъчу бетле',
-'specialpages-note' => '----
-* Тюз къуллукъчу бетле.
+'specialpages-note' => '* Тюз къуллукъчу бетле.
* <span class="mw-specialpagerestricted">Кирирге эркинлик чекленнген къуллукъчу бетле.</span>
* <span class="mw-specialpagecached">Кэш этилген къуллукъчу бетле (эски болургъа боллукъдула).</span>',
'specialpages-group-maintenance' => 'Техника баджарыуну отчетлары',
'duration-centuries' => '$1 {{PLURAL:$1|ёмюр}}',
'duration-millennia' => '$1 {{PLURAL:$1|мингджыллыкъ}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Шаблонланы ачыу',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Di Sigg heh stamp vun „$1“.',
'youhavenewmessages' => 'Do häs $1 ($2).',
-'newmessageslink' => 'neu Metdeilunge op Dinger Klaafsigg',
-'newmessagesdifflink' => 'Ungerscheid zor vürletzte Version',
'youhavenewmessagesfromusers' => 'Do häs $1 vun {{PLURAL:$3|enem|$3|keinem}} andere Metmaacher ($2)',
'youhavenewmessagesmanyusers' => 'Do häs $1 vun andere Metmaacher ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|en neuje Nohreesch|neu Nohreeschte|kein neuje Nohreeschte}}',
'preferences' => 'ming Enstellunge',
'mypreferences' => 'Enstellunge',
'prefs-edits' => 'Aanzahl Änderunge am Wiki:',
-'prefsnologin' => 'Nit enjelogg',
-'prefsnologintext' => 'Do mööts ald <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} enjelogg]</span> sin, öm Ding Enstellunge ze ändere.',
'changepassword' => 'Passwood *',
'prefs-skin' => 'Et Ussinn',
'skin-preview' => 'Vör-Ansich',
'recentchanges-label-minor' => 'Heh dat es en Mini-Änderung',
'recentchanges-label-bot' => 'Di Änderung es fun enem Bot jemaat woode',
'recentchanges-label-unpatrolled' => 'Heh di Änderung es noch nit nohjeloort',
+'recentchanges-legend-newpage' => '$1 - neu Sigg',
'rcnote' => '{{PLURAL:$1|Heh es de letzte Änderung us|Heh sin de letzte <strong>$1</strong> Änderunge us|Et jit <strong>kei</strong> Änderunge en}} {{PLURAL:$2|däm letzte Daach|de letzte <strong>$2</strong> Dääsch|dä Zick}} vum <strong>$4</strong> aff <strong>$5</strong> Uhr beß jetz.',
'rcnotefrom' => 'Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.',
'rclistfrom' => 'Zeich de Änderunge vum $1 aan',
'allmessagesdefault' => 'Dä standaadmäßije Tex',
'allmessagescurrent' => 'Esu es dä Tex jetz',
'allmessagestext' => 'Heh kütt en Liss met Texte, Texstöck, un Nohreechte em Appachtemeng „MediaWiki“ — Do draan Ändere löht et Wiki anders ußsin, dat darf dröm nit Jede maache.
-Wenn De jenerell aan [//www.mediawiki.org/wiki/Localisation MediaWiki singe Översezung] jet anders han wells, do jangk noh [//translatewiki.net translatewiki.net].',
+Wenn De jenerell aan [https://www.mediawiki.org/wiki/Localisation MediaWiki singe Översezung] jet anders han wells, do jangk noh [//translatewiki.net translatewiki.net].',
'allmessagesnotsupportedDB' => '<strong>Dat wor nix!</strong> Mer künne „{{#special:allmessages}}“ nit zeije, <code>$wgUseDatabaseMessages</code> es usjeschalt!',
'allmessages-filter-legend' => 'Ußsöhke — wat för en Täxte o Nohreeshte aazeije?',
'allmessages-filter' => 'Zohshtand:',
# External editor support
'edit-externally' => 'Dun de Datei met enem externe Projramm bei Dr om Rechner bearbeide',
-'edit-externally-help' => '(Luur en de [//www.mediawiki.org/wiki/Manual:External_editors Aanleidong för de Enschtallazjuhn] noh mieh Henwiese)',
+'edit-externally-help' => '(Luur en de [https://www.mediawiki.org/wiki/Manual:External_editors Aanleidong för de Enschtallazjuhn] noh mieh Henwiese)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'all',
'version-hook-subscribedby' => 'Opjeroofe vun',
'version-version' => '(Väsjohn $1)',
'version-license' => 'Lėzänz',
-'version-poweredby-credits' => "Dat Wiki heh löp met '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Dat Wiki heh löp met '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
'version-poweredby-others' => 'sönß wää',
'version-poweredby-translators' => 'de Övversäzer em translatewiki.net',
'version-credits-summary' => 'Mer bedanke ons för iehr Beidrähsch zom [[Special:Version|MediaWiki]] bei:',
# Special:SpecialPages
'specialpages' => '{{int:nstab-special}}e',
-'specialpages-note' => '----
-* {{int:nstab-special}}e för jede Metmaacher.
+'specialpages-note' => '* {{int:nstab-special}}e för jede Metmaacher.
* <span class="mw-specialpagerestricted">{{int:nstab-special}}e för Metmaacher met besönder Räächde.</span>
* <span class="mw-specialpagecached">Em Zwescheshpeisher jehallde {{int:nstab-special}}e. Di künnte ovverhollt sind.</span>',
'specialpages-group-maintenance' => 'Waadungsleste',
'limitreport-expensivefunctioncount' => 'Oproofe vun „düüre“ Fonxjuhne em Paaser',
'limitreport-expensivefunctioncount-value' => '$1 vun $2',
+# Special:ExpandTemplates
+'expandtemplates' => 'Schablone üvverpröfe',
+'expand_templates_intro' => 'Heh di Extrasigg nemmp Täx aan un lühß alle Oproofe vun <code lang="en"><nowiki>{{</nowiki> … }}</code> Klammere op.
+Och verschaachtelte.
+Derbei jehüüere enschtalleete Paaserfunxjuhne, alsu esu jät wi
+<code lang="en"><nowiki>{{</nowiki>#language:…}}</code>, udder Varijaable, dat es esu jät wi
+<code lang="en"><nowiki>{{</nowiki>CURRENTDAY}}</code>.',
+'expand_templates_title' => 'Dä Siggetitel, also wat för {{FULLPAGENAME}} uew. enjeföllt weed:',
+'expand_templates_input' => 'Wat De üvverpröfe wells:',
+'expand_templates_output' => 'Wat erus kütt es',
+'expand_templates_xml_output' => 'XML ußjevve',
+'expand_templates_ok' => 'Lohß Jonn!',
+'expand_templates_remove_comments' => 'De ėnner Kommentare fottloohße',
+'expand_templates_remove_nowiki' => 'Donn de <nowiki>-Befähle ongerdröcke en dämm, wadd_eruß kütt',
+'expand_templates_generate_xml' => 'Och dä XML-Parser-Boum zeije',
+'expand_templates_preview' => 'Vör-Aansich',
+
);
'ok' => 'Baş e',
'retrievedfrom' => 'Ji "$1" hatiye standin.',
'youhavenewmessages' => '$1 yên te hene ($2).',
-'newmessageslink' => 'Peyamên nû',
-'newmessagesdifflink' => 'cudayî ji guhertoya berê',
'youhavenewmessagesfromusers' => 'Ji {{PLURAL:$3|bikarhênerekê/î|$3 bikarhêneran}}, ji bo te $1 ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|peyameke nû heye|peyamên nû hene}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|guherandin|guherandinên dawî}}',
'preferences' => 'Tercîhên min',
'mypreferences' => 'Tercihên min',
'prefs-edits' => 'Hejmarê guherandinan:',
-'prefsnologin' => 'Xwe tomar nekir',
-'prefsnologintext' => 'Tu gireke xwe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} qeydbikê]</span> ji bo guherandina tercihên bikarhêneran.',
'changepassword' => 'Şîfreyê biguherîne',
'prefs-skin' => 'Pêste',
'skin-preview' => 'Pêşdîtin',
'recentchanges-legend' => 'Vebijarkên guherandinên dawî',
'recentchanges-summary' => 'Guhertinên herî dawî yên wîkiyê li ser vê rûpelê bişopîne.',
'recentchanges-label-minor' => 'Ev guhertineka biçûk e',
+'recentchanges-legend-newpage' => '$1 - rûpela nû',
'rcnote' => "Jêr {{PLURAL:$1|guherandinek|'''$1''' guherandinên dawî}} di {{PLURAL:$2|rojê|'''$2''' rojên dawî}} de ji $3 şûnde tên nîşan dan.",
'rclistfrom' => 'Guherandinên ji $1 şûnde nîşan bide',
'rcshowhideminor' => 'Guherandinên biçûk $1',
'exif-iimcategory-wea' => 'Hewa',
# External editor support
-'edit-externally-help' => '(Ji bo agahîyên zav [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] li vir binêre)',
+'edit-externally-help' => '(Ji bo agahîyên zav [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] li vir binêre)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'hemû',
# Special:SpecialPages
'specialpages' => 'Rûpelên taybet',
-'specialpages-note' => '----
-* Rûpelên taybetî ji her kesan ra
+'specialpages-note' => '* Rûpelên taybetî ji her kesan ra
* <strong class="mw-specialpagerestricted">Rûpelên taybetî ji bikarhêneran bi mafên zêdetir ra</strong>',
'specialpages-group-other' => 'Rûpelên taybetî yên din',
'specialpages-group-login' => 'Têkeve',
'searchsuggest-search' => 'Lêgerîn',
'searchsuggest-containing' => 'dihundirîne...',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Encam',
+'expand_templates_ok' => 'Baş e',
+'expand_templates_preview' => 'Pêşdîtin',
+
);
'ok' => 'Sur',
'retrievedfrom' => 'Daskevys dhyworth "$1"',
'youhavenewmessages' => "$1 a'gas beus ($2).",
-'newmessageslink' => 'Messajys nowyth',
-'newmessagesdifflink' => 'chanj diwettha',
'youhavenewmessagesfromusers' => "Hwi a'gas beus $1 dhyworth {{PLURAL:$3|devnydhyer aral|$3 devnydhyer}} ($2).",
'youhavenewmessagesmanyusers' => "Hwi a'gas beus $1 dhyworth lies devnydhyer ($2).",
'newmessageslinkplural' => '{{PLURAL:$1|messach nowyth|messajys nowyth}}',
'recentchanges-label-minor' => 'Chanj byhan yw hemma',
'recentchanges-label-bot' => 'Gwrys veu an chanj-ma gans bott',
'recentchanges-label-unpatrolled' => 'Ny veu an chanj-ma patrolyes hwath',
+'recentchanges-legend-newpage' => '$1 - folen nowyth',
'rcnote' => "A-woles yma {{PLURAL:$1|'''1''' janj|an '''$1''' chanjyow diwettha}} y'n {{PLURAL:$2|dydh|'''$2''' dydh}} diwettha, a-dhia $5, $4.",
'rclistfrom' => 'Diskwedhes chanjyow nowyth yn unn dhalleth dhyworth $1.',
'rcshowhideminor' => '$1 chanjyow byhan',
'ok' => 'OK',
'retrievedfrom' => '"$1" булагынан алынды',
'youhavenewmessages' => 'Сизге $1 ($2) бар.',
-'newmessageslink' => 'жаңы билдирүүлөр',
-'newmessagesdifflink' => 'соңку өзгөрүү',
'youhavenewmessagesfromusers' => 'Сиз {{PLURAL:$3|колдонуучудан|$3 колдонуучу}} $1 алдыңыз ($2).',
'youhavenewmessagesmanyusers' => 'Көп колдонуучулардан сиз $1 алдыңыз ($2).',
'newmessageslinkplural' => 'жаңы {{PLURAL:$1|билдирүү| билдирүүлөр}}',
'preferences' => 'Ырастоолор',
'mypreferences' => 'Ырастоолор',
'prefs-edits' => 'Өзгөртүүлөрдүн саны',
-'prefsnologin' => 'Системге кирген жоксуз',
'changepassword' => 'Сырсөздү өзгөртүү',
'prefs-skin' => 'Тема',
'skin-preview' => 'Алдын ала көрүү',
# External editor support
'edit-externally' => 'Бул файлды сырткы программа колдонуу аркылуу оңдоо',
-'edit-externally-help' => '(Толук маалымат алуу үчүн [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] барагына кайрылсаңыз болот)',
+'edit-externally-help' => '(Толук маалымат алуу үчүн [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] барагына кайрылсаңыз болот)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'баары',
'ok' => 'Age',
'retrievedfrom' => 'Receptum de "$1"',
'youhavenewmessages' => 'Habes $1 ($2).',
-'newmessageslink' => 'nuntia nova',
-'newmessagesdifflink' => 'dissimilia post mutationem ultimam',
'youhavenewmessagesfromusers' => 'Habes $1 ab {{PLURAL:$3|uno usore alio|usoribus $3}} ($2).',
'youhavenewmessagesmanyusers' => 'Habes $1 a multis usoribus ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|nuntium novum|nuntia nova}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|dissimilitudo|dissimilitudines}} post mutationem ultimam',
+'newmessageslinkplural' => '{{PLURAL:$1|nuntium novum|999=nuntia nova}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|dissimilitudo|999=dissimilitudines}} post mutationem ultimam',
'youhavenewmessagesmulti' => 'Habes nuntia nova in $1',
'editsection' => 'recensere',
'editold' => 'recensere',
'revdelete-hide-comment' => 'Summarium emendationis',
'revdelete-hide-user' => 'Nomen usoris/locus IP',
'revdelete-radio-same' => 'non mutare',
-'revdelete-radio-set' => 'Visibiles/visibilia',
-'revdelete-radio-unset' => 'Non visibiles/non visibilia',
+'revdelete-radio-set' => 'Celare',
+'revdelete-radio-unset' => 'Visibiles/visibilia',
'revdelete-log' => 'Causa:',
'revdel-restore' => 'visibilitatem mutare',
'revdel-restore-deleted' => 'Recensiones deletae',
'preferences' => 'Praeferentiae',
'mypreferences' => 'Praeferentiae',
'prefs-edits' => 'Numerus recensionum:',
-'prefsnologin' => 'Conventum non est apertum',
-'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Conventum aperire]</span> debes ad praeferentias tuas modificandum.',
'changepassword' => 'Tesseram mutare',
'prefs-skin' => 'Aspectum',
'skin-preview' => 'Praevisum',
'recentchanges-label-minor' => 'Haec est recensio minor',
'recentchanges-label-bot' => 'Hanc emendationem automaton fecit',
'recentchanges-label-unpatrolled' => 'Haec recensio nondum est examinata',
+'recentchanges-legend-newpage' => '$1 - pagina nova',
'rcnote' => "Subter {{PLURAL:$1|est '''1''' nuper mutatum|sunt '''$1''' nuperrime mutata}} in {{PLURAL:$2|die proximo|'''$2''' diebus proximis}} ex $5, $4.",
'rcnotefrom' => "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
'rclistfrom' => 'Monstrare mutata nova incipiens ab $1',
'allnotinnamespace' => 'Omnes paginae (quibus in spatio nominali $1 exclusis)',
'allpagesprev' => 'Superior',
'allpagesnext' => 'Proxima',
-'allpagessubmit' => 'Ire',
+'allpagessubmit' => 'Adhibere',
'allpagesprefix' => 'Monstrare paginas quibus est praeverbium:',
'allpagesbadtitle' => 'Nomen paginae datum fuit invalidum aut praverbium interlinguale vel interviciale habuit. Fortasse insunt una aut plus litterarum quae in titulis non possunt inscribier.',
'allpages-bad-ns' => 'Non est spatium nominale "$1" apud {{grammar:accusative|{{SITENAME}}}}.',
# Namespace form on various pages
'namespace' => 'Spatium nominale:',
'invert' => 'Selectionem invertere',
+'namespace_association' => 'Spatium nominale pertinens',
'blanknamespace' => '(principale)',
# Contributions
# External editor support
'edit-externally' => 'Hunc fasciculum in programmate externali recensere',
-'edit-externally-help' => '(Vide et [//www.mediawiki.org/wiki/Manual:External_editors paginas adiutorias] programmatis externalis)',
+'edit-externally-help' => '(Vide et [https://www.mediawiki.org/wiki/Manual:External_editors paginas adiutorias] programmatis externalis)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'omnes',
# Search suggestions
'searchsuggest-search' => 'Quaerere',
+'searchsuggest-containing' => 'continens...',
# API errors
'api-error-empty-file' => 'Fasciculus inmissus vacuus est.',
'api-error-mustbeloggedin' => 'Ad fasciculos inmittendos conventum aperire necesse est.',
'api-error-unknownerror' => 'Error incognitus: "$1".',
+# Special:ExpandTemplates
+'expandtemplates' => 'Formulas resolvere',
+
);
'ok' => 'DE ACORDDO',
'retrievedfrom' => 'Acòjido del adhresso "$1"',
'youhavenewmessages' => 'Tienes $1 ($2).',
-'newmessageslink' => 'mesajes nuevos',
-'newmessagesdifflink' => 'el trocamiento de alcabo',
'youhavenewmessagesmulti' => 'Tienes messajes nuevos en $1',
'editsection' => 'troca',
'editold' => 'troca',
# External editor support
'edit-externally' => 'Trocar esto arxivo usando una aplicación eksterna',
-'edit-externally-help' => '(Melda las [//www.mediawiki.org/wiki/Manual:External_editors enstruksiones de configuración] -en inglés- para saber más)',
+'edit-externally-help' => '(Melda las [https://www.mediawiki.org/wiki/Manual:External_editors enstruksiones de configuración] -en inglés- para saber más)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todos',
'ok' => 'OK',
'retrievedfrom' => 'Vun „$1“',
'youhavenewmessages' => 'Dir hutt $1 ($2).',
-'newmessageslink' => 'nei Messagen',
-'newmessagesdifflink' => 'Lescht Ännerung',
'youhavenewmessagesfromusers' => 'Dir hutt $1 vu(n) {{PLURAL:$3|engem anere Benotzer|$3 anere Benotzer}} ($2).',
'youhavenewmessagesmanyusers' => 'Dir hutt $1 vu ville Benotzer ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|een neie Message|nei Message}}',
-'newmessagesdifflinkplural' => 'lescht {{PLURAL:$1|Ännerung|Ännerungen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|een neie Message|999=nei Messagen}}',
+'newmessagesdifflinkplural' => 'lescht {{PLURAL:$1|Ännerung|999=Ännerungen}}',
'youhavenewmessagesmulti' => 'Dir hutt nei Messagen op $1',
'editsection' => 'änneren',
'editold' => 'änneren',
'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',
-'exception-nologin-text' => 'Dës Säit oder Aktioun erfuerdert datt Dir op dëser Wiki ageloggt sidd.',
+'exception-nologin-text' => '[[Special:Userlogin|Loggt Iech w.e.g. a]] fir op dës Säit oder dës Aktioun zougräifen ze kënnen.',
# Virus scanner
'virus-badscanner' => "Schlecht Konfiguratioun: onbekannte Virescanner: ''$1''",
*k = Kleng Ännerung.",
'history-fieldset-title' => 'An de Versioune sichen',
'history-show-deleted' => 'nëmmen déi geläschten',
-'histfirst' => 'eelsten',
-'histlast' => 'neisten',
+'histfirst' => 'eelst',
+'histlast' => 'neist',
'historysize' => '({{PLURAL:$1|1 Byte|$1 Byten}})',
'historyempty' => '(eidel)',
'revdelete-show-file-submit' => 'Jo',
'revdelete-selected' => "'''{{PLURAL:$2|Gewielt Versioun|Gewielt Versioune}} vu(n) [[:$1]] :'''",
'logdelete-selected' => "'''Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:'''",
-'revdelete-text' => "'''Geläschte Versiounen oder aner geläschte Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
-Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläschte Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
+'revdelete-text' => "'''Geläscht Versiounen oder aner geläscht Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
+Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläscht Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
'revdelete-confirm' => "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
'revdelete-suppress-text' => "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:
+* Informatiounen déi beleidege kéinten
* Net ubruechte perséinlechen Informatiounen
*: ''Adressen, Telefonsnummeren, Sozialversécherungsnummeren asw.''",
'revdelete-legend' => "Limitatioune fir d'Sichtbarkeet festleeën",
'revdelete-hide-user' => 'Dem Auteur säi Benotzernumm/IP-Adress',
'revdelete-hide-restricted' => 'Donnéeën och fir Administrateuren suppriméieren geneesou wéi fir déi Aner',
'revdelete-radio-same' => '(net änneren)',
-'revdelete-radio-set' => 'Visibel',
-'revdelete-radio-unset' => 'Verstoppt',
+'revdelete-radio-set' => 'Verstoppt',
+'revdelete-radio-unset' => 'Visibel',
'revdelete-suppress' => 'Grond vum Läschen och fir Administrateure verstoppt',
'revdelete-unsuppress' => 'Limitatiounen fir restauréiert Versiounen ophiewen',
'revdelete-log' => 'Grond:',
# Suppression log
'suppressionlog' => 'Lëscht vun de verstoppten a geläschte Säiten',
-'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären a vun den Administrateuren verstopptem Inhalt.
+'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären an Inhalt dee vun den Administrateure verstoppt gouf.
Kuckt [[Special:BlockList|Lëscht vun Späre]] fir déi aktuell Spären.',
# History merging
'preferences' => 'Astellungen',
'mypreferences' => 'Astellungen',
'prefs-edits' => 'Zuel vun den Ännerungen:',
-'prefsnologin' => 'Net ageloggt',
-'prefsnologintext' => 'Dir musst <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}ageloggt]</span> sinn, fir Är Astellungen änneren ze kënnen.',
+'prefsnologintext2' => 'Dir musst Iech $1 fir Är Benotzerastellunge festzeleeën',
'changepassword' => 'Passwuert änneren',
'prefs-skin' => 'Skin',
'skin-preview' => 'Kucken',
'prefs-displayrc' => 'Optioune vun deem wat gewise gëtt',
'prefs-displaysearchoptions' => 'Optioune vum Affichage',
'prefs-displaywatchlist' => 'Optioune vun deem wat gewise gëtt',
+'prefs-tokenwatchlist' => 'Token',
'prefs-diffs' => 'Ënnerscheeder',
'prefs-help-prefershttps' => 'Dës Astellung gëtt déi nächste Kéier wierksam wou Dir Iech ageloggt.',
'recentchanges-label-minor' => 'Dëst ass eng kleng Ännerung',
'recentchanges-label-bot' => 'Dës Ännerung gouf vun engem Bot gemaacht',
'recentchanges-label-unpatrolled' => 'Dës Ännerung gouf nach net nogekuckt',
+'recentchanges-legend-newpage' => '$1 - nei Säit',
'rcnote' => "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht '''$1''' Ännerungen}} {{PLURAL:$2|vum leschten Dag|vun de leschten '''$2''' Deeg}}, Stand: $4 ëm $5 Auer.",
'rcnotefrom' => "Ugewise ginn d'Ännerunge vum '''$2''' un (maximal '''$1''' Ännerunge gi gewisen).",
'rclistfrom' => 'Nei Ännerunge vu(n) $1 u weisen',
Hei fannt Dir en Extrait aus dem Läsch- a Réckel-Logbuch fir dëse Fichier.",
'uploadtext' => "Benotzt dëse Formulaire, fir nei Fichieren eropzelueden.
-Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläschte Fichieren am [[Special:Log/delete|Läschlog]].
+Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläscht Fichiere stinn am [[Special:Log/delete|Läschlog]].
-Fir e '''Bild''' op enger Säit zu benotzen, schreift amplaz vum Bild eng vun dëse Formelen:
+Fir e '''Bild''' op enger Säit ze benotzen, schreift amplaz vum Bild eng vun dëse Formelen:
* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.jpg]]</nowiki></code>''' fir déi ganz Versioun vum Fichier ze benotzen
* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.png|200px|thumb|left|alt text]]</nowiki></code>''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung
* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichier.ogg]]</nowiki></code>''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen",
E-Mail: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
-Et gi soulaang keng weider Maile geschéckt, bis Dir d\'Säit nees emol besicht hutt.
+Et gi soulaang keng weider Maile geschéckt, bis Dir d\'Säit nees emol besicht hutt wärend deem Dir ageloggt sidd.
Op Ärer Iwwerwaachungslëscht kënnt Dir all Benoorichtigungsmarkeren zesummen zErécksetzen.
{{canonicalurl:{{#special:Preferences}}}}
-Fir d\'Astellungen vun Ärer Iwwerwaachungslëscht z\'änneren, besicht w.e.g.
+Fir d\'Astellunge vun Ärer Iwwerwaachungslëscht z\'änneren, besicht w.e.g.
{{canonicalurl:Special:Watchlist/edit}}
Feedback a weider Hëllef:
'undeleterevisions' => '{{PLURAL:$1|1 Versioun|$1 Versiounen}} archivéiert',
'undeletehistory' => 'Wann Dir dës Säit restauréiert, ginn och all déi al Versioune restauréiert.
Wann zanter dem Läschen eng nei Säit mat dem selwechten Numm ugeluecht gouf, ginn déi restauréiert Versioune chronologesch an den Historique agedroen.',
-'undeleterevdel' => "D'Restauratioun gëtt net gemaach wann dëst dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.
-A sou Fäll däerf déi neiste Versioun net markéiert ginn oder déi neiste geläschte Versioun muss nees ugewise ginn.",
+'undeleterevdel' => "D'Restauratioun gëtt net gemaach wann dat dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.
+A sou Fäll däerf déi neist Versioun net markéiert ginn oder déi neist geläscht Versioun muss nees ugewise ginn.",
'undeletehistorynoadmin' => "Dës Säit gouf geläscht. De Grond fir d'Läsche gesitt der ënnen, zesumme mat der Iwwersiicht vun den eenzele Versioune vun der Säit an hiren Auteuren. Déi verschidden Textversioune kënnen awer just vun Administrateure gekuckt a restauréiert ginn.",
-'undelete-revision' => 'Geläschte Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3:',
+'undelete-revision' => 'Geläscht Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3:',
'undeleterevision-missing' => "Ongëlteg oder Versioun déi feelt. Entweder ass de Link falsch oder d'Versioun gouf aus dem Archiv restauréiert oder geläscht.",
'undelete-nodiff' => 'Et si keng méi al Versiounen do.',
'undeletebtn' => 'Restauréieren',
'undelete-error-long' => 'Beim Restauréiere vun engem Fichier goufe Feeler fonnt:
$1',
-'undelete-show-file-confirm' => '!Sidd Dir sécher, datt dir eng geläschte Versioun vum Fichier „<nowiki>$1</nowiki>“ vum $2 ëm $3 Auer gesi wëllt?',
+'undelete-show-file-confirm' => 'Sidd Dir sécher, datt dir eng geläscht Versioun vum Fichier „<nowiki>$1</nowiki>“ vum $2 um $3 Auer gesi wëllt?',
'undelete-show-file-submit' => 'Jo',
# Namespace form on various pages
'allmessagesdefault' => 'Standardtext',
'allmessagescurrent' => 'Aktuellen Text',
'allmessagestext' => "Dëst ass eng Lëscht vun alle '''Messagen am MediaWiki:Nummraum, déi vun der MediaWiki-Software benotzt ginn.
-Besicht w.e.g. [//www.mediawiki.org/wiki/Localisation MediaWiki Localisatioun] an [//translatewiki.net translatewiki.net] wann Dir wëllt bei de MediaWiki Iwwersetzunge matschaffen.",
+Besicht w.e.g. [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisatioun] an [//translatewiki.net translatewiki.net] wann Dir wëllt bei de MediaWiki Iwwersetzunge matschaffen.",
'allmessagesnotsupportedDB' => "Dës Säit kann net benotzt gi well '''\$wgUseDatabaseMessages''' ausgeschalt ass.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter nom ugepassten Zoustand:',
Erlaabt et e Grond an de Resumé derbäizesetzen.',
'tooltip-preferences-save' => 'Astellunge späicheren',
'tooltip-summary' => 'Gitt e kuerze Resumé an',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
# Stylesheets
'common.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick'' */",
'log-show-hide-patrol' => 'Kontroll-Logbuch $1',
# Image deletion
-'deletedrevision' => 'Al, geläschte Versioun $1',
+'deletedrevision' => 'Al, geläscht Versioun vu(n) $1',
'filedeleteerror-short' => 'Feeler beim Läsche vum Fichier: $1',
'filedeleteerror-long' => 'Bäim Läsche vum Fichier si Feeler festgestallt ginn:
'svg-long-desc' => 'SVG-Fichier, Basisgréisst: $1 × $2 Pixel, Gréisst vum Fichier: $3',
'svg-long-desc-animated' => 'Animéierten SVG-Fichier, Basisgréisst $1 x $2 Pixel, Gréisst vum Fichier: $3',
'svg-long-error' => 'Ongëltegen SVG-Fichier: $1',
-'show-big-image' => 'Voll Opléisung',
+'show-big-image' => 'Original Fichier',
'show-big-image-preview' => 'Gréisst vun dësem Preview: $1.',
'show-big-image-other' => 'Aner {{PLURAL:$2|Opléisung|Opléisungen}}: $1.',
'show-big-image-size' => '$1 × $2 Pixel',
# External editor support
'edit-externally' => 'Dëse Fichier mat engem externe Programm änneren',
-'edit-externally-help' => "(Fir gewuer ze gi wéi dat genee geet liest d'[//www.mediawiki.org/wiki/Manual:External_editors Installatiounsinstruktiounen].)",
+'edit-externally-help' => "(Fir gewuer ze gi wéi dat genee geet liest d'[https://www.mediawiki.org/wiki/Manual:External_editors Installatiounsinstruktiounen].)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'all',
'confirm-unwatch-button' => 'OK',
'confirm-unwatch-top' => 'Dës Säit vun Ärer Iwwerwaachungslëscht erofhuelen?',
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
# Multipage image navigation
'imgmultipageprev' => '← Vireg Säit',
'imgmultipagenext' => 'nächst Säit →',
'version-hook-subscribedby' => 'Opruff vum',
'version-version' => '(Versioun $1)',
'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dës Wiki funktionéiert mat '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Dës Wiki funktionéiert mat '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
'version-poweredby-others' => 'anerer',
'version-poweredby-translators' => 'translatewiki.net Iwwersetzer',
'version-credits-summary' => "Mir soen dëse Persoune 'Merci' fir hir Mataarbecht u [[Special:Version|MediaWiki]].",
# Special:SpecialPages
'specialpages' => 'Spezialsäiten',
-'specialpages-note' => '----
-* Normal Spezialsäiten.
-* <span class="mw-specialpagerestricted">Spezialsäite fir Benotzer mat méi Rechter.</span>
-* <span class="mw-specialpagecached">Spezialsäiten aus dem Tëschespäicher (ka vereelst sinn).</span>',
+'specialpages-note-top' => 'Erklärung',
+'specialpages-note' => '* Normal Spezialsäiten.
+* <span class="mw-specialpagerestricted">Spezialsäite fir Benotzer mat méi Rechter.</span>',
'specialpages-group-maintenance' => 'Maintenance-Rapporten',
'specialpages-group-other' => 'Aner Spezialsäiten',
'specialpages-group-login' => 'Aloggen / Benotzerkont uleeën',
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|Byte|Byten}}',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|Byte|Byten}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Schablounen expandéieren',
+'expand_templates_intro' => 'Op dëser Spezialsäit kann Text agesat ginn an all Schablounen doran gi rekursiv expandéiert.
+Och Parserfonctioune wéi<code><nowiki>{{</nowiki>#language:…}}</code> a Variabele wéi
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>, ginn ausgewäert.
+Faktesch alles wat tëscht duebelen Accolade steet gëtt ausgewäert.',
+'expand_templates_title' => 'Titel vun der Säit, dëst kann nëtzlech si wa(nn) {{FULLPAGENAME}} benotzt gëtt:',
+'expand_templates_input' => 'Gitt ären Text hei an:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'Resultat als XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Bemierkunge läschen',
+'expand_templates_remove_nowiki' => '<nowiki>-Taggen am Resultat suppriméieren',
+'expand_templates_generate_xml' => "Weis d'Struktur vum XML",
+'expand_templates_preview' => 'Kucken ouni ofzespäicheren',
+
);
'ok' => 'ОК',
'retrievedfrom' => 'Чешне "$1" я',
'youhavenewmessages' => 'Квез $1 ($2) атанва.',
-'newmessageslink' => 'цӀийи чарар',
-'newmessagesdifflink' => 'Эхиримжи масакӀавилер',
'youhavenewmessagesmulti' => '"$1"-да квез цӀийи чарар атанва.',
'editsection' => 'Дуьзар хъувун',
'editold' => 'Дуьзар хъувун',
'preferences' => 'Туькlуьрун',
'mypreferences' => 'Зи низамарунар',
'prefs-edits' => 'Дьузар хъувунрин кьадар',
-'prefsnologin' => 'Куьне гьахьнавач',
'changepassword' => 'Парол дегишарун',
'prefs-skin' => 'Къайдадиз ттунин тема',
'skin-preview' => 'Сифтедин килигун',
# External editor support
'edit-externally' => 'И файл патан программа куьмекдалди дуьзар хъувун',
-'edit-externally-help' => '(Алава малумат патал [//www.mediawiki.org/wiki/Manual:External_editors эцигунин регьбервилиз] килига)',
+'edit-externally-help' => '(Алава малумат патал [https://www.mediawiki.org/wiki/Manual:External_editors эцигунин регьбервилиз] килига)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'вири',
'ok' => 'Oce',
'retrievedfrom' => 'Retraeda de "$1"',
'youhavenewmessages' => 'Tu ave $1 ($2).',
-'newmessageslink' => 'mesajes nova',
-'newmessagesdifflink' => 'cambia presedente',
'youhavenewmessagesmulti' => 'Tu ave mesajes nova en $1',
'editsection' => 'cambia',
'editold' => 'edita',
# External editor support
'edit-externally' => 'Edita esta fix con un programa esterna',
-'edit-externally-help' => '(Vide la [//www.mediawiki.org/wiki/Manual:External_editors instruis per comensa] per plu instruis)',
+'edit-externally-help' => '(Vide la [https://www.mediawiki.org/wiki/Manual:External_editors instruis per comensa] per plu instruis)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tota',
# Special:SpecialPages
'specialpages' => 'Pajes spesial',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Oce',
+
);
'ok' => 'Kale',
'retrievedfrom' => 'Bino bigyidwa ku "$1"',
'youhavenewmessages' => 'Ofunye $1 ($2).',
-'newmessageslink' => 'obubaka',
-'newmessagesdifflink' => "obusing'obupya",
'youhavenewmessagesmulti' => 'Ku $1 bakuweerezza obubaka',
'editsection' => 'kyusa',
'editold' => 'kyusa',
'allmessagescurrent' => 'Ebiriwo kakano',
'allmessagestext' => "Luno lwe lukalala olw'obubaka obwa sisitemu obw'omu kkuŋŋaanizo erya MediaWiki.
-Ob'oyagala okuyamba ku kuvvuunula eby'omu MediaWiki yonna, kebera ku [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ne [//translatewiki.net translatewiki.net].",
+Ob'oyagala okuyamba ku kuvvuunula eby'omu MediaWiki yonna, kebera ku [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] ne [//translatewiki.net translatewiki.net].",
'allmessages-filter-legend' => 'Ensunsula',
'allmessages-filter' => 'Londamu:',
'allmessages-filter-unmodified' => 'Ebitannakyusibwamu',
# External editor support
'edit-externally' => 'Fayiro eno gikolereko mu pulogulamu endala',
-'edit-externally-help' => '[//www.mediawiki.org/wiki/Manual:External_editors Nyiga wano] okuyiga ebisingawo ku kukozesa pulogulamu endala okukola enkyukakyuka.',
+'edit-externally-help' => '[https://www.mediawiki.org/wiki/Manual:External_editors Nyiga wano] okuyiga ebisingawo ku kukozesa pulogulamu endala okukola enkyukakyuka.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Zonna',
'ok' => 'ok',
'retrievedfrom' => 'Aafkómstig van "$1"',
'youhavenewmessages' => 'Doe höbs $1 ($2).',
-'newmessageslink' => 'nuuj berichte',
-'newmessagesdifflink' => 'Lèste verangering',
'youhavenewmessagesmulti' => 'Doe höbs nuuj berichte op $1',
'editsection' => 'bewèrk',
'editold' => 'bewirke',
'preferences' => 'Veurkäöre',
'mypreferences' => 'Mien veurkäöre',
'prefs-edits' => 'Aantal bewèrkinge:',
-'prefsnologin' => 'Neet aangemèld',
-'prefsnologintext' => 'De mós zeen <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aagemeld]</span> óm dien veurkäöre te kónne insjtèlle.',
'changepassword' => 'Wachwaord verangere',
'prefs-skin' => '{{SITENAME}}-uterlik',
'skin-preview' => 'Veurbesjouwing',
'recentchanges-label-minor' => "Dit is 'n klein bewirking",
'recentchanges-label-bot' => "Dees bewirking is oetgeveurd door 'ne bot",
'recentchanges-label-unpatrolled' => 'Dees bewirking is nog neet gekónterleerd',
+'recentchanges-legend-newpage' => '$1 - Nuuj pagina',
'rcnote' => "Hiejónger {{PLURAL:$1|steit de lètste bewirking|staon de lètste '''$1''' bewirkinge}} van de aafgeloupe {{PLURAL:$2|daag|'''$2''' daag}}, op $4, um $5.",
'rcnotefrom' => "Verangeringe sins <b>$2</b> (mit 'n maximum van <b>$1</b> verangeringe).",
'rclistfrom' => 'Tuin de verangeringe vanaaf $1',
'allmessagesdefault' => 'Obligaten teks',
'allmessagescurrent' => 'Hujige teks',
'allmessagestext' => "Dit is 'n lies van alle systeemberichte besjikbaar in de MediaWiki-naamruumde.
-Bezeuk [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] es doe wils biedrage aon lokalisatie.",
+Bezeuk [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] es doe wils biedrage aon lokalisatie.",
'allmessagesnotsupportedDB' => "Deze pagina kan neet gebroek waere omdet '''\$wgUseDatabaseMessages''' oet steit.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter óp aangepas:',
# External editor support
'edit-externally' => "Bewirk dit bestand mit 'n extern toepassing",
-'edit-externally-help' => '(zuug de [//www.mediawiki.org/wiki/Manual:External_editors setupinsjtructies] veur mie informatie)',
+'edit-externally-help' => '(zuug de [https://www.mediawiki.org/wiki/Manual:External_editors setupinsjtructies] veur mie informatie)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'al',
'version-hook-subscribedby' => 'Geabonneerd door',
'version-version' => '(Versie $1)',
'version-license' => 'Licentie',
-'version-poweredby-credits' => "Deze wiki weurt aangedreve door '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Deze wiki weurt aangedreve door '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'anger',
'version-license-info' => "MediaWiki is vrieje sofware; de kins MediaWiki verspreien en/of aanpassen onger de veurwaerde van de GNU General Public License wie gepubliceerd door de Free Software Foundation; ofwaal versie 2 van de Licentie, of - nao diene wönsj - innig later versie.
# Special:SpecialPages
'specialpages' => "Speciaal pagina's",
-'specialpages-note' => '----
-* Normaal speciaal pagina\'s
+'specialpages-note' => '* Normaal speciaal pagina\'s
* <strong class="mw-specialpagerestricted">Beperk toegankelike speciaal pagina\'s</strong>
* <span class="mw-specialpagecached">Speciaal pagina\'s mit allein gegaeves oete cache (meugelik verajerd)</span>',
'specialpages-group-maintenance' => 'Óngerhajingsrapporter',
'duration-centuries' => '$1 {{PLURAL:$1|ieëf|ieëf}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Sjablone plekke',
+'expand_templates_intro' => "Dees speciaal pazjena laes de ingegaeve teks in en plektj (mitte functie subst) recursief alle sjablone in de teks. 't Plek ouch alle parserfuncties wie <nowiki>{{</nowiki>#language:...}} en variabele wie <nowiki>{{</nowiki>CURRENTDAY}} - vriejwaal al tösse dóbbel accolades.
+Hiej veur waere de relevante functies van de MediaWiki-parser gebroek.",
+'expand_templates_title' => 'Contekstitel, veur {{FULLPAGENAME}}, etc:',
+'expand_templates_input' => 'Inlaajteks:',
+'expand_templates_output' => 'Rezultaot',
+'expand_templates_xml_output' => 'XML-oetveur',
+'expand_templates_ok' => 'ok',
+'expand_templates_remove_comments' => 'Wis opmerkinge',
+'expand_templates_remove_nowiki' => "Óngerdrök <nowiki>-tags in 't resultaat",
+'expand_templates_generate_xml' => 'XML-parserboum bekieke',
+'expand_templates_preview' => 'Veurvertoeaning',
+
);
'ok' => "D'accòrdio",
'retrievedfrom' => 'Estræto da "$1"',
'youhavenewmessages' => "Ti gh'æ $1 ($2).",
-'newmessageslink' => 'Nêuvi messaggi',
-'newmessagesdifflink' => 'urtima modiffica',
'youhavenewmessagesfromusers' => "Ti g'hæ $1 da {{PLURAL:$3|un atro utente|$3 utenti}} ($2).",
'youhavenewmessagesmanyusers' => "Ti g'hæ $1 da tanti utenti ($2).",
'newmessageslinkplural' => '{{PLURAL:$1|un noeuvo messaggio|noeuvi messaggi}}',
# External editor support
'edit-externally' => 'Càngia sto file co-in programma esterno',
-'edit-externally-help' => 'Pe avéi ciù informaçioìn amia e [//www.mediawiki.org/wiki/Manual:External_editors istruçioìn] (in ingléize)',
+'edit-externally-help' => 'Pe avéi ciù informaçioìn amia e [https://www.mediawiki.org/wiki/Manual:External_editors istruçioìn] (in ingléize)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Tùtti',
'retrievedfrom' => 'Ulzõ vȯtštõd "$1"',
'youhavenewmessages' => 'Täddõn um $1 ($2)',
-'newmessageslink' => 'ūži tīeūţidi',
-'newmessagesdifflink' => 'perri mõitõks',
'editsection' => 'redigīer',
'editold' => 'redigīerõgid',
'viewsourceold' => 'vaņ ovāt-tekstõ',
# External editor support
'edit-externally' => 'Protseššõgid failõ ulīz programmatūraks',
-'edit-externally-help' => '(Vaņ uļļizt redaktōrd adresõs [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] kȭlbatõmiz opātõkst)',
+'edit-externally-help' => '(Vaņ uļļizt redaktōrd adresõs [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] kȭlbatõmiz opātõkst)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tikkiž',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Utegnüü de "$1"',
'youhavenewmessages' => "A gh'hii di $1 ($2).",
-'newmessageslink' => 'messagg növ',
-'newmessagesdifflink' => 'diferenza cun la versión de prima',
'youhavenewmessagesmulti' => "Te gh'hee di messagg növ ins'el $1",
'editsection' => 'mudifega',
'editold' => 'mudifega',
'recentchanges-label-minor' => "Quela chì l'è una mudifega piscinina.",
'recentchanges-label-bot' => "Quela mudifega chì l'ha fada un bot",
'recentchanges-label-unpatrolled' => "Quela mudifega chì a l'è stada mimga anmò verificada.",
+'recentchanges-legend-newpage' => '$1 - pagina növa',
'rcnote' => "Chì de sota {{PLURAL:$1|gh'è '''1''' mudifega|a hinn i ültim '''$1''' mudifegh}} in di ültim {{PLURAL:$2|dì|'''$2''' dì}}, a partì dai $5 del $4.",
'rcnotefrom' => "Chì de sota gh'è la lista di mudifegh de <b>$2</b> (fina a <b>$1</b>).",
'rclistfrom' => 'Fà vidè i cambiament növ a partì de $1',
# External editor support
'edit-externally' => 'Redatá chest archivi cunt un prugramari da fö',
-'edit-externally-help' => 'Varda [//www.mediawiki.org/wiki/Manual:External_editors i istrüzión] per avègh püssee infurmazión (in ingles).',
+'edit-externally-help' => 'Varda [https://www.mediawiki.org/wiki/Manual:External_editors i istrüzión] per avègh püssee infurmazión (in ingles).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tücc',
'ok' => 'ຕົກລົງ',
'retrievedfrom' => 'ຖອນມາຈາກ "$1"',
'youhavenewmessages' => 'ທ່ານ ມີ $1 ($2).',
-'newmessageslink' => 'ຂໍ້ຄວາມໃໝ່',
-'newmessagesdifflink' => 'ການປ່ຽນແປງຫຼ້າສຸດ',
'youhavenewmessagesmulti' => 'ທ່ານມີຂໍ້ຄວາມໃໝ່ ຢູ່ $1',
'editsection' => 'ດັດແກ້',
'editold' => 'ດັດແກ້',
# External editor support
'edit-externally' => 'ດັດແກ້ໄຟລ໌ນີ້ໂດຍໂປແກຣມພາຍນອກ',
-'edit-externally-help' => 'ເບິ່ງ ຂໍ້ມູນເພີ່ມຕື່ມ ຢູ່ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions]',
+'edit-externally-help' => 'ເບິ່ງ ຂໍ້ມູນເພີ່ມຕື່ມ ຢູ່ [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions]',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ທັງໝົດ',
# Special:SpecialPages
'specialpages' => 'ໜ້າພິເສດ',
+# Special:ExpandTemplates
+'expandtemplates' => 'ຂະຫຍາຍແມ່ແບບ',
+
);
'ok' => 'lumelisize',
'retrievedfrom' => 'Bulukezi ye ng\'i di "$1"',
'youhavenewmessages' => 'A sa pozefisize $1 ($2).',
-'newmessageslink' => 'nca mulumiwani',
-'newmessagesdifflink' => 'nca petuho te-i',
'youhavenewmessagesmulti' => 'Nca $1 mulumiwani',
'editsection' => "hloli ye ng'i",
'editold' => "hloli ye ng'i",
'preferences' => 'Petohoni di sebelu',
'mypreferences' => 'Zwa petohoni di sebelu',
'prefs-edits' => "Hloli ye ng'inabi:",
-'prefsnologin' => 'Ni menuhile',
'prefs-skin' => 'PendiBe',
'skin-preview' => 'PendiBe',
'datedefault' => 'Ni di petohoni di sebelu',
'allmessagesdefault' => 'Selt orge',
'allmessagescurrent' => 'Selt nca',
'allmessagestext' => 'Bye mukoloko sa mukoloko di mulumiwani di MediaWiki poo.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
# Thumbnails
'thumbnail-more' => 'Pusize',
# External editor support
'edit-externally' => 'Kenki imegi sebilize pagini lakusi',
-'edit-externally-help' => 'Boniselelize [//www.mediawiki.org/wiki/Manual:External_editors instruksi setup] kwa informasi.',
+'edit-externally-help' => 'Boniselelize [https://www.mediawiki.org/wiki/Manual:External_editors instruksi setup] kwa informasi.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'xeti',
--- /dev/null
+<?php
+/** لوری (لوری)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Mogoeilor
+ */
+
+$rtl = true;
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'هوم پیوند زیرخط دار:',
+'tog-justify' => 'فاصله نيائن سی پاراگرافيا',
+'tog-hideminor' => 'قام كردن ويرايشتيا كؤچك مئن آلشتيا تازه',
+'tog-hidepatrolled' => 'قام كردن ويرايشتيا تیه دیار کرده مئن آلشتيا تازه',
+'tog-newpageshidepatrolled' => 'بلگیا تیه دیار کرده نه مئن نوم گه بلگیا تازه قام کو',
+'tog-extendwatchlist' => 'سیل برگه نه سی نشو دئن تمام آلشتیا واکو نه فقط سی بیشتر تازه باوا.',
+'tog-usenewrc' => 'دسه بنی آلشتیا وا بلگه د آلشتیا تازه و سیل برگ',
+'tog-numberheadings' => 'سربلگه خود شماره گر',
+'tog-showtoolbar' => 'نوار اوزار ويرايشت نشون بيه',
+'tog-editondblclick' => 'بلگيا نه وا دوبار پورنين ويرايشت بكيد',
+'tog-editsection' => 'ممكن بيئن ويرايشت بشخيا وا [ويرايشت]',
+'tog-editsectiononrightclick' => 'بهر ویرایشت نه وا راس کلیک کردن د بهر عنوانیا فعال کو',
+'tog-showtoc' => 'چیا مئن جدول نشو بیه',
+'tog-rememberpassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
+'tog-watchcreations' => 'بلگیایی که مه راس کمه و فایلیایی که مه سوار کمه اضاف کو د سیل برگه مه',
+'tog-watchdefault' => 'بلگیا و فایلایی که مه ویرایشت کمه اضاف کو د سیل برگم',
+'tog-watchmoves' => 'بلگیاو فایلیایی که مه جاوه جا کمه د سیل برگم اضاف کو',
+'tog-watchdeletion' => 'بلگیا و فایلایی که مه پاک کمه اضاف کو د سیل برگم',
+'tog-minordefault' => 'همه ویرایشتیا کؤچک نه وا پیش فرض بیئن نشو دار کو.',
+'tog-previewontop' => 'پیش سیل نه دما جعوه ویرایشت نشو بیئه',
+'tog-previewonfirst' => 'پیش سیل نه د اولین ویرایشت نشو بیئه',
+'tog-enotifusertalkpages' => 'وختی که بلگه گپسن کارور آلشت پیدا کرد منه وا ایمیل خور کو',
+'tog-shownumberswatching' => 'انازه کاروریایی که د حالت دیئنن نشو بیه',
+'tog-oldsig' => 'امضايی هيئش:',
+'tog-uselivepreview' => 'د پیش سیل زنه استفاده کو',
+'tog-watchlisthideown' => 'قام كو ويرايشت منه د',
+'tog-diffonly' => 'بلگیایی که شومل فرخیا هارن نشون نیه',
+'tog-showhiddencats' => 'دسه يا قام بيئنه نشون بيه',
+
+'underline-always' => 'هميشه',
+'underline-never' => 'هيژوخت',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'راساگه فونت شلک نه ویرایشت کو',
+'editfont-default' => 'مرورگر پیش بینی بیه',
+'editfont-sansserif' => 'سان سریف فونت',
+'editfont-serif' => 'فونت سريف',
+
+# Dates
+'sunday' => 'يه شمه',
+'monday' => 'دوشمه',
+'tuesday' => 'سه شمه',
+'wednesday' => 'چارشمه',
+'thursday' => 'پن شمه',
+'friday' => 'جمه',
+'saturday' => 'شمه',
+'sun' => 'يه شمه',
+'mon' => 'دوشمه',
+'tue' => 'سه شمه',
+'wed' => 'چارشمه',
+'thu' => 'پن شمه',
+'fri' => 'جمه',
+'sat' => 'شمه',
+'january' => 'جانويه',
+'february' => 'فبريه',
+'march' => 'مارش',
+'april' => 'آبريل',
+'may_long' => 'ما',
+'june' => 'جوئن',
+'july' => 'جولای',
+'august' => 'اگوست',
+'september' => 'سپتامر',
+'october' => 'اكتور',
+'november' => 'نوامر',
+'december' => 'دسامر',
+'january-gen' => 'جانويه',
+'february-gen' => 'فوريه',
+'march-gen' => 'مارش',
+'april-gen' => 'آوريل',
+'may-gen' => 'ما',
+'june-gen' => 'جوئن',
+'july-gen' => 'جولای',
+'august-gen' => 'اگوست',
+'september-gen' => 'سپتامر',
+'october-gen' => 'اكتور',
+'november-gen' => 'نوامر',
+'december-gen' => 'دسامر',
+'jan' => 'ژانويه',
+'feb' => 'فبريه',
+'mar' => 'مارش',
+'apr' => 'آبريل',
+'may' => 'ما',
+'jun' => 'جوئن',
+'jul' => 'جولا',
+'aug' => 'اوگوست',
+'sep' => 'سپتامر',
+'oct' => 'اكتور',
+'nov' => 'نوامر',
+'dec' => 'دسامر',
+'january-date' => 'جانويه $1',
+'february-date' => 'فوريه $1',
+'march-date' => 'مارس $1',
+'april-date' => 'آوريل $1',
+'may-date' => 'ما $1',
+'june-date' => 'جوئن $1',
+'july-date' => 'جولاي $1',
+'august-date' => 'اوت $1',
+'september-date' => 'سپتامر $1',
+'october-date' => 'اكتور $1',
+'november-date' => 'نوامر $1',
+'december-date' => 'دسامر $1',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|دسه|دسه يا}}',
+'category_header' => 'بلگيا مئن دسه "$1"',
+'subcategories' => 'زيردسه يا',
+'category-media-header' => 'رسانه د دسه "$1"',
+'category-empty' => 'ای دسه واقعن شومل هیژ بلگه ای یا رسانه ای نی',
+'hidden-categories' => '{{PLURAL:$1|دسته قام بيه|دسته يا قام بيه}}',
+'hidden-category-category' => 'دسه یا قام بیه',
+'category-subcat-count' => '{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای زیردسه, خارج د $2 کل.}}',
+'category-article-count' => '{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, خارج د $2 کل.}}',
+'listingcontinuesabbrev' => 'دماله',
+'index-category' => 'بلگيا سيائه دار',
+'noindex-category' => 'بلگيا بی سيائه',
+
+'about' => 'دباره',
+'article' => 'محتوا بلگه',
+'newwindow' => '(نيمدری تازه وا کو)',
+'cancel' => 'رد كردن',
+'moredotdotdot' => 'بيشتر',
+'morenotlisted' => 'ای ليست كامل نبيه',
+'mypage' => 'بلگه',
+'mytalk' => 'چك چنه',
+'anontalk' => 'دباره نشونی ای آی پی قصه بكيد',
+'navigation' => 'ناوگشتن',
+'and' => ' و',
+
+# Cologne Blue skin
+'qbfind' => 'فهمسن،جسن',
+'qbbrowse' => 'قرض گرتن',
+'qbedit' => 'ويرايشت',
+'qbpageoptions' => 'ای بلگه',
+'qbmyoptions' => 'بلگيا مه',
+'qbspecialpages' => 'بلگيا ويجه',
+'faq' => 'اف ای كيو',
+'faqpage' => 'پروجه:اف اي كيو',
+
+# Vector skin
+'vector-action-addsection' => 'موضوع اضاف بكيد',
+'vector-action-delete' => 'حذف بكيد',
+'vector-action-move' => 'جاوه جا بوئيت',
+'vector-action-protect' => 'حمايت بكيد',
+'vector-action-undelete' => 'حذف نبيئني',
+'vector-action-unprotect' => 'حمايت آلشت بكيد',
+'vector-view-create' => 'راس كردن',
+'vector-view-edit' => 'ويرايشت',
+'vector-view-history' => 'ديئن ويرگار',
+'vector-view-view' => 'حنن',
+'vector-view-viewsource' => 'سرچشمه نه بوينيت',
+'actions' => 'جمشت',
+'namespaces' => 'نوم جا',
+'variants' => 'آلشت ونی يا',
+
+'navigation-heading' => 'منو ناوگشتن',
+'errorpagetitle' => 'غلط',
+'returnto' => 'ورگشت وه $1.',
+'tagline' => 'د {{SITENAME}}',
+'help' => 'هومياری',
+'search' => 'پی چوری',
+'searchbutton' => 'پی جوری',
+'go' => 'رو',
+'searcharticle' => 'رو',
+'history' => 'ويرگار بلگه',
+'history_short' => 'ويرگار',
+'updatedmarker' => 'د آخرین دیئن مه روزآمد کو',
+'printableversion' => 'نسقه چاپ بيئنی',
+'permalink' => 'چسب ون هميشئی',
+'print' => 'چاپ كردن',
+'view' => 'ديئن',
+'edit' => 'ويرايشت',
+'create' => 'راس كردن',
+'editthispage' => 'ويرايشت ای بلگه',
+'create-this-page' => 'راس كردن ای بلگه',
+'delete' => 'حذف كردن',
+'deletethispage' => 'ای بلگه نه حذف بكيد',
+'undeletethispage' => 'ای بلگه نه حذف نكيد',
+'protect' => 'حمايت بكيد',
+'protect_change' => 'آلشت بكيد',
+'protectthispage' => 'ای بلگه نه حفاظت بكيد',
+'unprotect' => 'حمايت آلشت بكيد',
+'unprotectthispage' => 'حفاظت دی بلگه نه آلشت بكيد',
+'newpage' => 'بلگه نو',
+'talkpage' => 'دباره ای بلگه قصه بكيد',
+'talkpagelinktext' => 'وت و واچ',
+'specialpage' => 'بلگه ويجه',
+'personaltools' => 'اوزاريا شصقی',
+'postcomment' => 'بشه تازه',
+'articlepage' => 'ديئن محتوا بلگه',
+'talk' => 'گپ',
+'views' => 'ديئنيا',
+'toolbox' => 'اوزاريا',
+'userpage' => 'ديئن بلگه كارور',
+'projectpage' => 'ديئن بلگه پروجه',
+'imagepage' => 'ديئن بلگه فايل',
+'mediawikipage' => 'ديئن بلگه پيغوم',
+'templatepage' => 'ديئن بلگه قالو',
+'viewhelppage' => 'ديئن بلگه هومياری',
+'categorypage' => 'ديئن بلگه دسه بنی',
+'viewtalkpage' => 'ديئن چك چنه يا',
+'otherlanguages' => 'د زونيا هنی',
+'redirectedfrom' => '(ورگشتن د$1)',
+'lastmodifiedat' => 'ای بلگه تازه ايا وضع آلشت بيه د $1, د $2.',
+'viewcount' => 'ای بلگه قاول دسترسی بيه {{PLURAL:$1|once|$1 times}}.',
+'protectedpage' => 'بلگه حفاظت بيه',
+'jumpto' => 'پئرستن د',
+'jumptonavigation' => 'ناوگشتن',
+'jumptosearch' => 'پی جوری',
+'pool-errorunknown' => 'خطا ناشناس',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
+'aboutsite' => 'دباره {{SITENAME}}',
+'aboutpage' => 'پروجه:دباره',
+'copyrightpage' => '{{ns:پروجه}}:کپی رایت',
+'currentevents' => 'پيشومدل تازه باو',
+'currentevents-url' => 'پروجه:پيشومدل تازه باو',
+'disclaimers' => 'منكرون',
+'disclaimerpage' => 'پروجه:منكر بيئن كاروريا',
+'edithelp' => 'هومياری سی ويرايشت',
+'helppage' => 'هومياری:محتوا',
+'mainpage' => 'سرآسونه',
+'mainpage-description' => 'سرآسونه',
+'policy-url' => 'پروجه:خط و مش',
+'portal' => 'تلگه جمی',
+'portal-url' => 'پروجه:تلگه جمی',
+'privacy' => 'رهبرد رازداری',
+'privacypage' => 'پروجه: خط مشی راز واداشتن',
+
+'badaccess' => 'خطا :اجازه بئیر',
+'badaccess-group0' => 'شما اجازه انجوم کاری که حاستیت نارین',
+
+'versionrequired' => 'یه نسقه د نیازمنیا ویکی رسانه
+$1',
+
+'ok' => 'خوئه',
+'retrievedfrom' => 'بازيافته د"$1"',
+'youhavenewmessages' => 'شما داريت $1($2)',
+'youhavenewmessagesmanyusers' => 'شما $1 د خيلی كاروريا داريت ($2).',
+'newmessagesdifflinkplural' => 'آخر {{PLURAL:$1|change|changes}}',
+'youhavenewmessagesmulti' => 'شما یه گل پیغوم تازه د $1 داریتو',
+'editsection' => 'ويرايشت',
+'editold' => 'ويرايشت',
+'viewsourceold' => 'سرچشمه نه بوينيت',
+'editlink' => 'ويرايشت',
+'viewsourcelink' => 'سرچشمه نه بوينيت',
+'editsectionhint' => 'ويرايشت يه بشق:$1',
+'toc' => 'محتوايا',
+'showtoc' => 'نشو دائن',
+'hidetoc' => 'قام كردن',
+'collapsible-collapse' => 'جم كردن',
+'collapsible-expand' => 'وا كردن',
+'thisisdeleted' => 'دیئن یا ورگنين $1?',
+'viewdeleted' => 'دیئن$1?',
+'feedlinks' => 'غذا دهنه:',
+'site-rss-feed' => 'خورخو RSS سی $1',
+'site-atom-feed' => 'خور حون Atom سی $1',
+'page-rss-feed' => 'خورخو RSS سی «$1»',
+'page-atom-feed' => 'خور حون Atom سی $1',
+'red-link-title' => '$1(بلگه وجود ناره)',
+'sort-descending' => 'كم بيئن منظم',
+'sort-ascending' => 'زياد بيئن منظم',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'بلگه',
+'nstab-user' => 'بلگه كارور',
+'nstab-media' => 'بلگه رسانه',
+'nstab-special' => 'بلگيا ويجه',
+'nstab-project' => 'بلگه پروجه',
+'nstab-image' => 'فاين',
+'nstab-mediawiki' => 'پيغوم',
+'nstab-template' => 'قالو',
+'nstab-help' => 'بلگه هومياری',
+'nstab-category' => 'دسه',
+
+# Main script and global functions
+'nosuchaction' => 'چنو كاری وجود ناره',
+'nosuchspecialpage' => 'چنو بلگه خاصی وجود ناره',
+
+# General errors
+'error' => 'خطا',
+'databaseerror' => 'خطا د جاگه دونسمنيا',
+'databaseerror-textcl' => 'خطاجست گرتن پايگاه دونسمنيا پيشومد كرده',
+'databaseerror-query' => 'نوم گشتن: $1',
+'databaseerror-function' => 'تابع:$1',
+'databaseerror-error' => 'خطا: $1',
+'laggedslavemode' => 'زنهار:بلگه شايت شومل روزامديا تازه باو نبوئه',
+'readonly' => 'جاگه دونسمنيا بسه بيه',
+'missing-article' => 'پاگا داده نتونه بلگه ای با پیدا بکه بجوره.که نومش $1 و $2 هئ.
+معمولند یه سی یه که فرخ ویرگار رئته دش بیه پاک بیه.',
+'missingarticle-rev' => '(دوواره ديئن#: $1)',
+'missingarticle-diff' => '(فرخ: $1، $2)',
+'internalerror' => 'خطا داخلی',
+'internalerror_info' => 'خطا داخلی:$1',
+'filecopyerror' => 'نبوئه فایل $1 د $2 کپی بوئه',
+'filerenameerror' => 'نبوئه فایل $1 د $2 نوم آلشت بوئه',
+'filedeleteerror' => 'نبوئه فایل $1 پاک بوئه',
+'filenotfound' => 'نتونیت فایل $1 پیدا بکید',
+'formerror' => 'خطا:نبوئه فرم وه مو بئيت',
+'cannotdelete-title' => 'نبوئه بلگه $1 حذف بو',
+'badtitle' => 'موضو گن',
+'badtitletext' => 'عنوان بلگه حاسته بیه معتور نی،یا یه گل مئن زونی یا مئن ویکی عنوان غلطه.
+یه شایت شومل یکی با یا بیشتر کاراکتریا نبوئه سی ای موضوعیا استفاده بوئن',
+'viewsource' => 'سرچشمه نه بوينيت',
+'viewsource-title' => 'سرچشمه $1 بوينيت',
+'mycustomcssprotected' => 'شما حق ناریت ای بلگه سی اس اس نه ویرایشت بکید',
+'mycustomjsprotected' => 'شما حق ناریت ای بلگه جاوا اسکریپت نه ویرایشت بکید',
+'myprivateinfoprotected' => 'شما حق ناریت دونسمنیا خصوصی نه ویرایشت بکید',
+'mypreferencesprotected' => 'شما حق ناریت ویجگی یا هنی تونه ویرایشت بکید',
+'ns-specialprotected' => 'بلگیا ویجه نتونن ویرایشت بوئن',
+'exception-nologin' => 'نبوئه وارد بوئيد',
+
+# Virus scanner
+'virus-scanfailed' => 'زل گشتن شکست حرد',
+'virus-unknownscanner' => 'ويروس كش ناآشگار',
+
+# Login and logout pages
+'welcomeuser' => 'خوش اومايت،$1!',
+'yourname' => 'نوم كاروری:',
+'userlogin-yourname' => 'نوم كاروری',
+'userlogin-yourname-ph' => 'نوم كاروری تو نه وارد بكيد',
+'createacct-another-username-ph' => 'نوم كاروری ته وارد كو',
+'yourpassword' => 'پاسورد:',
+'userlogin-yourpassword' => 'رمز',
+'userlogin-yourpassword-ph' => 'رمز بزه',
+'createacct-yourpassword-ph' => 'رمزه بزه',
+'yourpasswordagain' => 'دوواره رمز بزه',
+'createacct-yourpasswordagain' => 'رمز محكم كو',
+'createacct-yourpasswordagain-ph' => 'دوواره رمز بزه',
+'remembermypassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
+'userlogin-remembermypassword' => 'منه مئن سيستم وادار',
+'userlogin-signwithsecure' => 'د وصل بيئن امن استفاده كو',
+'password-change-forbidden' => 'شما نتونید پاسوردیانه د ای ویکی آلشت بکید',
+'login' => 'اومائن',
+'nav-login-createaccount' => ' اومائن د سيستم/راس كردن حساو',
+'loginprompt' => 'شما وا کوکیانه سی اومائن د {{SITENAME}} کوکیانه فعال بکید.',
+'userlogin' => ' اومائن د سيستم/راس كردن حساو',
+'userloginnocreate' => 'اومائن',
+'logout' => 'رئتن',
+'userlogout' => 'د سيستم دراومائن',
+'notloggedin' => 'نبوئه وارد بوئيد',
+'userlogin-noaccount' => 'یه گل حساو ناریت؟',
+'userlogin-joinproject' => 'وصل بوييت {{SITENAME}}',
+'nologin' => 'حساو كاروری ناريت؟$1',
+'nologinlink' => 'يه گل حساو راست بكيد',
+'createaccount' => 'حساو راست بكيد',
+'gotaccount' => 'ایسنی حساو کاروری داریتو؟$1',
+'gotaccountlink' => 'اومائن',
+'userlogin-resetlink' => 'جزییات وامین اومائن تونه د ویر بردیته',
+'userlogin-resetpassword-link' => 'هنی رمز وارد بكيد',
+'helplogin-url' => 'هومياری:د حالت اومائن د سيستم',
+'userlogin-createanother' => 'يه گل حساوهنی راست بكيد',
+'createacct-join' => 'دونسمنيا دباره خوتونه د هار وارد بكيد',
+'createacct-another-join' => 'دونسمنیا یه گل حساو د هار وارد بکید',
+'createacct-emailrequired' => 'نشونی ايميل',
+'createacct-emailoptional' => 'نشونی ايميل',
+'createacct-email-ph' => 'نوم نشون ايميلتونه وارد بكيت',
+'createacct-another-email-ph' => 'يه گل ايميل وارد بكيت',
+'createacct-realname' => 'نوم راستكی(مژبوری نيئ)',
+'createaccountreason' => 'دليل',
+'createacct-reason' => 'دليل',
+'createacct-reason-ph' => 'سی چی شما داريتو يه گل حساو هنی راس می كيد',
+'createacct-captcha' => 'وارسی امنيت دار بين',
+'createacct-imgcaptcha-ph' => 'متنی نه كه د وارو ميئنيت وارد بكيد',
+'createacct-submit' => 'حساو خوتونه راس بكيد',
+'createacct-another-submit' => 'يه گل حساوهنی راست بكيد',
+'createacct-benefit-heading' => '{{نوم مالگه}} وه دس خلکی چی شما راس بیه.',
+'createacct-benefit-body1' => '{{جمی:$1|ویرایشت|ویرایشتا}}',
+'badretype' => 'پاسوردی که شما دئیته مطاوقت ناره',
+'userexists' => 'کارور نوم که وارد بیه د ایسه استفاده بوئه.
+لطف بکید یه گل نوم هنی انتخاو بکید',
+'loginerror' => 'خطا اومائن د سيستم',
+'createacct-error' => 'خطا راس كردن حساو',
+'createaccounterror' => 'نبوئه حساو راس بكيد:$1',
+'loginsuccesstitle' => 'اومائن د سيستم موفق بی',
+'nosuchusershort' => 'چنو کاروری وا ای نوم $1 نی ئیش.
+نیسنن تونه دوواره نئری بکیتو',
+'nouserspecified' => 'شما باید یه نوم کارور اختصاص بئیتو',
+'login-userblocked' => 'کارور قلف بیه.وامین اومائن اجازه نی ئن',
+'wrongpassword' => 'پاسورد غلط وارد بیه.
+هنی تلاش بکید',
+'wrongpasswordempty' => 'پاسوردی که دئیت حالیه.د نؤ تلاش بکیت',
+'passwordtooshort' => 'پاسورد با حداقل {{PLURAL:$1|1 character|$1 characters}} با',
+'password-name-match' => 'پاسوردتو با د نوم کاروریتو فرخ داشتوه',
+'password-login-forbidden' => 'وه کار گرتن ای پاسوردو نوم کاروری ممنو بیه.',
+'mailmypassword' => 'رمز هنی نه ايميل بكيد',
+'passwordremindertitle' => 'پاسورد موقت تازه سی {{SITENAME}}',
+'noemailcreate' => 'شما باید یه نشونی نومه معتور فراهم بکید',
+'mailerror' => 'خطا داره کل موئه:$1',
+'emailconfirmlink' => 'نشونی ايملتو نه محكم بكيد',
+'emaildisabled' => 'ای مالگه نتونه ایمیل بفرسنه',
+'accountcreated' => 'حساو راس بی',
+'createaccount-title' => 'حساو راس کرده سی {{SITENAME}}',
+'login-abort-generic' => 'اومائن وامین تو شکست حرد-شکست حرده',
+'loginlanguagelabel' => 'زون:$1',
+
+# Email sending
+'user-mail-no-addy' => 'سی کل کردن ایمیل بی نشونه ایمیل صورت گرته',
+
+# Change password dialog
+'resetpass' => 'پاسورد نه آلشت بكيت',
+'resetpass_header' => 'پاسورد حساوتونه آلشت بکید',
+'oldpassword' => 'پاسورد قدیمی:',
+'newpassword' => 'پاسورد تازه:',
+'retypenew' => 'رمز تازه نه دوواره بنیسید:',
+'resetpass_submit' => 'پاسور بنیت و وامین بیایت',
+'changepassword-success' => 'پاسورد شما وا موفقیت آلشت بی',
+'resetpass_forbidden' => 'پاسوردیا نتونن آلشت بوئن',
+'resetpass-submit-loggedin' => 'پاسورد نه آلشت بكيت',
+'resetpass-submit-cancel' => 'رد كردن',
+'resetpass-temp-password' => 'رمز موقت:',
+
+# Special:PasswordReset
+'passwordreset-legend' => 'د نۈ وارد كردن رمز',
+'passwordreset-username' => 'نوم كاروری:',
+'passwordreset-domain' => 'پوشگیر',
+'passwordreset-capture' => 'ایمیل نتیجه نه بوینیتو؟',
+'passwordreset-email' => 'نشونی ايميل',
+'passwordreset-emailsent' => 'پاسورد هنی سی ایمیل کل بیه.',
+
+# Special:ChangeEmail
+'changeemail' => 'ایمیل تو نه آلشت بکید',
+'changeemail-header' => 'ایمیل حساوتونه آلشت بکید',
+'changeemail-oldemail' => 'نشونی ایمیل تازه باو:',
+'changeemail-newemail' => 'نشونی ایمیل تازه',
+'changeemail-none' => '(هيش كوم)',
+'changeemail-password' => 'شما {{SITENAME}} پاسورد:',
+'changeemail-submit' => 'آلشت کردن ایمیل',
+'changeemail-cancel' => 'رد كردن',
+
+# Edit page toolbar
+'bold_sample' => 'متن توپر بيه',
+'bold_tip' => 'متن توپر بيه',
+'italic_sample' => 'نوشته كج كوله',
+'italic_tip' => 'نوشته كج كوله',
+'link_sample' => 'عنوان لينك',
+'link_tip' => 'لینک مئن ون',
+'extlink_sample' => 'http://www.example.com نوم ديس ون',
+'extlink_tip' => 'هوم پیوند خارجی(د ویر داشتو)',
+'headline_sample' => 'سرخط نوشته',
+'headline_tip' => 'قدم 2 خط سر ون',
+'nowiki_sample' => 'د ایچه یه گل متن بی شلک وارد بکید',
+'nowiki_tip' => 'شلک ویکی نه ندید بگر',
+'image_tip' => 'فایل محاط بيه',
+'media_tip' => 'فایل هوم پیوند',
+'sig_tip' => 'امضا شما و برچسو وخت',
+'hr_tip' => 'خط افق ونه(سوا سوا دش استفاده کو)',
+
+# Edit pages
+'summary' => 'چكسته',
+'minoredit' => 'يه ويرايشت كؤچكيه',
+'watchthis' => 'ديئن ای بلگه',
+'savearticle' => 'بلگه ضبط بوئه',
+'preview' => 'پيش سيل',
+'showpreview' => 'پيش نمائش نشون بيئه',
+'showlivepreview' => 'پیش سیل زنه',
+'showdiff' => 'آلشتيانه نشون بيئه',
+'anoneditwarning' => 'زنهار شما وامین نیومایته.
+نشونی آی پی تو د ویرگار ویرایشت ای بلگه ضفط بوئه',
+'missingcommenttext' => 'لطفن د ایچه نظر بیئتو',
+'summary-preview' => 'چکسته پیش سیل:',
+'blockedtitle' => 'كارور قلف بيه',
+'blockednoreason' => 'هیژ دلیلی دئه نبیه',
+'whitelistedittext' => 'شما باید $1 سی ویرایشت بلگیا',
+'nosuchsectiontitle' => 'نبوئه بشخ پیدا بوئه',
+'loginreqtitle' => 'وامین اومائن لازمه',
+'loginreqlink' => 'اومائن',
+'accmailtitle' => 'پاسورد کل بی',
+'newarticle' => 'تازه',
+'newarticletext' => 'شما وادما هوم پیوندی هئیت که وجود ناره.
+سی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[[{{MediaWiki:Helppage}}|]] سی دونسمنی بیشتر بکید).
+ار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن مرورگر تونه بپورنیت.',
+'noarticletext' => 'د تازه یا د ای بلگه متن نی.
+شما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span>
+ [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.',
+'noarticletext-nopermission' => 'د تازه یا د ای بلگه متن نی.
+شما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span> اما شما حق ناریتو ای بلگه نه راس بکیت',
+'updated' => '(تازه بيه)',
+'note' => "'''نيسنن:'''",
+'previewnote' => 'فقط ای پیش سیل د ویرتو با.
+آلشتیاتو هنی ذخیره نبیه.',
+'continue-editing' => 'رو د راساگه ویرایشت',
+'editing' => 'د حالت ويرايشت$1',
+'creating' => 'راس كردن $1',
+'editingsection' => 'د حال ویرایشت$1(بشخ)',
+'editingcomment' => 'د حال ویرایشت$1(بشخ تازه)',
+'yourtext' => 'متن شما',
+'yourdiff' => 'فرخيا',
+'templatesused' => '{{جمی:$1|قالو|قالویا}}د ای بلگه استفاده بیه:',
+'template-protected' => '(حمايت بيه)',
+'template-semiprotected' => '(نيم-حفاظت بيه)',
+'hiddencategories' => 'ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ',
+'permissionserrors' => 'خطا اجازه دئین',
+'permissionserrorstext-withaction' => 'شما سی $2 اجازه ناریت
+سی دمال کردن{{PLURAL:$1|reason|reasons}}:',
+'recreate-moveddeleted-warn' => "'''زنهار شما بلگه ای که وادما پاک بیه هنی راس کردیته'''
+شما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.
+پاک بیئن و جمشت سی ای بلگه سی راحتی تو فراهم بیه:",
+'moveddeleted-notice' => 'ای بلگه پاک بیه.
+پاک بین و جمشت ای بلگه سی سرچشمه دئین فراهم بیه',
+'edit-conflict' => 'مخالفت نه ویرایشت بکید',
+'postedit-confirmation' => 'ویرایشتتو ذخیره بی',
+
+# Content models
+'content-model-wikitext' => 'ويكی متن',
+'content-model-text' => 'متن ساده',
+'content-model-javascript' => 'جاوا اسكريپت',
+'content-model-css' => 'سی اس اس',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => 'زنئار قالو شومل انازه ای یه که فره گپه.پاره ای د قالویا نه د بر نگره',
+'post-expand-template-inclusion-category' => 'بلگیا شومل قالوی ین که انازش د حد اومائه وه در',
+'post-expand-template-argument-warning' => 'زنهار ای بلگه شومل حداقل یه قالو سی چک چنه یه که انازه فره گپه.
+گپسنیا پاک بینه.',
+'post-expand-template-argument-category' => 'بلگه شومل قالو چک چنیا د بین رئته',
+
+# History pages
+'viewpagelogs' => 'سی ای بلگه بوینتو.',
+'currentrev-asof' => 'آخرين دووار ديئن چی $1',
+'revisionasof' => 'دوواره ديئن $1',
+'revision-info' => 'دوواره سیل بیه چی $1 وا $2',
+'previousrevision' => 'اصلاح دمايی',
+'nextrevision' => 'تازه ترن دوبار دیئن',
+'currentrevisionlink' => 'آخرین دوواره دیئن',
+'cur' => 'تازه باو',
+'next' => 'نيایی',
+'last' => 'دمايی',
+'page_first' => 'اولی',
+'page_last' => 'آخر',
+'history-fieldset-title' => 'ویرگار مرور ون',
+'history-show-deleted' => 'فقط پاك بيه',
+'histfirst' => 'قديمي تري',
+'histlast' => 'تازه تري',
+'historyempty' => '(حالی)',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 د
+$2',
+
+# Revision deletion
+'rev-delundel' => 'آلشت وضئيت ديئن',
+'rev-showdeleted' => 'نشو دائن',
+'revdelete-show-file-submit' => 'هری',
+'revdelete-hide-comment' => 'چکسه نه ویرایشت بکید',
+'revdelete-radio-same' => 'آلشت نکید',
+'revdelete-radio-set' => 'قام بیه',
+'revdelete-radio-unset' => 'دیینی',
+'revdelete-log' => 'دلیل:',
+'revdel-restore' => 'آلشت وضئيت ديئن',
+'revdel-restore-deleted' => 'پاك كردن مراجعيا',
+'revdel-restore-visible' => 'مراجعات ديئنی',
+'pagehist' => 'ويرگار بلگه',
+'deletedhist' => 'ویرگار پاک بیه',
+'revdelete-otherreason' => 'دلیل هنی:',
+'revdelete-reasonotherlist' => 'دلیل هنی',
+'revdelete-edit-reasonlist' => 'دلیلیا پاک کردنه نه ویرایشت بکید',
+
+# History merging
+'mergehistory-from' => 'بلگه سرچشمه:',
+'mergehistory-into' => 'بلگه مقصد:',
+'mergehistory-reason' => 'دليل:',
+
+# Merge log
+'revertmerge' => 'بی لوئه',
+
+# Diffs
+'history-title' => 'دوواره دیئن ویرگار$1',
+'lineno' => 'خط $1:',
+'compareselectedversions' => 'دوبار دیئنیایی که انتخاو بینه مقایسه بکیتو',
+'editundo' => 'رد كردن',
+'diff-empty' => '(بی فرق)',
+'diff-multi' => '({{جمی:$1|یه گل دوواره دیئن مینجایی|$1مینجا دوواره دیئنیا}} وا {{جمی:$2|یه کارور|$2 کاروریا}} نشو دئه نی)',
+
+# Search results
+'searchresults' => 'نتيجه يا پی جوری',
+'searchresults-title' => 'نتيجه يا پی جوری سی "$1"',
+'searchsubtitleinvalid' => 'شما پی جوریت سی',
+'titlematches' => 'عنوان بلگه مطاوقت داره',
+'prevn' => 'وادما {{PLURAL:$1|$1}}',
+'nextn' => 'نيايی {{PLURAL:$1|$1}}',
+'prevn-title' => 'پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
+'nextn-title' => 'نيايی $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
+'shown-title' => 'نشون دائن $1 {{PLURAL:$1|نتيجه|نتيجه}} سی همه بلگه',
+'viewprevnext' => 'ديئن ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-legend' => 'گزينه يا هنی پی جوری',
+'searchmenu-exists' => "'''ایچه بلگه ای هئ وه نوم\"[[:\$1]]\" که ها د ای ویکی'''",
+'searchmenu-new' => "'''ای بلگه نه راس كو \"[[:\$1]]\" د ای ويكي!'''",
+'searchprofile-articles' => 'بلگيا محتوا',
+'searchprofile-project' => 'بلگيا هومياری پروجه',
+'searchprofile-images' => 'رسانيا جمی',
+'searchprofile-everything' => 'همه چی',
+'searchprofile-advanced' => 'پيشرفته',
+'searchprofile-articles-tooltip' => 'بگرد مئن $1',
+'searchprofile-project-tooltip' => 'بگرد مئن $1',
+'searchprofile-images-tooltip' => 'بگرد سی فايليا',
+'searchprofile-everything-tooltip' => 'همه محتوا نه پی جوری كو (شاملا بلگيا چك چنه)',
+'searchprofile-advanced-tooltip' => 'نوم جايا نوم ديار بگرد',
+'search-result-size' => '$1 ({{PLURAL:$2|بی واچه يل|واچه تكی|واچه يل|$2 واچه يل|$2 واچه}})',
+'search-result-category-size' => '{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 فایل|$3 فایلیا}})',
+'search-redirect' => '(ورگشتن $1)',
+'search-section' => '(بشق $1)',
+'search-suggest' => 'منظورت يه بی:$1',
+'search-interwiki-more' => '(بیشتر)',
+'search-relatedarticle' => 'مرتوط',
+'searchrelated' => 'مرتوط',
+'searchall' => 'همه',
+'showingresultsheader' => "{{PLURAL:$5|نتيجه '''$1''' د'''$3'''|نتيجه يا '''$1 - $2''' د'''$3'''}} سيli'''$4'''",
+'search-nonefound' => 'هیژ نتیجه یی سی پی جست تو مطاوقت نکرده',
+'powersearch' => 'پی جوری پیشبرده',
+'powersearch-legend' => 'پی جوری پیشبرده',
+'powersearch-field' => 'پی جوری سی',
+'powersearch-togglelabel' => 'چك كردن:',
+'powersearch-toggleall' => 'همه',
+'powersearch-togglenone' => 'هيش كوم',
+'search-external' => 'پی جوری د در',
+
+# Preferences page
+'preferences' => 'خصوصيات هنی',
+'mypreferences' => 'خصوصيات هنی',
+'prefs-edits' => 'شماره ویرایشتا:',
+'changepassword' => 'پاسورد نه آلشت بكيت',
+'prefs-skin' => 'پوست',
+'skin-preview' => 'پیش سیل',
+'prefs-datetime' => 'وخت و زمون',
+'prefs-user-pages' => 'بلگیا كارور',
+'prefs-personal' => 'پروفایل کارور',
+'prefs-rc' => 'آلشتیا تازه باو',
+'prefs-watchlist' => 'سیل برگ',
+'prefs-misc' => 'شيوسن',
+'prefs-resetpass' => 'پاسورد نه آلشت بكيت',
+'prefs-changeemail' => 'نشونی ایمیل تو نه آلشت بکید',
+'saveprefs' => 'ذخيره كردن',
+'prefs-editing' => 'د حالت ويرايشت',
+'rows' => 'رديفيا:',
+'columns' => 'ستينا:',
+'searchresultshead' => 'پی جوری',
+'stub-threshold-disabled' => 'د كار ونن',
+'timezonelegend' => 'وخت راساگه',
+'localtime' => 'وخت ولاتی:',
+'timezoneuseserverdefault' => 'وخت راساگه',
+'timezoneoffset' => 'آفست:',
+'servertime' => 'وخت سرور:',
+'timezoneregion-africa' => 'افرقا',
+'timezoneregion-america' => 'امركا',
+'timezoneregion-antarctica' => 'قطو هار ونه',
+'timezoneregion-arctic' => 'قطو شمال',
+'timezoneregion-asia' => 'آسيا',
+'timezoneregion-atlantic' => 'جهون آو آتلانتیک',
+'timezoneregion-australia' => 'استراليا',
+'timezoneregion-europe' => 'اوروپا',
+'timezoneregion-indian' => 'جهوناو هند',
+'timezoneregion-pacific' => 'جهوناو آروم',
+'prefs-searchoptions' => 'پی جوری',
+'prefs-namespaces' => 'نوم جایا',
+'default' => 'پيش فرض',
+'prefs-files' => 'فايلا',
+'youremail' => 'ايميل:',
+'yourrealname' => 'نوم راستكی:',
+'yourlanguage' => 'زون:',
+'yournick' => 'امضا تازه:',
+'email' => 'پیومک برقی',
+'prefs-help-email' => 'نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت',
+'prefs-help-email-others' => 'شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.
+نشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.',
+'prefs-editor' => 'ويرايشتگر',
+'prefs-preview' => 'پیش سیل',
+'prefs-diffs' => 'فرخیا',
+
+# User rights
+'userrights-user-editname' => 'نوم كاروری ته وارد كو',
+'userrights-reason' => 'دليل:',
+
+# Groups
+'group' => 'گرو',
+'group-bot' => 'بتیا',
+'group-all' => '(همه)',
+
+# Special:Log/newusers
+'newuserlogpage' => 'راس بیه وا کارور',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'ای بلگه نه ويرايشت بكيد',
+'action-delete' => 'ای بلگه نه پاک کو',
+'action-deleterevision' => 'ای بازدئین پاک کو',
+'action-undelete' => 'ای بلگه نه پاک نکو',
+'action-sendemail' => 'ایمیلیانه کل کو',
+
+# Recent changes
+'nchanges' => '$1 {{جمی:$1|آلشت|آلشتیا}}',
+'enhancedrc-history' => 'ويرگار',
+'recentchanges' => 'تغيريا تازه',
+'recentchanges-legend' => 'گزينه يا آلشتيا تازه',
+'recentchanges-feed-description' => 'دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.',
+'recentchanges-label-newpage' => 'ای ويرايشت يه بلگه تازه راس كرده',
+'recentchanges-label-minor' => 'يه ويرايشت كؤچكيه',
+'recentchanges-label-bot' => 'ای ويرايشت نه يه بوت انجوم ديئه',
+'recentchanges-label-unpatrolled' => 'ای ويرايشت هنی تيه واداشت نبيه',
+'rcnote' => "د هار{{جمی:$1|هئ'''1''' آلشت|آخری هئ ن '''$1'''آلشتیا}}د آخر{{جمی:$2|رو|'''$2''' روزیا}}, چی $5, $4.",
+'rcnotefrom' => 'د هار آلشتیا د $2 هیئن(د بال د $1 نشون دئه بیه)',
+'rclistfrom' => 'آلشتیا تازه ایی که وا $1 شرو بیه نشونش بئه',
+'rcshowhideminor' => 'ويرايشتيا کؤچک $1',
+'rcshowhidebots' => '$1 رواتيا یا بوتيا',
+'rcshowhideliu' => '$1 کارورياداخل بيه',
+'rcshowhideanons' => '$1 کاروريا ناشناس',
+'rcshowhidepatr' => '$1 ویرایشتیا تیه پرس بیه',
+'rcshowhidemine' => 'ويرايشتيا مه$1',
+'rclinks' => 'آخرین آلشتیا $1 نشو بیه د اخرین روزیا $2',
+'diff' => 'فرخ',
+'hist' => 'ويرگار',
+'hide' => 'قام كردن',
+'show' => 'نشون دائن',
+'minoreditletter' => 'م',
+'newpageletter' => 'ن',
+'boteditletter' => 'ب',
+'rc_categories_any' => 'هرکوم',
+'rc-enhanced-expand' => 'جزيات نشون بيئه',
+'rc-enhanced-hide' => 'جزياته قام كو',
+
+# Recent changes linked
+'recentchangeslinked' => 'تغيريا مرتبط',
+'recentchangeslinked-toolbox' => 'تغيريا مرتبط',
+'recentchangeslinked-title' => 'آلشتيا مرتوط وا $1',
+'recentchangeslinked-summary' => 'ای نوم گه تازه د بلگیایی که وا بلگیا ویجه هوم پیوند بینه آلشت بیه(یا سی اندومیا دسه بنی بیه)
+بلگیا یی که هان [[Special:Watchlist|your watchlist]]و گپ بینه',
+'recentchangeslinked-page' => 'نوم بلگه:',
+'recentchangeslinked-to' => 'آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه',
+
+# Upload
+'upload' => 'بلم گير كردن فايلا',
+'uploadlogpage' => 'سوارکرد',
+'filename' => 'نوم فایل',
+'filedesc' => 'چكسته',
+'fileuploadsummary' => 'چکسه',
+'filesource' => 'سرچشمه:',
+'uploadedimage' => 'سوارکرد"[[$1]]"',
+'upload-source' => 'سرچشمه فایل',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'دسرسی منع بی',
+
+'license' => 'ليانس دار بيئن',
+'license-header' => 'د شكل ليسانس دار بيئن',
+
+# Special:ListFiles
+'imgfile' => 'فايل',
+'listfiles_thumb' => 'بن کلکی',
+'listfiles_date' => 'تاريخ',
+'listfiles_name' => 'نوم',
+'listfiles_user' => 'كارور',
+'listfiles_size' => 'انازه',
+'listfiles_count' => 'نسقیا',
+'listfiles-latestversion' => 'نسقه تازه',
+'listfiles-latestversion-yes' => 'هری',
+'listfiles-latestversion-no' => 'نه',
+
+# File description page
+'file-anchor-link' => 'فايل',
+'filehist' => 'ويرگار فايل',
+'filehist-help' => 'ری ويرگاريا بپورنيت تا نسقه مرتوط بونيت.',
+'filehist-deleteall' => 'همه نه پاک کو',
+'filehist-deleteone' => 'پاك كردن',
+'filehist-revert' => 'ورگنین',
+'filehist-current' => 'تازه باو',
+'filehist-datetime' => 'ويرگار/وخت',
+'filehist-thumb' => 'عسگ كؤچك بيه',
+'filehist-thumbtext' => 'كؤچك كردن سی نسقه چی $1',
+'filehist-user' => 'كارور',
+'filehist-dimensions' => 'بعديا',
+'filehist-filesize' => 'انازه فایل',
+'filehist-comment' => 'نظر',
+'imagelinks' => 'استفاده د فايل',
+'linkstoimage' => 'دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:',
+'nolinkstoimage' => 'ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی',
+'sharedupload-desc-here' => 'فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.
+توضی دباره[$2 file description page] د هار نشو دئئه بیه',
+
+# File deletion
+'filedelete-comment' => 'دليل:',
+'filedelete-submit' => 'پاك كردن',
+
+# MIME search
+'download' => 'گرتن',
+
+# Unused templates
+'unusedtemplateswlh' => 'هوم پیوندیا هنی',
+
+# Random page
+'randompage' => 'بلگه بختكی',
+
+# Random page in category
+'randomincategory-selectcategory-submit' => 'رو',
+
+# Statistics
+'statistics' => 'آماريا',
+'statistics-pages' => 'بلگیا',
+'statistics-users-active' => 'کاروریا کارکو',
+
+'pageswithprop-submit' => 'رو',
+
+'brokenredirects-edit' => 'ویرایشت',
+'brokenredirects-delete' => 'پاك كردن',
+
+'withoutinterwiki-legend' => 'پیشون',
+'withoutinterwiki-submit' => 'نشون دائن',
+
+# Miscellaneous special pages
+'nbytes' => '$1{{PLURAL:$1|كلی|بايت|بايت}}',
+'nmembers' => '$1 {{PLURAL:$1|اندوم|اندوميا}}',
+'prefixindex' => 'همه بلگيا وا پيشون',
+'usercreated' => '{{جنسیت:$3|راس بیه}}د $1 at $2',
+'newpages' => 'بلگيا نو',
+'move' => 'جاوه جا بوئيت',
+'pager-newer-n' => '{{جمی:$1|وانها تر 1وانها تر $1}}',
+'pager-older-n' => '{{جمی:$1|گپسالتر 1|گپسالتر $1}}',
+
+# Book sources
+'booksources' => 'سرچشمه يل كتاو',
+'booksources-search-legend' => 'پی جوری سی سرچشمه یا کتاو',
+'booksources-go' => 'رو',
+
+# Special:AllPages
+'allpages' => 'همه بلگيا',
+'alphaindexline' => '$1 د
+$2',
+'allarticles' => 'همه بلگيا',
+'allpagessubmit' => 'رو',
+
+# Special:Categories
+'categories' => 'دسه يا',
+
+# Special:LinkSearch
+'linksearch-line' => '$1 داره د $2 هوم پیوند بوئه',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(نوم گه اندومیا)',
+
+# Email user
+'emailuser' => 'ای كارور نه ايميل كو',
+
+# Watchlist
+'watchlist' => 'سیل برگ',
+'mywatchlist' => 'سیل برگ',
+'watchlistfor2' => 'سي $1 $2',
+'watch' => 'سيل كردن',
+'unwatch' => 'ديه نبيه',
+'watchlist-details' => '{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی .',
+'wlshowlast' => 'آخرین$1 ساعتیا $2و روزیا $3 نشو بیئه',
+'watchlist-options' => 'گزینیا سیل برگ',
+
+# Delete
+'actioncomplete' => 'عملكرد كامل بيه',
+'actionfailed' => 'عملكرد شكست حرده',
+'dellogpage' => 'لاگ پاك كردن',
+
+# Rollback
+'rollbacklink' => 'ورگشتن',
+
+# Protect
+'protectlogpage' => 'حفاظت کردن',
+'protectedarticle' => 'حفاظت بيه [[$1]]',
+
+# Undelete
+'undeletelink' => 'بوين/دوواره آماده با',
+'undeleteviewlink' => 'ديئن',
+
+# Namespace form on various pages
+'namespace' => 'نوم جا:',
+'invert' => 'انتخاو برعسك بوئه',
+'blanknamespace' => 'اصلی',
+
+# Contributions
+'contributions' => '{{جنس:$1|کارور}} هومیاریا',
+'contributions-title' => 'هومياري كارور سي $1',
+'mycontris' => 'هومياری',
+'contribsub2' => 'سي {{جنسيت:$3|$1}} ($2)',
+'uctop' => '(تازه باو)',
+'month' => 'د ما(یا زیتر)',
+'year' => 'د سال',
+
+'sp-contributions-newbies' => 'فقط هومیاری یایی که د حساو تازه بیه نشون بئه',
+'sp-contributions-blocklog' => 'قلف',
+'sp-contributions-uploads' => 'سواركرديا',
+'sp-contributions-talk' => 'چك چنه',
+'sp-contributions-search' => 'سی هومیاریا پی جور با',
+'sp-contributions-username' => 'نوم نشون آی پی يا نوم كاروری:',
+'sp-contributions-toponly' => 'فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه',
+'sp-contributions-submit' => 'پی جوری',
+
+# What links here
+'whatlinkshere' => 'كؤم ديس ونيا هان ايچه',
+'whatlinkshere-title' => 'بلگه ای که د $1 هوم پیوند بیه',
+'whatlinkshere-page' => 'بلگه',
+'linkshere' => "بلگیا نهایی د '''[[:$1]]''' هوم پیوند بیه",
+'nolinkshere' => "هیژ بگله ای د '''[[:$1]]''' هوم پیوند نبیه",
+'isredirect' => 'بلگه دوباره ورگشتن',
+'istemplate' => 'نشونی دئن',
+'isimage' => 'فایل هوم پیوند',
+'whatlinkshere-prev' => '{{جمی:$1|دمایی|دمایی $1}}',
+'whatlinkshere-next' => '{{جمی:$1|نهایی|نهایی $1}}',
+'whatlinkshere-links' => 'هوم پیوندیا',
+'whatlinkshere-hideredirs' => '$1 دوواره د نشونی ورگشتن',
+'whatlinkshere-hidetrans' => '$ا چن نتیجه ای',
+'whatlinkshere-hidelinks' => 'هوم پیوندیا $1',
+'whatlinkshere-hideimages' => 'فایل هوم پیوندیا $1',
+'whatlinkshere-filters' => 'فيلتريا',
+
+# Block/unblock
+'ipboptions' => '2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,حد ناره:حد ناره',
+'ipblocklist' => 'كاروريا منع بيه',
+'blocklink' => 'بسته بوئه',
+'unblocklink' => 'بی قطی',
+'change-blocklink' => 'اجازه نديئن سی آلشت',
+'contribslink' => 'هومكاری',
+'blocklogpage' => 'قلف',
+'blocklogentry' => ' [[$1]] وا یه گل وخت تموم بیئن $2 و $3 قلف بیه',
+'block-log-flags-nocreate' => 'حساو راس کردن عاجز بیه.',
+
+# Move page
+'movelogpage' => 'جاوه جا کردن',
+'revertmove' => 'لرستن',
+
+# Export
+'export' => 'وه صحرا ديئن بلگيا',
+
+# Namespace 8 related
+'allmessagesname' => 'نوم',
+'allmessagesdefault' => 'سفارشت متنی پيش فرض',
+
+# Thumbnails
+'thumbnail-more' => 'گپ كردن',
+'thumbnail_error' => 'خطا د راس بیئن بن کلئکی:$1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'بلگه كارورتو',
+'tooltip-pt-mytalk' => 'بلگه قسه كردن شما',
+'tooltip-pt-preferences' => 'اولويتيا شما',
+'tooltip-pt-watchlist' => 'نوم نوشت د بلگه يايی كه شما آلشتاشونه پيگئری ميكيد',
+'tooltip-pt-mycontris' => 'يه گل د هومياريا شما',
+'tooltip-pt-login' => 'توصيه بو كه وارد بوئين، اما مجبوری ني',
+'tooltip-pt-logout' => 'د سيستم دراومائن',
+'tooltip-ca-talk' => 'قسه دباره محتوا بلگه',
+'tooltip-ca-edit' => 'شما تونيد ای بلگه نه ويرايشت بكيد. لطف بكيد د دگمه پيش ديئن پيش د ذخيره كردن استفاده بكيد',
+'tooltip-ca-addsection' => 'بشخ تازه نه شرو كو',
+'tooltip-ca-viewsource' => 'ای بلگه حفاظت بيه.
+شما تونيت سرچمه ش بئوينيت',
+'tooltip-ca-history' => 'دوواره ديئن ای بلگه',
+'tooltip-ca-protect' => 'ای بلگه نه حفاظت بكيد',
+'tooltip-ca-delete' => 'ای بلگه نه حذف بكيد',
+'tooltip-ca-move' => 'ای بگله نه جا وه جا كو',
+'tooltip-ca-watch' => 'اضاف کردن ای بلگه وه نوم نوشت پیگئریاتو',
+'tooltip-ca-unwatch' => 'ورداشتن ای بلگه وه نوم نوشت پیگئریاتو',
+'tooltip-search' => 'پی جوری {{SITENAME}}',
+'tooltip-search-go' => 'رؤ د بلگه ای که یه نوم راستکی ها مینش الوت ار دش بوئه',
+'tooltip-search-fulltext' => 'بلگيانه سی چنو متنی بگرد',
+'tooltip-p-logo' => 'سرآسونه نه بونيت',
+'tooltip-n-mainpage' => 'سرآسونه نه بونيت',
+'tooltip-n-mainpage-description' => 'ديئن سرآسونه',
+'tooltip-n-portal' => 'دباره پروجه،ايسا ترين(تونيت) چی بكيد، كجه چيانه بجورين',
+'tooltip-n-currentevents' => 'ساوند دونسمنديايی كه هان د پيشومدل تازه باو پيدا كو',
+'tooltip-n-recentchanges' => 'يه نوم جاوند سی تغيرا تازه مئن ويكی',
+'tooltip-n-randompage' => 'سوار كرد بلگه بختكی',
+'tooltip-n-help' => 'جاگه سی فهمسن',
+'tooltip-t-whatlinkshere' => 'سيائه تمؤم بلگيایی كه ايچه چسب ون دارن',
+'tooltip-t-recentchangeslinked' => 'تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه',
+'tooltip-feed-atom' => 'تغذيه كؤچك سی ای بلگه',
+'tooltip-t-contributions' => 'یه نوم گه د هومیاریا ای کارور',
+'tooltip-t-emailuser' => 'سی ای كارور ايميل كل كو',
+'tooltip-t-upload' => 'بلم گير كردن فايلا',
+'tooltip-t-specialpages' => 'سيائه تمؤم بلگيا خاص',
+'tooltip-t-print' => 'نسقه چاپ بيئنی سی ای بلگه',
+'tooltip-t-permalink' => 'چسب ون هميشئی د دوواره بينی ای بلگه',
+'tooltip-ca-nstab-main' => 'ديئن محتوا بلگه',
+'tooltip-ca-nstab-user' => 'ديئن بلگه كارور',
+'tooltip-ca-nstab-special' => 'اي بلگه ويجه يه، شما نتونيت خود اي بلگه نه ويرايشت بكيد',
+'tooltip-ca-nstab-project' => 'ديئن بلگه پروجه',
+'tooltip-ca-nstab-image' => 'ديئن بلگه فايل',
+'tooltip-ca-nstab-template' => 'ديئن قالو',
+'tooltip-ca-nstab-category' => 'ديئن بلگه دسه بنی',
+'tooltip-minoredit' => 'یه نه د عنوان حیرده ویرایشت ثوت کو',
+'tooltip-save' => 'آلشتياتونه ذخيره بكيد',
+'tooltip-preview' => 'پیش سیل آلشتیاتو،لطفن پیش د ذخیره دش استفاده بکیتو',
+'tooltip-diff' => 'آلشتیا نه که شما د ای متن راس کردیته نشو بیئه',
+'tooltip-compareselectedversions' => 'فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت',
+'tooltip-watch' => 'ای بلگه نه د سیل برگتو اضاف بکید',
+'tooltip-rollback' => '"ورگشتن" لرستن د حالت اول سی ای بلگه که سی يه كه هومياری نيايی اصلاح بيه وا يه پورنسن',
+'tooltip-undo' => 'انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.',
+'tooltip-summary' => 'يه چكسته كؤچك وارد بكيد',
+
+# Browsing diffs
+'previousdiff' => '← ويرايشت كۈهنه تر',
+'nextdiff' => 'ويرايشت تازه تر',
+
+# Media information
+'file-info-size' => '$1 × $2 پیکسل, انازه فایل: $3, MIME نوع: $4',
+'file-nohires' => 'عسك ون بالاتري دش ني',
+'svg-long-desc' => 'اس وی جی فايل.نومنا $1 $2 پيكسل',
+'show-big-image' => 'تموم رخ ون',
+
+# Bad image list
+'bad_image_list' => 'دونسمنديانه وه ای شلگ وارد بكيت:
+
+فقط سرخط يایی که وا * شرو بوئن د وير گرته بوئن. اولی چسب ون مئن هر سرخط، باید چسب ونی وه یک عسگ گن با.
+چسب ونيا نيایی د همو سرخط، وه عنوان چيا استثنادار د وير گرته بوئن',
+
+# Metadata
+'metadata' => 'داديا فره گپ',
+'metadata-help' => 'ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه',
+'metadata-fields' => 'رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.
+چی یا هنی سی یه که پیش فرضن قام بوئن.
+*راست کو
+*مدل
+*دم وخت اصل
+*وخت آشگار
+*اف ان شماره
+*ایزو نرخ من سرعت
+*فوکالنس
+*هنرمن
+*کپی رایت
+*حالت جی پی اس
+*جی پی اس گپ حالت
+*جی پی اس همه حالت',
+
+# External editor support
+'edit-externally' => 'ای فایل سی ویرایشت وه در دیئن کاربردش استفاده بکید',
+'edit-externally-help' => '(بوینیت [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'همه شو',
+'namespacesall' => 'همه شو',
+'monthsall' => 'همه',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'آلشتیا مرتوط نه بوینیت',
+'watchlisttools-edit' => 'سیل برگ بوینیتو و ویرایشت بکید',
+'watchlisttools-raw' => 'سیل برگ نه ردیفی ویرایشت کو',
+
+# Core parser functions
+'duplicate-defaultsort' => 'زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.',
+
+# Special:SpecialPages
+'specialpages' => 'بلگيا ويجه',
+
+# External image whitelist
+'external_image_whitelist' => 'یه خط نه ول بکید چی وه<pre>',
+
+# Special:Tags
+'tag-filter' => 'فيلتر [[Special:Tags|Tag]]:',
+
+);
'ok' => 'Gerai',
'retrievedfrom' => 'Gauta iš „$1“',
'youhavenewmessages' => 'Jūs turite $1 ($2).',
-'newmessageslink' => 'naujų žinučių',
-'newmessagesdifflink' => 'paskutinis pakeitimas',
'youhavenewmessagesfromusers' => 'Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).',
'youhavenewmessagesmanyusers' => 'Jūs turite $1 iš daugelio vartotojų ( $2 ) .',
'newmessageslinkplural' => '{{PLURAL:$1|naują žinutę|naujų žinučių}}',
'preferences' => 'Nustatymai',
'mypreferences' => 'Nustatymai',
'prefs-edits' => 'Keitimų skaičius:',
-'prefsnologin' => 'Neprisijungęs',
-'prefsnologintext' => 'Jums reikia būti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prisijungusiam]</span>, kad galėtumėte keisti savo nustatymus.',
'changepassword' => 'Pakeisti slaptažodį',
'prefs-skin' => 'Išvaizda',
'skin-preview' => 'Peržiūra',
'recentchanges-label-minor' => 'Tai smulkus pakeitimas',
'recentchanges-label-bot' => 'Šį keitimą atliko automatinė programa',
'recentchanges-label-unpatrolled' => 'Šis keitimas dar nebuvo patikrintas',
+'recentchanges-legend-newpage' => '$1 - naujas puslapis',
'rcnote' => "Žemiau yra {{PLURAL:$1|'''1''' pakeitimas|paskutiniai '''$1''' pakeitimai|paskutinių '''$1''' pakeitimų}} per {{PLURAL:$2|dieną|paskutiniąsias '''$2''' dienas|paskutiniųjų '''$2''' dienų}} skaičiuojant nuo $5, $4.",
'rcnotefrom' => "Žemiau yra pakeitimai pradedant '''$2''' (rodoma iki '''$1''' pakeitimų).",
'rclistfrom' => 'Rodyti naujus pakeitimus pradedant $1',
'allmessagesdefault' => 'Pradinis tekstas',
'allmessagescurrent' => 'Dabartinis tekstas',
'allmessagestext' => 'Čia pateikiamas sisteminių pranešimų sąrašas, esančių MediaWiki vardų srityje.
-Aplankykite [//www.mediawiki.org/wiki/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.',
+Aplankykite [https://www.mediawiki.org/wiki/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.',
'allmessagesnotsupportedDB' => "Šis puslapis nepalaikomas, nes nuostata '''\$wgUseDatabaseMessages''' yra išjungtas.",
'allmessages-filter-legend' => 'Filtras',
'allmessages-filter' => 'Filtruoti pagal būseną:',
# External editor support
'edit-externally' => 'Atverti išoriniame redaktoriuje',
-'edit-externally-help' => '(Norėdami gauti daugiau informacijos, žiūrėkite [//www.mediawiki.org/wiki/Manual:External_editors diegimo instrukcijas])',
+'edit-externally-help' => '(Norėdami gauti daugiau informacijos, žiūrėkite [https://www.mediawiki.org/wiki/Manual:External_editors diegimo instrukcijas])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'visus',
'version-hook-subscribedby' => 'Užsakyta',
'version-version' => '(Versija $1)',
'version-license' => 'Licencija',
-'version-poweredby-credits' => "Šis projektas naudoja '''[//www.mediawiki.org/ MediaWiki]''', autorystės teisės © 2001-$1 $2.",
+'version-poweredby-credits' => "Šis projektas naudoja '''[https://www.mediawiki.org/ MediaWiki]''', autorystės teisės © 2001-$1 $2.",
'version-poweredby-others' => 'kiti',
'version-credits-summary' => 'Už indėlį kuriant [[Special:Version|MediaWiki]] dėkojame',
'version-license-info' => 'MediaWiki yra nemokama programinė įranga; galite ją platinti ir/arba modifikuoti pagal GNU General Public License, kurią publikuoja Free Software Foundation; taikoma 2-oji licenzijos versija arba (Jūsų pasirinkimu) bet kuri vėlesnė versija.
# Special:SpecialPages
'specialpages' => 'Specialieji puslapiai',
-'specialpages-note' => '----
- * įprastą specialius puslapius.
+'specialpages-note' => ' * įprastą specialius puslapius.
* <span class="mw-specialpagerestricted">tik specialius puslapius.</span>
* <span class="mw-specialpagecached">Talpyklinių specialius puslapius (gali būti pasenusius).</span>',
'specialpages-group-maintenance' => 'Sistemos palaikymo pranešimai',
'duration-centuries' => '$1 {{PLURAL:$1|amžius|amžiai|amžių}}',
'duration-millennia' => '$1 {{PLURAL:$1|tūkstantmetis|tūkstantmečiai|tūkstantmečių}}',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Rezultatas',
+'expand_templates_ok' => 'Gerai',
+'expand_templates_remove_comments' => 'Pašalinti komentarus',
+'expand_templates_preview' => 'Peržiūra',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Atdabuot nu "$1"',
'youhavenewmessages' => 'Tu dabuoji $1 ($2).',
-'newmessageslink' => 'jaunus viestejumus',
-'newmessagesdifflink' => 'pādejā pataise',
'editsection' => 'pataiseit',
'editold' => 'pataiseit',
'editlink' => 'pataiseit',
# External editor support
'edit-externally' => 'Izmaineit itū failu ar uoreju programu',
-'edit-externally-help' => '(Verīs [//www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, kab dabuotu vaira informacejis).',
+'edit-externally-help' => '(Verīs [https://www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, kab dabuotu vaira informacejis).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'vysys',
'ok' => 'Aw le',
'retrievedfrom' => '"$1" aṭanga lâk chhuah',
'youhavenewmessages' => '($2) $1 i nei.',
-'newmessageslink' => 'thudawn thar',
-'newmessagesdifflink' => 'tihdanglam thar',
'youhavenewmessagesfromusers' => 'Hmangtu dang {{PLURAL:$3|pakhat|$3}} hnên aṭang $1 i nei ($2)',
'youhavenewmessagesmanyusers' => 'Hmangtu dang tamtak hnên aṭang $1 i nei nual ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|thudawn thar}}',
'preferences' => 'Duhdàn',
'mypreferences' => 'Duhthlanna',
'prefs-edits' => 'Siamţhat zât',
-'prefsnologin' => 'I la lût lo',
-'prefsnologintext' => 'Hmangtu duhdàn siam tùrin i <span class="plainlinks"> [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} inziah luh] </span> a ngai.',
'changepassword' => 'Thurûk thlâkna',
'prefs-skin' => 'Vun',
'skin-preview' => 'Enchhinna',
# External editor support
'edit-externally' => 'Pawnlam hmanraw hmanga tihdanglamna',
-'edit-externally-help' => '(Hriat chian lehzualnan [//www.mediawiki.org/wiki/Manual:External_editors bundàn kaihhruaina phek] hi en rawh)',
+'edit-externally-help' => '(Hriat chian lehzualnan [https://www.mediawiki.org/wiki/Manual:External_editors bundàn kaihhruaina phek] hi en rawh)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'a vaiin',
'ok' => 'Labi',
'retrievedfrom' => 'Saturs iegūts no "$1"',
'youhavenewmessages' => 'Tev ir $1 (skatīt $2).',
-'newmessageslink' => 'jauns vēstījums',
-'newmessagesdifflink' => 'pēdējā izmaiņa',
'newmessageslinkplural' => '{{PLURAL:$1|jauns vēstījums|jauni vēstījumi}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|pēdējā izmaiņa|pēdējās izmaiņas}}',
'youhavenewmessagesmulti' => 'Tev ir jauns ziņojums: $1',
'preferences' => 'Izvēles',
'mypreferences' => 'Izvēles',
'prefs-edits' => 'Izmaiņu skaits:',
-'prefsnologin' => 'Neesi iegājis',
-'prefsnologintext' => 'Tev jābūt <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} iegājušam]</span>, lai mainītu lietotāja izvēles.',
'changepassword' => 'Mainīt paroli',
'prefs-skin' => 'Apdare',
'skin-preview' => 'Priekšskats',
'recentchanges-label-minor' => 'Šī ir maznozīmīga izmaiņa',
'recentchanges-label-bot' => 'Šī ir bota veikta izmaiņa',
'recentchanges-label-unpatrolled' => 'Šis labojums vēl nav pārbaudīts',
+'recentchanges-legend-newpage' => '$1 - jauna lapa',
'rcnote' => 'Šobrīd ir {{PLURAL:$1|redzama pēdējā <strong>$1</strong> izmaiņa, kas izdarīta|redzamas pēdējās <strong>$1</strong> izmaiņas, kas izdarītas}} {{PLURAL:$2|pēdējā|pēdējās}} <strong>$2</strong> {{PLURAL:$2|dienā|dienās}} (līdz $4, $5).',
'rcnotefrom' => "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
'rclistfrom' => 'Parādīt jaunas izmaiņas kopš $1',
'allmessagesdefault' => 'Noklusētais ziņojuma teksts',
'allmessagescurrent' => 'Pašreizējais teksts',
'allmessagestext' => "Šajā lapā ir visu \"'''MediaWiki:'''\" lapās atrodamo sistēmas paziņojumu uzskaitījums.
-Šos paziņojumus var izmainīt tikai admini. Izmainot tos šeit, tie tiks izmainīti tikai šajā mediawiki instalācijā. Lai tos izmainītu visām pārējām, apskatieties [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net].",
+Šos paziņojumus var izmainīt tikai admini. Izmainot tos šeit, tie tiks izmainīti tikai šajā mediawiki instalācijā. Lai tos izmainītu visām pārējām, apskatieties [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net].",
'allmessagesnotsupportedDB' => "Šī lapa nedarbojas, tāpēc, ka '''wgUseDatabaseMessages''' nedarbojas.",
'allmessages-filter-legend' => 'Filtrs',
'allmessages-filter' => 'Filtrēt pēc izmainīšanas statusa:',
# External editor support
'edit-externally' => 'Izmainīt šo failu ar ārēju programmu',
-'edit-externally-help' => '(Skat. [//www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, lai iegūtu vairāk informācijas).',
+'edit-externally-help' => '(Skat. [https://www.mediawiki.org/wiki/Manual:External_editors instrukcijas] Mediawiki.org, lai iegūtu vairāk informācijas).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'visas',
'version-hook-name' => 'Aizķeres nosaukums',
'version-version' => '(Versija $1)',
'version-license' => 'Licence',
-'version-poweredby-credits' => "Šis viki darbojas ar '''[//www.mediawiki.org/ MediaWiki]''' programmatūru, autortiesības © 2001-$1 $2.",
+'version-poweredby-credits' => "Šis viki darbojas ar '''[https://www.mediawiki.org/ MediaWiki]''' programmatūru, autortiesības © 2001-$1 $2.",
'version-poweredby-others' => 'citi',
'version-poweredby-translators' => 'translatewiki.net tulkotāji',
'version-credits-summary' => 'Mēs vēlētos izteikt atzinību šīm personām par viņu ieguldījumu [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Īpašās lapas',
-'specialpages-note' => '----
-* Normālas īpašās lapas.
+'specialpages-note' => '* Normālas īpašās lapas.
* <span class="mw-specialpagerestricted">Ierobežotas pieejas īpašās lapas.</span>
* <span class="mw-specialpagecached">Iekešotās īpašās lapas.</span>',
'specialpages-group-maintenance' => 'Uzturēšanas atskaites',
'limitreport-templateargumentsize' => 'Veidnes argumenta izmērs',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|baits|baiti}}',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Rezultāts',
+'expand_templates_ok' => 'Labi',
+'expand_templates_preview' => 'Pirmskats',
+
);
'ok' => '可',
'retrievedfrom' => '取自"$1"',
'youhavenewmessages' => '有$1書至子書房也。($2)',
-'newmessageslink' => '新訊',
-'newmessagesdifflink' => '變更',
'youhavenewmessagesfromusers' => '子有 $1 自 {{PLURAL:$3|一簿戶也|$3 簿戶也}} ($2)。',
'youhavenewmessagesmanyusers' => '子有 $1 自多簿戶 ( $2 )',
'newmessageslinkplural' => '{{PLURAL:$1|一新訊息|新訊息}}',
'preferences' => '簿註',
'mypreferences' => '簿註',
'prefs-edits' => '數計:',
-'prefsnologin' => '未登簿',
-'prefsnologintext' => '註記須<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登簿]</span>。',
'changepassword' => '易符節',
'prefs-skin' => '面版',
'skin-preview' => '草覽',
'recentchanges-label-minor' => '此乃細纂',
'recentchanges-label-bot' => '此乃機纂',
'recentchanges-label-unpatrolled' => '是纂未巡',
+'recentchanges-legend-newpage' => '$1 - 新頁',
'rcnote' => "下為自$4$5起,'''$2'''日內'''$1'''近易也。",
'rcnotefrom' => "下為自'''$2'''至'''$1'''之易也。",
'rclistfrom' => '自$1起之易也',
'allmessagesdefault' => '慣話文',
'allmessagescurrent' => '今話文',
'allmessagestext' => '此列MediaWiki官話。
-如貢正宗MediaWiki本地化,[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]與[//translatewiki.net translatewiki.net]閱之。',
+如貢正宗MediaWiki本地化,[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]與[//translatewiki.net translatewiki.net]閱之。',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''閉庫,'''無纂也。",
'allmessages-filter-legend' => '濾',
'allmessages-filter' => '以易濾:',
# External editor support
'edit-externally' => '以外部程式修此文',
-'edit-externally-help' => '(請閱[//www.mediawiki.org/wiki/Manual:External_editors 安裝指引]以知詳情)',
+'edit-externally-help' => '(請閱[https://www.mediawiki.org/wiki/Manual:External_editors 安裝指引]以知詳情)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全',
'version-hook-subscribedby' => '用於',
'version-version' => '(版 $1)',
'version-license' => '牌',
-'version-poweredby-credits' => "此 Wiki 以 '''[//www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。",
+'version-poweredby-credits' => "此 Wiki 以 '''[https://www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。",
'version-poweredby-others' => '其他',
'version-license-info' => 'MediaWiki乃自由軟件;爾依自由軟件基金會之GNU通用公共授權之款,就此本程序再發佈及/或修;依之二版(自選之)或後之。
# Special:SpecialPages
'specialpages' => '特查',
-'specialpages-note' => '----
-* 準特查。
+'specialpages-note' => '* 準特查。
* <strong class="mw-specialpagerestricted">限特查。</strong>',
'specialpages-group-maintenance' => '護報',
'specialpages-group-other' => '它之奇頁',
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'प्राप्ति स्थल "$1"',
'youhavenewmessages' => 'अहाँ लग अछि $1 ($2).',
-'newmessageslink' => 'नव संदेश सभ',
-'newmessagesdifflink' => 'अन्तिम परिवर्तन',
'youhavenewmessagesmulti' => '$1 पर अहाँ लेल नव सन्देश अछि',
'editsection' => 'संपादन करू',
'editold' => 'सम्पादित करू',
'preferences' => 'विकल्प',
'mypreferences' => 'खासमखास',
'prefs-edits' => 'सम्पादनक संख्या',
-'prefsnologin' => 'सम्प्रवेशित नै',
-'prefsnologintext' => 'अहाँ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> प्रयोक्ता विकल्प निर्धारण लेल प्रयोग करू।',
'changepassword' => 'कूटशब्द बदलू',
'prefs-skin' => 'रूप',
'skin-preview' => 'पूर्वावलोकन',
'allmessagesdefault' => 'पूर्वनिर्धारित संदेश पाठ',
'allmessagescurrent' => 'अखुनका संदेश पाठ',
'allmessagestext' => 'ई मीडियाविकी नामस्थानमे उपलब्ध संस्थागत संदेशक सूची छी।
-कृपा कऽ देखू [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] आ [//translatewiki.net translatewiki.net] जँ अहाँ मीडियाविकीक स्थानिकीकरणक मूलक अनुवादमे योगदान करए चाहै छी।',
+कृपा कऽ देखू [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] आ [//translatewiki.net translatewiki.net] जँ अहाँ मीडियाविकीक स्थानिकीकरणक मूलक अनुवादमे योगदान करए चाहै छी।',
'allmessagesnotsupportedDB' => "ई पन्ना प्रयोगमे नै आनल जा सकैए कारण '''\$wgUseDatabaseMessages''' अशक्त कएल अछि।",
'allmessages-filter-legend' => 'चलनी',
'allmessages-filter' => 'अपन हिसाबे अनुकूलित कऽ छाँटू:',
# External editor support
'edit-externally' => 'ऐ फाइलकेँ बाहरी अनुप्रयोगसँ हटाउ',
-'edit-externally-help' => '(देखू [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] विषेष जानकारी लेल)',
+'edit-externally-help' => '(देखू [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] विषेष जानकारी लेल)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'सभ',
'version-hook-subscribedby' => 'ई सदस्यता लेलनि',
'version-version' => '(संस्करण $1)',
'version-license' => 'अधिकार',
-'version-poweredby-credits' => "ई विकी चालित अछि '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2",
+'version-poweredby-credits' => "ई विकी चालित अछि '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2",
'version-poweredby-others' => 'आन',
'version-license-info' => 'मीडियाविकी एकटा मंगनीक तंत्रांश अछि; अहाँ एकरा बाँटि सकै छी आ/ वा संशोधित कऽ सकै छीगी.एन.यू. सामान्य जन लाइसेन्सक अन्तर्गत जेना फ्री सॉफ्टवेयर फाउन्डेशन एकरा प्रकाशित केने अछि; चाहे तँ लाइसेन्सक संस्करण २, वा (अहाँक विकल्पपर) कोनो बादक दोसर संस्करणक अन्तर्गत।
# Special:SpecialPages
'specialpages' => 'विशेष पन्ना',
-'specialpages-note' => '----
-* सामान्य विशिष्ट पन्ना।
+'specialpages-note' => '* सामान्य विशिष्ट पन्ना।
* <span class="mw-specialpagerestricted">प्रतिबंधित विशिष्ट पन्ना।</span>
* <span class="mw-specialpagecached">उपस्मृतिक विशिष्ट पन्ना (पुरान भऽ सकैए)।</span>',
'specialpages-group-maintenance' => 'सुस्थापन प्रतिवेदन',
'ok' => 'OK',
'retrievedfrom' => 'Ditampa sekang "$1"',
'youhavenewmessages' => 'Rika duwe $1 ($2).',
-'newmessageslink' => 'pesen anyar',
-'newmessagesdifflink' => 'owahan keri dhewek',
'youhavenewmessagesfromusers' => 'Rika nduwe $1 sekang {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).',
'youhavenewmessagesmanyusers' => 'Rika nduwe $1 sekang akeh panganggo ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|pesen anyar|pesen anyar}}',
'preferences' => 'Preferensi',
'mypreferences' => 'Preferensi',
'prefs-edits' => 'Jumlah suntingan:',
-'prefsnologin' => 'Durung mlebu log',
-'prefsnologintext' => 'Rika kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}| mlebu log disit]</span> kanggo ngowahi préferènsine Rika.',
'changepassword' => 'Ganti tembung sandhi',
'prefs-skin' => 'Kulit',
'skin-preview' => 'Pratayang',
# External editor support
'edit-externally' => 'Sunting berkas kiye nganggo aplikasi jaba',
-'edit-externally-help' => '(Deleng [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
+'edit-externally-help' => '(Deleng [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] kanggo informasi sabanjuré)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kabèh',
'ok' => 'OK',
'retrievedfrom' => '"$1"ста сявф',
'youhavenewmessages' => 'Тонь ули $1 ($2).',
-'newmessageslink' => 'Од сёрмат',
-'newmessagesdifflink' => 'мекольце полафтома',
'youhavenewmessagesfromusers' => 'Тонь $1 {{PLURAL:$3|тага фкя тиить эзда|$3 тиихнень эзда}} ($2).',
'youhavenewmessagesmanyusers' => 'Тонь $1 лама тиихнень эзда ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|од сёрма|од сёрмат}}',
'preferences' => 'Арафнематне',
'mypreferences' => 'Монь латцемане',
'prefs-edits' => 'Петнематнень лувсна:',
-'prefsnologin' => 'Апак сувак',
-'prefsnologintext' => 'Тондейть эряви <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} сувамс]</span> тонь арафнематнень латцеманкса.',
'changepassword' => 'Сувама валть полафтомс',
'prefs-skin' => 'Ванфонь латцема',
'skin-preview' => 'Васень няфтема',
'allmessagesdefault' => 'Апак полафтт текст',
'allmessagescurrent' => 'Тяниень текст',
'allmessagestext' => 'Тя MediaWiki-са васьфневи системонь пачфтематнень лувомась.
-Эняльттяма, сувак [//www.mediawiki.org/wiki/Localisation MediaWiki Локализациес] ди [//translatewiki.net translatewiki.net-с] кда тонь мяльце тиемс эсь путксце марстонь MediaWiki локализациес.',
+Эняльттяма, сувак [https://www.mediawiki.org/wiki/Localisation MediaWiki Локализациес] ди [//translatewiki.net translatewiki.net-с] кда тонь мяльце тиемс эсь путксце марстонь MediaWiki локализациес.',
'allmessagesnotsupportedDB' => "Тя лопас аш кода кунцемс сяс мес '''\$wgUseDatabaseMessages'''лоткафоль.",
'allmessages-language' => 'Кяль:',
'allmessages-filter-submit' => 'Ётамс',
# External editor support
'edit-externally' => 'Петнемс тя файлть ушеширень програмонь вельде',
-'edit-externally-help' => '(Ванк [//www.mediawiki.org/wiki/Manual:External_editors арафнемань вятемовалсь] сяда лама содаманкса)',
+'edit-externally-help' => '(Ванк [https://www.mediawiki.org/wiki/Manual:External_editors арафнемань вятемовалсь] сяда лама содаманкса)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'сембе',
# Special:SpecialPages
'specialpages' => 'Башка лопат',
-'specialpages-note' => '----
-* Кърдань башка лопат.
+'specialpages-note' => '* Кърдань башка лопат.
* <strong class="mw-specialpagerestricted">Кардаф башка лопат.</strong>',
'specialpages-group-maintenance' => 'Латцема лувоматне',
'specialpages-group-other' => 'Иля башка тевонь лопатне',
'pagetitle' => '$1 - {{SITENAME}}',
'retrievedfrom' => 'Hita tao amin\'ny "$1"',
'youhavenewmessages' => 'Manana $1 ($2).',
-'newmessageslink' => 'hafatra vaovao',
-'newmessagesdifflink' => 'fanovana farany',
'youhavenewmessagesfromusers' => "Manana $1 avy amin'ny mpikambana {{PLURAL:$3|hafa|$3}} ($2).",
'youhavenewmessagesmanyusers' => "Manana $1 avy amin'ny mpikambana maro ($2).",
'newmessageslinkplural' => '{{PLURAL:$1|hafatra iray|hafatra maro}}',
'preferences' => 'Ny momba anao',
'mypreferences' => 'Safidy',
'prefs-edits' => 'isa ny fanovàna :',
-'prefsnologin' => 'Tsy tafiditra',
-'prefsnologintext' => 'Mila <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} misoratra ary tafiditra]</span> amin\'ny kaontinao ianao vao afaka manova ny safidinao.',
'changepassword' => 'Hanova tenimiafina',
'prefs-skin' => 'Endrika',
'skin-preview' => 'Tsipalotra',
'recentchanges-label-minor' => 'Kely fotsiny ity fanovana ity',
'recentchanges-label-bot' => "Nataon'ny rôbô ity fanovana ity.",
'recentchanges-label-unpatrolled' => 'Ity fanovana ity dia mbola tsy voamarina',
+'recentchanges-legend-newpage' => '$1 - pejy vaovao',
'rcnote' => "!Ity ny {{PLURAL:$1|fanovàna farany|fanovàna farany}} $1 natao nandritra ny <b>$2</b> andro, hatramin'ny $4 tamin'ny ora faha $5.",
'rcnotefrom' => "Ity eto ambany ity ny lisitry ny vao niova manomboka ny <b>$2</b> (hatramin'ny <b>$1</b> no miseho).",
'rclistfrom' => 'Asehoy izay vao niova manomboka ny $1',
'allmessagesdefault' => 'Dikan-teny tany am-boalohany',
'allmessagescurrent' => 'Dikan-teny miasa ankehitriny',
'allmessagestext' => "Ity dia lisitry ny hafatra hita ao amin'ny anaran-tsehatra MediaWiki.
-Andana vangio ny [//www.mediawiki.org/wiki/Localisation Fandikana an'i Mediawiki] ary [//translatewiki.net/ translatewiki.net] raha tia handray anjara amin'ny fandikana an'i Mediawiki amin'ny ankapobeny.",
+Andana vangio ny [https://www.mediawiki.org/wiki/Localisation Fandikana an'i Mediawiki] ary [//translatewiki.net/ translatewiki.net] raha tia handray anjara amin'ny fandikana an'i Mediawiki amin'ny ankapobeny.",
'allmessagesnotsupportedDB' => "Tsy mbola mandeha ny '''{{ns:special}}:Allmessages''' satria tsy mandeha koa ny '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Tantavanina',
'allmessages-filter' => 'Hanasivana araka ny satam-panovana :',
# External editor support
'edit-externally' => "Ovao amin'ny alalan'ny fampiasana fitaovana ivelan'ity Wiki ity io rakitra io",
-'edit-externally-help' => "jereo any amin'[//www.mediawiki.org/wiki/Manual:External_editors ny torolalana] ny fanazavana fanampiny,.",
+'edit-externally-help' => "jereo any amin'[https://www.mediawiki.org/wiki/Manual:External_editors ny torolalana] ny fanazavana fanampiny,.",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'rehetra',
'errorpagetitle' => 'Йоҥылыш',
'returnto' => '$1 деке пӧртылаш.',
'tagline' => '{{SITENAME}} гыч',
-'help' => 'Полшык',
+'help' => 'Полшыш',
'search' => 'Кычалмаш',
'searchbutton' => 'Кычалаш',
'go' => 'Куснаш',
'userpage' => 'Пайдаланышын лаштыкым ончалаш',
'imagepage' => 'Файлын лаштыкым ончалаш',
'templatepage' => 'Ямдылыкын лаштыкым ончалаш',
-'viewhelppage' => 'Ð\9fолÑ\88Ñ\8bк лаштыкым ончалаш',
+'viewhelppage' => 'Ð\9fолÑ\8bÑ\88 лаштыкым ончалаш',
'categorypage' => 'Категорийын лаштыкым ончалаш',
'viewtalkpage' => 'Ончалаш каҥашымашым',
'otherlanguages' => 'Вес йылме дене',
'ok' => 'Йӧра',
'retrievedfrom' => 'Налме вер — "$1"',
'youhavenewmessages' => 'Тендан $1 уло ($2).',
-'newmessageslink' => 'У серыш',
-'newmessagesdifflink' => 'пытартыш тӧрлатымаш',
'editsection' => 'тӧрлаташ',
'editold' => 'тӧрлаташ',
'viewsourceold' => 'тӱҥалтыш текстым ончалаш',
'createacct-yourpasswordagain-ph' => 'Шолыпмутым угыч пурто',
'remembermypassword' => 'Тиде компьютерыште мыйым шарнаш (эн шуко $1 {{PLURAL:$1|кечылан|кечылан}})',
'yourdomainname' => 'Тендан домен:',
-'login' => 'Шке денет палымым ыште',
+'login' => 'Шке денет палдаре',
'nav-login-createaccount' => 'Пураш/Регистрацийым эрте',
-'loginprompt' => '{{SITENAME}} Ñ\82Ñ\8bй денеÑ\82 палÑ\8bме лиймаÑ\88лан, cookies Ñ\87ӱкÑ\82алÑ\82Ñ\8bн Ñ\83лÑ\88аÑ\88.',
-'userlogin' => 'Шке денеÑ\82 палÑ\8bмÑ\8bм Ñ\8bÑ\88Ñ\82е/РегиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82е',
+'loginprompt' => '{{SITENAME}} Ñ\88ке денеÑ\82 палдаÑ\80Ñ\8bме деÑ\87 онÑ\87Ñ\8bÑ\87 компÑ\8cÑ\8eÑ\82еÑ\80Ñ\8bÑ\88Ñ\82еÑ\82 «cookies»-Ñ\8bм Ñ\87ӱкÑ\82Ñ\8bман.',
+'userlogin' => 'Ð\9fÑ\83Ñ\80аÑ\88/РегиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82аÑ\88',
'logout' => 'Лекташ',
'userlogout' => 'Лекташ',
'nologin' => "Тый регистрацийым эше эртен отыл? '''$1'''.",
'nologinlink' => 'Регистрацийым эрте',
'createaccount' => 'Регистрацийым эрте',
'gotaccount' => "Тый регистрацийым эртенат? '''$1'''.",
-'gotaccountlink' => 'Шке денет палымым ыште',
+'gotaccountlink' => 'Шке денет палдаре',
'userlogin-resetlink' => 'Лӱмдам але шолыпмутдам монденда?',
'userlogin-resetpassword-link' => 'Шолыпмутым монденат?',
'createaccountmail' => 'Кӱчык жаплан чокым ыштыме шолыпмутым мылам e-mail дене колташ',
'recentchanges-label-minor' => 'Тиде изи тӧрлатымаш',
'recentchanges-label-bot' => 'Тиде тӧрлатымашым бот ыштен',
'recentchanges-label-unpatrolled' => 'Тиде тӧрлатымашым нигӧ терген огыл',
+'recentchanges-legend-newpage' => '$1 - у лаштык',
'rcnote' => "Ӱлнӧ {{PLURAL:$1|'''1'''|'''$1'''}} вашталтыш пытартыш {{PLURAL:$2||'''$2'''}} кечылан, $5-лан, $4-лан.",
'rcnotefrom' => "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
'rclistfrom' => '$1 гыч тӱҥалын у вашталтымашым ончыкташ',
'tooltip-pt-preferences' => 'Мыйын келыштарымашем',
'tooltip-pt-watchlist' => 'Мыйын эскерыме лаштык-влак лӱмер',
'tooltip-pt-mycontris' => 'Тыйын пашатым эскерыме лаштык',
-'tooltip-pt-login' => 'Шке денеÑ\82 палÑ\8bмÑ\8bм Ñ\8bÑ\88Ñ\82еÑ\82 гÑ\8bн Ñ\81айÑ\80ак лиеÑ\88; Ñ\82акÑ\88Ñ\8bм Ñ\82идÑ\8bм Ñ\8bÑ\88Ñ\82Ñ\8bдеаÑ\82 кеÑ\80Ñ\82аÑ\82.',
+'tooltip-pt-login' => 'ТÑ\8bÑ\88Ñ\82е Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86ийÑ\8bм Ñ\8dÑ\80Ñ\82ен кеÑ\80Ñ\82аÑ\82. РегиÑ\81Ñ\82Ñ\80аÑ\86ий деÑ\87 поÑ\81нааÑ\82 паÑ\88ам Ñ\8bÑ\88Ñ\82аÑ\88 лиеÑ\88.',
'tooltip-pt-logout' => 'Системе гыч лекташ',
'tooltip-ca-talk' => 'Лаштыкыште возымым каҥашаш',
'tooltip-ca-edit' => 'Тый тиде лаштыкым тӧрлатен кертат. Лаштыкым аралыме деч ончыч тудым тергаш ит мондо.',
'tooltip-n-currentevents' => 'Мо лийме нерген нерген пытартыш увер',
'tooltip-n-recentchanges' => 'Пытартыш вашталтымаш лӱмер',
'tooltip-n-randompage' => 'Лаштыкым чокым ойыраш',
-'tooltip-n-help' => 'Ð\92икипедийÑ\8bм кÑ\83Ñ\87Ñ\8bлÑ\82мо да Ñ\82Ó§Ñ\80лаÑ\82Ñ\8bме Ñ\88оÑ\82Ñ\8bÑ\88Ñ\82о полÑ\88Ñ\8bк.',
+'tooltip-n-help' => 'Ð\92икипедийÑ\8bм кÑ\83Ñ\87Ñ\8bлÑ\82мо да Ñ\82Ó§Ñ\80лаÑ\82Ñ\8bме Ñ\88оÑ\82Ñ\8bÑ\88Ñ\82о полÑ\8bÑ\88.',
'tooltip-t-whatlinkshere' => 'Тышке кондышо лаштык-влакын лӱмерышт',
'tooltip-t-recentchangeslinked' => 'Тиде лаштык дене кылдалтше пытартыш тӧрлатымаш-влак',
'tooltip-feed-rss' => 'Тиде лаштыклан RSS-кыл',
# External editor support
'edit-externally' => 'Файлым ӧрдыж программыште тӧрлаташ',
-'edit-externally-help' => '(Сайрак палашлан ончал [//www.mediawiki.org/wiki/Manual:External_editors шындымаш нерген туныктымашым])',
+'edit-externally-help' => '(Сайрак палашлан ончал [https://www.mediawiki.org/wiki/Manual:External_editors шындымаш нерген туныктымашым])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'чыла',
#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Йӧра',
+'expand_templates_preview' => 'Ончылгоч ончымаш',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Didapek dari "$1"',
'youhavenewmessages' => 'Sanak punyo $1 ($2).',
-'newmessageslink' => 'pasan baru',
-'newmessagesdifflink' => 'parubahan tarakhia',
'youhavenewmessagesfromusers' => 'Sanak mandapek $1 dari {{PLURAL:$3|$3 pangguno}} ($2)',
'youhavenewmessagesmanyusers' => 'Sanak mandapek $1 dari banyak pangguno ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|pasan baru}}',
'preferences' => 'Pangaturan',
'mypreferences' => 'Pangaturan',
'prefs-edits' => 'Jumlah suntiangan:',
-'prefsnologin' => 'Alun masuak log',
-'prefsnologintext' => 'Sanak musti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} masuak log]</span> untuak mengeset pangaturan.',
'changepassword' => 'Tuka kato sandi',
'prefs-skin' => 'Kulik',
'skin-preview' => 'Caliak',
# External editor support
'edit-externally' => 'Suntiang berkas ko jo aplikasi lua',
-'edit-externally-help' => '(Caliak [//www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] untuak informasi lanjuiknyo)',
+'edit-externally-help' => '(Caliak [https://www.mediawiki.org/wiki/Manual:External_editors instruksi pangaturan] untuak informasi lanjuiknyo)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kasadonyo',
'version-other' => 'Lain-lain',
'version-version' => '(Versi $1)',
'version-license' => 'Lisensi',
-'version-poweredby-credits' => "Wiki ko didukuang jo '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ko didukuang jo '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
'version-poweredby-others' => 'lainnyo',
'version-credits-summary' => 'Kami nio mangakui urang-urang ko ateh kontribusinyo pado [[Special:Version|MediaWiki]].',
'version-license-info' => 'MediaWiki adolah parangkaik lunak bebas; Sanak dapek mandistribusian dan/atau mamodfikasinyo jo syaraik Lisensi Publik Umum GNU nan dikaluaan dek Free Software Foundation; versi 2 atau nan tabaru.
# Special:SpecialPages
'specialpages' => 'Laman istimewa',
-'specialpages-note' => '----
-* Laman istimewa normal.
+'specialpages-note' => '* Laman istimewa normal.
* <span class="mw-specialpagerestricted">Laman istimewa talarang.</span>
* <span class="mw-specialpagecached">Laman istimewa tasinggah (mungkin usang).</span>',
'specialpages-group-maintenance' => 'Laporan pamaliharoan',
# Image rotation
'rotate-comment' => 'Gambar diputa $1 {{PLURAL:$1|darajaik}} saarah jarum jam',
+# Special:ExpandTemplates
+'expandtemplates' => 'Pangambangan templat',
+'expand_templates_input' => 'Teks masuakan:',
+'expand_templates_output' => 'Hasil',
+'expand_templates_xml_output' => 'Hasil XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Hapuih komentar',
+'expand_templates_preview' => 'Pratonton',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Преземено од „$1“',
'youhavenewmessages' => 'Имате $1 ($2).',
-'newmessageslink' => 'нови пораки',
-'newmessagesdifflink' => 'скорешна промена',
'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|еден корисник|$3 корисници}} ($2).',
'youhavenewmessagesmanyusers' => 'Имате $1 од многу корисници ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|нова порака|нови пораки}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промена|последни промени}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промена|999=последни промени}}',
'youhavenewmessagesmulti' => 'Имате нови пораки на $1',
'editsection' => 'уреди',
'editold' => 'уреди',
'invalidtitle-knownnamespace' => 'Неважечки наслов со именски простор „$2“ и текст „$3“',
'invalidtitle-unknownnamespace' => 'Неважечки наслов со именски простор бр. $1 и текст „$2“',
'exception-nologin' => 'Не сте најавени',
-'exception-nologin-text' => 'Оваа страница или постапка бара да сте најавени на викито.',
+'exception-nologin-text' => '[[Special:Userlogin|Најавете се]] за да добиете пристап до страницата или дејството.',
+'exception-nologin-text-manual' => 'Треба да сте $1 за да имате пристап до страницата или дејството.',
# Virus scanner
'virus-badscanner' => "Лоша поставка: непознат проверувач на вируси: ''$1''",
'revdelete-text' => "'''Избришаните измени и настани сѐ уште ќе се појавуваат во историјата на страницата и дневниците, но делови од нивната содржина ќе бидат недостапни за јавноста.'''
Други администратори на {{SITENAME}} сѐ уште ќе имаат пристап до скриената содржина и ќе можат да ја вратат преку истиот посредник, освен ако не се поставени дополнителни ограничувања.",
'revdelete-confirm' => 'Потврдете дека сакате да го направите ова, дека ги сфаќате последиците, и дека тоа го правите во согласност со [[{{MediaWiki:Policy-url}}|правилата]].',
-'revdelete-suppress-text' => "Ограничувањето '''се користи''' само во следниве случаи:
+'revdelete-suppress-text' => "Притајувањето се користи '''само''' во следниве случаи:
+* Потенцијално клеветнички информации
* Несоодветни лични информации
-*: ''домашни адреси и телефонски броеви, матични броеви, и.т.н.''",
+*: ''домашни адреси и телефонски броеви, матични броеви и тн.''",
'revdelete-legend' => 'Постави ограничувања за видливост',
'revdelete-hide-text' => 'Текст на ревизијата',
'revdelete-hide-image' => 'Скриј содржина на податотека',
'revdelete-hide-user' => 'Корисничко име/IP-адреса на уредникот',
'revdelete-hide-restricted' => 'Постави ограничувања и за администратори на ист начин како и за останатите',
'revdelete-radio-same' => '(не менувај)',
-'revdelete-radio-set' => 'Ð\92идлива',
-'revdelete-radio-unset' => 'СкÑ\80иена',
+'revdelete-radio-set' => 'СкÑ\80иена',
+'revdelete-radio-unset' => 'Ð\92идлива',
'revdelete-suppress' => 'Притајувај податоци и од администраторите',
'revdelete-unsuppress' => 'Отстрани ограничувања на обновени ревизии',
'revdelete-log' => 'Причина:',
'preferences' => 'Нагодувања',
'mypreferences' => 'нагодувања',
'prefs-edits' => 'Број на уредувања:',
-'prefsnologin' => 'Не сте најавени',
-'prefsnologintext' => 'Мора да бидете <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} најавени]</span> за да ги менувате вашите кориснички нагодувања.',
+'prefsnologintext2' => 'Треба да сте $1 за да можете да ги поставувате корисничките нагодувања.',
'changepassword' => 'Смени лозинка',
'prefs-skin' => 'Руво',
'skin-preview' => 'Преглед',
'recentchanges-label-minor' => 'Ова е ситна промена',
'recentchanges-label-bot' => 'Ова уредување е направено од бот',
'recentchanges-label-unpatrolled' => 'Ова уредување сè уште не е испатролирано',
+'recentchanges-legend-newpage' => '$1 - нова страница',
'rcnote' => "Подолу {{PLURAL:$1|е прикажана '''1''' промена|се прикажани последните '''$1''' промени}} {{PLURAL:$2|за денес|во последниве '''$2''' дена}}, заклучно со $5, $4.",
'rcnotefrom' => 'Подолу се промените од <b>$2</b> (се прикажуваат до <b>$1</b>).',
'rclistfrom' => 'Прикажи нови промени почнувајќи од $1',
е-пошта: $PAGEEDITOR_EMAIL
вики: $PAGEEDITOR_WIKI
-Ð\9fовеÑ\9cе нема да добиваÑ\82е извеÑ\81Ñ\82Ñ\83ваÑ\9aа во Ñ\81лÑ\83Ñ\87аÑ\98 на дÑ\80Ñ\83ги понаÑ\82амоÑ\88ни пÑ\80омени, оÑ\81вен ако не Ñ\98а поÑ\81еÑ\82иÑ\82е оваа Ñ\81Ñ\82Ñ\80аниÑ\86а.
+Ð\9fовеÑ\9cе нема да добиваÑ\82е извеÑ\81Ñ\82Ñ\83ваÑ\9aа во Ñ\81лÑ\83Ñ\87аÑ\98 на дÑ\80Ñ\83ги понаÑ\82амоÑ\88ни акÑ\82ивноÑ\81Ñ\82и, оÑ\81вен ако не Ñ\98а поÑ\81еÑ\82иÑ\82е оваа Ñ\81Ñ\82Ñ\80аниÑ\86а додека Ñ\81Ñ\82е наÑ\98авени.
Можете и да ги поништите ознаките за известување за сите набљудувани страници на вашиот список на набљудувања.
Известителниот систем на {{SITENAME}}
'allmessagesdefault' => 'Текст по основно',
'allmessagescurrent' => 'Сегашен текст',
'allmessagestext' => 'Ова е список на системските пораки расположиви за именскиот простор „МедијаВики“.
-Одете на [//www.mediawiki.org/wiki/Localisation Локализација на МедијаВики] и [//translatewiki.net translatewiki.net] ако сакате да придонесете кон општата локализација на МедијаВики.',
+Одете на [https://www.mediawiki.org/wiki/Localisation Локализација на МедијаВики] и [//translatewiki.net translatewiki.net] ако сакате да придонесете кон општата локализација на МедијаВики.',
'allmessagesnotsupportedDB' => "Оваа страница не може да се користи бидејќи '''\$wgUseDatabaseMessages''' е исклучено.",
'allmessages-filter-legend' => 'Филтер',
'allmessages-filter' => 'Филтрирај по состојба на прилагодувањето:',
'tooltip-undo' => '„Откажи“ го поништува ова уредување и ве носи на уредувањето во режим на преглед. Дава можност за наведување на причина во описот.',
'tooltip-preferences-save' => 'Зачувај',
'tooltip-summary' => 'Внесете краток опис',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
# Stylesheets
'common.css' => '/* Тука поставениот CSS ќе се применува врз сите рува */',
'pageinfo-length' => 'Должина на страницата (во бајти)',
'pageinfo-article-id' => 'Назнака на страницата',
'pageinfo-language' => 'Јазик на содржината на страницата',
+'pageinfo-content-model' => 'Модел на содржината на страницата',
'pageinfo-robot-policy' => 'Индексирање со роботи',
'pageinfo-robot-index' => 'Дозволено',
'pageinfo-robot-noindex' => 'Недозволено',
'svg-long-desc' => 'SVG податотека, номинално $1 × $2 пиксели, големина: $3',
'svg-long-desc-animated' => 'Анимирана SVG-податотека, номинално: $1 × $2 пиксели, големина: $3',
'svg-long-error' => 'Неважечка SVG-податотека: $1',
-'show-big-image' => 'Ð\92иÑ\81Ñ\82инÑ\81ка големина',
+'show-big-image' => 'Ð\98звоÑ\80на подаÑ\82оÑ\82ека',
'show-big-image-preview' => 'Големина на овој преглед: $1.',
'show-big-image-other' => '{{PLURAL:$2|Друга резолуција|Други резолуции}}: $1.',
'show-big-image-size' => '$1 × $2 пиксели',
# External editor support
'edit-externally' => 'Уреди ја податотеката со надворешен програм',
-'edit-externally-help' => '(Видете [//www.mediawiki.org/wiki/Manual:External_editors повеќе напатствија] за нагодувањето).',
+'edit-externally-help' => '(Видете [https://www.mediawiki.org/wiki/Manual:External_editors повеќе напатствија] за нагодувањето).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'сите',
# Separators for various lists, etc.
'percent' => '$1 %',
+'quotation-marks' => '„$1“',
# Multipage image navigation
'imgmultipageprev' => '← претходна страница',
'version-version' => '(Верзија $1)',
'version-svn-revision' => '(рев. $2)',
'version-license' => 'Лиценца',
-'version-poweredby-credits' => "Ова вики работи на '''[//www.mediawiki.org/ МедијаВики]''', авторски права © 2001-$1 $2.",
+'version-poweredby-credits' => "Ова вики работи на '''[https://www.mediawiki.org/ МедијаВики]''', авторски права © 2001-$1 $2.",
'version-poweredby-others' => 'други',
'version-poweredby-translators' => 'преведувачи на translatewiki.net',
'version-credits-summary' => 'Би сакале да им се заблагодариме на следниве лица за нивните придонеси кон [[Special:Version|МедијаВики]].',
# Special:SpecialPages
'specialpages' => 'Специјални страници',
-'specialpages-note' => '----
-* Нормални специјални страници.
-* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>
-* <span class="mw-specialpagecached">Кеширани специјални страници (може да се застарени).</span>',
+'specialpages-note-top' => 'Легенда',
+'specialpages-note' => '* Нормални специјални страници.
+* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>',
'specialpages-group-maintenance' => 'Извештаи за одржување',
'specialpages-group-other' => 'Други специјални страници',
'specialpages-group-login' => 'Најава / регистрација',
'limitreport-expansiondepth' => 'Најголема длабочина на проширувањето',
'limitreport-expensivefunctioncount' => 'Бр. на сложени парсерски функции',
+# Special:ExpandTemplates
+'expandtemplates' => 'Прошири шаблони',
+'expand_templates_intro' => 'Оваа специјална страница зема еден текст и рекурзивно ги проширува сите шаблони во него.
+Исто така проширува и парсерски функции како
+<code><nowiki>{{</nowiki>#language:…}}</code> и променливи како
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Всушност, го проширува сето она што стои во двојни аглести загради.',
+'expand_templates_title' => 'Наслов на контекстот, за {{FULLPAGENAME}} и тн.:',
+'expand_templates_input' => 'Влезен текст:',
+'expand_templates_output' => 'Извод',
+'expand_templates_xml_output' => 'XML излез',
+'expand_templates_ok' => 'ОК',
+'expand_templates_remove_comments' => 'Отстрани коментари',
+'expand_templates_remove_nowiki' => 'Притаи <nowiki> ознаки во резултатот',
+'expand_templates_generate_xml' => 'Прикажи XML дрво на парсирање',
+'expand_templates_preview' => 'Преглед',
+
);
* @file
*
* @author Abhishek Jacob
+ * @author Akhilan
* @author Anoopan
* @author Chrisportelli
* @author Deepugn
'ok' => 'ശരി',
'retrievedfrom' => '"$1" എന്ന താളിൽനിന്നു ശേഖരിച്ചത്',
'youhavenewmessages' => 'താങ്കൾക്ക് $1 ഉണ്ട് ($2).',
-'newmessageslink' => 'പുതിയ സന്ദേശങ്ങൾ',
-'newmessagesdifflink' => 'അവസാന മാറ്റം',
'youhavenewmessagesfromusers' => 'താങ്കൾക്ക് {{PLURAL:$3|ഒരു ഉപയോക്താവ്|$3 ഉപയോക്താക്കൾ}} $1 ചേർത്തിട്ടുണ്ട് ($2).',
'youhavenewmessagesmanyusers' => 'താങ്കൾക്ക് പലർ $1 ചേർത്തിട്ടുണ്ട് ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|à´ªàµ\81തിയ സനàµ\8dà´¦àµ\87à´¶à´\82|പുതിയ സന്ദേശങ്ങൾ}}',
-'newmessagesdifflinkplural' => 'അവസാന {{PLURAL:$1|മാറ്റം|മാറ്റങ്ങൾ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|à´ªàµ\81തിയ à´\92à´°àµ\81 സനàµ\8dà´¦àµ\87à´¶à´\82|999=പുതിയ സന്ദേശങ്ങൾ}}',
+'newmessagesdifflinkplural' => 'അവസാന {{PLURAL:$1|മാറ്റം|999=മാറ്റങ്ങൾ}}',
'youhavenewmessagesmulti' => 'താങ്കൾക്ക് $1 താളിൽ പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്',
'editsection' => 'തിരുത്തുക',
'editold' => 'തിരുത്തുക',
'invalidtitle-knownnamespace' => 'നാമമേഖല "$2", എഴുത്ത് "$3" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
'invalidtitle-unknownnamespace' => 'അപരിചിതമായ നാമമേഖലാ സംഖ്യ $1, എഴുത്ത് "$2" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
'exception-nologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
-'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കേണ്ടതാണ്.',
+'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ ദയവായി [[Special:Userlogin|പ്രവേശിക്കുക]].',
+'exception-nologin-text-manual' => 'ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ഉപയോഗിക്കാൻ ദയവായി $1.',
# Virus scanner
'virus-badscanner' => "തെറ്റായ ക്രമീകരണങ്ങൾ: അപരിചിതമായ വൈറസ് തിരച്ചിൽ ഉപാധി : ''$1''",
# Login and logout pages
'logouttext' => "'''താങ്കൾ ഇപ്പോൾ {{SITENAME}} സംരംഭത്തിൽനിന്നും ലോഗൗട്ട് ചെയ്തിരിക്കുന്നു'''
-താà´\99àµ\8dà´\95ൾ à´µàµ\86à´¬àµ\8d à´¬àµ\8dà´°àµ\8cസറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
+താà´\99àµ\8dà´\95ൾ à´µàµ\86à´¬àµ\8d à´¬àµ\8dà´°àµ\97സറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
'welcomeuser' => 'സ്വാഗതം, $1!',
'welcomecreation-msg' => 'താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
താങ്കളുടെ [[Special:Preferences|{{SITENAME}} ക്രമീകരണങ്ങളിൽ]] മാറ്റം വരുത്താൻ മറക്കരുത്.',
'revdelete-hide-user' => 'തിരുത്തുന്ന ആളുടെ ഉപയോക്തൃനാമം/ഐ.പി. വിലാസം',
'revdelete-hide-restricted' => 'വിവരങ്ങളുടെ നിയന്ത്രണം മറ്റുള്ളവരെ പോലെ കാര്യനിർവാഹകർക്കും ബാധകമാക്കുക',
'revdelete-radio-same' => '(മാറ്റം വരുത്തരുത്)',
-'revdelete-radio-set' => 'à´\95ാണണà´\82',
-'revdelete-radio-unset' => 'മറയàµ\8dà´\95àµ\8dà´\95à´£à´\82',
+'revdelete-radio-set' => 'മറയàµ\8dà´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´µ',
+'revdelete-radio-unset' => 'à´\95ാണാവàµ\81à´¨àµ\8dനവ',
'revdelete-suppress' => 'സിസോപ്പുകളിൽ നിന്നും മറ്റുള്ളവരിൽ നിന്നും ഈ ഡാറ്റാ മറച്ചു വെക്കുക',
'revdelete-unsuppress' => 'പുനഃസ്ഥാപിച്ച പതിപ്പുകളിലുള്ള നിയന്ത്രണങ്ങൾ ഒഴിവാക്കുക',
'revdelete-log' => 'കാരണം:',
'preferences' => 'ക്രമീകരണങ്ങൾ',
'mypreferences' => 'ക്രമീകരണങ്ങൾ',
'prefs-edits' => 'ആകെ തിരുത്തുകൾ:',
-'prefsnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
-'prefsnologintext' => 'ഉപയോക്തൃക്രമീകരണങ്ങൾ മാറ്റാൻ താങ്കൾ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ലോഗിൻ]</span> ചെയ്തിരിക്കണം.',
+'prefsnologintext2' => 'താങ്കളുടെ ഉപയോക്തൃക്രമീകരണങ്ങൾ സജ്ജീകരിക്കാൻ ദയവായി $1.',
'changepassword' => 'രഹസ്യവാക്ക് മാറ്റുക',
'prefs-skin' => 'ദൃശ്യരൂപം',
'skin-preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക',
'recentchanges-label-minor' => 'ഇതൊരു ചെറിയ തിരുത്താണ്',
'recentchanges-label-bot' => 'ഇതൊരു യന്ത്രം നടത്തിയ തിരുത്താണ്',
'recentchanges-label-unpatrolled' => 'ഇതുവരെ റോന്തു ചുറ്റപ്പെടാത്ത ഒരു തിരുത്താണിത്',
+'recentchanges-legend-newpage' => '$1 - പുതിയ താൾ',
'rcnote' => "കഴിഞ്ഞ {{PLURAL:$2|ദിവസം|'''$2''' ദിവസങ്ങൾക്കുള്ളിൽ}} സംഭവിച്ച, {{PLURAL:$1|'''1''' തിരുത്തൽ|'''$1''' തിരുത്തലുകൾ}} താഴെക്കാണാം. ശേഖരിച്ച സമയം: $4, $5.",
'rcnotefrom' => '<b>$2</b> മുതലുള്ള മാറ്റങ്ങൾ (<b>$1</b> എണ്ണം വരെ കാണാം).',
'rclistfrom' => '$1 മുതലുള്ള മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക',
'pageswithprop' => 'താളിന്റെ സവിശേഷതകളുള്ള താളുകൾ',
'pageswithprop-legend' => 'ഒരു താൾ സവിശേഷതയുള്ള താളുകൾ',
+'pageswithprop-prop' => 'ഗുണം:',
'pageswithprop-submit' => 'പോകൂ',
'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ',
മെയിൽ: $PAGEEDITOR_EMAIL
വിക്കി: $PAGEEDITOR_WIKI
-താങ്കൾ ഈ താൾ സന്ദർശിക്കുന്നില്ലങ്കിൽ മറ്റ് അറിയിപ്പുകൾ ഒന്നുമുണ്ടാകുന്നതല്ല. ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക സന്ദർശിച്ചും ഉൾപ്പെട്ട താളുകളിലെ അറിയിപ്പ് മുദ്രകൾ താങ്കൾക്ക് പുനഃക്രമീകരിക്കാവുന്നതാണ്.
- താങ്കളുടെ {{SITENAME}} സുഹൃദ് അറിയിപ്പ് സജ്ജീകരണം
+താങ്കൾ ലോഗിൻ ചെയ്ത് ഈ താൾ സന്ദർശിക്കുന്നില്ലങ്കിൽ മറ്റ് അറിയിപ്പുകൾ ഒന്നുമുണ്ടാകുന്നതല്ല. ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക സന്ദർശിച്ചും ഉൾപ്പെട്ട താളുകളിലെ അറിയിപ്പ് മുദ്രകൾ താങ്കൾക്ക് പുനഃക്രമീകരിക്കാവുന്നതാണ്.
+
+താങ്കളുടെ {{SITENAME}} സുഹൃദ് അറിയിപ്പ് സജ്ജീകരണം
--
ഇമെയിൽ അറിയിപ്പ് സജ്ജീകരണങ്ങളിൽ മാറ്റംവരുത്താൻ, സന്ദർശിക്കുക
'allmessagesdefault' => 'സ്വതേയുള്ള ഉള്ളടക്കം',
'allmessagescurrent' => 'നിലവിലുള്ള ഉള്ളടക്കം',
'allmessagestext' => 'ഇത് മീഡിയവിക്കി നാമമേഖലയിൽ ലഭ്യമായ വ്യവസ്ഥാസന്ദേശങ്ങളുടെ ഒരു പട്ടിക ആണ്.
-പ്രാമാണികമായ വിധത്തിൽ മീഡിയവിക്കിയുടെ പ്രാദേശീകരണം താങ്കൾ ഉദ്ദേശിക്കുന്നുവെങ്കിൽ ദയവായി [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net] എന്നീ താളുകൾ സന്ദർശിക്കുക.',
+പ്രാമാണികമായ വിധത്തിൽ മീഡിയവിക്കിയുടെ പ്രാദേശീകരണം താങ്കൾ ഉദ്ദേശിക്കുന്നുവെങ്കിൽ ദയവായി [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net] എന്നീ താളുകൾ സന്ദർശിക്കുക.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ബന്ധിച്ചിരിക്കുന്നതു കാരണം ഈ താൾ ഉപയോഗിക്കുവാൻ സാദ്ധ്യമല്ല.",
'allmessages-filter-legend' => 'അരിപ്പ',
'allmessages-filter' => 'പുനഃക്രമീകരിച്ച ക്രമത്തിൽ തിരഞ്ഞുവെയ്ക്കുക:',
'pageinfo-length' => 'താളിന്റെ നീളം (ബൈറ്റിൽ)',
'pageinfo-article-id' => 'താളിന്റെ ഐ.ഡി.',
'pageinfo-language' => 'താളിന്റെ ഉള്ളടക്കത്തിന്റെ ഭാഷ',
+'pageinfo-content-model' => 'താളിന്റെ ഉള്ളടക്ക രീതി',
'pageinfo-robot-policy' => 'റോബോട്ടുകളുടെ സൂചികാവത്കരണം',
'pageinfo-robot-index' => 'അനുവദിച്ചിരിക്കുന്നു',
'pageinfo-robot-noindex' => 'അനുവദിച്ചിട്ടില്ല',
'svg-long-desc' => 'എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
'svg-long-desc-animated' => 'ചലിക്കുന്ന എസ്.വി.ജി. പ്രമാണം, നാമമാത്രമായ $1 × $2 പിക്സലുകൾ, പ്രമാണത്തിന്റെ വലിപ്പം: $3',
'svg-long-error' => 'അസാധുവായ എസ്.വി.ജി. പ്രമാണം: $1',
-'show-big-image' => 'à´ªàµ\82ർണàµ\8dà´£ à´±àµ\86സലàµ\82ഷൻ',
+'show-big-image' => 'à´ªàµ\82ർണàµ\8dà´£ വലിപàµ\8dà´ªà´\82',
'show-big-image-preview' => 'ഈ പ്രിവ്യൂവിന്റെ വലിപ്പം: $1.',
'show-big-image-other' => 'കൂടുതൽ {{PLURAL:$2|റെസലൂഷൻ}}: $1.',
'show-big-image-size' => '$1 × $2 പിക്സലുകൾ',
# External editor support
'edit-externally' => 'ഈ പ്രമാണം ഒരു ബാഹ്യ ആപ്ലിക്കേഷൻ ഉപയോഗിച്ച് തിരുത്തുക',
-'edit-externally-help' => '(കൂടുതൽ വിവരത്തിനു //www.mediawiki.org/wiki/Manual:External_editors കാണുക)',
+'edit-externally-help' => '(കൂടുതൽ വിവരത്തിനു [https://www.mediawiki.org/wiki/Manual:External_editors സജ്ജമാക്കൽ നിർദ്ദേശങ്ങൾ] കാണുക)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'എല്ലാം',
'limitall' => 'എല്ലാം',
# Email address confirmation
-'confirmemail' => 'ഇ-മെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ',
+'confirmemail' => 'ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ',
'confirmemail_noemail' => '[[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളുടെ കൂടെ]] സാധുവായൊരു ഇ-മെയിൽ വിലാസം സജ്ജീകരിച്ചിട്ടില്ല.',
'confirmemail_text' => '{{SITENAME}} സംരംഭത്തിൽ ഇ-മെയിൽ സൗകര്യം ഉപയോഗിക്കണമെങ്കിൽ താങ്കൾ താങ്കളുടെ ഇ-മെയിൽ വിലാസത്തിന്റെ സാധുത തെളിയിച്ചിരിക്കണം. താങ്കളുടെ ഇ-മെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണ മെയിൽ അയക്കുവാൻ താഴെയുള്ള ബട്ടൺ അമർത്തുക. താങ്കൾക്ക് അയക്കുന്ന ഇ-മെയിലിൽ ഒരു സ്ഥിരീകരണ കോഡ് ഉണ്ട്. ആ കോഡിൽ അമർത്തിയാൽ താങ്കളുടെ വിലാസത്തിന്റെ സാധുത തെളിയിക്കപ്പെടും.',
'confirmemail_pending' => 'താങ്കളുടെ അംഗത്വം ഈ അടുത്ത് ഉണ്ടാക്കിയതാണെങ്കിൽ, ഒരു സ്ഥിരീകരണ കോഡ് താങ്കൾക്ക് ഇ-മെയിൽ ചെയ്തിട്ടുണ്ട്. പുതിയ സ്ഥിരീകരണ കോഡ് ആവശ്യപ്പെടാൻ ശ്രമിക്കുന്നതിനു മുൻപ് ആദ്യത്തെ സ്ഥിരീകരണ കോഡിനായി കുറച്ച് സമയം കാത്തിരിക്കൂ.',
'version-hook-subscribedby' => 'വരിക്കാരനായത്',
'version-version' => '(പതിപ്പ് $1)',
'version-license' => 'അനുമതി',
-'version-poweredby-credits' => "ഈ വിക്കി പ്രവർത്തിക്കാൻ '''[//www.mediawiki.org/ മീഡിയവിക്കി]''' ഉപയോഗിക്കുന്നു. പകർപ്പവകാശം © 2001-$1 $2.",
+'version-poweredby-credits' => "ഈ വിക്കി പ്രവർത്തിക്കാൻ '''[https://www.mediawiki.org/ മീഡിയവിക്കി]''' ഉപയോഗിക്കുന്നു. പകർപ്പവകാശം © 2001-$1 $2.",
'version-poweredby-others' => 'മറ്റുള്ളവർ',
'version-poweredby-translators' => 'പരിഭാഷാവിക്കിയിലെ പരിഭാഷകർ',
'version-credits-summary' => '[[Special:Version|മീഡിയവിക്കിയ്ക്ക്]] നൽകിയ സംഭാവനകളുടെ പേരിൽ താഴെക്കൊടുക്കുന്നവർക്ക് ഞങ്ങൾ നന്ദി പറയുന്നു.',
# Special:SpecialPages
'specialpages' => 'പ്രത്യേക താളുകൾ',
-'specialpages-note' => '----
-* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.
-* <strong class="mw-specialpagerestricted">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</strong>
-* <span class="mw-specialpagecached">പ്രാദേശികമായി സംഭരിച്ചുപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.</span>',
+'specialpages-note-top' => 'സൂചന',
+'specialpages-note' => '* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.
+* <span class="mw-specialpagerestricted">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</span>',
'specialpages-group-maintenance' => 'പരിചരണം ആവശ്യമായവ',
'specialpages-group-other' => 'മറ്റു പ്രത്യേക താളുകൾ',
'specialpages-group-login' => 'പ്രവേശിക്കുക / അംഗത്വമെടുക്കുക',
'limitreport-expansiondepth' => 'വികസിപ്പിക്കാനാവുന്ന ഉയർന്ന പരിധി',
'limitreport-expensivefunctioncount' => 'വ്യയമേറിയ പാഴ്സർ ഫങ്ഷൻ എണ്ണം',
+# Special:ExpandTemplates
+'expandtemplates' => 'ഫലകങ്ങൾ വികസിപ്പിക്കുക',
+'expand_templates_intro' => 'ഈ പ്രത്യേക താൾ, ചില എഴുത്തുകൾ എടുത്ത് എല്ലാ ഫലകങ്ങളും പുനരാവർത്തിത സ്വഭാവത്തോടെ വികസിപ്പിക്കുന്നു.
+<code><nowiki>{{</nowiki>#എങ്കിൽ:…}}</code> തുടങ്ങിയ പാഴ്സർ ഫങ്ഷനുകളും
+<code><nowiki>{{</nowiki>ഈദിവസം}}</code> തുടങ്ങിയ ചരങ്ങളും, ഈ താൾ വികസിപ്പിക്കുന്നുണ്ട്.
+ചുരുക്കിപറഞ്ഞാൽ ഇരട്ട കോഷ്ഠകങ്ങളിലുള്ള എന്തിനേയും വികസിപ്പിക്കുന്നു.',
+'expand_templates_title' => '{{FULLPAGENAME}} മുതലായവ എടുക്കാനായി ഉള്ളടക്കത്തിന്റെ തലക്കെട്ട്:',
+'expand_templates_input' => 'ഇൻപുട്ട് ടെക്സ്റ്റ്:',
+'expand_templates_output' => 'ഫലം',
+'expand_templates_xml_output' => 'എക്സ്.എം.എൽ. ഔട്ട്പുട്ട്',
+'expand_templates_ok' => 'ശരി',
+'expand_templates_remove_comments' => 'അഭിപ്രായങ്ങൾ ഒഴിവാക്കുക',
+'expand_templates_remove_nowiki' => 'ഫലങ്ങളിലെ <nowiki> റ്റാഗുകൾ ഒതുക്കുക',
+'expand_templates_generate_xml' => 'എക്സ്.എം.എൽ. പാഴ്സർ ട്രീ പ്രദർശിപ്പിക്കുക',
+'expand_templates_preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക',
+
);
'pagetitle' => '$1 - {{SITENAME}}',
'retrievedfrom' => '"$1" хуудаснаас авсан',
'youhavenewmessages' => 'Таньд $1 ($2) байна.',
-'newmessageslink' => 'шинэ мессеж',
-'newmessagesdifflink' => 'сүүлийн өөрчлөлт',
'youhavenewmessagesfromusers' => 'Танд {{PLURAL:$3|өөр нэгэн хэрэглэгчээс |$3 хэрэглэгчээс}} $1 ирсэн байна ($2).',
'youhavenewmessagesmanyusers' => 'Танд ($2) олон хэрэглэгчидээс $1.',
'newmessageslinkplural' => '{{PLURAL:$1|нэг шинэ меммеж| шинэ мессеж}}',
'preferences' => 'Хэрэглэгчийн тохиргоо',
'mypreferences' => 'Миний тохиргоо',
'prefs-edits' => 'Засваруудын тоо:',
-'prefsnologin' => 'Нэвтрээгүй байна',
-'prefsnologintext' => 'Та хэрэглэгчийн тохиргоогоо тохируулахын тулд <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} нэвтэрсэн байх]</span> ёстой.',
'changepassword' => 'Нууц үгээ солих',
'prefs-skin' => 'Арьс',
'skin-preview' => 'Урьдчилж харах',
'recentchanges-label-minor' => 'Энэ нь бага зэргийн засвар байна',
'recentchanges-label-bot' => 'Энэ засварыг бот гүйцэтгэсэн байна',
'recentchanges-label-unpatrolled' => 'Энэ засварыг одоогийн байдлаар манаагүй байна',
+'recentchanges-legend-newpage' => '$1 - шинэ хуудас',
'rcnote' => "Доорх нь $5, $4-ий байдлаарх сүүлийн '''$2''' өдрийн турших '''$1''' засвар юм.",
'rcnotefrom' => "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
'rclistfrom' => '$1-с хойших шинэ засваруудыг үзүүлэх',
'allmessagesdefault' => 'Анхны',
'allmessagescurrent' => 'Одоогийн',
'allmessagestext' => 'Энэ бол МедиаВики дахь системийн мэдэгдлүүдийн жагсаалт юм.
-МедиаВикиг орчуулах тухай мэдээллийг [//www.mediawiki.org/wiki/Localisation МедиаВикигийн орчуулга], мөн [//translatewiki.net translatewiki.net]-с авна уу.',
+МедиаВикиг орчуулах тухай мэдээллийг [https://www.mediawiki.org/wiki/Localisation МедиаВикигийн орчуулга], мөн [//translatewiki.net translatewiki.net]-с авна уу.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' нь унтарсан байгаа тул '''Special:Allmessages'''-г хэрэглэж болохгүй.",
'allmessages-filter-legend' => 'Шүүлтүүр',
'allmessages-filter' => 'Өөрийн болгосон байдлаар нь шүүх:',
# External editor support
'edit-externally' => 'Гадны программыг ашиглан энэ файлыг засварлах',
-'edit-externally-help' => '(Нэмэлт мэдээллийг [//www.mediawiki.org/wiki/Manual:External_editors тохируулгын зааврын] хуудаснаас харна уу)',
+'edit-externally-help' => '(Нэмэлт мэдээллийг [https://www.mediawiki.org/wiki/Manual:External_editors тохируулгын зааврын] хуудаснаас харна уу)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'бүгдийг',
'version-hook-subscribedby' => 'Захиалсан:',
'version-version' => '(Хувилбар $1)',
'version-license' => 'Лиценз',
-'version-poweredby-credits' => "Энэхүү викиг '''[//www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.",
+'version-poweredby-credits' => "Энэхүү викиг '''[https://www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.",
'version-poweredby-others' => 'бусад',
'version-software' => 'Суулгасан программ',
'version-software-product' => 'Бүтээгдэхүүн',
# Special:SpecialPages
'specialpages' => 'Тусгай хуудсууд',
-'specialpages-note' => '----
-* Ердийн тусгай хуудсууд.
+'specialpages-note' => '* Ердийн тусгай хуудсууд.
* <strong class="mw-specialpagerestricted">Хориотой тусгай хуудсууд.</strong>',
'specialpages-group-maintenance' => 'Засвар үйлчилгээний тайлангууд',
'specialpages-group-other' => 'Бусад тусгай хуудсууд',
'duration-centuries' => '$1 {{PLURAL:$1|зуун|зуун}}',
'duration-millennia' => '$1 {{PLURAL:$1|мянган|мянган}}',
+# Special:ExpandTemplates
+'expand_templates_input' => 'Оруулах бичиг:',
+'expand_templates_output' => 'Үр дүн',
+'expand_templates_remove_comments' => 'Товч агуулгыг авч хаях',
+
);
'ok' => 'ठीक',
'retrievedfrom' => '"$1" पासून हुडकले',
'youhavenewmessages' => 'तुमच्यासाठी $1 आहे. ($2)',
-'newmessageslink' => 'नवीन संदेश',
-'newmessagesdifflink' => 'ताजा बदल',
'youhavenewmessagesfromusers' => 'तुमच्यासाठी {{PLURAL:$3|इतर सदस्याकडून|$3 सदस्यांकडून}} $1 आहेत. ($2)',
'youhavenewmessagesmanyusers' => 'तुमच्यासाठी बऱ्याच सदस्यांकडून $1 आहेत. ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|नवीन संदेश|नवीन संदेश}}',
'preferences' => 'माझ्या पसंती',
'mypreferences' => 'पसंतीक्रम',
'prefs-edits' => 'संपादनांची संख्या:',
-'prefsnologin' => 'प्रवेश केलेला नाही',
-'prefsnologintext' => 'तुम्हाला सदस्य पसंती बदलण्यासाठी <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} प्रवेश]</span> करावा लागेल.',
'changepassword' => 'परवलीचा शब्द बदला',
'prefs-skin' => 'त्वचा',
'skin-preview' => 'झलक',
'recentchanges-label-minor' => 'हे एक किरकोळ संपादन आहे',
'recentchanges-label-bot' => 'हे संपादन एका सांगकाम्याकडून केले गेले आहे',
'recentchanges-label-unpatrolled' => 'हे संपादन अजून तपासल्या गेले नाही',
+'recentchanges-legend-newpage' => '$1 - नवीन पान',
'rcnote' => "खाली $4, $5 पर्यंतचे गेल्या {{PLURAL:$2|'''१''' दिवसातील|'''$2''' दिवसांतील}} {{PLURAL:$1|शेवटचा '''1''' बदल|शेवटचे '''$1''' बदल}} दिलेले आहेत.",
'rcnotefrom' => "खाली <b>$2</b> पासूनचे ('''$1''' पर्यंत) बदल दाखविले आहेत.",
'rclistfrom' => '$1 नंतर केले गेलेले बदल दाखवा.',
# External editor support
'edit-externally' => 'बाहेरील संगणक प्रणाली वापरून ही संचिका संपादित करा.',
-'edit-externally-help' => 'अधिक माहितीसाठी [//www.mediawiki.org/wiki/Manual:External_editors स्थापन करण्याच्या सूचना] येथे पहा.',
+'edit-externally-help' => 'अधिक माहितीसाठी [https://www.mediawiki.org/wiki/Manual:External_editors स्थापन करण्याच्या सूचना] येथे पहा.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'सर्व',
'version-hook-subscribedby' => 'वर्गणीदार',
'version-version' => '(आवृत्ती $1)',
'version-license' => 'परवाना',
-'version-poweredby-credits' => "हा विकी '''[//www.mediawiki.org/ मीडियाविकी]'''द्वारे संचालित आहे, प्रताधिकारित © २००१-$1 $2.",
+'version-poweredby-credits' => "हा विकी '''[https://www.mediawiki.org/ मीडियाविकी]'''द्वारे संचालित आहे, प्रताधिकारित © २००१-$1 $2.",
'version-poweredby-others' => 'इतर',
'version-poweredby-translators' => 'ट्रांसलेटविकि.नेट वरील भाषांतरकार',
'version-credits-summary' => 'आम्ही खालील व्यक्तींना, [[Special:Version|मिडियाविकि]]वर त्यांनी दिलेल्या योगदानामुळे, मान्यता देऊ ईच्छितो.',
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'साचे वाढवा',
+'expand_templates_intro' => 'हे पान काही मजकूर घेऊन त्यातिल सर्व साचे वाढविते. तसेच हे पान पार्सर फंक्शन्स जसे की
+<nowiki>{{</nowiki>#language:...}}, व बदलणार्या किमती (variables) जसे की
+<nowiki>{{</nowiki>CURRENTDAY}}—म्हणजेच दोन ब्रेसेसमधील सर्व मजकूर वाढविते.
+मीडियाविकिमधून पार्सर स्टेज मागवून हे केले जाते.',
+'expand_templates_title' => '{{FULLPAGENAME}} वगैरे करीता, कन्टेक्स्ट शीर्षक:',
+'expand_templates_input' => 'इनपुट मजकूर:',
+'expand_templates_output' => 'निकाल',
+'expand_templates_xml_output' => 'XML चे आऊटपुट',
+'expand_templates_ok' => 'ठिक आहे',
+'expand_templates_remove_comments' => 'शेरा हटवा',
+'expand_templates_remove_nowiki' => 'निकालात <nowiki>खूणपतका दाखवू नका',
+'expand_templates_generate_xml' => 'XML चा पार्स (parse) वृक्ष दाखवा',
+'expand_templates_preview' => 'झलक',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Diambil daripada "$1"',
'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
-'newmessageslink' => 'pesanan baru',
-'newmessagesdifflink' => 'perubahan terakhir',
'youhavenewmessagesfromusers' => 'Anda menerima $1 daripada {{PLURAL:$3|seorang|$3 orang}} pengguna lain ($2).',
'youhavenewmessagesmanyusers' => 'Anda menerima $1 daripada ramai pengguna ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|pesanan|pesanan-pesanan}} baru',
'preferences' => 'Keutamaan',
'mypreferences' => 'Keutamaan',
'prefs-edits' => 'Jumlah suntingan:',
-'prefsnologin' => 'Belum log masuk',
-'prefsnologintext' => 'Anda hendaklah <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} log masuk]</span> terlebih dahulu untuk menetapkan keutamaan.',
'changepassword' => 'Tukar kata laluan',
'prefs-skin' => 'Rupa',
'skin-preview' => 'Pralihat',
'recentchanges-label-minor' => 'Ini ialah suntingan kecil',
'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot',
'recentchanges-label-unpatrolled' => 'Suntingan ini belum dirondai',
+'recentchanges-legend-newpage' => '$1 - laman baru',
'rcnote' => "Yang berikut ialah '''$1''' perubahan terakhir sejak '''$2''' hari yang lalu sehingga $5, $4.",
'rcnotefrom' => 'Yang berikut ialah semua perubahan sejak <b>$2</b> (sehingga <b>$1</b>).',
'rclistfrom' => 'Papar perubahan sejak $1',
'allmessagesdefault' => 'Teks mesej asal',
'allmessagescurrent' => 'Teks pesanan semasa',
'allmessagestext' => 'Ini ialah senarai pesanan sistem yang terdapat dalam ruang nama MediaWiki.
-Sila lawat [//www.mediawiki.org/wiki/Localisation Penyetempatan MediaWiki] dan [//translatewiki.net translatewiki.net] sekiranya anda mahu menyumbang dalam menyetempatkan dan menterjemah perisian MediaWiki.',
+Sila lawat [https://www.mediawiki.org/wiki/Localisation Penyetempatan MediaWiki] dan [//translatewiki.net translatewiki.net] sekiranya anda mahu menyumbang dalam menyetempatkan dan menterjemah perisian MediaWiki.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' tidak boleh digunakan kerana '''\$wgUseDatabaseMessages''' dipadamkan.",
'allmessages-filter-legend' => 'Penapisan',
'allmessages-filter' => 'Tapis berdasarkan keadaan penempahan:',
# External editor support
'edit-externally' => 'Sunting fail ini menggunakan perisian luar',
-'edit-externally-help' => '(Lihat [//www.mediawiki.org/wiki/Manual:External_editors arahan pemasangan] untuk maklumat lanjut)',
+'edit-externally-help' => '(Lihat [https://www.mediawiki.org/wiki/Manual:External_editors arahan pemasangan] untuk maklumat lanjut)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'semua',
'version-hook-subscribedby' => 'Dilanggan oleh',
'version-version' => '(Versi $1)',
'version-license' => 'Lesen',
-'version-poweredby-credits' => "Wiki ini dikuasakan oleh '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki ini dikuasakan oleh '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
'version-poweredby-others' => 'penyumbang-penyumbang lain',
'version-poweredby-translators' => 'para penterjemah translatewiki.net',
'version-credits-summary' => 'Kami ingin mengucapkan sekalung budi kepada mereka yang berikut atas sumbangan mereka keada [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Laman khas',
-'specialpages-note' => '----
-* Laman khas biasa.
+'specialpages-note' => '* Laman khas biasa.
* <span class="mw-specialpagerestricted">Laman khas terhad.</span>
* <span class="mw-specialpagecached">Laman khas tercache (mungkin lapuk).</span>',
'specialpages-group-maintenance' => 'Laporan penyenggaraan',
'limitreport-expansiondepth' => 'Kedalaman peluasan terjauh',
'limitreport-expensivefunctioncount' => 'Kiraan fungsi penghurai muatan tinggi',
+# Special:ExpandTemplates
+'expandtemplates' => 'Kembangkan templat',
+'expand_templates_intro' => 'Halaman khas ini mengambil teks dan mengembangkan semua templat di dalamnya secara rekursif.
+Ia juga mengembangkan fungsi-fungsi penghurai seperti
+<code><nowiki>{{</nowiki>#language:…}}</code>, dan pembolehubah-pembolehubah seperti
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Sebenarnya, ia mengembangkan segalanya dalam tanda kurung panah berganda.',
+'expand_templates_title' => 'Tajuk konteks, untuk {{FULLPAGENAME}} dan sebagainya:',
+'expand_templates_input' => 'Teks input:',
+'expand_templates_output' => 'Hasil',
+'expand_templates_xml_output' => 'Output XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Buang ulasan',
+'expand_templates_remove_nowiki' => 'Sekat tag <nowiki> dalam hasil',
+'expand_templates_generate_xml' => 'Papar pepohon hurai XML',
+'expand_templates_preview' => 'Pralihat',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Miġjub minn "$1"',
'youhavenewmessages' => 'Għandek $1 ($2).',
-'newmessageslink' => 'messaġġi ġodda',
-'newmessagesdifflink' => 'l-aħħar bidla',
'youhavenewmessagesmanyusers' => 'Għandek $1 mingħand ħafna utenti ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|messaġġ ġdid|messaġġi ġodda}}',
'newmessagesdifflinkplural' => 'l-aħħar {{PLURAL:$1|bidla|bidliet}}',
'preferences' => 'Preferenzi',
'mypreferences' => 'Preferenzi',
'prefs-edits' => "Numru ta' modifiki:",
-'prefsnologin' => 'Għadek ma dħaltx ġewwa',
-'prefsnologintext' => 'Sabiex tkun tista\' tippersonalizza l-preferenzi huwa neċessarju li tidħol fil-<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kont]</span>.',
'changepassword' => 'Ibdel il-password',
'prefs-skin' => 'Aspett grafiku (skin)',
'skin-preview' => 'dehra proviżorja',
'recentchanges-label-minor' => 'Din hi modifika minuri',
'recentchanges-label-bot' => 'Din il-modifika ġiet effettwata minn bot',
'recentchanges-label-unpatrolled' => 'Din il-modifika għadha ma ġietx verifikata',
+'recentchanges-legend-newpage' => '$1 - paġna ġdida',
'rcnote' => "Hawn taħt {{PLURAL:$1|tinsab l-aktar modifika riċenti|jinsabu l-'''$1''' modifiki riċenti}} għas-sit fl-aħħar {{PLURAL:$2|24 siegħa|'''$2''' ġranet}}, id-dati ġew aġġornati fil-$5 ta' $4.",
'rcnotefrom' => "Ħawn taħt jinsabu l-modifiki minn '''$2''' (sa '''$1''').",
'rclistfrom' => 'Uri l-modifiki ġodda jibdew minn $1',
# External editor support
'edit-externally' => "Immodifika dan il-fajl b'użu ta' applikazzjoni esterna",
-'edit-externally-help' => '(Għal aktar informazzjoni ara l-[//www.mediawiki.org/wiki/Manual:External_editors istruzzjonijiet])',
+'edit-externally-help' => '(Għal aktar informazzjoni ara l-[https://www.mediawiki.org/wiki/Manual:External_editors istruzzjonijiet])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kollha',
'version-hook-subscribedby' => 'Reġistrat minn',
'version-version' => '(Verżjoni $1)',
'version-license' => 'Liċenzja',
-'version-poweredby-credits' => "Din il-wiki hija operata minn '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Din il-wiki hija operata minn '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'oħrajn',
'version-license-info' => "MediaWiki huwa softwer b'xejn; inti tista' tqassmu mill-ġdid u/jew timmodifikah taħt it-termini tal-GNU General Public License, kif ippubblikata mill-Free Software Foundation; jew it-2 verżjoni tal-Liċenzja, jew (skont l-għażla tiegħek) kwalunkwe verżjoni suċċessiva.
'duration-centuries' => '$1 {{PLURAL:$1|seklu|sekli}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennju|millennji}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Espandi l-mudelli',
+'expand_templates_intro' => "!Din il-paġna speċjali tieħu test u tkabbar il-mudelli kollha preżenti.
+Barra minn hekk, din tikkalkola r-riżultat tal-funzjonijiet ''parser'' bħal
+<code><nowiki>{{</nowiki>#language:…}}</code>, u varjabbli bħal
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Fil-fatt, din tespandi kważi dak kollu bejn żewġ parentesi.",
+'expand_templates_title' => 'Kuntest (għal {{FULLPAGENAME}} etċ.):',
+'expand_templates_input' => "Test ta' ''input'':",
+'expand_templates_output' => 'Riżultat',
+'expand_templates_xml_output' => "Riżultat f'format XML",
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Neħħi l-kummenti',
+'expand_templates_remove_nowiki' => "Ħassar it-''tags'' <nowiki> fir-riżultat",
+'expand_templates_generate_xml' => 'Uri siġra sintattika XML',
+'expand_templates_preview' => 'Dehra proviżorja',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Sacado an "$1"',
'youhavenewmessages' => 'Tu tenes $1 ($2).',
-'newmessageslink' => 'nuobas mensaiges',
-'newmessagesdifflink' => 'redadeira altaraçon',
'youhavenewmessagesmulti' => 'Tenes nuobas mensaiges an $1',
'editsection' => 'eiditar',
'editold' => 'eiditar',
'recentchanges' => 'Redadeiras altaraçones',
'recentchanges-legend' => 'Oupçones de las redadeiras altaraçones',
'recentchanges-feed-description' => 'Acumpanha las redadeiras altaraçones de l biqui por esta semiente.',
+'recentchanges-legend-newpage' => '$1 - nuoba páigina',
'rcnote' => "A seguir {{PLURAL:$1|stá listada '''ua''' altaraçon feita|stan '''$1''' altaraçones feitas}} {{PLURAL:$2|ne l redadeiro die|ne ls redadeiros '''$2''' dies}}, a partir de las $5 de $4.",
'rcnotefrom' => 'Alteraçones feitas zde <b>$2</b> (amostradas até <b>$1</b>).',
'rclistfrom' => 'Amostrar las noubas altaraçones a partir de $1',
# External editor support
'edit-externally' => 'Eiditar este fexeiro outelizando ua aplicaçon sterna',
-'edit-externally-help' => '(Bei las [//www.mediawiki.org/wiki/Manual:External_editors anstruçones de anstalaçon] pa mais anformaçon).',
+'edit-externally-help' => '(Bei las [https://www.mediawiki.org/wiki/Manual:External_editors anstruçones de anstalaçon] pa mais anformaçon).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todas',
'ok' => 'အိုကေ',
'retrievedfrom' => '"$1" မှ ရယူရန်',
'youhavenewmessages' => 'သင့်တွင် $1 ($2) ရှိသည်။',
-'newmessageslink' => 'မက်ဆေ့ အသစ်',
-'newmessagesdifflink' => 'နောက်ဆုံးအပြောင်းအလဲ',
'youhavenewmessagesmulti' => '$1 မှာ မက်ဆေ့အသစ်များ ရှိသည်',
'editsection' => 'ပြင်ဆင်ရန်',
'editold' => 'ပြင်ဆင်ရန်',
'preferences' => 'ရွေးချယ်စရာများ',
'mypreferences' => 'ရွေးချယ်စရာများ',
'prefs-edits' => 'တည်းဖြတ်မှုအရေအတွက် -',
-'prefsnologin' => 'logged in ဝင်မထားပါ',
'changepassword' => 'စကားဝှက် ပြောင်းရန်',
'prefs-skin' => 'အသွင်အပြင်',
'skin-preview' => 'နမူနာ',
# External editor support
'edit-externally' => 'ပြင်ပ application တစ်ခုခုကိုသုံး၍ ဤဖိုင်ကို ပြင်ရန်',
-'edit-externally-help' => '(နောက်ထပ်သတင်းအချက်အလက်များအတွက်[//www.mediawiki.org/wiki/Manual:External_editors တပ်ဆင်မှု လမ်းညွှန်များ] ကို ကြည့်ရန်)',
+'edit-externally-help' => '(နောက်ထပ်သတင်းအချက်အလက်များအတွက်[https://www.mediawiki.org/wiki/Manual:External_editors တပ်ဆင်မှု လမ်းညွှန်များ] ကို ကြည့်ရန်)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'အားလုံး',
'tog-hidepatrolled' => 'Кекшемс лувонь кирдиень витнеметнень-петнематнень чыяконь полавтнематнестэ',
'tog-newpageshidepatrolled' => 'Кекшемс лувонь кирдиень ванстома лопатнень од лопань керьксэнть эйстэ',
'tog-extendwatchlist' => 'Келейгавтомс сёрмадовксонь мельга ваномань сёрмалевксэнть невтевест весе полавтнематне, аволь ансяк чыеньсетне.',
-'tog-usenewrc' => 'Ð\9fÑ\83Ñ\80намÑ\81 лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\82 лопанÑ\8c коÑ\80Ñ\8fÑ\81 кÑ\83Ñ\80онÑ\8c-кÑ\83Ñ\80онÑ\8c Ñ\87иенÑ\8c полавÑ\82немаÑ\82неÑ\81Ñ\8d-ванома лемÑ\80иÑ\81Ñ\8cмеÑ\82неÑ\81Ñ\8d (веÑ\88и JavaScript)',
-'tog-numberheadings' => 'Сёрмадовкс коняксос кадык сынсь ловома валтнэ путовить',
-'tog-showtoolbar' => 'Ð\9aедÑ\8cÑ\91нкÑ\81 лазнÑ\8dнÑ\82Ñ\8c невÑ\82емÑ\81 Ñ\81Ñ\91Ñ\80мадома Ñ\88каÑ\81Ñ\82о (JavaScript)',
-'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме (JavaScript)',
+'tog-usenewrc' => 'Ð\9fÑ\83Ñ\80намÑ\81 лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\82 лопанÑ\8c коÑ\80Ñ\8fÑ\81 кÑ\83Ñ\80онÑ\8c-кÑ\83Ñ\80онÑ\8c Ñ\87иенÑ\8c полавÑ\82немаÑ\82неÑ\81Ñ\82Ñ\8d-ванома лемÑ\80иÑ\81Ñ\8cмеÑ\82неÑ\81Ñ\82Ñ\8d',
+'tog-numberheadings' => 'Сёрмадовксконяксос кадык сынсь ловома валтнэ путовить',
+'tog-showtoolbar' => 'Ð\9dевÑ\82емÑ\81 кедÑ\8cÑ\91нкÑ\81лазнÑ\8dнÑ\82Ñ\8c Ñ\81Ñ\91Ñ\80мадома Ñ\88каÑ\81Ñ\82о',
+'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме',
'tog-editsection' => 'Невтемс сюлмавома пенть «витемс» эрьва секциянтень-пельксэнтень',
-'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чэерень витьёнсе повнэсэ (JavaScript)',
-'tog-showtoc' => 'Невтемс сёрмадовкс потмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
+'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чеерень витьёнсе повнесэ',
+'tog-showtoc' => 'Невтемс сёрмадовкспотмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
'tog-rememberpassword' => 'Ледстемс совамо валом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
'tog-watchcreations' => 'Совавтомс ванома лемрисьмезэнь монь теевть лопатнень ды сень, мезе йовкстан',
'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лемрисьмезэнь',
'tog-shownumberswatching' => 'Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень',
'tog-oldsig' => 'Уликс кедьпутовксось:',
'tog-fancysig' => 'Лемпутовксось прок викитекст (сонсь теевиця сюлмавома певтеме)',
-'tog-uselivepreview' => 'Максомс эряй васнянь невтевкс (JavaScript) (Варчамонь)',
+'tog-uselivepreview' => 'Максомс эриця васнянь невтевкс (варчамонь сон)',
'tog-forceeditsummary' => 'Невтик монень, мезе сёрмадомс витнемадо-петнемадо ёвтамонь вальминентень',
'tog-watchlisthideown' => 'Кекшить монь теевть витневкстнэнь ванома лемрисьменть эйстэ',
'tog-watchlisthidebots' => 'Кекшить бот витневкстнэнь-петневкстнэнь ванома лемрисьсенть эйстэ',
'oct' => 'Ожо',
'nov' => 'Сун',
'dec' => 'Аца',
+'january-date' => 'Якшамков $1',
+'february-date' => 'Даволков $1',
+'march-date' => 'Эйзюрков $1',
+'april-date' => 'Чадыков $1',
+'may-date' => 'Панжиков $1',
+'june-date' => 'Аштемков $1',
+'july-date' => 'Медьков $1',
+'august-date' => 'Умарьков $1',
+'september-date' => 'Таштамков $1',
+'october-date' => 'Ожоков $1',
+'november-date' => 'Сундерьков $1',
+'december-date' => 'Ацамков $1',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Категория|Категорият}}',
'newwindow' => '(панжови од вальмасо)',
'cancel' => 'Саемс мекев',
'moredotdotdot' => 'Седе ламо...',
+'morenotlisted' => 'Те спискась апак прядо.',
'mypage' => 'Монь лопам',
'mytalk' => 'Кортнемам',
'anontalk' => 'Кортамс те IP-нть марто',
'articlepage' => 'Ваномс потмокслопанть',
'talk' => 'Кортнеме',
'views' => 'Ваномкат',
-'toolbox' => 'Кедьёнкс парго',
+'toolbox' => 'Кедьёнкст',
'userpage' => 'Ваномонзо кирдицянть лопанзо',
'projectpage' => 'Ваномонзо проектенть лопанть',
'imagepage' => 'Ваномс файлань лопанть',
'ok' => 'Маштови',
'retrievedfrom' => 'Лисмапрясь "$1"-сто',
'youhavenewmessages' => 'Тонеть сась $1 ($2).',
-'newmessageslink' => 'Од пачтямнэть',
-'newmessagesdifflink' => 'меельсе полавтома',
'youhavenewmessagesmulti' => 'Од сёрминеть учить эйсэть $1-со',
'editsection' => 'витнеме-петнеме',
'editold' => 'витнеме-петнеме',
'preferences' => 'Аравтомат',
'mypreferences' => 'Аравтомат',
'prefs-edits' => 'Зяроксть витнезь-петнезь:',
-'prefsnologin' => 'Эзить сова',
-'prefsnologintext' => 'Эряви <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} совамс]</span> аравтоматнень ладсемга.',
'changepassword' => 'Салавань валонь полавтома',
'prefs-skin' => 'Неемань ладсема',
'skin-preview' => 'Васнянь неевтезэ',
'recentchanges-label-minor' => 'Те а покшкэ витнемась-петнемась',
'recentchanges-label-bot' => 'Те витнеманть-петнеманть теизе кона-кона бот',
'recentchanges-label-unpatrolled' => '',
+'recentchanges-legend-newpage' => '$1, те - од лопа',
'rcnote' => "$5, $4 шканть коряс муят алдо {{PLURAL:$1|Меельсе '''1''' лиякстомтоманть|Меельсе '''$1''' лиякстомтоматнень}} меельсе {{PLURAL:$2|чинть|'''$2''' читнень}} шкасто.",
'rcnotefrom' => "Ало невтезь '''$2''' лиякстомтомасто саезь ('''$1''' видс).",
'rclistfrom' => 'Невтемс од витьнематнень $1-нть эйстэ саезь.',
# External editor support
'edit-externally' => 'Витнемс-петнемс те файланть, тевс нолдазь ушо ёнксонь программанть',
-'edit-externally-help' => '(Вант [//www.mediawiki.org/wiki/Manual:External_editors аравтома инструкциятнень] седе ламо информациянть кис.)',
+'edit-externally-help' => '(Вант [https://www.mediawiki.org/wiki/Manual:External_editors аравтома инструкциятнень] седе ламо информациянть кис.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'весе',
'duration-centuries' => '$1 {{PLURAL:$1|пинге|пингеть}}',
'duration-millennia' => '$1 {{PLURAL:$1|тёжтьие|тёжтьиеть}}',
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Васнянь неевтезэ',
+
);
'ok' => 'خا',
'retrievedfrom' => '"$1" جه بیته بیّه',
'youhavenewmessages' => 'شما اتا $1 دانّی ($2).',
-'newmessageslink' => 'ترنه پیغومئون',
-'newmessagesdifflink' => 'پایانی دچییه',
'youhavenewmessagesfromusers' => 'شِما {{PLURAL:$3| کارور دیگه| $3 کارور}} $1 دارنی ($2).',
'youhavenewmessagesmanyusers' => 'شما اتسری کارور جه $1 دارنی ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ترنه پیغوم|ترنه پیغوم}}',
# Preferences page
'mypreferences' => 'مه خاستنیئون',
'prefs-edits' => 'تعداد دچییهئون:',
-'prefsnologin' => 'سیستم دله نمویی',
'prefs-rc' => 'تازه دگاردستهئون',
'youremail' => 'شه مه Email:',
'username' => 'کاروری نوم:',
'ok' => 'Nopan iti',
'retrievedfrom' => 'Ōquīzqui ītech "$1"',
'youhavenewmessages' => 'Tiquimpiya $1 ($2).',
-'newmessageslink' => 'yancuīc tlahcuilōltzintli',
-'newmessagesdifflink' => 'achto tlapatlaliztli',
'youhavenewmessagesmulti' => 'Tiquimpiya yancuīc tlahcuilōlli īpan $1',
'editsection' => 'ticpatlāz',
'editold' => 'ticpatlāz',
'preferences' => 'Tlaēlēhuiliztli',
'mypreferences' => 'Notlaēlēhuiliz',
'prefs-edits' => 'Tlapatlaliztli tlapōhualli:',
-'prefsnologin' => 'Ahmo ōtimocalac',
'changepassword' => 'Ticpatlāz motlahtōlichtacāyo',
'skin-preview' => 'Xiquitta quemeh yez',
'datedefault' => 'Ayāc tlanequiliztli',
# Special:SpecialPages
'specialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
-'specialpages-note' => '----
-* Yeliztli nōncuahquīzqui āmatl.
+'specialpages-note' => '* Yeliztli nōncuahquīzqui āmatl.
* <span class="mw-specialpagerestricted">Tlaquīxtīlli nōncuahquīzqui āmatl.</span>
* <span class="mw-specialpagecached">Tlatlātīlli nōncuahquīzqui āmatl (aocmo monemitīa).</span>',
'specialpages-group-other' => 'Oksẻki nònkuâkìskàtlaìxtlapaltìn',
'api-error-uploaddisabled' => 'Sèuhtok in êkawilistli ìpan inìn wiki.',
'api-error-verification-error' => 'Inìn èwalli welis îtlakauhtok, noso âmò kualli motzòwîtok.',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Cualli',
+'expand_templates_preview' => 'Xiquitta achtochīhualiztli',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Estratto \'e "$1"',
'youhavenewmessages' => 'Haje $1 ($2).',
-'newmessageslink' => "nove 'mmasciàte",
-'newmessagesdifflink' => "differenze cu 'a revisione precedente",
'youhavenewmessagesmulti' => 'Tiene nuove mmasciate $1',
'editsection' => 'càgna',
'editold' => 'càgna',
'exif-subjectdistancerange-0' => 'Scanusciuta',
# External editor support
-'edit-externally-help' => "Pe piglià cchiù nfromma veré 'e [//www.mediawiki.org/wiki/Manual:External_editors struzione] ('n ngrese)",
+'edit-externally-help' => "Pe piglià cchiù nfromma veré 'e [https://www.mediawiki.org/wiki/Manual:External_editors struzione] ('n ngrese)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tutte',
'ok' => 'OK',
'retrievedfrom' => 'Hentet fra «$1»',
'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye meldinger',
-'newmessagesdifflink' => 'siste endring',
'youhavenewmessagesfromusers' => 'Du har $1 fra {{PLURAL:$3|en annen bruker| $3 brukere}} ($2).',
'youhavenewmessagesmanyusers' => 'Du har $1 fra mange brukere ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|en ny melding|nye meldinger}}',
'resetpass-abort-generic' => 'Endring av passord har blitt avbrutt av en utvidelse.',
# Special:PasswordReset
-'passwordreset' => 'Passordresetting',
+'passwordreset' => 'Tilbakestilling av passord',
'passwordreset-text-one' => 'Fyll ut skjemaet for å tilbakestille passordet',
'passwordreset-text-many' => '{{PLURAL:$1|Fyll inn et av datafeltene for å tilbakestille passordet ditt.}}',
'passwordreset-legend' => 'Nullstill passord',
'preferences' => 'Innstillinger',
'mypreferences' => 'Innstillinger',
'prefs-edits' => 'Antall redigeringer:',
-'prefsnologin' => 'Ikke logget inn',
-'prefsnologintext' => 'Du må være <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logget inn]</span> for å endre brukerinnstillingene.',
'changepassword' => 'Endre passord',
'prefs-skin' => 'Utseende',
'skin-preview' => 'Forhåndsvisning',
'recentchanges-label-minor' => 'Dette er en mindre endring',
'recentchanges-label-bot' => 'Denne redigeringen ble gjort av en bot',
'recentchanges-label-unpatrolled' => 'Denne redigeringen har ikke blitt patruljert ennå',
+'recentchanges-legend-newpage' => '$1 – ny side',
'rcnote' => "Nedenfor vises {{PLURAL:$1|'''1''' endring|de siste '''$1''' endringene}} fra {{PLURAL:$2|det siste døgnet|de siste '''$2''' døgnene}}, per $5 $4.",
'rcnotefrom' => "Nedenfor er endringene siden '''$2''' (opp til '''$1''' vises).",
'rclistfrom' => 'Vis nye endringer med start fra $1',
# External editor support
'edit-externally' => 'Rediger denne filen med et eksternt program',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonene] for mer informasjon)',
+'edit-externally-help' => '(Se [https://www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonene] for mer informasjon)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alle',
'version-hook-subscribedby' => 'Brukes av',
'version-version' => '(versjon $1)',
'version-license' => 'Lisens',
-'version-poweredby-credits' => "Denne wikien er drevet av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wikien er drevet av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'andre',
'version-poweredby-translators' => 'translatewiki.net-oversettere',
'version-credits-summary' => 'Vi ønsker å takke følgende personer for deres bidrag til [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Spesialsider',
-'specialpages-note' => '----
-* Normale spesialsider.
+'specialpages-note' => '* Normale spesialsider.
* <span class="mw-specialpagerestricted">Spesialsider med begrenset tilgang.</span>
* <span class="mw-specialpagecached">Spesialsider som oppdateres periodisk (kan være foreldede).</span>',
'specialpages-group-maintenance' => 'Vedlikeholdsrapporter',
'limitreport-expansiondepth' => 'Største ekspansjonsdybde',
'limitreport-expensivefunctioncount' => 'Antall kostbare parserfunksjoner',
+# Special:ExpandTemplates
+'expandtemplates' => 'Utvid maler',
+'expand_templates_intro' => 'Denne spesialsiden tar tekst og utvider rekusivt alle maler brukt i teksten.
+Den utvider også alle parserfunksjoner som
+<code><nowiki>{{</nowiki>#language:…}}</code>, og variabler som
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Faktisk utvider den det meste innkapslet i doble krøllparenteser.',
+'expand_templates_title' => 'Konteksttittel, for {{FULLPAGENAME}}, etc.:',
+'expand_templates_input' => 'Skriv inn tekst:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-resultat',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Fjern kommentarer',
+'expand_templates_remove_nowiki' => 'Ikke vis <nowiki>-merkelapper i resultatet',
+'expand_templates_generate_xml' => 'Vis parsetre som XML',
+'expand_templates_preview' => 'Forhåndsvisning',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Vun „$1“',
'youhavenewmessages' => 'Du hest $1 ($2).',
-'newmessageslink' => 'Ne’e Narichten',
-'newmessagesdifflink' => 'Ünnerscheed to vörher',
'youhavenewmessagesmulti' => 'Du hest ne’e Narichten op $1',
'editsection' => 'ännern',
'editold' => 'ännern',
'preferences' => 'Instellen',
'mypreferences' => 'För mi Instellen',
'prefs-edits' => 'Wo faken du in dit Wiki Sieden ännert hest:',
-'prefsnologin' => 'Nich anmellt',
-'prefsnologintext' => 'Du musst <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} anmellt]</span> wesen, dat du dien Instellen ännern kannst.',
'changepassword' => 'Passwoort ännern',
'prefs-skin' => 'Utsehn vun de Steed',
'skin-preview' => 'Vörschau',
# External editor support
'edit-externally' => 'Änner disse Datei mit en extern Programm',
-'edit-externally-help' => '(Lees de [//www.mediawiki.org/wiki/Manual:External_editors Installatschoonshelp] wenn du dor mehr to weten wullt)',
+'edit-externally-help' => '(Lees de [https://www.mediawiki.org/wiki/Manual:External_editors Installatschoonshelp] wenn du dor mehr to weten wullt)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alle',
'version-hook-subscribedby' => 'Opropen vun',
'version-version' => '(Version $1)',
'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dit Wiki bruukt '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Dit Wiki bruukt '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'annere',
'version-software' => 'Installeerte Software',
'version-software-product' => 'Produkt',
# Special:SpecialPages
'specialpages' => 'Sünnerliche Sieden',
-'specialpages-note' => '----
-* Normale Spezialsieden
+'specialpages-note' => '* Normale Spezialsieden
* <strong class="mw-specialpagerestricted">Spezialsieden för Brukers mit mehr Rechten</strong>',
'specialpages-group-maintenance' => 'Pleeglisten',
'specialpages-group-other' => 'Annere Spezialsieden',
'revdelete-unrestricted' => 'Inschränkungen för Administraters rutnahmen',
'rightsnone' => '(kene)',
+# Special:ExpandTemplates
+'expandtemplates' => 'Vörlagen oplösen',
+'expand_templates_intro' => 'Mit disse Spezialsied köönt Vörlagen in ingeven Text in Wikitext ümwannelt warrn.
+Ok Parserfunkschonen so as
+<nowiki>{{</nowiki>#language:…}}, un Variabeln so as
+<nowiki>{{</nowiki>CURRENTDAY}} warrt ümwannelt. Also so temlich allens, wat twischen swiefte Klammern steit.
+Dorto warrt de nödigen Parser-Phasen in MediaWiki direkt opropen.',
+'expand_templates_title' => 'Kontexttitel, för {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Inputtext:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-Utgaav',
+'expand_templates_ok' => 'Los',
+'expand_templates_remove_comments' => 'Kommentaren rutnehmen',
+'expand_templates_generate_xml' => 'XML-Parser-Boom wiesen',
+'expand_templates_preview' => 'Vörschau',
+
);
'ok' => 'Best',
'retrievedfrom' => 'Van "$1"',
'youhavenewmessages' => 'Je hebben $1 ($2).',
-'newmessageslink' => 'nieje berichten',
-'newmessagesdifflink' => 'verschil mit de veurige versie',
'youhavenewmessagesfromusers' => 'Je hebben $1 van {{PLURAL:$3|n aandere gebruker|$3 gebrukers}} ($2).',
'youhavenewmessagesmanyusers' => 'Je hebben $1 van n bulte gebrukers ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|n niej bericht|nieje berichten}}',
'gotaccount' => "Stao'j al in-eschreven? '''$1'''.",
'gotaccountlink' => 'Anmelden',
'userlogin-resetlink' => "Bi'j de anmeldgegevens kwiet?",
-'userlogin-resetpassword-link' => 'Joew wachtwoord opniej instellen',
+'userlogin-resetpassword-link' => 'Joew wachtwoord vergeten?',
'helplogin-url' => 'Help:Anmelden',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulpe bie t anmelden]]',
'userlogin-loggedin' => 'Je bin al an-emeld as {{GENDER:$1|$1}}.
'noemailcreate' => 'Je mutten n geldig netpostadres opgeven',
'passwordsent' => 'Der is n niej wachtwoord verstuurd naor t netpostadres van gebruker "$1". Meld an, a\'j t wachtwoord ontvangen.',
'blocked-mailpassword' => "Dit IP-adres is eblokkeerd. Dit betekent da'j niet bewarken kunnen en dat {{SITENAME}} joew wachtwoord niet weerummehaolen kan, dit wörden edaon um misbruuk tegen te gaon.",
-'eauthentsent' => "Der is n bevestigingsberich naor t op-egeven netpostadres verstuurd. Veurdat der veerdere berichten naor dit netpostadres verstuurd kunnen wörden, mu'j de instruksies volgen in t toe-esturen berich, um te bevestigen da'j joe eigen daodwarkelik an-emeld hebben.",
+'eauthentsent' => "Der is n bevestigingsbericht naor t op-egeven netpostadres verstuurd. Veurdat der veerdere berichten naor dit netpostadres verstuurd kunnen wörden, mu'j de instruksies volgen in t toe-estuurden bericht, um te bevestigen da'j joew eigen daodwarkelik an-emeld hebben.",
'throttled-mailpassword' => 'In {{PLURAL:$1|t veurbieje ure|de veurbieje $1 uren}} is der al n wachtwoordherinnering estuurd.
Um misbruuk te veurkoemen wörden der mer één wachtwoordherinnering per {{PLURAL:$1|ure|$1 uren}} verstuurd.',
'mailerror' => 'Fout bie t versturen van bericht: $1',
* Ongepassen persoonlike informasie
*: ''adressen en tillefoonnummers, burgerservicenummers, en gao zo mer deur.''",
'revdelete-legend' => 'Stel versiebeparkingen in:',
-'revdelete-hide-text' => 'Verbarg de bewarken tekste',
+'revdelete-hide-text' => 'Versietekste',
'revdelete-hide-image' => 'Verbarg bestaandsinhoud',
'revdelete-hide-name' => 'Verbarg logboekaksie',
-'revdelete-hide-comment' => 'Verbarg bewarkingssamenvatting',
-'revdelete-hide-user' => 'Verbarg gebrukersnamen en IP-adressen van aandere luui.',
+'revdelete-hide-comment' => 'Bewarkingssamenvatting',
+'revdelete-hide-user' => 'Gebrukersnaam/IP-adres van disse gebruker',
'revdelete-hide-restricted' => 'Gegevens veur beheerders en aander volk onderdrokken',
'revdelete-radio-same' => '(niet wiezigen)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nee',
+'revdelete-radio-set' => 'Zichtbaor',
+'revdelete-radio-unset' => 'Verbörgen',
'revdelete-suppress' => 'Gegevens veur beheerders en aander volk onderdrokken',
'revdelete-unsuppress' => 'Beparkingen veur weerummezetten versies vortdoon',
'revdelete-log' => 'Reden:',
'preferences' => 'Veurkeuren',
'mypreferences' => 'Mien veurkeuren',
'prefs-edits' => 'Antal bewarkingen:',
-'prefsnologin' => 'Niet an-meld',
-'prefsnologintext' => 'Je mutten <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} an-emeld]</span> ween um joew veurkeuren in te kunnen stellen.',
'changepassword' => 'Wachtwoord wiezigen',
'prefs-skin' => '{{SITENAME}}-uterlik',
'skin-preview' => 'bekieken',
'recentchanges-label-minor' => 'Dit is n kleine wieziging',
'recentchanges-label-bot' => 'Disse bewarking is uutevoerd deur n bot',
'recentchanges-label-unpatrolled' => 'Disse bewarking is nog niet nao-ekeken',
+'recentchanges-legend-newpage' => '$1 - nieje pagina',
'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de aofgeleupen {{PLURAL:$2|dag|'''$2''' dagen}} (per: $5, $4).",
'rcnotefrom' => 'Dit bin de wiezigingen sinds <b>$2</b> (maximum van <b>$1</b> wiezigingen).',
'rclistfrom' => 'Bekiek wiezigingen vanaof $1',
'allmessagesdefault' => 'Standardtekste',
'allmessagescurrent' => 'De leste versie',
'allmessagestext' => "Hieronder steet n lieste mit alle systeemteksten in de MediaWiki-naamruumte.
-Kiek oek effen bie [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] a'j biedragen willen an de algemene vertaling veur MediaWiki.",
+Kiek oek effen bie [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisasie] en [//translatewiki.net translatewiki.net] a'j biedragen willen an de algemene vertaling veur MediaWiki.",
'allmessagesnotsupportedDB' => "Disse zied kan niet gebruukt wörden umdat '''\$wgUseDatabaseMessages''' uutezet is.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filtreer op wiezigingen:',
Iej könt in de bewearkingssamenvatting n reden opgeven.',
'tooltip-preferences-save' => 'Vuurkeuren opsloan',
'tooltip-summary' => 'Voer ne korte samenvatting in',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Metadata
'notacceptable' => 'De wikiserver kan de gegevens niet leveren in n vorm die joew kliënt kan lezen.',
'pageinfo-length' => 'Ziedlengte (in bytes)',
'pageinfo-article-id' => 'Zied-ID',
'pageinfo-language' => 'Taal veur de zied',
+'pageinfo-content-model' => 'Ziedinhoudsmodel',
'pageinfo-robot-policy' => 'Indexering deur bots',
'pageinfo-robot-index' => 'Toe-estaon',
'pageinfo-robot-noindex' => 'Niet toe-estaon',
# External editor support
'edit-externally' => 'Wiezig dit bestaand mit n extern programma',
-'edit-externally-help' => '(Zie de [//www.mediawiki.org/wiki/Manual:External_editors installasie-instruksies] veur meer informasie)',
+'edit-externally-help' => '(Zie de [https://www.mediawiki.org/wiki/Manual:External_editors installasie-instruksies] veur meer informasie)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alles',
'confirm-unwatch-button' => 'Oké',
'confirm-unwatch-top' => 'Disse zied van joew volglieste aofhaolen?',
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
# Multipage image navigation
'imgmultipageprev' => '← veurige',
'imgmultipagenext' => 'volgende →',
'version-hook-subscribedby' => 'In-eschreven deur',
'version-version' => '(Versie $1)',
'version-license' => 'Lisensie',
-'version-poweredby-credits' => "Disse wiki wörden an-estuurd deur '''[//www.mediawiki.org/ MediaWiki]''', auteursrecht © 2001-$1 $2.",
+'version-poweredby-credits' => "Disse wiki wörden an-estuurd deur '''[https://www.mediawiki.org/ MediaWiki]''', auteursrecht © 2001-$1 $2.",
'version-poweredby-others' => 'aanderen',
'version-poweredby-translators' => 'vertalers van translatewiki.net',
'version-credits-summary' => 'Wulen erkennen grege de volgende personen veur der biedrage an [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Deurverwiezen op bestaandsnaam, gebrukersnummer of versienummer',
'redirect-legend' => 'Deurverwiezen naor n bestaand of zied',
-'redirect-summary' => 'Disse spesiale zied verwis deur naor n bestaand (as n bestaandsnaam op-egeven wörden), n zied (as n versienummer op-egeven wörden) of n gebrukerszied (as t gebrukersnummer op-egeven wörden).',
+'redirect-summary' => 'Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wörden), n zied (as n versienummer op-egeven wörden) of n gebrukerszied (as t gebrukersnummer op-egeven wörden). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Zeuk',
'redirect-lookup' => 'Opzeuken:',
'redirect-value' => 'Weerde:',
# Special:SpecialPages
'specialpages' => 'Spesiale ziejen',
-'specialpages-note' => '----
-* Normale spesiale ziejen.
+'specialpages-note' => '* Normale spesiale ziejen.
* <strong class="mw-specialpagerestricted">Beparkt toegankelike spesiale ziejen.</strong>
* <span class="mw-specialpagecached">Spesiale ziejen mit allinnig gegevens uut t tussengeheugen (kunnen verouwerd ween).</span>',
'specialpages-group-maintenance' => 'Onderhoudsliesten',
'limitreport-expansiondepth' => 'Hoogste uutbreidingsdiepte',
'limitreport-expensivefunctioncount' => 'Antal kostbaore parserfunksies',
+# Special:ExpandTemplates
+'expandtemplates' => 'Mallen substitueren',
+'expand_templates_intro' => 'Disse spesiale zied leest de op-egeven tekste en substitueert rekursief alle mallen in de tekste. Oek ondersteunde parserfunksies zo as <code><nowiki>{{</nowiki>#language:…}}</code> en variabels zo as <nowiki>{{</nowiki>CURRENTDAY}}&mdash. Zwat alle teksten tussen dubbelde krulhaken wörden esubstitueerd.',
+'expand_templates_title' => 'Titel, veur {{FULLPAGENAME}}, enz.:',
+'expand_templates_input' => 'Invoertekste:',
+'expand_templates_output' => 'Resultaot',
+'expand_templates_xml_output' => 'XML-uutvoer',
+'expand_templates_ok' => 'Oké',
+'expand_templates_remove_comments' => 'Opmarking vorthaolen',
+'expand_templates_remove_nowiki' => 'Etiketten <nowiki> in resultaot onderdrokken',
+'expand_templates_generate_xml' => 'XML-parserboom bekieken',
+'expand_templates_preview' => 'Naokieken',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => ' "$1" बाट निकालिएको',
'youhavenewmessages' => 'तपाईंको लागि ($2) मा $1 छ ।',
-'newmessageslink' => 'नयाँ सन्देशहरू',
-'newmessagesdifflink' => 'आखिरी परिवर्तन',
'youhavenewmessagesfromusers' => 'तपाईंको लागि {{PLURAL:$3|प्रयोगकर्ता|$3 प्रयोगकर्ताहरु}} ($2) बाट $1',
'youhavenewmessagesmanyusers' => 'तपाईँलाई धेरै प्रयोगकर्ताहरू($2) बाट $1 छ ।',
'newmessageslinkplural' => '{{PLURAL:$1|नयाँ सन्देश|नयाँ सन्देशहरू}}',
'edit-already-exists' => 'नयाँ पृष्ठ बनाउन सकिएन ।
यो पहिले देखि नै रहेको छ।',
+# Content models
+'content-model-wikitext' => 'विकिपाठ',
+'content-model-text' => 'साधारण पाठ',
+'content-model-javascript' => 'जाभास्क्रिप्ट',
+
# Parser/template warnings
'expensive-parserfunction-warning' => "'''चेतावनी:''' यस पृष्टका अति धेरै संख्याका महँगा पार्सर फंक्सन कल्स (expensive parser function calls) छन्।
यसमा $2 भन्दा कम {{PLURAL:$2|कल|कल्स}} हुनुपर्छ, यहाँ {{PLURAL:$1|अहिले $1 कल छ|अहिले $1 कल्स छ्न्}}.",
'revdelete-selected' => "'''[[:$1]]को {{PLURAL:$2|छानिएको संस्करण|छानिएका संस्करणहरु}} :'''",
'logdelete-selected' => "'''{{PLURAL:$1|छानिएको लग घटना|छानिएका लग घटनाहरु}}:'''",
'revdelete-legend' => 'दृष्टि बन्देज मिलाउने',
-'revdelete-hide-text' => 'पुनरावलोकन पाठ लुकाउने',
+'revdelete-hide-text' => 'पुनरावलोकन पाठ',
'revdelete-hide-image' => 'फाइल कमेन्ट लुकाउने',
'revdelete-hide-name' => 'कार्य र गन्तब्य लुकाउने',
-'revdelete-hide-comment' => 'सम्पादन टिप्पणी लुकाउने',
+'revdelete-hide-comment' => 'सम्पादन टिप्पणी',
'revdelete-hide-user' => 'सम्पादकको प्रयोगकर्ता नाम/IP लुकाउने',
'revdelete-hide-restricted' => 'प्रवन्धक वा अरुबाट डेटा कम लिने',
'revdelete-radio-same' => '(परिवर्तन नगर्नुहोस्)',
'preferences' => 'रोजाईहरू',
'mypreferences' => 'प्राथमिकताहरु',
'prefs-edits' => 'सम्पादन संख्या:',
-'prefsnologin' => 'प्रवेश (लग ईन) नगरिएको',
-'prefsnologintext' => 'प्रयोगकर्ता अभिरूचि निर्धारण गर्न <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ]</span>तपाईंले प्रवेश गरेको हुनुपर्छ।',
'changepassword' => 'पासवर्ड परिवर्तन गर्नुहोस्',
'prefs-skin' => 'काँचुली',
'skin-preview' => 'पूर्वावलोकन',
'prefs-beta' => 'बिटा गुणहरु',
'prefs-datetime' => 'मिति र समय',
'prefs-labs' => 'प्रयोगशाला गुणहरु',
+'prefs-user-pages' => 'प्रयोगकर्ता पृष्ठहरू',
'prefs-personal' => 'प्रयोगकर्ताको विवरण',
'prefs-rc' => 'नयाँ परिवर्तनहरु',
'prefs-watchlist' => 'अवलोकन पृष्ठ',
'prefs-dateformat' => 'मिति ढाँचा',
'prefs-timeoffset' => 'समय अफसेट',
'prefs-advancedediting' => 'सामान्य विकल्पहरू',
+'prefs-editor' => 'सम्पादक',
+'prefs-preview' => 'पूर्वावलोकन',
'prefs-advancedrc' => 'उन्नत विकल्पहरू',
'prefs-advancedrendering' => 'उन्नत विकल्पहरु',
'prefs-advancedsearchoptions' => 'उन्नत विकल्पहरू',
'prefs-displayrc' => 'प्रदर्शन विकल्पहरू',
'prefs-displaysearchoptions' => 'प्रदर्शन विकल्पहरू',
'prefs-displaywatchlist' => 'प्रदर्शन विकल्पहरू',
+'prefs-tokenwatchlist' => 'टोकन',
'prefs-diffs' => 'diffs(भिन्नता)',
# User preference: email validation using jQuery
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}',
+'enhancedrc-history' => 'इतिहास',
'recentchanges' => 'नयाँ परिवर्तनहरु',
'recentchanges-legend' => 'हालैको परिवर्तन विकल्पहरु',
'recentchanges-summary' => 'विकिका भर्खरका परिवर्तनहरुलाई यस पृष्ठमा पहिल्याउने',
'recentchanges-label-minor' => 'यो साधारण सम्पादन हो',
'recentchanges-label-bot' => 'यो सम्पादन बोट द्वारा गरिएको थियो',
'recentchanges-label-unpatrolled' => 'यो सम्पादन अहिले सम्म पट्रोल गरिएको छैन',
+'recentchanges-legend-newpage' => '$1 - नयाँ पृष्ठ',
'rcnote' => "तल पछिल्ला {{PLURAL:$2|day|'''$2''' दिनहरु}} मा $5, $4 सम्म भएका {{PLURAL:$1|is '''1''' change|पछिल्ला '''$1''' परिवर्तनहरु}} देखाइएको छ ।",
'rcnotefrom' => "'''$2''' देखिका परिवर्तनहरु तल ('''$1''' सम्मका देखाइन्छ)।",
'rclistfrom' => '$1 देखिका नयाँ परिवर्तनहरू देखाउनु',
'listfiles_size' => 'आकार',
'listfiles_description' => 'वर्णन',
'listfiles_count' => 'संस्करणहरु',
+'listfiles-latestversion-yes' => 'हो',
+'listfiles-latestversion-no' => 'हैन',
# File description page
'file-anchor-link' => 'फाईल',
'notanarticle' => 'सामाग्री सहितको पेज हैन',
'notvisiblerev' => 'पूर्वावलोकन हटाइयो',
'watchlist-details' => 'तपाईको निगरानी सूचीमा रहेका{{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठहरु}}वार्तालापमा पृष्ठमा गनिएका छैनन् ।',
-'wlheader-enotif' => 'ईमेलद्वारा जानकारी गराउने तरिका सक्रिय गरियो ।',
+'wlheader-enotif' => 'ईमेल जानकारी सक्रिय गरियो ।',
'wlheader-showupdated' => "तपाइले पछिल्लो पल्ट भ्रमण गरेपछि परिवर्तन भएका पृष्ठहरूलाई '''गाढा''' गरेर देखाइएको छ ।",
'watchmethod-recent' => 'निगरानी सुचीमा रहेका पृष्ठमा गरिएका सम्पादनहरु जाँच्दै',
'watchmethod-list' => 'सम्पदान गरिएका निगरानी सुचीमा रहेका पृष्ठहरुको सम्पादन जाँच्दै',
'allmessagesdefault' => 'डिफल्ट सन्देश पाठ',
'allmessagescurrent' => 'वर्तमान सन्देश पाठ',
'allmessagestext' => 'यो मीडियाविकि नेमस्पेसमा पाइने सिस्टम सन्देशहरूको सूची हो।
-यदि तपाईं व्यापक मीडिया विकि स्थानीयकरणमा योगदान गर्न चाहनुहुन्छ भनें कृपया [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation]मा र [//translatewiki.net translatewiki.net]मा जानुहोस्।',
+यदि तपाईं व्यापक मीडिया विकि स्थानीयकरणमा योगदान गर्न चाहनुहुन्छ भनें कृपया [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation]मा र [//translatewiki.net translatewiki.net]मा जानुहोस्।',
'allmessages-filter-legend' => 'फिल्टर',
'allmessages-filter-unmodified' => 'असंशोधित',
'allmessages-filter-all' => 'सबै',
# External editor support
'edit-externally' => 'यो फाइललाई बाह्य अनुप्रयोग प्रयोग गरेर सम्पादन गर्ने',
-'edit-externally-help' => '(थप जानकारीको लागि [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] मा हेर्नुहोस् )',
+'edit-externally-help' => '(थप जानकारीको लागि [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] मा हेर्नुहोस् )',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'सबै',
'version-version' => '(संस्करण $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'इजाजतपत्र',
-'version-poweredby-credits' => "यो विकी '''[//www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
+'version-poweredby-credits' => "यो विकी '''[https://www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
'version-poweredby-others' => 'अन्य',
'version-software' => 'स्थापना गरिएको सफ्टवेयर',
'version-software-product' => 'उत्पादन',
# Special:SpecialPages
'specialpages' => 'विशेष पृष्ठ',
-'specialpages-note' => '----
-* साधारण विशेष पृष्ठहरु।
+'specialpages-note' => '* साधारण विशेष पृष्ठहरु।
* <span class="mw-specialpagerestricted">निषेधित विशेष पृष्ठहरु।</span>
* <span class="mw-specialpagecached">क्याश गरिएका विशेष पृष्ठहरु (अध्यावधिक नहुन सक्छ)।</span>',
'specialpages-group-maintenance' => 'मर्मत प्रतिवेदनहरु',
* @author AvatarTeam
* @author B4bol4t
* @author Basvb
+ * @author Breghtje
* @author DasRakel
* @author Effeietsanders
* @author Erwin
'ok' => 'OK',
'retrievedfrom' => 'Overgenomen van "$1"',
'youhavenewmessages' => 'U hebt $1 ($2).',
-'newmessageslink' => 'nieuwe berichten',
-'newmessagesdifflink' => 'laatste wijziging',
'youhavenewmessagesfromusers' => 'U heeft $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).',
'youhavenewmessagesmanyusers' => 'U heeft $1 van een groot aantal gebruikers ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|een nieuw bericht|nieuwe berichten}}',
'invalidtitle-knownnamespace' => 'Ongeldige titel met naamruimte "$2" en tekst "$3"',
'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekend naamruimtenummer $1 en tekst "$2"',
'exception-nologin' => 'Niet aangemeld',
-'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u aangemeld zijn bij deze wiki.',
+'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u [[Special:Userlogin|aangemeld]] zijn bij deze wiki.',
+'exception-nologin-text-manual' => 'U moet $1 om deze pagina te kunnen bekijken of de handeling uit te voeren.',
# Virus scanner
'virus-badscanner' => "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
Daarom kunt u vanaf uw IP-adres op dit moment geen nieuwe gebruikers registreren.',
'emailauthenticated' => 'Uw e-mailadres is bevestigd op $2 om $3.',
'emailnotauthenticated' => 'Uw e-mailadres is niet bevestigd.
-U ontvangt geen e-mail voor de onderstaande functies.',
+De volgende functies verzenden nog geen e-mail.',
'noemailprefs' => 'Geef een e-mailadres op in uw voorkeuren om deze functies te gebruiken.',
'emailconfirmlink' => 'Bevestig uw e-mailadres',
'invalidemailaddress' => 'Het e-mailadres is niet aanvaard, omdat het een ongeldige opmaak heeft.
'sectioneditnotsupported-text' => 'Het is op deze pagina niet mogelijk om paragrafen te bewerken.',
'permissionserrors' => 'Fouten in rechten',
'permissionserrorstext' => 'U hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:',
-'permissionserrorstext-withaction' => 'U hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:',
+'permissionserrorstext-withaction' => 'U hebt geen rechten om $2, {{PLURAL:$1|want}}:',
'recreate-moveddeleted-warn' => "'''Waarschuwing: u bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''
Overweeg of het terecht is dat u verder werkt aan deze pagina.
'revdelete-hide-user' => 'Gebruikersnaam/IP-adres van de gebruiker verbergen',
'revdelete-hide-restricted' => 'Deze beperkingen ook op beheerders toepassen',
'revdelete-radio-same' => '(niet wijzigen)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nee',
+'revdelete-radio-set' => 'Verborgen',
+'revdelete-radio-unset' => 'Zichtbaar',
'revdelete-suppress' => 'Gegevens voor zowel beheerders als anderen onderdrukken',
'revdelete-unsuppress' => 'Beperkingen op teruggeplaatste wijzigingen verwijderen',
'revdelete-log' => 'Reden:',
'preferences' => 'Voorkeuren',
'mypreferences' => 'Voorkeuren',
'prefs-edits' => 'Aantal bewerkingen:',
-'prefsnologin' => 'Niet aangemeld',
-'prefsnologintext' => 'U moet <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} aangemeld]</span> zijn om uw voorkeuren te kunnen instellen.',
+'prefsnologintext2' => 'U moet $1 om voorkeuren in te stellen.',
'changepassword' => 'Wachtwoord wijzigen',
'prefs-skin' => 'Vormgeving',
'skin-preview' => 'Voorvertoning',
'right-bot' => 'Behandeld worden als een geautomatiseerd proces',
'right-nominornewtalk' => "Kleine bewerkingen aan een overlegpagina leiden niet tot een melding 'nieuwe berichten'",
'right-apihighlimits' => 'Hogere limieten in API-zoekopdrachten gebruiken',
-'right-writeapi' => 'Bewerken via de API',
+'right-writeapi' => 'Via de API bewerkingen uitvoeren',
'right-delete' => "Pagina's verwijderen",
'right-bigdelete' => "Pagina's met een grote geschiedenis verwijderen",
'right-deletelogentry' => 'Specifieke logboekregels verwijderen en terugplaatsen',
'right-viewmyprivateinfo' => 'Uw eigen privégegevens bekijken (bijvoorbeeld e-mailadres, echte naam)',
'right-editmyprivateinfo' => 'Uw eigen privégegevens bewerken (bijvoorbeeld e-mailadres, echte naam)',
'right-editmyoptions' => 'Uw eigen voorkeuren bewerken',
-'right-rollback' => 'Snel de laatste bewerking(en) van een gebruiker van een pagina terugdraaien',
+'right-rollback' => 'De bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terugdraaien',
'right-markbotedits' => 'Teruggedraaide bewerkingen markeren als botbewerkingen',
'right-noratelimit' => 'Tijdsafhankelijke beperkingen negeren',
'right-import' => "Pagina's uit andere wiki's importeren",
'action-reupload' => 'dit bestaande bestand te overschrijven',
'action-reupload-shared' => 'dit bestand te uploaden, terwijl er al een bestand met dezelfde naam in de gedeelde mediadatabank staat',
'action-upload_by_url' => 'dit bestand vanaf een URL te uploaden',
-'action-writeapi' => 'via de API te bewerken',
+'action-writeapi' => 'via de API bewerkingen uit te voeren',
'action-delete' => 'deze pagina te verwijderen',
'action-deleterevision' => 'deze versie te verwijderen',
'action-deletedhistory' => 'de verwijderde versies van deze pagina te bekijken',
'action-suppressionlog' => 'dit beschermde logboek te bekijken',
'action-block' => 'deze gebruiker een bewerkingsblokkade op te leggen',
'action-protect' => 'het beveiligingsniveau van deze pagina aan te passen',
-'action-rollback' => 'bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terugdraaien',
+'action-rollback' => 'de bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terug te draaien',
'action-import' => "pagina's te importeren van een andere wiki",
'action-importupload' => "pagina's te importeren uit een bestandsupload",
'action-patrol' => 'bewerkingen van anderen als gecontroleerd te markeren',
'recentchanges-label-minor' => 'Dit is een kleine bewerking',
'recentchanges-label-bot' => 'Deze bewerking is uitgevoerd door een bot',
'recentchanges-label-unpatrolled' => 'Deze bewerking is nog niet gecontroleerd',
+'recentchanges-legend-newpage' => '$1 - nieuwe pagina',
'rcnote' => "Hieronder {{PLURAL:$1|staat de laatste bewerking|staan de laatste '''$1''' bewerkingen}} in de laatste {{PLURAL:$2|dag|'''$2''' dagen}}, op $4 om $5.",
'rcnotefrom' => "Wijzigingen sinds '''$2''' (met een maximum van '''$1''' wijzigingen).",
'rclistfrom' => 'Wijzigingen bekijken vanaf $1',
E-mailadres: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
-Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Op uw volglijst kunt u voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
+Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Als u bent aangemeld, kunt u op uw volglijst voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
Groet van uw {{SITENAME}}-waarschuwingssysteem.
'allmessagesdefault' => 'Standaardinhoud',
'allmessagescurrent' => 'Huidige inhoud',
'allmessagestext' => 'Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.
-Ga naar [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.',
+Ga naar [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.',
'allmessagesnotsupportedDB' => "Deze pagina kan niet worden gebruikt, omdat '''\$wgUseDatabaseMessages''' is uitgeschakeld.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filteren op aangepast:',
'tooltip-undo' => 'Met "ongedaan maken" draait u deze bewerking terug en komt in het bewerkingsvenster. U kunt in de bewerkingssamenvatting een reden opgeven.',
'tooltip-preferences-save' => 'Voorkeuren opslaan',
'tooltip-summary' => 'Voer een korte samenvatting in',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/** CSS die hier wordt geplaatst heeft invloed op alle skins */',
'pageinfo-length' => 'Paginalengte (in bytes)',
'pageinfo-article-id' => 'Paginanummer',
'pageinfo-language' => 'Taal voor de pagina',
+'pageinfo-content-model' => 'Paginainhoudmodel',
'pageinfo-robot-policy' => 'Indexering door robots',
'pageinfo-robot-index' => 'Toegestaan',
'pageinfo-robot-noindex' => 'Niet toegestaan',
'svg-long-desc' => 'SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3',
'svg-long-desc-animated' => 'Bewegend SVG-bestand, nominaal $1 × $2 pixels, bestandsgrootte: $3',
'svg-long-error' => 'Ongeldig SVG-bestand: $1',
-'show-big-image' => 'Volledige resolutie',
+'show-big-image' => 'Oorspronkelijk bestand',
'show-big-image-preview' => 'Grootte van deze voorvertoning: $1.',
'show-big-image-other' => 'Andere {{PLURAL:$2|resolutie|resoluties}}: $1.',
'show-big-image-size' => '$1 × $2 pixels',
'hours-ago' => '$1 {{PLURAL:$1|uur}} geleden',
'minutes-ago' => '$1 {{PLURAL:$1|minuut|minuten}} geleden',
'seconds-ago' => '$1 {{PLURAL:$1|seconde|seconden}} geleden',
-'monday-at' => 'Maandag om $1',
-'tuesday-at' => 'Dinsdag om $1',
-'wednesday-at' => 'Woensdag om $1',
-'thursday-at' => 'Donderdag om $1',
-'friday-at' => 'Vrijdag om $1',
-'saturday-at' => 'Zaterdag om $1',
-'sunday-at' => 'Zondag om $1',
+'monday-at' => 'maandag om $1',
+'tuesday-at' => 'dinsdag om $1',
+'wednesday-at' => 'woensdag om $1',
+'thursday-at' => 'donderdag om $1',
+'friday-at' => 'vrijdag om $1',
+'saturday-at' => 'zaterdag om $1',
+'sunday-at' => 'zondag om $1',
'yesterday-at' => 'Gisteren om $1',
# Bad image list
# External editor support
'edit-externally' => 'Dit bestand in een extern programma bewerken',
-'edit-externally-help' => '(zie de [//www.mediawiki.org/wiki/Manual:External_editors handleiding voor instellingen] voor meer informatie)',
+'edit-externally-help' => '(zie de [https://www.mediawiki.org/wiki/Manual:External_editors handleiding voor instellingen] voor meer informatie)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alles',
'confirm-unwatch-button' => 'OK',
'confirm-unwatch-top' => 'Deze pagina verwijderen uit uw volglijst?',
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
# Multipage image navigation
'imgmultipageprev' => '← vorige pagina',
'imgmultipagenext' => 'volgende pagina →',
'version-hook-subscribedby' => 'Geabonneerd door',
'version-version' => '(Versie $1)',
'version-license' => 'Licentie',
-'version-poweredby-credits' => "Deze wiki wordt aangedreven door '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Deze wiki wordt aangedreven door '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'anderen',
'version-poweredby-translators' => 'translatewiki.net-vertalers',
'version-credits-summary' => 'We erkennen graag de volgende personen voor hun bijdrage aan [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Doorverwijzen op bestandsnaam, gebruikersnummer of versienummer',
'redirect-legend' => 'Doorverwijzen naar een bestand of pagina',
-'redirect-summary' => 'Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven).',
+'redirect-summary' => 'Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'OK',
'redirect-lookup' => 'Opzoeken:',
'redirect-value' => 'Waarde:',
# Special:SpecialPages
'specialpages' => "Speciale pagina's",
-'specialpages-note' => '----
-* Normale speciale pagina\'s
-* <strong class="mw-specialpagerestricted">Beperkt toegankelijke speciale pagina\'s</strong>
-* <span class="mw-specialpagecached">Speciale pagina\'s met alleen gegevens uit de cache (mogelijk verouderd)</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normale speciale pagina\'s
+* <span class="mw-specialpagerestricted">Beperkt toegankelijke speciale pagina\'s</span>',
'specialpages-group-maintenance' => 'Onderhoudsrapporten',
'specialpages-group-other' => "Overige speciale pagina's",
'specialpages-group-login' => 'Aanmelden / registreren',
'limitreport-expansiondepth' => 'Hoogste uitbreidingsdiepte',
'limitreport-expensivefunctioncount' => 'Aantal kostbare parserfuncties',
+# Special:ExpandTemplates
+'expandtemplates' => 'Sjablonen substitueren',
+'expand_templates_intro' => 'Deze speciale pagina leest de opgegeven tekst in en substitueert recursief alle sjablonen in de tekst.
+Het substitueert ook alle parserfuncties zoals
+<code><nowiki>{{</nowiki>#language:…}}</code> en
+variabelen als <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Vrijwel alle tekst tussen dubbele accolades wordt gesubstitueerd.',
+'expand_templates_title' => 'Contexttitel, voor {{FULLPAGENAME}}, enzovoort:',
+'expand_templates_input' => 'Invoertekst:',
+'expand_templates_output' => 'Resultaat',
+'expand_templates_xml_output' => 'XML-uitvoer',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Opmerkingen verwijderen',
+'expand_templates_remove_nowiki' => 'Tags <nowiki> in resultaat onderdrukken',
+'expand_templates_generate_xml' => 'XML-parserboom bekijken',
+'expand_templates_preview' => 'Voorvertoning',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Henta frå «$1»',
'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye meldingar',
-'newmessagesdifflink' => 'sjå skilnad',
'youhavenewmessagesfromusers' => 'Du har $1 frå {{PLURAL:$3|ein annan brukar| $3 brukarar}} ($2).',
'youhavenewmessagesmanyusers' => 'Du har $1 frå mange brukarar ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ei ny melding|nye meldingar}}',
'''Dersom dette er eit heilt vanleg forsøk på endring, prøv ein gong til. Dersom det framleis ikkje går, prøv å logge deg ut og inn att.'''",
'token_suffix_mismatch' => "'''Endringa di vart avvist fordi klienten/nettlesaren din lagar teiknfeil i teksten. Dette vart gjort for å hindre øydelegging av teksten på sida. Slikt kan av og til hende når ein brukar feilprogrammerte og vevbaserte anonyme proxytenester.'''",
-'edit_form_incomplete' => 'Delar av redigeringsskjemaet nådde ikkje fram til tenaren; dobbelsjekk at redigeringa er korrekt, og prøv om att.',
+'edit_form_incomplete' => 'Delar av endringsskjemaet nådde ikkje fram til tenaren; dobbelsjekk at endringa er korrekt og prøv om att.',
'editing' => 'Endrar $1',
'creating' => 'Opprettar $1',
'editingsection' => 'Endrar $1 (bolk)',
'edit-gone-missing' => 'Kunne ikkje oppdatere sida.
Det ser ut til at ho er sletta.',
'edit-conflict' => 'Endringskonflikt.',
-'edit-no-change' => 'Redigeringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.',
+'edit-no-change' => 'Endringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.',
'postedit-confirmation' => 'Endringa di vart lagra.',
'edit-already-exists' => 'Kunne ikkje opprette ny side fordi ho alt eksisterer.',
'defaultmessagetext' => 'Standard meldingstekst',
'mergehistory-reason' => 'Årsak:',
# Merge log
-'mergelog' => 'Flettingslogg',
+'mergelog' => 'Flettelogg',
'pagemerge-logentry' => 'fletta [[$1]] til [[$2]] (versjonar fram til $3)',
'revertmerge' => 'Fjern fletting',
'mergelogpagetext' => 'Nedanfor finn du ei liste over dei siste flettingane av ein sidehistorikk til ein annan.',
'preferences' => 'Innstillingar',
'mypreferences' => 'Innstillingar',
'prefs-edits' => 'Tal på endringar:',
-'prefsnologin' => 'Ikkje innlogga',
-'prefsnologintext' => 'Du må vere <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logga inn]</span> for å endre brukarinnstillingane.',
'changepassword' => 'Skift passord',
'prefs-skin' => 'Drakt',
'skin-preview' => 'førehandsvis',
'recentchanges-label-minor' => 'Endringa er småplukk',
'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot',
'recentchanges-label-unpatrolled' => 'Endringa er ikkje patruljert enno',
+'recentchanges-legend-newpage' => '$1 – ny side',
'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa gjord|dei siste '''$1''' endringane gjorde}} {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, for $4, kl. $5.",
'rcnotefrom' => "Nedanfor vert opp til '''$1''' endringar sidan ''' $2''' viste.",
'rclistfrom' => 'Vis nye endringar sidan $1',
'block-log-flags-noemail' => 'sending av e-post blokkert',
'block-log-flags-nousertalk' => 'kan ikkje endre eiga diskusjonsside',
'block-log-flags-angry-autoblock' => 'utvida autoblokkering aktivert',
-'block-log-flags-hiddenname' => 'brukarnamn gøymt',
+'block-log-flags-hiddenname' => 'brukarnamn løynt',
'range_block_disabled' => 'Funksjonen for blokkering av IP-adresse-seriar er inaktivert på tenaren.',
'ipb_expiry_invalid' => 'Ugyldig opphørstid.',
'ipb_expiry_temp' => 'For å skjule brukarnamnet må blokkeringa vere permanent.',
'allmessagesdefault' => 'Standardtekst',
'allmessagescurrent' => 'Gjeldande meldingstekst',
'allmessagestext' => 'Dette er ei liste over systemmeldingar i MediaWiki-namnerommet.
-Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] om du ynskjer å bidra til den generelle omsetjinga av MediaWiki.',
+Vitja [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//translatewiki.net translatewiki.net] om du ynskjer å bidra til den generelle omsetjinga av MediaWiki.',
'allmessagesnotsupportedDB' => "Denne sida kan ein ikkje bruka fordi «'''\$wgUseDatabaseMessages'''» er slått av.",
'allmessages-filter-legend' => 'Filtrer',
'allmessages-filter' => 'Filtrer etter tilpassingsgrad:',
'markedaspatrollederror' => 'Kan ikkje merke sida som patruljert',
'markedaspatrollederrortext' => 'Du må markere ein versjon for å kunne godkjenne.',
'markedaspatrollederror-noautopatrol' => 'Ein har ikkje høve til å merkje sine eigne endringar som godkjende.',
-'markedaspatrollednotify' => 'Denne endringa på $1 vart merkt som patruljert.',
+'markedaspatrollednotify' => 'Endringa på $1 vart merkt som patruljert.',
'markedaspatrollederrornotify' => 'Det gjekk ikkje å merkja endringa som patruljert.',
# Patrol log
# External editor support
'edit-externally' => 'Endre denne fila med eit eksternt program',
-'edit-externally-help' => '(Sjå [//www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonane] for meir informasjon)',
+'edit-externally-help' => '(Sjå [https://www.mediawiki.org/wiki/Manual:External_editors oppsettsinstruksjonane] for meir informasjon)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alle',
'version-hook-subscribedby' => 'Brukt av',
'version-version' => '(versjon $1)',
'version-license' => 'Lisens',
-'version-poweredby-credits' => "Denne wikien er driven av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wikien er driven av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'andre',
'version-poweredby-translators' => 'translatewiki.net-omsetjarar',
'version-credits-summary' => 'Me ynskjer godskriva desse personane for tilskotet deira til [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Spesialsider',
-'specialpages-note' => '----
-* Vanlege spesialsider.
+'specialpages-note' => '* Vanlege spesialsider.
* <span class="mw-specialpagerestricted">Spesialsider med avgrensa tilgang.</span>',
'specialpages-group-maintenance' => 'Vedlikehaldsrapportar',
'specialpages-group-other' => 'Andre spesialsider',
'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|endra}} i løyndom synlegdomen til versjonar på sida $3',
'revdelete-content-hid' => 'innhald løynt',
'revdelete-summary-hid' => 'endringsamandrag løynt',
-'revdelete-uname-hid' => 'brukarnamn gøymt',
+'revdelete-uname-hid' => 'brukarnamn løynt',
'revdelete-content-unhid' => 'innhald gjort synleg',
'revdelete-summary-unhid' => 'endringssamandrag gjort synleg',
'revdelete-uname-unhid' => 'brukarnamn gjort synleg',
'limitreport-expansiondepth' => 'Største utvidingsdjupna',
'limitreport-expensivefunctioncount' => 'Tal på dyre analysefunksjonar',
+# Special:ExpandTemplates
+'expandtemplates' => 'Utvid malar',
+'expand_templates_intro' => 'Denne sida tek ein tekst og utvider alle malar som er bruka i teksten.
+Ho utvider òg alle funksjonar som
+<nowiki>{{</nowiki>#language:…}}, og variablar som
+<nowiki>{{</nowiki>CURRENTDAY}}— bortimot alt som står i dobbelte klammeparentesar.
+Dette gjer ho ved å kalla dei relevante parsersetega frå MediaWiki sjølv.',
+'expand_templates_title' => 'Konteksttittel, for {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Inntekst:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-resultat',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Fjern kommentarar',
+'expand_templates_remove_nowiki' => 'Ikkje vis <nowiki>-merke i resultatet',
+'expand_templates_generate_xml' => 'Vis parsertre som XML',
+'expand_templates_preview' => 'Førehandsvising',
+
);
'retrievedfrom' => 'Le tšwa go "$1"',
'youhavenewmessages' => 'O na le $1 ($2).',
-'newmessageslink' => 'ya melaetša ye mefsa',
-'newmessagesdifflink' => 'phetogo ya mafelelo',
'newmessagesdifflinkplural' => 'l{{PLURAL:$1|Phetogo tša|Diphetogo ya}}go feta',
'youhavenewmessagesmulti' => 'O nale melaetša ye mefsa go $1',
'editsection' => 'lokiša',
'preferences' => 'Dikgatlhegelo',
'mypreferences' => 'Dikgatlhegelo tša ka',
'prefs-edits' => 'Palo ya diphetogo:',
-'prefsnologin' => 'Ga wa tsena',
'changepassword' => 'Fetola ditlhaka-tša-siphiri',
'skin-preview' => 'Ponopele',
'prefs-datetime' => 'Tšatšikgwedi le nako',
# External editor support
'edit-externally' => 'Fetola faele ye o šumiša thulusi ya ka ntle',
-'edit-externally-help' => '(Lebelela [//www.mediawiki.org/wiki/Manual:External_editors Taelo ya go thoma] go humana sedi)',
+'edit-externally-help' => '(Lebelela [https://www.mediawiki.org/wiki/Manual:External_editors Taelo ya go thoma] go humana sedi)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ka moka',
# Special:Tags
'tag-filter' => '[[Special:Tags|Tag]] "filter":',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Phetho',
+
);
'ok' => "D'acòrdi",
'retrievedfrom' => 'Recuperada de « $1 »',
'youhavenewmessages' => 'Avètz $1 ($2).',
-'newmessageslink' => 'de messatges novèls',
-'newmessagesdifflink' => 'darrièr cambiament',
'youhavenewmessagesfromusers' => "Avètz $1 {{PLURAL:$3|d'un autre utilizaire|de $3 autres utilizaires}} ($2).",
'youhavenewmessagesmanyusers' => 'Avètz $1 de fòrça utilizaires ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un novèl messatge|de novèls messatges}}',
'invalidtitle-knownnamespace' => "Títol invalid amb l'espaci de noms « $2 » e l'intitulat « $3 »",
'invalidtitle-unknownnamespace' => "Títol invalid amb lo numèro d'espaci de noms $1 e l'intitulat « $2 » desconeguts",
'exception-nologin' => 'Pas connectat',
-'exception-nologin-text' => "Aquesta pagina o aquesta accion necessita d'èsser connectada sus aqueste wiki.",
+'exception-nologin-text' => '[[Special:Userlogin|Connectatz-vos]] per poder accedir a aquesta pagina o aquesta accion.',
+'exception-nologin-text-manual' => '$1 per poder accedir a aquesta pagina o aquesta accion.',
# Virus scanner
'virus-badscanner' => "Marrida configuracion : escaner de virús desconegut : ''$1''",
D’autres administrators sus {{SITENAME}} poiràn totjorn accedir al contengut amagat e lo restablir tornamai a travèrs d'aquesta meteissa interfàcia, a mens qu’una restriccion suplementària siá mesa en plaça pels operators del site.",
'revdelete-confirm' => "Confirmatz que volètz efectuar aquesta accion, que ne comprenètz las consequéncias, e qu'o fasètz en acòrd amb [[{{MediaWiki:Policy-url}}|las règlas]].",
'revdelete-suppress-text' => "La supression deu èsser utilizada '''sonque''' dins los cases seguents :
+* Informacions potencialament difamatòrias
* Informacions personalas inapropriadas
*: ''adreça, numèro de telefòn, numèro de seguretat sociala, ...''",
'revdelete-legend' => 'Metre en plaça de restriccions de version :',
'revdelete-hide-user' => 'Nom d’utilizaire/Adreça IP de l’editor',
'revdelete-hide-restricted' => 'Suprimir aquestas donadas als administrators e mai als autres',
'revdelete-radio-same' => '(cambiar pas)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Amagat',
+'revdelete-radio-set' => 'Amagat',
+'revdelete-radio-unset' => 'Visible',
'revdelete-suppress' => 'Suprimir las donadas dels administrators e tanben dels autres utilizaires',
'revdelete-unsuppress' => 'Levar las restriccions sus las versions restablidas',
'revdelete-log' => 'Motiu :',
'preferences' => 'Preferéncias',
'mypreferences' => 'Preferéncias',
'prefs-edits' => 'Nombre d’edicions :',
-'prefsnologin' => 'Vos sètz pas identificat(ada)',
-'prefsnologintext' => 'Vos cal èsser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} connectat(ada)]</span> per modificar vòstras preferéncias d’utilizaire.',
+'prefsnologintext2' => "$1 per definir las preferéncias d'utilizaire.",
'changepassword' => 'Modificacion del senhal',
'prefs-skin' => 'Aparéncia',
'skin-preview' => 'Previsualizar',
'recentchanges-label-minor' => 'Aqueste cambiament es menor',
'recentchanges-label-bot' => 'Aqueste cambiament es estat efectuat per un bòt.',
'recentchanges-label-unpatrolled' => 'Aqueste cambiament es pas estat verificat encara.',
+'recentchanges-legend-newpage' => '$1 - pagina novèla',
'rcnote' => 'Vaquí {{PLURAL:$1|lo darrièr cambiament|los $1 darrièrs cambiaments}} dempuèi {{PLURAL:$2|lo darrièr jorn|los <b>$2</b> darrièrs jorns}}, determinat{{PLURAL:$1||s}} lo $4, a $5.',
'rcnotefrom' => "Vaquí los cambiaments efectuats dempuèi lo '''$2''' ('''$1''' al maximum).",
'rclistfrom' => 'Afichar las modificacions novèlas dempuèi lo $1.',
'filetype-bad-ie-mime' => 'Lo fichièr pòt pas èsser importat perque serià detectat coma « $1 » per Internet Explorer, tipe de fichièr interdich perque potencialament dangierós.',
'filetype-unwanted-type' => "«.$1»''' es un format de fichièr pas desirat.
{{PLURAL:$3|Lo tipe de fichièr preconizat es|Los tipes de fichièrs preconizats son}} $2.",
-'filetype-banned-type' => "''' « .$1 » '''{{PLURAL:$4|est pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}.
-{{PLURAL:$3|lo tipe de fichièr autorizat es |los tipes de fichièrs autorizats son}} $2.",
+'filetype-banned-type' => "''' « .$1 » '''{{PLURAL:$4|es pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}.
+{{PLURAL:$3|Lo tipe de fichièr autorizat es|Los tipes de fichièrs autorizats son}} $2.",
'filetype-missing' => "Lo fichièr a pas cap d'extension (coma « .jpg » per exemple).",
'empty-file' => "Lo fichièr qu'avètz somés èra void.",
'file-too-large' => "Lo fichièr qu'avètz somés èra tròp grand.",
'pageswithprop' => 'Paginas amb una proprietat de pagina',
'pageswithprop-legend' => 'Paginas amb una proprietat de pagina',
+'pageswithprop-text' => "Aquesta pagina fa la lista de las paginas qu'utilizan una proprietat de pagina particulara.",
'pageswithprop-prop' => 'Nom de la proprietat :',
'pageswithprop-submit' => 'Anar',
'pageswithprop-prophidden-long' => 'valor de proprietat de tèxte long amagada ($1)',
'pager-newer-n' => '{{PLURAL:$1|1 mai recenta|$1 mai recentas}}',
'pager-older-n' => '{{PLURAL:$1|1 mai anciana|$1 mai ancianas}}',
'suppress' => 'Supervisor',
+'querypage-disabled' => 'Aquesta pagina especiala es desactivada per de rasons de performàncias.',
# Book sources
'booksources' => 'Obratges de referéncia',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Seguit...',
'unwatching' => 'Fin del seguit...',
+'watcherrortext' => "Una error s'es producha al moment de la modificacion dels paramètres de vòstra lista de seguiment per « $1 ».",
'enotif_mailer' => 'Sistèma d’expedicion de notificacion de {{SITENAME}}',
'enotif_reset' => 'Marcar totas las paginas coma visitadas',
** Temptativa d’intimidacion o agarriment
** Abús d’utilizacion de comptes multiples
** Nom d’utilizaire inacceptable, injuriós o difamant',
+'ipb-hardblock' => 'Empachar los utilizaires connectats de modificar en utilizant aquesta adreça IP',
'ipbcreateaccount' => 'Empachar la creacion de compte',
'ipbemailban' => 'Empachar l’utilizaire de mandar de corrièrs electronics',
'ipbenableautoblock' => 'Blocar automaticament las adreças IP utilizadas per aqueste utilizaire',
'ipbotherreason' => 'Motiu diferent o suplementari',
'ipbhidename' => 'Amagar lo nom d’utilizaire de las modificacions e de las listas',
'ipbwatchuser' => "Seguir las paginas d'utilizaire e de discussion d'aqueste utilizaire",
+'ipb-disableusertalk' => "Empachar l'utilizaire de modificar sa pagina de discussion pendent lo blocatge",
'ipb-change-block' => 'Tornar blocar aqueste utilizaire amb aquestes paramètres',
'ipb-confirm' => 'Confirmar lo blocatge',
'badipaddress' => "L'adreça IP es incorrècta",
'allmessagesdefault' => 'Messatge per defaut',
'allmessagescurrent' => 'Messatge actual',
'allmessagestext' => 'Aquò es la lista de totes los messatges disponibles dins l’espaci MediaWiki.
-Visitatz la [//www.mediawiki.org/wiki/Localisation Localizacion MediaWiki] e [//translatewiki.net translatewiki.net] se desiratz contribuir a la localizacion MediaWiki generica.',
+Visitatz la [https://www.mediawiki.org/wiki/Localisation Localizacion MediaWiki] e [//translatewiki.net translatewiki.net] se desiratz contribuir a la localizacion MediaWiki generica.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' es pas disponible perque '''\$wgUseDatabaseMessages''' es desactivat.",
'allmessages-filter-legend' => 'Filtre',
'allmessages-filter' => 'Filtrar per estat de modificacion :',
'import-invalid-interwiki' => "Impossible d'importar dempuèi lo wiki especificat.",
'import-error-edit' => 'La pagina « $1 » es pas estada importada perque sètz pas autorizat a la modificar.',
'import-error-create' => 'La pagina « $1 » es pas estada importada perque sètz pas autorizat a la crear.',
+'import-error-invalid' => 'Pagina « $1 » es pas importada perque son nom es pas valid.',
'import-options-wrong' => '{{PLURAL:$2|Marrida opcion|Marridas opcions}} : <nowiki>$1</nowiki>',
'import-rootpage-invalid' => 'La pagina raiç provesida es un títol invalid.',
'pageinfo-length' => 'Talha de la pagina (en octets)',
'pageinfo-article-id' => 'Numèro de la pagina',
'pageinfo-language' => 'Lenga del contengut de la pagina',
+'pageinfo-content-model' => 'Modèl de contengut de la pagina',
'pageinfo-robot-policy' => 'Indexacion per robòts',
'pageinfo-robot-index' => 'Autorizada',
'pageinfo-robot-noindex' => 'Interdicha',
'svg-long-desc' => 'Fichièr SVG, resolucion de $1 × $2 pixèls, talha : $3',
'svg-long-desc-animated' => 'Fichièr SVG animat, talha $1 x $2 pixèls, talha del fichièr : $3',
'svg-long-error' => 'Fichièr SVG invalid : $1',
-'show-big-image' => 'Imatge en resolucion mai nauta',
+'show-big-image' => "Fichièr d'origina",
'show-big-image-preview' => "Talha d'aqueste apercebut : $1.",
'show-big-image-other' => '{{PLURAL:$2|Autra resolucion|Autras resolucions}} : $1.',
'show-big-image-size' => '$1 × $2 pixèls',
# External editor support
'edit-externally' => 'Modificar aqueste fichièr en utilizant una aplicacion extèrna',
-'edit-externally-help' => "(Consultatz [//www.mediawiki.org/wiki/Manual:External_editors/oc las instruccions d'installacion] per mai d’entresenhas)",
+'edit-externally-help' => "(Consultatz [https://www.mediawiki.org/wiki/Manual:External_editors/oc las instruccions d'installacion] per mai d’entresenhas)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tot',
# Separators for various lists, etc.
'colon-separator' => ' : ',
+'quotation-marks' => '« $1 »',
# Multipage image navigation
'imgmultipageprev' => '← pagina precedenta',
'version-hook-subscribedby' => 'Definit per',
'version-version' => '(Version $1)',
'version-license' => 'Licéncia',
-'version-poweredby-credits' => "Aqueste wiki fonciona gràcias a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Aqueste wiki fonciona gràcias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'autres',
'version-poweredby-translators' => 'traductors de translatewiki.net',
'version-software' => 'Logicial installat',
# Special:SpecialPages
'specialpages' => 'Paginas especialas',
-'specialpages-note' => '----
-* Paginas especialas normalas.
+'specialpages-note' => '* Paginas especialas normalas.
* <span class="mw-specialpagerestricted">Paginas especialas restrenchas.</span>
* <span class="mw-specialpagecached">Paginas especialas solament en escondedor (poirián èsser obsolètas).</span>',
'specialpages-group-maintenance' => 'Rapòrts de mantenença',
'feedback-error1' => "Error : Resultat de l'IPA pas reconegut",
'feedback-error2' => 'Error : la modificacion a fracassat',
'feedback-error3' => "Error : pas cap de responsa de l'API",
+'feedback-thanks' => 'Mercé ! Vòstre comentari es estat publicat sus la pagina "[$2 $1]".',
'feedback-close' => 'Fach',
+'feedback-bugcheck' => "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
'feedback-bugnew' => 'Ai verificat. Senhalar un bug novèl',
# Search suggestions
'api-error-badaccess-groups' => 'Sètz pas autorizat a cargar de fichièrs sus aqueste wiki.',
'api-error-badtoken' => 'Error intèrna : marrit « geton ».',
'api-error-copyuploaddisabled' => 'Los cargaments via URL son desactivats sus aqueste servidor.',
+'api-error-duplicate' => "I a ja {{PLURAL:$1|[$2 un autre fichièr present]|[$2 d'autres fichièrs presents]}} sul site amb lo meteis contengut.",
+'api-error-duplicate-archive' => "I aviá ja {{PLURAL:$1|[$2 un autre fichièr present]|[$2 d'autres fichièrs presents]}} sul site amb lo meteis contengut, mas {{PLURAL:$1|es estat suprimit|son estats suprimits}}.",
'api-error-duplicate-archive-popup-title' => 'Duplicar {{PLURAL:$1|lo fichièr|los fichièrs}} que {{PLURAL:$1|ja es estat suprimit|je son estats suprimits}}',
'api-error-duplicate-popup-title' => '{{PLURAL:$1|fichièr|fichièrs}} en doble',
'api-error-empty-file' => "Lo fichièr qu'avètz somés èra void.",
'api-error-file-too-large' => "Lo fichièr qu'avètz somés èra tròp grand.",
'api-error-filename-tooshort' => 'Lo nom del fichièr es tròp cort.',
'api-error-filetype-banned' => 'Aqueste tipe de fichièr es interdich',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|es pas un tipe de fichièr autorizat|son pas de tipes de fichièrs autorizats}}.
+{{PLURAL:$3|Lo tipe de fichièr autorizat es|Los tipes de fichièrs autorizats son}} $2.',
'api-error-filetype-missing' => "L'extension del fichièr es mancanta.",
'api-error-hookaborted' => "La modificacion qu'avètz ensajat de realizar es estada anullada per una extension.",
'api-error-http' => 'Error intèrna : se pòt pas connectar al servidor.',
'limitreport-expansiondepth' => 'Mai granda prigondor d’espandiment',
'limitreport-expensivefunctioncount' => 'Nombre de foncions d’analisi costosas',
+# Special:ExpandTemplates
+'expandtemplates' => 'Espandiment dels modèls',
+'expand_templates_intro' => 'Aquesta pagina permet de testar l’espandiment de modèls, que son desvolopats recursivament. Las foncions e las variablas predefinidas, coma <nowiki>{{</nowiki>#language:...}} e <nowiki>{{</nowiki>CURRENTDAY}} tanben son desvolopadas.',
+'expand_templates_title' => 'Títol de l’article, util per exemple se lo modèl utiliza {{FULLPAGENAME}} :',
+'expand_templates_input' => 'Picatz vòstre tèxte aicí :',
+'expand_templates_output' => 'Visualizatz lo resultat :',
+'expand_templates_xml_output' => 'Sortida XML',
+'expand_templates_ok' => "D'acòrdi",
+'expand_templates_remove_comments' => 'Suprimir los comentaris.',
+'expand_templates_remove_nowiki' => 'Suprimís los marcadors <nowiki> dins lo resultat',
+'expand_templates_generate_xml' => "Veire l'arborescéncia XML",
+'expand_templates_preview' => 'Previsualizacion',
+
);
'ok' => 'ଠିକ ଅଛି',
'retrievedfrom' => '"$1" ରୁ ଅଣାଯାଇଅଛି',
'youhavenewmessages' => 'ଆପଣଙ୍କ ପାଇଁ $1 ($2)।',
-'newmessageslink' => 'ନୂଆ ମେସେଜ',
-'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
'youhavenewmessagesfromusers' => 'ଆପଣଙ୍କର {{PLURAL:$3|another user|$3 users}} ($2)ରୁ $1 ଅଛି ।',
'youhavenewmessagesmanyusers' => 'ଆପଣଙ୍କର ବହୁତ ବ୍ୟବହାରକାରୀ($2)ମାନଙ୍କଠାରୁ $1 ଅଛି ।',
'newmessageslinkplural' => '{{PLURAL:$1|ଏକ ନୂଆ ସନ୍ଦେଶ|ନୂଆ ସନ୍ଦେଶ}}',
'preferences' => 'ପସନ୍ଦ',
'mypreferences' => 'ପସନ୍ଦ',
'prefs-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
-'prefsnologin' => 'ଲଗ ଇନ କରିନାହାନ୍ତି',
-'prefsnologintext' => 'ବ୍ୟବହାରକାରୀଙ୍କ ପସନ୍ଦସବୁ ବଦଳାଇବା ପାଇଁ ଆପଣଙ୍କୁ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ଲଗ ଇନ]</span> କରିବାକୁ ପଡ଼ିବ ।',
'changepassword' => 'ପାସୱର୍ଡ଼ ବଦଳାନ୍ତୁ',
'prefs-skin' => 'ବହିରାବରଣ',
'skin-preview' => 'ସାଇତା ଆଗରୁ ଦେଖଣା',
'allmessagesdefault' => 'ଆପେଆପେ ଚିଠିରେ ରହିବା କଥା',
'allmessagescurrent' => 'ଏବେକର ସନ୍ଦେଶ ଲେଖା',
'allmessagestext' => 'ଏଥିରେ ମିଡ଼ିଆଉଇକି ନେମସ୍ପେସରେ ଥିବା ସିଷ୍ଟମ ସନ୍ଦେଶର ଏକ ତାଲିକା ଦିଆଗଲା ।
-ଯଦି ଆପଣ ମୂଳ ଦୟାକରି ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣରେ ଭାଗ ନେବା ପାଇଁ ଚାହାନ୍ତି ତେବେ [//www.mediawiki.org/wiki/Localisation ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣ] ଓ [//translatewiki.net translatewiki.net] ଦେଖନ୍ତୁ ।',
+ଯଦି ଆପଣ ମୂଳ ଦୟାକରି ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣରେ ଭାଗ ନେବା ପାଇଁ ଚାହାନ୍ତି ତେବେ [https://www.mediawiki.org/wiki/Localisation ମିଡ଼ିଆଉଇକି ଆଞ୍ଚଳିକୀକରଣ] ଓ [//translatewiki.net translatewiki.net] ଦେଖନ୍ତୁ ।',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ଅଚଳ କରାଯାଇଥିବାରୁ ଏହି ପୃଷ୍ଠାଟି ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ ।",
'allmessages-filter-legend' => 'ଛାଣିବା',
'allmessages-filter' => 'ଆପଣା ପସନ୍ଦରେ ଛାଣିବେ:',
# External editor support
'edit-externally' => 'ଏକ ବାହାର ଆପ୍ଲିକେସନ ବ୍ୟବହାର କରି ଏହି ଫାଇଲଟିକୁ ବଦଳାଇବା',
-'edit-externally-help' => '(ଆହୁରି ବି [//www.mediawiki.org/wiki/Manual:External_editors ସଜାଡିବା ନିର୍ଦେଶ] ଦେଖନ୍ତୁ)',
+'edit-externally-help' => '(ଆହୁରି ବି [https://www.mediawiki.org/wiki/Manual:External_editors ସଜାଡିବା ନିର୍ଦେଶ] ଦେଖନ୍ତୁ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ସବୁ',
'version-hook-subscribedby' => 'କାହା ଦେଇ ମଗାଯାଇଛି',
'version-version' => '(ଭାଗ $1)',
'version-license' => 'ଲାଇସେନ୍ସ',
-'version-poweredby-credits' => "ଏହି ଉଇକିଟି '''[//www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
+'version-poweredby-credits' => "ଏହି ଉଇକିଟି '''[https://www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
'version-poweredby-others' => 'ବାକିସବୁ',
'version-credits-summary' => 'ଆମେ ଏହି ଲୋକମାନଙ୍କୁ [[Special:Version|MediaWiki]]ରେ ସେମାନକର ଅବଦାନ ପାଇଁ ଚିହ୍ନିବାକୁ ଚାହୁଁଛୁ ।',
'version-license-info' => 'MediaWiki ଏକ ମାଗଣା ସଫ୍ଟୱାର; ଆପଣ ଏହାକୁ ପୁନବଣ୍ଟନ କରିପାରିବେ ବା GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଅଧିନରେ ବଦଳାଇପାରିବେ ଯାହା ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ ଦେଇ ପ୍ରକାଶିତ ହୋଇଥିବ।
# Special:SpecialPages
'specialpages' => 'ବିଶେଷ ପୃଷ୍ଠା',
-'specialpages-note' => '----
-* ସାଧାରଣ ବିଶେଷ ପୃଷ୍ଠାମାନ ।
+'specialpages-note' => '* ସାଧାରଣ ବିଶେଷ ପୃଷ୍ଠାମାନ ।
* <span class="mw-specialpagerestricted">କିଳାଯାଇଥିବା ବିଶେଷ ପୃଷ୍ଠାମାନ ।</span>',
'specialpages-group-maintenance' => 'ରକ୍ଷଣାବେକ୍ଷଣା ବିବରଣୀ',
'specialpages-group-other' => 'ବାକି ବିଶେଷ ପୃଷ୍ଠା',
'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
+# Special:ExpandTemplates
+'expand_templates_input' => 'ଇନପୁଟ ବିଷୟ:',
+'expand_templates_output' => 'ପରିଣାମ',
+'expand_templates_ok' => 'ଠିକ ଅଛି',
+'expand_templates_remove_comments' => 'ମତାମତ ହଟାନ୍ତୁ',
+'expand_templates_preview' => 'ଦେଖଣା',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Ист æрцыд {{grammar:ablative|"$1"}}',
'youhavenewmessages' => 'Райстай $1 ($2).',
-'newmessageslink' => 'ног фыстæгтæ',
-'newmessagesdifflink' => 'фæстаг ивд',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|Æндæр архайæгæй|$3 архайæгæй}} дæм $1 æрцыд ($2).',
'youhavenewmessagesmanyusers' => 'Бирæ архайæгæй дæм $1 æрцыдис ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ног фыстæг|ног фыстæджытæ}}',
'preferences' => 'Уагæвæрдтæ',
'mypreferences' => 'Уагæвæрдтæ',
'prefs-edits' => 'Ивдтыты нымæц:',
-'prefsnologin' => 'Системæйы нæ дæ',
'changepassword' => 'Пароль ивæн',
'prefs-skin' => 'Цъар',
'skin-preview' => 'Разæркаст',
# External editor support
'edit-externally' => 'Ивын ацы файл æддаг программæйæ',
-'edit-externally-help' => '(Кæс [//www.mediawiki.org/wiki/Manual:External_editors сывæрыны уагæвæрдтæ] фылдæр базонынæн)',
+'edit-externally-help' => '(Кæс [https://www.mediawiki.org/wiki/Manual:External_editors сывæрыны уагæвæрдтæ] фылдæр базонынæн)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'иууылдæр',
'version-other' => 'Æндæр',
'version-version' => '(Фæлтæр $1)',
'version-license' => 'Лицензи',
-'version-poweredby-credits' => "Ацы викийæн тых радта '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ацы викийæн тых радта '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'æндæртæ',
'version-software-version' => 'Верси',
'duration-centuries' => '$1 {{PLURAL:$1|æнус|æнусы}}',
'duration-millennia' => '$1 {{PLURAL:$1|мин аз|мин азы}}',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Афтæ уæд!',
+'expand_templates_preview' => 'Разæркаст',
+
);
* @author Babanwalia
* @author Gman124
* @author Guglani
+ * @author Jimidar
* @author Kaganer
* @author Raj Singh
* @author Saurabh123
'ok' => 'ਠੀਕ ਹੈ',
'retrievedfrom' => '"$1" ਤੋਂ ਲਿਆ',
'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
-'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
-'newmessagesdifflink' => 'ਆਖ਼ਰੀ ਤਬਦੀਲੀ',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
'youhavenewmessagesmanyusers' => 'ਕਈ ਯੂਜ਼ਰ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
'gotaccount' => 'ਖਾਤਾ ਪਹਿਲਾਂ ਹੀ ਹੈ? $1',
'gotaccountlink' => 'ਲਾਗਇਨ',
'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
-'userlogin-resetpassword-link' => 'à¨\86ਪਣਾ ਪਾਸਵਰਡ ਫà©\87ਰ ਬਣਾà¨\93',
+'userlogin-resetpassword-link' => 'à¨\86ਪਣਾ ਪਾਸਵਰਡ à¨à©\81ੱਲ à¨\97à¨\8f ਹà©\8b?',
'helplogin-url' => 'Help: ਲਾਗਇਨ ਕਰਨਾ',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ਲਾਗਇਨ ਹੋਣ ਲਈ ਮੱਦਦ]]',
'createacct-join' => 'ਆਪਣੀ ਜਾਣਕਾਰੀ ਹੇਠਾਂ ਦਿਉ।',
'revdelete-hide-user' => 'ਸੋਧਣ ਵਾਲ਼ੇ ਦਾ ਮੈਂਬਰ-ਨਾਂ/IP ਪਤਾ ਲੁਕਾਓ',
'revdelete-hide-restricted' => 'ਪ੍ਰਸ਼ਾਸਕਾਂ ਅਤੇ ਹੋਰਾਂ ਦੀ ਸਮੱਗਰੀ ਲੁਕਾਓ',
'revdelete-radio-same' => '(ਨਾ ਬਦਲੋ)',
-'revdelete-radio-set' => 'ਹਾਂ',
-'revdelete-radio-unset' => 'ਨਹà©\80à¨\82',
+'revdelete-radio-set' => 'ਲà©\81à¨\95ਵਾਂ',
+'revdelete-radio-unset' => 'ਪਰà¨\97à¨\9f',
'revdelete-suppress' => 'ਪ੍ਰਸ਼ਾਸਕਾਂ ਅਤੇ ਹੋਰਾਂ ਦੀ ਸਮੱਗਰੀ ਲੁਕਾਓ',
'revdelete-unsuppress' => 'ਮੁੜ ਬਹਾਲ ਕੀਤੀਆਂ ਰੀਵਿਜ਼ਨਾਂ ਤੋਂ ਰੋਕਾਂ ਹਟਾਓ',
'revdelete-log' => 'ਕਾਰਨ:',
'preferences' => 'ਪਸੰਦਾਂ',
'mypreferences' => 'ਪਸੰਦਾਂ',
'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
-'prefsnologin' => 'ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ',
-'prefsnologintext' => 'ਵਰਤੋਂਕਾਰ ਪਸੰਦਾਂ ਸੈੱਟ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ਲਾਗਇਨ]</span> ਕਰਨਾ ਪਵੇਗਾ।',
'changepassword' => 'ਪਾਸਵਰਡ ਬਦਲੋ',
'prefs-skin' => 'ਸਕਿਨ',
'skin-preview' => 'ਝਲਕ',
'recentchanges-label-minor' => 'ਇਹ ਇੱਕ ਛੋਟੀ ਸੋਧ ਹੈ',
'recentchanges-label-bot' => 'ਇਹ ਸੋਧ ਇੱਕ ਬੋਟ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਸੀ',
'recentchanges-label-unpatrolled' => 'ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ',
+'recentchanges-legend-newpage' => '$1 - ਨਵਾਂ ਸਫ਼ਾ',
'rcnote' => "$4, $5 ਤੱਕ ਆਖਰੀ {{PLURAL:$2|ਦਿਨ|'''$2''' ਦਿਨਾਂ}} ਵਿੱਚ {{PLURAL:$1|'''1''' ਬਦਲੀ ਹੋਈ ਹੈ।|'''$1''' ਬਦਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੇ) ਬਦਲਾਵ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
'rclistfrom' => '$1 ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਨਵੀਆਂ ਸੋਧਾਂ ਵਖਾਓ',
'file-info-size' => '$1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਅਕਾਰ: $3, MIME ਕਿਸਮ: $4',
'file-nohires' => 'ਇਸ ਤੋਂ ਵੱਡੀ ਤਸਵੀਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
'svg-long-desc' => 'SVG ਫ਼ਾਈਲ, ਆਮ ਤੌਰ ’ਤੇ $1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਦਾ ਅਕਾਰ: $3',
-'show-big-image' => 'ਪà©\82ਰਾ ਰà©\88à¨\9cà©\8bਲà©\87ਸ਼ਨ',
+'show-big-image' => 'à¨\85ਸਲ ਫਾà¨\88ਲ',
# Special:NewFiles
'newimages' => 'ਨਵੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਗੈਲਰੀ',
# External editor support
'edit-externally' => 'ਬਾਹਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤ ਕੇ ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਸੋਧੋ',
-'edit-externally-help' => '(ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
+'edit-externally-help' => '(ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ਸਭ',
# Image rotation
'rotate-comment' => 'ਤਸਵੀਰ ਨੂੰ ਘੜੀ ਦੇ ਰੁਖ ਵਿਚ $1 {{PLURAL:$1|ਡਿਗਰੀ|ਡਿਗਰੀਆਂ}} ਨਾਲ਼ ਘੁਮਾਇਆ ਗਿਆ',
+# Special:ExpandTemplates
+'expand_templates_preview' => 'ਝਲਕ',
+
);
'ok' => 'Sigi',
'retrievedfrom' => 'Mekua ya king "$1"',
'youhavenewmessages' => 'Atin kang $1 ($2).',
-'newmessageslink' => 'bayung mensahi',
-'newmessagesdifflink' => 'tauling miyalilan',
'youhavenewmessagesmulti' => 'Atin kang bayung mensahi king $1',
'editsection' => 'mag-edit',
'editold' => 'alilan',
'preferences' => 'Pinili',
'mypreferences' => '↓Deng pinili ku',
'prefs-edits' => 'Bilang da reng edit:',
-'prefsnologin' => 'ekamaka log',
-'prefsnologintext' => 'Kailangan kang [[Special:UserLogin|maka-login]] ba mong apagana deng pinili ning talagamit (user preferences).',
'changepassword' => 'Alilan ya ing password',
'prefs-skin' => 'Balat',
'skin-preview' => 'I-preview',
# External editor support
'edit-externally' => 'I-edit me ing simpan a ini kapamilatan ning aplikasiun o program a ibat king kilual.',
-'edit-externally-help' => '(Lon me ing [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] para king karagdagang informacion)',
+'edit-externally-help' => '(Lon me ing [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] para king karagdagang informacion)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'eganagana',
'ok' => 'OK',
'retrievedfrom' => 'Érprind din "$1"',
'youhavenewmessages' => 'Os avez $1 ($2).',
-'newmessageslink' => 'nouvieus messaches',
-'newmessagesdifflink' => 'darin cangemint',
'youhavenewmessagesmulti' => 'Os avez des nouvieus messaches su $1',
'editsection' => 'éditer',
'editold' => 'éditer',
# External editor support
'edit-externally' => "Éditer ch'fichié-lo aveuc eune éstérne aplicachon",
-'edit-externally-help' => '(Vir [//www.mediawiki.org/wiki/Manual:External_editors/fr chés instruccions d’installachon] pou pus d’informachons)',
+'edit-externally-help' => '(Vir [https://www.mediawiki.org/wiki/Manual:External_editors/fr chés instruccions d’installachon] pou pus d’informachons)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tertous',
# Special:SpecialPages
'specialpages' => 'Paches éspéchiales',
-'specialpages-note' => '----
-* Paches éspéchiales conformes.
+'specialpages-note' => '* Paches éspéchiales conformes.
* <span class="mw-specialpagerestricted">Paches éspéchiales réstrintes.</span>
* <span class="mw-specialpagecached">Paches éspéchiales seulemint in muche (pétète des viuseries).</span>',
'specialpages-group-maintenance' => "Rapports d'maintenanche",
*
* @author Kaganer
* @author Krinkle
+ * @author Shirayuki
* @author Xqt
* @author לערי ריינהארט
*/
'ok' => 'OK',
'retrievedfrom' => 'Vun „$1“',
'youhavenewmessages' => 'Du hast $1 uff deinem $2.',
-'newmessageslink' => 'Neiichkeede',
-'newmessagesdifflink' => 'Gschwetz-Blatt',
'youhavenewmessagesmulti' => 'Du hascht neie Comments: $1',
'editsection' => 'Ennere',
'editold' => 'Ennere',
'recentchanges' => 'Was mer letscht geduh henn',
'recentchanges-label-minor' => 'Gleene Ennering',
'recentchanges-label-bot' => 'Ennering vun em Waddefresser',
+'recentchanges-legend-newpage' => '$1 - neies Blatt',
'rcshowhideminor' => 'Gleene Enneringe $1',
'rcshowhidebots' => 'Bots $1',
'rcshowhideanons' => 'IP-Yuuser $1',
# Search suggestions
'searchsuggest-search' => 'Uffgucke',
+# Special:ExpandTemplates
+'expand_templates_output' => 'Result',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Anmaerrickinge lösche',
+'expand_templates_preview' => 'Aagucke',
+
);
'ok' => 'Alla gud',
'retrievedfrom' => 'Vun "$1"',
'youhavenewmessages' => 'Du hoschd $1 ($2).',
-'newmessageslink' => 'naije Nochrischde',
-'newmessagesdifflink' => 'ledschdi Ännarung',
'newmessagesdifflinkplural' => 'ledschdi {{PLURAL:$1|Ännarung|Ännarunge}}',
'youhavenewmessagesmulti' => 'Do hoschd ä Nochrischd grischd: $1',
'editsection' => 'beawaide',
# External editor support
'edit-externally' => 'Die Dadai midm õnnare Weagzaisch beawaide',
-'edit-externally-help' => '(Gugg uff [//www.mediawiki.org/wiki/Manual:External_editors Inschdallazionsõwaisunge] fa mea Auskinfd)',
+'edit-externally-help' => '(Gugg uff [https://www.mediawiki.org/wiki/Manual:External_editors Inschdallazionsõwaisunge] fa mea Auskinfd)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alle',
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Źródło „$1”',
'youhavenewmessages' => 'Masz $1 ($2).',
-'newmessageslink' => 'nowe wiadomości',
-'newmessagesdifflink' => 'różnica z poprzednią wersją',
'youhavenewmessagesfromusers' => 'Masz $1 od {{PLURAL:$3|innego użytkownika|$3 użytkowników}} ($2).',
'youhavenewmessagesmanyusers' => 'Masz $1 od wielu użytkowników ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|jedną wiadomość|nowe wiadomości}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ostatnia zmiana|ostatnie zmiany}}',
+'newmessageslinkplural' => '{{PLURAL:$1|jedną wiadomość|999=nowe wiadomości}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ostatnia zmiana|999=ostatnie zmiany}}',
'youhavenewmessagesmulti' => 'Masz nowe wiadomości na $1',
'editsection' => 'edytuj',
'editold' => 'edytuj',
'invalidtitle-knownnamespace' => 'Nieprawidłowa nazwa w obszarze nazw "$2" o treści "$3"',
'invalidtitle-unknownnamespace' => 'Nieprawidłowa nazwa z nieznaną liczbą przestrzeni nazw $1 o treści "$2"',
'exception-nologin' => 'Nie jesteś zalogowany/a',
-'exception-nologin-text' => 'Ta strona lub akcja wymaga bycia zalogowanym na tej wiki.',
+'exception-nologin-text' => 'Proszę [[Special:Userlogin|zaloguj się]] aby mieć dostęp do tej strony lub akcji.',
+'exception-nologin-text-manual' => 'Musisz $1 aby mieć dostęp do tej strony lub akcji.',
# Virus scanner
'virus-badscanner' => "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
'passwordreset-domain' => 'Domena',
'passwordreset-capture' => 'Czy pokazywać treść wiadomości e‐mail?',
'passwordreset-capture-help' => 'Jeśli zaznaczysz to pole, zobaczysz treść wiadomości e‐mail z tymczasowym hasłem, w tej samej formie w jakiej jest wysyłana do użytkownika.',
-'passwordreset-email' => 'Adres e‐mail',
+'passwordreset-email' => 'Adres e‐mail:',
'passwordreset-emailtitle' => 'Dane konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}',
'passwordreset-emailtext-ip' => 'Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}
'changeemail-header' => 'Zmiana adresu e‐mail',
'changeemail-text' => 'Wypełnij formularz, jeśli chcesz zmienić swój adres poczty elektronicznej. Będziesz musiał wprowadzić hasło, aby potwierdzić tę zmianę.',
'changeemail-no-info' => 'Musisz być zalogowany, by uzyskać bezpośredni dostęp do tej strony.',
-'changeemail-oldemail' => 'Obecny adres e‐mail',
-'changeemail-newemail' => 'Nowy adres e-mail',
+'changeemail-oldemail' => 'Obecny adres e‐mail:',
+'changeemail-newemail' => 'Nowy adres e-mail:',
'changeemail-none' => '(brak)',
-'changeemail-password' => 'Hasło {{SITENAME}}:',
+'changeemail-password' => 'Twoje hasło:',
'changeemail-submit' => 'Zapisz nowy',
'changeemail-cancel' => 'Anuluj',
Inni administratorzy {{GRAMMAR:D.lp|{{SITENAME}}}} nadal będą mieć dostęp do ukrytych treści oraz będą mogli je odtworzyć używając standardowych mechanizmów, chyba że nałożono dodatkowe ograniczenia.",
'revdelete-confirm' => 'Potwierdź, że chcesz to zrobić zgodnie z [[{{MediaWiki:Policy-url}}|zasadami]] i że rozumiesz konsekwencje.',
'revdelete-suppress-text' => "Ukrywanie powinno być używane '''wyłącznie''' w sytuacji:
+* Informacji, która może być zniesławieniem
* Ujawnienie danych osobowych
*: ''adres domowy, numer telefonu, numer PESEL itp''",
'revdelete-legend' => 'Ustaw ograniczenia widoczności',
'revdelete-hide-user' => 'Ukryj nazwę użytkownika/adres IP',
'revdelete-hide-restricted' => 'Ukryj informacje przed administratorami tak samo jak przed innymi',
'revdelete-radio-same' => '(bez zmian)',
-'revdelete-radio-set' => 'Tak',
-'revdelete-radio-unset' => 'Nie',
+'revdelete-radio-set' => 'Ukryty',
+'revdelete-radio-unset' => 'Widoczny',
'revdelete-suppress' => 'Utajnij informacje przed administratorami, tak samo jak przed innymi',
'revdelete-unsuppress' => 'Wyłącz utajnianie dla odtwarzanej historii zmian',
'revdelete-log' => 'Powód',
'preferences' => 'Preferencje',
'mypreferences' => 'Preferencje',
'prefs-edits' => 'Liczba edycji',
-'prefsnologin' => 'Nie jesteś zalogowany',
-'prefsnologintext' => 'Musisz się <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} zalogować]</span> przed zmianą swoich preferencji.',
+'prefsnologintext2' => 'Musisz $1 aby ustawić preferencje.',
'changepassword' => 'Zmiana hasła',
'prefs-skin' => 'Skórka',
'skin-preview' => 'podgląd',
'recentchanges-label-minor' => 'To jest drobna zmiana',
'recentchanges-label-bot' => 'Ta edycja została wykonana przez bota',
'recentchanges-label-unpatrolled' => 'Ta edycja nie została jeszcze sprawdzona',
+'recentchanges-legend-newpage' => '$1 – nowa strona',
'rcnote' => "Poniżej {{PLURAL:$1|znajduje się '''1''' ostatnia zmiana wykonana|znajdują się ostatnie '''$1''' zmiany wykonane|znajduje się ostatnich '''$1''' zmian wykonanych}} w ciągu {{PLURAL:$2|ostatniego dnia|ostatnich '''$2''' dni}}, licząc od $5 dnia $4.",
'rcnotefrom' => "Poniżej pokazano zmiany wykonane po '''$2''' (nie więcej niż '''$1''' pozycji).",
'rclistfrom' => 'Pokaż nowe zmiany od $1',
mail – $PAGEEDITOR_EMAIL
wiki – $PAGEEDITOR_WIKI
-W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony. Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych.
+W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony jako zalogowany. Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych.
- Wiadomość z systemu powiadomień {{GRAMMAR:D.lp|{{SITENAME}}}}
+Wiadomość z systemu powiadomień {{GRAMMAR:D.lp|{{SITENAME}}}}
--
W celu zmiany ustawień swojej listy obserwowanych odwiedź
'allmessagesdefault' => 'Tekst domyślny',
'allmessagescurrent' => 'Tekst obecny',
'allmessagestext' => 'Lista wszystkich komunikatów systemowych dostępnych w przestrzeni nazw MediaWiki.
-Odwiedź [//www.mediawiki.org/wiki/Localisation Tłumaczenie MediaWiki] oraz [//translatewiki.net translatewiki.net], jeśli chcesz uczestniczyć w tłumaczeniu oprogramowania MediaWiki.',
+Odwiedź [https://www.mediawiki.org/wiki/Localisation Tłumaczenie MediaWiki] oraz [//translatewiki.net translatewiki.net], jeśli chcesz uczestniczyć w tłumaczeniu oprogramowania MediaWiki.',
'allmessagesnotsupportedDB' => "Ta strona nie może być użyta, ponieważ zmienna '''\$wgUseDatabaseMessages''' jest wyłączona.",
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter' => 'Filtrowanie według stanu modyfikacji:',
'pageinfo-length' => 'Długość strony (w bajtach)',
'pageinfo-article-id' => 'Identyfikator strony',
'pageinfo-language' => 'Język zawartości strony',
+'pageinfo-content-model' => 'Model zawartości',
'pageinfo-robot-policy' => 'Indeksowanie przez roboty',
'pageinfo-robot-index' => 'Dozwolone',
'pageinfo-robot-noindex' => 'Niedozwolone',
'svg-long-desc' => 'Plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
'svg-long-desc-animated' => 'Animowany plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
'svg-long-error' => 'Nieprawidłowy plik SVG:$1',
-'show-big-image' => 'Pełna rozdzielczość',
+'show-big-image' => 'Rozmiar pierwotny',
'show-big-image-preview' => 'Rozmiar podglądu – $1.',
'show-big-image-other' => '{{PLURAL:$2|Inna rozdzielczość|Inne rozdzielczości}}: $1.',
'show-big-image-size' => '$1 x $2 pikseli',
# External editor support
'edit-externally' => 'Edytuj plik, używając zewnętrznej aplikacji',
-'edit-externally-help' => '(Więcej informacji o używaniu [//www.mediawiki.org/wiki/Manual:External_editors zewnętrznych edytorów]).',
+'edit-externally-help' => '(Więcej informacji o używaniu [https://www.mediawiki.org/wiki/Manual:External_editors zewnętrznych edytorów]).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'wszystkie',
# Separators for various lists, etc.
'percent' => '$1 %',
+'quotation-marks' => '„$1”',
# Multipage image navigation
'imgmultipageprev' => '← poprzednia strona',
'version-hook-subscribedby' => 'Zapotrzebowany przez',
'version-version' => '(Wersja $1)',
'version-license' => 'Licencja',
-'version-poweredby-credits' => "Ta wiki korzysta z oprogramowania '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001‐$1 $2.",
+'version-poweredby-credits' => "Ta wiki korzysta z oprogramowania '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001‐$1 $2.",
'version-poweredby-others' => 'inni',
'version-poweredby-translators' => 'tłumacze translatewiki.net',
'version-credits-summary' => 'Następujące osoby wniosły istotny wkład w rozwój oprogramowania [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Przekierowanie według pliku, użytkownika albo identyfikatora wersji',
'redirect-legend' => 'Przekieruj do pliku lub strony',
-'redirect-summary' => 'Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/103]].',
+'redirect-summary' => 'Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Przejdź',
'redirect-lookup' => 'Wyszukaj:',
'redirect-value' => 'Wartość:',
# Special:SpecialPages
'specialpages' => 'Strony specjalne',
-'specialpages-note' => '----
-* Normalne strony specjalne.
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normalne strony specjalne.
* <span class="mw-specialpagerestricted">Zastrzeżone strony specjalne.</span>',
'specialpages-group-maintenance' => 'Raporty konserwacyjne',
'specialpages-group-other' => 'Inne strony specjalne',
'limitreport-expansiondepth' => 'Największa głębokość ekspansji',
'limitreport-expensivefunctioncount' => 'Liczba wywołań kosztownych funkcji parsera',
+# Special:ExpandTemplates
+'expandtemplates' => 'Rozwijanie szablonów',
+'expand_templates_intro' => 'We wprowadzonym na tej stronie tekście źródłowym zostaną rozwinięte rekurencyjnie wszystkie szablony.
+Rozwinięte także zostaną funkcje parsera takie jak
+<code><nowiki>{{</nowiki>#language:…}}</code> i zmienne jak
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+W zasadzie rozwijane jest prawie wszystko w podwójnych nawiasach klamrowych.',
+'expand_templates_title' => 'Pozorny tytuł strony dla zmiennych takich jak {{FULLPAGENAME}}',
+'expand_templates_input' => 'Tekst wejściowy',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'wynik w formacie XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Usuń komentarze',
+'expand_templates_remove_nowiki' => 'Ukrywaj w wyniku znaczniki <nowiki>',
+'expand_templates_generate_xml' => 'Pokaż drzewo analizatora składni w formacie XML',
+'expand_templates_preview' => 'Podgląd',
+
);
'ok' => 'Va bin',
'retrievedfrom' => 'Pijàit da «$1»',
'youhavenewmessages' => "A l'ha $1 ($2).",
-'newmessageslink' => 'ëd mëssagi neuv',
-'newmessagesdifflink' => 'ùltima modìfica',
'youhavenewmessagesfromusers' => "A l'ha $1 da {{PLURAL:$3|n'autr utent|$3 utent}} ($2).",
'youhavenewmessagesmanyusers' => "A l'ha $1 da vàire utent ($2).",
-'newmessageslinkplural' => '{{PLURAL:$1|un mëssagi neuv|$1 mëssagi neuv}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ùltima modìfica|ùltime modìfiche}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mëssagi neuv|999=dij mëssagi neuv}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ùltima modìfica|999=ùltime modìfiche}}',
'youhavenewmessagesmulti' => "A l'ha dij neuv mëssagi an $1",
'editsection' => 'modifiché',
'editold' => 'modifiché',
'invalidtitle-knownnamespace' => "Tìtol ch'a va nen bin con lë spassi nominal «$2» e ël test «$3»",
'invalidtitle-unknownnamespace' => 'Tìtol pa bon con nùmer dë spassi nominal $1 e test «$2» sconossù',
'exception-nologin' => 'Nen rintrà ant ël sistema',
-'exception-nologin-text' => "Costa pàgina o assion a l'ha damanca ch'a sia rintrà an costa wiki.",
+'exception-nologin-text' => "Për piasì, [[Special:Userlogin|ch'a rintra ant ël sistema]] për podèj acede a costa pàgina o a costa assion.",
+'exception-nologin-text-manual' => "Për piasì, ch'a $1 për podèj acede a costa pàgina o costa assion.",
# Virus scanner
'virus-badscanner' => "Configurassion falà: antivìrus nen conossù: ''$1''",
'revdelete-text' => "Le version scancelà e j'event a së s-ciaireran sempe ant la stòria dla pàgina e ant ij registr, ma sò test al pùblich a j'andrà pì nen.'''
J'àutri aministrator dzora a {{SITENAME}} a saran ancó sempe bon a s-ciairé ël contnù stërmà e a podran disdëscancelelo andré con la midema antërfacia, sempe che a sia nen stàita butà na restrission adissional.",
'revdelete-confirm' => "Për piasì, ch'a confema ch'a veul fé sòn, ch'as rend cont dle conseguense, e ch'a lo fa an acòrd con [[{{MediaWiki:Policy-url}}|le régole]].",
-'revdelete-suppress-text' => "La scancelassion a dovrìa '''mach''' esse dovrà për cost cas:
-* Anformassion përsonaj nen aproprià
+'revdelete-suppress-text' => "La scancelassion a dovrìa '''mach''' esse dovrà an costi cas:
+* Anformassion ch'a podrìo esse difamatòrie
+* Anformassion përsonaj inapropià
*: ''adrësse ëd ca e nùmer ëd teléfon, còdes fiscaj, e via fòrt''",
'revdelete-legend' => 'But-je coste limitassion-sì a le version scancelà:',
'revdelete-hide-text' => 'Test dla revision',
'revdelete-hide-user' => "Stranòm/adrëssa IP dl'utent",
'revdelete-hide-restricted' => "Stërmé j'anformassion a j'aministrator tan-me a j'àutri",
'revdelete-radio-same' => '(cambia pa)',
-'revdelete-radio-set' => 'Visìbil',
-'revdelete-radio-unset' => 'Stërmà',
+'revdelete-radio-set' => 'Stërmà',
+'revdelete-radio-unset' => 'Visìbil',
'revdelete-suppress' => "Smon-je pa ij dat gnanca a j'aministrator",
'revdelete-unsuppress' => "Gava le limitassion da 'nt le version ciapà andaré",
'revdelete-log' => 'Rason:',
'preferences' => 'Mè gust',
'mypreferences' => 'Gust',
'prefs-edits' => 'Nùmer ëd modìfiche fàite:',
-'prefsnologin' => "A l'é ancó pa rintrà ant ël sistema",
-'prefsnologintext' => 'A deuv esse <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} intrà ant ël sistema]</span> për amposté ij sò gust.',
+'prefsnologintext2' => "Për piasì, ch'a $1 për definì ij gust d'utent.",
'changepassword' => 'Cangé la ciav',
'prefs-skin' => 'Facia',
'skin-preview' => 'Preuva',
'recentchanges-label-minor' => "Costa a l'é na modìfica cita",
'recentchanges-label-bot' => "Sa modìfica a l'é stàita fàita da un trigomiro",
'recentchanges-label-unpatrolled' => "Sta modìfica-sì a l'é pa ancó stàita verificà",
+'recentchanges-legend-newpage' => '$1 - pàgina neuva',
'rcnote' => "Ambelessì sota a-i {{PLURAL:$1|é '''1''' modìfica|son j'ùltime '''$1''' modìfiche}} ant j'ùltim {{PLURAL:$2|di|'''$2''' di}}, a parte da $5 dël $4.",
'rcnotefrom' => ' Ambelessì sota a-i é la lista dle modìfiche da <b>$2</b> (fin-a a <b>$1</b>).',
'rclistfrom' => 'Mostré le modìfiche a parte da $1',
pòsta eletrònica: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-A-i sarà pì gnun-a notìfica ëd modìfiche se chiel a vìsita nen costa pàgina. Che as visa che a peul cangeje la configurassion dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba ch\'as ten sot-euj.
+A-i sarà pì gnun-a notìfica an cas d\'àutre atività se chiel a vìsita nen costa pàgina da colegà. Che as visa che a peul cangeje la configurassion dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba ch\'as ten sot-euj.
Comunicassion dël sistema ëd notìfica da {{SITENAME}}
'allmessagesdefault' => "Test che a-i sarìa se a-i fusso pa 'd modìfiche",
'allmessagescurrent' => 'Test corent',
'allmessagestext' => "Costa-sì a l'é na lista dij mëssagi ëd sistema disponìbij ant lë spassi nominal MediaWiki.
-Për piasì, ch'a vìsita la [//www.mediawiki.org/wiki/Localisation Localisassion ëd MediaWiki] e [//translatewiki.net translatewiki.net] se a veul contribuì a la localisassion general ëd MediaWiki.",
+Për piasì, ch'a vìsita la [https://www.mediawiki.org/wiki/Localisation Localisassion ëd MediaWiki] e [//translatewiki.net translatewiki.net] se a veul contribuì a la localisassion general ëd MediaWiki.",
'allmessagesnotsupportedDB' => "Sta pàgina-sì a peul pa esse dovrà përchè '''\$wgUseDatabaseMessages''' a l'é stàit disabilità.",
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter' => 'Filtré për stat ëd përsonalisassion:',
'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pontin, amzura dl'archivi: $3",
'svg-long-desc-animated' => "Archivi SVG animà, dimension $1 × $2 pontin, amzura dl'archivi: $3",
'svg-long-error' => 'Archivi SVG nen bon: $1',
-'show-big-image' => 'Version a arzolussion pien-a',
+'show-big-image' => 'Archivi original',
'show-big-image-preview' => 'Amzure dë sta preuva: $1.',
'show-big-image-other' => '{{PLURAL:$2|Àutra arzolussion|Àutre arzolussion}}: $1.',
'show-big-image-size' => '$1 × $2 pontin',
# External editor support
'edit-externally' => "Modifiché st'archivi con un programa estern",
-'edit-externally-help' => "(Lese [//www.mediawiki.org/wiki/Manual:External_editors j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
+'edit-externally-help' => "(Lese [https://www.mediawiki.org/wiki/Manual:External_editors j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tute',
'confirm-unwatch-button' => 'Va bin',
'confirm-unwatch-top' => 'Gavé sta pàgina-sì da la lista dle ròbe che as ten-o sot euj?',
+# Separators for various lists, etc.
+'quotation-marks' => '«$1»',
+
# Multipage image navigation
'imgmultipageprev' => '← pàgina andré',
'imgmultipagenext' => 'pàgina anans →',
'version-hook-subscribedby' => 'A son scrivusse',
'version-version' => '(Version $1)',
'version-license' => 'Licensa',
-'version-poweredby-credits' => "Costa wiki-sì a marcia mersì a '''[//www.mediawiki.org/ MediaWiki]''', licensa © 2001-$1 $2.",
+'version-poweredby-credits' => "Costa wiki-sì a marcia grassie a '''[https://www.mediawiki.org/ MediaWiki]''', licensa © 2001-$1 $2.",
'version-poweredby-others' => 'àutri',
'version-poweredby-translators' => 'tradutor ëd translatewiki.net',
'version-credits-summary' => 'I tnoma a aringrassié le përson-e sì-dapress për soa contribussion a [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Pàgine Speciaj',
-'specialpages-note' => '----
-* Pàgine speciaj normaj.
-* <span class="mw-specialpagerestricted">Pàgine speciaj riservà.</span>
-* <span class="mw-specialpagecached">Pàgine speciaj mach an memòria local (a peulo esse veje).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Pàgine speciaj normaj.
+* <span class="mw-specialpagerestricted">Pàgine speciaj riservà.</span>',
'specialpages-group-maintenance' => 'Rapòrt ëd manutension',
'specialpages-group-other' => 'Àutre pàgine speciaj',
'specialpages-group-login' => 'Intré ant ël sistema / creé un cont',
'limitreport-expansiondepth' => "Pi granda përfondità d'espansion",
'limitreport-expensivefunctioncount' => "Cont ëd le fonsion d'anàlisi care",
+# Special:ExpandTemplates
+'expandtemplates' => 'Anàlisi djë stamp',
+'expand_templates_intro' => "Sta pàgina special-sì a pija dël test e a-i fa n'anàlisi arcorenta ëd tuti jë stamp ch'a l'ha andrinta.
+A l'analisa ëdcò le fonsion anterpretà coma
+<code><nowiki>{{</nowiki>#language:…}}</code>, e le variàbij coma
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+An efet, a espand praticament tut lòn ch'a-i é antrames dle grafe dobie.",
+'expand_templates_title' => 'Tìtol ëd contest për {{FULLPAGENAME}} e via fòrt:',
+'expand_templates_input' => 'Test da analisé:',
+'expand_templates_output' => 'Arzultà',
+'expand_templates_xml_output' => 'Output an XML',
+'expand_templates_ok' => 'Bin parèj',
+'expand_templates_remove_comments' => 'Gava via ij coment',
+'expand_templates_remove_nowiki' => "Gava ij tag <nowiki> ant l'arzultà",
+'expand_templates_generate_xml' => "Mosta l'erbo ëd parse XML",
+'expand_templates_preview' => 'Preuva',
+
);
'ok' => 'ٹھیک اے',
'retrievedfrom' => '"$1" توں لیا',
'youhavenewmessages' => 'تواڈے لئی $1 ($2).',
-'newmessageslink' => 'نواں سنیآ',
-'newmessagesdifflink' => 'آخری تبدیلی',
'youhavenewmessagesmulti' => 'تھاڈے لی $1 تے نوں سنیعہ اے۔',
'editsection' => 'لکھو',
'editold' => 'لکھو',
'preferences' => 'تانگاں',
'mypreferences' => 'میریاں تانگاں',
'prefs-edits' => 'تبدیلیاں دی گنتی:',
-'prefsnologin' => 'لاگ ان نئیں او',
-'prefsnologintext' => 'تسیں لازمی <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} لاگ ان]</span> ورتن تانگاں سیٹ کرنا.',
'changepassword' => 'کنجی بدلو',
'prefs-skin' => 'چھاڑ',
'skin-preview' => 'کچا کم',
'allmessagesdefault' => 'ڈیفالٹ لکھائی',
'allmessagescurrent' => 'موجودہ لکھائی',
'allmessagestext' => 'ایہ لسٹ اے پربندھ سنیعیاں دی جیہڑے میڈیاوکی دی ناں تھاں تے ہیگے نیں۔
-مہربانی کرکے [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] تے [//translatewiki.net translatewiki.net] تے جاؤ۔
+مہربانی کرکے [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] تے [//translatewiki.net translatewiki.net] تے جاؤ۔
اگر تسیں میڈیا وکی دے بولی وٹاندرے چ کم کرنا چاندے او۔',
'allmessagesnotsupportedDB' => "اے صفہ نئیں ورتیا جاسکدا کیوں جے '''\$wgUseDatabaseMessages''' روک دتا گیا اے۔",
'allmessages-filter-legend' => 'فلٹر',
# External editor support
'edit-externally' => 'بارلا سافٹ ویئر استعال کردے ہوۓ اے فائل لکھو',
-'edit-externally-help' => 'زیادہ معلومات آسطے اے [//www.mediawiki.org/wiki/Manual:External_editors] ویکھو۔',
+'edit-externally-help' => 'زیادہ معلومات آسطے اے [https://www.mediawiki.org/wiki/Manual:External_editors] ویکھو۔',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'سارے',
'version-hook-subscribedby' => 'جینے لئی',
'version-version' => '(ورین $1)',
'version-license' => 'لائیسنس',
-'version-poweredby-credits' => "ایس وکی نوں '''[//www.mediawiki.org/ میڈیاوکی]''', copyright © 2001-$1 $2. چلاندا اے۔",
+'version-poweredby-credits' => "ایس وکی نوں '''[https://www.mediawiki.org/ میڈیاوکی]''', copyright © 2001-$1 $2. چلاندا اے۔",
'version-poweredby-others' => 'دوجے',
'version-license-info' => 'میڈیاوکی اک مفت سوفٹویر اے؛ تسیں اینوں ونڈ سکدے اوہ تے گنو جنرل پبلک لسنس دیاں شرطاں تے جیہڑیاں فری سوفٹویر فاؤنڈیشن نے چھاپیاں نیں ایدے چ تبدیلی کرسکدے اوہ لسنس دے ورین 2 نال، یا اپنی مرضی نال کسے وی ہور ورین فیر بنن والے ورین نوں۔
# Special:SpecialPages
'specialpages' => 'خاص صفے',
-'specialpages-note' => '----
-* نارمل خاص صفے.
+'specialpages-note' => '* نارمل خاص صفے.
* <span class="mw-specialpagerestricted">روکے گۓ خاص صفے.</span>
* <span class="mw-specialpagecached">کاشے خاص صفے (پرانے ہوگۓ ہون).</span>',
'specialpages-group-maintenance' => 'مرمت رپورٹ',
'ok' => 'Εγέντον',
'retrievedfrom' => 'Ασο "$1"',
'youhavenewmessages' => 'Έχετε $1 ($2).',
-'newmessageslink' => 'καινούρεα μενέματα',
-'newmessagesdifflink' => 'υστερνόν αλλαγήν',
'youhavenewmessagesmulti' => 'Έχετε καινούρεα μενέματα σο $1',
'editsection' => 'άλλαξον',
'editold' => 'άλλαξον',
# External editor support
'edit-externally' => "Αλλαγήν τ' αρχείου με προγράμματα ασα εξ μερέα",
-'edit-externally-help' => '(Τερέστεν τα [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] και θα ευρίετε κι άλλα πληροφορίας)',
+'edit-externally-help' => '(Τερέστεν τα [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] και θα ευρίετε κι άλλα πληροφορίας)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ούλαι',
'ok' => 'Labbai',
'retrievedfrom' => 'Aps: "$1"',
'youhavenewmessages' => 'Tu turri $1 ($2)',
-'newmessageslink' => 'nāunans waīstins',
-'newmessagesdifflink' => 'Šlaitīntan ezze panzdaumai wersiōnin',
'youhavenewmessagesmulti' => 'Tū turri nāunans waīstins ēn $1',
'editsection' => 'redigīs',
'editold' => 'redigīs',
'preferences' => 'Pirminiskwas',
'mypreferences' => 'Majjas pirminiskwas',
'prefs-edits' => 'Kitawīdinsnan gīrbis:',
-'prefsnologin' => 'Ni assei engūbun',
'changepassword' => 'Kitawīdinais kliptaswīrdan',
'prefs-skin' => 'Prusna',
'skin-preview' => 'Pirmādira',
'recentchanges-label-minor' => 'Sta ast malks redigīsenis',
'recentchanges-label-bot' => 'Sta ast redigīsenis segītan pra bōtan',
'recentchanges-label-unpatrolled' => 'Šis redigīsenis ni ast dabber izbandātan',
+'recentchanges-legend-newpage' => '$1 - nāunan pāusan',
'rcnote' => "Zemmais ast {{PLURAL:$1|'''1''' kitawīdinsna segīta|panzdaumas '''$1''' kitawīdinsnas segītas}} en panzdaumamans {{PLURAL:$2|dēinan|'''$2''' dēinans}}, gīrbawintei ezze $5, $4.",
'rcnotefrom' => "Zemmais ast kitawīdisnas ezze '''$2''' (ērgi '''$1''' waidīntan).",
'rclistfrom' => 'Waidinnais nāunans kitawīdinsnans pagaūnintei ezze $1',
'allmessagesdefault' => 'Auprestamins teksts',
'allmessagescurrent' => 'Bigānts teksts',
'allmessagestext' => 'Sta ast listi wisēisan waīstin preiēiminan en MediaWikis tītelin plattibin.
-Madli kāimalukeis [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] be [//translatewiki.net translatewiki.net] ik tu kwaitēi delīkan īmtun en MediaWikis prōgraminin tulkausnai.',
+Madli kāimalukeis [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] be [//translatewiki.net translatewiki.net] ik tu kwaitēi delīkan īmtun en MediaWikis prōgraminin tulkausnai.',
'allmessagesnotsupportedDB' => "Šī pāusan ni mazzi būtwei tērpautan, beggi wariābli '''\$wgUseDatabaseMessages''' ast izklaūtan.",
'allmessages-filter-legend' => 'Filtrīs',
'allmessages-filter' => 'Filtrīs pa būsenin:',
# External editor support
'edit-externally' => 'Redigīs šin pāusan tērpawintei izwinaīnan prōgraman',
-'edit-externally-help' => '(Skaitāis [//www.mediawiki.org/wiki/Manual:External_editors instrukciōnins], kāi gaūlai tūls infōrmaciōnins).',
+'edit-externally-help' => '(Skaitāis [https://www.mediawiki.org/wiki/Manual:External_editors instrukciōnins], kāi gaūlai tūls infōrmaciōnins).',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'wisāi',
# Special:SpecialPages
'specialpages' => 'Speciālai pāusai',
-'specialpages-note' => '----
-* Nōrmalai speciālai pāusai.
+'specialpages-note' => '* Nōrmalai speciālai pāusai.
* <strong class="mw-specialpagerestricted">Speciālai pāusai sen arāikintan preiēisenin.</strong>',
'specialpages-group-maintenance' => 'Kōnserwaciōnis repōrtai',
'specialpages-group-other' => 'Kitāi speciālai pāusai',
'ok' => 'ښه',
'retrievedfrom' => '"$1" نه اخيستل شوی',
'youhavenewmessages' => 'تاسې $1 لری ($2).',
-'newmessageslink' => 'نوي پيغامونه',
-'newmessagesdifflink' => 'وروستی بدلون',
'youhavenewmessagesfromusers' => 'تاسې د {{PLURAL:$3|يو بل کارن|$3 کارنانو}} لخوا $1 لرۍ ($2).',
'youhavenewmessagesmanyusers' => 'تاسې د يو شمېر کارنانو لخوا $1 لرۍ ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|يو نوی پيغام|نوي پيغامونه}}',
'preferences' => 'غوره توبونه',
'mypreferences' => 'غوره توبونه',
'prefs-edits' => 'د سمونو شمېر:',
-'prefsnologin' => 'غونډال کې نه ياست ننوتي',
-'prefsnologintext' => 'د دې لپاره چې خپل غوره توبونه مو وټاکی، نو پکار ده چې لومړی تاسو غونډال کې <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ننوځی]</span>.',
'changepassword' => 'پټنوم بدلول',
'prefs-skin' => 'پوښۍ',
'skin-preview' => 'مخکتنه',
'userrights-lookup-user' => 'کارن ډلې سمبالول',
'userrights-user-editname' => 'يو کارن نوم وليکۍ:',
'editusergroup' => 'کارن ډلې سمول',
+'editinguser' => '',
'userrights-editusergroup' => 'کارن ډلې سمول',
'saveusergroups' => 'کارن ډلې خوندي کول',
'userrights-groupsmember' => 'غړی د:',
'recentchanges-label-minor' => 'دا يوه وړه سمونه ده',
'recentchanges-label-bot' => 'دغه سمون د يو روباټ لخوا ترسره شوی',
'recentchanges-label-unpatrolled' => 'دغه سمون تر اوسه پورې نه دی څارل شوی',
+'recentchanges-legend-newpage' => '$1 - نوی مخ',
'rcnote' => "دلته لاندې {{PLURAL:$1|وروستی '''1''' بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2| يوې ورځ|'''$2''' ورځو}} کې تر $4 نېټې او $5 بجو پېښ شوي.",
'rcnotefrom' => "په همدې ځای کې لاندې هغه بدلونونه دي چې د '''$2''' نه راپدېخوا پېښ شوي (تر '''$1''' پورې ښکاره شوي).",
'rclistfrom' => 'هغه نوي بدلونونه ښکاره کول چې له $1 نه پيلېږي',
'allmessagesdefault' => 'تلواليزه پيغام متن',
'allmessagescurrent' => 'اوسنی پيغام متن',
'allmessagestext' => 'دا د مېډياويکي په نوم-تشيال کې د غونډال د پيغامونو لړليک دی.
-که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [//www.mediawiki.org/wiki/Localisation د ميډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] څخه ليدنه وکړۍ.',
+که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [https://www.mediawiki.org/wiki/Localisation د ميډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] څخه ليدنه وکړۍ.',
'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ترېنه کار نه اخيستل کېږي ځکه چې '''\$wgUseDatabaseMessages''' مړ دی.",
'allmessages-filter-legend' => 'چاڼگر',
'allmessages-filter-unmodified' => 'نابدلېدلي',
# External editor support
'edit-externally' => 'د باندنيو پروګرامونو په کارولو سره دا دوتنه سمول',
-'edit-externally-help' => 'د نورو مالوماتو لپاره [//www.mediawiki.org/wiki/Manual:External_editors د امستنو لارښوونې] وگورۍ.',
+'edit-externally-help' => 'د نورو مالوماتو لپاره [https://www.mediawiki.org/wiki/Manual:External_editors د امستنو لارښوونې] وگورۍ.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ټول',
'version-other' => 'بل',
'version-version' => '(بڼه $1)',
'version-license' => 'منښتليک',
-'version-poweredby-credits' => "دا ويکي د '''[//www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.",
+'version-poweredby-credits' => "دا ويکي د '''[https://www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.",
'version-poweredby-others' => 'نور',
'version-license-info' => 'مېډياويکي يو وړيا ساوتری دی؛ تاسې يې په ډاډه زړه د GNU د ټولگړو کارېدنو د منښتليک چې د وړيا ساوتريو د بنسټ له مخې خپور شوی، خپرولی او/يا بدلولی شی؛ د منښتليک ۲ بڼه او يا (ستاسې د خوښې) هر يوه وروستۍ بڼه.
# Special:SpecialPages
'specialpages' => 'ځانگړي مخونه',
-'specialpages-note' => '----
-* نورماله ځانگړي مخونه.
+'specialpages-note' => '* نورماله ځانگړي مخونه.
* <strong class="mw-specialpagerestricted">محدوده ځانگړي مخونه.</strong>
* <span class="mw-specialpagecached">رانيولي ځانگړي مخونه (کېدای شي منسوخ شوی وي).</span>',
'specialpages-group-maintenance' => 'د څارنې راپورونه',
'duration-centuries' => '$1 {{PLURAL:$1|پېړۍ|پېړۍ}}',
'duration-millennia' => '$1 {{PLURAL:$1|زرمه|زرمې}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'کينډۍ غځول',
+'expand_templates_input' => 'ځايونکی متن:',
+'expand_templates_output' => 'پايله',
+'expand_templates_ok' => 'ښه',
+'expand_templates_preview' => 'مخکتنه',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Obtida de "$1"',
'youhavenewmessages' => 'Tem $1 ($2).',
-'newmessageslink' => 'mensagens novas',
-'newmessagesdifflink' => 'comparar com a penúltima revisão',
'youhavenewmessagesfromusers' => 'Tem $1 de {{PLURAL:$3|outro utilizador|$3 utilizadores}} ($2).',
'youhavenewmessagesmanyusers' => 'Tem $1 de muitos utilizadores ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
'invalidtitle-unknownnamespace' => 'Título inválido com número de espaço nominal $1 desconhecido e texto "$2"',
'exception-nologin' => 'Não está autenticado',
'exception-nologin-text' => 'Esta página ou operação requer que esteja autenticado nesta wiki.',
+'exception-nologin-text-manual' => 'Por favor $1 para poder aceder a esta página ou acção.',
# Virus scanner
'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
'preferences' => 'Preferências',
'mypreferences' => 'Preferências',
'prefs-edits' => 'Número de edições:',
-'prefsnologin' => 'Não autenticado',
-'prefsnologintext' => 'Precisa de estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticado]</span> para definir as suas preferências.',
'changepassword' => 'Alterar palavra-chave',
'prefs-skin' => 'Tema',
'skin-preview' => 'Antever tema',
'recentchanges-label-minor' => 'Esta é uma edição menor',
'recentchanges-label-bot' => 'Esta edição foi feita por um robô',
'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada',
+'recentchanges-legend-newpage' => '$1 - página nova',
'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.",
'rcnotefrom' => 'Abaixo estão as mudanças desde <b>$2</b> (mostradas até <b>$1</b>).',
'rclistfrom' => 'Mostrar as novas mudanças a partir das $1',
'allmessagesdefault' => 'Texto padrão',
'allmessagescurrent' => 'Texto atual',
'allmessagestext' => 'Esta é a lista das mensagens de sistema disponíveis no espaço nominal MediaWiki.
-Se deseja colaborar na localização genérica do MediaWiki, visite [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].',
+Se deseja colaborar na localização genérica do MediaWiki, visite [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e a [//translatewiki.net translatewiki.net].',
'allmessagesnotsupportedDB' => "Esta página não pode ser utilizada, uma vez que '''\$wgUseDatabaseMessages''' foi desativado.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtrar pelo estado de personalização:',
# External editor support
'edit-externally' => 'Editar este ficheiro utilizando uma aplicação externa',
-'edit-externally-help' => '(Consulte as [//www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para mais informações)',
+'edit-externally-help' => '(Consulte as [https://www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para mais informações)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todas',
'version-hook-subscribedby' => 'Subscrito por',
'version-version' => '(Versão $1)',
'version-license' => 'Licença',
-'version-poweredby-credits' => "Esta é uma wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Esta é uma wiki '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'outros',
'version-credits-summary' => 'Gostaríamos de reconhecer as seguintes pessoas pela sua contribuição para o [[Special:Version|MediaWiki]].',
'version-license-info' => 'O MediaWiki é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.
# Special:SpecialPages
'specialpages' => 'Páginas especiais',
-'specialpages-note' => '----
-* Páginas especiais normais.
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Páginas especiais normais.
* <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
'specialpages-group-maintenance' => 'Relatórios de manutenção',
'specialpages-group-other' => 'Outras páginas especiais',
'limitreport-templateargumentsize' => 'Tamanho dos argumentos da predefinição',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir predefinições',
+'expand_templates_intro' => "Esta página especial recebe um texto e expande recursivamente todas as predefinições nele existentes.
+Também expande funções do analisador sintático ''(parser)'', tais como
+<nowiki>{{</nowiki>#language:...}}, e variáveis, tais como
+<nowiki>{{</nowiki>CURRENTDAY}}.
+De fato, expande tudo o que estiver entre chaves duplas.",
+'expand_templates_title' => 'Título de contexto para {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto a expandir:',
+'expand_templates_output' => 'Resultado',
+'expand_templates_xml_output' => 'Resultado XML',
+'expand_templates_ok' => 'Expandir',
+'expand_templates_remove_comments' => 'Remover comentários',
+'expand_templates_remove_nowiki' => "Suprimir ''tags'' <nowiki> no resultado",
+'expand_templates_generate_xml' => 'Mostrar a árvore de análise sintáctica do XML',
+'expand_templates_preview' => 'Antevisão do resultado',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Disponível em "$1"',
'youhavenewmessages' => 'Você tem $1 ($2).',
-'newmessageslink' => 'novas mensagens',
-'newmessagesdifflink' => 'última alteração',
'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)',
'youhavenewmessagesmanyusers' => 'Você tem $1 de muitos usuários ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
'preferences' => 'Preferências',
'mypreferences' => 'Preferências',
'prefs-edits' => 'Número de edições:',
-'prefsnologin' => 'Não autenticado',
-'prefsnologintext' => 'É necessário estar <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autenticado]</span> para definir as suas preferências.',
'changepassword' => 'Alterar senha',
'prefs-skin' => 'Tema',
'skin-preview' => 'Pré-visualização',
'recentchanges-label-minor' => 'Esta é uma edição menor',
'recentchanges-label-bot' => 'Esta edição foi feita por um robô',
'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada',
+'recentchanges-legend-newpage' => '$1 - nova página',
'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.",
'rcnotefrom' => "Seguem as alterações desde as '''$4''' de '''$3''' (limitadas a '''$1''').",
'rclistfrom' => 'Mostrar as novas alterações a partir das $1',
'allmessagesdefault' => 'Texto padrão',
'allmessagescurrent' => 'Texto atual',
'allmessagestext' => 'Esta é uma lista de todas as mensagens de sistema disponíveis no espaço nominal {{ns:mediawiki}}.
-Acesse [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] caso deseje contribuir para traduções do MediaWiki feitas para uso geral.',
+Acesse [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] caso deseje contribuir para traduções do MediaWiki feitas para uso geral.',
'allmessagesnotsupportedDB' => "Esta página não pode ser utilizada, uma vez que '''\$wgUseDatabaseMessages''' foi desativado.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtrar por estado de personalização:',
# External editor support
'edit-externally' => 'Editar este arquivo a partir de um programa externo',
-'edit-externally-help' => '(Consulte as [//www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para maiores informações)',
+'edit-externally-help' => '(Consulte as [https://www.mediawiki.org/wiki/Manual:External_editors instruções de instalação] para maiores informações)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'todas',
'version-hook-subscribedby' => 'Subscrito por',
'version-version' => '(Versão $1)',
'version-license' => 'Licença',
-'version-poweredby-credits' => "Este é um wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Este é um wiki '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'outros',
'version-poweredby-translators' => 'tradutores da translatewiki.net',
'version-credits-summary' => 'Gostaríamos de agradecer às seguintes pessoas por suas contribuições no [[Special:Version|MediaWiki]]',
# Special:SpecialPages
'specialpages' => 'Páginas especiais',
-'specialpages-note' => '----
-* Páginas especiais normais.
+'specialpages-note' => '* Páginas especiais normais.
* <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
'specialpages-group-maintenance' => 'Relatórios de manutenção',
'specialpages-group-other' => 'Outras páginas especiais',
'limitreport-expansiondepth' => 'Máxima profundidade de expansão',
'limitreport-expensivefunctioncount' => 'Conta da função expansiva do analizador',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir predefinições',
+'expand_templates_intro' => 'Esta página especial pega algum texto e expande todas as predefinições nela existentes recursivamente.
+Também expande funções do analisador (parser) como
+<code><nowiki>{{</nowiki>#language:…}}</code>, e variáveis como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Na verdade, expande tudo que está entre chaves duplas.',
+'expand_templates_title' => 'Título de contexto para {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto de entrada:',
+'expand_templates_output' => 'Resultado',
+'expand_templates_xml_output' => 'Resultado XML',
+'expand_templates_ok' => 'Expandir',
+'expand_templates_remove_comments' => 'Remover comentários',
+'expand_templates_remove_nowiki' => 'Suprima marcações <nowiki> no resultado',
+'expand_templates_generate_xml' => 'Mostrar árvore de análise (parse) do XML',
+'expand_templates_preview' => 'Pré-visualização',
+
);
* @author Lejonel
* @author Li-sung
* @author Liangent
+ * @author Liuxinyu970226
* @author Lloffiwr
* @author MF-Warburg
* @author Malafaya
* @author SPQRobin
* @author Sanbec
* @author Sborsody
+ * @author Scimonster
* @author Se4598
* @author Seb35
* @author Sherbrooke
** {{msg-mw|Sp-contributions-newbies-title}}",
'pagetitle-view-mainpage' => '{{optional}}',
'backlinksubtitle' => '{{optional}}
-Appears in subtitle
-* $1 is a link to the page (HTML)',
+Appears in subtitle. Parameters:
+* $1 - a link to the page (HTML)',
'retrievedfrom' => 'Message which appears in the source of every page, but it is hidden. It is shown when printing.
Parameters:
* $1 - a link back to the current page: {{FULLURL:{{FULLPAGENAME}}}}',
'youhavenewmessages' => 'The yellow message appearing when someone edited your user talk page.
-The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]] |[[MediaWiki:Newmessagesdifflink/{{SUBPAGENAME}}|{{int:newmessagesdifflink}}]]}}"
+The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslinkplural/{{SUBPAGENAME}}|{{int:newmessageslinkplural}}]] |[[MediaWiki:Newmessagesdifflinkplural/{{SUBPAGENAME}}|{{int:newmessagesdifflinkplural}}]]}}"
Parameters:
-* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslink}}
-* $2 - a link points to new messages diff. Its text is {{msg-mw|Newmessagesdifflink}}
+* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslinkplural}}
+* $2 - a link points to new messages diff. Its text is {{msg-mw|Newmessagesdifflinkplural}}
See also:
* {{msg-mw|Youhavenewmessagesmanyusers}}',
-'newmessageslink' => 'This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
-
-Used as <code>$1</code> in message {{msg-mw|Youhavenewmessages}}.
-{{Identical|New messages}}',
-'newmessagesdifflink' => 'This is the second link displayed in an orange rectangle when a user gets a message on his talk page.
-
-Used as <code>$2</code> in message {{msg-mw|Youhavenewmessages}}.
-
-See also:
-* {{msg-mw|Newmessagesdifflinkplural}}
-{{Identical|Last change}}',
'youhavenewmessagesfromusers' => 'New talk indicator message: the message appearing when someone edited your user talk page. Parameters:
* $1 - defined as {{msg-mw|newmessageslinkplural}}
* $2 - defined as {{msg-mw|newmessagesdifflinkplural}}
* $2 - {{msg-mw|newmessagesdifflinkplural}}
See also:
* {{msg-mw|Youhavenewmessages}}',
-'newmessageslinkplural' => "Like {{msg-mw|Newmessageslink}} but supporting pluralization.
+'newmessageslinkplural' => "This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
-Used as <code>$1</code> in {{msg-mw|Youhavenewmessagesfromusers}}.
+Used as <code>$1</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
Parameters:
-* $1 - 1 or 2:
+* $1 - 1 or 999:
** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
-** 2 - if there was '''more than one''' new edit since the last time the user has seen their talk page
+** 999 - if there was '''more than one''' new edit since the last time the user has seen their talk page
{{Identical|New messages}}",
-'newmessagesdifflinkplural' => 'Parameters:
-* $1 - the number of new edits since the last time the user has seen their talk page: it should be used only for correct [[plural]] as in the source text, as the exact number is not relevant.
+'newmessagesdifflinkplural' => "This is the second link displayed in an orange rectangle when a user gets a message on his talk page.
-Like {{msg-mw|Newmessagesdifflink}} but supporting pluralization.
+Used as <code>$2</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
-Used as <code>$2</code> in message {{msg-mw|Youhavenewmessagesfromusers}}.
-{{Identical|Last change}}',
+Parameters:
+* $1 - 1 or 999:
+** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
+** 999 - if there was '''more than one''' new edit since the last time the user has seen their talk page
+{{Identical|Last change}}",
'youhavenewmessagesmulti' => 'The alternative of {{msg-mw|youhavenewmessages}} as used on wikis with a special setup so they can receive the "new message" notice on other wikis as well. Used on [http://www.wikia.com/ Wikia].
-The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]]}}"
+The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslinkplural/{{SUBPAGENAME}}|{{int:newmessageslinkplural}}]]}}"
Parameters:
-* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslink}}',
+* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslinkplural}}',
'editsection' => 'Display name of link to edit a section on a content page. Example: [{{MediaWiki:Editsection}}].
{{Identical|Edit}}',
'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.
{{Identical|Not logged in}}',
'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
+'exception-nologin-text-manual' => 'Generic reason displayed on error page when a user is not logged in.
+
+Parameters:
+* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
# Virus scanner
'virus-badscanner' => 'Used as error message. Parameters:
{{Identical|Login error}}',
'createacct-error' => 'Used as heading for the error message.',
'createaccounterror' => 'Parameters:
-* $1 is an error message',
+* $1 - an error message',
'nocookiesnew' => "This message is displayed when a new account was successfully created, but the browser doesn't accept cookies.",
'nocookieslogin' => "This message is displayed when someone tried to login, but the browser doesn't accept cookies.",
'nocookiesfornew' => "This message is displayed when the user tried to create a new account, but it failed the cross-site request forgery (CSRF) check. It could be blocking an attack, but most likely, the browser isn't accepting cookies.",
* {{msg-mw|cantcreateaccount-text}}.
{{Identical|No reason given}}',
'whitelistedittext' => 'Used as error message. Parameters:
-* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description
+* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description
See also:
* {{msg-mw|Nocreatetext}}
* {{msg-mw|Uploadnologintext}}
Parameters:
* $1 - a possible username that has not been registered',
-'userpage-userdoesnotexist-view' => 'Shown in user pages of non existing users. See for example [{{canonicalurl:User:Foo}} User:Foo]. Parameters:
-* $1 is a username.',
+'userpage-userdoesnotexist-view' => 'Shown in user pages of non existing users. See for example [{{canonicalurl:User:Foo}} User:Foo].
+
+Parameters:
+* $1 - a username',
'blocked-notice-logextract' => '{{gender}}
Parameters:
* $1 - (Optional) the name of the blocked user. Can be used for GENDER.',
Parameters:
* \$1 - number of categories",
'edittools' => '{{optional}}
-This text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a javascript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.',
+This text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a JavaScript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.',
'edittools-upload' => '{{optional}}
This text will be shown below upload forms. It will default to the contents of edittools.',
'nocreatetext' => 'Used as error message.
* {{msg-mw|loginreqtitle}}
{{Identical|Permission error}}',
'permissionserrorstext' => "This message is \"without action\" version of {{msg-mw|Permissionserrorstext-withaction}}.
-* \$1 is the number of reasons that were found why ''the action'' cannot be performed.",
+
+Parameters:
+* \$1 - the number of reasons that were found why ''the action'' cannot be performed",
'permissionserrorstext-withaction' => 'This message is "with action" version of {{msg-mw|Permissionserrorstext}}.
Parameters:
# Parser/template warnings
'expensive-parserfunction-warning' => 'On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.
-* $1 is the current number of parser function calls.
-* $2 is the allowed number of parser function calls.
+
+Parameters:
+* $1 - the current number of parser function calls
+* $2 - the allowed number of parser function calls
See also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].
See also:
* {{msg-mw|history-feed-empty}}',
'currentrev' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
{{Identical|Current revision}}',
-'currentrev-asof' => 'Used on a difference page when comparing the current versions of a page with each other. See {{msg-mw|Revisionasof}} for the message for non-current version.
-* $1 is a date and time
-* $2 is a date (optional)
-* $3 is a time (optional)',
+'currentrev-asof' => 'Used on a difference page when comparing the current versions of a page with each other.
+
+See {{msg-mw|Revisionasof}} for the message for non-current version.
+
+Parameters:
+* $1 - a date and time
+* $2 - (Optional) a date
+* $3 - (Optional) a time',
'revisionasof' => 'Used on a difference page when comparing different versions of a page or when viewing an non-current version of a page.
See {{msg-mw|Currentrev-asof}} for the message for the current version.
* {{msg-mw|Revdelete-radio-same}}
* {{msg-mw|Revdelete-radio-set}}
* {{msg-mw|Revdelete-radio-unset}}
-{{Identical|Visible}}',
+{{Identical|Hidden}}',
'revdelete-radio-unset' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.
[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
There are three radio buttons in each row, and the captions above each column read:
* {{msg-mw|Revdelete-radio-same}}
* {{msg-mw|Revdelete-radio-set}}
* {{msg-mw|Revdelete-radio-unset}}
-{{Identical|Hidden}}',
+{{Identical|Visible}}',
'revdelete-suppress' => 'Option for oversight; used in [[Special:RevisionDelete]].
See also:
Links to [[Special:Undelete]] at [[Special:RevisionDelete]] header together with links to the logs and page history.',
'revdelete-hide-current' => '{{RevisionDelete}}
Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
'revdelete-show-no-access' => '{{RevisionDelete}}
Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
'revdelete-modify-no-access' => '{{RevisionDelete}}
Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
'revdelete-modify-missing' => '{{RevisionDelete}}
-* $1 is a revision ID',
+* $1 - a revision ID
+{{Related|Revdelete}}',
'revdelete-no-change' => '{{RevisionDelete}}
Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
'revdelete-concurrent-change' => '{{RevisionDelete}}
Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
'revdelete-only-restricted' => '{{RevisionDelete}}
Parameters:
*$1 - date
-*$2 - time',
+*$2 - time
+{{Related|Revdelete}}',
'revdelete-reason-dropdown' => '{{RevisionDelete}}
Used as item list for dropdown.
[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]
-* $1 is the list of missing revisions IDs
-* $2 is the number of items in $1 (one or two)',
+Parameters:
+* $1 - the list of missing revisions IDs
+* $2 - the number of items in $1 (one or two)',
# Search results
'searchresults' => 'This is the title of the page that contains the results of a search.
In this sentence, "their indexes" refers to "Google\'s indexes".
Shown on [[Special:Search]] when the internal search is disabled.',
-'search-error' => 'Shown when an error has occurred when performing a search
-* $1 is the localized error that was returned',
+'search-error' => 'Shown when an error has occurred when performing a search. Parameters:
+* $1 - the localized error that was returned',
# Preferences page
'preferences' => 'Title of the [[Special:Preferences]] page.
* {{msg-mw|Tooltip-pt-preferences}}
{{Identical|Preferences}}',
'prefs-edits' => 'In user preferences.',
-'prefsnologin' => '{{Identical|Not logged in}}',
-'prefsnologintext' => 'Parameters:
-* $1 - URI for "returnto" argument',
+'prefsnologintext2' => 'Parameters:
+* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
'changepassword' => "Section heading on [[Special:Preferences]], tab 'User profile'.
{{Identical|Change password}}",
'prefs-skin' => 'Used in user preferences.
* {{msg-mw|Prefs-memberingroups-type}}',
'prefs-memberingroups-type' => '{{optional}}
Parameters:
-* $1 is list of group names
-* $2 is list of group member names. Label for these is {{msg-mw|prefs-memberingroups}}.',
+* $1 - list of group names
+* $2 - list of group member names. Label for these is {{msg-mw|Prefs-memberingroups}}',
'prefs-registration' => 'Used in [[Special:Preferences]].',
'prefs-registration-date-time' => '{{optional}}
Used in [[Special:Preferences]]. Parameters are:
* $2 - (Optional) the user name, for GENDER',
'userrights-groupsmember-type' => '{{optional}}
Parameters:
-* $1 is list of group names.
-* $2 is list of group member names. Used with labels {{msg-mw|userrights-groupsmember}} and {{msg-mw|userrights-groupsmember-auto}}',
+* $1 - list of group names
+* $2 - list of group member names. Used with labels {{msg-mw|Userrights-groupsmember}} and {{msg-mw|Userrights-groupsmember-auto}}',
'userrights-groups-help' => 'Instructions displayed on [[Special:UserRights]]. Parameters:
* $1 - (Optional) a username, can be used for GENDER',
'userrights-reason' => 'Text beside log field when editing user groups
'recentchanges-label-minor' => 'Tooltip for {{msg-mw|minoreditletter}}',
'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}',
'recentchanges-label-unpatrolled' => 'Tooltip for {{msg-mw|unpatrolledletter}}',
+'recentchanges-label-plusminus' => 'Legend item for plus/minus',
+'recentchanges-legend-newpage' => 'A link to [[Special:NewPages]]',
+'recentchanges-legend-plusminus' => 'A plus/minus sign with a number for the legend.',
'rcnote' => 'Used on [[Special:RecentChanges]].
Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
{{Identical|View}}
{{Identical|Restore}}',
'undeleteviewlink' => 'First part of {{msg-mw|undeletelink}}.
+Display name of link to view a deleted page used on [[Special:Log/delete]].
{{Identical|View}}',
'undeletereset' => 'Shown on [[Special:Undelete]] as button caption.
{{Identical|Reset}}',
* {{msg-mw|sp-contributions-logs}}
* {{msg-mw|sp-contributions-deleted}}
* {{msg-mw|sp-contributions-userrights}}',
-'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.',
+'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.
+{{Identical|Contribution}}',
'emaillink' => 'Used as display name for a link to send an e-mail to a user in the user tool links. Example: "(Talk | contribs | block | send e-mail)".
{{Identical|E-mail}}',
* {{msg-mw|Summary}}
* {{msg-mw|Accesskey-summary}}
* {{msg-mw|Tooltip-summary}}',
-'interlanguage-link-title' => 'Format of a sidebar interwiki link tooltip. Parameters:
+'interlanguage-link-title' => '{{Optional}}
+Format of a sidebar interwiki link tooltip. Parameters:
* $1 - page name in the target wiki
* $2 - target wiki language autonym',
* $1 - the error message
See also:
* {{msg-mw|Thumbnail error}}',
-'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
+'show-big-image' => 'Displayed under the file on file description pages, when a reduced-size thumbnail of the original file is being displayed.
+{{Identical|Original file}}',
'show-big-image-preview' => 'Message shown under the image description page thumbnail.
Can be followed by {{msg-mw|Show-big-image-other}}.
# Special:NewFiles
'newimages' => 'Page title of [[Special:NewImages]].',
-'imagelisttext' => 'This is text on [[Special:NewImages]]. $1 is the number of files. $2 is the message {{msg-mw|Bydate}}.',
+'imagelisttext' => 'This is text on [[Special:NewImages]]. Parameters:
+* $1 - the number of files
+* $2 - the message {{msg-mw|Bydate}}',
'newimages-summary' => 'This message is displayed at the top of [[Special:NewImages]] to explain what is shown on that special page.',
'newimages-legend' => 'Caption of the fieldset for the filter on [[Special:NewImages]]
# External editor support
'edit-externally' => 'Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
-'edit-externally-help' => '{{doc-important|Please leave the link "<code>http://www.mediawiki.org/wiki/Manual:External_editors</code>" exactly as it is.}}
+'edit-externally-help' => '{{doc-important|Please leave the link "<code>https://www.mediawiki.org/wiki/Manual:External_editors</code>" exactly as it is.}}
Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
# 'all' in various places, this might be different for inflected languages
'percent' => '{{optional}}',
'parentheses' => '{{optional}}',
'brackets' => '{{Optional}}',
-'quotation-marks' => '{{optional}}',
+'quotation-marks' => 'Quotation marks, for quoting, sometimes titles etc., depending on the language.
+
+See: [[w:Non-English usage of quotation marks|Non-English usage of quotation marks on Wikipedia]].
+
+Parameters:
+* $1 - text to be wrapped in quotation marks',
# Multipage image navigation
'imgmultipageprev' => '{{Identical|Previous page}}',
* {{msg-mw|Accesskey-t-specialpages}}
* {{msg-mw|Tooltip-t-specialpages}}
{{Identical|Special page}}',
+'specialpages-note-top' => 'Heading for {{msg-mw|specialpages-note}}.
+{{Identical|Legend}}',
'specialpages-note' => 'Footer note for the [[Special:SpecialPages]] page',
'specialpages-group-maintenance' => '{{doc-special-group|like=[[Special:DoubleRedirects]], [[Special:LonelyPages]] and [[Special:WantedPages]]}}',
'specialpages-group-other' => '{{doc-special-group|like=[[Special:AdminLinks]] and [[Special:BookSources]]}}',
* $1 - the usage
* $2 - the maximum',
+# Special:ExpandTemplates
+'expandtemplates' => '{{doc-special|ExpandTemplates}}
+The name of the [[mw:Extension:ExpandTemplates|Expand Templates extension]].',
+'expand_templates_intro' => 'This is the explanation given in the heading of the [[Special:ExpandTemplates]] page; it describes its functionality to the users.
+For more information, see [[mw:Extension:ExpandTemplates]]',
+'expand_templates_title' => 'The label of the input box for the context title on the form displayed at [[Special:ExpandTemplates]] page.',
+'expand_templates_input' => '{{Identical|Input text}}',
+'expand_templates_output' => '{{Identical|Result}}',
+'expand_templates_xml_output' => 'Used as HTML <code><nowiki><h2></nowiki></code> heading.',
+'expand_templates_ok' => '{{Identical|OK}}',
+'expand_templates_remove_comments' => 'Check box to tell [[mw:Extension:ExpandTemplates]] to not show comments in the expanded template.',
+'expand_templates_remove_nowiki' => 'Option on [[Special:Expandtemplates]]',
+'expand_templates_generate_xml' => 'Used as checkbox label.',
+'expand_templates_preview' => '{{Identical|Preview}}',
+
);
'ok' => 'Arí niy',
'retrievedfrom' => '"$1" p\'anqamanta chaskisqa (Qhichwa / Quechua)',
'youhavenewmessages' => '$1 qhawanayki kachkan ($2).',
-'newmessageslink' => 'Musuq willaymi',
-'newmessagesdifflink' => 'qayna hukchasqapi wakin kaynin',
'youhavenewmessagesfromusers' => '$1 {{PLURAL:$3|huk ruraqmanta|$3 ruraqkunamanta}} qhawanayki kachkan ($2).',
'youhavenewmessagesmanyusers' => '$1 achka ruraqkunamanta qhawanayki kachkan ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|Musuq willaymi|Musuq willaykunam}}',
'preferences' => 'Allinkachinakuna',
'mypreferences' => 'Allinkachinaykuna',
'prefs-edits' => 'Hukchasqakunap yupaynin:',
-'prefsnologin' => 'Manam yaykurqankichu',
-'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Yaykunaykim]</span> tiyan allinkachinaykikunata hukchanaykipaq.',
'changepassword' => 'Yaykuna rimata hukchay',
'prefs-skin' => 'Qara',
'skin-preview' => 'Ñawpaqta qhaway',
'recentchanges-label-minor' => "Kayqa aslla llamk'apuymi",
'recentchanges-label-bot' => "Kayqa rurana antachap llamk'apusqanmi",
'recentchanges-label-unpatrolled' => "Kay llamk'apusqaqa manaraqmi patrullasqachu",
+'recentchanges-legend-newpage' => "$1 - musuq p'anqa",
'rcnote' => "Kay qatiqpiqa qhipaq {{PLURAL:$1|'''1''' hukchasqam|'''$1''' hukchasqakunam}} qhipaq {{PLURAL:$2|p'unchawpi|'''$2''' p'unchawkunapi}}, musuqchasqa $5, $4.",
'rcnotefrom' => "Kay qatiqpiqa '''$2'''-mantapacha ('''$1'''-kama) hukchasqakunatam rikunki.",
'rclistfrom' => '$1-manta musuq hukchasqakunata rikuchiy',
'allmessagesdefault' => 'Ñawpaq qillqa',
'allmessagescurrent' => 'Kunan kachkaq qillqa',
'allmessagestext' => "Kayqa MediaWiki suti k'itipi llamk'achinalla willaykunayuq sutisuyum.
-Ama hina kaspa, [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] nisqata, [//translatewiki.net translatewiki.net] nisqatapas watukuy, MediaWiki nisqata t'ikraywan yanapayta munaspaykiqa.",
+Ama hina kaspa, [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] nisqata, [//translatewiki.net translatewiki.net] nisqatapas watukuy, MediaWiki nisqata t'ikraywan yanapayta munaspaykiqa.",
'allmessagesnotsupportedDB' => "Kay p'anqaqa manam llamk'achinallachu, '''\$wgUseDatabaseMessages''' nisqaman ama nisqa kaptinmi.",
'allmessages-filter-legend' => "Ch'illchina",
'allmessages-filter' => "Ch'illchina, allinchasqa kachkaykama:",
# External editor support
'edit-externally' => "Kay willañiqita hawa rurana wakichiwan llamk'apuy",
-'edit-externally-help' => 'Astawan willasunaykipaqqa [//www.mediawiki.org/wiki/Manual:External_editors tiyachina yanapata] (inlish simipi) ñawiriy.',
+'edit-externally-help' => 'Astawan willasunaykipaqqa [https://www.mediawiki.org/wiki/Manual:External_editors tiyachina yanapata] (inlish simipi) ñawiriy.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'lliw',
'version-hook-subscribedby' => 'Kay runap mañaykusqan:',
'version-version' => '(Musuqchasqa $1)',
'version-license' => 'Saqillay',
-'version-poweredby-credits' => "Kay wikitaqa '''[//www.mediawiki.org/ MediaWiki-m]''' atichin, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Kay wikitaqa '''[https://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.
# Special:SpecialPages
'specialpages' => "Sapaq p'anqakuna",
-'specialpages-note' => '----
-* Sapsipaq sapaq p\'anqakuna.
+'specialpages-note' => '* Sapsipaq sapaq p\'anqakuna.
* <span class="mw-specialpagerestricted">Sapaqkunallapaq sapaq p\'anqakuna.</span>',
'specialpages-group-maintenance' => 'Hatalliy willaykuna',
'specialpages-group-other' => "Huk sapaq p'anqakuna",
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte}}',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte}}',
+# Special:ExpandTemplates
+'expandtemplates' => "Plantillakunata mast'ariy",
+'expand_templates_input' => 'Yaykuchina qillqa:',
+'expand_templates_output' => 'Lluqsiynin:',
+'expand_templates_remove_comments' => 'Willapusqakunata qichuy',
+'expand_templates_preview' => 'Ñawpaqta qhawallay',
+
);
'ok' => 'Ari nina',
'retrievedfrom' => '$1 pankamanta hapishka',
'youhavenewmessages' => '$1 charipanki ($2).',
-'newmessageslink' => 'Mushuk willaymi',
-'newmessagesdifflink' => 'yalli mushuk killkay',
'youhavenewmessagesmulti' => '$1-pi mushuk chaskikunata charipankimi.',
'editsection' => 'Killkana',
'editold' => 'Killkana',
# External editor support
'edit-externally' => 'Kay archiwuta shuk hawa antanawan llankana',
-'edit-externally-help' => 'Ashtawan yachakunkakak [//www.mediawiki.org/wiki/Manual:External_editors kay yanapata] (inlish shimipi) killkakatipay',
+'edit-externally-help' => 'Ashtawan yachakunkakak [https://www.mediawiki.org/wiki/Manual:External_editors kay yanapata] (inlish shimipi) killkakatipay',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tukuy',
* @author Gion-andri
* @author Kaganer
* @author Kazu89
+ * @author Shirayuki
* @author Urhixidur
* @author לערי ריינהארט
*/
'ok' => "D'accord",
'retrievedfrom' => 'Da "$1"',
'youhavenewmessages' => 'Ti has $1 ($2).',
-'newmessageslink' => 'novs messadis',
-'newmessagesdifflink' => "l'ultima midada",
'youhavenewmessagesfromusers' => 'Ti has $1 da{{PLURAL:$3|d in utilisader| $3 utilisaders}} ($2).',
'youhavenewmessagesmanyusers' => 'Ti has $1 da divers utilisaders ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|in nov messadi|novs messadis}}',
'preferences' => 'Preferenzas',
'mypreferences' => 'Preferenzas',
'prefs-edits' => 'Dumber da las modificaziuns:',
-'prefsnologin' => "Betg t'annunzià",
-'prefsnologintext' => 'Ti stos esser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} t\'annunzià]</span> per midar tias preferenzas.',
'changepassword' => 'Midar pled-clav',
'prefs-skin' => 'Skin',
'skin-preview' => 'Prevista',
'recentchanges-label-minor' => 'Quai è ina pitschna modificaziun',
'recentchanges-label-bot' => 'Questa modificaziun è vegnida exequida dad in bot',
'recentchanges-label-unpatrolled' => "Questa midada n'è anc betg vegnida controllada",
+'recentchanges-legend-newpage' => '$1 - nova pagina',
'rcnote' => "Sutvart {{PLURAL:$1|è '''ina''' midada|èn las ultimas '''$1''' midadass}} {{PLURAL:$2|da l'ultim di|dals ultims '''$2''' dis}}, versiun dals $4 $5.",
'rcnotefrom' => "Midadas dapi '''$2''' (maximalmain '''$1''' vegnan mussads).",
'rclistfrom' => 'Mussar las novas midadas entschavend cun $1',
'allmessagesdefault' => 'text original',
'allmessagescurrent' => 'text actual',
'allmessagestext' => 'Quai è ina glista da tut ils messadis dals differents tips da paginas da MediaWiki che vegnan utilisadas da la software MediaWiki.
-Fai ina visita sin [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] sche ti vuls gidar da translatar la software MediaWiki.',
+Fai ina visita sin [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] sche ti vuls gidar da translatar la software MediaWiki.',
'allmessagesnotsupportedDB' => "Questa pagina na po betg vegnir mussada, perquai che '''\$wgUseDatabaseMessages''' è vegnì deactivà.",
'allmessages-filter-legend' => 'Filtrar',
'allmessages-filter' => 'Filtrar tenor standi da modificaziun:',
# External editor support
'edit-externally' => 'Modifitgar questa datoteca cun in program extern',
-'edit-externally-help' => "(Legia [//www.mediawiki.org/wiki/Manual:External_editors instrucziuns d'installaziun] per ulteriuras infurmaziuns)",
+'edit-externally-help' => "(Legia [https://www.mediawiki.org/wiki/Manual:External_editors instrucziuns d'installaziun] per ulteriuras infurmaziuns)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tut',
'version-hook-subscribedby' => 'Abonnà da',
'version-version' => '(Versiun $1)',
'version-license' => 'Licenza',
-'version-poweredby-credits' => "Questa wiki utilisescha '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Questa wiki utilisescha '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'auters',
'version-credits-summary' => 'Nus vulain engraziar a suandantas persunas per lur contribuziun a [[Special:Version|MediaWiki]].',
'version-license-info' => "MediaWiki è software liba; ti la pos redistribuir e/u la modifitgar tenor ils terms da la GNU General Public License sco ch'ella vegn publitgada da la Free Software Foundation; ti pos utilisar la versiun 2 da la licenza u (sche ti vul) mintga versiun che succeda.
# Special:SpecialPages
'specialpages' => 'Paginas spezialas',
-'specialpages-note' => '----
-* Paginas spezialas normalas.
+'specialpages-note' => '* Paginas spezialas normalas.
* <span class="mw-specialpagerestricted">Paginas spezialas restrenschidas.</span>
* <span class="mw-specialpagecached">Paginas spezialas en il cache (pon esser antiquadas).</span>',
'specialpages-group-maintenance' => 'Rapports da mantegnamant',
'ok' => 'OK',
'retrievedfrom' => 'Adus de la „$1”',
'youhavenewmessages' => 'Aveți $1 ($2).',
-'newmessageslink' => 'mesaje noi',
-'newmessagesdifflink' => 'comparație cu versiunea precedentă',
'youhavenewmessagesfromusers' => 'Aveți $1 de la {{PLURAL:$3|un alt utilizator|$3 utilizatori}} ($2).',
'youhavenewmessagesmanyusers' => 'Aveți $1 de la mai mulți utilizatori ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un mesaj nou|mesaje noi}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modificare|ultimele modificări}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mesaj nou|999=mesaje noi}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modificare|999=ultimele modificări}}',
'youhavenewmessagesmulti' => 'Aveți mesaje noi la $1',
'editsection' => 'modificare',
'editold' => 'modificare',
'invalidtitle-knownnamespace' => 'Titlu invalid cu spațiul de nume „$2” și textul „$3”',
'invalidtitle-unknownnamespace' => 'Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”',
'exception-nologin' => 'Neautentificat{{GENDER:||ă}}.',
-'exception-nologin-text' => 'Această pagină sau acțiune necesită ca dumneavoastră să fiți autentificat{{GENDER:||ă}} pe acest wiki.',
+'exception-nologin-text' => 'Vă rugăm să vă [[Special:Userlogin|autentificați]] pentru a accesa această pagină sau acțiune.',
+'exception-nologin-text-manual' => 'Vă rugăm să vă $1 pentru a accesa această pagină sau acțiune.',
# Virus scanner
'virus-badscanner' => "Configurație greșită: scaner de virus necunoscut: ''$1''",
'revdelete-text' => "'''Versiunile șterse vor apărea în istoricul paginii, dar conținutul lor nu va fi accesibil publicului.''' Administratorii {{SITENAME}} pot accesa conținutul șters și îl pot recupera prin aceeași interfață, dacă nu este impusă altă restricție de către operatorii sitului.",
'revdelete-confirm' => 'Vă rugăm să confirmați că intenționați să faceți acest lucru, că înțelegeți consecințele și că faceți asta în conformitate cu [[{{MediaWiki:Policy-url}}|politica]].',
'revdelete-suppress-text' => "Suprimarea trebuie folosită '''doar''' în următoarele cazuri:
+* Informații potențial calomnioase
* Informații personale inadecvate
-*: ''adrese și numere de telefon personale, CNP, numere de securitate socială, etc.''",
+*: ''adrese și numere de telefon personale, CNP, numere de securitate socială etc.''",
'revdelete-legend' => 'Restricții de afișare',
'revdelete-hide-text' => 'Textul versiunii',
'revdelete-hide-image' => 'Șterge conținutul fișierului',
'revdelete-hide-user' => 'Numele de utilizator sau adresa IP',
'revdelete-hide-restricted' => 'Ascunde informațiile față de administratori și față de alți utilizatori',
'revdelete-radio-same' => '(nu schimba)',
-'revdelete-radio-set' => 'Vizibil',
-'revdelete-radio-unset' => 'Ascuns',
+'revdelete-radio-set' => 'Ascuns',
+'revdelete-radio-unset' => 'Vizibil',
'revdelete-suppress' => 'Ascunde versiunile și față de administratori',
'revdelete-unsuppress' => 'Anulează restricțiile la versiunile restaurate',
'revdelete-log' => 'Motivul ștergerii:',
'preferences' => 'Preferințe',
'mypreferences' => 'Preferințe',
'prefs-edits' => 'Număr de modificări:',
-'prefsnologin' => 'Neautentificat',
-'prefsnologintext' => 'Trebuie să fiți <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} autentificat]</span> pentru a vă putea salva preferințele.',
+'prefsnologintext2' => 'Vă rugăm să vă $1 pentru a vă seta preferințele de utilizator.',
'changepassword' => 'Schimbare parolă',
'prefs-skin' => 'Aspect',
'skin-preview' => 'Previzualizare',
'recentchanges-label-minor' => 'Aceasta este o modificare minoră',
'recentchanges-label-bot' => 'Această modificare a fost efectuată de un robot',
'recentchanges-label-unpatrolled' => 'Această modificare nu a fost încă verificată',
+'recentchanges-legend-newpage' => '$1 - pagină nouă',
'rcnote' => "Mai jos se află {{PLURAL:\$|ultima modificare|ultimele '''\$1''' modificări|ultimele '''\$1''' de modificări}} din {{PLURAL:\$2|ultima zi|ultimele '''\$2''' zile|ultimele '''\$2''' de zile}}, începând cu \$5, \$4.",
'rcnotefrom' => 'Dedesubt sunt modificările de la <b>$2</b> (maxim <b>$1</b> de modificări sunt afișate - schimbă numărul maxim de linii alegând altă valoare mai jos).',
'rclistfrom' => 'Se arată modificările începând cu $1',
e-mail: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-Nu veți mai primi notificări în cazul unor viitoare modificări până când nu veți vizitați pagina. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
+Nu veți mai primi notificări în cazul unei viitoare activități până când nu veți vizitați pagina ca utilizator autentificat. Puteți de asemenea reseta notificările pentru toate pagini pe care le urmăriți.
- Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
+Al dumneavoastră amic, sistemul de notificare de la {{SITENAME}}
--
Pentru a modifica setările notificării prin e-mail, vizitați
'allmessagesdefault' => 'Textul standard',
'allmessagescurrent' => 'Textul curent',
'allmessagestext' => 'Aceasta este lista completă a mesajelor disponibile în domeniul MediaWiki.
-Vă rugăm să vizitați [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] și [//translatewiki.net translatewiki.net] dacă vreți să contribuiți la localizarea programului MediaWiki generic.',
+Vă rugăm să vizitați [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] și [//translatewiki.net translatewiki.net] dacă vreți să contribuiți la localizarea programului MediaWiki generic.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nu poate fi folosit deoarece '''\$wgUseDatabaseMessages''' este închisă.",
'allmessages-filter-legend' => 'Filtru',
'allmessages-filter' => 'Filtru după statutul de modificare:',
Permite adăugarea unui motiv în descrierea modificărilor',
'tooltip-preferences-save' => 'Salvează preferințele',
'tooltip-summary' => 'Descrieți pe scurt modificarea',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/** CSS plasate aici vor fi aplicate tuturor aparițiilor */',
'svg-long-desc' => 'Fișier SVG, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3',
'svg-long-desc-animated' => 'Fișier SVG animat, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3',
'svg-long-error' => 'Fișier SVG invalid: $1',
-'show-big-image' => 'Rezoluție maximă',
+'show-big-image' => 'Fișier original',
'show-big-image-preview' => 'Mărimea acestei previzualizări: $1.',
'show-big-image-other' => '{{PLURAL:$2|Altă rezoluție|Alte rezoluții}}: $1.',
'show-big-image-size' => '$1 × $2 pixeli',
# External editor support
'edit-externally' => 'Editează acest fișier folosind o aplicație externă.',
-'edit-externally-help' => '(Vedeți [//www.mediawiki.org/wiki/Manual:External_editors instrucțiuni de instalare] pentru mai multe informații)',
+'edit-externally-help' => '(Vedeți [https://www.mediawiki.org/wiki/Manual:External_editors instrucțiuni de instalare] pentru mai multe informații)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'toate',
'confirm-unwatch-button' => 'OK',
'confirm-unwatch-top' => 'Eliminați această pagină din lista de pagini urmărite?',
+# Separators for various lists, etc.
+'quotation-marks' => '„$1”',
+
# Multipage image navigation
'imgmultipageprev' => '← pagina anterioară',
'imgmultipagenext' => 'pagina următoare →',
'version-hook-subscribedby' => 'Subscris de',
'version-version' => '(Versiune $1)',
'version-license' => 'Licență',
-'version-poweredby-credits' => "Acest wiki este dezvoltat de '''[//www.mediawiki.org/ MediaWiki]''', drepturi de autor © 2001-$1 $2.",
+'version-poweredby-credits' => "Acest wiki este motorizat de '''[https://www.mediawiki.org/ MediaWiki]''', drepturi de autor © 2001-$1 $2.",
'version-poweredby-others' => 'alții',
'version-poweredby-translators' => 'traducătorii de la translatewiki.net',
'version-credits-summary' => 'Am dori să amintim următoarele persoane pentru contribuțiile aduse proiectului [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Pagini speciale',
-'specialpages-note' => '----
-* Pagini speciale normale.
-* <span class="mw-specialpagerestricted">Pagini speciale restricționate.</span>
-* <span class="mw-specialpagecached">Pagini speciale aflate doar în memoria cache (pot fi neactualizate).</span>',
+'specialpages-note-top' => 'Legendă',
+'specialpages-note' => '* Pagini speciale normale.
+* <span class="mw-specialpagerestricted">Pagini speciale restricționate.</span>',
'specialpages-group-maintenance' => 'Întreținere',
'specialpages-group-other' => 'Alte pagini speciale',
'specialpages-group-login' => 'Autentificare / creare cont',
'limitreport-expansiondepth' => 'Cea mai mare profunzime a expansiunii',
'limitreport-expensivefunctioncount' => 'Număr de funcții de analiză costisitoare',
+# Special:ExpandTemplates
+'expandtemplates' => 'Extindere formate',
+'expand_templates_title' => 'Titlul paginii, pentru {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Text sursă:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'Ieșire XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Elimină comentariile',
+'expand_templates_remove_nowiki' => 'Suprimă etichetele <nowiki> în rezultat',
+'expand_templates_generate_xml' => 'Arată arborele analiză XML',
+'expand_templates_preview' => 'Previzualizare',
+
);
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Pigghjete da "$1"',
'youhavenewmessages' => 'Tu tine $1 ($2).',
-'newmessageslink' => 'messàgge nuève',
-'newmessagesdifflink' => 'urteme cangiaminde',
'youhavenewmessagesfromusers' => "Tu è $1 da {{PLURAL:$3|'n'otre utende|$3 utinde}} ($2).",
'youhavenewmessagesmanyusers' => 'Tu è $1 da assaije utinde ($2).',
'newmessageslinkplural' => "{{PLURAL:$1|'nu messàgge nuève|messàgge nuève}}",
'preferences' => 'Me piece accussì',
'mypreferences' => 'Me piace accussì',
'prefs-edits' => 'Numere de cangiaminde:',
-'prefsnologin' => 'Non ge sinde colleghete',
-'prefsnologintext' => 'Tu a essere <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} colleghete]</span> pe \'mbostà le preferenze de l\'utinde.',
'changepassword' => "Cange 'a password",
'prefs-skin' => 'Skin',
'skin-preview' => 'Andeprime',
'recentchanges-label-minor' => "Quiste ète 'nu cangiamende stuèdeche",
'recentchanges-label-bot' => "Stu cangiamende ha state fatte da 'nu bot",
'recentchanges-label-unpatrolled' => "Stu cangiamende non g'à state angore condrollate",
+'recentchanges-legend-newpage' => '$1 - pàgena nove',
'rcnote' => "Sotte {{PLURAL:$1|jè '''1''' cangiamende|sonde le urteme '''$1''' cangiaminde}} jndr'à l'urteme{{PLURAL:$2|sciurne|'''$2''' sciurne}}, jndr'à $5, $4.",
'rcnotefrom' => "Sotte stonne le cangiaminde da '''$2''' (fine a '''$1''' mustrete).",
'rclistfrom' => 'Fà vedè le urteme cangiaminde partenne da $1',
'allmessagesdefault' => 'Teste de default',
'allmessagescurrent' => 'Teste corrende',
'allmessagestext' => "Queste jè 'na liste de tutte le messagge d'u sisteme ca se ponne acchià jndr'à le namespace de MediaUicchi.
-Pe piacere vè vide [//www.mediawiki.org/wiki/Localisation Localizzazione de MediaUicchi] e [//translatewiki.net translatewiki.net] ce tu vuè ccu condrebbuisce a 'a localizzazione de MediaUicchi.",
+Pe piacere vè vide [https://www.mediawiki.org/wiki/Localisation Localizzazione de MediaUicchi] e [//translatewiki.net translatewiki.net] ce tu vuè ccu condrebbuisce a 'a localizzazione de MediaUicchi.",
'allmessagesnotsupportedDB' => "Sta pàgene non ge pò essere ausate purcè '''\$wgUseDatabaseMessages''' ha state disabbilitate.",
'allmessages-filter-legend' => 'Filtre',
'allmessages-filter' => "Filtre cu 'nu state personalizzate:",
# External editor support
'edit-externally' => "Cange stu fail usanne n'applicazione esterne",
-'edit-externally-help' => "(Vide le [//www.mediawiki.org/wiki/Manual:External_editors 'struzione de configurazione] pe avèje cchiù dettaglie)",
+'edit-externally-help' => "(Vide le [https://www.mediawiki.org/wiki/Manual:External_editors 'struzione de configurazione] pe avèje cchiù dettaglie)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tutte',
'version-version' => '(Versione $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'Licenze',
-'version-poweredby-credits' => "Sta Uicchi jè fatte da '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Sta Uicchi jè fatte da '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'otre',
'version-poweredby-translators' => 'tradutture de translatewiki.net',
'version-credits-summary' => 'Nuje vulesseme acchià le persone seguende pe le lore condrebbute a [[Special:Version|MediaUicchi]].',
# Special:SpecialPages
'specialpages' => 'Pàggene speciele',
-'specialpages-note' => '----
-* Pàggene speciale normale.
+'specialpages-note' => '* Pàggene speciale normale.
* <span class="mw-specialpagerestricted">Pàggene speciale cu le restriziune.</span>
* <span class="mw-specialpagecached">Pàggene speciale in memorie cache (ponne essere vecchie).</span>',
'specialpages-group-maintenance' => "Report d'a manutenzione",
'limitreport-expansiondepth' => 'Espanzione massime de profonnetà',
'limitreport-expensivefunctioncount' => "Analizzatore d'u cunde d'a funzione ca coste assaije",
+# Special:ExpandTemplates
+'expandtemplates' => 'Template spannute',
+'expand_templates_intro' => "Sta pàgena speciale pigghie quacche teste e spanne tutte le template jndr'à jidde recorsivamende.<br />
+Jidde spanne pure le funziune de analise cumme<br />
+<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele cumme <br />
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />
+In pratiche tutte quidde ca stè jndr'à le doppie parendesi graffe.<br />",
+'expand_templates_title' => 'Titele condestuale, pe {{FULLPAGENAME}} ecc.:',
+'expand_templates_input' => 'Teste de input:',
+'expand_templates_output' => 'Resultete',
+'expand_templates_xml_output' => 'XML de output',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Live le commende',
+'expand_templates_remove_nowiki' => "No fà vede le tag <nowiki> jndr'à 'u resultate",
+'expand_templates_generate_xml' => "Fà vedè l'arvule de l'analisi XML",
+'expand_templates_preview' => 'Andeprime',
+
);
'pagetitle' => '$1 — {{SITENAME}}',
'retrievedfrom' => 'Источник — «$1»',
'youhavenewmessages' => 'Вы получили $1 ($2).',
-'newmessageslink' => 'новые сообщения',
-'newmessagesdifflink' => 'последнее изменение',
'youhavenewmessagesfromusers' => 'Вы получили $1 от {{PLURAL:$3|$3 участника|$3 участников}} ($2).',
'youhavenewmessagesmanyusers' => 'Вы получили $1 от множества пользователей ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|новое сообщение|новые сообщения}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|последнее изменение|последние изменения}}',
+'newmessageslinkplural' => '{{PLURAL:$1|новое сообщение|999=новые сообщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последнее изменение|999=последние изменения}}',
'youhavenewmessagesmulti' => 'Вы получили новые сообщения на $1',
'editsection' => 'править',
'editold' => 'править',
'invalidtitle-knownnamespace' => 'Недопустимый заголовок с пространством имен «$2» и текстом «$3»',
'invalidtitle-unknownnamespace' => 'Недопустимый заголовок с неизвестным номером пространства $1 и текстом «$2»',
'exception-nologin' => 'Вы не представились системе',
-'exception-nologin-text' => 'Для просмотра этой станицы или выполнения запрошенного действия необходимо представиться системе.',
+'exception-nologin-text' => 'Необходимо [[Special:Userlogin|представиться]], чтобы иметь доступ к этой странице или действию.',
+'exception-nologin-text-manual' => 'Необходимо $1, чтобы иметь доступ к этой странице или действию.',
# Virus scanner
'virus-badscanner' => "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
Администраторы проекта {{SITENAME}} будут иметь доступ к скрытому содержанию и смогут восстановить его через этот же интерфейс, за исключением случаев, когда установлено дополнительное ограничение.",
'revdelete-confirm' => 'Пожалуйста, подтвердите, что вы действительно желаете совершить это действие, осознаёте последствия, делаете это в соответствии с [[{{MediaWiki:Policy-url}}|правилами]].',
'revdelete-suppress-text' => "Сокрытие может производиться '''только''' в следующих случаях:
-
+* Потенциально клеветническая информация
* Неуместная личная информация
*: ''домашний адрес, номера телефонов, номер паспорта и т. д.''",
'revdelete-legend' => 'Установить ограничения:',
'revdelete-hide-user' => 'Имя участника/IP-адрес',
'revdelete-hide-restricted' => 'Скрыть данные также и от администраторов',
'revdelete-radio-same' => '(не изменять)',
-'revdelete-radio-set' => 'Ð\92идимая',
-'revdelete-radio-unset' => 'СкÑ\80Ñ\8bÑ\82ая',
+'revdelete-radio-set' => 'СкÑ\80Ñ\8bÑ\82ая',
+'revdelete-radio-unset' => 'Ð\92идимая',
'revdelete-suppress' => 'Скрывать данные также и от администраторов',
'revdelete-unsuppress' => 'Снять ограничения с восстановленных версий',
'revdelete-log' => 'Причина:',
'preferences' => 'Настройки',
'mypreferences' => 'Настройки',
'prefs-edits' => 'Количество правок:',
-'prefsnologin' => 'Вы не представились системе',
-'prefsnologintext' => 'Вы должны <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} представиться системе]</span>, чтобы изменять настройки участника.',
+'prefsnologintext2' => 'Необходимо $1, чтобы изменять настройки.',
'changepassword' => 'Изменение пароля',
'prefs-skin' => 'Тема оформления',
'skin-preview' => 'Предпросмотр',
'recentchanges-label-minor' => 'Это незначительное изменение',
'recentchanges-label-bot' => 'Эта правка сделана ботом',
'recentchanges-label-unpatrolled' => 'Эта правку ещё никем не патрулировалась',
+'recentchanges-legend-newpage' => '$1 — новая страница',
'rcnote' => "{{PLURAL:$1|Последнее '''$1''' изменение|Последние '''$1''' изменения|Последние '''$1''' изменений}} за '''$2''' {{PLURAL:$2|день|дня|дней}}, на момент времени $5 $4.",
'rcnotefrom' => "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
'rclistfrom' => 'Показать изменения с $1.',
эл. почта: $PAGEEDITOR_EMAIL
вики: $PAGEEDITOR_WIKI
-Ð\95Ñ\81ли вÑ\8b не поÑ\81еÑ\82иÑ\82е Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ñ\82о в случае её дальнейших изменений уведомлений больше не будет. Вы можете также отключить опцию уведомления для всех страниц в вашем списке наблюдения.
+Ð\95Ñ\81ли вÑ\8b не зайдÑ\91Ñ\82е на Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 под Ñ\81воей Ñ\83Ñ\87Ñ\91Ñ\82ной запиÑ\81Ñ\8cÑ\8e, в случае её дальнейших изменений уведомлений больше не будет. Вы можете также отключить опцию уведомления для всех страниц в вашем списке наблюдения.
- Система оповещения {{grammar:genitive|{{SITENAME}}}}
+Система оповещения {{grammar:genitive|{{SITENAME}}}}
--
Изменение настройки уведомлений
'allmessagesdefault' => 'Текст по умолчанию',
'allmessagescurrent' => 'Текущий текст',
'allmessagestext' => 'Это список системных сообщений, доступных в пространстве имён «MediaWiki».
-Если вы хотите внести вклад в общую локализацию MediaWiki, пожалуйста, посетите страницу [//www.mediawiki.org/wiki/Localisation описания локализации] и проект [//translatewiki.net translatewiki.net].',
+Если вы хотите внести вклад в общую локализацию MediaWiki, пожалуйста, посетите страницу [https://www.mediawiki.org/wiki/Localisation описания локализации] и проект [//translatewiki.net translatewiki.net].',
'allmessagesnotsupportedDB' => "Эта страница недоступна, так как отключена опция '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Фильтр',
'allmessages-filter' => 'Фильтр по статусу изменения:',
'tooltip-undo' => 'Убрать внесённую правку и показать предпросмотр, с возможностью указать причину отмены',
'tooltip-preferences-save' => 'Сохранить настройки',
'tooltip-summary' => 'Введите краткое описание',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
# Stylesheets
'common.css' => '/* Размещённый здесь CSS будет применяться ко всем темам оформления */',
'svg-long-desc' => 'SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
'svg-long-desc-animated' => 'Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3',
'svg-long-error' => 'неправильный SVG-файл: $1',
-'show-big-image' => 'Изображение в более высоком разрешении',
+'show-big-image' => 'Исходный файл',
'show-big-image-preview' => 'Размер при предпросмотре: $1.',
'show-big-image-other' => '{{PLURAL:$2|Другое разрешение|Другие разрешения}}: $1.',
'show-big-image-size' => '$1 × $2 пикселей',
# External editor support
'edit-externally' => 'Редактировать этот файл, используя внешнюю программу',
-'edit-externally-help' => '(подробнее см. в [//www.mediawiki.org/wiki/Manual:External_editors руководстве по установке])',
+'edit-externally-help' => '(подробнее см. в [https://www.mediawiki.org/wiki/Manual:External_editors руководстве по установке])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'все',
'word-separator' => ' ',
'ellipsis' => '…',
'parentheses' => '($1)',
+'quotation-marks' => '«$1»',
# Multipage image navigation
'imgmultipageprev' => '← предыдущая страница',
'version-hook-subscribedby' => 'Подписан на',
'version-version' => '(Версия $1)',
'version-license' => 'Лицензия',
-'version-poweredby-credits' => "Эта вики работает на движке '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Эта вики работает на движке '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'другие',
'version-poweredby-translators' => 'переводчики translatewiki.net',
'version-credits-summary' => 'Хотим поблагодарить следующих участников за их вклад в развитие [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Спецстраницы',
-'specialpages-note' => '----
-* Обычные служебные страницы.
-* <span class="mw-specialpagerestricted">Служебные страницы с ограниченным доступом.</span>
-* <span class="mw-specialpagecached">Закэшированные служебные страницы (могут быть устаревшими).</span>',
+'specialpages-note-top' => 'Легенда',
+'specialpages-note' => '* Обычные служебные страницы.
+* <span class="mw-specialpagerestricted">Служебные страницы с ограниченным доступом.</span>',
'specialpages-group-maintenance' => 'Отчёты технического обслуживания',
'specialpages-group-other' => 'Другие служебные страницы',
'specialpages-group-login' => 'Представиться / Зарегистрироваться',
'limitreport-expansiondepth' => 'Наибольшая глубина расширения',
'limitreport-expensivefunctioncount' => 'Количество «дорогих» функций анализатора',
+# Special:ExpandTemplates
+'expandtemplates' => 'Развёртка шаблонов',
+'expand_templates_intro' => 'Эта служебная страница преобразует текст, рекурсивно разворачивая все шаблоны в нём.
+Также развёртке подвергаются функции парсера
+<code><nowiki>{{#language:…}}</nowiki></code> и переменные вида
+<code><nowiki>{{CURRENTDAY}}</nowiki></code> — в общем, всё внутри двойных фигурных скобок.',
+'expand_templates_title' => 'Заголовок страницы для {{FULLPAGENAME}} и т. п.:',
+'expand_templates_input' => 'Входной текст:',
+'expand_templates_output' => 'Результат',
+'expand_templates_xml_output' => 'XML вывод',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Удалить комментарии',
+'expand_templates_remove_nowiki' => 'Подавлять теги <nowiki> в результате',
+'expand_templates_generate_xml' => 'Показать дерево разбора XML',
+'expand_templates_preview' => 'Предпросмотр',
+
);
'ok' => 'ОК',
'retrievedfrom' => 'Обтримане з "$1"',
'youhavenewmessages' => 'Маєте $1 ($2).',
-'newmessageslink' => 'новы повідомлїня',
-'newmessagesdifflink' => 'послїдня зміна',
'youhavenewmessagesfromusers' => 'Мате $1 од {{PLURAL:$3|іншого хоснователя|$3 іншых хоснователїв}} ($2).',
'youhavenewmessagesmanyusers' => 'Мате $1 од много далшых хоснователїв ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлїня|новы повідомлїня}}',
'preferences' => 'Наставлїня',
'mypreferences' => 'Наставлїня',
'prefs-edits' => 'Чісло едітовань:',
-'prefsnologin' => 'Не сьте приголошеный(а)!',
-'prefsnologintext' => 'Кідь хочете мінити хосновательскы наставлїня, мусите ся <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} приголосити]</span>.',
'changepassword' => 'Змінити гесло',
'prefs-skin' => 'Взгляд',
'skin-preview' => 'Попереднїй нагляд',
'recentchanges-label-minor' => 'Тото є мала зміна',
'recentchanges-label-bot' => 'Тото едітованя зроблене ботом',
'recentchanges-label-unpatrolled' => 'Тота зміна дотеперь не была патролёвана.',
+'recentchanges-legend-newpage' => '$1 — нова сторінка',
'rcnote' => "{{PLURAL:$1|Послїдня '''$1''' зміна|Послїднї '''$1''' зміны|Послїднїх '''$1''' змін}} за '''$2''' {{PLURAL:$2|день|днї|днїв}}, на час $5, $4.",
'rcnotefrom' => 'Ниже {{PLURAL:$1|є|суть|є}} найвеце <b>$1</b> {{PLURAL:$1|зміна|зміны|змін}} од <b>$2</b>.',
'rclistfrom' => 'Вказати едітованя почінаючі з $1.',
'allmessagesdefault' => 'Штандартный текст',
'allmessagescurrent' => 'Актуалный текст',
'allmessagestext' => 'Тото є список вшыткых повідомлїнь доступных в просторї назв «MediaWiki».
-Кідь хочете приспівати ку локалізації софтверу MediaWiki, навщівте [//www.mediawiki.org/wiki/Localisation локалізачну сторінку на mediawiki.org] і [//translatewiki.net сервер server translatewiki.net].',
+Кідь хочете приспівати ку локалізації софтверу MediaWiki, навщівте [https://www.mediawiki.org/wiki/Localisation локалізачну сторінку на mediawiki.org] і [//translatewiki.net сервер server translatewiki.net].',
'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages не є підпороване, бо wgUseDatabaseMessages є выпнуте.',
'allmessages-filter-legend' => 'Філтер',
'allmessages-filter' => 'Філтер за станом:',
# External editor support
'edit-externally' => 'Едітовати тот файл хоснувчі екстерну аплікацію',
-'edit-externally-help' => '(Веце інформацій найдете в [//www.mediawiki.org/wiki/Manual:External_editors інштрукції про наставлїня].)',
+'edit-externally-help' => '(Веце інформацій найдете в [https://www.mediawiki.org/wiki/Manual:External_editors інштрукції про наставлїня].)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'вшыткы',
'version-hook-subscribedby' => 'Підписаный на',
'version-version' => '(Верзія $1)',
'version-license' => 'Ліценція',
-'version-poweredby-credits' => "Тота вікі біжыть на '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Тота вікі біжыть на '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
'version-poweredby-others' => 'іншы',
'version-poweredby-translators' => 'перекладателї на translatewiki.net',
'version-credits-summary' => 'Слїдуючім людям бы сьме радо подяковали за їх приспівкы [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Шпеціалны сторінкы',
-'specialpages-note' => '----
-* Звычайны шпеціалны сторінкы.
+'specialpages-note' => '* Звычайны шпеціалны сторінкы.
* <span class="mw-specialpagerestricted">Шпеціалны сторінкы з обмедженым приступом</span>
* <span class="mw-specialpagecached">Кешованы шпеціалны сторінкы</span>',
'specialpages-group-maintenance' => 'Технічны репорты',
'limitreport-expansiondepth' => 'Найвысша глубка росшырїня',
'limitreport-expensivefunctioncount' => 'Чісло дорогой функції аналізатора',
+# Special:ExpandTemplates
+'expandtemplates' => 'Розгортаня шаблон',
+'expand_templates_intro' => 'Тота шпеціална сторінка перетворює текст, рекурзівно розгортаювші у ній вшыткы шаблоны як <code><nowiki>{{</nowiki>#language:…...}}</code> ці перемінны як <code><nowiki>{{</nowiki>CURRENTDAY}}</code> – тзн. практічно вшытко у двоїтых заперках. Ку тому ся хоснують прямо одповідаючі функціі парсера MediaWiki.',
+'expand_templates_title' => 'Назва сторінкы про контекст про {{FULLPAGENAME}} ітд.:',
+'expand_templates_input' => 'Вступный текст:',
+'expand_templates_output' => 'Резултат',
+'expand_templates_xml_output' => 'XML-выступ',
+'expand_templates_ok' => 'ОК',
+'expand_templates_remove_comments' => 'Одстранити коментарї',
+'expand_templates_remove_nowiki' => 'Іґноровати в резултатї значкы <nowiki>',
+'expand_templates_generate_xml' => 'Указати сінтаксічный стром в XML',
+'expand_templates_preview' => 'Нагляд',
+
);
'pagetitle' => '$1 - {{SITENAME}}',
'retrievedfrom' => '"$1" इत्यस्माद् उद्धृतम्',
'youhavenewmessages' => 'भवदर्थम् $1 सन्ति। ($2).',
-'newmessageslink' => 'नूतनाः सन्देशाः',
-'newmessagesdifflink' => 'अन्तिमं परिवर्तनम्',
'youhavenewmessagesfromusers' => 'भवदर्थम् {{PLURAL:$3|अन्यस्मात् सदस्यात्|$3 सदस्येभ्यः}} $1 अस्ति ($2)।',
'youhavenewmessagesmanyusers' => 'नैकेभ्यः योजकेभ्यः ते $1 सन्ति $2 ।',
'newmessageslinkplural' => '{{PLURAL:$1|नूतनः सन्देशः|नूतनसन्देशाः}}',
'preferences' => 'इष्टतमानि',
'mypreferences' => 'मम इष्टतमानि',
'prefs-edits' => 'सम्पादनानां सख्याः',
-'prefsnologin' => 'नैव प्रविष्ट',
-'prefsnologintext' => 'वरीयतां परिवर्तयितुं भवता <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}}नामाभिलेखः]</span> करणियः।',
'changepassword' => 'कूटशब्दः परिवर्त्यताम्',
'prefs-skin' => 'त्वक्',
'skin-preview' => 'प्राग्दृश्यम्',
'allmessagesname' => 'नाम',
'allmessagesdefault' => 'डिफॉल्टसन्देशपाठ',
'allmessagescurrent' => 'सद्यः सन्देशपाठः ।',
-'allmessagestext' => 'एषा मीडियाविकिनामस्थाने उपलब्धा काचित् तन्त्रसन्देशस्य सूचिका अस्ति । यदि भवान् सामान्यमीडियाविकि क्षेत्रीयकरणे योगदानं कर्तुमिच्छति तर्हि[//www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरणम्] अथवा [//translatewiki.net translatewiki.net] इत्यत्र गच्छतु ।',
+'allmessagestext' => 'एषा मीडियाविकिनामस्थाने उपलब्धा काचित् तन्त्रसन्देशस्य सूचिका अस्ति । यदि भवान् सामान्यमीडियाविकि क्षेत्रीयकरणे योगदानं कर्तुमिच्छति तर्हि[https://www.mediawiki.org/wiki/Localisation मीडियाविकि क्षेत्रीयकरणम्] अथवा [//translatewiki.net translatewiki.net] इत्यत्र गच्छतु ।',
'allmessagesnotsupportedDB' => "अस्य पुटस्य उपयोगः नैव शक्यते यतः '''\$wgUseDatabaseMessages''' तटास्थम् अस्ति ।",
'allmessages-filter-legend' => 'शोधनी ।',
'allmessages-filter' => 'ग्राहकीकरणस्य स्थितौ शोधनी ।',
# External editor support
'edit-externally' => 'बाह्यां प्रणालीम् उपयुज्य इयं सञ्चिका सम्पाद्यताम् ।',
-'edit-externally-help' => '(अधिकासूचनार्थं [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] इत्येतत् दृश्यताम्)',
+'edit-externally-help' => '(अधिकासूचनार्थं [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] इत्येतत् दृश्यताम्)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'सर्वाणि',
'version-hook-subscribedby' => 'सदस्यत्वम् अनेन प्राप्तम् ।',
'version-version' => '(आवृत्तिः$1)',
'version-license' => 'अनुज्ञापत्रम्',
-'version-poweredby-credits' => "इयं विकिः अनेन सञ्चालिता '''[//www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1 $2 ।",
+'version-poweredby-credits' => "इयं विकिः अनेन सञ्चालिता '''[https://www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1 $2 ।",
'version-poweredby-others' => 'अन्य',
'version-credits-summary' => '[[Special:Version|MediaWiki]] इत्यत्र योगदानार्थं वयं अधोलिखितान् जनान् प्रशंसितुमिच्छामः।',
'version-license-info' => 'मिडियाविकिः तु निश्शुल्कतन्त्रांशः ; भवान् पुनः वितर्तुं शक्नोति अथवा GNU सामान्यसार्वजनिकानुज्ञपत्रस्य नियमानुगुणं द्वीतीयावृत्तिम् अथवा अन्यनूतनावृतिं संस्कर्तुं शक्नोति ।
# Special:SpecialPages
'specialpages' => 'विशेषपृष्ठानि',
-'specialpages-note' => '----
-* साधारणं विशेषपुटम् ।
+'specialpages-note' => '* साधारणं विशेषपुटम् ।
* <span class="mw-specialpagerestricted">प्रतिद्धं विशेषपुटम् ।</span>',
'specialpages-group-maintenance' => 'निर्वहणवृत्तानि ।',
'specialpages-group-other' => 'अन्यविशेषपुटानि ।',
'duration-centuries' => '$1 {{PLURAL:$1|शतकम्|शतकानि}}',
'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्धः|सहस्राब्धाः}}',
+# Special:ExpandTemplates
+'expand_templates_output' => 'परिणामम्',
+'expand_templates_ok' => 'अस्तु',
+'expand_templates_preview' => 'प्राग्दृश्यम् दर्श्यताम्',
+
);
'ok' => 'Сөп',
'retrievedfrom' => '"$1" -н кэллэ',
'youhavenewmessages' => '$1 ($2) кэллэ',
-'newmessageslink' => 'саҥа суруктар',
-'newmessagesdifflink' => 'кэлиҥҥи уларытыы',
'youhavenewmessagesfromusers' => 'Маны $1 {{PLURAL:$3|соҕотох кыттааччыттан|$3 кыттааччыттан}} туппуккун ($2).',
'youhavenewmessagesmanyusers' => 'Маны $1 элбэх кыттааччыттан туппуккун ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|саҥа этии|саҥа этии}}',
'preferences' => 'Уларытыылар',
'mypreferences' => 'Туруоруулар',
'prefs-edits' => 'Көннөрүү ахсаана:',
-'prefsnologin' => 'Ааккын эппэтиҥ',
-'prefsnologintext' => 'Эн <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ааккын эттэххинэ]</span> эрэ кыттаачы туруорууларын уларытар кыахтаныаҥ.',
'changepassword' => 'Киирии тылы уларытарга',
'prefs-skin' => 'Тас көстүү',
'skin-preview' => 'Хайдах буолара',
'recentchanges-label-minor' => 'Бу улахан суолтата суох уларытыы',
'recentchanges-label-bot' => 'Бу уларытыыны робот оҥорбут',
'recentchanges-label-unpatrolled' => 'Бу уларытыы өссө ботурууллана илик',
+'recentchanges-legend-newpage' => '$1 — саҥа сирэй',
'rcnote' => "{{PLURAL:$2|хонук|'''$2''' хонуктар}} иһинэн бүтэһик {{PLURAL:$1|'''1''' уларыйыы|'''$1''' уларыйыылар}}, $5, $4.",
'rcnotefrom' => "Мантан '''$2''' маныаха '''$1''' дылы уларыыйылар көрдөрүлүннүлэр.",
'rclistfrom' => 'Бу кэм $1 кэнниттэн оҥоһуллубуттары көрдөр',
'allmessagesdefault' => 'Туспа этиллибэтэҕинэ суруллар тиэкис',
'allmessagescurrent' => 'Билиҥҥи тиэкис',
'allmessagestext' => 'Манна MediaWiki биллэриилэрин испииһэгэ көстөр.
-Эн MediaWiki движогун тылбаастыырга көмөлөһүөххүн баҕарар буоллаххына манна [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] уонна манна [//translatewiki.net translatewiki.net] киир.',
+Эн MediaWiki движогун тылбаастыырга көмөлөһүөххүн баҕарар буоллаххына манна [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] уонна манна [//translatewiki.net translatewiki.net] киир.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' туттуллар кыаҕа суох, тоҕо диэтэххэ '''\$wgUseDatabaseMessages''' араарыллыбыт.",
'allmessages-filter-legend' => 'Сиидэ',
'allmessages-filter' => 'Уларытыы көрүҥүнэн наардыыр сиидэ:',
# External editor support
'edit-externally' => 'Бу билэни таһынааҕы бырагыраамма көмөтүнэн уларытарга',
-'edit-externally-help' => 'Сиһилии бу ыйынньыгынан баран көр: [//www.mediawiki.org/wiki/Manual:External_editors туруоруулар туһунан].',
+'edit-externally-help' => 'Сиһилии бу ыйынньыгынан баран көр: [https://www.mediawiki.org/wiki/Manual:External_editors туруоруулар туһунан].',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'бары',
'version-hook-subscribedby' => 'Суруттарыыта:',
'version-version' => '(Торум $1)',
'version-license' => 'Лиссиэнзийэ',
-'version-poweredby-credits' => "Бу биики бу движокка олоҕурар '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Бу биики бу движокка олоҕурар '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'атыттар',
'version-poweredby-translators' => 'translatewiki.net тылбаасчыттара',
'version-credits-summary' => '[[Special:Version|MediaWiki]] сайдыытыгар үлэлэрин иһин манна ахтыллыбыт дьоҥҥо махтанабыт.',
# Special:SpecialPages
'specialpages' => 'Анал сирэйдэр',
-'specialpages-note' => '----
-* Көннөрү анал сирэйдэр.
+'specialpages-note' => '* Көннөрү анал сирэйдэр.
* <strong class="mw-specialpagerestricted">Хааччахтардаах анал сирэйдэр.</strong>
* <span class="mw-specialpagecached">Кээстэммит анал сирэйдэр (эргэрбит буолуохтарын сөп).</span>',
'specialpages-group-maintenance' => 'Техническэй отчуоттар',
# Image rotation
'rotate-comment' => 'Ойуу $1 кыраадыс чаһы хоту эргитиллибит',
+# Special:ExpandTemplates
+'expandtemplates' => 'Халыыптары тэнитии',
+'expand_templates_intro' => 'Бу аналлаах сирэй тиэкиһи уларытарытарыгар туох баар халыыптары тэнитэн көрдөрөр.
+Парсер функциялара эмиэ тэнитиллэллэр. Холобур, <nowiki>{{</nowiki>#language:...}} уонна переменнайдар <nowiki>{{</nowiki>CURRENTDAY}} уо. д. а. — уопсайынан, хос фигурнай скобка иһигэр баар барыта.
+Бу дьайыы сыыһата суох, MediaWiki көмөтүнэн оҥоһуллар.',
+'expand_templates_title' => '{{FULLPAGENAME}} сирэй аата уонна да атын сибидиэнньэлэр:',
+'expand_templates_input' => 'Киирэр сурук:',
+'expand_templates_output' => 'Түмүк',
+'expand_templates_xml_output' => 'XML тахсыыта',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ырытыылары сот',
+'expand_templates_remove_nowiki' => 'Түмүккэ <nowiki> бэлиэни аахсыма',
+'expand_templates_generate_xml' => 'XML-ы мас курдук көрдөр',
+'expand_templates_preview' => 'Холоон көрүү',
+
);
'ok' => 'Ṭhik gea',
'retrievedfrom' => '"$1" khon ñam ạgui',
'youhavenewmessages' => 'Amaḱ do $1 ($2) menaḱa',
-'newmessageslink' => 'Nãwã sombat',
-'newmessagesdifflink' => 'Mucạt bodol',
'youhavenewmessagesmulti' => 'Amaḱ nãwã mesagko do $1 menaḱa',
'editsection' => 'So̠mpado̠n',
'editold' => 'So̠mpado̠n',
# External editor support
'edit-externally' => 'Noa rẽt tońge joṛao lạgitte bahre reaḱ koejoń beoharme',
-'edit-externally-help' => '(Nonḍe ńelme [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] bạṛtite baḍay lạgit)',
+'edit-externally-help' => '(Nonḍe ńelme [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] bạṛtite baḍay lạgit)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Sanam, sanamak, sanamko',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Bogau dae "$1"',
'youhavenewmessages' => 'Tenes $1 ($2).',
-'newmessageslink' => 'messàgios noos',
-'newmessagesdifflink' => 'ùrtima mudàntzia',
'youhavenewmessagesmulti' => 'Tenes messàgios noos in $1',
'editsection' => 'acontza',
'editold' => 'acontza',
'preferences' => 'Preferèntzias',
'mypreferences' => 'Preferèntzias meas',
'prefs-edits' => 'Nùmeru de acontzos:',
-'prefsnologin' => 'Non ses intrau',
-'prefsnologintext' => 'Depes èsser <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} intradu]</span> pro seberare is preferèntzias.',
'changepassword' => 'Càmbia password',
'prefs-skin' => 'Bisura',
'skin-preview' => 'Antiprima',
'recentchanges-label-newpage' => 'Custu acontzu at creadu una pàgina noa',
'recentchanges-label-minor' => 'Custu est unu acontzu minore',
'recentchanges-label-bot' => 'Custu acontzu est stadu fatu dae unu bot',
+'recentchanges-legend-newpage' => '$1 - pàgina noa',
'rcnote' => "Inoghe sighende {{PLURAL:$1|b'est s'ùrtima mudàntzia|bi sunt is ùrtimas '''$1''' mudàntzias}} {{PLURAL:$2|in s'ùrtima die|in is ùrtimas '''$2''' dies}}; is datos sunt agiornados a $5, $4.",
'rcnotefrom' => "Sas chi sighint sunt sas mudàntzias dae '''$2''' (fintzas a '''$1''').",
'rclistfrom' => 'Ammustra mudàntzias dae $1',
# External editor support
'edit-externally' => 'Acontza custu file usendi unu programma de foras',
-'edit-externally-help' => '(Pro àteras informatziones càstia is [//www.mediawiki.org/wiki/Manual:External_editors istrutziones])',
+'edit-externally-help' => '(Pro àteras informatziones càstia is [https://www.mediawiki.org/wiki/Manual:External_editors istrutziones])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'totu',
# Search suggestions
'searchsuggest-search' => 'Chirca',
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Antiprima',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Estrattu di "$1"',
'youhavenewmessages' => 'Ricivìsti $1 ($2).',
-'newmessageslink' => 'missaggi novi',
-'newmessagesdifflink' => 'ùrtimi canciamenti',
'youhavenewmessagesfromusers' => "Hai $1 di {{PLURAL:$3|n'àutru utenti|$3 utenti}} ($2).",
'youhavenewmessagesmanyusers' => 'Hai $1 di na pocu di utenti ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|Nu missaggiu novu|missaggi novi}}',
'preferences' => 'prifirenzi',
'mypreferences' => 'Li mè prifirenzi',
'prefs-edits' => 'Nùmmuru di canciamenti:',
-'prefsnologin' => 'Accessu nun effittuatu',
-'prefsnologintext' => 'Pi putiri pirsunalizzari li prifirenzi è nicissariu fari l\'<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} accessu]</span>.',
'changepassword' => 'Cancia la password',
'prefs-skin' => 'Aspettu',
'skin-preview' => 'Antiprima',
'recentchanges-label-minor' => 'Chista è nu canciamentu nnicu',
'recentchanges-label-bot' => 'Stu canciamentu fu fattu dû bot',
'recentchanges-label-unpatrolled' => 'Stu canciamentu nun havi ancora statu virificatu',
+'recentchanges-legend-newpage' => '$1 - pàggina nova',
'rcnote' => "Ccà sutta {{PLURAL:$1|c'è lu canciamentu cchiù ricenti appurtatu|cci sunnu l'ùrtimi '''$1''' canciamenti appurtati}} ô situ {{PLURAL:$2|nta l'ùrtimi 24 uri|nta l'ùrtimi '''$2''' giorni}}; li dati sunnu aggiurnati ê $5 dû $4.",
'rcnotefrom' => 'Ccà sutta cci sunnu li canciamenti a pàrtiri dû <b>$2</b> (ammustrati nzinu ô <b>$1</b>).',
'rclistfrom' => 'Ammustra li canciamenti novi a pàrtiri di $1',
'allmessagesdefault' => 'Testu pridifinitu',
'allmessagescurrent' => 'Testu attuali',
'allmessagestext' => "Chista è na lista di missaggi di sistema chi s'attròvanu sutta MediaWiki:''nomu''.
-Visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si voi cuntribbuiri â localizzazioni generica di MediaWiki.",
+Visita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] si voi cuntribbuiri â localizzazioni generica di MediaWiki.",
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nun è suppurtatu pirchì lu flag '''\$wgUseDatabaseMessages''' nun è attivu.",
'allmessages-filter-legend' => 'Filtru',
'allmessages-filter' => 'Filtru pi statu di canciamentu:',
# External editor support
'edit-externally' => 'Cancia stu file usannu un prugramma sternu',
-'edit-externally-help' => "Pi chiossai nfurmazzioni cunzurtari l'[//www.mediawiki.org/wiki/Manual:External_editors istruzzioni] ('n ngrisi)",
+'edit-externally-help' => "Pi chiossai nfurmazzioni cunzurtari l'[https://www.mediawiki.org/wiki/Manual:External_editors istruzzioni] ('n ngrisi)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tutti',
# Special:SpecialPages
'specialpages' => 'Pàggini spiciali',
-'specialpages-note' => '----
-* Pàggini spiciali non risirvati.
+'specialpages-note' => '* Pàggini spiciali non risirvati.
* <strong class="mw-specialpagerestricted">Pàggini spiciali risirvati sulu a quarchi catigurìa d\'utenti.</strong>',
'specialpages-group-maintenance' => 'Resocunti di manutinzioni',
'specialpages-group-other' => 'Autri pàggini spiciali',
'ok' => 'Okay',
'retrievedfrom' => 'Taen frae "$1"',
'youhavenewmessages' => 'Ye hae $1 ($2).',
-'newmessageslink' => 'new messages',
-'newmessagesdifflink' => 'diff wi last-but-ane reveision',
'youhavenewmessagesmulti' => 'Ye hae neow messages on $1',
'editsection' => 'edit',
'editold' => 'edit',
# Preferences page
'mypreferences' => 'Ma preferences',
-'prefsnologin' => 'No loggit in',
-'prefsnologintext' => 'Ye maun be [[Special:UserLogin|loggit in]] tae set uiser preferences.',
'changepassword' => 'Chynge password',
'prefs-skin' => 'Huil',
'skin-preview' => 'First Leuk',
# External editor support
'edit-externally' => 'Edit this file uisin an external application',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for mair guidance.)',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for mair guidance.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'aw',
'ok' => 'ٺيڪ',
'retrievedfrom' => '"$1" تان ورتل',
'youhavenewmessages' => 'توهان لاءِ $1 ($2) آهن.',
-'newmessageslink' => 'نوان نياپا',
-'newmessagesdifflink' => 'آخري تبديلي',
'editsection' => 'سنواريو',
'editold' => 'سنواريو',
'viewsourceold' => 'ڪوڊ ڏسو',
# External editor support
'edit-externally' => 'هيءُ فائيل ڪنهن خارجي منتقڪريءَ سان سنواريو',
-'edit-externally-help' => 'وڌيڪ معلومات لاءِ [//www.mediawiki.org/wiki/Manual:External_editors هدايتون براءِ تنصيبڪاري] ڏسندا.',
+'edit-externally-help' => 'وڌيڪ معلومات لاءِ [https://www.mediawiki.org/wiki/Manual:External_editors هدايتون براءِ تنصيبڪاري] ڏسندا.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'سڀ',
'ok' => 'EMMU',
'retrievedfrom' => 'Buggaddu da "$1"',
'youhavenewmessages' => 'Ài $1 ($2).',
-'newmessageslink' => 'nobi imbasciaddi',
-'newmessagesdifflink' => 'diffarènzia cu la revisioni prizzidenti',
'youhavenewmessagesmulti' => 'Ài nobi imbasciaddi i $1',
'editsection' => 'mudifigga',
'editold' => 'mudifigga',
'preferences' => 'Prifirenzi',
'mypreferences' => "Li me' prifirenzi",
'prefs-edits' => 'Mudìfigghi effettuaddi:',
-'prefsnologin' => 'Intradda nò effettuadda',
-'prefsnologintext' => 'Pa mudìfiggà li prifirenzi è nezzessàriu [[Special:UserLogin|intrà]].',
'changepassword' => "Ciamba paràura d'órdhini",
'prefs-skin' => 'Aipettu gràficu',
'skin-preview' => 'antiprimma',
'allmessagesdefault' => 'Testhu pridifiniddu',
'allmessagescurrent' => 'Testhu attuari',
'allmessagestext' => "Chistha è la listha di tutti l'imbasciaddi di sisthema dipunìbiri i' lu tipu di pàgina MediaWiki.
-Pa piazeri utirizà [//www.mediawiki.org/wiki/Localisation MediaWiki Lucarizazioni] e [//translatewiki.net translatewiki.net] pa l'althri traduzioni.",
+Pa piazeri utirizà [https://www.mediawiki.org/wiki/Localisation MediaWiki Lucarizazioni] e [//translatewiki.net translatewiki.net] pa l'althri traduzioni.",
'allmessagesnotsupportedDB' => "Chistha pàgina nò è supporthadda parchí l'indicadori '''\$wgUseDatabaseMessages''' nò è attibuu.",
'allmessages-filter-unmodified' => 'Nò mudifiggaddi',
'allmessages-filter-all' => 'Tutti',
# External editor support
'edit-externally' => 'Mudìfigga chistu file usendi un prugramma esthernu',
-'edit-externally-help' => "Pa maggiori infuimmazioni cunsulthà l'[//www.mediawiki.org/wiki/Manual:External_editors isthruzioni] (in ingresu).",
+'edit-externally-help' => "Pa maggiori infuimmazioni cunsulthà l'[https://www.mediawiki.org/wiki/Manual:External_editors isthruzioni] (in ingresu).",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tutti',
'mypreferences' => 'Ásahusat',
'prefs-edits' => 'Rievdadusaid mearri:',
'prefsnologin' => 'It leat čálligoahtán sisa',
-'prefsnologintext' => 'Don fertet [[Special:UserLogin|čálligoahtit sisa]], ovdalgo sáhtát rievdadit du ásahusaid.',
'changepassword' => 'Suollemassáni molson',
'prefs-skin' => 'Olggosoaidnu',
'skin-preview' => 'ovdalgihtii geahččan...',
'ok' => 'Gerā',
'retrievedfrom' => 'Gautė ėš „$1“',
'youhavenewmessages' => 'Tamsta toret $1 ($2).',
-'newmessageslink' => 'naujū žėnotiu',
-'newmessagesdifflink' => 'paskotinis pakeitėms',
'youhavenewmessagesmulti' => 'Toret naujū žėnotiu $1',
'editsection' => 'taisītė',
'editold' => 'taisītė',
'preferences' => 'Nustatīmā',
'mypreferences' => 'Mona nustatīmā',
'prefs-edits' => 'Keitėmu skaitlius:',
-'prefsnologin' => 'Naprisėjongis',
-'prefsnologintext' => 'Tamstā rēk būtė <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prisėjongosam]</span>, kū galietomiet keistė sava nustatīmus.',
'changepassword' => 'Pakeistė slaptažuodė',
'prefs-skin' => 'Ėšruoda',
'skin-preview' => 'Parveiza',
# External editor support
'edit-externally' => 'Atdarītė ėšuoriniam redaktuorio',
-'edit-externally-help' => 'Nuoriedamė gautė daugiau infuormacėjės, veiziekėt [//www.mediawiki.org/wiki/Manual:External_editors kruovėma instrokcėjės].',
+'edit-externally-help' => 'Nuoriedamė gautė daugiau infuormacėjės, veiziekėt [https://www.mediawiki.org/wiki/Manual:External_editors kruovėma instrokcėjės].',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'vėsos',
# Special:SpecialPages
'specialpages' => 'Specēlė̅jė poslapē',
-'specialpages-note' => '----
-* Normalūs specēlė̅jė puslapē.
+'specialpages-note' => '* Normalūs specēlė̅jė puslapē.
* <strong class="mw-specialpagerestricted">Apribuotė specēlė̅jė puslapē.</strong>',
'specialpages-group-maintenance' => 'Sėstemas palaikīma pranešėmā',
'specialpages-group-other' => 'Kėtė specēlė̅jė poslapē',
'logentry-newusers-autocreate' => 'Paskīra $1 bova padėrbta autuomatėškā',
'rightsnone' => '(juokiū)',
+# Special:ExpandTemplates
+'expandtemplates' => 'Ėšskeistė šabluonus',
+
);
'ok' => 'da',
'retrievedfrom' => 'Dobavljeno iz "$1"',
'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'novih promjena',
-'newmessagesdifflink' => 'posljednja promjena',
'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).',
'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
'preferences' => 'Postavke',
'mypreferences' => 'Postavke',
'prefs-edits' => 'Broj izmjena:',
-'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Da biste mogli podešavati korisničke postavke, morate <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} biti prijavljeni]</span>.',
'changepassword' => 'Promijeni lozinku',
'prefs-skin' => 'Izgled (skin)',
'skin-preview' => 'Pretpregled',
'recentchanges-label-minor' => 'Ovo je manja izmjena',
'recentchanges-label-bot' => 'Ovu je izmjenu učinio bot',
'recentchanges-label-unpatrolled' => 'Ova izmjena još nije patrolirana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
'rcnote' => "Ispod {{PLURAL:$1|je '''$1''' promjena|su '''$1''' zadnje promjene|su '''$1''' zadnjih promjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
'rcnotefrom' => "Ispod {{PLURAL:$1|je '''$1''' izmjena|su '''$1''' zadnje izmjene|su '''$1''' zadnjih izmjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
'rclistfrom' => 'Prikaži nove izmjene počevši od $1',
'allmessagesdefault' => 'Uobičajeni tekst',
'allmessagescurrent' => 'Trenutni tekst',
'allmessagestext' => 'Ovo je spisak svih sistemskih poruka u dostupnih u MediaWiki imenskom prostoru.
-Molimo posjetite [//www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
+Molimo posjetite [https://www.mediawiki.org/wiki/Localisation MediaWiki lokalizaciju] i [//translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.',
'allmessagesnotsupportedDB' => "Ova stranica ne može biti korištena jer je '''\$wgUseDatabaseMessages''' isključen.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter po stanju podešavanja:',
# External editor support
'edit-externally' => 'Izmijeni ovu datoteku/fajl koristeći eksternu aplikaciju',
-'edit-externally-help' => '(Pogledajte [//www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
+'edit-externally-help' => '(Pogledajte [https://www.mediawiki.org/wiki/Manual:External_editors instrukcije za podešavanje] za više informacija)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'sve',
'version-hook-subscribedby' => 'Pretplaćeno od',
'version-version' => '(Verzija $1)',
'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ova wiki je zasnovana na '''[//www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
+'version-poweredby-credits' => "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
'version-poweredby-others' => 'ostali',
'version-credits-summary' => 'Htjeli bismo da zahvalimo sljedećim osobama na njihovom doprinosu [[Special:Version|MediaWiki]].',
'version-license-info' => 'Mediawiki je slobodni softver, možete ga redistribuirati i/ili mijenjati pod uslovima GNU opće javne licence kao što je objavljeno od strane Fondacije Slobodnog Softvera, bilo u verziji 2 licence, ili (po vašoj volji) nekoj od kasniji verzija.
# Special:SpecialPages
'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* Normalne posebne stranice.
+'specialpages-note' => '* Normalne posebne stranice.
* <span class="mw-specialpagerestricted">Ograničene posebne stranice.</span>
* <span class="mw-specialpagecached">Keširane posebne stranice (mogu biti zastarjele).</span>',
'specialpages-group-maintenance' => 'Izvještaji za održavanje',
Ẓr [[Special:Version|ayyaw tasna]].',
'ok' => 'Waxxa',
-'pagetitle' => '(MediaWiki)$1 - {{SITENAME}}',
+'pagetitle' => '$1 - {{SITENAME}}',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Yurrid z "$1"',
'youhavenewmessages' => 'Illa dark $1 ($2).',
-'newmessageslink' => 'Tibratin timaynutin',
-'newmessagesdifflink' => 'Imbddeln imĝura',
'youhavenewmessagesmulti' => 'Dark tibratin timaynutin ɣ $1',
'editsection' => 'Ẓreg (bddel)',
'editold' => 'Ẓreg (bddel)',
'preferences' => 'Timssusmin',
'mypreferences' => 'Timssusmin',
'prefs-edits' => 'Uṭṭun n n imbddeln',
-'prefsnologin' => 'Ur tmlit mat git',
'changepassword' => 'bdl awal ihdan',
'prefs-skin' => 'odm',
'skin-preview' => 'Ammal',
# External editor support
'edit-externally' => 'Bddl asdaw ad s wasnas abrrani',
-'edit-externally-help' => '(Ẓṛ [//www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] bac ad taf uggar n inɣmisn)',
+'edit-externally-help' => '(Ẓṛ [https://www.mediawiki.org/wiki/Manual:External_editors/fr les instructions d’installation] bac ad taf uggar n inɣmisn)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kraygat (kullu)',
'ok' => 'හරි',
'retrievedfrom' => '"$1" වෙතින් සම්ප්රවේශනය කෙරිණි',
'youhavenewmessages' => 'ඔබ හට $1 ($2)',
-'newmessageslink' => 'නව පණිවුඩ',
-'newmessagesdifflink' => 'අවසාන වෙනස',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|තවත් එක් පරිශීලකයෙකුගෙන්|පරිශීලකයන් $3 දෙනෙකුගෙන්}} ඔබ හට $1 ඇත ($2).',
'youhavenewmessagesmanyusers' => 'බොහෝ පරිශීලකයන් වෙතින් ඔබ හට $1 ඇත ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|නව පණිවුඩයක්|නව පණිවුඩ}}',
'preferences' => 'අභිරුචි',
'mypreferences' => 'අභිරුචීන්',
'prefs-edits' => 'සංස්කරණයන් සංඛ්යාව:',
-'prefsnologin' => 'පිවිසී නැත (Not logged in)',
-'prefsnologintext' => 'පරිශීලක අභිරුචි සැකසීමට නම්, ඔබ <span class="plainlinks">[{{fullurl:Special:Userlogin|returnto=$1}} ප්රවිෂ්ටවී]</span> සිටිය යුතුය.',
'changepassword' => 'මුරපදය වෙනස් කරන්න',
'prefs-skin' => 'ඡවිය',
'skin-preview' => 'පෙරදසුන',
'recentchanges-label-minor' => 'මෙය සුළු සංස්කරණයකි',
'recentchanges-label-bot' => 'මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි',
'recentchanges-label-unpatrolled' => 'මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත',
+'recentchanges-legend-newpage' => '$1 - නව පිටුව',
'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1'''}} පහත දැක්වේ.",
'rcnotefrom' => "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්රමාණයක උපරිමයක් පෙන්වා ඇත).",
'rclistfrom' => '$1 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න',
'allmessagesdefault' => 'සාමාන්ය පණිවුඩ පෙළ',
'allmessagescurrent' => 'වත්මන් පෙළ',
'allmessagestext' => 'මේ මාධ්යවිකි නාමඅවකාශයෙහිදී හමුවන පද්ධති පණිවුඩයන් ලැයිස්තුවකි.
-වර්ගීය මාධ්යවිකි ප්රාදේශීයකරණයට දායක වීමට ඔබ රිසි නම් කරුණාකර [//www.mediawiki.org/wiki/Localisation මාධ්යවිකි ප්රාදේශීයකරණය] සහ [//translatewiki.net බීටාවිකි] වෙත පිවිසෙන්න.',
+වර්ගීය මාධ්යවිකි ප්රාදේශීයකරණයට දායක වීමට ඔබ රිසි නම් කරුණාකර [https://www.mediawiki.org/wiki/Localisation මාධ්යවිකි ප්රාදේශීයකරණය] සහ [//translatewiki.net බීටාවිකි] වෙත පිවිසෙන්න.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' අක්රීය කොට ඇති බැවින්, මෙම පිටුව භාවිතා කල නොහැක.",
'allmessages-filter-legend' => 'පෙරහන',
'allmessages-filter' => 'පාරිභෝගීකරණ තත්ත්වය අනුව පෙරීම:',
# External editor support
'edit-externally' => 'බාහිර උපයෝගයක් භාවිතා කරමින් මෙම ගොනුව සංස්කරණය කරන්න',
-'edit-externally-help' => '(වැඩිදුර තොරතුරු සඳහා [//www.mediawiki.org/wiki/Manual:External_editors පිහිටුවීම් උපදෙස්] බලන්න.)',
+'edit-externally-help' => '(වැඩිදුර තොරතුරු සඳහා [https://www.mediawiki.org/wiki/Manual:External_editors පිහිටුවීම් උපදෙස්] බලන්න.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'සියල්ල',
'version-hook-subscribedby' => 'දායකවී ඇත්තේ',
'version-version' => '(අනුවාදය $1)',
'version-license' => 'වරපත',
-'version-poweredby-credits' => "මෙම විකිය '''[//www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "මෙම විකිය '''[https://www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
'version-poweredby-others' => 'අනෙකුත්',
'version-license-info' => 'MediaWiki යනු නිදහස් මෘදුකාංගයකි; නිදහස් මෘදුකාංග පදනමේ (Free Software Foundation) හි GNU General Public License නම් බලපත්රයේ වගන්තිවලට අනුව ඔබට එය නැවත බෙදාහැරීම සහ/හෝ සංස්කරණය කළ හැක; ඒ, එම බලපත්රයේ 2වන හෝ (ඔබට කැමති නම්) ඉන්පසු එන සංස්කරණයකට අනුවය.
# Special:SpecialPages
'specialpages' => 'විශේෂ පිටු',
-'specialpages-note' => '----
-* සාමාන්ය විශේෂ පිටු.
+'specialpages-note' => '* සාමාන්ය විශේෂ පිටු.
* <span class="mw-specialpagerestricted">සීමිත විශේෂ පිටු.</span>
* <span class="mw-specialpagecached">කෑෂිත විශේෂ පිටු (යල් පැන ගිය විය හැක).</span>',
'specialpages-group-maintenance' => 'නඩත්තු වාර්තා',
'duration-centuries' => '{{PLURAL:$1|ශතවර්ෂ|ශතවර්ෂ}} $1 ක්',
'duration-millennia' => '{{PLURAL:$1|සහස්රවර්ෂ|සහස්රවර්ෂ}} $1 ක්',
+# Special:ExpandTemplates
+'expandtemplates' => 'සැකිලි පුළුල් කරන්න',
+'expand_templates_intro' => 'මෙම විශේෂ පිටුව විසින් යම් පෙළක් ගෙන එහි සියළු සැකිලි ආවර්තනික ලෙස පුළුල් කරයි.
+එය <nowiki>{{</nowiki>#language:…}} වැනි ව්යාකරණ විග්රහ ශ්රිතයන් හා,
+<nowiki>{{</nowiki>CURRENTDAY}}වැනි විචල්යයන් ද— ඇත්ත වශයෙන්ම
+ද්විත්ව-සඟල වරහන් තුල හමුවන සැම දෙයක්ම පාහේ පුළුල් කරයි.
+එය විසින් මෙය සිදුකරනුයේ මාධයවිකි විසින්ම අදාල ව්යාකරණ විග්රහ අදියර ඇමතීමෙනි.',
+'expand_templates_title' => '{{FULLPAGENAME}} වැන්න සඳහා, ප්රකරණ ශීර්ෂය.:',
+'expand_templates_input' => 'ප්රදාන පෙළ:',
+'expand_templates_output' => 'ප්රතිඵලය',
+'expand_templates_xml_output' => 'XML ප්රතිදානය',
+'expand_templates_ok' => 'හරි',
+'expand_templates_remove_comments' => 'පරිකථනයන් ඉවත්කරන්න',
+'expand_templates_remove_nowiki' => 'ප්රතිපලයෙහි <nowiki> ටැග යටපත් කරන්න',
+'expand_templates_generate_xml' => 'XML ව්යාකරණ විග්රහ රුක පෙන්වන්න',
+'expand_templates_preview' => 'පෙරදසුන',
+
);
'tog-hidepatrolled' => 'Skryť strážené úpravy v Posledných úpravách',
'tog-newpageshidepatrolled' => 'Skryť strážené stránky zo zoznamu nových stránok',
'tog-extendwatchlist' => 'Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky zmeny, nie len posledné',
-'tog-usenewrc' => 'Zoskupiť v posledných úpravách a na zozname sledovaných stránok podľa stránky (vyžaduje JavaScript)',
+'tog-usenewrc' => 'Zoskupiť zmeny v posledných úpravách a na zozname sledovaných stránok podľa stránky',
'tog-numberheadings' => 'Automaticky číslovať nadpisy',
'tog-showtoolbar' => 'Zobraziť panel nástrojov úprav',
'tog-editondblclick' => 'Upravovať stránky po dvojitom kliknutí',
'ok' => 'OK',
'retrievedfrom' => 'Zdroj: „$1“',
'youhavenewmessages' => 'Máte $1 ($2).',
-'newmessageslink' => 'nové správy',
-'newmessagesdifflink' => 'posledná zmena',
'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|iného používateľa|$3 iných používateľov}} ($2).',
'youhavenewmessagesmanyusers' => 'Máte $1 od viacerých ďalších používateľov ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy}}',
'databaseerror' => 'Chyba v databáze',
'databaseerror-text' => 'Došlo k chybe pri otázke do databázy.
Môže to byť spôsobené chybou v softvéri.',
+'databaseerror-textcl' => 'Vyskytla sa chyba dopytu do databázy.',
'databaseerror-query' => 'Otázka: $1',
'databaseerror-function' => 'Funkcia: $1',
'databaseerror-error' => 'Chyba: $1',
'gotaccount' => "Máte už vytvorený účet? '''$1'''.",
'gotaccountlink' => 'Prihlásiť',
'userlogin-resetlink' => 'Zabudli ste svoje prihlasovacie údaje?',
-'userlogin-resetpassword-link' => 'Obnoviť heslo',
+'userlogin-resetpassword-link' => 'Zabudli ste heslo?',
'helplogin-url' => 'Help:Prihlasovanie',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc s prihlásením]]',
'userlogin-loggedin' => 'Ste už {{GENDER:$1|prihĺasený|prihlásená}} ako $1.
Prosím, prihláste sa znovu, keď ho dostanete.',
'blocked-mailpassword' => 'Boli zablokované úpravy z vašej IP adresy, a tak nie je dovolené použiť funkciu znovuvyžiadania hesla, aby sa zabránilo zneužitiu.',
'eauthentsent' => 'Email s potvrdením bol zaslaný na uvedenú emailovú adresu.
-Predtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby sa potvrdilo, že účet je skutočne váš.',
+Predtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby ste potvrdili, že účet je skutočne váš.',
'throttled-mailpassword' => 'E-mail na obnovenie hesla už bol odoslaný v priebehu {{PLURAL:$1|poslednej $1 hodiny|posledných $1 hodín}}.
Aby sa zabránilo zneužitiu, obnovenie hesla emailom je možné vykonať iba raz za {{PLURAL:$1|$1 hodinu|$1 hodiny|$1 hodín}}.',
'mailerror' => 'Chyba pri posielaní e-mailu: $1',
'acct_creation_throttle_hit' => 'Návštevníci tejto wiki z vašej IP adresy už za posledný deň vytvorili {{PLURAL:$1|$1 účet|$1 účty|$1 účtov}}, čo je maximálny počet povolený za toto časové obdobie.
Z tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť ďalšie účty.',
'emailauthenticated' => 'Vaša emailová adresa bola overená $2 $3.',
-'emailnotauthenticated' => 'Vaša e-mailová adresa ešte nebola overená. Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
+'emailnotauthenticated' => 'Vaša e-mailová adresa ešte nebola overená.
+Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
'noemailprefs' => 'Tieto nástroje budú prístupné po vyplnení emailovej adresy vo vašich nastaveniach.',
'emailconfirmlink' => 'Potvrďte svoju e-mailovú adresu',
'invalidemailaddress' => 'Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.',
'login-abort-generic' => 'Vaše prihlásenie nebolo úspešné - zrušené',
'loginlanguagelabel' => 'Jazyk: $1',
'suspicious-userlogout' => 'Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.',
+'createacct-another-realname-tip' => 'Skutočné meno je nepovinné.
+Ak sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.',
# Email sending
'php-mail-error-unknown' => 'Neznáma chyba vo funkcii PHP mail()',
'newpassword' => 'Nové heslo:',
'retypenew' => 'Nové heslo (ešte raz):',
'resetpass_submit' => 'Nastaviť heslo a prihlásiť sa',
-'changepassword-success' => 'Vaše heslo bolo úspešne zmenené! Prebieha prihlasovanie...',
+'changepassword-success' => 'Vaše heslo bolo úspešne zmenené!',
'resetpass_forbidden' => 'Heslá nie je možné zmeniť',
'resetpass-no-info' => 'Aby ste mohli priamo pristupovať k tejto stránke, musíte sa prihlásiť.',
'resetpass-submit-loggedin' => 'Zmeniť heslo',
Dočasné heslo:$2',
'passwordreset-emailsent' => 'Email s novým heslom bol odoslaný.',
'passwordreset-emailsent-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie.',
-'passwordreset-emailerror-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
+'passwordreset-emailerror-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať {{GENDER:$2|používateľovi}}: $1',
# Special:ChangeEmail
'changeemail' => 'Zmeniť emailovú adresu',
'changeemail-cancel' => 'Zrušiť',
# Special:ResetTokens
+'resettokens' => 'Obnoviť tokeny',
+'resettokens-text' => 'Tu môžete obnoviť tokeny, ktoré umožňujú prístup k určitým súkromným údajom spojeným s vaším účtom.
+
+Mali by ste to urobiť, ak ste ich omylom niekomu poskytli alebo ak bolo vaše konto zneužité.',
+'resettokens-no-tokens' => 'Neexistujú žiadne tokeny, ktoré by bolo možné obnoviť.',
+'resettokens-legend' => 'Obnoviť tokeny',
'resettokens-tokens' => 'Tokeny:',
+'resettokens-token-label' => '$1 (aktuálna hodnota: $2)',
+'resettokens-watchlist-token' => 'Token pre webový kanál (Atom/RSS) [[Special:Watchlist|zmien na stránkach, ktoré sledujete]]',
+'resettokens-done' => 'Tokeny boli obnovené.',
+'resettokens-resetbutton' => 'Obnoviť zvolené tokeny.',
# Edit page toolbar
'bold_sample' => 'Tučný text',
'loginreqlink' => 'prihlásiť',
'loginreqpagetext' => 'Aby ste mohli prezerať ďalšie stránky, musíte sa $1.',
'accmailtitle' => 'Heslo bolo odoslané.',
-'accmailtext' => "Náhodne vytvorené heslo pre používateľa [[User talk:$1|$1]] bolo poslané na $2.
-
-Heslo tohto nového účtu je možné zmeniť na stránke ''[[Special:ChangePassword|zmena hesla]]'' po prihlásení.",
+'accmailtext' => "Náhodne vytvorené heslo pre používateľa [[User talk:$1|$1]] bolo poslané na $2. Je možné ho zmeniť na stránke ''[[Special:ChangePassword|zmena hesla]]'' po prihlásení.",
'newarticle' => '(Nový)',
'newarticletext' => "Sledovali ste odkaz na stránku, ktorá zatiaľ neexistuje.
Stránku vytvoríte tak, že začnete písať do dolného poľa a potom stlačíte tlačidlo „Uložiť stránku“.
Ak ste anonymný používateľ a máte pocit, že vám boli adresované irelevantné diskusné príspevky, [[Special:UserLogin/signup|vytvorte si konto]] alebo sa [[Special:UserLogin|prihláste]], aby sa zamedzilo budúcim zámenám s inými anonymnými používateľmi.''",
'noarticletext' => 'Na tejto stránke sa momentálne nenachádza žiadny text.
Môžete [[Special:Search/{{PAGENAME}}|vyhľadávať názov tejto stránky]] v obsahu iných stránok,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch],
-alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku]</span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vyhľadávať v súvisiacich záznamoch] alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku]</span>.',
'noarticletext-nopermission' => 'Táto stránka momentálne neobsahuje žiadny text.
Môžete [[Special:Search/{{PAGENAME}}|hľadať názov tejto stránky]] v texte iných stránok
alebo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hľadať v súvisiacich záznamoch]</span>, ale nemáte oprávnenie túto stránku vytvoriť.',
'undo-failure' => 'Úpravu nie je možné vrátiť kvôli konfliktným medziľahlým úpravám.',
'undo-norev' => 'Túto úpravu nie je možné vrátiť, pretože neexistuje alebo bola zmazaná.',
'undo-summary' => 'Revízia $1 používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) bola vrátená',
+'undo-summary-username-hidden' => 'Vrátiť revíziu $1, ktorú vykonal skrytý používateľ',
# Account creation failure
'cantcreateaccounttitle' => 'Nie je možné vytvoriť účet',
'currentrevisionlink' => 'Aktuálna úprava',
'cur' => 'aktuálna',
'next' => 'ďalšia',
-'last' => 'posledná',
+'last' => 'predošlá',
'page_first' => 'prvá',
'page_last' => 'posledná',
'histlegend' => 'Porovnanie zmien: označte výberové políčka revízií, ktoré sa majú porovnať a kliknite na tlačidlo dolu.<br />
Iní správcovia {{GRAMMAR:genitív|{{SITENAME}}}} budú stále môcť pristupovať k skrytému obsahu a môžu ho znova obnoviť použitím tohto rozhrania v prípade, že nie sú stanovené ďalšie obmedzenia.",
'revdelete-confirm' => 'Prosím, potvrďte, že to naozaj chcete vykonať, rozumiete následkom a že to robíte v súlade s [[{{MediaWiki:Policy-url}}|politikou]].',
'revdelete-suppress-text' => "Zatajenie by sa malo používať '''výlučne''' v nasledovných prípadoch:
+* Potenciálne hanlivé informácie
* Nevhodné osobné údaje
-*: ''adresy, telefóne čísla, rodné čísla a pod.''",
+*: ''domáce adresy, telefóne čísla, rodné čísla a pod.''",
'revdelete-legend' => 'Nastaviť obmedzenia viditeľnosti',
-'revdelete-hide-text' => 'Skryť text revízie',
+'revdelete-hide-text' => 'Text revízie',
'revdelete-hide-image' => 'Skryť obsah súboru',
'revdelete-hide-name' => 'Skryť činnosť a cieľ',
-'revdelete-hide-comment' => 'Skryť zhrnutie úprav',
-'revdelete-hide-user' => 'Skryť používateľské meno/IP',
+'revdelete-hide-comment' => 'Zhrnutie úprav',
+'revdelete-hide-user' => 'Používateľské meno/IP redaktora',
'revdelete-hide-restricted' => 'Zatajiť údaje pred všetkými, aj pred správcami',
'revdelete-radio-same' => '(nezmeniť)',
-'revdelete-radio-set' => 'Áno',
-'revdelete-radio-unset' => 'Nie',
+'revdelete-radio-set' => 'Viditeľné',
+'revdelete-radio-unset' => 'Skryté',
'revdelete-suppress' => 'Skryť údaje pred správcami rovnako ako pred ostatnými',
'revdelete-unsuppress' => 'Odstrániť obmedzenia obnovených revízií',
'revdelete-log' => 'Dôvod:',
'preferences' => 'Nastavenia',
'mypreferences' => 'Nastavenia',
'prefs-edits' => 'Počet úprav:',
-'prefsnologin' => 'Nie ste prihlásený/á',
-'prefsnologintext' => 'Aby ste mohli zmeniť svoje nastavenia, musíte byť <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prihlásený]</span>.',
'changepassword' => 'Zmeniť heslo',
'prefs-skin' => 'Vzhľad',
'skin-preview' => 'Náhľad',
'prefs-rendering' => 'Vzhľad',
'saveprefs' => 'Uložiť nastavenia',
'resetprefs' => 'Obnoviť pôvodné nastavenia',
-'restoreprefs' => 'Obnoviť všetky nastavenia na štandardné hodnoty',
+'restoreprefs' => 'Obnoviť všetky predvolené nastavenia (vo všetkých sekciách)',
'prefs-editing' => 'Úpravy',
'rows' => 'Riadky:',
'columns' => 'Stĺpce:',
'recentchangesdays-max' => '(maximálne $1 {{PLURAL:$1|deň|dni|dní}})',
'recentchangescount' => 'Štandardne zobrazovaný počet úprav:',
'prefs-help-recentchangescount' => 'Toto sa týka posledných úprav, histórií stránok a záznamov.',
+'prefs-help-watchlist-token2' => 'Toto je tajný kľúč k webovému kanálu vášho zoznamu sledovaných stránok.
+každý, kto ho pozná si bude môcť prečítať váš zoznam sledovaných stránok, preto ho nezverejňujte.
+[[Special:ResetTokens|Kliknite sem, ak potrebujete vytvoriť nový]].',
'savedprefs' => 'Vaše nastavenia boli uložené.',
'timezonelegend' => 'Časové pásmo:',
'localtime' => 'Miestny čas:',
Túto operáciu nemožno vrátiť.',
'prefs-emailconfirm-label' => 'Potvrdenie emailu:',
'youremail' => 'Váš e-mail²',
-'username' => 'Používateľské meno:',
-'uid' => 'ID používateľa:',
+'username' => '{{GENDER:$1|Používateľské meno}}:',
+'uid' => 'ID {{GENDER:$1|používateľa}}:',
'prefs-memberingroups' => '{{GENDER:$2|Člen|Členovia}} {{PLURAL:$1|skupiny|skupín}}:',
'prefs-registration' => 'Čas registrácie:',
'yourrealname' => 'Skutočné meno *:',
'badsig' => 'Neplatný podpis v pôvodnom tvare; skontrolujte HTML značky.',
'badsiglength' => 'Váš podpis je príliš dlhý.
Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
-'yourgender' => 'Pohlavie:',
-'gender-unknown' => 'Neuvedené',
-'gender-male' => 'Muž',
-'gender-female' => 'Žena',
-'prefs-help-gender' => 'Nepovinné: používa softvér na správne oslovenie v závislosti od rodu. Táto informácia bude verejná.',
+'yourgender' => 'Ako si želáte byť označovaný?',
+'gender-unknown' => 'Radšej nechcem uviesť',
+'gender-male' => 'On upravuje wiki stránky',
+'gender-female' => 'Ona upravuje wiki stránky',
+'prefs-help-gender' => 'Nastavenie tejto voľby nie je povinné.
+Softvér používa toto nastavenie na správne oslovenie a označenie vás ostatným v závislosti od gramatického rodu. Táto informácia bude verejná.',
'email' => 'E-mail',
'prefs-help-realname' => '¹ Skutočné meno (nepovinné): ak sa rozhodnete ho poskytnúť, bude použité na označenie vašej práce.',
'prefs-help-email' => 'Emailová adresa je nepovinný údaj, ale je potrebná v prípade, že ak zabudnete heslo, môžete si na email vyžiadať nové.',
'prefs-signature' => 'Podpis',
'prefs-dateformat' => 'Formát dátumu',
'prefs-timeoffset' => 'Časový posun',
-'prefs-advancedediting' => 'Rozšírené možnosti',
+'prefs-advancedediting' => 'Všeobecné možnosti',
+'prefs-editor' => 'Redaktor',
'prefs-preview' => 'Náhľad',
'prefs-advancedrc' => 'Rozšírené možnosti',
'prefs-advancedrendering' => 'Rozšírené možnosti',
'prefs-displaysearchoptions' => 'Možnosti zobrazenia',
'prefs-displaywatchlist' => 'Možnosti zobrazenia',
'prefs-diffs' => 'Rozdiely',
+'prefs-help-prefershttps' => 'Táto voľba sa prejaví pri vašom ďalšom prihlásení.',
# User preference: email validation using jQuery
'email-address-validity-valid' => 'Formát e-mailovej adresa vyzerá byť správny',
'userrights-no-interwiki' => 'Nemáte oprávnenie upravovať práva používateľov na iných wiki.',
'userrights-nodatabase' => 'Databáza $1 neexistuje alebo nie je lokálna.',
'userrights-nologin' => 'Aby ste mohli prideľovať používateľom oprávnenia, musíte sa [[Special:UserLogin|prihlásiť]] s účtom správcu.',
-'userrights-notallowed' => 'Váš účet nemá oprávnenie prideľovať alebo odoberať používateľom oprávnenia.',
+'userrights-notallowed' => 'Nemáte oprávnenie prideľovať alebo odoberať používateľom oprávnenia.',
'userrights-changeable-col' => 'Skupiny, ktoré môžete zmeniť',
'userrights-unchangeable-col' => 'Skupiny, ktoré nemôžete zmeniť',
+'userrights-conflict' => 'Konflikt zmien práv používateľov! Prosím, skontrolujte ho a potvrďte svoje zmeny.',
+'userrights-removed-self' => 'Úspešne ste odstránili svoje vlastné práva. Z toho dôvodu už nebudete mať prístup k tejto stránke.',
# Groups
'group' => 'Skupina:',
'right-reupload-shared' => 'Nahrávať lokálne súbory, ktoré majú prednosť pred zdieľaným úložiskom',
'right-upload_by_url' => 'Nahrávať súbor z URL adresy',
'right-purge' => 'Čistiť vyrovnávaciu pamäť stránky bez potvrdzovacej stránky',
-'right-autoconfirmed' => 'Upravovať čiastočne zamknuté stránky',
+'right-autoconfirmed' => 'Neovplyvnený obmedzeniami na základe IP adresy',
'right-bot' => 'Byť považovaný za automatický proces',
'right-nominornewtalk' => 'Pri drobných úpravách diskusnej stránky nevypisovať hlásenie o nových správach',
'right-apihighlimits' => 'Používať vyššie limity v požiadavkách API',
'right-hideuser' => 'Zablokovať používateľské meno tak, že bude verejnosti skryté',
'right-ipblock-exempt' => 'Obchádzať blokovanie IP adries, rozsahov a automatické blokovanie',
'right-proxyunbannable' => 'Obchádzať automatické blokovanie proxy serverov',
-'right-unblockself' => 'Odblokovať samých seba',
-'right-protect' => 'Meniť úroveň zamknutia a upravovať zamknuté stránky',
-'right-editprotected' => 'Upravovať zamknuté schránky (bez kaskádovej ochrany)',
+'right-unblockself' => 'Odblokovať seba samého',
+'right-protect' => 'Meniť úroveň zamknutia a upravovať kaskádovito zamknuté stránky',
+'right-editprotected' => 'Upravovať stránky zamknuté ako „{{int:protect-level-sysop}}“',
+'right-editsemiprotected' => 'Upravovať stránky zamknuté ako „{{int:protect-level-autoconfirmed}}“',
'right-editinterface' => 'Upravovať správy používateľského rozhrania',
'right-editusercssjs' => 'Upravovať CSS a JS súbory ostatných používateľov',
'right-editusercss' => 'Upravovať CSS súbory ostatných používateľov',
'right-edituserjs' => 'Upravovať JS súbory ostatných používateľov',
+'right-editmyusercss' => 'Upraviť svoje vlastné používateľské súbory CSS',
+'right-editmyuserjs' => 'Upraviť svoje vlastné používateľské súbory JavaScript',
+'right-viewmywatchlist' => 'Zobraziť vlastný zoznam sledovaných stránok',
+'right-editmywatchlist' => 'Upraviť vlastný zoznam sledovaných stránok. Všimnite si, že niektoré operácie budú môcť pridať stránky aj bez tohto oprávnenia.',
+'right-viewmyprivateinfo' => 'Zobraziť vlastné súkromné údaje (napríklad e-mailovú adresu, skutočné meno)',
+'right-editmyprivateinfo' => 'Upraviť vlastné súkromné údaje (napríklad e-mailovú adresu, skutočné meno)',
'right-editmyoptions' => 'Upraviť vlastné nastavenia',
'right-rollback' => 'Rýchlo vrátiť úpravy posledného používateľa, ktorý upravoval danú stránku',
'right-markbotedits' => 'Označiť vrátené úpravy ako úpravy robota',
'action-block' => 'zablokovať úpravy tohto používateľa',
'action-protect' => 'zmeniť úrovne ochrany tejto stránky',
'action-rollback' => 'rýchlo vrátiť úpravy posledného používateľa, ktorý upravoval danú stránku',
-'action-import' => 'importovať túto stránku z inej wiki',
-'action-importupload' => 'importovať túto stránku z nahraného súboru',
+'action-import' => 'importovať stránky z inej wiki',
+'action-importupload' => 'importovať stránky z nahraného súboru',
'action-patrol' => 'označiť úpravy iných ako strážené',
'action-autopatrol' => 'označiť vlastné úpravy ako strážené',
'action-unwatchedpages' => 'zobraziť zoznam nesledovaných stránok',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|zmena|zmeny|zmien}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|od poslednej návštevy}}',
'enhancedrc-history' => 'história',
'recentchanges' => 'Posledné úpravy',
'recentchanges-legend' => 'Možnosti posledných zmien',
'recentchanges-label-minor' => 'Toto je drobná úprava',
'recentchanges-label-bot' => 'Túto úpravy vykonal robot',
'recentchanges-label-unpatrolled' => 'Táto úprava zatiaľ nebola strážená',
+'recentchanges-legend-newpage' => '$1 - nová stránka',
'rcnote' => "Tu {{PLURAL:$1|je posledná úprava|sú posledné '''$1''' úpravy|je posledných '''$1''' úprav}} počas {{PLURAL:$2|posledného dňa|posledných '''$2''' dní}} z $4, $5.",
'rcnotefrom' => "Nižšie sú zobrazené úpravy od '''$2''' (do '''$1''').",
'rclistfrom' => 'Zobraziť nové úpravy počnúc od $1',
'rclinks' => 'Zobraziť posledných $1 úprav v posledných $2 dňoch<br />$3',
'diff' => 'rozdiel',
'hist' => 'história',
-'hide' => 'skryť',
+'hide' => 'Skryť',
'show' => 'zobraziť',
'minoreditletter' => 'd',
'newpageletter' => 'N',
'pageswithprop-text' => 'Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.',
'pageswithprop-prop' => 'Názov vlastnosti:',
'pageswithprop-submit' => 'Vykonať',
+'pageswithprop-prophidden-long' => 'dlhá hodnota textovej vlastnosti bola skrytá ($1)',
+'pageswithprop-prophidden-binary' => 'hodnota binárnej vlastnosti bola skrytá ($1)',
'doubleredirects' => 'Dvojité presmerovania',
'doubleredirectstext' => 'Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky.
'listusers' => 'Zoznam používateľov',
'listusers-editsonly' => 'Vynechať používateľov bez úprav',
'listusers-creationsort' => 'Zoradiť podľa dátumu vytvorenia',
+'listusers-desc' => 'Zoradiť zostupne',
'usereditcount' => '$1 {{PLURAL:$1|úprava|úpravy|úprav}}',
'usercreated' => '{{GENDER:$3|Registrovaný|Registrovaná|Registrovaný(á)}} $1 $2',
'newpages' => 'Nové stránky',
# Special:ActiveUsers
'activeusers' => 'Zoznam aktívnych používateľov',
'activeusers-intro' => 'Toto je zoznam používateľov, ktorí $1 {{PLURAL:$1|za posledný 1 deň|za posledné $1 dni|za posledných $1 dní}} vykonali nejakú aktivitu.',
-'activeusers-count' => '$1 {{PLURAL:$1|úprava|úpravy|úprav}} za {{PLURAL:$3|posledný deň|posledné $3 dni|posledných $3 dní}}',
+'activeusers-count' => '$1 {{PLURAL:$1|operácia|operácie|operácií}} za {{PLURAL:$3|posledný deň|posledné $3 dni|posledných $3 dní}}',
'activeusers-from' => 'Zobraziť používateľov počínajúc:',
'activeusers-hidebots' => 'Skryť robotov',
'activeusers-hidesysops' => 'Skryť správcov',
'deletecomment' => 'Dôvod:',
'deleteotherreason' => 'Iný/ďalší dôvod:',
'deletereasonotherlist' => 'Iný dôvod',
-'deletereason-dropdown' => '*Bežné dôvody zmazania
-** Na žiadosť autora
+'deletereason-dropdown' => '* Bežné dôvody zmazania
+** Spam
+** Vandalizmus
** Porušenie autorských práv
-** Vandalizmus',
+** Na žiadosť autora
+** Chybné presmerovanie',
'delete-edit-reasonlist' => 'Upraviť dôvody zmazania',
'delete-toobig' => 'Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Mazanie takýchto stránok bolo obmedzené, aby sa zabránilo náhodnému poškodeniu {{GRAMMAR:genitív|{{SITENAME}}}}.',
'delete-warning-toobig' => 'Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Jej zmazanie by mohlo narušiť databázové operácie {{GRAMMAR:genitív|{{SITENAME}}}}; postupujte opatrne.',
# Rollback
'rollback' => 'Vrátiť späť úpravy',
'rollback_short' => 'Vrátiť',
-'rollbacklink' => 'rollback',
+'rollbacklink' => 'vrátiť',
'rollbacklinkcount' => 'vrátenie $1 {{PLURAL:$1|úpravy|úprav}}',
'rollbacklinkcount-morethan' => 'vrátiť viac ako $1 {{PLURAL:$1|úpravu|úprav}}',
'rollbackfailed' => 'Rollback neúspešný',
Autorom poslednej úpravy je [[User:$3|$3]] ([[User talk:$3|Diskusia]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Zhrnutie úpravy bolo: „''$1''“.",
'revertpage' => 'Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1',
-'revertpage-nouser' => 'Vrátené úpravy (meno používateľa odstránené) na poslednú revíziu od [[User:$1|$1]]',
+'revertpage-nouser' => 'Vrátené úpravy od skrytého používateľa na poslednú revíziu od {{GENDER:$1|[[User:$1|$1]]}}',
'rollback-success' => 'Úpravy $1 vrátené; obnovená posledná verzia od $2.',
# Edit tokens
'contributions' => 'Príspevky {{GENDER:$1|používateľa|používateľky}}',
'contributions-title' => 'Príspevky používateľa pre $1',
'mycontris' => 'Príspevky',
-'contribsub2' => 'Príspevky $1 ($2)',
+'contribsub2' => 'Príspevky {{GENDER:$3|$1}} ($2)',
'nocontribs' => 'Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.',
'uctop' => '(aktuálne)',
'month' => 'Mesiac:',
'ipblocklist-empty' => 'Zoznam blokovaní je prázdny.',
'ipblocklist-no-results' => 'Požadovaná IP adresa alebo používateľské meno nie je blokovaná.',
'blocklink' => 'zablokovať',
-'unblocklink' => 'odblokuj',
+'unblocklink' => 'odblokovať',
'change-blocklink' => 'zmeniť blokovanie',
'contribslink' => 'príspevky',
'emaillink' => 'poslať email',
'proxyblockreason' => 'Vaša IP adresa bola zablokovaná, pretože je otvorená proxy. Prosím kontaktujte vášho internetového poskytovateľa alebo technickú podporu a informujte ich o tomto vážnom bezpečnostnom probléme.',
'sorbsreason' => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v DNSBL.',
'sorbs_create_account_reason' => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v databáze DNSBL, ktorú používa {{SITENAME}}. Nemôžete si vytvoriť účet.',
+'xffblockreason' => 'IP adresa prítomná v hlavičke X-Forwarded-For patriaca buď vám alebo proxy serveru, ktorý používate, je zablokovaná. Pôvodný dôvod zablokovania bol: $1',
'cant-block-while-blocked' => 'Nemôžete blokovať iných používateľov, kým ste zablokovaný.',
'cant-see-hidden-user' => 'Používateľ, ktorého sa pokúšate zablokovať už bol zablokovaný a skrytý. Pretože nemáte právo hideuser, nemôžete vidieť ani upravovať blokovanie používateľa.',
'ipbblocked' => 'Nemôžete zablokovať ani odblokovať iných používateľov, pretože ste sami zablokovaní',
'movesubpagetext' => 'Táto stránka má $1 {{PLURAL:$1|podstránku, ktorá je zobrazená nižšie|podstránky, ktoré sú zobrazené nižšie|podstránok, ktoré sú zobrazené nižšie}}.',
'movenosubpage' => 'Táto stránka nemá podstránky.',
'movereason' => 'Dôvod:',
-'revertmove' => 'obnova',
+'revertmove' => 'obnoviť',
'delete_and_move' => 'Vymazať a presunúť',
'delete_and_move_text' => '==Je potrebné zmazať stránku==
Prosím, zvoľte iný názov.',
# Export
-'export' => 'Export stránok',
+'export' => 'Exportovať stránky',
'exporttext' => 'Môžete exportovať text a históriu úprav konkrétnej
stránky alebo množiny stránok do XML; tieto môžu byť potom importované do inej
wiki používajúceho MediaWiki softvér pomocou stránky Special:Import.
'allmessagesdefault' => 'štandardný text',
'allmessagescurrent' => 'aktuálny text',
'allmessagestext' => 'Toto je zoznam všetkých správ dostupných v mennom priestore MediaWiki.
-Prosím, navštívte [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net] ak chcete prispieť k všeobecnej lokalizácii MediaWiki.',
+Prosím, navštívte [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] a [//translatewiki.net translatewiki.net] ak chcete prispieť k všeobecnej lokalizácii MediaWiki.',
'allmessagesnotsupportedDB' => "Túto stránku nemožno použiť, pretože '''\$wgUseDatabaseMessages''' je vypnuté.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filter podľa stavu prispôsobenia:',
'tooltip-pt-anonuserpage' => 'Používateľská stránka pre ip adresu, ktorú upravujete ako',
'tooltip-pt-mytalk' => 'Vaša diskusná stránka',
'tooltip-pt-anontalk' => 'Diskusia o úpravách z tejto ip adresy',
-'tooltip-pt-preferences' => 'Moje nastavenia',
+'tooltip-pt-preferences' => 'Vaše nastavenia',
'tooltip-pt-watchlist' => 'Zoznam stránok, na ktorých sledujete zmeny.',
'tooltip-pt-mycontris' => 'Zoznam vašich príspevkov',
'tooltip-pt-login' => 'Odporúčame vám prihlásiť sa, nie je to však povinné.',
'tooltip-pt-anonlogin' => 'Odporúčame vám prihlásiť sa, nie je to však povinné.',
'tooltip-pt-logout' => 'Odhlásiť',
'tooltip-ca-talk' => 'Diskusia o obsahu stránky',
-'tooltip-ca-edit' => 'Môžete upravovať túto stránku. Prosíme, pred uložením použite tlačidlo Zobraziť náhľad.',
+'tooltip-ca-edit' => 'Môžete upravovať túto stránku. Prosím, pred uložením použite tlačidlo Zobraziť náhľad.',
'tooltip-ca-addsection' => 'Začať novú sekciu',
-'tooltip-ca-viewsource' => 'Táto stránka je zamknutá. Môžete však vidieť jej zdrojový text.',
+'tooltip-ca-viewsource' => 'Táto stránka je zamknutá. Môžete však zobraziť jej zdrojový text.',
'tooltip-ca-history' => 'Minulé verzie tejto stránky.',
'tooltip-ca-protect' => 'Zamknúť túto stránku',
'tooltip-ca-unprotect' => 'Zmeniť stav ochrany tejto stránky',
'tooltip-search' => 'Vyhľadávanie na {{GRAMMAR:datív|{{SITENAME}}}}',
'tooltip-search-go' => 'Prejsť na stránku s presne takýmto názvom, ak existuje',
'tooltip-search-fulltext' => 'Hľadať tento text na stránkach',
-'tooltip-p-logo' => 'Hlavná stránka',
+'tooltip-p-logo' => 'Navštívte Hlavnú stránku',
'tooltip-n-mainpage' => 'Navštíviť Hlavnú stránku',
'tooltip-n-mainpage-description' => 'Navštíviť hlavnú stránku',
'tooltip-n-portal' => 'O projekte, ako môžete prispieť, kde čo nájsť',
'tooltip-n-currentevents' => 'Aktuálne udalosti a ich pozadie',
-'tooltip-n-recentchanges' => 'Zoznam posledných úprav vo wiki.',
-'tooltip-n-randompage' => 'Zobrazenie náhodnej stránky',
-'tooltip-n-help' => 'Pozrieť si pomoc.',
+'tooltip-n-recentchanges' => 'Zoznam posledných úprav na wiki.',
+'tooltip-n-randompage' => 'Zobraziť náhodnú stránku',
+'tooltip-n-help' => 'Miesto, kde sa môžete dozvedieť',
'tooltip-t-whatlinkshere' => 'Zoznam všetkých wiki stránok, ktoré sem odkazujú',
-'tooltip-t-recentchangeslinked' => 'Posledné úpravy v stránkach, ktoré odkazujú na túto stránku',
+'tooltip-t-recentchangeslinked' => 'Posledné úpravy v stránkach, na ktoré odkazuje táto stránka',
'tooltip-feed-rss' => 'RSS feed pre túto stránku',
-'tooltip-feed-atom' => 'Atom feed pre túto stránku',
+'tooltip-feed-atom' => 'Kanál Atom pre túto stránku',
'tooltip-t-contributions' => 'Pozrieť si zoznam príspevkov od tohto používateľa',
'tooltip-t-emailuser' => 'Poslať e-mail tomuto používateľovi',
-'tooltip-t-upload' => 'Nahranie obrázkových alebo multimediálnych súborov',
+'tooltip-t-upload' => 'Nahranie súborov',
'tooltip-t-specialpages' => 'Zoznam všetkých špeciálnych stránok',
'tooltip-t-print' => 'Verzia tejto stránky pre tlač',
'tooltip-t-permalink' => 'Trvalý odkaz na túto verziu stránky',
-'tooltip-ca-nstab-main' => 'Pozrieť si obsah stránky',
+'tooltip-ca-nstab-main' => 'Zobraziť obsah stránky',
'tooltip-ca-nstab-user' => 'Pozrieť si stránku používateľa',
'tooltip-ca-nstab-media' => 'Pozrieť si stránku médií',
'tooltip-ca-nstab-special' => 'Toto je špeciálna stránka, nemôžete ju upravovať.',
'tooltip-ca-nstab-project' => 'Pozrieť si stránku projektu',
'tooltip-ca-nstab-image' => 'Zobraziť popisnú stránku súboru',
'tooltip-ca-nstab-mediawiki' => 'Pozrieť si systémovú stránku',
-'tooltip-ca-nstab-template' => 'Pozrieť si šablónu',
+'tooltip-ca-nstab-template' => 'Zobraziť šablónu',
'tooltip-ca-nstab-help' => 'Pozrieť si stránku Pomocníka',
-'tooltip-ca-nstab-category' => 'Pozrieť si stránku s kategóriami',
+'tooltip-ca-nstab-category' => 'Zobraziť stránku s kategóriami',
'tooltip-minoredit' => 'Označiť túto úpravu ako drobnú',
'tooltip-save' => 'Uložiť vaše úpravy',
'tooltip-preview' => 'Náhľad úprav, prosím použite pred uložením!',
'pageinfo-length' => 'Dĺžka stránky (v bajtoch)',
'pageinfo-article-id' => 'ID stránky',
'pageinfo-language' => 'Jazyk obsahu stránok',
-'pageinfo-robot-policy' => 'Stav vyhľadávača',
-'pageinfo-robot-index' => 'Indexovať stránku',
-'pageinfo-robot-noindex' => 'Neindexovať stránku',
+'pageinfo-content-model' => 'Model obsahu stránky',
+'pageinfo-robot-policy' => 'Indexovanie pomocou robotov',
+'pageinfo-robot-index' => 'Povolené',
+'pageinfo-robot-noindex' => 'Nepovolené',
'pageinfo-views' => 'Počet zobrazení',
'pageinfo-watchers' => 'Počet používateľov sledujúcich stránku',
'pageinfo-few-watchers' => 'Menej ako $1 {{PLURAL:$1|sledujúci|sledujúci|sledujúcich}}',
-'pageinfo-redirects-name' => 'Presmerovania na túto stránku',
+'pageinfo-redirects-name' => 'Počet presmerovaní na túto stránku',
'pageinfo-subpages-name' => 'Podstránky tejto stránky',
'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|presmerovanie|presmerovania|presmerovaní}}; $3 {{PLURAL:$3|nie je presmerovanie|nie sú presmerovania}})',
'pageinfo-firstuser' => 'Tvorca stránky',
# External editor support
'edit-externally' => 'Upraviť tento súbor pomocou externého programu',
-'edit-externally-help' => '(Viac informácií poskytnú inštrukcie pre nastavenie [//www.mediawiki.org/wiki/Manual:External_editors externého editora])',
+'edit-externally-help' => '(Viac informácií poskytnú inštrukcie pre nastavenie [https://www.mediawiki.org/wiki/Manual:External_editors externého editora])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'všetky',
$5
Platnosť tohto potvrdzovacieho kódu vyprší $4.',
-'confirmemail_body_set' => 'Niekto, pravdepodobne vy, z IP adresy $1,
+'confirmemail_body_set' => 'Niekto, pravdepodobne vy, z IP adresy $1
nastavil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:genitív|{{SITENAME}}}}.
Ak chcete potvrdiť, že tento účet skutočne patrí vám a aktivovať
$3
Ak účet nie je *nepatrí* patrí k vám, nasledujte tento odkaz,
-ktorú zruší potvrdenie e-mailovej adresy:
+ktorý zruší potvrdenie e-mailovej adresy:
$5
'confirm-unwatch-button' => 'OK',
'confirm-unwatch-top' => 'Odstrániť túto stránku z vášho zoznamu sledovaných?',
+# Separators for various lists, etc.
+'quotation-marks' => '„$1“',
+
# Multipage image navigation
'imgmultipageprev' => '← predošlá stránka',
'imgmultipagenext' => 'ďalšia stránka →',
'version-hook-subscribedby' => 'Pripojené',
'version-version' => '(Verzia $1)',
'version-license' => 'Licencia',
-'version-poweredby-credits' => "Táto wiki beží na '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Táto wiki beží na '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'ďalší',
'version-poweredby-translators' => 'prekladatelia na translatewiki.net',
'version-credits-summary' => 'Nasledujúcim osobám by sme radi poďakovali za ich príspevky k vývoju [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Presmerovanie podľa súboru, používateľa alebo ID revízie',
'redirect-legend' => 'Presmerovanie na súbor alebo stránku',
-'redirect-summary' => 'Táto špeciálna stránka presmerováva na súbor (podľa názvu), stránku (podľa identifikátora revízie) alebo používateľa (podľa číselného identifikátora používateľa).',
+'redirect-summary' => 'Táto špeciálna stránka presmerováva na súbor (podľa názvu súboru), stránku (podľa identifikátora revízie) alebo používateľa (podľa číselného identifikátora používateľa). Použitie: [[{{#Special:Redirect}}/file/Príklad.jpg]], [[{{#Special:Redirect}}/revision/328429]], resp. [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Ísť',
'redirect-lookup' => 'Vyhľadať:',
'redirect-value' => 'Hodnota:',
# Special:SpecialPages
'specialpages' => 'Špeciálne stránky',
-'specialpages-note' => '----
-* Bežné špeciálne stránky.
+'specialpages-note' => '* Bežné špeciálne stránky.
* <strong class="mw-specialpagerestricted">Špeciálne stránky s obmedzeným prístupom.</strong>
* <span class="mw-specialpagecached">Špeciálne stránky vo vyrovnávacej pamäti (môže byť neaktuálne).</span>',
'specialpages-group-maintenance' => 'Údržbové správy',
'tags-tag' => 'Názov značky',
'tags-display-header' => 'Vzhľad v zoznamoch úprav',
'tags-description-header' => 'Úplný popis významu',
+'tags-active-header' => 'Aktívny?',
'tags-hitcount-header' => 'Označené úpravy',
'tags-active-yes' => 'Áno',
'tags-active-no' => 'Nie',
'rotate-comment' => 'Obrázok otočený o $1 {{PLURAL:$1|stupeň|stupne|stupňov}} v smere hodinových ručičiek',
# Limit report
+'limitreport-title' => 'Profilovacie údaje analyzátora:',
+'limitreport-cputime' => 'Čas využitia procesora',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}',
+'limitreport-walltime' => 'Reálny čas využitia',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}',
+'limitreport-ppvisitednodes' => 'Počet uzlov, ktoré preprocesor navštívil',
+'limitreport-ppgeneratednodes' => 'Počet uzlov, ktoré preprocesor vytvoril',
+'limitreport-postexpandincludesize' => 'Veľkosť vloženého objektu po rozbalení',
'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtov}}',
'limitreport-templateargumentsize' => 'Veľkosť argumentov šablón',
'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtov}}',
'limitreport-expansiondepth' => 'Najväčšia hĺbka expanzie',
'limitreport-expensivefunctioncount' => 'Počet náročných funkcií parseru',
+# Special:ExpandTemplates
+'expandtemplates' => 'Substituovať šablóny',
+'expand_templates_intro' => 'Táto špeciálna stránka prijme na
+vstup text a rekurzívne substituuje všetky šablóny,
+ktoré sú v ňom použité. Tiež expanduje funkcie
+syntaktického analyzátora ako <nowiki>{{</nowiki>#language:...}}
+a premenné ako <nowiki>{{</nowiki>CURRENTDAY}}—v podstate
+takmer všetko v zložených zátvorkách. Robí to pomocou
+volania relevantnej fázy syntaktického analyzátora
+samotného MediaWiki.',
+'expand_templates_title' => 'Názov kontextu pre {{FULLPAGENAME}} atď.:',
+'expand_templates_input' => 'Vstupný text:',
+'expand_templates_output' => 'Výsledok',
+'expand_templates_xml_output' => 'XML výstup',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Odstrániť komentáre',
+'expand_templates_remove_nowiki' => 'Potlačiť značky <nowiki> vo výsledku',
+'expand_templates_generate_xml' => 'Zobraziť strom XML',
+'expand_templates_preview' => 'Náhľad',
+
);
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Vzpostavljeno iz »$1«',
'youhavenewmessages' => 'Imate $1 ($2)',
-'newmessageslink' => 'nova sporočila',
-'newmessagesdifflink' => 'zadnja sprememba',
'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugega uporabnika|$3 uporabnikov}} ($2).',
'youhavenewmessagesmanyusers' => 'Imate $1 od veliko uporabnikov ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|novo sporočilo|nova sporočila}}',
Če urejate prek AOL ali iz Bližnjega vzhoda, Afrike, Avstralije, Nove Zelandije ali iz šole, knjižnice ali podjetja, si IP-naslov morda delite z drugimi uporabniki. Če je tako, ste to sporočilo morda prejeli, čeprav niste ustvarili še nobenega računa. Znova se lahko poskusite registrirati po nekaj urah.',
'emailauthenticated' => 'Vaš e-poštni naslov je bil potrjen dne $2 ob $3.',
-'emailnotauthenticated' => 'Vaš e-poštni naslov še ni potrjen. Za navedene
-možnosti se e-pošte ne bo pošiljalo.',
+'emailnotauthenticated' => 'Vaš e-poštni naslov še ni potrjen.
+Za navedene možnosti e-pošte ne bomo pošiljali.',
'noemailprefs' => 'E-poštnega naslova niste vnesli, zato naslednje možnosti ne bodo delovale.',
'emailconfirmlink' => 'Potrdite svoj e-poštni naslov',
'invalidemailaddress' => 'E-poštni naslov zaradi neveljavne oblike ni sprejemljiv.
Do skrite vsebine bodo še vedno lahko dostopali drugi administratorji {{GRAMMAR:rodilnik|{{SITENAME}}}} in jo z uporabo istega vmesnika tudi obnovili, razen kjer bodo uveljavljene dodatne omejitve.",
'revdelete-confirm' => 'Prosim potrdite da nameravate to storiti, da se zavedate posledic in da to počnete v skladu s [[{{MediaWiki:Policy-url}}|politiko]].',
'revdelete-suppress-text' => "Zadrževanje naj bi bilo uporabljeno '''le''' v sledečih primerih:
-* Potencialni klevetniški podatki
+* Morebitni klevetniški podatki
* Neprimerni osebni podatki
-*: ''domači naslovi in telefonske številke, številke socialnega zavarovanja, etc.''",
+*: ''domači naslovi in telefonske številke, narodne številke istovetnosti itn.''",
'revdelete-legend' => 'Nastavi omejitve vidnosti',
-'revdelete-hide-text' => 'Skrij besedilo redakcije',
+'revdelete-hide-text' => 'Besedilo redakcije',
'revdelete-hide-image' => 'Skrij vsebino datoteke.',
'revdelete-hide-name' => 'Skrij dejanje in cilj',
-'revdelete-hide-comment' => 'Skrij povzetek urejanja',
-'revdelete-hide-user' => 'Skrij uporabniško ime/IP-naslov urejevalca',
+'revdelete-hide-comment' => 'Povzetek urejanja',
+'revdelete-hide-user' => 'Uporabniško ime/IP-naslov urejevalca',
'revdelete-hide-restricted' => 'Zadrži podatke od administratorjev kakor tudi od ostalih',
'revdelete-radio-same' => '(ne spremeni)',
-'revdelete-radio-set' => 'Da',
-'revdelete-radio-unset' => 'Ne',
+'revdelete-radio-set' => 'Skrito',
+'revdelete-radio-unset' => 'Vidno',
'revdelete-suppress' => 'Zadrži podatke od administratorjev kakor tudi od ostalih',
'revdelete-unsuppress' => 'Odpraviti omejitve na obnovljenih redakcijah.',
'revdelete-log' => 'Razlog:',
'preferences' => 'Nastavitve',
'mypreferences' => 'Nastavitve',
'prefs-edits' => 'Število urejanj:',
-'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Za spreminjanje uporabniških nastavitev morate biti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prijavljeni]</span>.',
'changepassword' => 'Zamenjava gesla',
'prefs-skin' => 'Koža',
'skin-preview' => 'Predogled',
'recentchanges-label-minor' => 'Manjše urejanje',
'recentchanges-label-bot' => 'To urejanje je bilo izvedeno z botom',
'recentchanges-label-unpatrolled' => 'Urejanje še ni bilo pregledano',
+'recentchanges-legend-newpage' => '$1 - nova stran',
'rcnote' => "Prikazujem {{PLURAL:$1|zadnjo spremembo|zadnji '''$1''' spremembi|zadnje '''$1''' spremembe|zadnjih '''$1''' sprememb|zadnjih '''$1''' sprememb}} v {{PLURAL:$2|zadnjem|zadnjih|zadnjih|zadnjih|zadnjih}} '''$2''' {{PLURAL:$2|dnevu|dneh|dneh|dneh|dneh}}, od $5, $4.",
'rcnotefrom' => "Navedene so spremembe od '''$2''' dalje (prikazujem jih do '''$1''').",
'rclistfrom' => 'Prikaži spremembe od $1 naprej',
'allmessagesdefault' => 'Prednastavljeno besedilo',
'allmessagescurrent' => 'Trenutno besedilo',
'allmessagestext' => 'Navedena so v imenskem prostoru MediaWiki dostopna sistemska sporočila.
-Za lokalizacijo in prevajanje obiščite [//www.mediawiki.org/wiki/Localisation MediaWiki] in [//translatewiki.net translatewiki.net] ter tako prispevajte k splošnemu prevodu programja.',
+Za lokalizacijo in prevajanje obiščite [https://www.mediawiki.org/wiki/Localisation MediaWiki] in [//translatewiki.net translatewiki.net] ter tako prispevajte k splošnemu prevodu programja.',
'allmessagesnotsupportedDB' => "Te strani ni mogoče uporabljati, ker je bilo '''\$wgUseDatabaseMessages''' izključeno.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filtriraj po prilagoditvenem stanju:',
Omogoča vnos pojasnila v povzetku urejanja.',
'tooltip-preferences-save' => 'Shrani nastavitve',
'tooltip-summary' => 'Vnesite kratek povzetek',
+'interlanguage-link-title' => '$1 – $2',
# Metadata
'notacceptable' => 'V obliki, ki jo lahko bere vaš odjemalec, wikistrežnik podatkov ne more ponuditi.',
'pageinfo-length' => 'Dolžina strani (v bajtih)',
'pageinfo-article-id' => 'ID strani',
'pageinfo-language' => 'Jezik vsebine strani',
+'pageinfo-content-model' => 'Model vsebine strani',
'pageinfo-robot-policy' => 'Robotsko indeksiranje',
'pageinfo-robot-index' => 'Dovoljeno',
'pageinfo-robot-noindex' => 'Nedovoljeno',
'svg-long-desc' => 'datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
'svg-long-desc-animated' => 'animirana datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
'svg-long-error' => 'Neveljavna datoteka SVG: $1',
-'show-big-image' => 'Slika v višji ločljivosti',
+'show-big-image' => 'Izvirna datoteka',
'show-big-image-preview' => 'Velikost predogleda: $1.',
'show-big-image-other' => '{{PLURAL:$2|Druga ločljivost|Drugi ločljivosti|Druge ločljivosti}}: $1.',
'show-big-image-size' => '$1 × $2 točk',
# External editor support
'edit-externally' => 'Uredite datoteko z uporabo zunanjega orodja',
-'edit-externally-help' => '(Za več informacij glejte [//www.mediawiki.org/wiki/Manual:External_editors navodila za namestitev])',
+'edit-externally-help' => '(Za več informacij glejte [https://www.mediawiki.org/wiki/Manual:External_editors navodila za namestitev])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'vse',
# Separators for various lists, etc.
'percent' => '$1 %',
+'quotation-marks' => '»$1«',
# Multipage image navigation
'imgmultipageprev' => '← prejšnja stran',
'version-hook-subscribedby' => 'Naročen s strani',
'version-version' => '(Različica $1)',
'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ta wiki poganja '''[//www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.",
+'version-poweredby-credits' => "Ta wiki poganja '''[https://www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.",
'version-poweredby-others' => 'drugi',
'version-poweredby-translators' => 'Prevajalci translatewiki.net',
'version-credits-summary' => 'Radi bi priznali prispevek naslednjih oseb k [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Preusmeri po datoteki, uporabniku ali ID-ju redakcije',
'redirect-legend' => 'Preusmeritev na datoteko ali stran',
-'redirect-summary' => 'Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije) ali uporabniško stran (če podatek številski ID uporabnika).',
+'redirect-summary' => 'Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije) ali uporabniško stran (če podate številski ID uporabnika). Primer: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] ali [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Pojdi',
'redirect-lookup' => 'Iskanje:',
'redirect-value' => 'Vrednost:',
# Special:SpecialPages
'specialpages' => 'Posebne strani',
-'specialpages-note' => '----
-* Navadne posebne strani.
-* <span class="mw-specialpagerestricted">Omejene posebne strani.</span>
-* <span class="mw-specialpagecached">Predpomnjene posebne strani (morda so zastarele).</span>',
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Navadne posebne strani.
+* <span class="mw-specialpagerestricted">Omejene posebne strani.</span>',
'specialpages-group-maintenance' => 'Vzdrževalna poročila',
'specialpages-group-other' => 'Ostale posebne strani',
'specialpages-group-login' => 'Prijavite se / ustvarite račun',
'limitreport-expansiondepth' => 'Največja globina razširitve',
'limitreport-expensivefunctioncount' => 'Število dragih funkcij razčlenjevalnika',
+# Special:ExpandTemplates
+'expandtemplates' => 'Razširi predloge',
+'expand_templates_intro' => 'Ta posebna stran nekaj vnesenega besedila predela tako, da klice predlog v njem zamenja z njihovo vsebino.
+Prav tako razreši izraze kot
+<code><nowiki>{{</nowiki>#language:…}}</code> in spremenljivke kot
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Pravzaprav razširi skoraj vse v dvojnih zavitih oklepajih.',
+'expand_templates_title' => 'Naslov sobesedila, za {{FULLPAGENAME}} ipd.:',
+'expand_templates_input' => 'Vhodno besedilo:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'Izhod XML',
+'expand_templates_ok' => 'V redu',
+'expand_templates_remove_comments' => 'Odstrani komentarje',
+'expand_templates_remove_nowiki' => 'V rezultatu odstrani oznake <nowiki>',
+'expand_templates_generate_xml' => 'Pokaži razčlenitveno drevo XML',
+'expand_templates_preview' => 'Predogled',
+
);
'retrievedfrom' => 'voo "$1"',
'youhavenewmessages' => 'Du hust $1 ($2).',
-'newmessageslink' => 'Neue Noachrichta',
-'newmessagesdifflink' => 'neue Noachrichta',
'youhavenewmessagesmulti' => 'Du hast neue Nachrichta: $1',
'editsection' => 'Bearbta',
'editold' => 'Bearbta',
'preferences' => 'Eenstellunga',
'mypreferences' => 'Meene Eistellunga',
'prefs-edits' => 'Oazoahl dar Beoarbeetunga:',
-'prefsnologin' => 'Ne oagemeldet',
-'prefsnologintext' => 'Du mußt <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} oagemeldet]</span> sei, im denne Einstellunga ändern zu kinna.',
'changepassword' => 'Poaßwurt ändern',
'prefs-personal' => 'Nutzerdaten',
'prefs-rc' => 'Letzte Änderunga',
'recentchanges-label-minor' => 'Klenne Änderung',
'recentchanges-label-bot' => "Änderung durch an'n Bot",
'recentchanges-label-unpatrolled' => 'Nicht-kontrollierte Änderung',
+'recentchanges-legend-newpage' => '$1 - neue Seite',
'rcnote' => "Oagezeegt {{PLURAL:$1|wird '''1''' Ännerong|waan de letzta '''$1''' Änneronga}} {{PLURAL:$2|des letzta Taages|dar letzta '''$2''' Taage}}. Stand: $4, $5. (<b><tt>N</tt></b> – neuer Eentrag; <b><tt>K</tt></b> – kleene Ännerong; <b><tt>B</tt></b> – Ännerong dorch eena Bot; ''(± Zoahl)'' – Greeßaännerong ei Byte)",
'rcnotefrom' => "Oagezeigt waan de Änderunga seit '''$2''' (max. '''$1''' Einträge).",
'rclistfrom' => 'Oack Änneronga seit $1 zeiga.',
'allmessagesname' => 'Noame',
'allmessagesdefault' => 'Standardtext',
'allmessagestext' => 'Dies ies anne Liste dar MediaWiki-Systemtexte.
-Besiche de Seyta [//www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], wenn du diech oa dar Lokalisierung vu MediaWiki beteiliga mechtest.',
+Besiche de Seyta [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], wenn du diech oa dar Lokalisierung vu MediaWiki beteiliga mechtest.',
'allmessagesnotsupportedDB' => 'Diese Spezialseyte stieht ne zur Verfigung, do se ieber dann Parameter <tt>$wgUseDatabaseMessages</tt> deaktiviert wurde.',
'allmessages-filter-all' => 'Olle',
'allmessages-language' => 'Sproache:',
# External editor support
'edit-externally' => 'Diese Datei mit annem externen Programm bearbta',
-'edit-externally-help' => '(Siehe de [//www.mediawiki.org/wiki/Manual:External_editors Installationsoaweisunga] fier weitere Informationen)',
+'edit-externally-help' => '(Siehe de [https://www.mediawiki.org/wiki/Manual:External_editors Installationsoaweisunga] fier weitere Informationen)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'olle',
# Special:SpecialPages
'specialpages' => 'Spezialseyta',
-'specialpages-note' => '----
-* Spezialseyta fier Jedermoan
+'specialpages-note' => '* Spezialseyta fier Jedermoan
* <strong class="mw-specialpagerestricted">Spezialseyta fier Nutzer miet erweiterta Rechta</strong>',
'specialpages-group-other' => 'Andere Spezialseyta',
'specialpages-group-login' => 'Oamelda',
'ok' => 'waayahay',
'retrievedfrom' => 'Waxaa laga keenay "$1"',
'youhavenewmessages' => 'Waxaa heysataa $1 ($2).',
-'newmessageslink' => 'Fariimaha cusub',
-'newmessagesdifflink' => 'bedelkii ugu dambeeyay',
'youhavenewmessagesfromusers' => 'Waxay $1 kaaga timid {{PLURAL:$3|adeegsade kale|$3 adeegsade}} ($2).',
'youhavenewmessagesmanyusers' => 'Waxay ka $1 timid adeegsade yaal farabadan ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|Waa fariin cusub|fariin cusub}}',
-'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|bedelkii ugu dambeeyey|bedeladii ugu dambeeyey}}',
+'newmessageslinkplural' => '{{PLURAL:$1|farriin cusub|999=farriimo cusub}}',
+'newmessagesdifflinkplural' => 'isbedel {{PLURAL:$1|dhow|999=isbedello dhow}}',
'youhavenewmessagesmulti' => '$1 waxaa kuu yaalo fariimo cusub',
'editsection' => 'Wax ka bedel',
'editold' => 'Wax ka bedel',
# Preferences page
'preferences' => 'Dooqyada',
'mypreferences' => 'Dooqyadeyda',
-'prefsnologin' => 'Gudaha kuma jirtid',
-'prefsnologintext' => 'Waa in aad <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Gudaha ku jirtaa]</span> si aad dooqyadaada u dalbatid.',
'prefs-skin' => 'Jirka',
'skin-preview' => 'Horfiirin',
'datedefault' => "Ma'jiro dooq",
'allmessagesdefault' => "Qoraalka la'isku ogyahay",
'allmessagescurrent' => 'Qoraalka hada qoran',
'allmessagestext' => 'Kan waa liiska fariimaha systemka oo laga heli karo xarun magaceedka MediaWiki.
-Fadlan booqo [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] iyo [//translatewiki.net translatewiki.net] hadii aad rabto in aad wax ku darsatid guud ahaanba MediaWiki ku fasirida luqadaada.',
+Fadlan booqo [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] iyo [//translatewiki.net translatewiki.net] hadii aad rabto in aad wax ku darsatid guud ahaanba MediaWiki ku fasirida luqadaada.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' la'ma isticmaalikaro, '''\$wgUseDatabaseMessages''' oo dansan daraadeed.",
'allmessages-language' => 'Luqad:',
'allmessages-filter-submit' => 'Soco',
# External editor support
'edit-externally' => 'wax ka bedel faylkaan adiga oo isticmaalaya brogram dheeraad ah',
-'edit-externally-help' => '(Ka fiiri wax war ah oo kale [//www.mediawiki.org/wiki/Manual:External_editors sidii oo wax ugu habeysmi lahaa] )',
+'edit-externally-help' => '(Ka fiiri wax war ah oo kale [https://www.mediawiki.org/wiki/Manual:External_editors sidii oo wax ugu habeysmi lahaa] )',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'dhamaan',
'ok' => 'Ok',
'retrievedfrom' => 'Marrë nga "$1"',
'youhavenewmessages' => 'Ju keni $1 ($2).',
-'newmessageslink' => 'mesazhe të reja',
-'newmessagesdifflink' => 'ndryshimi i fundit',
'youhavenewmessagesfromusers' => 'Ju keni $1 nga {{PLURAL:$3|një përdorues tjetër|$3 përdorues}} ($2).',
'youhavenewmessagesmanyusers' => 'Ju keni $1 nga shumë përdorues ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|një mesazh i ri|mesazhe të reja}}',
'preferences' => 'Parapëlqimet',
'mypreferences' => 'Parapëlqimet',
'prefs-edits' => 'Numri i redaktimeve:',
-'prefsnologin' => 'Nuk keni hyrë brenda',
-'prefsnologintext' => 'Duhet të jeni <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} të kyçur]</span> për të caktuar parapëlqimet e përdoruesit.',
'changepassword' => 'Ndërroni fjalëkalimin',
'prefs-skin' => 'Pamja',
'skin-preview' => 'Parapamje',
'recentchanges-label-minor' => 'Ky është një editim i vogël',
'recentchanges-label-bot' => 'Ky editim është kryer nga një bot',
'recentchanges-label-unpatrolled' => 'Ky editim ende nuk është patrolluar',
+'recentchanges-legend-newpage' => '$1 - faqe të re',
'rcnote' => "Më poshtë {{PLURAL:$1|është '''1''' ndryshim| janë '''$1''' ndryshime}} së fundmi gjatë <strong>$2</strong> ditëve sipas të dhënave nga $4, $5.",
'rcnotefrom' => 'Më poshtë janë ndryshime së fundmi nga <b>$2</b> (treguar deri në <b>$1</b>).',
'rclistfrom' => 'Tregon ndryshime së fundmi duke filluar nga $1',
'allmessagesdefault' => 'Teksti i parazgjedhur',
'allmessagescurrent' => 'Teksti i tanishëshm',
'allmessagestext' => 'Kjo është një listë e të gjitha faqeve në hapësirën MediaWiki:
-Ju lutemi vizitoni [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dhe [//translatewiki.net translatewiki.net] nëse dëshironi të kontribuoni në lokalizimin e përgjithshëm MediaWiki',
+Ju lutemi vizitoni [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dhe [//translatewiki.net translatewiki.net] nëse dëshironi të kontribuoni në lokalizimin e përgjithshëm MediaWiki',
'allmessagesnotsupportedDB' => "Kjo faqe nuk mund të përdoret sepse '''\$wgUseDatabaseMessages''' është çaktivizuar.",
'allmessages-filter-legend' => 'Filtër',
'allmessages-filter' => 'Filtroni nga shteti',
# External editor support
'edit-externally' => 'Ndryshoni këtë skedë me një mjet të jashtëm',
-'edit-externally-help' => '(Shikoni [//www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për më shumë informacion)',
+'edit-externally-help' => '(Shikoni [https://www.mediawiki.org/wiki/Manual:External_editors udhëzimet e instalimit] për më shumë informacion)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'të gjitha',
'version-hook-subscribedby' => 'Abonuar nga',
'version-version' => '(Versioni $1)',
'version-license' => 'Licensa',
-'version-poweredby-credits' => "Ky wiki është mundësuar nga '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'të tjerë',
'version-license-info' => 'MediaWiki është një softuer i lirë; ju mund ta shpërndani dhe redakatoni atë nën kushtet GNU General Public License si e publikuar nga fondacioni Free Software; ose versioni 2 i licensës, ose çdo version më i vonshëm.
'duration-centuries' => '$1 {{PLURAL:$1|shekull|shekuj}}',
'duration-millennia' => '$1 {{PLURAL:$1|milennium|mileniume}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Parapamje stampash',
+'expand_templates_intro' => 'Kjo faqe speciale merr tekstin me stampa dhe të tregon se si do të duket teksti pasi të jenë stamposur të tëra. Kjo faqe gjithashtu tregon parapamjen e funksioneve dhe fjalëve magjike si p.sh. <nowiki>{{</nowiki>#language:...}} dhe <nowiki>{{</nowiki>CURRENTDAY}}.',
+'expand_templates_title' => 'Titulli i faqes për rrethanën, si {{FULLPAGENAME}} etj.:',
+'expand_templates_input' => 'Teksti me stampa:',
+'expand_templates_output' => 'Parapamja',
+'expand_templates_ok' => 'Shko',
+'expand_templates_remove_comments' => 'Hiq komentet',
+
);
'copyright' => 'Садржај је доступан под лиценцом $1 осим ако је другачије наведено.',
'copyrightpage' => '{{ns:project}}:Ауторска права',
'currentevents' => 'Актуелности',
-'currentevents-url' => 'Project:Ð\9dовости',
+'currentevents-url' => 'Project:Ð\90кÑ\82Ñ\83елности',
'disclaimers' => 'Одрицање одговорности',
'disclaimerpage' => 'Project:Одрицање одговорности',
'edithelp' => 'Помоћ при уређивању',
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Преузето из „$1“',
'youhavenewmessages' => 'Имате $1 ($2).',
-'newmessageslink' => 'нових порука',
-'newmessagesdifflink' => 'последња измена',
'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|другог корисника|$3 корисника|$3 корисника}} ($2).',
'youhavenewmessagesmanyusers' => 'Имате $1 од много корисника ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|нову поруку|нове поруке}}',
Проверите разлике испод, па сачувајте измене.',
'undo-failure' => 'Не могу да вратим измену због постојања сукобљених међуизмена.',
'undo-norev' => 'Не могу да вратим измену јер не постоји или је обрисана.',
-'undo-summary' => 'Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
+'undo-summary' => 'Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
'undo-summary-username-hidden' => 'Поништи измену $1 скривеног корисника',
# Account creation failure
'revdelete-hide-user' => 'Кориснчко име уредника/ИП адреса',
'revdelete-hide-restricted' => 'Сакриј податке од администратора и других корисника',
'revdelete-radio-same' => '(не мењај)',
-'revdelete-radio-set' => 'Ð\92идÑ\99иво',
-'revdelete-radio-unset' => 'СакÑ\80ивено',
+'revdelete-radio-set' => 'СакÑ\80ивено',
+'revdelete-radio-unset' => 'Ð\92идÑ\99иво',
'revdelete-suppress' => 'Сакриј податке од администратора и других корисника',
'revdelete-unsuppress' => 'Уклони ограничења на враћеним изменама',
'revdelete-log' => 'Разлог:',
'mergehistory-reason' => 'Разлог:',
# Merge log
-'mergelog' => 'Ð\98Ñ\81Ñ\82оÑ\80иÑ\98а спајања',
+'mergelog' => 'Ð\94невник спајања',
'pagemerge-logentry' => 'страница [[$1]] је спојена у [[$2]] (све до измене $3)',
'revertmerge' => 'растави',
-'mergelogpagetext' => 'Ð\98Ñ\81под Ñ\81е налази Ñ\81пиÑ\81ак Ñ\81коÑ\80аÑ\88Ñ\9aиÑ\85 Ñ\81паÑ\98аÑ\9aа иÑ\81Ñ\82оÑ\80иÑ\98а страница.',
+'mergelogpagetext' => 'Ð\98Ñ\81под Ñ\98е Ñ\81пиÑ\81ак наÑ\98Ñ\81коÑ\80иÑ\98иÑ\85 Ñ\81паÑ\98аÑ\9aа иÑ\81Ñ\82оÑ\80иÑ\98а двеÑ\98Ñ\83 страница.',
# Diffs
'history-title' => 'Историја измена странице „$1“',
'preferences' => 'Подешавања',
'mypreferences' => 'Подешавања',
'prefs-edits' => 'Број измена:',
-'prefsnologin' => 'Нисте пријављени',
-'prefsnologintext' => 'Морате бити <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} пријављени]</span> да бисте подешавали корисничке поставке.',
'changepassword' => 'Промени лозинку',
'prefs-skin' => 'Тема',
'skin-preview' => 'Прегледај',
'recentchanges-label-minor' => 'Мања измена',
'recentchanges-label-bot' => 'Ову измену је направио бот',
'recentchanges-label-unpatrolled' => 'Ова измена још није прегледана',
+'recentchanges-legend-newpage' => '$1 - нова страница',
'rcnote' => "Испод {{PLURAL:$1|је '''1''' измена|су последње '''$1''' измене|су последњих '''$1''' измена}} {{PLURAL:$2|претходни дан|у последњa '''$2''' дана|у последњих '''$2''' дана}}, од $4; $5.",
'rcnotefrom' => 'Испод су измене од <b>$3; $4</b> (до <b>$1</b> измена).',
'rclistfrom' => 'Прикажи нове измене почев од $1',
'diff' => 'разл',
'hist' => 'ист',
'hide' => 'сакриј',
-'show' => 'прикажи',
+'show' => 'Ð\9fрикажи',
'minoreditletter' => ' м',
'newpageletter' => 'Н',
'boteditletter' => 'б',
'actionfailed' => 'Радња није успела',
'deletedtext' => "Страница „$1“ је обрисана.
Погледајте ''$2'' за више детаља.",
-'dellogpage' => 'Ð\98Ñ\81Ñ\82оÑ\80иÑ\98а брисања',
+'dellogpage' => 'Ð\94невник брисања',
'dellogpagetext' => 'Испод је списак последњих брисања.',
'deletionlog' => 'дневник брисања',
'reverted' => 'Враћено на ранију измену',
Последњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Опис измене: \"''\$1''\".",
'revertpage' => 'Враћене измене [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]',
-'revertpage-nouser' => 'Враћене су измене скривеног корисника на последњу измену члана {{GENDER:$1|[[User:$1|$1]]}}',
+'revertpage-nouser' => 'Враћене су измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]',
'rollback-success' => 'Враћене су измене {{GENDER:$1|корисника|кориснице|корисника}} $1
на последњу измену {{GENDER:$2|корисника|кориснице|корисника}} $2.',
'allmessagesdefault' => 'Подразумевани текст',
'allmessagescurrent' => 'Текст поруке',
'allmessagestext' => 'Ово је списак свих системских порука које су доступне у именском простору „Медијавики“.
-Посетите [//www.mediawiki.org/wiki/Localisation Медијавики локализацију] и [//translatewiki.net Транслејтвики] ако желите да помогнете у превођењу.',
+Посетите [https://www.mediawiki.org/wiki/Localisation Медијавики локализацију] и [//translatewiki.net Транслејтвики] ако желите да помогнете у превођењу.',
'allmessagesnotsupportedDB' => "Ова страница не може да се користи јер је '''\$wgUseDatabaseMessages''' онемогућен.",
'allmessages-filter-legend' => 'Филтер',
'allmessages-filter' => 'Филтрирај по стању:',
# External editor support
'edit-externally' => 'Измени ову датотеку користећи спољашњи програм',
-'edit-externally-help' => '(Погледајте [//www.mediawiki.org/wiki/Manual:External_editors упутство за подешавање] за више информација)',
+'edit-externally-help' => '(Погледајте [https://www.mediawiki.org/wiki/Manual:External_editors упутство за подешавање] за више информација)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'све',
'table_pager_empty' => 'Нема резултата',
# Auto-summaries
-'autosumm-blank' => 'Ð\9fоÑ\82пÑ\83но обÑ\80иÑ\81ана Ñ\81Ñ\82Ñ\80аниÑ\86а',
+'autosumm-blank' => 'УклоÑ\9aен Ñ\86елокÑ\83пан Ñ\81адÑ\80жаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86е',
'autosumm-replace' => 'Замена садржаја странице са „$1“',
'autoredircomment' => 'Преусмерење на [[$1]]',
'autosumm-new' => 'Нова страница: $1',
'version-version' => '(издање $1)',
'version-svn-revision' => '(изм. $2)',
'version-license' => 'Лиценца',
-'version-poweredby-credits' => "Овај вики покреће '''[//www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
+'version-poweredby-credits' => "Овај вики покреће '''[https://www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
'version-poweredby-others' => 'остали',
'version-poweredby-translators' => 'translatewiki.net преводиоци',
'version-credits-summary' => 'Желели бисмо да захвалимо следећим људима на њиховом доприносу [[Special:Version|Медијавикији]].',
# Special:SpecialPages
'specialpages' => 'Посебне странице',
-'specialpages-note' => '----
-* обичне посебне странице
-* <span class="mw-specialpagerestricted">ограничене посебне странице</span>',
+'specialpages-note' => '* Нормалне посебне странице
+* <span class="mw-specialpagerestricted">Ограничене посебне странице</span>',
'specialpages-group-maintenance' => 'Извештаји одржавања',
'specialpages-group-other' => 'Остале посебне странице',
'specialpages-group-login' => 'Пријава/регистрација',
'limitreport-postexpandincludesize-value' => '$1/$2 бајтова',
'limitreport-templateargumentsize-value' => '$1/$2 бајтова',
+# Special:ExpandTemplates
+'expandtemplates' => 'Замена шаблона',
+'expand_templates_intro' => 'Ова посебна страница узима текст и мења све шаблоне у њему рекурзивно.
+Такође мења функције парсера као што је <code><nowiki>{{</nowiki>#language:…}}</code> и променљиве као што је <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Заправо практично све што се налази између витичастих заграда.',
+'expand_templates_title' => 'Назив контекста; за {{СТРАНИЦА}} итд.:',
+'expand_templates_input' => 'Унос:',
+'expand_templates_output' => 'Резултат',
+'expand_templates_xml_output' => 'XML излаз',
+'expand_templates_ok' => 'У реду',
+'expand_templates_remove_comments' => 'Уклони коментаре',
+'expand_templates_remove_nowiki' => 'Поништава ефекат <nowiki> тагова у приказу чланака',
+'expand_templates_generate_xml' => 'прикажи XML стабло',
+'expand_templates_preview' => 'Приказ',
+
);
'copyright' => 'Sadržaj je dostupan pod licencom $1 osim ako je drugačije navedeno.',
'copyrightpage' => '{{ns:project}}:Autorska prava',
'currentevents' => 'Aktuelnosti',
-'currentevents-url' => 'Project:Novosti',
+'currentevents-url' => 'Project:Aktuelnosti',
'disclaimers' => 'Odricanje odgovornosti',
'disclaimerpage' => 'Project:Odricanje odgovornosti',
'edithelp' => 'Pomoć pri uređivanju',
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Preuzeto iz „$1“',
'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'novih poruka',
-'newmessagesdifflink' => 'poslednju izmenu',
'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).',
'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|nove poruke}}',
'gotaccount' => 'Već imate nalog? Idite na stranicu „$1“.',
'gotaccountlink' => 'Prijava',
'userlogin-resetlink' => 'Zaboravili ste podatke za prijavu?',
-'userlogin-resetpassword-link' => 'Resetuj lozinku',
+'userlogin-resetpassword-link' => 'Zaboravili ste lozinku?',
'helplogin-url' => 'Help:Logging in',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoć pri prijavljivanju]]',
'createacct-join' => 'Unesite svoje podatke ispod.',
'mergehistory-reason' => 'Razlog:',
# Merge log
-'mergelog' => 'Istorija spajanja',
+'mergelog' => 'Dnevnik spajanja',
'pagemerge-logentry' => 'stranica [[$1]] je spojena u [[$2]] (sve do izmene $3)',
'revertmerge' => 'rastavi',
-'mergelogpagetext' => 'Ispod se nalazi spisak skorašnjih spajanja istorija stranica.',
+'mergelogpagetext' => 'Ispod je spisak najskorijih spajanja istorija dveju stranica.',
# Diffs
'history-title' => 'Istorija izmena stranice „$1“',
'preferences' => 'Podešavanja',
'mypreferences' => 'Podešavanja',
'prefs-edits' => 'Broj izmena:',
-'prefsnologin' => 'Niste prijavljeni',
-'prefsnologintext' => 'Morate biti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} prijavljeni]</span> da biste podešavali korisničke postavke.',
'changepassword' => 'Promeni lozinku',
'prefs-skin' => 'Tema',
'skin-preview' => 'Pregledaj',
'recentchanges-label-minor' => 'Manja izmena',
'recentchanges-label-bot' => 'Ovu izmenu je napravio bot',
'recentchanges-label-unpatrolled' => 'Ova izmena još nije pregledana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
'rcnote' => "Ispod {{PLURAL:$1|je '''1''' izmena|su poslednje '''$1''' izmene|su poslednjih '''$1''' izmena}} {{PLURAL:$2|prethodni dan|u poslednja '''$2''' dana|u poslednjih '''$2''' dana}}, od $4; $5.",
'rcnotefrom' => 'Ispod su izmene od <b>$3; $4</b> (do <b>$1</b> izmena).',
'rclistfrom' => 'Prikaži nove izmene počev od $1',
'diff' => 'razl',
'hist' => 'ist',
'hide' => 'sakrij',
-'show' => 'prikaži',
+'show' => 'Prikaži',
'minoreditletter' => ' m',
'newpageletter' => 'N',
'boteditletter' => 'b',
'actionfailed' => 'Radnja nije uspela',
'deletedtext' => "Stranica „$1“ je obrisana.
Pogledajte ''$2'' za više detalja.",
-'dellogpage' => 'Istorija brisanja',
+'dellogpage' => 'Dnevnik brisanja',
'dellogpagetext' => 'Ispod je spisak poslednjih brisanja.',
'deletionlog' => 'dnevnik brisanja',
'reverted' => 'Vraćeno na raniju izmenu',
Poslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Opis izmene: \"''\$1''\".",
-'revertpage' => 'Vraćene izmene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu korisnika [[User:$1|$1]]',
-'revertpage-nouser' => 'Vraćene su izmene skrivenog korisnika na poslednju izmenu člana {{GENDER:$1|[[User:$1|$1]]}}',
+'revertpage' => 'Vraćene izmene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu korisnika [[User:$1|$1]]',
+'revertpage-nouser' => 'Vraćene su izmene skrivenog korisnika na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]',
'rollback-success' => 'Vraćene su izmene {{GENDER:$1|korisnika|korisnice|korisnika}} $1
na poslednju izmenu {{GENDER:$2|korisnika|korisnice|korisnika}} $2.',
'allmessagesdefault' => 'Podrazumevani tekst',
'allmessagescurrent' => 'Tekst poruke',
'allmessagestext' => 'Ovo je spisak svih sistemskih poruka koje su dostupne u imenskom prostoru „Medijaviki“.
-Posetite [//www.mediawiki.org/wiki/Localisation Medijaviki lokalizaciju] i [//translatewiki.net Translejtviki] ako želite da pomognete u prevođenju.',
+Posetite [https://www.mediawiki.org/wiki/Localisation Medijaviki lokalizaciju] i [//translatewiki.net Translejtviki] ako želite da pomognete u prevođenju.',
'allmessagesnotsupportedDB' => "Ova stranica ne može da se koristi jer je '''\$wgUseDatabaseMessages''' onemogućen.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filtriraj po stanju:',
# External editor support
'edit-externally' => 'Izmeni ovu datoteku koristeći spoljašnji program',
-'edit-externally-help' => '(Pogledajte [//www.mediawiki.org/wiki/Manual:External_editors uputstvo za podešavanje] za više informacija)',
+'edit-externally-help' => '(Pogledajte [https://www.mediawiki.org/wiki/Manual:External_editors uputstvo za podešavanje] za više informacija)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'sve',
'table_pager_empty' => 'Nema rezultata',
# Auto-summaries
-'autosumm-blank' => 'Potpuno obrisana stranica',
+'autosumm-blank' => 'Uklonjen celokupan sadržaj stranice',
'autosumm-replace' => 'Zamena sadržaja stranice sa „$1“',
'autoredircomment' => 'Preusmerenje na [[$1]]',
'autosumm-new' => 'Nova stranica: $1',
'version-version' => '(izdanje $1)',
'version-svn-revision' => '(izm. $2)',
'version-license' => 'Licenca',
-'version-poweredby-credits' => "Ovaj viki pokreće '''[//www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
+'version-poweredby-credits' => "Ovaj viki pokreće '''[https://www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
'version-poweredby-others' => 'ostali',
'version-credits-summary' => 'Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].',
'version-license-info' => 'Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.
# Special:SpecialPages
'specialpages' => 'Posebne stranice',
-'specialpages-note' => '----
-* obične posebne stranice
-* <span class="mw-specialpagerestricted">ograničene posebne stranice</span>',
+'specialpages-note' => '* Normalne posebne stranice
+* <span class="mw-specialpagerestricted">Ograničene posebne stranice</span>',
'specialpages-group-maintenance' => 'Izveštaji održavanja',
'specialpages-group-other' => 'Ostale posebne stranice',
'specialpages-group-login' => 'Prijava/registracija',
'logentry-newusers-newusers' => '$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog',
'logentry-newusers-create' => '$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog',
'logentry-newusers-create2' => '$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3',
+'logentry-newusers-byemail' => 'Korisnički nalog $3 je {{GENDER:$2|napravljen}} od strane $1 i lozinka je poslata na e-poštu',
'logentry-newusers-autocreate' => 'Korisnički nalog $1 je automatski {{GENDER:$2|otvoren}}',
'logentry-rights-rights' => '$1 je {{GENDER:$1|promenio|promenila}} članstvo grupe za $3 iz $4 u $5',
'logentry-rights-rights-legacy' => '$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3',
# Image rotation
'rotate-comment' => 'Slika je rotirana za $1° u smeru kazaljke na satu',
+# Special:ExpandTemplates
+'expandtemplates' => 'Zamena šablona',
+'expand_templates_intro' => 'Ova posebna stranica uzima tekst i menja sve šablone u njemu rekurzivno.
+Takođe menja funkcije parsera kao što je <code><nowiki>{{</nowiki>#language:…}}</code> i promenljive kao što je <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Zapravo praktično sve što se nalazi između vitičastih zagrada.',
+'expand_templates_title' => 'Naziv konteksta; za {{STRANICA}} itd.:',
+'expand_templates_input' => 'Unos:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'XML izlaz',
+'expand_templates_ok' => 'U redu',
+'expand_templates_remove_comments' => 'Ukloni komentare',
+'expand_templates_remove_nowiki' => 'Poništava efekat <nowiki> tagova u prikazu članaka',
+'expand_templates_generate_xml' => 'prikaži XML stablo',
+'expand_templates_preview' => 'Prikaz',
+
);
'ok' => 'Abun',
'retrievedfrom' => 'Teki baka fu "$1"',
'youhavenewmessages' => 'Yu abi $1 ($2).',
-'newmessageslink' => 'nyun boskopu',
-'newmessagesdifflink' => 'laste kenki',
'youhavenewmessagesmulti' => 'Yu abi nyun boskopu na tapu $1',
'editsection' => 'kenki',
'editold' => 'kenki',
'preferences' => 'Seti',
'mypreferences' => 'Mi seti',
'prefs-edits' => 'Nomru fu kenki:',
-'prefsnologin' => 'No kon',
'changepassword' => 'Kenki yu waktiwortu',
'prefs-skin' => 'Buba',
'skin-preview' => 'Si-na-fesi',
# External editor support
'edit-externally' => 'Kenki a file disi ini wan dorosey wrokosani.',
-'edit-externally-help' => 'Luku ini a [//www.mediawiki.org/wiki/Manual:External_editors skorobuku fu den seti] gi moro yepi.',
+'edit-externally-help' => 'Luku ini a [https://www.mediawiki.org/wiki/Manual:External_editors skorobuku fu den seti] gi moro yepi.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ala',
'ok' => 'Säike (09)',
'retrievedfrom' => 'Fon "$1"',
'youhavenewmessages' => 'Du hääst $1 ($2).',
-'newmessageslink' => 'näie Ättergjuchte',
-'newmessagesdifflink' => 'Unnerskeed tou ju foarlääste Version',
'youhavenewmessagesmulti' => 'Du hääst näie Ättergjuchte: $1',
'editsection' => 'Beoarbaidje',
'editold' => 'Beoarbaidje',
'preferences' => 'Ienstaalengen',
'mypreferences' => 'Ienstaalengen',
'prefs-edits' => 'Antaal Beoarbaidengen:',
-'prefsnologin' => 'Nit anmälded',
-'prefsnologintext' => 'Du moast <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} anmälded]</span> weese, uum dien Ienstaalengen annerje tou konnen.',
'changepassword' => 'Paaswoud annerje',
'prefs-skin' => 'Skin',
'skin-preview' => 'Foarskau',
'recentchanges-label-minor' => 'Litje Annerenge',
'recentchanges-label-bot' => 'Annerenge truch n Bot',
'recentchanges-label-unpatrolled' => 'Nit-kontrollierde Annerenge',
+'recentchanges-legend-newpage' => '$1 - näie Siede',
'rcnote' => "Anwiesd {{PLURAL:$1|wäd '''1''' Annerenge|wäide do lääste '''$1''' Annerengen}} in {{PLURAL:$2|dän lääste Dai|do lääste '''$2''' Deege}} siet $5, $4.",
'rcnotefrom' => "Anwiesd wäide do Annerengen siet '''$2''' (max. '''$1''' Iendraage).",
'rclistfrom' => 'Bloot näie Annerengen siet $1 wiese.',
'allmessagesdefault' => 'Standardtext',
'allmessagescurrent' => 'Dissen Text',
'allmessagestext' => 'Dit is ne Lieste fon aal System-Ättergjuchte do in dän MediaWiki-Noomenruum tou Ferföigenge stounde.
-Besäik jädden [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net], wan du mee-oarbaidje wolt an ju MediaWiki-Sortierenge.',
+Besäik jädden [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] un [//translatewiki.net translatewiki.net], wan du mee-oarbaidje wolt an ju MediaWiki-Sortierenge.',
'allmessagesnotsupportedDB' => 'Disse Spezioalsiede stoant nit tou Ferföigenge, deer ju uur dän Parameter <tt>$wgUseDatabaseMessages</tt> deaktivierd wuude.',
'allmessages-filter-legend' => 'Sieuwe',
'allmessages-filter' => 'Sieuwe foar anpaaseden Toustand:',
# External editor support
'edit-externally' => 'Disse Doatäi mäd n extern Program beoarbaidje',
-'edit-externally-help' => '(Sjuch do [//www.mediawiki.org/wiki/Manual:External_editors Installationsanwiesengen] foar wiedere Informatione)',
+'edit-externally-help' => '(Sjuch do [https://www.mediawiki.org/wiki/Manual:External_editors Installationsanwiesengen] foar wiedere Informatione)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'aal',
'version-hook-subscribedby' => 'Aproup fon',
'version-version' => '(Version $1)',
'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Disse Website nutset '''[//www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
+'version-poweredby-credits' => "Disse Website nutset '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
'version-poweredby-others' => 'uur',
'version-license-info' => "MediaWiki is fräie Software, dät hat dät ju ätter do Bedingengen fon ju truch de Free Software Foundation fereepenlikede ''GNU General Public License'', fääreferdeeld un/ of modifizierd wäide kon. Deerbie kon ju version 2, of ätter oainen Uurdeel, älke näiere Version fon ju Lizenz ferwoand wäide.
# Special:SpecialPages
'specialpages' => 'Spezioalsieden',
-'specialpages-note' => '----
-* Reguläre Spezioalsieden
+'specialpages-note' => '* Reguläre Spezioalsieden
* <span class="mw-specialpagerestricted">Tougriepsbeskränkede Spezioalsieden</span>
* <span class="mw-specialpagecached">Cachegenerierde Spezioalsieden</span>',
'specialpages-group-maintenance' => 'Fersuurgengsliesten',
'searchsuggest-search' => 'Säik',
'searchsuggest-containing' => 'Fultextsäike ätter ...',
+# Special:ExpandTemplates
+'expandtemplates' => 'Foarloagen expandierje',
+'expand_templates_intro' => "In disse Spezialsiede kon Text ienroat wäide un aal Foarloagen in hier wäide rekursiv expandierd. Uk Parserfunktione as <nowiki>{{</nowiki>#language:...}} un Variabelen as <nowiki>{{</nowiki>CURRENTDAY}} wäide benutsed - faktisk alles wät twiske dubbelde swoangene Klammere '''{{}}''' stoant. Dit geböärt truch dän Aproup fon apstuunse Parser-Phasen in MediaWiki.",
+'expand_templates_title' => 'Kontexttittel, foar {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Iengoawefäild:',
+'expand_templates_output' => 'Resultoat',
+'expand_templates_xml_output' => 'XML-Uutgoawe',
+'expand_templates_ok' => 'Uutfiere',
+'expand_templates_remove_comments' => 'Kommentoare wächhoalje',
+'expand_templates_generate_xml' => 'Wies XML Parser-Boom',
+'expand_templates_preview' => 'Foarskau',
+
);
'ok' => 'Heug',
'retrievedfrom' => 'Disalin ti "$1"',
'youhavenewmessages' => 'Anjeun boga $1 ($2).',
-'newmessageslink' => 'talatah anyar',
-'newmessagesdifflink' => 'bédana ti nu saméméhna',
'youhavenewmessagesmulti' => 'Anjeun boga talatah anyar di $1',
'editsection' => 'édit',
'editold' => 'édit',
'preferences' => 'Préferénsi',
'mypreferences' => 'Préferéns',
'prefs-edits' => 'Jumlah éditan:',
-'prefsnologin' => 'Can asup log',
-'prefsnologintext' => 'Anjeun kudu <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} asup log]</span> pikeun ngatur préferénsi pamaké.',
'changepassword' => 'Robah sandi',
'prefs-skin' => 'Kulit',
'skin-preview' => 'Pramidang',
'recentchanges-label-minor' => 'Ieu éditan minor',
'recentchanges-label-bot' => 'Ieu parobahan dijieun ku bot',
'recentchanges-label-unpatrolled' => 'Ieu éditan can karoris',
+'recentchanges-legend-newpage' => '$1 - kaca anyar',
'rcnote' => "Di handap ieu {{PLURAL:$1|'''1''' parobahan| '''$1''' parobahan anyar}} dina {{PLURAL:$2|poé|'''$2''' poé}} ahir, nepi $5, $4.",
'rcnotefrom' => 'Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).',
'rclistfrom' => 'Témbongkeun nu anyar robah nepi ka $1',
# External editor support
'edit-externally' => 'Édit koropak ieu migunakeun aplikasi éksternal',
-'edit-externally-help' => 'Baca [//www.mediawiki.org/wiki/Manual:External_editors pituduh ngatur] pikeun émbaran leuwih jéntré.',
+'edit-externally-help' => 'Baca [https://www.mediawiki.org/wiki/Manual:External_editors pituduh ngatur] pikeun émbaran leuwih jéntré.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'sadaya',
# Special:SpecialPages
'specialpages' => 'Kaca husus',
-'specialpages-note' => '----
-* Kaca husus bisa di buka ku umum.
+'specialpages-note' => '* Kaca husus bisa di buka ku umum.
* <strong class="mw-specialpagerestricted">Cetak kandel kaca husus nu kawates.</strong>',
'specialpages-group-maintenance' => 'Laporan pigawéeun',
'specialpages-group-other' => 'Kaca husus lainna',
'duration-centuries' => '$1 {{PLURAL:$1|abad|abad}}',
'duration-millennia' => '$1 {{PLURAL:$1|milénium|milénium}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Mekarkeun citakan',
+'expand_templates_input' => 'Téks input:',
+'expand_templates_output' => 'Hasil:',
+'expand_templates_xml_output' => 'Output XML',
+'expand_templates_ok' => 'Heug',
+'expand_templates_preview' => 'Pramidang',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Hämtad från "$1"',
'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nya meddelanden',
-'newmessagesdifflink' => 'senaste ändringen',
'youhavenewmessagesfromusers' => 'Du har $1 från {{PLURAL:$3|en annan användare|$3 användare}} ($2).',
'youhavenewmessagesmanyusers' => 'Du har $1 från många användare ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ett nytt meddelande|nya meddelanden}}',
'invalidtitle-knownnamespace' => 'Ogiltig titel med namnrymden "$2" och texten "$3"',
'invalidtitle-unknownnamespace' => 'Ogiltig titel med okänt namnrymdsnummer $1 och texten "$2"',
'exception-nologin' => 'Inte inloggad',
-'exception-nologin-text' => 'Denna sida eller åtgärd kräver att du måste vara inloggad på denna wiki.',
+'exception-nologin-text' => 'Var god [[Special:Userlogin|logga in]] för att komma åt denna sida eller åtgärd.',
# Virus scanner
'virus-badscanner' => "Dålig konfigurering: okänd virusskanner: ''$1''",
'revdelete-hide-user' => 'Redigerarens användarnamn/IP-adress',
'revdelete-hide-restricted' => 'Undanhåll data från administratörer så väl som från övriga',
'revdelete-radio-same' => '(låt vara)',
-'revdelete-radio-set' => 'Synlig',
-'revdelete-radio-unset' => 'Dold',
+'revdelete-radio-set' => 'Dold',
+'revdelete-radio-unset' => 'Synlig',
'revdelete-suppress' => 'Undanhåll data även från administratörer',
'revdelete-unsuppress' => 'Ta bort begränsningar på återställda versioner',
'revdelete-log' => 'Anledning:',
'preferences' => 'Inställningar',
'mypreferences' => 'Inställningar',
'prefs-edits' => 'Antal redigeringar:',
-'prefsnologin' => 'Inte inloggad',
-'prefsnologintext' => 'Du måste vara <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} inloggad]</span> för att kunna ändra dina inställningar.',
'changepassword' => 'Byt lösenord',
'prefs-skin' => 'Utseende',
'skin-preview' => 'förhandsvisning',
'recentchanges-label-minor' => 'Detta är en mindre ändring',
'recentchanges-label-bot' => 'Denna redigering gjordes av en bot',
'recentchanges-label-unpatrolled' => 'Denna redigering har inte blivit kontrollerad ännu',
+'recentchanges-legend-newpage' => '$1 - ny sida',
'rcnote' => "Nedan visas {{PLURAL:$1|'''1''' ändring|de senaste '''$1''' ändringarna}} från {{PLURAL:$2|det senaste dygnet|de senaste '''$2''' dygnen}}, per $4, kl. $5.",
'rcnotefrom' => "Nedan visas ändringar sedan '''$2''' (upp till '''$1''' visas).",
'rclistfrom' => 'Visa ändringar efter $1',
'allmessagesdefault' => 'Standardtext',
'allmessagescurrent' => 'Nuvarande text',
'allmessagestext' => 'Detta är en lista över alla meddelanden i namnrymden MediaWiki.
-Besök [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] eller [//translatewiki.net translatewiki.net] om du vill bidra till översättningen av MediaWiki.',
+Besök [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] eller [//translatewiki.net translatewiki.net] om du vill bidra till översättningen av MediaWiki.',
'allmessagesnotsupportedDB' => "Den här sidan kan inte användas eftersom '''\$wgUseDatabaseMessages''' är avstängd.",
'allmessages-filter-legend' => 'Filtrera',
'allmessages-filter' => 'Filtrera efter anpassningsgrad:',
Ger möjlighet att skriva en motivering i redigeringssammanfattningen',
'tooltip-preferences-save' => 'Spara inställningar',
'tooltip-summary' => 'Skriv en kort sammanfattning',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
# Stylesheets
'common.css' => '/* CSS som skrivs här påverkar alla skal */',
'svg-long-desc' => 'SVG-fil, grundstorlek: $1 × $2 pixlar, filstorlek: $3',
'svg-long-desc-animated' => 'Animerad SVG-fil, standardstorlek $1 × $2 pixlar, filstorlek: $3',
'svg-long-error' => 'Felaktig SVG-fil: $1',
-'show-big-image' => 'Högupplöst version',
+'show-big-image' => 'Originalfil',
'show-big-image-preview' => 'Storlek på förhandsvisningen: $1.',
'show-big-image-other' => '{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.',
'show-big-image-size' => '$1 × $2 pixlar',
# External editor support
'edit-externally' => 'Redigera denna fil med hjälp av extern programvara',
-'edit-externally-help' => '(Se [//www.mediawiki.org/wiki/Manual:External_editors installationsinstruktionerna] för mer information)',
+'edit-externally-help' => '(Se [https://www.mediawiki.org/wiki/Manual:External_editors installationsinstruktionerna] för mer information)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'alla',
'version-hook-subscribedby' => 'Används av',
'version-version' => '(Version $1)',
'version-license' => 'Licens',
-'version-poweredby-credits' => "Den här wikin drivs av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Den här wikin drivs av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'andra',
'version-poweredby-translators' => 'översättare från translatewiki.net',
'version-credits-summary' => 'Vi skulle vilja tacka följande personer för deras bidrag till [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Specialsidor',
-'specialpages-note' => '----
-* Normala specialsidor.
-* <span class="mw-specialpagerestricted">Specialsidor med begränsad åtkomst.</span>
-* <span class="mw-specialpagecached">Cachade specialsidor (kan vara föråldrade).</span>',
+'specialpages-note' => '* Normala specialsidor.
+* <span class="mw-specialpagerestricted">Specialsidor med begränsad åtkomst.</span>',
'specialpages-group-maintenance' => 'Underhållsrapporter',
'specialpages-group-other' => 'Övriga specialsidor',
'specialpages-group-login' => 'Logga in / skapa konto',
'limitreport-expansiondepth' => 'Största expansionsdjup',
'limitreport-expensivefunctioncount' => 'Antal dyra parser-funktioner',
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandera mallar',
+'expand_templates_intro' => 'Den här specialsidan tar en text och expanderar rekursivt alla mallar som används. Även parserfunktioner (som <code><nowiki>{{</nowiki>#language:...}}</code>), variabler som <code><nowiki>{{</nowiki>CURRENTDAY}}</code> och annan kod med dubbla klammerparenteser expanderas.',
+'expand_templates_title' => 'Sidans titel, används för t.ex. {{FULLPAGENAME}}:',
+'expand_templates_input' => 'Text som ska expanderas:',
+'expand_templates_output' => 'Expanderad kod',
+'expand_templates_xml_output' => 'XML-kod',
+'expand_templates_ok' => 'Expandera',
+'expand_templates_remove_comments' => 'Ta bort kommentarer',
+'expand_templates_remove_nowiki' => 'Undertryck <nowiki> taggar i resultatet',
+'expand_templates_generate_xml' => 'Visa parseträd som XML',
+'expand_templates_preview' => 'Förhandsvisning',
+
);
'ok' => 'Sawa',
'retrievedfrom' => 'Rudishwa kutoka "$1"',
'youhavenewmessages' => 'Una $1 ($2).',
-'newmessageslink' => 'ujumbe mpya',
-'newmessagesdifflink' => 'badiliko la mwisho',
'youhavenewmessagesfromusers' => 'Una $1 kutoka {{PLURAL:$3|another user|$3 users}} ($2)',
'youhavenewmessagesmanyusers' => 'Una $1 kutoka kwa watumiaji wengi $2',
'newmessageslinkplural' => '{{PLURAL:$1|a new message|ujumbe mpya}}',
# General errors
'error' => 'Hitilafu',
'databaseerror' => 'Hitilafu ya hifadhidata',
+'databaseerror-error' => 'Hitilafu: $1',
'laggedslavemode' => "'''Ilani:'''Labda masahihisho ya hivi karibuni bado hayajaonekana.",
'readonly' => 'Hifadhidata imefungika',
'enterlockreason' => 'Ingiza sababu za kufunga, pamoja na makisio yake lini itafunguliwa',
'yourname' => 'Jina la mtumiaji:',
'userlogin-yourname' => 'Jina la mtumiaji',
'userlogin-yourname-ph' => 'Weka jina lako la mtumiaji',
+'createacct-another-username-ph' => 'Weka jina la mtumiaji',
'yourpassword' => 'Neno la siri:',
'userlogin-yourpassword' => 'Neno la siri',
'userlogin-yourpassword-ph' => 'Weka neno lako la siri',
+'createacct-yourpassword-ph' => 'Weka neno la siri',
'yourpasswordagain' => 'Andika tena neno la siri',
+'createacct-yourpasswordagain-ph' => 'Weka neno la siri tena',
'remembermypassword' => 'Kumbuka kuingia kwangu katika kivinjari hiki (kwa muda usiozidi {{PLURAL:$1|siku}} $1)',
'yourdomainname' => 'Tovuti yako:',
'password-change-forbidden' => 'Hauwezi kubadili nywila katika Wiki hii.',
'gotaccount' => "Unayo akaunti tayari? '''$1'''",
'gotaccountlink' => 'Ingia',
'userlogin-resetlink' => 'Umesahau maelezo yako ya kuingia?',
+'createacct-emailrequired' => 'Anwani ya barua pepe',
+'createacct-email-ph' => 'Weka anwani yako ya barua pepe',
+'createacct-another-email-ph' => 'Weka anwani ya barua pepe',
'createaccountmail' => 'Kwa barua pepe',
'createaccountreason' => 'Sababu:',
+'createacct-reason' => 'Sababu',
'badretype' => 'Maneno uliyoyaandika ni tofauti.',
'userexists' => 'Jina la mtumiaji uliloingiza tayari linatumika.
Tafadhali chagua jina lingine.',
'revdelete-hide-user' => 'Ficha jina la mhariri/anwani ya IP ya mhariri',
'revdelete-hide-restricted' => 'Wakabidhi (vilevile wengine) wasiweze kuona data',
'revdelete-radio-same' => '(isibadilishwe)',
-'revdelete-radio-set' => 'Ndiyo',
-'revdelete-radio-unset' => 'Hapana',
+'revdelete-radio-set' => 'Halionekani',
+'revdelete-radio-unset' => 'Linaonekana',
'revdelete-suppress' => 'Wakabidhi (vilevile wengine) wasiweze kuona data',
'revdelete-unsuppress' => 'Uzuio wa kuona mapitio uondolewe, mapitio yanaporudishwa',
'revdelete-log' => 'Sababu:',
'preferences' => 'Mapendekezo',
'mypreferences' => 'Mapendekezo',
'prefs-edits' => 'Idadi ya marekebisho:',
-'prefsnologin' => 'Hujaingia',
-'prefsnologintext' => 'Inabidi <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} uingie akaunti yako]</span> ili ubadilishe mapendekezo yako.',
'changepassword' => 'Badilisha neno la siri',
'prefs-skin' => 'Umbo',
'skin-preview' => 'Hakiki',
'prefs-dateformat' => 'Jinsi inayoandikwa tarehe',
'prefs-timeoffset' => 'Kuweka saa tofauti na saa ya seva',
'prefs-advancedediting' => 'Hitiari za hali ya juu',
+'prefs-preview' => 'Hakiki',
'prefs-advancedrc' => 'Hitiari za hali ya juu',
'prefs-advancedrendering' => 'Hitiari za hali ya juu',
'prefs-advancedsearchoptions' => 'Hitiari za hali ya juu',
# Recent changes
'nchanges' => '{{PLURAL:$1|badiliko|mabadiliko}} $1',
+'enhancedrc-history' => 'historia',
'recentchanges' => 'Mabadiliko ya karibuni',
'recentchanges-legend' => "Machaguo ya 'mabadaliko ya karibuni'",
'recentchanges-summary' => 'Orodha ya mabadilisho yaliyofanywa katika {{SITENAME}} siku zilizopita.',
'recentchanges-label-minor' => 'Hili ni badiliko dogo',
'recentchanges-label-bot' => 'Sahihisho hili lilitekelezwa na bot',
'recentchanges-label-unpatrolled' => 'Haririo hili bado halijafanyiwa doria',
+'recentchanges-legend-newpage' => '$1 - ukurasa mpya',
'rcnote' => "{{PLURAL:$1|Linalofuata ni badiliko '''1'''|Yanayofuata ni mabadiliko '''$1''' ya mwisho}} kutoka katika {{PLURAL:$2|siku iliyopita|siku '''$2''' zilizopita}}, hadi saa $5, tarehe $4.",
'rcnotefrom' => "Hapo chini yaonekana mabadiliko tangu '''$2''' (tunaonyesha hadi '''$1''').",
'rclistfrom' => 'Onyesha mabadiliko mapya kuanzia $1',
'rc_categories' => 'Chagua jamii zingine (uzitenge na kigawaji hiki "|")',
'rc_categories_any' => 'Yoyote',
'newsectionsummary' => '/* $1 */ mjadala mpya',
-'rc-enhanced-expand' => 'Onyesha maelezo mengine (inahitaji JavaScript)',
+'rc-enhanced-expand' => 'Onyesha maelezo',
'rc-enhanced-hide' => 'Ficha maelezo mengine',
'rc-old-title' => 'ilitengenezwa hapo awali na "$1"',
'randompage' => 'Ukurasa wa bahati',
'randompage-nopages' => 'Hakuna kurasa katika {{PLURAL:$2|eneo la wiki lifuatalo|maeneo ya wiki yafuatayo}}: $1.',
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Nenda',
+
# Random redirect
'randomredirect' => 'Elekezo la bahati',
'randomredirect-nopages' => 'Hakuna maelekezo katika eneo la wiki la "$1".',
'statistics-users-active-desc' => 'Watumiaji waliofanya kazi katika siku {{PLURAL:$1|iliyopita|$1 zilizopita}}',
'statistics-mostpopular' => 'Kurasa zinazotazamwa sana',
+'pageswithprop-submit' => 'Nenda',
+
'doubleredirects' => 'Maelekezo mawilimawili',
'doubleredirectstext' => 'Ukurasa huu unaorodhesha kurasa zinazoelekeza kurasa zingine za kuelekeza.
Katika kila mstari kuna viungo vinavyokwenda katika kurasa za kuelekeza zote mbili, pamoja na ukurasa wa mwishilio mwa elekezo la pili. Ukurasa huu wa mwishilio huwa ni ukurasa unaostahili kuelekezwa kutoka kwa ukurasa wa kuelekeza wa kwanza. Vitu <del>vilivyokatwa kwa mstari</del> vimeshatatuliwa.',
'allmessagesdefault' => 'Ujumbe uliopo bidhaa pepe',
'allmessagescurrent' => 'Ujumbe unapo sasa hivi',
'allmessagestext' => 'Hii ni orodha ya jumbe za mfumo zilizopo katika eneo la MediaWiki.
-Ukitaka kusaidia kazi ya kutohoa MediaWiki yote katika lugha nyingi, tafadhali uende tovuti ya [//www.mediawiki.org/wiki/Localisation Kutohoa MediaWiki Kwenye Lugha Nyingi] na [//translatewiki.net translatewiki.net].',
+Ukitaka kusaidia kazi ya kutohoa MediaWiki yote katika lugha nyingi, tafadhali uende tovuti ya [https://www.mediawiki.org/wiki/Localisation Kutohoa MediaWiki Kwenye Lugha Nyingi] na [//translatewiki.net translatewiki.net].',
'allmessagesnotsupportedDB' => "Ukurasa huu hauwezi kutumika kwa sababu '''\$wgUseDatabaseMessages''' imelemazwa.",
'allmessages-filter-legend' => 'Chuja',
'allmessages-filter' => 'Zichujwe kwa hali ya kutengenezwa:',
'file-info-size-pages' => 'Piseli $1 × $2, ukubwa wa faili: $3, aina ya MIME: $4, {{PLURAL:$5|ukurasa|kurasa}} $5',
'file-nohires' => 'Hakuna saizi kubwa zaidi.',
'svg-long-desc' => 'faili la SVG, husemwa kuwa piseli $1 × $2, saizi ya faili: $3',
-'show-big-image' => 'Ukubwa wa awali',
+'show-big-image' => 'Faili lenyewe',
'show-big-image-preview' => 'Ukubwa wa hakikisho: $1.',
'show-big-image-other' => '{{PLURAL:$2|Ukubwa mwingine|Ukubwa zingine}}: $1.',
'show-big-image-size' => 'piseli $1 × $2',
# External editor support
'edit-externally' => 'Tumia programu ya nje kuhariri faili hii',
-'edit-externally-help' => '(Ona [//www.mediawiki.org/wiki/Manual:External_editors maelezo (kwa Kiingereza)] kwa maarifa mengine.)',
+'edit-externally-help' => '(Ona [https://www.mediawiki.org/wiki/Manual:External_editors maelezo (kwa Kiingereza)] kwa maarifa mengine.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'zote',
'version-other' => 'Zingine',
'version-version' => '(Toleo $1)',
'version-license' => 'Ruhusa',
-'version-poweredby-credits' => "Wiki hii inaendeshwa na bidhaa pepe ya '''[//www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.",
+'version-poweredby-credits' => "Wiki hii inaendeshwa na bidhaa pepe ya '''[https://www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.",
'version-poweredby-others' => 'wengine',
'version-license-info' => 'MediaWiki ni bidhaa pepe huru; unaweza kuisambaza pamoja na kuitumia na kuibadilisha kutokana na masharti ya leseni ya GNU General Public License inayotolewa na Free Software Foundation (Shirika la Bidhaa Pepe Huru); ama toleo 2 la hakimiliki, ama (ukitaka) toleo lolote linalofuata.
# Special:SpecialPages
'specialpages' => 'Kurasa maalum',
-'specialpages-note' => '----
-* Kurasa maalum za kawaida.
+'specialpages-note' => '* Kurasa maalum za kawaida.
* <span class="mw-specialpagerestricted">Kurasa maalum zisizoonekana na wote.</span>
* <span class="mw-specialpagecached">Kurasa maalum zinazotoka "cache" (might be obsolete).</span>',
'specialpages-group-maintenance' => 'Ripoti za kurekebisha na kutunza kurasa',
'duration-years' => '{{PLURAL:$1|mwaka|miaka}} $1',
'duration-centuries' => '{{PLURAL:$1|karne}} $1',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Sawa',
+'expand_templates_preview' => 'Hakiki',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Zdrzůdło "$1"',
'youhavenewmessages' => 'Mosz $1 ($2).',
-'newmessageslink' => 'nowe powjadůmjyńa',
-'newmessagesdifflink' => 'uostatńe pomjyńyńy',
'youhavenewmessagesfromusers' => 'Mosz $1 uod {{PLURAL:$3|inszygo używocza|$3 używoczy}} ($2).',
'youhavenewmessagesmanyusers' => 'Mosz $1 uod wjelu używoczy ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|jydno nowina|nowiny}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|uostatńe sprowjyńe|uostatńe sprowjyńa}}',
+'newmessageslinkplural' => '{{PLURAL:$1|jedno nowina|999=nowiny}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|uostatńe sprowjyńe|999=uostatńe sprowjyńa}}',
'youhavenewmessagesmulti' => 'Mosz nowe powjadůmjyńa: $1',
'editsection' => 'Sprowjej',
'editold' => 'sprowjej',
Administrator kery zawarł wćepał kůmyntorz: "$3".',
'invalidtitle-knownnamespace' => 'Felerne mjano "$3" w przestrzeńy "$2".',
'exception-nologin' => 'Ńy jest żeś zalogůwany',
-'exception-nologin-text' => 'Ta zajta abo akcyja wymogo byćo zalogůwanym na tyj wiki.',
+'exception-nologin-text' => 'Prosza [[Special:Userlogin|zaloguj śe]] coby mjeć mogebność przejśćo do tyj zajty abo akcyji.',
# Virus scanner
'virus-badscanner' => "Felerno konfiguracyjo – ńyznany skaner antywirusowy ''$1''",
Coby powstrzimać nadużyća, mogebność wysyłańo przipůmńyń nasztalowano na jydne bez {{PLURAL:$1|godźina|$1 godźiny}}.',
'mailerror' => 'Przi wysyłańu e-brifa zdorził śe feler: $1',
'acct_creation_throttle_hit' => 'Przikro nom, założůł(a)żeś już {{PLURAL:$1|1 kůnto|$1 kůnta}}. Ńy możesz założyć kolejnygo.',
-'emailauthenticated' => 'Twůj adres e-brifa zostoł uwjerzitelńůny $2 uo $3.',
-'emailnotauthenticated' => 'Twůj adres e-brifa ńy je uwjerzitelńůny. Půniższe funkcyje poczty ńy bydům dźołać.',
+'emailauthenticated' => 'Twůj ausdruk e-brifa zostoł powjerzitelńůny $2 uo $3.',
+'emailnotauthenticated' => 'Twůj adres e-brifa ńy je powjerzitelńůny. Půniższe funkcyje poczty ńy dźołajům.',
'noemailprefs' => 'Muśisz podać adres e-brifa, coby te funkcyje dźołały.',
'emailconfirmlink' => 'Potwjyrdź swůj adres e-brifa',
'invalidemailaddress' => 'E-brif ńy bydźe zaakceptůwany skiż tygo co jigo format ńy spełńo formalnych wymagań. Prosza naszkryflać poprowny adres e-brifa abo wyczyśćić pole.',
'loginreqlink' => 'zaloguj śe',
'loginreqpagetext' => 'Muśisz $1 coby můc przeglůndać inksze zajty.',
'accmailtitle' => 'Hasło posłane.',
-'accmailtext' => '!Hasło użytkowńika "[[User talk:$1|$1]]" zostauo wysłane pod adres $2.
-
-Hasło można pomjyńyć [[Special:ChangePassword|tu]].',
+'accmailtext' => "Cufalńe hasło lo [[User talk:$1|$1]] uostoło posłane do $2. Hasło lo tygo nowygo kůnta po zalogowańu je mogebność pomjyńić na zajće ''[[Special:ChangePassword|pomjyńańe hasła]]''.",
'newarticle' => '(Nowy)',
'newarticletext' => 'Ńy mo sam jeszcze artikla uo takijj titli. Eli chcesz go sprowjać, naszkryflej niżyj jego tekst (wjyncy informacyj nojdźesz [[{{MediaWiki:Helppage}}|na zajće půmocy]]). Eli żeś chćoł zrobić cośik inksze, naćiś ino knefel "Nazod".',
'anontalkpagetext' => "---- ''To je zajta godki lo anůnimowych używoczy - takich, kerzi ńy majům jeszcze swojigo kůnta abo ńy chcům go terozki używać.
By jejich idyntyfikować, używomy numerůw IP.
Eli jeżeś anůnimowym używoczym a wydowo Ći śe, aże zamjyszczůne sam kůmyntorze ńy sům skjyrowane do Ćebje, [[Special:UserLogin|utwůrz prosza kůnto]] abo [[Special:UserLogin|zalůguj śe]] - beztůż uńikńesz potym podobnych ńyporozumjyń.''",
'noarticletext' => 'Ńy můmy zajta uo takij titli. Mogesz [{{fullurl:{{FULLPAGENAME}}|action=edit}} wćepać artikel {{FULLPAGENAME}}] abo [[Special:Search/{{PAGENAME}}|sznupać {{PAGENAME}} we inkszych]].',
-'noarticletext-nopermission' => 'Na tyj zajće ńy mo jeszcze artikla.
-Mogesz [[Special:Search/{{PAGENAME}}|wysznupać ta titla]] we treśći inkszych zajtůw
-abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przesznupać powjůnzane logi].</span>',
+'noarticletext-nopermission' => 'Ta zajta terozki je pusto.
+Mogesz [[Special:Search/{{PAGENAME}}|wysznupać ta titla]] we treśćach inkszych zajtůw, abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przesznupać powjůnzane rejery]</span>, nale ńy mosz uprowńyń coby ta zajta wćepać',
'userpage-userdoesnotexist' => 'Użytkowńik "<nowiki>$1</nowiki>" ńy je zarejesztrowany. Sprowdź eli na pewno chćołżeś stworzyć/pomjynić gynał ta zajta.',
'userpage-userdoesnotexist-view' => "Konto sprowjorza ''$1'' ńy istnieje.",
'blocked-notice-logextract' => '{{GENDER:$1|Tyn sprowjorz|Ta sprowjorka}} mo zawrzite sprowjyńa.',
'sitecsspreview' => "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego arkusza stylůw CSS.'''
'''Ńic jeszcze ńy zostoło naszkryflane!'''",
'sitejspreview' => "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego JavaScriptu - nic jeszcze ńy zostoło naszkryflane!'''",
-'userinvalidcssjstitle' => "'''Pozůr:''' Å\83y mo skůrki uo mjaÅ\84e \"\$1\". Pamjyntej, aže zajty užytkowÅ\84ika zawjyrajůnce CSS i JavaScript powinny zaÄ\8dynaÄ\87 Å\9be mouům buchÅ¡tabům, np. {{ns:user}}:Foo/vector.css.",
+'userinvalidcssjstitle' => "'''Pozůr:''' Å\83y mo skůrki uo mjaÅ\84e \"\$1\". Pamjyntej, aże zajty użytkowÅ\84ika zawjyrajůnce CSS i JavaScript powinny zaczynaÄ\87 Å\9be maÅ\82ům buchsztabům, lb. {{ns:user}}:Foo/vector.css.",
'updated' => '(Pomjyńano)',
'note' => "'''Pozůr:'''",
'previewnote' => "'''To je ino podglůnd - artikel jeszcze ńy je spamjyntany!'''",
-'continue-editing' => 'Sprowjej dalej',
+'continue-editing' => 'Przyndź do pola sprowjańo',
'previewconflict' => 'Wersyjo podglůndano uodnośi śe do tekstu ze pola edycyje na wjyrchu. Tak bydźe wyglůndać zajta jeli zdecydujesz śe jům naszkryflać.',
-'session_fail_preview' => "'''Přeprašomy! Serwer ńy može přetwořyć tygo sprowjyńo skuli utraty danych ze sesyji. Sprůbuj ješče roz. Kejby to ńy pomoguo - wylůguj śe i zalogůj uod nowa.'''",
+'session_fail_preview' => "'''Pozůr! Serwer ńy może przetworzić tyj edycyji, beztuż co dane sesyji uostoły utracůne.
+Poprůbuj jeszcze roz.
+Eli to tyż ńy do podpory – [[Special:UserLogout|wyloguj śe]] a zaloguj jeszcze roz.'''",
'session_fail_preview_html' => "'''Přeprašomy! Serwer ńy može přetwořyć tygo sprowjyńo skuli utraty danych ze sesyji.'''
''Jako iže na {{GRAMMAR:MS.lp|{{SITENAME}}}} wuůnčono zostoua uopcyjo \"raw HTML\", podglůnd zostou schrůńony coby zabezpječyć před atakami JavaScript.''
'editingsection' => 'Sprowjosz $1 (sekcyjo)',
'editingcomment' => 'Sprowjosz "$1" (nowy kůmyntorz)',
'editconflict' => 'Kůnflikt sprowjyń: $1',
-'explainconflict' => "Ktoś zdůnžyu wćepać swoja wersyjo artikla ńim žeś naškryflou sprowjyńy.
-We polu edycyji na wjyrchu moš tekst zajty aktůalńy naškryflany w baźe danych.
-Twoje pomjyńańo sům we polu edycyji půnižyj.
-By wćepać swoje pomjyńańo muśiš pomjyńać tekst w polu na wjyrchu.
-'''Tylko''' tekst z pola na wjyrchu bydźe naškryflany we baźe jak wciśńeš \"{{int:savearticle}}\".",
+'explainconflict' => "Ftoś zdůnżůł wćepać swoja wersyjo artikla ńim żeś naszkryflou sprowjyńy.
+We polu edycyji na wjyrchu mosz tekst zajty aktuelńy naszkryflany we baźe danych.
+Twoje pomjyńańo sům we polu edycyji půńiżyj.
+By wćepać swoje pomjyńańo muśisz pomjyńać tekst we polu na wjyrchu.
+'''Ino''' tekst ze pola na wjyrchu bydźe naszkryflany we baźe jak
+wciśńesz knefel \"{{int:savearticle}}\".",
'yourtext' => 'Twůj tekst',
'storedversion' => 'Naszkryflano wersyjo',
'nonunicodebrowser' => "'''Pozůr! Twoja přeglůndorka ńy umje poprowńy rozpoznować kodowańo UTF-8 (Unicode). Bestož wšyjske znoki, kerych Twoja přeglůndorka ńy umje rozpoznować, zamjeńůno na jejich kody heksadecymalne.'''",
'cascadeprotectedwarning' => "'''Dej pozůr:''' Ta zajta zostoła zawarto a ino użytkowńicy ze uprawńyńami admińistratora mogům jům sprowjać. Zajta ta je podpjynto pod {{PLURAL:$1|nastympujůnco zajta, kero zostoła zawarto|nastympujůncych zajtach, kere zostouy zawarte}} ze załůnczonům uopcjům dźedźiczyńo:",
'titleprotectedwarning' => "'''Dej pozůr: Zajta uo tym titlu zostoła zawarto a ino [[Special:ListGroupRights|ńykerzi użytkowńicy]] mogům jům wćepać.'''
Uostatńy wpis z rejera je ńyżej.",
-'templatesused' => '{{PLURAL:$1|Szablon|Szablůny}} użyte na tyj zajće:',
-'templatesusedpreview' => '{{PLURAL:$1|Szablon|Szablůny}} użyte na tyj zajće:',
-'templatesusedsection' => '{{PLURAL:$1|Szablon|Szablůny}} użyte w tyj tajli:',
+'templatesused' => '{{PLURAL:$1|Muster|Mustry}} użyte na tyj zajće:',
+'templatesusedpreview' => '{{PLURAL:$1|Muster|Mustry}} użyte na tyj zajće:',
+'templatesusedsection' => '{{PLURAL:$1|Szablon|Szablůny}} użyte we tyj tajli:',
'template-protected' => '(zawrzity uod sprowjańo)',
'template-semiprotected' => '(tajlowo zawarte)',
-'hiddencategories' => 'Ta zajta je {{PLURAL:$1|w jednyj schrůńunyj katygoryji|we $1 schrůńunych katygoryjach}}:',
+'hiddencategories' => 'Ta zajta je {{PLURAL:$1|we jednyj schrůńunyj katygoryji|we $1 schrůńunych katygoryjach}}:',
'nocreatetext' => 'Na {{GRAMMAR:MS.lp|{{SITENAME}}}} twořyńy nowych zajtůw uograńičůno.
Možeš sprowjać te co juž sům, abo [[Special:UserLogin|zalogować śe, abo zauožyć konto]].',
-'nocreate-loggedin' => 'Ńy moš uprowńyń do twořyńo nowych zajtůw.',
+'nocreate-loggedin' => 'Ńy mosz uprowńyń do tworzyńo nowych zajtůw.',
'sectioneditnotsupported-title' => 'Sprowjańy tajli ńymogebne',
'sectioneditnotsupported-text' => 'Sprowjańy tajli ńymogebne na tyj zajće.',
-'permissionserrors' => 'Felerne uprowńyńa',
-'permissionserrorstext' => 'Ńy moš uprowńyń do takij akcyje {{PLURAL:$1|skuli tego, co:|bestůž, co:}}',
+'permissionserrors' => 'Felerne uprawńyńo',
+'permissionserrorstext' => 'Ńy mosz uprowńyń do takij akcyje {{PLURAL:$1|skuli tego, co:|bestůż, co:}}',
'permissionserrorstext-withaction' => 'Ńy mogesz $2, ze {{PLURAL:$1|takigo powodu|takich powodůw}}:',
'recreate-moveddeleted-warn' => "'''ůostrzeżyńy: Wćepujesz samo zajta, kery bůu poprzedńo wyćepany.'''
Zastanůw śe, czy powinno śe go sam wćepywać.
Rejer wyćepań tyj zajty je podany půńiżej, cobyś mioł wygoda:",
-'moveddeleted-notice' => 'Ta zajta zostoua wyćepńynto. Rejer wyćepań tyj zajty je pokozany půńižyj.',
+'moveddeleted-notice' => 'Ta zajta zostoła wyćepńynto. Rejer wyćepań tyj zajty je pokozany půńiżyj.',
'log-fulllog' => 'Ukoż rejer',
'edit-hook-aborted' => 'Sprowjyńy štopńynte skiž hoka.
Ńy je wjadůme pů jakymu.',
Legynda: (akt.) - růżńice s wersyjům bjeżůncům, (poprz.) - růżńice s wersyjům poprzedzajůncům, d - drobne zmjany',
'history-fieldset-title' => 'Przeglůndej gyszichta',
'history-show-deleted' => 'Jyno wyćepane',
-'histfirst' => 'uod počůnku',
-'histlast' => 'uod uostatka',
+'histfirst' => 'nojstarsze',
+'histlast' => 'nojnowsze',
'historysize' => '({{PLURAL:$1|1 bajt|$1 bajty|$1 bajtůw}})',
'historyempty' => '(blank)',
'revdelete-hide-user' => 'Schrůń mjano użytkowńika/adres IP',
'revdelete-hide-restricted' => 'Schrůń informacyje zarůwno przed admińistratorůma jak i przed inkszymi',
'revdelete-radio-same' => '(byz pomjyń)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Ńy',
+'revdelete-radio-set' => 'Zakryty',
+'revdelete-radio-unset' => 'Widoczny',
'revdelete-suppress' => 'Schrůń informacyje zarůwno před admińistratorůma jak i před inkšymi',
'revdelete-unsuppress' => 'Usůń uograńičyńo lo wćepanej nazod historyje pomjyńań',
'revdelete-log' => 'Czymu:',
'preferences' => 'Preferyncyje',
'mypreferences' => 'Preferyncyje',
'prefs-edits' => 'Liczba sprowjyń:',
-'prefsnologin' => 'Ńy ježeś zalůgowany',
-'prefsnologintext' => 'Muśiš śe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} zalůgować]</span> coby štalować swoje preferyncyje.',
'changepassword' => 'Zmjana hasua',
'prefs-skin' => 'Skůrka',
'skin-preview' => 'podglůnd',
'prefs-files' => 'Pliki',
'youremail' => 'E-brif:',
'username' => '{{GENDER:$1|Mjano używocza}}:',
-'uid' => 'ID używocza:',
+'uid' => '{{GENDER:$1|ID używocza}}:',
'prefs-memberingroups' => 'Należy do {{PLURAL:$1|grupy|grup:}}',
'prefs-registration' => 'Czas twůrzyńa kůnta:',
'yourrealname' => 'Prawdźiwe mjano',
'rc_categories' => 'Uůgrańič do katygorii (oddźelej za půmocům "|")',
'rc_categories_any' => 'Wšyskie',
'newsectionsummary' => '/* $1 */ nowo tajla',
-'rc-enhanced-expand' => 'Pokož Å¡Ä\8dygůuy (wymogo JavaScript)',
+'rc-enhanced-expand' => 'Pokoż szczygůÅ\82y',
'rc-enhanced-hide' => 'Schrůń detajle',
# Recent changes linked
'emailuserfooter' => 'Wjadůmość e-brif zostoła wysłano s {{GRAMMAR:D.lp|{{SITENAME}}}} ku $2 bez $1 s użyćym „Wyślij e-brif ku tym użytkowńikowi”.',
# Watchlist
-'watchlist' => 'Pozorlista',
-'mywatchlist' => 'Mojo pozůrlista',
+'watchlist' => 'Pozůrlista',
+'mywatchlist' => 'Pozůrlista',
'watchlistfor2' => 'Lo $1 ($2)',
'nowatchlist' => 'Ńy ma žodnych pozycyji na liśće zajtůw, na kere dowoš pozůr.',
'watchlistanontext' => '$1 coby uobejřeć abo sprowjać elymynty listy zajtůw, na kere dowoš pozůr',
'blanknamespace' => '(przodńo)',
# Contributions
-'contributions' => 'Ajnzac sprowjorza',
+'contributions' => 'Ajnzac {{GENDER:$1|używocza|używoczki}}',
'contributions-title' => 'Wkłod użytkowńika $1',
-'mycontris' => 'Uody mje sprowjane',
-'contribsub2' => 'Do užytkowńika $1 ($2)',
+'mycontris' => 'Sprowjyńa',
+'contribsub2' => 'Lo {{GENDER:$3|używocza|używoczki}} $1 ($2)',
'nocontribs' => 'Brak pomjyńań uodpowjadajůncych tym kryterjům.',
-'uctop' => '(uostatnio)',
+'uctop' => '(teroźńo)',
'month' => 'Uod mjeśůnca (i downiyjše):',
'year' => 'Uod roku (i dowńijše):',
'whatlinkshere-hideredirs' => '$1 {{PLURAL:$1|punkńyńćy|punkńyńćo|puńkńyńć}}',
'whatlinkshere-hidetrans' => '$1 {{PLURAL:$1|dokuplowańy|dokuplowańo|dokuplowań}}',
'whatlinkshere-hidelinks' => '$1 {{PLURAL:$1|link|linki|linkůw}}',
-'whatlinkshere-hideimages' => '$1 linki s grafik',
+'whatlinkshere-hideimages' => '$1 linki ze plikůw',
'whatlinkshere-filters' => 'Filtery',
# Block/unblock
'allmessagesdefault' => 'Tekst důmyślny',
'allmessagescurrent' => 'Tekst uobecny',
'allmessagestext' => 'Uoto lista wšyjstkych kůmůńikatůw systymowych dostympnych w přestřyńi mjan MedjaWiki.
-Uodwjydź [//www.mediawiki.org/wiki/Localisation Tuůmačyńy MediaWiki] a tyž [//translatewiki.net translatewiki.net] kejbyś chćou učestńičyć w tuůmačyńu uoprůgramowańo MediaWiki.',
+Uodwjydź [https://www.mediawiki.org/wiki/Localisation Tuůmačyńy MediaWiki] a tyž [//translatewiki.net translatewiki.net] kejbyś chćou učestńičyć w tuůmačyńu uoprůgramowańo MediaWiki.',
'allmessagesnotsupportedDB' => "Ta zajta ńy može być užyta, bez tůž co zmjynna '''\$wgUseDatabaseMessages''' je wůuůnčůno.",
# Thumbnails
'file-info-size' => '$1 × $2 pikselůw, wjelgość plika: $3, zorta MIME: $4',
'file-nohires' => 'Wjynksze wymjyry ńy sům dostympne',
'svg-long-desc' => 'Plik SVG, nůminalńe $1 × $2 pixelůw, rozmior plika: $3',
-'show-big-image' => 'Pełne wymjyry',
+'show-big-image' => 'Pjyrwy wymjor',
# Special:NewFiles
'newimages' => 'Galerjo nowych uobrozkůw',
'exif-colorspace' => 'Přestřyń kolorůw',
'exif-componentsconfiguration' => 'Značyńy skuadowych',
'exif-compressedbitsperpixel' => 'Skůmpresowanych bitůw na piksel',
-'exif-pixelydimension' => 'Prawiduowa šyrokość uobrozu',
-'exif-pixelxdimension' => 'Prawiduowo wysokość uobrozu',
+'exif-pixelydimension' => 'Prawidłowa szyrzka uobrozu',
+'exif-pixelxdimension' => 'Prawidłowo wyżka uobrozu',
'exif-usercomment' => 'Kůmyntoř užytkowńika',
'exif-relatedsoundfile' => 'Powjůnzany plik audjo',
'exif-datetimeoriginal' => 'Data i čas utwořyńo uoryginouu',
'exif-exposureprogram' => 'Progrům ekspozycyji',
'exif-spectralsensitivity' => 'Čuuość widmowa',
'exif-isospeedratings' => 'Šybkość aparatu zgodńy ze ISO12232',
-'exif-shutterspeedvalue' => 'Šybkość migawki',
-'exif-aperturevalue' => 'Přisuůna uobjektywu',
+'exif-shutterspeedvalue' => 'Wartkość migawki',
+'exif-aperturevalue' => 'Przisłůna uobjektywu',
'exif-brightnessvalue' => 'Jasność',
'exif-exposurebiasvalue' => 'Uodchylyńy ekspozycyji',
'exif-maxaperturevalue' => 'Maksymalno wartość přisuůny',
'exif-orientation-3' => 'uobroz uobrůcůny uo 180°',
'exif-orientation-4' => 'uodbiće we źřadle w pjůńy',
'exif-orientation-5' => 'uobroz uobrůcůny uo 90° přećiwńy do ruchu wskazůwek zygora i uodbiće we źřadle w pjůńy',
-'exif-orientation-6' => 'uobroz uobrůcůny uo 90° zgodńy s ruchym wskazůwek zygora',
+'exif-orientation-6' => 'Uobroz uobrůcůny uo 90° przećiwńy lo ruchu wskazůwek zygora',
'exif-orientation-7' => 'uobrůt uo 90° zgodńy ze wskazůwkůma zygora i uodbiće we źřadle w pjůńy',
-'exif-orientation-8' => 'uobrůt uo 90° přećiwńy do wskazůwek zygora',
+'exif-orientation-8' => 'uobrůt uo 90° zgodńy do ruchu wskazůwek zygora',
'exif-planarconfiguration-1' => 'format masywny',
'exif-planarconfiguration-2' => 'format powjeřchńowy',
# External editor support
'edit-externally' => 'Sprowjej tyn plik bez eksterno aplikacyjo',
-'edit-externally-help' => '(Zobocz [//www.mediawiki.org/wiki/Manual:External_editors instrukcyje sztalowańo eksternych edytorůw], kaj je uo tym wjyncy naszkryflůne)',
+'edit-externally-help' => '(Zobocz [https://www.mediawiki.org/wiki/Manual:External_editors instrukcyje sztalowańo eksternych edytorůw], kaj je uo tym wjyncy naszkryflůne)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'do kupy',
'table_pager_empty' => 'Brak wynikůw',
# Auto-summaries
-'autosumm-blank' => 'POZŮR! Usůńjyńće treśći (zajta pozostoua pusto)!',
+'autosumm-blank' => 'POZŮR! Usůńjyńće treśći (zajta pozostoła pusto)!',
'autosumm-replace' => 'POZŮR! Zastůmpjyńy treśći hasua bardzo krůtkym tekstym: „$1”',
'autoredircomment' => 'Překerowańy do [[$1]]',
-'autosumm-new' => 'Nowo zajta: $1',
+'autosumm-new' => 'Wćepano nowo zajta: "$1"',
# Live preview
'livepreview-loading' => 'Trwo uadowańy…',
'watchlistedit-noitems' => 'Twoja lista artikli na kere dowoš pozůr je pusto.',
'watchlistedit-normal-title' => 'Sprowjej lista zajtůw na kere dowom pozůr',
'watchlistedit-normal-legend' => 'Wyćep zajty s listy artikli na kere dowoš pozůr',
-'watchlistedit-normal-explain' => 'PůÅ\84ižy moÅ¡ lista artikli na kere dowoÅ¡ pozůr.
-Coby wyćepać s ńij jako zajta,zaznač pole při ńij i naćiś knefel "Wyćep zaznačůne pozycyje".
-MožeÅ¡ tyž skoÅ\99istaÄ\87 ze [[Special:EditWatchlist/raw|tekstowygo edytora listy artikli na kere dowoÅ¡ pozůr]].',
+'watchlistedit-normal-explain' => 'PůÅ\84iżyj mosz lista artikli na kere dowosz pozůr.
+Coby wyćepać z ńij jako zajta, zaznocz pole przi ńij i naćiś knefel „{{int:Watchlistedit-normal-submit}}”.
+Możesz tyż skorzistaÄ\87 ze [[Special:EditWatchlist/raw|tekstowygo sprowjorza listy artikli na kere dowosz pozůr]].',
'watchlistedit-normal-submit' => 'Wyćep s listy',
'watchlistedit-normal-done' => 'Z Twoi listy artikli na kere dowoš pozůr {{PLURAL:$1|zostoua wyćepano 1 zajta|zostouy wyćepane $1 zajty|zostouo wyćepanych $1 zajtůw}}:',
'watchlistedit-raw-title' => 'Tekstowy edytor listy artikli na kere dowoš pozůr',
# Special:SpecialPages
'specialpages' => 'Szpecjalne zajty',
-'specialpages-note' => '----
-* Ekstra zajty uogůlńy dostympne.
+'specialpages-note' => '* Ekstra zajty uogůlńy dostympne.
* <strong class="mw-specialpagerestricted">Ekstra zajty do kerych dostymp je uograńiczůny.</strong>',
'specialpages-group-maintenance' => 'Raporty kůnserwacyjne',
'specialpages-group-other' => 'Inkše ekstra zajty',
-'specialpages-group-login' => 'Lůgowańy / rejerowańy',
+'specialpages-group-login' => 'Logowańy / regisztrowańy',
'specialpages-group-changes' => 'Pomjyńane na uostatku a rejery',
'specialpages-group-media' => 'Pliki',
'specialpages-group-users' => 'Użytkowńiki i uprawńyńa',
'specialpages-group-highuse' => 'Zajty čynsto užywane',
-'specialpages-group-pages' => 'Zajty',
+'specialpages-group-pages' => 'Listy zajt',
'specialpages-group-pagetools' => 'Nořyńdźa zajtůw',
-'specialpages-group-wiki' => 'Informacyje a nořyńdźa wiki',
+'specialpages-group-wiki' => 'Informacyje a werkcojgi wiki',
'specialpages-group-redirects' => 'Ekstra zajty, kere kerujům',
'specialpages-group-spam' => 'Nořyńdźa do wyćepywanio spamu',
'revdelete-unrestricted' => 'wycofej uograničyńo do administratorůw',
'rightsnone' => 'podstawowo',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'OK',
+
);
'ok' => 'சரி',
'retrievedfrom' => '"$1" இருந்து மீள்விக்கப்பட்டது',
'youhavenewmessages' => 'உங்களுக்குப் $1 உள்ளன ($2).',
-'newmessageslink' => 'புதிய செய்திகள்',
-'newmessagesdifflink' => 'கடைசி மாற்றம்',
'youhavenewmessagesfromusers' => 'உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).',
'youhavenewmessagesmanyusers' => 'உங்களுக்கு பல பயனர்களிடமிருந்து $1 பதிய செய்திகள் உள்ளன ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ஒரு புதிய செய்தி|புதிய செய்திகள்}}',
'preferences' => 'விருப்பங்கள்',
'mypreferences' => 'விருப்பத்தேர்வுகள்',
'prefs-edits' => 'தொகுப்புகளின் எண்ணிக்கை:',
-'prefsnologin' => 'புகுபதிகை செய்யப்படவில்லை',
-'prefsnologintext' => 'பயனர் விருப்பத்தேர்வுகளை அமைப்பதற்கு நீங்கள் <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} புகுபதிகை ]</span> செய்திருக்க வேண்டும்.',
'changepassword' => 'கடவுச்சொல்லை மாற்று',
'prefs-skin' => 'முகப்புறை',
'skin-preview' => 'முன்தோற்றம்',
'prefs-rendering' => 'தோற்றம்',
'saveprefs' => 'சேமி',
'resetprefs' => 'சேமிக்காத மாற்றங்கள் நீக்குக',
-'restoreprefs' => 'à®\8eலà¯\8dலà¯\8bà®°à¯\81à®\95à¯\8dà®\95à¯\81à®®à¯\8d பà¯\8aதà¯\81வான வà®\9fிவமà¯\88பà¯\8dபà¯\88தà¯\8d திரà¯\81à®®à¯\8dபà®\95à¯\8dà®\95à¯\8aணà¯\8dà®\9fà¯\81வரவà¯\81à®®à¯\8d (à®\8eலà¯\8dலா பிறிவுகளிலும்).',
+'restoreprefs' => 'à®\8eலà¯\8dலà¯\8bà®°à¯\81à®\95à¯\8dà®\95à¯\81à®®à¯\8d பà¯\8aதà¯\81வான வà®\9fிவமà¯\88பà¯\8dபà¯\88தà¯\8d திரà¯\81à®®à¯\8dபà®\95à¯\8dà®\95à¯\8aணà¯\8dà®\9fà¯\81வரவà¯\81à®®à¯\8d (à®\8eலà¯\8dலா பிரிவுகளிலும்).',
'prefs-editing' => 'தொகுத்தல்',
'rows' => 'நிரைகள் (கிடை வரிசைகள்):',
'columns' => 'நிரல்கள்',
'recentchanges-label-minor' => 'இது ஒரு சிறு தொகுப்பு',
'recentchanges-label-bot' => 'இந்த தொகுப்பானது ஒரு தானியங்கியால் செய்யப்பட்டதாகும்',
'recentchanges-label-unpatrolled' => 'இந்த தொகுப்பு இன்னும் ரோந்திடப்படவில்லை',
+'recentchanges-legend-newpage' => '$1 - புதிய பக்கம்',
'rcnote' => "கீழே காணப்படுவது $4 ஆம் தேதி $5 மணிக்கு் உள்ளபடி கடைசி {{PLURAL:$2|24 மணிகளில்|'''$2''' நாட்களில்}} செய்யப்பட்ட {{PLURAL:$1|'''ஒரு''' மாற்றம்|'''$1''' கடைசி மாற்றங்கள்}} ஆகும்.",
'rcnotefrom' => "கீழே காணப்படுவது '''$2''' இலிருந்து செய்யப்பட்ட மாற்றங்களாகும் ('''$1''' வரைக் காட்டப்பட்டுள்ளது).",
'rclistfrom' => '$1 தொடக்கம் செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்',
'allmessagesdefault' => 'இயல்பிருப்பு உரை',
'allmessagescurrent' => 'தற்போதைய உரை',
'allmessagestext' => 'இது மீடியாவிக்கி பெயர்வெளியிலுள்ள எல்லா முறைமை தகவல்களினதும் பட்டியலாகும்.
-மொழிபெயர்ப்பில் உதவ விரும்பின் அருள்கூர்ந்து [//translatewiki.net பீட்டாவிக்கி], [//www.mediawiki.org/wiki/Localisation மீடியாவிக்கி மொழியாக்க] தளங்களுக்குச் செல்லவும்.',
+மொழிபெயர்ப்பில் உதவ விரும்பின் அருள்கூர்ந்து [//translatewiki.net பீட்டாவிக்கி], [https://www.mediawiki.org/wiki/Localisation மீடியாவிக்கி மொழியாக்க] தளங்களுக்குச் செல்லவும்.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' முடக்கப்பட்டுள்ளப் படியால் இப்பக்கததை பயன்படுத்த முடியாது.",
'allmessages-filter-legend' => 'வடிகட்டி',
'allmessages-filter' => 'தனிப்பயனாக்கத்தின்படி வடிகட்டு.',
'tooltip-undo' => '"பின்வாங்கு" என்பது முன்பு செய்த தொகுப்புக்களை இல்லாது செய்கிறது. மேலும் தாங்கள் செய்த தொகுப்பினை முன்தோற்ற நிலைக்கு கொண்டுவந்து காட்டும். அது தங்களுக்குச் சிறுகுறிப்புப் பகுதியில் அதற்கான காரணத்தைக் கூற அனுமதிக்கிறது.',
'tooltip-preferences-save' => 'விருப்பங்களை சேமி',
'tooltip-summary' => 'குறுகிய சுருக்கத்தை உள்ளிடவும்.',
-'tooltip-iwiki' => '$1 - $2',
+'interlanguage-link-title' => '$1 - $2',
# Metadata
'notacceptable' => 'உங்களது சேவையாளர் வாசிக்க கூடிய விதத்தில் இந்த விக்கியால தரவுகளை வழங்க முடியாது.',
'file-nohires' => 'இதைவிட அளவில் பெரிய படிமம் இல்லை.',
'svg-long-desc' => 'SVG கோப்பு, பெயரளவில் $1 × $2 பிக்சல்கள், கோப்பு அளவு: $3',
'svg-long-error' => 'செல்லாத SVG கோப்பு: $1',
-'show-big-image' => 'à®®à¯\81à®´à¯\81 à®\85ளவிலான பà®\9fிமமà¯\8d',
+'show-big-image' => 'à®®à¯\82லà®\95à¯\8dà®\95à¯\8bபà¯\8dபà¯\81',
'show-big-image-preview' => 'இந்த முன்னோட்டத்தின் அளவு: $1 .',
'show-big-image-other' => 'மற்ற {{PLURAL:$2|பிரிதிறன்|பிரிதிறன்கள்}}: $1 .',
'show-big-image-size' => '$1 × $2 படப்புள்ளிகள்',
# External editor support
'edit-externally' => 'இக்கோப்பை வெளி மென்பொருள் கொண்டு தொகுக்க',
-'edit-externally-help' => 'மேலும் தகவல்களுக்கு [//www.mediawiki.org/wiki/Manual:External_editors அமைப்பு அறிவுறுத்தல்கள்] பக்கத்தைப் பார்க்கவும்.',
+'edit-externally-help' => 'மேலும் தகவல்களுக்கு [https://www.mediawiki.org/wiki/Manual:External_editors அமைப்பு அறிவுறுத்தல்கள்] பக்கத்தைப் பார்க்கவும்.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'அனைத்து',
'version-hook-subscribedby' => 'பயன்பாடு',
'version-version' => '(பதிப்பு $1)',
'version-license' => 'அனுமதி',
-'version-poweredby-credits' => "இந்த் விக்கி '''[//www.mediawiki.org/ MediaWiki]''' இதன் மூலம் வழங்கப்படுகிறது, காப்புரிமை © 2001-$1 $2.",
+'version-poweredby-credits' => "இந்த் விக்கி '''[https://www.mediawiki.org/ MediaWiki]''' இதன் மூலம் வழங்கப்படுகிறது, காப்புரிமை © 2001-$1 $2.",
'version-poweredby-others' => 'பிறர்',
'version-license-info' => 'மீடியாவிக்கியானது இலவச மென்பொருள்.இதை நீங்கள் மற்றவர்களுக்கு கொடுப்பது அல்லது திருத்தம் செய்வது இலவச மென்பொருள் அறக்கட்டளை வழங்கிய GNUவின் பொது உரிம விதிகளுக்குட்பட்டது;உரிமத்தின் இரண்டாவது பதிப்பு அல்லது அதற்கு மேற்பட்ட பதிப்பு (உங்கள் விருப்பத்திற்க்கேற்றவாறு).
மீடியா உபயோகப்படக்கூடியது என்ற நம்பிக்கையில் வெளியிடப்பட்டுள்ளது, ஆனால் இதற்க்கு உத்தரவாதம் கிடையாது.மேலும் வணிகத்தன்மைக்கான அல்லது ஒரு குறிப்பிட்ட செயலுக்காகவும் உத்தரவாதம் கிடையாது.மேலும் விவரங்களுக்கு GNU பொது உரிமத்தை பார்க்கவும்.
# Special:SpecialPages
'specialpages' => 'சிறப்புப் பக்கங்கள்',
-'specialpages-note' => '----
- * சராசரி சிறப்புப் பக்கங்கள்.
+'specialpages-note' => ' * சராசரி சிறப்புப் பக்கங்கள்.
* <span class="mw-specialpagerestricted">வரையறுத்த சிறப்புப் பக்கங்கள்.</span>',
'specialpages-group-maintenance' => 'பராமரிப்பு அறிக்கைகள்',
'specialpages-group-other' => 'ஏனைய சிறப்புப் பக்கங்கள்',
'duration-centuries' => '$1 {{PLURAL:$1|நூற்றாண்டு|நூற்றாண்டுகள்}}',
'duration-millennia' => '$1 {{PLURAL:$1|ஆயிரம் ஆண்டு|ஆயிரம் ஆண்டுகள்}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'வார்ப்புருக்களை விரிவாக்கு',
+'expand_templates_input' => 'உள்ளீட்டு உரை:',
+'expand_templates_output' => 'முடிவுகள்',
+'expand_templates_ok' => 'ஆம்',
+'expand_templates_remove_comments' => 'கருத்துரைகளை நீக்கு',
+'expand_templates_preview' => 'முன்தோற்றம்',
+
);
'ok' => 'ಸರಿ',
'retrievedfrom' => '"$1" ರ್ದ್ ದೆತ್ತಿನಂಚಿನ',
'youhavenewmessages' => 'ಇರೆಗ್ $1 ಉಂಡು ($2).',
-'newmessageslink' => 'ಪೊಸ ಸಂದೇಶಲು',
-'newmessagesdifflink' => 'ಕಡೆತ ಬದಲಾವಣೆ',
'youhavenewmessagesmulti' => '$1 ಡ್ ಇರೆಗ್ ಪೊಸ ಸಂದೇಶೊಲು ಉಂಡು',
'editsection' => 'ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
'editold' => 'ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
# External editor support
'edit-externally' => 'ಬಾಹ್ಯ(ಪಿದಯಿದ) ತಂತ್ರಾಶೊನು ಉಪಯೋಗ ಮಲ್ತ್’ದ್ ಇಂದೆನ್ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
-'edit-externally-help' => 'ನನಲ ಮಾಹಿತಿಗ್ [//www.mediawiki.org/wiki/Manual:External_editors ಸೆಟ್-ಅಪ್ ನಿರ್ದೇಶನೊಲೆನ್] ತೂಲೆ.',
+'edit-externally-help' => 'ನನಲ ಮಾಹಿತಿಗ್ [https://www.mediawiki.org/wiki/Manual:External_editors ಸೆಟ್-ಅಪ್ ನಿರ್ದೇಶನೊಲೆನ್] ತೂಲೆ.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ಪೂರ',
'tog-minordefault' => 'ప్రత్యేకంగా తెలుపనంతవరకూ నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
'tog-previewontop' => 'వ్యాసం మార్పుల మునుచూపు సవరించు పెట్టె పైన చూపు',
'tog-previewonfirst' => 'మొదటి దిద్దుబాటు చేసినపుడు వ్యాసపు మునుచూపు చూపించు',
-'tog-nocache' => 'విహారిణిలో పుటల స్థానికనకలును(కాషింగు) అచేతనం',
+'tog-nocache' => 'విహారిణిలో పుటల స్థానికనకలును(కాషింగు) అచేతనం చేయి',
'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీ లేదా దస్త్రం మారినపుడు నాకు ఈ-మెయిలు పంపు',
'tog-enotifusertalkpages' => 'నా చర్చా పేజీలో మార్పులు జరిగినపుడు నాకు ఈ-మెయిలు పంపు',
'tog-enotifminoredits' => 'పేజీలు మరియు దస్త్రాలకు జరిగే చిన్న మార్పులకు కూడా నాకు ఈ-మెయిలును పంపు',
'ok' => 'సరే',
'retrievedfrom' => '"$1" నుండి వెలికితీశారు',
'youhavenewmessages' => 'మీకు $1 ఉన్నాయి ($2).',
-'newmessageslink' => 'కొత్త సందేశాలు',
-'newmessagesdifflink' => 'చివరి మార్పు',
'youhavenewmessagesfromusers' => 'మీకు {{PLURAL:$3|మరో వాడుకరి|$3 వాడుకరుల}} నుండి $1 ($2).',
'youhavenewmessagesmanyusers' => 'మీకు చాలా వాడుకరుల నుండి $1 ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ఒక కొత్త సందేశం వచ్చింది|కొత్త సందేశాలు ఉన్నాయి}}',
'titleprotected' => "సభ్యులు [[User:$1|$1]] ఈ పేజీని సృష్టించనివ్వకుండా నిరోదిస్తున్నారు.
అందుకు ఇచ్చిన కారణం: ''$2''.",
'exception-nologin' => 'లోనికి ప్రవేశించిలేరు',
-'exception-nologin-text' => 'à°\88 విà°\95à±\80à°²à±\8b à°\88 à°ªà±\87à°\9cà±\80 à°²à±\87దా పనిà°\95à°¿ à°®à±\80à°°à±\81 తపà±\8dపనిసరిà°\97à°¾ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°¿à°µà±\81à°\82డాలి.',
+'exception-nologin-text' => 'à°\88 à°ªà±\87à°\9cà±\80ని à°\9aà±\82డడానిà°\95à°¿ à°²à±\87దా à°\88 à°\9aà°°à±\8dయనà±\81 à°\9aà±\86à°¯à±\8dయడానిà°\95à°¿ దయà°\9aà±\87సి [[Special:Userlogin|à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aà°\82à°¡à°¿]].',
# Virus scanner
'virus-badscanner' => "తప్పుడు స్వరూపణం: తెలియని వైరస్ స్కానర్: ''$1''",
'yourname' => 'వాడుకరి పేరు:',
'userlogin-yourname' => 'వాడుకరి పేరు',
'userlogin-yourname-ph' => 'మీ వాడుకరి పేరును ఇవ్వండి',
+'createacct-another-username-ph' => 'మీ వాడుకరి పేరును ప్రవేశపెట్టండి',
'yourpassword' => 'సంకేతపదం:',
'userlogin-yourpassword' => 'సంకేతపదం',
'userlogin-yourpassword-ph' => 'మీ సంకేతపదాన్ని ఇవ్వండి',
'gotaccount' => 'ఇప్పటికే మీకు ఖాతా ఉందా? $1.',
'gotaccountlink' => 'ప్రవేశించండి',
'userlogin-resetlink' => 'మీ ప్రవేశ వివరాలను మరచిపోయారా?',
-'userlogin-resetpassword-link' => 'à°®à±\80 దాà°\9fà±\81మాà°\9fà°¨à±\81 మారà±\8dà°\9aà±\81à°\95à±\8bà°\82à°¡à°¿',
+'userlogin-resetpassword-link' => 'à°®à±\80 à°¸à°\82à°\95à±\87తపదానà±\8dని మరà±\8dà°\9aà°¿à°ªà±\8bయారా?',
'helplogin-url' => 'Help:ప్రవేశించడం',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ప్రవేశించడానికి సహాయం]]',
'createacct-join' => 'మీ సమాచారాన్ని క్రింద ఇవ్వండి.',
* అనుచితమైన వ్యక్తిగత సమాచారం
* "ఇంటి చిరునామాలు, టెలిఫోను నంబర్లు, సోషల్ సెక్యూరిటీ నంబర్లు, వగైరాలు"',
'revdelete-legend' => 'సందర్శక నిబంధనలు అమర్చు',
-'revdelete-hide-text' => 'à°\95à±\82à°°à±\8dà°ªà±\81 పాఠ్యం',
+'revdelete-hide-text' => 'à°ªà±\81à°¨à°\83పరిశà±\80లన పాఠ్యం',
'revdelete-hide-image' => 'ఫైలులోని విషయాన్ని దాచు',
'revdelete-hide-name' => 'చర్యను, లక్ష్యాన్నీ దాచు',
'revdelete-hide-comment' => 'దిద్దుబాటు వ్యాఖ్యను దాచు',
'preferences' => 'అభిరుచులు',
'mypreferences' => 'అభిరుచులు',
'prefs-edits' => 'దిద్దుబాట్ల సంఖ్య:',
-'prefsnologin' => 'లాగిన్ అయిలేరు',
-'prefsnologintext' => 'వాడుకరి అభిరుచులను మార్చుకోడానికి, మీరు <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} లోనికి ప్రవేశించి]</span> ఉండాలి.',
'changepassword' => 'సంకేతపదాన్ని మార్చండి',
'prefs-skin' => 'అలంకారం',
'skin-preview' => 'మునుజూపు/సరిచూడు',
'recentchanges-label-minor' => 'ఇది ఒక చిన్న మార్పు',
'recentchanges-label-bot' => 'ఈ మార్పును ఒక బాటు చేసింది',
'recentchanges-label-unpatrolled' => 'ఈ దిద్దుబాటు మీద నిఘా లేదు',
+'recentchanges-legend-newpage' => '$1 - కొత్త పేజీ',
'rcnote' => "$4 నాడు $5 సమయానికి, గత {{PLURAL:$2|ఒక్క రోజులో|'''$2''' రోజులలో}} చేసిన చివరి {{PLURAL:$1|ఒక్క మార్పు కింద ఉంది|'''$1''' మార్పులు కింద ఉన్నాయి}}.",
'rcnotefrom' => '<b>$2</b> నుండి జరిగిన మార్పులు (<b>$1</b> వరకు చూపబడ్డాయి).',
'rclistfrom' => '$1 నుండి జరిగిన మార్పులను చూపించు',
'allmessagesdefault' => 'అప్రమేయ సందేశపు పాఠ్యం',
'allmessagescurrent' => 'ప్రస్తుత పాఠ్యం',
'allmessagestext' => 'మీడియావికీ పేరుబరిలో ఉన్న అంతరవర్తి సందేశాల జాబితా ఇది.
-సాధారణ మీడియావికీ స్థానికీకరణకి మీరు తోడ్పడాలనుకుంటే, దయచేసి [//www.mediawiki.org/wiki/Localisation మీడియావికీ స్థానికీకరణ] మరియు [//translatewiki.net ట్రాన్స్‌లేట్‌వికీ.నెట్] సైట్లను చూడండి.',
+సాధారణ మీడియావికీ స్థానికీకరణకి మీరు తోడ్పడాలనుకుంటే, దయచేసి [https://www.mediawiki.org/wiki/Localisation మీడియావికీ స్థానికీకరణ] మరియు [//translatewiki.net ట్రాన్స్‌లేట్‌వికీ.నెట్] సైట్లను చూడండి.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' అన్నది అచేతనం చేసి ఉన్నందువల్ల ఈ పేజీని వాడలేరు.",
'allmessages-filter-legend' => 'వడపోత',
'allmessages-filter' => 'కస్టమైజేషను స్థితిని బట్టి వడకట్టు:',
# External editor support
'edit-externally' => 'బయటి అప్లికేషను వాడి ఈ ఫైలును మార్చు',
-'edit-externally-help' => '(మరింత సమాచారం కొరకు [//www.mediawiki.org/wiki/Manual:External_editors సెటప్ సూచనల]ని చూడండి)',
+'edit-externally-help' => '(మరింత సమాచారం కొరకు [https://www.mediawiki.org/wiki/Manual:External_editors సెటప్ సూచనల]ని చూడండి)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'అన్నీ',
'version-hook-subscribedby' => 'ఉపయోగిస్తున్నవి',
'version-version' => '(సంచిక $1)',
'version-license' => 'లైసెన్సు',
-'version-poweredby-credits' => "ఈ వికీ '''[//www.mediawiki.org/ మీడియావికీ]'''చే శక్తిమంతం, కాపీహక్కులు © 2001-$1 $2.",
+'version-poweredby-credits' => "ఈ వికీ '''[https://www.mediawiki.org/ మీడియావికీ]'''చే శక్తిమంతం, కాపీహక్కులు © 2001-$1 $2.",
'version-poweredby-others' => 'ఇతరులు',
'version-license-info' => 'మీడియావికీ అన్నది స్వేచ్ఛా మృదూపకరణం; మీరు దీన్ని పునఃపంపిణీ చేయవచ్చు మరియు/లేదా ఫ్రీ సాఫ్ట్‌వేర్ ఫౌండేషన్ ప్రచురించిన గ్నూ జనరల్ పబ్లిక్ లైసెస్సు వెర్షను 2 లేదా (మీ ఎంపిక ప్రకారం) అంతకంటే కొత్త వెర్షను యొక్క నియమాలకు లోబడి మార్చుకోవచ్చు.
# Special:SpecialPages
'specialpages' => 'ప్రత్యేక పేజీలు',
-'specialpages-note' => '----
-* మామూలు ప్రత్యేక పుటలు.
+'specialpages-note' => '* మామూలు ప్రత్యేక పుటలు.
* <strong class="mw-specialpagerestricted">నియంత్రిత ప్రత్యేక పుటలు.</strong>
* <span class="mw-specialpagecached">Cached ప్రత్యేక పుటలు (పాతబడి ఉండొచ్చు).</span>',
'specialpages-group-maintenance' => 'నిర్వహణా నివేదికలు',
'duration-centuries' => '$1 {{PLURAL:$1|శతాబ్దం|శతాబ్దాలు}}',
'duration-millennia' => '$1 {{PLURAL:$1|సహస్రాబ్దం|సహస్రాబ్దాలు}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'మూసలను విస్తరించు',
+'expand_templates_intro' => 'ఈ ప్రత్యేక పేజీ మీరిచ్చిన మూసలను పూర్తిగా విస్తరించి, చూపిస్తుంది. ఇది <nowiki>{{</nowiki>#language:...}} వంటి పార్సరు ఫంక్షన్లను, <nowiki>{{</nowiki>CURRENTDAY}} వంటి చరరాశులను(వేరియబుల్) కూడా విస్తరిస్తుంది — నిజానికి జమిలి(మీసాల) బ్రాకెట్లలో ఉన్న ప్రతీదాన్నీ ఇది విస్తరిస్తుంది. మీడియావికీ నుండి సంబంధిత పార్సరు స్టేజిని పిలిచి ఇది ఈ పనిని సాధిస్తుంది.',
+'expand_templates_title' => '{{FULLPAGENAME}} మొదలగు వాటి కొరకు సందర్భ శీర్షిక:',
+'expand_templates_input' => 'విస్తరించవలసిన పాఠ్యం:',
+'expand_templates_output' => 'ఫలితం',
+'expand_templates_xml_output' => 'XML ఔట్‌పుట్',
+'expand_templates_ok' => 'సరే',
+'expand_templates_remove_comments' => 'వ్యాఖ్యలను తొలగించు',
+'expand_templates_generate_xml' => 'XML పార్స్ ట్రీని చూపించు',
+'expand_templates_preview' => 'మునుజూపు',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Husi "$1"',
'youhavenewmessages' => 'Ó iha $1 ($2).',
-'newmessageslink' => 'mensajen foun',
-'newmessagesdifflink' => 'diferensa foun liu hotu',
'youhavenewmessagesmulti' => 'Ó iha mensajen foun sira iha $1',
'editsection' => 'edita',
'editold' => 'edita',
'exif-urgency-high' => 'Aas ($1)',
# External editor support
-'edit-externally-help' => "(Haree [//www.mediawiki.org/wiki/Manual:External_editors iha ne'e] ba informasaun barak liu)",
+'edit-externally-help' => "(Haree [https://www.mediawiki.org/wiki/Manual:External_editors iha ne'e] ba informasaun barak liu)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'hotu',
# Search suggestions
'searchsuggest-search' => 'Buka',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'OK',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Баргирифта аз "$1"',
'youhavenewmessages' => 'Шумо $1 ($2) доред.',
-'newmessageslink' => 'пайёмҳои нав',
-'newmessagesdifflink' => 'тағйироти охирин',
'youhavenewmessagesmulti' => 'Шумо номаҳои нав дар $1 доред.',
'editsection' => 'вироиш',
'editold' => 'вироиш',
'preferences' => 'Тарҷиҳот',
'mypreferences' => 'Танзимот',
'prefs-edits' => 'Шумораи вироишҳо:',
-'prefsnologin' => 'Ба систем ворид нашудаед',
-'prefsnologintext' => 'Барои танзими тарҷиҳоти корбарӣ бояд [[Special:UserLogin|вуруд ба систем шавед]].',
'changepassword' => 'Иваз намудани калимаи убур',
'prefs-skin' => 'Пӯст',
'skin-preview' => 'Пешнамоиш',
'allmessagesdefault' => 'Матни қарордодӣ',
'allmessagescurrent' => 'Матни кунунӣ',
'allmessagestext' => 'Ин феҳристи паёмҳои системавии дастрас дар фазои номи MediaWiki мебошад.
-Агар майли ҳиссагузорӣ карданро ба маҳалликунонии MediaWiki доред, пас лутан саҳифаҳои [//www.mediawiki.org/wiki/Localisation Маҳалликунонии MediaWiki] ва [//translatewiki.net translatewiki.net] нигаред.',
+Агар майли ҳиссагузорӣ карданро ба маҳалликунонии MediaWiki доред, пас лутан саҳифаҳои [https://www.mediawiki.org/wiki/Localisation Маҳалликунонии MediaWiki] ва [//translatewiki.net translatewiki.net] нигаред.',
'allmessagesnotsupportedDB' => "Аз ин саҳифа наметавон истифода бурд, чун '''\$wgUseDatabaseMessages''' ғайрифаъол гардонида шудааст.",
'allmessages-filter-legend' => 'Филтр',
'allmessages-filter-all' => 'Ҳама',
# External editor support
'edit-externally' => 'Ин файлро бо барномаи беруна таҳрир кунед',
-'edit-externally-help' => '(Барои иттилооти бештар [//www.mediawiki.org/wiki/Manual:External_editors роҳнамои танзимотро оиди вироишгарони беруна] нигаред)',
+'edit-externally-help' => '(Барои иттилооти бештар [https://www.mediawiki.org/wiki/Manual:External_editors роҳнамои танзимотро оиди вироишгарони беруна] нигаред)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ҳама',
'revdelete-unrestricted' => 'маҳдудиятҳо аз мудирон бардошта шуданд',
'rightsnone' => '(ҳеҷ)',
+# Special:ExpandTemplates
+'expandtemplates' => 'Бастдодани шаблонҳо',
+'expand_templates_intro' => 'Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ
+<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун
+<nowiki>{{</nowiki>CURRENTDAY}}—ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.
+Ин кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.',
+'expand_templates_title' => 'Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:',
+'expand_templates_input' => 'Матни вурудӣ:',
+'expand_templates_output' => 'Натиҷа',
+'expand_templates_xml_output' => 'Хуруҷӣ XML',
+'expand_templates_ok' => 'Таъйид',
+'expand_templates_remove_comments' => 'Ҳазфи тавзеҳот',
+'expand_templates_generate_xml' => 'Намоиши дарахти таҷзеҳи XML',
+'expand_templates_preview' => 'Пешнамоиш',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Bargirifta az "$1"',
'youhavenewmessages' => 'Şumo $1 ($2) dored.',
-'newmessageslink' => 'pajjomhoi nav',
-'newmessagesdifflink' => 'taƣjiroti oxirin',
'youhavenewmessagesmulti' => 'Şumo nomahoi nav dar $1 dored.',
'editsection' => 'viroiş',
'editold' => 'viroiş',
'preferences' => 'Tarçihot',
'mypreferences' => 'Tarçihoti man',
'prefs-edits' => 'Şumorai viroişho:',
-'prefsnologin' => 'Ba sistem vorid naşudaed',
'changepassword' => 'Ivaz namudani kalimai ubur',
'prefs-skin' => 'Pūst',
'skin-preview' => 'Peşnamoiş',
'allmessagesdefault' => 'Matni qarordodī',
'allmessagescurrent' => 'Matni kununī',
'allmessagestext' => 'In fehristi pajomhoi sistemaviji dastras dar fazoi nomi MediaWiki meboşad.
-Agar majli hissaguzorī kardanro ba mahallikunoniji MediaWiki dored, pas lutan sahifahoi [//www.mediawiki.org/wiki/Localisation Mahallikunoniji MediaWiki] va [//translatewiki.net translatewiki.net] nigared.',
+Agar majli hissaguzorī kardanro ba mahallikunoniji MediaWiki dored, pas lutan sahifahoi [https://www.mediawiki.org/wiki/Localisation Mahallikunoniji MediaWiki] va [//translatewiki.net translatewiki.net] nigared.',
'allmessagesnotsupportedDB' => "Az in sahifa nametavon istifoda burd, cun '''\$wgUseDatabaseMessages''' ƣajrifa'ol gardonida şudaast.",
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter-all' => 'Hama',
# External editor support
'edit-externally' => 'In fajlro bo barnomai beruna tahrir kuned',
-'edit-externally-help' => '(Baroi ittilooti beştar [//www.mediawiki.org/wiki/Manual:External_editors rohnamoi tanzimotro oidi viroişgaroni beruna] nigared)',
+'edit-externally-help' => '(Baroi ittilooti beştar [https://www.mediawiki.org/wiki/Manual:External_editors rohnamoi tanzimotro oidi viroişgaroni beruna] nigared)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'hama',
'revdelete-unrestricted' => 'mahdudijatho az mudiron bardoşta şudand',
'rightsnone' => '(heç)',
+# Special:ExpandTemplates
+'expandtemplates' => 'Bastdodani şablonho',
+'expand_templates_intro' => "In sahifai viƶa matnero darjoft karda va tamomi şablonhoi ba kor rafta dar onro ba tavri bozgaşte bast medihad. Hamcunin tobehoi taçzeh
+<nowiki>{{</nowiki>#language:...}}, va mutaƣjirhoe cun
+<nowiki>{{</nowiki>CURRENTDAY}}—ro ham bast medihad – dar voqe' taqriban har ciro ki doxili du akulot boşad.
+In kor bo sado zadani marhilai taçzehi marbut dar xudi MediaViki surat megirad.",
+'expand_templates_title' => "Unvoni mavzū', baroi {{FULLPAGENAME}} va ƣajra.:",
+'expand_templates_input' => 'Matni vurudī:',
+'expand_templates_output' => 'Natiça',
+'expand_templates_xml_output' => 'Xuruçī XML',
+'expand_templates_ok' => "Ta'jid",
+'expand_templates_remove_comments' => 'Hazfi tavzehot',
+'expand_templates_generate_xml' => 'Namoişi daraxti taçzehi XML',
+'expand_templates_preview' => 'Peşnamoiş',
+
);
'ok' => 'ตกลง',
'retrievedfrom' => 'รับข้อมูลจาก "$1"',
'youhavenewmessages' => 'คุณมี$1 ($2)',
-'newmessageslink' => 'ข้อความใหม่',
-'newmessagesdifflink' => 'การเปลี่ยนแปลงล่าสุด',
'youhavenewmessagesfromusers' => 'คุณมี $1จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
'youhavenewmessagesmanyusers' => 'คุณมี $1จากผู้ใช้หลายคน ($2)',
'newmessageslinkplural' => '$1 ข้อความใหม่',
'preferences' => 'ตั้งค่าส่วนตัว',
'mypreferences' => 'การตั้งค่า',
'prefs-edits' => 'จำนวนการแก้ไข:',
-'prefsnologin' => 'ไม่ได้ล็อกอิน',
-'prefsnologintext' => 'คุณต้อง<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ล็อกอิน]</span>ก่อนเพื่อตั้งค่าส่วนตัว',
'changepassword' => 'เปลี่ยนรหัสผ่าน',
'prefs-skin' => 'หน้าตา',
'skin-preview' => 'แสดงตัวอย่าง',
'recentchanges-label-minor' => 'เป็นการแก้ไขเล็กน้อย',
'recentchanges-label-bot' => 'การแก้ไขนี้กระทำโดยบอต',
'recentchanges-label-unpatrolled' => 'การแก้ไขนี้ยังไม่ได้ตรวจสอบ',
+'recentchanges-legend-newpage' => '$1 - หน้าใหม่',
'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง '''$2''' วันที่ผ่านมา จนถึง $5, $4",
'rcnotefrom' => "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ '''$2''' (มากสุด '''$1''' รายการ)",
'rclistfrom' => 'แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $1',
'allmessagesdefault' => 'ข้อความตามค่าตั้งต้น',
'allmessagescurrent' => 'ข้อความปัจจุบัน',
'allmessagestext' => 'นี่คือรายการข้อความของระบบที่อยู่ในเนมสเปซมีเดียวิกิ
-กรุณาอ่านหน้า[//www.mediawiki.org/wiki/Localisation เทศวิวัตน์ของมีเดียวิกิ] และ [//translatewiki.net translatewiki.net] ถ้าคุณอยากที่จะช่วยแปลข้อความของระบบมีเดียวิกิ',
+กรุณาอ่านหน้า[https://www.mediawiki.org/wiki/Localisation เทศวิวัตน์ของมีเดียวิกิ] และ [//translatewiki.net translatewiki.net] ถ้าคุณอยากที่จะช่วยแปลข้อความของระบบมีเดียวิกิ',
'allmessagesnotsupportedDB' => "หน้านี้ไม่สามารถใช้งานได้เนื่องจาก '''\$wgUseDatabaseMessages''' ถูกระงับการใช้งาน",
'allmessages-filter-legend' => 'กรอง',
'allmessages-filter' => 'กรองตามสถานะที่เลือก:',
# External editor support
'edit-externally' => 'แก้ไขไฟล์นี้โดยใช้ซอฟต์แวร์ตัวอื่น',
-'edit-externally-help' => '(ดู[//www.mediawiki.org/wiki/Manual:External_editors วิธีการตั้งค่า]สำหรับข้อมูลเพิ่มเติม)',
+'edit-externally-help' => '(ดู[https://www.mediawiki.org/wiki/Manual:External_editors วิธีการตั้งค่า]สำหรับข้อมูลเพิ่มเติม)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ทั้งหมด',
'version-hook-subscribedby' => 'สนับสนุนโดย',
'version-version' => '(รุ่น $1)',
'version-license' => 'สัญญาอนุญาต',
-'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[//www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
+'version-poweredby-credits' => "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
'version-poweredby-others' => 'ผู้อื่น',
'version-poweredby-translators' => 'ผู้แปล translatewiki.net',
'version-license-info' => 'มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาต หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)
# Special:SpecialPages
'specialpages' => 'หน้าพิเศษ',
-'specialpages-note' => '----
-* หน้าพิเศษปกติ
+'specialpages-note' => '* หน้าพิเศษปกติ
* <span class="mw-specialpagerestricted">หน้าพิเศษที่ถูกจำกัด</span>',
'specialpages-group-maintenance' => 'รายงานการเก็บกวาด',
'specialpages-group-other' => 'หน้าพิเศษอื่น ๆ',
'duration-centuries' => '$1 ศตวรรษ',
'duration-millennia' => '$1 สหัสวรรษ',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'ตกลง',
+'expand_templates_preview' => 'ตัวอย่างผลแสดง',
+
);
'ok' => 'OK',
'retrievedfrom' => '"$1" adresinden alyndy.',
'youhavenewmessages' => 'Size $1 bar. ($2)',
-'newmessageslink' => 'täze habar',
-'newmessagesdifflink' => 'soňky üýtgeşme',
'youhavenewmessagesmulti' => 'Size $1-de täze habar bar.',
'editsection' => 'redaktirle',
'editold' => 'redaktirle',
'preferences' => 'Ileri tutmalar',
'mypreferences' => 'Ileri tutmalar',
'prefs-edits' => 'Özgerdiş sany:',
-'prefsnologin' => 'Sessiýa açmansyňyz',
-'prefsnologintext' => 'Ulanyjy ileri tutmalaryny üýtgetmek üçin <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} sessiýa açmagyňyz gerek]</span>.',
'changepassword' => 'Paroly üýtget',
'prefs-skin' => 'Bezeg',
'skin-preview' => 'Deslapky syn',
'recentchanges-label-minor' => 'Bu bir ujypsyzja özgerdiş',
'recentchanges-label-bot' => 'Bu özgerdiş bir bot tarapyndan amala aşyryldy',
'recentchanges-label-unpatrolled' => 'Bu özgerdişe heniz patrullyk edilmändir',
+'recentchanges-legend-newpage' => '$1 - täze sahypa',
'rcnote' => "Aşakda $5, $4 senesinden başlap, soňky {{PLURAL:$2|1 günde|'''$2''' günde}} edilen {{PLURAL:$1|'''1''' üýtgeşme|'''$1''' üýtgeşme}} görkezilýär.",
'rcnotefrom' => '<b>$2</b> senesinden bäri edilen özgerdişler aşakda görkezilýär (<b>$1</b> sanysyna çenli).',
'rclistfrom' => '$1 senesinden bäri edilen özgerdişleri görkez',
'allmessagesdefault' => 'Gaýybana habarlaşyk teksti',
'allmessagescurrent' => 'Häzirki habarlaşyk teksti',
'allmessagestext' => 'Bu sanaw MediaWiki at giňişliginde bar bolan ulgam habarlaşyklarynyň sanawydyr.
-Umumy MediaWiki lokalizasiýasyna goşan goşmak isleýän bolsaňyz, [//www.mediawiki.org/wiki/Localisation MediaWiki lokalizasiýasy] we [//translatewiki.net translatewiki.net] sahypalaryna baryp görmegiňizi haýyş edýäris.',
+Umumy MediaWiki lokalizasiýasyna goşan goşmak isleýän bolsaňyz, [https://www.mediawiki.org/wiki/Localisation MediaWiki lokalizasiýasy] we [//translatewiki.net translatewiki.net] sahypalaryna baryp görmegiňizi haýyş edýäris.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' ýapykdygy zerarly bu sahypany ulanyp bolmaýar.",
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter' => 'Üýtgediş statusy boýunça filtr:',
# External editor support
'edit-externally' => 'Bu faýly daşarky programmalary ulanyp redaktirläň',
-'edit-externally-help' => '(Has köp maglumat üçin metadaky [//www.mediawiki.org/wiki/Manual:External_editors gurmak boýunça gollanma] sahypasyna göz aýlaň)',
+'edit-externally-help' => '(Has köp maglumat üçin metadaky [https://www.mediawiki.org/wiki/Manual:External_editors gurmak boýunça gollanma] sahypasyna göz aýlaň)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Ählisini görkez',
'version-hook-subscribedby' => 'Abuna ýazylan',
'version-version' => '(Wersiýa $1)',
'version-license' => 'Ygtyýarnama',
-'version-poweredby-credits' => "Bu wiki '''[//www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.",
+'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.",
'version-poweredby-others' => 'beýlekiler',
'version-license-info' => 'MediaWiki erkin programmadyr; MediaWiki-ni Erkin programma fondy tarapyndan çazp edilen GNU General Public License lisenziýasynyň ikini wersiýasynyň ýa-da (islegiňize görä) has täzeki bir wersiýasynyň şertlerine laýyklykda täzeden paýlap we/ýa-da üýtgedip bilersiňiz.
# Special:SpecialPages
'specialpages' => 'Ýörite sahypalar',
-'specialpages-note' => '----
-* Adaty ýörite sahypalar.
+'specialpages-note' => '* Adaty ýörite sahypalar.
* <strong class="mw-specialpagerestricted">Çäklendirilen ýörite sahypalar.</strong>',
'specialpages-group-maintenance' => 'Tehniki abatlaýyş hasabatlary',
'specialpages-group-other' => 'Başga ýörite sahypalar',
'searchsuggest-search' => 'Gözleg',
'searchsuggest-containing' => 'öz içine alýar...',
+# Special:ExpandTemplates
+'expandtemplates' => 'Şablonlary giňelt',
+'expand_templates_intro' => 'Bu ýörite sahypa birazajyk tekst alýar we onuň içindäki ähli şablonlary rekursiw giňeldýär.
+Şeýlede şu hili parser funksiýalaryny hem giňeldýär
+<nowiki>{{</nowiki>#language:…}} we şuňa meňzeş üýtgeýänleri
+<nowiki>{{</nowiki>CURRENTDAY}}—aslynda jübüt ýaýly ähli zatlary diýen ýaly.
+Ol muny degişli parser sepgidini MediaWikiniň özünden çagyryp edýär.',
+'expand_templates_title' => 'Kontekst ady, {{FULLPAGENAME}} we ş.m. üçin:',
+'expand_templates_input' => 'Giriş teksti:',
+'expand_templates_output' => 'Netije',
+'expand_templates_xml_output' => 'XML önümi',
+'expand_templates_ok' => 'Bolýar',
+'expand_templates_remove_comments' => 'Teswirleri aýyr',
+'expand_templates_remove_nowiki' => 'Netijelerde <nowiki> teglerini bökdäň',
+'expand_templates_generate_xml' => 'XML ýygnama agajyny görkez',
+'expand_templates_preview' => 'Deslapky syn',
+
);
* @author Felipe Aira
* @author Jojit fb
* @author Kaganer
+ * @author Namayan
* @author Sky Harbor
* @author tl.wikipedia.org sysops
* @author לערי ריינהארט
'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Ikinuha mula sa "$1"',
'youhavenewmessages' => 'Mayroon kang $1 ($2).',
-'newmessageslink' => 'mga bagong mensahe',
-'newmessagesdifflink' => 'huling pagbabago',
'youhavenewmessagesfromusers' => 'Mayroon kang $1 magmula sa {{PLURAL:$3|ibang tagagamit|$3 mga tagagamit}} ($2).',
'youhavenewmessagesmanyusers' => 'Mayroon kang $1 magmula sa maraming mga tagagamit ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|isang bagong mensahe|bagong mga mensahe}}',
'preferences' => 'Mga kagustuhan',
'mypreferences' => 'Mga nais',
'prefs-edits' => 'Bilang ng mga pagbabago:',
-'prefsnologin' => 'Hindi nakalagda/nakatala',
-'prefsnologintext' => 'Kailangan mong <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} lumagda/tumala]</span> para makapagtakda ng mga kagustuhang ng tagagamit.',
'changepassword' => 'Baguhin ang hudyat',
'prefs-skin' => 'Pabalat',
'skin-preview' => 'Unang tingin',
'recentchanges-label-minor' => 'Isa itong munting pagbabago',
'recentchanges-label-bot' => 'Gawa ng isang bot ang pagbabagong ito',
'recentchanges-label-unpatrolled' => 'Hindi pa napapatrulyahan ang pagbabagong ito',
+'recentchanges-legend-newpage' => '$1 - bagong pahina',
'rcnote' => "Nasa ibaba {{PLURAL:$1|ang '''1''' pagbabago|ang pinakahuling '''$1''' mga pagbabago}} sa huling {{PLURAL:$2|araw|'''$2''' mga araw}}, mula noong $5, $4.",
'rcnotefrom' => "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').",
'rclistfrom' => 'Ipakita ang bagong mga pagbabago simula sa $1',
'booksources-search-legend' => 'Maghanap ng mapagkukunang aklat',
'booksources-isbn' => 'ISBN:',
'booksources-go' => 'Puntahan',
-'booksources-text' => 'Matatagpuan sa ibaba ang isang tala ng mga kawing patungo sa ibang mga websayt na nanininda ng mga bago at gamit na aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:',
+'booksources-text' => 'Matatagpuan sa ibaba ang isang tala ng mga kawil patungo sa ibang mga website na nagtitinda ng mga bago at gamit nang aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:',
'booksources-invalid-isbn' => 'Tila mukhang hindi yata katanggap-tanggap ang ibinigay na ISBN; pakisuri kung may mga kamalian ang pagkakasip/pagkakakopya mula sa orihinal na pinagmulan.',
# Special:Log
'excontentauthor' => "ang nilalaman ay: '$1' (at ang tanging nag-ambag ay si '[[Special:Contributions/$2|$2]]')",
'exbeforeblank' => "nilalaman bago nablangko: '$1'",
'exblank' => 'walang laman ang pahina',
-'delete-confirm' => 'Burahin "$1"',
+'delete-confirm' => 'Kaltasin ang "$1"',
'delete-legend' => 'Burahin',
'historywarning' => "'''Babala''': May kasaysayan ang pahinang buburahin mo na tinatayang may $1 {{PLURAL:$1|pagbabago|mga pagbabago}}:",
'confirmdeletetext' => 'Lubos mo nang buburahin ang pahinang ito pati ang kalahatan ng kasaysayan nito.
'proxyblockreason' => 'Hinarang ang IP address mo dahil bukas na proxy ito. Makipag-ugnayan sa iyong tagabigay ng serbisyong Internet o suportang teknikal at ipaalam sa kanila itong seryesong suliranin sa seguridad.',
'sorbs' => 'DNSBL',
'sorbsreason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito.',
-'sorbs_create_account_reason' => 'Nakalista ang IP address mo bilang isang bukas na proxy sa DNSBL na ginagamit ng sayt na ito. Hindi ka makakalikha ng akawnt',
+'sorbs_create_account_reason' => 'Nakatala ang iyong IP address bilang open proxy sa DNSBL na ginagamit ng {{SITENAME}}.
+Hindi ka makakalikha ng account',
'cant-block-while-blocked' => 'Hindi mo mahahadlangan/mahaharang ang ibang mga tagagamit habang hinahadlangan ka.',
'cant-see-hidden-user' => 'Ang tagagamit na sinusubukan mong hadlangan ay naharang at naikubli na.
Dahil wala kang karapatang magkubli ng tagagamit, hindi mo makikita o mababago ang paghadlang sa tagagamit.',
'allmessagesname' => 'Pangalan',
'allmessagesdefault' => 'Tinakdang teksto',
'allmessagescurrent' => 'Kasalukuyang teksto',
-'allmessagestext' => 'Isa itong talaan ng mga mensahe ng sistema na makukuha mula sa espasyo ng pangalang MediaWiki.
-Pakidalaw ang [//www.mediawiki.org/wiki/Localisation Lokalisasyong MediaWiki] at [//translatewiki.net translatewiki.net] kung ibig mong magambag sa heneriko o pangkalahatang lokalisasyon ng MediaWiki.',
+'allmessagestext' => 'Isa itong talaan ng mga mensahe ng sistema na makukuha mula sa namespace ng MediaWiki.
+Pakidalaw ang [https://www.mediawiki.org/wiki/Localisation Lokalisasyong MediaWiki] at [//translatewiki.net translatewiki.net] kung ibig mong magambag sa heneriko o pangkalahatang lokalisasyon ng MediaWiki.',
'allmessagesnotsupportedDB' => "Hindi magagamit ang '''{{ns:special}}:AllMessages''' dahil hindi gumagana ang '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Salain',
'allmessages-filter' => 'Salain ayon sa katayuan ng pagbabagay:',
'version-version' => '(Bersyon $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'Lisensiya',
-'version-poweredby-credits' => "Ang wiking ito ay pinapatakbo ng '''[//www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
+'version-poweredby-credits' => "Ang wiking ito ay pinapatakbo ng '''[https://www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
'version-poweredby-others' => 'iba pa',
'version-license-info' => 'Ang MediaWiki ay isang malayang sopwer; maaari mo itong ipamahagi at/o baguhin ito sa ilalim ng mga patakaran ng Pangkalahatang Pangmadlang Lisensiyang GNU ayon sa pagkakalathala ng Pundasyon ng Malayang Sopwer; na maaaring bersyong 2 ng Lisensiya, o (kung nais mo) anumang susunod na bersyon.
Ang MediaWiki ay ipinamamahagi na umaasang magiging gamitin, subaliut WALANG ANUMANG KATIYAKAN; ni walang pahiwatig ng PAGIGING MABENTA o KAANGKUPAN PARA ISANG TIYAK NA LAYUNIN. Tingnan ang Pangkalahatang Pangmadlang Lisensiyang GNU para sa mas marami pang mga detalye.
# Special:SpecialPages
'specialpages' => 'Mga natatanging pahina',
-'specialpages-note' => '----
-* Normal na natatanging mga pahina.
+'specialpages-note' => '* Normal na natatanging mga pahina.
* <span class="mw-specialpagerestricted">Pinaghihigpitang natatanging mga pahina.</span>',
'specialpages-group-maintenance' => 'Mga pagpapanatiling ulat',
'specialpages-group-other' => 'Iba pang natatanging mga pahina',
'duration-centuries' => '$1 {{PLURAL:$1|daantaon|mga daantaon}}',
'duration-millennia' => '$1 {{PLURAL:$1|milenyo|mga milenyo}}',
+# Special:ExpandTemplates
+'expandtemplates' => 'Palaparin (palawakin) ang mga suleras',
+'expand_templates_intro' => 'Ang natatanging pahinang ito ay kumukuha ng ilang mga teksto at nagbubuka ng lahat ng mga suleras sa loob nito sa kaparaanang tinatawag ang sarili o rekursibo.
+Nagbubuka rin ito ng mga tungkuling pambanghay na katulad ng
+<nowiki>{{</nowiki>#kung:…}}, at pabagubagong mga halagang katulad ng
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Sa katunayan, pinabubuka nito ang halos lahat ng mga bagay-bagay na may dalawang mga bantas na pansalalay o brakete.',
+'expand_templates_title' => 'Pamagat na pampaunawa (ng konteksto), para sa {{FULLPAGENAME}} atbp.:',
+'expand_templates_input' => 'Tekstong ipinasok:',
+'expand_templates_output' => 'Kinalabasan',
+'expand_templates_xml_output' => 'kinalabasang XML',
+'expand_templates_ok' => "Sige/Ayos 'yan",
+'expand_templates_remove_comments' => 'Tanggalin ang mga puna (kumento)',
+'expand_templates_remove_nowiki' => 'Pigilin ang mga tatak na <nowiki> sa loob ng resulta',
+'expand_templates_generate_xml' => 'Ipakita ang puno na pambanghay ng XML',
+'expand_templates_preview' => 'Paunang tingin',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Сәвон "$1"',
'youhavenewmessages' => 'Шымә сәјоне $1 ($2).',
-'newmessageslink' => 'нујә хәбон',
-'newmessagesdifflink' => 'охонә дәгиши',
'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|охонә дәгиши|охонә дәгишон}}',
'editsection' => 'Sərost kardey',
'editold' => 'Сәрост кардеј',
# Preferences page
'preferences' => 'Кукон',
'mypreferences' => 'Кукон',
-'prefsnologin' => 'Ыштәни едаштәнијоне',
-'prefsnologintext' => 'Шымә бәбе <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ыштәни едәштән]</span> бо иштирокәкә пеғәндон дәгиш кардеј.',
'changepassword' => 'Пароли дәгиш кардеј',
'skin-preview' => 'Сыфтәнә нишо дој',
'prefs-user-pages' => 'Иштирокәкә сәһифон',
# External editor support
'edit-externally' => 'Редактә кардеј ым фајли де заһири програм',
-'edit-externally-help' => '(Bo mıffəssələ məlumoton bə [//www.mediawiki.org/wiki/Manual:External_editors dərsəvon bo soxtəy] diyə bıkən)',
+'edit-externally-help' => '(Bo mıffəssələ məlumoton bə [https://www.mediawiki.org/wiki/Manual:External_editors dərsəvon bo soxtəy] diyə bıkən)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'һәммәј',
'ok' => 'Fai ā',
'youhavenewmessages' => 'ʻOku ʻi ai haʻo $1 ($2).',
-'newmessageslink' => 'ngaahi tala foʻou',
'youhavenewmessagesmulti' => 'ʻOku ʻi ai haʻo tala foʻou ʻi $1',
'editsection' => 'fatuʻi vahe',
'editold' => 'fatu',
# Preferences page
'preferences' => 'Faʻiteliha',
'mypreferences' => 'faʻiteliha ʻaʻaku',
-'prefsnologin' => 'ʻOku ʻikai kau ki ai',
'changepassword' => 'Liliu hoʻo leatapu',
'prefs-skin' => 'Kili',
'skin-preview' => 'Vakai pē',
# External editor support
'edit-externally' => 'Fatuʻi ʻa e failé ni ngāueʻaki mo e polokalama ʻi tuʻa',
-'edit-externally-help' => 'Vakai ki he [//www.mediawiki.org/wiki/Manual:External_editors fakahinohino ki he fokotuʻu] maʻa toe fakamatala.',
+'edit-externally-help' => 'Vakai ki he [https://www.mediawiki.org/wiki/Manual:External_editors fakahinohino ki he fokotuʻu] maʻa toe fakamatala.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kātoa',
# New logging system
'rightsnone' => '(hala)',
+# Special:ExpandTemplates
+'expandtemplates' => 'Fakalahiange ʻa e ngaahi sīpinga',
+
);
'tog-extendwatchlist' => 'İzleme listesini sadece en son değil, tüm değişiklikleri göstermek için genişlet',
'tog-usenewrc' => 'Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandır',
'tog-numberheadings' => 'Başlıkları otomatik numaralandır',
-'tog-showtoolbar' => 'Düzenleme yaparken araç çubuğunu göster',
+'tog-showtoolbar' => 'Düzenleme araç çubuğunu göster',
'tog-editondblclick' => 'Çift tıklayarak sayfaları düzenle',
'tog-editsection' => 'Bölümleri [{{int:Editsection}}] bağlantıları ile düzenlemeyi etkinleştir',
'tog-editsectiononrightclick' => 'Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => '"$1" adresinden alındı.',
'youhavenewmessages' => 'Yeni $1 var ($2).',
-'newmessageslink' => 'mesajınız',
-'newmessagesdifflink' => 'son değişiklik',
'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başka bir kullanıcıdan|$3 kullanıcıdan}} $1 var ($2).',
'youhavenewmessagesmanyusers' => 'Birçok kullanıcıdan $1 var ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
'invalidtitle-knownnamespace' => '"$2" alan adı için "$3" metni geçersiz bir başlık',
'invalidtitle-unknownnamespace' => 'Bilinmeyen $1 ad alanı sayısı ve geçersiz "$2" başlık',
'exception-nologin' => 'Giriş yapılmamış',
-'exception-nologin-text' => 'Bu sayfa ya da eylem için bu vikide oturum açmış olmanız gerekir.',
+'exception-nologin-text' => 'Bu sayfaya ya da eyleme erişmek için lütfen [[Special:Userlogin|oturum açın]].',
# Virus scanner
'virus-badscanner' => "Yanlış ayarlama: bilinmeyen virüs tarayıcı: ''$1''",
'userlogin-resetpassword-link' => 'Parolanızı mı unuttunuz?',
'helplogin-url' => 'Help:Oturum açma',
'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Oturum açma konusunda yardım alın]]',
+'userlogin-loggedin' => 'Zaten {{GENDER:$1|$1}} olarak oturum açtınız.
+Başka bir kullanıcı olarak oturum açmak için aşağıdaki formu kullanın.',
+'userlogin-createanother' => 'Başka bir hesap oluşturun',
'createacct-join' => 'Aşağıya bilgilerinizi girin.',
'createacct-another-join' => 'Aşağıya yeni hesabınızın bilgilerini girin.',
'createacct-emailrequired' => 'E-posta adresi',
'noemailcreate' => 'Geçerli bir e-posta adresi sağlamalısınız',
'passwordsent' => '"$1" adına kayıtlı e-posta adresine yeni bir parola gönderildi. Oturumu, lütfen, iletiyi aldıktan sonra açın.',
'blocked-mailpassword' => 'Siteye erişiminiz engellenmiş olduğundan, yeni şifre gönderilme işlemi yapılamamaktadır.',
-'eauthentsent' => 'Kaydedilen adrese onay kodu içeren bir e-posta gönderildi.
-E-postadaki yönerge uygulanıp adresin size ait olduğu onaylanmadıkça başka e-posta gönderilmeyecek.',
+'eauthentsent' => 'Belirtilen e-posta adresine onay kodu içeren bir e-posta gönderildi.
+Hesaba başka bir e-posta gönderilmeden önce, e-postadaki yönergeleri uygulayıp, hesabın gerçekten size ait olduğunu onaylamanız gerekir.',
'throttled-mailpassword' => 'Bir parola sıfırlama e-postası son {{PLURAL:$1|bir saat|$1 saat}} içinde zaten gönderildi. Hizmeti kötüye kullanmayı önlemek için, her {{PLURAL:$1|bir saatte|$1 saatte}} sadece bir parola sıfırlama e-postası gönderilecektir.',
'mailerror' => 'E-posta gönderim hatası: $1',
'acct_creation_throttle_hit' => 'Sizin IP adresinizi kullanarak bu vikiyi ziyaret edenler son günde {{PLURAL:$1|1 hesap|$1 hesap}} oluşturdu, bu sayı bu zaman aralığında izin verilen azami sayıdır.
Sonuç olarak, bu IP adresini kullanan ziyaretçiler şu anda daha fazla hesap açamazlar.',
-'emailauthenticated' => 'E-posta adresiniz $2 $3 tarihinde doğrulandı.',
+'emailauthenticated' => 'E-posta adresiniz $2 $3 tarihinde onaylandı.',
'emailnotauthenticated' => 'E-posta adresiniz henüz onaylanmadı.
Aşağıdaki işlevlerin hiçbiri için e-posta gönderilmeyecektir.',
'noemailprefs' => 'Bu özelliklerin çalışması için bir e-posta adresi belirtiniz.',
'revdelete-text' => "'''Silinen revizyonlar ve olaylar hala sayfa geçmişinde ve günlüklerde görünecektir, fakat içeriğin parçaları umumi olarak erişilemeyecektir.'''
{{SITENAME}} sitesindeki diğer hizmetliler gizli içeriğe erişebilir ve ilave kısıtlamalar ayarlanmadıysa bu arayüz ile geri getirebilir.",
'revdelete-confirm' => 'Lütfen, bunu yapmak istediğinizi , sonuçlarını anladığınızı, ve bunu [[{{MediaWiki:Policy-url}}|ilkelere]] göre yapıyor olduğunuzu onaylayın.',
-'revdelete-suppress-text' => "Saklama '''sadece''' aşağıdaki durumlar için kullanılmalıdır:
+'revdelete-suppress-text' => "Saklama '''sadece''' aşağıdaki durumlarda kullanılmalıdır:
+* Muhtemel iftira niteliğindeki bilgi
* Uygunsuz kişisel bilgi
*: ''ev adresleri ve telefon numaraları, sosyal güvenlik numaraları, vs.''",
'revdelete-legend' => 'Görünürlük kısıtlamaları ayarla',
-'revdelete-hide-text' => 'Değişiklik yazısını gizle',
+'revdelete-hide-text' => 'Revizyon metni',
'revdelete-hide-image' => 'Dosya içeriğini gizle',
'revdelete-hide-name' => 'Olayı ve hedefi gizle',
-'revdelete-hide-comment' => 'Özeti gösterme',
-'revdelete-hide-user' => 'Değişikliği yapan kullanıcı adını/IP adresi gizle',
+'revdelete-hide-comment' => 'Değişiklik özeti',
+'revdelete-hide-user' => "Editör'ün kullanıcı adı/IP adresi",
'revdelete-hide-restricted' => 'Verileri hizmetlilerle birlikte diğerlerinden de sakla',
'revdelete-radio-same' => '(değiştirme)',
-'revdelete-radio-set' => 'Evet',
-'revdelete-radio-unset' => 'Hayır',
+'revdelete-radio-set' => 'Gizli',
+'revdelete-radio-unset' => 'Görünür',
'revdelete-suppress' => 'Verileri hem diğerlerinden hem de hizmetlilerden gizle',
'revdelete-unsuppress' => 'Geri döndürülmüş revizyonlardaki kısıtlamaları kaldır',
'revdelete-log' => 'Neden:',
'powersearch-togglenone' => 'Hiçbiri',
'search-external' => 'Dış arama',
'searchdisabled' => '{{SITENAME}} sitesinde arama yapma geçici olarak durdurulmuştur. Bu arada Google kullanarak {{SITENAME}} içinde arama yapabilirsiniz. Arama sitelerinde dizinlerin biraz eski kalmış olabileceğini göz önünde bulundurunuz.',
+'search-error' => 'Arama yapılırken bir hata oluştu: $1',
# Preferences page
'preferences' => 'Tercihler',
'mypreferences' => 'Tercihler',
'prefs-edits' => 'Değişiklik sayısı:',
-'prefsnologin' => 'Oturum açık değil',
-'prefsnologintext' => 'Kullanıcı tercihlerinizi ayarlamak için <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} giriş yapmalısınız]</span>.',
'changepassword' => 'Parolayı değiştir',
'prefs-skin' => 'Görünüm',
'skin-preview' => 'Önizleme',
'prefs-rendering' => 'Görünüm',
'saveprefs' => 'Kaydet',
'resetprefs' => 'Ayarları ilk durumuna getir',
-'restoreprefs' => 'Tüm varsayılan ayarları geri yükle',
+'restoreprefs' => 'Tüm varsayılan ayarları geri yükle (tüm bölümlerde)',
'prefs-editing' => 'Sayfa yazma alanı',
'rows' => 'Satır',
'columns' => 'Sütun',
'prefs-displaywatchlist' => 'Görüntüleme seçenekleri',
'prefs-tokenwatchlist' => 'Anahtar',
'prefs-diffs' => 'Farklar',
+'prefs-help-prefershttps' => 'Bu tercih bir sonraki girişinizde etkili olacaktır.',
# User preference: email validation using jQuery
'email-address-validity-valid' => 'E-posta adresi geçerli görünüyor',
'userrights-no-interwiki' => 'Diğer vikilerdeki kullanıcıların izinlerini değiştirmeye yetkiniz yok.',
'userrights-nodatabase' => '$1 veritabanı mevcut veya bölgesel değil',
'userrights-nologin' => 'Kullanıcı haklarını atamak için hizmetli hesabı ile [[Special:UserLogin|giriş yapmanız gerekir]].',
-'userrights-notallowed' => 'Hesabınızın kullanıcı hakları eklemek veya kaldırmak için izni yok.',
+'userrights-notallowed' => 'Kullanıcı hakları eklemek veya kaldırmak için izniniz yok.',
'userrights-changeable-col' => 'Değiştirebildiğiniz gruplar',
'userrights-unchangeable-col' => 'Değiştirebilmediğiniz gruplar',
'right-proxyunbannable' => 'Proxylerin otomatik engellemelerini atla',
'right-unblockself' => 'Kendi engellemesini kaldır',
'right-protect' => 'Koruma düzeylerini değiştir ve kademeli korumalı sayfaları düzenle',
-'right-editprotected' => 'Korumalı sayfalarda değişiklik yap (korumayı basamaklamadan)',
+'right-editprotected' => '"{{int:protect-level-sysop}}" olarak korunan sayfalarda değişiklik yap',
'right-editinterface' => 'Kullanıcı arayüzünü değiştirmek',
'right-editusercssjs' => 'Diğer kullanıcıların CSS ve JS dosyalarında değişiklik yap',
'right-editusercss' => 'Diğer kullanıcıların CSS dosyalarında değişiklik yap',
'action-block' => 'bu kullanıcının değişiklik yapmasını engellemeye',
'action-protect' => 'bu sayfa için koruma düzeylerini değiştirmeye',
'action-rollback' => 'Belirli bir sayfayı değiştiren son kullanıcının değişikliklerini hızlıca geri döndür',
-'action-import' => 'bu sayfayı bir başka vikiden içeri aktarmaya',
-'action-importupload' => 'bu sayfayı bir dosya yüklemesinden içeri aktarmaya',
+'action-import' => 'başka bir vikiden sayfaları içeri aktarmaya',
+'action-importupload' => 'bir dosya yüklemesinden sayfaları içeri aktarmaya',
'action-patrol' => 'diğerlerinin değişikliğini gözlenmiş olarak işaretlemeye',
'action-autopatrol' => 'değişikliğinizi gözlenmiş olarak işaretlemeye',
'action-unwatchedpages' => 'izlenmeyen sayfalar listesini görmeye',
'recentchanges-label-minor' => 'Bu küçük bir değişiklik',
'recentchanges-label-bot' => 'Bu değişiklik bir bot tarafından yapıldı',
'recentchanges-label-unpatrolled' => 'Bu değişiklik henüz gözlenmemiş',
+'recentchanges-legend-newpage' => '$1 - yeni sayfa',
'rcnote' => "$4 tarihi ve saat $5 itibarı ile, son {{PLURAL:$2|1 günde|'''$2''' günde}} yapılan, {{PLURAL:$1|'''1''' değişiklik|'''$1''' değişiklik}}, aşağıdadır.",
'rcnotefrom' => "'''$2''' tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <b>$1</b> tanesi gösterilmektedir).",
'rclistfrom' => '$1 tarihinden itibaren yeni değişiklikleri göster',
'upload_source_file' => ' (bilgisayarınızdaki bir dosya)',
# Special:ListFiles
-'listfiles-summary' => 'Bu özel sayfa yüklenilen tüm dosyaları gösterir.
-Kullanıcı tarafından filtrelendiğinde, sadece o kullanıcı dosyanın en son sürümünü yüklediği dosyalar gösterilir.',
+'listfiles-summary' => 'Bu özel sayfa yüklenen tüm dosyaları gösterir.',
'listfiles_search_for' => 'Medya adı ara:',
'imgfile' => 'dosya',
'listfiles' => 'Dosya listesi',
'notvisiblerev' => 'Revizyon silinmiş',
'watchlist-details' => 'Tartışma sayfaları hariç {{PLURAL:$1|$1 sayfa|$1 sayfa}} izleme listenizdedir.',
'wlheader-enotif' => 'E-posta bildirimi etkin.',
-'wlheader-showupdated' => "Son ziyaretinizden sonraki sayfa değişiklikleri '''kalın yazıyla''' gösterilmiştir.",
+'wlheader-showupdated' => "Sayfaları son ziyaretinizden beri değişen sayfalar '''kalın''' gösterilmiştir.",
'watchmethod-recent' => 'izlediğiniz sayfalarda yapılan son değişiklikler kontrol ediliyor',
'watchmethod-list' => 'izlediğiniz sayfalarda yapılan son değişiklikler kontrol ediliyor',
'watchlistcontains' => 'İzleme listenizde $1 tane {{PLURAL:$1|sayfa|sayfa}} var.',
'deletecomment' => 'Neden:',
'deleteotherreason' => 'Diğer/ilave neden:',
'deletereasonotherlist' => 'Diğer nedenler',
-'deletereason-dropdown' => '*Genel silme gerekçeleri
-** Sayfayı oluşturan kullanıcının isteği
+'deletereason-dropdown' => '* Yaygın silme gerekçeleri
+** İstenmeyen değişiklik (spam)
+** Vandalizm
** Telif hakkı ihlali
-** Vandalizm',
+** Yazar talebi
+** Bozuk yönlendirme',
'delete-edit-reasonlist' => 'Silme nedenlerini değiştir',
'delete-toobig' => 'Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.
Böyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.',
'protect-cascadeon' => 'Bu sayfa, kademeli koruma aktif hale getirilmiş aşağıdaki {{PLURAL:$1|$1 sayfada|$1 sayfada}} kullanıldığı için şu an koruma altındadır.
Bu sayfanın koruma seviyesini değiştirebilirsiniz; ancak bu kademeli korumaya etki etmeyecektir.',
'protect-default' => 'Tüm kullanıcılara izin ver',
-'protect-fallback' => '"$1" izni gerektir',
+'protect-fallback' => 'Sadece "$1" yetkisine sahip kullanıcılara izin ver',
'protect-level-autoconfirmed' => 'Yalnızca otomatik onaylanmış kullanıcılara izin verilir',
'protect-level-sysop' => 'Yalnızca hizmetlilere izin verilir',
'protect-summary-cascade' => 'kademeli',
'allmessagesdefault' => 'Varsayılan mesaj metni',
'allmessagescurrent' => 'Kullanımdaki metin',
'allmessagestext' => 'Bu liste MediaWiki ad alanında mevcut olan sistem mesajlarının listesidir.
-Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [//www.mediawiki.org/wiki/Localisation MediaWiki Yerelleştirmesi] ve [//translatewiki.net translatewiki.net] sayfalarını ziyaret edin.',
+Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [https://www.mediawiki.org/wiki/Localisation MediaWiki Yerelleştirmesi] ve [//translatewiki.net translatewiki.net] sayfalarını ziyaret edin.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' kapalı olduğu için '''{{ns:special}}:Allmessages''' kullanıma açık değil.",
'allmessages-filter-legend' => 'Filtre',
'allmessages-filter' => 'Özelleştirme durumuna göre filtrele:',
'pageinfo-length' => 'Sayfa uzunluğu (bayt cinsinden)',
'pageinfo-article-id' => 'Sayfa ID',
'pageinfo-language' => 'Sayfa içeriğinin dili',
-'pageinfo-robot-policy' => 'Arama motoru durumu',
-'pageinfo-robot-index' => 'İndekslenebilir',
-'pageinfo-robot-noindex' => 'İndekslenemez',
+'pageinfo-robot-policy' => 'Robotlar tarafından endeksleniyor',
+'pageinfo-robot-index' => 'İzin verilmiş',
+'pageinfo-robot-noindex' => 'İzin verilmedi',
'pageinfo-views' => 'Görüntülenme sayısı',
'pageinfo-watchers' => 'Sayfanın izleyici sayısı',
-'pageinfo-redirects-name' => 'Bu sayfaya yönlendirmeler',
+'pageinfo-redirects-name' => 'Bu sayfaya yönlendirme sayısı',
'pageinfo-redirects-value' => '$1',
'pageinfo-subpages-name' => 'Bu sayfanın alt sayfaları',
'pageinfo-firstuser' => 'Sayfa oluşturucu',
'svg-long-desc' => 'SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3',
'svg-long-desc-animated' => 'Hareketli SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3',
'svg-long-error' => 'Geçersiz SVG dosyası: $1',
-'show-big-image' => 'Tam çözünürlük',
+'show-big-image' => 'Özgün dosya',
'show-big-image-preview' => 'Ön izleme boyutu: $1.',
'show-big-image-other' => 'Diğer {{PLURAL:$2|çözünürlük|çözünürlükleri}}: $1.',
'show-big-image-size' => '$1 × $2 piksel',
# External editor support
'edit-externally' => 'Dosyayı harici bir uygulamayla değiştirin.',
-'edit-externally-help' => '(Daha fazla bilgi için metadaki [//www.mediawiki.org/wiki/Manual:External_editors dış uygulama ayarları] (İngilizce) sayfasına bakabilirsiniz)',
+'edit-externally-help' => '(Daha fazla bilgi için metadaki [https://www.mediawiki.org/wiki/Manual:External_editors dış uygulama ayarları] (İngilizce) sayfasına bakabilirsiniz)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Hepsini göster',
'version-hook-subscribedby' => 'Abone olan',
'version-version' => '(Sürüm $1)',
'version-license' => 'Lisans',
-'version-poweredby-credits' => "Bu wiki '''[//www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.",
+'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.",
'version-poweredby-others' => 'diğerleri',
'version-license-info' => "MediaWiki özgür bir yazılımdır; MediaWiki'yi, Özgür Yazılım Vakfı tarafından yayımlanmış olan GNU Genel Kamu Lisansının 2. veya (seçeceğiniz) daha sonraki bir sürümünün koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
# Special:Redirect
'redirect' => 'Dosya, kullanıcı veya sayfa ID yönlendirme',
'redirect-legend' => 'Bir dosya veya sayfaya yönlendirme',
-'redirect-summary' => "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir.",
+'redirect-summary' => "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir. Kullanım: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], ya da [[{{#Special:Redirect}}/user/101]].",
'redirect-submit' => 'Git',
'redirect-value' => 'Değer:',
'redirect-user' => 'Kullanıcı kimliği',
# Special:SpecialPages
'specialpages' => 'Özel sayfalar',
-'specialpages-note' => '----
-* Normal özel sayfalar.
+'specialpages-note' => '* Normal özel sayfalar.
* <span class="mw-specialpagerestricted">Kısıtlı özel sayfalar.</span>
* <span class="mw-specialpagecached">Önbelleğe alınan özel sayfalar (eskimiş olabilir)</span>',
'specialpages-group-maintenance' => 'Bakım raporları',
'sqlite-no-fts' => '$1 tam-metin arama desteği olmaksızın',
# New logging system
-'logentry-delete-delete' => '$1 $3 sayfasını sildi',
-'logentry-delete-restore' => '$1 $3 sayfasını geri getirdi',
+'logentry-delete-delete' => '$1 $3 sayfasını {{GENDER:$2|sildi}}',
+'logentry-delete-restore' => '$1 $3 sayfasını {{GENDER:$2|geri getirdi}}',
'logentry-delete-revision' => '$1 $3: $4 sayfasında {{PLURAL:$5|bir sürümün|$5 sürümün}} görünürlüğünü değiştirdi',
'logentry-delete-revision-legacy' => '$1 $3 sayfasındaki sürümlerin görünürlüğünü değiştirdi',
'logentry-suppress-revision' => '$1 $3: $4 sayfasında {{PLURAL:$5|bir sürümün|$5 sürümün}} görünürlüğünü gizlice değiştirdi',
'limitreport-expansiondepth' => 'En yüksek genişleme derinliği',
'limitreport-expensivefunctioncount' => 'Daha fazla ayrıştırıcı işlev sayısı',
+# Special:ExpandTemplates
+'expandtemplates' => 'Şablonları genişlet',
+'expand_templates_intro' => 'Bu özel sayfa biraz metni alır ve içindeki tüm şablonları yinelemeli olarak genişletir.
+Ayrıca şu gibi derleyici fonksiyonlarını da genişletir
+<nowiki>{{</nowiki>#language:…}}, ve şu gibi değişkenleri
+<nowiki>{{</nowiki>CURRENTDAY}}—aslında çift-bağlı hemen her şey.
+Bunu, ilgili derleyici aşamasını MedyaVikinin kendisinden çağırarak yapar.',
+'expand_templates_title' => 'Durum başlığı, ör {{FULLPAGENAME}} için.:',
+'expand_templates_input' => 'Giriş metni:',
+'expand_templates_output' => 'Sonuç',
+'expand_templates_xml_output' => 'XML üretim',
+'expand_templates_ok' => 'Tamam',
+'expand_templates_remove_comments' => 'Yorumları sil',
+'expand_templates_remove_nowiki' => 'Sonuçlarda <nowiki> etiketlerini bastır',
+'expand_templates_generate_xml' => 'XML derleyici ağacını göster',
+'expand_templates_preview' => 'Önizleme',
+
);
'ok' => 'Tamam',
'retrievedfrom' => 'men "$1"',
'youhavenewmessages' => 'Kıtlux $1 ($2) .',
-'newmessageslink' => 'Ṫebe ḥaṭe',
-'newmessagesdifflink' => 'Degoşo ḥaroyo',
'youhavenewmessagesmulti' => 'Kitlux Ṫebe ḥaṭe b$1',
'editsection' => 'mşaḥlaf',
'editold' => 'mşaḥlaf',
# External editor support
'edit-externally' => 'Edit this file using an external application',
-'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
+'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kulle',
'ok' => 'Hiswona',
'retrievedfrom' => 'ku suka e "$1"',
'youhavenewmessages' => 'U na $1 ($2).',
-'newmessageslink' => 'Marungula mantswa',
-'newmessagesdifflink' => 'last change',
'youhavenewmessagesmulti' => 'Una marungula mantswa hi $1',
'editsection' => 'Lulamisa',
'editold' => 'Lulamisa',
# External editor support
'edit-externally' => 'Lulamisa fayili leyi utirhisa xilulamisi xale handle ka wiki leyi',
-'edit-externally-help' => '(Vona [//www.mediawiki.org/wiki/Manual:External_editors swiletelo swo sungurisa] leswaku ukuma vuxokoxoko lebyi engetelekeke)',
+'edit-externally-help' => '(Vona [https://www.mediawiki.org/wiki/Manual:External_editors swiletelo swo sungurisa] leswaku ukuma vuxokoxoko lebyi engetelekeke)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Hinkwawo',
# Special:Tags
'tag-filter' => 'Xihluti xa [[Special:Tags|Xi angi]]:',
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Hiswona',
+'expand_templates_preview' => 'Ringanisa',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Чыганагы — "$1"',
'youhavenewmessages' => 'Сездә $1 бар ($2).',
-'newmessageslink' => 'яңа хәбәрләр',
-'newmessagesdifflink' => 'бәхәс битегезнең соңгы үзгәртүе',
'youhavenewmessagesfromusers' => 'Сезгә {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).',
'youhavenewmessagesmanyusers' => 'Сез бик күп кулланучыдан $1 алдыгыз ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|яңа хәбәр}}',
'preferences' => 'Көйләнмәләр',
'mypreferences' => 'Көйләнмәләр',
'prefs-edits' => 'Үзгәртүләр исәбе:',
-'prefsnologin' => 'Кермәгәнсез',
-'prefsnologintext' => 'Кулланучы көйләнмәләрене үзгәртү өчен, сез <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} керергә]</span> тиешсез.',
'changepassword' => 'Серсүзне үзгәртү',
'prefs-skin' => 'Күренеш',
'skin-preview' => 'Алдан карау',
'recentchanges-label-minor' => 'Бу кече үзгәртү',
'recentchanges-label-bot' => 'Бу үзгәртү бот белән эшләнгән иде',
'recentchanges-label-unpatrolled' => 'Үзгәртүне әлегә тикшермәгәннәр',
+'recentchanges-legend-newpage' => '$1 — яңа бит',
'rcnote' => 'Аста $4 $5 вакытынна соңгы {{PLURAL:$2|1|$2}} көн эчендә булган соңгы {{PLURAL:$1|1|$1}} үзгәртмә күрсәтелә:',
'rcnotefrom' => "Астарак '''$2''' башлап ('''$1''' кадәр) үзгәртүләр күрсәтелгән.",
'rclistfrom' => '$1 башлап яңа үзгәртүләрне күрсәт',
'allmessagesname' => 'Исем',
'allmessagesdefault' => 'Баштан ук куелган текс',
'allmessagestext' => 'Бу исемлек MediaWiki исемнәр мәйданында булган система хәбәрләренең исемлеге.
-Гомуми MediaWiki локализациясендә катнашырга теләсәгез, зинһар [//www.mediawiki.org/wiki/Localisation MediaWiki Локализациясе] һәм [//translatewiki.net translatewiki.net] сәхифәләрне кулланыгыз.',
+Гомуми MediaWiki локализациясендә катнашырга теләсәгез, зинһар [https://www.mediawiki.org/wiki/Localisation MediaWiki Локализациясе] һәм [//translatewiki.net translatewiki.net] сәхифәләрне кулланыгыз.',
'allmessages-filter-legend' => 'Фильтр',
'allmessages-filter-unmodified' => 'Үзгәртелмәгән',
'allmessages-filter-all' => 'Барысы',
# External editor support
'edit-externally' => 'Бу файлны тышкы кушымтаны кулланып үзгәртү',
-'edit-externally-help' => '(тулырак мәгълүмат өчен [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] битен карагыз)',
+'edit-externally-help' => '(тулырак мәгълүмат өчен [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] битен карагыз)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'барлык',
# Special:SpecialPages
'specialpages' => 'Махсус битләр',
-'specialpages-note' => '----
-* Гади махсус битләр.
+'specialpages-note' => '* Гади махсус битләр.
* <strong class="mw-specialpagerestricted">Чикләнелгән махсус битләр.</strong>
* <span class="mw-specialpagecached">Кешланган махсус битләр.</span>',
'specialpages-group-maintenance' => 'Техник карау хисапнамәсе',
'api-error-uploaddisabled' => 'Бу викидә файллар йөкләү мөмкинлеге сүндерелгән.',
'api-error-verification-error' => 'Бәлки, бу файл бозылгандыр яки дөрес түгел киңәйтелмәгә ия.',
+# Special:ExpandTemplates
+'expandtemplates' => 'Үрнәкләрне ачу',
+'expand_templates_ok' => 'OK',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Çığanağı — "$1"',
'youhavenewmessages' => 'Sezdä $1 bar ($2).',
-'newmessageslink' => 'yaña xäbärlär',
-'newmessagesdifflink' => 'bäxäs bitegezneñ soñğı üzgärtüe',
'youhavenewmessagesmulti' => 'Sezgä monda yaña xäbärlär bar: $1',
'editsection' => 'üzgärtü',
'editold' => 'üzgärtü',
'preferences' => 'Köylänmälär',
'mypreferences' => 'Köylänmälärem',
'prefs-edits' => 'Üzgärtülär isäbe:',
-'prefsnologin' => 'Kermägänsez',
-'prefsnologintext' => 'Qullanuçı köylänmälärene üzgärtü öçen, sez <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kerergä]</span> tieşsez.',
'changepassword' => 'Sersüzne üzgärtü',
'prefs-skin' => 'Küreneş',
'skin-preview' => 'Aldan qaraw',
'allmessagesdefault' => 'Töpcay yazma',
'allmessagescurrent' => 'Eligi yazma',
'allmessagestext' => 'Bu isemlek MediaWiki isemnär mäydanında bulğan sistema xäbärläreneñ isemlege.
-Ğomumi MediaWiki lokalizatsiäsendä qatnaşırğa teläsägez, zinhar [//www.mediawiki.org/wiki/Localisation MediaWiki Lokalizatsiäse] häm [//translatewiki.net translatewiki.net] säxifälärne qullanığız.',
+Ğomumi MediaWiki lokalizatsiäsendä qatnaşırğa teläsägez, zinhar [https://www.mediawiki.org/wiki/Localisation MediaWiki Lokalizatsiäse] häm [//translatewiki.net translatewiki.net] säxifälärne qullanığız.',
'allmessages-filter-legend' => 'Filtr',
'allmessages-filter-unmodified' => 'Üzgärtelmägän',
'allmessages-filter-all' => 'Barısı',
# External editor support
'edit-externally' => 'Bu faylnı tışqı quşımtanı qullanıp üzgärtü',
-'edit-externally-help' => '(tulıraq mäğlümat öçen [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] biten qarağız)',
+'edit-externally-help' => '(tulıraq mäğlümat öçen [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] biten qarağız)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'barlıq',
# Special:SpecialPages
'specialpages' => 'Maxsus bitlär',
-'specialpages-note' => '----
-* Ğädi maxsus bitlär.
+'specialpages-note' => '* Ğädi maxsus bitlär.
* <strong class="mw-specialpagerestricted">Çiklänelgän ğädi maxsus bitlär</strong>',
'specialpages-group-maintenance' => 'Texnik qaraw xisapnamäse',
'specialpages-group-other' => 'Başqa maxsus bitlär',
'tog-watchlisthidebots' => 'Хайгаарал даңзызындан роботтарның эдиглерин чажыр',
'tog-watchlisthideminor' => 'Хайгаарал даңзызындан бичии эдиглерни чажыр',
'tog-watchlisthidepatrolled' => 'Хайгаарал даңзындан истээн өскерлиишкиннерны чажырары',
-'tog-showhiddencats' => 'ЧажÑ\8bÑ\82 бөлүкÑ\82еÑ\80ни көÑ\80гүзеÑ\80и',
+'tog-showhiddencats' => 'ЧажÑ\8bÑ\82 аңгÑ\8bлалдаÑ\80нÑ\8b көÑ\80гүзеÑ\80',
'underline-always' => 'Кезээде',
'underline-never' => 'Кажан-даа',
'ok' => 'Чөп',
'retrievedfrom' => '«$1» деп адрестен парлаттынган',
'youhavenewmessages' => 'Силерде $1 ($2) бар.',
-'newmessageslink' => 'чаа чагаалар',
-'newmessagesdifflink' => 'эрткен өскерлиишкин',
'youhavenewmessagesmulti' => '«$1» деп арында силерге чаа чагаалар бар.',
'editsection' => 'эдер',
'editold' => 'эдер',
'nextn' => 'дараазында {{PLURAL:$1|$1}}',
'prevn-title' => 'Эрткен $1 {{PLURAL:$1|бижик|бижик}}',
'nextn-title' => 'Дараазында $1 {{PLURAL:$1|бижик|бижик}}',
-'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнелди|түңнелди}} көргүзери',
+'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнел}} көргүзер',
'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) көөрү',
'searchmenu-exists' => "'''Бо викиде \"[[:\$1]]\" деп арын бар.'''",
'searchmenu-new' => "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
'recentchanges-label-bot' => 'Бо эдилгени робот күүсеткен.',
'recentchanges-label-unpatrolled' => 'Бо өскертилге истетинмээн (патрульдаттынмаан)',
+'recentchanges-legend-newpage' => '$1 — чаа арын',
'rcnote' => "$4 $5 өйде соңгу '''$2''' {{PLURAL:$2|хонуктуң}} {{PLURAL:$1|сөөлгү '''$1''' '''өскерилгелери'''}} .",
'rcnotefrom' => 'Адаанда <strong>$2</strong> тура (<strong>$1</strong> чедир) өскертилгелерни санаан.',
'rclistfrom' => '$1 тура чаа өскерилгелерни көргүзер',
'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1',
-'rcshowhidebots' => 'РобоÑ\82Ñ\82аÑ\80нÑ\83 $1',
-'rcshowhideliu' => 'Ð\9aиÑ\80еÑ\80 ажÑ\8bглакÑ\87Ñ\8bлаÑ\80нÑ\8b $1',
-'rcshowhideanons' => 'Ат эвес ажыглакчыларны $1',
+'rcshowhidebots' => 'РобоÑ\82Ñ\82аÑ\80нÑ\8b $1',
+'rcshowhideliu' => 'Ð\9aиÑ\80ген киÑ\80жикÑ\87илеÑ\80ни $1',
+'rcshowhideanons' => 'Ады чок ажыглакчыларны $1',
'rcshowhidepatr' => 'истээн өскерлиишкиннерни $1',
-'rcshowhidemine' => 'Ð\9cÑ\8dÑ\8dÒ£ Ó©Ñ\81кеÑ\80лииÑ\88кинимни $1',
-'rclinks' => '$2 хүнде эрткен $1 өскерлиишкиннерни көргүзери<br />$3',
+'rcshowhidemine' => 'ÐдиглеÑ\80имни $1',
+'rclinks' => 'Сөөлгү $2 хүн иштинде болган $1 өскерлиишкиннерни көргүзер<br />$3',
'diff' => 'ылгал',
'hist' => 'төөгү',
-'hide' => 'чажырары',
-'show' => 'көÑ\80гүзеÑ\80и',
+'hide' => 'Чажырар',
+'show' => 'Ð\9aÓ©Ñ\80гүзеÑ\80',
'minoreditletter' => 'б',
'newpageletter' => 'Ч',
'boteditletter' => 'р',
'brokenredirects-delete' => 'ырадыры',
'withoutinterwiki' => 'Дыл холбаалар эвес арыннар',
-'withoutinterwiki-submit' => 'Көргүзери',
+'withoutinterwiki-submit' => 'Көргүзер',
'fewestrevisions' => 'Эң эвээш үндүрери арыннар',
'unwatching' => 'Хайгааравайн турар...',
'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
-'enotif_anon_editor' => 'аÑ\82 Ñ\8dвеÑ\81 ажÑ\8bглакÑ\87Ñ\8b $1',
+'enotif_anon_editor' => 'аÑ\82 Ñ\87ок киÑ\80жикÑ\87и $1',
'changed' => 'өскертти',
# Delete
'contribslink' => 'салыышкыннар',
'blocklogpage' => 'Кызыгаарлаашкынның журналы',
'blocklogentry' => ', [[$1]] $2 дургузунда кызыгаарлаттынган: $3',
-'block-log-flags-anononly' => 'чүгле ат эвес ажыглакчылар',
+'block-log-flags-anononly' => 'чүгле адыжок киржикчилер',
'block-log-flags-nocreate' => 'Кижилер бүрүткээри хоруглуг',
'block-log-flags-hiddenname' => 'ажыглакчының ады чажырган',
'tooltip-summary' => 'Кысказы-биле бижиңер',
# Attribution
-'anonymous' => '{{grammar:genitive|{{SITENAME}}}} ат эвес {{PLURAL:$1|ажыглакчызы|ажыглакчылары}}',
+'anonymous' => '{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}',
# Skin names
'skinname-cologneblue' => 'Cologne Blue',
# External editor support
'edit-externally' => 'Бо файлды даштыкы капсырылга-биле эдер',
-'edit-externally-help' => '(Улаштыр тодарадырда бо [//www.mediawiki.org/wiki/Manual:External_editors кыстып алыр саавырны] көрүңер)',
+'edit-externally-help' => '(Улаштыр тодарадырда бо [https://www.mediawiki.org/wiki/Manual:External_editors кыстып алыр саавырны] көрүңер)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'шупту',
* @author Kaganer
* @author Reedy
* @author Sahran
+ * @author Tel'et
*/
$rtl = true;
'tog-extendwatchlist' => 'كۈچەيتىلگەن كۆزەت تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسەت',
'tog-usenewrc' => 'بەت گۇرۇپپىلىنىشىغا ئاساسەن يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىمى (JavaScript زۆرۈر)',
'tog-numberheadings' => 'ماۋزۇغا ئۆزلۈكىدىن تەرتىپ نومۇرى قوش',
-'tog-showtoolbar' => 'تەھرىر قورال بالداقنى كۆرسەت (JavaScript زۆرۈر)',
-'tog-editondblclick' => 'قوش چەككەندە بەت تەھرىرلە (JavaScript زۆرۈر)',
+'tog-showtoolbar' => 'تەھرىر قورال بالداقنى كۆرسەت',
+'tog-editondblclick' => 'قوش چەككەندە بەت تەھرىرلە',
'tog-editsection' => '[تەھرىر] ئۇلانمىسىنى چېكىپ ئابزاس تەھرىرلەشكە يول قوي',
-'tog-editsectiononrightclick' => 'ماۋزۇنى چاشقىنەكتە ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي (JavaScript زۆرۈر)',
+'tog-editsectiononrightclick' => 'تېمىنى ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي',
'tog-showtoc' => 'مەزمۇن جەدۋىلى كۆرسەت (بىر بەتتە 3 تىن ئارتۇق ماۋزۇ بار بەتكە قارىتىلغان)',
'tog-rememberpassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})',
'tog-watchcreations' => 'مەن قۇرغان بەت ۋە يۈكلىگەن ھۆججەتلەرنى كۆزەت تىزىملىكىمگە قوش',
'tog-shownumberswatching' => 'بۇ بەتنى كۆزىتىۋاتقان ئىشلەتكۈچى سانىنى كۆرسەت',
'tog-oldsig' => 'نۆۋەتتىكى ئىمزا:',
'tog-fancysig' => 'ئىمزاغا wiki تېكستى سۈپىتىدە مۇئامىلە قىل (ئۆزلۈكىدىن ئۇلانما ھاسىل بولمايدۇ)',
-'tog-uselivepreview' => 'رÙ\89ئاÙ\84 Û\8bاÙ\82Ù\89تÙ\84Ù\89Ù\82 ئاÙ\84دÙ\89Ù\86 Ù\83Û\86زÙ\89تÙ\89Ø´Ù\86Ù\89 ئÙ\89Ø´Ù\84Û\95ت (JavaScript زÛ\86رÛ\88ر) (سىناق)',
+'tog-uselivepreview' => 'جاÙ\86Ù\84Ù\89Ù\82 ئاÙ\84دÙ\89Ù\86 Ù\83Û\86زÙ\89تÙ\89Ø´Ù\86Ù\89 ئÙ\89Ø´Ù\84Û\95ت (سىناق)',
'tog-forceeditsummary' => 'ئۈزۈندە كىرگۈزمىگەندە مېنى ئەسكەرت',
'tog-watchlisthideown' => 'كۆزەت تىزىملىكىدىن مېنىڭ تەھرىرلىگىنىمنى يوشۇر',
'tog-watchlisthidebots' => 'كۆزەت تىزىملىكىدىن ماشىنا ئادەم تەھرىرلىگەننى يوشۇر',
'oct' => 'ئۆكتەبىر',
'nov' => 'نويابىر',
'dec' => 'دېكابىر',
+'january-date' => '$1- يانۋار',
+'february-date' => '$1- فېۋرال',
+'march-date' => '$1- مارت',
+'april-date' => '$1- ئاپرىل',
+'may-date' => '$1- ماي',
+'june-date' => '$1- ئىيۇن',
+'july-date' => '$1- ئىيۇل',
+'august-date' => '$1- ئاۋغۇست',
+'september-date' => '$1- سىنتەبىر',
+'october-date' => '$1- ئۆكتەبىر',
+'november-date' => '$1- نويابىر',
+'december-date' => '$1- دىكابىر',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|تۈر|تۈرلەر}}',
'newwindow' => '(يېڭى كۆزنەكتە ئاچ)',
'cancel' => 'ۋاز كەچ',
'moredotdotdot' => 'تەپسىلىي…',
-'morenotlisted' => 'تÛ\95پسÙ\89Ù\84اتÙ\89 Ù\83Û\86رسÙ\89تÙ\89Ù\84Ù\85Ù\89Ú¯Û\95Ù\86Ù\84Ù\89رÙ\89â\80¦',
+'morenotlisted' => 'بÛ\87 تÙ\89زÙ\89Ù\85Ù\84Ù\89Ù\83 تÙ\88Ù\84Û\87Ù\82 ئÛ\95Ù\85Û\95س.',
'mypage' => 'بەتىم',
'mytalk' => 'مۇنازىرە بېتىم',
'anontalk' => 'بۇ IP نىڭ مۇنازىرە بېتى',
'create-this-page' => 'بۇ بەتنى قۇر',
'delete' => 'ئۆچۈر',
'deletethispage' => 'بۇ بەتنى ئۆچۈر',
+'undeletethispage' => ' بۇ بەتنى ئەسلىگە كەلتۈر',
'undelete_short' => 'ئۆچۈرۈلگەن {{PLURAL:$1|بىر تەھرىر|$1 تەھرىر}} ئەسلىگە كەلتۈرۈلدى',
'viewdeleted_short' => '{{PLURAL:$1|بىر ئۆچۈرۈلگەن نەشرى|$1 ئۆچۈرۈلگەن نەشرى}}نى كۆرسەت',
'protect' => 'قوغدا',
'articlepage' => 'مەزمۇن بېتىنى كۆرسەت',
'talk' => 'مۇنازىرە',
'views' => 'كۆرۈنۈش',
-'toolbox' => 'قورال ساندۇقى',
+'toolbox' => 'قوراللار',
'userpage' => 'ئىشلەتكۈچى بېتىنى كۆرسەت',
'projectpage' => 'قۇرۇلۇش بېتىنى كۆرسەت',
'imagepage' => 'ھۆججەت بېتىنى كۆرسەت',
'backlinksubtitle' => '← $1',
'retrievedfrom' => '"$1" دىن ئېرىشكەن',
'youhavenewmessages' => 'سىزدە $1 ($2) بار.',
-'newmessageslink' => 'يېڭى ئۇچۇر',
-'newmessagesdifflink' => 'ئاخىرقى ئۆزگەرتىش',
'youhavenewmessagesfromusers' => 'سىزنىڭ {{PLURAL:$3|باشقا ئىشلەتكۈچى|$3 ئىشلەتكۈچى}} $1 ($2)ڭىز بار.',
'youhavenewmessagesmanyusers' => 'سىزنىڭ نۇرغۇن ئىشلەتكۈچىدىن كەلگەن $1 ($2) بار.',
'newmessageslinkplural' => '{{PLURAL:$1|بىر يېڭى |يېڭى ئۇچۇر}}ئۇچۇر',
# General errors
'error' => 'خاتالىق',
'databaseerror' => 'ساندان خاتالىقى',
+'databaseerror-function' => 'فۇنكىسىيە: $1',
+'databaseerror-error' => 'خاتا: $1',
'laggedslavemode' => 'ئاگاھلاندۇرۇش: بەت يېقىنقى يېڭىلاشنى ئۆز ئىچىگە ئالمىغان بولۇشى مۇمكىن.',
'readonly' => 'ساندان قۇلۇپلانغان',
'enterlockreason' => 'قۇلۇپلىنىش سەۋەبىنى كىرگۈزۈڭ، قايتا ئېچىشنىڭ مۆلچەر ۋاقتىنىمۇ ئۆز ئىچىگە ئالىدۇ',
[[Special:Preferences|{{SITENAME}} تەڭشىكىڭىزنى تەڭشەشنى ئۇنتۇپ قالماڭ]].',
'yourname' => 'ئىشلەتكۈچى ئاتى:',
-'yourpassword' => 'ئىم:',
+'userlogin-yourname' => 'ئىشلەتكۈچى نامى',
+'userlogin-yourname-ph' => 'ئىشلەتكۈچى نامىڭىزنى كىرگۈزۈڭ',
+'createacct-another-username-ph' => 'ئىشلەتكۈچى نامىنى كىرگۈزۈڭ',
+'yourpassword' => 'پارول:',
+'userlogin-yourpassword' => 'پارول',
+'userlogin-yourpassword-ph' => 'پارولىڭىزنى كىرگۈزۈڭ',
+'createacct-yourpassword-ph' => 'پارول كىرگۈزۈڭ',
'yourpasswordagain' => 'ئاچقۇچنى قايتا بەسىڭ:',
+'createacct-yourpasswordagain' => 'پارولنى مۇقىملاشتۇرۇڭ',
+'createacct-yourpasswordagain-ph' => 'پارولنى قايتا كىرگۈزۈڭ',
'remembermypassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})',
+'userlogin-remembermypassword' => 'مېنى ئەستە ساقلا',
+'userlogin-signwithsecure' => 'بىخەتەر ئۇلىنىشنى ئىشلەت',
'yourdomainname' => 'دائىرە ئاتىڭىز:',
'password-change-forbidden' => 'بۇ ۋىكىدىكى ئىمنى ئۆزگەرتەلمەيسىز.',
'externaldberror' => 'بۇ سانداننى دەلىللەش خاتالىقى ياكى سىرتقى ھېساباتىڭىزنى يېڭىلاشنى چەكلىگەنلىكتىن بولغان بولۇشى مۇمكىن.',
'logout' => 'تىزىمدىن چىق',
'userlogout' => 'تىزىمدىن چىق',
'notloggedin' => 'تىزىمغا كىرمىدى',
+'userlogin-noaccount' => 'ھېساباتىڭىز يوقمۇ؟',
+'userlogin-joinproject' => '{{SITENAME}} قا ئەزا بولۇش',
'nologin' => "ھېساباتىڭىز يوقمۇ؟ '''$1'''.",
'nologinlink' => 'ھېساباتتىن بىرنى قۇر',
'createaccount' => 'ھېسابات قۇر',
'gotaccount' => "ھېساباتىم بار؟ '''$1'''.",
'gotaccountlink' => 'تىزىمغا كىر',
'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟',
+'userlogin-resetpassword-link' => 'پارولىڭىزنى ئۇنتۇپ قالدىڭىزمۇ؟',
+'helplogin-url' => 'Help:تىزىمغا كىرىش',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|تىزىمغا كىرىش ئۈچۈن ياردەم]]',
+'userlogin-loggedin' => 'سىز ئاللىقاچان {{GENDER:$1|$1}} ھالىتىدە تىزىمغا كىرىپ بولدىڭىز. تۆۋەندىكىلەرنى تولدۇرۇپ باشقا ئىشلەتكۈچى ھالىتىدە تىزىمغا كىرىڭ.',
+'userlogin-createanother' => 'باشقا ھېسابات قۇرىمەن',
+'createacct-join' => 'تۆۋەنگە ئۇچۇرلىرىڭىزنى كىرگۈزۈڭ.',
+'createacct-another-join' => 'يېڭى ئىشلەتكۈچىنىڭ ئۇچۇرلىرىنى كىرگۈزۈڭ.',
+'createacct-emailrequired' => 'ئېلخەت ئادرېسى',
+'createacct-emailoptional' => 'ئېلخەت ئادرېسى (ئىختىيارى)',
+'createacct-email-ph' => 'ئېلخەت ئادرېسىڭىزنى كىرگۈزۈڭ',
+'createacct-another-email-ph' => 'ئېلخەت ئادرېسى كىرگۈزۈڭ',
'createaccountmail' => 'ۋاقىتلىق ئىختىيارىي بىر ئېمنى ئىشلىتىدۇ ھەمدە تۆۋەندىكى بەلگىلەنگەن تورخەت ئادرېسىغا ئەۋەتىدۇ',
+'createacct-realname' => 'ھەقىقى ئىسمىڭىز (ئىختىيارى)',
'createaccountreason' => 'سەۋەب:',
-'badretype' => 'سىز كىرگۈزگەن ئىم ماس كەلمىدى.',
+'createacct-reason' => 'سەۋەبى',
+'createacct-reason-ph' => 'نېمىشقا باشقا ھېسابات قۇرماقچى بولدىڭىز',
+'createacct-captcha' => 'بىخەتەرلىك تەكشۈرۈشى',
+'createacct-imgcaptcha-ph' => 'ئۈستىدە كۆرگىنىڭىزنى كىرگۈزۈڭ',
+'createacct-submit' => 'ھېساباتىڭىزنى قۇرۇڭ',
+'createacct-another-submit' => 'باشقا ھېسابات قۇرىمەن',
+'createacct-benefit-heading' => '{{SITENAME}} سىزگە ئوخشاش كىشىلەر تەرىپىدىن قۇرۇلغان.',
+'createacct-benefit-body1' => '{{PLURAL:$1|قېتىم}} تەھرىرلەنگەن',
+'createacct-benefit-body2' => '{{PLURAL:$1|بەت}}',
+'badretype' => 'سىز كىرگۈزگەن پارول ماس كەلمىدى.',
'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى ئىشلىتىلىۋاتىدۇ.
باشقا ئاتنى تاللاڭ.',
'loginerror' => 'تىزىمغا كىرىش خاتالىقى',
+'createacct-error' => 'ھېسابات قۇرۇش خاتالىقى',
'createaccounterror' => 'ھېسابات قۇرالمىدى: $1',
'nocookiesnew' => 'ئىشلەتكۈچى ھېساباتى قۇرۇلدى ئەمما سىز تېخى كىرمىدىڭىز..
كىرگۈزگىنىڭىزنى تەكشۈرۈڭ.',
'nouserspecified' => 'ئىشلەتكۈچى ئاتىدىن بىرنى بەلگىلەڭ.',
'login-userblocked' => 'بۇ ئىشلەتكۈچى چەكلەنگەن. تىزىمغا كىرىشكە يول قويۇلمايدۇ.',
-'wrongpassword' => 'كىرگۈزگەن ئىم خاتا.
+'wrongpassword' => 'كىرگۈزگەن پارول خاتا.
قايتا سىناڭ.',
-'wrongpasswordempty' => 'ئىم كىرگۈزمىدىڭىز
+'wrongpasswordempty' => 'پارول كىرگۈزمىدىڭىز
قايتا سىناڭ.',
'passwordtooshort' => 'ئىم ئاز دېگەندە {{PLURAL:$1|1 ھەرپ|$1 ھەرپ}} بولۇشى لازىم.',
-'password-name-match' => 'ئىم ئىشلەتكۈچى ئاتىڭىزدىن پەرقلىنىشى لازىم.',
-'password-login-forbidden' => 'بۇ ئىشلەتكۈچى ئاتى ۋە ئىم چەكلەنگەن.',
+'password-name-match' => 'پارولىڭىز ئىشلەتكۈچى نامىڭىزدىن پەرقلىنىشى لازىم.',
+'password-login-forbidden' => 'بۇ ئىشلەتكۈچى نامى ۋە پارول چەكلەنگەن.',
'mailmypassword' => 'يېڭى ئىمنى ئېخەتكە ئەۋەت',
-'passwordremindertitle' => '{{SITENAME}} ئۈچۈن يېڭى ۋاقىتلىق ئىم',
+'passwordremindertitle' => '{{SITENAME}} ئۈچۈن يېڭى ۋاقىتلىق پارول',
'passwordremindertext' => 'باشقىلار (بەلكىم سىز، IP ئادرېسى $1)
{{SITENAME}} بېكەتنىڭ يېڭى ئىم ($4) نى ئىلتىماس قىلدى .
"$2" ئىشلەتكۈچىنىڭ يېڭى ۋاقىتلىق ئىمنى "$3" غا تەڭشىدى.
'mailerror' => 'ئېلخەت يوللىغاندا خاتالىق كۆرۈلدى:$1',
'acct_creation_throttle_hit' => 'Wiki ئىشلىتىدىغان زىيارەتچى IP ئادرېسىڭىزنى ئىشلىتىپ {{PLURAL:$1|1 ھېسابات|$1 ھېسابات}} قۇردى.
مۇشۇ پەيتتە يەنە ھېسابات قۇرالمايسىز.',
-'emailauthenticated' => 'ئېلخەت ئادرېسىڭىز $2 $3 ئىناۋەتلىك ئىكەنلىكى دەلىللەندى.',
+'emailauthenticated' => 'ئېلخەت ئادرېسىڭىز $2 سائەت $3 دە دەلىللەندى.',
'emailnotauthenticated' => 'ئېلخەت ئادرېسىڭىز تېخى دەلىللەنمىدى.
تۆۋەندىكى ئىقتىدارى ھېچقانداق ئېلخەت ئەۋەتمەيدۇ.',
'noemailprefs' => 'بۇ ئىقتىدارنى ئىشلىتىش ئۈچۈن مايىللىق تەڭشىكىڭىزدە ئېلخەت ئادرېسى بەلگىلەڭ.',
'user-mail-no-body' => 'بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.',
# Change password dialog
-'resetpass' => 'ئىم ئۆزگەرت',
+'resetpass' => 'پارولنى ئۆزگەرتىش',
'resetpass_announce' => 'سىز ۋاقىتلىق ئېلخەت جەزملەش كودىدا تىزىمغا كىرگەن.
تىزىمغا كىرىشنى تاماملاشتا، بۇ جايدا يېڭى ئىم بەلگىلىشىڭىز لازىم:',
'resetpass_text' => '<!-- بۇ يەرگە تېكست قوشۇڭ -->',
'resetpass_header' => 'ھېسابات ئىمنى ئۆزگەرت',
-'oldpassword' => 'كونا ئىم:',
-'newpassword' => 'يېڭى ئىم:',
-'retypenew' => 'يېڭى ئىمنى قايتا كىرگۈزۈڭ:',
-'resetpass_submit' => 'ئىم بەلگىلەپ تىزىمغا كىرىڭ',
+'oldpassword' => 'كونا پارول:',
+'newpassword' => 'يېڭى پارول:',
+'retypenew' => 'يېڭى پارولنى قايتا كىرگۈزۈڭ:',
+'resetpass_submit' => 'پارول بەلگىلەپ تىزىمغا كىرىڭ',
'changepassword-success' => 'سىز ئىمنى مۇۋەپپەقىيەتلىك ئۆزگەرتتىڭىز!
تىزىمغا كىرىۋاتىسىز…',
'resetpass_forbidden' => 'ئىمنى ئۆزگەرتەلمىدى',
'resetpass-no-info' => 'سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.',
-'resetpass-submit-loggedin' => 'ئىم ئۆزگەرت',
+'resetpass-submit-loggedin' => 'پارولنى ئۆزگەرتىش',
'resetpass-submit-cancel' => 'ۋاز كەچ',
'resetpass-wrong-oldpass' => 'ۋاقىتلىق ياكى نۆۋەتتىكى ئىم ئىناۋەتسىز.
ئىمنى ئاللىبۇرۇن ئۆزگەرتىپ بولدىڭىز ياكى يېڭى ۋاقىتلىق ئىم ئىلتىماس قىلدىڭىز.',
-'resetpass-temp-password' => 'ۋاقىتلىق ئىم:',
+'resetpass-temp-password' => 'ۋاقىتلىق پارول:',
# Special:PasswordReset
'passwordreset' => 'ئىمنى ئەسلىگە قايتۇرماق',
'changeemail-oldemail' => 'نۆۋەتتىكى ئېلخەت ئادرېسى:',
'changeemail-newemail' => 'يېڭى ئېلخەت ئادرېسى:',
'changeemail-none' => '(يوق)',
-'changeemail-password' => '{{SITENAME}} دىكى ئىم:',
+'changeemail-password' => '{{SITENAME}} دىكى پارولىڭىز:',
'changeemail-submit' => 'ئېلخەت ئۆزگەرت',
'changeemail-cancel' => 'ۋاز كەچ',
'loginreqtitle' => 'تىزىمغا كىرىڭ',
'loginreqlink' => 'تىزىمغا كىر',
'loginreqpagetext' => '$1 بولغاندىلا ئاندىن باشقا بەتلەرنى كۆرەلەيسىز.',
-'accmailtitle' => 'ئىم يوللاندى.',
+'accmailtitle' => 'پارول يوللاندى.',
'accmailtext' => "[[User talk:$1|$1]] ئىختىيارىي قۇرۇلغان ئىم $2 غا يوللاندى.
يېڭى ھېساباتقا قۇرغان ئىمنى تىزىمغا كىرىپ''[[Special:ChangePassword|ئىم ئۆزگەرت]]'' بېتىدىن ئۆزگەرتەلەيسىز.",
'''{{int:minoreditletter}}''' ئازراقلا ئۆزگەرتىش.",
'history-fieldset-title' => 'كۆز يۈگۈرتۈش تارىخى',
'history-show-deleted' => 'ئۆچۈرۈلگەنلا',
-'histfirst' => 'تÛ\87Ù\86جÙ\89',
-'histlast' => 'ئاخىرقى',
+'histfirst' => 'ئÛ\95Ú Ù\83Ù\88Ù\86ا',
+'histlast' => 'ئەڭ يېڭى',
'historysize' => '$1 {{PLURAL:$1|بايت|بايت}}',
'historyempty' => '(بوش)',
'revdelete-hide-image' => 'ھۆججەت مەزمۇنىنى يوشۇر',
'revdelete-hide-name' => 'مەشغۇلات ۋە نىشاننى يوشۇر',
'revdelete-hide-comment' => 'تەھرىر ئىزاھاتىنى يوشۇر',
-'revdelete-hide-user' => 'تەھرىرلىگۈچىنىڭ ئىشلەتكۈچى ئاتى/IP ئادرېس يوشۇر',
+'revdelete-hide-user' => 'تەھرىرلىگۈچىنىڭ نامى/IP ئادرېسىنى يوشۇر',
'revdelete-hide-restricted' => 'مەشغۇلاتچى ۋە باشقا ئىشلەتكۈچىنىڭ سانلىق مەلۇمات كۆرۈشىنىمۇ چەكلە',
'revdelete-radio-same' => '(ئۆزگەرتمە)',
'revdelete-radio-set' => 'ھەئە',
'search-interwiki-default' => '$1 نەتىجە:',
'search-interwiki-more' => '(تېخىمۇ كۆپ)',
'search-relatedarticle' => 'ئالاقىدار',
-'mwsuggest-disable' => 'AJAX تەكلىپىنى چەكلە',
+'mwsuggest-disable' => 'ئىزدەش تەكلىپىنى چەكلە',
'searcheverything-enable' => 'ھەممە ئات بوشلۇقىدىن ئىزدە',
'searchrelated' => 'ئالاقىدار',
'searchall' => 'ھەممىسى',
'preferences' => 'مايىللىق',
'mypreferences' => 'مايىللىق',
'prefs-edits' => 'تەھرىر سانى:',
-'prefsnologin' => 'تىزىمغا كىرمىدى',
-'prefsnologintext' => 'سىز ئالدى بىلەن <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} تىزىمغا كىر]</span>سىڭىز ئاندىن ئىشلەتكۈچى مايىللىقنى تەڭشىيەلەيسىز.',
-'changepassword' => 'ئىم ئۆزگەرت',
+'changepassword' => 'پارولنى ئۆزگەرتىش',
'prefs-skin' => 'تېرە',
'skin-preview' => 'ئالدىن كۆزەت',
'datedefault' => 'مايىللىق يوق',
'prefs-watchlist-edits-max' => 'ئەڭ كۆپ سانى: 1000',
'prefs-watchlist-token' => 'كۆزەت تىزىملىك نىشانى:',
'prefs-misc' => 'ئارىلاشما تۈر',
-'prefs-resetpass' => 'ئىم ئۆزگەرت',
+'prefs-resetpass' => 'پارولنى ئۆزگەرتىش',
'prefs-changeemail' => 'ئېلخەت ئۆزگەرت',
'prefs-setemail' => 'ئېلخەت ئادرېس تەڭشەك',
'prefs-email' => 'ئېلخەت تاللانما',
'prefs-dateformat' => 'چېسلا فورماتى',
'prefs-timeoffset' => 'ۋاقىت پەرقى',
'prefs-advancedediting' => 'ئالىي تاللانما',
+'prefs-editor' => 'تەھرىرلىگۈچ',
+'prefs-preview' => 'ئالدىن كۆزەت',
'prefs-advancedrc' => 'ئالىي تاللانما',
'prefs-advancedrendering' => 'ئالىي تاللانما',
'prefs-advancedsearchoptions' => 'ئالىي تاللانما',
'prefs-displayrc' => 'كۆرسىتىش تاللانما',
'prefs-displaysearchoptions' => 'كۆرسىتىش تاللانما',
'prefs-displaywatchlist' => 'كۆرسىتىش تاللانما',
+'prefs-tokenwatchlist' => 'ئاچقۇچ',
'prefs-diffs' => 'پەرقلەر',
# User preference: email validation using jQuery
'right-editusercssjs' => 'باشقا ئىشلەتكۈچىنىڭ CSS ۋە JS ھۆججىتىنى تەھرىرلە',
'right-editusercss' => 'باشقا ئىشلەتكۈچىنىڭ CSS ھۆججىتىنى تەھرىرلە',
'right-edituserjs' => 'باشقا ئىشلەتكۈچىنىڭ JS ھۆججىتىنى تەھرىرلە',
+'right-editmyusercss' => 'ئۆزىڭىزنىڭ CSS ھۆججىتىڭىزنى تەھرىرلەڭ',
+'right-editmyuserjs' => 'ئۆزىڭىزنىڭ JavaScript ھۆججىتىڭىزنى تەھرىرلەڭ',
'right-rollback' => 'ئاخىرقى ئىشلەتكۈچىنىڭ مەلۇم بەتكە ئېلىپ بارغان تەھرىرىنى تېزلىكتە ئەسلىگە كەلتۈر',
'right-markbotedits' => 'ئەسلىگە كەلتۈرۈلگەن تەھرىرنى ماشىنا ئادەم تەھرىرى دەپ بەلگە قوي',
'right-noratelimit' => 'چاستوتا چەكلىمىسى ئىشلىتىلمىدى',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
+'enhancedrc-history' => 'تارىخ',
'recentchanges' => 'يېقىنقى ئۆزگەرتىشلەر',
'recentchanges-legend' => 'يېقىنقى ئۆزگەرتىش تاللانمىسى',
'recentchanges-summary' => 'بۇ wiki نىڭ يېقىنقى ئۆزگىرىشىنى ئىز قوغلا.',
'recentchanges-label-minor' => 'بۇ ئازراقلا تەھرىرلەش',
'recentchanges-label-bot' => 'بۇ تەھرىرنى ماشىنا ئادەم ئېلىپ بارغان',
'recentchanges-label-unpatrolled' => 'بۇ تەھرىر تېخى كۆزىتىلمىگەن',
+'recentchanges-legend-newpage' => '$1 - يېڭى بەت',
'rcnote' => "تۆۋەندىكى $4 $5 يېقىنقى {{PLURAL:$2|كۈن|'''$2''' كۈن}} ئىچىدىكى {{PLURAL:$1| '''1''' ئۆزگەرتىش| '''$1''' ئۆزگەرتىش}} خاتىرىسى",
'rcnotefrom' => "تۆۋەندىكىسى '''$2''' نىڭ ئۆزگەرتىشى (ئەڭ كۆپ بولغاندا '''$1''' كۆرسىتىدۇ )",
'rclistfrom' => '$1 دىن باشلانغان يېڭى ئۆزگەرتىشنى كۆرسەت',
'rc-change-size' => '$1',
'rc-change-size-new' => 'ئۆزگەرتكەندىن كېيىن $1 {{PLURAL:$1|بايت}}',
'newsectionsummary' => '* $1 * يېڭى ئابزاس',
-'rc-enhanced-expand' => 'تەپسىلاتىنى كۆرسەت (JavaScript قوللىشى زۆرۈر)',
+'rc-enhanced-expand' => 'تەپسىلاتىنى كۆرسەت',
'rc-enhanced-hide' => 'تەپسىلاتىنى يوشۇر',
'rc-old-title' => 'ئەڭ دەسلەپتە "$1" سۈپىتىدە قۇرۇلغان',
'listfiles_size' => 'چوڭلۇقى',
'listfiles_description' => 'چۈشەندۈرۈش',
'listfiles_count' => 'نەشرى',
+'listfiles-latestversion' => 'نۆۋەتتىكى نەشرى',
+'listfiles-latestversion-yes' => 'ھەئە',
+'listfiles-latestversion-no' => 'ياق',
# File description page
'file-anchor-link' => 'ھۆججەت',
'randompage' => 'ئىختىيارىي بەت',
'randompage-nopages' => 'تۆۋەندىكى {{PLURAL:$2|ئات بوشلۇقى|ئات بوشلۇقى}}دا بەت يوق: $1.',
+# Random page in category
+'randomincategory' => 'تۈردىكى ئىختىيارى بەت',
+'randomincategory-invalidcategory' => '«$1» ئىناۋەتلىك تۈر نامى ئەمەس',
+'randomincategory-nopages' => '[[:Category:$1|$1]] تۈرىدە ھىچقانداق بەت يوق.',
+
# Random redirect
'randomredirect' => 'ئىختىيارىي قايتا نىشانلانغان بەت',
'randomredirect-nopages' => '"$1" ئات بوشلۇقىدا قايتا نىشانلانغان بەت يوق.',
'contributions' => '{{$1:GENDER|ئىشلەتكۈچى}} تۆھپىسى',
'contributions-title' => '$1 نىڭ ئىشلەتكۈچى تۆھپىسى',
'mycontris' => 'تۆھپە',
-'contribsub2' => '$1 نىڭ تۆھپىسى ($2)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2) ئۈچۈن',
'nocontribs' => 'بۇ ئۆلچەمگە ماس كېلىدىغان ئۆزگەرتىش تېپىلمىدى.',
-'uctop' => '(ئۈستى)',
+'uctop' => '(نۆۋەتتىكى)',
'month' => 'ئايدىن بۇيان (ياكى ئىلگىرى):',
'year' => 'يىلدىن بۇيان (ياكى ئىلگىرى):',
'allmessagesdefault' => 'كۆڭۈلدىكى ئۇچۇر تېكستى',
'allmessagescurrent' => 'نۆۋەتتىكى ئۇچۇر تېكستى',
'allmessagestext' => 'بۇ جايدا تەڭشىگىلى بولىدىغان ھەممە سىستېما كۆرۈنۈش ئۇچۇرلىرى كۆرسىتىلدى.
-ئەگەر ھەقىقىي يەرلەشتۈرۈلگەن MediaWiki غا تۆھپە قوشماقچى بولسىڭىز[//www.mediawiki.org/wiki/Localisation MediaWiki يەرلىكلەشتۈرۈش] ۋە [//translatewiki.net translatewiki.net] نى زىيارەت قىلىڭ.',
+ئەگەر ھەقىقىي يەرلەشتۈرۈلگەن MediaWiki غا تۆھپە قوشماقچى بولسىڭىز[https://www.mediawiki.org/wiki/Localisation MediaWiki يەرلىكلەشتۈرۈش] ۋە [//translatewiki.net translatewiki.net] نى زىيارەت قىلىڭ.',
'allmessagesnotsupportedDB' => "بۇ بەتنى ئىشلەتكىلى بولمايدۇ، سەۋەبى '''\$wgUseDatabaseMessages''' چەكلەنگەن.",
'allmessages-filter-legend' => 'سۈزگۈچ',
'allmessages-filter' => 'ئىختىيارىچە سۈزگۈچ ھالىتى:',
'pageinfo-article-id' => 'بەت ID',
'pageinfo-language' => 'بەت مەزمۇن تىلى',
'pageinfo-robot-policy' => 'ئىزدەش ماتور ھالىتى',
-'pageinfo-robot-index' => 'ئىندېكىسلاشچان',
-'pageinfo-robot-noindex' => 'ئىندېكىسلانمايدىغان',
+'pageinfo-robot-index' => 'چەكلەنمىگەن',
+'pageinfo-robot-noindex' => 'چەكلەنگەن',
'pageinfo-views' => 'كۆرۈنۈش سانى',
'pageinfo-watchers' => 'بەت كۆزەتكۈچىلەر سانى',
'pageinfo-redirects-name' => 'بۇ بەتكە قايتا نىشانلايدۇ',
'ago' => '$1 بۇرۇن',
'just-now' => 'بايا',
+# Human-readable timestamps
+'monday-at' => 'دۈشەنبە $1 دە',
+'tuesday-at' => 'سەيشەنبە $1 دە',
+'wednesday-at' => 'چارشەنبە $1 دە',
+'thursday-at' => 'پەيشەنبە $1 دە',
+'friday-at' => 'جۈمە $1 دە',
+'saturday-at' => 'شەنبە $1 دە',
+'sunday-at' => 'يەكشەنبە $1 دە',
+'yesterday-at' => 'تۈنۈگۈن $1 دە',
+
# Bad image list
'bad_image_list' => 'تۆۋەندىكى فورماتتا يېزىڭ:
'exif-compression-4' => 'CCITT نىڭ 4-گۇرۇپپا فاكس كودلىنىشى',
'exif-copyrighted-true' => 'نەشر ھوقۇقى',
-'exif-copyrighted-false' => 'ئاممىۋى دائىرە',
+'exif-copyrighted-false' => 'نەشىر ھوقۇقى ھالىتى بېكىتىلمىگەن',
'exif-unknowndate' => 'نامەلۇم چېسلا',
# External editor support
'edit-externally' => 'بۇ ھۆججەتنى سىرتقى قوللىنىشچان پروگراممىدا تەھرىرلە',
-'edit-externally-help' => '( [//www.mediawiki.org/wiki/Manual:External_editors تەڭشەك قەدىمى] نى كۆرۈپ تەپسىلاتىنى چۈشىنىڭ)',
+'edit-externally-help' => '( [https://www.mediawiki.org/wiki/Manual:External_editors تەڭشەك قەدىمى] نى كۆرۈپ تەپسىلاتىنى چۈشىنىڭ)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ھەممىسى',
'version-hook-subscribedby' => 'ئىمزا قويغۇچى',
'version-version' => '(نەشرى $1)',
'version-license' => 'ئىجازەتنامە',
-'version-poweredby-credits' => "بۇ ۋىكىنى '''[//www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
+'version-poweredby-credits' => "بۇ ۋىكىنى '''[https://www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
'version-poweredby-others' => 'باشقا',
+'version-poweredby-translators' => 'translatewiki.net تەرجىمانلىرى',
'version-credits-summary' => 'تۆۋەندىكى كىشىنىڭ [[Special:Version|MediaWiki]] غا تۆھپە قوشقانلىقىغا رەھمەت ئېيتىمىز.',
'version-license-info' => 'MediaWiki ئەركىن يۇمشاق دېتال؛ سىز ئەركىن يۇمشاق دېتال ۋەخپىسىنىڭ ئېلان قىلغان GNU ئاممىباپ ئاممىۋى ئىجازەت ماددىلىرىدىكى بەلگىمىلەرگە ئاساسەن، بۇ پىروگراممىنى قايتا تارقىتىپ ياكى ئۆزگەرتەلەيسىز؛ مەيلى سىز مەزكۇر ئىجازەتنامىنىڭ ئىككىنچى نەشرى ياكى (ئۆزىڭىز تاللىغان) خالىغان كۈندە تارقىتىلغان نەشرىنى ئاساس قىلسىڭىز بولۇۋېرىدۇ.
'version-entrypoints-header-entrypoint' => 'كىرىش نۇقتىسى',
'version-entrypoints-header-url' => 'URL',
+# Special:Redirect
+'redirect-value' => 'قىممىتى:',
+'redirect-file' => 'ھۆججەت نامى',
+'redirect-not-exists' => 'قىممىتى تېپىلمىدى',
+
# Special:FileDuplicateSearch
'fileduplicatesearch' => 'تەكرار ھۆججەت ئىزدە',
'fileduplicatesearch-summary' => 'چاچما (hash) قىممىتىگە ئاساسەن تەكرار ھۆججەت ئىزدە.',
'tags-tag' => 'خەتكۈچ ئاتى',
'tags-display-header' => 'ئۆزگەرتىش تىزىملىكىدە كۆرسىتىلىش شەكلى',
'tags-description-header' => 'مەناسىنىڭ تولۇق چۈشەندۈرۈلۈشى',
+'tags-active-header' => 'ئاكتىپمۇ؟',
'tags-hitcount-header' => 'بەلگە سېلىنغان ئۆزگەرتىش',
+'tags-active-yes' => 'ھەئە',
+'tags-active-no' => 'ياق',
'tags-edit' => 'ئۆزگەرتىش',
'tags-hitcount' => '$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
'dberr-problems' => 'كەچۈرۈڭ! بۇ بېكەتتە تېخنىكىلىق قىيىنچىلىق كۆرۈلدى.',
'dberr-again' => 'بىر قانچە مىنۇت كۈتۈپ ئاندىن قايتا يۈكلەڭ.',
'dberr-info' => '(ساندان مۇلازىمىتىرىغا ئۇلىنالمىدى: $1)',
+'dberr-info-hidden' => '(ساندان مۇلازىمېتىرىغا ئۇلىنالمىدى)',
'dberr-usegoogle' => 'بۇ ۋاقىتتا Google ئىزدىگۈچتىن ئىزدەشنى سىناپ بېقىڭ.',
'dberr-outofdate' => 'دىققەت ئۇلار ئىندىكېسلىغان مەزمۇن ئەڭ يېڭى بولماسلىقى مۇمكىن.',
'dberr-cachederror' => 'بۇ ئىلتىماس قىلغان بەتنىڭ غەملەنگەن كۆپەيتىلمىسى، ئەڭ يېڭىسى بولماسلىقى مۇمكىن.',
'htmlform-submit' => 'تاپشۇر',
'htmlform-reset' => 'ئۆزگەرتىشتىن يېنىۋال',
'htmlform-selectorother-other' => 'باشقا',
+'htmlform-no' => 'ياق',
+'htmlform-yes' => 'ھەئە',
+'htmlform-chosen-placeholder' => 'بىرنى تاللاڭ',
# SQLite database support
'sqlite-has-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللايدۇ',
'sqlite-no-fts' => '$1 پۈتۈن تېكست ئىزدەشنى قوللىمايدۇ',
# New logging system
-'logentry-delete-delete' => '$1 $3 بەتنى ئۆچۈرەتتى',
-'logentry-delete-restore' => '$1 $3 بەتنى ئەسلىگە قايتۇردى',
+'logentry-delete-delete' => '$1 $3 بەتنى {{GENDER:$2|ئۆچۈرىۋەتتى}}',
+'logentry-delete-restore' => '$1 $3 بەتنى {{GENDER:$2|ئەسلىگە قايتۇردى}}',
'logentry-delete-event' => '$1 ئىشلەتكۈچى $3 دىكى {{PLURAL:$5|خاتىرە ھادىسە}}سىنىڭ كۆۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
'logentry-delete-revision' => '$1 ئىشلەتكۈچى $3 بەتتىكى {{PLURAL:$5|تۈزىتىلگەن نەشرى}}نىڭ كۆرۈنۈشچانلىقىنى ئۆزگەرتتى: $4',
'logentry-delete-event-legacy' => '$3 دىكى خاتىرە كۆرۈنۈشچانلىقنى $1 ئۆزگەرتتى',
'duration-centuries' => '$1 {{PLURAL:$1|ئەسىر}}',
'duration-millennia' => '$1 {{PLURAL:$1|مىڭ يىل}}',
+# Limit report
+'limitreport-cputime' => 'CPU ئىشلەتكەن ۋاقىت',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|سېكۇنت}}',
+'limitreport-walltime' => 'ئەمەلىي كەتكەن ۋاقىت',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|سېكۇنت}}',
+
+# Special:ExpandTemplates
+'expand_templates_output' => 'نەتىجە',
+'expand_templates_ok' => 'جەزملە',
+'expand_templates_preview' => 'ئالدىن كۆزەت',
+
);
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Отримано з $1',
'youhavenewmessages' => 'Ви отримали $1 ($2).',
-'newmessageslink' => 'нові повідомлення',
-'newmessagesdifflink' => 'остання зміна',
'youhavenewmessagesfromusers' => 'Ви отримали $1 від {{PLURAL:$3|іншого дописувача|$3 інших дописувачів}} ($2).',
'youhavenewmessagesmanyusers' => 'Ви отримали $1 від багатьох дописувачів ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлення|нові повідомлення|нових повідомлень}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|остання зміна|останні зміни|останніх змін}}',
+'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлення|999=нові повідомлення}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|остання зміна|999=останні зміни}}',
'youhavenewmessagesmulti' => 'Ви отримали нові повідомлення на $1',
'editsection' => 'ред.',
'editold' => 'ред.',
'invalidtitle-knownnamespace' => 'Неприйнятна назва у просторі імен «$2» і текстом «$3»',
'invalidtitle-unknownnamespace' => 'Неправильний заголовок з невідомим номером простору імен ($1) і текстом: «$2»',
'exception-nologin' => 'Не виконано вхід',
-'exception-nologin-text' => 'Ця сторінка чи дія потребує, щоб Ви ввійшли до цієї Вікі.',
+'exception-nologin-text' => 'Необхідно [[Special:Userlogin|увійти]], щоб мати доступ до цієї сторінки або дії.',
+'exception-nologin-text-manual' => 'Потрібно $1, щоб мати доступ до цієї сторінки або дії.',
# Virus scanner
'virus-badscanner' => "Помилка налаштування: невідомий сканер вірусів: ''$1''",
крім випадків, коли були встановлені додаткові обмеження власниками сайту.",
'revdelete-confirm' => 'Будь ласка, підтвердить, що ви справді бажаєте це здійснити, усвідомлюєте наслідки та робите це згідно з [[{{MediaWiki:Policy-url}}|правилами]].',
'revdelete-suppress-text' => "Приховування може відбуватися '''лише''' в таких випадках:
-
-* Ð\9dепоÑ\82Ñ\80Ñ\96бна особиста інформація
+* Потенційно наклепницькі відомості
+* Ð\9dедоÑ\80еÑ\87на особиста інформація
*: ''домашні адреси, номери телефонів, номер паспорта тощо.''",
-'revdelete-legend' => 'УÑ\81Ñ\82ановиÑ\82и обмеженнÑ\8f',
-'revdelete-hide-text' => 'ТекÑ\81Ñ\82 випÑ\80авленÑ\8c',
+'revdelete-legend' => 'Ð\92Ñ\81Ñ\82ановиÑ\82и обмеженнÑ\8f видимоÑ\81Ñ\82Ñ\96',
+'revdelete-hide-text' => 'ТекÑ\81Ñ\82 веÑ\80Ñ\81Ñ\96Ñ\97 Ñ\81Ñ\82оÑ\80Ñ\96нки',
'revdelete-hide-image' => 'Приховати вміст файлу',
'revdelete-hide-name' => "Приховати дію та її об'єкт",
-'revdelete-hide-comment' => 'Ð\9fÑ\96дÑ\81Ñ\83мок змÑ\96н',
+'revdelete-hide-comment' => 'Ð\9aоменÑ\82аÑ\80 Ñ\80едагÑ\83ваннÑ\8f',
'revdelete-hide-user' => "Ім'я автора/IP адреса",
'revdelete-hide-restricted' => 'Приховати дані також і від адміністраторів',
'revdelete-radio-same' => '(не змінювати)',
-'revdelete-radio-set' => 'Ð\92идимий',
-'revdelete-radio-unset' => 'Ð\9fÑ\80иÑ\85ований',
+'revdelete-radio-set' => 'Ð\92идимо',
+'revdelete-radio-unset' => 'Ð\9fÑ\80иÑ\85овано',
'revdelete-suppress' => 'Приховувати дані також і від адміністраторів',
'revdelete-unsuppress' => 'Зняти обмеження з відновлених версій',
'revdelete-log' => 'Причина:',
'preferences' => 'Налаштування',
'mypreferences' => 'Налаштування',
'prefs-edits' => 'Кількість редагувань:',
-'prefsnologin' => 'Ви не ввійшли в систему',
-'prefsnologintext' => 'Щоб змінити налаштування користувача, ви повинні <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ввійти до системи]</span>.',
+'prefsnologintext2' => 'Потрібно $1 для налаштування параметрів користувача.',
'changepassword' => 'Змінити пароль',
'prefs-skin' => 'Оформлення',
'skin-preview' => 'Попередній перегляд',
'recentchanges-label-minor' => 'Це незначна зміна',
'recentchanges-label-bot' => 'Це редагування зроблене ботом',
'recentchanges-label-unpatrolled' => 'Це редагування ще не було відпатрульоване',
+'recentchanges-legend-newpage' => '$1 — нова сторінка',
'rcnote' => "{{PLURAL:$1|Остання '''$1''' зміна|Останні '''$1''' зміни|Останні '''$1''' змін}} за '''$2''' {{PLURAL:$2|день|дні|днів}}, на час $5, $4.",
'rcnotefrom' => 'Нижче відображені редагування з <strong>$2</strong> (до <strong>$1</strong>).',
'rclistfrom' => 'Показати редагування починаючи з $1.',
електронною поштою: $PAGEEDITOR_EMAIL
через вікі: $PAGEEDITOR_WIKI
-Якщо ви не відвідаєте цю сторінку, то в подальшому не будете отримувати сповіщень про наступні редагування. Ви також можете вимкнути налаштування сповіщень для усіх сторінок зі списку спостереження.
+Якщо ви не відвідаєте цю сторінку під своїм обліковим записом, то в подальшому не будете отримувати сповіщень про наступні дії. Ви також можете вимкнути налаштування сповіщень для усіх сторінок зі списку спостереження.
- Ваша дружня система сповіщення {{grammar:genitive|{{SITENAME}}}}
+Ваша дружня система сповіщення {{grammar:genitive|{{SITENAME}}}}
--
Зміна налаштувань повідомлень електронною поштою
'blockip' => 'Блокування',
'blockip-title' => 'Блокування користувача',
'blockip-legend' => 'Блокування користувача',
-'blockiptext' => "Використовуйте форму нижче, щоб заблокувати можливість редагування із зазначеної IP-адреси або або ім'я користувача.
-Це слід робити лише для попередження вандалізму і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].
-Заповніть конкретну причину нижче (наприклад, вкажіть точні сторінки, на яких було зроблено акт вандалізму).",
+'blockiptext' => "Використовуйте форму нижче, щоб заблокувати можливість редагування зазначеній IP-адресі або користувачу.
+Це слід робити лише для запобігання порушенням і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].
+Обов'язково заповніть причину нижче, бажано дати інформативну вичерпну інформацію (наприклад, послатися на конкретні правила, дати посилання на редагування користувача, які призвели до блокування). Можна конкретизувати причину блокування на сторінці обговорення користувача.
+* Якщо ви блокуєте обліковий запис бота, переконайтеся, що ви вимкнули автоблокування (для запобігання автоматичного блокування облікових записів власника бота або інших ботів).
+* Зверніть увагу, що IP-адреси у більшості випадків не варто блокувати на більший за декілька днів термін, щоб під блокування не підпали інші користувачі з таким самим IP. Винятки — частий довготривалий вандалізм.",
'ipadressorusername' => "IP-адреса або ім'я користувача:",
'ipbexpiry' => 'Термін:',
'ipbreason' => 'Причина:',
'allmessagesdefault' => 'Стандартний текст',
'allmessagescurrent' => 'Поточний текст',
'allmessagestext' => 'Це список усіх системних повідомлень, які доступні в просторі назв «MediaWiki».
-Будь ласка, відвідайте [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] і [//translatewiki.net translatewiki.net], якщо ви хочете зробити внесок до спільної локалізації MediaWiki.',
+Будь ласка, відвідайте [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] і [//translatewiki.net translatewiki.net], якщо ви хочете зробити внесок до спільної локалізації MediaWiki.',
'allmessagesnotsupportedDB' => "Ця сторінка не може використовуватися, оскільки вимкнена опція '''\$wgUseDatabaseMessages'''.",
'allmessages-filter-legend' => 'Фільтр',
'allmessages-filter' => 'Фільтр за внесеними змінами:',
'tooltip-undo' => 'Прибрати внесені зміни і показати попередній перегляд. Дозволяє зазначити причину скасування.',
'tooltip-preferences-save' => 'Зберегти налаштування',
'tooltip-summary' => 'Введіть короткий опис',
-'tooltip-iwiki' => '$1 — $2',
+'interlanguage-link-title' => '$1 — $2',
# Stylesheets
'common.css' => '/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */',
'pageinfo-length' => 'Довжина сторінки (в байтах)',
'pageinfo-article-id' => 'ID сторінки',
'pageinfo-language' => 'Мова вмісту сторінки',
+'pageinfo-content-model' => 'Модель вмісту сторінки',
'pageinfo-robot-policy' => 'Індексація пошуковими системами',
'pageinfo-robot-index' => 'Індексується',
'pageinfo-robot-noindex' => 'Не індексується',
# External editor support
'edit-externally' => 'Редагувати цей файл, використовуючи зовнішню програму',
-'edit-externally-help' => '(Подробиці див. на сторінці [//www.mediawiki.org/wiki/Manual:External_editors Інструкції з установки зовнішніх редакторів])',
+'edit-externally-help' => '(Подробиці див. на сторінці [https://www.mediawiki.org/wiki/Manual:External_editors Інструкції з установки зовнішніх редакторів])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'всі',
'ellipsis' => '...',
'percent' => '$1%',
'parentheses' => '($1)',
+'quotation-marks' => '„$1“',
# Multipage image navigation
'imgmultipageprev' => '← попередня сторінка',
'version-version' => '(Версія $1)',
'version-svn-revision' => '(r$2)',
'version-license' => 'Ліцензія',
-'version-poweredby-credits' => "Ця Вікі працює на системі управління вмістом '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ця Вікі працює на системі управління вмістом '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'інші',
'version-poweredby-translators' => 'перекладачі translatewiki.net',
'version-credits-summary' => 'Нам хотілося б відзначити наступних осіб, що зробили внесок у [[Special:Version|MediaWiki]].',
# Special:SpecialPages
'specialpages' => 'Спеціальні сторінки',
-'specialpages-note' => '----
-* Звичайні службові сторінки
-* <span class="mw-specialpagerestricted">Сторінки з обмеженим доступом.</span>
-* <span class="mw-specialpagecached">Кешовані сторінки (можуть бути застарілими).</span>',
+'specialpages-note-top' => 'Легенда',
+'specialpages-note' => '* Звичайні службові сторінки
+* <span class="mw-specialpagerestricted">Сторінки з обмеженим доступом.</span>',
'specialpages-group-maintenance' => 'Технічні звіти',
'specialpages-group-other' => 'Інші',
'specialpages-group-login' => 'Вхід до системи / реєстрація',
'limitreport-expansiondepth' => 'Найвища глибина розширення',
'limitreport-expensivefunctioncount' => 'Число дорогої функції аналізатора',
+# Special:ExpandTemplates
+'expandtemplates' => 'Розгортання шаблонів',
+'expand_templates_intro' => 'Ця спеціальна сторінка перетворює текст, рекурсивно розгортаючи всі шаблони в ньому.
+Також розгортаються всі функції парсера
+<nowiki>{{</nowiki>#language:...}} і змінні типу
+<nowiki>{{</nowiki>CURRENTDAY}}.
+Фактично, усе всередині подвійних фігурних дужок.',
+'expand_templates_title' => 'Заголовок сторінки для {{FULLPAGENAME}} тощо:',
+'expand_templates_input' => 'Вхідний текст:',
+'expand_templates_output' => 'Результат',
+'expand_templates_xml_output' => 'XML-вивід',
+'expand_templates_ok' => 'Гаразд',
+'expand_templates_remove_comments' => 'Вилучити коментарі',
+'expand_templates_remove_nowiki' => 'Ігнорувати теги <nowiki> в результаті',
+'expand_templates_generate_xml' => 'Показати дерево аналізу XML',
+'expand_templates_preview' => 'Попередній перегляд',
+
);
* @author زكريا
* @author سمرقندی
* @author محبوب عالم
+ * @author පසිඳු කාවින්ද
*/
$fallback8bitEncoding = 'windows-1256';
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => '‘‘$1’’ مستعادہ منجانب',
'youhavenewmessages' => 'آپکے لیۓ ایک $1 ہے۔ ($2)',
-'newmessageslink' => 'نئے پیغامات',
-'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـر سے فـرق',
'newmessagesdifflinkplural' => 'آخری {{PLURAL:$1|تبدیلی|تبدیلیاں}}',
'youhavenewmessagesmulti' => 'ء$1 پر آپ کیلئے نئے پیغامات ہیں',
'editsection' => 'ترمیم',
'preferences' => 'ترجیحات',
'mypreferences' => 'میری ترجیہات',
'prefs-edits' => 'تدوینات کی تعداد:',
-'prefsnologin' => 'نا داخل شدہ حالت',
-'prefsnologintext' => 'ترجیحات ترتیب دینے کیلئے <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} داخل نوشتہ]</span> ہونا لازمی ہے.',
'changepassword' => 'کلمۂ شناخت تبدیل کریں',
'prefs-skin' => 'جِلد',
'skin-preview' => 'پیش منظر',
# Search suggestions
'searchsuggest-search' => 'تلاش',
+# Special:ExpandTemplates
+'expandtemplates' => 'سانچے کو وسیع کریں',
+'expand_templates_input' => 'ان پٹ متن:',
+'expand_templates_output' => 'نتیجہ',
+'expand_templates_ok' => 'ٹھیک ہے',
+'expand_templates_remove_comments' => 'تبصرے حذف کریں',
+'expand_templates_preview' => 'پیش نظارہ',
+
);
'ok' => 'OK',
'retrievedfrom' => ' "$1" dan olindi',
'youhavenewmessages' => 'Sizga $1 keldi ($2).',
-'newmessageslink' => 'yangi xabarlar',
-'newmessagesdifflink' => 'soʻnggi oʻzgarish',
'youhavenewmessagesfromusers' => 'Siz {{PLURAL:$3|boshqa foydalanuvchidan|$3 ta foydalanuvchidan}} $1 oldingiz ($2).',
'youhavenewmessagesmanyusers' => "Siz ko'p foydalanuvchilardan $1 oldingiz ($2).",
-'newmessageslinkplural' => '{{PLURAL:$1|yangi xabar|yangi xabarlar}}',
+'newmessageslinkplural' => '{{PLURAL:$1|yangi xabar|999=yangi xabarlar}}',
'newmessagesdifflinkplural' => 'oxirgi {{PLURAL:$1|oʻzgarish|oʻzgarishlar}}',
'youhavenewmessagesmulti' => 'Siz $1ga yangi xat oldingiz',
'editsection' => 'tahrirlash',
'preferences' => 'Moslamalar',
'mypreferences' => 'Moslamalarim',
'prefs-edits' => 'Tahrirlar soni:',
-'prefsnologin' => "Siz tizimda o'zingizni tanitmadingiz",
'changepassword' => 'Maxfiy soʻzni oʻzgartirish',
'prefs-skin' => 'Tashqi ko‘rinishi',
'skin-preview' => 'Ko‘rib chiqish',
# External editor support
'edit-externally' => 'Bu faylni tashqi dasturiy ilovalar yordamida tahrirla',
-'edit-externally-help' => "(Batafsil ma'lumotlar uchun [//www.mediawiki.org/wiki/Manual:External_editors bu yerga] qarang)",
+'edit-externally-help' => "(Batafsil ma'lumotlar uchun [https://www.mediawiki.org/wiki/Manual:External_editors bu yerga] qarang)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'Barcha',
'ok' => 'OK',
'retrievedfrom' => 'Cavà fora da "$1"',
'youhavenewmessages' => 'Te ghè $1 ($2).',
-'newmessageslink' => 'dei mesagi novi',
-'newmessagesdifflink' => 'ultimo canbiamento',
'youhavenewmessagesfromusers' => "Te ghè $1 da {{PLURAL:$3|n'altro utente|$3 utenti}} ($2).",
'youhavenewmessagesmanyusers' => 'Te ghè $1 da vari utenti ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un messagio novo|dei messagi novi}}',
'preferences' => 'Prefarense',
'mypreferences' => 'Prefarense',
'prefs-edits' => 'Nùmaro de modifiche:',
-'prefsnologin' => 'No te ghè eseguìo el login',
-'prefsnologintext' => 'Te ghè da aver eseguìo el <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} login]</span> par poder personalixare le to preferense.',
'changepassword' => 'Cànbia ła password',
'prefs-skin' => 'Aspeto grafico',
'skin-preview' => 'Anteprima',
'recentchanges-label-minor' => 'Sto qua el xe un canbiamento picenin',
'recentchanges-label-bot' => 'Sta modifica el la ga fata un bot',
'recentchanges-label-unpatrolled' => 'Sta modifica no la xe stà gnancora verificà',
+'recentchanges-legend-newpage' => '$1 - pagina nova',
'rcnote' => "Qua soto se vede {{PLURAL:$1|l'ultimo canbiamento|i ultimi '''$1''' canbiamenti}} {{PLURAL:$2|in te l'ultimo zorno|in tei ultimi '''$2''' zorni}}, fin a le $5 del $4.",
'rcnotefrom' => "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
'rclistfrom' => 'Fà védar i canbiamenti fati dal $1',
'allmessagesdefault' => 'Testo predefinìo',
'allmessagescurrent' => 'Testo come che el xe desso',
'allmessagestext' => "Sta quà l'è na lista de tuti i messagi disponibili nel namespace MediaWiki.
-Par piaser visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se te voli jutarne par la traduzion del software MediaWiki ne le varie lengue.",
+Par piaser visita [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//translatewiki.net translatewiki.net] se te voli jutarne par la traduzion del software MediaWiki ne le varie lengue.",
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' no'l xè supportà parché '''\$wgUseDatabaseMessages''' no'l xè ativo.",
'allmessages-filter-legend' => 'Filtro',
'allmessages-filter' => 'Filtra par stato de personalixassion:',
# External editor support
'edit-externally' => 'Modifega sto file usando on programa foresto',
-'edit-externally-help' => '(Par saverghene de pì consultare łe [//www.mediawiki.org/wiki/Manual:External_editors istrusion])',
+'edit-externally-help' => '(Par saverghene de pì consultare łe [https://www.mediawiki.org/wiki/Manual:External_editors istrusion])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tute',
'version-hook-subscribedby' => 'Sotoscrizioni',
'version-version' => '(Version $1)',
'version-license' => 'Licensa',
-'version-poweredby-credits' => "Sta wiki la va con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Sta wiki la va con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'altri',
'version-poweredby-translators' => 'tradutori de translatewiki.net',
'version-credits-summary' => "Semo contenti de riconosare łe seguenti persone p' 'ver contribuio a [[Special:Version|MediaWiki]].",
# Special:SpecialPages
'specialpages' => 'Pagine speciali',
-'specialpages-note' => '----
-* Pàjine speciałi normałi.
+'specialpages-note' => '* Pàjine speciałi normałi.
* <span class="mw-specialpagerestricted">Pàjine speciałi a aceso limità.</span>',
'specialpages-group-maintenance' => 'Resoconti de manutenzion',
'specialpages-group-other' => 'Altre pagine speciali',
# Image rotation
'rotate-comment' => 'Imagine girà de $1 {{PLURAL:$1|grado|gradi}} in senso orario',
+# Special:ExpandTemplates
+'expandtemplates' => 'Espansion dei template',
+'expand_templates_intro' => 'Sta pagina speciale la elabora un testo espandendo tuti i template presenti. La calcola inoltre el risultato de le funzion suportàe dal parser come <nowiki>{{</nowiki>#language:...}} e de le variabili de sistema quali <nowiki>{{</nowiki>CURRENTDAY}}, overo in pratica tuto quel che se cata tra dopie parentesi grafe. La funsiona riciamando le oportune funzion del parser de MediaWiki.',
+'expand_templates_title' => 'Contesto (par {{FULLPAGENAME}} ecc.):',
+'expand_templates_input' => 'Testo da espàndar:',
+'expand_templates_output' => 'Risultato',
+'expand_templates_xml_output' => 'Output in formato XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ignora i comenti',
+'expand_templates_remove_nowiki' => 'Cava i tag <nowiki> dal risultato',
+'expand_templates_generate_xml' => 'Mostra àlbaro sintàtico XML',
+'expand_templates_preview' => 'Anteprima',
+
);
'ok' => 'Ka',
'retrievedfrom' => 'Purde - "$1"',
'youhavenewmessages' => 'Tö sat $1 ($2).',
-'newmessageslink' => 'uded tedotused',
-'newmessagesdifflink' => "jäl'gmäine toižetuz",
'youhavenewmessagesmulti' => 'Teil om uzid tedotusid $1-lehtpolel',
'editsection' => 'redaktiruida',
'editold' => 'redaktiruida',
'preferences' => 'Järgendused',
'mypreferences' => 'Järgendused',
'prefs-edits' => 'Redaktiruindoiden lugu:',
-'prefsnologin' => 'Tö et olgoi kirjutanus sistemha.',
-'prefsnologintext' => 'Teile pidab <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kirjutadas sistemha]</span>, miše toižetada järgendusid.',
'changepassword' => 'Peitsanan toižetuz',
'prefs-skin' => 'Irdnägu',
'skin-preview' => 'Ezikaclend',
'recentchanges-label-minor' => 'Nece redakcii om penikaine',
'recentchanges-label-bot' => 'Necen redakcijan tegi bot',
'recentchanges-label-unpatrolled' => 'Necidä redakcijad ei völ patruliruinugoi',
+'recentchanges-legend-newpage' => "$1 - uz' lehtpol'",
'rcnote' => "Alahan om ozutadud {{PLURAL:$1| '''1''' toižetuz|'''$1''' toižetust}} {{PLURAL:$2|jäl'gmäižes päiväs|jäl'gmäižiš '''$2''' päiviš}}, aigal $5, $4.",
'rcnotefrom' => "Alemba oma anttud toižetused '''$2'''-späi ( '''$1'''-hesai).",
'rclistfrom' => 'Ozutada uded toižetused dataspäi $1 augotaden',
# External editor support
'edit-externally' => 'Redaktiruida nece fail irdprogrammal',
-'edit-externally-help' => '(Kc. [//www.mediawiki.org/wiki/Manual:External_editors seižutamižinstrukcijoid])',
+'edit-externally-help' => '(Kc. [https://www.mediawiki.org/wiki/Manual:External_editors seižutamižinstrukcijoid])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'kaik',
# Special:SpecialPages
'specialpages' => 'Specialižed lehtpoled',
-'specialpages-note' => '----
-* Järgeližed specialižed lehtpoled.
+'specialpages-note' => '* Järgeližed specialižed lehtpoled.
* <span class="mw-specialpagerestricted">Kaitud specialižed lehtpoled.</span>',
'specialpages-group-maintenance' => 'Tehnižen holitandan satusenladindad',
'specialpages-group-other' => 'Toižed specialižed lehtpoled',
'duration-years' => "$1 {{PLURAL:$1|voz'|vot}}",
'duration-decades' => '$1 {{PLURAL:$1|dekad|dekadad}}',
+# Special:ExpandTemplates
+'expand_templates_input' => 'Tekst:',
+'expand_templates_output' => "Rezul'tat",
+'expand_templates_xml_output' => 'XML-lähtmižvend',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Čuta kommentarijad',
+'expand_templates_preview' => 'Ezikacund',
+
);
'pagetitle' => '$1 – {{SITENAME}}',
'retrievedfrom' => 'Lấy từ “$1”',
'youhavenewmessages' => 'Bạn có $1 ($2).',
-'newmessageslink' => 'tin nhắn mới',
-'newmessagesdifflink' => 'thay đổi gần nhất',
'youhavenewmessagesfromusers' => 'Bạn có $1 từ {{PLURAL:$3|người dùng khác|$3 người dùng}} ($2).',
'youhavenewmessagesmanyusers' => 'Bạn có $1 từ nhiều người dùng ($2).',
'newmessageslinkplural' => '{{PLURAL:$1}}tin nhắn mới',
'noemailcreate' => 'Bạn cần cung cấp một địa chỉ thư điện tử hợp lệ',
'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 sai phạm.',
-'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.',
+'eauthentsent' => 'Thư xác nhận đã được gửi cho địa chỉ thư điện tử được chỉ định. Trước khi bạn có thể nhận thư, bạn cần thực hiện hướng dẫn trong thư để xác nhận 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.',
'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.',
-'emailnotauthenticated' => 'Địa chỉ thư điện tử của bạn chưa được xác nhận. Chức năng thư điện tử chưa bật.',
+'emailnotauthenticated' => 'Địa chỉ thư điện tử của bạn chưa được xác nhận. Các chức năng sau sẽ không gửi thư điện tử.',
'noemailprefs' => 'Hãy ghi một địa chỉ thư điện tử trong tùy chọn cá nhân để có thể sử dụng tính năng này.',
'emailconfirmlink' => 'Xác nhận địa chỉ thư điện tử',
'invalidemailaddress' => 'Địa chỉ thư điện tử không được chấp nhận vì định dạng thư có vẻ sai.
'accmailtitle' => 'Đã gửi mật khẩu.',
'accmailtext' => "Một mật khẩu được tạo ngẫu nhiên cho [[User talk:$1|$1]] đã được gửi đến $2. Có thể đổi mật khẩu tại trang ''[[Special:ChangePassword|đổi mật khẩu]]'' sau khi đã đăng nhập.",
'newarticle' => '(Mới)',
-'newarticletext' => "Bạn đi đến đây từ một liên kết đến một trang chưa tồn tại. Để tạo trang, hãy bắt đầu gõ vào ô bên dưới (xem [[{{MediaWiki:Helppage}}|trang trợ giúp]] để có thêm thông tin). Nếu bạn đến đây do nhầm lẫn, chỉ cần nhấn vào nút '''Back''' trong trình duyệt của bạn.",
+'newarticletext' => "Bạn đi đến đây từ một liên kết đến một trang chưa tồn tại. Để tạo trang, hãy bắt đầu gõ vào ô bên dưới (xem [[{{MediaWiki:Helppage}}|trang trợ giúp]] để có thêm thông tin). Nếu bạn đến đây do nhầm lẫn, chỉ cần nhấn vào nút '''Lùi''' (hoặc Trở lại, Quay lại, Back) trong trình duyệt của bạn.",
'anontalkpagetext' => "----''Đây là trang thảo luận của một người dùng vô danh chưa tạo tài khoản hoặc có tài khoản nhưng không đăng nhập.
Do đó chúng ta phải dùng một dãy số gọi là địa chỉ IP để xác định anh/chị ta.
Một địa chỉ IP như vậy có thể có nhiều người cùng dùng chung.
'revdelete-suppress-text' => "Việc ẩn giấu '''chỉ''' nên dùng trong các trường hợp sau:
* Thông tin có thể phỉ báng
* Thông tin cá nhân không thích hợp
-*: ''địa chỉ nhà và số điện thoại, số an sinh xã hội, v.v.''",
+*: ''địa chỉ nhà và số điện thoại, số chứng minh nhân dân, số an sinh xã hội, v.v.''",
'revdelete-legend' => 'Thiết lập hạn chế khả kiến',
-'revdelete-hide-text' => 'Ẩn nội dung phiên bản',
+'revdelete-hide-text' => 'Nội dung phiên bản',
'revdelete-hide-image' => 'Ẩn nội dung tập tin',
'revdelete-hide-name' => 'Ẩn tác vụ và đích của tác vụ',
-'revdelete-hide-comment' => 'Ẩn tóm lược sửa đổi',
-'revdelete-hide-user' => 'Ẩn tên người dùng hay địa chỉ IP của người viết trang',
+'revdelete-hide-comment' => 'Tóm lược sửa đổi',
+'revdelete-hide-user' => 'Tên người dùng hay địa chỉ IP của người viết trang',
'revdelete-hide-restricted' => 'Ẩn giấu thông tin khỏi các Quản lý lẫn thành viên khác',
'revdelete-radio-same' => '(không đổi)',
-'revdelete-radio-set' => 'Có',
-'revdelete-radio-unset' => 'Ẩn',
+'revdelete-radio-set' => 'Ẩn',
+'revdelete-radio-unset' => 'Hiện',
'revdelete-suppress' => 'Che dữ liệu đối với bảo quản viên cũng như các thành viên khác',
'revdelete-unsuppress' => 'Bỏ các hạn chế trên các phiên bản được phục hồi',
'revdelete-log' => 'Lý do:',
'preferences' => 'Tùy chọn',
'mypreferences' => 'Tùy chọn',
'prefs-edits' => 'Số lần sửa đổi:',
-'prefsnologin' => 'Chưa đăng nhập',
-'prefsnologintext' => 'Bạn phải <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} đăng nhập]</span> để thiết lập tùy chọn cá nhân.',
'changepassword' => 'Đổi mật khẩu',
'prefs-skin' => 'Hình dạng',
'skin-preview' => 'Xem trước',
'recentchanges-label-minor' => 'Đây là một sửa đổi nhỏ',
'recentchanges-label-bot' => 'Sửa đổi này do bot thực hiện',
'recentchanges-label-unpatrolled' => 'Sửa đổi này chưa được tuần tra',
+'recentchanges-legend-newpage' => '$1 - trang mới',
'rcnote' => "Dưới đây là {{PLURAL:$1|thay đổi '''duy nhất'''|'''$1''' thay đổi gần nhất}} trong {{PLURAL:$2|ngày qua|'''$2''' ngày qua}}, tính tới $5 lúc $4.",
'rcnotefrom' => "Thay đổi từ '''$2''' (hiển thị tối đa '''$1''' thay đổi).",
'rclistfrom' => 'Hiển thị các thay đổi từ $1.',
'ipbreason-dropdown' => '*Một số lý do cấm thường gặp
** Phá hoại
** Thêm thông tin sai lệch
-** Tẩy trống nội dung trang
-** Đăng liên kết thư rác dẫn đến trang web độc hại
+** Xóa nội dung trang
+** Đăng liên kết thư rác dẫn đến trang Web bên ngoài
** Cho thông tin rác vào trang
** Có thái độ dọa dẫm/quấy rối
** Lạm dụng nhiều tài khoản
'allmessagesdefault' => 'Nội dung mặc định',
'allmessagescurrent' => 'Nội dung hiện thời',
'allmessagestext' => 'Đây là toàn bộ thông điệp hệ thống có trong không gian tên MediaWiki.
-Mời vào [//www.mediawiki.org/wiki/Localisation?uselang=vi Địa phương hóa MediaWiki] và [//translatewiki.net/wiki/?uselang=vi translatewiki.net] nếu bạn muốn đóng góp dịch chung cả MediaWiki.',
+Mời vào [https://www.mediawiki.org/wiki/Localisation?uselang=vi Địa phương hóa MediaWiki] và [//translatewiki.net/wiki/?uselang=vi translatewiki.net] nếu bạn muốn đóng góp dịch chung cả MediaWiki.',
'allmessagesnotsupportedDB' => "Trang này không dùng được vì biến '''\$wgUseDatabaseMessages''' đã bị tắt.",
'allmessages-filter-legend' => 'Bộ lọc',
'allmessages-filter' => 'Lọc theo tình trạng sửa đổi:',
'tooltip-undo' => '“Lùi lại” sẽ lùi sửa đổi này và mở trang sửa đổi ở chế độ xem trước. Cho phép thêm lý do vào tóm lược.',
'tooltip-preferences-save' => 'Lưu tùy chọn',
'tooltip-summary' => 'Hãy nhập câu tóm lược',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/* Mã CSS đặt ở đây sẽ áp dụng cho mọi hình dạng */',
'pageinfo-length' => 'Chiều dài của trang (byte)',
'pageinfo-article-id' => 'Mã số trang',
'pageinfo-language' => 'Ngôn ngữ nội dung trang',
+'pageinfo-content-model' => 'Kiểu nội dung trang',
'pageinfo-robot-policy' => 'Ghi chỉ mục bởi robot',
'pageinfo-robot-index' => 'Cho phép',
'pageinfo-robot-noindex' => 'Không cho phép',
'svg-long-desc' => 'tập tin SVG, $1×$2 điểm ảnh trên danh nghĩa, kích thước: $3',
'svg-long-desc-animated' => 'tập tin hình động SVG, $1×$2 điểm ảnh trên danh nghĩa, kích thước: $3',
'svg-long-error' => 'Tập tin SVG có lỗi: $1',
-'show-big-image' => 'Độ phân giải tối đa',
+'show-big-image' => 'Tập tin gốc',
'show-big-image-preview' => 'Kích thước của hình xem trước: $1.',
'show-big-image-other' => '{{PLURAL:$2|Độ phân giải|Các độ phân giải}} khác: $1.',
'show-big-image-size' => '$1×$2 điểm ảnh',
# External editor support
'edit-externally' => 'Sửa bằng phần mềm bên ngoài',
-'edit-externally-help' => '(Xem [//www.mediawiki.org/wiki/Manual:External_editors hướng dẫn cài đặt bằng tiếng Anh] để biết thêm thông tin)',
+'edit-externally-help' => '(Xem [https://www.mediawiki.org/wiki/Manual:External_editors hướng dẫn cài đặt bằng tiếng Anh] để biết thêm thông tin)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'tất cả',
# Separators for various lists, etc.
'ellipsis' => '…',
+'quotation-marks' => '“$1”',
# Multipage image navigation
'imgmultipageprev' => '← trang trước',
'version-hook-subscribedby' => 'Được theo dõi bởi',
'version-version' => '(Phiên bản $1)',
'version-license' => 'Giấy phép bản quyền',
-'version-poweredby-credits' => "Wiki này chạy trên '''[//www.mediawiki.org/ MediaWiki]''', bản quyền © 2001–$1 $2.",
+'version-poweredby-credits' => "Wiki này chạy trên '''[https://www.mediawiki.org/ MediaWiki]''', bản quyền © 2001–$1 $2.",
'version-poweredby-others' => 'những người khác',
'version-poweredby-translators' => 'các biên dịch viên translatewiki.net',
'version-credits-summary' => 'Chúng tôi muốn công nhận những người sau đã đóng góp vào [[Special:Version|MediaWiki]].',
# Special:Redirect
'redirect' => 'Đổi hướng đến tập tin, người dùng, hoặc số phiên bản',
'redirect-legend' => 'Đổi hướng đến tập tin hoặc trang',
-'redirect-summary' => 'Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản được cho vào), hoặc trang cá nhân (theo số thành viên).',
+'redirect-summary' => 'Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].',
'redirect-submit' => 'Đi',
'redirect-lookup' => 'Tra cứu:',
'redirect-value' => 'Giá trị:',
# Special:SpecialPages
'specialpages' => 'Các trang đặc biệt',
-'specialpages-note' => '----
-* Trang đặc biệt thông thường.
+'specialpages-note' => '* Trang đặc biệt thông thường.
* <strong class="mw-specialpagerestricted">Trang đặc biệt được hạn chế.</strong>
* <span class="mw-specialpagecached">Trang đặc biệt được lấy từ vùng nhớ đệm (có thể lỗi thời).</span>',
'specialpages-group-maintenance' => 'Báo cáo bảo quản',
'limitreport-expansiondepth' => 'Độ sâu bung cao nhất',
'limitreport-expensivefunctioncount' => 'Số lời gọi hàm cú pháp tốn cần mức độ xử lý cao',
+# Special:ExpandTemplates
+'expandtemplates' => 'Bung bản mẫu',
+'expand_templates_intro' => 'Trang đặc biệt này sẽ nhận vào văn bản và bung tất cả các bản mẫu trong nó ra một cách đệ quy cho đến hết. Nó cũng bung cả những hàm cú pháp như <code><nowiki>{{</nowiki>#language:…}}</code>, và những biến số như <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Thực ra nó bung các dữ liệu bình thường đặt trong ngoặc móc.',
+'expand_templates_title' => 'Tên của trang văn cảnh (để phân tích {{FULLPAGENAME}} v.v.):',
+'expand_templates_input' => 'Mã nguồn để bung:',
+'expand_templates_output' => 'Kết quả',
+'expand_templates_xml_output' => 'Xuất XML',
+'expand_templates_ok' => 'Bung',
+'expand_templates_remove_comments' => 'Bỏ các chú thích',
+'expand_templates_remove_nowiki' => 'Bỏ qua thẻ <nowiki> trong kết quả',
+'expand_templates_generate_xml' => 'Xem cây phân tích XML',
+'expand_templates_preview' => 'Xem trước',
+
);
'ok' => 'In ôrdnung',
'retrievedfrom' => 'Fon „$1“ ghold',
'youhavenewmessages' => "S'gajd $1 af dajnâr disghusjoons-sajdn ($2).",
-'newmessageslink' => 'naje middajlunga',
-'newmessagesdifflink' => 'lädschde fârendârung',
'youhavenewmessagesmulti' => "S'gajd naje middajlungn: $1",
'editsection' => 'Beärbâdn',
'editold' => 'Bearbajdn',
'preferences' => 'ajschdelunga',
'mypreferences' => 'Ajschdelunga',
'prefs-edits' => 'So ofd umgmoodld:',
-'prefsnologin' => 'Ned ôôgmäld',
-'prefsnologintext' => 'Ärschd wen\'d <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} ôôgmäld]</span> bisch, ghôôsch dâj âjschdelungn ändârn.',
'changepassword' => "S'bhaswôrd ändârn",
'prefs-skin' => 'Schaale',
'skin-preview' => 'Môôl schbign',
# External editor support
'edit-externally' => 'Dii dadaj mid an ägsdärna brogram ändârn',
-'edit-externally-help' => '(Määr un genauârs dâdsuu baj den [//www.mediawiki.org/wiki/Manual:External_editors Inschdaladsjoonsanwajsungn])',
+'edit-externally-help' => '(Määr un genauârs dâdsuu baj den [https://www.mediawiki.org/wiki/Manual:External_editors Inschdaladsjoonsanwajsungn])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ale',
'ok' => 'Si!',
'retrievedfrom' => 'Pekopiedon se „$1“',
'youhavenewmessages' => 'Su pad ola binons $1 ($2).',
-'newmessageslink' => 'nuns nulik',
-'newmessagesdifflink' => 'votükam lätik',
'youhavenewmessagesfromusers' => 'Labol $1 de {{PLURAL:$3|geban votik|gebans $3}} ($2).',
'youhavenewmessagesmanyusers' => 'Labol $1 de gebans mödik ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|nuni nulik|nunis nulik}}',
'preferences' => 'Buükams',
'mypreferences' => 'Buükams',
'prefs-edits' => 'Num redakamas:',
-'prefsnologin' => 'No enunädon oki',
-'prefsnologintext' => 'Nedol <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nunädön oli]</span> büä kanol votükön gebanabuükamis.',
'changepassword' => 'Votükön letavödi',
'prefs-skin' => 'Fomät',
'skin-preview' => 'Büologed',
'recentchanges-label-minor' => 'Atos binon redakam pülik',
'recentchanges-label-bot' => 'Redakam at pädunon fa el bot',
'recentchanges-label-unpatrolled' => 'Redakam at no nog pekontrolon',
+'recentchanges-legend-newpage' => '$1 - pad nulik',
'rcnote' => "Dono {{PLURAL:$1|binon votükam '''1'''|binons votükams '''$1'''}} lätikün {{PLURAL:$2|dela|delas '''$2'''}} lätikün, pänumädöls tü $5, $4.",
'rcnotefrom' => "Is palisedons votükams sis '''$2''' (jü '''$1''').",
'rclistfrom' => 'Jonön votükamis nulik, primölo tü düp $1',
'allmessagesdefault' => 'Vödem rigädik',
'allmessagescurrent' => 'Vödem nuik',
'allmessagestext' => 'Is binon lised sitanunas valik lonöföl in nemaspad: Sitanuns.
-Gebolös [//www.mediawiki.org/wiki/Localisation Topükami ela MediaWiki] ed el [//translatewiki.net translatewiki.net] if vilol keblünön topükame valemik ela MediaWiki.',
+Gebolös [https://www.mediawiki.org/wiki/Localisation Topükami ela MediaWiki] ed el [//translatewiki.net translatewiki.net] if vilol keblünön topükame valemik ela MediaWiki.',
'allmessagesnotsupportedDB' => "Pad at no kanon pagebön bi el '''\$wgUseDatabaseMessages''' penemögükon.",
'allmessages-filter-legend' => 'Sul',
'allmessages-filter-unmodified' => 'Penevotüköl',
# External editor support
'edit-externally' => 'Votükön ragivi at me nünömaprogram plödik',
-'edit-externally-help' => '(Reidolös eli [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] [in Linglänapük] ad tuvön nünis pluik)',
+'edit-externally-help' => '(Reidolös eli [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] [in Linglänapük] ad tuvön nünis pluik)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'valikis',
# Special:SpecialPages
'specialpages' => 'Pads patik',
-'specialpages-note' => '----
-* Pads patik nomik.
+'specialpages-note' => '* Pads patik nomik.
* <span class="mw-specialpagerestricted">Pads patik pemiedüköl.</span>',
'specialpages-group-maintenance' => 'Nunods tefü kiped',
'specialpages-group-other' => 'Pads patik votik',
'duration-centuries' => '{{PLURAL:$1|tumyel|tumyels}} $1',
'duration-millennia' => '{{PLURAL:$1|milyel|milyels}} $1',
+# Special:ExpandTemplates
+'expandtemplates' => 'stäänükön samafomotis',
+'expand_templates_intro' => 'Pad patik at sumon vödemi e stäänükon samafomotis onik valik okvokölo.
+Stäänükon i programasekätis soäs
+<code><nowiki>{{</nowiki>#language:...}}</code> e vödis soäs <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Ibo, stäänükon valikosi vü pärs klämas fridik.',
+'expand_templates_title' => 'Yumedatiäd, pro {{FULLPAGENAME}} e r.:',
+'expand_templates_input' => 'Penolös vödem:',
+'expand_templates_output' => 'Seks',
+'expand_templates_xml_output' => 'Seks fomätü XML',
+'expand_templates_ok' => 'Baiced',
+'expand_templates_remove_comments' => 'Moükön küpetis',
+'expand_templates_generate_xml' => 'Jonön bimi: XML',
+'expand_templates_preview' => 'Büologed',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Jälcinnü adresissa "$1"',
'youhavenewmessages' => 'Teill on $1 ($2).',
-'newmessageslink' => 'Uusiit zapiskoit',
-'newmessagesdifflink' => 'viimõin muutuz',
'editsection' => 'muuttaa',
'editold' => 'muuttaa',
'viewsourceold' => 'lähtekoodi',
# External editor support
'edit-externally' => 'Muuttaa sitä failia ulkopoolizõõ prograammiikaa.',
-'edit-externally-help' => '(Kattsoga [//www.mediawiki.org/wiki/Manual:External_editors praavilõd], kui tahotta lisäinformaattsia.)',
+'edit-externally-help' => '(Kattsoga [https://www.mediawiki.org/wiki/Manual:External_editors praavilõd], kui tahotta lisäinformaattsia.)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'koko istori',
'ok' => 'Hää külh',
'retrievedfrom' => 'Vällä otsit teedüskogost "$1"',
'youhavenewmessages' => 'Sul om $1 ($2).',
-'newmessageslink' => 'vahtsit sõnomiid',
-'newmessagesdifflink' => 'perämäne muutminõ',
'youhavenewmessagesmulti' => 'Sullõ om vahtsit sõnomit lehe pääl $1',
'editsection' => 'toimõndaq',
'editold' => 'toimõndaq',
'preferences' => 'Säädmine',
'mypreferences' => 'Säädmiseq',
'prefs-edits' => 'Tõimõndamiisi arv:',
-'prefsnologin' => 'Sa olõ-i nimega sisse lännüq',
-'prefsnologintext' => 'Et säädmiisi tetäq, tulõ sul [[Special:UserLogin|nimega sisse minnäq]].',
'changepassword' => 'Muudaq salasõnna',
'prefs-skin' => 'Vällänägemine',
'skin-preview' => 'Kaeminõ',
'allmessagesdefault' => 'Vaikimiisi tekst',
'allmessagescurrent' => 'Parhillanõ tekst',
'allmessagestext' => 'Taan nimekirän ommaq kõik MediaWiki nimeruumi tallitusteedüseq.
-Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
+Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "Taad lehte saa-i pruukiq, selle et '''\$wgUseDatabaseMessages'''-säädmine om välän.",
# Thumbnails
# External editor support
'edit-externally' => 'Toimõndaq taad teedüstüt välidse programmiga',
-'edit-externally-help' => '(Lisateedüst loeq [//www.mediawiki.org/wiki/Manual:External_editors pruukmisoppusõ lehe päält])',
+'edit-externally-help' => '(Lisateedüst loeq [https://www.mediawiki.org/wiki/Manual:External_editors pruukmisoppusõ lehe päält])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => ', terveq aolugu',
# Special:SpecialPages
'specialpages' => 'Tallitusleheküleq',
-'specialpages-note' => '----
-* Hariliguq tallitusleheq.
+'specialpages-note' => '* Hariliguq tallitusleheq.
* <strong class="mw-specialpagerestricted">Piiredüq tallitusleheq.</strong>',
'specialpages-group-maintenance' => 'Kõrranpidämisteedüseq',
'specialpages-group-other' => 'Muuq tallitusleheq',
'ok' => "'l est bon",
'retrievedfrom' => 'Prin del pådje «$1»',
'youhavenewmessages' => 'Vos avoz des $1 ($2).',
-'newmessageslink' => 'noveas messaedjes',
-'newmessagesdifflink' => 'dierin candjmint',
'youhavenewmessagesmulti' => 'Vos avoz des noveas messaedjes so $1',
'editsection' => 'candjî',
'editold' => 'candjî',
'preferences' => 'Preferinces',
'mypreferences' => 'Mes preferinces',
'prefs-edits' => 'Nombe di candjmints:',
-'prefsnologin' => "Vos n' estoz nén elodjî",
-'prefsnologintext' => 'I vs fåt esse <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} elodjî]</span> po pleur candjî vos preferinces.',
'changepassword' => "Candjî l' sicret",
'prefs-skin' => 'Pea',
'skin-preview' => 'vey divant',
'allmessagesdefault' => 'Tecse prémetou',
'allmessagescurrent' => 'Tecse pol moumint',
'allmessagestext' => "Çouchal est ene djivêye des messaedjes sistinme k' i gn a dins l' espåce di lomaedje ''MediaWiki:''.
-Loukîz les pådjes sol [//www.mediawiki.org/wiki/Localisation Locålijhaedje di MediaWiki] et
+Loukîz les pådjes sol [https://www.mediawiki.org/wiki/Localisation Locålijhaedje di MediaWiki] et
[//translatewiki.net/ translatewiki.net] si vos vloz pårticiper avou l' ratournaeje djenerike di MediaWiki.",
'allmessagesnotsupportedDB' => "'''{{ns:special}}:AllMessages''' n' est nén sopoirté paski '''\$wgUseDatabaseMessages''' est dismetou.",
'allmessages-filter-legend' => 'Passete',
# External editor support
'edit-externally' => "Candjî ç' fitchî ci avou on dfoûtrin programe",
-'edit-externally-help' => "(Loukîz les [//www.mediawiki.org/wiki/Manual:External_editors instruccions d' apontiaedje] po pus di racsegnes)",
+'edit-externally-help' => "(Loukîz les [https://www.mediawiki.org/wiki/Manual:External_editors instruccions d' apontiaedje] po pus di racsegnes)",
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'totafwait',
'pagetitle-view-mainpage' => '{{SITENAME}}',
'retrievedfrom' => 'Ginkuha tikang ha "$1"',
'youhavenewmessages' => 'Mayda ka $1 ($2).',
-'newmessageslink' => 'bag-o nga mga mensahe',
-'newmessagesdifflink' => 'kataposan nga pagbag-o',
'youhavenewmessagesfromusers' => 'May-ada ka $1 tikang ha {{PLURAL:$3|iba nga gumaramit|$3 mga gumaramit}} ($2).',
'youhavenewmessagesmanyusers' => 'May-ada ka $1 tikang ha damo nga mga gumaramit ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|uska bag-o nga mensahe|bag-o nga mga mensahe}}',
'preferences' => 'Mga karuyag',
'mypreferences' => 'Mga akon karuyag',
'prefs-edits' => 'Ihap han mga pagliwat:',
-'prefsnologin' => 'Diri nakalog-in',
'changepassword' => 'Igliwan an tigaman-pagsulod',
'prefs-skin' => 'Panit',
'skin-preview' => 'Pahiuna nga pagawas',
'tooltip-undo' => '"Igpawara an ginbuhat (undo)" in nagbabalik hinin nga pagliwat ngan nabuklad hin pagliwat nga porma ha pahiuna-nga-paggawas nga kahimtang. Natugot liwat pagdugang hin katadungan ha dinalikyat nga sumat.',
'tooltip-preferences-save' => 'Tipiga an mga karuyag',
'tooltip-summary' => 'Pagbutang hin dalikyat nga sumat',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Attribution
'siteuser' => '{{SITENAME}} gumaramit $1',
# External editor support
'edit-externally' => 'Igliwat ini nga fayl gamit han gawas nga aplikasyon',
-'edit-externally-help' => '(Kitaa an [//www.mediawiki.org/wiki/Manual:External_editors mga pagtutdo hin pag-ayad] para han dugang nga pananabutan)',
+'edit-externally-help' => '(Kitaa an [https://www.mediawiki.org/wiki/Manual:External_editors mga pagtutdo hin pag-ayad] para han dugang nga pananabutan)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'ngatanan',
'version-hook-name' => 'Ngaran han kawil',
'version-version' => '(Bersion $1)',
'version-license' => 'Lisensya',
-'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'mga iba',
'version-software-product' => 'Produkto',
'version-software-version' => 'Bersyon',
'ok' => 'waaw',
'retrievedfrom' => 'Ci « $1 » lañ ko jële',
'youhavenewmessages' => 'Am nga $1 ($2).',
-'newmessageslink' => 'Bataaxal yu bees',
-'newmessagesdifflink' => 'Coppite gu mujj',
'youhavenewmessagesmulti' => 'Am nga bataaxal yu yees ci $1',
'editsection' => 'Soppi',
'editold' => 'Soppi',
'preferences' => 'Tànneef',
'mypreferences' => 'Samay tànneef',
'prefs-edits' => 'Limu coppite yi:',
-'prefsnologin' => 'Duggoo',
-'prefsnologintext' => 'Laaj na nga <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} dugg]</span> ngir soppi say tànneef.',
'changepassword' => 'Coppiteg baatujàll bi',
'prefs-skin' => 'Melokaan',
'skin-preview' => 'Wonendil',
'recentchanges-label-minor' => 'Coppite gu néewal la',
'recentchanges-label-bot' => 'Coppite bu ab bot def',
'recentchanges-label-unpatrolled' => 'Coppite bii kenn fugloogu ko',
+'recentchanges-legend-newpage' => '$1 - xët wu bees',
'rcnote' => '{{PLURAL:$1|Lii mooy coppite bu mujj bees def|Yii ñooy coppite yu mujj yees def}} ci {{PLURAL:$2|bés bu mujj bi|<b>$2</b> bés yu mujj yi}}; njoxe yi ñoo ngi leen yeesal $5 ci $4.',
'rcnotefrom' => "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').",
'rclistfrom' => 'Wone coppite yi mujj yi dooree $1.',
# External editor support
'edit-externally' => 'Soppi xët wii ak ab tëriin bu biti',
-'edit-externally-help' => 'Xoolal [//www.mediawiki.org/wiki/Manual:External_editors tegtali camp gi] ngir yeneeni xamle',
+'edit-externally-help' => 'Xoolal [https://www.mediawiki.org/wiki/Manual:External_editors tegtali camp gi] ngir yeneeni xamle',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'yépp',
* @author Wu-chinese.com
* @author Xiaomingyan
* @author Yfdyh000
+ * @author 乌拉跨氪
* @author 十弌
*/
'ok' => '好',
'retrievedfrom' => '取自“$1”',
'youhavenewmessages' => '你侬有$1($2)。',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '此垡更改',
'newmessageslinkplural' => '{{PLURAL:$1|新消息}}',
'newmessagesdifflinkplural' => '此垡̺{{PLURAL:$1|变化}}',
'youhavenewmessagesmulti' => '爾徠$1裏有新信息',
'revdelete-show-file-submit' => '是',
'revdelete-selected' => "'''选取'''[[:$1]]'''个$2趟修订:'''",
'logdelete-selected' => "'''选取'''$1'''个日志事件:'''",
-'revdelete-text' => "'''删脱个修订仍然将显示拉页面历史里向, 不过渠拉个文本内容公众已经弗好访问。'''
+'revdelete-text' => "'''删脱个修订仍然将显示拉页面历史里向,不过渠拉个文本内容公众已经弗好访问。'''
垃拉{{SITENAME}}个其他管理员将仍旧好访问隐藏个内容并通过与此相同个界面恢复删除,除非站点工作者添加了附加限制。",
'revdelete-confirm' => '假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
'revdelete-suppress-text' => "'''只有'''出现下头眼情况再应阻止访问:
'preferences' => '偏好',
'mypreferences' => '偏好设定',
'prefs-edits' => '编辑数量:',
-'prefsnologin' => '朆登录',
-'prefsnologintext' => '侬必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>再好设置个人参数。',
'changepassword' => '改密码',
'prefs-skin' => '皮肤',
'skin-preview' => '预览',
# Rollback
'rollback' => '恢复编辑',
'rollback_short' => '恢复',
-'rollbacklink' => '恢复',
+'rollbacklink' => '回退',
'rollbackfailed' => '恢复失败',
'revertpage' => '恢复[[Special:Contributions/$2|$2]] ([[User talk:$2|讲张]])个改动;恢复到[[User:$1|$1]]个上一版本',
'tooltip-rollback' => '揿一记“回转”就回退到上一位贡献者个编辑状态',
'tooltip-undo' => '“撤销”可以恢复该编辑并且垃拉预览模式下头打开编辑表单。渠允许垃拉摘要里向说明原因。',
'tooltip-summary' => '打进短摘要',
-'tooltip-iwiki' => '̩$1 - $2',
+'interlanguage-link-title' => '̩$1 - $2',
# Attribution
'anonymous' => '{{SITENAME}}浪个匿名用户',
# External editor support
'edit-externally' => '用外部应用程序来编辑该只文件',
-'edit-externally-help' => '(请参见[//www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解详细信息)',
+'edit-externally-help' => '(请参见[https://www.mediawiki.org/wiki/Manual:External_editors 设置步骤]了解详细信息)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全部',
'ok' => 'Тиим',
'retrievedfrom' => '"$1" гидг халхас йовулсн',
'youhavenewmessages' => 'Та $1та бәәнәт ($2).',
-'newmessageslink' => 'шин зәңгс',
-'newmessagesdifflink' => 'шидрә сольлһн',
'youhavenewmessagesmulti' => 'Таньд $1 деер шин зәңг ирсн бәәнә.',
'editsection' => 'чиклх',
'editold' => 'чиклх',
'preferences' => 'Дурллһн',
'mypreferences' => 'Көгүд',
'prefs-edits' => 'Чикллһнә то:',
-'prefsnologin' => 'Та харһв биш',
-'prefsnologintext' => 'Та <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} харһх]</span> кергтә, тегәд көгүдиг сольҗ чаднат.',
'changepassword' => 'Нууц үгиг сольҗ',
'prefs-skin' => 'Хувцнь',
'skin-preview' => 'Хәләвр',
'recentchanges-label-newpage' => 'Тер үүләр шин халх бүтәв',
'recentchanges-label-minor' => 'Эн баһ чинртә сольлһн',
'recentchanges-label-bot' => 'Эн сольлһн көдлвр (робот) кехв',
+'recentchanges-legend-newpage' => '$1 — шин халх',
'rcnote' => "{{PLURAL:$1|'''$1''' шидрә сольлһн|'''$1''' шидрә сольлһн|'''$1''' шидрә сольлһн}}, '''$2''' өдрә, $5 $4 цагин.",
'rclistfrom' => 'Тер цагас авн сольлһн үзүлх: $1.',
'rcshowhideminor' => 'баһ чикллһиг $1',
# External editor support
'edit-externally' => 'Эн боомгиг һаза заклһар чиклх',
-'edit-externally-help' => '([//www.mediawiki.org/wiki/Manual:External_editors Тәвллһнә заалт] икәр өггцнә төлә хәләтн)',
+'edit-externally-help' => '([https://www.mediawiki.org/wiki/Manual:External_editors Тәвллһнә заалт] икәр өггцнә төлә хәләтн)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'цуг',
'ok' => 'ჯგირი',
'retrievedfrom' => 'გორილ რე "$1"-იშე',
'youhavenewmessages' => 'თქვა გიღუნა $1 ($2).',
-'newmessageslink' => 'ახალი შატყვინაფეფი',
-'newmessagesdifflink' => 'ეკონია თირაფა',
'editsection' => 'რედაქტირაფა',
'editold' => 'რედაქტირაფა',
'viewsourceold' => 'წყუშ ძირაფა',
# External editor support
'edit-externally' => 'თე ფაილიშ ორედაქტირაფალო გიმირინეთ გალენ პროგრამა',
-'edit-externally-help' => '(უმოს ინფორმაციაშო ქოძირით [//www.mediawiki.org/wiki/Manual:External_editors])',
+'edit-externally-help' => '(უმოს ინფორმაციაშო ქოძირით [https://www.mediawiki.org/wiki/Manual:External_editors])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'არძა',
'backlinksubtitle' => '→ $1',
'retrievedfrom' => 'גענומען פֿון "$1"',
'youhavenewmessages' => 'איר האט $1 ($2).',
-'newmessageslink' => 'נייע מעלדונגען',
-'newmessagesdifflink' => 'לעצטע ענדערונג',
'youhavenewmessagesfromusers' => 'איר האט $1 פון {{PLURAL:$3|אן אנדער באניצער|$3 באניצער}} ($2).',
'youhavenewmessagesmanyusers' => 'איר האט $1 פון אסאך באניצער ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|א נייע מעלדונג|נייע מעלדונגען}}',
-'newmessagesdifflinkplural' => 'לעצטע {{PLURAL:$1|ענדערונג|ענדערונגען}}',
+'newmessageslinkplural' => '{{PLURAL:$1|א נייע מעלדונג|999=נייע מעלדונגען}}',
+'newmessagesdifflinkplural' => 'לעצטע {{PLURAL:$1|ענדערונג|999=ענדערונגען}}',
'youhavenewmessagesmulti' => 'איר האט נייע מעלדונגען אין $1',
'editsection' => 'באַאַרבעטן',
'editold' => 'רעדאַקטירן',
'invalidtitle-knownnamespace' => 'אומגילטירער טיטל מיט נאמענטייל "$2" און טעקסט "$3"',
'invalidtitle-unknownnamespace' => 'אומגילטיקער טיטל מיט אומבאוואוסטן נאמענטייל נומער $1 און טעקסט "$2"',
'exception-nologin' => 'נישט אַרײַנלאגירט',
-'exception-nologin-text' => 'דער בלאט אדער אקציע פֿאדערט אז איר זענט אריינלאגירט ביי דער וויקי.',
+'exception-nologin-text' => 'איר שאפרט זיין [[Special:Userlogin|אריינלאגירט]] to כדי צו קענען צוקומען צו דעם בלאט אדער דער אקציע.',
+'exception-nologin-text-manual' => 'זייט אזוי גוט $1 כדי צו קענען צוקומען צו דעם בלאט אדער דער אקציע.',
# Virus scanner
'virus-badscanner' => "שלעכטע קאנפֿיגוראציע: אומבאוואוסטער ווירוס איבערקוקער: ''$1''",
'revdelete-text' => "'''אויסגעמעקטע רעוויזיעס און געשעענישן וועלן בלייבן אין דער בלאט היסטאריע און די לאגביכער, אבער טיילן פון זייער אינהאלט וועט ווערן אומגרייכלעך צום קהל. '''
אנדערע סיסאפן אויף {{SITENAME}} וועלן נאך האבן צוטריט צום באהאלטענעם אינהאלט און קענען אים צוריקשטעלן דורך דעם זעלבן אייבערפלאך, אחוץ ווען מען שטעלט נאך באגרענעצונגען.",
'revdelete-confirm' => 'זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט [[{{MediaWiki:Policy-url}}|דער פאליסי]].',
-'revdelete-suppress-text' => "באהאלטן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגענדע פעלער:
+'revdelete-suppress-text' => "אונטערדרוקן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגנדע פעלער:
+* אינפארמאציע וואס קען זיין מוציא שם רע
* אויפדעקונג פון פריוואטקייט אינפארמאציע
-* ''היים אדרעסן, טעלעפאן נומערן, אדער סאשעל סעקיורעטי, א.א.וו.:'''",
+*: ''היים אדרעסן, טעלעפאן נומערן, נאציאנאלע אידענטיפיקאציע נומערן, א.א.וו.''",
'revdelete-legend' => 'שטעלט ווייזונג באגרענעצונגען',
'revdelete-hide-text' => 'ווערסיע טעקסט',
'revdelete-hide-image' => 'באהאלט טעקע אינהאלט',
'revdelete-hide-user' => "רעדאַקטאר'ס באניצער-נאמען/IP-אַדרעס",
'revdelete-hide-restricted' => 'באהאלט אינפארמאציע אויך פון אדמיניסטראטורן פונקט ווי פשוטע באנוצער',
'revdelete-radio-same' => '(נישט ענדערן)',
-'revdelete-radio-set' => '×\96×¢×\91×\90ר',
-'revdelete-radio-unset' => 'פֿ×\90ַר×\91×\90ָר×\92×\9f',
+'revdelete-radio-set' => 'פֿ×\90ַר×\91×\90ָר×\92×\9f',
+'revdelete-radio-unset' => '×\96×¢×\91×\90ר',
'revdelete-suppress' => 'באַהאַלטן אינפֿארמאַציע פון אַדמיניסטראַטארן ווי אויך אנדערע',
'revdelete-unsuppress' => 'טוה אפ באגרענעצונגן אין גענדערטע רעוויזיעס',
'revdelete-log' => 'אורזאַך:',
'preferences' => 'פרעפֿערענצן',
'mypreferences' => 'פּרעפֿערענצן',
'prefs-edits' => 'צאָל ענדערונגען:',
-'prefsnologin' => 'נישט אריינלאגירט',
-'prefsnologintext' => 'איר דארפט זיין <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} אריינלאגירט]</span> כדי צו ענדערן באניצער פרעפֿערענצן.',
+'prefsnologintext2' => 'זייט אזוי גוט $1 כדי צו שטעלן באניצער פרעפערענצן.',
'changepassword' => 'טוישן פאַסווארט',
'prefs-skin' => 'סקין',
'skin-preview' => 'פארויסדיגע ווייזונג',
'right-editmyusercss' => 'רעדאקטירע אײַערע אייגענע באניצער CSS טעקעס',
'right-editmyuserjs' => 'רעדאקטירן אײַערע אייגענע באניצער JavaScript טעקעס',
'right-viewmywatchlist' => 'באקוקן אייער אייגענע אויפפאסונג ליסטע',
+'right-editmywatchlist' => 'רעדאקטירן אייער אייגענע אויפפאסונג ליסטער. טייל פעולות וועלן דאך צולייגן בלעטער אפילו אן דעם רעכט.',
'right-viewmyprivateinfo' => 'באקוקן אײַער אייגענע פריוואטע דאטן (צ"ב ע־פאסט אדרעס, אמתער נאמען)',
'right-editmyprivateinfo' => 'רעדאקטירן אײַער אייגענע פריוואטע דאטן (צ"ב ע־פאסט אדרעס, אמתער נאמען)',
'right-editmyoptions' => 'רעדאקטירן אײַערע אייגענע פרעפערענצן',
'recentchanges-label-minor' => 'דאָס איז אַ מינערדיקע רעדאַקטירונג',
'recentchanges-label-bot' => ' די רעדאַקטירונג האט אויסגעפירט א באט',
'recentchanges-label-unpatrolled' => 'די רעדאקטירונג איז נאך נישט נאכגעקוקט',
+'recentchanges-legend-newpage' => '$1 - נײַער בלאַט',
'rcnote' => "אונטן {{PLURAL:$1|איז '''1''' ענדערונג|זײַנען די לעצטע '''$1''' ענדערונגען}} אין {{PLURAL:$2|דעם לעצטן טאג|די לעצטע $2 טעג}}, ביז $5, $4.",
'rcnotefrom' => "פֿאלגנד זענען די ענדערונגען זײַט '''$2''' (ביז '''$1''')",
'rclistfrom' => 'װײַזן נײַע ענדערונגען פֿון $1',
'listusers' => 'באַניצער ליסטע',
'listusers-editsonly' => 'ווייזן נאר באניצערס מיט רעדאקטירונגען',
'listusers-creationsort' => 'סארטירן לויט דער שאַפן דאַטע',
+'listusers-desc' => 'סארטירן אין אראפרשטייגעדיקן סדר',
'usereditcount' => '{{PLURAL:$1|רעדאַקטירונג|$1 רעדאַקטירונגען}}',
'usercreated' => '{{GENDER:$3|געשאַפֿן}} אום $2, $1',
'newpages' => 'נייע בלעטער',
ע-פאסט: $PAGEEDITOR_EMAIL
וויקי: $PAGEEDITOR_WIKI
-עס ×\95×\95×¢×\98 ×\9eער × ×\99ש×\98 ×\96×\99×\99×\9f ק×\99×\99×\9f ×\9e×¢×\9c×\93×\95× ×\92×¢×\9f ×\90×\99×\9f פ×\90×\9c פ×\95×\9f × ×\90×\9a ×¢× ×\93ער×\95× ×\92×¢×\9f × ×\90ר ×\90×\95×\99×\91 ×\90×\99ר ×\95×\95×¢×\98 ×\91×\90×\96×\95×\9b×\9f ×\93×¢×\9d ×\91×\9c×\90ט.
+עס ×\95×\95×¢×\98 ×\9eער × ×\99ש×\98 ×\96×\99×\99×\9f ק×\99×\99×\9f ×\9e×¢×\9c×\93×\95× ×\92×¢×\9f ×\90×\99×\9f פ×\90×\9c פ×\95×\9f × ×\90×\9a ×\90ק×\98×\99×\95×\95×\99×\98×¢×\98 × ×\90ר ×\90×\95×\99×\91 ×\90×\99ר ×\95×\95×¢×\98 ×\91×\90×\96×\95×\9b×\9f ×\93×¢×\9d ×\91×\9c×\90×\98 ×\95×\95×¢×\9f ×\90ר×\99×\99× ×\9c×\90×\92×\99רט.
איר קענט אויך צוריקשטעלן די מעלדונגען פאנען פון אלע אייערע אויפֿגעפאסטע בלעטער אין אייער אויפפאסונג ליסטע.
אייער פֿריינטליכע {{SITENAME}} מעלדונגען סיסטעם
סיסאפן קענען ענדערן די מעלדונגען דורך דרוקן אויפן נאמען פון דער מעלדונג.
-ביטע באזוכט [//www.mediawiki.org/wiki/Localisation מעדיעוויקי לאקאליזאציע] און [//translatewiki.net בעטאוויקי] אויב איר ווילט ביישטייערן צו דער גענערישער מעדיעוויקי לאקאליזאציע.',
+ביטע באזוכט [https://www.mediawiki.org/wiki/Localisation מעדיעוויקי לאקאליזאציע] און [//translatewiki.net בעטאוויקי] אויב איר ווילט ביישטייערן צו דער גענערישער מעדיעוויקי לאקאליזאציע.',
'allmessagesnotsupportedDB' => 'מען קען זיך נישט באניצן מיט דעם בלאט וויבאלד די $wgUseDatabseMessages איז געווארן בטל.',
'allmessages-filter-legend' => 'פילטער',
'allmessages-filter' => 'פֿילטערן לויטן סטאטוס פון מעלדונג:',
'file-nohires' => 'נישטא מיט א העכערער רעזאלוציע.',
'svg-long-desc' => 'טעקע SVG, נאמינעל: $1 × $2 פיקסעלן, טעקע גרייס: $3',
'svg-long-error' => 'אומגילטיקע SVG טעקע: $1',
-'show-big-image' => '×\91×\99×\9c×\93 ×\9e×\99×\98 ×\93ער ×\92רעס×\98ער רע×\96×\90×\9c×\95צ×\99ע',
+'show-big-image' => '×\90ר×\92×\99× ×¢×\9c×¢ ×\98עקע',
'show-big-image-preview' => 'גרייס פון דעם פארויסקוק: $1.',
'show-big-image-other' => '{{PLURAL:$2|אנדער רעזאלוציע|אנדערע רעזאלוציעס}}: $1.',
'show-big-image-size' => '$1 × $2 פיקצעלן',
# External editor support
'edit-externally' => 'רעדאַקטירט די טעקע מיט א דרויסנדיגער אַפליקאַציע',
-'edit-externally-help' => 'זעט די [//www.mediawiki.org/wiki/Manual:External_editors אויפֿשטעל אנווייזונגען] פאר מער אינפארמאציע.',
+'edit-externally-help' => 'זעט די [https://www.mediawiki.org/wiki/Manual:External_editors אויפֿשטעל אנווייזונגען] פאר מער אינפארמאציע.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'אַלע',
# Special:SpecialPages
'specialpages' => 'ספּעציעלע זײַטן',
-'specialpages-note' => '----
-* נארמאַלע באַזונדערע בלעטער.
-* <strong class="mw-specialpagerestricted">באַגרענעצטע באַזונדערע בלעטער.</strong>
-* <span class="mw-specialpagecached">באַזונדערע בלעטער פֿון זאַפאַס (קענען זײַן פֿאַרעלטערט).</span>',
+'specialpages-note' => '* נארמאַלע באַזונדערע בלעטער.
+* <span class="mw-specialpagerestricted">באַגרענעצטע באַזונדערע בלעטער.</span>',
'specialpages-group-maintenance' => 'אויפֿהאַלטונג באַריכטן',
'specialpages-group-other' => 'אַנדערע ספעציעלע בלעטער',
'specialpages-group-login' => 'ארײַנלאגירן / שאַפֿן קאנטע',
'limitreport-expansiondepth' => 'גרעסטע אויסשפרייט טיף',
'limitreport-expensivefunctioncount' => 'צאל פזרנישע פארזער־פֿונקציעס',
+# Special:ExpandTemplates
+'expandtemplates' => 'פרואוו מוסטערן',
+'expand_templates_input' => 'אײַנגעבן טעקסט',
+'expand_templates_output' => 'רעזולטאט',
+'expand_templates_xml_output' => 'XML אויסגאָב',
+'expand_templates_ok' => 'אויספֿירן',
+'expand_templates_preview' => 'פֿאראויסשטעלונג',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Jẹ́ kíkójáde láti "$1"',
'youhavenewmessages' => 'Ẹ ní $1 ($2).',
-'newmessageslink' => 'ìránṣẹ́ tuntun',
-'newmessagesdifflink' => 'àtúnṣe tógbẹ̀yìn',
'youhavenewmessagesfromusers' => 'Ẹ ní $1 láti ọ̀dọ̀ {{PLURAL:$3|oníṣe míràn|àwọn oníṣe $3}} ($2).',
'youhavenewmessagesmanyusers' => 'Ẹ ní $1 láti ọ̀dọ̀ àwọn oníṣe púpọ̀ ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ìránṣẹ́ tuntun kan|àwọn ìránṣẹ́ tuntun}}',
'preferences' => 'Àwọn ìfẹ́ràn',
'mypreferences' => 'Àwọn ìfẹ́ràn',
'prefs-edits' => 'Iye àwọn àtúnṣe:',
-'prefsnologin' => 'Ẹ kò tíì wọlé',
-'prefsnologintext' => 'Ẹ gbọ́dọ̀ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} wọlé]</span> láti to àwọn ìfẹ́ràn oníṣe.',
'changepassword' => 'Ìyípadà ọ̀rọ̀ìpamọ́',
'prefs-skin' => 'Skin (Àwọ̀)',
'skin-preview' => 'Àkọ́yẹ̀wò',
'recentchanges-label-minor' => 'Àtùnṣe kékeré nìyí',
'recentchanges-label-bot' => 'Rọ́bọ́ọ̀tì ni ó ṣe àtúnṣe yìí',
'recentchanges-label-unpatrolled' => 'Àtúnṣe yìí kò tí ì jẹ́ onísíṣọ́',
+'recentchanges-legend-newpage' => '$1 - ojúewé tuntun',
'rcnote' => "Lábẹ́ ni {{PLURAL:$1|àtúnṣe '''kan'''|àwọn àtúnṣe '''$1''' tí wọn gbẹ̀yìn}} láàrin {{PLURAL:$2|ọjọ́ kan|ọjọ́ '''$2'''}} sẹ́yìn ní ago $5, lọ́jọ́ $4.",
'rcnotefrom' => "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.",
'rclistfrom' => 'Àfihàn àwọn àtúnṣe tuntun nípa bíbẹ̀rẹ̀ láti $1',
'allmessagesdefault' => 'Ìkọ ìránṣẹ́ àtìbẹ̀rẹ̀',
'allmessagescurrent' => 'Ìkọ ìránṣẹ́ lọ́wọ́',
'allmessagestext' => 'Èyí ni àtòjọ àwọn ìránṣẹ́ sístẹ́mù tó wà nínú orúkọàyè MediaWiki.
-Ẹ lọ sí [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] àti [//translatewiki.net translatewiki.net] tí ẹ bá fẹ́ kópa nínú ìyèdèpadà ìsiṣẹ́ MediaWiki.',
+Ẹ lọ sí [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] àti [//translatewiki.net translatewiki.net] tí ẹ bá fẹ́ kópa nínú ìyèdèpadà ìsiṣẹ́ MediaWiki.',
'allmessagesnotsupportedDB' => "Ojúewé yìí kò ṣe é lò nítorípé '''\$wgUseDatabaseMessages''' ti jẹ́ dídálẹkun.",
'allmessages-filter-legend' => 'Ajọ̀',
'allmessages-filter' => 'Ajọ̀ gẹ́gẹ́bí ipò ìṣàyàn:',
# External editor support
'edit-externally' => "Ẹ lo ìmúlò òde láti ṣ'àtúnṣe fáìlì yìí",
-'edit-externally-help' => '(Ẹ wo [//www.mediawiki.org/wiki/Manual:External_editors ìlànà ìṣètò] fún ẹ̀kúnrẹ́rẹ́)',
+'edit-externally-help' => '(Ẹ wo [https://www.mediawiki.org/wiki/Manual:External_editors ìlànà ìṣètò] fún ẹ̀kúnrẹ́rẹ́)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'gbogbo',
'version-hook-name' => 'Orúkọ hook',
'version-version' => '(Àtẹ̀jáde $1)',
'version-license' => 'Ìwé àṣẹ',
-'version-poweredby-credits' => "Agbára ìṣiṣẹ́ wiki yìí wá látọwọ́ '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Agbára ìṣiṣẹ́ wiki yìí wá látọwọ́ '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'àwọn mìíràn',
'version-credits-summary' => 'Ìdùnnú wa ni láti rántí àwọn ẹni wọ̀nyí fún ìdáwọ́lé wọn sí [[Special:Version|MediaWiki]].',
'version-software' => 'Atòlànà kọ̀mpútà kíkànsínú',
# Special:SpecialPages
'specialpages' => 'Àwọn ojúewé pàtàkì',
-'specialpages-note' => '----
-* Àwọn ojúewé pàtàkì onídéédé.
+'specialpages-note' => '* Àwọn ojúewé pàtàkì onídéédé.
* <span class="mw-specialpagerestricted">Àwọn ojúewé pàtàkì àìgbàláyè.</span>',
'specialpages-group-maintenance' => 'Àwọn ìjábọ̀ ìtọ́jú',
'specialpages-group-other' => 'Àwọn ojúewé pàtàkì míràn',
'ok' => 'OK',
'retrievedfrom' => '由 "$1" 收',
'youhavenewmessages' => '你有$1($2)。',
-'newmessageslink' => '新信息',
-'newmessagesdifflink' => '上次更改',
'youhavenewmessagesmulti' => '你響 $1 有新信',
'editsection' => '編輯',
'editold' => '編輯',
'preferences' => '喜好設定',
'mypreferences' => '自訂喜好',
'prefs-edits' => '編輯數:',
-'prefsnologin' => '重未登入',
-'prefsnologintext' => '你一定要去<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>設定好用戶喜好值先。',
'changepassword' => '改密碼',
'prefs-skin' => '畫面',
'skin-preview' => '預覽',
'recentchanges-label-minor' => '呢個係一個細編輯',
'recentchanges-label-bot' => '呢次編輯係由機械人進行',
'recentchanges-label-unpatrolled' => '呢次編輯重未巡查過',
+'recentchanges-legend-newpage' => '$1 - 新版',
'rcnote' => "以下係響$4 $5,近'''$2'''日嘅最後'''$1'''次修改。",
'rcnotefrom' => "以下係自'''$2'''嘅更改(顯示到'''$1''')。",
'rclistfrom' => '顯示由$1嘅新更改',
'allmessagesdefault' => '預設訊息文字',
'allmessagescurrent' => '現時訊息文字',
'allmessagestext' => '以下係 MediaWiki 空間名入邊現有系統信息嘅清單。
-如果想貢獻正宗嘅MediaWiki本地化嘅話,請參閱[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]同埋[//translatewiki.net translatewiki.net]。',
+如果想貢獻正宗嘅MediaWiki本地化嘅話,請參閱[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]同埋[//translatewiki.net translatewiki.net]。',
'allmessagesnotsupportedDB' => "呢一版唔可以用,因為'''\$wgUseDatabaseMessages'''已經閂咗。",
'allmessages-filter-legend' => '過濾',
'allmessages-filter' => '以自定狀況過濾:',
# External editor support
'edit-externally' => '用外面程式來改呢個檔案',
-'edit-externally-help' => '(去[//www.mediawiki.org/wiki/Manual:External_editors setup instructions] 睇多啲資料)',
+'edit-externally-help' => '(去[https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] 睇多啲資料)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全部',
'version-hook-subscribedby' => '利用於',
'version-version' => '(版本 $1)',
'version-license' => '牌照',
-'version-poweredby-credits' => "呢個 Wiki 係由 '''[//www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "呢個 Wiki 係由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
'version-poweredby-others' => '其他',
'version-license-info' => 'MediaWiki係自由軟件;你可以根據Free Software Foundation所發表嘅GNU General Public License條款規定,就本程式再發佈同/或修改;無論你根據嘅係呢個牌照嘅第二版或(任你揀)任一日之後發行嘅版本。
# Special:SpecialPages
'specialpages' => '特別頁',
-'specialpages-note' => '----
-* 標準特別頁。
+'specialpages-note' => '* 標準特別頁。
* <strong class="mw-specialpagerestricted">有限制嘅特別頁。</strong>',
'specialpages-group-maintenance' => '維護報告',
'specialpages-group-other' => '其它特別頁',
# Durations
'duration-hours' => '$1{{PLURAL:$1|個鐘}}',
+# Special:ExpandTemplates
+'expandtemplates' => '展開模',
+'expand_templates_intro' => '呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。同時亦都展開解譯器函數好似<nowiki>{{</nowiki>#language:...}},以及一啲變數好似<nowiki>{{</nowiki>CURRENTDAY}}—實際上,幾乎所有響雙括弧中嘅內容都會被展開。呢個特別頁係通過使用MediaWiki嘅相關解釋階段嘅功能完成嘅。',
+'expand_templates_title' => '內容標題,用於 {{FULLPAGENAME}} 等頁面:',
+'expand_templates_input' => '輸入文字:',
+'expand_templates_output' => '結果:',
+'expand_templates_xml_output' => 'XML輸出',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => '拎走注釋',
+'expand_templates_generate_xml' => '顯示XML語法樹',
+'expand_templates_preview' => '預覽',
+
);
'ok' => 'OK',
'retrievedfrom' => 'Truggeplekt van "$1"',
'youhavenewmessages' => 'Je ei $1 ($2).',
-'newmessageslink' => 'nieuw bericht',
-'newmessagesdifflink' => 'de bewerkieng bekieken',
'youhavenewmessagesmulti' => 'Je ei nieuwe berichen op $1',
'editsection' => 'bewerken',
'editold' => 'bewerk',
'preferences' => 'Vòkeuren',
'mypreferences' => 'Mien vòkeuren',
'prefs-edits' => 'Antal bewerkiengen:',
-'prefsnologin' => 'Nie anemeld',
-'prefsnologintext' => 'Je mò <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} anemeld]</span> zien om je vòkeuren te kunn\'n instell\'n.',
'changepassword' => 'Wachtwoôrd wiezigen',
'prefs-skin' => 'Vurmhevieng',
'skin-preview' => 'Voevertoônienge',
# External editor support
'edit-externally' => "Dit bestand in 'n extern programma bewark'n",
-'edit-externally-help' => '(zieë de [//www.mediawiki.org/wiki/Manual:External_editors handleidienge vò instelliengen] vò meê informaosie)',
+'edit-externally-help' => '(zieë de [https://www.mediawiki.org/wiki/Manual:External_editors handleidienge vò instelliengen] vò meê informaosie)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'aol',
'mytalk' => '讨论',
'anontalk' => '该IP地址的讨论',
'navigation' => '导航',
-'and' => '和',
+'and' => ' 和',
# Cologne Blue skin
'qbfind' => '查找',
'vector-action-delete' => '删除',
'vector-action-move' => '移动',
'vector-action-protect' => '保护',
-'vector-action-undelete' => '恢复',
+'vector-action-undelete' => '还原',
'vector-action-unprotect' => '更改保护',
'vector-simplesearch-preference' => '启用简化的搜索栏(仅Vector皮肤)',
'vector-view-create' => '创建',
'create-this-page' => '创建本页',
'delete' => '删除',
'deletethispage' => '删除本页',
-'undeletethispage' => '恢复本页',
-'undelete_short' => '恢复$1个编辑',
+'undeletethispage' => '还原本页',
+'undelete_short' => '还原{{PLURAL:$1|$1个编辑}}',
'viewdeleted_short' => '查看$1个被删除的编辑',
'protect' => '保护',
'protect_change' => '更改',
'backlinksubtitle' => '←$1',
'retrievedfrom' => '取自“$1”',
'youhavenewmessages' => '你有$1($2)。',
-'newmessageslink' => '新信息',
-'newmessagesdifflink' => '最后更改',
'youhavenewmessagesfromusers' => '你有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。',
'youhavenewmessagesmanyusers' => '你有来自多个用户的$1($2)。',
-'newmessageslinkplural' => '{{PLURAL:$1|新信息}}',
-'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改}}',
+'newmessageslinkplural' => '{{PLURAL:$1|新信息|999=新消息}}',
+'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改|999=更改}}',
'youhavenewmessagesmulti' => '你在$1有新信息',
'editsection' => '编辑',
'editold' => '编辑',
# Main script and global functions
'nosuchaction' => '无该命令',
'nosuchactiontext' => 'URL指定的操作无效。你可能输入了错误的URL地址,或是点击了错误的链接。这也可能表明{{SITENAME}}使用的软件的存在漏洞(bug)。',
-'nosuchspecialpage' => 'æ\97 该ç\89¹æ®\8a页é\9d¢',
-'nospecialpagetext' => '<strong>你请求了一个无效的特殊页面。</strong>
+'nosuchspecialpage' => 'æ¤ç\89¹æ®\8a页é\9d¢ä¸\8då\98å\9c¨',
+'nospecialpagetext' => '<strong>您请求了一个无效的特殊页面。</strong>
有效的特殊页面的列表可以在[[Special:SpecialPages|{{int:specialpages}}]]找到。',
'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
'exception-nologin' => '未登录',
-'exception-nologin-text' => '该页面或操作需要你登录至本wiki。',
+'exception-nologin-text' => '该页面或操作需要你[[Special:Userlogin|登录]]至本Wiki。',
+'exception-nologin-text-manual' => '查看该页面或进行此操作需要您$1。',
# Virus scanner
'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
'accmailtitle' => '密码已寄出',
'accmailtext' => "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
'newarticle' => '(新页面)',
-'newarticletext' => '您进入了一个尚未创建的页面。
-要创建该页面,请在下面的编辑框中输入内容(详情参见[[{{MediaWiki:Helppage}}|帮助页]])。
-如果您误入此页,请点击浏览器中的“返回”按钮。',
+'newarticletext' => "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[[{{MediaWiki:Helppage}}|帮助页面]])。如果你是错误地到达这里,请点击你的浏览器的'''返回'''按钮。",
'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
'noarticletext-nopermission' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志],但你没有权限创建本页面。',
它应该少过$2次呼叫,现在有$1次呼叫。',
'expensive-parserfunction-category' => '页面中有太多耗费的语法功能呼叫',
-'post-expand-template-inclusion-warning' => '警告:包含模板大小过大。
-一些模板将不会包含。',
+'post-expand-template-inclusion-warning' => "'''警告:'''包含模板大小过大。
+一些模板将不会包含。",
'post-expand-template-inclusion-category' => '模板包含上限已经超过的页面',
'post-expand-template-argument-warning' => "'''警告:'''本页面包含至少一个模板参数有过大扩展大小。这些参数会被略过。",
'post-expand-template-argument-category' => '包含着略过模板参数的页面',
'rev-suppressed-diff-view' => "差异对比中的一次修订已被'''监督隐藏'''。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
'rev-delundel' => '显示/隐藏',
'rev-showdeleted' => '显示',
-'revisiondelete' => '删除/恢复版本',
+'revisiondelete' => '删除/还原版本',
'revdelete-nooldid-title' => '无效目标版本',
'revdelete-nooldid-text' => '您尚未指定一个目标修订去进行这个功能、
所指定的修订不存在,或者您尝试去隐藏现时的修订。',
'revdelete-text' => "'''删除的版本仍将显示在页面历史及日志中,但公众已不能访问其文本内容。'''
在{{SITENAME}}的其他管理员将仍能访问隐藏的内容并通过该界面恢复删除的版本,除非进行了额外限制。",
'revdelete-confirm' => '请确认该操作,明白其后果,并确保该操作符合[[{{MediaWiki:Policy-url}}|方针]]。',
-'revdelete-suppress-text' => "阻止应该'''只'''在以下情形使用:
-*潜在的诽谤信息
-*不合适的个人信息
-*:''家庭地址、电话号码和社保号码等。''",
+'revdelete-suppress-text' => "阻止应'''仅'''用于以下情况:
+* 潜在的诽谤信息
+* 不合适的个人信息
+*: ''家庭地址、电话号码和社保号码等。''",
'revdelete-legend' => '设置可见性之限制',
'revdelete-hide-text' => '修订文字',
'revdelete-hide-image' => '隐藏文件内容',
'revdelete-hide-comment' => '编辑摘要',
'revdelete-hide-user' => '编辑者的用户名/IP地址',
'revdelete-hide-restricted' => '同时阻止管理员与其他用户查看数据',
-'revdelete-radio-same' => '(不要更改)',
+'revdelete-radio-same' => '(不更改)',
'revdelete-radio-set' => '可见',
'revdelete-radio-unset' => '隐藏',
'revdelete-suppress' => '同时阻止管理员与其他用户查看数据',
'searchall' => '所有',
'showingresults' => "下面显示从第'''$2'''条结果开始的'''$1'''条结果。",
'showingresultsnum' => "下面显示从第'''$2'''条结果开始的'''$3'''条结果。",
-'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条结果,共'''$3'''条结果|第'''$1-$2'''条结果,共'''$3'''条结果}}",
+'showingresultsheader' => "关于'''$4'''的{{PLURAL:$5|第'''$1'''条结果,共'''$3'''条结果|第'''$1~$2'''条结果,共'''$3'''条结果}}",
'nonefound' => "'''注意''':只有某些名字空间被默认搜索。请尝试给你的搜索内容添加前缀“all:”以搜索全部内容(包括讨论页面、模板等)或使用期望的名字空间作为前缀。",
'search-nonefound' => '找不到和查询相匹配的结果。',
'powersearch' => '高级搜索',
'preferences' => '设置',
'mypreferences' => '设置',
'prefs-edits' => '编辑数:',
-'prefsnologin' => '未登录',
-'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
+'prefsnologintext2' => '进行用户设置需要您$1。',
'changepassword' => '更改密码',
'prefs-skin' => '皮肤',
'skin-preview' => '预览',
'gender-unknown' => '我不愿意指明(被称为“他/她”)',
'gender-male' => '他',
'gender-female' => '她',
-'prefs-help-gender' => '这是选填项目。
-软件使用其以显示正确的性别称呼。
-该信息将会公开。',
+'prefs-help-gender' => '该设置为可选项目。软件根据它的值在称呼你及对他人提及你时使用适当的语法性别。该信息会被公开。',
'email' => '电子邮件',
'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
-'prefs-help-email' => "<nowiki>*</nowiki> 您不一定要提供电子邮件,但如果您遗失密码,将'''无法'''再次登入。您可以随时在此提供电子邮件,或更改资料。如您更改电子邮件,您将需要[[Help:电子邮件确认|重新确认]]。",
+'prefs-help-email' => '电子邮件是可选项,但是在您忘记密码时很有用。',
'prefs-help-email-others' => '你也可以选择让其他用户通过你的用户或讨论页面上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。',
'prefs-help-email-required' => '电子邮件地址是必填项目。',
'prefs-info' => '基本信息',
'right-deletedhistory' => '查看被删除的历史条目,无其相关文字',
'right-deletedtext' => '查看被删除的版本间的被删除的文字和更改',
'right-browsearchive' => '搜索被删除的页面',
-'right-undelete' => '恢复页面',
+'right-undelete' => '还原页面',
'right-suppressrevision' => '审查和恢复管理员隐藏的版本',
'right-suppressionlog' => '查看非公开日志',
'right-block' => '阻止其他用户编辑',
'action-deleterevision' => '删除本版本',
'action-deletedhistory' => '查看本页面被删除的历史',
'action-browsearchive' => '搜索被删除的页面',
-'action-undelete' => '恢复本页',
+'action-undelete' => '还原本页',
'action-suppressrevision' => '审查和恢复本隐藏版本',
'action-suppressionlog' => '查看本非公开日志',
'action-block' => '阻止该用户编辑',
'recentchanges-label-minor' => '这是一个小编辑',
'recentchanges-label-bot' => '该编辑由机器人进行',
'recentchanges-label-unpatrolled' => '该编辑尚未巡查',
+'recentchanges-legend-newpage' => '$1 - 新页面',
'rcnote' => "下面是过去'''$2'''天的最后'''$1'''个更改,截至$4 $5。",
'rcnotefrom' => "下面是'''$2'''之后的更改(最多显示'''$1'''个)。",
'rclistfrom' => '显示$1之后的新更改',
'zip-wrong-format' => '指定的文件不是一个 ZIP 文件。',
'zip-bad' => '该文件是已损坏或以其它方式无法读取的 ZIP 文件。
不能正确检查安全。',
-'zip-unsupported' => '该文件是 ZIP 文件,其中使用 MediaWiki 不支持的ZIP功能。
-不能正确检查安全。',
+'zip-unsupported' => '该文件是使用MediaWiki不支持的ZIP特性的ZIP文件。无法正确地检查其安全性。',
# Special:UploadStash
'uploadstash' => '上传隐藏',
'listfiles_date' => '日期',
'listfiles_name' => '名称',
'listfiles_user' => '用户',
-'listfiles_size' => '大å°\8f',
+'listfiles_size' => '尺寸',
'listfiles_description' => '说明',
'listfiles_count' => '版本',
'listfiles-show-all' => '包括图片的旧版本',
# File reversion
'filerevert' => '恢复$1',
'filerevert-legend' => '恢复文件',
-'filerevert-intro' => "您正在将文件'''[[Media:$1|$1]]'''恢复到[$4 于$2 $3的版本]。",
+'filerevert-intro' => "你将要恢复文件'''[[Media:$1|$1]]'''至[$4 $2 $3的版本]。",
'filerevert-comment' => '原因:',
-'filerevert-defaultcomment' => '已经恢复到于$1 $2的版本',
+'filerevert-defaultcomment' => '恢复至$1 $2的版本',
'filerevert-submit' => '恢复',
-'filerevert-success' => "'''[[Media:$1|$1]]'''已经恢复到[$4 于$2 $3的版本]。",
+'filerevert-success' => "'''[[Media:$1|$1]]'''已经恢复至[$4 $2 $3的版本]。",
'filerevert-badversion' => '文件并无所请求时间戳下的早期本地版本。',
# File deletion
'querypage-disabled' => '本特殊页面因性能问题而停用。',
# Book sources
-'booksources' => '图书来源',
+'booksources' => '网络书源',
'booksources-search-legend' => '搜索图书来源',
'booksources-isbn' => 'ISBN:',
'booksources-go' => '提交',
电子邮件:$PAGEEDITOR_EMAIL
用户页面:$PAGEEDITOR_WIKI
-在你访问该页面之前,我们不会发送新增更改的通知。
+在你登录并访问该页面之前,我们不会发送新增更改的通知。
你也可以重设你的监视列表中所有监视页面的通知标志。
{{SITENAME}}通知系统
'dellogpage' => '删除日志',
'dellogpagetext' => '下面是最近的删除的列表。',
'deletionlog' => '删除记录',
-'reverted' => '恢复到早期版本',
+'reverted' => '恢复到较早的版本',
'deletecomment' => '原因:',
'deleteotherreason' => '其他/附加原因:',
'deletereasonotherlist' => '其他原因',
'rollbacklinkcount' => '回退$1次编辑',
'rollbacklinkcount-morethan' => '回退超过$1次的编辑',
'rollbackfailed' => '回退失败',
-'cantrollback' => '无法恢复编辑。最后的贡献者是本文的唯一作者。',
+'cantrollback' => '无法恢复编辑,最后贡献者是该页面的唯一作者。',
'alreadyrolled' => '无法回退[[User:$2|$2]]([[User talk:$2|讨论]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])对[[:$1]]的编辑,其他人已经编辑或者回退了该页。
本页最后的编辑者是[[User:$3|$3]]([[User talk:$3|讨论]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。',
'editcomment' => '编辑摘要:"<i>$1</i>"。',
-'revertpage' => '已恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后一个修订版本',
+'revertpage' => '恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后版本',
'revertpage-nouser' => '恢复由隐藏用户的编辑到{{GENDER:$1|[[User:$1|$1]]}}的最后一个修订版本',
'rollback-success' => '已恢复$1的编辑,更改回$2的最后版本。',
'protect-expiry-options' => '1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,无限期:infinite',
'restriction-type' => '权限:',
'restriction-level' => '限制级别:',
-'minimum-size' => 'æ\9c\80å°\8f大å°\8f',
-'maximum-size' => 'æ\9c\80大大å°\8f:',
+'minimum-size' => 'æ\9c\80å°\8f尺寸',
+'maximum-size' => 'æ\9c\80大尺寸:',
'pagesize' => '(字节)',
# Restrictions (nouns)
'undelete-revision' => '$1由$3(在$4 $5)所编写的已删除修订版本:',
'undeleterevision-missing' => '无效或丢失的修订版本。您可能使用了错误的链接,或者此修订版本已经被从存档中恢复或移除。',
'undelete-nodiff' => '找不到先前的修订版本。',
-'undeletebtn' => '恢复',
-'undeletelink' => '查看/恢复',
+'undeletebtn' => '还原',
+'undeletelink' => '查看/还原',
'undeleteviewlink' => '查看',
'undeletereset' => '重设',
'undeleteinvert' => '反向选择',
'undeletecomment' => '原因:',
-'undeletedrevisions' => '$1个版本已恢复',
-'undeletedrevisions-files' => '$1个版本和$2个文件已恢复',
-'undeletedfiles' => '$1个文件已经被恢复',
+'undeletedrevisions' => '{{PLURAL:$1|$1个版本}}被还原',
+'undeletedrevisions-files' => '{{PLURAL:$1|$1个版本}}和{{PLURAL:$2|$2个文件}}被还原',
+'undeletedfiles' => '{{PLURAL:$1|$1个文件}}被还原',
'cannotundelete' => '恢复删除失败:
$1',
'undeletedpage' => "'''$1已经被恢复'''
'allmessagesdefault' => '默认信息文字',
'allmessagescurrent' => '当前信息文字',
'allmessagestext' => '此处列出了MediaWiki名字空间下的所有有效系统消息。
-如果想为MediaWiki的本地化贡献翻译,请访问[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]和[//translatewiki.net translatewiki.net]。',
+如果想为MediaWiki的本地化贡献翻译,请访问[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]和[//translatewiki.net translatewiki.net]。',
'allmessagesnotsupportedDB' => "此页面无法使用,因为'''\$wgUseDatabaseMessages'''已被设置关闭。",
'allmessages-filter-legend' => '过滤',
'allmessages-filter' => '按自定义状态过滤:',
'tooltip-ca-talk' => '关于内容页面的讨论',
'tooltip-ca-edit' => '你可以编辑本页面。请在保存前使用预览按钮',
'tooltip-ca-addsection' => '开始新段落',
-'tooltip-ca-viewsource' => '本页面受到保护。你可以查看其源代码。',
+'tooltip-ca-viewsource' => '本页面受到保护。
+您可以查看其源代码',
'tooltip-ca-history' => '本页面过去的版本',
'tooltip-ca-protect' => '保护本页',
'tooltip-ca-unprotect' => '更改本页面的保护',
'tooltip-ca-delete' => '删除本页',
'tooltip-ca-undelete' => '将这个页面恢复到被删除以前的状态',
'tooltip-ca-move' => '移动本页',
-'tooltip-ca-watch' => '添加本页面至你的监视列表',
+'tooltip-ca-watch' => '添加本页面至您的监视列表',
'tooltip-ca-unwatch' => '从你的监视列表删除本页面',
'tooltip-search' => '搜索{{SITENAME}}',
'tooltip-search-go' => '如果相同的标题存在的话便直接前往该页面',
'tooltip-watchlistedit-raw-submit' => '更新监视列表',
'tooltip-recreate' => '重建该页面,无论是否被删除。',
'tooltip-upload' => '开始上传',
-'tooltip-rollback' => '单击“回退”恢复上一位贡献者对本页的编辑',
+'tooltip-rollback' => '单击“回退”恢复最后贡献者对该页面的编辑',
'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
'tooltip-preferences-save' => '保存系统设置',
'tooltip-summary' => '请输入简短的摘要',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/* 此处的 CSS 将应用于所有的皮肤 */',
这可能是由于一个链往匹配黑名单的外部站点的链接引起的。',
'spamprotectionmatch' => '以下文本触发了我们的垃圾链接过滤器:$1',
'spambot_username' => 'MediaWiki垃圾链接清理器',
-'spam_reverting' => '恢复到不包含链接的最近修订版本$1',
+'spam_reverting' => '恢复至不包含$1的链接的最后版本',
'spam_blanking' => '消隐所有包含链接至$1的修订',
'spam_deleting' => '正在删除所有包含至$1的版本',
'simpleantispam-label' => "反垃圾检查。
'pageinfo-length' => '页面长度(字节)',
'pageinfo-article-id' => '页面ID',
'pageinfo-language' => '页面内容语言',
+'pageinfo-content-model' => '页面内容模式',
'pageinfo-robot-policy' => '爬虫索引',
'pageinfo-robot-index' => '允许',
'pageinfo-robot-noindex' => '不允许',
# Media information
'mediawarning' => "'''警告''':该文件类型可能含有恶意代码。执行后你的系统可能受损。",
-'imagemaxsize' => '图像大小限制:<br /><u>(文件描述页)</u>',
-'thumbsize' => '缩ç\95¥å\9b¾å¤§å°\8f:',
+'imagemaxsize' => "图像尺寸限制:<br />''(文件说明页面)''",
+'thumbsize' => '缩ç\95¥å\9b¾å°ºå¯¸:',
'widthheightpage' => '$1×$2,$3页',
'file-info' => '文件大小:$1,MIME类型:$2',
-'file-info-size' => '$1×$2像素,文件大小:$3,MIME类型:$4',
-'file-info-size-pages' => '$1×$2像素,文件大小:$3,MIME类型:$4,$5页',
+'file-info-size' => '$1 × $2像素,文件大小:$3,MIME类型:$4',
+'file-info-size-pages' => '$1 × $2像素,文件大小:$3,MIME类型:$4,$5页',
'file-nohires' => '没有更高的分辨率。',
'svg-long-desc' => 'SVG文件,尺寸为$1 × $2像素,文件大小:$3',
'svg-long-desc-animated' => '动画SVG文件,尺寸为$1 × $2像素,文件大小:$3',
'svg-long-error' => '无效的SVG文件:$1',
-'show-big-image' => 'å®\8cæ\95´å\88\86辨ç\8e\87',
+'show-big-image' => 'å\8e\9få§\8bæ\96\87件',
'show-big-image-preview' => '本预览的尺寸:$1。',
'show-big-image-other' => '其他{{PLURAL:$2|分辨率}}:$1。',
'show-big-image-size' => '$1×$2像素',
# External editor support
'edit-externally' => '用外部应用程序编辑本文件',
-'edit-externally-help' => '(更多信息请见[//www.mediawiki.org/wiki/Manual:External_editors 安装说明])',
+'edit-externally-help' => '(更多信息请见[https://www.mediawiki.org/wiki/Manual:External_editors 安装说明])',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '所有',
确认码会在$4过期。',
'confirmemail_body_changed' => '拥有IP地址$1的用户(可能是您)在{{SITENAME}}更改了账户“$2”的电子邮箱地址。
-请确认这个账户是属于您的,并同时重新激活在{{SITENAME}}上的电子邮件功能。请
-在浏览器中打开下面的链接:
+要确认此账户确实属于您并同时激活在{{SITENAME}}的电子邮件功能,请在浏览器中打开下面的链接:
$3
'colon-separator' => ':',
'word-separator' => '',
'parentheses' => '($1)',
+'quotation-marks' => '“$1”',
# Multipage image navigation
'imgmultipageprev' => '← 上一页',
'version-hook-subscribedby' => '署名',
'version-version' => '(版本$1)',
'version-license' => '授权协议',
-'version-poweredby-credits' => "本Wiki由'''[//www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "本Wiki由'''[https://www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
'version-poweredby-others' => '其他',
'version-poweredby-translators' => 'translatewiki.net上的翻译者',
'version-credits-summary' => '我们感谢下列人士为[[Special:Version|MediaWiki]]作出的贡献。',
# Special:SpecialPages
'specialpages' => '特殊页面',
-'specialpages-note' => '----
-*普通特殊页面。
-*<span class="mw-specialpagerestricted">非公开特殊页面。</span>',
+'specialpages-note-top' => '图例',
+'specialpages-note' => '*普通特殊页面。
+*<span class="mw-specialpagerestricted">受限特殊页面。</span>',
'specialpages-group-maintenance' => '维护报告',
'specialpages-group-other' => '其它特殊页面',
'specialpages-group-login' => '登录/创建账户',
'api-error-unclassified' => '出现未知错误。',
'api-error-unknown-code' => '未知错误:$1',
'api-error-unknown-error' => '内部错误:尝试上传文件时出错。',
-'api-error-unknown-warning' => '未知的警告:$1',
+'api-error-unknown-warning' => '未知的警告:“$1”。',
'api-error-unknownerror' => '未知错误:$1。',
'api-error-uploaddisabled' => '该wiki停用上传。',
'api-error-verification-error' => '该文件可能损坏或扩展名错误。',
'limitreport-templateargumentsize' => '模板参数大小',
'limitreport-templateargumentsize-value' => '$1/$2 字节',
'limitreport-expansiondepth' => '最高扩展深度',
-'limitreport-expensivefunctioncount' => '高级函数分析器',
+'limitreport-expensivefunctioncount' => '高开销函数分析器',
+
+# Special:ExpandTemplates
+'expandtemplates' => '展开模板',
+'expand_templates_intro' => '此特殊页面可以递归地展开所给文本中的模板。
+它同时还可展开诸如<nowiki>{{</nowiki>#language:...}}的解析器函数和诸如<nowiki>{{</nowiki>CURRENTDAY}}的变量。
+实际上,几乎所有在双重花括号中的内容都会被展开。',
+'expand_templates_title' => '上下文标题,用于{{FULLPAGENAME}}等:',
+'expand_templates_input' => '输入文本:',
+'expand_templates_output' => '结果:',
+'expand_templates_xml_output' => 'XML输出',
+'expand_templates_ok' => '确定',
+'expand_templates_remove_comments' => '移除注释',
+'expand_templates_remove_nowiki' => '在结果中隐藏<nowiki>标签',
+'expand_templates_generate_xml' => '显示XML语法树',
+'expand_templates_preview' => '预览',
);
* @author Xiaomingyan
* @author Yfdyh000
* @author Yuyu
+ * @author 乌拉跨氪
*/
$fallback = 'zh-hans';
'ok' => '確定',
'retrievedfrom' => '取自「$1」',
'youhavenewmessages' => '您有$1($2)。',
-'newmessageslink' => '新訊息',
-'newmessagesdifflink' => '最新變更',
'youhavenewmessagesfromusers' => '你有來自{{PLURAL:$3|另一位使用者|$3 位使用者}}的$1($2)。',
'youhavenewmessagesmanyusers' => '你有來自多位使用者的$1( $2 )。',
-'newmessageslinkplural' => '{{PLURAL:$1|一項新訊息|新訊息}}',
-'newmessagesdifflinkplural' => 'æ\9c\80æ\96°{{PLURAL:$1|變更}}',
+'newmessageslinkplural' => '{{PLURAL:$1|一個新訊息|999=新訊息}}',
+'newmessagesdifflinkplural' => 'æ\96°è¿\91{{PLURAL:$1|變更}}',
'youhavenewmessagesmulti' => '您在 $1 有新訊息',
'editsection' => '編輯',
'editold' => '編輯',
'invalidtitle-knownnamespace' => '使用名字空間「$2」和文本「$3」的無效標題',
'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1和文本“$2”的無效標題',
'exception-nologin' => '未登入',
-'exception-nologin-text' => '你需要登錄此wiki查閲此頁或進行操作。',
+'exception-nologin-text' => '你需要[[Special:Userlogin|登錄]]此wiki查閲此頁或進行操作。',
+'exception-nologin-text-manual' => '請$1以便能夠訪問此頁或行動。',
# Virus scanner
'virus-badscanner' => "損壞設定: 未知的病毒掃瞄器: ''$1''",
'revdelete-text' => "'''刪除的修訂仍將顯示在頁面歷史中, 但它們的文字內容已不能被公眾訪問。'''
在{{SITENAME}}的其他管理員將仍能訪問隱藏的內容並透過與此相同的介面恢復刪除,除非網站工作者進行了一些附加的限制。",
'revdelete-confirm' => '請確認您肯定去做的話,您就要明白到後果,以及這個程序符合[[{{MediaWiki:Policy-url}}|政策]]。',
-'revdelete-suppress-text' => "壓制'''只'''應在以下的情況下進行:
-* 不合適的個人資料
+'revdelete-suppress-text' => "禁制應'''僅'''於下述情形之一時使用:
+* 潛在誹謗性資訊
+* 不合適個人資料
*: ''住家地址、電話號碼、社群保安號碼等。''",
'revdelete-legend' => '設定可見性之限制',
'revdelete-hide-text' => '修訂文字',
'revdelete-hide-comment' => '編輯摘要',
'revdelete-hide-user' => '編輯者的用戶名/IP位址',
'revdelete-hide-restricted' => '同時廢止由操作員以及其他用戶的資料',
-'revdelete-radio-same' => '(不要更改)',
-'revdelete-radio-set' => '可見',
-'revdelete-radio-unset' => '隱藏',
+'revdelete-radio-same' => '(不更改)',
+'revdelete-radio-set' => '隱藏',
+'revdelete-radio-unset' => '可見',
'revdelete-suppress' => '同時廢止由操作員以及其他用戶的資料',
'revdelete-unsuppress' => '在已恢復的修訂中移除限制',
'revdelete-log' => '理由:',
'preferences' => '偏好設定',
'mypreferences' => '偏好設定',
'prefs-edits' => '編輯次數:',
-'prefsnologin' => '還未登入',
-'prefsnologintext' => '您必須先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>才能設置個人參數。',
+'prefsnologintext2' => '請$1以進入用戶設定。',
'changepassword' => '變更密碼',
'prefs-skin' => '外觀',
'skin-preview' => '預覽',
'datedefault' => '預設值',
-'prefs-beta' => 'Beta 功能',
+'prefs-beta' => '測試功能',
'prefs-datetime' => '日期和時間',
'prefs-labs' => '實驗中的功能',
'prefs-user-pages' => '使用者頁面',
'email' => '電子郵件',
'prefs-help-realname' => '真實姓名是可選的。
如果您選擇提供它,它會用於貢獻署名。',
-'prefs-help-email' => "<nowiki>*</nowiki> 您不一定要提供電子郵件,但如果您遺失密碼,將'''無法'''再次登入。您可以隨時在此提供電子郵件,或更改資料。如您更改電子郵件,您將需要[[Help:电子邮件确认|重新確認]]。",
+'prefs-help-email' => '电子邮件是可选项,但是在您忘记密码时很有用。',
'prefs-help-email-others' => '您亦可以在您沒有公開自己的用戶身分時透過您的用戶頁或用戶討論頁與您聯繫。',
'prefs-help-email-required' => '電子郵件地址是必填項目。',
'prefs-info' => '基本資料',
'recentchanges-label-minor' => '這是一個小編輯',
'recentchanges-label-bot' => '這次編輯是由機器人進行',
'recentchanges-label-unpatrolled' => '這次編輯尚未巡查過',
+'recentchanges-legend-newpage' => '$1 - 新頁面',
'rcnote' => "以下是在$4 $5,最近 '''$2''' 天內的 '''$1''' 次最近更改記錄。",
'rcnotefrom' => "下面是自'''$2'''(最多顯示'''$1'''):",
'rclistfrom' => '顯示自 $1 以來的新變更',
'enotif_lastvisited' => '請參閱 $1 檢視你上次訪問後的所有更改。',
'enotif_lastdiff' => '請參閱 $1 檢視該更改。',
'enotif_anon_editor' => '匿名用戶$1',
-'enotif_body' => '$WATCHINGUSERNAME:
+'enotif_body' => '$WATCHINGUSERNAME閣下,
$PAGEINTRO $NEWPAGE
編輯摘要:$PAGESUMMARY $PAGEMINOREDIT
-è\81¯ç¹«此編輯者:
+è\81¯çµ¡此編輯者:
郵件:$PAGEEDITOR_EMAIL
本站:$PAGEEDITOR_WIKI
'allmessagesdefault' => '預設的訊息文字',
'allmessagescurrent' => '現時的訊息文字',
'allmessagestext' => '這裡列出所有可定製的系統界面。
-如果想貢獻正宗的MediaWiki本地化的話,請參閱[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]以及[//translatewiki.net translatewiki.net]。',
+如果想貢獻正宗的MediaWiki本地化的話,請參閱[https://www.mediawiki.org/wiki/Localisation MediaWiki本地化]以及[//translatewiki.net translatewiki.net]。',
'allmessagesnotsupportedDB' => "這個頁面無法使用,因為'''\$wgUseDatabaseMessages'''已被設定關閉。",
'allmessages-filter-legend' => '搜尋',
'allmessages-filter' => '以自定狀況過濾:',
'tooltip-undo' => '「復原」可以在編輯模式上開啟編輯表格以便恢復。它容許在摘要中加入原因。',
'tooltip-preferences-save' => '儲存使用偏好',
'tooltip-summary' => '輸入一個簡短的摘要',
-'tooltip-iwiki' => '$1 – $2',
+'interlanguage-link-title' => '$1 – $2',
# Stylesheets
'common.css' => '/* 此處的 CSS 將應用於所有的面板 */',
'pageinfo-length' => '頁面長度 (以位元組為單位)',
'pageinfo-article-id' => '頁面編號',
'pageinfo-language' => '頁面內容語言',
+'pageinfo-content-model' => '頁面內容模型',
'pageinfo-robot-policy' => '機械人索引',
'pageinfo-robot-index' => '容許',
'pageinfo-robot-noindex' => '阻止',
'svg-long-desc' => 'SVG 檔案,表面大小:$1 × $2 像素,檔案大小:$3',
'svg-long-desc-animated' => 'SVG 動畫檔案,表面大小:$1 × $2 像素,檔案大小:$3',
'svg-long-error' => '無效的SVG檔案:$1',
-'show-big-image' => 'å®\8cæ\95´è§£å\83\8f度',
+'show-big-image' => 'å\8e\9få§\8bæª\94æ¡\88',
'show-big-image-preview' => '此預覽的大小:$1.',
'show-big-image-other' => '其他{{PLURAL:$2||}}解析度:$1。',
'show-big-image-size' => '$1 × $2 像素',
# External editor support
'edit-externally' => '用外部程式編輯此檔案',
-'edit-externally-help' => '(請參見[//www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
+'edit-externally-help' => '(請參見[https://www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊)',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => '全部',
'colon-separator' => ':',
'word-separator' => '',
'parentheses' => '($1)',
+'quotation-marks' => '“$1”',
# Multipage image navigation
'imgmultipageprev' => '← 上一頁',
'version-hook-subscribedby' => '利用於',
'version-version' => '(版本 $1)',
'version-license' => '授權',
-'version-poweredby-credits' => "此維基由'''[//www.mediawiki.org/ MediaWiki]'''驅動,版權所有 © 2001-$1 $2。",
+'version-poweredby-credits' => "此維基由'''[https://www.mediawiki.org/ MediaWiki]'''驅動,版權所有 © 2001-$1 $2。",
'version-poweredby-others' => '其他',
'version-poweredby-translators' => 'translatewiki.net 上的翻譯者',
'version-credits-summary' => '我們感謝以下人士為[[Special:Version|MediaWiki]]作出的貢獻。',
# Special:SpecialPages
'specialpages' => '特殊頁面',
-'specialpages-note' => '----
-* 標準特殊頁面。
-* <strong class="mw-specialpagerestricted">有限制的特殊頁面。</strong>
-* <span class="mw-specialpagecached">用於重新整理的特殊頁面(可能過時)。</span>',
+'specialpages-note-top' => '圖例',
+'specialpages-note' => '* 標準特殊頁面。
+* <span class="mw-specialpagerestricted">用於重新整理的特殊頁面(可能過時)。</span>',
'specialpages-group-maintenance' => '維護報告',
'specialpages-group-other' => '其它特殊頁面',
'specialpages-group-login' => '登入/建立新帳號',
'limitreport-expansiondepth' => '最高展開深度',
'limitreport-expensivefunctioncount' => '昂貴分析器函數計數',
+# Special:ExpandTemplates
+'expandtemplates' => '展開模板',
+'expand_templates_intro' => '本特殊頁面用於將一些文字中的模版展開,包括模版中引用的模版。同時也展開解譯器函數如<nowiki>{{</nowiki>#language:...}},以及變數如<nowiki>{{</nowiki>CURRENTDAY}}—實際上,幾乎所有在雙括弧中的內容都被展開。',
+'expand_templates_title' => '上下文標題,用於 {{FULLPAGENAME}} 等:',
+'expand_templates_input' => '輸入文字:',
+'expand_templates_output' => '結果:',
+'expand_templates_xml_output' => 'XML輸出',
+'expand_templates_ok' => '確定',
+'expand_templates_remove_comments' => '移除注釋',
+'expand_templates_remove_nowiki' => '在結果中隱藏<nowiki>標記',
+'expand_templates_generate_xml' => '顯示XML語法樹',
+'expand_templates_preview' => '預覽',
+
);
* @file
* @since 1.20
*/
-
class CLDRPluralRuleEvaluator {
/**
* Evaluate a number against a set of plural rules. If a rule passes,
* Convert a set of rules to a compiled form which is optimised for
* fast evaluation. The result will be an array of strings, and may be cached.
*
- * @param $rules The rules to compile
- * @return An array of compile rules.
+ * @param array $rules The rules to compile
+ * @return array An array of compile rules.
*/
public static function compile( array $rules ) {
// We can't use array_map() for this because it generates a warning if
/**
* Evaluate a compiled set of rules returned by compile(). Do not allow
* the user to edit the compiled form, or else PHP errors may result.
+ *
+ * @param int The number to be evaluated against the rules
+ * @param array The associative array of plural rules in pluralform => rule format.
+ * @return int The index of the plural form which passed the evaluation
*/
public static function evaluateCompiled( $number, array $rules ) {
// The compiled form is RPN, with tokens strictly delimited by
/**
* Do a single operation
*
- * @param $token string The token string
- * @param $left The left operand. If it is an object, its state may be destroyed.
- * @param $right The right operand
+ * @param string $token The token string
+ * @param mixed $left The left operand. If it is an object, its state may be destroyed.
+ * @param mixed $right The right operand
* @throws CLDRPluralRuleError
- * @return mixed
+ * @return mixed The operation result
*/
private static function doOperation( $token, $left, $right ) {
if ( in_array( $token, array( 'in', 'not-in', 'within', 'not-within' ) ) ) {
* Evaluator helper class representing a range list.
*/
class CLDRPluralRuleEvaluator_Range {
+ /**
+ * The parts
+ *
+ * @var array
+ */
public $parts = array();
+ /**
+ * Initialize a new instance of CLDRPluralRuleEvaluator_Range
+ *
+ * @param int $start The start of the range
+ * @param int|bool $end The end of the range, or false if the range is not bounded.
+ */
function __construct( $start, $end = false ) {
if ( $end === false ) {
$this->parts[] = $start;
}
/**
- * Determine if the given number is inside the range. If $integerConstraint
- * is true, the number must additionally be an integer if it is to match
- * any interval part.
+ * Determine if the given number is inside the range.
+ *
+ * @param int $number The number to check
+ * @param bool $integerConstraint If true, also asserts the number is an integer; otherwise, number simply has to be inside the range.
+ * @return bool True if the number is inside the range; otherwise, false.
*/
function isNumberIn( $number, $integerConstraint = true ) {
foreach ( $this->parts as $part ) {
/**
* Readable alias for isNumberIn( $number, false ), and the implementation
* of the "within" operator.
+ *
+ * @param int $number The number to check
+ * @return bool True if the number is inside the range; otherwise, false.
*/
function isNumberWithin( $number ) {
return $this->isNumberIn( $number, false );
}
/**
- * Add another part to this range. The supplied new part may either be a
- * range object itself, or a single number.
+ * Add another part to this range.
+ *
+ * @param mixed The part to add, either a range object itself or a single number.
*/
function add( $other ) {
if ( $other instanceof self ) {
}
/**
- * For debugging
+ * Returns the string representation of the rule evaluator range.
+ * The purpose of this method is to help debugging.
+ *
+ * @return string The string representation of the rule evaluator range
*/
function __toString() {
$s = 'Range(';
* Helper class for converting rules to reverse polish notation (RPN).
*/
class CLDRPluralRuleConverter {
- public $rule, $pos, $end;
+ /**
+ * The rule
+ *
+ * @var string
+ */
+ public $rule;
+
+ /**
+ * The position
+ *
+ * @var int
+ */
+ public $pos;
+
+ /**
+ * The last position possible
+ *
+ * @var int
+ */
+ public $end;
+
+ /**
+ * The operators
+ *
+ * @var array
+ */
public $operators = array();
+
+ /**
+ * The operands
+ *
+ * @var array
+ */
public $operands = array();
/**
/**
* Convert a rule to RPN. This is the only public entry point.
+ *
+ * @param $rule The rule to convert
+ * @return string The RPN representation of the rule
*/
public static function convert( $rule ) {
$parser = new self( $rule );
/**
* Do the operation.
+ *
+ * @return string The RPN representation of the rule (e.g. "5 3 mod n is")
*/
protected function doConvert() {
$expectOperator = true;
}
/**
- * Fetch the next token from the input string. Return it as a
- * CLDRPluralRuleConverter_Fragment object.
+ * Fetch the next token from the input string.
+ *
+ * @return CLDRPluralRuleConverter_Fragment The next token
*/
protected function nextToken() {
if ( $this->pos >= $this->end ) {
/**
* Create a numerical expression object
+ *
+ * @return CLDRPluralRuleConverter_Expression The numerical expression
*/
protected function newNumber( $text, $pos ) {
return new CLDRPluralRuleConverter_Expression( $this, 'number', $text, $pos, strlen( $text ) );
/**
* Create a binary operator
+ *
+ * @return CLDRPluralRuleConverter_Operator The operator
*/
protected function newOperator( $type, $pos, $length ) {
return new CLDRPluralRuleConverter_Operator( $this, $type, $pos, $length );
* messages), and the binary operator at that location.
*/
class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment {
+ /**
+ * The name
+ *
+ * @var string
+ */
public $name;
/**
* r = range
*
* A number is a kind of range.
+ *
+ * @var array
*/
static $opTypes = array(
'or' => 'bbb',
/**
* Map converting from the abbrevation to the full form.
+ *
+ * @var array
*/
static $typeSpecMap = array(
'b' => 'boolean',
'r' => 'range',
);
+ /**
+ * Initialize a new instance of a CLDRPluralRuleConverter_Operator object
+ *
+ * @param CLDRPluralRuleConverter $parser The parser
+ * @param string $name The operator name
+ * @param int $pos The position
+ * @param int $pos The length
+ */
function __construct( $parser, $name, $pos, $length ) {
parent::__construct( $parser, $pos, $length );
$this->name = $name;
}
+ /**
+ * Compute the operation
+ *
+ * @param CLDRPluralRuleConverter_Expression $left The left part of the expression
+ * @param CLDRPluralRuleConverter_Expression $right The right part of the expression
+ * @return CLDRPluralRuleConverter_Expression The result of the operation
+ */
public function operate( $left, $right ) {
$typeSpec = self::$opTypes[$this->name];
$this->output( "\n" );
}
-
// Script specific parameters not defined on construction by
// Maintenance::addDefaultParams()
$scriptSpecificParams = array_diff_key(
+++ /dev/null
--- Column added 2005-05-24
-
-ALTER TABLE /*$wgDBprefix*/validate
- ADD COLUMN val_ip varchar(20) NOT NULL default '';
+++ /dev/null
--- For article validation
-
-DROP TABLE IF EXISTS /*$wgDBprefix*/validate;
-CREATE TABLE /*$wgDBprefix*/validate (
- `val_user` int(11) NOT NULL default '0',
- `val_page` int(11) unsigned NOT NULL default '0',
- `val_revision` int(11) unsigned NOT NULL default '0',
- `val_type` int(11) unsigned NOT NULL default '0',
- `val_value` int(11) default '0',
- `val_comment` varchar(255) NOT NULL default '',
- `val_ip` varchar(20) NOT NULL default '',
- KEY `val_user` (`val_user`,`val_revision`)
-) /*$wgDBTableOptions*/;
*/
protected $db;
-
/**
* Drop the database connection $this->db and try to get a new one.
*
throw new MWException( __METHOD__ . " rotating DB failed to obtain new load balancer (" . $e->getMessage() . ")" );
}
-
// 2. The Connection, through the load balancer.
try {
$this->db = $this->lb->getConnection( DB_SLAVE, 'dump' );
}
}
-
function initProgress( $history = WikiExporter::FULL ) {
parent::initProgress();
$this->timeOfCheckpoint = $this->startTime;
return "";
}
-
/**
* May throw a database error if, say, the server dies during query.
* @param $id
}
static function is_win() {
- return substr( php_uname(), 0, 7 ) == 'Windows' ;
+ return substr( php_uname(), 0, 7 ) == 'Windows';
}
// bench function 1
}
$file = $args[0];
print "Loading cdb file $file...";
- $fileHandle = CdbReader::open( $file );
+ try {
+ $fileHandle = CdbReader::open( $file );
+ } catch( CdbException $e ) {}
+
if ( !$fileHandle ) {
print "not a cdb file or unable to read it\n";
} else {
print "Need to specify a key, Luke\n";
break;
}
- $res = $fileHandle->get( $args[0] );
+ try {
+ $res = $fileHandle->get( $args[0] );
+ } catch ( CdbException $e ) {
+ print "Unable to read key from file\n";
+ }
if ( $res === false ) {
print "No such key/value pair\n";
} elseif ( is_string( $res ) ) {
public function __construct() {
parent::__construct();
$this->mDescription = "Clean up abandoned files in temporary uploaded file stash";
+ $this->setBatchSize( 50 );
}
public function execute() {
$iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir, 'adviseStat' => 1 ) );
$this->output( "Deleting old thumbnails...\n" );
$i = 0;
+ $batch = array(); // operation batch
foreach ( $iterator as $file ) {
if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
- $status = $tempRepo->quickPurge( "$dir/$file" );
- if ( !$status->isOK() ) {
- $this->error( print_r( $status->getErrorsArray(), true ) );
- }
- if ( ( ++$i % 100 ) == 0 ) {
+ $batch[] = array( 'op' => 'delete', 'src' => "$dir/$file" );
+ if ( count( $batch ) >= $this->mBatchSize ) {
+ $this->doOperations( $tempRepo, $batch );
+ $i += count( $batch );
+ $batch = array();
$this->output( "$i\n" );
}
}
}
+ if ( count( $batch ) ) {
+ $this->doOperations( $tempRepo, $batch );
+ $i += count( $batch );
+ }
$this->output( "$i done\n" );
// Apparently lots of stash files are not registered in the DB...
$this->error( "Temp repo is not using the temp container.", 1 ); // die
}
$i = 0;
+ $batch = array(); // operation batch
foreach ( $iterator as $file ) {
- // Absolute sanity check for stashed files and file segments
- $base = basename( $file );
- // @TODO: why are there thumbnails stored in here?
- if ( !preg_match( '#(^\d{14}!|\.\d+\.\w+\.\d+$|-\w{12}\.\w{6}\.\d+\.)#', $base ) ) {
- $this->output( "Skipped non-stash $file\n" );
- continue;
- }
if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
- $status = $tempRepo->quickPurge( "$dir/$file" );
- if ( !$status->isOK() ) {
- $this->error( print_r( $status->getErrorsArray(), true ) );
- }
- if ( ( ++$i % 100 ) == 0 ) {
+ $batch[] = array( 'op' => 'delete', 'src' => "$dir/$file" );
+ if ( count( $batch ) >= $this->mBatchSize ) {
+ $this->doOperations( $tempRepo, $batch );
+ $i += count( $batch );
+ $batch = array();
$this->output( "$i\n" );
}
}
}
+ if ( count( $batch ) ) {
+ $this->doOperations( $tempRepo, $batch );
+ $i += count( $batch );
+ }
$this->output( "$i done\n" );
}
+
+ protected function doOperations( FileRepo $tempRepo, array $ops ) {
+ $status = $tempRepo->getBackend()->doQuickOperations( $ops );
+ if ( !$status->isOK() ) {
+ $this->error( print_r( $status->getErrorsArray(), true ) );
+ }
+ }
}
$maintClass = "UploadStashCleanup";
* @ingroup Maintenance
*/
class CopyFileBackend extends Maintenance {
- protected $statCache = array();
+ /** @var Array|null (path sha1 => stat) Pre-computed dst stat entries from listings */
+ protected $statCache = null;
public function __construct() {
parent::__construct();
if ( $dstPathsRel === null ) {
$this->error( "Could not list files in $container.", 1 ); // die
}
- $this->statCache = array(); // clear
+ $this->statCache = array();
foreach ( $dstPathsRel as $dstPathRel ) {
$path = $dst->getRootStoragePath() . "/$backendRel/$dstPathRel";
$this->statCache[sha1( $path )] = $dst->getFileStat( array( 'src' => $path ) );
$skipHash = $this->hasOption( 'skiphash' );
$srcStat = $src->getFileStat( array( 'src' => $sPath ) );
$dPathSha1 = sha1( $dPath );
- $dstStat = isset( $this->statCache[$dPathSha1] )
- ? $this->statCache[$dPathSha1]
- : $dst->getFileStat( array( 'src' => $dPath ) );
+ if ( $this->statCache !== null ) {
+ // All dst files are already in stat cache
+ $dstStat = isset( $this->statCache[$dPathSha1] )
+ ? $this->statCache[$dPathSha1]
+ : false;
+ } else {
+ $dstStat = $dst->getFileStat( array( 'src' => $dPath ) );
+ }
return (
is_array( $srcStat ) // sanity check that source exists
&& is_array( $dstStat ) // dest exists
newid
newimages
newlen
-newmessagesdifflink
newmessagesdifflinkplural
-newmessageslink
newmessageslinkplural
newname
newnames
prefixsearchdisabled
prefs
prefsection
-prefsnologin
-prefsnologintext
+prefsnologintext2
prefsubmit
preload
preloads
if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
if ( $wgLocalisationCacheConf['storeClass'] === false && ( $wgLocalisationCacheConf['store'] == 'db' || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) ) ) {
- $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+ $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
}
}
$maintenance->finalSetup();
if ( $this->getDbType() == Maintenance::DB_NONE ) {
global $wgUseDatabaseMessages, $wgLocalisationCacheConf, $wgHooks;
$wgUseDatabaseMessages = false;
- $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+ $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
$wgHooks['InterwikiLoadPrefix'][] = 'DumpIterator::disableInterwikis';
}
}
require_once __DIR__ . '/commandLine.inc';
require_once __DIR__ . '/backupTextPass.inc';
-
$dumper = new TextPassDumper( $argv );
if ( !isset( $options['help'] ) ) {
$this->mSharedSupplement = true;
}
}
- $this-> { $this->mAction } ( $this->mShared );
+ $this->{ $this->mAction } ( $this->mShared );
if ( $this->mSharedSupplement ) {
$this->fetchUsed( true );
}
+++ /dev/null
-<?php
-/**
- * Performs fuzz-style testing of MediaWiki's parser and forms.
- *
- * Copyright © 2006 Nick Jenkins
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance
- * @author Nick Jenkins ( http://nickj.org/ ).
-
-
-Started: 18 May 2006.
-
-Description:
- Performs fuzz-style testing of MediaWiki's parser and forms.
-
-How:
- - Generate lots of nasty wiki text.
- - Ask the Parser to render that wiki text to HTML, or ask MediaWiki's forms
- to deal with that wiki text.
- - Check MediaWiki's output for problems.
- - Repeat.
-
-Why:
- - To help find bugs.
- - To help find security issues, or potential security issues.
-
-What type of problems are being checked for:
- - Unclosed tags.
- - Errors or interesting warnings from Tidy.
- - PHP errors / warnings / notices.
- - MediaWiki internal errors.
- - Very slow responses.
- - No response from apache.
- - Optionally checking for malformed HTML using the W3C validator.
-
-Background:
- Many of the wikiFuzz class methods are a modified PHP port,
- of a "shameless" Python port, of LCAMTUF'S MANGELME:
- - http://www.securiteam.com/tools/6Z00N1PBFK.html
- - http://www.securityfocus.com/archive/1/378632/2004-10-15/2004-10-21/0
-
-Video:
- There's an XviD video discussing this fuzz tester. You can get it from:
- http://files.nickj.org/MediaWiki/Fuzz-Testing-MediaWiki-xvid.avi
-
-Requirements:
- To run this, you will need:
- - Command-line PHP5, with PHP-curl enabled (not all installations have this
- enabled - try "apt-get install php5-curl" if you're on Debian to install).
- - the Tidy standalone executable. ("apt-get install tidy").
-
-Optional:
- - If you want to run the curl scripts, you'll need standalone curl installed
- ("apt-get install curl")
- - For viewing the W3C validator output on a command line, the "html2text"
- program may be useful ("apt-get install html2text")
-
-Saving tests and test results:
- Any of the fuzz tests which find problems are saved for later review.
- In order to help track down problems, tests are saved in a number of
- different formats. The default filename extensions and their meanings are:
- - ".test.php" : PHP script that reproduces just that one problem using PHP-Curl.
- - ".curl.sh" : Shell script that reproduces that problem using standalone curl.
- - ".data.bin" : The serialized PHP data so that this script can re-run the test.
- - ".info.txt" : A human-readable text file with details of the field contents.
-
-Wiki configuration for testing:
- You should make some additions to LocalSettings.php in order to catch the most
- errors. Note this configuration is for **TESTING PURPOSES ONLY**, and is IN NO
- WAY, SHAPE, OR FORM suitable for deployment on a hostile network. That said,
- personally I find these additions to be the most helpful for testing purposes:
-
- // --------- Start ---------
- // Everyone can do everything. Very useful for testing, yet useless for deployment.
- $wgGroupPermissions['*']['autoconfirmed'] = true;
- $wgGroupPermissions['*']['block'] = true;
- $wgGroupPermissions['*']['bot'] = true;
- $wgGroupPermissions['*']['delete'] = true;
- $wgGroupPermissions['*']['deletedhistory'] = true;
- $wgGroupPermissions['*']['deleterevision'] = true;
- $wgGroupPermissions['*']['editinterface'] = true;
- $wgGroupPermissions['*']['hiderevision'] = true;
- $wgGroupPermissions['*']['import'] = true;
- $wgGroupPermissions['*']['importupload'] = true;
- $wgGroupPermissions['*']['minoredit'] = true;
- $wgGroupPermissions['*']['move'] = true;
- $wgGroupPermissions['*']['patrol'] = true;
- $wgGroupPermissions['*']['protect'] = true;
- $wgGroupPermissions['*']['proxyunbannable'] = true;
- $wgGroupPermissions['*']['renameuser'] = true;
- $wgGroupPermissions['*']['reupload'] = true;
- $wgGroupPermissions['*']['reupload-shared'] = true;
- $wgGroupPermissions['*']['rollback'] = true;
- $wgGroupPermissions['*']['siteadmin'] = true;
- $wgGroupPermissions['*']['unwatchedpages'] = true;
- $wgGroupPermissions['*']['upload'] = true;
- $wgGroupPermissions['*']['userrights'] = true;
- $wgGroupPermissions['*']['renameuser'] = true;
- $wgGroupPermissions['*']['makebot'] = true;
- $wgGroupPermissions['*']['makesysop'] = true;
-
- // Enable weird and wonderful options:
- // Increase default error reporting level.
- error_reporting (E_ALL); // At a later date could be increased to E_ALL | E_STRICT
- $wgEnableUploads = true; // enable uploads.
- $wgDBerrorLog = "/root/mediawiki-db-error-log.txt"; // log DB errors, replace with suitable path.
- $wgShowSQLErrors = true; // Show SQL errors (instead of saying the query was hidden).
- $wgShowExceptionDetails = true; // want backtraces.
- $wgEnableAPI = true; // enable API.
- $wgEnableWriteAPI = true; // enable API.
-
- // Install & enable Parser Hook extensions to increase code coverage. E.g.:
- require_once "extensions/ParserFunctions/ParserFunctions.php";
- require_once "extensions/Cite/Cite.php";
- require_once "extensions/inputbox/inputbox.php";
- require_once "extensions/Sort/Sort.php";
- require_once "extensions/wikihiero/wikihiero.php";
- require_once "extensions/CharInsert/CharInsert.php";
- require_once "extensions/FixedImage/FixedImage.php";
-
- // Install & enable Special Page extensions to increase code coverage. E.g.:
- require_once "extensions/Cite/SpecialCite.php";
- require_once "extensions/Renameuser/SpecialRenameuser.php";
- // --------- End ---------
-
- If you want to try E_STRICT error logging, add this to the above:
- // --------- Start ---------
- error_reporting (E_ALL | E_STRICT);
- set_error_handler( 'error_handler' );
- function error_handler ($type, $message, $file=__FILE__, $line=__LINE__) {
- if ($message == "var: Deprecated. Please use the public/private/protected modifiers") return;
- print "<br />\n<b>Strict Standards:</b> Type: <b>$type</b>: $message in <b>$file</b> on line <b>$line</b><br />\n";
- }
- // --------- End ---------
-
- Also add/change this in LocalSettings.php:
- // --------- Start ---------
- $wgEnableProfileInfo = true;
- $wgDBserver = "localhost"; // replace with DB server hostname
- // --------- End ---------
-
-Usage:
- Run with "php fuzz-tester.php".
- To see the various command-line options, run "php fuzz-tester.php --help".
- To stop the script, press Ctrl-C.
-
-Console output:
- - If requested, first any previously failed tests will be rerun.
- - Then new tests will be generated and run. Any tests that fail will be saved,
- and a brief message about why they failed will be printed on the console.
- - The console will show the number of tests run, time run, number of tests
- failed, number of tests being done per minute, and the name of the current test.
-
-TODO:
- Some known things that could improve this script:
- - Logging in with cookie jar storage needed for some tests (as there are some
- pages that cannot be tested without being logged in, and which are currently
- untested - e.g. Special:Emailuser, Special:Preferences, adding to Watchist).
- - Testing of Timeline extension (I cannot test as ploticus has/had issues on
- my architecture).
-
-*/
-
-// ///////////////////////// COMMAND LINE HELP ////////////////////////////////////
-
-// This is a command line script, load MediaWiki env (gives command line options);
-require_once __DIR__ . '/commandLine.inc';
-
-// if the user asked for an explanation of command line options.
-if ( isset( $options["help"] ) ) {
- print <<<ENDS
-MediaWiki $wgVersion fuzz tester
-Usage: php {$_SERVER["SCRIPT_NAME"]} [--quiet] [--base-url=<url-to-test-wiki>]
- [--directory=<failed-test-path>] [--include-binary]
- [--w3c-validate] [--delete-passed-retests] [--help]
- [--user=<username>] [--password=<password>]
- [--rerun-failed-tests] [--max-errors=<int>]
- [--max-runtime=<num-minutes>]
- [--specific-test=<test-name>]
-
-Options:
- --quiet : Hides passed tests, shows only failed tests.
- --base-url : URL to a wiki on which to run the tests.
- The "http://" is optional and can be omitted.
- --directory : Full path to directory for storing failed tests.
- Will be created if it does not exist.
- --include-binary : Includes non-alphanumeric characters in the tests.
- --w3c-validate : Validates pages using the W3C's web validator.
- Slow. Currently many pages fail validation.
- --user : Login name of a valid user on your test wiki.
- --password : Password for the valid user on your test wiki.
- --delete-passed-retests : Will delete retests that now pass.
- Requires --rerun-failed-tests to be meaningful.
- --rerun-failed-tests : Whether to rerun any previously failed tests.
- --max-errors : Maximum number of errors to report before exiting.
- Does not include errors from --rerun-failed-tests
- --max-runtime : Maximum runtime, in minutes, to run before exiting.
- Only applies to new tests, not --rerun-failed-tests
- --specific-test : Runs only the specified fuzz test.
- Only applies to new tests, not --rerun-failed-tests
- --keep-passed-tests : Saves all test files, even those that pass.
- --help : Show this help message.
-
-Example:
- If you wanted to fuzz test a nightly MediaWiki checkout using cron for 1 hour,
- and only wanted to be informed of errors, and did not want to redo previously
- failed tests, and wanted a maximum of 100 errors, then you could do:
- php {$_SERVER["SCRIPT_NAME"]} --quiet --max-errors=100 --max-runtime=60
-
-
-ENDS;
-
- exit( 0 );
-}
-
-
-// if we got command line options, check they look valid.
-$validOptions = array ( "quiet", "base-url", "directory", "include-binary",
- "w3c-validate", "user", "password", "delete-passed-retests",
- "rerun-failed-tests", "max-errors",
- "max-runtime", "specific-test", "keep-passed-tests", "help" );
-if ( !empty( $options ) ) {
- $unknownArgs = array_diff ( array_keys( $options ), $validOptions );
- foreach ( $unknownArgs as $invalidArg ) {
- print "Ignoring invalid command-line option: --$invalidArg\n";
- }
-}
-
-
-// /////////////////////////// CONFIGURATION ////////////////////////////////////
-
-// URL to some wiki on which we can run our tests.
-if ( !empty( $options["base-url"] ) ) {
- define( "WIKI_BASE_URL", $options["base-url"] );
-} else {
- define( "WIKI_BASE_URL", $wgServer . $wgScriptPath . '/' );
-}
-
-// The directory name where we store the output.
-// Example for Windows: "c:\\temp\\wiki-fuzz"
-if ( !empty( $options["directory"] ) ) {
- define( "DIRECTORY", $options["directory"] );
-} else {
- define( "DIRECTORY", "{$wgUploadDirectory}/fuzz-tests" );
-}
-
-// Should our test fuzz data include binary strings?
-define( "INCLUDE_BINARY", isset( $options["include-binary"] ) );
-
-// Whether we want to validate HTML output on the web.
-// At the moment very few generated pages will validate, so not recommended.
-define( "VALIDATE_ON_WEB", isset( $options["w3c-validate"] ) );
-// URL to use to validate our output:
-define( "VALIDATOR_URL", "http://validator.w3.org/check" );
-
-// Location of Tidy standalone executable.
-define( "PATH_TO_TIDY", "/usr/bin/tidy" );
-
-// The name of a user who has edited on your wiki. Used
-// when testing the Special:Contributions and Special:Userlogin page.
-if ( !empty( $options["user"] ) ) {
- define( "USER_ON_WIKI", $options["user"] );
-} else {
- define( "USER_ON_WIKI", "nickj" );
-}
-
-// The password of the above user. Used when testing the login page,
-// and to do this we sometimes need to login successfully.
-if ( !empty( $options["password"] ) ) {
- define( "USER_PASSWORD", $options["password"] );
-} else {
- // And no, this is not a valid password on any public wiki.
- define( "USER_PASSWORD", "nickj" );
-}
-
-// If we have a test that failed, and then we run it again, and it passes,
-// do you want to delete it or keep it?
-define( "DELETE_PASSED_RETESTS", isset( $options["delete-passed-retests"] ) );
-
-// Do we want to rerun old saved tests at script startup?
-// Set to true to help catch regressions, or false if you only want new stuff.
-define( "RERUN_OLD_TESTS", isset( $options["rerun-failed-tests"] ) );
-
-// File where the database errors are logged. Should be defined in LocalSettings.php.
-define( "DB_ERROR_LOG_FILE", $wgDBerrorLog );
-
-// Run in chatty mode (all output, default), or run in quiet mode (only prints out details of failed tests)?
-define( "QUIET", isset( $options["quiet"] ) );
-
-// Keep all test files, even those that pass. Potentially useful to tracking input that causes something
-// unusual to happen, if you don't know what "unusual" is until later.
-define( "KEEP_PASSED_TESTS", isset( $options["keep-passed-tests"] ) );
-
-// The maximum runtime, if specified.
-if ( !empty( $options["max-runtime"] ) && intval( $options["max-runtime"] ) > 0 ) {
- define( "MAX_RUNTIME", intval( $options["max-runtime"] ) );
-}
-
-// The maximum number of problems to find, if specified. Excludes retest errors.
-if ( !empty( $options["max-errors"] ) && intval( $options["max-errors"] ) > 0 ) {
- define( "MAX_ERRORS", intval( $options["max-errors"] ) );
-}
-
-// if the user has requested a specific test (instead of all tests), and the test they asked for looks valid.
-if ( !empty( $options["specific-test"] ) ) {
- if ( class_exists( $options["specific-test"] ) && get_parent_class( $options["specific-test"] ) == "pageTest" ) {
- define( "SPECIFIC_TEST", $options["specific-test"] );
- }
- else {
- print "Ignoring invalid --specific-test\n";
- }
-}
-
-// Define the file extensions we'll use:
-define( "PHP_TEST" , ".test.php" );
-define( "CURL_TEST", ".curl.sh" );
-define( "DATA_FILE", ".data.bin" );
-define( "INFO_FILE", ".info.txt" );
-define( "HTML_FILE", ".wiki_preview.html" );
-
-// If it goes wrong, we want to know about it.
-error_reporting( E_ALL | E_STRICT );
-
-// ////////////// A CLASS THAT GENERATES RANDOM NASTY WIKI & HTML STRINGS //////////////////////
-
-class wikiFuzz {
-
- // Only some HTML tags are understood with params by MediaWiki, the rest are ignored.
- // List the tags that accept params below, as well as what those params are.
- public static $data = array(
- "B" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "CAPTION" => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ),
- "CENTER" => array( "CLASS", "STYLE", "ID", "lang", "dir", "title" ),
- "DIV" => array( "CLASS", "STYLE", "ID", "align", "lang", "dir", "title" ),
- "FONT" => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "face", "size", "color" ),
- "H1" => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ),
- "H2" => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ),
- "HR" => array( "STYLE", "CLASS", "ID", "WIDTH", "lang", "dir", "title", "size", "noshade" ),
- "LI" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "value" ),
- "TABLE" => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "BORDER", "CELLPADDING",
- "CELLSPACING", "lang", "dir", "title", "summary", "frame", "rules" ),
- "TD" => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
- "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
- "dir", "title", "char", "charoff" ),
- "TH" => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
- "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
- "dir", "title", "char", "charoff" ),
- "TR" => array( "CLASS", "STYLE", "ID", "BGCOLOR", "ALIGN", "VALIGN", "lang", "dir", "title", "char", "charoff" ),
- "UL" => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "type" ),
- "P" => array( "style", "class", "id", "align", "lang", "dir", "title" ),
- "blockquote" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "cite" ),
- "span" => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ),
- "code" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "tt" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "small" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "big" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "s" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "u" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "del" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ),
- "ins" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ),
- "sub" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "sup" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "ol" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "start" ),
- "br" => array( "CLASS", "ID", "STYLE", "title", "clear" ),
- "cite" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "var" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "ruby" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "rt" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "rp" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "dt" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "dl" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "em" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "strong" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "i" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
- "thead" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign' ),
- "tfoot" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign' ),
- "tbody" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign' ),
- "colgroup" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign', 'span', 'width' ),
- "col" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", 'align', 'char', 'charoff', 'valign', 'span', 'width' ),
- "pre" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "width" ),
-
- // extension tags that accept parameters:
- "sort" => array( "order", "class" ),
- "ref" => array( "name" ),
- "categorytree" => array( "hideroot", "mode", "style" ),
- "chemform" => array( "link", "wikilink", "query" ),
- "section" => array( "begin", "new" ),
-
- // older MW transclusion.
- "transclude" => array( "page" ),
- );
-
- // The types of the HTML that we will be testing were defined above
- // Note: this needs to be initialized later to be equal to: array_keys(wikiFuzz::$data);
- // as such, it also needs to also be publicly modifiable.
- public static $types;
-
-
- // Some attribute values.
- static private $other = array( "&", "=", ":", "?", "\"", "\n", "%n%n%n%n%n%n%n%n%n%n%n%n", "\\" );
- static private $ints = array(
- // various numbers
- "0", "-1", "127", "-7897", "89000", "808080", "90928345",
- "0xfffffff", "ffff",
-
- // Different ways of saying: '
- "'", // Long UTF-8 Unicode encoding
- "'", // dec version.
- "'", // hex version.
- "§", // malformed hex variant, MSB not zero.
-
- // Different ways of saying: "
- """, // Long UTF-8 Unicode encoding
- """,
- """, // hex version.
- "¢", // malformed hex variant, MSB not zero.
-
- // Different ways of saying: <
- "<",
- "<", // Long UTF-8 Unicode encoding without semicolon (Mediawiki wants the colon)
- "<", // Long UTF-8 Unicode encoding with semicolon
- "<",
- "<", // hex version.
- "¼", // malformed hex variant, MSB not zero.
- "<", // mid-length hex version
- "<", // slightly longer hex version, with capital "X"
-
- // Different ways of saying: >
- ">",
- ">", // Long UTF-8 Unicode encoding
- ">",
- ">", // hex version.
- "¾", // malformed variant, MSB not zero.
-
- // Different ways of saying: [
- "[", // Long UTF-8 Unicode encoding
- "[",
- "[", // hex version.
-
- // Different ways of saying: {{
- "{{", // Long UTF-8 Unicode encoding
- "{{",
- "{{", // hex version.
-
- // Different ways of saying: |
- "|", // Long UTF-8 Unicode encoding
- "|",
- "|", // hex version.
- "ü", // malformed hex variant, MSB not zero.
-
- // a "lignature" - http://www.robinlionheart.com/stds/html4/spchars#ligature
- // ‌ == ‌
- "‌"
- );
-
- // Defines various wiki-related bits of syntax, that can potentially cause
- // MediaWiki to do something other than just print that literal text.
- static private $ext = array(
- // links, templates, parameters.
- "[[", "]]", "{{", "}}", "|", "[", "]", "{{{", "}}}", "|]]",
-
- // wiki tables.
- "\n{|", "\n|}",
- "!",
- "\n!",
- "!!",
- "||",
- "\n|-", "| ", "\n|",
-
- // section headings.
- "=", "==", "===", "====", "=====", "======",
-
- // lists (ordered and unordered) and indentation.
- "\n*", "*", "\n:", ":",
- "\n#", "#",
-
- // definition lists (dl, dt, dd), newline, and newline with pre, and a tab.
- "\n;", ";", "\n ",
-
- // Whitespace: newline, tab, space.
- "\n", "\t", " ",
-
- // Some XSS attack vectors from http://ha.ckers.org/xss.html
- "	", // tab
- "
", // newline
- "
", // carriage return
- "\0", // null character
- "  ", // spaces and meta characters
- "'';!--\"<XSS>=&{()}", // compact injection of XSS & SQL tester
-
- // various NULL fields
- "%00",
- "�",
- "\0",
-
- // horizontal rule.
- "-----", "\n-----",
-
- // signature, redirect, bold, italics.
- "~~~~", "#REDIRECT [[", "'''", "''",
-
- // comments.
- "<!--", "-->",
-
- // quotes.
- "\"", "'",
-
- // tag start and tag end.
- "<", ">",
-
- // implicit link creation on URIs.
- "http://",
- "https://",
- "ftp://",
- "irc://",
- "news:",
- 'gopher://',
- 'telnet://',
- 'nntp://',
- 'worldwind://',
- 'mailto:',
-
- // images.
- "[[image:",
- ".gif",
- ".png",
- ".jpg",
- ".jpeg",
- 'thumbnail=',
- 'thumbnail',
- 'thumb=',
- 'thumb',
- 'right',
- 'none',
- 'left',
- 'framed',
- 'frame',
- 'enframed',
- 'centre',
- 'center',
- "Image:",
- "[[:Image",
- 'px',
- 'upright=',
- 'border',
-
- // misc stuff to throw at the Parser.
- '%08X',
- '/',
- ":x{|",
- "\n|+",
- "<noinclude>",
- "</noinclude>",
- " \302\273",
- " :",
- " !",
- " ;",
- "\302\253",
- "[[category:",
- "?=",
- "(",
- ")",
- "]]]",
- "../",
- "{{{{",
- "}}}}",
- "[[Special:",
- "<includeonly>",
- "</includeonly>",
- "<!--MWTEMPLATESECTION=",
- '<!--MWTOC-->',
-
- // implicit link creation on booknum, RFC, and PubMed ID usage (both with and without IDs)
- "ISBN 2",
- "RFC 000",
- "PMID 000",
- "ISBN ",
- "RFC ",
- "PMID ",
-
- // magic words:
- '__NOTOC__',
- '__FORCETOC__',
- '__NOEDITSECTION__',
- '__START__',
- '__NOTITLECONVERT__',
- '__NOCONTENTCONVERT__',
- '__END__',
- '__TOC__',
- '__NOTC__',
- '__NOCC__',
- "__FORCETOC__",
- "__NEWSECTIONLINK__",
- "__NOGALLERY__",
-
- // more magic words / internal templates.
- '{{PAGENAME}}',
- '{{PAGENAMEE}}',
- '{{NAMESPACE}}',
- "{{MSG:",
- "}}",
- "{{MSGNW:",
- "}}",
- "{{INT:",
- "}}",
- '{{SITENAME}}',
- "{{NS:",
- "}}",
- "{{LOCALURL:",
- "}}",
- "{{LOCALURLE:",
- "}}",
- "{{SCRIPTPATH}}",
- "{{GRAMMAR:gentiv|",
- "}}",
- "{{REVISIONID}}",
- "{{SUBPAGENAME}}",
- "{{SUBPAGENAMEE}}",
- "{{ns:0}}",
- "{{fullurle:",
- "}}",
- "{{subst::",
- "}}",
- "{{UCFIRST:",
- "}}",
- "{{UC:",
- '{{SERVERNAME}}',
- '{{SERVER}}',
- "{{RAW:",
- "}}",
- "{{PLURAL:",
- "}}",
- "{{LCFIRST:",
- "}}",
- "{{LC:",
- "}}",
- '{{CURRENTWEEK}}',
- '{{CURRENTDOW}}',
- "{{INT:{{LC:contribs-showhideminor}}|",
- "}}",
- "{{INT:googlesearch|",
- "}}",
- "{{ROOTPAGENAME}}",
- "{{BASEPAGENAME}}",
- "{{CONTENTLANGUAGE}}",
- "{{PAGESINNAMESPACE:}}",
- "{{#language:",
- "}}",
- "{{#special:",
- "}}",
- "{{#special:emailuser",
- "}}",
-
- // Some raw link for magic words.
- "{{NUMBEROFPAGES:R",
- "}}",
- "{{NUMBEROFUSERS:R",
- "}}",
- "{{NUMBEROFARTICLES:R",
- "}}",
- "{{NUMBEROFFILES:R",
- "}}",
- "{{NUMBEROFADMINS:R",
- "}}",
- "{{padleft:",
- "}}",
- "{{padright:",
- "}}",
- "{{DEFAULTSORT:",
- "}}",
-
- // internal Math "extension":
- "<math>",
- "</math>",
-
- // Parser extension functions:
- "{{#expr:",
- "{{#if:",
- "{{#ifeq:",
- "{{#ifexist:",
- "{{#ifexpr:",
- "{{#switch:",
- "{{#time:",
- "}}",
-
- // references table for the Cite extension.
- "<references/>",
-
- // Internal Parser tokens - try inserting some of these.
- "UNIQ25f46b0524f13e67NOPARSE",
- "UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002",
- "\x07UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002-QINU",
-
- // Inputbox extension:
- "<inputbox>\ntype=search\nsearchbuttonlabel=\n",
- "</inputbox>",
-
- // charInsert extension:
- "<charInsert>",
- "</charInsert>",
-
- // wikiHiero extension:
- "<hiero>",
- "</hiero>",
-
- // Image gallery:
- "<gallery>",
- "</gallery>",
-
- // FixedImage extension.
- "<fundraising/>",
-
- // Timeline extension: currently untested.
-
- // Nowiki:
- "<nOwIkI>",
- "</nowiki>",
-
- // an external image to test the external image displaying code
- "http://debian.org/Pics/debian.png",
-
- // LabeledSectionTransclusion extension.
- "{{#lstx:",
- "}}",
- "{{#lst:",
- "}}",
- "{{#lst:Main Page|",
- "}}"
- );
-
- /**
- ** Randomly returns one element of the input array.
- */
- public static function chooseInput( array $input ) {
- $randindex = wikiFuzz::randnum( count( $input ) - 1 );
- return $input[$randindex];
- }
-
- // Max number of parameters for HTML attributes.
- static private $maxparams = 10;
-
- /**
- * Returns random number between finish and start.
- * @param $finish
- * @param $start int
- * @return int
- */
- public static function randnum( $finish, $start = 0 ) {
- return mt_rand( $start, $finish );
- }
-
- /**
- * Returns a mix of random text and random wiki syntax.
- * @return string
- */
- private static function randstring() {
- $thestring = "";
-
- for ( $i = 0; $i < 40; $i++ ) {
- $what = wikiFuzz::randnum( 1 );
-
- if ( $what == 0 ) { // include some random wiki syntax
- $which = wikiFuzz::randnum( count( wikiFuzz::$ext ) - 1 );
- $thestring .= wikiFuzz::$ext[$which];
- }
- else { // include some random text
- $char = INCLUDE_BINARY
- // Decimal version:
- // "&#" . wikiFuzz::randnum(255) . ";"
- // Hex version:
- ? "&#x" . str_pad( dechex( wikiFuzz::randnum( 255 ) ), wikiFuzz::randnum( 2, 7 ), "0", STR_PAD_LEFT ) . ";"
- // A truly binary version:
- // ? chr(wikiFuzz::randnum(0,255))
- : chr( wikiFuzz::randnum( 126, 32 ) );
-
- $length = wikiFuzz::randnum( 8 );
- $thestring .= str_repeat ( $char, $length );
- }
- }
- return $thestring;
- }
-
- /**
- * Returns either random text, or random wiki syntax, or random data from "ints",
- * or random data from "other".
- * @return string
- */
- private static function makestring() {
- $what = wikiFuzz::randnum( 2 );
- if ( $what == 0 ) {
- return wikiFuzz::randstring();
- } elseif ( $what == 1 ) {
- return wikiFuzz::$ints[wikiFuzz::randnum( count( wikiFuzz::$ints ) - 1 )];
- } else {
- return wikiFuzz::$other[wikiFuzz::randnum( count( wikiFuzz::$other ) - 1 )];
- }
- }
-
- /**
- * Returns the matched character slash-escaped as in a C string
- * Helper for makeTitleSafe callback
- * @param $matches
- * @return string
- */
- private static function stringEscape( $matches ) {
- return sprintf( "\\x%02x", ord( $matches[1] ) );
- }
-
- /**
- ** Strips out the stuff that Mediawiki balks at in a page's title.
- ** Implementation copied/pasted from cleanupTable.inc & cleanupImages.php
- * @param $str string
- * @return string
- */
- public static function makeTitleSafe( $str ) {
- $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF";
- return preg_replace_callback(
- "/([^$legalTitleChars])/", 'wikiFuzz::stringEscape',
- $str );
- }
-
- /**
- ** Returns a string of fuzz text.
- * @return string
- */
- private static function loop() {
- switch ( wikiFuzz::randnum( 3 ) ) {
- case 1: // an opening tag, with parameters.
- $string = "";
- $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 );
- $t = wikiFuzz::$types[$i];
- $arr = wikiFuzz::$data[$t];
- $string .= "<" . $t . " ";
- $num_params = min( wikiFuzz::$maxparams, count( $arr ) );
- for ( $z = 0; $z < $num_params; $z++ ) {
- $badparam = $arr[wikiFuzz::randnum( count( $arr ) - 1 )];
- $badstring = wikiFuzz::makestring();
- $string .= $badparam . "=" . wikiFuzz::getRandQuote() . $badstring . wikiFuzz::getRandQuote() . " ";
- }
- $string .= ">\n";
- return $string;
- case 2: // a closing tag.
- $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 );
- return "</" . wikiFuzz::$types[$i] . ">";
- case 3: // a random string, between tags.
- return wikiFuzz::makeString();
- }
- return ""; // catch-all, should never be called.
- }
-
- /**
- * Returns one of the three styles of random quote: ', ", and nothing.
- * @return string
- */
- private static function getRandQuote() {
- switch ( wikiFuzz::randnum( 3 ) ) {
- case 1 : return "'";
- case 2 : return "\"";
- default: return "";
- }
- }
-
- /**
- ** Returns fuzz text, with the parameter indicating approximately how many lines of text you want.
- * @param $maxtypes int
- * @return string
- */
- public static function makeFuzz( $maxtypes = 2 ) {
- $page = "";
- for ( $k = 0; $k < $maxtypes; $k++ ) {
- $page .= wikiFuzz::loop();
- }
- return $page;
- }
-}
-
-
-// ////// MEDIAWIKI PAGES TO TEST, AND HOW TO TEST THEM ///////
-
-/**
- ** A page test has just these things:
- ** 1) Form parameters.
- ** 2) the URL we are going to test those parameters on.
- ** 3) Any cookies required for the test.
- ** 4) Whether Tidy should validate the page. Defaults to true, but can be turned off.
- ** Declared abstract because it should be extended by a class
- ** that supplies these parameters.
- */
-abstract class pageTest {
- protected $params;
- protected $pagePath;
- protected $cookie = "";
- protected $tidyValidate = true;
-
- public function getParams() {
- return $this->params;
- }
-
- public function getPagePath() {
- return $this->pagePath;
- }
-
- public function getCookie() {
- return $this->cookie;
- }
-
- public function tidyValidate() {
- return $this->tidyValidate;
- }
-}
-
-
-/**
- ** a page test for the "Edit" page. Tests Parser.php and Sanitizer.php.
- */
-class editPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=WIKIFUZZ";
-
- $this->params = array (
- "action" => "submit",
- "wpMinoredit" => wikiFuzz::makeFuzz( 2 ),
- "wpPreview" => wikiFuzz::makeFuzz( 2 ),
- "wpSection" => wikiFuzz::makeFuzz( 2 ),
- "wpEdittime" => wikiFuzz::makeFuzz( 2 ),
- "wpSummary" => wikiFuzz::makeFuzz( 2 ),
- "wpScrolltop" => wikiFuzz::makeFuzz( 2 ),
- "wpStarttime" => wikiFuzz::makeFuzz( 2 ),
- "wpAutoSummary" => wikiFuzz::makeFuzz( 2 ),
- "wpTextbox1" => wikiFuzz::makeFuzz( 40 ) // the main wiki text, need lots of this.
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSection"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEdittime"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSummary"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpScrolltop"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpStarttime"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpAutoSummary"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpTextbox1"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Listusers".
- */
-class listusersTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Listusers";
-
- $this->params = array (
- "title" => wikiFuzz::makeFuzz( 2 ),
- "group" => wikiFuzz::makeFuzz( 2 ),
- "username" => wikiFuzz::makeFuzz( 2 ),
- "Go" => wikiFuzz::makeFuzz( 2 ),
- "limit" => wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "offset" => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Search".
- */
-class searchTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Search";
-
- $this->params = array (
- "action" => "index.php?title=Special:Search",
- "ns0" => wikiFuzz::makeFuzz( 2 ),
- "ns1" => wikiFuzz::makeFuzz( 2 ),
- "ns2" => wikiFuzz::makeFuzz( 2 ),
- "ns3" => wikiFuzz::makeFuzz( 2 ),
- "ns4" => wikiFuzz::makeFuzz( 2 ),
- "ns5" => wikiFuzz::makeFuzz( 2 ),
- "ns6" => wikiFuzz::makeFuzz( 2 ),
- "ns7" => wikiFuzz::makeFuzz( 2 ),
- "ns8" => wikiFuzz::makeFuzz( 2 ),
- "ns9" => wikiFuzz::makeFuzz( 2 ),
- "ns10" => wikiFuzz::makeFuzz( 2 ),
- "ns11" => wikiFuzz::makeFuzz( 2 ),
- "ns12" => wikiFuzz::makeFuzz( 2 ),
- "ns13" => wikiFuzz::makeFuzz( 2 ),
- "ns14" => wikiFuzz::makeFuzz( 2 ),
- "ns15" => wikiFuzz::makeFuzz( 2 ),
- "redirs" => wikiFuzz::makeFuzz( 2 ),
- "search" => wikiFuzz::makeFuzz( 2 ),
- "offset" => wikiFuzz::chooseInput( array( "", "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) ),
- "fulltext" => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) ),
- "searchx" => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Recentchanges".
- */
-class recentchangesTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Recentchanges";
-
- $this->params = array (
- "action" => wikiFuzz::makeFuzz( 2 ),
- "title" => wikiFuzz::makeFuzz( 2 ),
- "namespace" => wikiFuzz::chooseInput( range( -1, 15 ) ),
- "Go" => wikiFuzz::makeFuzz( 2 ),
- "invert" => wikiFuzz::chooseInput( array( "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "hideanons" => wikiFuzz::chooseInput( array( "-1", "------'-------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "---------'----0", "+1", "81340909772349234", wikiFuzz::makeFuzz( 2 ) ) ),
- "days" => wikiFuzz::chooseInput( array( "-1", "----------'---0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "hideminor" => wikiFuzz::chooseInput( array( "-1", "-----------'--0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "hidebots" => wikiFuzz::chooseInput( array( "-1", "---------'----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "hideliu" => wikiFuzz::chooseInput( array( "-1", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "hidepatrolled" => wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "hidemyself" => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- 'categories_any' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- 'categories' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- 'feed' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Prefixindex".
- */
-class prefixindexTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Prefixindex";
-
- $this->params = array (
- "title" => "Special:Prefixindex",
- "namespace" => wikiFuzz::randnum( 101, -10 ),
- "Go" => wikiFuzz::makeFuzz( 2 )
- );
-
- // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing.
- if ( wikiFuzz::randnum( 3 ) == 0 ) {
- $this->params["prefix"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
- wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
- }
- if ( wikiFuzz::randnum( 3 ) == 0 ) {
- $this->params["from"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
- wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
- }
- }
-}
-
-
-/**
- ** a page test for "Special:MIMEsearch".
- */
-class mimeSearchTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:MIMEsearch";
-
- $this->params = array (
- "action" => "index.php?title=Special:MIMEsearch",
- "mime" => wikiFuzz::makeFuzz( 3 ),
- 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "-------'------0", "+1", "81342321351235325", wikiFuzz::makeFuzz( 2 ) ) ),
- 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "-----'--------0", "+1", "81341231235365252234324", wikiFuzz::makeFuzz( 2 ) ) )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Log".
- */
-class specialLogTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Log";
-
- $this->params = array (
- "type" => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
- "par" => wikiFuzz::makeFuzz( 2 ),
- "user" => wikiFuzz::makeFuzz( 2 ),
- "page" => wikiFuzz::makeFuzz( 2 ),
- "from" => wikiFuzz::makeFuzz( 2 ),
- "until" => wikiFuzz::makeFuzz( 2 ),
- "title" => wikiFuzz::makeFuzz( 2 )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Userlogin", with a successful login.
- */
-class successfulUserLoginTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Userlogin&action=submitlogin&type=login&returnto=" . wikiFuzz::makeFuzz( 2 );
-
- $this->params = array (
- "wpName" => USER_ON_WIKI,
- // sometimes real password, sometimes not:
- 'wpPassword' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), USER_PASSWORD ) ),
- 'wpRemember' => wikiFuzz::makeFuzz( 2 )
- );
-
- $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) );
- }
-}
-
-
-/**
- ** a page test for "Special:Userlogin".
- */
-class userLoginTest extends pageTest {
- function __construct() {
-
- $this->pagePath = "index.php?title=Special:Userlogin";
-
- $this->params = array (
- 'wpRetype' => wikiFuzz::makeFuzz( 2 ),
- 'wpRemember' => wikiFuzz::makeFuzz( 2 ),
- 'wpRealName' => wikiFuzz::makeFuzz( 2 ),
- 'wpPassword' => wikiFuzz::makeFuzz( 2 ),
- 'wpName' => wikiFuzz::makeFuzz( 2 ),
- 'wpMailmypassword' => wikiFuzz::makeFuzz( 2 ),
- 'wpLoginattempt' => wikiFuzz::makeFuzz( 2 ),
- 'wpEmail' => wikiFuzz::makeFuzz( 2 ),
- 'wpDomain' => wikiFuzz::chooseInput( array( "", "local", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpCreateaccountMail' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpCreateaccount' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpCookieCheck' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'type' => wikiFuzz::chooseInput( array( "signup", "login", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'returnto' => wikiFuzz::makeFuzz( 2 ),
- 'action' => wikiFuzz::chooseInput( array( "", "submitlogin", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) );
- }
-}
-
-
-/**
- ** a page test for "Special:Ipblocklist" (also includes unblocking)
- */
-class ipblocklistTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Ipblocklist";
-
- $this->params = array (
- 'wpUnblockAddress' => wikiFuzz::makeFuzz( 2 ),
- 'ip' => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
- // something like an IP address, sometimes invalid:
- ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
- . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
- 'id' => wikiFuzz::makeFuzz( 2 ),
- 'wpUnblockReason' => wikiFuzz::makeFuzz( 2 ),
- 'action' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "success", "submit", "unblock" ) ),
- 'wpEditToken' => wikiFuzz::makeFuzz( 2 ),
- 'wpBlock' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "" ) ),
- 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1",
- "09700982312351132098234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1",
- "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["ip"] );
- if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["id"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpUnblockAddress"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Newimages".
- */
-class newImagesTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Newimages";
-
- $this->params = array (
- 'hidebots' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "1", "", "-1" ) ),
- 'wpIlMatch' => wikiFuzz::makeFuzz( 2 ),
- 'until' => wikiFuzz::makeFuzz( 2 ),
- 'from' => wikiFuzz::makeFuzz( 2 )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["until"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["from"] );
- }
-}
-
-
-/**
- ** a page test for the "Special:Imagelist" page.
- */
-class imagelistTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Imagelist";
-
- $this->params = array (
- 'sort' => wikiFuzz::chooseInput( array( "bysize", "byname" , "bydate", wikiFuzz::makeFuzz( 2 ) ) ),
- 'limit' => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "09700982312351132098234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpIlMatch' => wikiFuzz::makeFuzz( 2 )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Export".
- */
-class specialExportTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Export";
-
- $this->params = array (
- 'action' => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'pages' => wikiFuzz::makeFuzz( 2 ),
- 'curonly' => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'listauthors' => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'history' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ),
-
- );
-
- // For the time being, need to disable "submit" action as Tidy barfs on MediaWiki's XML export.
- if ( $this->params['action'] == 'submit' ) $this->params['action'] = '';
-
- // Sometimes remove the history field.
- if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["history"] );
-
- // page does not produce HTML.
- $this->tidyValidate = false;
- }
-}
-
-
-/**
- ** a page test for "Special:Booksources".
- */
-class specialBooksourcesTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Booksources";
-
- $this->params = array (
- 'go' => wikiFuzz::makeFuzz( 2 ),
- // ISBN codes have to contain some semi-numeric stuff or will be ignored:
- 'isbn' => "0X0" . wikiFuzz::makeFuzz( 2 )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Allpages".
- */
-class specialAllpagesTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special%3AAllpages";
-
- $this->params = array (
- 'from' => wikiFuzz::makeFuzz( 2 ),
- 'namespace' => wikiFuzz::chooseInput( range( -1, 15 ) ),
- 'go' => wikiFuzz::makeFuzz( 2 )
- );
- }
-}
-
-
-/**
- ** a page test for the page History.
- */
-class pageHistoryTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Main_Page&action=history";
-
- $this->params = array (
- 'limit' => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- 'offset' => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ),
- "go" => wikiFuzz::chooseInput( array( "first", "last", wikiFuzz::makeFuzz( 2 ) ) ),
- "dir" => wikiFuzz::chooseInput( array( "prev", "next", wikiFuzz::makeFuzz( 2 ) ) ),
- "diff" => wikiFuzz::chooseInput( array( "-1", "--------'-----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "oldid" => wikiFuzz::chooseInput( array( "prev", "-1", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- "feed" => wikiFuzz::makeFuzz( 2 )
- );
- }
-}
-
-
-/**
- ** a page test for the Special:Contributions".
- */
-class contributionsTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Contributions/" . USER_ON_WIKI;
-
- $this->params = array (
- 'target' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "newbies", USER_ON_WIKI ) ),
- 'namespace' => wikiFuzz::chooseInput( array( -1, 15, 1, wikiFuzz::makeFuzz( 2 ) ) ),
- 'offset' => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "982342131232131231241", wikiFuzz::makeFuzz( 2 ) ) ),
- 'bot' => wikiFuzz::chooseInput( array( "", "-1", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'go' => wikiFuzz::chooseInput( array( "-1", 'prev', 'next', wikiFuzz::makeFuzz( 2 ) ) )
- );
- }
-}
-
-
-/**
- ** a page test for viewing a normal page, whilst posting various params.
- */
-class viewPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Main_Page";
-
- $this->params = array (
- "useskin" => wikiFuzz::chooseInput( array( "chick", "cologneblue", "myskin",
- "nostalgia", "simple", "standard", wikiFuzz::makeFuzz( 2 ) ) ),
- "uselang" => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ),
- "ab", "af", "an", "ar", "arc", "as", "ast", "av", "ay", "az", "ba",
- "bat-smg", "be", "bg", "bm", "bn", "bo", "bpy", "br", "bs", "ca",
- "ce", "cs", "csb", "cv", "cy", "da", "de", "dv", "dz", "el", "en",
- "eo", "es", "et", "eu", "fa", "fi", "fo", "fr", "fur", "fy", "ga",
- "gn", "gsw", "gu", "he", "hi", "hr", "hu", "ia", "id", "ii", "is",
- "it", "ja", "jv", "ka", "km", "kn", "ko", "ks", "ku", "kv", "la",
- "li", "lo", "lt", "lv", "mk", "ml", "ms", "nah", "nap", "nds",
- "nds-nl", "nl", "nn", "no", "non", "nv", "oc", "or", "os", "pa",
- "pl", "pms", "ps", "pt", "pt-br", "qu", "rmy", "ro", "ru", "sc",
- "sd", "sk", "sl", "sq", "sr", "sr-ec", "sr-el",
- "su", "sv", "ta", "te", "th", "tr", "tt", "ty", "tyv", "udm",
- "ug", "uk", "ur", "utf8", "vec", "vi", "wa", "xal", "yi", "za",
- "zh", "zh-cn", "zh-hk", "zh-sg", "zh-tw", "zh-tw" ) ),
- "returnto" => wikiFuzz::makeFuzz( 2 ),
- "feed" => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ),
- "rcid" => wikiFuzz::makeFuzz( 2 ),
- "action" => wikiFuzz::chooseInput( array( "view", "raw", "render", wikiFuzz::makeFuzz( 2 ), "markpatrolled" ) ),
- "printable" => wikiFuzz::makeFuzz( 2 ),
- "oldid" => wikiFuzz::makeFuzz( 2 ),
- "redirect" => wikiFuzz::makeFuzz( 2 ),
- "diff" => wikiFuzz::makeFuzz( 2 ),
- "search" => wikiFuzz::makeFuzz( 2 ),
- "rdfrom" => wikiFuzz::makeFuzz( 2 ), // things from Article.php from here on:
- "token" => wikiFuzz::makeFuzz( 2 ),
- "tbid" => wikiFuzz::makeFuzz( 2 ),
- // @todo FIXME: Duplicate array key.
- "action" => wikiFuzz::chooseInput( array( "purge", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpReason" => wikiFuzz::makeFuzz( 2 ),
- "wpEditToken" => wikiFuzz::makeFuzz( 2 ),
- "from" => wikiFuzz::makeFuzz( 2 ),
- "bot" => wikiFuzz::makeFuzz( 2 ),
- "summary" => wikiFuzz::makeFuzz( 2 ),
- "direction" => wikiFuzz::chooseInput( array( "next", "prev", wikiFuzz::makeFuzz( 2 ) ) ),
- "section" => wikiFuzz::makeFuzz( 2 ),
- "preload" => wikiFuzz::makeFuzz( 2 ),
-
- );
-
- // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
- if ( $this->params["feed"] == "atom" ) { unset( $this->params["feed"] ); }
- elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
-
- // Raw pages cannot really be validated
- if ( $this->params["action"] == "raw" ) unset( $this->params["action"] );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rcid"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["diff"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rdfrom"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["oldid"] );
-
- // usually don't want action == purge.
- if ( wikiFuzz::randnum( 6 ) > 1 ) unset( $this->params["action"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Allmessages".
- */
-class specialAllmessagesTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Allmessages";
-
- // only really has one parameter
- $this->params = array (
- "ot" => wikiFuzz::chooseInput( array( "php", "html", wikiFuzz::makeFuzz( 2 ) ) )
- );
- }
-}
-
-/**
- ** a page test for "Special:Newpages".
- */
-class specialNewpagesPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Newpages";
-
- $this->params = array (
- "namespace" => wikiFuzz::chooseInput( range( -1, 15 ) ),
- "feed" => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ),
- 'limit' => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
- 'offset' => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
- if ( $this->params["feed"] == "atom" ) { unset( $this->params["feed"] ); }
- elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
- }
-}
-
-/**
- ** a page test for "redirect.php"
- */
-class redirectTest extends pageTest {
- function __construct() {
- $this->pagePath = "redirect.php";
-
- $this->params = array (
- "wpDropdown" => wikiFuzz::makeFuzz( 2 )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpDropdown"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Confirmemail"
- */
-class confirmEmail extends pageTest {
- function __construct() {
- // sometimes we send a bogus confirmation code, and sometimes we don't.
- $this->pagePath = "index.php?title=Special:Confirmemail" . wikiFuzz::chooseInput( array( "", "/" . wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 1 ) ) ) );
-
- $this->params = array (
- "token" => wikiFuzz::makeFuzz( 2 )
- );
- }
-}
-
-
-/**
- ** a page test for "Special:Watchlist"
- ** Note: this test would be better if we were logged in.
- */
-class watchlistTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Watchlist";
-
- $this->params = array (
- "remove" => wikiFuzz::chooseInput( array( "Remove checked items from watchlist", wikiFuzz::makeFuzz( 2 ) ) ),
- 'days' => wikiFuzz::chooseInput( array( 0, -1, -230, "--", 3, 9, wikiFuzz::makeFuzz( 2 ) ) ),
- 'hideOwn' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'hideBots' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'namespace' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'action' => wikiFuzz::chooseInput( array( "submit", "clear", wikiFuzz::makeFuzz( 2 ) ) ),
- 'id[]' => wikiFuzz::makeFuzz( 2 ),
- 'edit' => wikiFuzz::makeFuzz( 2 ),
- 'token' => wikiFuzz::chooseInput( array( "", "1243213", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we specifiy "reset", and sometimes we don't.
- if ( wikiFuzz::randnum( 3 ) == 0 ) $this->params["reset"] = wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) );
- }
-}
-
-/**
- ** a page test for "Special:Movepage"
- */
-class specialMovePage extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Movepage";
-
- $this->params = array (
- "action" => wikiFuzz::chooseInput( array( "success", "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ),
- 'target' => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ),
- 'wpOldTitle' => wikiFuzz::chooseInput( array( "z", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpNewTitle' => wikiFuzz::chooseInput( array( "y", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpReason' => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpMovetalk' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpDeleteAndMove' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpConfirm' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'talkmoved' => wikiFuzz::chooseInput( array( "1", wikiFuzz::makeFuzz( 2 ), "articleexists", 'notalkpage' ) ),
- 'oldtitle' => wikiFuzz::makeFuzz( 2 ),
- 'newtitle' => wikiFuzz::makeFuzz( 2 ),
- 'wpMovetalk' => wikiFuzz::chooseInput( array( "1", "0", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpNewTitle"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpReason"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpOldTitle"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Undelete"
- */
-class specialUndeletePageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Undelete";
-
- $this->params = array (
- "action" => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ),
- 'target' => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ),
- 'timestamp' => wikiFuzz::chooseInput( array( "125223", wikiFuzz::makeFuzz( 2 ) ) ),
- 'file' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'restore' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'preview' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpComment' => wikiFuzz::makeFuzz( 2 )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["target"] );
- if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["restore"] );
- if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["preview"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Unlockdb"
- */
-class specialUnlockdbPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Unlockdb";
-
- $this->params = array (
- "action" => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Lockdb"
- */
-class specialLockdbPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Lockdb";
-
- $this->params = array (
- "action" => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpLockReason' => wikiFuzz::makeFuzz( 2 ),
- 'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] );
- }
-}
-
-
-/**
- ** a page test for "Special:Userrights"
- */
-class specialUserrights extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Userrights";
-
- $this->params = array (
- 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'user-editname' => wikiFuzz::chooseInput( array( "Nickj2", "Nickj2\n<xyz>", wikiFuzz::makeFuzz( 2 ) ) ),
- 'ssearchuser' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'saveusergroups' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ), "Save User Groups" ),
- 'member[]' => wikiFuzz::chooseInput( array( "0", "bot", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "available[]" => wikiFuzz::chooseInput( array( "0", "sysop", "bureaucrat", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['ssearchuser'] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['saveusergroups'] );
- }
-}
-
-
-/**
- ** a test for page protection and unprotection.
- */
-class pageProtectionForm extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Main_Page";
-
- $this->params = array (
- "action" => "protect",
- 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- "mwProtect-level-edit" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ),
- "mwProtect-level-move" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ),
- "mwProtectUnchained" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- 'mwProtect-reason' => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["mwProtectUnchained"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['mwProtect-reason'] );
- }
-}
-
-
-/**
- ** a page test for "Special:Blockip".
- */
-class specialBlockip extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Blockip";
-
- $this->params = array (
- "action" => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
- 'wpEditToken' => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpBlockAddress" => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
- // something like an IP address, sometimes invalid:
- ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
- . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
- "ip" => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
- // something like an IP address, sometimes invalid:
- ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
- . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
- "wpBlockOther" => wikiFuzz::chooseInput( array( '', 'Nickj2', wikiFuzz::makeFuzz( 2 ) ) ),
- "wpBlockExpiry" => wikiFuzz::chooseInput( array( "other", "2 hours", "1 day", "3 days", "1 week", "2 weeks",
- "1 month", "3 months", "6 months", "1 year", "infinite", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpBlockReason" => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpAnonOnly" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpCreateAccount" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpBlock" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockOther"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockExpiry"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockReason"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpAnonOnly"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpCreateAccount"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockAddress"] );
- if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["ip"] );
- }
-}
-
-
-/**
- ** a test for the imagepage.
- */
-class imagepageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Image:Small-email.png";
-
- $this->params = array (
- "image" => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpReason" => wikiFuzz::makeFuzz( 2 ),
- "oldimage" => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["image"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldimage"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEditToken"] );
- }
-}
-
-
-/**
- ** a test for page deletion form.
- */
-class pageDeletion extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Main_Page&action=delete";
-
- $this->params = array (
- "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpReason" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "wpConfirm" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpReason"] );
- if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpEditToken"] );
- if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpConfirm"] );
- }
-}
-
-
-
-/**
- ** a test for Revision Deletion.
- */
-class specialRevisionDeletePageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Revisiondelete";
-
- $this->params = array (
- "target" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
- "oldid" => wikiFuzz::makeFuzz( 2 ),
- "oldid[]" => wikiFuzz::makeFuzz( 2 ),
- "wpReason" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "revdelete-hide-text" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "revdelete-hide-comment" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "revdelete-hide-user" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "revdelete-hide-restricted" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid[]"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-text"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-comment"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-user"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-restricted"] );
- }
-}
-
-
-/**
- ** a test for Special:Import.
- */
-class specialImportPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Import";
-
- $this->params = array (
- "action" => "submit",
- "source" => wikiFuzz::chooseInput( array( "upload", "interwiki", wikiFuzz::makeFuzz( 2 ) ) ),
- "MAX_FILE_SIZE" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "xmlimport" => wikiFuzz::chooseInput( array( "/var/www/hosts/mediawiki/wiki/AdminSettings.php", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
- "namespace" => wikiFuzz::chooseInput( array( wikiFuzz::randnum( 30, -6 ), wikiFuzz::makeFuzz( 2 ) ) ),
- "interwiki" => wikiFuzz::makeFuzz( 2 ),
- "interwikiHistory" => wikiFuzz::makeFuzz( 2 ),
- "frompage" => wikiFuzz::makeFuzz( 2 ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["action"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["source"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["MAX_FILE_SIZE"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["xmlimport"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwiki"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwikiHistory"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["frompage"] );
-
- // Note: Need to do a file upload to fully test this Special page.
- }
-}
-
-
-/**
- ** a test for thumb.php
- */
-class thumbTest extends pageTest {
- function __construct() {
- $this->pagePath = "thumb.php";
-
- $this->params = array (
- "f" => wikiFuzz::chooseInput( array( "..", "\\", "small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
- "w" => wikiFuzz::chooseInput( array( "80", wikiFuzz::randnum( 6000, -200 ), wikiFuzz::makeFuzz( 2 ) ) ),
- "r" => wikiFuzz::chooseInput( array( "0", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["f"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["w"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["r"] );
- }
-}
-
-/**
- ** a test for profileinfo.php
- */
-class profileInfo extends pageTest {
- function __construct() {
- $this->pagePath = "profileinfo.php";
-
- $this->params = array (
- "expand" => wikiFuzz::makeFuzz( 2 ),
- "sort" => wikiFuzz::chooseInput( array( "time", "count", "name", wikiFuzz::makeFuzz( 2 ) ) ),
- "filter" => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["sort"] );
- if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["filter"] );
- }
-}
-
-
-/**
- ** a test for Special:Cite (extension Special page).
- */
-class specialCitePageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Cite";
-
- $this->params = array (
- "page" => wikiFuzz::chooseInput( array( "\" onmouseover=\"alert(1);\"", "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
- "id" => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "-9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["page"] );
- if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["id"] );
- }
-}
-
-
-/**
- ** a test for Special:Filepath (extension Special page).
- */
-class specialFilepathPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Filepath";
-
- $this->params = array (
- "file" => wikiFuzz::chooseInput( array( "Small-email.png", "Small-email.png" . wikiFuzz::makeFuzz( 1 ), wikiFuzz::makeFuzz( 2 ) ) ),
- );
- }
-}
-
-
-/**
- ** a test for Special:Renameuser (extension Special page).
- */
-class specialRenameuserPageTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Renameuser";
-
- $this->params = array (
- "oldusername" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
- "newusername" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
- "token" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
- );
- }
-}
-
-
-/**
- ** a test for Special:Linksearch (extension Special page).
- */
-class specialLinksearch extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special%3ALinksearch";
-
- $this->params = array (
- "target" => wikiFuzz::makeFuzz( 2 ),
- );
-
- // sometimes we don't want to specify certain parameters.
- if ( wikiFuzz::randnum( 10 ) == 0 ) unset( $this->params["target"] );
- }
-}
-
-
-/**
- ** a test for Special:CategoryTree (extension Special page).
- */
-class specialCategoryTree extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:CategoryTree";
-
- $this->params = array (
- "target" => wikiFuzz::makeFuzz( 2 ),
- "from" => wikiFuzz::makeFuzz( 2 ),
- "until" => wikiFuzz::makeFuzz( 2 ),
- "showas" => wikiFuzz::makeFuzz( 2 ),
- "mode" => wikiFuzz::chooseInput( array( "pages", "categories", "all", wikiFuzz::makeFuzz( 2 ) ) ),
- );
-
- // sometimes we do want to specify certain parameters.
- if ( wikiFuzz::randnum( 5 ) == 0 ) $this->params["notree"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
- }
-}
-
-
-/**
- ** a test for "Special:Chemicalsources" (extension Special page).
- */
-class specialChemicalsourcesTest extends pageTest {
- function __construct() {
- $this->pagePath = "index.php?title=Special:Chemicalsources";
-
- // choose an input format to use.
- $format = wikiFuzz::chooseInput(
- array( 'go',
- 'CAS',
- 'EINECS',
- 'CHEBI',
- 'PubChem',
- 'SMILES',
- 'InChI',
- 'ATCCode',
- 'KEGG',
- 'RTECS',
- 'ECNumber',
- 'DrugBank',
- 'Formula',
- 'Name'
- )
- );
-
- // values for different formats usually start with either letters or numbers.
- switch ( $format ) {
- case 'Name' : $value = "A"; break;
- case 'InChI' :
- case 'SMILES' :
- case 'Formula': $value = "C"; break;
- default : $value = "0"; break;
- }
-
- // and then we append the fuzz input.
- $this->params = array ( $format => $value . wikiFuzz::makeFuzz( 2 ) );
- }
-}
-
-
-/**
- ** A test for api.php (programmatic interface to MediaWiki in XML/JSON/RSS/etc formats).
- ** Quite involved to test because there are lots of options/parameters, and because
- ** for a lot of the functionality if all the parameters don't make sense then it just
- ** returns the help screen - so currently a lot of the tests aren't actually doing much
- ** because something wasn't right in the query.
- **
- ** @todo Incomplete / unfinished; Runs too fast (suggests not much testing going on).
- */
-class api extends pageTest {
-
- // API login mode.
- private static function loginMode() {
- $arr = array ( "lgname" => wikiFuzz::makeFuzz( 2 ),
- "lgpassword" => wikiFuzz::makeFuzz( 2 ),
- );
- // sometimes we want to specify the extra "lgdomain" parameter.
- if ( wikiFuzz::randnum( 3 ) == 0 ) {
- $arr["lgdomain"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
- }
-
- return $arr;
- }
-
- // API OpenSearch mode.
- private static function opensearchMode() {
- return array ( "search" => wikiFuzz::makeFuzz( 2 ) );
- }
-
- // API watchlist feed mode.
- private static function feedwatchlistMode() {
- // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible value below?
- return array ( "feedformat" => wikiFuzz::chooseInput( array( "rss", "atom" ) ) );
- }
-
- // API query mode.
- private static function queryMode() {
- // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible params for the elements below?
- // Suspect this will stuff up the tests more, but need to check.
- $params = array (
- // @todo FIXME: More titles.
- "titles" => wikiFuzz::chooseInput( array( "Main Page" ) ),
- // @todo FIXME: More pageids.
- "pageids" => 1,
- "prop" => wikiFuzz::chooseInput( array( "info", "revisions", "watchlist" ) ),
- "list" => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks" ) ),
- "meta" => wikiFuzz::chooseInput( array( "siteinfo" ) ),
- "generator" => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "info", "revisions" ) ),
- "siprop" => wikiFuzz::chooseInput( array( "general", "namespaces", "general|namespaces" ) ),
- );
-
- // Add extra parameters based on what list choice we got.
- switch ( $params["list"] ) {
- case "usercontribs" : self::addListParams ( $params, "uc", array( "limit", "start", "end", "user", "dir" ) ); break;
- case "allpages" : self::addListParams ( $params, "ap", array( "from", "prefix", "namespace", "filterredir", "limit" ) ); break;
- case "watchlist" : self::addListParams ( $params, "wl", array( "allrev", "start", "end", "namespace", "dir", "limit", "prop" ) ); break;
- case "logevents" : self::addListParams ( $params, "le", array( "limit", "type", "start", "end", "user", "dir" ) ); break;
- case "recentchanges": self::addListParams ( $params, "rc", array( "limit", "prop", "show", "namespace", "start", "end", "dir" ) ); break;
- case "backlinks" : self::addListParams ( $params, "bl", array( "continue", "namespace", "redirect", "limit" ) ); break;
- case "embeddedin" : self::addListParams ( $params, "ei", array( "continue", "namespace", "redirect", "limit" ) ); break;
- case "imagelinks" : self::addListParams ( $params, "il", array( "continue", "namespace", "redirect", "limit" ) ); break;
- }
-
- if ( $params["prop"] == "revisions" ) {
- self::addListParams ( $params, "rv", array( "prop", "limit", "startid", "endid", "end", "dir" ) );
- }
-
- // Sometimes we want redirects, sometimes we don't.
- if ( wikiFuzz::randnum( 3 ) == 0 ) {
- $params["redirects"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
- }
-
- return $params;
- }
-
- // Adds all the elements to the array, using the specified prefix.
- private static function addListParams( &$array, $prefix, $elements ) {
- foreach ( $elements as $element ) {
- $array[$prefix . $element] = self::getParamDetails( $element );
- }
- }
-
- // For a given element name, returns the data for that element.
- private static function getParamDetails( $element ) {
- switch ( $element ) {
- case 'startid' :
- case 'endid' :
- case 'start' :
- case 'end' :
- case 'limit' : return wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", "320742734234235", "20060230121212", wikiFuzz::randnum( 9000, -100 ), wikiFuzz::makeFuzz( 2 ) ) );
- case 'dir' : return wikiFuzz::chooseInput( array( "newer", "older", wikiFuzz::makeFuzz( 2 ) ) );
- case 'user' : return wikiFuzz::chooseInput( array( USER_ON_WIKI, wikiFuzz::makeFuzz( 2 ) ) );
- case 'namespace' : return wikiFuzz::chooseInput( array( -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 200000, wikiFuzz::makeFuzz( 2 ) ) );
- case 'filterredir': return wikiFuzz::chooseInput( array( "all", "redirects", "nonredirectsallpages", wikiFuzz::makeFuzz( 2 ) ) );
- case 'allrev' : return wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
- case 'prop' : return wikiFuzz::chooseInput( array( "user", "comment", "timestamp", "patrol", "flags", "user|user|comment|flags", wikiFuzz::makeFuzz( 2 ) ) );
- case 'type' : return wikiFuzz::chooseInput( array( "block", "protect", "rights", "delete", "upload", "move", "import", "renameuser", "newusers", "makebot", wikiFuzz::makeFuzz( 2 ) ) );
- case 'hide' : return wikiFuzz::chooseInput( array( "minor", "bots", "anons", "liu", "liu|bots|", wikiFuzz::makeFuzz( 2 ) ) );
- case 'show' : return wikiFuzz::chooseInput( array( 'minor', '!minor', 'bot', '!bot', 'anon', '!anon', wikiFuzz::makeFuzz( 2 ) ) );
- default : return wikiFuzz::makeFuzz( 2 );
- }
- }
-
- // Entry point.
- function __construct() {
- $this->pagePath = "api.php";
-
- $modes = array ( "help",
- "login",
- "opensearch",
- "feedwatchlist",
- "query" );
- $action = wikiFuzz::chooseInput( array_merge ( $modes, array( wikiFuzz::makeFuzz( 2 ) ) ) );
-
- switch ( $action ) {
- case "login" : $this->params = self::loginMode();
- break;
- case "opensearch" : $this->params = self::opensearchMode();
- break;
- case "feedwatchlist" : $this->params = self::feedwatchlistMode();
- break;
- case "query" : $this->params = self::queryMode();
- break;
- case "help" :
- default : // Do something random - "Crazy Ivan" mode.
- $random_mode = wikiFuzz::chooseInput( $modes ) . "Mode";
- // There is no "helpMode".
- if ( $random_mode == "helpMode" ) $random_mode = "queryMode";
- $this->params = self::$random_mode();
- break;
- }
-
- // Save the selected action.
- $this->params["action"] = $action;
-
- // Set the cookie:
- // @todo FIXME: Need to get this cookie dynamically set, rather than hard-coded.
- $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540";
-
- // Output format
- $this->params["format"] = wikiFuzz::chooseInput( array( "json", "jsonfm", "php", "phpfm",
- "wddx", "wddxfm", "xml", "xmlfm",
- "yaml", "yamlfm", "raw", "rawfm",
- wikiFuzz::makeFuzz( 2 ) ) );
-
- // Page does not produce HTML (sometimes).
- $this->tidyValidate = false;
- }
-}
-
-
-/**
- ** a page test for the GeSHi extension.
- */
-class GeSHi_Test extends pageTest {
-
- private function getGeSHiContent() {
- return "<source lang=\"" . $this->getLang() . "\" "
- . ( wikiFuzz::randnum( 2 ) == 0 ? "line " : "" )
- . ( wikiFuzz::randnum( 2 ) == 0 ? "strict " : "" )
- . "start=" . wikiFuzz::chooseInput( array( wikiFuzz::randnum( 6000, -6000 ), wikiFuzz::makeFuzz( 2 ) ) )
- . ">"
- . wikiFuzz::makeFuzz( 2 )
- . "</source>";
- }
-
- private function getLang() {
- return wikiFuzz::chooseInput( array( "actionscript", "ada", "apache", "applescript", "asm", "asp", "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp",
- "cfdg", "cfm", "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran", "freebasic", "gml", "groovy", "html4strict", "idl",
- "ini", "inno", "io", "java", "java5", "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc", "ocaml", "ocaml-brief", "oobas",
- "oracle8", "pascal", "perl", "php", "php-brief", "plsql", "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic", "smalltalk", "smarty",
- "sql", "tcl", "text", "thinbasic", "tsql", "vb", "vbnet", "vhdl", "visualfoxpro", "winbatch", "xml", "xpp", "z80", wikiFuzz::makeFuzz( 1 ) ) );
- }
-
- function __construct() {
- $this->pagePath = "index.php?title=WIKIFUZZ";
-
- $this->params = array (
- "action" => "submit",
- "wpMinoredit" => "test",
- "wpPreview" => "test",
- "wpSection" => "test",
- "wpEdittime" => "test",
- "wpSummary" => "test",
- "wpScrolltop" => "test",
- "wpStarttime" => "test",
- "wpAutoSummary" => "test",
- "wpTextbox1" => $this->getGeSHiContent() // the main wiki text, contains fake GeSHi content.
- );
- }
-}
-
-/**
- ** selects a page test to run.
- * @param $count
- * @return \api|\confirmEmail|\contributionsTest|\editPageTest|\imagelistTest|\imagepageTest|\ipblocklistTest|\listusersTest|\mimeSearchTest|\newImagesTest|\pageDeletion|\pageHistoryTest|\pageProtectionForm|\prefixindexTest|\profileInfo|\recentchangesTest|\redirectTest|\searchTest|\specialAllmessagesTest|\specialAllpagesTest|\specialBlockip|\specialBooksourcesTest|\specialCategoryTree|\specialChemicalsourcesTest|\specialCitePageTest|\specialExportTest|\specialFilepathPageTest|\specialImportPageTest|\specialLinksearch|\specialLockdbPageTest|\specialLogTest|\specialMovePage|\specialNewpagesPageTest|\specialRenameuserPageTest|\specialRevisionDeletePageTest|\specialUndeletePageTest|\specialUnlockdbPageTest|\specialUserrights|\successfulUserLoginTest|\thumbTest|\userLoginTest|\viewPageTest|\watchlistTest
- */
-function selectPageTest( $count ) {
-
- // if the user only wants a specific test, then only ever give them that.
- if ( defined( "SPECIFIC_TEST" ) ) {
- $testType = SPECIFIC_TEST;
- return new $testType ();
- }
-
- // Some of the time we test Special pages, the remaining
- // time we test using the standard edit page.
- switch ( $count % 100 ) {
- case 0 : return new successfulUserLoginTest();
- case 1 : return new listusersTest();
- case 2 : return new searchTest();
- case 3 : return new recentchangesTest();
- case 4 : return new prefixindexTest();
- case 5 : return new mimeSearchTest();
- case 6 : return new specialLogTest();
- case 7 : return new userLoginTest();
- case 8 : return new ipblocklistTest();
- case 9 : return new newImagesTest();
- case 10: return new imagelistTest();
- case 11: return new specialExportTest();
- case 12: return new specialBooksourcesTest();
- case 13: return new specialAllpagesTest();
- case 14: return new pageHistoryTest();
- case 15: return new contributionsTest();
- case 16: return new viewPageTest();
- case 17: return new specialAllmessagesTest();
- case 18: return new specialNewpagesPageTest();
- case 19: return new searchTest();
- case 20: return new redirectTest();
- case 21: return new confirmEmail();
- case 22: return new watchlistTest();
- case 24: return new specialUndeletePageTest();
- case 25: return new specialMovePage();
- case 26: return new specialUnlockdbPageTest();
- case 27: return new specialLockdbPageTest();
- case 28: return new specialUserrights();
- case 29: return new pageProtectionForm();
- case 30: return new specialBlockip();
- case 31: return new imagepageTest();
- case 32: return new pageDeletion();
- case 33: return new specialRevisionDeletePageTest();
- case 34: return new specialImportPageTest();
- case 35: return new thumbTest();
- case 37: return new profileInfo();
- case 38: return new specialCitePageTest();
- case 39: return new specialFilepathPageTest();
- case 40: return new specialRenameuserPageTest();
- case 41: return new specialLinksearch();
- case 42: return new specialCategoryTree();
- case 43: return new api();
- case 44: return new specialChemicalsourcesTest();
- default: return new editPageTest();
- }
-}
-
-
-// ///////////////////// SAVING OUTPUT /////////////////////////
-
-/**
- ** Utility function for saving a file. Currently has no error checking.
- */
-function saveFile( $data, $name ) {
- file_put_contents( $name, $data );
-}
-
-/**
- ** Returns a test as an experimental GET-to-POST URL.
- ** This doesn't seem to always work though, and sometimes the output is too long
- ** to be a valid GET URL, so we also save in other formats.
- * @param $test pageTest
- * @return string
- */
-function getAsURL( pageTest $test ) {
- $used_question_mark = ( strpos( $test->getPagePath(), "?" ) !== false );
- $retval = "http://get-to-post.nickj.org/?" . WIKI_BASE_URL . $test->getPagePath();
- foreach ( $test->getParams() as $param => $value ) {
- if ( !$used_question_mark ) {
- $retval .= "?";
- $used_question_mark = true;
- }
- else {
- $retval .= "&";
- }
- $retval .= $param . "=" . urlencode( $value );
- }
- return $retval;
-}
-
-
-/**
- ** Saves a plain-text human-readable version of a test.
- */
-function saveTestAsText( pageTest $test, $filename ) {
- $str = "Test: " . $test->getPagePath();
- foreach ( $test->getParams() as $param => $value ) {
- $str .= "\n$param: $value";
- }
- $str .= "\nGet-to-post URL: " . getAsURL( $test ) . "\n";
- saveFile( $str, $filename );
-}
-
-
-/**
- ** Saves a test as a standalone basic PHP script that shows this one problem.
- ** Resulting script requires PHP-Curl be installed in order to work.
- */
-function saveTestAsPHP( pageTest $test, $filename ) {
- $str = "<?php\n"
- . "\$params = " . var_export( escapeForCurl( $test->getParams() ), true ) . ";\n"
- . "\$ch = curl_init();\n"
- . "curl_setopt(\$ch, CURLOPT_POST, 1);\n"
- . "curl_setopt(\$ch, CURLOPT_POSTFIELDS, \$params );\n"
- . "curl_setopt(\$ch, CURLOPT_URL, " . var_export( WIKI_BASE_URL . $test->getPagePath(), true ) . ");\n"
- . "curl_setopt(\$ch, CURLOPT_RETURNTRANSFER,1);\n"
- . ( $test->getCookie() ? "curl_setopt(\$ch, CURLOPT_COOKIE, " . var_export( $test->getCookie(), true ) . ");\n" : "" )
- . "\$result=curl_exec(\$ch);\n"
- . "curl_close (\$ch);\n"
- . "print \$result;\n"
- . "\n";
- saveFile( $str, $filename );
-}
-
-/**
- * Escapes a value so that it can be used on the command line by Curl.
- * Specifically, "<" and "@" need to be escaped if they are the first character,
- * otherwise curl interprets these as meaning that we want to insert a file.
- * @param $input_params array
- * @return array
- */
-function escapeForCurl( array $input_params ) {
- $output_params = array();
- foreach ( $input_params as $param => $value ) {
- if ( strlen( $value ) > 0 && ( $value[0] == "@" || $value[0] == "<" ) ) {
- $value = "\\" . $value;
- }
- $output_params[$param] = $value;
- }
- return $output_params;
-}
-
-
-/**
- ** Saves a test as a standalone CURL shell script that shows this one problem.
- ** Resulting script requires standalone Curl be installed in order to work.
- */
-function saveTestAsCurl( pageTest $test, $filename ) {
- $str = "#!/bin/bash\n"
- . "curl --silent --include --globoff \\\n"
- . ( $test->getCookie() ? " --cookie " . escapeshellarg( $test->getCookie() ) . " \\\n" : "" );
- foreach ( escapeForCurl( $test->getParams() ) as $param => $value ) {
- $str .= " -F " . escapeshellarg( $param ) . "=" . escapeshellarg( $value ) . " \\\n";
- }
- $str .= " " . escapeshellarg( WIKI_BASE_URL . $test->getPagePath() ); // beginning space matters.
- $str .= "\n";
- saveFile( $str, $filename );
- chmod( $filename, 0755 ); // make executable
-}
-
-
-/**
- ** Saves the internal data structure to file.
- */
-function saveTestData ( pageTest $test, $filename ) {
- saveFile( serialize( $test ), $filename );
-}
-
-
-/**
- ** saves a test in the various formats.
- */
-function saveTest( pageTest $test, $testname ) {
- $base_name = DIRECTORY . "/" . $testname;
- saveTestAsText( $test, $base_name . INFO_FILE );
- saveTestAsPHP ( $test, $base_name . PHP_TEST );
- saveTestAsCurl( $test, $base_name . CURL_TEST );
- saveTestData ( $test, $base_name . DATA_FILE );
-}
-
-// ////////////////// MEDIAWIKI OUTPUT /////////////////////////
-
-/**
- * Asks MediaWiki for the HTML output of a test.
- * @param $test pageTest
- * @return string
- */
-function wikiTestOutput( pageTest $test ) {
-
- $ch = curl_init();
-
- // specify the cookie, if required.
- if ( $test->getCookie() ) {
- curl_setopt( $ch, CURLOPT_COOKIE, $test->getCookie() );
- }
- curl_setopt( $ch, CURLOPT_POST, 1 ); // save form using a POST
-
- $params = escapeForCurl( $test->getParams() );
- curl_setopt( $ch, CURLOPT_POSTFIELDS, $params ); // load the POST variables
-
- curl_setopt( $ch, CURLOPT_URL, WIKI_BASE_URL . $test->getPagePath() ); // set url to post to
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // return into a variable
-
- $result = curl_exec ( $ch );
-
- // if we encountered an error, then say so, and return an empty string.
- if ( curl_error( $ch ) ) {
- print "\nCurl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch );
- $result = "";
- }
-
- curl_close ( $ch );
-
- return $result;
-}
-
-
-// ////////////////// HTML VALIDATION /////////////////////////
-
-/**
- * Asks the validator whether this is valid HTML, or not.
- * @param $text string
- * @return array
- */
-function validateHTML( $text ) {
-
- $params = array ( "fragment" => $text );
-
- $ch = curl_init();
-
- curl_setopt( $ch, CURLOPT_POST, 1 ); // save form using a POST
- curl_setopt( $ch, CURLOPT_POSTFIELDS, $params ); // load the POST variables
- curl_setopt( $ch, CURLOPT_URL, VALIDATOR_URL ); // set url to post to
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // return into a variable
-
- $result = curl_exec ( $ch );
-
- // if we encountered an error, then log it, and exit.
- if ( curl_error( $ch ) ) {
- trigger_error( "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) );
- print "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) . " - exiting.\n";
- exit( 1 );
- }
-
- curl_close ( $ch );
-
- $valid = ( strpos( $result, "Failed validation" ) === false );
-
- return array( $valid, $result );
-}
-
-/**
- * Get tidy to check for no HTML errors in the output file (e.g. unescaped strings).
- * @param $name
- * @return bool
- */
-function tidyCheckFile( $name ) {
- $file = DIRECTORY . "/" . $name;
- $command = PATH_TO_TIDY . " -output /tmp/out.html -quiet $file 2>&1";
- $x = `$command`;
-
- // Look for the most interesting Tidy errors and warnings.
- if ( strpos( $x, "end of file while parsing attributes" ) !== false
- || strpos( $x, "attribute with missing trailing quote mark" ) !== false
- || strpos( $x, "missing '>' for end of tag" ) !== false
- || strpos( $x, "Error:" ) !== false ) {
- print "\nTidy found something - view details with: $command";
- return false;
- } else {
- return true;
- }
-}
-
-/**
- ** Returns whether or not an database error log file has changed in size since
- ** the last time this was run. This is used to tell if a test caused a DB error.
- * @return bool
- */
-function dbErrorLogged() {
- static $filesize;
-
- // first time running this function
- if ( !isset( $filesize ) ) {
- // create log if it does not exist
- if ( DB_ERROR_LOG_FILE && !file_exists( DB_ERROR_LOG_FILE ) ) {
- saveFile( '', DB_ERROR_LOG_FILE );
- }
- $filesize = filesize( DB_ERROR_LOG_FILE );
- return false;
- }
-
- $newsize = filesize( DB_ERROR_LOG_FILE );
- // if the log has grown, then assume the current test caused it.
- if ( $newsize != $filesize ) {
- $filesize = $newsize;
- return true;
- }
-
- return false;
-}
-
-// //////////////// TOP-LEVEL PROBLEM-FINDING FUNCTION ////////////////////////
-
-/**
- * takes a page test, and runs it and tests it for problems in the output.
- * Returns: False on finding a problem, or True on no problems being found.
- * @param $test pageTest
- * @param $testname
- * @param $can_overwrite bool
- * @return bool
- */
-function runWikiTest( pageTest $test, &$testname, $can_overwrite = false ) {
-
- // by default don't overwrite a previous test of the same name.
- while ( ! $can_overwrite && file_exists( DIRECTORY . "/" . $testname . DATA_FILE ) ) {
- $testname .= "-" . mt_rand( 0, 9 );
- }
-
- $filename = DIRECTORY . "/" . $testname . DATA_FILE;
-
- // Store the time before and after, to find slow pages.
- $before = microtime( true );
-
- // Get MediaWiki to give us the output of this test.
- $wiki_preview = wikiTestOutput( $test );
-
- $after = microtime( true );
-
- // if we received no response, then that's interesting.
- if ( $wiki_preview == "" ) {
- print "\nNo response received for: $filename";
- return false;
- }
-
- // save output HTML to file.
- $html_file = DIRECTORY . "/" . $testname . HTML_FILE;
- saveFile( $wiki_preview, $html_file );
-
- // if there were PHP errors in the output, then that's interesting too.
- if ( strpos( $wiki_preview, "<b>Warning</b>: " ) !== false
- || strpos( $wiki_preview, "<b>Fatal error</b>: " ) !== false
- || strpos( $wiki_preview, "<b>Notice</b>: " ) !== false
- || strpos( $wiki_preview, "<b>Error</b>: " ) !== false
- || strpos( $wiki_preview, "<b>Strict Standards:</b>" ) !== false
- ) {
- $error = substr( $wiki_preview, strpos( $wiki_preview, "</b>:" ) + 7, 50 );
- // Avoid probable PHP bug with bad session ids; http://bugs.php.net/bug.php?id=38224
- if ( $error != "Unknown: The session id contains illegal character" ) {
- print "\nPHP error/warning/notice in HTML output: $html_file ; $error";
- return false;
- }
- }
-
- // if there was a MediaWiki Backtrace message in the output, then that's also interesting.
- if ( strpos( $wiki_preview, "Backtrace:" ) !== false ) {
- print "\nInternal MediaWiki error in HTML output: $html_file";
- return false;
- }
-
- // if there was a Parser error comment in the output, then that's potentially interesting.
- if ( strpos( $wiki_preview, "!-- ERR" ) !== false ) {
- print "\nParser Error comment in HTML output: $html_file";
- return false;
- }
-
- // if a database error was logged, then that's definitely interesting.
- if ( dbErrorLogged() ) {
- print "\nDatabase Error logged for: $filename";
- return false;
- }
-
- // validate result
- $valid = true;
- if ( VALIDATE_ON_WEB ) {
- list ( $valid, $validator_output ) = validateHTML( $wiki_preview );
- if ( !$valid ) print "\nW3C web validation failed - view details with: html2text " . DIRECTORY . "/" . $testname . ".validator_output.html";
- }
-
- // Get tidy to check the page, unless we already know it produces non-(X)HTML output.
- if ( $test->tidyValidate() ) {
- $valid = tidyCheckFile( $testname . HTML_FILE ) && $valid;
- }
-
- // if it took more than 2 seconds to render, then it may be interesting too. (Possible DoS attack?)
- if ( ( $after - $before ) >= 2 ) {
- print "\nParticularly slow to render (" . round( $after - $before, 2 ) . " seconds): $filename";
- return false;
- }
-
- if ( $valid ) {
- // Remove temp HTML file if test was valid:
- unlink( $html_file );
- } elseif ( VALIDATE_ON_WEB ) {
- saveFile( $validator_output, DIRECTORY . "/" . $testname . ".validator_output.html" );
- }
-
- return $valid;
-}
-
-
-// ///////////////// RERUNNING OLD TESTS ///////////////////
-
-/**
- ** We keep our failed tests so that they can be rerun.
- ** This function does that retesting.
- */
-function rerunPreviousTests() {
- print "Retesting previously found problems.\n";
-
- $dir_contents = scandir ( DIRECTORY );
-
- // sort file into the order a normal person would use.
- natsort ( $dir_contents );
-
- foreach ( $dir_contents as $file ) {
-
- // if file is not a test, then skip it.
- // Note we need to escape any periods or will be treated as "any character".
- $matches = array();
- if ( !preg_match( "/(.*)" . str_replace( ".", "\.", DATA_FILE ) . "$/", $file, $matches ) ) continue;
-
- // reload the test.
- $full_path = DIRECTORY . "/" . $file;
- $test = unserialize( file_get_contents( $full_path ) );
-
- // if this is not a valid test, then skip it.
- if ( ! $test instanceof pageTest ) {
- print "\nSkipping invalid test - $full_path";
- continue;
- }
-
- // The date format is in Apache log format, which makes it easier to locate
- // which retest caused which error in the Apache logs (only happens usually if
- // apache segfaults).
- if ( !QUIET ) print "[" . date ( "D M d H:i:s Y" ) . "] Retesting $file (" . get_class( $test ) . ")";
-
- // run test
- $testname = $matches[1];
- $valid = runWikiTest( $test, $testname, true );
-
- if ( !$valid ) {
- saveTest( $test, $testname );
- if ( QUIET ) {
- print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------";
- } else {
- print "\n";
- }
- }
- else {
- if ( !QUIET ) print "\r";
- if ( DELETE_PASSED_RETESTS ) {
- $prefix = DIRECTORY . "/" . $testname;
- if ( is_file( $prefix . DATA_FILE ) ) unlink( $prefix . DATA_FILE );
- if ( is_file( $prefix . PHP_TEST ) ) unlink( $prefix . PHP_TEST );
- if ( is_file( $prefix . CURL_TEST ) ) unlink( $prefix . CURL_TEST );
- if ( is_file( $prefix . INFO_FILE ) ) unlink( $prefix . INFO_FILE );
- }
- }
- }
-
- print "\nDone retesting.\n";
-}
-
-
-// //////////////////// MAIN LOOP ////////////////////////
-
-
-// first check whether CURL is installed, because sometimes it's not.
-if ( ! function_exists( 'curl_init' ) ) {
- die( "Could not find 'curl_init' function. Is the curl extension compiled into PHP?\n" );
-}
-
-// Initialization of types. wikiFuzz doesn't have a constructor because we want to
-// access it staticly and not have any globals.
-wikiFuzz::$types = array_keys( wikiFuzz::$data );
-
-// Make directory if doesn't exist
-if ( !is_dir( DIRECTORY ) ) {
- mkdir ( DIRECTORY, 0700 );
-}
-// otherwise, we first retest the things that we have found in previous runs
-elseif ( RERUN_OLD_TESTS ) {
- rerunPreviousTests();
-}
-
-// main loop.
-$start_time = date( "U" );
-$num_errors = 0;
-if ( !QUIET ) {
- print "Beginning main loop. Results are stored in the " . DIRECTORY . " directory.\n";
- print "Press CTRL+C to stop testing.\n";
-}
-
-for ( $count = 0; true; $count++ ) {
- if ( !QUIET ) {
- // spinning progress indicator.
- switch( $count % 4 ) {
- case '0': print "\r/"; break;
- case '1': print "\r-"; break;
- case '2': print "\r\\"; break;
- case '3': print "\r|"; break;
- }
- print " $count";
- }
-
- // generate a page test to run.
- $test = selectPageTest( $count );
-
- $mins = ( date( "U" ) - $start_time ) / 60;
- if ( !QUIET && $mins > 0 ) {
- print ". $num_errors poss errors. "
- . floor( $mins ) . " mins. "
- . round ( $count / $mins, 0 ) . " tests/min. "
- . get_class( $test ); // includes the current test name.
- }
-
- // run this test against MediaWiki, and see if the output was valid.
- $testname = $count;
- $valid = runWikiTest( $test, $testname, false );
-
- // save the failed test
- if ( ! $valid ) {
- if ( QUIET ) {
- print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------";
- } else {
- print "\n";
- }
- saveTest( $test, $testname );
- $num_errors += 1;
- } elseif ( KEEP_PASSED_TESTS ) {
- // print current time, with microseconds (matches "strace" format), and the test name.
- print " " . date( "H:i:s." ) . substr( current( explode( " ", microtime() ) ), 2 ) . " " . $testname;
- saveTest( $test, $testname );
- }
-
- // stop if we have reached max number of errors.
- if ( defined( "MAX_ERRORS" ) && $num_errors >= MAX_ERRORS ) {
- break;
- }
-
- // stop if we have reached max number of mins runtime.
- if ( defined( "MAX_RUNTIME" ) && $mins >= MAX_RUNTIME ) {
- break;
- }
-}
*/
public $findex;
-
/**
* A resource pointing to a sitemap file
*
if ( is_file( $filename ) ) {
$title = isset( $options['title'] ) ? $options['title'] : titleFromFilename( $filename );
- $title = Title::newFromURL( $title );
+ $title = Title::newFromText( $title );
if ( is_object( $title ) ) {
<?php
-if ( !defined( 'MEDIAWIKI' ) ) {
- die();
-}
/**
* Statistic output classes.
*
*/
/** A general output object. Need to be overriden */
-class statsOutput {
+class StatsOutput {
function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
- return @sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+ wfSuppressWarnings();
+ $return = sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+ wfRestoreWarnings();
+ return $return;
}
# Override the following methods
}
/** Outputs WikiText */
-class wikiStatsOutput extends statsOutput {
+class WikiStatsOutput extends StatsOutput {
function heading() {
global $wgDummyLanguageCodes;
$version = SpecialVersion::getVersion( 'nodb' );
echo "'''Statistics are based on:''' <code>" . $version . "</code>\n\n";
- echo "'''Note:''' These statistics can be generated by running <code>php maintenance/language/transstat.php</code>.\n\n";
- echo "For additional information on specific languages (the message names, the actual problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
+ echo "'''Note:''' These statistics can be generated by running " .
+ "<code>php maintenance/language/transstat.php</code>.\n\n";
+ echo "For additional information on specific languages (the message names, the actual " .
+ "problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
echo 'English (en) is excluded because it is the default localization';
if ( is_array( $wgDummyLanguageCodes ) ) {
$dummyCodes = array();
foreach ( $wgDummyLanguageCodes as $dummyCode => $correctCode ) {
$dummyCodes[] = Language::fetchLanguageName( $dummyCode ) . ' (' . $dummyCode . ')';
}
- echo ', as well as the following languages that are not intended for system message translations, usually because they redirect to other language codes: ' . implode( ', ', $dummyCodes );
+ echo ', as well as the following languages that are not intended for ' .
+ 'system message translations, usually because they redirect to other ' .
+ 'language codes: ' . implode( ', ', $dummyCodes );
}
echo ".\n\n"; # dot to end sentence
- echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
+ echo '{| class="sortable wikitable" border="2" style="background-color: #F9F9F9; ' .
+ 'border: 1px #AAAAAA solid; border-collapse: collapse; clear:both; width:100%;"' . "\n";
}
function footer() {
}
function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
- $v = @round( 255 * $subset / $total );
+ wfSuppressWarnings();
+ $v = round( 255 * $subset / $total );
+ wfRestoreWarnings();
+
if ( $revert ) {
# Weigh reverse with factor 20 so coloring takes effect more quickly as
# this option is used solely for reporting 'bad' percentages.
}
/** Output text. To be used on a terminal for example. */
-class textStatsOutput extends statsOutput {
+class TextStatsOutput extends StatsOutput {
function element( $in, $heading = false ) {
echo $in . "\t";
}
}
/** csv output. Some people love excel */
-class csvStatsOutput extends statsOutput {
+class CsvStatsOutput extends StatsOutput {
function element( $in, $heading = false ) {
echo $in . ";";
}
$this->output = $options['output'];
}
- $this->L = new languages( $this->includeExif );
+ $this->L = new Languages( $this->includeExif );
}
/**
return array(
'untranslated' => '$1 message(s) of $2 are not translated to $3, but exist in en:',
'duplicate' => '$1 message(s) of $2 are translated the same in en and $3:',
- 'obsolete' => '$1 message(s) of $2 do not exist in en or are in the ignore list, but exist in $3:',
+ 'obsolete' =>
+ '$1 message(s) of $2 do not exist in en or are in the ignore list, but exist in $3:',
'variables' => '$1 message(s) of $2 in $3 don\'t match the variables used in en:',
'plural' => '$1 message(s) of $2 in $3 don\'t use {{plural}} while en uses:',
'empty' => '$1 message(s) of $2 in $3 are empty or -:',
'whitespace' => '$1 message(s) of $2 in $3 have trailing whitespace:',
'xhtml' => '$1 message(s) of $2 in $3 contain illegal XHTML:',
- 'chars' => '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:',
+ 'chars' =>
+ '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:',
'links' => '$1 message(s) of $2 in $3 have problematic link(s):',
'unbalanced' => '$1 message(s) of $2 in $3 have unbalanced {[]}:',
'namespace' => '$1 namespace name(s) of $2 are not translated to $3, but exist in en:',
- 'projecttalk' => '$1 namespace name(s) and alias(es) in $3 are project talk namespaces without the parameter:',
+ 'projecttalk' =>
+ '$1 namespace name(s) and alias(es) in $3 are project talk namespaces without the parameter:',
'magic' => '$1 magic word(s) of $2 are not translated to $3, but exist in en:',
'magic-old' => '$1 magic word(s) of $2 do not exist in en, but exist in $3:',
'magic-over' => '$1 magic word(s) of $2 in $3 do not contain the original en word(s):',
- 'magic-case' => '$1 magic word(s) of $2 in $3 change the case-sensitivity of the original en word:',
+ 'magic-case' =>
+ '$1 magic word(s) of $2 in $3 change the case-sensitivity of the original en word:',
'special' => '$1 special page alias(es) of $2 are not translated to $3, but exist in en:',
'special-old' => '$1 special page alias(es) of $2 do not exist in en, but exist in $3:',
);
--all: Check all customized languages.
--level: Show the following display level (default: 2):
* 0: Skip the checks (useful for checking syntax).
- * 1: Show only the stub headers and number of wrong messages, without list of messages.
- * 2: Show only the headers and the message keys, without the message values.
- * 3: Show both the headers and the complete messages, with both keys and values.
+ * 1: Show only the stub headers and number of wrong messages, without
+ list of messages.
+ * 2: Show only the headers and the message keys, without the message
+ values.
+ * 3: Show both the headers and the complete messages, with both keys and
+ values.
--links: Link the message values (default off).
--prefix: prefix to add to links.
- --wikilang: For the links, what is the content language of the wiki to display the output in (default en).
- --noexif: Do not check for Exif messages (a bit hard and boring to translate), if you know
- that they are currently not translated and want to focus on other problems (default off).
+ --wikilang: For the links, what is the content language of the wiki to
+ display the output in (default en).
+ --noexif: Do not check for Exif messages (a bit hard and boring to
+ translate), if you know what they are currently not translated and want
+ to focus on other problems (default off).
--whitelist: Do only the following checks (form: code,code).
--blacklist: Do not do the following checks (form: code,code).
- --easy: Do only the easy checks, which can be treated by non-speakers of the language.
-
-Check codes (ideally, all of them should result 0; all the checks are executed by default (except language-specific check blacklists in checkLanguage.inc):
- * untranslated: Messages which are required to translate, but are not translated.
- * duplicate: Messages which translation equal to fallback
- * obsolete: Messages which are untranslatable or do not exist, but are translated.
- * variables: Messages without variables which should be used, or with variables which should not be used.
+ --easy: Do only the easy checks, which can be treated by non-speakers of
+ the language.
+
+Check codes (ideally, all of them should result 0; all the checks are executed
+by default (except language-specific check blacklists in checkLanguage.inc):
+ * untranslated: Messages which are required to translate, but are not
+ translated.
+ * duplicate: Messages which translation equal to fallback.
+ * obsolete: Messages which are untranslatable or do not exist, but are
+ translated.
+ * variables: Messages without variables which should be used, or with
+ variables which should not be used.
* empty: Empty messages and messages that contain only -.
* whitespace: Messages which have trailing whitespace.
- * xhtml: Messages which are not well-formed XHTML (checks only few common errors).
+ * xhtml: Messages which are not well-formed XHTML (checks only few common
+ errors).
* chars: Messages with hidden characters.
* links: Messages which contains broken links to pages (does not find all).
- * unbalanced: Messages which contains unequal numbers of opening {[ and closing ]}.
+ * unbalanced: Messages which contains unequal numbers of opening {[ and
+ closing ]}.
* namespace: Namespace names that were not translated.
- * projecttalk: Namespace names and aliases where the project talk does not contain $1.
+ * projecttalk: Namespace names and aliases where the project talk does not
+ contain $1.
* magic: Magic words that were not translated.
* magic-old: Magic words which do not exist.
* magic-over: Magic words that override the original English word.
- * magic-case: Magic words whose translation changes the case-sensitivity of the original English word.
+ * magic-case: Magic words whose translation changes the case-sensitivity of
+ the original English word.
* special: Special page names that were not translated.
* special-old: Special page names which do not exist.
return $blacklist;
}
+ // @codingStandardsIgnoreStart Ignore that globals should have a "wg" prefix.
global $checkBlacklist;
+ // @codingStandardsIgnoreEnd
$blacklist = $checkBlacklist;
*/
function outputWiki() {
$detailText = '';
- $rows[] = '! Language !! Code !! Total !! ' . implode( ' !! ', array_diff( $this->checks, $this->nonMessageChecks() ) );
+ $rows[] = '! Language !! Code !! Total !! ' .
+ implode( ' !! ', array_diff( $this->checks, $this->nonMessageChecks() ) );
foreach ( $this->results as $code => $results ) {
$detailTextForLang = "==$code==\n";
$numbers = array();
$tableRows = implode( "\n|-\n", $rows );
$version = SpecialVersion::getVersion( 'nodb' );
+ // @codingStandardsIgnoreStart Long line.
echo <<<EOL
'''Check results are for:''' <code>$version</code>
$detailText
EOL;
+ // @codingStandardsIgnoreEnd
}
/**
if ( $extension == 'all' ) {
foreach ( MessageGroups::singleton()->getGroups() as $group ) {
if ( strpos( $group->getId(), 'ext-' ) === 0 && !$group->isMeta() ) {
- $this->extensions[] = new extensionLanguages( $group );
+ $this->extensions[] = new ExtensionLanguages( $group );
}
}
} elseif ( $extension == 'wikimedia' ) {
$wikimedia = MessageGroups::getGroup( 'ext-0-wikimedia' );
foreach ( $wikimedia->wmfextensions() as $extension ) {
$group = MessageGroups::getGroup( $extension );
- $this->extensions[] = new extensionLanguages( $group );
+ $this->extensions[] = new ExtensionLanguages( $group );
}
} elseif ( $extension == 'flaggedrevs' ) {
foreach ( MessageGroups::singleton()->getGroups() as $group ) {
if ( strpos( $group->getId(), 'ext-flaggedrevs-' ) === 0 && !$group->isMeta() ) {
- $this->extensions[] = new extensionLanguages( $group );
+ $this->extensions[] = new ExtensionLanguages( $group );
}
}
} else {
foreach ( $extensions as $extension ) {
$group = MessageGroups::getGroup( 'ext-' . $extension );
if ( $group ) {
- $extension = new extensionLanguages( $group );
+ $extension = new ExtensionLanguages( $group );
$this->extensions[] = $extension;
} else {
print "No such extension $extension.\n";
*/
protected function help() {
return <<<ENDS
-Run this script to check the status of a specific language in extensions, or all of them.
-Command line settings are in form --parameter[=value], except for the first one.
+Run this script to check the status of a specific language in extensions, or
+all of them. Command line settings are in form --parameter[=value], except for
+the first one.
Parameters:
- * First parameter (mandatory): Extension name, multiple extension names (separated by commas), "all" for all the extensions, "wikimedia" for extensions used by Wikimedia or "flaggedrevs" for all FLaggedRevs extension messages.
+ * First parameter (mandatory): Extension name, multiple extension names
+ (separated by commas), "all" for all the extensions, "wikimedia" for
+ extensions used by Wikimedia or "flaggedrevs" for all FLaggedRevs
+ extension messages.
* lang: Language code (default: the installation default language).
* help: Show this help.
* level: Show the following display level (default: 2).
* links: Link the message values (default off).
- * wikilang: For the links, what is the content language of the wiki to display the output in (default en).
+ * wikilang: For the links, what is the content language of the wiki to
+ display the output in (default en).
* whitelist: Do only the following checks (form: code,code).
* blacklist: Do not perform the following checks (form: code,code).
- * easy: Do only the easy checks, which can be treated by non-speakers of the language.
-Check codes (ideally, all of them should result 0; all the checks are executed by default (except language-specific check blacklists in checkLanguage.inc):
- * untranslated: Messages which are required to translate, but are not translated.
- * duplicate: Messages which translation equal to fallback
+ * easy: Do only the easy checks, which can be treated by non-speakers of
+ the language.
+
+Check codes (ideally, all of them should result 0; all the checks are executed
+by default (except language-specific check blacklists in checkLanguage.inc):
+ * untranslated: Messages which are required to translate, but are not
+ translated.
+ * duplicate: Messages which translation equal to fallback.
* obsolete: Messages which are untranslatable, but translated.
- * variables: Messages without variables which should be used, or with variables which should not be used.
+ * variables: Messages without variables which should be used, or with
+ variables which should not be used.
* empty: Empty messages.
* whitespace: Messages which have trailing whitespace.
- * xhtml: Messages which are not well-formed XHTML (checks only few common errors).
+ * xhtml: Messages which are not well-formed XHTML (checks only few common
+ errors).
* chars: Messages with hidden characters.
* links: Messages which contains broken links to pages (does not find all).
- * unbalanced: Messages which contains unequal numbers of opening {[ and closing ]}.
+ * unbalanced: Messages which contains unequal numbers of opening {[ and
+ closing ]}.
+
Display levels (default: 2):
* 0: Skip the checks (useful for checking syntax).
- * 1: Show only the stub headers and number of wrong messages, without list of messages.
- * 2: Show only the headers and the message keys, without the message values.
- * 3: Show both the headers and the complete messages, with both keys and values.
+ * 1: Show only the stub headers and number of wrong messages, without list
+ of messages.
+ * 2: Show only the headers and the message keys, without the message
+ values.
+ * 3: Show both the headers and the complete messages, with both keys and
+ values.
ENDS;
}
if ( !$this->hasOption( 'unicode-data-file' ) ) {
$this->dataFile = 'UnicodeData.txt';
if ( !file_exists( $this->dataFile ) ) {
- $this->error( "Unable to find UnicodeData.txt. Please specify its location with --unicode-data-file=<FILE>" );
+ $this->error( "Unable to find UnicodeData.txt. Please specify " .
+ "its location with --unicode-data-file=<FILE>" );
exit( 1 );
}
} else {
$this->error( "You must compile PHP with --enable-memory-limit", true );
}
- $langtool = new languages();
+ $langtool = new Languages();
$memlast = $memstart = memory_get_usage();
$this->output( "Base memory usage: $memstart\n" );
/**
* @ingroup MaintenanceLanguage
*/
-class languages {
- protected $mLanguages; # List of languages
+class Languages {
+ /** @var array List of languages */
+ protected $mLanguages; #
- protected $mRawMessages; # Raw list of the messages in each language
- protected $mMessages; # Messages in each language (except for English), divided to groups
- protected $mFallback; # Fallback language in each language
- protected $mGeneralMessages; # General messages in English, divided to groups
- protected $mIgnoredMessages; # All the messages which should be exist only in the English file
- protected $mOptionalMessages; # All the messages which may be translated or not, depending on the language
+ /** @var array Raw list of the messages in each language */
+ protected $mRawMessages;
- protected $mNamespaceNames; # Namespace names
- protected $mNamespaceAliases; # Namespace aliases
- protected $mMagicWords; # Magic words
- protected $mSpecialPageAliases; # Special page aliases
+ /** @var array Messages in each language (except for English), divided to groups */
+ protected $mMessages;
+
+ /** @var array Fallback language in each language */
+ protected $mFallback;
+
+ /** @var array General messages in English, divided to groups */
+ protected $mGeneralMessages;
+
+ /** @var array All the messages which should be exist only in the English file */
+ protected $mIgnoredMessages;
+
+ /** @var array All the messages which may be translated or not, depending on the language */
+ protected $mOptionalMessages;
+
+ /** @var array Namespace names */
+ protected $mNamespaceNames;
+
+ /** @var array Namespace aliases */
+ protected $mNamespaceAliases;
+
+ /** @var array Magic words */
+ protected $mMagicWords;
+
+ /** @var array Special page aliases */
+ protected $mSpecialPageAliases;
/**
* Load the list of languages: all the Messages*.php
}
/**
- * Load the messages for a specific language (which is not English) and divide them to groups:
+ * Load the messages for a specific language (which is not English) and divide them to
+ * groups:
* all - all the messages.
* required - messages which should be translated in order to get a complete translation.
- * optional - messages which can be translated, the fallback translation is used if not translated.
- * obsolete - messages which should not be translated, either because they do not exist, or they are ignored messages.
- * translated - messages which are either required or optional, but translated from English and needed.
+ * optional - messages which can be translated, the fallback translation is used if not
+ * translated.
+ * obsolete - messages which should not be translated, either because they do not exist,
+ * or they are ignored messages.
+ * translated - messages which are either required or optional, but translated from
+ * English and needed.
*
* @param $code string The language code.
*/
/**
* Load the messages for English and divide them to groups:
* all - all the messages.
- * required - messages which should be translated to other languages in order to get a complete translation.
- * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+ * required - messages which should be translated to other languages in order to get a
+ * complete translation.
+ * optional - messages which can be translated to other languages, but it's not required
+ * for a complete translation.
* ignored - messages which should not be translated to other languages.
- * translatable - messages which are either required or optional, but can be translated from English.
+ * translatable - messages which are either required or optional, but can be translated
+ * from English.
*/
private function loadGeneralMessages() {
if ( isset( $this->mGeneralMessages ) ) {
* fallback language messages, divided to groups:
* all - all the messages.
* required - messages which should be translated in order to get a complete translation.
- * optional - messages which can be translated, the fallback translation is used if not translated.
- * obsolete - messages which should not be translated, either because they do not exist, or they are ignored messages.
- * translated - messages which are either required or optional, but translated from English and needed.
+ * optional - messages which can be translated, the fallback translation is used if not
+ * translated.
+ * obsolete - messages which should not be translated, either because they do not exist,
+ * or they are ignored messages.
+ * translated - messages which are either required or optional, but translated from
+ * English and needed.
*
* @param $code string The language code.
*
/**
* Get all the general English messages, divided to groups:
* all - all the messages.
- * required - messages which should be translated to other languages in order to get a complete translation.
- * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+ * required - messages which should be translated to other languages in
+ * order to get a complete translation.
+ * optional - messages which can be translated to other languages, but it's
+ * not required for a complete translation.
* ignored - messages which should not be translated to other languages.
- * translatable - messages which are either required or optional, but can be translated from English.
+ * translatable - messages which are either required or optional, but can be
+ * translated from English.
*
* @return array The general English messages.
*/
$this->loadMessages( $code );
$messagesWithoutPlural = array();
foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
- if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false && stripos( $value, '{{plural:' ) === false ) {
+ if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false &&
+ stripos( $value, '{{plural:' ) === false
+ ) {
$messagesWithoutPlural[$key] = $value;
}
}
foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
$matches = array();
preg_match_all( "/\[\[([{$tc}]+)(?:\\|(.+?))?]]/sDu", $value, $matches );
- for ( $i = 0; $i < count( $matches[0] ); $i++ ) {
+ $numMatches = count( $matches[0] );
+ for ( $i = 0; $i < $numMatches; $i++ ) {
if ( preg_match( "/.*project.*/isDu", $matches[1][$i] ) ) {
$messages[$key][] = $matches[0][$i];
}
}
}
-class extensionLanguages extends languages {
-
+class ExtensionLanguages extends Languages {
/**
* @var MessageGroup
*/
'edithelppage',
'autocomment-prefix',
'move-redirect-text',
+ 'interlanguage-link-title-langonly',
);
/** Optional messages, which may be translated only if changed in the target language. */
'percent',
'parentheses',
'brackets',
- 'quotation-marks',
'listgrouprights-right-display',
'listgrouprights-right-revoked',
'timezone-utc',
'limitreport-ppgeneratednodes-value',
'limitreport-expansiondepth-value',
'limitreport-expensivefunctioncount-value',
- 'tooltip-iwiki',
+ 'interlanguage-link-title',
);
/** Exif messages, which may be set as optional in several checks, but are generally mandatory */
'backlinksubtitle',
'retrievedfrom',
'youhavenewmessages',
- 'newmessageslink',
- 'newmessagesdifflink',
'youhavenewmessagesfromusers',
'youhavenewmessagesmanyusers',
'newmessageslinkplural',
'invalidtitle-unknownnamespace',
'exception-nologin',
'exception-nologin-text',
+ 'exception-nologin-text-manual',
),
'virus' => array(
'virus-badscanner',
'preferences-summary',
'mypreferences',
'prefs-edits',
- 'prefsnologin',
- 'prefsnologintext',
+ 'prefsnologintext2',
'changepassword',
'changepassword-summary',
'prefs-skin',
'recentchanges-label-minor',
'recentchanges-label-bot',
'recentchanges-label-unpatrolled',
+ 'recentchanges-label-plusminus',
+ 'recentchanges-legend-newpage',
+ 'recentchanges-legend-plusminus',
'rcnote',
'rcnotefrom',
'rclistfrom',
'tooltip-preferences-save',
'tooltip-summary',
'interlanguage-link-title',
+ 'interlanguage-link-title-langonly',
),
'stylesheets' => array(
'common.css',
'special-specialpages' => array(
'specialpages',
'specialpages-summary',
+ 'specialpages-note-top',
'specialpages-note',
'specialpages-group-maintenance',
'specialpages-group-other',
'limitreport-expensivefunctioncount',
'limitreport-expensivefunctioncount-value',
),
+ 'expandtemplates' => array(
+ 'expandtemplates',
+ 'expand_templates_intro',
+ 'expand_templates_title',
+ 'expand_templates_input',
+ 'expand_templates_output',
+ 'expand_templates_xml_output',
+ 'expand_templates_ok',
+ 'expand_templates_remove_comments',
+ 'expand_templates_remove_nowiki',
+ 'expand_templates_generate_xml',
+ 'expand_templates_preview',
+ ),
);
/** Comments for each block */
'cologneblue' => 'Cologne Blue skin',
'vector' => 'Vector skin',
'miscellaneous2' => '',
- 'links' => '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).',
+ 'links' => '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).',
'badaccess' => '',
'versionrequired' => '',
'miscellaneous3' => '',
'uploadstash' => 'Special:UploadStash',
'img-auth' => 'img_auth script messages',
'http-errors' => 'HTTP errors',
- 'upload-curl-errors' => 'Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
+ 'upload-curl-errors' => 'Some likely curl errors. More could be added from ' .
+ '<http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
'licenses' => '',
'filelist' => 'Special:ListFiles',
'filedescription' => 'File description page',
'imagedeletion' => 'Image deletion',
'browsediffs' => 'Browsing diffs',
'newfiles' => 'Special:NewFiles',
- 'video-info' => 'Video information, used by Language::formatTimePeriod() to format lengths in the above messages',
+ 'video-info' => 'Video information, used by Language::formatTimePeriod() to ' .
+ 'format lengths in the above messages',
'human-timestamps' => 'Human-readable timestamps',
'badimagelist' => 'Bad image list',
'variantname-zh' => "Short names for language variants used for language conversion links.
'cachedspecial' => 'SpecialCachedPage',
'rotation' => 'Image rotation',
'limitreport' => 'Limit report',
+ 'expandtemplates' => 'Special:ExpandTemplates'
);
* @param $dupeMsgSource string The source file intended to remove from the array.
* @param $messagesFolder String: path to a folder to store the MediaWiki messages.
*/
-function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource, $messagesFolder ) {
+function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown,
+ $removeDupes, $dupeMsgSource, $messagesFolder
+) {
$messages = $languages->getMessages( $code );
$messages = $messages['all'];
if ( $removeDupes ) {
$messages = removeDupes( $messages, $dupeMsgSource );
}
- MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder );
+ MessageWriter::writeMessagesToFile(
+ $messages,
+ $code,
+ $write,
+ $listUnknown,
+ $removeUnknown,
+ $messagesFolder
+ );
}
/**
# Show help
if ( isset( $options['help'] ) ) {
echo <<<TEXT
-Run this script to rewrite the messages array in the files languages/messages/MessagesXX.php.
+Run this script to rewrite the messages array in the files
+languages/messages/MessagesXX.php.
Parameters:
- * lang: Language code (default: the installation default language). You can also specify "all" to check all the languages.
+ * lang: Language code (default: the installation default language).
+ You can also specify "all" to check all the languages.
* help: Show this help.
Options:
* dry-run: Do not write the array to the file.
$messagesFolder = isset( $options['messages-folder'] ) ? $options['messages-folder'] : false;
# Get language objects
-$languages = new languages();
+$languages = new Languages();
# Write all the language
if ( $wgCode == 'all' ) {
foreach ( $languages->getLanguages() as $languageCode ) {
- rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
+ rebuildLanguage(
+ $languages,
+ $languageCode,
+ $wgWriteToFile,
+ $wgListUnknownMessages,
+ $wgRemoveUnknownMessages,
+ $wgRemoveDuplicateMessages,
+ $wgDupeMessageSource,
+ $messagesFolder
+ );
}
} else {
- rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
+ rebuildLanguage(
+ $languages,
+ $wgCode,
+ $wgWriteToFile,
+ $wgListUnknownMessages,
+ $wgRemoveUnknownMessages,
+ $wgRemoveDuplicateMessages,
+ $wgDupeMessageSource,
+ $messagesFolder
+ );
}
# Select an output engine
switch ( $options['output'] ) {
case 'wiki':
- $output = new wikiStatsOutput();
+ $output = new WikiStatsOutput();
break;
case 'text':
- $output = new textStatsOutput();
+ $output = new TextStatsOutput();
break;
case 'csv':
- $output = new csvStatsOutput();
+ $output = new CsvStatsOutput();
break;
default:
showUsage();
}
# Languages
-$wgLanguages = new languages();
+$wgLanguages = new Languages();
# Header
$output->heading();
$messages = $wgLanguages->getMessages( $code );
$messagesNumber = count( $messages['translated'] );
$requiredMessagesNumber = count( $messages['required'] );
- $requiredMessagesPercent = $output->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
+ $requiredMessagesPercent = $output->formatPercent(
+ $requiredMessagesNumber,
+ $wgRequiredMessagesNumber
+ );
$obsoleteMessagesNumber = count( $messages['obsolete'] );
- $obsoleteMessagesPercent = $output->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
+ $obsoleteMessagesPercent = $output->formatPercent(
+ $obsoleteMessagesNumber,
+ $messagesNumber,
+ true
+ );
$messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
$emptyMessages = $wgLanguages->getEmptyMessages( $code );
$messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
$nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
$messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
- $problematicMessagesNumber = count( array_unique( array_merge( $messagesWithMismatchVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
- $problematicMessagesPercent = $output->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
+ $problematicMessagesNumber = count( array_unique( array_merge(
+ $messagesWithMismatchVariables,
+ $emptyMessages,
+ $messagesWithWhitespace,
+ $nonXHTMLMessages,
+ $messagesWithWrongChars
+ ) ) );
+ $problematicMessagesPercent = $output->formatPercent(
+ $problematicMessagesNumber,
+ $messagesNumber,
+ true
+ );
# Output them
$output->blockstart();
* @ingroup MaintenanceLanguage
*/
class MessageWriter {
- static $optionalComment = 'only translate this message to other languages if you have to change it';
- static $ignoredComment = "do not translate or duplicate this message to other languages";
+ protected static $optionalComment =
+ 'only translate this message to other languages if you have to change it';
+ protected static $ignoredComment = "do not translate or duplicate this message to other languages";
- static $messageStructure;
- static $blockComments;
- static $ignoredMessages;
- static $optionalMessages;
+ protected static $messageStructure;
+ protected static $blockComments;
+ protected static $ignoredMessages;
+ protected static $optionalMessages;
/**
* Write a messages array as a PHP text and write it to the messages file.
* @param $write Boolean: write to the messages file?
* @param $listUnknown Boolean: list the unknown messages?
* @param $removeUnknown Boolean: whether to remove unkown messages
- * @param $messagesFolder String: path to a folder to store the MediaWiki messages. Defaults to the current install.
+ * @param $messagesFolder String: path to a folder to store the MediaWiki messages.
+ * Defaults to the current install.
*/
- public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder = false ) {
+ public static function writeMessagesToFile( $messages, $code, $write, $listUnknown,
+ $removeUnknown, $messagesFolder = false
+ ) {
# Rewrite the messages array
$messages = self::writeMessagesArray( $messages, $code == 'en', false, $removeUnknown );
$messagesText = $messages[0];
file_put_contents( $filename, $new );
echo "Generated and wrote messages for language $code.\n";
} else {
- echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n";
+ echo "Generated messages for language $code.\n" .
+ "Please run the script again (without the parameter \"dry-run\") " .
+ "to write the array to the file.\n";
}
}
- if ( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
+ if ( $listUnknown && isset( $sortedMessages['unknown'] ) &&
+ !empty( $sortedMessages['unknown'] )
+ ) {
if ( $removeUnknown ) {
- echo "\nThe following " . count( $sortedMessages['unknown'] ) . " unknown messages have been removed:\n";
+ echo "\nThe following " . count( $sortedMessages['unknown'] ) .
+ " unknown messages have been removed:\n";
} else {
- echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n";
+ echo "\nThere are " . count( $sortedMessages['unknown'] ) .
+ " unknown messages, please check them:\n";
}
foreach ( $sortedMessages['unknown'] as $key => $value ) {
echo "* " . $key . "\n";
*
* @return Array of the PHP text and the sorted messages array.
*/
- public static function writeMessagesArray( $messages, $ignoredComments = false, $prefix = false, $removeUnknown = false ) {
+ public static function writeMessagesArray( $messages, $ignoredComments = false,
+ $prefix = false, $removeUnknown = false
+ ) {
# Load messages
$dir = $prefix ? $prefix : __DIR__;
if ( strpos( $value, $single ) === false ) {
# Nothing ugly, just use '
$blockText .= $single . $value . $single;
- } elseif ( strpos( $value, $double ) === false && !preg_match( '/\$[a-zA-Z_\x7f-\xff]/', $value ) ) {
+ } elseif ( strpos( $value, $double ) === false &&
+ !preg_match( '/\$[a-zA-Z_\x7f-\xff]/', $value )
+ ) {
# No "-quotes, no variables that need quoting, use "
$blockText .= $double . $value . $double;
} else {
# Something needs quoting, pick the quote which causes less quoting
- $quote = substr_count( $value, $double ) + substr_count( $value, '$' ) >= substr_count( $value, $single ) ? $single : $double;
+
+ if ( substr_count( $value, $double ) + substr_count( $value, '$' ) >=
+ substr_count( $value, $single )
+ ) {
+ $quote = $single;
+ } else {
+ $quote = $double;
+ }
+
if ( $quote === $double ) {
$extra = '$';
} else {
$socketArray->addSocket( $this->sock ); // add listening socket
do {
list( $read, $write ) = $socketArray->socketsForSelect();
- if ( socket_select( $read, $write, $except = NULL, NULL ) < 1 ) {
+ if ( socket_select( $read, $write, $except = null, null ) < 1 ) {
continue; // wait
}
// Check if there is a client trying to connect...
*
* @ingroup Maintenance
*/
-class mcTest extends Maintenance {
+class McTest extends Maintenance {
public function __construct() {
parent::__construct();
$this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
}
}
-$maintClass = "mcTest";
+$maintClass = "McTest";
require_once RUN_MAINTENANCE_IF_MAIN;
fwrite( STDERR, "Loading data from $fileName\n" );
}
// Include the extension to update $wgExtensionMessagesFiles
- if ( !( include_once( $fileName ) ) ) {
+ if ( !( include_once $fileName ) ) {
fwrite( STDERR, "Unable to read $fileName\n" );
exit( 1 );
}
* @ingroup Maintenance
* @author Tim Starling
*
- * USAGE: php moveBatch.php [-u <user>] [-r <reason>] [-i <interval>] [listfile]
+ * USAGE: php moveBatch.php [-u <user>] [-r <reason>] [-i <interval>] [-noredirects] [listfile]
*
* [listfile] - file with two titles per line, separated with pipe characters;
* the first title is the source, the second is the destination.
* <user> - username to perform moves as
* <reason> - reason to be given for moves
* <interval> - number of seconds to sleep after each move
+ * <noredirects> - suppress creation of redirects
*
* This will print out error codes from Title::moveTo() if something goes wrong,
* e.g. immobile_namespace for namespaces which can't be moved
$this->addOption( 'u', "User to perform move", false, true );
$this->addOption( 'r', "Reason to move page", false, true );
$this->addOption( 'i', "Interval to sleep between moves" );
+ $this->addOption( 'noredirects', "Suppress creation of redirects" );
$this->addArg( 'listfile', 'List of pages to move, newline delimited', false );
}
$user = $this->getOption( 'u', 'Move page script' );
$reason = $this->getOption( 'r', '' );
$interval = $this->getOption( 'i', 0 );
+ $noredirects = $this->getOption( 'noredirects', false );
if ( $this->hasArg() ) {
$file = fopen( $this->getArg(), 'r' );
} else {
continue;
}
-
$this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
$dbw->begin( __METHOD__ );
- $err = $source->moveTo( $dest, false, $reason );
+ $err = $source->moveTo( $dest, false, $reason, !$noredirects );
if ( $err !== true ) {
$msg = array_shift( $err[0] );
$this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
--- Used for storing page restrictions (i.e. protection levels)
CREATE TABLE /*$wgDBprefix*/page_restrictions (
+ pr_id INT UNIQUE IDENTITY,
pr_page INT NOT NULL REFERENCES /*$wgDBprefix*/page(page_id) ON DELETE CASCADE,
pr_type NVARCHAR(200) NOT NULL,
pr_level NVARCHAR(200) NOT NULL,
pr_cascade SMALLINT NOT NULL,
pr_user INT NULL,
pr_expiry DATETIME NULL,
- pr_id INT UNIQUE IDENTITY,
CONSTRAINT /*$wgDBprefix*/pr_pagetype PRIMARY KEY(pr_page,pr_type),
);
CREATE INDEX /*$wgDBprefix*/pr_page ON /*$wgDBprefix*/page_restrictions(pr_page);
*
* @ingroup Maintenance
*/
-class nextJobDB extends Maintenance {
+class NextJobDB extends Maintenance {
public function __construct() {
parent::__construct();
$this->mDescription = "Pick a database that has pending jobs";
}
}
-$maintClass = "nextJobDb";
+$maintClass = "NextJobDb";
require_once RUN_MAINTENANCE_IF_MAIN;
mr_lang varchar2(32) NOT NULL,
mr_blob BLOB NOT NULL,
mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL
-) ;
+);
CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang);
ALTER TABLE &mw_prefix.oldimage MODIFY oi_name DEFAULT 0;
mr_lang varchar2(32) NOT NULL,
mr_blob BLOB NOT NULL,
mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL
-) ;
+);
CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang);
CREATE TABLE &mw_prefix.msg_resource_links (
#!/usr/bin/perl
## Convert data from a MySQL mediawiki database into a Postgres mediawiki database
-## svn: $Id$
## NOTE: It is probably easier to dump your wiki using maintenance/dumpBackup.php
## and then import it with maintenance/importDump.php
print qq{
-- Dump of MySQL Mediawiki tables for import into a Postgres Mediawiki schema
-- Performed by the program: $0
--- Version: $VERSION (subversion }.q{$LastChangedRevision$}.qq{)
+-- Version: $VERSION
-- Author: Greg Sabino Mullane <greg\@turnstep.com> Comments welcome
--
-- This file was created: $now
implode( ',', array_keys( self::$typeMappings ) ) . ',all)', false, true );
$this->addOption( 'htcp-dest', 'HTCP announcement destination (IP:port)', false, true );
$this->addOption( 'dry-run', 'Do not send purge requests' );
+ $this->addOption( 'sleep-per-batch', 'Milliseconds to sleep between batches', false, true );
$this->addOption( 'verbose', 'Show more output', false, false, 'v' );
+ $this->setBatchSize( 100 );
}
public function execute() {
$this->mOptions['verbose'] = 1;
}
- $this->verbose( 'Purging files that were: ' . implode( ', ', $typeList ) . "\n");
+ $this->verbose( 'Purging files that were: ' . implode( ', ', $typeList ) . "\n" );
foreach ( $typeList as $type ) {
$this->verbose( "Checking for {$type} files...\n" );
$this->purgeFromLogType( $type );
__METHOD__
);
+ $bSize = 0;
foreach ( $res as $row ) {
$file = $repo->newFile( Title::makeTitle( NS_FILE, $row->log_title ) );
// Purge items from fileachive table (rows are likely here)
$this->purgeFromArchiveTable( $repo, $file );
- } else if ( $logType === 'move' ) {
+ } elseif ( $logType === 'move' ) {
// Purge the target file as well
$params = unserialize( $row->log_params );
}
$this->verbose( "Purged file {$row->log_title}; {$type} @{$row->log_timestamp}.\n" );
+
+ if ( $this->hasOption( 'sleep-per-batch' ) && ++$bSize > $this->mBatchSize ) {
+ $bSize = 0;
+ // sleep-per-batch is milliseconds, usleep wants micro seconds.
+ usleep( 1000 * (int)$this->getOption( 'sleep-per-batch' ) );
+ }
}
}
}
$user->load();
return $user;
}
-
-
}
$maintClass = "ReassignEdits";
if ( $this->hasOption( 'outdir' ) ) {
$conf['storeDirectory'] = $this->getOption( 'outdir' );
}
- $lc = new LocalisationCache_BulkLoad( $conf );
+ $lc = new LocalisationCacheBulkLoad( $conf );
$allCodes = array_keys( Language::fetchLanguageNames( null, 'mwfile' ) );
if ( $this->hasOption( 'lang' ) ) {
* Helper function to rebuild list of languages codes. Prints the code
* for each language which is rebuilt.
* @param $codes array List of language codes to rebuild.
- * @param $lc LocalisationCache Instance of LocalisationCache_BulkLoad (?)
+ * @param $lc LocalisationCache Instance of LocalisationCacheBulkLoad (?)
* @param $force bool Rebuild up-to-date languages
* @return int Number of rebuilt languages
*/
$dbw->insertSelect( 'recentchanges', array( 'page', 'revision' ),
array(
'rc_timestamp' => 'rev_timestamp',
- 'rc_cur_time' => 'rev_timestamp',
'rc_user' => 'rev_user',
'rc_user_text' => 'rev_user_text',
'rc_namespace' => 'page_namespace',
$dbw->insertSelect( 'recentchanges', array( 'user', "$logging LEFT JOIN $page ON (log_namespace=page_namespace AND log_title=page_title)" ),
array(
'rc_timestamp' => 'log_timestamp',
- 'rc_cur_time' => 'log_timestamp',
'rc_user' => 'log_user',
'rc_user_text' => 'user_name',
'rc_namespace' => 'log_namespace',
}
}
-
$maintClass = 'RefreshImageMetadata';
require_once RUN_MAINTENANCE_IF_MAIN;
}
}
-
$maintClass = "BatchedQueryRunner";
require_once RUN_MAINTENANCE_IF_MAIN;
$this->output( sprintf( "without session: %-10d %6.2f%%\n", $noSession, $noSession / $total * 100 ) );
$this->output( sprintf( "total: %-10d %6.2f%%\n", $total, 100 ) );
-
$this->output( "\nParser cache\n" );
$hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_hit' ) ) );
$expired = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_expired' ) ) );
CREATE TABLE /*_*/page_restrictions_tmp (
+ pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
pr_page int NOT NULL,
pr_type varbinary(60) NOT NULL,
pr_level varbinary(60) NOT NULL,
pr_cascade tinyint NOT NULL,
pr_user int NULL,
- pr_expiry varbinary(14) NULL,
- pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+ pr_expiry varbinary(14) NULL
);
CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions_tmp (pr_page,pr_type);
$cs->check( $fix, $xml );
}
-
// ----------------------------------------------------------------------------------
/**
}
}
-
function error( $type, $msg, $ids ) {
if ( is_array( $ids ) && count( $ids ) == 1 ) {
$ids = reset( $ids );
}
$type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
-
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select(
array( 'page', 'revision', 'text' ),
require __DIR__ . '/../commandLine.inc';
-
if ( count( $args ) < 1 ) {
echo "Usage: php trackBlobs.php <cluster> [... <cluster>]\n";
echo "Adds blobs from a given ES cluster to the blob_tracking table\n";
rc_timestamp varbinary(14) NOT NULL default '',
-- This is no longer used
+ -- Field kept in database for downgrades
+ -- @todo: add drop patch with 1.24
rc_cur_time varbinary(14) NOT NULL default '',
-- As in revision
-- Used for storing page restrictions (i.e. protection levels)
CREATE TABLE /*_*/page_restrictions (
+ -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
+ pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- Page to apply restrictions to (Foreign Key to page).
pr_page int NOT NULL,
-- The protection type (edit, move, etc)
-- Field for future support of per-user restriction.
pr_user int NULL,
-- Field for time-limited protection.
- pr_expiry varbinary(14) NULL,
- -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
- pr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT
+ pr_expiry varbinary(14) NULL
) /*$wgDBTableOptions*/;
CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
-- Holds all the sites known to the wiki.
CREATE TABLE /*_*/sites (
--- Numeric id of the site
+ -- Numeric id of the site
site_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- Global identifier for the site, ie 'enwiktionary'
$time2 = new MWTimestamp();
$this->output( "\nDone.\n" );
- $this->output( "\nThe job took ". $time2->diff( $time1 )->format( "%i:%S" ). "\n" );
+ $this->output( "\nThe job took " . $time2->diff( $time1 )->format( "%i:%S" ) . "\n" );
}
function afterFinalSetup() {
# cache from $wgExtensionFunctions (bug 20471)
$wgLocalisationCacheConf = array(
'class' => 'LocalisationCache',
- 'storeClass' => 'LCStore_Null',
+ 'storeClass' => 'LCStoreNull',
'storeDirectory' => false,
'manualRecache' => false,
);
/**
* @ingroup Maintenance
*/
-class userOptions {
+class UserOptions {
public $mQuick;
public $mQuiet;
public $mDry;
/** Constructor. Will show usage and exit if script options are not correct */
function __construct( $opts, $args ) {
if ( !$this->checkOpts( $opts, $args ) ) {
- userOptions::showUsageAndExit();
+ UserOptions::showUsageAndExit();
} else {
$this->mReady = $this->initializeOpts( $opts, $args );
}
}
-
/**
* This is used to check options. Only needed on construction
*
}
}
-
/** Change our users options */
private function CHANGER() {
$this->warn();
require_once 'userOptions.inc';
// Load up our tool system, exit with usage() if options are not fine
-$uo = new userOptions( $options, $args );
+$uo = new UserOptions( $options, $args );
$uo->run();
'user.tokens',
),
),
- 'mediawiki.icon' => array(
- 'styles' => 'resources/mediawiki/mediawiki.icon.css',
- ),
'mediawiki.debug' => array(
'scripts' => 'resources/mediawiki/mediawiki.debug.js',
'styles' => 'resources/mediawiki/mediawiki.debug.css',
// must be loaded on the bottom
'position' => 'bottom',
),
- 'mediawiki.inspect' => array(
- 'scripts' => 'resources/mediawiki/mediawiki.inspect.js',
- 'dependencies' => array(
- 'jquery.byteLength',
- 'jquery.json',
- ),
- 'targets' => array( 'desktop', 'mobile' ),
- ),
'mediawiki.feedback' => array(
'scripts' => 'resources/mediawiki/mediawiki.feedback.js',
'styles' => 'resources/mediawiki/mediawiki.feedback.css',
),
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.hlist' => array(
+ 'styles' => 'resources/mediawiki/mediawiki.hlist.css',
+ 'scripts' => 'resources/mediawiki/mediawiki.hlist.js',
+ 'dependencies' => array(
+ 'jquery.client',
+ ),
+ ),
'mediawiki.htmlform' => array(
'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
'messages' => array( 'htmlform-chosen-placeholder' ),
),
+ 'mediawiki.icon' => array(
+ 'styles' => 'resources/mediawiki/mediawiki.icon.css',
+ ),
+ 'mediawiki.inspect' => array(
+ 'scripts' => 'resources/mediawiki/mediawiki.inspect.js',
+ 'dependencies' => array(
+ 'jquery.byteLength',
+ 'jquery.json',
+ ),
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
'mediawiki.notification' => array(
'styles' => 'resources/mediawiki/mediawiki.notification.css',
'scripts' => 'resources/mediawiki/mediawiki.notification.js',
),
'mediawiki.ui' => array(
'skinStyles' => array(
- 'default' => 'resources/mediawiki.ui/mediawiki.ui.default.css',
- 'vector' => 'resources/mediawiki.ui/mediawiki.ui.vector.css',
+ 'default' => 'resources/mediawiki.ui/default.less',
+ 'vector' => 'resources/mediawiki.ui/vector.less',
),
'position' => 'top',
),
float: right;
}
+/* collapse links in captions should be inline */
+caption .mw-collapsible-toggle {
+ float: none;
+}
+
/* list-items go as wide as their parent element, don't float them inside list items */
li .mw-collapsible-toggle {
float: none;
if ( !options.plainMode && $collapsible.is( 'table' ) ) {
// Tables
- $containers = $collapsible.find( '> tbody > tr' );
+ // If there is a caption, hide all rows; otherwise, only hide body rows
+ if ( $collapsible.find( '> caption' ).length ) {
+ $containers = $collapsible.find( '> * > tr' );
+ } else {
+ $containers = $collapsible.find( '> tbody > tr' );
+ }
if ( $defaultToggle ) {
// Exclude table row containing togglelink
$containers = $containers.not( $defaultToggle.closest( 'tr' ) );
}
return this.each( function () {
- var $collapsible, collapseText, expandText, $toggle, actionHandler, buildDefaultToggleLink,
+ var $collapsible, collapseText, expandText, $caption, $toggle, actionHandler, buildDefaultToggleLink,
premadeToggleHandler, $toggleLink, $firstItem, collapsibleId, $customTogglers, firstval;
// Ensure class "mw-collapsible" is present in case .makeCollapsible()
// contents and add the toggle link. Different 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 ) {
- $toggleLink = buildDefaultToggleLink().prependTo( $firstItem.eq( -1 ) );
+ // If the table has a caption, collapse to the caption
+ // as opposed to the first row
+ $caption = $collapsible.find( '> caption' );
+ if ( $caption.length ) {
+ $toggle = $caption.find( '> .mw-collapsible-toggle' );
+
+ // If there is no toggle link, add it to the end of the caption
+ if ( !$toggle.length ) {
+ $toggleLink = buildDefaultToggleLink().appendTo( $caption );
+ } else {
+ actionHandler = premadeToggleHandler;
+ $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
+ }
} else {
- actionHandler = premadeToggleHandler;
- $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
+ // 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 ) {
+ $toggleLink = buildDefaultToggleLink().prependTo( $firstItem.eq( -1 ) );
+ } else {
+ actionHandler = premadeToggleHandler;
+ $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
+ }
}
} else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
* @author Trevor Parscal <tparscal@wikimedia.org>, 2012
* @author Krinkle <krinklemail@gmail.com>, 2012
* @version 0.2.0
- * @license GPL v2
+ * @license MIT
*/
( function ( $ ) {
};
// Legacy (for compatibility with the code previously in skins/common.edit.js)
- window.addButton = toolbar.addButton;
- window.insertTags = toolbar.insertTags;
+ mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead' );
+ mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead' );
- // Explose API publicly
+ // Expose API publicly
mw.toolbar = toolbar;
$( function () {
var isValid = mw.util.validateEmail( mail ),
$label = $( '#mw-emailaddress-validity' );
+ // Set up the validity notice if it doesn't already exist
+ if ( $label.length === 0 ) {
+ $label = $( '<label for="wpNewEmail" id="mw-emailaddress-validity"></label>' )
+ .insertAfter( '#wpNewEmail' );
+ }
+
// We allow empty address
if ( isValid === null ) {
$label.text( '' ).removeClass( 'valid invalid' );
}
$( function () {
- // Lame tip to let user know if its email is valid. See bug 22449.
- // Only bind once for 'blur' so that the user can fill it in without errors;
- // after that, look at every keypress for immediate feedback.
- $( '#wpNewEmail' ).one( 'blur', function () {
- var $this = $( this );
- if ( $( '#mw-emailaddress-validity' ).length === 0 ) {
- $this.after( '<label for="wpNewEmail" id="mw-emailaddress-validity"></label>' );
- }
-
- updateMailValidityLabel( $this.val() );
- $this.keyup( function () {
+ $( '#wpNewEmail' )
+ // Lame tip to let user know if its email is valid. See bug 22449.
+ // Only bind once for 'blur' so that the user can fill it in without errors;
+ // after that, look at every keypress for immediate feedback.
+ .one( 'blur', function () {
+ var $this = $( this );
updateMailValidityLabel( $this.val() );
+ $this.keyup( function () {
+ updateMailValidityLabel( $this.val() );
+ } );
+ } )
+ // Supress built-in validation notice and just call updateMailValidityLabel(),
+ // to avoid double notice. See bug 40909.
+ .on( 'invalid', function ( e ) {
+ e.preventDefault();
+ updateMailValidityLabel( $( this ).val() );
} );
- } );
} );
}( mediaWiki, jQuery ) );
.mw-changeslist-line-watched .mw-title {
font-weight: bold;
}
+
+.mw-changeslist-legend {
+ float: right;
+ margin-left: 1em;
+ margin-bottom: 0.5em;
+ clear: right;
+ font-size: 85%;
+ line-height: 1.2em;
+ padding: 0.5em;
+ border: 1px solid #ddd;
+}
+
+.mw-changeslist-legend dt {
+ float: left;
+}
+
+.mw-changeslist-legend dd {
+ margin-left: 1.5em;
+ line-height: 1.3em;
+}
+
+.mw-changeslist-legend dd.mw-changeslist-legend-plusminus {
+ margin-left: 3.5em;
+}
.searchresult {
display: inline !ie;
}
-
-/** Add some extra padding keep browser's "clear field"
- UI from rubbing up against the side of the field */
-input[type="search"] {
- padding-right: 0.5em;
-}
--- /dev/null
+@import "../../settings/typography";
+@import "../../mixins/effects";
+
+@buttonBorderRadius: 3px;
+
+// Button styling
+.mw-ui-button {
+ // Container layout
+ display: inline-block;
+ padding: 0.4em 1em 0.4em 1em;
+ margin: 0;
+
+ // IE6/IE7 hack
+ // http://stackoverflow.com/a/5838575/365238
+ *display: inline;
+ zoom: 1;
+
+ // Container styling
+ .buttonColors();
+ border-radius: @buttonBorderRadius;
+
+ // Content styling
+ vertical-align: middle;
+
+ text-align: center;
+ text-decoration: none;
+
+ font-weight: bold;
+
+ // Interaction styling
+ cursor: pointer;
+
+ &:disabled,
+ &.mw-ui-disabled {
+ cursor: default;
+ }
+
+ // Button sizes and displays
+ // -----------------------------------------
+ &.mw-ui-big {
+ font-size: @baseFontSize * 1.3;
+ }
+ &.mw-ui-block {
+ display: block;
+ width: 100%;
+ }
+}
+
+// This overrides an underline declaration on a:hover and a:focus in commonElements.css, which the
+// class alone isn't specific enough to do
+a.mw-ui-button {
+ text-decoration: none;
+}
+
+// Button groups
+.mw-ui-button-group > * {
+ border-radius: 0;
+ float: left;
+
+ &:first-child{
+ border-top-left-radius: @buttonBorderRadius;
+ border-bottom-left-radius: @buttonBorderRadius;
+ }
+
+ &:last-child{
+ border-top-right-radius: @buttonBorderRadius;
+ border-bottom-right-radius: @buttonBorderRadius;
+ }
+}
--- /dev/null
+// Form elements and layouts
+
+@import "../../mixins/utilities";
+@import "../../mixins/forms";
+
+// --------------------------------------------------------------------------
+// Layouts
+// --------------------------------------------------------------------------
+
+// The FancyCaptcha image CAPTCHA used on WMF wikis drives the width of the
+// 'VForm' design, the form can't be narrower than this.
+@captchaContainerWidth: 290px;
+@defaultFormWidth: @captchaContainerWidth;
+
+// Style a compact vertical stacked form ("VForm") and the elements in divs
+// within it.
+.mw-ui-vform {
+ .box-sizing(border-box);
+
+ width: @defaultFormWidth;
+
+ // Immediate divs in a vform are block and spaced-out.
+ & > div {
+ display: block;
+ margin: 0 0 15px 0;
+ padding: 0;
+ width: 100%;
+
+ // MW currently doesn't use the type attribute everywhere on inputs.
+ input,
+ .mw-ui-button {
+ display: block;
+ .box-sizing(border-box);
+ margin: 0;
+ width: 100%;
+ }
+
+ // We exclude these because they'll generally use mw-ui-button.
+ // Otherwise, we'll unintentionally override that.
+ input:not([type=button]):not([type=submit]):not([type=file]), {
+ .agora-field-styling(); // mixins/forms.less
+ }
+
+ label {
+ display: block;
+ .box-sizing(border-box);
+ .agora-label-styling();
+ width: auto;
+ margin: 0 0 0.2em 0;
+ padding: 0;
+ }
+
+ // Override input styling just for checkboxes and radio inputs.
+ input[type="checkbox"],
+ input[type="radio"] {
+ display: inline;
+ .box-sizing(content-box);
+ width: auto;
+ }
+
+ }
+
+ // HTMLForm uses error, SpecialUserlogin (login and create account) uses
+ // errorbox.
+ // TODO move errorbox from mediawiki.special.vforms.css into here.
+ .error {
+ .box-sizing(border-box);
+ font-size: 0.9em;
+ margin: 0 0 1em 0;
+ padding: 0.5em;
+ color: #cc0000;
+ border: 1px solid #fac5c5;
+ background-color: #fae3e3;
+ text-shadow: 0 1px #fae3e3;
+ word-wrap: break-word;
+ }
+}
+
+// --------------------------------------------------------------------------
+// Elements
+// --------------------------------------------------------------------------
+
+// Apply this to individual elements to style them.
+// You generally don't need to use this class on divs within an Agora
+// form container such as mw-ui-vform
+// XXX DRY: This repeats earlier styling, use an @include agora-div-styling ?
+.mw-ui-vform-div {
+ display: block;
+ margin: 0 0 15px 0;
+ padding: 0;
+ width: 100%;
+}
+
+// Apply mw-ui-input to individual input fields to style them.
+// You generally don't need to use this class if <input> is within an Agora
+// form container such as mw-ui-vform
+.mw-ui-input {
+ .agora-field-styling(); // mixins/forms.less
+}
+
+// Apply mw-ui-label to individual elements to style them.
+// You generally don't need to use this class if <label> is within an Agora
+// form container such as mw-ui-vform
+.mw-ui-label {
+ .agora-label-styling(); // mixins/forms.less
+}
+
+// Nesting an input checkbox or radio button inside a label with this class
+// improves alignment, e.g.
+// <label class="mw-ui-checkbox-label">
+// <input type="checkbox">The label text
+// </label>
+.mw-ui-checkbox-label, .mw-ui-radio-label {
+ .agora-inline-label-styling();
+}
--- /dev/null
+// Generic helper classes that could be used in many elements/layouts
+
+// --------------------------------------------------------------------------
+// Positioning
+// --------------------------------------------------------------------------
+
+@import "../mixins/utilities";
+
+.mw-ui-flush-left {
+ .agora-flush-left();
+}
+
+.mw-ui-flush-right {
+ .agora-flush-right();
+}
+
+.mw-ui-center-block {
+ .agora-center-block();
+}
--- /dev/null
+@import "../default/buttons"; // Layer Vector on top of the default settings.
+@import "../../mixins/type";
+
+.mw-ui-button {
+ // Button colors determined by function.
+ // -----------------------------------------
+ &.mw-ui-primary {
+ .buttonColors(@agoraBlue);
+ }
+
+ &.mw-ui-constructive {
+ .buttonColors(@agoraGreen);
+ }
+
+ &.mw-ui-destructive {
+ .buttonColors(@agoraRed);
+ }
+
+ .vector-type();
+}
--- /dev/null
+// No default settings for containers yet.
+@import "../../mixins/type";
+
+.mw-ui-container {
+ .vector-type();
+}
--- /dev/null
+@import "../default/forms"; // Layer Vector on top of the default settings.
+@import "../../mixins/type";
+
+.mw-ui-vform,
+.mw-ui-vform > div input,
+.mw-ui-input {
+ .vector-type();
+}
--- /dev/null
+/**
+ * Provide Agora appearance for mw-ui-* classes when using a skin other than
+ * Vector.
+ */
+
+@import "components/utilities";
+@import "components/default/buttons";
+@import "components/default/forms";
+++ /dev/null
-@charset "UTF-8";
-/**
- * Provide Agora appearance for mw-ui-* classes when using a skin other than
- * Vector.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-/* _effects.scss */
-/* Mixins for visual effects in CSS3 */
-/* line 7, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-left {
- float: left;
- margin-left: 0;
- padding-left: 0;
-}
-
-/* line 11, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-right {
- float: right;
- margin-right: 0;
- padding-right: 0;
-}
-
-/* line 15, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-/* line 4, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button {
- display: -moz-inline-stack;
- display: inline-block;
- vertical-align: middle;
- *vertical-align: auto;
- zoom: 1;
- *display: inline;
- padding: 0.4em 1em 0.4em 1em;
- margin: 0;
- background-color: #c9c9c9;
- *background-color: #c9c9c9;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9));
- background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9);
- background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9);
- background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9);
- background-image: linear-gradient(top, #dcdcdc, #c9c9c9);
- color: black;
- text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3);
- border: 1px solid #c4c4c4;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- -ms-border-radius: 3px;
- -o-border-radius: 3px;
- border-radius: 3px;
- vertical-align: middle;
- text-align: center;
- text-decoration: none;
- font-weight: bold;
- cursor: pointer;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:hover, .mw-ui-button.mw-ui-hover {
- background-color: gainsboro;
- *background-color: gainsboro;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc));
- background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc);
- background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc);
- background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc);
- background-image: linear-gradient(top, #e9e9e9, #dcdcdc);
- text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:active, .mw-ui-button.mw-ui-active {
- background-image: none;
- background-color: #c1c1c1;
- text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
- background-image: none;
- background-color: #c9c9c9;
- opacity: 0.5;
- text-shadow: none;
-}
-/* line 30, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
- cursor: default;
-}
-/* line 36, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-big {
- font-size: 1.3em;
-}
-/* line 41, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-block {
- display: block;
- width: 100%;
-}
-
-/* line 49, sourcefiles/scss/components/default/_buttons.scss */
-a.mw-ui-button {
- text-decoration: none;
-}
-
-/* line 56, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > * {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- -ms-border-radius: 0;
- -o-border-radius: 0;
- border-radius: 0;
- float: left;
-}
-/* line 60, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:first-child {
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-left-radius: 3px;
- -moz-border-radius-bottomleft: 3px;
- -webkit-border-bottom-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-/* line 65, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:last-child {
- -moz-border-radius-topright: 3px;
- -webkit-border-top-right-radius: 3px;
- border-top-right-radius: 3px;
- -moz-border-radius-bottomright: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-/* line 14, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- width: 290px;
-}
-/* line 20, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div {
- display: block;
- margin: 0 0 15px 0;
- padding: 0;
- width: 100%;
-}
-/* line 28, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input,
-.mw-ui-vform > div .mw-ui-button {
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- margin: 0;
- width: 100%;
-}
-/* line 37, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]) {
- border-style: solid;
- border-width: 1px;
- border-color: #c9c9c9;
- color: #252525;
- padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus {
- box-shadow: #4091ed 0px 0px 5px;
- border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus:not([type=checkbox]):not([type=radio]) {
- outline: 0;
-}
-/* line 41, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div label {
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- font-size: 0.9em;
- color: #4a4a4a;
- width: auto;
- margin: 0 0 0.2em 0;
- padding: 0;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div label * {
- font-weight: normal;
-}
-/* line 52, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input[type="checkbox"],
-.mw-ui-vform > div input[type="radio"] {
- display: inline;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- width: auto;
-}
-/* line 63, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform .error {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- font-size: 0.9em;
- margin: 0 0 1em 0;
- padding: 0.5em;
- color: #cc0000;
- border: 1px solid #fac5c5;
- background-color: #fae3e3;
- text-shadow: 0 1px #fae3e3;
- word-wrap: break-word;
-}
-
-/* line 86, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform-div {
- display: block;
- margin: 0 0 15px 0;
- padding: 0;
- width: 100%;
-}
-
-/* line 96, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-input {
- border-style: solid;
- border-width: 1px;
- border-color: #c9c9c9;
- color: #252525;
- padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus {
- box-shadow: #4091ed 0px 0px 5px;
- border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus:not([type=checkbox]):not([type=radio]) {
- outline: 0;
-}
-
-/* line 103, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-label {
- font-size: 0.9em;
- color: #4a4a4a;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-label * {
- font-weight: normal;
-}
-
-/* line 112, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-checkbox-label, .mw-ui-radio-label {
- margin-bottom: 0.5em;
- cursor: pointer;
- vertical-align: bottom;
- line-height: normal;
- font-weight: normal;
-}
-/* line 54, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
- width: auto;
- height: auto;
- margin: 0 0.1em 0em 0;
- padding: 0;
- border-style: solid;
- border-width: 1px;
- border-color: #c9c9c9;
- cursor: pointer;
-}
+++ /dev/null
-@charset "UTF-8";
-/**
- * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-/* _effects.scss */
-/* Mixins for visual effects in CSS3 */
-/* line 7, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-left {
- float: left;
- margin-left: 0;
- padding-left: 0;
-}
-
-/* line 11, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-flush-right {
- float: right;
- margin-right: 0;
- padding-right: 0;
-}
-
-/* line 15, sourcefiles/scss/components/_utilities.scss */
-.mw-ui-center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-/* line 4, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button {
- display: -moz-inline-stack;
- display: inline-block;
- vertical-align: middle;
- *vertical-align: auto;
- zoom: 1;
- *display: inline;
- padding: 0.4em 1em 0.4em 1em;
- margin: 0;
- background-color: #c9c9c9;
- *background-color: #c9c9c9;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9));
- background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9);
- background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9);
- background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9);
- background-image: linear-gradient(top, #dcdcdc, #c9c9c9);
- color: black;
- text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3);
- border: 1px solid #c4c4c4;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- -ms-border-radius: 3px;
- -o-border-radius: 3px;
- border-radius: 3px;
- vertical-align: middle;
- text-align: center;
- text-decoration: none;
- font-weight: bold;
- cursor: pointer;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:hover, .mw-ui-button.mw-ui-hover {
- background-color: gainsboro;
- *background-color: gainsboro;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc));
- background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc);
- background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc);
- background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc);
- background-image: linear-gradient(top, #e9e9e9, #dcdcdc);
- text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:active, .mw-ui-button.mw-ui-active {
- background-image: none;
- background-color: #c1c1c1;
- text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
- background-image: none;
- background-color: #c9c9c9;
- opacity: 0.5;
- text-shadow: none;
-}
-/* line 30, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
- cursor: default;
-}
-/* line 36, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-big {
- font-size: 1.3em;
-}
-/* line 41, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button.mw-ui-block {
- display: block;
- width: 100%;
-}
-
-/* line 49, sourcefiles/scss/components/default/_buttons.scss */
-a.mw-ui-button {
- text-decoration: none;
-}
-
-/* line 56, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > * {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- -ms-border-radius: 0;
- -o-border-radius: 0;
- border-radius: 0;
- float: left;
-}
-/* line 60, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:first-child {
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-left-radius: 3px;
- -moz-border-radius-bottomleft: 3px;
- -webkit-border-bottom-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-/* line 65, sourcefiles/scss/components/default/_buttons.scss */
-.mw-ui-button-group > *:last-child {
- -moz-border-radius-topright: 3px;
- -webkit-border-top-right-radius: 3px;
- border-top-right-radius: 3px;
- -moz-border-radius-bottomright: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-/* line 3, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button {
- font-size: 1em;
- line-height: 1.4em;
-}
-/* line 6, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button.mw-ui-primary {
- background-color: #3366bb;
- *background-color: #3366bb;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF4779CD', endColorstr='#FF3366BB');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4779cd), color-stop(100%, #3366bb));
- background-image: -webkit-linear-gradient(top, #4779cd, #3366bb);
- background-image: -moz-linear-gradient(top, #4779cd, #3366bb);
- background-image: -o-linear-gradient(top, #4779cd, #3366bb);
- background-image: linear-gradient(top, #4779cd, #3366bb);
- color: white;
- text-shadow: 0 1px 1px rgba(51, 102, 187, 0.75);
- border: 1px solid #3162b3;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-primary:hover, .mw-ui-button.mw-ui-primary.mw-ui-hover {
- background-color: #4779cd;
- *background-color: #4779cd;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF5B88D2', endColorstr='#FF4779CD');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5b88d2), color-stop(100%, #4779cd));
- background-image: -webkit-linear-gradient(top, #5b88d2, #4779cd);
- background-image: -moz-linear-gradient(top, #5b88d2, #4779cd);
- background-image: -o-linear-gradient(top, #5b88d2, #4779cd);
- background-image: linear-gradient(top, #5b88d2, #4779cd);
- text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-primary:active, .mw-ui-button.mw-ui-primary.mw-ui-active {
- background-image: none;
- background-color: #305faf;
- text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-primary:disabled, .mw-ui-button.mw-ui-primary.mw-ui-disabled {
- background-image: none;
- background-color: #3366bb;
- opacity: 0.5;
- text-shadow: none;
-}
-/* line 10, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button.mw-ui-constructive {
- background-color: #27aa65;
- *background-color: #27aa65;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF2EC977', endColorstr='#FF27AA65');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2ec977), color-stop(100%, #27aa65));
- background-image: -webkit-linear-gradient(top, #2ec977, #27aa65);
- background-image: -moz-linear-gradient(top, #2ec977, #27aa65);
- background-image: -o-linear-gradient(top, #2ec977, #27aa65);
- background-image: linear-gradient(top, #2ec977, #27aa65);
- color: white;
- text-shadow: 0 1px 1px rgba(39, 170, 101, 0.75);
- border: 1px solid #25a260;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-constructive:hover, .mw-ui-button.mw-ui-constructive.mw-ui-hover {
- background-color: #2ec977;
- *background-color: #2ec977;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF3ED384', endColorstr='#FF2EC977');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3ed384), color-stop(100%, #2ec977));
- background-image: -webkit-linear-gradient(top, #3ed384, #2ec977);
- background-image: -moz-linear-gradient(top, #3ed384, #2ec977);
- background-image: -o-linear-gradient(top, #3ed384, #2ec977);
- background-image: linear-gradient(top, #3ed384, #2ec977);
- text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-constructive:active, .mw-ui-button.mw-ui-constructive.mw-ui-active {
- background-image: none;
- background-color: #249e5e;
- text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-constructive:disabled, .mw-ui-button.mw-ui-constructive.mw-ui-disabled {
- background-image: none;
- background-color: #27aa65;
- opacity: 0.5;
- text-shadow: none;
-}
-/* line 14, sourcefiles/scss/components/vector/_buttons.scss */
-.mw-ui-button.mw-ui-destructive {
- background-color: #cc0000;
- *background-color: #cc0000;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFF20000', endColorstr='#FFCC0000');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f20000), color-stop(100%, #cc0000));
- background-image: -webkit-linear-gradient(top, #f20000, #cc0000);
- background-image: -moz-linear-gradient(top, #f20000, #cc0000);
- background-image: -o-linear-gradient(top, #f20000, #cc0000);
- background-image: linear-gradient(top, #f20000, #cc0000);
- color: white;
- text-shadow: 0 1px 1px rgba(204, 0, 0, 0.75);
- border: 1px solid #c20000;
-}
-/* line 38, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-destructive:hover, .mw-ui-button.mw-ui-destructive.mw-ui-hover {
- background-color: #f20000;
- *background-color: #f20000;
- *zoom: 1;
- filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFF0D0D', endColorstr='#FFF20000');
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0d0d), color-stop(100%, #f20000));
- background-image: -webkit-linear-gradient(top, #ff0d0d, #f20000);
- background-image: -moz-linear-gradient(top, #ff0d0d, #f20000);
- background-image: -o-linear-gradient(top, #ff0d0d, #f20000);
- background-image: linear-gradient(top, #ff0d0d, #f20000);
- text-decoration: none;
-}
-/* line 44, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-destructive:active, .mw-ui-button.mw-ui-destructive.mw-ui-active {
- background-image: none;
- background-color: #bd0000;
- text-shadow: none;
-}
-/* line 54, sourcefiles/scss/mixins/_effects.scss */
-.mw-ui-button.mw-ui-destructive:disabled, .mw-ui-button.mw-ui-destructive.mw-ui-disabled {
- background-image: none;
- background-color: #cc0000;
- opacity: 0.5;
- text-shadow: none;
-}
-
-/* line 14, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- width: 290px;
-}
-/* line 20, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div {
- display: block;
- margin: 0 0 15px 0;
- padding: 0;
- width: 100%;
-}
-/* line 28, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input,
-.mw-ui-vform > div .mw-ui-button {
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- margin: 0;
- width: 100%;
-}
-/* line 37, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]) {
- border-style: solid;
- border-width: 1px;
- border-color: #c9c9c9;
- color: #252525;
- padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus {
- box-shadow: #4091ed 0px 0px 5px;
- border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus:not([type=checkbox]):not([type=radio]) {
- outline: 0;
-}
-/* line 41, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div label {
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- font-size: 0.9em;
- color: #4a4a4a;
- width: auto;
- margin: 0 0 0.2em 0;
- padding: 0;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-vform > div label * {
- font-weight: normal;
-}
-/* line 52, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform > div input[type="checkbox"],
-.mw-ui-vform > div input[type="radio"] {
- display: inline;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- width: auto;
-}
-/* line 63, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform .error {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- font-size: 0.9em;
- margin: 0 0 1em 0;
- padding: 0.5em;
- color: #cc0000;
- border: 1px solid #fac5c5;
- background-color: #fae3e3;
- text-shadow: 0 1px #fae3e3;
- word-wrap: break-word;
-}
-
-/* line 86, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-vform-div {
- display: block;
- margin: 0 0 15px 0;
- padding: 0;
- width: 100%;
-}
-
-/* line 96, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-input {
- border-style: solid;
- border-width: 1px;
- border-color: #c9c9c9;
- color: #252525;
- padding: 0.35em 0 0.35em 0.5em;
-}
-/* line 11, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus {
- box-shadow: #4091ed 0px 0px 5px;
- border-color: #4091ed;
-}
-/* line 13, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-input:focus:not([type=checkbox]):not([type=radio]) {
- outline: 0;
-}
-
-/* line 103, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-label {
- font-size: 0.9em;
- color: #4a4a4a;
-}
-/* line 38, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-label * {
- font-weight: normal;
-}
-
-/* line 112, sourcefiles/scss/components/default/_forms.scss */
-.mw-ui-checkbox-label, .mw-ui-radio-label {
- margin-bottom: 0.5em;
- cursor: pointer;
- vertical-align: bottom;
- line-height: normal;
- font-weight: normal;
-}
-/* line 54, sourcefiles/scss/mixins/_forms.scss */
-.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
- width: auto;
- height: auto;
- margin: 0 0.1em 0em 0;
- padding: 0;
- border-style: solid;
- border-width: 1px;
- border-color: #c9c9c9;
- cursor: pointer;
-}
-
-/* line 5, sourcefiles/scss/components/vector/_forms.scss */
-.mw-ui-vform,
-.mw-ui-vform > div input,
-.mw-ui-input {
- font-size: 1em;
- line-height: 1.4em;
-}
-
-/* line 3, sourcefiles/scss/components/vector/_containers.scss */
-.mw-ui-container {
- font-size: 1em;
- line-height: 1.4em;
-}
--- /dev/null
+/* Mixins for visual effects in CSS3 */
+
+@import "../settings/colors";
+
+// ----------------------------------------------------------------------------
+// Gradients
+// ----------------------------------------------------------------------------
+.vertical-gradient(@startColor: lighten(@agoraGray, 95%), @endColor: @agoraGray, @startPos: 0, @endPos: 100%) {
+ background-color: @endColor;
+ background-image: -moz-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Firefox 3.6+
+ background-image: -webkit-gradient( linear, left top, left bottom, color-stop( @startPos, @startColor ), color-stop( @endPos, @endColor ) ); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Safari 5.1+, Chrome 10+
+ background-image: linear-gradient( @startColor @startPos, @endColor @endPos ); // Standard
+}
+
+// ----------------------------------------------------------------------------
+// Button styling
+// ----------------------------------------------------------------------------
+
+.buttonColors(@baseColor: @agoraGray) {
+ // Background color
+ .vertical-gradient(lighten(@baseColor, 7.5%), @baseColor);
+
+ border: 1px solid darken(@baseColor, 2%);
+
+ &:hover,
+ &.mw-ui-hover {
+ .vertical-gradient(lighten(@baseColor, 12.5%), lighten(@baseColor, 7.5%));
+ text-decoration: none;
+ }
+
+ &:active,
+ &.mw-ui-active {
+ background-image: none;
+ background-color: darken(@baseColor, 3%);
+ }
+
+ &:disabled,
+ &.mw-ui-disabled {
+ background-image: none;
+ background-color: @baseColor;
+ opacity: 0.5;
+ }
+}
+
+.buttonColors(@baseColor: @agoraGray) when (lightness(@baseColor) >= 50%) {
+ color: #000;
+}
+
+.buttonColors(@baseColor: @agoraGray) when (lightness(@baseColor) < 50%) {
+ color: #fff;
+}
--- /dev/null
+@import "../settings/colors";
+
+// Font is not included.
+// For Vector, that should be layered on top with vector-type
+.agora-field-styling() {
+
+ border: 1px solid @agoraGray;
+
+ &:focus {
+ // Styling focus of native checkboxes etc on Mac is almost impossible.
+ &:not([type=checkbox]):not([type=radio]) {
+ outline: 0; // Removes OS field focus
+ }
+
+ box-shadow: @agoraBlueShadow 0px 0px 5px;
+
+ border-color: @agoraBlueShadow;
+ }
+
+ color: @agoraTextColor;
+ padding: 0.35em 0.5em 0.35em 0.5em;
+}
+
+.agora-label-styling() {
+ //font-weight: bold;
+ font-size: 0.9em;
+ color: darken(@agoraGray, 50%);
+
+ * {
+ font-weight: normal;
+ }
+}
+
+.agora-inline-label-styling() {
+ margin-bottom: 0.5em;
+ cursor: pointer;
+ vertical-align: bottom;
+ line-height: normal;
+
+ font-weight: normal;
+
+ & > input[type="checkbox"],
+ & > input[type="radio"] {
+ width: auto;
+ height: auto;
+ margin: 0 0.1em 0em 0;
+ padding: 0;
+ border: 1px solid @agoraGray;
+ cursor: pointer;
+ }
+}
--- /dev/null
+@import "../settings/typography";
+
+.vector-type() {
+ font-size: @baseFontSize;
+ line-height: @baseLineHeight;
+}
--- /dev/null
+.box-sizing(@value) {
+ -moz-box-sizing: @value;
+ -webkit-box-sizing: @value;
+ box-sizing: @value;
+}
+
+.agora-flush-left() {
+ float: left;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.agora-flush-right() {
+ float: right;
+ margin-right: 0;
+ padding-right: 0;
+}
+
+.agora-center-block() {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
--- /dev/null
+// Grays
+// -----------------------------------------
+@agoraGray: #c9c9c9;
+@agoraTextColor: #252525;
+
+// Blues
+// -----------------------------------------
+@agoraBlue: #3366bb;
+@agoraBlueShadow: #4091ed;
+
+// Greens
+// -----------------------------------------
+@agoraGreen: #27aa65;
+
+// Reds
+// -----------------------------------------
+@agoraRed: #cc0000;
--- /dev/null
+@baseFontSize: 1em;
+@baseLineHeight: 1.4 * @baseFontSize;
+@baseFontColor: @agoraTextColor;
+
+@smallFontSize: 0.75em;
+++ /dev/null
-DATE=$(shell date +%I:%M%p)
-CHECK=\033[32m✔\033[39m
-HR=\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
-
-build:
- @echo "\n${HR}"
- @echo "Building Agora..."
- @echo "${HR}\n"
- @compass compile
- @echo "Compiling Compass project... ${CHECK} Done"
- @rm -rf .sass-cache
- @echo "Removing .sass-cache... ${CHECK} Done"
- @echo "\n${HR}"
- @echo "Agora successfully built at ${DATE}."
- @echo "${HR}\n"
-
-all: build
-
-watch:
- @echo "\n${HR}"
- @echo "Watching SCSS files for Agora..."
- @echo "${HR}\n"
- @compass watch
- @echo "Started watching modules/scss at ${DATE}..."
+++ /dev/null
-# Require any additional compass plugins here.
-
-# Set this to the root of your project when deployed:
-# (unused so far): http_path = "/"
-
-# Output to parent of build directory
-css_dir = ".."
-sass_dir = "scss"
-# (unused so far): images_dir = "modules/img"
-# (unused so far): javascripts_dir = "modules/js"
-
-# You can select your preferred output style here (can be overridden via the command line):
-# output_style = :expanded or :nested or :compact or :compressed
-output_style = :expanded
-
-# To enable relative paths to assets via compass helper functions. Uncomment:
-relative_assets = true
-
-# To disable debugging comments that display the original location of your selectors. Uncomment:
-line_comments = true
-
-
-# If you prefer the indented syntax, you might want to regenerate this
-# project again passing --syntax sass, or you can uncomment this:
-# preferred_syntax = :sass
-# and then run:
-# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
+++ /dev/null
-@import "utilities";
-@import "default/buttons";
-@import "default/forms";
\ No newline at end of file
+++ /dev/null
-// Generic helper classes that could be used in many elements/layouts
-
-// --------------------------------------------------------------------------
-// Positioning
-// --------------------------------------------------------------------------
-
-.mw-ui-flush-left {
- @include agora-flush-left;
-}
-
-.mw-ui-flush-right {
- @include agora-flush-right;
-}
-
-.mw-ui-center-block {
- @include agora-center-block;
-}
\ No newline at end of file
+++ /dev/null
-@import "utilities";
-@import "vector/buttons";
-@import "vector/forms";
-@import "vector/containers";
+++ /dev/null
-$buttonBorderRadius: 3px;
-
-// Button styling
-.mw-ui-button {
- // Container layout
- @include inline-block;
- padding: 0.4em 1em 0.4em 1em;
- margin: 0;
-
- // Container styling
- @include buttonColors($agoraGray);
- @include border-radius($buttonBorderRadius);
-
- // Content styling
- vertical-align: middle;
-
- text: {
- align: center;
- decoration: none;
- }
-
- font: {
- weight: bold;
- }
-
- // Interaction styling
- cursor: pointer;
-
- &:disabled,
- &.mw-ui-disabled {
- cursor: default;
- }
-
- // Button sizes and displays
- // -----------------------------------------
- &.mw-ui-big {
- font: {
- size: $baseFontSize * 1.3;
- }
- }
- &.mw-ui-block {
- display: block;
- width: 100%;
- }
-}
-
-// This overrides an underline declaration on a:hover and a:focus in commonElements.css, which the
-// class alone isn't specific enough to do
-a.mw-ui-button {
- text: {
- decoration: none;
- }
-}
-
-// Button groups
-.mw-ui-button-group > * {
- @include border-radius(0);
- float: left;
-
- &:first-child{
- @include border-top-left-radius($buttonBorderRadius);
- @include border-bottom-left-radius($buttonBorderRadius);
- }
-
- &:last-child{
- @include border-top-right-radius($buttonBorderRadius);
- @include border-bottom-right-radius($buttonBorderRadius);
- }
-}
+++ /dev/null
-// Form elements and layouts
-
-// --------------------------------------------------------------------------
-// Layouts
-// --------------------------------------------------------------------------
-
-// The FancyCaptcha image CAPTCHA used on WMF wikis drives the width of the
-// 'VForm' design, the form can't be narrower than this.
-$captchaContainerWidth: 290px;
-$defaultFormWidth: $captchaContainerWidth;
-
-// Style a compact vertical stacked form ("VForm") and the elements in divs
-// within it.
-.mw-ui-vform {
- @include box-sizing(border-box);
-
- width: $defaultFormWidth;
-
- // Immediate divs in a vform are block and spaced-out.
- & > div {
- display: block;
- margin: 0 0 15px 0;
- padding: 0;
- width: 100%;
-
- // MW currently doesn't use the type attribute everywhere on inputs.
- input,
- .mw-ui-button {
- display: block;
- @include box-sizing(border-box);
- margin: 0;
- width: 100%;
- }
-
- // We exclude these because they'll generally use mw-ui-button.
- // Otherwise, we'll unintentionally override that.
- input:not([type=button]):not([type=submit]):not([type=file]), {
- @include agora-field-styling; // mixins/_forms.scss
- }
-
- label {
- display: block;
- @include box-sizing(border-box);
- @include agora-label-styling;
- width: auto;
- margin: 0 0 0.2em 0;
- padding: 0;
- }
-
- // Override input styling just for checkboxes and radio inputs.
- input[type="checkbox"],
- input[type="radio"] {
- display: inline;
- @include box-sizing(content-box);
- width: auto;
- }
-
- }
-
- // HTMLForm uses error, SpecialUserlogin (login and create account) uses
- // errorbox.
- // TODO move errorbox from mediawiki.special.vforms.css into here.
- .error {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- font-size: 0.9em;
- margin: 0 0 1em 0;
- padding: 0.5em;
- color: #cc0000;
- border: 1px solid #fac5c5;
- background-color: #fae3e3;
- text-shadow: 0 1px #fae3e3;
- word-wrap: break-word;
- }
-}
-
-// --------------------------------------------------------------------------
-// Elements
-// --------------------------------------------------------------------------
-
-// Apply this to individual elements to style them.
-// You generally don't need to use this class on divs within an Agora
-// form container such as mw-ui-vform
-// XXX DRY: This repeats earlier styling, use an @include agora-div-styling ?
-.mw-ui-vform-div {
- display: block;
- margin: 0 0 15px 0;
- padding: 0;
- width: 100%;
-}
-
-// Apply mw-ui-input to individual input fields to style them.
-// You generally don't need to use this class if <input> is within an Agora
-// form container such as mw-ui-vform
-.mw-ui-input {
- @include agora-field-styling; // mixins/_forms.scss
-}
-
-// Apply mw-ui-label to individual elements to style them.
-// You generally don't need to use this class if <label> is within an Agora
-// form container such as mw-ui-vform
-.mw-ui-label {
- @include agora-label-styling; // mixins/_forms.scss
-}
-
-// Nesting an input checkbox or radio button inside a label with this class
-// improves alignment, e.g.
-// <label class="mw-ui-checkbox-label">
-// <input type="checkbox">The label text
-// </label>
-.mw-ui-checkbox-label, .mw-ui-radio-label {
- @include agora-inline-label-styling;
-}
+++ /dev/null
-@import "../default/buttons"; // Layer Vector on top of the default settings.
-
-.mw-ui-button {
- // Button colors determined by function.
- // -----------------------------------------
- &.mw-ui-primary {
- @include buttonColors($agoraBlue);
- }
-
- &.mw-ui-constructive {
- @include buttonColors($agoraGreen);
- }
-
- &.mw-ui-destructive {
- @include buttonColors($agoraRed);
- }
-
- @include vector-type;
-}
+++ /dev/null
-// No default settings for containers yet.
-
-.mw-ui-container {
- @include vector-type;
-}
+++ /dev/null
-@import "../default/forms"; // Layer Vector on top of the default settings.
-
-.mw-ui-vform,
-.mw-ui-vform > div input,
-.mw-ui-input {
- @include vector-type;
-}
+++ /dev/null
-/**
- * Provide Agora appearance for mw-ui-* classes when using a skin other than
- * Vector.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-
-@charset "UTF-8";
-
-@import "compass";
-
-@import "settings/all";
-
-@import "mixins/all";
-
-@import "components/default";
+++ /dev/null
-/**
- * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
- * Compass builds these Agora styles from source Sass files in
- * extensions/Agora/modules/scss
- */
-
-@charset "UTF-8";
-
-@import "compass";
-
-@import "settings/all";
-
-@import "mixins/all";
-
-@import "components/vector";
+++ /dev/null
-@import "utilities";
-@import "type";
-@import "effects";
-@import "forms";
\ No newline at end of file
+++ /dev/null
-/* _effects.scss */
-
-/* Mixins for visual effects in CSS3 */
-
-// ----------------------------------------------------------------------------
-// Gradients
-// ----------------------------------------------------------------------------
-@mixin vertical-gradient ($startColor: lighten($agoraGray, 95%), $endColor: $agoraGray) {
- // Fallback
- background-color: $endColor;
- *background-color: $endColor; // IE7
-
- // IE6-8
- @include filter-gradient($startColor, $endColor, vertical);
-
- // IE9+, Opera, Gecko, WebKit
- @include background-image(linear-gradient(top, $startColor, $endColor));
-}
-
-// ----------------------------------------------------------------------------
-// Button styling
-// ----------------------------------------------------------------------------
-@mixin buttonColors ($baseColor: $agoraGray) {
- // Background color
- @include vertical-gradient(lighten($baseColor, 7.5%), $baseColor);
-
- @if $baseColor == $agoraGray {
- color: black;
- @include text-shadow(0 1px 1px rgba($baseColor, 0.3));
- } @else {
- color: white;
- @include text-shadow(0 1px 1px rgba($baseColor, 0.75));
- }
-
- border: 1px solid darken($baseColor, 2%);
-
- &:hover,
- &.mw-ui-hover {
- @include vertical-gradient(lighten($baseColor, 12.5%), lighten($baseColor, 7.5%));
- text-decoration: none;
- }
-
- &:active,
- &.mw-ui-active {
- background: {
- image: none;
- color: darken($baseColor, 3%);
- }
-
- text-shadow: none;
- }
-
- &:disabled,
- &.mw-ui-disabled {
- background: {
- image: none;
- color: $baseColor;
- }
- opacity: 0.5;
- text-shadow: none;
- }
-}
+++ /dev/null
-// Font is not included.
-// For Vector, that should be layered on top with vector-type
-@mixin agora-field-styling() {
-
- border: {
- style: solid;
- width: 1px;
- color: $agoraGray;
- };
-
- &:focus {
- // Styling focus of native checkboxes etc on Mac is almost impossible.
- &:not([type=checkbox]):not([type=radio]) {
- @include reset-focus; // Removes OS field focus
- };
-
- // @include box-shadow generates unneeded prefixes
- // https://github.com/chriseppstein/compass/issues/1054 , so specify
- // directly.
- box-shadow: $agoraBlueShadow 0px 0px 5px;
-
- border: {
- color: $agoraBlueShadow;
- };
- }
-
- color: $agoraTextColor;
- padding: 0.35em 0 0.35em 0.5em;
-}
-
-@mixin agora-label-styling() {
- font: {
- //weight: bold;
- size: 0.9em;
- };
- color: darken($agoraGray, 50%);
-
- & * {
- font-weight: normal;
- }
-}
-
-@mixin agora-inline-label-styling() {
- margin-bottom: 0.5em;
- cursor: pointer;
- vertical-align: bottom;
- line-height: normal;
-
- font: {
- weight: normal;
- };
-
- & > input[type="checkbox"],
- & > input[type="radio"] {
- width: auto;
- height: auto;
- margin: 0 0.1em 0em 0;
- padding: 0;
- border: {
- style: solid;
- width: 1px;
- color: $agoraGray;
- }
- cursor: pointer;
- }
-}
+++ /dev/null
-@mixin vector-type {
- font: {
- size: $baseFontSize;
- }
- line-height: $baseLineHeight;
-}
\ No newline at end of file
+++ /dev/null
-@mixin agora-flush-left() {
- float: left;
- margin-left: 0;
- padding-left: 0;
-}
-
-@mixin agora-flush-right() {
- float: right;
- margin-right: 0;
- padding-right: 0;
-}
-
-@mixin agora-center-block() {
- display: block;
- margin: {
- left: auto;
- right: auto;
- };
-}
\ No newline at end of file
+++ /dev/null
-@import "colors";
-@import "typography";
\ No newline at end of file
+++ /dev/null
-// Grays
-// -----------------------------------------
-$agoraGray: #c9c9c9;
-$agoraTextColor: #252525;
-
-// Blues
-// -----------------------------------------
-$agoraBlue: #3366bb;
-$agoraBlueShadow: #4091ed;
-
-// Greens
-// -----------------------------------------
-$agoraGreen: #27aa65;
-
-// Reds
-// -----------------------------------------
-$agoraRed: #cc0000;
+++ /dev/null
-$baseFontSize: 1em;
-$baseLineHeight: 1.4 * $baseFontSize;
-$baseFontColor: $agoraTextColor;
-
-$smallFontSize: 0.75em;
\ No newline at end of file
--- /dev/null
+/**
+ * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
+ */
+
+@import "components/utilities";
+@import "components/vector/buttons";
+@import "components/vector/forms";
+@import "components/vector/containers";
thumbPhpRegex = /thumb\.php/,
regexes = [
// Thumbnails
- /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-\1[^\s\/]*$/,
+ /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/,
// Thumbnails in non-hashed upload directories
- /\/([^\s\/]+)\/[^\s\/]+-\1[^\s\/]*$/,
+ /\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/,
// Full size images
/\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)$/,
* Get the URL to this title
*
* @see mw.util#getUrl
+ * @param {Object} [params] A mapping of query parameter names to values,
+ * e.g. `{ action: 'edit' }`.
* @return {string}
*/
- getUrl: function () {
- return mw.util.getUrl( this.toString() );
+ getUrl: function ( params ) {
+ return mw.util.getUrl( this.toString(), params );
},
/**
--- /dev/null
+/**
+ Stylesheet for mediawiki.hlist module
+ @author [[User:Edokter]]
+ */
+.skin-monobook .hlist dl,
+.skin-modern .hlist dl,
+.skin-vector .hlist dl {
+ line-height: 1.5em;
+}
+.hlist dl,
+.hlist ol,
+.hlist ul {
+ margin: 0;
+ padding: 0;
+}
+/* Display list items inline */
+.hlist dd,
+.hlist dt,
+.hlist li {
+ margin: 0;
+ display: inline;
+}
+/* Display nested lists inline */
+.hlist dl dl, .hlist dl ol, .hlist dl ul,
+.hlist ol dl, .hlist ol ol, .hlist ol ul,
+.hlist ul dl, .hlist ul ol, .hlist ul ul {
+ display: inline;
+}
+/* Generate interpuncts */
+.hlist dt:after {
+ content: ":";
+}
+.hlist dd:after,
+.hlist li:after {
+ content: " ·";
+ font-weight: bold;
+}
+.hlist dd:last-child:after,
+.hlist dt:last-child:after,
+.hlist li:last-child:after {
+ content: none;
+}
+/* For IE8 */
+.hlist dd.hlist-last-child:after,
+.hlist dt.hlist-last-child:after,
+.hlist li.hlist-last-child:after {
+ content: none;
+}
+/* Add parentheses around nested lists */
+.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
+.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
+.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
+ content: "(";
+ font-weight: normal;
+}
+.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
+.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
+.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
+ content: ")";
+ font-weight: normal;
+}
+/* For IE8 */
+.hlist dd dd.hlist-last-child:after, .hlist dd dt.hlist-last-child:after, .hlist dd li.hlist-last-child:after,
+.hlist dt dd.hlist-last-child:after, .hlist dt dt.hlist-last-child:after, .hlist dt li.hlist-last-child:after,
+.hlist li dd.hlist-last-child:after, .hlist li dt.hlist-last-child:after, .hlist li li.hlist-last-child:after {
+ content: ")";
+ font-weight: normal;
+}
+/* Put ordinals in front of ordered list items */
+.hlist ol {
+ counter-reset: list-item;
+}
+.hlist ol > li {
+ counter-increment: list-item;
+}
+.hlist ol > li:before {
+ content: counter(list-item) " ";
+}
+.hlist dd ol > li:first-child:before,
+.hlist dt ol > li:first-child:before,
+.hlist li ol > li:first-child:before {
+ content: "(" counter(list-item) " ";
+}
--- /dev/null
+/**
+ IE 8: Add pseudo-selector class to last-child list items
+ @author [[User:Edokter]]
+*/
+jQuery( function( $ ) {
+ if ( $.client.profile().name === 'msie' ) {
+ if ( $.client.profile().versionNumber === 8 ) {
+ $( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
+ .addClass( 'hlist-last-child' );
+ }
+ /* IE 7 and below: Generate interpuncts and parentheses */
+ if ( $.client.profile().versionNumber <= 7 ) {
+ var $hlists = $( '.hlist' );
+ $hlists.find( 'dt:not(:last-child)' )
+ .append( ': ' );
+ $hlists.find( 'dd:not(:last-child)' )
+ .append( '<b>·</b> ' );
+ $hlists.find( 'li:not(:last-child)' )
+ .append( '<b>·</b> ' );
+ $hlists.find( 'dl dl, dl ol, dl ul, ol dl, ol ol, ol ul, ul dl, ul ol, ul ul' )
+ .prepend( '( ' ).append( ') ' );
+ }
+ }
+} );
// Cache hit stats
stats: { hits: 0, misses: 0, expired: 0 },
+ // Experiment data
+ experiment: ( function () {
+ var start = ( new Date() ).getTime(), id = 0, seed = 0;
+
+ try {
+ id = JSON.parse( localStorage.getItem( 'moduleStorageExperiment' ) );
+ if ( typeof id !== 'number' ) {
+ id = Math.floor( Math.random() * Math.random() * 1e16 );
+ localStorage.setItem( 'moduleStorageExperiment', id );
+ }
+ seed = id % 2000;
+ } catch ( e ) {}
+
+ return {
+ // Unique identifier for this browser. This allows us to group all
+ // datapoints generated by a particular browser, which in turn allows us
+ // to see how the initial load compares to subsequent page loads.
+ id: id,
+
+ // Group assignment may be 0 (not in experiment), 1 (control group), or 2
+ // (experimental group). Browsers that don't implement all the prerequisite APIs
+ // (JSON and Web Storage) are ineligible. Eligible browsers have a 0.1% chance
+ // of being included in the experiment, in which case they are equally likely to
+ // be assigned to either the experimental or control group.
+ group: seed === 1 ? 1 : ( seed === 2 ? 2 : 0 ),
+
+ // Assess module storage performance by measuring the time between this
+ // reference point and the window load event.
+ start: start
+ };
+ }() ),
+
/**
* Construct a JSON-serializable object representing the content of the store.
* @return {Object} Module store contents.
* code for a full account of why we need a try / catch: <http://git.io/4NEwKg>.
*/
init: function () {
- var raw, data, optedIn;
+ var raw, data;
if ( mw.loader.store.enabled !== null ) {
// #init already ran.
return;
}
- // Temporarily allow users to opt-in during mw.loader.store test phase by
- // manually setting a cookie (bug 56397).
- optedIn = /ResourceLoaderStorageEnabled=1/.test( document.cookie );
-
- if ( !( mw.config.get( 'wgResourceLoaderStorageEnabled' ) || optedIn ) || mw.config.get( 'debug' ) ) {
- // Disabled by configuration, or because debug mode is set.
- mw.loader.store.enabled = false;
+ if (
+ // We're in debug mode
+ mw.config.get( 'debug' ) ||
+ // Module storage is neither enabled by default, nor enabled for this user's group.
+ !( mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.loader.store.experiment.group === 2 )
+ ) {
return;
}
var timer;
function flush() {
- var data;
+ var data, key = mw.loader.store.getStoreKey();
if ( mw.loader.store.enabled !== true ) {
return false;
}
mw.loader.store.prune();
try {
+ // Replacing the content of the module store might fail if the new
+ // contents would exceed the browser's localStorage size limit. To
+ // avoid clogging the browser with stale data, always remove the old
+ // value before attempting to set the new one.
+ localStorage.removeItem( key );
data = JSON.stringify( mw.loader.store );
- localStorage.setItem( mw.loader.store.getStoreKey(), data );
+ localStorage.setItem( key, data );
} catch (e) {}
}
* Get the link to a page name (relative to `wgServer`),
*
* @param {string} str Page name to get the link for.
- * @param {Object} params A mapping of query parameter names to values,
- * e.g. { action: 'edit' }. Optional.
+ * @param {Object} [params] A mapping of query parameter names to values,
+ * e.g. `{ action: 'edit' }`.
* @return {string} Location for a page with name of `str` or boolean false on error.
*/
getUrl: function ( str, params ) {
// nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
// or nextnode is a CSS selector for jQuery
nextnode = $ul.find( nextnode );
- } else if ( !nextnode.jquery || nextnode[0].parentNode !== $ul[0] ) {
+ } else if ( !nextnode.jquery || ( nextnode.length && nextnode[0].parentNode !== $ul[0] ) ) {
// Fallback
$ul.append( $item );
return $item[0];
$lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
-
// Second row. Privileged actions.
$element = array();
$lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
-
// Third row. Language links.
$lines[] = $this->otherLanguages();
}
$bar = $this->sidebarAdditions( $bar );
}
-
// Fill out special sidebar items with content
$orig_bar = $bar;
$bar = array();
}
}
-
// Output the sidebar
// CologneBlue uses custom messages for some portlets, but we should keep the ids for consistency
$idToMessage = array(
<?php
}
} // end of class
-
-
div#column-one,
#colophon,
.mw-editsection,
+.mw-editsection-like,
.toctoggle,
.tochidden,
div#f-poweredbyico,
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">\r
+<defs>\r
+<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">\r
+<stop offset="0.0" stop-color="#E3702D"/><stop offset="0.1071" stop-color="#EA7D31"/>\r
+<stop offset="0.3503" stop-color="#F69537"/><stop offset="0.5" stop-color="#FB9E3A"/>\r
+<stop offset="0.7016" stop-color="#EA7C31"/><stop offset="0.8866" stop-color="#DE642B"/>\r
+<stop offset="1.0" stop-color="#D95B29"/>\r
+</linearGradient>\r
+</defs>\r
+<rect width="256" height="256" rx="55" ry="55" x="0" y="0" fill="#CC5D15"/>\r
+<rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/>\r
+<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>\r
+<circle cx="68" cy="189" r="24" fill="#FFF"/>\r
+<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>\r
+<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>\r
+</svg>\r
/* feed links */
a.feedlink {
/* @embed */
- background: url(images/feed-icon.png) center left no-repeat;
+ background-image: url(images/feed-icon.png);
+ background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+ background-position: center left;
+ background-repeat: no-repeat;
+ background-size: 12px 12px;
padding-left: 16px;
}
}
/* Display editsection links smaller and next to headings */
-.mw-editsection {
+.mw-editsection,
+.mw-editsection-like {
font-size: small;
font-weight: normal;
margin-left: 1em;
#jump-to-nav,
#footer,
.mw-editsection,
+.mw-editsection-like,
.noprint {
display: none;
}
background-repeat: no-repeat;
}
/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs span a {
+div.vectorTabs span a {
display: inline-block;
padding-top: 1.25em;
}
'MockFSFile' => "$testDir/phpunit/mocks/filebackend/MockFSFile.php",
'MockFileBackend' => "$testDir/phpunit/mocks/filebackend/MockFileBackend.php",
'MockBitmapHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
- 'MockImageHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
- 'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
+ 'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php",
+ 'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
# tests/phpunit/languages
'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
!! end
+!! test
+CSS safety test: vertical tab
+!! input
+<p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
+!! result
+<p style="/* invalid control char */">A</p>
+
+!! end
+
+!! test
+MSIE CSS safety test: Fullwidth
+!! input
+<p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
+<div style="top:EXPRESSION(alert())">B</div>
+!! result
+<p style="/* insecure input */">A</p>
+<div style="/* insecure input */">B</div>
+
+!! end
+
+!! test
+MSIE CSS safety test: IPA extensions
+!! input
+<div style="background-image:uʀʟ(javascript:alert())">A</div>
+<p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
+!! result
+<div style="/* insecure input */">A</div>
+<p style="/* insecure input */">B</p>
+
+!! end
+
+!! test
+MSIE CSS safety test: sup/sub script
+!! input
+<div style="background-image:url⁽javascript:alert())">A</div>
+<div style="background-image:url₍javascript:alert())">B</div>
+<p style="font-size: 100px; color: expressioⁿ((title='XSSed'),'red')">C</p>
+!! result
+<div style="/* insecure input */">A</div>
+<div style="/* insecure input */">B</div>
+<p style="/* insecure input */">C</p>
+
+!! end
+
+!! test
+MSIE CSS safety test: Repetition markers
+!! input
+<p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p>
+<p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p>
+<p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">C</p>
+<p style="font-size: 100px; color: expresヽion((title='XSSed'),'red')">D</p>
+<p style="font-size: 100px; color: expresﹽion((title='XSSed'),'red')">E</p>
+<p style="font-size: 100px; color: expresﹼion((title='XSSed'),'red')">F</p>
+<p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">G</p>
+!! result
+<p style="/* insecure input */">A</p>
+<p style="/* insecure input */">B</p>
+<p style="/* insecure input */">C</p>
+<p style="/* insecure input */">D</p>
+<p style="/* insecure input */">E</p>
+<p style="/* insecure input */">F</p>
+<p style="/* insecure input */">G</p>
+
+!! end
!! test
Table attribute legitimate extension
print <<<EOT
ParserTest-specific options:
-
--regex="<regex>" Only run parser tests that match the given regex
--file="<filename>" File describing parser tests
--keep-uploads Re-use the same upload directory for each test, don't delete it
-
Database options:
--use-normal-tables Use normal DB tables.
--reuse-db Init DB only if tables are missing and keep after finish.
-
Debugging options:
--debug-tests Log testing activity to the PHPUnitCommand log channel.
private static $dbSetup = false;
private static $oldTablePrefix = false;
+ /**
+ * Original value of PHP's error_reporting setting.
+ *
+ * @var int
+ */
+ private $phpErrorLevel;
+
/**
* Holds the paths of temporary files/directories created through getNewTempFile,
* and getNewTempDirectory
parent::setUp();
$this->called['setUp'] = 1;
+ $this->phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+
/*
// @todo global variables to restore for *every* test
array(
}
$this->mwGlobals = array();
+ $phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+
+ if ( $phpErrorLevel !== $this->phpErrorLevel ) {
+ ini_set( 'error_reporting', $this->phpErrorLevel );
+
+ $oldHex = strtoupper( dechex( $this->phpErrorLevel ) );
+ $newHex = strtoupper( dechex( $phpErrorLevel ) );
+ $message = "PHP error_reporting setting was left dirty: was 0x$oldHex before test, 0x$newHex after test!";
+
+ $this->fail( $message );
+ }
+
parent::tearDown();
wfProfileOut( __METHOD__ );
}
rev_minor_edit tinyint default '0',
rev_deleted tinyint default '0',
rev_len int,
- rev_parent_id INTEGER default NULL) /*$wgDBTableOptions*/ ;
+ rev_parent_id INTEGER default NULL) /*$wgDBTableOptions*/;
CREATE TABLE /*$wgDBprefix*/text (
old_id INTEGER PRIMARY KEY AUTOINCREMENT,
old_text mediumblob ,
- old_flags tinyblob ) /*$wgDBTableOptions*/ ;
+ old_flags tinyblob ) /*$wgDBTableOptions*/;
CREATE TABLE /*$wgDBprefix*/archive (
ar_namespace INTEGER default '0',
CREATE TABLE /*$wgDBprefix*/hitcounter (
hc_id INTEGER
-) ;
+);
CREATE TABLE /*$wgDBprefix*/ipblocks (
ipb_id INTEGER PRIMARY KEY AUTOINCREMENT,
CREATE TABLE /*$wgDBprefix*/searchindex (
si_page INTEGER ,
si_title varchar(255) default '',
- si_text mediumtext ) ;
+ si_text mediumtext );
CREATE TABLE /*$wgDBprefix*/interwiki (
iw_prefix varchar(32) ,
$templates1 = $title->getTemplateLinksFrom();
$wgLang = Language::factory( 'de' );
- $page->mPreparedEdit = false; // In order to force the rerendering of the same wikitext
+ $page = WikiPage::factory( $title ); // In order to force the rerendering of the same wikitext
// We need an edit, a purge is not enough to regenerate the tables
$page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', EDIT_UPDATE, false, $user );
<?php
class DiffHistoryBlobTest extends MediaWikiTestCase {
+
protected function setUp() {
+ parent::setUp();
+
if ( !extension_loaded( 'xdiff' ) ) {
$this->markTestSkipped( 'The xdiff extension is not available' );
return;
}
- parent::setUp();
}
/**
"expected article not being created if empty"
);
-
$this->assertEdit(
'MediaWiki:January',
null,
);
}
-
/**
* Lame JSON schema validation.
*
* @param $key String Name of the key to validate in the serialized JSON
* @dataProvider provideJsonSerializedKeys
*/
- function testJsonserializeexceptionKeys($expectedKeyType, $exClass, $key) {
+ function testJsonserializeexceptionKeys( $expectedKeyType, $exClass, $key ) {
# Make sure we log a backtrace:
$this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
"JSON serialized exception is missing key '$key'"
);
$this->assertInternalType( $expectedKeyType, $json->$key,
- "JSON serialized key '$key' has type " . gettype($json->$key)
+ "JSON serialized key '$key' has type " . gettype( $json->$key )
. " (expected: $expectedKeyType)."
);
}
*/
function provideJsonSerializedKeys() {
$testCases = array();
- foreach( array( 'Exception', 'MWException' ) as $exClass ) {
+ foreach ( array( 'Exception', 'MWException' ) as $exClass ) {
$exTests = array(
array( 'string', $exClass, 'id' ),
array( 'string', $exClass, 'file' ),
# Backtrace only enabled with wgLogExceptionBacktrace = true
array( 'array', $exClass, 'backtrace' ),
);
- $testCases = array_merge($testCases, $exTests);
+ $testCases = array_merge( $testCases, $exTests );
}
return $testCases;
}
);
}
}
-
-}
\ No newline at end of file
+}
$this->assertEquals( $result, wfArrayToCgi( $array ) );
}
-
/**
- * @covers ::testWfArrayDiff2
+ * @covers ::wfArrayToCgi
*/
public function testArrayToCGI2() {
$this->assertEquals(
unlink( $wgDebugLogFile );
wfDebugMem();
- $this->assertGreaterThan( 5000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
+ $this->assertGreaterThan( 1000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
unlink( $wgDebugLogFile );
wfDebugMem( true );
- $this->assertGreaterThan( 5000000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
+ $this->assertGreaterThan( 1000000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
unlink( $wgDebugLogFile );
$wgDebugLogFile = $old_log_file;
$array = array( 'a', 'b' );
$object = new StdClass();
self::helperThrowAnException( $array, $object, $refvar );
- } catch (Exception $e) {
+ } catch ( Exception $e ) {
}
# Make sure our strack trace contains an array and an object passed to
$hasArray = $hasArray || is_array( $arg );
}
- if( $hasObject && $hasArray ) {
+ if ( $hasObject && $hasArray ) {
break;
}
}
continue;
}
foreach ( $frame['args'] as $arg ) {
- $this->assertNotInternalType( 'array', $arg);
- $this->assertNotInternalType( 'object', $arg);
+ $this->assertNotInternalType( 'array', $arg );
+ $this->assertNotInternalType( 'object', $arg );
}
}
$this->assertEquals( $matches, array( 'title' => "Lorem_ipsum_dolor_sit_amet,_consectetur_adipisicing_elit,_sed_do_eiusmod_tempor_incididunt_ut_labore_et_dolore_magna_aliqua._Ut_enim_ad_minim_veniam,_quis_nostrud_exercitation_ullamco_laboris_nisi_ut_aliquip_ex_ea_commodo_consequat._Duis_aute_irure_dolor_in_reprehenderit_in_voluptate_velit_esse_cillum_dolore_eu_fugiat_nulla_pariatur._Excepteur_sint_occaecat_cupidatat_non_proident,_sunt_in_culpa_qui_officia_deserunt_mollit_anim_id_est_laborum." ) );
}
-
/**
* Ensure that the php passed site of parameter values are not urldecoded
*/
+++ /dev/null
-<?php
-/**
- * @group Database
- */
-class RecentChangeTest extends MediaWikiTestCase {
- protected $title;
- protected $target;
- protected $user;
- protected $user_comment;
- protected $context;
-
- public function __construct() {
- parent::__construct();
-
- $this->title = Title::newFromText( 'SomeTitle' );
- $this->target = Title::newFromText( 'TestTarget' );
- $this->user = User::newFromName( 'UserName' );
-
- $this->user_comment = '<User comment about action>';
- $this->context = RequestContext::newExtraneousContext( $this->title );
- }
-
- /**
- * The testIrcMsgForAction* tests are supposed to cover the hacky
- * LogFormatter::getIRCActionText / bug 34508
- *
- * Third parties bots listen to those messages. They are clever enough
- * to fetch the i18n messages from the wiki and then analyze the IRC feed
- * to reverse engineer the $1, $2 messages.
- * One thing bots can not detect is when MediaWiki change the meaning of
- * a message like what happened when we deployed 1.19. $1 became the user
- * performing the action which broke basically all bots around.
- *
- * Should cover the following log actions (which are most commonly used by bots):
- * - block/block
- * - block/unblock
- * - delete/delete
- * - delete/restore
- * - newusers/create
- * - newusers/create2
- * - newusers/autocreate
- * - move/move
- * - move/move_redir
- * - protect/protect
- * - protect/modifyprotect
- * - protect/unprotect
- * - upload/upload
- *
- * As well as the following Auto Edit Summaries:
- * - blank
- * - replace
- * - rollback
- * - undo
- */
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypeBlock() {
- $sep = $this->context->msg( 'colon-separator' )->text();
-
- # block/block
- $this->assertIRCComment(
- $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'block', 'block',
- array(),
- $this->user_comment
- );
- # block/unblock
- $this->assertIRCComment(
- $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'block', 'unblock',
- array(),
- $this->user_comment
- );
- }
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypeDelete() {
- $sep = $this->context->msg( 'colon-separator' )->text();
-
- # delete/delete
- $this->assertIRCComment(
- $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'delete', 'delete',
- array(),
- $this->user_comment
- );
-
- # delete/restore
- $this->assertIRCComment(
- $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'delete', 'restore',
- array(),
- $this->user_comment
- );
- }
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypeNewusers() {
- $this->assertIRCComment(
- 'New user account',
- 'newusers', 'newusers',
- array()
- );
- $this->assertIRCComment(
- 'New user account',
- 'newusers', 'create',
- array()
- );
- $this->assertIRCComment(
- 'created new account SomeTitle',
- 'newusers', 'create2',
- array()
- );
- $this->assertIRCComment(
- 'Account created automatically',
- 'newusers', 'autocreate',
- array()
- );
- }
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypeMove() {
- $move_params = array(
- '4::target' => $this->target->getPrefixedText(),
- '5::noredir' => 0,
- );
- $sep = $this->context->msg( 'colon-separator' )->text();
-
- # move/move
- $this->assertIRCComment(
- $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
- 'move', 'move',
- $move_params,
- $this->user_comment
- );
-
- # move/move_redir
- $this->assertIRCComment(
- $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
- 'move', 'move_redir',
- $move_params,
- $this->user_comment
- );
- }
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypePatrol() {
- # patrol/patrol
- $this->assertIRCComment(
- $this->context->msg( 'patrol-log-line', 'revision 777', '[[SomeTitle]]', '' )->plain(),
- 'patrol', 'patrol',
- array(
- '4::curid' => '777',
- '5::previd' => '666',
- '6::auto' => 0,
- )
- );
- }
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypeProtect() {
- $protectParams = array(
- '[edit=sysop] (indefinite) [move=sysop] (indefinite)'
- );
- $sep = $this->context->msg( 'colon-separator' )->text();
-
- # protect/protect
- $this->assertIRCComment(
- $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
- 'protect', 'protect',
- $protectParams,
- $this->user_comment
- );
-
- # protect/unprotect
- $this->assertIRCComment(
- $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'protect', 'unprotect',
- array(),
- $this->user_comment
- );
-
- # protect/modify
- $this->assertIRCComment(
- $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
- 'protect', 'modify',
- $protectParams,
- $this->user_comment
- );
- }
-
- /**
- * @covers LogFormatter::getIRCActionText
- */
- public function testIrcMsgForLogTypeUpload() {
- $sep = $this->context->msg( 'colon-separator' )->text();
-
- # upload/upload
- $this->assertIRCComment(
- $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'upload', 'upload',
- array(),
- $this->user_comment
- );
-
- # upload/overwrite
- $this->assertIRCComment(
- $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
- 'upload', 'overwrite',
- array(),
- $this->user_comment
- );
- }
-
- /**
- * @todo Emulate these edits somehow and extract
- * raw edit summary from RecentChange object
- * --
- */
- /*
- public function testIrcMsgForBlankingAES() {
- // $this->context->msg( 'autosumm-blank', .. );
- }
-
- public function testIrcMsgForReplaceAES() {
- // $this->context->msg( 'autosumm-replace', .. );
- }
-
- public function testIrcMsgForRollbackAES() {
- // $this->context->msg( 'revertpage', .. );
- }
-
- public function testIrcMsgForUndoAES() {
- // $this->context->msg( 'undo-summary', .. );
- }
- */
-
- /**
- * @param $expected String Expected IRC text without colors codes
- * @param $type String Log type (move, delete, suppress, patrol ...)
- * @param $action String A log type action
- * @param $params
- * @param $comment String (optional) A comment for the log action
- * @param $msg String (optional) A message for PHPUnit :-)
- */
- protected function assertIRCComment( $expected, $type, $action, $params, $comment = null, $msg = '' ) {
-
- $logEntry = new ManualLogEntry( $type, $action );
- $logEntry->setPerformer( $this->user );
- $logEntry->setTarget( $this->title );
- if ( $comment !== null ) {
- $logEntry->setComment( $comment );
- }
- $logEntry->setParameters( $params );
-
- $formatter = LogFormatter::newFromEntry( $logEntry );
- $formatter->setContext( $this->context );
-
- // Apply the same transformation as done in IRCColourfulRCFeedFormatter::getLine for rc_comment
- $ircRcComment = IRCColourfulRCFeedFormatter::cleanupForIRC( $formatter->getIRCActionComment() );
-
- $this->assertEquals(
- $expected,
- $ircRcComment,
- $msg
- );
- }
-}
$this->assertRevEquals( $orig, $rev );
}
-
/**
* @covers Revision::newFromArchiveRow
*/
}
}
-
/**
* @covers Revision::getContentFormat
*/
$this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
}
-
public function dataGetSize() {
return array(
array( "hello world.", CONTENT_MODEL_WIKITEXT, 12 ),
$this->assertEquals( "bar", $content->getText() ); // clones should be independent
}
-
/**
* Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
*
--- /dev/null
+<?php
+
+/**
+ * @covers SpecialPage
+ *
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SpecialPageTest extends MediaWikiTestCase {
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgScript' => '/index.php',
+ 'wgContLang' => Language::factory( 'en' )
+ ) );
+ }
+
+ /**
+ * @dataProvider getTitleForProvider
+ */
+ public function testGetTitleFor( $expectedName, $name ) {
+ $title = SpecialPage::getTitleFor( $name );
+ $expected = Title::makeTitle( NS_SPECIAL, $expectedName );
+ $this->assertEquals( $expected, $title );
+ }
+
+ public function getTitleForProvider() {
+ return array(
+ array( 'UserLogin', 'Userlogin' )
+ );
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error_Notice
+ */
+ public function testInvalidGetTitleFor() {
+ $title = SpecialPage::getTitleFor( 'cat' );
+ $expected = Title::makeTitle( NS_SPECIAL, 'Cat' );
+ $this->assertEquals( $expected, $title );
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error_Notice
+ * @dataProvider getTitleForWithWarningProvider
+ */
+ public function testGetTitleForWithWarning( $expected, $name ) {
+ $title = SpecialPage::getTitleFor( $name );
+ $this->assertEquals( $expected, $title );
+ }
+
+ public function getTitleForWithWarningProvider() {
+ return array(
+ array( Title::makeTitle( NS_SPECIAL, 'UserLogin' ), 'UserLogin' )
+ );
+ }
+
+ /**
+ * @dataProvider requireLoginAnonProvider
+ */
+ public function testRequireLoginAnon( $expected, $reason, $title ) {
+ $specialPage = new SpecialPage( 'Watchlist', 'viewmywatchlist' );
+
+ $user = User::newFromId( 0 );
+ $specialPage->getContext()->setUser( $user );
+ $specialPage->getContext()->setLanguage( Language::factory( 'en' ) );
+
+ $this->setExpectedException( 'UserNotLoggedIn', $expected );
+
+ if ( $reason === 'blank' && $title === 'blank' ) {
+ $specialPage->requireLogin();
+ } else {
+ $specialPage->requireLogin( $reason, $title );
+ }
+ }
+
+ public function requireLoginAnonProvider() {
+ $lang = 'en';
+
+ $msg = wfMessage( 'loginreqlink' )->inLanguage( $lang )->escaped();
+ $loginLink = '<a href="/index.php?title=Special:UserLogin&returnto=Special%3AWatchlist"'
+ . ' title="Special:UserLogin">' . $msg . '</a>';
+
+ $expected1 = wfMessage( 'exception-nologin-text-manual' )
+ ->params( $loginLink )->inLanguage( $lang )->text();
+
+ $expected2 = wfMessage( 'about' )->inLanguage( $lang )->text();
+
+ return array(
+ array( $expected1, null, null ),
+ array( $expected2, 'about', null ),
+ array( $expected2, wfMessage( 'about' ), null ),
+ array( $expected2, 'about', 'about' ),
+ array( $expected2, 'about', wfMessage( 'about' ) ),
+ array( $expected1, 'blank', 'blank' )
+ );
+ }
+
+ public function testRequireLoginNotAnon() {
+ $specialPage = new SpecialPage( 'Watchlist', 'viewmywatchlist' );
+
+ $user = User::newFromId( 0 );
+ $user->setId( 1 );
+ $specialPage->getContext()->setUser( $user );
+
+ $specialPage->requireLogin();
+
+ // no exception thrown, logged in use can access special page
+ $this->assertTrue( true );
+ }
+
+}
*/
class StatusTest extends MediaWikiTestCase {
- public function testCanConstruct(){
+ public function testCanConstruct() {
new Status();
$this->assertTrue( true );
}
/**
* @dataProvider provideValues
* @covers Status::newGood
- * @covers Status::getValue
- * @covers Status::isGood
- * @covers Status::isOK
*/
- public function testNewGood( $value = null ){
+ public function testNewGood( $value = null ) {
$status = Status::newGood( $value );
$this->assertTrue( $status->isGood() );
$this->assertTrue( $status->isOK() );
$this->assertEquals( $value, $status->getValue() );
}
- public static function provideValues(){
+ public static function provideValues() {
return array(
array(),
array( 'foo' ),
/**
* @covers Status::newFatal
- * @covers Status::isGood
- * @covers Status::isOK
- * @covers Status::getMessage
*/
public function testNewFatalWithMessage() {
$message = $this->getMockBuilder( 'Message' )
/**
* @covers Status::newFatal
- * @covers Status::isGood
- * @covers Status::isOK
- * @covers Status::getMessage
*/
public function testNewFatalWithString() {
$message = 'foo';
$status = Status::newFatal( $message );
$this->assertFalse( $status->isGood() );
$this->assertFalse( $status->isOK() );
- $newMessage = $status->getMessage();
- $this->assertEquals( $message, $newMessage->getKey() );
+ $this->assertEquals( $message, $status->getMessage()->getKey() );
}
/**
* @dataProvider provideSetResult
- * @covers Status::getValue
- * @covers Status::isOK
+ * @covers Status::setResult
*/
public function testSetResult( $ok, $value = null ) {
$status = new Status();
);
}
+ /**
+ * @dataProvider provideIsOk
+ * @covers Status::isOk
+ */
+ public function testIsOk( $ok ) {
+ $status = new Status();
+ $status->ok = $ok;
+ $this->assertEquals( $ok, $status->isOK() );
+ }
+
+ public static function provideIsOk() {
+ return array(
+ array( true ),
+ array( false ),
+ );
+ }
+
+ /**
+ * @covers Status::getValue
+ */
+ public function testGetValue() {
+ $status = new Status();
+ $status->value = 'foobar';
+ $this->assertEquals( 'foobar', $status->getValue() );
+ }
+
+ /**
+ * @dataProvider provideIsGood
+ * @covers Status::isGood
+ */
+ public function testIsGood( $ok, $errors, $expected ) {
+ $status = new Status();
+ $status->ok = $ok;
+ $status->errors = $errors;
+ $this->assertEquals( $expected, $status->isGood() );
+ }
+
+ public static function provideIsGood() {
+ return array(
+ array( true, array(), true ),
+ array( true, array( 'foo' ), false ),
+ array( false, array(), false ),
+ array( false, array( 'foo' ), false ),
+ );
+ }
+
/**
* @dataProvider provideMockMessageDetails
* @covers Status::warning
$status = new Status();
$messages = $this->getMockMessages( $mockDetails );
- foreach( $messages as $message ){
+ foreach ( $messages as $message ) {
$status->warning( $message );
}
$warnings = $status->getWarningsArray();
$this->assertEquals( count( $messages ), count( $warnings ) );
- foreach( $messages as $key => $message ) {
+ foreach ( $messages as $key => $message ) {
$expectedArray = array_merge( array( $message->getKey() ), $message->getParams() );
$this->assertEquals( $warnings[$key], $expectedArray );
}
$status = new Status();
$messages = $this->getMockMessages( $mockDetails );
- foreach( $messages as $message ){
+ foreach ( $messages as $message ) {
$status->error( $message );
}
$errors = $status->getErrorsArray();
$this->assertEquals( count( $messages ), count( $errors ) );
- foreach( $messages as $key => $message ) {
+ foreach ( $messages as $key => $message ) {
$expectedArray = array_merge( array( $message->getKey() ), $message->getParams() );
$this->assertEquals( $errors[$key], $expectedArray );
}
* @param array $messageDetails eg. array( 'KEY' => array(/PARAMS/) )
* @return Message[]
*/
- protected function getMockMessages( $messageDetails ){
+ protected function getMockMessages( $messageDetails ) {
$messages = array();
- foreach( $messageDetails as $key => $paramsArray ){
+ foreach ( $messageDetails as $key => $paramsArray ) {
$messages[] = $this->getMockMessage( $key, $paramsArray );
}
return $messages;
}
- public static function provideMockMessageDetails(){
+ public static function provideMockMessageDetails() {
return array(
array( array( 'key1' => array( 'foo' => 'bar' ) ) ),
array( array( 'key1' => array( 'foo' => 'bar' ), 'key2' => array( 'foo2' => 'bar2' ) ) ),
* @covers Status::merge
* @todo test merge with $overwriteValue true
*/
- public function testMerge(){
+ public function testMerge() {
$status1 = new Status();
$status2 = new Status();
$message1 = $this->getMockMessage( 'warn1' );
$status->fatal( 'bad' );
$this->assertTrue( $status->hasMessage( 'bad' ) );
$this->assertFalse( $status->hasMessage( 'good' ) );
+ }
+ /**
+ * @dataProvider provideCleanParams
+ * @covers Status::cleanParams
+ */
+ public function testCleanParams( $cleanCallback, $params, $expected ) {
+ $method = new ReflectionMethod( 'Status', 'cleanParams' );
+ $method->setAccessible( true );
+ $status = new Status();
+ $status->cleanCallback = $cleanCallback;
+
+ $this->assertEquals( $expected, $method->invoke( $status, $params ) );
+ }
+
+ /**
+ * @todo test cleanParams with a callback
+ */
+ public static function provideCleanParams() {
+ return array(
+ array( false, array( 'foo' => 'bar' ), array( 'foo' => 'bar' ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideGetWikiText
+ * @covers Status::getWikiText
+ * @todo test long and short context messages generated through this method
+ * this can not really be done now due to use of wfMessage()->plain()
+ * It is possible to mock such methods but only if namespaces are used
+ */
+ public function testGetWikiText( Status $status, $expected ) {
+ $this->assertEquals( $expected, $status->getWikiText() );
+ }
+
+ /**
+ * @return array of arrays with values;
+ * 0 => status object
+ * 1 => expected string (with no context)
+ */
+ public static function provideGetWikiText() {
+ $testCases = array();
+
+ $testCases[ 'GoodStatus' ] = array(
+ new Status(),
+ "Internal error: Status::getWikiText called for a good result, this is incorrect\n",
+ );
+
+ $status = new Status();
+ $status->ok = false;
+ $testCases[ 'GoodButNoError' ] = array(
+ $status,
+ "Internal error: Status::getWikiText: Invalid result object: no error text but not OK\n",
+ );
+
+ $status = new Status();
+ $status->warning( 'fooBar!' );
+ $testCases[ '1StringWarning' ] = array(
+ $status,
+ "<fooBar!>",
+ );
+
+ $status = new Status();
+ $status->warning( 'fooBar!' );
+ $status->warning( 'fooBar2!' );
+ $testCases[ '2StringWarnings' ] = array(
+ $status,
+ "* <fooBar!>\n* <fooBar2!>\n",
+ );
+
+ $status = new Status();
+ $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
+ $testCases[ '1MessageWarning' ] = array(
+ $status,
+ "<fooBar!>",
+ );
+
+ $status = new Status();
+ $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
+ $status->warning( new Message( 'fooBar2!' ) );
+ $testCases[ '2MessageWarnings' ] = array(
+ $status,
+ "* <fooBar!>\n* <fooBar2!>\n",
+ );
+
+ return $testCases;
}
- //todo test cleanParams
- //todo test getWikiText
//todo test getMessage
//todo test getErrorMessage
//todo test getHTML
//todo test getStatusArray
//todo test getErrorsByType
//todo test replaceMessage
- //todo test replaceMessage
}
date_default_timezone_set( $localZone );
$this->title = Title::makeTitle( NS_MAIN, "Main Page" );
- if ( !isset( $this->userUser ) || !( $this->userUser instanceOf User ) ) {
+ if ( !isset( $this->userUser ) || !( $this->userUser instanceof User ) ) {
$this->userUser = User::newFromName( $this->userName );
if ( !$this->userUser->getID() ) {
UserMailer::quotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) );
}
-}
\ No newline at end of file
+}
);
}
-
/**
* @dataProvider provideIsCountable
* @covers WikiPage::isCountable
more stuff
";
-
public function dataReplaceSection() {
//NOTE: assume the Help namespace to contain wikitext
return array(
$this->assertEquals( $value, $obj->value );
}
- public function provideConstruction(){
+ public function provideConstruction() {
return array(
array( null ),
array( '' ),
$this->assertEquals( $data, $page->getContent()->serialize() );
}
+ /**
+ * @return array
+ */
public static function provideEditAppend() {
return array(
array( #0: append
'text' => "==section 1==\nnew content 1",
) );
$this->assertEquals( 'Success', $re['edit']['result'] );
- $newtext = WikiPage::factory( Title::newFromText( $name) )->getContent( Revision::RAW )->getNativeData();
+ $newtext = WikiPage::factory( Title::newFromText( $name ) )->getContent( Revision::RAW )->getNativeData();
$this->assertEquals( $newtext, "==section 1==\nnew content 1\n\n==section 2==\ncontent2" );
// Test that we raise a 'nosuchsection' error
"no edit conflict expected here" );
}
+ /**
+ * @param WikiPage $page
+ * @param string|int $timestamp
+ */
protected function forceRevisionDate( WikiPage $page, $timestamp ) {
$dbw = wfGetDB( DB_MASTER );
class ApiOptionsTest extends MediaWikiLangTestCase {
/** @var PHPUnit_Framework_MockObject_MockObject */
- private $mUserMock ;
+ private $mUserMock;
/** @var ApiOptions */
private $mTested;
private $mSession;
return true;
}
+ /**
+ * @param IContextSource $context
+ * @param array|null $options
+ *
+ * @return array
+ */
public function getOptionKinds( IContextSource $context, $options = null ) {
// Match with above.
$kinds = array(
/**
* Helper function -- remove files and associated articles by Title
- * @param $title Title: title to be removed
+ *
+ * @param Title $title title to be removed
+ *
+ * @return bool
*/
public function deleteFileByTitle( $title ) {
if ( $title->exists() ) {
/**
* Helper function -- remove files and associated articles with a particular filename
- * @param $fileName String: filename to be removed
+ *
+ * @param string $fileName filename to be removed
+ *
+ * @return bool
*/
public function deleteFileByFileName( $fileName ) {
return $this->deleteFileByTitle( Title::newFromText( $fileName, NS_FILE ) );
/**
* Helper function -- given a file on the filesystem, find matching content in the db (and associated articles) and remove them.
- * @param $filePath String: path to file on the filesystem
+ *
+ * @param string $filePath path to file on the filesystem
+ *
+ * @return bool
*/
public function deleteFileByContent( $filePath ) {
$hash = FSFile::getSha1Base36FromPath( $filePath );
/**
* Fake an upload by dumping the file into temp space, and adding info to $_FILES.
* (This is what PHP would normally do).
- * @param $fieldName String: name this would have in the upload form
- * @param $fileName String: name to title this
- * @param $type String: mime type
- * @param $filePath String: path where to find file contents
+ *
+ * @param string $fieldName name this would have in the upload form
+ * @param string $fileName name to title this
+ * @param string $type mime type
+ * @param string $filePath path where to find file contents
+ *
+ * @throws Exception
+ * @return bool
*/
function fakeUploadFile( $fieldName, $fileName, $type, $filePath ) {
$tmpName = tempnam( wfTempDir(), "" );
return $context;
}
-}
\ No newline at end of file
+}
/**
* @group API
* @group Database
+ * @group medium
*/
/**
$this->assertTrue( $exception, "Got exception" );
}
-
/**
* @depends testLogin
*/
$this->markTestIncomplete( $e->getMessage() );
}
+ /** @var array $filePaths */
$filePath = $filePaths[0];
$fileSize = filesize( $filePath );
$fileName = basename( $filePath );
unlink( $filePath );
}
-
/**
* @depends testLogin
*/
unlink( $filePath );
}
-
/**
* @depends testLogin
*/
}
// we'll reuse this filename
+ /** @var array $filePaths */
$fileName = basename( $filePaths[0] );
// clear any other files with the same name
unlink( $filePaths[1] );
}
-
/**
* @depends testLogin
*/
$this->markTestIncomplete( $e->getMessage() );
}
+ /** @var array $filePaths */
$fileNames[0] = basename( $filePaths[0] );
$fileNames[1] = "SameContentAs" . $fileNames[0];
$this->markTestIncomplete( $e->getMessage() );
}
+ /** @var array $filePaths */
$filePath = $filePaths[0];
$fileSize = filesize( $filePath );
$fileName = basename( $filePath );
'sessionkey' => null,
);
}
-}
\ No newline at end of file
+}
)
);
-
public function __construct( $options = array() ) {
foreach ( array( 'dictionaryFile', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'shapesToDraw' ) as $property ) {
if ( isset( $options[$property] ) ) {
return $filenames;
}
-
/**
* Figure out how we write images. This is a factor of both format and the local system
- * @param $format (a typical extension like 'svg', 'jpg', etc.)
+ *
+ * @param string $format (a typical extension like 'svg', 'jpg', etc.)
+ *
+ * @throws Exception
+ * @return string
*/
function getImageWriteMethod( $format ) {
global $wgUseImageMagick, $wgImageMagickConvertCommand;
return $filenames;
}
-
/**
* Generate data representing an image of random size (within limits),
* consisting of randomly colored and sized upward pointing triangles against a random background color
/**
* Based on image specification, write a very simple SVG file to disk.
* Ignores the background spec because transparency is cool. :)
- * @param $spec: spec describing background and shapes to draw
- * @param $format: file format to write (which is obviously always svg here)
- * @param $filename: filename to write to
+ *
+ * @param array $spec spec describing background and shapes to draw
+ * @param string $format file format to write (which is obviously always svg here)
+ * @param string $filename filename to write to
+ *
+ * @throws Exception
*/
public function writeSvg( $spec, $format, $filename ) {
$svg = new SimpleXmlElement( '<svg/>' );
/**
* Based on an image specification, write such an image to disk, using Imagick PHP extension
- * @param $spec: spec describing background and circles to draw
- * @param $format: file format to write
- * @param $filename: filename to write to
+ * @param array $spec spec describing background and circles to draw
+ * @param string $format file format to write
+ * @param string $filename filename to write to
*/
public function writeImageWithApi( $spec, $format, $filename ) {
// this is a hack because I can't get setImageOrientation() to work. See below.
* This is used when simulating a rotated image capture with Exif orientation
* @param $spec Object returned by getImageSpec
* @param $matrix 2x2 transformation matrix
- * @return transformed Spec
+ * @return array transformed Spec
*/
private static function rotateImageSpec( &$spec, $matrix ) {
$tSpec = array();
);
}
-
/**
* Based on an image specification, write such an image to disk, using the command line ImageMagick program ('convert').
*
* -draw 'fill rgb(99,123,231) circle 59,39 56,57' \
* -draw 'fill rgb(240,12,32) circle 50,21 50,3' filename.png
*
- * @param $spec: spec describing background and shapes to draw
- * @param $format: file format to write (unused by this method but kept so it has the same signature as writeImageWithApi)
- * @param $filename: filename to write to
+ * @param array $spec spec describing background and shapes to draw
+ * @param string $format file format to write (unused by this method but kept so it has the same signature as
+ * writeImageWithApi)
+ * @param string $filename filename to write to
+ *
+ * @return bool
*/
public function writeImageWithCommandLine( $spec, $format, $filename ) {
global $wgImageMagickConvertCommand;
/**
* Generate a string of random colors for ImageMagick or SVG, like "rgb(12, 37, 98)"
*
- * @return {String}
+ * @return string
*/
public function getRandomColor() {
$components = array();
*
* Will throw exception if the file could not be read or if it had fewer lines than requested.
*
- * @param $number_desired Integer: number of lines desired
- * @return Array: of exactly n elements, drawn randomly from lines the file
+ * @param int $number_desired number of lines desired
+ *
+ * @throws Exception
+ * @return array of exactly n elements, drawn randomly from lines the file
*/
private function getRandomLines( $number_desired ) {
$filepath = $this->dictionaryFile;
}
$this->user->saveSettings();
}
-}
\ No newline at end of file
+}
<?php
/**
- *
*
* Created on Feb 6, 2013
*
* @covers ApiQuery
*/
class ApiQueryBasicTest extends ApiQueryTestBase {
+ protected $exceptionFromAddDBData;
+
/**
* Create a set of pages. These must not change, otherwise the tests might give wrong results.
* @see MediaWikiTestCase::addDBData()
) )
);
+ // Although this appears to have no use it is used by testLists()
private static $allcategories = array(
array( 'list' => 'allcategories', 'acprefix' => 'AQBT-' ),
array( 'allcategories' => array(
$this->check( self::$alllinks );
$this->check( self::$alltransclusions );
// This test is temporarily disabled until a sqlite bug is fixed
+ // Confirmed still broken 15-nov-2013
// $this->check( self::$allcategories );
$this->check( self::$backlinks );
$this->check( self::$embeddedin );
/**
* Recursively compare arrays, ignoring mismatches in numeric key and pageids.
- * @param $expected array expected values
- * @param $result array returned values
+ *
+ * @param $expectedArray array expected values
+ * @param $resultArray array returned values
*/
- private function assertQueryResults( $expected, $result ) {
- reset( $expected );
- reset( $result );
+ private function assertQueryResults( $expectedArray, $resultArray ) {
+ reset( $expectedArray );
+ reset( $resultArray );
while ( true ) {
- $e = each( $expected );
- $r = each( $result );
+ $expectedValue = each( $expectedArray );
+ $resultValue = each( $resultArray );
// If either of the arrays is shorter, abort. If both are done, success.
- $this->assertEquals( (bool)$e, (bool)$r );
- if ( !$e ) {
+ $this->assertEquals( (bool)$expectedValue, (bool)$resultValue );
+ if ( !$expectedValue ) {
break; // done
}
// continue only if keys are identical or both keys are numeric
- $this->assertTrue( $e['key'] === $r['key'] || ( is_numeric( $e['key'] ) && is_numeric( $r['key'] ) ) );
+ $this->assertTrue( $expectedValue['key'] === $resultValue['key'] || ( is_numeric( $expectedValue['key'] ) && is_numeric( $resultValue['key'] ) ) );
// don't compare pageids
- if ( $e['key'] !== 'pageid' ) {
+ if ( $expectedValue['key'] !== 'pageid' ) {
// If values are arrays, compare recursively, otherwise compare with ===
- if ( is_array( $e['value'] ) && is_array( $r['value'] ) ) {
- $this->assertQueryResults( $e['value'], $r['value'] );
+ if ( is_array( $expectedValue['value'] ) && is_array( $resultValue['value'] ) ) {
+ $this->assertQueryResults( $expectedValue['value'], $resultValue['value'] );
} else {
- $this->assertEquals( $e['value'], $r['value'] );
+ $this->assertEquals( $expectedValue['value'], $resultValue['value'] );
}
}
}
* @covers ApiQuery
*/
class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
+ protected $exceptionFromAddDBData;
+
/**
* Create a set of pages. These must not change, otherwise the tests might give wrong results.
* @see MediaWikiTestCase::addDBData()
* @covers ApiQuery
*/
class ApiQueryContinueTest extends ApiQueryContinueTestBase {
+ protected $exceptionFromAddDBData;
+
/**
* Create a set of pages. These must not change, otherwise the tests might give wrong results.
* @see MediaWikiTestCase::addDBData()
} while ( true );
}
+ /**
+ * @param array $data
+ */
private function printResult( $data ) {
$q = $data['query'];
$print = array();
--- /dev/null
+<?php
+/**
+ * @group Database
+ */
+class RecentChangeTest extends MediaWikiTestCase {
+ protected $title;
+ protected $target;
+ protected $user;
+ protected $user_comment;
+ protected $context;
+
+ public function __construct() {
+ parent::__construct();
+
+ $this->title = Title::newFromText( 'SomeTitle' );
+ $this->target = Title::newFromText( 'TestTarget' );
+ $this->user = User::newFromName( 'UserName' );
+
+ $this->user_comment = '<User comment about action>';
+ $this->context = RequestContext::newExtraneousContext( $this->title );
+ }
+
+ /**
+ * The testIrcMsgForAction* tests are supposed to cover the hacky
+ * LogFormatter::getIRCActionText / bug 34508
+ *
+ * Third parties bots listen to those messages. They are clever enough
+ * to fetch the i18n messages from the wiki and then analyze the IRC feed
+ * to reverse engineer the $1, $2 messages.
+ * One thing bots can not detect is when MediaWiki change the meaning of
+ * a message like what happened when we deployed 1.19. $1 became the user
+ * performing the action which broke basically all bots around.
+ *
+ * Should cover the following log actions (which are most commonly used by bots):
+ * - block/block
+ * - block/unblock
+ * - delete/delete
+ * - delete/restore
+ * - newusers/create
+ * - newusers/create2
+ * - newusers/autocreate
+ * - move/move
+ * - move/move_redir
+ * - protect/protect
+ * - protect/modifyprotect
+ * - protect/unprotect
+ * - upload/upload
+ *
+ * As well as the following Auto Edit Summaries:
+ * - blank
+ * - replace
+ * - rollback
+ * - undo
+ */
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeBlock() {
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # block/block
+ $this->assertIRCComment(
+ $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'block', 'block',
+ array(),
+ $this->user_comment
+ );
+ # block/unblock
+ $this->assertIRCComment(
+ $this->context->msg( 'unblocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'block', 'unblock',
+ array(),
+ $this->user_comment
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeDelete() {
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # delete/delete
+ $this->assertIRCComment(
+ $this->context->msg( 'deletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'delete', 'delete',
+ array(),
+ $this->user_comment
+ );
+
+ # delete/restore
+ $this->assertIRCComment(
+ $this->context->msg( 'undeletedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'delete', 'restore',
+ array(),
+ $this->user_comment
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeNewusers() {
+ $this->assertIRCComment(
+ 'New user account',
+ 'newusers', 'newusers',
+ array()
+ );
+ $this->assertIRCComment(
+ 'New user account',
+ 'newusers', 'create',
+ array()
+ );
+ $this->assertIRCComment(
+ 'created new account SomeTitle',
+ 'newusers', 'create2',
+ array()
+ );
+ $this->assertIRCComment(
+ 'Account created automatically',
+ 'newusers', 'autocreate',
+ array()
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeMove() {
+ $move_params = array(
+ '4::target' => $this->target->getPrefixedText(),
+ '5::noredir' => 0,
+ );
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # move/move
+ $this->assertIRCComment(
+ $this->context->msg( '1movedto2', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
+ 'move', 'move',
+ $move_params,
+ $this->user_comment
+ );
+
+ # move/move_redir
+ $this->assertIRCComment(
+ $this->context->msg( '1movedto2_redir', 'SomeTitle', 'TestTarget' )->plain() . $sep . $this->user_comment,
+ 'move', 'move_redir',
+ $move_params,
+ $this->user_comment
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypePatrol() {
+ # patrol/patrol
+ $this->assertIRCComment(
+ $this->context->msg( 'patrol-log-line', 'revision 777', '[[SomeTitle]]', '' )->plain(),
+ 'patrol', 'patrol',
+ array(
+ '4::curid' => '777',
+ '5::previd' => '666',
+ '6::auto' => 0,
+ )
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeProtect() {
+ $protectParams = array(
+ '[edit=sysop] (indefinite) [move=sysop] (indefinite)'
+ );
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # protect/protect
+ $this->assertIRCComment(
+ $this->context->msg( 'protectedarticle', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
+ 'protect', 'protect',
+ $protectParams,
+ $this->user_comment
+ );
+
+ # protect/unprotect
+ $this->assertIRCComment(
+ $this->context->msg( 'unprotectedarticle', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'protect', 'unprotect',
+ array(),
+ $this->user_comment
+ );
+
+ # protect/modify
+ $this->assertIRCComment(
+ $this->context->msg( 'modifiedarticleprotection', 'SomeTitle ' . $protectParams[0] )->plain() . $sep . $this->user_comment,
+ 'protect', 'modify',
+ $protectParams,
+ $this->user_comment
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeUpload() {
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # upload/upload
+ $this->assertIRCComment(
+ $this->context->msg( 'uploadedimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'upload', 'upload',
+ array(),
+ $this->user_comment
+ );
+
+ # upload/overwrite
+ $this->assertIRCComment(
+ $this->context->msg( 'overwroteimage', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'upload', 'overwrite',
+ array(),
+ $this->user_comment
+ );
+ }
+
+ /**
+ * @todo Emulate these edits somehow and extract
+ * raw edit summary from RecentChange object
+ * --
+ */
+ /*
+ public function testIrcMsgForBlankingAES() {
+ // $this->context->msg( 'autosumm-blank', .. );
+ }
+
+ public function testIrcMsgForReplaceAES() {
+ // $this->context->msg( 'autosumm-replace', .. );
+ }
+
+ public function testIrcMsgForRollbackAES() {
+ // $this->context->msg( 'revertpage', .. );
+ }
+
+ public function testIrcMsgForUndoAES() {
+ // $this->context->msg( 'undo-summary', .. );
+ }
+ */
+
+ /**
+ * @param $expected String Expected IRC text without colors codes
+ * @param $type String Log type (move, delete, suppress, patrol ...)
+ * @param $action String A log type action
+ * @param $params
+ * @param $comment String (optional) A comment for the log action
+ * @param $msg String (optional) A message for PHPUnit :-)
+ */
+ protected function assertIRCComment( $expected, $type, $action, $params, $comment = null, $msg = '' ) {
+
+ $logEntry = new ManualLogEntry( $type, $action );
+ $logEntry->setPerformer( $this->user );
+ $logEntry->setTarget( $this->title );
+ if ( $comment !== null ) {
+ $logEntry->setComment( $comment );
+ }
+ $logEntry->setParameters( $params );
+
+ $formatter = LogFormatter::newFromEntry( $logEntry );
+ $formatter->setContext( $this->context );
+
+ // Apply the same transformation as done in IRCColourfulRCFeedFormatter::getLine for rc_comment
+ $ircRcComment = IRCColourfulRCFeedFormatter::cleanupForIRC( $formatter->getIRCActionComment() );
+
+ $this->assertEquals(
+ $expected,
+ $ircRcComment,
+ $msg
+ );
+ }
+}
global $wgContLang;
$wgContLang->resetNamespaces();
+ MagicWord::clearCache();
+
if ( is_string( $title ) ) {
$title = Title::newFromText( $title );
}
// From DatabaseMysql
protected function mysqlConnect( $realServer ) {}
+ protected function mysqlSetCharset( $charset ) {}
protected function mysqlFreeResult( $res ) {}
protected function mysqlFetchObject( $res ) {}
protected function mysqlFetchArray( $res ) {}
public function testAddIdentifierQuotes( $expected, $in ) {
$db = new FakeDatabaseMysqlBase();
$quoted = $db->addIdentifierQuotes( $in );
- $this->assertEquals($expected, $quoted);
+ $this->assertEquals( $expected, $quoted );
}
-
/**
* Feeds testAddIdentifierQuotes
*
);
}
- private static function createUnicodeString($str) {
+ private static function createUnicodeString( $str ) {
return json_decode( '"' . $str . '"' );
}
$db = $this->getMockForViews();
// The first call populate an internal cache of views
- $this->assertEquals( array( 'view1', 'view2', 'myview'),
+ $this->assertEquals( array( 'view1', 'view2', 'myview' ),
$db->listViews() );
- $this->assertEquals( array( 'view1', 'view2', 'myview'),
+ $this->assertEquals( array( 'view1', 'view2', 'myview' ),
$db->listViews() );
// Prefix filtering
$db->listViews( 'my' ) );
$this->assertEquals( array(),
$db->listViews( 'UNUSED_PREFIX' ) );
- $this->assertEquals( array( 'view1', 'view2', 'myview'),
+ $this->assertEquals( array( 'view1', 'view2', 'myview' ),
$db->listViews( '' ) );
}
function testIsView( $isView, $viewName ) {
$db = $this->getMockForViews();
- switch( $isView ) {
+ switch ( $isView ) {
case true:
$this->assertTrue( $db->isView( $viewName ),
"$viewName should be considered a view" );
}
if ( $this->db->getType() === 'oracle' ) {
- return strtoupper($database . $quote . $prefix . $table);
+ return strtoupper( $database . $quote . $prefix . $table );
} else {
return $database . $quote . $prefix . $table . $quote;
}
class MWDebugTest extends MediaWikiTestCase {
-
protected function setUp() {
parent::setUp();
// Make sure MWDebug class is enabled
$strings = array( "it is a kitten", "two kittens", "three kittens", "four kittens" );
$revisions = array();
- foreach( $strings as $string ) {
+ foreach ( $strings as $string ) {
$content = ContentHandler::makeContent( $string, $title );
$page->doEditContent( $content, 'edit page' );
$revisions[] = $page->getLatest();
public function testMapDiffPrevNext() {
$cases = $this->getMapDiffPrevNextCases();
- foreach( $cases as $case ) {
+ foreach ( $cases as $case ) {
list( $expected, $old, $new, $message ) = $case;
$diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
public function testLoadRevisionData() {
$cases = $this->getLoadRevisionDataCases();
- foreach( $cases as $case ) {
+ foreach ( $cases as $case ) {
list( $expectedOld, $expectedNew, $old, $new, $message ) = $case;
$diffEngine = new DifferenceEngine( $this->context, $old, $new, 2, true, false );
);
}
-
const TEST_WIDTH = 100;
const TEST_HEIGHT = 200;
$this->mediaPath = __DIR__ . '/../../data/media/';
-
-
$this->setMwGlobals( 'wgShowEXIF', true );
}
public function getPath() {
return '';
}
-}
\ No newline at end of file
+}
public static function provideFlattenArray() {
return array(
- array (
- array(1 ,2 ,3), 'ul', false, false,
+ array(
+ array( 1, 2, 3 ), 'ul', false, false,
"<ul><li>1</li>\n<li>2</li>\n<li>3</li></ul>",
),
- array (
- array(1 ,2 ,3), 'ol', false, false,
+ array(
+ array( 1, 2, 3 ), 'ol', false, false,
"<ol><li>1</li>\n<li>2</li>\n<li>3</li></ol>",
),
- array (
- array(1 ,2 ,3), 'ul', true, false,
+ array(
+ array( 1, 2, 3 ), 'ul', true, false,
"\n*1\n*2\n*3",
),
- array (
- array(1 ,2 ,3), 'ol', true, false,
+ array(
+ array( 1, 2, 3 ), 'ol', true, false,
"\n#1\n#2\n#3",
),
// TODO: more test cases
$this->assertEquals( $expected, $res['XMP'] );
}
-
public function testIPTCHashComparisionNoHash() {
$segments = JpegMetadataExtractor::segmentSplitter( $this->filePath . 'jpeg-xmp-psir.jpg' );
$res = JpegMetadataExtractor::doPSIR( $segments['PSIR'][0] );
$this->filePath = __DIR__ . '/../../data/media/';
-
$this->setMwGlobals( 'wgShowEXIF', true );
$this->backend = new FSFileBackend( array(
$this->assertEquals( 1, $meta['bitDepth'] );
}
-
public function testPngIndexColour() {
$meta = PNGMetadataExtractor::getMetadata( $this->filePath .
'Png-native-test.png' );
array( "<meta foo=\"bar\" />\nfoo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ),
);
}
-}
\ No newline at end of file
+}
parent::tearDown();
}
-
/**
* First checks the return code
* of UploadBase::getTitle() and then the actual returned title
'Wrong CD start disk error' );
}
-
public function testCentralDirectoryGap() {
$this->readZipAssertError( 'cd-gap.zip', 'zip-bad',
'CD gap error' );
$this->assertConverted( $text, 'sr-ec', $msg );
}
-
/** Wrapper for converter::convertTo() method*/
protected function convertTo( $text, $variant ) {
return $this->getLang()
$this->getLang()->truncate( "123456789", -5, 'XXXXXXXXXXXXXXX' ),
'truncate suffix, large ellipsis'
);
+ $this->assertEquals(
+ "123XXX",
+ $this->getLang()->truncate( "123 ", 9, 'XXX' ),
+ 'truncate prefix, with spaces'
+ );
+ $this->assertEquals(
+ "12345XXX",
+ $this->getLang()->truncate( "12345 8", 11, 'XXX' ),
+ 'truncate prefix, with spaces and non-space ending'
+ );
+ $this->assertEquals(
+ "XXX234",
+ $this->getLang()->truncate( "1 234", -8, 'XXX' ),
+ 'truncate suffix, with spaces'
+ );
+ $this->assertEquals(
+ "12345XXX",
+ $this->getLang()->truncate( "1234567890", 5, 'XXX', false ),
+ 'truncate without adjustment'
+ );
}
/**
);
}
-
/**
* @dataProvider provideFormatDuration
* @covers Language::formatDuration
$this->assertConverted( $text, 'uz-cyrl', $msg );
}
-
/** Wrapper for converter::convertTo() method*/
protected function convertTo( $text, $variant ) {
return $this->getLang()->mConverter->convertTo( $text, $variant );
function validTestCases() {
$tests = array(
- # expected, number, rule, comment
+ # expected, rule, number, comment
array( 0, 'n is 1', 1, 'integer number and is' ),
array( 0, 'n is 1', "1", 'string integer number and is' ),
array( 0, 'n is 1', 1.0, 'float number and is' ),
throw new MWException( "Could not determine revision id (" . $status->getWikiText() . ")" );
}
-
/**
* gunzips the given file and stores the result in the original file name
*
}
}
-
/**
* Step the current XML reader until node end of given name is found.
*
}
}
-
/**
* Asserts that the xml reader is at an element of given tag that contains a given text,
* and skips over the element.
$this->testCase = $testCase;
}
-
// --- Making protected functions visible for test
public function output( $out, $channel = null ) {
return call_user_func_array( array( "parent", __FUNCTION__ ), func_get_args() );
}
-
// --- Requirements for getting instance of abstract class
public function execute() {
*/
class MaintenanceTest extends MediaWikiTestCase {
-
/**
* The main Maintenance instance that is used for testing.
*
*/
private $m;
-
protected function setUp() {
parent::setUp();
$this->m = new MaintenanceFixup( $this );
parent::tearDown();
}
-
/**
* asserts the output before and after simulating shutdown
*
$this->expectOutputString( $postShutdownOutput );
}
-
// Although the following tests do not seem to be too consistent (compare for
// example the newlines within the test.*StringString tests, or the
// test.*Intermittent.* tests), the objective of these tests is not to describe
$this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
}
-
/**
* Constructs a temporary file that can be used for prefetching
*
$this->checkpointHelper( "gzip" );
}
-
/**
* Creates a stub file that is used for testing the text pass of dumps
*
*/
class BackupDumperLoggerTest extends DumpTestCase {
-
// We'll add several log entries and users for this test. The following
// variables hold the corresponding ids.
private $userId1, $userId2;
}
}
-
/**
* asserts that the xml reader is at the beginning of a log entry and skips over
* it while analyzing it.
$this->assertDumpEnd();
}
-
function testXmlDumpsBackupUseCase() {
// xmldumps-backup typically performs a single dump that that writes
// out three files
*/
private $mockInvocations = array( 'getStdin' => 0 );
-
/**
* Data for the fake stdin
*
private $textId4;
private $textId5;
-
/**
* @var Exception|null As the current MediaWikiTestCase::run is not
* robust enough to recover from thrown exceptions directly, we cannot
throw new MWException( "Could not determine text id" );
}
-
function addDBData() {
$this->tablesUsed[] = 'page';
$this->tablesUsed[] = 'revision';
}
}
-
protected function setUp() {
parent::setUp();
$this->fetchText = new SemiMockedFetchText();
}
-
/**
* Helper to relate FetchText's input and output
*/
$this->expectOutputString( $expectedOutput );
}
-
// Instead of the following functions, a data provider would be great.
// However, as data providers are evaluated /before/ addDBData, a data
// provider would not know the required ids.
<?php
/**
- * Fake handler for images.
+ * Fake handler for Bitmap images.
*
* 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
function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
return MockImageHandler::doFakeTransform( $this, $image, $dstPath, $dstUrl, $params, $flags );
}
+
function doClientImage( $image, $scalerParams ) {
return $this->getClientScalingThumbnailImage( $image, $scalerParams );
}
}
-class MockSvgHandler extends SvgHandler {
- function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
- return MockImageHandler::doFakeTransform( $this, $image, $dstPath, $dstUrl, $params, $flags );
- }
-}
-/**
- * Mock handler for images.
- *
- * This is really intended for unit testing.
- *
- * @ingroup Media
- */
-class MockImageHandler {
-
- /**
- * Override BitmapHandler::doTransform() making sure we do not generate
- * a thumbnail at all. That is merely returning a ThumbnailImage that
- * will be consumed by the unit test. There is no need to create a real
- * thumbnail on the filesystem.
- */
- static function doFakeTransform( $that, $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
- # Example of what we receive:
- # $image: LocalFile
- # $dstPath: /tmp/transform_7d0a7a2f1a09-1.jpg
- # $dstUrl : http://example.com/images/thumb/0/09/Bad.jpg/320px-Bad.jpg
- # $params: width: 320, descriptionUrl http://trunk.dev/wiki/File:Bad.jpg
-
- $that->normaliseParams( $image, $params );
-
- $scalerParams = array(
- # The size to which the image will be resized
- 'physicalWidth' => $params['physicalWidth'],
- 'physicalHeight' => $params['physicalHeight'],
- 'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
- # The size of the image on the page
- 'clientWidth' => $params['width'],
- 'clientHeight' => $params['height'],
- # Comment as will be added to the EXIF of the thumbnail
- 'comment' => isset( $params['descriptionUrl'] ) ?
- "File source: {$params['descriptionUrl']}" : '',
- # Properties of the original image
- 'srcWidth' => $image->getWidth(),
- 'srcHeight' => $image->getHeight(),
- 'mimeType' => $image->getMimeType(),
- 'dstPath' => $dstPath,
- 'dstUrl' => $dstUrl,
- );
-
- # In some cases, we do not bother generating a thumbnail.
- if ( !$image->mustRender() &&
- $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
- && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
- ) {
- wfDebug( __METHOD__ . ": returning unscaled image\n" );
- // getClientScalingThumbnailImage is protected
- return $that->doClientImage( $image, $scalerParams );
- }
-
- return new ThumbnailImage( $image, $dstUrl, false, $params );
- }
-}
--- /dev/null
+<?php
+/**
+ * Fake handler for images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+/**
+ * Mock handler for images.
+ *
+ * This is really intended for unit testing.
+ *
+ * @ingroup Media
+ */
+class MockImageHandler {
+
+ /**
+ * Override BitmapHandler::doTransform() making sure we do not generate
+ * a thumbnail at all. That is merely returning a ThumbnailImage that
+ * will be consumed by the unit test. There is no need to create a real
+ * thumbnail on the filesystem.
+ */
+ static function doFakeTransform( $that, $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+ # Example of what we receive:
+ # $image: LocalFile
+ # $dstPath: /tmp/transform_7d0a7a2f1a09-1.jpg
+ # $dstUrl : http://example.com/images/thumb/0/09/Bad.jpg/320px-Bad.jpg
+ # $params: width: 320, descriptionUrl http://trunk.dev/wiki/File:Bad.jpg
+
+ $that->normaliseParams( $image, $params );
+
+ $scalerParams = array(
+ # The size to which the image will be resized
+ 'physicalWidth' => $params['physicalWidth'],
+ 'physicalHeight' => $params['physicalHeight'],
+ 'physicalDimensions' => "{$params['physicalWidth']}x{$params['physicalHeight']}",
+ # The size of the image on the page
+ 'clientWidth' => $params['width'],
+ 'clientHeight' => $params['height'],
+ # Comment as will be added to the EXIF of the thumbnail
+ 'comment' => isset( $params['descriptionUrl'] ) ?
+ "File source: {$params['descriptionUrl']}" : '',
+ # Properties of the original image
+ 'srcWidth' => $image->getWidth(),
+ 'srcHeight' => $image->getHeight(),
+ 'mimeType' => $image->getMimeType(),
+ 'dstPath' => $dstPath,
+ 'dstUrl' => $dstUrl,
+ );
+
+ # In some cases, we do not bother generating a thumbnail.
+ if ( !$image->mustRender() &&
+ $scalerParams['physicalWidth'] == $scalerParams['srcWidth']
+ && $scalerParams['physicalHeight'] == $scalerParams['srcHeight']
+ ) {
+ wfDebug( __METHOD__ . ": returning unscaled image\n" );
+ // getClientScalingThumbnailImage is protected
+ return $that->doClientImage( $image, $scalerParams );
+ }
+
+ return new ThumbnailImage( $image, $dstUrl, false, $params );
+ }
+}
--- /dev/null
+<?php
+/**
+ * Fake handler for SVG images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+class MockSvgHandler extends SvgHandler {
+ function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+ return MockImageHandler::doFakeTransform( $this, $image, $dstPath, $dstUrl, $params, $flags );
+ }
+}
// Assume UTC for testing purposes
$wgLocaltimezone = 'UTC';
- $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+ $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
// Bug 44192 Do not attempt to send a real e-mail
Hooks::clear( 'AlternateUserMailer' );
);
}
-
#### Attributes for external links ##########################
private function getAttribs() {
# Sidebar text we will use everytime
$dummyCereal = 'O:29:"testautoloadedserializedclass":0:{}';
$uncerealized = unserialize( $dummyCereal );
$this->assertFalse( $uncerealized instanceof __PHP_Incomplete_Class,
- "unserialize() can load classes case-insensitively.");
+ "unserialize() can load classes case-insensitively." );
}
}
$toggle.trigger( 'click' );
} );
+ function tableWithCaptionTest( $collapsible, assert ) {
+ var $caption, $headerRow, $contentRow, $toggle;
+
+ $caption = $collapsible.find( 'caption' );
+ $headerRow = $collapsible.find( 'tr:first' );
+ $contentRow = $collapsible.find( 'tr:last' );
+
+ $toggle = $caption.find( '.mw-collapsible-toggle' );
+ assert.equal( $toggle.length, 1, 'toggle is added to the end of the caption' );
+
+ assert.assertTrue( $caption.is( ':visible' ), 'caption is visible' );
+ assert.assertTrue( $headerRow.is( ':visible' ), 'headerRow is visible' );
+ assert.assertTrue( $contentRow.is( ':visible' ), 'contentRow is visible' );
+
+ $collapsible.on( 'afterCollapse.mw-collapsible', function () {
+ assert.assertTrue( $caption.is( ':visible' ), 'after collapsing: caption is still visible' );
+ assert.assertTrue( $headerRow.is( ':hidden' ), 'after collapsing: headerRow is hidden' );
+ assert.assertTrue( $contentRow.is( ':hidden' ), 'after collapsing: contentRow is hidden' );
+
+ $collapsible.on( 'afterExpand.mw-collapsible', function () {
+ assert.assertTrue( $caption.is( ':visible' ), 'after expanding: caption is still visible' );
+ assert.assertTrue( $headerRow.is( ':visible' ), 'after expanding: headerRow is visible' );
+ assert.assertTrue( $contentRow.is( ':visible' ), 'after expanding: contentRow is visible' );
+ QUnit.start();
+ } );
+
+ $toggle.trigger( 'click' );
+ } );
+
+ $toggle.trigger( 'click' );
+ }
+
+ QUnit.asyncTest( 'basic operation (<table> with caption)', 10, function ( assert ) {
+ tableWithCaptionTest( prepareCollapsible(
+ '<table class="mw-collapsible">' +
+ '<caption>' + loremIpsum + '</caption>' +
+ '<tr><th>' + loremIpsum + '</th><th>' + loremIpsum + '</th></tr>' +
+ '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+ '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+ '</table>'
+ ), assert );
+ } );
+
+ QUnit.asyncTest( 'basic operation (<table> with caption and <thead>)', 10, function ( assert ) {
+ tableWithCaptionTest( prepareCollapsible(
+ '<table class="mw-collapsible">' +
+ '<caption>' + loremIpsum + '</caption>' +
+ '<thead><tr><th>' + loremIpsum + '</th><th>' + loremIpsum + '</th></tr></thead>' +
+ '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+ '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+ '</table>'
+ ), assert );
+ } );
+
function listTest( listType, assert ) {
var $collapsible, $toggleItem, $contentItem, $toggle;
$collapsible = prepareCollapsible(
} );
- QUnit.test( 'getUrl', 2, function ( assert ) {
+ QUnit.test( 'getUrl', 3, function ( assert ) {
var title;
// Config
mw.config.set( 'wgArticlePath', '/wiki/$1' );
title = new mw.Title( 'Foobar' );
- assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionally, getUrl uses mw.util.getUrl' );
+ assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionality, getUrl uses mw.util.getUrl' );
+ assert.equal( title.getUrl({ action: 'edit' }), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
title = new mw.Title( 'John Doe', 3 );
assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
} );
- QUnit.test( 'newFromImg', 36, function ( assert ) {
+ QUnit.test( 'newFromImg', 40, function ( assert ) {
var title, i, thisCase, prefix,
cases = [
+ {
+ url: '//upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Princess_Alexandra_of_Denmark_%28later_Queen_Alexandra%2C_wife_of_Edward_VII%29_with_her_two_eldest_sons%2C_Prince_Albert_Victor_%28Eddy%29_and_George_Frederick_Ernest_Albert_%28later_George_V%29.jpg/939px-thumbnail.jpg',
+ typeOfUrl: 'Hashed thumb with shortened path',
+ nameText: 'Princess Alexandra of Denmark (later Queen Alexandra, wife of Edward VII) with her two eldest sons, Prince Albert Victor (Eddy) and George Frederick Ernest Albert (later George V)',
+ prefixedText: 'File:Princess Alexandra of Denmark (later Queen Alexandra, wife of Edward VII) with her two eldest sons, Prince Albert Victor (Eddy) and George Frederick Ernest Albert (later George V).jpg'
+ },
{
url: '/wiki/images/thumb/9/91/Anticlockwise_heliotrope%27s.jpg/99px-Anticlockwise_heliotrope%27s.jpg',
typeOfUrl: 'Normal hashed directory thumbnail',
return;
}
mw.messages.set(test.message );
- mw.config.set( 'wgUserLanguage', test.lang ) ;
+ mw.config.set( 'wgUserLanguage', test.lang );
var parser = new mw.jqueryMsg.parser( { language: langClass } );
assert.equal(
parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
* Previously, test elements where invisible to the selector since only
* one element can have a given id.
*/
- QUnit.test( 'addPortletLink', 11, function ( assert ) {
- var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo, addedAfter;
+ QUnit.test( 'addPortletLink', 13, function ( assert ) {
+ var pTestTb, pCustom, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo,
+ addedAfter, tbRLDMnonexistentid, tbRLDMemptyjquery;
pTestTb = '\
<div class="portlet" id="p-test-tb">\
addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (by passing a jQuery object as nextnode)' );
+
+ // test case - nonexistent id as next node
+ tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+ 'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
+
+ assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Nonexistent id as nextnode adds the portlet at end' );
+
+ // test case - empty jquery object as next node
+ tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+ 'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
+
+ assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Empty jquery as nextnode adds the portlet at end' );
} );
QUnit.test( 'jsMessage', 1, function ( assert ) {
return false;
}
-
/**
* Clear section name and its data
*/
$fileName = isset( $params['f'] ) ? $params['f'] : '';
+ // Backwards compatibility parameters
+ if ( isset( $params['w'] ) ) {
+ $params['width'] = $params['w'];
+ unset( $params['w'] );
+ }
+ if ( isset( $params['p'] ) ) {
+ $params['page'] = $params['p'];
+ }
+
// Is this a thumb of an archived file?
$isOld = ( isset( $params['archived'] ) && $params['archived'] );
unset( $params['archived'] ); // handlers don't care
return;
}
-
// Check the source file storage path
if ( !$img->exists() ) {
$redirectedLocation = false;
}
}
- // Backwards compatibility parameters
- if ( isset( $params['w'] ) ) {
- $params['width'] = $params['w'];
- unset( $params['w'] );
- }
- if ( isset( $params['p'] ) ) {
- $params['page'] = $params['p'];
- }
unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER
unset( $params['f'] ); // We're done with 'f' parameter.
-
// Get the normalized thumbnail name from the parameters...
try {
$thumbName = $img->thumbName( $params );