* Jimmy Xu
* Jonathan Wiltshire
* John N
-* Karun Dambietz
+* Karun Dambiec
* Kim Hyun-Joon
* Krenair
* Lee Worden
</head>
<body style="background-color: #C0C0C0;">
<p>
-This show various styles for our diff action, the background being hardcoded to gray (<tt>#C0C0C0</tt>) The reference style sheet is:</p>
+This show various styles for our diff action, the background being hardcoded to gray (<code>#C0C0C0</code>) The reference style sheet is:</p>
<p>
-<tt><a href="../../resources/mediawiki.action/mediawiki.action.history.diff.css">resources/mediawiki.action/mediawiki.action.history.diff.css</a></tt>.
+<code><a href="../../resources/mediawiki.action/mediawiki.action.history.diff.css">resources/mediawiki.action/mediawiki.action.history.diff.css</a></code>.
</p>
<p>
This file might help us fix our diff colors which have been a recurring issues among the community for a loooong time.</p>
<tr><th>Diff</th></tr>
- <tr><td class="diff-addedline"><tt>diff-addedline</tt>: added line</td></tr>
- <tr><td class="diff-deletedline"><tt>diff-deletedline</tt>: deleted line</td></tr>
- <tr><td class="diff-context"><tt>diff-context</tt>: context</td></tr>
+ <tr><td class="diff-addedline"><code>diff-addedline</code>: added line</td></tr>
+ <tr><td class="diff-deletedline"><code>diff-deletedline</code>: deleted line</td></tr>
+ <tr><td class="diff-context"><code>diff-context</code>: context</td></tr>
- <tr><th>Same as above with a <tt><span></tt> child element having the <tt>diffchange</tt> class</th></tr>
+ <tr><th>Same as above with a <code><span></code> child element having the <code>diffchange</code> class</th></tr>
<tr><td class="diffchange">Diffchange</td></tr>
<tr><td class="diff-addedline">
* @return String
*/
protected function getDescription() {
- return wfMsgHtml( strtolower( $this->getName() ) );
+ return $this->msg( strtolower( $this->getName() ) )->escaped();
}
/**
$text = '';
}
} else {
- $text = wfMsgExt( $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon', 'parsemag' );
+ $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
+ $text = wfMessage( $message )->text();
}
wfProfileOut( __METHOD__ );
$token = $user->getEditToken( $rcid );
$outputPage->preventClickjacking();
+ $link = Linker::linkKnown(
+ $this->getTitle(),
+ wfMessage( 'markaspatrolledtext' )->escaped(),
+ array(),
+ array(
+ 'action' => 'markpatrolled',
+ 'rcid' => $rcid,
+ 'token' => $token,
+ )
+ );
+
$outputPage->addHTML(
"<div class='patrollink'>" .
- wfMsgHtml(
- 'markaspatrolledlink',
- Linker::linkKnown(
- $this->getTitle(),
- wfMsgHtml( 'markaspatrolledtext' ),
- array(),
- array(
- 'action' => 'markpatrolled',
- 'rcid' => $rcid,
- 'token' => $token,
- )
- )
- ) .
+ wfMessage( 'markaspatrolledlink' )->rawParams( $link )->escaped() .
'</div>'
);
}
$tdtime, $revision->getUser() )->parse() . "</div>" );
$lnk = $current
- ? wfMsgHtml( 'currentrevisionlink' )
+ ? wfMessage( 'currentrevisionlink' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMsgHtml( 'currentrevisionlink' ),
+ wfMessage( 'currentrevisionlink' )->escaped(),
array(),
$extraParams
);
$curdiff = $current
- ? wfMsgHtml( 'diff' )
+ ? wfMessage( 'diff' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMsgHtml( 'diff' ),
+ wfMessage( 'diff' )->escaped(),
array(),
array(
'diff' => 'cur',
$prevlink = $prev
? Linker::linkKnown(
$this->getTitle(),
- wfMsgHtml( 'previousrevision' ),
+ wfMessage( 'previousrevision' )->escaped(),
array(),
array(
'direction' => 'prev',
'oldid' => $oldid
) + $extraParams
)
- : wfMsgHtml( 'previousrevision' );
+ : wfMessage( 'previousrevision' )->escaped();
$prevdiff = $prev
? Linker::linkKnown(
$this->getTitle(),
- wfMsgHtml( 'diff' ),
+ wfMessage( 'diff' )->escaped(),
array(),
array(
'diff' => 'prev',
'oldid' => $oldid
) + $extraParams
)
- : wfMsgHtml( 'diff' );
+ : wfMessage( 'diff' )->escaped();
$nextlink = $current
- ? wfMsgHtml( 'nextrevision' )
+ ? wfMessage( 'nextrevision' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMsgHtml( 'nextrevision' ),
+ wfMessage( 'nextrevision' )->escaped(),
array(),
array(
'direction' => 'next',
) + $extraParams
);
$nextdiff = $current
- ? wfMsgHtml( 'diff' )
+ ? wfMessage( 'diff' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMsgHtml( 'diff' ),
+ wfMessage( 'diff' )->escaped(),
array(),
array(
'diff' => 'next',
$imageDir = $lang->getDir();
if ( $appendSubtitle ) {
- $this->getContext()->getOutput()->appendSubtitle( wfMsgHtml( 'redirectpagesub' ) );
+ $out = $this->getContext()->getOutput();
+ $out->appendSubtitle( wfMessage( 'redirectpagesub' )->escaped() );
}
// the loop prepends the arrow image before the link, so the first case needs to be outside
$reason = $deleteReason;
} elseif ( $deleteReason != '' ) {
// Entry from drop down menu + additional comment
- $reason = $deleteReasonList . wfMsgForContent( 'colon-separator' ) . $deleteReason;
+ $colonseparator = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+ $reason = $deleteReasonList . $colonseparator . $deleteReason;
} else {
$reason = $deleteReasonList;
}
$revisions = $this->mTitle->estimateRevisionCount();
// @todo FIXME: i18n issue/patchwork message
$this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
- wfMsgExt( 'historywarning', array( 'parseinline' ), $this->getContext()->getLanguage()->formatNum( $revisions ) ) .
- wfMsgHtml( 'word-separator' ) . Linker::linkKnown( $title,
- wfMsgHtml( 'history' ),
+ wfMessage( 'historywarning' )->numParams( $revisions )->parse() .
+ wfMessage( 'word-separator' )->plain() . Linker::linkKnown( $title,
+ wfMessage( 'history' )->escaped(),
array( 'rel' => 'archives' ),
array( 'action' => 'history' ) ) .
'</strong>'
$suppress = "<tr id=\"wpDeleteSuppressRow\">
<td></td>
<td class='mw-input'><strong>" .
- Xml::checkLabel( wfMsg( 'revdelete-suppress' ),
+ Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
"</strong></td>
</tr>";
Xml::openElement( 'table', array( 'id' => 'mw-deleteconfirm-table' ) ) .
"<tr id=\"wpDeleteReasonListRow\">
<td class='mw-label'>" .
- Xml::label( wfMsg( 'deletecomment' ), 'wpDeleteReasonList' ) .
+ Xml::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
"</td>
<td class='mw-input'>" .
Xml::listDropDown( 'wpDeleteReasonList',
- wfMsgForContent( 'deletereason-dropdown' ),
- wfMsgForContent( 'deletereasonotherlist' ), '', 'wpReasonDropDown', 1 ) .
+ wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
+ wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(), '', 'wpReasonDropDown', 1 ) .
"</td>
</tr>
<tr id=\"wpDeleteReasonRow\">
<td class='mw-label'>" .
- Xml::label( wfMsg( 'deleteotherreason' ), 'wpReason' ) .
+ Xml::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
"</td>
<td class='mw-input'>" .
Html::input( 'wpReason', $reason, 'text', array(
<tr>
<td></td>
<td class='mw-input'>" .
- Xml::checkLabel( wfMsg( 'watchthis' ),
+ Xml::checkLabel( wfMessage( 'watchthis' )->text(),
'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
"</td>
</tr>";
<tr>
<td></td>
<td class='mw-submit'>" .
- Xml::submitButton( wfMsg( 'deletepage' ),
+ Xml::submitButton( wfMessage( 'deletepage' )->text(),
array( 'name' => 'wpConfirmB', 'id' => 'wpConfirmB', 'tabindex' => '5' ) ) .
"</td>
</tr>" .
$title = Title::makeTitle( NS_MEDIAWIKI, 'Deletereason-dropdown' );
$link = Linker::link(
$title,
- wfMsgHtml( 'delete-edit-reasonlist' ),
+ wfMessage( 'delete-edit-reasonlist' )->escaped(),
array(),
array( 'action' => 'edit' )
);
$key = wfMemcKey( 'ipb', 'autoblock', 'whitelist' );
$lines = $wgMemc->get( $key );
if ( !$lines ) {
- $lines = explode( "\n", wfMsgForContentNoTrans( 'autoblock_whitelist' ) );
+ $lines = explode( "\n", wfMessage( 'autoblock_whitelist' )->inContentLanguage()->plain() );
$wgMemc->set( $key, $lines, 3600 * 24 );
}
wfDebug( "Autoblocking {$this->getTarget()}@" . $autoblockIP . "\n" );
$autoblock->setTarget( $autoblockIP );
$autoblock->setBlocker( $this->getBlocker() );
- $autoblock->mReason = wfMsgForContent( 'autoblocker', $this->getTarget(), $this->mReason );
+ $autoblock->mReason = wfMessage( 'autoblocker', $this->getTarget(), $this->mReason )->inContentLanguage()->text();
$timestamp = wfTimestampNow();
$autoblock->mTimestamp = $timestamp;
$autoblock->mAuto = 1;
$keys = array( 'infiniteblock', 'expiringblock' );
foreach ( $keys as $key ) {
- $msg[$key] = wfMsgHtml( $key );
+ $msg[$key] = wfMessage( $key )->escaped();
}
}
if ( $first && $char === $prevchar ) {
# We're continuing a previous chunk at the top of a new
# column, so add " cont." after the letter.
- $ret .= ' ' . wfMsgHtml( 'listingcontinuesabbrev' );
+ $ret .= ' ' . wfMessage( 'listingcontinuesabbrev' )->escaped();
}
$ret .= "</h3>\n";
if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) )
return $fullForm ? '' : array();
- $data = array( Html::rawElement( 'label', array( 'for' => 'tagfilter' ), wfMsgExt( 'tag-filter', 'parseinline' ) ),
+ $data = array( Html::rawElement( 'label', array( 'for' => 'tagfilter' ), wfMessage( 'tag-filter' )->parse() ),
Xml::input( 'tagfilter', 20, $selected, array( 'class' => 'mw-tagfilter-input' ) ) );
if ( !$fullForm ) {
}
$html = implode( ' ', $data );
- $html .= "\n" . Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMsg( 'tag-filter-submit' ) ) );
+ $html .= "\n" . Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMessage( 'tag-filter-submit' )->text() ) );
$html .= "\n" . Html::hidden( 'title', $title->getPrefixedText() );
$html = Xml::tags( 'form', array( 'action' => $title->getLocalURL(), 'class' => 'mw-tagfilter-form', 'method' => 'get' ), $html );
FeedUtils::formatDiff( $obj ),
$url,
$obj->rc_timestamp,
- ($obj->rc_deleted & Revision::DELETED_USER) ? wfMsgHtml('rev-deleted-user') : $obj->rc_user_text,
+ ( $obj->rc_deleted & Revision::DELETED_USER ) ? wfMessage( 'rev-deleted-user' )->escaped() : $obj->rc_user_text,
$talkpage
);
$feed->outItem( $item );
$wgLoginLanguageSelector = false;
/**
- * When translating messages with wfMsg(), it is not always clear what should
- * be considered UI messages and what should be content messages.
+ * When translating messages with wfMessage(), it is not always clear what
+ * should be considered UI messages and what should be content messages.
*
* For example, for the English Wikipedia, there should be only one 'mainpage',
* so when getting the link for 'mainpage', we should treat it as site content
- * and call wfMsgForContent(), but for rendering the text of the link, we call
- * wfMsg(). The code behaves this way by default. However, sites like the
- * Wikimedia Commons do offer different versions of 'mainpage' and the like for
- * different languages. This array provides a way to override the default
- * behavior.
+ * and call ->inContentLanguage()->text(), but for rendering the text of the
+ * link, we call ->text(). The code behaves this way by default. However,
+ * sites like the Wikimedia Commons do offer different versions of 'mainpage'
+ * and the like for different languages. This array provides a way to override
+ * the default behavior.
*
* @par Example:
* To allow language-specific main page and community
* Append a query string to an existing URL, which may or may not already
* have query string parameters already. If so, they will be combined.
*
- * @deprecated
+ * @deprecated in 1.20. Use Uri class.
* @param $url String
* @param $query Mixed: string or associative array
* @return string
* @return String
*/
function wfShowingResults( $offset, $limit ) {
- global $wgLang;
- return wfMsgExt(
- 'showingresults',
- array( 'parseinline' ),
- $wgLang->formatNum( $limit ),
- $wgLang->formatNum( $offset + 1 )
- );
+ return wfMessage( 'showingresults' )->numParams( $limit, $offset + 1 )->parse();
}
/**
$badImages = $badImageCache;
} else { // cache miss
if ( $blacklist === null ) {
- $blacklist = wfMsgForContentNoTrans( 'bad_image_list' ); // site list
+ $blacklist = wfMessage( 'bad_image_list' )->inContentLanguage()->plain(); // site list
}
# Build the list now
$badImages = array();
if ( isset( $params['all'] ) ) {
// add an option that would let the user select all namespaces.
// Value is provided by user, the name shown is localized for the user.
- $options[$params['all']] = wfMsg( 'namespacesall' );
+ $options[$params['all']] = wfMessage( 'namespacesall' )->text();
}
// Add all namespaces as options (in the content langauge)
$options += $wgContLang->getFormattedNamespaces();
if ( $nsId === 0 ) {
// For other namespaces use use the namespace prefix as label, but for
// main we don't use "" but the user message descripting it (e.g. "(Main)" or "(Article)")
- $nsName = wfMsg( 'blanknamespace' );
+ $nsName = wfMessage( 'blanknamespace' )->text();
}
$optionsHtml[] = Html::element(
'option', array(
/**
* Get HTML for an info box with an icon.
*
- * @param $text String: wikitext, get this with wfMsgNoTrans()
+ * @param $text String: wikitext, get this with wfMessage()->plain()
* @param $icon String: icon name, file in skins/common/images
* @param $alt String: alternate text for the icon
* @param $class String: additional class name to add to the wrapper div
if( $img ) {
$fileSize = htmlspecialchars( $wgLang->formatSize( $img->getSize() ) );
} else {
- $fileSize = wfMsgHtml( 'filemissing' );
+ $fileSize = wfMessage( 'filemissing' )->escaped();
}
$fileSize = "$fileSize<br />\n";
} else {
public function __construct( $params ) {
parent::__construct( $params );
- $this->msg = empty( $params['licenses'] ) ? wfMsgForContent( 'licenses' ) : $params['licenses'];
+ $this->msg = empty( $params['licenses'] ) ? wfMessage( 'licenses' )->inContentLanguage()->plain() : $params['licenses'];
$this->selected = null;
$this->makeLicenses();
public function getInputHTML( $value ) {
$this->selected = $value;
- $this->html = $this->outputOption( wfMsg( 'nolicense' ), '',
+ $this->html = $this->outputOption( wfMessage( 'nolicense' )->text(), '',
(bool)$this->selected ? null : array( 'selected' => 'selected' ) );
$this->makeHtml( $this->getLicenses() );
* Add a wikitext-formatted message to the output.
* This is equivalent to:
*
- * $wgOut->addWikiText( wfMsgNoTrans( ... ) )
+ * $wgOut->addWikiText( wfMessage( ... )->plain() )
*/
public function addWikiMsg( /*...*/ ) {
$args = func_get_args();
$tableClass = htmlspecialchars( $this->getTableClass() );
$sortClass = htmlspecialchars( $this->getSortHeaderClass() );
- $s = "<table style='border:1;' class=\"mw-datatable $tableClass\"><thead><tr>\n";
+ $s = "<table style='border:1px;' class=\"mw-datatable $tableClass\"><thead><tr>\n";
$fields = $this->getFieldNames();
# Make table header
$out->addHTML( $this->getPageHeader() );
if ( $this->numRows > 0 ) {
$out->addHTML( $this->msg( 'showingresults' )->numParams(
- $this->numRows, $this->offset + 1 )->parseAsBlock() );
+ min( $this->numRows, $this->limit ), # do not show the one extra row, if exist
+ $this->offset + 1 )->parseAsBlock() );
# Disable the "next" link when we reach the end
$paging = $this->getLanguage()->viewPrevNext( $this->getTitle( $par ), $this->offset,
$this->limit, $this->linkParameters(), ( $this->numRows <= $this->limit ) );
$out->addHTML( Xml::closeElement( 'div' ) );
- return $this->numRows;
+ return min( $this->numRows, $this->limit ); # do not return the one extra row, if exist
}
/**
$params = $this->cleanParams( $item['params'] );
$xml = "<{$item['type']}>\n" .
Xml::element( 'message', null, $item['message'] ) . "\n" .
- Xml::element( 'text', null, wfMsg( $item['message'], $params ) ) ."\n";
+ Xml::element( 'text', null, wfMessage( $item['message'], $params )->text() ) ."\n";
foreach ( $params as $param ) {
$xml .= Xml::element( 'param', null, $param );
}
if ( count( $this->errors ) == 1 ) {
$s = $this->getWikiTextForError( $this->errors[0], $this->errors[0] );
if ( $shortContext ) {
- $s = wfMsgNoTrans( $shortContext, $s );
+ $s = wfMessage( $shortContext, $s )->plain();
} elseif ( $longContext ) {
- $s = wfMsgNoTrans( $longContext, "* $s\n" );
+ $s = wfMessage( $longContext, "* $s\n" )->plain();
}
} else {
$s = '* '. implode("\n* ",
$this->getWikiTextArray( $this->errors ) ) . "\n";
if ( $longContext ) {
- $s = wfMsgNoTrans( $longContext, $s );
+ $s = wfMessage( $longContext, $s )->plain();
} elseif ( $shortContext ) {
- $s = wfMsgNoTrans( $shortContext, "\n$s\n" );
+ $s = wfMessage( $shortContext, "\n$s\n" )->plain();
}
}
return $s;
protected function getWikiTextForError( $error ) {
if ( is_array( $error ) ) {
if ( isset( $error['message'] ) && isset( $error['params'] ) ) {
- return wfMsgNoTrans( $error['message'],
- array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) ) );
+ return wfMessage( $error['message'],
+ array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) ) )->plain();
} else {
$message = array_shift($error);
- return wfMsgNoTrans( $message,
- array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) );
+ return wfMessage( $message,
+ array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) )->plain();
}
} else {
- return wfMsgNoTrans( $error );
+ return wfMessage( $error )->plain();
}
}
if( is_null( $selected ) )
$selected = '';
if( !is_null( $allmonths ) )
- $options[] = self::option( wfMsg( 'monthsall' ), $allmonths, $selected === $allmonths );
+ $options[] = self::option( wfMessage( 'monthsall' )->text(), $allmonths, $selected === $allmonths );
for( $i = 1; $i < 13; $i++ )
$options[] = self::option( $wgLang->getMonthName( $i ), $i, $selected === $i );
return self::openElement( 'select', array( 'id' => $id, 'name' => 'month', 'class' => 'mw-month-selector' ) )
} else {
$encYear = '';
}
- return Xml::label( wfMsg( 'year' ), 'year' ) . ' '.
+ return Xml::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . ' '.
- Xml::label( wfMsg( 'month' ), 'month' ) . ' '.
+ Xml::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
Xml::monthSelector( $encMonth, -1 );
}
foreach( $fields as $labelmsg => $input ) {
$id = "mw-$labelmsg";
$form .= Xml::openElement( 'tr', array( 'id' => $id ) );
- $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMsgExt( $labelmsg, array('parseinline') ) );
+ $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMessage( $labelmsg )->parse() );
$form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . $input . Xml::closeElement( 'td' );
$form .= Xml::closeElement( 'tr' );
}
if( $submitLabel ) {
$form .= Xml::openElement( 'tr' );
$form .= Xml::tags( 'td', array(), '' );
- $form .= Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) . Xml::submitButton( wfMsg( $submitLabel ) ) . Xml::closeElement( 'td' );
+ $form .= Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) . Xml::submitButton( wfMessage( $submitLabel )->text() ) . Xml::closeElement( 'td' );
$form .= Xml::closeElement( 'tr' );
}
$feed = new $wgFeedClasses[$type](
$this->getTitle()->getPrefixedText() . ' - ' .
- wfMsgForContent( 'history-feed-title' ),
- wfMsgForContent( 'history-feed-description' ),
+ wfMessage( 'history-feed-title' )->inContentLanguage()->text(),
+ wfMessage( 'history-feed-description' )->inContentLanguage()->text(),
$this->getTitle()->getFullUrl( 'action=history' )
);
function feedEmpty() {
return new FeedItem(
- wfMsgForContent( 'nohistory' ),
- $this->getOutput()->parse( wfMsgForContent( 'history-feed-empty' ) ),
+ wfMessage( 'nohistory' )->inContentLanguage()->text(),
+ $this->getOutput()->parse( wfMessage( 'history-feed-empty' )->inContentLanguage()->text() ),
$this->getTitle()->getFullUrl(),
wfTimestamp( TS_MW ),
'',
);
if ( $rev->getComment() == '' ) {
global $wgContLang;
- $title = wfMsgForContent( 'history-feed-item-nocomment',
+ $title = wfMessage( 'history-feed-item-nocomment',
$rev->getUserText(),
$wgContLang->timeanddate( $rev->getTimestamp() ),
$wgContLang->date( $rev->getTimestamp() ),
- $wgContLang->time( $rev->getTimestamp() )
- );
+ $wgContLang->time( $rev->getTimestamp() ) )->inContentLanguage()->text();
} else {
$title = $rev->getUserText() .
- wfMsgForContent( 'colon-separator' ) .
+ wfMessage( 'colon-separator' )->inContentLanguage()->text() .
FeedItem::stripComment( $rev->getComment() );
}
return new FeedItem(
public function requireOnlyOneParameter( $params ) {
$required = func_get_args();
array_shift( $required );
+ $p = $this->getModulePrefix();
$intersection = array_intersect( array_keys( array_filter( $params,
array( $this, "parameterNotEmpty" ) ) ), $required );
if ( count( $intersection ) > 1 ) {
- $this->dieUsage( 'The parameters ' . implode( ', ', $intersection ) . ' can not be used together', 'invalidparammix' );
+ $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', "{$p}invalidparammix" );
} elseif ( count( $intersection ) == 0 ) {
- $this->dieUsage( 'One of the parameters ' . implode( ', ', $required ) . ' is required', 'missingparam' );
+ $this->dieUsage( "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required', "{$p}missingparam" );
}
}
public function requireMaxOneParameter( $params ) {
$required = func_get_args();
array_shift( $required );
+ $p = $this->getModulePrefix();
$intersection = array_intersect( array_keys( array_filter( $params,
array( $this, "parameterNotEmpty" ) ) ), $required );
if ( count( $intersection ) > 1 ) {
- $this->dieUsage( 'The parameters ' . implode( ', ', $intersection ) . ' can not be used together', 'invalidparammix' );
+ $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', "{$p}invalidparammix" );
}
}
// 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'] = wfMsgForContent( 'undo-summary', $params['undo'], $undoRev->getUserText() );
+ $params['summary'] = wfMessage( 'undo-summary', $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
}
}
$this->dieUsage( 'Size difference is disabled in Miser Mode', 'sizediffdisabled' );
}
- $msg = wfMsgForContent( 'Contributions' );
+ $msg = wfMessage( 'Contributions' )->inContentLanguage()->text();
$feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
$feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
*/
protected function feedItemDesc( $revision ) {
if( $revision ) {
- return '<p>' . htmlspecialchars( $revision->getUserText() ) . wfMsgForContent( 'colon-separator' ) .
+ $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+ return '<p>' . htmlspecialchars( $revision->getUserText() ) . $msg .
htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
"</p>\n<hr />\n<div>" .
nl2br( htmlspecialchars( $revision->getText() ) ) . "</div>";
$feedItems[] = $this->createFeedItem( $info );
}
- $msg = wfMsgForContent( 'watchlist' );
+ $msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
$feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
$feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
// Error results should not be cached
$this->getMain()->setCacheMaxAge( 0 );
- $feedTitle = $wgSitename . ' - Error - ' . wfMsgForContent( 'watchlist' ) . ' [' . $wgLanguageCode . ']';
+ $feedTitle = $wgSitename . ' - Error - ' . wfMessage( 'watchlist' )->inContentLanguage()->text() . ' [' . $wgLanguageCode . ']';
$feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
$feedFormat = isset( $params['feedformat'] ) ? $params['feedformat'] : 'rss';
- $feed = new $wgFeedClasses[$feedFormat] ( $feedTitle, htmlspecialchars( wfMsgForContent( 'watchlist' ) ), $feedUrl );
+ $msg = wfMessage( 'watchlist' )->inContentLanguage()->escaped();
+ $feed = new $wgFeedClasses[$feedFormat] ( $feedTitle, $msg, $feedUrl );
if ( $e instanceof UsageException ) {
$errorCode = $e->getCodeString();
return '';
}
- $s = htmlspecialchars( wfMsg( 'otherlanguages' ) . wfMsg( 'colon-separator' ) );
+ $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() . wfMessage( 'colon-separator' )->text() );
$langs = array();
foreach ( $languages as $l ) {
$fname = $this->fname;
$error = $this->error;
}
- return wfMsg( $msg, $sql, $fname, $this->errno, $error );
+ return wfMessage( $msg )->rawParams( $sql, $fname, $this->errno, $error )->text();
} else {
return parent::getContentMessage( $html );
}
* @return string User-friendly database information
*/
public function getServerInfo() {
- return wfMsg( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() );
+ return wfMessage( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() )->text();
}
/**
*/
public function __construct( array $config ) {
parent::__construct( $config );
- $namesUsed = array();
+ $this->syncChecks = isset( $config['syncChecks'] )
+ ? $config['syncChecks']
+ : self::CHECK_SIZE;
// Construct backends here rather than via registration
// to keep these backends hidden from outside the proxy.
+ $namesUsed = array();
foreach ( $config['backends'] as $index => $config ) {
if ( isset( $config['template'] ) ) {
// Config is just a modified version of a registered backend's.
if ( $this->masterIndex < 0 ) { // need backends and must have a master
throw new MWException( 'No master backend defined.' );
}
- $this->syncChecks = isset( $config['syncChecks'] )
- ? $config['syncChecks']
- : self::CHECK_SIZE;
}
/**
/**
* Check that a set of files are consistent across all internal backends
*
- * @param $paths Array
+ * @param $paths Array List of storage paths
* @return Status
*/
public function consistencyCheck( array $paths ) {
// Stat the file on the 'master' backend
$mStat = $mBackend->getFileStat( $mParams );
if ( $this->syncChecks & self::CHECK_SHA1 ) {
- $mSha1 = $mBackend->getFileSha1( $mParams );
+ $mSha1 = $mBackend->getFileSha1Base36( $mParams );
} else {
$mSha1 = false;
}
}
}
if ( $this->syncChecks & self::CHECK_SHA1 ) {
- if ( $cBackend->getFileSha1( $cParams ) !== $mSha1 ) { // wrong SHA1
+ if ( $cBackend->getFileSha1Base36( $cParams ) !== $mSha1 ) { // wrong SHA1
$status->fatal( 'backend-fail-synced', $path );
continue;
}
return $status;
}
+ /**
+ * Check that a set of files are consistent across all internal backends
+ * and re-synchronize those files againt the "multi master" if needed.
+ *
+ * @param $paths Array List of storage paths
+ * @return Status
+ */
+ public function resyncFiles( array $paths ) {
+ $status = Status::newGood();
+
+ $mBackend = $this->backends[$this->masterIndex];
+ foreach ( $paths as $path ) {
+ $mPath = $this->substPaths( $path, $mBackend );
+ $mSha1 = $mBackend->getFileSha1Base36( array( 'src' => $mPath ) );
+ $mExist = $mBackend->fileExists( array( 'src' => $mPath ) );
+ // Check of all clone backends agree with the master...
+ foreach ( $this->backends as $index => $cBackend ) {
+ if ( $index === $this->masterIndex ) {
+ continue; // master
+ }
+ $cPath = $this->substPaths( $path, $cBackend );
+ $cSha1 = $cBackend->getFileSha1Base36( array( 'src' => $cPath ) );
+ if ( $mSha1 === $cSha1 ) {
+ // already synced; nothing to do
+ } elseif ( $mSha1 ) { // file is in master
+ $fsFile = $mBackend->getLocalReference( array( 'src' => $mPath ) );
+ $status->merge( $cBackend->quickStore(
+ array( 'src' => $fsFile->getPath(), 'dst' => $cPath )
+ ) );
+ } elseif ( $mExist === false ) { // file is not in master
+ $status->merge( $cBackend->quickDelete( array( 'src' => $cPath ) ) );
+ }
+ }
+ }
+
+ return $status;
+ }
+
/**
* Get a list of file storage paths to read or write for a list of operations
*
protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
- protected $maxContCacheSize = 300; // integer; max containers with entries
-
/** @var CF_Connection */
protected $conn; // Swift connection handle
- protected $connStarted = 0; // integer UNIX timestamp
- protected $connContainers = array(); // container object cache
- protected $connException; // CloudFiles exception
+ protected $sessionStarted = 0; // integer UNIX timestamp
+
+ /** @var CloudFilesException */
+ protected $connException;
+ protected $connErrorTime = 0; // UNIX timestamp
+
+ /** @var BagOStuff */
+ protected $srvCache;
+
+ /** @var ProcessCacheLRU */
+ protected $connContainerCache; // container object cache
/**
* @see FileBackendStore::__construct()
* - levels : the number of hash levels (and digits)
* - repeat : hash subdirectories are prefixed with all the
* parent hash directory names (e.g. "a/ab/abc")
+ * - cacheAuthInfo : Whether to cache authentication tokens in APC/XCache.
+ * This is probably insecure in shared hosting environments.
*/
public function __construct( array $config ) {
parent::__construct( $config );
$this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
? $config['swiftCDNPurgable']
: true;
- // Cache container info to mask latency
+ // Cache container information to mask latency
$this->memCache = wfGetMainCache();
+ // Process cache for container info
+ $this->connContainerCache = new ProcessCacheLRU( 300 );
+ // Cache auth token information to avoid RTTs
+ if ( !empty( $config['cacheAuthInfo'] ) ) {
+ try { // look for APC, XCache, WinCache, ect...
+ $this->srvCache = ObjectCache::newAccelerator( array() );
+ } catch ( Exception $e ) {}
+ }
+ $this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
}
/**
if ( isset( $obj->metadata['Sha1base36'] ) ) {
return true; // nothing to do
}
+ wfProfileIn( __METHOD__ );
$status = Status::newGood();
$scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
if ( $status->isOK() ) {
if ( $hash !== false ) {
$obj->metadata['Sha1base36'] = $hash;
$obj->sync_metadata(); // save to Swift
+ wfProfileOut( __METHOD__ );
return true; // success
}
}
}
$obj->metadata['Sha1base36'] = false;
+ wfProfileOut( __METHOD__ );
return false; // failed
}
}
/**
- * Get a connection to the Swift proxy
+ * Get an authenticated connection handle to the Swift proxy
*
* @return CF_Connection|bool False on failure
* @throws CloudFilesException
*/
protected function getConnection() {
- if ( $this->connException instanceof Exception ) {
- throw $this->connException; // failed last attempt
+ if ( $this->connException instanceof CloudFilesException ) {
+ if ( ( time() - $this->connErrorTime ) < 60 ) {
+ throw $this->connException; // failed last attempt; don't bother
+ } else { // actually retry this time
+ $this->connException = null;
+ $this->connErrorTime = 0;
+ }
}
// Session keys expire after a while, so we renew them periodically
- if ( $this->conn && ( time() - $this->connStarted ) > $this->authTTL ) {
- $this->conn->close(); // close active cURL connections
- $this->conn = null;
- }
+ $reAuth = ( ( time() - $this->sessionStarted ) > $this->authTTL );
// Authenticate with proxy and get a session key...
- if ( !$this->conn ) {
- $this->connStarted = 0;
- $this->connContainers = array();
- try {
- $this->auth->authenticate();
- $this->conn = new CF_Connection( $this->auth );
- $this->connStarted = time();
- } catch ( CloudFilesException $e ) {
- $this->connException = $e; // don't keep re-trying
- throw $e; // throw it back
+ if ( !$this->conn || $reAuth ) {
+ $this->sessionStarted = 0;
+ $this->connContainerCache->clear();
+ $cacheKey = $this->getCredsCacheKey( $this->auth->username );
+ $creds = $this->srvCache->get( $cacheKey ); // credentials
+ if ( is_array( $creds ) ) { // cache hit
+ $this->auth->load_cached_credentials(
+ $creds['auth_token'], $creds['storage_url'], $creds['cdnm_url'] );
+ $this->sessionStarted = time() - ceil( $this->authTTL/2 ); // skew for worst case
+ } else { // cache miss
+ try {
+ $this->auth->authenticate();
+ $creds = $this->auth->export_credentials();
+ $this->srvCache->add( $cacheKey, $creds, ceil( $this->authTTL/2 ) ); // cache
+ $this->sessionStarted = time();
+ } catch ( CloudFilesException $e ) {
+ $this->connException = $e; // don't keep re-trying
+ $this->connErrorTime = time();
+ throw $e; // throw it back
+ }
+ }
+ if ( $this->conn ) { // re-authorizing?
+ $this->conn->close(); // close active cURL handles in CF_Http object
}
+ $this->conn = new CF_Connection( $this->auth );
}
return $this->conn;
}
+ /**
+ * Get the cache key for a container
+ *
+ * @param $username string
+ * @return string
+ */
+ private function getCredsCacheKey( $username ) {
+ return wfMemcKey( 'backend', $this->getName(), 'usercreds', $username );
+ }
+
/**
* @see FileBackendStore::doClearCache()
*/
protected function doClearCache( array $paths = null ) {
- $this->connContainers = array(); // clear container object cache
+ $this->connContainerCache->clear(); // clear container object cache
}
/**
protected function getContainer( $container, $bypassCache = false ) {
$conn = $this->getConnection(); // Swift proxy connection
if ( $bypassCache ) { // purge cache
- unset( $this->connContainers[$container] );
- } elseif ( !isset( $this->connContainers[$container] ) ) {
+ $this->connContainerCache->clear( $container );
+ } elseif ( !$this->connContainerCache->has( $container, 'obj' ) ) {
$this->primeContainerCache( array( $container ) ); // check persistent cache
}
- if ( !isset( $this->connContainers[$container] ) ) {
+ if ( !$this->connContainerCache->has( $container, 'obj' ) ) {
$contObj = $conn->get_container( $container );
// NoSuchContainerException not thrown: container must exist
- if ( count( $this->connContainers ) >= $this->maxContCacheSize ) { // trim cache?
- reset( $this->connContainers );
- unset( $this->connContainers[key( $this->connContainers )] );
- }
- $this->connContainers[$container] = $contObj; // cache it
+ $this->connContainerCache->set( $container, 'obj', $contObj ); // cache it
if ( !$bypassCache ) {
$this->setContainerCache( $container, // update persistent cache
array( 'bytes' => $contObj->bytes_used, 'count' => $contObj->object_count )
);
}
}
- return $this->connContainers[$container];
+ return $this->connContainerCache->get( $container, 'obj' );
}
/**
protected function createContainer( $container ) {
$conn = $this->getConnection(); // Swift proxy connection
$contObj = $conn->create_container( $container );
- $this->connContainers[$container] = $contObj; // cache it
+ $this->connContainerCache->set( $container, 'obj', $contObj ); // cache
return $contObj;
}
*/
protected function deleteContainer( $container ) {
$conn = $this->getConnection(); // Swift proxy connection
- unset( $this->connContainers[$container] ); // purge cache
+ $this->connContainerCache->clear( $container ); // purge
$conn->delete_container( $container );
}
try {
$conn = $this->getConnection(); // Swift proxy connection
foreach ( $containerInfo as $container => $info ) {
- $this->connContainers[$container] = new CF_Container(
- $conn->cfs_auth,
- $conn->cfs_http,
- $container,
- $info['count'],
- $info['bytes']
- );
+ $contObj = new CF_Container( $conn->cfs_auth, $conn->cfs_http,
+ $container, $info['count'], $info['bytes'] );
+ $this->connContainerCache->set( $container, 'obj', $contObj );
}
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, null, __METHOD__, array() );
/**
* Make a new temporary file on the file system.
* Temporary files may be purged when the file object falls out of scope.
- *
+ *
* @param $prefix string
* @param $extension string
- * @return TempFSFile|null
+ * @return TempFSFile|null
*/
public static function factory( $prefix, $extension = '' ) {
+ wfProfileIn( __METHOD__ );
$base = wfTempDir() . '/' . $prefix . dechex( mt_rand( 0, 99999999 ) );
$ext = ( $extension != '' ) ? ".{$extension}" : "";
for ( $attempt = 1; true; $attempt++ ) {
break; // got it
}
if ( $attempt >= 15 ) {
+ wfProfileOut( __METHOD__ );
return null; // give up
}
}
$tmpFile = new self( $path );
$tmpFile->canDelete = true; // safely instantiated
+ wfProfileOut( __METHOD__ );
return $tmpFile;
}
/**
* Purge this file off the file system
- *
+ *
* @return bool Success
*/
public function purge() {
}
/**
- * Get the sha1 of a file with a given virtual URL/storage path
+ * Get the sha1 (base 36) of a file with a given virtual URL/storage path
*
* @param $virtualUrl string
* @return string|bool
*/
public function getFileSha1( $virtualUrl ) {
$path = $this->resolveToStoragePath( $virtualUrl );
- $tmpFile = $this->backend->getLocalReference( array( 'src' => $path ) );
- if ( !$tmpFile ) {
- return false;
- }
- return $tmpFile->getSha1Base36();
+ return $this->backend->getFileSha1Base36( array( 'src' => $path ) );
}
/**
return $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
} else {
return new MediaTransformError( 'thumbnail_error',
- $params['width'], 0, wfMsg( 'thumbnail-dest-create' ) );
+ $params['width'], 0, wfMessage( 'thumbnail-dest-create' )->text() );
}
}
$tmpThumbPath = $tmpFile->getPath(); // path of 0-byte temp file
// Actually render the thumbnail...
+ wfProfileIn( __METHOD__ . '-doTransform' );
$thumb = $this->handler->doTransform( $this, $tmpThumbPath, $thumbUrl, $params );
+ wfProfileOut( __METHOD__ . '-doTransform' );
$tmpFile->bind( $thumb ); // keep alive with $thumb
if ( !$thumb ) { // bad params?
if ( !$props ) {
wfProfileIn( __METHOD__ . '-getProps' );
$props = $this->repo->getFileProps( $this->getVirtualUrl() );
- wfProfileOut( __METHOD__ . -'getProps' );
+ wfProfileOut( __METHOD__ . '-getProps' );
}
if ( $timestamp === false ) {
protected function getMessageText( $params ) {
$msg = array_shift( $params );
- $text = wfMsgExt( $msg, array( 'parseinline' ), $params );
+ $text = wfMessage( $msg, $params )->parse();
$text = preg_replace( '/<a href="(.*?)".*?>(.*?)<\/a>/', '$2 <$1>', $text );
return html_entity_decode( strip_tags( $text ), ENT_QUOTES );
$this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
$this->getTextBox( 'wgDBport', 'config-db-port', array(), $this->parent->getHelpBox( 'config-db-port' ) ) .
Html::openElement( 'fieldset' ) .
- Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+ Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
$this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
$this->getTextBox( 'wgDBmwschema', 'config-db-schema', array(), $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
Html::closeElement( 'fieldset' ) .
return
$this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
Html::openElement( 'fieldset' ) .
- Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+ Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
$this->getTextBox( 'wgDBname', 'config-db-name', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
$this->getTextBox( 'wgDBprefix', 'config-db-prefix', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-prefix-help' ) ) .
Html::closeElement( 'fieldset' ) .
$s .= Xml::openElement( 'div', array(
'id' => 'dbMyisamWarning'
));
- $s .= $this->parent->getWarningBox( wfMsg( 'config-mysql-myisam-dep' ) );
+ $s .= $this->parent->getWarningBox( wfMessage( 'config-mysql-myisam-dep' )->text() );
$s .= Xml::closeElement( 'div' );
if( $this->getVar( '_MysqlEngine' ) != 'MyISAM' ) {
return
$this->getTextBox( 'wgDBserver', 'config-db-host-oracle', array(), $this->parent->getHelpBox( 'config-db-host-oracle-help' ) ) .
Html::openElement( 'fieldset' ) .
- Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+ Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
$this->getTextBox( 'wgDBprefix', 'config-db-prefix' ) .
$this->getTextBox( '_OracleDefTS', 'config-oracle-def-ts' ) .
$this->getTextBox( '_OracleTempTS', 'config-oracle-temp-ts', array(), $this->parent->getHelpBox( 'config-db-oracle-help' ) ) .
Html::closeElement( 'fieldset' ) .
- $this->parent->getWarningBox( wfMsg( 'config-db-account-oracle-warn' ) ).
+ $this->parent->getWarningBox( wfMessage( 'config-db-account-oracle-warn' )->text() ).
$this->getInstallUserBox().
$this->getWebUserBox();
}
$this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
$this->getTextBox( 'wgDBport', 'config-db-port' ) .
Html::openElement( 'fieldset' ) .
- Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+ Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
$this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
$this->getTextBox( 'wgDBmwschema', 'config-db-schema', array(), $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
Html::closeElement( 'fieldset' ) .
$oldUser = $wgUser;
$wgUser = $this->getUser();
$article = WikiPage::factory( $this->title );
- $reason = wfMsgForContent( 'double-redirect-fixed-' . $this->reason,
- $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText() );
+ $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
+ $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
+ )->inContentLanguage()->text();
$article->doEdit( $newText, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
$wgUser = $oldUser;
*/
function getUser() {
if ( !self::$user ) {
- self::$user = User::newFromName( wfMsgForContent( 'double-redirect-fixer' ), false );
+ self::$user = User::newFromName( wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text(), false );
# FIXME: newFromName could return false on a badly configured wiki.
if ( !self::$user->isLoggedIn() ) {
self::$user->addToDatabase();
}
$width = $params['width'];
$height = $params['height'];
- $srcPath = $image->getLocalRefPath();
$page = $params['page'];
if ( $page > $this->pageCount( $image ) ) {
return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'djvu_page_error' ) );
return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'thumbnail_dest_directory' ) );
}
+ $srcPath = $image->getLocalRefPath();
# Use a subshell (brackets) to aggregate stderr from both pipeline commands
# before redirecting it to the overall stdout. This works in both Linux and Windows XP.
$cmd = '(' . wfEscapeShellArg( $wgDjvuRenderer ) . " -format=ppm -page={$page}" .
$info[] = $original;
if ( $metadata['looped'] ) {
- $info[] = wfMsgExt( 'file-info-gif-looped', 'parseinline' );
+ $info[] = wfMessage( 'file-info-gif-looped' )->parse();
}
if ( $metadata['frameCount'] > 1 ) {
- $info[] = wfMsgExt( 'file-info-gif-frames', 'parseinline', $metadata['frameCount'] );
+ $info[] = wfMessage( 'file-info-gif-frames' )->numParams( $metadata['frameCount'] )->parse();
}
if ( $metadata['duration'] ) {
$info[] = $original;
if ( $metadata['loopCount'] == 0 ) {
- $info[] = wfMsgExt( 'file-info-png-looped', 'parseinline' );
+ $info[] = wfMessage( 'file-info-png-looped' )->parse();
} elseif ( $metadata['loopCount'] > 1 ) {
- $info[] = wfMsgExt( 'file-info-png-repeat', 'parseinline', $metadata['loopCount'] );
+ $info[] = wfMessage( 'file-info-png-repeat' )->numParams( $metadata['loopCount'] )->parse();
}
if ( $metadata['frameCount'] > 0 ) {
- $info[] = wfMsgExt( 'file-info-png-frames', 'parseinline', $metadata['frameCount'] );
+ $info[] = wfMessage( 'file-info-png-frames' )->numParams( $metadata['frameCount'] )->parse();
}
if ( $metadata['duration'] ) {
$clientHeight = $params['height'];
$physicalWidth = $params['physicalWidth'];
$physicalHeight = $params['physicalHeight'];
- $srcPath = $image->getLocalRefPath();
if ( $flags & self::TRANSFORM_LATER ) {
return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
wfMsg( 'thumbnail_dest_directory' ) );
}
+ $srcPath = $image->getLocalRefPath();
$status = $this->rasterize( $srcPath, $dstPath, $physicalWidth, $physicalHeight );
if( $status === true ) {
return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
* @ingroup Cache
*/
class SqlBagOStuff extends BagOStuff {
-
/**
* @var LoadBalancer
*/
var $shards = 1;
var $tableName = 'objectcache';
+ protected $connFailureTime = 0; // UNIX timestamp
+ protected $connFailureError; // exception
+
/**
* Constructor. Parameters are:
* - server: A server info structure in the format required by each
*/
protected function getDB() {
global $wgDebugDBTransactions;
+
+ # Don't keep timing out trying to connect for each call if the DB is down
+ if ( $this->connFailureError && ( time() - $this->connFailureTime ) < 60 ) {
+ throw $this->connFailureError;
+ }
+
if ( !isset( $this->db ) ) {
# If server connection info was given, use that
if ( $this->serverInfo ) {
if ( wfGetDB( DB_MASTER )->getType() == 'mysql' ) {
$this->lb = wfGetLBFactory()->newMainLB();
$this->db = $this->lb->getConnection( DB_MASTER );
- $this->db->clearFlag( DBO_TRX );
+ $this->db->clearFlag( DBO_TRX ); // auto-commit mode
} else {
$this->db = wfGetDB( DB_MASTER );
}
public function getMulti( array $keys ) {
$values = array(); // array of (key => value)
- $keysByTableName = array();
- foreach ( $keys as $key ) {
- $tableName = $this->getTableByKey( $key );
- if ( !isset( $keysByTableName[$tableName] ) ) {
- $keysByTableName[$tableName] = array();
+ try {
+ $db = $this->getDB();
+ $keysByTableName = array();
+ foreach ( $keys as $key ) {
+ $tableName = $this->getTableByKey( $key );
+ if ( !isset( $keysByTableName[$tableName] ) ) {
+ $keysByTableName[$tableName] = array();
+ }
+ $keysByTableName[$tableName][] = $key;
}
- $keysByTableName[$tableName][] = $key;
- }
- $db = $this->getDB();
- $this->garbageCollect(); // expire old entries if any
+ $this->garbageCollect(); // expire old entries if any
- $dataRows = array();
- foreach ( $keysByTableName as $tableName => $tableKeys ) {
- $res = $db->select( $tableName,
- array( 'keyname', 'value', 'exptime' ),
- array( 'keyname' => $tableKeys ),
- __METHOD__ );
- foreach ( $res as $row ) {
- $dataRows[$row->keyname] = $row;
+ $dataRows = array();
+ foreach ( $keysByTableName as $tableName => $tableKeys ) {
+ $res = $db->select( $tableName,
+ array( 'keyname', 'value', 'exptime' ),
+ array( 'keyname' => $tableKeys ),
+ __METHOD__ );
+ foreach ( $res as $row ) {
+ $dataRows[$row->keyname] = $row;
+ }
}
- }
- foreach ( $keys as $key ) {
- if ( isset( $dataRows[$key] ) ) { // HIT?
- $row = $dataRows[$key];
- $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
- if ( $this->isExpired( $row->exptime ) ) { // MISS
- $this->debug( "get: key has expired, deleting" );
- try {
- $db->begin( __METHOD__ );
- # Put the expiry time in the WHERE condition to avoid deleting a
- # newly-inserted value
- $db->delete( $this->getTableByKey( $key ),
- array( 'keyname' => $key, 'exptime' => $row->exptime ),
- __METHOD__ );
- $db->commit( __METHOD__ );
- } catch ( DBQueryError $e ) {
- $this->handleWriteError( $e );
+ foreach ( $keys as $key ) {
+ if ( isset( $dataRows[$key] ) ) { // HIT?
+ $row = $dataRows[$key];
+ $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
+ if ( $this->isExpired( $row->exptime ) ) { // MISS
+ $this->debug( "get: key has expired, deleting" );
+ try {
+ $db->begin( __METHOD__ );
+ # Put the expiry time in the WHERE condition to avoid deleting a
+ # newly-inserted value
+ $db->delete( $this->getTableByKey( $key ),
+ array( 'keyname' => $key, 'exptime' => $row->exptime ),
+ __METHOD__ );
+ $db->commit( __METHOD__ );
+ } catch ( DBQueryError $e ) {
+ $this->handleWriteError( $e );
+ }
+ $values[$key] = false;
+ } else { // HIT
+ $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
}
+ } else { // MISS
$values[$key] = false;
- } else { // HIT
- $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+ $this->debug( 'get: no matching rows' );
}
- } else { // MISS
- $values[$key] = false;
- $this->debug( 'get: no matching rows' );
}
- }
+ } catch ( DBError $e ) {
+ $this->handleReadError( $e );
+ };
return $values;
}
* @return bool
*/
public function set( $key, $value, $exptime = 0 ) {
- $db = $this->getDB();
- $exptime = intval( $exptime );
-
- if ( $exptime < 0 ) {
- $exptime = 0;
- }
+ try {
+ $db = $this->getDB();
+ $exptime = intval( $exptime );
- if ( $exptime == 0 ) {
- $encExpiry = $this->getMaxDateTime();
- } else {
- if ( $exptime < 3.16e8 ) { # ~10 years
- $exptime += time();
+ if ( $exptime < 0 ) {
+ $exptime = 0;
}
- $encExpiry = $db->timestamp( $exptime );
- }
- try {
+ if ( $exptime == 0 ) {
+ $encExpiry = $this->getMaxDateTime();
+ } else {
+ if ( $exptime < 3.16e8 ) { # ~10 years
+ $exptime += time();
+ }
+
+ $encExpiry = $db->timestamp( $exptime );
+ }
$db->begin( __METHOD__ );
// (bug 24425) use a replace if the db supports it instead of
// delete/insert to avoid clashes with conflicting keynames
'exptime' => $encExpiry
), __METHOD__ );
$db->commit( __METHOD__ );
- } catch ( DBQueryError $e ) {
+ } catch ( DBError $e ) {
$this->handleWriteError( $e );
-
return false;
}
* @return bool
*/
public function delete( $key, $time = 0 ) {
- $db = $this->getDB();
-
try {
+ $db = $this->getDB();
$db->begin( __METHOD__ );
$db->delete(
$this->getTableByKey( $key ),
array( 'keyname' => $key ),
__METHOD__ );
$db->commit( __METHOD__ );
- } catch ( DBQueryError $e ) {
+ } catch ( DBError $e ) {
$this->handleWriteError( $e );
-
return false;
}
* @return int|null
*/
public function incr( $key, $step = 1 ) {
- $db = $this->getDB();
- $tableName = $this->getTableByKey( $key );
- $step = intval( $step );
-
try {
+ $db = $this->getDB();
+ $tableName = $this->getTableByKey( $key );
+ $step = intval( $step );
$db->begin( __METHOD__ );
$row = $db->selectRow(
$tableName,
$newValue = null;
}
$db->commit( __METHOD__ );
- } catch ( DBQueryError $e ) {
+ } catch ( DBError $e ) {
$this->handleWriteError( $e );
-
return null;
}
* @return Array
*/
public function keys() {
- $db = $this->getDB();
$result = array();
- for ( $i = 0; $i < $this->shards; $i++ ) {
- $res = $db->select( $this->getTableByShard( $i ),
- array( 'keyname' ), false, __METHOD__ );
- foreach ( $res as $row ) {
- $result[] = $row->keyname;
+ try {
+ $db = $this->getDB();
+ for ( $i = 0; $i < $this->shards; $i++ ) {
+ $res = $db->select( $this->getTableByShard( $i ),
+ array( 'keyname' ), false, __METHOD__ );
+ foreach ( $res as $row ) {
+ $result[] = $row->keyname;
+ }
}
+ } catch ( DBError $e ) {
+ $this->handleReadError( $e );
}
return $result;
* @return bool
*/
public function deleteObjectsExpiringBefore( $timestamp, $progressCallback = false ) {
- $db = $this->getDB();
- $dbTimestamp = $db->timestamp( $timestamp );
- $totalSeconds = false;
- $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
-
try {
+ $db = $this->getDB();
+ $dbTimestamp = $db->timestamp( $timestamp );
+ $totalSeconds = false;
+ $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
for ( $i = 0; $i < $this->shards; $i++ ) {
$maxExpTime = false;
while ( true ) {
}
}
}
- } catch ( DBQueryError $e ) {
+ } catch ( DBError $e ) {
$this->handleWriteError( $e );
+ return false;
}
+
return true;
}
public function deleteAll() {
- $db = $this->getDB();
-
try {
+ $db = $this->getDB();
for ( $i = 0; $i < $this->shards; $i++ ) {
$db->begin( __METHOD__ );
$db->delete( $this->getTableByShard( $i ), '*', __METHOD__ );
$db->commit( __METHOD__ );
}
- } catch ( DBQueryError $e ) {
+ } catch ( DBError $e ) {
$this->handleWriteError( $e );
+ return false;
}
+
+ return true;
}
/**
}
/**
- * Handle a DBQueryError which occurred during a write operation.
- * Ignore errors which are due to a read-only database, rethrow others.
+ * Handle a DBError which occurred during a read operation.
*/
- protected function handleWriteError( $exception ) {
- $db = $this->getDB();
-
- if ( !$db->wasReadOnlyError() ) {
- throw $exception;
+ protected function handleReadError( DBError $exception ) {
+ if ( $exception instanceof DBConnectionError ) {
+ $this->connFailureTime = time();
+ $this->connFailureError = $exception;
}
-
- try {
- $db->rollback( __METHOD__ );
- } catch ( DBQueryError $e ) {
+ wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
+ if ( $this->db ) {
+ wfDebug( __METHOD__ . ": ignoring query error\n" );
+ } else {
+ wfDebug( __METHOD__ . ": ignoring connection error\n" );
}
+ }
- wfDebug( __METHOD__ . ": ignoring query error\n" );
- $db->ignoreErrors( false );
+ /**
+ * Handle a DBQueryError which occurred during a write operation.
+ */
+ protected function handleWriteError( DBError $exception ) {
+ if ( $exception instanceof DBConnectionError ) {
+ $this->connFailureTime = time();
+ $this->connFailureError = $exception;
+ }
+ if ( $this->db && $this->db->wasReadOnlyError() ) {
+ try {
+ $this->db->rollback( __METHOD__ );
+ } catch ( DBError $e ) {}
+ }
+ wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
+ if ( $this->db ) {
+ wfDebug( __METHOD__ . ": ignoring query error\n" );
+ } else {
+ wfDebug( __METHOD__ . ": ignoring connection error\n" );
+ }
}
/**
return $parsed;
}
- $allkeyword = wfMsgForContent( 'searchall' ) . ":";
+ $allkeyword = wfMessage( 'searchall' )->inContentLanguage()->text() . ":";
if ( strncmp( $query, $allkeyword, strlen( $allkeyword ) ) == 0 ) {
$this->namespaces = null;
$parsed = substr( $query, strlen( $allkeyword ) );
$formatted = array_map( array( $wgContLang, 'getFormattedNsText' ), $namespaces );
foreach ( $formatted as $key => $ns ) {
if ( empty( $ns ) )
- $formatted[$key] = wfMsg( 'blanknamespace' );
+ $formatted[$key] = wfMessage( 'blanknamespace' )->text();
}
return $formatted;
}
// can use messages 'watchlisttools-view', 'watchlisttools-edit', 'watchlisttools-raw'
$tools[] = Linker::linkKnown(
SpecialPage::getTitleFor( $arr[0], $arr[1] ),
- wfMsgHtml( "watchlisttools-{$mode}" )
+ wfMessage( "watchlisttools-{$mode}" )->escaped()
);
}
return Html::rawElement( 'span',
array( 'class' => 'mw-watchlist-toollinks' ),
- wfMsg( 'parentheses', $wgLang->pipeList( $tools ) ) );
+ wfMessage( 'parentheses', $wgLang->pipeList( $tools ) )->text() );
}
}
}
if( trim( $comment ) != '' ) {
- $reason .= wfMsgForContent( 'colon-separator' ) . $comment;
+ $reason .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $comment;
}
if ( $user === null ) {
!$this->mTokenOk && !$this->mCancelUpload &&
( $this->mUpload && $this->mUploadClicked )
) {
- $form->addPreText( wfMsgExt( 'session_fail_preview', 'parseinline' ) );
+ $form->addPreText( $this->msg( 'session_fail_preview' )->parse() );
}
# Give a notice if the user is uploading a file that has been deleted or moved
$form->addPreText( $message );
# Add footer to form
- $uploadFooter = wfMessage( 'uploadfooter' );
+ $uploadFooter = $this->msg( 'uploadfooter' );
if ( !$uploadFooter->isDisabled() ) {
$form->addPostText( '<div id="mw-upload-footer-message">'
- . $this->getOutput()->parse( $uploadFooter->plain() ) . "</div>\n" );
+ . $uploadFooter->parseAsBlock() . "</div>\n" );
}
return $form;
*/
protected function showRecoverableUploadError( $message ) {
$sessionKey = $this->mUpload->stashSession();
- $message = '<h2>' . wfMsgHtml( 'uploaderror' ) . "</h2>\n" .
+ $message = '<h2>' . $this->msg( 'uploaderror' )->escaped() . "</h2>\n" .
'<div class="error">' . $message . "</div>\n";
$form = $this->getUploadForm( $message, $sessionKey );
- $form->setSubmitText( wfMsg( 'upload-tryagain' ) );
+ $form->setSubmitText( $this->msg( 'upload-tryagain' )->escaped() );
$this->showUploadForm( $form );
}
/**
$sessionKey = $this->mUpload->stashSession();
- $warningHtml = '<h2>' . wfMsgHtml( 'uploadwarning' ) . "</h2>\n"
+ $warningHtml = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n"
. '<ul class="warning">';
foreach( $warnings as $warning => $args ) {
if( $warning == 'exists' ) {
} elseif( $warning == 'duplicate' ) {
$msg = self::getDupeWarning( $args );
} elseif( $warning == 'duplicate-archive' ) {
- $msg = "\t<li>" . wfMsgExt( 'file-deleted-duplicate', 'parseinline',
- array( Title::makeTitle( NS_FILE, $args )->getPrefixedText() ) )
+ $msg = "\t<li>" . $this->msg( 'file-deleted-duplicate',
+ Title::makeTitle( NS_FILE, $args )->getPrefixedText() )->parse()
. "</li>\n";
} else {
if ( $args === true ) {
} elseif ( !is_array( $args ) ) {
$args = array( $args );
}
- $msg = "\t<li>" . wfMsgExt( $warning, 'parseinline', $args ) . "</li>\n";
+ $msg = "\t<li>" . $this->msg( $warning, $args )->parse() . "</li>\n";
}
$warningHtml .= $msg;
}
$warningHtml .= wfMsgExt( 'uploadwarning-text', 'parse' );
$form = $this->getUploadForm( $warningHtml, $sessionKey, /* $hideIgnoreWarning */ true );
- $form->setSubmitText( wfMsg( 'upload-tryagain' ) );
- $form->addButton( 'wpUploadIgnoreWarning', wfMsg( 'ignorewarning' ) );
- $form->addButton( 'wpCancelUpload', wfMsg( 'reuploaddesc' ) );
+ $form->setSubmitText( $this->msg( 'upload-tryagain' )->text() );
+ $form->addButton( 'wpUploadIgnoreWarning', $this->msg( 'ignorewarning' )->text() );
+ $form->addButton( 'wpCancelUpload', $this->msg( 'reuploaddesc' )->text() );
$this->showUploadForm( $form );
* @param $message string HTML string
*/
protected function showUploadError( $message ) {
- $message = '<h2>' . wfMsgHtml( 'uploadwarning' ) . "</h2>\n" .
+ $message = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n" .
'<div class="error">' . $message . "</div>\n";
$this->showUploadForm( $this->getUploadForm( $message ) );
}
$permErrors = $this->mUpload->verifyTitlePermissions( $this->getUser() );
if( $permErrors !== true ) {
$code = array_shift( $permErrors[0] );
- $this->showRecoverableUploadError( wfMsgExt( $code,
- 'parseinline', $permErrors[0] ) );
+ $this->showRecoverableUploadError( $this->msg( $code, $permErrors[0] )->parse() );
return;
}
if ( in_array( $msgName, $wgForceUIMsgAsContentMsg ) ) {
$msg[$msgName] = "{{int:$msgName}}";
} else {
- $msg[$msgName] = wfMsgForContent( $msgName );
+ $msg[$msgName] = wfMessage( $msgName )->inContentLanguage()->text();
}
}
/** Statuses that only require name changing **/
case UploadBase::MIN_LENGTH_PARTNAME:
- $this->showRecoverableUploadError( wfMsgHtml( 'minlength1' ) );
+ $this->showRecoverableUploadError( $this->msg( 'minlength1' )->escaped() );
break;
case UploadBase::ILLEGAL_FILENAME:
- $this->showRecoverableUploadError( wfMsgExt( 'illegalfilename',
- 'parseinline', $details['filtered'] ) );
+ $this->showRecoverableUploadError( $this->msg( 'illegalfilename',
+ $details['filtered'] )->parse() );
break;
case UploadBase::FILENAME_TOO_LONG:
- $this->showRecoverableUploadError( wfMsgHtml( 'filename-toolong' ) );
+ $this->showRecoverableUploadError( $this->msg( 'filename-toolong' )->escaped() );
break;
case UploadBase::FILETYPE_MISSING:
- $this->showRecoverableUploadError( wfMsgExt( 'filetype-missing',
- 'parseinline' ) );
+ $this->showRecoverableUploadError( $this->msg( 'filetype-missing' )->parse() );
break;
case UploadBase::WINDOWS_NONASCII_FILENAME:
- $this->showRecoverableUploadError( wfMsgExt( 'windows-nonascii-filename',
- 'parseinline' ) );
+ $this->showRecoverableUploadError( $this->msg( 'windows-nonascii-filename' )->parse() );
break;
/** Statuses that require reuploading **/
case UploadBase::EMPTY_FILE:
- $this->showUploadError( wfMsgHtml( 'emptyfile' ) );
+ $this->showUploadError( $this->msg( 'emptyfile' )->escaped() );
break;
case UploadBase::FILE_TOO_LARGE:
- $this->showUploadError( wfMsgHtml( 'largefileserver' ) );
+ $this->showUploadError( $this->msg( 'largefileserver' )->escaped() );
break;
case UploadBase::FILETYPE_BADTYPE:
- $msg = wfMessage( 'filetype-banned-type' );
+ $msg = $this->msg( 'filetype-banned-type' );
if ( isset( $details['blacklistedExt'] ) ) {
$msg->params( $this->getLanguage()->commaList( $details['blacklistedExt'] ) );
} else {
case UploadBase::VERIFICATION_ERROR:
unset( $details['status'] );
$code = array_shift( $details['details'] );
- $this->showUploadError( wfMsgExt( $code, 'parseinline', $details['details'] ) );
+ $this->showUploadError( $this->msg( $code, $details['details'] )->parse() );
break;
case UploadBase::HOOK_ABORTED:
if ( is_array( $details['error'] ) ) { # allow hooks to return error details in an array
$args = null;
}
- $this->showUploadError( wfMsgExt( $error, 'parseinline', $args ) );
+ $this->showUploadError( $this->msg( $error, $args )->parse() );
break;
default:
throw new MWException( __METHOD__ . ": Unknown value `{$details['status']}`" );
if( $exists['warning'] == 'exists' ) {
// Exact match
- $warning = wfMsgExt( 'fileexists', 'parseinline', $filename );
+ $warning = wfMessage( 'fileexists', $filename )->parse();
} elseif( $exists['warning'] == 'page-exists' ) {
// Page exists but file does not
- $warning = wfMsgExt( 'filepageexists', 'parseinline', $filename );
+ $warning = wfMessage( 'filepageexists', $filename )->parse();
} elseif ( $exists['warning'] == 'exists-normalized' ) {
- $warning = wfMsgExt( 'fileexists-extension', 'parseinline', $filename,
- $exists['normalizedFile']->getTitle()->getPrefixedText() );
+ $warning = wfMessage( 'fileexists-extension', $filename,
+ $exists['normalizedFile']->getTitle()->getPrefixedText() )->parse();
} elseif ( $exists['warning'] == 'thumb' ) {
// Swapped argument order compared with other messages for backwards compatibility
- $warning = wfMsgExt( 'fileexists-thumbnail-yes', 'parseinline',
- $exists['thumbFile']->getTitle()->getPrefixedText(), $filename );
+ $warning = wfMessage( 'fileexists-thumbnail-yes',
+ $exists['thumbFile']->getTitle()->getPrefixedText(), $filename )->parse();
} elseif ( $exists['warning'] == 'thumb-name' ) {
// Image w/o '180px-' does not exists, but we do not like these filenames
$name = $file->getName();
$badPart = substr( $name, 0, strpos( $name, '-' ) + 1 );
- $warning = wfMsgExt( 'file-thumbnail-no', 'parseinline', $badPart );
+ $warning = wfMessage( 'file-thumbnail-no', $badPart )->parse();
} elseif ( $exists['warning'] == 'bad-prefix' ) {
- $warning = wfMsgExt( 'filename-bad-prefix', 'parseinline', $exists['prefix'] );
+ $warning = wfMessage( 'filename-bad-prefix', $exists['prefix'] )->parse();
} elseif ( $exists['warning'] == 'was-deleted' ) {
# If the file existed before and was deleted, warn the user of this
$ltitle = SpecialPage::getTitleFor( 'Log' );
$llink = Linker::linkKnown(
$ltitle,
- wfMsgHtml( 'deletionlog' ),
+ wfMessage( 'deletionlog' )->escaped(),
array(),
array(
'type' => 'delete',
parent::__construct( $descriptor, $context, 'upload' );
# Set some form properties
- $this->setSubmitText( wfMsg( 'uploadbtn' ) );
+ $this->setSubmitText( $this->msg( 'uploadbtn' )->text() );
$this->setSubmitName( 'wpUpload' );
# Used message keys: 'accesskey-upload', 'tooltip-upload'
$this->setSubmitTooltip( 'upload' );
'help' => wfMsgExt( 'upload-maxfilesize',
array( 'parseinline', 'escapenoentities' ),
$this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
- ) . ' ' . wfMsgHtml( 'upload_source_file' ),
+ ) . ' ' . $this->msg( 'upload_source_file' )->escaped(),
'checked' => $selectedSourceType == 'file',
);
if ( $canUploadByUrl ) {
'help' => wfMsgExt( 'upload-maxfilesize',
array( 'parseinline', 'escapenoentities' ),
$this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
- ) . ' ' . wfMsgHtml( 'upload_source_url' ),
+ ) . ' ' . $this->msg( 'upload_source_url' )->escaped(),
'checked' => $selectedSourceType == 'url',
);
}
* @return string
*/
private static function getMediaWikiCredits() {
- $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMsg( 'version-license' ) );
+ $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMessage( 'version-license' )->text() );
// This text is always left-to-right.
$ret .= '<div>';
$ret .= "__NOTOC__
" . self::getCopyrightAndAuthorList() . "\n
- " . wfMsg( 'version-license-info' );
+ " . wfMessage( 'version-license-info' )->text();
$ret .= '</div>';
return str_replace( "\t\t", '', $ret ) . "\n";
'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
'Timo Tijhof',
- wfMsg( 'version-poweredby-others' )
+ wfMessage( 'version-poweredby-others' )->text()
);
- return wfMsg( 'version-poweredby-credits', date( 'Y' ),
- $wgLang->listToText( $authorList ) );
+ return wfMessage( 'version-poweredby-credits', date( 'Y' ),
+ $wgLang->listToText( $authorList ) )->text();
}
/**
$dbr = wfGetDB( DB_SLAVE );
// Put the software in an array of form 'name' => 'version'. All messages should
- // be loaded here, so feel free to use wfMsg*() in the 'name'. Raw HTML or wikimarkup
- // can be used.
+ // be loaded here, so feel free to use wfMessage in the 'name'. Raw HTML or
+ // wikimarkup can be used.
$software = array();
$software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked();
$software['[http://www.php.net/ PHP]'] = phpversion() . " (" . php_sapi_name() . ")";
// Allow a hook to add/remove items.
wfRunHooks( 'SoftwareInfo', array( &$software ) );
- $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMsg( 'version-software' ) ) .
+ $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMessage( 'version-software' )->text() ) .
Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-software' ) ) .
"<tr>
- <th>" . wfMsg( 'version-software-product' ) . "</th>
- <th>" . wfMsg( 'version-software-version' ) . "</th>
+ <th>" . wfMessage( 'version-software-product' )->text() . "</th>
+ <th>" . wfMessage( 'version-software-version' )->text() . "</th>
</tr>\n";
foreach( $software as $name => $version ) {
$version = "$wgVersion (r{$svnInfo['checkout-rev']})";
} else {
$version = $wgVersion . ' ' .
- wfMsg(
+ wfMessage(
'version-svn-revision',
isset( $info['directory-rev'] ) ? $info['directory-rev'] : '',
$info['checkout-rev']
- );
+ )->text();
}
wfProfileOut( __METHOD__ );
return false;
}
- $linkText = wfMsg(
+ $linkText = wfMessage(
'version-svn-revision',
isset( $info['directory-rev'] ) ? $info['directory-rev'] : '',
$info['checkout-rev']
- );
+ )->text();
if ( isset( $info['viewvc-url'] ) ) {
$version = "$wgVersion [{$info['viewvc-url']} $linkText]";
public static function getExtensionTypes() {
if ( self::$extensionTypes === false ) {
self::$extensionTypes = array(
- 'specialpage' => wfMsg( 'version-specialpages' ),
- 'parserhook' => wfMsg( 'version-parserhooks' ),
- 'variable' => wfMsg( 'version-variables' ),
- 'media' => wfMsg( 'version-mediahandlers' ),
- 'antispam' => wfMsg( 'version-antispam' ),
- 'skin' => wfMsg( 'version-skins' ),
- 'api' => wfMsg( 'version-api' ),
- 'other' => wfMsg( 'version-other' ),
+ 'specialpage' => wfMessage( 'version-specialpages' )->text(),
+ 'parserhook' => wfMessage( 'version-parserhooks' )->text(),
+ 'variable' => wfMessage( 'version-variables' )->text(),
+ 'media' => wfMessage( 'version-mediahandlers' )->text(),
+ 'antispam' => wfMessage( 'version-antispam' )->text(),
+ 'skin' => wfMessage( 'version-skins' )->text(),
+ 'api' => wfMessage( 'version-api' )->text(),
+ 'other' => wfMessage( 'version-other' )->text(),
);
wfRunHooks( 'ExtensionTypes', array( &self::$extensionTypes ) );
*/
wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
- $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), wfMsg( 'version-extensions' ) ) .
+ $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), $this->msg( 'version-extensions' )->text() ) .
Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-ext' ) );
// Make sure the 'other' type is set to an array.
$out .= $this->getExtensionCategory( 'other', $extensionTypes['other'] );
if ( count( $wgExtensionFunctions ) ) {
- $out .= $this->openExtType( wfMsg( 'version-extension-functions' ), 'extension-functions' );
+ $out .= $this->openExtType( $this->msg( 'version-extension-functions' )->text(), 'extension-functions' );
$out .= '<tr><td colspan="4">' . $this->listToText( $wgExtensionFunctions ) . "</td></tr>\n";
}
for ( $i = 0; $i < $cnt; ++$i ) {
$tags[$i] = "<{$tags[$i]}>";
}
- $out .= $this->openExtType( wfMsg( 'version-parser-extensiontags' ), 'parser-tags' );
+ $out .= $this->openExtType( $this->msg( 'version-parser-extensiontags' )->text(), 'parser-tags' );
$out .= '<tr><td colspan="4">' . $this->listToText( $tags ). "</td></tr>\n";
}
$fhooks = $wgParser->getFunctionHooks();
if( count( $fhooks ) ) {
- $out .= $this->openExtType( wfMsg( 'version-parser-function-hooks' ), 'parser-function-hooks' );
+ $out .= $this->openExtType( $this->msg( 'version-parser-function-hooks' )->text(), 'parser-function-hooks' );
$out .= '<tr><td colspan="4">' . $this->listToText( $fhooks ) . "</td></tr>\n";
}
# Make subversion text/link.
if ( $svnInfo !== false ) {
$directoryRev = isset( $svnInfo['directory-rev'] ) ? $svnInfo['directory-rev'] : null;
- $vcsText = wfMsg( 'version-svn-revision', $directoryRev, $svnInfo['checkout-rev'] );
+ $vcsText = $this->msg( 'version-svn-revision', $directoryRev, $svnInfo['checkout-rev'] )->text();
$vcsText = isset( $svnInfo['viewvc-url'] ) ? '[' . $svnInfo['viewvc-url'] . " $vcsText]" : $vcsText;
}
}
if ( isset( $extension['version'] ) ) {
$versionText = '<span class="mw-version-ext-version">' .
- wfMsg( 'version-version', $extension['version'] ) .
+ $this->msg( 'version-version', $extension['version'] )->text() .
'</span>';
} else {
$versionText = '';
$descriptionMsgKey = $descriptionMsg[0]; // Get the message key
array_shift( $descriptionMsg ); // Shift out the message key to get the parameters only
array_map( "htmlspecialchars", $descriptionMsg ); // For sanity
- $description = wfMsg( $descriptionMsgKey, $descriptionMsg );
+ $description = $this->msg( $descriptionMsgKey, $descriptionMsg )->text();
} else {
- $description = wfMsg( $descriptionMsg );
+ $description = $this->msg( $descriptionMsg )->text();
}
}
$myWgHooks = $wgHooks;
ksort( $myWgHooks );
- $ret = Xml::element( 'h2', array( 'id' => 'mw-version-hooks' ), wfMsg( 'version-hooks' ) ) .
+ $ret = Xml::element( 'h2', array( 'id' => 'mw-version-hooks' ), $this->msg( 'version-hooks' )->text() ) .
Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-hooks' ) ) .
"<tr>
- <th>" . wfMsg( 'version-hook-name' ) . "</th>
- <th>" . wfMsg( 'version-hook-subscribedby' ) . "</th>
+ <th>" . $this->msg( 'version-hook-name' )->text() . "</th>
+ <th>" . $this->msg( 'version-hook-subscribedby' )->text() . "</th>
</tr>\n";
foreach ( $myWgHooks as $hook => $hooks ) {
$list = array();
foreach( (array)$authors as $item ) {
if( $item == '...' ) {
- $list[] = wfMsg( 'version-poweredby-others' );
+ $list[] = $this->msg( 'version-poweredby-others' )->text();
} else {
$list[] = $item;
}
'version-entrypoints-load-php' => wfScript( 'load' ),
);
- $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), wfMsg( 'version-entrypoints' ) ) .
+ $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), $this->msg( 'version-entrypoints' )->text() ) .
Html::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'mw-version-entrypoints-table' ) ) .
Html::openElement( 'tr' ) .
- Html::element( 'th', array(), wfMessage( 'version-entrypoints-header-entrypoint' )->text() ) .
- Html::element( 'th', array(), wfMessage( 'version-entrypoints-header-url' )->text() ) .
+ Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-entrypoint' )->text() ) .
+ Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-url' )->text() ) .
Html::closeElement( 'tr' );
foreach ( $entryPoints as $message => $value ) {
$out .= Html::openElement( 'tr' ) .
// ->text() looks like it should be ->parse(), but this function
// returns wikitext, not HTML, boo
- Html::rawElement( 'td', array(), wfMessage( $message )->text() ) .
+ Html::rawElement( 'td', array(), $this->msg( $message )->text() ) .
Html::rawElement( 'td', array(), Html::rawElement( 'code', array(), "[$url $value]" ) ) .
Html::closeElement( 'tr' );
}
$wgOut->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>",
array( 'virus-badscanner', $wgAntivirus ) );
wfProfileOut( __METHOD__ );
- return wfMsg( 'virus-unknownscanner' ) . " $wgAntivirus";
+ return wfMessage( 'virus-unknownscanner' )->text() . " $wgAntivirus";
}
# look up scanner configuration
* @return string
*/
function getMessageFromDB( $msg ) {
- return wfMsgExt( $msg, array( 'parsemag', 'language' => $this ) );
+ return wfMessage( $msg )->inLanguage( $this )->text();
}
/**
*
* An example of this function being called:
* <code>
- * wfMsg( 'message', $wgLang->formatNum( $num ) )
+ * wfMessage( 'message' )->numParams( $num )->text()
* </code>
*
* See LanguageGu.php for the Gujarati implementation and
$inner .= '-{';
if ( !$warningDone ) {
$inner .= '<span class="error">' .
- wfMsgForContent( 'language-converter-depth-warning',
- $this->mMaxDepth ) .
+ wfMessage( 'language-converter-depth-warning' )
+ ->numParams( $this->mMaxDepth )->inContentLanguage()->text() .
'</span>';
$warningDone = true;
}
'collapsible-expand' => 'وسع',
'thisisdeleted' => 'أأعرض أو أسترجع $1؟',
'viewdeleted' => 'أأعرض $1؟',
-'restorelink' => '{{PLURAL:$1|$1 تعديل محذوف|تعديلاً واحداً محذوفاً|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلاً محذوفاً|$1 تعديل محذوف}}',
+'restorelink' => '{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}',
'feedlinks' => 'التغذية:',
'feed-invalid' => 'نوع اشتراك التلقيم غير صحيح.',
'feed-unavailable' => 'التلقيمات غير متوفرة',
# Special:ActiveUsers
'activeusers' => 'قائمة المستخدمين النشطين',
'activeusers-intro' => 'هذه قائمة بالمستخدمين الذين مارسوا نوعاً من النشاط خلال {{PLURAL:$1||اليوم الماضي|اليومين الماضيين|ال$1 أيام الماضية|ال$1 يوماً ماضياً|ال$1 يوم ماضي}}.',
-'activeusers-count' => '{{PLURAL:$1|Ù\84ا تعدÙ\8aÙ\84ات ØدÙ\8aثة|تعدÙ\8aÙ\84 ØدÙ\8aØ« Ù\88اØد|تعدÙ\8aÙ\84اÙ\86 ØدÙ\8aثاÙ\86|$1 تعدÙ\8aÙ\84ات ØدÙ\8aثة|$1 تعدÙ\8aÙ\84اÙ\8b ØدÙ\8aثاÙ\8b|$1 تعدÙ\8aÙ\84 ØدÙ\8aØ«}} Ø®Ù\84اÙ\84 {{PLURAL:$3||اÙ\84Ù\8aÙ\88Ù\85 اÙ\84Ù\85اضÙ\8a|اÙ\84Ù\8aÙ\88Ù\85Ù\8aÙ\86 اÙ\84Ù\85اضÙ\8aÙ\8aÙ\86|$3 Ø£Ù\8aاÙ\85 Ù\85اضÙ\8aØ©|$3 Ù\8aÙ\88Ù\85اÙ\8b Ù\85اضÙ\8aØ©|اÙ\84$1 Ù\8aÙ\88Ù\85 Ù\85اضÙ\8a}}',
+'activeusers-count' => '{{PLURAL:$1|Ù\85ا Ù\85Ù\86 تعدÙ\8aÙ\84ات|تعدÙ\8aÙ\84 ØدÙ\8aØ« Ù\88اØد|تعدÙ\8aÙ\84اÙ\86 ØدÙ\8aثاÙ\86|$1 تعدÙ\8aÙ\84ات ØدÙ\8aثة|$1 تعدÙ\8aÙ\84ا ØدÙ\8aثا|$1 تعدÙ\8aÙ\84 ØدÙ\8aØ«}} Ù\85Ù\86Ø° {{PLURAL:$3||Ù\8aÙ\88Ù\85|Ù\8aÙ\88Ù\85Ù\8aÙ\86|$3 Ø£Ù\8aاÙ\85|$3 Ù\8aÙ\88Ù\85ا|$1 Ù\8aÙ\88Ù\85}}',
'activeusers-from' => 'اعرض المستخدمين بدءاً من:',
'activeusers-hidebots' => 'أخف البوتات',
'activeusers-hidesysops' => 'أخف الإداريين',
'rollback' => 'استرجاع التعديلات',
'rollback_short' => 'استرجع',
'rollbacklink' => 'استرجع',
-'rollbacklinkcount' => 'استرجع {{PLURAL:$1|لا تعديلات|تعديلاً واحداً|تعديلين|$1 تعديلات|$1 تعديل}}',
+'rollbacklinkcount' => 'استرجع {{PLURAL:$1|لا تعديلات|تعديلا واحدا|تعديلين|$1 تعديلات|$1 تعديل}}',
'rollbacklinkcount-morethan' => 'استرجاع أكثر من $1 {{PLURAL:$1|تعديل|تعديلات}}',
'rollbackfailed' => 'لم ينجح الاسترجاع',
'cantrollback' => 'لم يمكن استرجاع التعديل؛
'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}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|cambéu postreru|cambeos postreros}}',
'youhavenewmessagesmulti' => 'Tienes mensaxes nuevos en $1',
'editsection' => 'editar',
'editold' => 'editar',
'expansion-depth-exceeded-warning' => "La páxina pasó la fondura d'espansión",
'parser-unstrip-loop-warning' => 'Deteutóse un bucle "unstrip"',
'parser-unstrip-recursion-limit' => 'Superóse\'l llímite de recursión d\'"unstrip" ($1)',
+'converter-manual-rule-error' => 'Detectóse un error na regla de conversión manual de llingua',
# "Undo" feature
'undo-success' => "La edición se pue esfacer.
'import-interwiki-templates' => 'Incluyir toles plantíes',
'import-interwiki-submit' => 'Importar',
'import-interwiki-namespace' => 'Espaciu de nomes de destín:',
+'import-interwiki-rootpage' => 'Páxina raíz de destín (opcional):',
'import-upload-filename' => 'Nome del ficheru:',
'import-comment' => 'Comentariu:',
'importtext' => "Por favor, esporta'l ficheru dende la wiki d'orixe usando la [[Special:Export|ferramienta d'esportación]].
'import-error-interwiki' => "La páxina «$1» nun s'importó porque'l so nome ta acutáu pa enllaces esternos (interwiki).",
'import-error-special' => "La páxina «$1» nun s'importó porque pertenez a un espaciu de nomes especial que nun permite les páxines.",
'import-error-invalid' => "La páxina «$1» nun s'importó porque tien un nome inválidu.",
+'import-options-wrong' => '{{PLURAL:$2|Opción enquivocada|Opciones enquivocaes}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La páxina raíz dada ye un títulu inválidu.',
+'import-rootpage-nosubpage' => 'L\'espaciu de nomes "$1" de la páxina raíz nun permite subpáxines.',
# Import log
'importlogpage' => "Rexistru d'importaciones",
* <span class="mw-specialpagecached">Páxines especiales en caché (seique nun tean actualizaes).</span>',
'specialpages-group-maintenance' => 'Informes de mantenimientu',
'specialpages-group-other' => 'Otres páxines especiales',
-'specialpages-group-login' => 'Entrar / Crear cuenta',
+'specialpages-group-login' => 'Identificase / crear cuenta',
'specialpages-group-changes' => 'Cambeos recientes y rexistros',
'specialpages-group-media' => 'Informes multimedia y xubíes',
'specialpages-group-users' => 'Usuarios y drechos',
** İstifadəsiz fayl
** Qeyri-ensiklopedik şəxs
** Lisenziyasız fayl
-** Azad şəkillə əvəz olundu',
+** Azad şəkillə əvəz olundu
+** Müəllif istəyi',
'filedelete-edit-reasonlist' => 'Silmə səbəblərini redaktə et',
# MIME search
'uploaddisabledtext' => 'An pagkarga kan mga sagunson pinagpondo tabi.',
'uploadscripted' => "Ining ''file'' igwang HTML o kodang eskritura na pwede ser na salang mainterpretar kan ''browser''.",
'uploadvirus' => "May virus an ''file''! Mga detalye: $1",
+'upload-source' => 'Gikanang sagunson',
'sourcefilename' => 'Ginikanan kan pangaran nin sagunson:',
'sourceurl' => 'Ginikanan kan kilyawan:',
'destfilename' => 'Destinasyon kan pangaran nin sagunson:',
'nolinkstoimage' => 'Mayong mga pahinang nakatakod sa dokumentong ini.',
'sharedupload' => "Ining ''file'' sarong bakas na pagkarga asin pwede ser na gamiton kan ibang mga proyekto.",
'uploadnewversion-linktext' => 'Magkarga nin bàgong bersyon kaining file',
+'shared-repo' => 'sarong pinagheras na repositoryo',
# File reversion
'filerevert' => 'Ibalik an $1',
# File deletion
'filedelete' => 'Parâon an $1',
'filedelete-legend' => 'Parâon an dokumento',
-'filedelete-intro' => "Pigpaparâ mo an '''[[Media:$1|$1]]'''.",
+'filedelete-intro' => "Saimong pagpupuraon an sagunson '''[[Media:$1|$1]]''' kaiba an gabos kaining historiya.",
'filedelete-intro-old' => "Pigpaparâ mo an bersyon kan '''[[Media:$1|$1]]''' sa ngonyan [$4 $3, $2].",
'filedelete-comment' => 'Rason:',
'filedelete-submit' => 'Parâon',
'filedelete-success' => "An '''$1''' pinarâ na.",
-'filedelete-success-old' => '<span class="plainlinks">An bersyón kan \'\'\'[[Media:$1|$1]]\'\'\' na ngonyan na $3, pigparâ na an $2.</span>',
-'filedelete-nofile' => "Mayo man an '''$1''' sa ining sitio.",
+'filedelete-success-old' => "An bersyon kan '''[[Media:$1|$1]]''' magpoon kan $3, $2 pinagpura na tabi.",
+'filedelete-nofile' => "'''$1''' bakong eksistido.",
'filedelete-nofile-old' => "Mayong bersyón na nakaarchibo kan '''$1''' na igwang kan mga piniling ''character''.",
+'filedelete-otherreason' => 'An iba pa/kadugangang rason:',
+'filedelete-reason-otherlist' => 'Ibang dahilan',
+'filedelete-reason-dropdown' => '*Kumon na mga rason nin pagpura
+** Copyright na paglapas
+** Duplikadong sagunson',
+'filedelete-edit-reasonlist' => 'Liwaton an mga rason nin pagpura',
+'filedelete-maintenance' => 'Pagpupura asin restorasyon nin mga sagunson temporaryong pinagpupundo sa panahon nin pagpapakarhay.',
+'filedelete-maintenance-title' => 'Dae makapagpura nin sagunson',
# MIME search
'mimesearch' => 'Paghanap kan MIME',
# Unused templates
'unusedtemplates' => 'Mga templatong dai ginamit',
-'unusedtemplatestext' => 'Piglilista kaining páhina an gabos na mga páhina sa templatong ngaran-espacio na dai nakakaag sa ibang páhina. Giromdomon tabî na sosogon an ibang mga takod sa mga templato bâgo parâon iyan.',
+'unusedtemplatestext' => 'Ining pahina minalista kan gabos na mga pahina sa {{ns:template}} ngarang-espasyo na bakong kabali sa ibang pahina.
+Giromdoma baya na mag-tsek para sa iba pang kasugpon sa mga templato bago mo pagpuraon sinda.',
'unusedtemplateswlh' => 'ibang mga takod',
# Random page
'randompage' => 'Arín man na pahina',
-'randompage-nopages' => 'Mayong páhina an ngaran-espacio.',
+'randompage-nopages' => 'Dae tabi nin mga pahina sa minasunod na {{PLURAL:$2|espasyong-ngaran|mga espasyong-ngaran}}: $1.',
# Random redirect
'randomredirect' => 'Random na pagredirekta',
-'randomredirect-nopages' => 'Mayong paglikay (redirects) didgi sa ngaran-espacio.',
+'randomredirect-nopages' => 'Mayo nin panukdo-liwat sa espasyong-ngaran na "$1".',
# Statistics
'statistics' => 'Mga Estadistiko',
+'statistics-header-pages' => 'Estadistikong pahina',
+'statistics-header-edits' => 'Estadistiko nin pagliwat',
+'statistics-header-views' => 'Estadistiko nin pagmansay',
'statistics-header-users' => 'Mga estadistiko nin parágamit',
+'statistics-header-hooks' => 'Iba pang estadistiko',
+'statistics-articles' => 'Laman na mga pahina',
+'statistics-pages' => 'Mga Pahina',
+'statistics-pages-desc' => 'Gabos na mga pahina sa laog kan wiki, kabali an pahina nin orolay, mga panukdo-liwat, ibp.',
'statistics-files' => 'Pinagkargang mga sagunson',
'statistics-edits' => 'Mga pagliwat sa pahina magpoon pa na an {{SITENAME}} pinagmukna.',
'statistics-edits-average' => 'Katahaw kan mga pagliliwat sa kada pahina',
'statistics-views-peredit' => 'Mga kamansayan kada pagliwat',
'statistics-users' => 'Rehistrado [[Special:ListUsers|users]]',
'statistics-users-active' => 'Mga Aktibong Paragamit',
+'statistics-users-active-desc' => 'Mga paragamit na may ginibong aksyon sa nakaaging {{PLURAL:$1|aldaw|$1 mga aldaw}}',
'statistics-mostpopular' => 'mga pinaka pighiling na pahina',
-'disambiguations' => 'Mga pahinang klaripikasyon',
+'disambiguations' => 'Mga pahinang minatulay pasiring sa pampalinaw na mga pahina',
'disambiguationspage' => 'Template:clarip',
-'disambiguations-text' => "An mga nasunod na páhina nakatakod sa sarong '''páhina nin klaripikasyon'''.
-Imbis, kaipuhan na nakatakod sinda sa maninigong tema.<br />
-An páhina pigkokonsiderar na páhina nin klaripikasyon kun naggagamit ini nin templatong nakatakod sa [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "An mga minasunod na mga pahina igwang laog nin kisera sarong tulay pasiring sa '''pampalinaw na pahina'''.
+Sinda mapuwedeng makipagsugpon pasiring sa sarong mas manigong pahina nanggad.<br />
+An sarong pahina tratado bilang pampalinaw na pahina kun ini minagamit nin sarong templato na nakasugpon gikan sa [[MediaWiki:Disambiguationspage]].",
'doubleredirects' => 'Dobleng mga redirekta',
-'doubleredirectstext' => 'Piglilista kaining pahina an mga pahinang minalikay sa ibang pahinang paralikay. Kada raya may mga takod sa primero asin segundang likay, buda an destino kan segundong likay, na puro-pirme sarong "tunay " na pahinang destino, na dapat duman nakaturo an primerong likay.',
+'doubleredirectstext' => 'Ining pahina minalista nin mga pahina na minatukdo liwat pasiring sa pinagtukdong-liwat na mga pahina.
+Kada palunpon igwang laog na minasugpon pasiring sa enot asin ikaduwang pagtukdo-liwat, siring man sa target kan ikaduwang pagtukdo-liwat, na pirme nanggad an "tunay" na pahinang target, na an enot na pagtukdong-liwat dapat na iyo an pagtutukdoon.
+<del>Pinagpura</del> na mga entrada naresolberan na.',
+'double-redirect-fixed-move' => '[[$1]] pinagbalyo tabi.
+Ini ngunyan minatukdo-liwat pasiring sa [[$2]].',
+'double-redirect-fixed-maintenance' => 'Pinapakarhay na dobleng panukdo-liwat magpoon sa [[$1]] pasiring sa [[$2]].',
+'double-redirect-fixer' => 'Parapakarhay kan panukdo-liwat',
'brokenredirects' => 'Putol na mga paglikay',
-'brokenredirectstext' => 'An nagsusunod naglilikay kan takod sa mga pahinang mayo man:',
+'brokenredirectstext' => 'An mga minasunod na panukdo-liwat nakasugpon pasiring sa busyaw na mga pahina:',
'brokenredirects-edit' => 'hirahón',
'brokenredirects-delete' => 'parâon',
'editingold' => "'''DİQQAT: Saifeniñ eski bir versiyasını deñiştireyatasız.
Saifeni saqlağanıñızdan soñ bu tarihlı versiyadan künümizge qadar olğan deñişmeler yoq olacaq.'''",
'yourdiff' => 'Farqlar',
-'copyrightwarning' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına qoşulğan bütün isseler <i>$2</i> muqavelesi dairesindedir (tafsilât içün $1 saifesine baqıñız).
+'copyrightwarning' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına qoşulğan bütün isseler $2 muqavelesi dairesindedir (tafsilât içün $1 saifesine baqıñız).
Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.<br />
Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız.<br />
-'''<center>MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!</center>'''",
+'''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''",
'copyrightwarning2' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına siz qoşqan bütün isseler başqa bir qullanıcı tarafından deñiştirilip ya da yoq etilip olur. Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.<br />
Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız ($1 baqıñız).<br />
'''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''",
'shown-title' => 'Zobrazit $1 {{PLURAL:$1|výsledek|výsledky|výsledků}} na stránku',
'viewprevnext' => 'Ukázat ($1 {{int:pipe-separator}} $2) ($3).',
'searchmenu-legend' => 'Možnosti hledání',
-'searchmenu-exists' => "*Stránka '''[[$1]]'''",
+'searchmenu-exists' => "'''Na této wiki existuje stránka nazvaná „[[:$1]]“.'''",
'searchmenu-new' => "'''Vytvořte na této wiki stránku „[[:$1]]“!'''",
'searchhelp-url' => 'Help:Obsah',
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Zobrazit stránky, jejichž název začíná „$1“]]',
'import-error-interwiki' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni wedi ei neilltuo at ddiben cysylltu\'n allanol (rhyngwici).',
'import-error-special' => 'Ni fewnforiwyd y dudalen "$1" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i\'w cael.',
'import-error-invalid' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni yn annilys.',
+'import-options-wrong' => '{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>',
# Import log
'importlogpage' => 'Lòg mewnforio',
'import-interwiki-templates' => 'Alle Vorlagen einschließen',
'import-interwiki-submit' => 'Import',
'import-interwiki-namespace' => 'Zielnamensraum:',
+'import-interwiki-rootpage' => 'Zielstammseite (optional):',
'import-upload-filename' => 'Dateiname:',
'import-comment' => 'Grund:',
'importtext' => 'Bitte die Datei über die Spezialseite [[Special:Export|Exportfunktion]] aus dem Quellwiki exportieren.
'import-error-interwiki' => 'Die Seite „$1“ wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.',
'import-error-special' => 'Die Seite „$1“ wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.',
'import-error-invalid' => 'Seite „$1“ wurde nicht importiert, da deren Name ungültig ist.',
+'import-options-wrong' => 'Falsche {{PLURAL:$2|Option|Optionen}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Der angegebene Stammseitenname ist ungültig.',
+'import-rootpage-nosubpage' => 'Im Namensraum „$1“ der Stammseite sind keine Unterseiten erlaubt.',
# Import log
'importlogpage' => 'Import-Logbuch',
'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
-# Unknown messages
-'import-options-wrong' => 'Falsche {{PLURAL:$2|Option|Optionen}}: <nowiki>$1</nowiki>',
);
'import-interwiki-templates' => 'Şablonê hemî dehil bike',
'import-interwiki-submit' => 'Azare de',
'import-interwiki-namespace' => 'Destinasyonê canameyî:',
+'import-interwiki-rootpage' => 'Hedef pelaya reçi (opsiyonel):',
'import-upload-filename' => 'Nameyê dosyayi:',
'import-comment' => 'Vatış:',
'importtext' => 'Kerem ke dosyay, çımeyê wiki ra pê [[Special:Export|kırıştışê teberdayişi]] bıdê teber, Komputerê xo de qeyd kerê u bar kerê tiya.',
'import-error-interwiki' => 'Pela " $1 " qandê name dayışi aya nêgêrêna çıkı namey cı (interwiki) sero cırê ca abıryayo.',
'import-error-special' => 'Pela " $1 " qandê vıraştışi aya nêgêrêna çıkı namay cı nameyo do xısusiyo u na pela rê no name nêgêrêno.',
'import-error-invalid' => 'Pela "$1" nêdebyê de çıkı namey cı çınyo.',
+'import-options-wrong' => '{{PLURAL:$2|Weçenego|Weçenego}} xerpiyaye: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Sernuştey ena pela reçey cı raverde niyo.',
+'import-rootpage-nosubpage' => 'Qan de bınnaman reçe de "$1" re mısade nedano.',
# Import log
'importlogpage' => 'Logê împortî',
'import-interwiki-templates' => 'Wše pśedłogi zapśěgnuś',
'import-interwiki-submit' => 'Importěrowaś',
'import-interwiki-namespace' => 'Celowy mjenjowy rum:',
+'import-interwiki-rootpage' => 'Celowy kórjenjowy bok (opcionalny):',
'import-upload-filename' => 'Datajowe mě:',
'import-comment' => 'Komentar:',
'importtext' => 'Eksportěruj pšosym dataju ze žredlowego wikija z pomocu [[Special:Export|eksporteje funkcije]]. Składuj ju na swójom licadle a nagraj ju sem.',
'import-error-interwiki' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo za eksterne wótkazowanje (interwiki) wuměnjone.',
'import-error-special' => 'Bok "$1" se njeimportěrujo, dokulaž słuša k wósebnemu mjenjowemu rumoju, kótaryž njedowólujo boki.',
'import-error-invalid' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo njepłaśiwe.',
+'import-options-wrong' => '{{PLURAL:$2|Wopacna opcija|Wopacnej opciji|Wopacne opcije|Wopacne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Pódany kórjenjowy bok jo njepłaśiwy.',
+'import-rootpage-nosubpage' => 'Mjenjowy rum "$1" kórjenjowego boka njedowólujo pódboki.',
# Import log
'importlogpage' => 'Log-lisćinu importěrowaś',
'dberrortext' => 'A database query syntax error has occurred.
This may indicate a bug in the software.
The last attempted database query was:
-<blockquote><tt>$1</tt></blockquote>
-from within function "<tt>$2</tt>".
-Database returned error "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+from within function "<code>$2</code>".
+Database returned error "<samp>$3: $4</samp>".',
'dberrortextcl' => 'A database query syntax error has occurred.
The last attempted database query was:
"$1"
To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].
To include a file in a page, use a link in one of the following forms:
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' to use the full version of the file
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
-* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' for directly linking to the file without displaying the file",
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
'upload-permitted' => 'Permitted file types: $1.',
'upload-preferred' => 'Preferred file types: $1.',
'upload-prohibited' => 'Prohibited file types: $1.',
This might be due to a typo in the filename.
Please check whether you really want to upload this file.',
'windows-nonascii-filename' => 'This wiki does not support filenames with special characters.',
-'fileexists' => "A file with this name exists already, please check '''<tt>[[:$1]]</tt>''' if you are not sure if you want to change it.
+'fileexists' => "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
[[$1|thumb]]",
-'filepageexists' => "The description page for this file has already been created at '''<tt>[[:$1]]</tt>''', but no file with this name currently exists.
+'filepageexists' => "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
The summary you enter will not appear on the description page.
To make your summary appear there, you will need to manually edit it.
[[$1|thumb]]",
'fileexists-extension' => "A file with a similar name exists: [[$2|thumb]]
-* Name of the uploading file: '''<tt>[[:$1]]</tt>'''
-* Name of the existing file: '''<tt>[[:$2]]</tt>'''
+* Name of the uploading file: <strong>[[:$1]]</strong>
+* Name of the existing file: <strong>[[:$2]]</strong>
Please choose a different name.",
'fileexists-thumbnail-yes' => "The file seems to be an image of reduced size ''(thumbnail)''.
[[$1|thumb]]
-Please check the file '''<tt>[[:$1]]</tt>'''.
+Please check the file <strong>[[:$1]]</strong>.
If the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
-'file-thumbnail-no' => "The filename begins with '''<tt>$1</tt>'''.
+'file-thumbnail-no' => "The filename begins with <strong>$1</strong>.
It seems to be an image of reduced size ''(thumbnail)''.
If you have this image in full resolution upload this one, otherwise change the filename please.",
'fileexists-forbidden' => 'A file with this name already exists, and cannot be overwritten.
# MIME search
'mimesearch' => 'MIME search',
'mimesearch-summary' => 'This page enables the filtering of files for their MIME type.
-Input: contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
+Input: contenttype/subtype, e.g. <code>image/jpeg</code>.',
'mimetype' => 'MIME type:',
'download' => 'download',
'linksearch-ok' => 'Search',
'linksearch-text' => 'Wildcards such as "*.wikipedia.org" may be used.
Needs at least a top-level domain, for example "*.org".<br />
-Supported protocols: <tt>$1</tt> (do not add any of these in your search).',
+Supported protocols: <code>$1</code> (do not add any of these in your search).',
'linksearch-line' => '$1 is linked from $2',
'linksearch-error' => 'Wildcards may appear only at the start of the hostname.',
'listgrouprights-rights' => 'Rights',
'listgrouprights-helppage' => 'Help:Group rights',
'listgrouprights-members' => '(list of members)',
-'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <tt>($2)</tt></span>', # only translate this message to other languages if you have to change it
-'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <tt>($2)</tt></span>', # only translate this message to other languages if you have to change it
+'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>', # only translate this message to other languages if you have to change it
+'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>', # only translate this message to other languages if you have to change it
'listgrouprights-addgroup' => 'Add {{PLURAL:$2|group|groups}}: $1',
'listgrouprights-removegroup' => 'Remove {{PLURAL:$2|group|groups}}: $1',
'listgrouprights-addgroup-all' => 'Add all groups',
'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}}',
'youhavenewmessagesmulti' => 'Tienes nuevos mensajes en $1',
'import-interwiki-templates' => 'Incluir todas las plantillas',
'import-interwiki-submit' => 'Importar',
'import-interwiki-namespace' => 'Espacio de nombres de destino:',
+'import-interwiki-rootpage' => 'Página raíz del destino (opcional):',
'import-upload-filename' => 'Nombre de archivo:',
'import-comment' => 'Comentario:',
'importtext' => 'Por favor, exporta el archivo desde el wiki de origen usando la [[Special:Export|herramienta de exportación]], guárdalo en tu disco y súbelo aquí.',
'import-error-interwiki' => 'La página "$1" no se ha importado porque su nombre está reservado para la vinculación externa (interwikis).',
'import-error-special' => 'La página "$1" no se ha importado porque pertenece a un espacio de nombres especial que no admite páginas.',
'import-error-invalid' => 'La página "$1" no se ha importado porque su nombre no es válido.',
+'import-options-wrong' => '{{PLURAL:$2|Opción errónea|Opciones erróneas}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La página raíz dada es un título inválido.',
+'import-rootpage-nosubpage' => 'El espacio de nombres "$1" de la página raíz no permite subpáginas.',
# Import log
'importlogpage' => 'Registro de importaciones',
'login-userblocked' => 'See kasutaja on blokeeritud. Sisselogimine pole lubatud.',
'wrongpassword' => 'Vale parool. Proovige uuesti.',
'wrongpasswordempty' => 'Parool jäi sisestamata. Palun proovi uuesti.',
-'passwordtooshort' => 'Parool on liiga lühike.
-See peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.',
+'passwordtooshort' => 'Parool peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.',
'password-name-match' => 'Parool peab kasutajanimest erinema.',
'password-login-forbidden' => 'Selle kasutajanime ja parooli kasutamine on keelatud.',
'mailmypassword' => 'Saada e-posti teel uus parool',
# Rights
'right-read' => 'Lugeda lehekülgi',
'right-edit' => 'Redigeerida lehekülje sisu',
-'right-createpage' => 'Luua lehekülgi (mis pole arutelu leheküljed)',
+'right-createpage' => 'Luua lehekülgi (mis pole aruteluleheküljed)',
'right-createtalk' => 'Luua arutelulehekülgi',
'right-createaccount' => 'Luua uusi kasutajakontosid',
-'right-minoredit' => 'Märkida muudatusi pisimuudatustena',
+'right-minoredit' => 'Märkida muudatusi pisimuudatusteks',
'right-move' => 'Teisaldada lehekülgi',
'right-move-subpages' => 'Teisaldada lehekülgi koos nende alamlehtedega',
'right-move-rootuserpages' => 'Teisaldada kasutajalehekülgi',
'ipbreason' => 'Põhjus:',
'ipbreasonotherlist' => 'Muul põhjusel',
'ipbreason-dropdown' => '*Tavalised blokeerimise põhjused
-** Lehtedelt sisu kustutamine
+** Valeandmete lisamine
+** Lehekülgedelt sisu kustutamine
+** Välislinkide rämpspostitus
** Sodimine
-** Taunitav käitumine, isiklikud rünnakud
-** Mittesobiv kasutajanimi
-** Spämmi levitamine
-** Vale info levitamine',
+** Hirmutav käitumine/ahistamine
+** Mitme konto väärkasutus
+** Lubamatu kasutajanimi',
'ipb-hardblock' => 'Keela sellelt IP-aadressilt sisseloginud kasutajatel redigeerida',
'ipbcreateaccount' => 'Takista konto loomist',
'ipbemailban' => 'Takista kasutajal e-kirjade saatmine',
'ipb-edit-dropdown' => 'Muuda blokeeringu põhjuseid',
'ipb-unblock-addr' => 'Kustuta $1 blokeering',
'ipb-unblock' => 'Kasutaja või IP-aadressi vabastamine blokeerimisest',
-'ipb-blocklist' => 'Vaata kehtivaid keelde',
+'ipb-blocklist' => 'Vaata kehtivaid blokeeringuid',
'ipb-blocklist-contribs' => 'Kasutaja $1 kaastöö',
'unblockip' => 'Blokeerimise eemaldamine',
'unblockiptext' => 'Kasutage allpool olevat vormi redigeerimisõiguste taastamiseks varem blokeeritud IP aadressile.',
# Export
'export' => 'Lehekülgede eksport',
-'exporttext' => 'Sa saad siin eksportida kindla lehekülje või nende kogumi, tekstid, koos kogu nende muudatuste ajalooga, XML kujule viiduna. Seda saad sa vajadusel kasutada teksti ülekandmiseks teise vikisse, kasutades selleks MediaWiki [[Special:Import|impordi lehekülge]].
+'exporttext' => 'Saad eksportida kindla leheküljel või lehekülgede kogumi teksti ja redigeerimisloo XML-kujule viiduna.
+Seda saab teise vikisse importida, kasutades selleks MediaWiki [[Special:Import|impordi lehekülge]].
-Et eksportida lehekülgi, sisesta nende pealkirjad all olevasse teksti kasti, iga pealkiri ise reale, ning vali kas sa soovid saada leheküljest kõiki selle vanemaid versioone (muudatusi) või soovid sa saada leheküljest vaid hetke versiooni.
+Et eksportida lehekülgi, sisesta nende pealkirjad allolevasse tekstikasti, iga pealkiri ise reale ja vali, kas soovid viimast redaktsiooni ja kõiki vanemaid redaktsioone ühes redigeerimislooga või viimast redaktsiooni ühes andmetega viimase redigeerimise kohta.
-Viimasel juhul võid sa näiteks "[[{{MediaWiki:Mainpage}}]]" lehekülje, jaoks kasutada samuti linki kujul: [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
+Viimasel juhul saab kasutada ka linki, näiteks lehekülje "[[{{MediaWiki:Mainpage}}]]" jaoks [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
'exportall' => 'Ekspordi kõik leheküljed',
-'exportcuronly' => 'Lisa vaid viimane versioon lehest, ning mitte kogu ajalugu',
+'exportcuronly' => 'Lisa vaid viimane redaktsioon, mitte kogu ajalugu',
'exportnohistory' => "----
'''Märkus:''' Lehekülgede täieliku ajaloo eksportimine on siin leheküljel jõudluse tagamiseks blokeeritud.",
'exportlistauthors' => 'Lisa kõigile lehekülgedele kogu kaastööliste nimekiri',
'import-interwiki-templates' => 'Liida kõik mallid',
'import-interwiki-submit' => 'Impordi',
'import-interwiki-namespace' => 'Sihtkoha nimeruum:',
+'import-interwiki-rootpage' => 'Sihtkoha juurlehekülg (valikuline):',
'import-upload-filename' => 'Failinimi:',
'import-comment' => 'Kommentaar:',
'importtext' => 'Palun kasuta faili allikvikist eksportimiseks [[Special:Export|ekspordivahendit]].
Salvesta see oma arvutisse ja laadi siia üles.',
-'importstart' => 'Impordin lehekülgi...',
+'importstart' => 'Lehekülgede importimine...',
'import-revision-count' => '$1 {{PLURAL:$1|versioon|versiooni}}',
'importnopages' => 'Ei olnud imporditavaid lehekülgi.',
'imported-log-entries' => 'Imporditi $1 {{PLURAL:$1|logisissekanne|logisissekannet}}.',
'importfailed' => 'Importimine ebaõnnestus: <nowiki>$1</nowiki>',
-'importunknownsource' => 'Unknown import source type
-Tundmatu tüüpi algallikas',
+'importunknownsource' => 'Tundmatut tüüpi impordiallikas',
'importcantopen' => 'Ei saa imporditavat faili avada',
'importbadinterwiki' => 'Vigane vikidevaheline link',
'importnotext' => 'Tühi või ilma tekstita',
'import-error-interwiki' => 'Lehekülge "$1" ei impordita, sest selle pealkirja hoitakse välislinkide (interviki) jaoks.',
'import-error-special' => 'Lehekülge "$1" ei impordita, sest see kuulub erinimeruumi, kus pole leheküljed lubatud.',
'import-error-invalid' => 'Lehekülge "$1" ei impordita, sest selle pealkiri on vigane.',
+'import-options-wrong' => '{{PLURAL:$2|Vale valik|Valed valikud}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Etteantud juurlehekülje pealkiri on vigane.',
+'import-rootpage-nosubpage' => 'Juurlehekülje nimeruumis "$1" pole alamleheküljed lubatud.',
# Import log
'importlogpage' => 'Impordilogi',
'exif-stripbytecounts' => 'Baitide hulk kokkusurutud riba kohta',
'exif-jpeginterchangeformat' => 'Kaugus JPEG SOI-ni',
'exif-jpeginterchangeformatlength' => 'JPEG-andmete suurus baitides',
-'exif-whitepoint' => 'Valge punkti heledus',
+'exif-whitepoint' => 'Valgepunkti värvsus',
'exif-primarychromaticities' => 'Põhivärvide värvsus',
'exif-ycbcrcoefficients' => 'Värviruumi ümberkujundamise maatriksi koefitsiendid',
'exif-referenceblackwhite' => 'Musta ja valge kontrollväärtused',
'exif-sharpness' => 'Teravus',
'exif-devicesettingdescription' => 'Seadme seadistuste kirjeldus',
'exif-imageuniqueid' => 'Üksiku pildi ID',
-'exif-gpsversionid' => 'GPS tähise versioon',
+'exif-gpsversionid' => 'GPS-tähise versioon',
'exif-gpslatituderef' => 'Põhja- või lõunalaius',
'exif-gpslatitude' => 'Laius',
'exif-gpslongituderef' => 'Ida- või läänepikkus',
'exif-lightsource-0' => 'Teadmata',
'exif-lightsource-1' => 'Päevavalgus',
-'exif-lightsource-2' => 'Helendav',
+'exif-lightsource-2' => 'Fluorestsentsvalgus',
'exif-lightsource-3' => 'Hõõglambi valgus',
'exif-lightsource-4' => 'Välk',
'exif-lightsource-9' => 'Hea ilm',
'exif-lightsource-10' => 'Pilvine ilm',
'exif-lightsource-11' => 'Varjus',
-'exif-lightsource-12' => 'Luminofoor päevavalgus (D 5700 - 7100K)',
-'exif-lightsource-13' => 'Luminofoor päevavalgus (N 4600 - 5400K)',
-'exif-lightsource-14' => 'Luminofoor külm valgus (W 3900 - 4500K)',
-'exif-lightsource-15' => 'Luminofoor valge (WW 3200 - 3700K)',
+'exif-lightsource-12' => 'Päevane fluorestsentsvalgus (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Päevavalge fluorestsentsvalgus (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Külmvalge fluorestsentsvalgus (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Valge fluorestsentsvalgus (WW 3200 – 3700K)',
'exif-lightsource-17' => 'Standardne valgus A',
'exif-lightsource-18' => 'Standardne valgus B',
'exif-lightsource-19' => 'Standardne valgus C',
-'exif-lightsource-24' => 'stuudio hõõglambid (ISO)',
+'exif-lightsource-24' => 'Stuudio hõõglamp (ISO)',
'exif-lightsource-255' => 'Muu valgusallikas',
# Flash modes
'version' => 'Versioon',
'version-extensions' => 'Paigaldatud lisad',
'version-specialpages' => 'Erileheküljed',
-'version-parserhooks' => 'Süntaksianalüsaatori lisad (Parser hooks)',
+'version-parserhooks' => 'Parserihaagid',
'version-variables' => 'Muutujad',
'version-antispam' => 'Rämpsposti tõkestus',
'version-skins' => 'Kujundused',
* @author Urhixidur
* @author Xabier Armendaritz
* @author לערי ריינהארט
+ * @author පසිඳු කාවින්ද
*/
$namespaceNames = array(
'version-software' => 'Instalatutako softwarea',
'version-software-product' => 'Produktua',
'version-software-version' => 'Bertsioa',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'Fitxategi bidea',
'rollback' => 'palauta aiempaan versioon',
'rollback_short' => 'Palautus',
'rollbacklink' => 'palauta',
-'rollbacklinkcount' => 'kumoa {{PLURAL:$1|muokkaus|$1 muokkausta}}',
-'rollbacklinkcount-morethan' => 'kumoa yli $1 {{PLURAL:$1|muutos|muutosta}}',
+'rollbacklinkcount' => 'palauta {{PLURAL:$1|muokkaus|$1 muokkausta}}',
+'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ä.',
'alreadyrolled' => 'Käyttäjän [[User:$2|$2]] ([[User talk:$2|keskustelu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tekemiä muutoksia sivuun [[:$1]] ei voi kumota, koska joku muu on muuttanut sivua.
'template-semiprotected' => '(lutvíst vardar)',
'hiddencategories' => 'Henda síðan er í {{PLURAL:$1|1 fjaldum bólki|$1 fjaldum bólkum}}:',
'nocreatetitle' => 'Upprættan av síðu er avmarkað',
+'nocreatetext' => '{{SITENAME}} hevur noktað fyri møguleikanum at upprætta nýggjar síður.
+Tú kanst fara aftur og rætta eina síðu sum longu er til, ella [[Special:UserLogin|rita teg inn ella få tær eina konto]].',
'nocreate-loggedin' => 'Tú hevur ikki loyvi til at upprætta nýggjar síður.',
'sectioneditnotsupported-title' => 'Tað ber ikki til at rætta brot',
'sectioneditnotsupported-text' => 'Tað ber ikki til at rætta brot á hesi síðu.',
'moveddeleted-notice' => 'Henda síðan er blivin strikað.
Strikingar og flytingar loggurin (søgan) fyri hesa síðuna eru at finna her niðanfyri.',
'log-fulllog' => 'Vís allan gerðalistan (loggin)',
+'edit-hook-aborted' => 'Rættingin bleiv avbrotin av einum programmfeili.
+Ongin frágreiðing finst.',
'edit-gone-missing' => 'Tað var ikki møguligt at dagføra síðuna.
Tað sær út til at hon er blivin strikað.',
'edit-conflict' => 'Rættingar trupulleiki (konflikt).',
'right-browsearchive' => 'Leita í strikaðum síðum',
'right-undelete' => 'Endurstovnað eina síðu',
'right-block' => 'Nokta øðrum brúkarum at rætta (blokka)',
+'right-blockemail' => 'Nokta einum brúkara at senda teldupost',
'right-hideuser' => 'Sperra eitt brúkaranavn og goyma tað burtur fyri almenninginum',
'right-unblockself' => 'Taka burtur sperring av sær sjálvum',
'right-protect' => 'Broyt verjustøður og rætta vardar síður',
'uploadnologin' => 'Ikki ritað inn',
'uploadnologintext' => 'Tú mást hava [[Special:UserLogin|ritað inn]]
fyri at leggja fílur upp.',
+'upload-recreate-warning' => "'''Ávaring: Ein fíla við hasum navninum er blivin strikað ella flutt.'''
+
+Strikingar og flytingar loggurin (søgan) fyri ta síðuna verður vístur her niðanfyri fyri at gera tað lættari hjá tær:",
+'uploadtext' => "Brúka formularin her niðanfyri tá tú skalt leggja fílur út.
+Fyri at síggja ella leita eftir fílur sum longu eru lagdar út, kanst tú fara til [[Special:FileList|lista við upploadaðum fílum]], (endur)uploads eru eisini goymd í [[Special:Log/upload|upload logginum]], strikingar í [[Special:Log/delete|strikingarlogginum]].
+
+Fyri at taka eina fílu við á eina síðu, brúka so eina leinkju í ein av hesum formunum:
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' fyri at brúka fulla versjón av fíluni
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' fyri at brúka eina 200 pixel breiða endurgeving í vinstra bredda við 'alt text' sum frágreiðing
+* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' fyri at leinkja beinleiðis til fíluna uttan at vísa fíluna",
'upload-permitted' => 'Loyvd fílu sløg: $1.',
'upload-preferred' => 'Best umtóktu fílu sløg: $1.',
'upload-prohibited' => 'Ikki loyvd fílu sløg: $1.',
'import-interwiki-templates' => 'Inclure tous les modèles',
'import-interwiki-submit' => 'Importer',
'import-interwiki-namespace' => 'Espace de noms de destination :',
+'import-interwiki-rootpage' => 'Page racine de destination (optionnelle):',
'import-upload-filename' => 'Nom du fichier :',
'import-comment' => 'Commentaire :',
'importtext' => 'Veuillez exporter le fichier depuis le wiki d’origine en utilisant son [[Special:Export|outil d’exportation]].
'import-error-interwiki' => "La page « $1 » n'est pas importée parce que son nom est réservé pour un lien externe (interwiki).",
'import-error-special' => 'La page " $1 " n\'est pas importée parce qu\'elle appartient à un espace de noms special qui n’en autorise aucune.',
'import-error-invalid' => 'Page « $1 » n’est pas importée parce que son nom n’est pas valide.',
+'import-options-wrong' => '{{PLURAL:$2|Mauvaise option|Mauvaises options}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La page racine fournie est un titre non valide.',
+'import-rootpage-nosubpage' => 'L\'espace de noms "$1" de la page racine n\'autorise pas les sous-pages.',
# Import log
'importlogpage' => 'Journal des importations',
* @author Tameamseo
* @author Urhixidur
* @author לערי ריינהארט
+ * @author පසිඳු කාවින්ද
*/
$magicWords = array(
'resetpass-submit-cancel' => 'Cealaigh',
'resetpass-temp-password' => 'Focal faire sealadach:',
+# Special:PasswordReset
+'passwordreset-username' => 'Ainm úsáideora:',
+
+# Special:ChangeEmail
+'changeemail-cancel' => 'Cealaigh',
+
# Edit page toolbar
'bold_sample' => 'Cló trom',
'bold_tip' => 'Cló trom',
# Revision deletion
'rev-deleted-user' => '(ainm úsáideora dealaithe)',
'rev-delundel' => 'taispeáin/folaigh',
+'rev-showdeleted' => 'taispeáin',
'revisiondelete' => 'Scrios/díscrios leagain',
'revdelete-show-file-confirm' => 'An bhfuil tú cinnte gur mhaith leat féach ar leasú scriosta don chomhad "<nowiki>$1</nowiki>" ó $2 ag $3?',
'revdelete-show-file-submit' => 'Tá',
'logdelete-selected' => "'''{{PLURAL:$1|Teagmhas log roghnaithe|Teagmhais log roghnaithe}}:'''",
'revdelete-hide-text' => 'Folaigh leagan téacs',
'revdelete-radio-same' => 'ná hathraigh',
+'revdelete-radio-unset' => 'Ní',
'revdel-restore' => 'athraigh infheictheacht',
'pagehist' => 'Stair leathanach',
'deletedhist' => 'Stair scriosta',
'powersearch-redir' => 'Liosta athsheoltaí',
'powersearch-field' => 'Cuardaigh le',
'powersearch-toggleall' => 'Uile',
+'powersearch-togglenone' => 'Tada',
'searchdisabled' => "Tá brón orainn! Mhíchumasaíodh an cuardach téacs iomlán go sealadach chun luas an tsuímh a chosaint. Idir an dá linn, is féidir leat an cuardach Google anseo thíos a úsáid - b'fhéidir go bhfuil sé as dáta.",
# Quickbar
'defemailsubject' => 'Ríomhphost {{GRAMMAR:genitive|{{SITENAME}}}}',
'noemailtitle' => 'Níl aon seoladh ríomhphoist ann',
'noemailtext' => 'Níor thug an úsáideoir seo seoladh ríomhphoist bhailí.',
+'emailusername' => 'Ainm úsáideora:',
'emailfrom' => 'Seoltóir:',
'emailto' => 'Chuig:',
'emailsubject' => 'Ábhar:',
'pagesize' => '(bearta)',
# Restrictions (nouns)
+'restriction-edit' => 'Cuir in eagar',
'restriction-create' => 'Cruthaigh',
'restriction-upload' => 'Uaslódaigh',
'undelete-revision' => 'Leagan scriosta $1 (ó $4, ar $5) le $3:',
'undeletebtn' => 'Díscrios!',
'undeletelink' => 'féach/díscrios',
+'undeleteviewlink' => 'Amharc',
'undeletereset' => 'Athshocraigh',
'undeleteinvert' => 'Cuir an roghnú bun os cionn',
'undeletecomment' => 'Tuairisc:',
'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.',
'allmessagesnotsupportedDB' => "Ní féidir an leathanach seo a úsáid dá bharr gur díchumasaíodh '''\$wgUseDatabaseMessages'''.",
+'allmessages-filter-all' => 'Uile',
+'allmessages-language' => 'Teanga:',
+'allmessages-filter-submit' => 'Gabh',
# Thumbnails
'thumbnail-more' => 'Méadaigh',
'import' => 'Iompórtáil leathanaigh',
'importinterwiki' => 'Iompórtáil trasna vicithe',
'import-interwiki-submit' => 'iompórtáil',
+'import-comment' => 'Nóta tráchta:',
'importtext' => 'Easportáil an comhad ón vici-fhoinse (le húsáid na [[Special:Export|tréithe easportáil]]), sábháil ar do dhíosca é agus uaslódáil anseo é.',
'import-revision-count' => '{{PLURAL:$1|Leagan amháin|$1 leagain}}',
'importnopages' => 'Níl aon leathanaigh chun iompórtáil',
'spamprotectionmatch' => 'Truicear ár scagaire dramhála ag an téacs seo a leanas: $1',
'spambot_username' => 'MediaWiki turscar glanadh',
+# Info page
+'pageinfo-subjectpage' => 'Leathanach',
+
# Skin names
'skinname-standard' => 'Clasaiceach',
'skinname-nostalgia' => 'Sean-nós',
'exif-gpsareainformation' => 'Ainm an cheantair GPS',
'exif-gpsdatestamp' => 'Dáta GPS',
'exif-gpsdifferential' => 'Ceartú difreálach GPS',
+'exif-source' => 'Foinse',
+'exif-languagecode' => 'Teanga',
+'exif-iimcategory' => 'Catagóir',
# EXIF attributes
'exif-compression-1' => 'Neamh-chomhbhrúite',
'watchlistall2' => 'an t-iomlán',
'namespacesall' => 'iad uile',
'monthsall' => 'gach mí',
+'limitall' => 'iad uile',
# E-mail address confirmation
'confirmemail' => 'Deimhnigh do ríomhsheoladh',
'table_pager_prev' => 'Leathanach roimhe',
'table_pager_first' => 'Céad leathanach',
'table_pager_last' => 'Deireadh leathanach',
+'table_pager_limit_submit' => 'Gabh',
'table_pager_empty' => 'Folamh',
# Auto-summaries
'version-license' => 'Ceadúnas',
'version-software' => 'Bogearraí suiteáilte',
'version-software-version' => 'Leagan',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'Cosán comhaid',
# Special:BlankPage
'blankpage' => 'Leathanach bán',
+# HTML forms
+'htmlform-selectorother-other' => 'Eile',
+
+# Feedback
+'feedback-message' => 'Teachtaireacht:',
+'feedback-cancel' => 'Cealaigh',
+
);
'S e \$3 an seòladh IP làithreach agus agus 's e #\$5 ID a' bhacaidh.
Thoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
'blockednoreason' => 'cha deach adhbhar a shònrachadh',
+'whitelistedittext' => 'Feumaidh tu $1 mus urrainn dhut duilleagan a dheasachadh.',
'loginreqlink' => 'log a-steach',
'accmailtitle' => 'Facal-faire air a chur.',
'accmailtext' => "Chaidh facal-faire a chruthachadh air thuaiream airson [[User talk:$1|$1]] 's a chur gu $2.
'import-interwiki-templates' => 'ייבוא גם של כל התבניות המוכללות בדף',
'import-interwiki-submit' => 'ייבוא',
'import-interwiki-namespace' => 'העתקה למרחב השם:',
+'import-interwiki-rootpage' => 'דף הבסיס של היעד (לא חובה):',
'import-upload-filename' => 'שם הקובץ:',
'import-comment' => 'הערה:',
'importtext' => 'נא לייצא את הקובץ מאתר המקור באמצעות ב[[Special:Export|כלי הייצוא]].
'import-error-interwiki' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו שמור לקישור חיצוני (בין־ויקי).',
'import-error-special' => 'לא ניתן לייבא את הדף "$1" כיוון שהוא שייך למרחב שם מיוחד שלא יכול להכיל דפים.',
'import-error-invalid' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו אינו תקין.',
+'import-options-wrong' => '{{PLURAL:$2|אפשרות שגויה|אפשרויות שגויות}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'לדף הבסיס שניתן יש כותרת לא תקינה.',
+'import-rootpage-nosubpage' => 'מרחב השם "$1" של דף הבסיס אינו מאפשר דפי־משנה.',
# Import log
'importlogpage' => 'יומן ייבוא',
'allpagesprefix' => 'Stranice čiji naslov počinje s:',
'allpagesbadtitle' => 'Zadana stranica nije valjana, ili je imala međuwiki predmetak. Možda sadrži jedan ili više znakova koji ne mogu biti uporabljeni u nazivu stranice.',
'allpages-bad-ns' => '{{SITENAME}} nema imenski prostor "$1".',
+'allpages-hide-redirects' => 'Sakrij preusmjeravanja',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate inačicu ove stranice iz privremene memorije, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate inačicu ove stranice iz privremene memorije, koja možda nije potpuno aktualna.',
+'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
# Special:Categories
'categories' => 'Kategorije',
'rollback' => 'Ukloni posljednju promjenu',
'rollback_short' => 'Ukloni',
'rollbacklink' => 'ukloni',
+'rollbacklinkcount' => 'ukloni $1 {{PLURAL:$1|uređivanje|uređivanja}}',
+'rollbacklinkcount-morethan' => 'ukloni više od $1 {{PLURAL:$1|uređivanje|uređivanja}}',
'rollbackfailed' => 'Uklanjanje neuspješno',
'cantrollback' => 'Ne mogu ukloniti posljednju promjenu, postoji samo jedna promjena.',
'alreadyrolled' => 'Ne mogu ukloniti posljednju promjenu članka [[:$1]] koju je napravio [[User:$2|$2]] ([[User talk:$2|Razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); netko je već promijenio stranicu ili uklonio promjenu.
'watchmethod-list' => 'Wobkedźbowanki za aktualnymi změnami přepruwować',
'watchlistcontains' => 'Maš $1 {{PLURAL:$1|stronu|stronje|strony|stronow}} w swojich wobkedźbowankach.',
'iteminvalidname' => 'Problem ze zapiskom „$1“, njepłaćiwe mjeno.',
-'wlnote' => "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|poslednju hodźinu|poslednje '''$2''' hodźinje|poslednje '''$2''' hodźiny|poslednje '''$2''' hodźin}}, staw : $3, $4.",
+'wlnote' => "Deleka {{PLURAL:$1|je poslednja změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|poslednju hodźinu|poslednje '''$2''' hodźinje|poslednje '''$2''' hodźiny|poslednje '''$2''' hodźin}}, staw : $3, $4.",
'wlshowlast' => 'Poslednje $1 hodź. - $2 dnjow - $3 pokazać',
'watchlist-options' => 'Opcije wobkedźbowankow',
'import-interwiki-templates' => 'Wšě předłohi zapřijeć',
'import-interwiki-submit' => 'Importować',
'import-interwiki-namespace' => 'Cilowy mjenowy rum:',
+'import-interwiki-rootpage' => 'Cilowa korjenjowa strona (opcionalna):',
'import-upload-filename' => 'Datajowe mjeno:',
'import-comment' => 'Přičina:',
'importtext' => 'Prošu eksportuj dataju ze žórłoweho wikija z pomocu funkcije [[Special:Export|Strony eksportować]]. Składuj ju na swojim ličaku a nahraj ju tu.',
'import-error-interwiki' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je za eksterne wotkazowanje (interwiki) wuměnjene.',
'import-error-special' => 'Strona "$1" so njeimportuje, dokelž k wosebitemu mjenowemu rumej słuša, kotryž strony njedowola.',
'import-error-invalid' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je njepłaćiwe.',
+'import-options-wrong' => '{{PLURAL:$2|Wopačna opcija|Wopačnej opciji|Wopačne opcije|Wopačne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Podata korjenjowa strona je njepłaćiwa.',
+'import-rootpage-nosubpage' => 'Mjenowy rum "$1" korjenjoweje strony njedowola podstrony.',
# Import log
'importlogpage' => 'Protokol importow',
'rollback' => 'Szerkesztések visszaállítása',
'rollback_short' => 'Visszaállítás',
'rollbacklink' => 'visszaállítás',
+'rollbacklinkcount' => '$1 szerkesztés visszaállítása',
+'rollbacklinkcount-morethan' => 'több mint $1 szerkesztés visszaállítása',
'rollbackfailed' => 'A visszaállítás nem sikerült',
'cantrollback' => 'Nem lehet visszaállítani: az utolsó szerkesztést végző felhasználó az egyetlen, aki a lapot szerkesztette.',
'alreadyrolled' => '[[:$1]] utolsó, [[User:$2|$2]] ([[User talk:$2|vita]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) általi szerkesztését nem lehet visszavonni:
'passwordreset-emailelement' => 'Nome utente: $1
Password temporanea: $2',
'passwordreset-emailsent' => 'È stata inviata una e-mail di promemoria.',
-'passwordreset-emailsent-capture' => "E' stato inviato un e-mail promemoria, il contenuto è riportato di seguito.",
-'passwordreset-emailerror-capture' => "E' stata generata l'e-mail promemoria riportata di seguito. L'invio all'utente non è riuscito: $1",
+'passwordreset-emailsent-capture' => 'È stata inviata una e-mail di promemoria, il contenuto è riportato di seguito.',
+'passwordreset-emailerror-capture' => "È stata generata l'e-mail di promemoria riportata di seguito. L'invio all'utente non è riuscito: $1",
# Special:ChangeEmail
'changeemail' => "Modifica l'indirizzo e-mail",
'showdiff' => 'Mostra cambiamenti',
'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato l'indirizzo IP.",
'anonpreviewwarning' => "''Non hai eseguito il login. Salvando il tuo indirizzo IP sarà registrato nella cronologia di questa voce.''",
-'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo '''Salva la pagina''' la modifica verrà salvata con l'oggetto vuoto.",
+'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
'missingcommenttext' => 'Inserire un commento qui sotto.',
'missingcommentheader' => "'''Attenzione:''' non è stata specificato l'oggetto/l'intestazione di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza intestazione.",
'summary-preview' => "Anteprima dell'oggetto:",
'sitejspreview' => "Questa è solo un'anteprima per provare il JavaScript; le modifiche non sono ancora state salvate!'''",
'userinvalidcssjstitle' => "'''Attenzione:''' Non esiste alcuna skin con nome \"\$1\". Si noti che le pagine per i .css e .js personalizzati hanno l'iniziale del titolo minuscola, ad esempio {{ns:user}}:Esempio/vector.css e non {{ns:user}}:Esempio/Vector.css.",
'updated' => '(Aggiornato)',
-'note' => "'''NOTA:'''",
+'note' => "'''Nota:'''",
'previewnote' => "'''Ricorda che questa è solo un'anteprima.'''
Le tue modifiche NON sono ancora state salvate!",
'continue-editing' => 'Continua a modificare',
'''Se questo è un legittimo tentativo di modifica, riprovare. Se il problema persiste, si può provare a [[Special:UserLogout|scollegarsi]] ed effettuare un nuovo accesso.'''",
'token_suffix_mismatch' => "'''La modifica non è stata salvata perché il client ha mostrato di gestire in modo errato i caratteri di punteggiatura nel token associato alla stessa. Per evitare una possibile corruzione del testo della pagina, è stata rifiutata l'intera modifica. Questa situazione può verificarsi, talvolta, quando vengono usati alcuni servizi di proxy anonimi via web che presentano dei bug.'''",
-'edit_form_incomplete' => "' ' Alcune parti del modulo di modifica non hanno raggiunto il server; controllare che le modifiche siano intatte e riprovare. ' '",
+'edit_form_incomplete' => "'''Alcune parti del modulo di modifica non hanno raggiunto il server; controllare che le modifiche siano intatte e riprovare.'''",
'editing' => 'Modifica di $1',
'creating' => 'Stai creando $1',
'editingsection' => 'Modifica di $1 (sezione)',
'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
'longpageerror' => "'''Errore: il testo inviato è lungo {{PLURAL:$1|1|$1}} kilobyte, che è maggiore della dimensione massima consentita ({{PLURAL:$2|1|$2}} kilobyte).'''
Il testo non può essere salvato.",
-'readonlywarning' => "'''ATTENZIONE: Il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento. Per non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.'''
+'readonlywarning' => "'''Attenzione: il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento.'''
+Per non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.
L'amministratore che ha bloccato il database ha fornito questa spiegazione: $1",
-'protectedpagewarning' => "'''ATTENZIONE: Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''
+'protectedpagewarning' => "'''Attenzione: questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''
L'ultimo elemento del registro è riportato di seguito per informazione:",
'semiprotectedpagewarning' => "'''Nota:''' Questa pagina è stata bloccata in modo che solo gli utenti registrati possano modificarla.
L'ultimo elemento del registro è riportato di seguito per informazione:",
'cascadeprotectedwarning' => "'''Attenzione:''' Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla. Ciò avviene perché la pagina è inclusa {{PLURAL:\$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":",
-'titleprotectedwarning' => "'''ATTENZIONE: Questa pagina è stata bloccata in modo che siano necessari [[Special:ListGroupRights|diritti specifici]] per crearla.'''
+'titleprotectedwarning' => "'''Attenzione: questa pagina è stata bloccata in modo che siano necessari [[Special:ListGroupRights|diritti specifici]] per crearla.'''
L'ultimo elemento del registro è riportato di seguito per informazione:",
'templatesused' => '{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa pagina:',
'templatesusedpreview' => '{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa anteprima:',
'revdelete-only-restricted' => "Errore nel nascondere l'oggetto datato $1, $2: non è possibile nascondere gli oggetti alla vista degli amministratori senza selezionare almeno un'altra delle opzioni di rimozione.",
'revdelete-reason-dropdown' => '*Motivazioni più comuni per la cancellazione
** Violazione di copyright
-** Informazioni personali inappropriate',
+** Informazioni personali inappropriate
+** Informazione potenzialmente diffamatoria',
'revdelete-otherreason' => 'Altra motivazione o motivazione aggiuntiva:',
'revdelete-reasonotherlist' => 'Altra motivazione',
'revdelete-edit-reasonlist' => 'Modifica le motivazioni per la cancellazione',
'datedefault' => 'Nessuna preferenza',
'prefs-beta' => 'Funzionalità beta',
'prefs-datetime' => 'Data e ora',
-'prefs-labs' => 'Funzionalità dei laboratori',
+'prefs-labs' => 'Funzionalità sperimentali',
'prefs-user-pages' => 'Pagine utente',
'prefs-personal' => 'Profilo utente',
'prefs-rc' => 'Ultime modifiche',
'import-interwiki-templates' => 'Includi tutti i template',
'import-interwiki-submit' => 'Importa',
'import-interwiki-namespace' => 'Namespace di destinazione:',
+'import-interwiki-rootpage' => 'Pagina principale di destinazione (opzionale):',
'import-upload-filename' => 'Nome file:',
'import-comment' => 'Oggetto:',
'importtext' => 'Si prega di esportare il file dal sito wiki di origine con la [[Special:Export|funzione di esportazione]], salvarlo sul proprio disco e poi caricarlo qui.',
'import-error-interwiki' => 'La pagina "$1" non viene importata perché il suo nome è riservato per il collegamento esterno (interwiki).',
'import-error-special' => 'La pagina "$1" non viene importata perché appartiene a un namespace speciale che non permette pagine.',
'import-error-invalid' => 'La pagina "$1" non viene importata perché il suo nome non è valido.',
+'import-options-wrong' => '{{PLURAL:$2|Opzione sbagliata|Opzioni sbagliate}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La pagina principale fornita non è un titolo valido.',
+'import-rootpage-nosubpage' => 'Il namespace "$1" della pagina principale non permette di avere sottopagine.',
# Import log
'importlogpage' => 'Importazioni',
'youhavenewmessages' => '$1があります($2)。',
'newmessageslink' => '新着メッセージ',
'newmessagesdifflink' => '最終更新の差分',
+'newmessageslinkplural' => '{{PLURAL:$1|新着メッセージ}}',
+'newmessagesdifflinkplural' => '最終更新の{{PLURAL:$1|差分}}',
'youhavenewmessagesmulti' => '$1に新着メッセージがあります',
'editsection' => '編集',
'editold' => '編集',
'right-editusercssjs' => '他の利用者のCSSとJavaScriptファイルを編集',
'right-editusercss' => '他の利用者のCSSファイルを編集',
'right-edituserjs' => '他の利用者のJavaScriptファイルを編集',
-'right-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\81®即時巻き戻し',
+'right-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92即時巻き戻し',
'right-markbotedits' => '巻き戻しをボットの編集として扱う',
'right-noratelimit' => '速度制限を受けない',
'right-import' => '他のウィキからのページ取り込み',
'action-sendemail' => 'メールを送信',
# Recent changes
-'nchanges' => '$1{{PLURAL:$1|回の変更}}',
+'nchanges' => '$1 {{PLURAL:$1|回の変更}}',
'recentchanges' => '最近の更新',
'recentchanges-legend' => '最近の更新のオプション',
'recentchanges-summary' => 'このページでは、このウィキでの最近の更新を確認できます。',
# Miscellaneous special pages
'nbytes' => '$1バイト',
'ncategories' => '$1カテゴリ',
-'nlinks' => '$1個のリンク',
+'nlinks' => '$1 {{PLURAL:$1|個のリンク}}',
'nmembers' => '$1項目',
'nrevisions' => '$1版',
'nviews' => '$1回の閲覧',
'listusers' => '利用者一覧',
'listusers-editsonly' => '投稿記録のある利用者のみを表示',
'listusers-creationsort' => '作成日順に並べ替え',
-'usereditcount' => '$1{{PLURAL:$1|回の編集}}',
+'usereditcount' => '$1 {{PLURAL:$1|回の編集}}',
'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
'newpages' => '新しいページ',
'newpages-username' => '利用者名:',
'rollback' => '編集を巻き戻し',
'rollback_short' => '巻き戻し',
'rollbacklink' => '巻き戻し',
-'rollbacklinkcount' => '$1個の{{PLURAL:$1|編集|編集}}を巻き戻し',
-'rollbacklinkcount-morethan' => '$1個以上の{{PLURAL:$1|編集|編集}}を巻き戻し',
+'rollbacklinkcount' => '$1版の{{PLURAL:$1|編集}}を巻き戻し',
+'rollbacklinkcount-morethan' => '$1版以上の{{PLURAL:$1|編集}}を巻き戻し',
'rollbackfailed' => '巻き戻しに失敗しました',
'cantrollback' => '編集を差し戻せません。
最後の投稿者が、このページの唯一の作者です。',
'confirmemail_loggedin' => 'メールアドレスは確認されました。',
'confirmemail_error' => '確認情報を保存する際にエラーが発生しました。',
'confirmemail_subject' => '{{SITENAME}} メールアドレスの確認',
-'confirmemail_body' => 'だれかが、IPアドレス$1から、
+'confirmemail_body' => '誰か(おそらくあなた)が、IPアドレス$1から、
このメールアドレスで{{SITENAME}}のアカウント「$2」を登録しました。
-ã\81\93ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81\8cæ\9c¬å½\93ã\81«è\87ªå\88\86ã\81®ã\82\82ã\81®ã\81§ã\81\82ã\82\8bã\81\8b確èª\8dã\81\97ã\81¦ã\80\81
+このアカウントが本当に自分のものか確認して、
{{SITENAME}}のメール機能を有効にするには、以下のURLをブラウザーで開いてください:
$3
'storedversion' => 'Сақталған нұсқасы',
'nonunicodebrowser' => "'''ҚҰЛАҚТАНДЫРУ: Шолғышыңыз Unicode белгілеуіне үйлесімді емес, сондықтан латын емес әріптері бар беттерді өңдеу зіл болу мүмкін.
Жұмыс істеуге ықтималдық беру үшін, төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі'''.",
-'editingold' => '<div id="editingold" style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;"><center><strong>ҚҰЛАҚТАНДЫРУ: Осы беттің ертерек түзетуін өңдеп жатырсыз. Бұны сақтасаңыз, осы түзетуден кейінгі барлық өзгерістер [[Help:Қайтару|жойылады]].</strong></center></div>',
+'editingold' => "'''ҚҰЛАҚТАНДЫРУ: Осы беттің ертерек түзетуін өңдеп жатырсыз.'''
+Бұны сақтасаңыз, осы түзетуден кейінгі барлық өзгерістер жойылады.",
'yourdiff' => 'Айырмалар',
'copyrightwarning' => "Аңғартпа: {{SITENAME}} жобасына берілген барлық үлестер $2 (көбірек ақпарат үшін: $1) құжатына сай деп саналады.
Егер жазуыңыздың еркін өңделуін және ақысыз көпшілікке таратуын қаламасаңыз, мында жарияламауыңыз жөн.<br />
'passwordreset-emailelement' => '사용자 이름: $1
임시 비밀번호: $2',
'passwordreset-emailsent' => '비밀번호 찾기 이메일을 보냈습니다.',
-'passwordreset-emailsent-capture' => '비밀번호 찾기 이메일이 발송되었으며, 아래에 표시되어 있습니다.',
-'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 만들어져 아래에 표시되었지만 발송하는 데에는 실패했습니다: $1',
+'passwordreset-emailsent-capture' => '비밀번호 찾기 이메일이 발송되었으며, 아래에 나타나 있습니다.',
+'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 만들어져 아래에 나타났지만 발송하는 데에는 실패했습니다: $1',
# Special:ChangeEmail
'changeemail' => '이메일 주소 바꾸기',
'link_sample' => '링크 제목',
'link_tip' => '내부 링크',
'extlink_sample' => 'http://www.example.com 사이트 이름',
-'extlink_tip' => '외부 사이트 링크 (주소 앞에 http://가 있어야 합니다.)',
+'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다.)',
'headline_sample' => '제목',
'headline_tip' => '2단계 문단 제목',
'nowiki_sample' => '여기에 위키 문법을 사용하지 않을 글을 적어 주세요',
'image_tip' => '파일 넣기',
'media_tip' => '파일 링크하기',
'sig_tip' => '내 서명과 현재 시각',
-'hr_tip' => '가로줄(되도록 사용하지 말아 주세요)',
+'hr_tip' => '가로 줄 (되도록 사용하지 말아 주세요)',
# Edit pages
'summary' => '편집 요약:',
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}}|검색]]하거나,
+이 문서와 제목이 비슷한 문서가 있는지 [[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|찾기]]를 사용해 관련 문서를 찾아보세요.',
# Revision deletion
'rev-deleted-comment' => '(편집 요약 삭제됨)',
'searchresults' => '찾기 결과',
'searchresults-title' => '"$1"에 대한 찾기 결과',
'searchresulttext' => '{{SITENAME}}의 찾기 기능에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고해주세요.',
-'searchsubtitle' => "'''[[:$1]]''' 문서를 찾고 있습니다. ([[Special:Prefixindex/$1|이름이 ‘$1’ 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|‘$1’ 문서를 가리키는 문서 목록]])",
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 찾고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
'searchsubtitleinvalid' => "찾은 단어 '''$1'''",
'toomanymatches' => '일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.',
'titlematches' => '문서 제목 일치',
'columns' => '열 수:',
'searchresultshead' => '찾기',
'resultsperpage' => '쪽마다 보이는 결과 수:',
-'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 표시할 문서 크기 (바이트 수):',
+'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 보여줄 문서 크기 (바이트 수):',
'stub-threshold-disabled' => '비활성화됨',
-'recentchangesdays' => '최근 바뀜에 표시할 날짜 수:',
+'recentchangesdays' => '최근 바뀜에 보여줄 날짜 수:',
'recentchangesdays-max' => '최대 $1일',
-'recentchangescount' => '기본으로 표시할 편집 수:',
+'recentchangescount' => '기본으로 보여줄 편집 수:',
'prefs-help-recentchangescount' => '이 설정은 최근 바뀜, 문서 역사와 기록에 적용됩니다.',
'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서 목록에 대한 RSS 피드가 만들어집니다.
비밀 값을 알고 있는 사람이라면 누구나 피드를 읽을 수 있으므로 안전한 값을 입력해주세요.
'yourrealname' => '실명:',
'yourlanguage' => '언어:',
'yourvariant' => '언어 변종:',
-'prefs-help-variant' => '위키 내용을 표시할 때 사용할 언어 변종이나 철자 체계를 선택해주세요.',
+'prefs-help-variant' => '위키 내용을 볼 때 사용할 언어 변종이나 철자 체계를 선택해주세요.',
'yournick' => '새 서명:',
'prefs-help-signature' => '토론 문서에 글을 쓴 후에는 마지막에 서명을 해야 합니다. “<nowiki>~~~~</nowiki>” 기호를 추가하면 서명과 글 작성 시각이 자동으로 입력됩니다.',
'badsig' => '서명이 잘못되었습니다.
'prefs-advancedwatchlist' => '고급 설정',
'prefs-displayrc' => '보이기 설정',
'prefs-displaysearchoptions' => '보이기 설정',
-'prefs-displaywatchlist' => '표시 설정',
+'prefs-displaywatchlist' => '보이기 설정',
'prefs-diffs' => '차이',
# User preference: e-mail validation using jQuery
'action-delete' => '이 문서 삭제하기',
'action-deleterevision' => '이 판을 삭제',
'action-deletedhistory' => '이 문서의 삭제된 기여의 역사 보기',
-'action-browsearchive' => '삭제된 문서 검색',
+'action-browsearchive' => '삭제된 문서 찾기',
'action-undelete' => '이 문서를 복구하기',
'action-suppressrevision' => '이 숨겨진 판을 검토하고 복구할',
'action-suppressionlog' => '비공개 기록 보기',
'log' => '기록 목록',
'all-logs-page' => '모든 공개 기록',
'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-text' => '"*.wikipedia.org"와 같이 와일드카드를 사용할 수 있습니다.
적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
-지원하는 프로토콜 목록: <tt>$1</tt> (검색할 때 이것을 추가하지 마세요)',
+지원하는 프로토콜 목록: <tt>$1</tt> (찾을 때 이것을 추가하지 마세요)',
'linksearch-line' => '$2에서 $1 을 링크하고 있습니다.',
'linksearch-error' => '와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.',
# User Messenger
'usermessage-summary' => '시스템 메시지 남기기',
'usermessage-editor' => '시스템 메신저',
-'usermessage-template' => 'MediaWiki:UserMessage',
# Watchlist
'watchlist' => '주시문서 목록',
'watchmethod-recent' => '주시된 문서를 확인하고자 최근 편집을 확인',
'watchmethod-list' => '최근 편집을 확인하고자 주시된 문서 확인',
'watchlistcontains' => '문서 $1개를 주시하고 있습니다.',
-'iteminvalidname' => '"$1" 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...',
+'iteminvalidname' => "'$1' 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...",
'wlnote' => "다음은 최근 '''$2'''시간 동안 바뀐 문서 '''$1'''개 입니다. ($3 $4 기준)",
'wlshowlast' => '최근 $1시간 $2일 또는 $3 동안에 바뀐 문서',
'watchlist-options' => '주시문서 목록 설정',
'protectlogpage' => '문서 보호 기록',
'protectlogtext' => '아래의 목록은 문서 보호에 관한 바뀜 사항에 대한 기록입니다.
현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참고하세요.',
-'protectedarticle' => '"[[$1]]" 문서를 보호함',
-'modifiedarticleprotection' => '"[[$1]]" 문서의 보호 설정을 바꿈',
-'unprotectedarticle' => '"[[$1]]" 문서를 보호 해제함',
-'movedarticleprotection' => '문서의 보호 설정을 "[[$2]]"에서 "[[$1]]"으로 옮김',
+'protectedarticle' => '사용자가 "[[$1]]" 문서를 보호함',
+'modifiedarticleprotection' => '사용자가 "[[$1]]" 문서의 보호 설정을 바꿈',
+'unprotectedarticle' => '사용자가 "[[$1]]" 문서를 보호 해제함',
+'movedarticleprotection' => '사용자가 문서의 보호 설정을 "[[$2]]"에서 "[[$1]]"으로 옮김',
'protect-title' => '"$1" 보호하기',
'protect-title-notallowed' => '"$1" 문서의 보호 수준 보기',
'prot_1movedto2' => '[[$1]] 문서를 [[$2]] 문서로 이동함',
'sp-contributions-username' => 'IP 주소 또는 사용자 이름:',
'sp-contributions-toponly' => '최신판만 보기',
'sp-contributions-submit' => '찾기',
-'sp-contributions-explain' => '',
# What links here
'whatlinkshere' => '여기를 가리키는 문서',
'import-interwiki-templates' => '모든 틀을 포함하기',
'import-interwiki-submit' => '가져오기',
'import-interwiki-namespace' => '새 이름공간:',
+'import-interwiki-rootpage' => '대상 루트 문서 (선택 사항):',
'import-upload-filename' => '파일 이름:',
'import-comment' => '이유:',
'importtext' => '원본 위키에서 [[Special:Export|내보내기]] 기능을 사용해 파일을 내려받으세요.
'import-invalid-interwiki' => '해당 위키에서 문서를 가져올 수 없습니다.',
'import-error-edit' => '현재 문서를 편집할 권한이 없기 때문에 "$1" 문서를 불러올 수 없습니다.',
'import-error-create' => '현재 문서를 만들 권한이 없기 때문에 "$1" 문서를 불러올 수 없습니다.',
-'import-error-interwiki' => '문서 "$1"은 제목이 바깥 고리(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.',
-'import-error-special' => '문서 "$1"은 특수 문서에 속해 있기 때문에 가져오지 않습니다.',
-'import-error-invalid' => '문서 "$1"은 제목이 잘못되었기 때문에 가져오지 않습니다.',
+'import-error-interwiki' => '"$1" 문서는 제목이 바깥 링크(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.',
+'import-error-special' => '"$1" 문서는 특수 문서에 속해 있기 때문에 가져오지 않습니다.',
+'import-error-invalid' => '"$1" 문서는 제목이 잘못되었기 때문에 가져오지 않습니다.',
+'import-options-wrong' => '잘못된 {{PLURAL:$2|선택 사항}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => '주어진 루트 문서는 잘못된 제목입니다.',
+'import-rootpage-nosubpage' => '루트 문서의 "$1" 이름공간은 하위 문서를 허용하지 않습니다.',
# Import log
'importlogpage' => '가져오기 기록',
# Spam protection
'spamprotectiontitle' => '스팸 방지 필터',
'spamprotectiontext' => '스팸 필터가 문서 저장을 막았습니다.
-외부 사이트로 연결하는 링크 중에 블랙리스트에 포함된 사이트가 있을 것입니다.',
+바깥 사이트로 연결하는 링크 중에 블랙리스트에 포함된 사이트가 있을 것입니다.',
'spamprotectionmatch' => '문제가 되는 부분은 다음과 같습니다: $1',
'spambot_username' => 'MediaWiki 스팸 제거',
'spam_reverting' => '$1을 포함하지 않는 최신 버전으로 되돌림',
'exif-licenseurl' => '저작권 라이선스의 URL',
'exif-morepermissionsurl' => '다른 라이선스 정보',
'exif-attributionurl' => '이 저작물을 이용할 때 링크할 주소',
-'exif-preferredattributionname' => '이 저작물을 이용할 때 표시할 저작자 이름',
+'exif-preferredattributionname' => '이 저작물을 이용할 때 보일 저작자 이름',
'exif-pngfilecomment' => 'PNG 파일 주석',
'exif-disclaimer' => '면책 조항',
'exif-contentwarning' => '콘텐츠 경고',
# Friendlier slave lag warnings
'lag-warn-normal' => '최근 $1초 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.',
-'lag-warn-high' => '데이터베이스 서버의 과도한 부하 때문에 최근 $1초 안에 바뀐 문서 목록은 표시되지 않을 수 있습니다.',
+'lag-warn-high' => '데이터베이스 서버의 과도한 부하 때문에 최근 $1초 안에 바뀐 문서 목록은 보여지지 않을 수 있습니다.',
# Watchlist editor
'watchlistedit-numitems' => '토론 문서를 제외하고 문서 $1개를 주시하고 있습니다.',
'watchlistedit-noitems' => '주시문서 목록이 비어 있습니다.',
'watchlistedit-normal-title' => '주시문서 목록 편집하기',
'watchlistedit-normal-legend' => '주시문서 목록에서 문서 제거하기',
-'watchlistedit-normal-explain' => "주시문서 목록에 있는 문서의 제목이 아래에 나열되어 있습니다.
-주시문서 목록에서 제거하려는 문서가 있으면, 각 항목의 체크박스를 선택한 다음 '{{int:Watchlistedit-normal-submit}}'를 클릭해주세요.
-또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.",
+'watchlistedit-normal-explain' => '주시문서 목록에 있는 문서의 제목이 아래에 나열되어 있습니다.
+주시문서 목록에서 제거하려는 문서가 있으면, 각 항목의 체크박스를 선택한 다음 "{{int:Watchlistedit-normal-submit}}"를 클릭해주세요.
+또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.',
'watchlistedit-normal-submit' => '항목 삭제',
'watchlistedit-normal-done' => '주시문서 목록에서 다음 {{PLURAL:$1|항목}}을 주시하지 않습니다:',
'watchlistedit-raw-title' => '주시문서 목록 직접 편집하기',
'watchlistedit-raw-legend' => '주시문서 목록 직접 편집하기',
-'watchlistedit-raw-explain' => "주시문서 목록의 각 항목이 나와 있습니다. 필요한 항목을 직접 추가하거나 제거할 수 있습니다.
+'watchlistedit-raw-explain' => '주시문서 목록의 각 항목이 나와 있습니다. 필요한 항목을 직접 추가하거나 제거할 수 있습니다.
각 줄마다 하나의 제목을 입력하세요.
-수정을 마쳤다면 '{{int:Watchlistedit-raw-submit}}'을 누르면 됩니다.
-또는 [[Special:EditWatchlist|일반적인 편집기]]를 쓸 수도 있습니다.",
+수정을 마쳤다면 "{{int:Watchlistedit-raw-submit}}"을 누르면 됩니다.
+또는 [[Special:EditWatchlist|일반적인 편집기]]를 쓸 수도 있습니다.',
'watchlistedit-raw-titles' => '목록:',
'watchlistedit-raw-submit' => '주시문서 목록 새로 고침',
'watchlistedit-raw-done' => '주시문서 목록을 새로 고쳤습니다.',
'htmlform-selectorother-other' => '기타',
# 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 문서를 삭제하였습니다.',
'logentry-delete-restore' => '$1 사용자가 $3 문서를 복구하였습니다.',
-'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 표시 설정을 바꾸었습니다: $4',
+'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 보이기 설정을 바꾸었습니다: $4',
'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 바꾸었습니다: $4',
-'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 표시 설정을 바꾸었습니다.',
-'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 표시 설정을 바꾸었습니다.',
+'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 보이기 설정을 바꾸었습니다.',
+'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 보이기 설정을 바꾸었습니다.',
'logentry-suppress-delete' => '$1 사용자가 $3 문서를 숨겼습니다.',
-'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 표시 설정을 바꾸었습니다: $4',
-'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 표시 설정을 바꾸었습니다: $4',
-'logentry-suppress-event-legacy' => '$1 사용자가 비공개적으로 $3의 항목에 대한 표시 설정을 바꾸었습니다.',
-'logentry-suppress-revision-legacy' => '$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 표시 설정을 바꾸었습니다.',
+'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 바꾸었습니다: $4',
+'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 바꾸었습니다: $4',
+'logentry-suppress-event-legacy' => '$1 사용자가 비공개적으로 $3의 항목에 대한 보이기 설정을 바꾸었습니다.',
+'logentry-suppress-revision-legacy' => '$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 바꾸었습니다.',
'revdelete-content-hid' => '내용 숨겨짐',
'revdelete-summary-hid' => '편집 요약 숨겨짐',
'revdelete-uname-hid' => '사용자 이름 숨겨짐',
'logentry-newusers-newusers' => '$1 사용자가 계정을 만들었습니다.',
'logentry-newusers-create' => '$1 사용자가 계정을 만들었습니다.',
'logentry-newusers-create2' => '$1 사용자가 $3 계정을 만들었습니다.',
-'logentry-newusers-autocreate' => '$1 계정을 자동적으로 만들었습니다.',
+'logentry-newusers-autocreate' => '$1 사용자 계정을 자동적으로 만들었습니다.',
'newuserlog-byemail' => '이메일로 보낸 비밀번호',
# Feedback
'securelogin-stick-https' => 'Saglabāt HTTPS savienojumu pēc pieslēgšanās',
'yourdomainname' => 'Tavs domēns',
'externaldberror' => 'Notikusi vai nu ārējās autentifikācijas datubāzes kļūda, vai arī tev nav atļauts izmainīt savu ārējo kontu.',
-'login' => 'Ieiet',
+'login' => 'Pieslēgties',
'nav-login-createaccount' => 'Izveidot jaunu lietotāju vai doties iekšā',
'loginprompt' => 'Lai ieietu {{grammar:lokatīvs|{{SITENAME}}}}, tavam datoram ir jāpieņem sīkdatnes (<i>cookies</i>).',
'userlogin' => 'Izveidot jaunu lietotāju vai doties iekšā',
-'userloginnocreate' => 'Ieiet',
+'userloginnocreate' => 'Pieslēgties',
'logout' => 'Iziet',
'userlogout' => 'Iziet',
'notloggedin' => 'Neesi iegājis',
'prefs-beta' => 'Beta funkcijas',
'prefs-datetime' => 'Datums un laiks',
'prefs-labs' => 'Laboratorijas funkcijas',
+'prefs-user-pages' => 'Lietotāja lapas',
'prefs-personal' => 'Lietotāja dati',
'prefs-rc' => 'Pēdējās izmaiņas',
'prefs-watchlist' => 'Uzraugāmie raksti',
** Viens tāds jau ir',
'filedelete-edit-reasonlist' => 'Izmainīt dzēšanas iemeslus',
'filedelete-maintenance' => 'Failu dzēšana un atjaunošana uzturēšanas laikā ir atslēgta.',
+'filedelete-maintenance-title' => 'Nevar izdzēst failu',
# MIME search
'mimesearch' => 'MIME meklēšana',
# Special:Log
'specialloguserlabel' => 'Izpildītājs:',
-'speciallogtitlelabel' => 'Nosaukums:',
+'speciallogtitlelabel' => 'Mērķis (nosaukums vai lietotājs):',
'log' => 'Reģistri',
'all-logs-page' => 'Visi publiski pieejamie reģistri',
'alllogstext' => 'Visi pieejamie {{grammar:akuzatīvs{{SITENAME}}}} reģistri.
'blocklist-userblocks' => 'Paslēpt kontu bloķējumus',
'blocklist-tempblocks' => 'Paslēpt pagaidu bloķējumus',
'blocklist-addressblocks' => 'Paslēpt vienas IP adreses bloķējumus',
+'blocklist-target' => 'Mērķis',
'blocklist-params' => 'Bloķēšanas parametri',
'blocklist-reason' => 'Iemesls',
'ipblocklist-submit' => 'Meklēt',
'import-interwiki-templates' => 'Вклучи ги сите шаблони',
'import-interwiki-submit' => 'Увези',
'import-interwiki-namespace' => 'Целен именски простор:',
+'import-interwiki-rootpage' => 'Целна основна страница (незадолжително):',
'import-upload-filename' => 'Податотека:',
'import-comment' => 'Коментар:',
'importtext' => 'Извезете ја податотеката од изворното вики користејќи ја [[Special:Export|алатката за извоз]].
'import-error-interwiki' => 'Страницата „$1“ не е увезена бидејќи името е резервирано за надворешни врски (меѓувики).',
'import-error-special' => 'Страницата „$1“ не е увезена бидејќи припаѓа на посебен именски простор што не дозволува страници.',
'import-error-invalid' => 'Страницата „$1“ не е увезена бидејќи името ѝ е неважечко.',
+'import-options-wrong' => '{{PLURAL:$2|Погрешна можност|Погрешни можности}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Укажаната основна страница е неважечки наслов.',
+'import-rootpage-nosubpage' => 'Именскиот простор „$1“ на основната страница не допушта потстраници.',
# Import log
'importlogpage' => 'Дневник на увезувања',
Aċċerta ruħek jekk huwiex opportun li tkompli timmodifika din il-paġna.
Ir-reġistru tat-tħassir u tal-mixi huwa pprovdut għal aktar konvenjenza:",
-'moveddeleted-notice' => 'Din il-paġna ġiet imħassra. Ir-reġistri tat-tħassir u tal-mixi għal din il-paġna huma provduti hawn taħt għal referenza.',
+'moveddeleted-notice' => 'Din il-paġna ġiet imħassra. Ir-reġistri tat-tħassir u tal-mixi għal din il-paġna huma provduti hawn taħt bħala referenza.',
'log-fulllog' => 'Uri r-reġistru sħiħ',
'edit-hook-aborted' => "Il-modifika ġiet abbandunata mill-''hook''.
Ma ngħatat l-ebda spjegazzjoni.",
# Miscellaneous special pages
'nbytes' => '{{PLURAL:$1|byte|$1 bytes}}',
-'ncategories' => '{{PLURAL:$1|kategorija|$1 kategoriji}}',
+'ncategories' => '{{PLURAL:$1|kategorija|$1 kategoriji}}',
'nlinks' => '{{PLURAL:$1|link|$1 links}}',
'nmembers' => '$1 {{PLURAL:$1|membru|membri}}',
'nrevisions' => '{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}}',
'import-error-interwiki' => 'De pagina "$1" is niet geïmporteerd omdat deze naam is gereserveerd voor externe verwijzingen (interwiki).',
'import-error-special' => 'Pagina "$1" is niet geïmporteerd omdat deze is geplaatst in een speciale naamruimte waar geen pagina\'s in geplaatst kunnen worden.',
'import-error-invalid' => 'De pagina" "$1" is niet geïmporteerd omdat de naam ongeldig is.',
+'import-options-wrong' => 'Verkeerde {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>',
# Import log
'importlogpage' => 'Importlogboek',
'tooltip-watchlistedit-raw-submit' => 'Oppdater overvakingslista',
'tooltip-recreate' => 'Ved å trykkje på «Nyopprett» vert sida oppretta på nytt.',
'tooltip-upload' => 'Start opplastinga',
-'tooltip-rollback' => '«Attenderull»-knappen attenderullar endringar på denne sida med eitt klikk til den førre utgåva av ein annan brukar',
+'tooltip-rollback' => '«Rulla attende»-knappen rullar med eitt klikk attende endringa(ne) på sida gjorde av den siste bidragsytaren',
'tooltip-undo' => '«Gjer om» attenderullar endringar og opnar endringsvindauga med førehandsvising. Gjer at ein kan leggje til ei årsak samandragsboksen.',
'tooltip-preferences-save' => 'Lagra innstillingar',
'tooltip-summary' => 'Skriv inn eit kort samandrag',
* @author Psubhashish
* @author Sambiwiki
* @author Shijualex
+ * @author Shisir 1945
* @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
*/
'version-software' => 'ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର',
'version-software-product' => 'ଉତ୍ପାଦ',
'version-software-version' => 'ସଂସ୍କରଣ',
+'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
'version-entrypoints-header-url' => 'ଇଉଆରଏଲ',
# Special:FilePath
'import-interwiki-templates' => 'Załącz wszystkie szablony',
'import-interwiki-submit' => 'Importuj',
'import-interwiki-namespace' => 'Docelowa przestrzeń nazw',
+'import-interwiki-rootpage' => 'Docelowa strona główna (opcjonalna):',
'import-upload-filename' => 'Nazwa pliku',
'import-comment' => 'Komentarz:',
'importtext' => 'Korzystając na źródłowej wiki z narzędzia [[Special:Export|eksportu]] wyeksportuj plik.
'import-error-interwiki' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest zarezerwowana do linków zewnętrznych (interwiki).',
'import-error-special' => 'Strona „$1” nie została zaimportowana, ponieważ należy do specjalnej przestrzeni nazw, która nie zezwala na strony.',
'import-error-invalid' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest nieprawidłowa.',
+'import-options-wrong' => '{{PLURAL:$2|Niepoprawna opcja|Niepoprawne opcje}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Wskazana strona główna jest niepoprawna.',
+'import-rootpage-nosubpage' => 'Przestrzeń nazw "$1" strony głównej nie dopuszcza stron podrzędnych.',
# Import log
'importlogpage' => 'Rejestr importu',
'newmessageslink' => 'mëssagi neuv',
'newmessagesdifflink' => "A-i é chèich-còs ëd diferent da 'nt l'ùltima revision",
'youhavenewmessagesfromusers' => "It l'has $1 da {{PLURAL:$3|n'autr utent|$3 utent}} ($2).",
-'youhavenewmessagesmanyusers' => "It l'has $1 da vaire utent ($2).",
+'youhavenewmessagesmanyusers' => "A l'ha $1 da vàire utent ($2).",
'newmessageslinkplural' => '{{PLURAL:$1|un mëssagi neuv|$1 mëssagi neuv}}',
-'newmessagesdifflinkplural' => 'ùltim {{PLURAL:$1|cambiament|cambiament}}',
+'newmessagesdifflinkplural' => 'ùltime {{PLURAL:$1|modìfica|modìfiche}}',
'youhavenewmessagesmulti' => "A l'ha dij neuv mëssagi an $1",
'editsection' => 'modìfica',
'editold' => 'modìfica',
# Edit pages
'summary' => 'Resumé:',
'subject' => 'Sogèt:',
-'minoredit' => "Costa-sì a l'é na modìfica cita",
+'minoredit' => "Costa a l'é na modìfica cita",
'watchthis' => "Ten sot euj st'artìcol-sì",
'savearticle' => 'Salva sta pàgina',
'preview' => 'Preuva',
'import-interwiki-templates' => 'Anserì tùit jë stamp',
'import-interwiki-submit' => 'Amporté',
'import-interwiki-namespace' => 'Spassi nominal ëd destinassion:',
+'import-interwiki-rootpage' => 'Pagina prinsipal ëd destinassion (opsional):',
'import-upload-filename' => "Nòm ëd l'archivi:",
'import-comment' => 'Oget:',
'importtext' => "Për piasì, che as espòrta l'archivi da 'nt la sorgiss wiki ën dovrand l'[[Special:Export|utiss d'esportassion]].
'import-error-interwiki' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
'import-error-special' => "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
'import-error-invalid' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
+'import-options-wrong' => '{{PLURAL:$2|Opsion|Opsion}} sbalià: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "La pagina prinsipal dàita a l'é un tìtol pa bon.",
+'import-rootpage-nosubpage' => 'Lë spassi nominal "$1" ëd la pagina prinsipal a përmëtt pa dle sotpagine.',
# Import log
'importlogpage' => "Registr dj'amportassion",
'tooltip-pt-anonlogin' => "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l'é mej",
'tooltip-pt-logout' => 'Seurte da',
'tooltip-ca-talk' => 'Discussion ansima a sta pàgina ëd contnù.',
-'tooltip-ca-edit' => 'Modifiché sta pàgina-sì. Për piasì, che as fasa na preuva anans che salvé .',
-'tooltip-ca-addsection' => 'Ancamin-a na neuva session',
+'tooltip-ca-edit' => 'A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.',
+'tooltip-ca-addsection' => 'Ancaminé na neuva session',
'tooltip-ca-viewsource' => 'Sta pàgina-sì a l',
'tooltip-ca-history' => 'Veje version dla pàgina.',
'tooltip-ca-protect' => 'Për protege sta pàgina-sì.',
* @author Seb35
* @author Sherbrooke
* @author Shirayuki
+ * @author Shisir 1945
* @author Shushruth
* @author Siddhartha Ghai
* @author Siebrand
<tt><nowiki>* Groupname</nowiki></tt> - defines a new group<br />
<tt><nowiki>** Reason</nowiki></tt> - defines a reason in this group',
'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to [[MediaWiki:Protect-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Ipb-edit-dropdown}}.',
-'protect-expiry-options' => "* Description: Options for the duration of the page protection.
-* <font color=\"red\">Be careful:</font> '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.
-* Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.
+'protect-expiry-options' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
-{{Identical|Infinite}}",
+Options for the duration of the page protection. Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.",
'restriction-type' => 'Used on [[Special:ProtectedPages]]. The text next to a drop-down box. See [[mw:Manual:Administrators|MediaWiki Manual]] for more information on protection.',
'restriction-level' => 'Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. The text next to a drop-down box. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.',
'minimum-size' => 'Used in [[Special:Protectedpages]] as a pair of radio buttons, with {{msg-mw|Maximum-size}}. There is an input box to specify the minimum bites of the projected pages listed.',
'ipbenableautoblock' => '{{Identical|Automatically block ...}}',
'ipbsubmit' => '{{Identical|Block this user}}',
'ipbother' => '{{Identical|Other time}}',
-'ipboptions' => "* Description: Options for the duration of the block.
-* <font color=\"red\">Be careful:</font> '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.
-* Example: See e.g. [[MediaWiki:Ipboptions/nl]] if you still don't know how to do it.
+'ipboptions' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
-{{Identical|Infinite}}",
+Options for the duration of the block. Example: See e.g. [[MediaWiki:Ipboptions/nl]] if you still don't know how to do it.",
'ipbotheroption' => '{{Identical|Other}}',
'ipbotherreason' => '{{Identical|Other/additional reason}}',
'ipbhidename' => 'This is the label for a checkbox in the user block form on [[Special:Block]].',
'import' => 'The title of the special page [[Special:Import]];',
'import-interwiki-history' => 'This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.',
'import-interwiki-submit' => '{{Identical|Import}}',
+'import-interwiki-rootpage' => 'Used on [[Special:Import]] as label',
'import-upload-filename' => 'Used on [[Special:Import]] as label for upload of an XML file containing the pages to import.',
'xml-error-string' => ':$1: Some kind of message, perhaps name of the error?
:$2: line number
* $1 is a page name.
See also:
* {{msg-mw|import-error-edit}}',
+'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
+'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
+'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages.',
# Import log
'importlogpage' => '{{doc-logpage}}',
'version-software-product' => 'Shown in [[Special:Version]]',
'version-software-version' => '{{Identical|Version}}',
'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.',
-'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
-See also {{msg-mw|Version-entrypoints}}',
+'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
'api-error-uploaddisabled' => 'API error message that can be used for client side localisation of API errors.',
'api-error-verification-error' => 'The word "extension" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.',
-# Unknown messages
-'import-interwiki-rootpage' => 'Used on [[Special:Import]] as label',
-'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
-'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
-'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages.',
);
'import-interwiki-templates' => 'Includeți toate formatele',
'import-interwiki-submit' => 'Importă',
'import-interwiki-namespace' => 'Transferă către spațiul de nume:',
+'import-interwiki-rootpage' => 'Pagina rădăcină de destinație (opțional):',
'import-upload-filename' => 'Nume fișier:',
'import-comment' => 'Comentariu:',
'importtext' => 'Vă rugăm să exportați fișierul din wikiul sursă folosind [[Special:Export|utilitarul de exportare]].
'import-error-interwiki' => 'Pagina „$1” nu poate fi importată deoarece numele acesteia este rezervat pentru legături externe (interwiki).',
'import-error-special' => 'Pagina „$1” nu poate fi importată deoarece aparține unui spațiu de nume special care nu admite pagini.',
'import-error-invalid' => 'Pagina „$1” nu poate fi importată deoarece numele acesteia este invalid.',
+'import-options-wrong' => '{{PLURAL:$2|Opțiune eronată|Opțiuni eronate}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Pagina rădăcină furnizată este un titlu nevalid.',
+'import-rootpage-nosubpage' => 'Spațiul de nume „$1” al paginii rădăcină nu permite subpagini.',
# Import log
'importlogpage' => 'Log import',
'youhavenewmessages' => 'Вы получили $1 ($2).',
'newmessageslink' => 'новые сообщения',
'newmessagesdifflink' => 'последнее изменение',
+'youhavenewmessagesfromusers' => 'Вы получили $1 от {{PLURAL:$3|$3 участника|$3 участников|$3 участников}} ($2).',
+'youhavenewmessagesmanyusers' => 'Вы получили $1 от множества пользователей ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|новое сообщение|новые сообщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последнее изменение|последние изменения}}',
'youhavenewmessagesmulti' => 'Вы получили новые сообщения на $1',
'editsection' => 'править',
'editold' => 'править',
'noarticletext-nopermission' => 'В настоящее время на этой странице нет текста.
Вы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] в других статьях,
или <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span>',
+'missing-revision' => 'Версия $1 страницы «{{PAGENAME}}» не существует.
+
+Это обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.
+Подробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].',
'userpage-userdoesnotexist' => 'Учётной записи «<nowiki>$1</nowiki>» не существует. Убедитесь, что вы действительно желаете создать или изменить эту страницу.',
'userpage-userdoesnotexist-view' => 'Не зарегистрировано учётной записи «$1».',
'blocked-notice-logextract' => 'Этот участник в данный момент заблокирован.
'expansion-depth-exceeded-warning' => 'На странице превышен предел вложенности',
'parser-unstrip-loop-warning' => 'Обнаружен незакрытый pre',
'parser-unstrip-recursion-limit' => 'Превышен предел рекурсии ($1)',
+'converter-manual-rule-error' => 'Ошибка в ручном правиле преобразования языка',
# "Undo" feature
'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
'editundo' => 'отменить',
'diff-multi' => '({{PLURAL:$1|не показана $1 промежуточная версия|не показаны $1 промежуточные версии|не показаны $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})',
'diff-multi-manyusers' => '(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показаны $1 промежуточных версий}}, сделанные более чем $2 {{PLURAL:$2|участником|участниками}})',
+'difference-missing-revision' => '{{PLURAL:$2|$2 версия|$2 версии|$2 версий}} для этого сравнения ($1) {{PLURAL:$2|не обнаружена|не обнаружены}}.
+
+Это обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.
+Подробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].',
# Search results
'searchresults' => 'Результаты поиска',
'import-interwiki-templates' => 'Включить все шаблоны',
'import-interwiki-submit' => 'Импортировать',
'import-interwiki-namespace' => 'Целевое пространство имён:',
+'import-interwiki-rootpage' => 'Корневая страница (необязательно):',
'import-upload-filename' => 'Имя файла:',
'import-comment' => 'Примечание:',
'importtext' => 'Пожалуйста, экспортируйте страницу из исходной вики, используя [[Special:Export|соответствующий инструмент]]. Сохраните файл на диск, а затем загрузите его сюда.',
'import-error-interwiki' => 'Страница «$1» не была импортирована, так как её название зарезервировано для внешних ссылок (интервики).',
'import-error-special' => 'Страница «$1» не была импортирована, так как она относится к особому пространству имён, не позволяющему создавать страницы.',
'import-error-invalid' => 'Страница «$1» не была импортирована из-за недопустимого названия.',
+'import-options-wrong' => '{{PLURAL:$2|Неверная опция|Неверные опции}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Указанное название корневой страницы некорректно.',
+'import-rootpage-nosubpage' => 'В пространстве имён указанной корневой страницы «$1» подстраницы запрещены.',
# Import log
'importlogpage' => 'Журнал импорта',
'api-error-file-too-large' => 'Отправленный вами файл слишком велик.',
'api-error-filename-tooshort' => 'Слишком короткое имя файла.',
'api-error-filetype-banned' => 'Этот тип файлов запрещён.',
-'api-error-filetype-banned-type' => '$1 â\80\94 {{PLURAL:$4|запÑ\80еÑ\89Ñ\91ннÑ\8bй Ñ\82ип Ñ\84айла|запÑ\80еÑ\89Ñ\91ннÑ\8bе Ñ\82ипÑ\8b Ñ\84айлов}}. {{PLURAL:$3|РазÑ\80еÑ\88Ñ\91ннÑ\8bм Ñ\82ипом Ñ\84айла Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f|Разрешённые типы файлов:}} $2.',
+'api-error-filetype-banned-type' => '$1 â\80\94 {{PLURAL:$4|запÑ\80еÑ\89Ñ\91ннÑ\8bй Ñ\82ип Ñ\84айла|запÑ\80еÑ\89Ñ\91ннÑ\8bе Ñ\82ипÑ\8b Ñ\84айлов}}. {{PLURAL:$3|РазÑ\80еÑ\88Ñ\91ннÑ\8bй Ñ\82ип Ñ\84айлов â\80\94|Разрешённые типы файлов:}} $2.',
'api-error-filetype-missing' => 'У этого файла отсутствует расширение.',
'api-error-hookaborted' => 'Изменение, которые вы пытались сделать, прервано обработчиком расширения.',
'api-error-http' => 'Внутренняя ошибка: не удаётся подключиться к серверу.',
# Move page
'move-page' => ' $1 चालयतु ।',
'move-page-legend' => 'पृष्ठं रक्ष्यताम्',
+'movepagetext' => "अधोतत्तं प्रपत्रमुपयुज्य पुटस्य पुनर्नामकरणं करिष्यति । अस्य पूर्णेतिहासः नूतनेन नाम्ना सह गच्छति ।
+नूतनशीर्षकस्य प्राचीनशीर्षकं पुनर्निदिष्टं भवति ।
+भवान् पुनर्निदेशान् उन्नतीकरोतु यत् स्वयं मूलशीर्षकं निदेशति ।
+यदि भवान् एवं कर्तुं नैव शक्नोति तर्हि [[Special:DoubleRedirects|द्विगुणम्]]पुनर्दिदेशाः[[Special:BrokenRedirects|भग्नपुनर्निदेशाः]] एतदर्थम् अवश्यं परिशीलयतु ।
+एतत् भवतः दायित्वं यत् अनुबन्धाः सुनिश्चितं स्थानं नयेयुः ।
+यदि नूतनशीर्षकस्य लेखः पूर्वमेवास्ति तर्हि स्थानान्तरणं न भविष्यति । नूतनशीर्षकयुक्तलेखः रिक्तमस्ति अथवा कुत्रचित् अनुप्रेषणं करोति अपि च अनेन सह प्राचीनेतिहासः नास्ति चेत् स्थानान्तरणं न सम्भविष्यति ।
+अर्थात् यदि भवता दोषः संवृत्तः चेत् भवान् पुनः प्राचीननाम्ना एतत्पुटं स्थानान्तरणं कर्तुं शक्नोति । अपि च किञ्चिदपि वर्तमानपुटस्य स्थाने एतत् स्थानान्तरणं कर्तुं नैव शक्नोति ।
+पूर्वसूचना : यदि पुटं प्रसिद्धं तर्हि तस्य एतत् बृहत् अथवा अकस्मात् परिवर्तनं भवितुमर्हति ।
+अनुवर्तनात् पूर्वम् अस्य परिणामं सम्यक् चिन्तयतु ।
+
+'''सूचना'''
+स्थानान्तरकरणेन कस्मिंश्चित् महालेखे अनपेक्षितं परिवर्तनं सम्भवेत् ।
+अतः भवति निवेदनम् अस्ति यत् भवान् पूवमेव परिणामं चित्नयतु ।",
+'movepagetext-noredirectfixer' => "अधोतत्तं प्रपत्रमुपयुज्य पुटस्य पुनर्नामकरणं करिष्यति । अस्य पूर्णेतिहासः नूतनेन नाम्ना सह गच्छति ।
+नूतनशीर्षकस्य प्राचीनशीर्षकं पुनर्निदिष्टं भवति ।
+भवान् पुनर्निदेशान् उन्नतीकरोतु यत् स्वयं मूलशीर्षकं निदेशति ।
+यदि भवान् एवं कर्तुं नैव शक्नोति तर्हि [[Special:DoubleRedirects|द्विगुणम्]]पुनर्दिदेशाः[[Special:BrokenRedirects|भग्नपुनर्निदेशाः]] एतदर्थम् अवश्यं परिशीलयतु ।
+एतत् भवतः दायित्वं यत् अनुबन्धाः सुनिश्चितं स्थानं नयेयुः ।
+यदि नूतनशीर्षकस्य लेखः पूर्वमेवास्ति तर्हि स्थानान्तरणं न भविष्यति । नूतनशीर्षकयुक्तलेखः रिक्तमस्ति अथवा कुत्रचित् अनुप्रेषणं करोति अपि च अनेन सह प्राचीनेतिहासः नास्ति चेत् स्थानान्तरणं न सम्भविष्यति ।
+अर्थात् यदि भवता दोषः संवृत्तः चेत् भवान् पुनः प्राचीननाम्ना एतत्पुटं स्थानान्तरणं कर्तुं शक्नोति । अपि च किञ्चिदपि वर्तमानपुटस्य स्थाने एतत् स्थानान्तरणं कर्तुं नैव शक्नोति ।
+पूर्वसूचना : यदि पुटं प्रसिद्धं तर्हि तस्य एतत् बृहत् अथवा अकस्मात् परिवर्तनं भवितुमर्हति ।
+अनुवर्तनात् पूर्वम् अस्य परिणामं सम्यक् चिन्तयतु ।
+
+'''सूचना'''
+स्थानान्तरकरणेन कस्मिंश्चित् महालेखे अनपेक्षितं परिवर्तनं सम्भवेत् ।
+अतः भवति निवेदनम् अस्ति यत् भवान् पूवमेव परिणामं चित्नयतु ।",
'movepagetalktext' => 'सम्बद्धसम्भाषणपुटानि अनेन सह स्थानान्तरितानि भवन्ति अन्यथा
* भवान् पुटं अन्यस्थानान्तरं कुर्वन् अस्ति ।
* अस्मिन् नाम्नि सम्भाषणपुटं पूर्वनिर्मितमस्ति अस्थवा
# Export
'export' => 'पृष्ठानां निर्यातं करोतु',
+'exporttext' => 'विशेष पुटस्य पाठम् अथवा सम्पादनेतिहासं निर्हर्तुं शक्नोति । अथवा पुटसमूहम् उपोतं कर्तुमपि शक्नोति ।
+एतत् [[Special:Import|आयातपुटं]] अस्य साहाय्येन मीडियाविक्याः प्रयोगं कृत्वा अन्यविकीतः आयातं कर्तुं शक्नोति ।
+पुटानि नर्हर्तुम् अधो दत्तपाठमञ्जूषायां शीर्शकं लिखतु । एकस्य शीर्षकस्य एका पङ्क्तिः । अपि च वर्तमानावृत्त्या सह प्राचीनावृत्तिमपि इच्छति वा नेति अथवा गतसम्पादनस्य विषयज्ञानेन सह केवलं वर्नमानावृत्तिम् इच्छाति ।
+पश्चात् स्थित्यर्थे भवान् कञ्चित् अनुबन्धं प्रयोक्तुमर्हति । यथा"[[{{MediaWiki:Mainpage}}]]"पुटार्थम् [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।',
'exportall' => 'सर्वपुटानि निर्यातानि करोतु ।',
'exportcuronly' => 'सद्यः पुनरावृत्तिं केवलं सङ्गृह्णातु समूर्णम् इतिहासं न ।',
'exportnohistory' => 'सुचना : अनुष्टानस्य कारणेन पुटनिर्यातस्य सम्पूर्णेतिहासः एतत्पुटाद्वारा निष्क्रियाः ।',
'import-interwiki-templates' => 'प्राकृतीः अनर्भावयतु ।',
'import-interwiki-submit' => 'आयातं करोतु ।',
'import-interwiki-namespace' => 'लक्षितनामस्थानानि ।',
+'import-interwiki-rootpage' => 'लक्षितमूलपुटम् । (ऐच्छिकम्)',
'import-upload-filename' => 'सञ्चिकानाम',
'import-comment' => 'टिप्पणी:',
'importtext' => '[[Special:Export|export utility]] एतेनानुबन्धेन स्रोतविकितः सञ्चिकानां निर्यातं करोतु । भवदीयसङ्गणके सुरक्ष्य अत्र उत्तारयतु ।',
'import-error-interwiki' => '"$1" पुटम् आयातं न यतः अस्य नाम बाह्यानुबन्धार्थं सुरक्षितम् । (अन्तर्विकि)',
'import-error-special' => '"$1" पुटम् आयातं नैव यतः एतत् विशेषनामस्थानेन सम्बद्धं यत् अन्यपुटानि नानुमन्यते ।',
'import-error-invalid' => '"$1" पुटं न आयातं यतः अस्य नाम अमान्यम् ।',
+'import-options-wrong' => 'असमीचीनः {{PLURAL:$2|विकल्पः|विकल्पाः}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'दत्तमूलपुटम् अमान्यशीर्षकयुक्तम् ।',
+'import-rootpage-nosubpage' => 'मूलपुटस्य "$1" इति नामस्थाने उपपुटानि नानुमतानि ।',
# Import log
'importlogpage' => 'आयातसूचिका ।',
'exif-unknowndate' => 'अज्ञातदिनाङ्कः ।',
'exif-orientation-1' => 'सामान्य',
+'exif-orientation-2' => 'तिर्यक् परिवर्तितम् ।',
+'exif-orientation-3' => '१८०° प्ररिभ्रमितम् ।',
+'exif-orientation-4' => 'लम्भतया परिवर्तितम् ।',
+'exif-orientation-5' => 'CCW ९०° परिभ्रमितम् । अपि च लम्बतया परिवर्तितम् ।',
+'exif-orientation-6' => 'CCW ९०° परिभ्रमितम् ।',
+'exif-orientation-7' => 'CCW ९०° परिभ्रमितम् । अपि च लम्बतया परिवर्तितम् ।',
+'exif-orientation-8' => 'CCW ९०° परिभ्रमितम् ।',
+
+'exif-planarconfiguration-1' => 'विशालं प्रारूपम् ।',
+'exif-planarconfiguration-2' => 'पर्यालोचकस्य प्रारूपम् ।',
+
+'exif-colorspace-65535' => 'अक्रमाङ्कितम् ।',
+
+'exif-componentsconfiguration-0' => 'न वर्तते ।',
+
+'exif-exposureprogram-0' => 'न व्याख्यातम् ।',
+'exif-exposureprogram-1' => 'मानवीयः ।',
+'exif-exposureprogram-2' => 'साधारणकार्यक्रमः ।',
+'exif-exposureprogram-3' => 'अवकाशस्य आद्यता ।',
+'exif-exposureprogram-4' => 'पिधानस्य आद्यता ।',
+'exif-exposureprogram-5' => 'सर्जनात्मकः कार्यक्रमः ।',
+'exif-exposureprogram-6' => 'प्रक्रियाकार्यक्रमः ।',
+'exif-exposureprogram-7' => 'आलेख्य प्रकारः ।',
+'exif-exposureprogram-8' => 'आयतप्रकारः । (आयतचित्राणि पृष्ठभूमिकेन्द्रीकृतनि )',
+
+'exif-subjectdistance-value' => '$1 मीटर्स् ।',
'exif-meteringmode-0' => 'अज्ञात',
'exif-meteringmode-1' => 'माध्य',
+'exif-meteringmode-2' => 'केन्द्रभारयुतं सर्वसामान्यम् ।',
+'exif-meteringmode-3' => 'प्रदेशः ।',
+'exif-meteringmode-4' => 'विविधप्रदेशाः ।',
+'exif-meteringmode-5' => 'प्रकारः ।',
+'exif-meteringmode-6' => 'भागशः ।',
+'exif-meteringmode-255' => 'अन्यत्',
'exif-lightsource-0' => 'अज्ञात',
+'exif-lightsource-1' => 'दिवाप्रकाशः ।',
+'exif-lightsource-2' => 'प्रभासमानम् ।',
+'exif-lightsource-3' => 'उज्वलप्रकाशस्य तन्त्रीविशेषः',
+'exif-lightsource-4' => 'स्फुरणम् ।',
+'exif-lightsource-9' => 'सुवायुमण्डलम् ।',
+'exif-lightsource-10' => 'मेघाच्छन्नवायुमण्डलम् ।',
+'exif-lightsource-11' => 'छाया ।',
+'exif-lightsource-12' => 'दिवाप्रकाशः उज्वलकान्तिः ।(D 5700 – 7100K)',
+'exif-lightsource-13' => 'दिनस्य श्वेतोज्वलप्रकाशः (N 4600 – 5400K)',
+'exif-lightsource-14' => 'शान्तशुभ्रः उज्ज्वलप्रकाशः (W 3900 – 4500K)',
+'exif-lightsource-15' => 'श्वेतदीप्तप्रकाशः ।(WW 3200 – 3700K)',
+'exif-lightsource-17' => 'सुयोगः प्रकाशः A',
+'exif-lightsource-18' => 'योग्यप्रकाशः B',
+'exif-lightsource-19' => 'सुयोग्यप्रकाशः C',
+'exif-lightsource-24' => 'ISO स्टूडीयो टङ्गस्टन् ।',
+'exif-lightsource-255' => 'अन्यप्रकाशस्रोतः ।',
+
+# Flash modes
+'exif-flash-fired-0' => 'स्फुरणं न सम्भूतम् ।',
+'exif-flash-fired-1' => 'स्फुरणमभवत् ।',
+'exif-flash-return-0' => 'न कोऽपि स्फुरणप्रयागमनस्य शोधकार्यकलापः अस्ति ।',
+'exif-flash-return-2' => 'स्फुरणप्रत्यागमनस्य प्रकाशः न शोधितः ।',
+'exif-flash-return-3' => 'स्फुरणप्रत्यागमनस्य प्रकाशः अभिज्ञातम् ।',
+'exif-flash-mode-1' => 'अनिवार्यं स्फुरणचालनम् ।',
+'exif-flash-mode-2' => 'अनिवर्यः स्फुरणनिग्रहः ।',
+'exif-flash-mode-3' => 'स्वयं चालनप्रकारः ।',
+'exif-flash-function-1' => 'स्फुरणकार्यकलापः नास्ति ।',
+'exif-flash-redeye-1' => 'लोहितनेत्र न्यूनीकरणस्य प्रकारः ।',
+
+'exif-focalplaneresolutionunit-2' => 'इञ्चस्',
+
+'exif-sensingmethod-1' => 'अनिरूपितम् ।',
+'exif-sensingmethod-2' => 'एकशलाकावर्णस्थानस्य संवेदकः ।',
+'exif-sensingmethod-3' => 'शलाकद्वसस्य वर्णस्थानस्य संवेदकः ।',
+'exif-sensingmethod-4' => 'शलाकत्रयस्य वर्णस्थानस्य संवेदकः ।',
+'exif-sensingmethod-5' => 'वर्णसान्दर्भिकस्थानस्य संवेदकः ।',
+'exif-sensingmethod-7' => 'ट्रिलियनियर् संवेदकः ।',
+'exif-sensingmethod-8' => 'वर्णसान्दर्भिकस्थानस्य संवेदकः ।',
+
+'exif-filesource-3' => 'आङ्किकस्थिरचित्रग्राही ।',
+
+'exif-scenetype-1' => 'सक्षात् ग्रहीतचित्रम् ।',
+
+'exif-customrendered-0' => 'साधारणप्रक्रिया ।',
+'exif-customrendered-1' => 'प्रक्रियां परिवर्तयतु ।',
+
+'exif-exposuremode-0' => 'स्वयं प्रदर्शनम् ।',
+'exif-exposuremode-1' => 'मानवीयं प्रदर्शनम् ।',
+'exif-exposuremode-2' => 'स्वयम् आवरणम्',
+
+'exif-whitebalance-0' => 'स्वयं श्वेतावरणम् ।',
+'exif-whitebalance-1' => 'मनवकरणस्य श्वेतावरणम् ।',
+
+'exif-scenecapturetype-0' => 'सुयोग्यम् ।',
+'exif-scenecapturetype-1' => 'आयतम् ।',
+'exif-scenecapturetype-2' => 'लम्बचित्राकृतिः ।',
+'exif-scenecapturetype-3' => 'रात्रिदृश्यम् ।',
+
+'exif-gaincontrol-0' => 'नास्ति',
+'exif-gaincontrol-1' => 'मन्दार्जनम् ।',
+'exif-gaincontrol-2' => 'तीव्रार्जनम् ।',
+'exif-gaincontrol-3' => 'मन्दार्जनावन्तिः ।',
+'exif-gaincontrol-4' => 'तीव्रार्जनावनतिः ।',
'exif-contrast-0' => 'सामान्य',
+'exif-contrast-1' => 'कोमलम् ।',
+'exif-contrast-2' => 'कठिणम् ।',
+
+'exif-saturation-0' => 'सामान्यम्',
+'exif-saturation-1' => 'मन्दतर्पणम् ।',
+'exif-saturation-2' => 'तीव्रतर्पणम् ।',
'exif-sharpness-0' => 'सामान्य',
+'exif-sharpness-1' => 'कोमलम् ।',
+'exif-sharpness-2' => 'कठिणम् ।',
'exif-subjectdistancerange-0' => 'अज्ञात',
-
+'exif-subjectdistancerange-1' => 'बृहत्',
+'exif-subjectdistancerange-2' => 'अवलोकनं पिदधातु ।',
+'exif-subjectdistancerange-3' => 'दूरदृश्यम् ।',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'उत्तराक्षांशः ।',
+'exif-gpslatitude-s' => 'दक्षिणाक्षांशः ।',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'पश्चिमरेखांशः ।',
+'exif-gpslongitude-w' => 'पश्चिमरेखांशः ।',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|meter|meters}} समुद्रस्तरादौन्नत्यम् ।',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|meter|meters}} समुद्रस्तरादवनतिः ।',
+
+'exif-gpsstatus-a' => 'मापनस्य प्रगतिः ।',
+'exif-gpsstatus-v' => 'अन्तर्निर्वहणस्य मापनम् ।',
+
+'exif-gpsmeasuremode-2' => 'द्विमुखमापनम् ।',
+'exif-gpsmeasuremode-3' => 'त्रिमुखमापनम् ।',
+
+# Pseudotags used for GPSSpeedRef
+'exif-gpsspeed-k' => 'प्रतिहोरा कि.मी ।',
+'exif-gpsspeed-m' => 'मैल् प्रतिहोरा ।',
+'exif-gpsspeed-n' => 'ग्रन्थयः ।',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'कि.मी.',
+'exif-gpsdestdistance-m' => 'मैल्स् ।',
+'exif-gpsdestdistance-n' => 'समुद्रीयः क्रोशः ।',
+
+'exif-gpsdop-excellent' => 'उत्कृष्टम् ($1)',
+'exif-gpsdop-good' => 'साधु ($1)',
+'exif-gpsdop-moderate' => 'मध्यमः $1',
+'exif-gpsdop-fair' => ' युक्तम् ($1)',
+'exif-gpsdop-poor' => 'दीनम् ($1)',
+
+'exif-objectcycle-a' => 'प्रतः केवलम् ।',
+'exif-objectcycle-p' => 'सायं केवलम् ।',
+'exif-objectcycle-b' => 'सायं प्रातः च ।',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'यथार्था दिशा ।',
+'exif-gpsdirection-m' => 'कान्तीयदिशा ।',
+
+'exif-ycbcrpositioning-1' => 'केन्द्रितम् ।',
+'exif-ycbcrpositioning-2' => 'सहक्षेत्रम् ।',
+
+'exif-dc-contributor' => 'योगदानिनः ।',
+'exif-dc-coverage' => 'माध्यमस्य स्थानिकः अथवा लैकिकः अवकाशः ।',
+'exif-dc-date' => 'दिनाङ्काः ।',
+'exif-dc-publisher' => 'प्रकाशकः ।',
+'exif-dc-relation' => 'सम्बद्धमाध्यमः ।',
+'exif-dc-rights' => 'अधिकाराः ।',
+'exif-dc-source' => 'स्रोतसः माध्यमः ।',
+'exif-dc-type' => 'माध्यमप्रकारः ।',
+
+'exif-rating-rejected' => 'तिरस्कृतम् ।',
+
+'exif-isospeedratings-overflow' => '६५५३५ तः महत्तरः ।',
+
+'exif-iimcategory-ace' => 'कलाः, संस्कृतिः, मनोरञ्जनम् ।',
+'exif-iimcategory-clj' => 'पराधः न्यायनियमाः ।',
+'exif-iimcategory-dis' => 'विपदः व्यापदः च ।',
+'exif-iimcategory-fin' => 'अर्थव्यवस्था वाणिज्यं च ।',
'exif-iimcategory-edu' => 'विद्याभ्यासः',
'exif-iimcategory-evn' => 'परिसरः',
'exif-iimcategory-hth' => 'स्वास्थ्यम्',
+'exif-iimcategory-hum' => 'मानवीयासक्तिः ।',
+'exif-iimcategory-lab' => 'परिश्रमः',
+'exif-iimcategory-lif' => 'जीवनविधानं विश्रामः च ।',
+'exif-iimcategory-pol' => 'राजनीतिः ।',
+'exif-iimcategory-rel' => 'मतं विश्वासः च ।',
+'exif-iimcategory-sci' => 'विज्ञानं तन्त्रज्ञानं च ।',
+'exif-iimcategory-soi' => 'समाजिकाः विवादाः ।',
'exif-iimcategory-spo' => 'क्रीडाः',
+'exif-iimcategory-war' => 'युद्धम्, सङ्घर्षः, अशान्तिः ।',
'exif-iimcategory-wea' => 'वातावरण',
+'exif-urgency-normal' => 'सामान्यम् ($1)',
+'exif-urgency-low' => 'मन्दम् ।$1',
+'exif-urgency-high' => 'उन्नतम् ($1)',
+'exif-urgency-other' => 'योजकनिरूपिता आद्यता : $1',
+
# External editor support
'edit-externally' => 'बाह्यां प्रणालीम् उपयुज्य इयं सञ्चिका सम्पाद्यताम् ।',
'edit-externally-help' => '(अधिकासूचनार्थं [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] इत्येतत् दृश्यताम्)',
# E-mail address confirmation
'confirmemail' => 'ईपत्रसङ्केतः प्रमाणीक्रियताम्',
+'confirmemail_noemail' => 'भवतः योजकाद्यतायां व्यवस्थापितः विद्युन्मानपत्रसङ्केतः मान्यं नाश्ति । [[Special:Preferences|user preferences]]',
+'confirmemail_text' => '{{SITENAME}} इत्यत्र विद्युन्मानसुविधोपयोगात् पूर्वं भवतः विद्युन्मानपत्रसङ्केतं मान्यं करोतु ।
+भवतः सङ्केतं दृढीकरणसङ्केतं प्राप्तुं अधः दत्तं कड्मलं तुदतु ।
+तत्र पत्रं ससङ्केतम् अनुबन्धयुक्तं भवति ।
+भवतः विद्युन्मानपत्रसङ्केतं प्रमाणीकर्तुम् अनेन अनुबन्धेन जालगवाक्षेन पूरयतु ।',
+'confirmemail_pending' => 'कश्चित् दृढीकरणस्य सङ्केतसङ्ख्या तावत् विद्युन्मानपत्रद्वारा ते प्रेषितम् ।
+भवान् सद्यः योजकस्थानं निर्मितवान् । नूतनसङ्केतसङ्ख्या कतिपयनिमेषापर्यन्तं निरीक्षताम्,',
+'confirmemail_send' => 'दृढीकरणसङ्केतसङ्ख्यां प्रेषयतु ।',
+'confirmemail_sent' => 'दृढीकरणस्य विद्युन्मानपत्रं प्रेषितम् ।',
+'confirmemail_oncreate' => 'दृढीकरणस्य सङ्केतसङ्ख्या विद्युन्मानपत्रद्वारा सम्प्रेषितम् ।
+नामाभिलेखार्थम् एषा सङ्केतसङ्ख्या नावश्यकी । किन्तु वीक्यां विद्युन्मानपत्राधारितलक्षणानि सक्रिययितुं सङ्केतसङ्ख्या प्रकप्पनीया ।',
+'confirmemail_sendfailed' => '{{SITENAME}}भवतः दृढीकरणपत्रप्रेषणं विफलम् ।
+अमान्याक्षरशोधाय भवतः विद्युन्मानपत्रसङ्केतं परिशीलयतु ।
+पत्रवाहकः प्रत्यर्पितवान् : $1',
+'confirmemail_invalid' => 'अमान्या दृढीकरणसङ्केतसङ्ख्या ।
+प्रायः सङ्केतसङ्ख्या विनष्टा ।',
+'confirmemail_needlogin' => 'भवतः विद्युन्मनपत्रसङ्केतं दृढयितुं भवान् $1 करोतु ।',
+'confirmemail_success' => 'भवतः विद्युन्मानपत्रसङ्केतः इदानीं दृढीकृतः अस्ति । [[Special:UserLogin|log in]]
+अधुना भवान् नामाभिलेखेन विकिविहरस्य आनन्दम् अनुभवितुं शक्नोति ।',
+'confirmemail_loggedin' => 'भवतः विद्युन्मानपत्रसङ्केतः दृढीकृतः ।',
+'confirmemail_error' => 'भवतः दृढीकरणावसरे काचित् समस्या उत्पन्ना ।',
+'confirmemail_subject' => '{{SITENAME}}विद्युन्मानपत्रसङ्केतस्य दृढीकरणम् ।',
+'confirmemail_body' => 'कोऽपि अथवा भवान् $1 इति ऐपिसङ्केतद्वारा {{SITENAME}}इत्यस्मिन् "$2" इति नाम्ना योजकस्थाननिर्माणार्थम् अभ्यर्थनं दत्तवान् ।
+एतत् योजकस्थानं भवतः एव अपि च {{SITENAME}} इत्यस्मिन् उलब्धे विद्युन्मानपत्रसङ्केतः ।
+सुविधारम्भं कर्तुम् अधोदत्तानुबन्ध स्वस्य जालगवाक्षे उद्घाटयतु ।
+
+$3
+
+यदि एतदभ्यर्थनं भवान् न कृतवान् तर्हि एतत् अपकर्षितुम् अधो दतानुबन्धम् उद्घाटयतु ।
+
+$5
+
+इयं दृढीकरणसङ्केतसङ्ख्या $4 इत्यस्मिन् समाप्ता भवति ।',
+'confirmemail_body_changed' => 'कोऽपि अथवा भवान् $1 इति ऐपिसङ्केतद्वारा {{SITENAME}}इत्यस्मिन् "$2" इति योजस्थानस्य विद्युन्मानपत्रसङ्केतं परिवर्त्य दत्तवान् ।
+अस्य विषयस्य दृढीकरणार्थम् एतत् योजकस्थानं भवतः एव अस्ति अपि च {{SITENAME}}इत्यस्मिन् विद्युन्मानसौकर्यं पुनरारब्धुम् अधो दत्तानुबन्धं जालगवाक्षे उद्घाटयतु ।
+
+$3
+
+यदि एतत् योजकस्थानं भवतः नाश्ति तर्हि भवतः विद्युन्मानपत्रसङ्केतम् अपाकृष्टुं अधो दत्तानुबन्धं जालगवाक्षे उद्घाटयतु ।
+
+
+$5
+एतत् दृढीकर्तुं $6 इत्येतत् $7 इति होरायाः पश्चात् कार्यं न करोति ।',
+'confirmemail_invalidated' => 'विद्युन्मानपत्रसङ्केतस्य दृढीकरणम् अपकर्षितम् ।',
+'invalidateemail' => 'विद्युन्मानपत्रस्य दृढीकरणम् अपकर्षतु ।',
+
+# Scary transclusion
+'scarytranscludedisabled' => 'अन्तर्विकीयः अन्तर्भवनं निष्क्रियम् ।',
+'scarytranscludefailed' => '$1 कृते प्राकृतिः प्रार्थना न प्राप्ता ।',
+'scarytranscludetoolong' => '[URLअतिदीर्घा अस्ति ]',
+
+# Delete conflict
+'deletedwhileediting' => 'पूर्वसूचना : भवतः सम्पादनारम्भात् पश्चात् एतत् पुटम् अपमर्जितम् ।',
+'confirmrecreate' => "योजकः [[User:$1|$1]] ([[User talk:$1|सम्भाषणम्]]) सकारणं भवतः सम्पादनात् परं पुटमेतत् अपमर्जितम् ।
+: ''$2''
+एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
+'confirmrecreate-noreason' => 'यदा भावान् अस्य पुटास्य सम्पादनम् आरब्धवान् तत्पश्चात् अन्यः योजकः [[User:$1|$1]] ([[User talk:$1|talk]]) एतत् अपनीतवान् । अतः एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।',
+'recreate' => 'पुनर्निर्मीयताम्',
# action=purge
'confirm_purge_button' => 'अस्तु',
+'confirm-purge-top' => 'अस्य पुटस्य इतिहाससङ्ग्रहं निर्मलं करोति वा ?',
+'confirm-purge-bottom' => 'कस्यचिदपि पुटस्य अपमर्जनेन सञ्चिका निर्मला भवति अपि च नूतनतमा आवृत्तिः प्रकटिता भवति ।',
# action=watch/unwatch
'confirm-watch-button' => 'अस्तु',
'confirm-watch-top' => 'इदं पृष्ठं भवतः अवेक्षणसूच्यां योजयाम ?',
'confirm-unwatch-button' => 'अस्तु',
+'confirm-unwatch-top' => 'इदं पृष्ठं भवतः अवेक्षणसूच्याः निष्कास्यताम्',
# Multipage image navigation
+'imgmultipageprev' => 'पूर्वतनं पृष्ठम्',
'imgmultipagenext' => 'अग्रिमं पृष्ठम्',
'imgmultigo' => 'गम्यताम् !',
'imgmultigoto' => '$1 पृष्ठं गम्यताम्',
# Table pager
+'ascending_abbrev' => 'आरुह्',
+'descending_abbrev' => 'अवरुह्',
'table_pager_next' => 'अग्रिमं पृष्ठम्',
'table_pager_prev' => 'पूर्वतनं पृष्ठम्',
'table_pager_first' => 'प्रथमं पृष्ठम्',
'table_pager_last' => 'अन्तिमं पृष्ठम्',
+'table_pager_limit' => 'प्रतिपृष्ठं $1 वस्तु दर्श्यताम्',
+'table_pager_limit_label' => 'प्रतिपुटं पदार्थाः ।',
'table_pager_limit_submit' => 'गम्यताम्',
'table_pager_empty' => 'फलितानि न सन्ति',
# Auto-summaries
'autosumm-blank' => 'पृष्ठं रिक्तीकृतम्',
+'autosumm-replace' => '"$1" इत्यनेन सह आधेस्य विनिमयः कृतः ।',
+'autoredircomment' => '[[$1]] प्रति पुटं पुनर्निदिष्टम् ।',
'autosumm-new' => '$1 नवीन पृष्ठं निर्मीत अस्ती',
+# Live preview
+'livepreview-loading' => 'सम्पूर्यमाणः.....',
+'livepreview-ready' => 'सम्पूरणं सज्जम् ।',
+'livepreview-failed' => 'साक्षात् पूर्वावलोकनं निष्पलम् ।
+सामान्यपूर्वावलोकनं यतताम् ।',
+'livepreview-error' => '$1 "$2" तः सम्पर्कः न सिद्धः ।
+सामान्यपूर्वावलोकनं यतताम् ।',
+
+# Friendlier slave lag warnings
+'lag-warn-normal' => '$1 {{PLURAL:$1|क्षणम्|क्षणानि}} इति काले सम्भूतपरिवर्तन प्रायः अस्यां सूचिकायां न दर्शितम् ।',
+'lag-warn-high' => 'अत्युन्नतदत्तांशवितारकस्य विलम्बत्वेन {{PLURAL:$1|क्षणम्|क्षणानि}} तः पूर्वं सम्भूतपरिवर्तनं सूचिकायां न दृश्यते ।',
+
# Watchlist editor
+'watchlistedit-numitems' => 'भवतः अवलोकनावली {{PLURAL:$1|1 शीर्षकम्|$1 शीर्षकानि}}, अन्तर्भूता, सम्भाषणपुटरहिता ।',
+'watchlistedit-noitems' => 'भवतः अवलोकनावली शीर्षकैः रहिता ।',
+'watchlistedit-normal-title' => 'अवलोकनावलीं सम्पादयतु ।',
+'watchlistedit-normal-legend' => 'अवलोकनावलीतः शीर्षकानि अपनयतु ।',
+'watchlistedit-normal-explain' => 'भवतः अवलोकनावल्याः शीर्षकानि अधः दर्शितानि ।
+शीर्षकम् अपनेतुम् अस्य पार्श्वे विद्यमानमञ्जूषाम् अर्गलयतु । पश्चात् {{int:Watchlistedit-normal-submit}}" एतत् तुदतु ।
+भवान् [[Special:EditWatchlist/raw|अपक्वावलोकनावलीं सम्पादयतु ]] कर्तुं शक्नोति ।',
+'watchlistedit-normal-submit' => 'शीर्षकानि अपनयतु ।',
+'watchlistedit-normal-done' => 'भवतः अवलोकनावली तः{{PLURAL:$1|1शीर्षकम्|$1 शीर्षकानि}} अपनीतानि ।',
+'watchlistedit-raw-title' => 'अपक्वाम् अवलोकनावलीं सम्पादयतु ।',
+'watchlistedit-raw-legend' => 'अपक्वाम् अवलोकनावलीं सम्पादयतु ।',
+'watchlistedit-raw-explain' => 'भवतः अवलोकनावल्याः शीर्षकानि अधः दर्शितानि । अपि च भवान् आवलीतः अपनीय संयोज्य वा परिवर्तयितुं शक्नोति ।
+प्रत्येकं लङ्क्तौ एकं शीर्षकम् ।
+समाप्तेः पश्चात् "{{int:Watchlistedit-raw-submit}}" एतत् तुदतु ।
+भवान् [[Special:EditWatchlist|सूक्तसम्पादकस्य]] अपि उपयोजयितुं शक्नोति ।',
'watchlistedit-raw-titles' => 'शीर्षकाणि :',
'watchlistedit-raw-submit' => 'अवलोकनावली उपारोप्यताम्',
+'watchlistedit-raw-done' => 'भवतः अवलोकनावली उन्नतीकारोतु ।',
+'watchlistedit-raw-added' => '{{PLURAL:$1|1शीर्षकम्|$1 शीर्षकानि}} संवृद्धानि ।',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|1शीर्षकम्|$1 शीर्षकानि}} अपनीतानि ।',
# Watchlist editing tools
'watchlisttools-view' => 'उचितानि परिवर्तनानि दृश्यन्ताम्',
'watchlisttools-edit' => 'अवेक्षणसूची दृश्यतां सम्पाद्यतां च',
'watchlisttools-raw' => 'अपरिष्कृता अवेक्षणसूची सम्पाद्यताम्',
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|अम्भाषणम्]])',
+
# Core parser functions
+'unknown_extension_tag' => 'अज्ञातं वर्तमानसूत्रम् $1',
'duplicate-defaultsort' => '\'\'\'प्रबोधः\'\'\' पुरानी मूल क्रमांकन कुंजी "$1" के बजाय अब मूल क्रमांकन कुंजी "$2" होगी।',
# Special:Version
'version' => 'आवृत्तिः',
+'version-extensions' => 'अनुस्थापितानि विस्तरणानि ।',
'version-specialpages' => 'विशेषपृष्ठानि',
+'version-parserhooks' => 'विन्यासस्य आलम्बः ।',
+'version-variables' => 'भङ्गुरम्',
+'version-antispam' => 'अनिष्टस्य अवरोधः ।',
'version-skins' => 'छादन',
'version-other' => 'अन्यत्',
+'version-mediahandlers' => 'माध्यनिर्वाहकाः ।',
+'version-hooks' => 'आलम्बाः ।',
+'version-extension-functions' => 'विस्तरणस्य कार्यकलापाः ।',
+'version-parser-extensiontags' => 'विन्यासविस्तारणस्य सूत्रम् ।',
+'version-parser-function-hooks' => 'विन्यासकलापस्य आलम्बाः ।',
+'version-hook-name' => 'आलम्बस्य नाम ।',
+'version-hook-subscribedby' => 'सदस्यत्वम् अनेन प्राप्तम् ।',
+'version-version' => '(आवृत्तिः$1)',
+'version-license' => 'अनुज्ञापत्रम्',
'version-poweredby-others' => 'अन्य',
+'version-software' => 'तन्त्रांशः अनुस्थापितः ।',
'version-software-product' => 'उत्पाद',
'version-software-version' => 'आवृत्ति',
+'version-entrypoints' => 'प्रवेशबिन्दुः URLs',
+'version-entrypoints-header-entrypoint' => 'प्रवेशबिन्दुः ।',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
+'filepath' => 'सञ्चिकापथः ।',
'filepath-page' => 'सञ्चिका:',
'filepath-submit' => 'गम्यताम्',
+'filepath-summary' => 'एतद्विशेषपुटं सञ्चिकायाः पूर्णपथं प्रदर्शयति ।
+चित्राणि परिपूर्णसत्वयुतानि दर्शितानि । अन्यसञ्चिकाभेदाः सम्बद्धकार्यकलापैः प्रत्यक्षं आरब्धाः ।',
# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'प्रतिकृतिसञ्चिकार्थम् अन्विषतु ।',
+'fileduplicatesearch-summary' => 'सम्मिश्रमौल्यामूलयुतर्थं प्रतिकृतिसञ्चिकार्थम् अन्विषतु ।',
+'fileduplicatesearch-legend' => 'प्रतिकृत्यर्थम् अन्विषतु ।',
'fileduplicatesearch-filename' => 'सञ्चिकानाम:',
'fileduplicatesearch-submit' => 'अन्वेषणम्',
+'fileduplicatesearch-info' => '$1 × $2 पिक्सेलानि, संचिकायाः आकारः: $3, MIME-प्रकारः: $4',
+'fileduplicatesearch-result-1' => '"$1" इत्यस्मिन् सादृश्यावृत्तिः नास्ति ।',
+'fileduplicatesearch-result-n' => 'इति सञ्चिका {{PLURAL:$1|सादृश्यप्रतिकृतिः|$2 सादृश्यप्रतिकृतयः}}',
+'fileduplicatesearch-noresults' => '"$1" इति नाम्ना सञ्चिका न दृष्टा ।',
# Special:SpecialPages
'specialpages' => 'विशेषपृष्ठानि',
+'specialpages-note' => '----
+* साधारणं विशेषपुटम् ।
+* <span class="mw-specialpagerestricted">प्रतिद्धं विशेषपुटम् ।</span>',
+'specialpages-group-maintenance' => 'निर्वहणवृत्तानि ।',
+'specialpages-group-other' => 'अन्यविशेषपुटानि ।',
'specialpages-group-login' => 'प्रविश्यताम् / लेखा सृज्यताम्',
'specialpages-group-changes' => 'सद्योजातानि परिवर्तनानि आवल्यश्च',
'specialpages-group-media' => 'माध्यमस्य इतिवृत्तम् आरोपणानि च',
'tag-filter' => '[[Special:Tags|Tag]] शोधनी:',
'tag-filter-submit' => 'शोधनी',
'tags-title' => 'अङ्कनानि',
+'tags-intro' => 'एतत्पुटं सार्थसूत्राणि दर्शयति यस्य कोऽपि तन्त्रांशः यत्किमपि सम्पादनम् अङ्कयितुं प्रयोजयति ।',
'tags-tag' => 'अङ्कननाम',
'tags-display-header' => 'परिवर्तितसूचीषु प्रदर्शनम्',
'tags-description-header' => 'अर्थस्य समग्रवर्णनम्',
'dberr-header' => 'अस्मिन् विकिमध्ये काचित् समस्या विद्यते',
'dberr-problems' => 'क्षम्यताम् ! अस्मिन् जालपुटे तान्त्रिकसमस्याः अनुभूयमानाः सन्ति ।',
'dberr-again' => 'किञ्चित् कालं प्रतीक्ष्य पुनः उपारोप्यताम् ।',
+'dberr-info' => '(दत्ताशं वितारकं सम्पर्कयितुं नैव शक्यते $1 )',
+'dberr-usegoogle' => 'अत्रान्तरे भवान् गूगल् इति शोधनयन्त्रे अन्वेषणं कर्तुं शक्नोति ।',
+'dberr-outofdate' => 'अस्माकम् आधेयस्य तेषाम् अनुक्रमणिका कालातिक्रान्ता इति जानातु ।',
+'dberr-cachederror' => 'एषा सङ्ग्रहितप्रतिः अभ्यर्थितपुटस्य , एषा उन्नतीकृता अपि न स्यात् ।',
# HTML forms
'htmlform-invalid-input' => 'भवता आरोपितेषु अंशेषु काचन समस्या विद्यते ।',
'htmlform-select-badoption' => 'भवता निर्दिष्टं मौल्यं युक्तविकल्पः न ।',
'htmlform-int-invalid' => 'भवता निर्दिष्टं मौल्यं पूर्णाङ्कः न ।',
'htmlform-float-invalid' => 'भवता निर्दिष्टं मौल्यं संख्या न ।',
+'htmlform-int-toolow' => 'भवता निश्चितं मौल्यं $1 इत्यस्मात् न्यूनम् अस्ति ।',
+'htmlform-int-toohigh' => 'भवता निश्चितं मौल्यं $1 तः अधिकम् अस्ति ।',
'htmlform-required' => 'इदं मूल्यम् अपेक्षितम् ।',
'htmlform-submit' => 'उपस्थाप्यताम्',
'htmlform-reset' => 'परिवर्तनानि पूर्वस्थितिं प्रति आनयतु',
# New logging system
'logentry-delete-delete' => '$1 इत्यनेन $3 पुटं निष्कासितम्',
'logentry-delete-restore' => '$1 इत्यनेन $3 पृष्ठं प्रात्यानीतम्',
+'logentry-delete-event' => '$1 परिवर्तितदृश्यस्य {{PLURAL:$5|a log event|$5 log events}} $3: $4 इत्यस्मिन् ।',
+'logentry-delete-revision' => '$1 इत्येषः $3 पुटस्य {{PLURAL:$5|एका आवृत्तिः|$५ आवृत्तयः}}इत्यस्य दृश्यता परिवर्तिता $4',
+'logentry-delete-event-legacy' => '$1 इत्येतत् $3 पुटे प्रवेशप्रक्रियायाः दृश्यताः परिवर्तिता ।',
+'logentry-delete-revision-legacy' => '$1 इत्येतत् $3 पुटे आवृत्तीनां दृश्यता परिवर्तिता ।',
+'logentry-suppress-delete' => '$1 निग्रहितपुटम् $3',
+'logentry-suppress-event' => '$1 परिवर्तितदृश्यस्य {{PLURAL:$5|a log event|$5 log events}} $3: $4 इत्यस्मिन् ।',
+'logentry-suppress-revision' => '$1 इत्येषः $3 पुटस्य {{PLURAL:$5|एका आवृत्तिः|$५ आवृत्तयः}}इत्यस्य दृश्यता परिवर्तिता $4',
+'logentry-suppress-event-legacy' => '$1 इत्येतत् $3 पुटे प्रवेशप्रक्रियायाः दृश्यताः परिवर्तिता ।',
+'logentry-suppress-revision-legacy' => '$1 इत्येतत् $3 पुटे आवृत्तीनां दृश्यता परिवर्तिता ।',
'revdelete-content-hid' => 'आधेयं विलोपितम्',
'revdelete-summary-hid' => 'सम्पादनसारः विलोपितः',
'revdelete-uname-hid' => 'योजकस्य नाम सङ्गुप्तम् ।',
'logentry-move-move_redir' => '↓
$1 इत्यनेन $3 इति पृष्ठम् $4 इत्येतत् प्रति चालितं, अनुप्रेषणम् अतिक्रम्य',
'logentry-move-move_redir-noredirect' => '$1 इति प्रयोक्त्रा $3 इति पृष्ठं $4 इत्येतत् प्रति चालितम्, अनुप्रेषणम् अतिक्रम्य, अनुप्रेषणमोचनेन च विना।',
+'logentry-patrol-patrol' => '$1 अङ्कितावृत्तिः $4 इति पुटस्य $3 आरक्षणम् ।',
+'logentry-patrol-patrol-auto' => '$1 इत्येतत् $3 पुटस्य $4 आवृत्तिं स्वयं चालितरूपात् आरक्षितम् ।',
'logentry-newusers-newusers' => '$1 योजकलेखाम् असृजत्',
'logentry-newusers-create' => '$1 योजकलेखाम् असृजत्',
'logentry-newusers-create2' => '$1, $3 योजकलेखाम् असृजत्',
'feedback-cancel' => 'निवर्तयते',
'feedback-submit' => 'प्रतिस्पन्दः प्रेष्यताम्',
'feedback-adding' => 'पृष्ठे प्रतिस्पन्दः योजनीयः ...',
+'feedback-error1' => 'API इत्यस्मात् दोषः : अज्ञातः परिणामः ।',
'feedback-error2' => 'दोषः : सम्पादनं निष्फलं जातम्',
'feedback-error3' => 'दोषः : ए पि ऐ तः प्रतिस्पन्दः न प्राप्तः',
'feedback-thanks' => 'धन्यवादः ! भवतः प्रतिस्पन्दः "[ $2 $1 ]" पृष्ठाय प्रेषितः अस्ति ।',
'feedback-close' => 'समापित',
+'feedback-bugcheck' => 'उत्तमम् परिशीलयतु यत् [ $1 known bugs] पूर्वमेव नासीत् इति ।',
+'feedback-bugnew' => 'अहं परीक्षितवान् । नूतनदोषं सूचयतु ।',
# API errors
+'api-error-badaccess-groups' => 'भवान् अस्यां वीक्यां सञ्चिकाः उत्तारयितुम् नानुमतः ।',
+'api-error-badtoken' => 'आन्तरिकदोषः : दुष्टप्रतीकः ।',
+'api-error-copyuploaddisabled' => 'अस्मिन् वितारके युआर् एल् द्वारा उत्तारणं निष्क्रियम् ।',
+'api-error-duplicate' => '{{PLURAL:$1| [ $2 अन्यसञ्चिकाः] | सन्ति [ $2 काश्चन अन्यसञ्चिकाः]}} एकस्मिन् एव ।',
+'api-error-duplicate-archive' => 'तत्र {{PLURAL:$1|आसीत् [$2 काश्चन अन्यसञ्चिकाः] | [$2काचन अन्यसञ्चिकाः]}}, पूर्वमेव {{PLURAL:$1|यह was|they आसन्}} किन्तु अपनीताः ।',
+'api-error-duplicate-archive-popup-title' => 'द्विप्रतिः {{PLURAL:$1| सञ्चिका |सञ्चिकाः}} पूर्वमेव अपमर्जिताः ।',
+'api-error-duplicate-popup-title' => 'द्विप्रतिः {{PLURAL:$1| सञ्चिका| सञ्चिकाः}}',
'api-error-empty-file' => 'समर्पिता सञ्चिका रिक्ता आसीत् ।',
'api-error-emptypage' => 'नूतनस्य रिक्तस्य पृष्ठस्य सर्जनं निषिद्धम् ।',
'api-error-fetchfileerror' => 'आन्तरिकदोषः : सञ्चिकायाः प्राप्त्यवसरे कश्चन दोषः जातः ।',
'api-error-fileexists-forbidden' => '"$1" नामिका सञ्चिका पूर्वमेव विद्यते । पुनः तदुपरि लेखनम् अशक्यम् ।',
+'api-error-fileexists-shared-forbidden' => '"$1" इति नाम्नः सञ्चिका पूर्वमेव सञ्चिकाकोशे अस्ति । अधिलिखितं न स्यात् ।',
'api-error-file-too-large' => 'समर्पिता सञ्चिका सुदीर्घा अस्ति ।',
'api-error-filename-tooshort' => 'सञ्चिकानाम अतीव ह्रस्वम् अस्ति ।',
'api-error-filetype-banned' => 'ईदृशी सञ्चिका अनुरुद्धा ।',
+'api-error-filetype-banned-type' => '\'\'\'".$1"\'\'\'सञ्चिका {{PLURAL:$4|प्रकारस्य }} अनुमतिः नास्ति ।
+प्रकारसञ्चिकायाः{{PLURAL:$3|}} अनुमतिरस्ति $2।',
'api-error-filetype-missing' => 'अस्याः सञ्चिकायाः विस्तारः लुप्तः अस्ति ।',
'api-error-hookaborted' => 'भवतः संस्करणप्रयत्नः विस्तारेण अपसारितः ।',
'api-error-http' => 'आन्तरिकदोषः : वितारकस्य सम्पर्के असमर्थम् ।',
'api-error-illegal-filename' => 'सञ्चिकानामलेखनं नानुमतम् ।',
+'api-error-internal-error' => 'आन्तरिकदोषः : वीक्यां भवतः उत्तारणावसरे काचनदोषः संवृत्तः ।',
+'api-error-invalid-file-key' => 'आन्तरिकदोषः : अनित्यसञ्चिकाकोशे सञ्चिका न दृष्टा ।',
+'api-error-missingparam' => 'आन्तरिकदोषः : अभ्यर्थनानुगुणं व्याप्तिः विलुप्ता ।',
+'api-error-missingresult' => 'आन्तरिकदोषः : प्रतिकृतिः सफला इति निश्चिता नाभवत् ।',
'api-error-mustbeloggedin' => 'सञ्चिकायाः उपारोपणाय अन्तः प्रवेशः अनिवार्यः ।',
+'api-error-mustbeposted' => 'आन्तरिकदोषः : HTTP प्रस्तोतुम् अभ्यर्थनम् आवश्यकम् ।',
+'api-error-noimageinfo' => 'उत्तारणं सफलम् । किन्तु सञ्चिकाविषये वितारकः कामपि सूचनां न अयच्छतु ।',
+'api-error-nomodule' => 'आन्तरिकदोषः : उत्तारणघटकः न व्यवस्थितः ।',
'api-error-ok-but-empty' => 'आन्तरिकदोषः : वितारकतः प्रतिस्पन्दः न प्राप्तः ।',
'api-error-overwrite' => 'वर्तमानसञ्चिकायाः पुनर्लेखनं नानुमतम् ।',
'api-error-stashfailed' => 'आन्तरिकदोषः : तात्कालिकसञ्चिकायाः रक्षणे वितारकः असमर्थः जातः ।',
'import-interwiki-templates' => 'Укључи све шаблоне',
'import-interwiki-submit' => 'Увези',
'import-interwiki-namespace' => 'Одредишни именски простор:',
+'import-interwiki-rootpage' => 'Одредишна основна страница (необавезно):',
'import-upload-filename' => 'Назив датотеке:',
'import-comment' => 'Коментар:',
'importtext' => 'Извезите датотеку с изворног викија користећи [[Special:Export|извоз]].
'import-error-interwiki' => 'Не могу да увезем страницу „$1“ јер је њен назив резервисан за спољно повезивање (међувики).',
'import-error-special' => 'Не могу да увезем страницу „$1“ јер она припада посебном именском простору које не прихвата странице.',
'import-error-invalid' => 'Не могу да увезем страницу „$1“ јер је њен назив неисправан.',
+'import-options-wrong' => '{{PLURAL:$2|Погрешна опција|Погрешне опције}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Наведена основна страница има неисправан наслов.',
+'import-rootpage-nosubpage' => 'Именски простор „$1“ основне странице не дозвољава подстранице.',
# Import log
'importlogpage' => 'Дневник увоза',
'import-interwiki-templates' => 'Uključi sve šablone',
'import-interwiki-submit' => 'Uvezi',
'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna osnovna stranica (neobavezno):',
'import-upload-filename' => 'Naziv datoteke:',
'import-comment' => 'Komentar:',
'importtext' => 'Izvezite datoteku s izvornog vikija koristeći [[Special:Export|izvoz]].
'import-error-interwiki' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv rezervisan za spoljno povezivanje (međuviki).',
'import-error-special' => 'Ne mogu da uvezem stranicu „$1“ jer ona pripada posebnom imenskom prostoru koje ne prihvata stranice.',
'import-error-invalid' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv neispravan.',
+'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Navedena osnovna stranica ima neispravan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.',
# Import log
'importlogpage' => 'Dnevnik uvoza',
'import-interwiki-templates' => 'Isama ang lahat ng mga suleras',
'import-interwiki-submit' => 'Mag-angkat',
'import-interwiki-namespace' => 'Kapupuntahang espasyo ng pangalan:',
+'import-interwiki-rootpage' => 'Ugat na pahina ng kapupuntahan (maaaring wala ito):',
'import-upload-filename' => 'Pangalan ng talaksan:',
'import-comment' => 'Komento:',
'importtext' => 'Pakiluwas ang talaksan magmula sa pinagmulang wiki na ginagamit ang [[Special:Export|kasangkapang pangluwas]].
'import-error-interwiki' => 'Hindi naangkat ang pahinang "$1" dahil ang pangalan nito ay nakalaan para sa pagkakawing na panlabas (interwiki).',
'import-error-special' => 'Hindi naangkat ang pahinang "$1" dahil pag-aari ito ng isang natatanging puwang na pampangalan na hindi nagpapahintulot ng mga pahina.',
'import-error-invalid' => 'Hindi naangkat ang pahinang "$1" dahil hindi katanggap-tanggap ang pangalan nito.',
+'import-options-wrong' => 'Maling {{PLURAL:$2|pili|mga mapipili}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ang ibinigay na ugat na pahina ay isang hindi katanggap-tanggap na pamagat.',
+'import-rootpage-nosubpage' => 'Ang puwang ng pangalan na "$1" ng ugat na pahina ay hindi nagpapahintulot ng kabahaging mga pahina.',
# Import log
'importlogpage' => 'Talaan ng pagaangkat',
'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriler}}',
'category_header' => '"$1" kategorisindeki sayfalar',
'subcategories' => 'Alt kategoriler',
-'category-media-header' => '"$1" kategorisindeki medya',
-'category-empty' => "''Bu kategoride henüz herhangi bir madde ya da medya bulunmamaktadır.''",
+'category-media-header' => '"$1" kategorisindeki dosyalar',
+'category-empty' => "''Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.''",
'hidden-categories' => '{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}',
'hidden-category-category' => 'Gizli kategoriler',
-'category-subcat-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}',
+'category-subcat-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategorisi}} dahil $2 alt kategorisi vardır.}}',
'category-subcat-count-limited' => 'Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.',
'category-article-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}',
-'category-article-count-limited' => 'Aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} mevcut kategoridedir.',
+'category-article-count-limited' => 'Bu kategoride {{PLURAL:$1|sayfa|$1 sayfa}} bulunmaktadır.',
'category-file-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}',
'category-file-count-limited' => 'Aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} mevcut kategoridedir.',
'listingcontinuesabbrev' => '(devam)',
'parser-template-loop-warning' => 'Үрнәкләрдә йомык сылтама табылды: [[$1]]',
'parser-template-recursion-depth-warning' => '($1) үрнәген рекурсия итеп куллану чиге рөхсәт ителгәннән артып киткән',
'language-converter-depth-warning' => 'Телләрне үзгәртүләре артык югарыга киткән ($1)',
+'node-count-exceeded-warning' => 'Биттә бәйләү өлешләре артып киткән',
+'expansion-depth-exceeded-category' => 'Ачыклык тирәнлеге зур булган битләр',
+'expansion-depth-exceeded-warning' => 'Биттә кертем чиге артып киткән',
# "Undo" feature
'undo-success' => 'Үзгәртүдән баш тартып була.
'tog-extendwatchlist' => 'كۈچەيتىلگەن كۆزەت تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسەت',
'tog-usenewrc' => 'بەت گۇرۇپپىلىنىشىغا ئاساسەن يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىمى (JavaScript زۆرۈر)',
'tog-numberheadings' => 'ماۋزۇغا ئۆزلۈكىدىن تەرتىپ نومۇرى قوش',
-'tog-showtoolbar' => 'تÛ\95ھرÙ\89ر Ù\82Ù\88راÙ\84 ستÙ\88Ù\86Ù\89نى كۆرسەت (JavaScript زۆرۈر)',
+'tog-showtoolbar' => 'تÛ\95ھرÙ\89ر Ù\82Ù\88راÙ\84 باÙ\84داÙ\82نى كۆرسەت (JavaScript زۆرۈر)',
'tog-editondblclick' => 'قوش چەككەندە بەت تەھرىرلە (JavaScript زۆرۈر)',
'tog-editsection' => '[تەھرىر] ئۇلانمىسىنى چېكىپ ئابزاس تەھرىرلەشكە يول قوي',
'tog-editsectiononrightclick' => 'ماۋزۇنى چاشقىنەكتە ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي (JavaScript زۆرۈر)',
'tog-enotifminoredits' => 'بەت ۋە ھۆججەت ئازراقلا تەھرىرلەنگەندىمۇ ئېلخەت يوللا',
'tog-enotifrevealaddr' => 'ئۇقتۇرۇش ئېلخەت تىزىملىكىدە ئېلخەت ئادرېسىمنى ئاشكارىلا',
'tog-shownumberswatching' => 'بۇ بەتنى كۆزىتىۋاتقان ئىشلەتكۈچى سانىنى كۆرسەت',
-'tog-oldsig' => 'Ù\85Û\95Û\8bجÛ\87ت ئىمزا:',
+'tog-oldsig' => 'Ù\86Û\86Û\8bÛ\95تتÙ\89Ù\83Ù\89 ئىمزا:',
'tog-fancysig' => 'ئىمزاغا wiki تېكستى سۈپىتىدە مۇئامىلە قىل (ئۆزلۈكىدىن ئۇلانما ھاسىل بولمايدۇ)',
'tog-externaleditor' => 'كۆڭۈلدىكى ئەھۋالدا سىرتقى تەھرىرلىگۈچ ئىشلىتىدۇ (ئالىي ئىشلەتكۈچىگە تەمىنلىنىدۇ، كومپيۇتېرىڭىزدا بىر قىسىم ئالاھىدە تەڭشەش ئېلىپ بېرىشىڭىز لازىم
[//www.mediawiki.org/wiki/Manual:External_editors تېخىمۇ كۆپ ئۇچۇر.])',
'tog-ccmeonemails' => 'مەن باشقىلارغا يوللىغان ئېلخەتنى ئۆزەمگىمۇ بىر نۇسخا يوللا',
'tog-diffonly' => 'تۈزىتىلگەن ئىككى نەشرىنىڭ پەرقىنى سېلىشتۇرغاندا بەت مەزمۇنىنى كۆرسەتمە',
'tog-showhiddencats' => 'يوشۇرۇن تۈرلەرنى كۆرسەت',
+'tog-noconvertlink' => 'ئۇلانما ماۋزۇ ئالماشتۇرۇشنى چەكلە',
'tog-norollbackdiff' => 'قايتۇرۇشنى ئىجرا قىلغاندىن كېيىن پەرقنى كۆرسەتمە',
'underline-always' => 'دائىم',
'listingcontinuesabbrev' => 'داۋاملاشتۇر',
'index-category' => 'ئىندېكسلانغان بەتلەر',
'noindex-category' => 'ئىندېكسلانمىغان بەتلەر',
-'broken-file-category' => 'بۇزۇلغان ھۆججەتكە ئۇلانغان بەتلەر',
+'broken-file-category' => 'ھۆججەت ئۇلىنىشى بۇزۇلغان بەتلەر',
+'categoryviewer-pagedlinks' => '($1) ($2)',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
'about' => 'ھەققىدە',
'article' => 'مەزمۇن بېتى',
'and' => ' ۋە',
# Cologne Blue skin
-'qbfind' => 'ئىزدە',
+'qbfind' => 'ئىزدە:',
'qbbrowse' => 'كۆز يۈگۈرت',
'qbedit' => 'تەھرىر',
'qbpageoptions' => 'بۇ بەت',
'vector-action-move' => 'يۆتكە',
'vector-action-protect' => 'قوغدا',
'vector-action-undelete' => 'ئەسلىگە قايتۇر',
-'vector-action-unprotect' => 'قوغداشنى ئۆزگەرت',
+'vector-action-unprotect' => 'قوغداش ئۆزگەرت',
'vector-simplesearch-preference' => 'ئالىي ئىزدەش تەكلىپىنى ئاچ (Vector تېرىدىلا)',
'vector-view-create' => 'قۇر',
'vector-view-edit' => 'تەھرىر',
'searchbutton' => 'ئىزدە',
'go' => 'يۆتكەل',
'searcharticle' => 'يۆتكەل',
-'history' => 'بەت تارىخى',
+'history' => 'بەتنىڭ تارىخى',
'history_short' => 'تارىخ',
'updatedmarker' => 'مەن ئالدىنقى قېتىم زىيارەت قىلغاندىن بۇيانقى يېڭىلانغىنى',
'printableversion' => 'باسقىلى بولىدىغان نەشرى',
'delete' => 'ئۆچۈر',
'deletethispage' => 'بۇ بەتنى ئۆچۈر',
'undelete_short' => 'ئۆچۈرۈلگەن {{PLURAL:$1|بىر تەھرىر|$1 تەھرىر}} ئەسلىگە كەلتۈرۈلدى',
-'viewdeleted_short' => '{{PLURAL:$1|بىر ئۆچۈرۈلگەن تەھرىر|$1 ئۆچۈرۈلگەن تەھرىر}}نى كۆرسەت',
+'viewdeleted_short' => '{{PLURAL:$1|بىر ئۆچۈرۈلگەن نەشرى|$1 ئۆچۈرۈلگەن نەشرى}}نى كۆرسەت',
'protect' => 'قوغدا',
'protect_change' => 'ئۆزگەرت',
'protectthispage' => 'بۇ بەتنى قوغدا',
-'unprotect' => 'قوغداشنى ئۆزگەرت',
+'unprotect' => 'قوغداش ئۆزگەرت',
'unprotectthispage' => 'بۇ بەتنى قوغداشنى ئۆزگەرت',
'newpage' => 'يېڭى بەت',
'talkpage' => 'بۇ بەتنىڭ مۇنازىرىسى',
'articlepage' => 'مەزمۇن بېتىنى كۆرسەت',
'talk' => 'مۇنازىرە',
'views' => 'كۆرۈنۈش',
-'toolbox' => 'Ù\82Ù\88راÙ\84 ستÙ\88Ù\86ى',
+'toolbox' => 'Ù\82Ù\88راÙ\84 ساÙ\86دÛ\87Ù\82ى',
'userpage' => 'ئىشلەتكۈچى بېتىنى كۆرسەت',
'projectpage' => 'قۇرۇلۇش بېتىنى كۆرسەت',
'imagepage' => 'ھۆججەت بېتىنى كۆرسەت',
'disclaimerpage' => 'Project:ئادەتتىكى جاۋابكارلىقنى كەچۈرۈم قىلىش باياناتى',
'edithelp' => 'تەھرىرلەش ياردىمى',
'edithelppage' => 'Help:تەھرىرلەۋاتىدۇ',
-'helppage' => 'Help:Ù\85Û\95زÙ\85Û\87Ù\86Ù\89',
+'helppage' => 'Help:Ù\85Û\95زÙ\85Û\87Ù\86Ù\84ار',
'mainpage' => 'باش بەت',
'mainpage-description' => 'باش بەت',
'policy-url' => 'Project:تاكتىكا',
[[Special:Version|نەشر بېتى]] نى كۆرۈڭ.',
-'ok' => 'جەزملە',
+'ok' => 'ماقۇل',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle' => '← $1',
'retrievedfrom' => '"$1" دىن ئېرىشكەن',
'youhavenewmessages' => 'سىزدە $1 ($2) بار.',
'newmessageslink' => 'يېڭى ئۇچۇر',
'newmessagesdifflink' => 'ئاخىرقى ئۆزگەرتىش',
+'youhavenewmessagesfromusers' => 'سىزنىڭ {{PLURAL:$3|باشقا ئىشلەتكۈچى|$3 ئىشلەتكۈچى}} $1 ($2)ڭىز بار.',
+'youhavenewmessagesmanyusers' => 'سىزنىڭ نۇرغۇن ئىشلەتكۈچىدىن كەلگەن $1 ($2) بار.',
+'newmessageslinkplural' => '{{PLURAL:$1|بىر يېڭى |يېڭى ئۇچۇر}}ئۇچۇر',
+'newmessagesdifflinkplural' => 'ئاخىرقى $1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
'youhavenewmessagesmulti' => '$1 يېڭى ئۇچۇرىڭىز بار',
'editsection' => 'تەھرىر',
+'editsection-brackets' => '[$1]',
'editold' => 'تەھرىر',
'viewsourceold' => 'مەنبەنى كۆرسەت',
'editlink' => 'تەھرىر',
'toc' => 'مەزمۇنى',
'showtoc' => 'كۆرسەت',
'hidetoc' => 'يوشۇر',
-'collapsible-collapse' => 'قاتلا',
+'collapsible-collapse' => 'ئابزاس ئايرىمىسى يوشۇر',
'collapsible-expand' => 'ياي',
'thisisdeleted' => 'كۆرسەت ياكى ئەسلىگە كەلتۈر $1 ؟',
'viewdeleted' => '$1 كۆرسەت؟',
'site-atom-feed' => '$1 نىڭ Atom قانالى',
'page-rss-feed' => '"$1" نىڭ RSS قانىلى',
'page-atom-feed' => '"$1" نىڭ Atom قانىلى',
+'feed-atom' => 'ئاتوم',
+'feed-rss' => 'RSS',
'red-link-title' => '$1 (بەت مەۋجۇد ئەمەس)',
-'sort-descending' => 'كېمەيگۈچى تەرتىپتە تەرتىپلە',
-'sort-ascending' => 'ئۆسكۈچى تەرتىپتە تەرتىپلە',
+'sort-descending' => 'كېمەيگۈچى تەرتىپ',
+'sort-ascending' => 'ئۆسكۈچى تەرتىپ',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'بەت',
'cannotdelete' => 'بەلگىلەنگەن "$1" ھۆججەت ياكى بەتنى ئۆچۈرەلمىدى.
ئۇ باشقىلار تەرىپىدىن ئۆچۈرۈلگەن بولۇشى مۇمكىن.',
+'cannotdelete-title' => '"$1" بەتنى ئۆچۈرەلمەيدۇ',
+'delete-hook-aborted' => 'ئۆچۈرۈش ئىلمەك تەرىپىدىن چېكىندۈرۈلدى
+ئۇ سەۋەبىنى تەمىنلىمىدى.',
'badtitle' => 'خاتا ماۋزۇ',
'badtitletext' => 'ئىلتىماس قىلىنغان بەتنىڭ ماۋزۇسى ئىناۋەتسىز، مەۋجۇد ئەمەس، تىل ھالقىغان ياكى wiki ئۇلانمىسىدىن ھالقىغان ماۋزۇ خاتالىقى.
ئۇ بىر ياكى بىر قانچە ماۋزۇغا ئىشلەتكىلى بولمايدىغان ھەرپنى ئۆز ئىچىگە ئالغان.',
-'perfcached' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، شۇڭلاشقا يېڭى بولماسلىقى مۇمكىن. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، ئاخىرقى يېڭىلانغان ۋاقتى $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، شۇڭلاشقا يېڭى بولماسلىقى مۇمكىن. ئەڭ كۆپ بولغاندا غەملەكتىكى {{PLURAL:$1|بىر تۈر|$1 تۈر}} نى ئىشلەتكىلى بولىدۇ.',
+'perfcachedts' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، ئاخىرقى يېڭىلانغان ۋاقتى $1. ئەڭ كۆپ بولغاندا غەملەكتىكى {{PLURAL:$1|بىر تۈر|$1 تۈر}} نى ئىشلەتكىلى بولىدۇ.',
'querypage-no-updates' => 'نۆۋەتتە مەزكۇر بەتنى يېڭىلاش چەكلەندى.
بۇ جايدىكى سانلىق مەلۇماتنى دەرھال يېڭىلىغىلى بولمايدۇ.',
سۈرۈشتۈرۈش: $2',
'viewsource' => 'مەنبەنى كۆرسەت',
+'viewsource-title' => '$1 نىڭ ئەسلى كودىنى كۆرسەت',
'actionthrottled' => 'مەشغۇلات چەكلەندى',
'actionthrottledtext' => 'ئەخلەتكە قارشى تۇرۇش ئۆلچىمىگە ئاساسەن، سىز بۇ بىر بۆلۈك قىسقا ۋاقىتتا بۇ مەشغۇلاتنى ئېلىپ بېرىشىڭىزنى چەكلىدى، ئەمما سىز بۇ چەكتىن ئېشىپ كەتتىڭىز.
بىر قانچە مىنۇتتىن كېيىن قايتا سىناڭ.',
'protectedpagetext' => 'بۇ بەت تەھرىرلەشنىڭ ئالدىنى ئېلىش ئۈچۈن قۇلۇپلانغان.',
'viewsourcetext' => 'سىز بۇ بەتنى ئەسلى كودىنى كۆرەلەيسىز ۋە كۆچۈرەلەيسىز:',
+'viewyourtext' => "بۇ بەتتىكى '''تەھرىرلىگەنلىرىڭىز'''نىڭ ئەسلى كودىنى كۆرۈپ كۆچۈرەلەيسىز.",
'protectedinterface' => 'بۇ بەت يۇمشاق دېتالنىڭ كۆرۈنۈش تېكستىنى تەمىنلىگەن، خالىغانچە تەھرىرلەشتىن ساقلىنىش ئۈچۈن قۇلۇپلانغان.',
'editinginterface' => "'''ئاگاھلاندۇرۇش:''' سىز تەھرىرلەۋاتقان بەت يۇمشاق دېتالنىڭ كۆرۈنۈش تېكستىگە ئىشلىتىلىدۇ.
'titleprotected' => 'بۇ ماۋزۇ قايتا قۇرۇشتىن ساقلىنىش ئۈچۈن [[User:$1|$1]] تەرىپىدىن قوغدالغان.
سەۋەبى"\'\'$2\'\'" .',
+'filereadonlyerror' => 'بۇ ھۆججەت "$1" نى ئۆزگەرتەلمەيدۇ چۈنكى ھۆججەت خەزىنە "$2" سى پەقەت ئوقۇشقىلا بولىدىغان ھالەتتە.
+
+قۇلۇپلىغان باشقۇرغۇچى تەمىنلىگەن چۈشەندۈرۈش: "$3".',
+'invalidtitle-knownnamespace' => 'ئات بوشلۇقى "$2" ۋە تېكىست "$3" نى ئىشلەتكەن ئىناۋەتسىز ماۋزۇ',
+'invalidtitle-unknownnamespace' => 'يوچۇن ئات بوشلۇقى نومۇرى $1 ۋە تېكىست "$2" نى ئىشلەتكەن ئىناۋەتسىز ماۋزۇ',
+'exception-nologin' => 'تىزىمغا كىرمىدى',
+'exception-nologin-text' => 'بۇ بەت ياكى مەشغۇلات مەزكۇر ۋىكىغا تىزىمغا كىرىشىڭىزنى تەلەپ قىلىدۇ.',
# Virus scanner
'virus-badscanner' => "بۇزۇلغان سەپلىمە: نامەلۇم ۋىرۇسخور: ''$1''",
'yourpassword' => 'ئىم:',
'yourpasswordagain' => 'ئاچقۇچنى قايتا بەسىڭ:',
'remembermypassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})',
-'securelogin-stick-https' => 'تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رگÛ\95Ù\86دÙ\89Ù\86 Ù\83Û\90Ù\8aÙ\89Ù\86 HTTPS باغÙ\84Ù\89Ù\86Ù\89Ø´Ù\89Ù\86Ù\89 ئÙ\89Ø´Ù\84Û\95ت',
+'securelogin-stick-https' => 'تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رگÛ\95Ù\86دÙ\89Ù\86 Ù\83Û\90Ù\8aÙ\89Ù\86 HTTPS باغÙ\84Ù\89Ù\86Ù\89Ø´Ù\86Ù\89 داÛ\8bاÙ\85Ù\84اشتÛ\87ر',
'yourdomainname' => 'دائىرە ئاتىڭىز:',
+'password-change-forbidden' => 'بۇ ۋىكىدىكى ئىمنى ئۆزگەرتەلمەيسىز.',
'externaldberror' => 'بۇ سانداننى دەلىللەش خاتالىقى ياكى سىرتقى ھېساباتىڭىزنى يېڭىلاشنى چەكلىگەنلىكتىن بولغان بولۇشى مۇمكىن.',
'login' => 'تىزىمغا كىر',
-'nav-login-createaccount' => 'كىر / ھېسابات قۇر',
+'nav-login-createaccount' => 'تىزىمغا كىر/ھېسابات قۇر',
'loginprompt' => 'سىز cookies نى قوزغاتقاندىلا ئاندىن {{SITENAME}} غا كىرەلەيسىز.',
'userlogin' => 'تىزىمغا كىر/ھېسابات قۇر',
'userloginnocreate' => 'تىزىمغا كىر',
'logout' => 'تىزىمدىن چىق',
'userlogout' => 'تىزىمدىن چىق',
-'notloggedin' => 'تىزىمغا كىرمىگەن',
+'notloggedin' => 'تىزىمغا كىرمىدى',
'nologin' => "ھېساباتىڭىز يوقمۇ؟ '''$1'''.",
'nologinlink' => 'ھېساباتتىن بىرنى قۇر',
'createaccount' => 'ھېسابات قۇر',
'gotaccount' => "ھېساباتىم بار؟ '''$1'''.",
'gotaccountlink' => 'تىزىمغا كىر',
-'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىڭىزنى ئۇنۇتتىڭىز؟',
+'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟',
'createaccountmail' => 'ئېلخەتتە',
'createaccountreason' => 'سەۋەب:',
'badretype' => 'سىز كىرگۈزگەن ئىم ماس كەلمىدى.',
-'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى مەۋجۇد.
-باشقا ئاتتىن بىرنى تاللاڭ.',
+'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى ئىشلىتىلىۋاتىدۇ.
+باشقا ئاتنى تاللاڭ.',
'loginerror' => 'تىزىمغا كىرىش خاتالىقى',
'createaccounterror' => 'ھېسابات قۇرالمىدى: $1',
'nocookiesnew' => 'ئىشلەتكۈچى ھېساباتى قۇرۇلدى ئەمما سىز تېخى كىرمىدىڭىز..
سىز cookies نى چەكلىگەن.
ئۇنى قوزغىتىپ قايتا سىناڭ.',
-'nocookiesfornew' => 'بۇ ئىشلەتكۈچى ھېساباتى قۇرۇلمىدى، ئۇنىڭ مەنبەسىنى جەزملىيەلمەيمىز.
-سىز cookie نى قوزغاتقانلىقىڭىزنى جەزملەپ، بۇ بەتنى قايتا يۈكلەپ ئاندىن قايتا سىناڭ.',
+'nocookiesfornew' => 'ئىشلەتكۈچى ھېساباتى قۇرۇلمىدى، ئۇنىڭ مەنبەسىنى جەزملىيەلمەيمىز.
+cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتنى قايتا يۈكلەپ ئاندىن قايتا سىناڭ.',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
'noname' => 'سىز تېخى ئىناۋەتلىك ئىشلەتكۈچى ئاتىنى بەلگىلىمىدىڭىز.',
'loginsuccesstitle' => 'تىزىمغا كىرىش مۇۋەپپەقىيەتلىك',
'loginsuccess' => "'''سىز {{SITENAME}} غا \"\$1\" سالاھىيىتىدە كىردىڭىز.'''",
'nosuchuser' => '"$1" ئاتلىق ئىشلەتكۈچىنى تاپالمىدى.
ئىشلەتكۈچى ئاتىنى تەكشۈرۈڭ.
ياكى [[Special:UserLogin/signup|يېڭى ھېسابات قۇرۇڭ]].',
-'nosuchusershort' => ' "$1" ئاتلىق ئىشلەتكۈچى يوق.
+'nosuchusershort' => '"$1" ئاتلىق ئىشلەتكۈچى يوق.
كىرگۈزگىنىڭىزنى تەكشۈرۈڭ.',
'nouserspecified' => 'ئىشلەتكۈچى ئاتىدىن بىرنى بەلگىلەڭ.',
'login-userblocked' => 'بۇ ئىشلەتكۈچى چەكلەنگەن. تىزىمغا كىرىشكە يول قويۇلمايدۇ.',
قايتا سىناڭ.',
'passwordtooshort' => 'ئىم ئاز دېگەندە {{PLURAL:$1|1 ھەرپ|$1 ھەرپ}} بولۇشى لازىم.',
'password-name-match' => 'ئىم ئىشلەتكۈچى ئاتىڭىزدىن پەرقلىنىشى لازىم.',
-'password-login-forbidden' => 'بۇ ئىشلەتكۈچى ئاتى ۋە ئىمنى ئىشلىتىش چەكلەنگەن.',
+'password-login-forbidden' => 'بۇ ئىشلەتكۈچى ئاتى ۋە ئىم چەكلەنگەن.',
'mailmypassword' => 'يېڭى ئىمنى ئېخەتكە ئەۋەت',
'passwordremindertitle' => '{{SITENAME}} ئۈچۈن يېڭى ۋاقىتلىق ئىم',
'passwordremindertext' => 'باشقىلار (بەلكىم سىز، IP ئادرېسى $1)
'emailnotauthenticated' => 'ئېلخەت ئادرېسىڭىز تېخى دەلىللەنمىدى.
تۆۋەندىكى ئىقتىدارى ھېچقانداق ئېلخەت ئەۋەتمەيدۇ.',
'noemailprefs' => 'بۇ ئىقتىدارنى ئىشلىتىش ئۈچۈن مايىللىق تەڭشىكىڭىزدە ئېلخەت ئادرېسى بەلگىلەڭ.',
-'emailconfirmlink' => 'ئېلخەت ئادرېسىڭىزنى جەزملەڭ',
+'emailconfirmlink' => 'ئېلخەت مەنزىلىڭىزنى جەزملەڭ',
'invalidemailaddress' => 'ئېلخەت ئادرېس فورماتى خاتا.
توغرا ئېلخەت ئادرېسى كىرگۈزۈڭ ياكى بۇ جاينى بوش قالدۇرۇڭ.',
+'emaildisabled' => 'بۇ تورتۇرا ئېلخەت يوللىيالمايدۇ.',
'accountcreated' => 'ھېسابات قۇرۇلدى',
'accountcreatedtext' => '$1 نىڭ ھېساباتى قۇرۇلدى.',
'createaccount-title' => '{{SITENAME}} دا يېڭى ھېسابات قۇر',
'usernamehasherror' => 'ئىشلەتكۈچى ئاتىدا مۇكەممەللىك كود ھەرپلىرى بولماسلىقى لازىم',
'login-throttled' => 'سىز بۇ ھېساباتنىڭ ئىمنى كۆپ قېتىم سىنىدىڭىز.
سەل تەخىر قىلىپ، ئاندىن قايتا سىناڭ.',
-'login-abort-generic' => 'تىزىمغا غەلبىلىك كىرەلمىدىڭىز - چېكىندى',
+'login-abort-generic' => 'تىزىمغا كىرەلمىدىڭىز - چېكىندى',
'loginlanguagelabel' => 'تىل: $1',
'suspicious-userlogout' => 'تىزىمدىن چىقىش ئىلتىماسىڭىز رەت قىلىندى، چۈنكى ئۇ بەلكىم بۇزۇلغان توركۆرگۈ ياكى غەملەك ۋاكالەتچىسى يوللىغان بولۇشى مۇمكىن.',
# E-mail sending
-'php-mail-error-unknown' => 'PHP نىڭmail() فونكسىيەسىدىكى يوچۇن خاتالىق',
+'php-mail-error-unknown' => 'PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق',
'user-mail-no-addy' => 'ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.',
# Change password dialog
'resetpass' => 'ئىم ئۆزگەرت',
'resetpass_announce' => 'سىز ۋاقىتلىق ئېلخەت جەزملەش كودىدا تىزىمغا كىرگەن.
تىزىمغا كىرىشنى تاماملاشتا، بۇ جايدا يېڭى ئىم بەلگىلىشىڭىز لازىم:',
+'resetpass_text' => '<!-- بۇ يەرگە تېكست قوشۇڭ -->',
'resetpass_header' => 'ھېسابات ئىمنى ئۆزگەرت',
'oldpassword' => 'كونا ئىم:',
'newpassword' => 'يېڭى ئىم:',
'resetpass-temp-password' => 'ۋاقىتلىق ئىم:',
# Special:PasswordReset
-'passwordreset' => 'ئىمنى ئەسلىگە قايتۇر',
+'passwordreset' => 'ئىمنى ئەسلىگە قايتۇرماق',
'passwordreset-text' => 'بۇ جەدۋەل تاماملانسا ھېسابات تەپسىلاتىڭىزنى ئېلخەتىڭىزدە تاپشۇرۇۋالىسىز.',
-'passwordreset-legend' => 'ئىمنى ئەسلىگە قايتۇر',
+'passwordreset-legend' => 'ئىمنى ئەسلىگە قايتۇرماق',
'passwordreset-disabled' => 'بۇ ۋىكىدا ئىمنى ئەسلىگە قايتۇرۇش چەكلەنگەن.',
'passwordreset-pretext' => '{{PLURAL:$1||تۆۋەندىكى سانلىق مەلۇماتتىن بىرنى كىرگۈزۈڭ}}',
-'passwordreset-username' => 'ئÙ\89Ø´Ù\84Û\95تÙ\83Û\87Ú\86Ù\89 ئÙ\89سÙ\85ى:',
+'passwordreset-username' => 'ئÙ\89Ø´Ù\84Û\95تÙ\83Û\88Ú\86Ù\89 ئاتى:',
'passwordreset-domain' => 'دائىرە:',
-'passwordreset-email' => 'ئېلخەت ئادرېس:',
+'passwordreset-capture' => 'ھاسىل قىلىنغان ئېلخەتنى كۆرسىتەمدۇ؟',
+'passwordreset-capture-help' => 'ئەگەر بۇ رامكا تاللانسا، ئېلخەت (ۋاقىتلىق ئىمنى ئۆز ئىچىگە ئالىدۇ) كۆرسىتىپ ئىشلەتكۈچىگە يوللايدۇ.',
+'passwordreset-email' => 'ئېلخەت ئادرېس',
'passwordreset-emailtitle' => '{{SITENAME}} دىكى ھېسابات تەپسىلاتى',
-'passwordreset-emailtext-ip' => 'بەزىلەر(بەلكىم سىز بولۇشىڭىز مۇمكىن) IP ئادرېس $1 ئارقىلىق {{SITENAME}} ($4) دىكى مۇناسىۋەتلىك ھېساباتنىڭ ئىم ئەسكەرتىشىگە ئېرىشىشنى تەلەپ قىلدى. {{PLURAL:$3|ھېسابات|ھېسابات}} بىلەن شۇ ئېلخەت ئادرېس باغلانغان:
+'passwordreset-emailtext-ip' => 'باشقىلار (بەلكىم سىز، IP ئادرېسى $1)
+{{SITENAME}} ($4) دىكى ھېسابات تەپسىلات ئەسكەرتىشىنى ئىلتىماس قىلدى .
+تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}ى مۇشۇ ئېلخەتكە باغلانغان:
$2
-بۇ {{PLURAL:$3|ۋاقىتلىق ئىم|ۋاقىتلىق ئىم}}نىڭ {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ.
-ھازىرلا تىزىمغا كىرىپ يېڭى ئىم تەڭشەڭ. ئەگەر ئىلتىماسنى باشقىلار ئوتتۇرىغا قويغان بولسا ياكى كونا ئىمنى ئەسكە ئالغان بولسىڭىز ئۆزگەرتىشنىڭ ھاجىتى يوق، بۇ ئۇچۇرغا پەرۋا قىلماي كونا ئىمنى داۋاملىق ئىشلىتىۋەرسىڭىز بولىدۇ.',
-'passwordreset-emailtext-user' => '{{SITENAME}} بېكەتتىكى $1 ئىشلەتكۈچى {{SITENAME}}($4) دىكى مۇناسىۋەتلىك ھېساباتنىڭ ئىم ئەسكەرتىشىگە ئېرىشىشنى تەلەپ قىلدى. {{PLURAL:$3|ھېسابات|ھېسابات}} بىلەن شۇ ئېلخەت ئادرېس باغلانغان:
+{{PLURAL:$3|بۇ ۋاقىتلىق ئىم|بۇ ۋاقىتلىق ئىم}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى ئىمدىن بىرنى تاللاڭ.
+سىز بەلگىلىگەن يېڭى ئىم {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن ئىم ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز،
+بۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا ئىمنى ئىشلىتىۋېرىڭ.',
+'passwordreset-emailtext-user' => '{{SITENAME}} دىكى $1 ئىشلەتكۈچى ھېسابات تەپسىلات ئەسكەرتىشىنى ئىلتىماس قىلدى .
+تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}($4)ى مۇشۇ ئېلخەتكە باغلانغان:
$2
-بۇ {{PLURAL:$3|ۋاقىتلىق ئىم|ۋاقىتلىق ئىم}}نىڭ {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ.
-ھازىرلا تىزىمغا كىرىپ يېڭى ئىم تەڭشەڭ. ئەگەر ئىلتىماسنى باشقىلار ئوتتۇرىغا قويغان بولسا ياكى كونا ئىمنى ئەسكە ئالغان بولسىڭىز ئۆزگەرتىشنىڭ ھاجىتى يوق، بۇ ئۇچۇرغا پەرۋا قىلماي كونا ئىمنى داۋاملىق ئىشلىتىۋەرسىڭىز بولىدۇ.',
+{{PLURAL:$3|بۇ ۋاقىتلىق ئىم|بۇ ۋاقىتلىق ئىم}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى ئىمدىن بىرنى تاللاڭ.
+سىز بەلگىلىگەن يېڭى ئىم {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن ئىم ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز،
+بۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا ئىمنى ئىشلىتىۋېرىڭ.',
'passwordreset-emailelement' => 'ئىشلەتكۈچى ئاتى: $1
ۋاقىتلىق ئىم: $2',
-'passwordreset-emailsent' => 'ئەسكەرتىش ئېلخەت ئەۋەتىلدى.',
+'passwordreset-emailsent' => 'ئەسكەرتىش ئېلخەت يوللاندى.',
+'passwordreset-emailsent-capture' => 'ئەسكەرتىش ئېلخەت يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.',
+'passwordreset-emailerror-capture' => 'ھاسىل قىلىنغان ئەسكەرتىش ئېلخەت تۆۋەندە كۆرسىتىلگەندەك ئەمما يوللىيالمىدى: $1',
# Special:ChangeEmail
'changeemail' => 'ئېلخەت ئادرېس ئۆزگەرت',
'changeemail-header' => 'ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت',
'changeemail-text' => 'بۇ جەدۋەل تاماملانسا ئېلخەت ئادرېسىڭىزنى ئۆزگەرتىدۇ. سىز ئىم كىرگۈزۈپ بۇ ئۆزگەرتىشنى جەزملەيسىز.',
-'changeemail-no-info' => 'تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رسÙ\89ÚÙ\89ز ئاÙ\86دÙ\89Ù\86 بÛ\87 بÛ\95تÙ\86Ù\89 بÙ\89Û\8bاستÛ\95 زÙ\89Ù\8aارÛ\95ت Ù\82Ù\89Ù\84اÙ\84اÙ\8aسÙ\89ز.',
+'changeemail-no-info' => 'سÙ\89ز تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رگÛ\95Ù\86دÙ\89Ù\86 Ù\83Û\90Ù\8aÙ\89Ù\86 بÙ\89Û\8bاسÙ\89تÛ\95 بÛ\87 بÛ\95تÙ\83Û\95 Ù\83Ù\89رÙ\89Ø´Ù\89ÚÙ\89ز Ù\84ازÙ\89Ù\85.',
'changeemail-oldemail' => 'نۆۋەتتىكى ئېلخەت ئادرېسى:',
'changeemail-newemail' => 'يېڭى ئېلخەت ئادرېسى:',
'changeemail-none' => '(يوق)',
'headline_tip' => '2- دەرىجىلىك ماۋزۇ',
'nowiki_sample' => 'فورماتى يوق تېكست قىستۇر',
'nowiki_tip' => 'wiki فورماتىغا پەرۋا قىلما',
+'image_sample' => 'Example.jpg',
'image_tip' => 'سىڭدۈرمە ھۆججەت',
+'media_sample' => 'Example.ogg',
'media_tip' => 'ھۆججەت ئۇلىنىشى',
'sig_tip' => 'ۋاقىت تامغىلىق ئىمزايىڭىز',
'hr_tip' => 'توغرىسىغا سىزىق (ئېھتىيات بىلەن ئىشلىتىڭ)',
# Edit pages
-'summary' => 'مۇھىم مەزمۇن:',
+'summary' => 'ئۈزۈندە',
'subject' => 'تېما/ماۋزۇ:',
'minoredit' => 'بۇ ئازراقلا تەھرىرلەش',
'watchthis' => 'بۇ بەتنى كۆزەت',
[{{fullurl:{{FULLPAGENAME}}|action=edit}} بۇ بەتنى تەھرىرلىيەلەيسىز]</span>',
'noarticletext-nopermission' => 'بۇ بەتتە ھازىرچە مەزمۇن يوق.
سىز باشقا بەتتە [[Special:Search/{{PAGENAME}}|بۇ بەتنىڭ ماۋزۇسىنى ئىزدىيەلەيسىز]] ياكى <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}] مۇناسىۋەتلىك خاتىرىسىنى ئىزدىيەلەيسىز،</span>',
+'missing-revision' => '"{{PAGENAME}}" ئاتلىق بەتنىڭ تۈزىتىلگەن نەشرى #$1 مەۋجۇت ئەمەس.
+
+ئادەتتە بۇ ئۆچۈرۈلگەن بىر بەتنىڭ ئۇلانمىسىغا كىرگەنلىك سەۋەبىدىن بولىدۇ.
+تەپسىلىي ئۇچۇرنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى] دىن تاپقىلى بولىدۇ.',
'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" ئىشلەتكۈچى خەتلەتمىگەن.
بۇ بەتنى قۇرۇش/تەھرىرلەشتىن ئىلگىرى تەكشۈرۈپ بېقىڭ.',
'userpage-userdoesnotexist-view' => '"$1" ئىشلەتكۈچى ھېساباتى خەتلەتمىگەن.',
'blocked-notice-logextract' => 'بۇ ئىشلەتكۈچى نۆۋەتتە چەكلەنگەن.
-پايدىلىنىش ئۈچۈن يېقىنقى تۆۋەندە چەكلەش خاتىرە تۈرلىرى تەمىنلەندى:',
+پايدىلىنىش ئۈچۈن يېقىنقى چەكلەش خاتىرە تۈرلىرى تۆۋەندە تەمىنلەندى:',
'clearyourcache' => "'''دىققەت''' - ساقلىغاندىن كېيىن، تور كۆرگۈنىڭ غەملىكىنى تازىلىغاندىن كېيىنلا ئاندىن ئېلىپ بارغان ئۆزگەرتىشنى كۆرەلەيسىز.
* '''Mozilla / Firefox / Safari:''' دا ''Shift'' كۇنۇپكىسىنى بېسىپ تۇرۇپ ''قايتا يۈكلە''نى ياكى ''Ctrl-F5'' ياكى ''Ctrl-R'' (''Mac تا Command-R'')؛
* '''Google Chrome:''' دا ''Ctrl-Shift-R'' (''Command-Shift-R'' Mac)
'''ئۇ تېخى ساقلانمىدى!'''",
'sitecsspreview' => "'''دىققەت سىز پەقەت بۇ CSS نى ئالدىن كۆزىتىۋاتىسىز.'''
'''ئۇ تېخى ساقلانمىدى!'''",
-'sitejspreview' => "'''دىققەت سىز پەقەت بۇ JavaScript كودىنى ئالدىن كۆزىتىۋاتىسىز.'''
+'sitejspreview' => "'''دىققەت سىز پەقەت بۇ JavaScript كودنى ئالدىن كۆزىتىۋاتىسىز.'''
'''ئۇ تېخى ساقلانمىدى!'''",
'userinvalidcssjstitle' => "'''ئاگاھلاندۇرۇش:''' تېرە\\\"\$1\" مەۋجۇد ئەمەس.
ئادەتلەنگەن .css ۋە .js تور بەت ماۋزۇسىغا كىچىك يېزىلىشتىكى ھەرپ ئىشلىتىلىدۇ، مەسىلەن، {{ns:user}}:Foo/vector.css بىلەن {{ns:user}}:Foo/Vector.css ئوخشاش ئەمەس.",
'updated' => '(يېڭىلاندى)',
'note' => "'''ئىزاھات:'''",
'previewnote' => "'''ئېسىڭىزدە بولسۇنكى بۇ پەقەتلا ئالدىن كۆزىتىش.'''
-ئۆزگەرتكەنلىرىڭىز تېخى ساقلانمىدى!",
+ئۆزگەرتكەن مەزمۇنىڭىز تېخى ساقلانمىدى!",
+'continue-editing' => 'تەھرىرلەشنى داۋاملاشتۇر',
'previewconflict' => 'بۇ ئالدىن كۆزىتىشتە ئۈستىدىكى تېكست تەھرىرلەش رايونىدىكى مەزمۇننى كۆرسەتتى. ئۇ ساقلانى تاللىغاندىن كېيىن كۆرۈنىدۇ.',
'session_fail_preview' => "'''كەچۈرۈڭ! سىزنىڭ جەريان سانلىق مەلۇماتىڭىز يوقاپ كەتكەندە ئېلىپ بارغان تەھرىرىڭىزنى بىر تەرەپ قىلالمايمىز.'''
قايتا سىناڭ.
'token_suffix_mismatch' => "'''سىزنىڭ ئىشلەتكۈچى تەرەپتىكى تەھرىر بۇيرۇقى بىر قىسىم تىنىش بەلگىلىرىنى بۇزۇۋەتتى، '''
بەتتىكى تەھرىرلەۋاتقان تېكستنىڭ بۇزۇلۇشىنىڭ ئالدىنى ئېلىش ئۈچۈن تەھرىرىڭىز رەت قىلىندى.
بۇ خىل ئەھۋال ئادەتتە نۇرغۇن خاتالىق بار تورنى ئاساس قىلغان ئاتسىز ۋاكالەتچىنى ئىشلەتكەندە كۆرۈلىدۇ.",
-'edit_form_incomplete' => "'''تÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 جÛ\95دÛ\8bÛ\95Ù\84Ù\86Ù\89Ú Ø¨Û\95زÙ\89 بÛ\86Ù\84Ù\89Ù\83Ù\89 Ù\85Û\87Ù\84ازÙ\89Ù\85Û\90تÙ\89رغا Ù\8aÛ\95تÙ\85Ù\89دÙ\89Ø\9b تÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 Ù\85Û\95زÙ\85Û\87Ù\86Ù\89ÚÙ\89زÙ\86Ù\89Ú Ù\85Û\87Ù\83Û\95Ù\85Ù\85Û\95Ù\84لىكىنى تەكشۈرۈپ ئاندىن قايتا سىناڭ.'''",
+'edit_form_incomplete' => "'''تÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 جÛ\95دÛ\8bÛ\95Ù\84Ù\86Ù\89Ú Ø¨Û\95زÙ\89 بÛ\86Ù\84Ù\89Ù\83Ù\89 Ù\85Û\87Ù\84ازÙ\89Ù\85Û\90تÙ\89رغا Ù\8aÛ\90تÙ\89Ù¾ بارÙ\85Ù\89دÙ\89Ø\9b تÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 Ù\85Û\95زÙ\85Û\87Ù\86Ù\89ÚÙ\89زÙ\86Ù\89Ú ØªÙ\88Ù\84Û\87Ù\82 ئÙ\89Ù\83Û\95Ù\86لىكىنى تەكشۈرۈپ ئاندىن قايتا سىناڭ.'''",
'editing' => '$1 تەھرىرلەۋاتىدۇ',
+'creating' => '$1 قۇرۇۋاتىدۇ',
'editingsection' => '$1 تەھرىرلەۋاتىدۇ (ئابزاس)',
'editingcomment' => '$1 تەھرىرلەۋاتىدۇ (يېڭى ئابزاس)',
'editconflict' => 'تەھرىر توقۇنۇشى: $1',
ئەگەر يازمىڭىزنىڭ خالىغانچە ئۆزگەرتىلىشى ياكى قايتا تارقىلىشىنى خالىمىسىڭىز، يوللىماڭ. <br />
سىز يوللىغان مەزمۇننىڭ ئۆزىڭىزنىڭ يازغانلىقى ياكى يەرلىك تور دائىرىسىدىن ياكى ئەركىن مەنبە ($1 دىكى تەپسىلاتنى كۆرۈڭ) دىن كەلگەنلىكىگە كاپالەتلىك قىلىڭ.
'''ئىجازەتكە ئېرىشمەي تۇرۇپ يوللىماڭ!'''",
-'longpageerror' => "'''خاتالىق: سىز يوللىغان تېكستنىڭ چوڭلۇقى $1 كىلوبايت، بۇ $2 كىلوبايتلىق ئەڭ چوڭ قىممەتتىن ئېشىپ كەتتى.'''
+'longpageerror' => "'''خاتالىق: سىز يوللىغان تېكىستنىڭ چوڭلۇقى {{PLURAL:$1|بىر كىلوبايت |$1 كىلوبايت}}، بۇ {{PLURAL:$2|بىر كىلوبايت|$2 كىلوبايت}}لىق ئەڭ چوڭ قىممەتتىن ئېشىپ كەتتى.'''
ئۇنى ساقلىغىلى بولمايدۇ.",
'readonlywarning' => "'''ئاگاھلاندۇرۇش: ساندان قۇلۇپلىنىپ ئاسرىلىۋاتىدۇ، شۇڭلاشقا ئۆزگەرتىشىڭىزنى ساقلىيالمايسىز.'''
سىز بۇ تېكستنى كۆچۈرۈپ تېكست ھۆججىتىگە ساقلاپ، سەل تۇرۇپ ئاندىن ئۆزگەرتىڭ.
'template-protected' => '(قوغدالغان)',
'template-semiprotected' => '(يېرىم قوغدالغان)',
'hiddencategories' => 'بۇ بەت {{PLURAL:$1|1 يوشۇرۇن تۈر|$1 يوشۇرۇن تۈر}} نىڭ ئەزالىرىغا تەۋە:',
+'edittools' => '<!-- بۇ جايدىكى تېكىست جەدۋەل تەھرىرلەش ۋە يوللاشنىڭ ئاستى تەرىپىدە كۆرۈنىدۇ. -->',
+'edittools-upload' => '-',
'nocreatetitle' => 'بەت قۇرۇش چەكلىمىسى',
'nocreatetext' => '{{SITENAME}} يېڭى بەت قۇرۇش ئىقتىدارىنى چەكلىگەن.
كەينىگە قايتىپ مەۋجۇد بەتنى تەھرىرلىيەلەيسىز ياكى [[Special:UserLogin|تىزىمغا كىر ياكى يېڭى بىر ھېسابات قۇر]]الايسىز.',
'edit-no-change' => 'تەھرىرلىگىنىڭىزگە پەرۋا قىلىنمىدى، چۈنكى تېكستتە ئۆزگىرىش بولمىدى.',
'edit-already-exists' => 'يېڭى بەت قۇرالمىدى
ئۇ مەۋجۇد.',
+'defaultmessagetext' => 'كۆڭۈلدىكى ئۇچۇر تېكستى',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''ئاگاھلاندۇرۇش:''' بۇ بەت ناھايىتى كۆپ يۇقىرى سەرپىياتتىكى گىرامماتىكىلىق ئىقتىدارنى چاقىرغان.\\n
'parser-template-loop-warning' => 'قېلىپ دەۋرىيلىكى بايقالدى: [[$1]]',
'parser-template-recursion-depth-warning' => 'قايتىلانما ئىپادە چوڭقۇر چەكلىمىسىدىن ئېشىپ كەتتى ($1)',
'language-converter-depth-warning' => 'تىل ئالماشتۇرۇش چوڭقۇرلۇقى چەكتىن ئاشتى ($1)',
+'node-count-exceeded-category' => 'بەتنىڭ نۇقتا سانى چەكتىن ئېشىپ كەتتى',
+'node-count-exceeded-warning' => 'بەت نۇقتا سانىدىن ئېشىپ كەتتى',
+'expansion-depth-exceeded-category' => 'كېڭەيتىلگەن چوڭقۇرلۇق بەت چەكلىمىسىدىن ئېشىپ كەتتى',
+'expansion-depth-exceeded-warning' => 'بەت كېڭەيتىلگەن چوڭقۇرلۇقتىن ئېشىپ كەتتى',
+'parser-unstrip-loop-warning' => 'دەۋرىيلىك بايقالدى',
+'parser-unstrip-recursion-limit' => 'قايتىلانما چەكلىمە ($1) دىن ئېشىپ كەتتى',
+'converter-manual-rule-error' => 'قولدا ئالماشتۇرىدىغان قائىدىدە خاتالىق بايقالدى',
# "Undo" feature
'undo-success' => 'بۇ تەھرىردىن يېنىۋالغىلى بولىدۇ
[[Special:Search|wiki دىن ئىزدە]] نى سىناپ مۇناسىۋەتلىك يېڭى بەتكە ئېرىشىڭ.',
# Revision deletion
-'rev-deleted-comment' => '(تەھرىر ئۈزۈندەسى چىقىرىۋېتىلدى)',
+'rev-deleted-comment' => '(تەھرىرلەش ئۈزۈندىسى چىقىرىۋېتىلدى)',
'rev-deleted-user' => '(ئىشلەتكۈچى ئاتى چىقىرىۋېتىلدى)',
'rev-deleted-event' => '(خاتىرە مەشغۇلاتى چىقىرىۋېتىلدى)',
'rev-deleted-user-contribs' => '[ئىشلەتكۈچى ئاتى ياكى IP ئادرېس چىقىرىۋېتىلدى - تۆھپىدىن تەھرىرنى يوشۇر]',
'rev-deleted-text-unhide' => "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.
[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.
داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ نەشرىنى كۆرسەت]ەلەيسىز.",
-'rev-suppressed-text-unhide' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
-[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\8aÙ\88Ù\82Ù\89تÙ\89Ø´ خاتÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 تÛ\95پسÙ\89Ù\84Ù\89Ù\8a ئÛ\87Ú\86Û\87رÙ\86Ù\89 تاپÙ\82Ù\89Ù\84Ù\89 بÙ\88Ù\84Ù\89دÛ\87.باشÙ\82Û\87رغÛ\87Ú\86Ù\89 بÙ\88Ù\84Û\87Ø´ سÛ\88Ù¾Ù\89تÙ\89دÛ\95Ø\8c داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
+'rev-suppressed-text-unhide' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
+[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87Ø´ خاتÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 تÛ\95پسÙ\89Ù\84Ù\89Ù\8a ئÛ\87Ú\86Û\87رÙ\86Ù\89 تاپÙ\82Ù\89Ù\84Ù\89 بÙ\88Ù\84Ù\89دÛ\87. ئÛ\95Ú¯Û\95ر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
'rev-deleted-text-view' => "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.
-باشÙ\82Û\87رغÛ\87Ú\86Ù\89 بÙ\88Ù\84Û\87Ø´ سÛ\88Ù¾Ù\89تÙ\89ÚÙ\89ز بÙ\89Ù\84Û\95Ù\86 ئÛ\87Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.: تÛ\95پسÙ\89Ù\84اتÙ\89Ù\86Ù\89 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئÛ\86Ú\86Û\88رÛ\88Ø´ خاتÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 تاپاÙ\84اÙ\8aسÙ\89ز.",
-'rev-suppressed-text-view' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
-باشÙ\82Û\87رغÛ\87Ú\86Ù\89 بÙ\88Ù\84Û\87Ø´ سÛ\88Ù¾Ù\89تÙ\89ÚÙ\89ز بÙ\89Ù\84Û\95Ù\86 ئÛ\87Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.: تÛ\95پسÙ\89Ù\84اتÙ\89Ù\86Ù\89 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\8aÙ\88Ù\82Ù\89تÙ\89ش خاتىرىسى]دىن تاپالايسىز.",
+ئۇنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
+'rev-suppressed-text-view' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
+ئÛ\87Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.: تÛ\95پسÙ\89Ù\84اتÙ\89Ù\86Ù\89 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87ش خاتىرىسى]دىن تاپالايسىز.",
'rev-deleted-no-diff' => "بۇ پەرقنى كۆرەلمەيسىز چۈنكى بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''
[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.",
'rev-suppressed-no-diff' => "بۇ پەرقنى كۆرەلمەيسىز چۈنكى بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.",
'rev-deleted-unhide-diff' => "بۇ بەتتىكى بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.
[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.
-باشÙ\82Û\87رغÛ\87Ú\86Ù\89 بÙ\88Ù\84Û\87Ø´ سÛ\88Ù¾Ù\89تÙ\89دÛ\95Ø\8c داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
-'rev-suppressed-unhide-diff' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
-[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\8aÙ\88Ù\82Ù\89تÙ\89Ø´ خاتÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 تÛ\95پسÙ\89Ù\84Ù\89Ù\8a ئÛ\87Ú\86Û\87رÙ\86Ù\89 تاپÙ\82Ù\89Ù\84Ù\89 بÙ\88Ù\84Ù\89دÛ\87.باشÙ\82Û\87رغÛ\87Ú\86Ù\89 بÙ\88Ù\84Û\87Ø´ سÛ\88Ù¾Ù\89تÙ\89دÛ\95Ø\8c داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
+ئÛ\95Ú¯Û\95ر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
+'rev-suppressed-unhide-diff' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
+[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87Ø´ خاتÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 تÛ\95پسÙ\89Ù\84Ù\89Ù\8a ئÛ\87Ú\86Û\87رÙ\86Ù\89 تاپÙ\82Ù\89Ù\84Ù\89 بÙ\88Ù\84Ù\89دÛ\87. ئÛ\95Ú¯Û\95ر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
'rev-deleted-diff-view' => "بۇ بەتنىڭ بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''
-.باشقۇرغۇچى بولۇش سۈپىتىڭىز بىلەن بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
-'rev-suppressed-diff-view' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú Ø¨Ù\89ر Ù\82Û\90تÙ\89Ù\85Ù\84Ù\89Ù\82 تÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
-باشقۇرغۇچى بولۇش سۈپىتىڭىز بىلەن بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} يوقىتىش خاتىرىسى]دىن تاپالايسىز.",
+بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
+'rev-suppressed-diff-view' => "بÛ\87 بÛ\95تÙ\86Ù\89Ú Ø¨Ù\89ر Ù\82Û\90تÙ\89Ù\85Ù\84Ù\89Ù\82 تÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
+بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} نازارەتچى يوشۇرۇش خاتىرىسى]دىن تاپالايسىز.",
'rev-delundel' => 'كۆرسەت/يوشۇر',
'rev-showdeleted' => 'كۆرسەت',
'revisiondelete' => 'تۈزىتىلگەن نەشرىنى ئۆچۈر/ئەسلىگە كەلتۈر',
'revdelete-offender' => 'تۈزەتكۈچى ئاپتور:',
# Suppression log
-'suppressionlog' => 'خاتىرىنى چەكلە',
-'suppressionlogtext' => 'تۆۋەندىكىسى ئۆچۈرۈلگەن ۋە باشقۇرغۇچى چەكلىگەن مەزمۇنغا چېتىلىدىغان تىزىملىك.
- [[Special:IPBlockList|چەكلەنگەنIP تىزىملىكى]] نى كۆرۈڭ. نۆۋەتتە ئېلىپ بېرىلىۋاتقان چەكلەنگەن ۋە پىچەتلەنگەن تىزىملىكتىن كۆرۈڭ.',
+'suppressionlog' => 'خاتىرە نازارەت',
+'suppressionlogtext' => 'تۆۋەندىكىسى ئۆچۈرۈلگەن ۋە باشقۇرغۇچى چەكلىگەن مەزمۇنغا چېتىلىدىغان تىزىم.
+ [[Special:BlockList|چەكلەنگەن تىزىم]] نى كۆرۈڭ. نۆۋەتتە ئېلىپ بېرىلىۋاتقان چەكلەنگەن ۋە پىچەتلەنگەن تىزىمدىن كۆرۈڭ.',
# History merging
'mergehistory' => 'بەت تارىخىنى بىرلەشتۈر',
'mergehistory-comment' => '[[:$1]] نى [[:$2]] غا بىرلەشتۈرۈلدى: $3',
'mergehistory-same-destination' => 'مەنبە بەت بىلەن نىشان بەت ئوخشاش بولسا بولمايدۇ',
'mergehistory-reason' => 'سەۋەب:',
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
# Merge log
'mergelog' => 'بىرلەشتۈرۈش خاتىرىسى',
'mergelogpagetext' => 'تۆۋەندىكىسى يېقىندا بىر بەتنىڭ تۈزىتىش تارىخىنىڭ باشقا بىر بەتكە بىرلەشتۈرۈلگەنلىك تىزىملىكى',
# Diffs
-'history-title' => '"$1" نىڭ ئۆزگەرتىش نەشر تارىخى',
+'history-title' => '"$1" نىڭ ئۆزگەرتىش خاتىرىسى',
+'difference-title' => '"$1" تۈزىتىلگەن نەشرى ئارىسىدىكى پەرق',
+'difference-title-multipage' => '"$1" بىلەن "$2" بەت ئارىسىدىكى پەرق',
'difference-multipage' => '(بەتلەر ئارىسىدىكى پەرق)',
'lineno' => '$1 -قۇر:',
'compareselectedversions' => 'تاللانغان نەشرىنى سېلىشتۇر',
# Preferences page
'preferences' => '系统设置',
-'mypreferences' => '我的参数设置',
+'mypreferences' => '我的设置',
'prefs-edits' => '编辑数量:',
'prefsnologin' => '尚未登录',
'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
'prefs-skin' => '皮肤',
'skin-preview' => '预览',
'datedefault' => '默认格式',
-'prefs-beta' => 'æµ\8bè¯\95ç\89\88ç\89¹è\89²',
+'prefs-beta' => 'æµ\8bè¯\95ç\89¹æ\80§',
'prefs-datetime' => '日期时间',
-'prefs-labs' => '实验室特色',
+'prefs-labs' => '实验室特性',
'prefs-user-pages' => '用户页面',
'prefs-personal' => '用户资料',
'prefs-rc' => '最近更改',
'timezoneregion-indian' => '印度洋',
'timezoneregion-pacific' => '太平洋',
'allowemail' => '接受来自其他用户的邮件',
-'prefs-searchoptions' => '搜索选项',
+'prefs-searchoptions' => '搜索',
'prefs-namespaces' => '名字空间',
'defaultns' => '否则在这些名字空间中搜索:',
'default' => '默认',
public function execute() {
global $wgLocalDatabases, $wgUser;
- $username = wfMsg( 'spambot_username' );
+ $username = wfMessage( 'spambot_username' )->text();
$wgUser = User::newFromName( $username );
if ( !$wgUser ) {
$this->error( "Invalid username", true );
if ( $rev ) {
// Revert to this revision
$this->output( "reverting\n" );
- $page->doEdit( $rev->getText(), wfMsgForContent( 'spam_reverting', $domain ),
+ $page->doEdit( $rev->getText(), wfMessage( 'spam_reverting', $domain )->inContentLanguage()->text(),
EDIT_UPDATE, $rev->getId() );
} elseif ( $this->hasOption( 'delete' ) ) {
// Didn't find a non-spammy revision, blank the page
$this->output( "deleting\n" );
- $page->doDeleteArticle( wfMsgForContent( 'spam_deleting', $domain ) );
+ $page->doDeleteArticle( wfMessage( 'spam_deleting', $domain )->inContentLanguage()->text() );
} else {
// Didn't find a non-spammy revision, blank the page
$this->output( "blanking\n" );
- $page->doEdit( '', wfMsgForContent( 'spam_blanking', $domain ) );
+ $page->doEdit( '', wfMessage( 'spam_blanking', $domain )->inContentLanguage()->text() );
}
$dbw->commit( __METHOD__ );
}
$messages = array();
foreach ( array_keys( Language::getMessagesFor( 'en' ) ) as $key ) {
- $messages[$key] = wfMsg( $key );
+ $messages[$key] = wfMessage( $key )->text();
}
$this->output( "MediaWiki $wgVersion language file\n" );
$this->output( serialize( $messages ) );
'import-interwiki-templates',
'import-interwiki-submit',
'import-interwiki-namespace',
+ 'import-interwiki-rootpage',
'import-upload-filename',
'import-comment',
'importtext',
'import-error-interwiki',
'import-error-special',
'import-error-invalid',
+ 'import-options-wrong',
+ 'import-rootpage-invalid',
+ 'import-rootpage-nosubpage',
),
'importlog' => array(
'importlogpage',
$err = $source->moveTo( $dest, false, $reason );
if ( $err !== true ) {
$msg = array_shift( $err[0] );
- $this->output( "\nFAILED: " . wfMsg( $msg, $err[0] ) );
+ $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
}
$dbw->commit( __METHOD__ );
$this->output( "\n" );
$this->mDescription = "how some statistics on the blob_orphans table, created with trackBlobs.php";
}
- private function getDB( $cluster ) {
+ protected function &getDB( $cluster, $groups = array(), $wiki = false ) {
$lb = wfGetLBFactory()->getExternalLB( $cluster );
return $lb->getConnection( DB_SLAVE );
}
//
// Behavior seems about the same between Firefox and IE 7/8 here.
// 'Description' doesn't appear to be used by either.
-$fullName = wfMsgForContent( 'opensearch-desc' );
+$fullName = wfMessage( 'opensearch-desc' )->inContentLanguage()->text();
print Xml::element( 'ShortName', null, $fullName );
print Xml::element( 'Description', null, $fullName );
$s .= '<td class="top" nowrap="nowrap">';
$s .= '<a href="' . htmlspecialchars( $mainPageObj->getLocalURL() ) . '">';
- $s .= '<span id="sitetitle">' . wfMsg( 'sitetitle' ) . '</span></a>';
+ $s .= '<span id="sitetitle">' . $this->msg( 'sitetitle' )->text() . '</span></a>';
$s .= '</td><td class="top" id="top-syslinks" width="100%">';
$s .= $this->sysLinks();
$s .= '</td></tr><tr><td class="top-subheader">';
$s .= '<font size="-1"><span id="sitesub">';
- $s .= htmlspecialchars( wfMsg( 'sitesubtitle' ) ) . '</span></font>';
+ $s .= htmlspecialchars( $this->msg( 'sitesubtitle' )->text() ) . '</span></font>';
$s .= '</td><td class="top-linkcollection">';
$s .= '<font size="-1"><span id="langlinks">';
array( 'known', 'noclasses' )
),
$this->getSkin()->aboutLink(),
- $this->searchForm( wfMsg( 'qbfind' ) )
+ $this->searchForm( $this->msg( 'qbfind' )->text() )
) );
$s .= "\n<br />" . $this->pageStats();
$s = array(
$this->getSkin()->mainPageLink(),
Linker::linkKnown(
- Title::newFromText( wfMsgForContent( 'aboutpage' ) ),
- wfMsg( 'about' )
+ Title::newFromText( $this->msg( 'aboutpage' )->inContentLanguage()->text() ),
+ $this->msg( 'about' )->text()
),
Linker::linkKnown(
- Title::newFromText( wfMsgForContent( 'helppage' ) ),
- wfMsg( 'help' )
+ Title::newFromText( $this->msg( 'helppage' )->inContentLanguage()->text() ),
+ $this->msg( 'help' )->text()
),
Linker::linkKnown(
- Title::newFromText( wfMsgForContent( 'faqpage' ) ),
- wfMsg( 'faq' )
+ Title::newFromText( $this->msg( 'faqpage' )->inContentLanguage()->text() ),
+ $this->msg( 'faq' )->text()
),
Linker::specialLink( 'Specialpages' )
);
if ( $this->data['loggedin'] ) {
$s[] = Linker::linkKnown(
$lo,
- wfMsg( 'logout' ),
+ $this->msg( 'logout' )->text(),
array(),
$q
);
} else {
$s[] = Linker::linkKnown(
$li,
- wfMsg( 'login' ),
+ $this->msg( 'login' )->text(),
array(),
$q
);
$s .= '<strong>' . $this->editThisPage() . '</strong>';
$s .= $sep . Linker::linkKnown(
- Title::newFromText( wfMsgForContent( 'edithelppage' ) ),
- wfMsg( 'edithelp' )
+ Title::newFromText( $this->msg( 'edithelppage' )->inContentLanguage()->text() ),
+ $this->msg( 'edithelp' )->text()
);
if( $this->data['loggedin'] ) {
if ( $this->data['loggedin'] ) {
$tl = Linker::link(
$user->getTalkPage(),
- wfMsg( 'mytalk' ),
+ $this->msg( 'mytalk' )->text(),
array(),
array(),
array( 'known', 'noclasses' )
$s .= Linker::link(
$user->getUserPage(),
- wfMsg( 'mypage' ),
+ $this->msg( 'mypage' )->text(),
array(),
array(),
array( 'known', 'noclasses' )
. $sep .
Linker::link(
SpecialPage::getSafeTitleFor( 'Contributions', $user->getName() ),
- wfMsg( 'mycontris' ),
+ $this->msg( 'mycontris' )->text(),
array(),
array(),
array( 'known', 'noclasses' )
if( $wgSiteSupportPage ) {
$s .= $sep . '<a href="' . htmlspecialchars( $wgSiteSupportPage ) . '" class="internal">'
- . wfMsg( 'sitesupport' ) . '</a>';
+ . $this->msg( 'sitesupport' )->text() . '</a>';
}
$s .= $sep . Linker::link(
SpecialPage::getTitleFor( 'Specialpages' ),
- wfMsg( 'moredotdotdot' ),
+ $this->msg( 'moredotdotdot' )->text(),
array(),
array(),
array( 'known', 'noclasses' )
* @return string
*/
function menuHead( $key ) {
- $s = "\n<h6>" . wfMsg( $key ) . "</h6>";
+ $s = "\n<h6>" . $this->msg( $key )->text() . "</h6>";
return $s;
}
$s .= "<input type='text' id=\"searchInput{$this->searchboxes}\" class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
. htmlspecialchars( substr( $search, 0, 256 ) ) . "\" /><br />"
- . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMsg( 'searcharticle' ) ) . "\" />";
+ . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMessage( 'searcharticle' )->text() ) . "\" />";
if( $wgUseTwoButtonsSearchForm ) {
- $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( wfMsg( 'search' ) ) . "\" />\n";
+ $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( $this->msg( 'search' )->text() ) . "\" />\n";
} else {
- $s .= '<div><a href="' . $action . '" rel="search">' . wfMsg( 'powersearch-legend' ) . "</a></div>\n";
+ $s .= '<div><a href="' . $action . '" rel="search">' . $this->msg( 'powersearch-legend' )->text() . "</a></div>\n";
}
$s .= '</form>';
} else {
/* show user page and user talk links */
$user = $this->getSkin()->getUser();
- $s .= $sep . Linker::link( $user->getUserPage(), wfMsgHtml( 'mypage' ) );
- $s .= $sep . Linker::link( $user->getTalkPage(), wfMsgHtml( 'mytalk' ) );
+ $s .= $sep . Linker::link( $user->getUserPage(), $this->msg( 'mypage' )->escaped() );
+ $s .= $sep . Linker::link( $user->getTalkPage(), $this->msg( 'mytalk' )->escaped() );
if ( $user->getNewtalk() ) {
$s .= ' *';
}
/* show my contributions link */
$s .= $sep . Linker::link(
SpecialPage::getSafeTitleFor( 'Contributions', $this->data['username'] ),
- wfMsgHtml( 'mycontris' ) );
+ $this->msg( 'mycontris' )->escaped() );
/* show my preferences link */
$s .= $sep . Linker::specialLink( 'Preferences' );
/* show upload file link */
$s.= Linker::specialLink( 'Watchlist' ) ;
$s .= $sep . Linker::linkKnown(
SpecialPage::getTitleFor( 'Contributions' ),
- wfMsg( 'mycontris' ),
+ $this->msg( 'mycontris' )->text(),
array(),
array( 'target' => $this->data['username'] )
);
case NS_TEMPLATE_TALK:
case NS_HELP_TALK:
case NS_CATEGORY_TALK:
- $text = wfMsg('viewtalkpage');
+ $text = $this->msg('viewtalkpage')->text();
break;
case NS_MAIN:
- $text = wfMsg( 'articlepage' );
+ $text = $this->msg( 'articlepage' )->text();
break;
case NS_USER:
- $text = wfMsg( 'userpage' );
+ $text = $this->msg( 'userpage' )->text();
break;
case NS_PROJECT:
- $text = wfMsg( 'projectpage' );
+ $text = $this->msg( 'projectpage' )->text();
break;
case NS_FILE:
- $text = wfMsg( 'imagepage' );
+ $text = $this->msg( 'imagepage' )->text();
break;
case NS_MEDIAWIKI:
- $text = wfMsg( 'mediawikipage' );
+ $text = $this->msg( 'mediawikipage' )->text();
break;
case NS_TEMPLATE:
- $text = wfMsg( 'templatepage' );
+ $text = $this->msg( 'templatepage' )->text();
break;
case NS_HELP:
- $text = wfMsg( 'viewhelppage' );
+ $text = $this->msg( 'viewhelppage' )->text();
break;
case NS_CATEGORY:
- $text = wfMsg( 'categorypage' );
+ $text = $this->msg( 'categorypage' )->text();
break;
default:
- $text = wfMsg( 'articlepage' );
+ $text = $this->msg( 'articlepage' )->text();
}
$link = $title->getText();
} elseif( $title->getNamespace() != NS_SPECIAL ) {
# we just throw in a "New page" text to tell the user that he's in edit mode,
# and to avoid messing with the separator that is prepended to the next item
- $s .= '<strong>' . wfMsg( 'newpage' ) . '</strong>';
+ $s .= '<strong>' . $this->msg( 'newpage' )->text() . '</strong>';
}
}
if( ( $title->isTalkPage() || $this->getSkin()->getOutput()->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
$s .= '<br />' . Linker::link(
$title,
- wfMsg( 'postcomment' ),
+ $this->msg( 'postcomment' )->text(),
array(),
array(
'action' => 'edit',
global $wgSiteSupportPage;
if( $wgSiteSupportPage ) {
$s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
- '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
+ '" class="internal">' . $this->msg( 'sitesupport' )->text() . '</a>';
}
$s .= "\n<br /></div>\n";
</p>
!! end
+# FIXME: This test (the IDN characters in the text of a link) is an inconsistency.
+# Where an external link could easily circumvent the sanitization of the text of
+# a link like this (where an IDN-ignore character is in the URL somewhere), this
+# test demands a higher standard. That's a bit strange.
+#
+# Example:
+#
+# http://example.com -> [http://example.com|http://example.com]
+# [http://example.com|http://example.com] -> [http://example.com|http://example.com]
+#
+# The first example is sanitized, but the second is not. Any security benefits
+# from this production are trivial to circumvent. Either remove this test and
+# let the parser(s) do their thing unaccosted, or fix the inconsistency and change
+# the test accordingly.
+#
+# All our love,
+# The Parsoid team.
!! test
External links: IDN ignored character reference in hostname; strip it right off
!! input
array( 'Ab cd', false, ' Ideographic space' ),
);
}
+
+ /**
+ * Test, if for all rights a right- message exist,
+ * which is used on Special:ListGroupRights as help text
+ * Extensions and core
+ */
+ public function testAllRightsWithMessage() {
+ //Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
+ $allRights = User::getAllRights();
+ $allMessageKeys = Language::getMessageKeysFor( 'en' );
+
+ $rightsWithMessage = array();
+ foreach ( $allMessageKeys as $message ) {
+ // === 0: must be at beginning of string (position 0)
+ if ( strpos( $message, 'right-' ) === 0 ) {
+ $rightsWithMessage[] = substr( $message, strlen( 'right-' ) );
+ }
+ }
+
+ sort( $allRights );
+ sort( $rightsWithMessage );
+
+ $this->assertEquals(
+ $allRights,
+ $rightsWithMessage,
+ 'Each user rights (core/extensions) has a corresponding right- message.'
+ );
+ }
}
if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
$image->recordUpload2(
'', // archive name
- 'Upload of some lame file',
+ 'Upload of some lame file',
'Some lame file',
array(
'size' => 12345,
'mime' => 'image/jpeg',
'metadata' => serialize( array() ),
'sha1' => wfBaseConvert( '', 16, 36, 31 ),
- 'fileExists' => true ),
+ 'fileExists' => true ),
$this->db->timestamp( '20010115123500' ), $user
);
}
if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
$image->recordUpload2(
'', // archive name
- 'zomgnotcensored',
- 'Borderline image',
+ 'zomgnotcensored',
+ 'Borderline image',
array(
'size' => 12345,
'width' => 320,
'mime' => 'image/jpeg',
'metadata' => serialize( array() ),
'sha1' => wfBaseConvert( '', 16, 36, 31 ),
- 'fileExists' => true ),
+ 'fileExists' => true ),
$this->db->timestamp( '20010115123500' ), $user
);
}
# The entries saved into RepoGroup cache with previous globals will be wrong.
RepoGroup::destroySingleton();
FileBackendGroup::destroySingleton();
- MessageCache::singleton()->destroyInstance();
+ MessageCache::destroyInstance();
return $context;
}
// Format is <timestamp>!<name>
$bits = explode( '!', $fileName, 2 );
if ( count( $bits ) != 2 ) {
- wfThumbError( 404, wfMsg( 'badtitletext' ) );
+ wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
wfProfileOut( __METHOD__ );
return;
}
$title = Title::makeTitleSafe( NS_FILE, $bits[1] );
if ( !$title ) {
- wfThumbError( 404, wfMsg( 'badtitletext' ) );
+ wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
wfProfileOut( __METHOD__ );
return;
}
// Get the name without the timestamp so hash paths are correctly computed
$title = Title::makeTitleSafe( NS_FILE, isset( $bits[1] ) ? $bits[1] : $fileName );
if ( !$title ) {
- wfThumbError( 404, wfMsg( 'badtitletext' ) );
+ wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
wfProfileOut( __METHOD__ );
return;
}
// Check the source file storage path
if ( !$img ) {
- wfThumbError( 404, wfMsg( 'badtitletext' ) );
+ wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
wfProfileOut( __METHOD__ );
return;
}
// Check for thumbnail generation errors...
$errorMsg = false;
+ $msg = wfMessage( 'thumbnail_error' );
if ( !$thumb ) {
- $errorMsg = wfMsgHtml( 'thumbnail_error', 'File::transform() returned false' );
+ $errorMsg = $msg->rawParams( 'File::transform() returned false' )->escaped();
} elseif ( $thumb->isError() ) {
$errorMsg = $thumb->getHtmlMsg();
} elseif ( !$thumb->hasFile() ) {
- $errorMsg = wfMsgHtml( 'thumbnail_error', 'No path supplied in thumbnail object' );
+ $errorMsg = $msg->rawParams( 'No path supplied in thumbnail object' )->escaped();
} elseif ( $thumb->fileIsSource() ) {
- $errorMsg = wfMsgHtml( 'thumbnail_error',
- 'Image was not scaled, is the requested width bigger than the source?' );
+ $errorMsg = $msg->
+ rawParams( 'Image was not scaled, is the requested width bigger than the source?' )->escaped();
}
if ( $errorMsg !== false ) {