* (bug 23427) New magic word {{PAGEID}} which gives the current page ID.
Will be null on previewing a page being created.
* Added ContribsPager::reallyDoQuery hook allowing extensions to data to MyContribs
+* (bug 37627) UserNotLoggedIn() exception to show a generic error page whenever
+ a user is not logged in.
=== Bug fixes in 1.20 ===
* (bug 30245) Use the correct way to construct a log page title.
&$queryInfo: The query for the contribs Pager
'ContribsPager::reallyDoQuery': Called before really executing the query for My Contributions
-&$$data: an array of results of all contribs queries
+&$data: an array of results of all contribs queries
$pager: The ContribsPager object hooked into
$offset: Index offset, inclusive
$limit: Exact query limit
}
$users = ' <span class="changedby">'
- . $this->getContext()->msg( 'brackets' )->rawParams(
+ . $this->msg( 'brackets' )->rawParams(
implode( $this->message['semicolon-separator'], $users )
- )->plain() . '</span>';
+ )->escaped() . '</span>';
$tl = '<span class="mw-collapsible-toggle mw-enhancedchanges-arrow"></span>';
$r .= "<td>$tl</td>";
public $title, $msg, $params;
/**
+ * @todo document
+ *
* Note: these arguments are keys into wfMsg(), not text!
+ *
+ * @param $title A title
+ * @param $msg String|Message . In string form, should be a message key
+ * @param $params Array Array to wfMsg()
*/
function __construct( $title, $msg, $params = null ) {
$this->title = $title;
}
}
+/**
+ * Shows a generic "user is not logged in" error page.
+ *
+ * This is essentially an ErrorPageError exception which by default use the
+ * 'exception-nologin' as a title and 'exception-nologin-text' for the message.
+ * @see bug 37627
+ *
+ * @par Example:
+ * @code
+ * if( $user->isAnon ) {
+ * throw new UserNotLoggedIn();
+ * }
+ * @endcode
+ *
+ * Please note the parameters are mixed up compared to ErrorPageError, this
+ * is done to be able to simply specify a reason whitout overriding the default
+ * title.
+ *
+ * @par Example:
+ * @code
+ * if( $user->isAnon ) {
+ * throw new UserNotLoggedIn( 'action-require-loggedin' );
+ * }
+ * @endcode
+ *
+ * @param $reasonMsg A message key containing the reason for the error.
+ * Optional, default: 'exception-nologin-text'
+ * @param $titleMsg A message key to set the page title.
+ * Optional, default: 'exception-nologin'
+ * @param $params Parameters to wfMsg().
+ * Optiona, default: null
+ */
+class UserNotLoggedIn extends ErrorPageError {
+
+ public function __construct(
+ $reasonMsg = 'exception-nologin-text',
+ $titleMsg = 'exception-nologin',
+ $params = null
+ ) {
+ parent::__construct( $titleMsg, $reasonMsg, $params );
+ }
+}
+
/**
* Show an error that looks like an HTTP server error.
* Replacement for wfHttpError().
* @file
*/
-class LogEventsList {
+class LogEventsList extends ContextSource {
const NO_ACTION_LINK = 1;
const NO_EXTRA_USER_LINKS = 2;
const USE_REVDEL_CHECKBOXES = 4;
- /**
- * @var Skin
- */
- private $skin;
-
- /**
- * @var OutputPage
- */
- private $out;
public $flags;
/**
*/
protected $mDefaultQuery;
- public function __construct( $skin, $out, $flags = 0 ) {
- $this->skin = $skin;
- $this->out = $out;
+ /**
+ * Constructor.
+ * The first two parameters used to be $skin and $out, but now only a context
+ * is needed, that's why there's a second unused parameter.
+ *
+ * @param $context IContextSource Context to use; formerly it was Skin object.
+ * @param $unused void Unused; used to be an OutputPage object.
+ * @param $flags int flags; can be a combinaison of self::NO_ACTION_LINK,
+ * self::NO_EXTRA_USER_LINKS or self::USE_REVDEL_CHECKBOXES.
+ */
+ public function __construct( $context, $unused = null, $flags = 0 ) {
+ if ( $context instanceof IContextSource ) {
+ $this->setContext( $context );
+ } else {
+ // Old parameters, $context should be a Skin object
+ $this->setContext( $context->getContext() );
+ }
+
$this->flags = $flags;
$this->preCacheMessages();
}
+ /**
+ * Deprecated alias for getTitle(); do not use.
+ *
+ * @deprecated in 1.20; use getTitle() instead.
+ * @return Title object
+ */
+ public function getDisplayTitle() {
+ return $this->getTitle();
+ }
+
/**
* As we use the same small set of messages in various methods and that
* they are called often, we call them once and save them in $this->message
'revertmove', 'undeletelink', 'undeleteviewlink', 'revdel-restore', 'hist', 'diff',
'pipe-separator', 'revdel-restore-deleted', 'revdel-restore-visible' );
foreach( $messages as $msg ) {
- $this->message[$msg] = wfMsgExt( $msg, array( 'escapenoentities' ) );
+ $this->message[$msg] = $this->msg( $msg )->escaped();
}
}
}
wfDeprecated( __METHOD__, '1.19' );
// If only one log type is used, then show a special message...
$headerType = (count($type) == 1) ? $type[0] : '';
+ $out = $this->getOutput();
if( LogPage::isLogType( $headerType ) ) {
$page = new LogPage( $headerType );
- $this->out->setPageTitle( $page->getName()->text() );
- $this->out->addHTML( $page->getDescription()->parseAsBlock() );
+ $out->setPageTitle( $page->getName()->text() );
+ $out->addHTML( $page->getDescription()->parseAsBlock() );
} else {
- $this->out->addHTML( wfMsgExt('alllogstext',array('parseinline')) );
+ $out->addHTML( $this->msg( 'alllogstext' )->parse() );
}
}
}
// Submit button
- $html .= Xml::submitButton( wfMsg( 'allpagessubmit' ) );
+ $html .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() );
// Fieldset
- $html = Xml::fieldset( wfMsg( 'log' ), $html );
+ $html = Xml::fieldset( $this->msg( 'log' )->text(), $html );
// Form wrapping
$html = Xml::tags( 'form', array( 'action' => $wgScript, 'method' => 'get' ), $html );
- $this->out->addHTML( $html );
+ $this->getOutput()->addHTML( $html );
}
/**
* @return String: Formatted HTML
*/
private function getFilterLinks( $filter ) {
- global $wgLang;
// show/hide links
- $messages = array( wfMsgHtml( 'show' ), wfMsgHtml( 'hide' ) );
+ $messages = array( $this->msg( 'show' )->escaped(), $this->msg( 'hide' )->escaped() );
// Option value -> message mapping
$links = array();
$hiddens = ''; // keep track for "go" button
$query
);
- $links[$type] = wfMsgHtml( "log-show-hide-{$type}", $link );
+ $links[$type] = $this->msg( "log-show-hide-{$type}" )->rawParams( $link )->escaped();
$hiddens .= Html::hidden( "hide_{$type}_log", $val ) . "\n";
}
// Build links
- return '<small>'.$wgLang->pipeList( $links ) . '</small>' . $hiddens;
+ return '<small>'.$this->getLanguage()->pipeList( $links ) . '</small>' . $hiddens;
}
private function getDefaultQuery() {
- global $wgRequest;
-
if ( !isset( $this->mDefaultQuery ) ) {
- $this->mDefaultQuery = $wgRequest->getQueryValues();
+ $this->mDefaultQuery = $this->getRequest()->getQueryValues();
unset( $this->mDefaultQuery['title'] );
unset( $this->mDefaultQuery['dir'] );
unset( $this->mDefaultQuery['offset'] );
return $this->mDefaultQuery;
}
- /**
- * Get the Title object of the page the links should point to.
- * This is NOT the Title of the page the entries should be restricted to.
- *
- * @return Title object
- */
- public function getDisplayTitle() {
- return $this->out->getTitle();
- }
-
- public function getContext() {
- return $this->out->getContext();
- }
-
/**
* @param $queryTypes Array
* @return String: Formatted HTML
* @since 1.19
*/
public function getTypeSelector() {
- global $wgUser;
-
$typesByName = array(); // Temporary array
// First pass to load the log names
foreach( LogPage::validTypes() as $type ) {
$page = new LogPage( $type );
$restriction = $page->getRestriction();
- if ( $wgUser->isAllowed( $restriction ) ) {
+ if ( $this->getUser()->isAllowed( $restriction ) ) {
$typesByName[$type] = $page->getName()->text();
}
}
*/
private function getUserInput( $user ) {
return '<span style="white-space: nowrap">' .
- Xml::inputLabel( wfMsg( 'specialloguserlabel' ), 'user', 'mw-log-user', 15, $user ) .
+ Xml::inputLabel( $this->msg( 'specialloguserlabel' )->text(), 'user', 'mw-log-user', 15, $user ) .
'</span>';
}
*/
private function getTitleInput( $title ) {
return '<span style="white-space: nowrap">' .
- Xml::inputLabel( wfMsg( 'speciallogtitlelabel' ), 'page', 'mw-log-page', 20, $title ) .
+ Xml::inputLabel( $this->msg( 'speciallogtitlelabel' )->text(), 'page', 'mw-log-page', 20, $title ) .
'</span>';
}
*/
private function getTitlePattern( $pattern ) {
return '<span style="white-space: nowrap">' .
- Xml::checkLabel( wfMsg( 'log-title-wildcard' ), 'pattern', 'pattern', $pattern ) .
+ Xml::checkLabel( $this->msg( 'log-title-wildcard' )->text(), 'pattern', 'pattern', $pattern ) .
'</span>';
}
* @return string
*/
private function getExtraInputs( $types ) {
- global $wgRequest;
- $offender = $wgRequest->getVal('offender');
+ $offender = $this->getRequest()->getVal( 'offender' );
$user = User::newFromName( $offender, false );
if( !$user || ($user->getId() == 0 && !IP::isIPAddress($offender) ) ) {
$offender = ''; // Blank field if invalid
}
if( count($types) == 1 && $types[0] == 'suppress' ) {
- return Xml::inputLabel( wfMsg('revdelete-offender'), 'offender',
+ return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
'mw-log-offender', 20, $offender );
}
return '';
public function logLine( $row ) {
$entry = DatabaseLogEntry::newFromRow( $row );
$formatter = LogFormatter::newFromEntry( $entry );
+ $formatter->setContext( $this->getContext() );
$formatter->setShowUserToolLinks( !( $this->flags & self::NO_EXTRA_USER_LINKS ) );
$action = $formatter->getActionText();
}
private function logTimestamp( LogEntry $entry ) {
- global $wgLang;
- $time = $wgLang->timeanddate( wfTimestamp( TS_MW, $entry->getTimestamp() ), true );
- return htmlspecialchars( $time );
+ return htmlspecialchars( $this->getLanguage()->userTimeAndDate(
+ $entry->getTimestamp(), $this->getUser() ) );
}
/**
* @return String
*/
private function logActionLinks( $row, $title, $paramArray, &$comment ) {
- global $wgUser;
if( ( $this->flags & self::NO_ACTION_LINK ) // we don't want to see the action
|| self::isDeleted( $row, LogPage::DELETED_ACTION ) ) // action is hidden
{
array(
'wpOldTitle' => $destTitle->getPrefixedDBkey(),
'wpNewTitle' => $title->getPrefixedDBkey(),
- 'wpReason' => wfMsgForContent( 'revertmove' ),
+ 'wpReason' => $this->msg( 'revertmove' )->inContentLanguage()->text(),
'wpMovetalk' => 0
)
);
- $revert = wfMessage( 'parentheses' )->rawParams( $revert )->escaped();
+ $revert = $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
}
// Show undelete link
} elseif( self::typeAction( $row, array( 'delete', 'suppress' ), 'delete', 'deletedhistory' ) ) {
- if( !$wgUser->isAllowed( 'undelete' ) ) {
+ if( !$this->getUser()->isAllowed( 'undelete' ) ) {
$viewdeleted = $this->message['undeleteviewlink'];
} else {
$viewdeleted = $this->message['undeletelink'];
array(),
array( 'target' => $title->getPrefixedDBkey() )
);
- $revert = wfMessage( 'parentheses' )->rawParams( $revert )->escaped();
+ $revert = $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
// Show unblock/change block link
} elseif( self::typeAction( $row, array( 'block', 'suppress' ), array( 'block', 'reblock' ), 'block' ) ) {
$revert = Linker::linkKnown(
SpecialPage::getTitleFor( 'Block', $row->log_title ),
$this->message['change-blocklink']
);
- $revert = wfMessage( 'parentheses' )->rawParams( $revert )->escaped();
+ $revert = $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
// Show change protection link
} elseif( self::typeAction( $row, 'protect', array( 'modify', 'protect', 'unprotect' ) ) ) {
$revert .= Linker::link( $title,
'offset' => $row->log_timestamp
)
);
- if( $wgUser->isAllowed( 'protect' ) ) {
+ if( $this->getUser()->isAllowed( 'protect' ) ) {
$revert .= $this->message['pipe-separator'] .
Linker::link( $title,
$this->message['protect_change'],
array( 'action' => 'protect' ),
'known' );
}
- $revert = ' ' . wfMessage( 'parentheses' )->rawParams( $revert )->escaped();
+ $revert = ' ' . $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
// Show unmerge link
} elseif( self::typeAction( $row, 'merge', 'merge', 'mergehistory' ) ) {
$revert = Linker::linkKnown(
'mergepoint' => $paramArray[1]
)
);
- $revert = wfMessage( 'parentheses' )->rawParams( $revert )->escaped();
+ $revert = $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
// If an edit was hidden from a page give a review link to the history
} elseif( self::typeAction( $row, array( 'delete', 'suppress' ), 'revision', 'deletedhistory' ) ) {
$revert = RevisionDeleter::getLogLinks( $title, $paramArray,
'ids' => $query
)
);
- $revert = wfMessage( 'parentheses' )->rawParams( $revert )->escaped();
+ $revert = $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
}
// Do nothing. The implementation is handled by the hook modifiying the passed-by-ref parameters.
} else {
* @return string
*/
private function getShowHideLinks( $row ) {
- global $wgUser;
if( ( $this->flags == self::NO_ACTION_LINK ) // we don't want to see the links
|| $row->log_type == 'suppress' ) { // no one can hide items from the suppress log
return '';
}
$del = '';
+ $user = $this->getUser();
// Don't show useless checkbox to people who cannot hide revisions
- if( $wgUser->isAllowed( 'deletedhistory' ) ) {
- if( $row->log_deleted || $wgUser->isAllowed( 'deleterevision' ) ) {
- $canHide = $wgUser->isAllowed( 'deleterevision' );
+ if( $user->isAllowed( 'deletedhistory' ) ) {
+ if( $row->log_deleted || $user->isAllowed( 'deleterevision' ) ) {
+ $canHide = $user->isAllowed( 'deleterevision' );
if ( $this->flags & self::USE_REVDEL_CHECKBOXES ) { // Show checkboxes instead of links.
- if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED ) ) { // If event was hidden from sysops
+ if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) { // If event was hidden from sysops
$del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
} else {
$del = Xml::check( 'showhiderevisions', false, array( 'name' => 'ids[' . $row->log_id . ']' ) );
}
} else {
- if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED ) ) { // If event was hidden from sysops
+ if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) { // If event was hidden from sysops
$del = Linker::revDeleteLinkDisabled( $canHide );
} else {
$query = array(
* if set to true (default), "No matching items in log" is displayed if loglist is empty
* - msgKey Array If you want a nice box with a message, set this to the key of the message.
* First element is the message key, additional optional elements are parameters for the key
- * that are processed with wfMsgExt and option 'parse'
- * - offset Set to overwrite offset parameter in $wgRequest
+ * that are processed with wfMessage
+ * - offset Set to overwrite offset parameter in WebRequest
* set to '' to unset offset
* - wrap String Wrap the message in html (usually something like "<div ...>$1</div>").
* - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
}
# Insert list of top 50 (or top $lim) items
- $loglist = new LogEventsList( $context->getSkin(), $context->getOutput(), $flags );
+ $loglist = new LogEventsList( $context, null, $flags );
$pager = new LogPager( $loglist, $types, $user, $page, '', $conds );
- if ( isset( $param['offset'] ) ) { # Tell pager to ignore $wgRequest offset
+ if ( isset( $param['offset'] ) ) { # Tell pager to ignore WebRequest offset
$pager->setOffset( $param['offset'] );
}
if( $lim > 0 ) $pager->mLimit = $lim;
$s = '<div class="mw-warning-with-logexcerpt">';
if ( count( $msgKey ) == 1 ) {
- $s .= wfMsgExt( $msgKey[0], array( 'parse' ) );
+ $s .= $context->msg( $msgKey[0] )->parseAsBlock();
} else { // Process additional arguments
$args = $msgKey;
array_shift( $args );
- $s .= wfMsgExt( $msgKey[0], array( 'parse' ), $args );
+ $s .= $context->msg( $msgKey[0], $args )->parseAsBlock();
}
}
$s .= $loglist->beginLogEventsList() .
} else {
if ( $showIfEmpty ) {
$s = Html::rawElement( 'div', array( 'class' => 'mw-warning-logempty' ),
- wfMsgExt( 'logempty', array( 'parseinline' ) ) );
+ $context->msg( 'logempty' )->parse() );
}
}
if( $pager->getNumRows() > $pager->mLimit ) { # Show "Full log" link
$urlParam['type'] = $types[0];
$s .= Linker::link(
SpecialPage::getTitleFor( 'Log' ),
- wfMsgHtml( 'log-fulllog' ),
+ $context->msg( 'log-fulllog' )->escaped(),
array(),
$urlParam
);
* @return string
*/
protected function postText(){
+ $links = array();
+
# Link to the user's contributions, if applicable
if( $this->target instanceof User ){
$contribsPage = SpecialPage::getTitleFor( 'Contributions', $this->target->getName() );
krsort( $result );
}
- // enfore limit
+ // enforce limit
$result = array_slice( $result, 0, $limit );
// get rid of array keys
private function show( FormOptions $opts, array $extraConds ) {
# Create a LogPager item to get the results and a LogEventsList item to format them...
- $loglist = new LogEventsList( $this->getSkin(), $this->getOutput(), LogEventsList::USE_REVDEL_CHECKBOXES );
+ $loglist = new LogEventsList( $this->getContext(), null, LogEventsList::USE_REVDEL_CHECKBOXES );
$pager = new LogPager( $loglist, $opts->getValue( 'type' ), $opts->getValue( 'user' ),
$opts->getValue( 'page' ), $opts->getValue( 'pattern' ), $extraConds, $opts->getValue( 'year' ),
$opts->getValue( 'month' ), $opts->getValue( 'tagfilter' ) );
'tog-hidepatrolled' => 'أخف التعديلات المراجعة في أحدث التغييرات',
'tog-newpageshidepatrolled' => 'أخف الصفحات المراجعة من قائمة الصفحات الجديدة',
'tog-extendwatchlist' => 'مدد قائمة المراقبة لعرض كل التغييرات، وليس الأحدث فقط',
-'tog-usenewrc' => 'استخدÙ\85 Ø£Øدث اÙ\84تغÙ\8aÙ\8aرات اÙ\84Ù\85ØسÙ\86ة (يتطلب جافاسكربت)',
-'tog-numberheadings' => 'رقم العناوين تلقائيا',
+'tog-usenewrc' => 'جÙ\85Ù\91ع اÙ\84تعدÙ\8aÙ\84ات Øسب اÙ\84صÙ\81ØØ© Ù\81Ù\8a Ø£Øدث اÙ\84تغÙ\8aÙ\8aرات Ù\88Ù\82ائÙ\85Ø© اÙ\84Ù\85راÙ\82بة (يتطلب جافاسكربت)',
+'tog-numberheadings' => 'رقم العناوين تلقائياً',
'tog-showtoolbar' => 'أظهر شريط التحرير (يتطلب جافاسكربت)',
'tog-editondblclick' => 'عدل الصفحات عند الضغط المزدوج (جافاسكربت)',
'tog-editsection' => 'مكن تعديل الأقسام عن طريق وصلات [عدل]',
'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبين',
'tog-oldsig' => 'التوقيع الحالي:',
'tog-fancysig' => 'عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)',
-'tog-externaleditor' => 'استخدم محررا خارجيا بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors مزيد من المعلومات.])',
-'tog-externaldiff' => 'استخدم فرقا خارجيا بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors للمزيد من المعلومات.])',
+'tog-externaleditor' => 'استخدم محرراً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([[mw:Manual:External_editors|للمزيد من المعلومات]].)',
+'tog-externaldiff' => 'استخدم فرقاً خارجياً بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([[mw:Manual:External_editors|للمزيد من المعلومات]].)',
'tog-showjumplinks' => 'مكن وصلات "اذهب إلى" المساعدة',
'tog-uselivepreview' => 'استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)',
'tog-forceeditsummary' => 'نبهني عند إدخال ملخص تعديل فارغ',
'tog-hidepatrolled' => 'সাম্প্ৰতিক সাল-সলনিত তহলদাৰী সম্পাদনা নেদেখুৱাব',
'tog-newpageshidepatrolled' => 'নতুন পৃষ্ঠা তালিকাত তহলদাৰী পৃষ্ঠাসমূহ নেদেখুৱাব',
'tog-extendwatchlist' => 'কেৱল সাম্প্ৰতিকেই নহয, লক্ষ্য-তালিকাৰ সকলো সাল-সলনি বহলাই দেখুৱাওক',
-'tog-usenewrc' => 'বৰà§\8dদà§\8dধিত সামà§\8dপà§\8dৰতিà¦\95 সাল-সলনি বà§\8dযবহাৰ à¦\95ৰà¦\95 (à¦\9cাà¦à¦¾à¦¸à§\8dà¦\95à§\8dৰিপà§\8dà¦\9fৰ দৰà¦\95াৰ)',
+'tog-usenewrc' => 'বৰà§\8dদà§\8dধিত সামà§\8dপà§\8dৰতিà¦\95 সাল-সলনি বà§\8dযবহাৰ à¦\95ৰà¦\95 (à¦\9cাà¦à¦¾à¦¸à§\8dà¦\95à§\8dৰিপà§\8dà¦\9fৰ পà§\8dৰয়à§\8bà¦\9cন)',
'tog-numberheadings' => 'শীৰ্ষকত স্বয়ংক্ৰিয়ভাৱে ক্ৰমিক নং দিয়ক',
'tog-showtoolbar' => 'সম্পাদনা দণ্ডিকা দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ দৰকাৰ)',
'tog-editondblclick' => 'একেলগে দুবাৰ টিপা মাৰিলে পৃষ্ঠা সম্পাদনা কৰক (জাভাস্ক্ৰিপ্টৰ দৰকাৰ)',
যিজন প্ৰশাসকে এইটো বন্ধ কৰিছে তেওঁ দৰ্শোৱা কাৰণ হৈছে: \'\'$3\'\'।',
'invalidtitle-knownnamespace' => 'নামস্থান "$2" আৰু পাঠ্য "$3" থকা অবৈধ শিৰোনাম',
'invalidtitle-unknownnamespace' => 'অজ্ঞাত নামস্থান সংখ্যা $1 আৰু পাঠ্য "$2" থকা অবৈধ শিৰোনাম',
+'exception-nologin' => 'প্ৰৱেশ কৰা নাই',
+'exception-nologin-text' => 'এই পৃষ্ঠা অথবা কামৰ বাবে আপুনি প্ৰৱেশ কৰা বাধ্যতামূলক',
# Virus scanner
'virus-badscanner' => "ভুল কনফিগাৰেচন: অজ্ঞাত ভাইৰাছ স্কেনাৰ: ''$1''",
# Revision deletion
'rev-deleted-comment' => "(সম্পাদনা সাৰাংশ আঁতৰোৱা হ'ল)",
'rev-deleted-user' => '(সদস্যনাম আঁতৰোৱা হ’ল)',
-'rev-deleted-event' => "(ল'à¦\97 à¦\95াৰà§\8dয্য আঁতৰোৱা হ'ল)",
+'rev-deleted-event' => "(à¦\85à¦à¦¿à¦²à§\87à¦\96 à¦\95াৰ্য আঁতৰোৱা হ'ল)",
'rev-deleted-user-contribs' => "[সদস্যনাম বা আই-পি ঠিকনা আঁতৰোৱা হ'ল - সম্পাদনা বৰঙনিসমূহৰ পৰা আঁৰ কৰা হৈছে]",
'rev-deleted-text-permission' => "পৃষ্ঠাৰ এই সংশোধনটি '''বিলোপ''' কৰা হ'ল ।
-সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85বলà§\81পà§\8dতি ল'à¦\97ত]",
+সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85বলà§\81পà§\8dতি à¦\85à¦à¦¿à¦²à§\87à¦\96ত]",
'rev-deleted-text-unhide' => "পৃষ্ঠাখনৰ এই সংশোধনটো '''বিলোপ''' কৰা হৈছে |
-সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি লâ\80\99à¦\97]ত।
+সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি à¦\85à¦à¦¿à¦²à§\87à¦\96ত]।
আপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
'rev-suppressed-text-unhide' => "পৃষ্ঠাখনৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।
-সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ লâ\80\99à¦\97ত]।
+সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ à¦\85à¦à¦¿à¦²à§\87à¦\96ত]।
আপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
'rev-deleted-text-view' => "পৃষ্ঠাৰ এই সংশোধনটো '''বিলোপ''' কৰা হ'ল ।
-à¦\86পà§\81নি à¦\8fà¦\87à¦\9fà§\8b à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85বলà§\81পà§\8dতি লâ\80\99à¦\97ত]।",
+à¦\86পà§\81নি à¦\8fà¦\87à¦\9fà§\8b à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85বলà§\81পà§\8dতি à¦\85à¦à¦¿à¦²à§\87à¦\96ত]।",
'rev-suppressed-text-view' => "পৃষ্ঠাৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হ’ল।
-à¦\86পà§\81নি à¦\8fà¦\87à¦\9fà§\8b à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ লâ\80\99à¦\97ত]।",
+à¦\86পà§\81নি à¦\8fà¦\87à¦\9fà§\8b à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ à¦\85à¦à¦¿à¦²à§\87à¦\96ত]।",
'rev-deleted-no-diff' => "আপুনি এই পাৰ্থক্য চাব নোৱাৰে কাৰণ এটা সংস্কৰণ '''বিলোপ''' কৰা হৈছে ।
-সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি ল'à¦\97] ত ।",
+সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি à¦\85à¦à¦¿à¦²à§\87à¦\96ত]।",
'rev-suppressed-no-diff' => "আপুনি এই পাৰ্থক্য চাব নোৱাৰে কাৰণ এটা সংস্কৰণ '''বিলোপ''' কৰা হৈছে ।",
'rev-deleted-unhide-diff' => "এই পাৰ্থক্যৰ এটা সংস্কৰণ '''বিলোপ''' কৰা হৈছে ।
-বিসà§\8dতাৰিত à¦\95াৰণ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি লâ\80\99à¦\97] ত পাব ।
+বিসà§\8dতাৰিত à¦\95াৰণ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি à¦\85à¦à¦¿à¦²à§\87à¦\96ত] পাব ।
আপুনি মন কৰিলে [$1 এই পাৰ্থক্য চাওক] ।",
'rev-suppressed-unhide-diff' => "এই পাৰ্থক্যৰ এটা সংশোধন '''নিবাৰণ''' কৰা হৈছে ।
-সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ লâ\80\99à¦\97ত] ।
+সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ à¦\85à¦à¦¿à¦²à§\87à¦\96ত] ।
আপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে] ।",
'rev-deleted-diff-view' => "এই পাৰ্থক্যৰ এটা সংশোধন '''বিলোপ''' কৰা হ'ল ।
-à¦\86পà§\81নি à¦\8fà¦\87 পাৰà§\8dথà¦\95à§\8dয à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি লâ\80\99à¦\97ত]",
+à¦\86পà§\81নি à¦\8fà¦\87 পাৰà§\8dথà¦\95à§\8dয à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} à¦\85ৱলà§\81পà§\8dতি à¦\85à¦à¦¿à¦²à§\87à¦\96ত]",
'rev-suppressed-diff-view' => "এই পাৰ্থক্যৰ এটা সংশোধন '''নিবাৰণ''' কৰা হ’ল ।
-à¦\86পà§\81নি à¦\8fà¦\87 পাৰà§\8dথà¦\95à§\8dয à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ লâ\80\99à¦\97ত] ।",
+à¦\86পà§\81নি à¦\8fà¦\87 পাৰà§\8dথà¦\95à§\8dয à¦\9aাব পাৰà§\87; সবিশà§\87ষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ à¦\85à¦à¦¿à¦²à§\87à¦\96ত] ।",
'rev-delundel' => 'দেখুৱাওক/নেদেখুৱাব',
'rev-showdeleted' => 'দেখুৱাওক',
-'revisiondelete' => 'সংকলন বিলোপন কৰক / পুণৰ্স্থাপিত কৰক',
+'revisiondelete' => 'সংকলন বিলোপ কৰক / পুণৰ স্থাপন কৰক',
'revdelete-nooldid-title' => 'লক্ষ্য সংশোধন যুক্তিসংগত নহয়',
'revdelete-nooldid-text' => 'কামটো কৰাৰ বাবে আপুনি লক্ষ্য সংশোধন নিৰ্বাচন কৰা নাই, নিৰ্বাচিত সংশোধন নাই, অথবা আপুনি বৰ্তমানৰ সংশোধন লুকুৱাব বিচাৰিছে ।',
-'revdelete-nologtype-title' => 'à¦\95à§\8bনà§\8b লâ\80\99à¦\97 প্ৰকাৰ দিয়া হোৱা নাই',
-'revdelete-nologtype-text' => 'à¦\8fà¦\87 à¦\95ামà¦\9fà§\8b à¦\95ৰাৰ বাবà§\87 à¦\86পà§\81নি à¦\95à§\8bনà§\8b লâ\80\99à¦\97 প্ৰকাৰ নিৰ্বাচন কৰা নাই ।',
-'revdelete-nologid-title' => 'à¦\85যà§\81à¦\95à§\8dতিসà¦\82à¦\97ত লâ\80\99à¦\97 ভৰ্তি',
-'revdelete-nologid-text' => 'à¦\86পà§\81নি à¦\8fà¦\87à¦\9fà§\8b à¦\95ৰাৰ বাবà§\87 à¦\95à§\8bনà§\8b লâ\80\99à¦\97 à¦à§°à§\8dতি নিৰà§\8dবাà¦\9aন à¦\95ৰা নাà¦\87 à¦\85থবা নিৰà§\8dবাà¦\9aিত লâ\80\99à¦\97 ভৰ্তিটো নাই ।',
+'revdelete-nologtype-title' => 'à¦\95à§\8bনà§\8b à¦\85à¦à¦¿à¦²à§\87à¦\96 প্ৰকাৰ দিয়া হোৱা নাই',
+'revdelete-nologtype-text' => 'à¦\8fà¦\87 à¦\95ামà¦\9fà§\8b à¦\95ৰাৰ বাবà§\87 à¦\86পà§\81নি à¦\95à§\8bনà§\8b à¦\85à¦à¦¿à¦²à§\87à¦\96 প্ৰকাৰ নিৰ্বাচন কৰা নাই ।',
+'revdelete-nologid-title' => 'à¦\85যà§\81à¦\95à§\8dতিসà¦\82à¦\97ত à¦\85à¦à¦¿à¦²à§\87à¦\96 ভৰ্তি',
+'revdelete-nologid-text' => 'à¦\86পà§\81নি à¦\8fà¦\87à¦\9fà§\8b à¦\95ৰাৰ বাবà§\87 à¦\95à§\8bনà§\8b à¦\85à¦à¦¿à¦²à§\87à¦\96 à¦à§°à§\8dতি নিৰà§\8dবাà¦\9aন à¦\95ৰা নাà¦\87 à¦\85থবা নিৰà§\8dবাà¦\9aিত à¦\85à¦à¦¿à¦²à§\87à¦\96 ভৰ্তিটো নাই ।',
'revdelete-no-file' => 'নিৰ্ধাৰিত ফাইলটি নাই ।',
'revdelete-show-file-confirm' => 'আপুনি "<nowiki>$1</nowiki>" ফাইলৰ বিলোপ কৰা কৰা সংশোধন $2 তাৰিখৰ পৰা $3 সময়ত চাব বিচাৰিছে নেকি?',
'revdelete-show-file-submit' => 'হয়',
'tog-hidepatrolled' => 'Anubrir les ediciones vixilaes nos cambeos recientes',
'tog-newpageshidepatrolled' => 'Anubrir les páxines vixilaes na llista de páxines nueves',
'tog-extendwatchlist' => "Espander la llista de vixilancia p'amosar tolos cambeos, non solo los más recientes.",
-'tog-usenewrc' => 'Cambeos recientes ameyoraos (necesita JavaScript)',
+'tog-usenewrc' => 'Agrupar los cambeos por páxina nos cambeos recientes y na llista de vixilancia (necesita JavaScript)',
'tog-numberheadings' => 'Autonumberar los encabezaos',
'tog-showtoolbar' => "Amosar la barra de ferramientes d'edición (JavaScript)",
'tog-editondblclick' => 'Editar páxines con doble clic (necesita JavaScript)',
L'alministrador que lu bloquió dio esti motivu: «$3».",
'invalidtitle-knownnamespace' => 'Títulu non válidu col espaciu de nomes «$2» y el testu «$3»',
'invalidtitle-unknownnamespace' => "Titulu non válidu col númberu $1 d'espaciu de nomes desconocíu y el testu «$2»",
+'exception-nologin' => 'Non identificáu',
+'exception-nologin-text' => "Esta páxina o aición necesita qu'anicies sesión nesta wiki.",
# Virus scanner
'virus-badscanner' => "Fallu de configuración: Escáner de virus desconocíu: ''$1''",
Адміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».',
'invalidtitle-knownnamespace' => 'Няслушная назва ў прасторы «$2»: «$3»',
'invalidtitle-unknownnamespace' => 'Няслушная назва ў невядомай прасторы $1: «$2»',
+'exception-nologin' => 'Вы не ўвайшлі ў сыстэму',
+'exception-nologin-text' => 'Гэтая старонка ці дзеяньне патрабуе, каб вы ўвайшлі ў сыстэму.',
# Virus scanner
'virus-badscanner' => "Няслушная канфігурацыя: невядомы антывірусны сканэр: ''$1''",
Správce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3''“.",
'invalidtitle-knownnamespace' => 'Neplatný název se jmenným prostorem „$2“ a textem „$3“',
'invalidtitle-unknownnamespace' => 'Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“',
+'exception-nologin' => 'Nejste přihlášen(a)',
+'exception-nologin-text' => 'Tato stránka nebo akce vyžaduje, abyste byli na této wiki přihlášeni.',
# Virus scanner
'virus-badscanner' => "Špatná konfigurace: neznámý antivirový program: ''$1''",
Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr waharddedig.',
'spamprotectionmatch' => "Dyma'r testun gyneuodd ein hidlydd amddiffyn rhag sbam: $1",
'spambot_username' => 'Teclyn clirio sbam MediaWiki',
-'spam_reverting' => "Yn troi nôl i'r diwygiad diweddaraf sydd ddim yn cynnwys cysylltiadau i $1",
-'spam_blanking' => 'Roedd cysylltiadau i $1 gan bob golygiad, yn blancio',
-'spam_deleting' => "Roedd pob diwygiad yn cynnwys cysylltiadau â $1, wrthi'n dileu",
+'spam_reverting' => 'Wedi adfer y diwygiad diweddaraf na sydd yn cynnwys cysylltiadau i $1',
+'spam_blanking' => 'Roedd cysylltiadau i $1 gan bob golygiad, felly gwacawyd y dudalen',
+'spam_deleting' => 'Roedd pob diwygiad yn cynnwys cysylltiadau â $1, felly fe ddilëwyd y dudalen',
# Info page
'pageinfo-title' => 'Manylion "$1"',
Der Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3“.',
'invalidtitle-knownnamespace' => 'Ungültiger Titel mit Namensraum „$2“ und Text „$3“',
'invalidtitle-unknownnamespace' => 'Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“',
+'exception-nologin' => 'Nicht angemeldet',
+'exception-nologin-text' => 'Diese Seite oder Aktion erfordert, dass du auf diesem Wiki angemeldet bist.',
# Virus scanner
'virus-badscanner' => "Fehlerhafte Konfiguration: unbekannter Virenscanner: ''$1''",
'tog-hidepatrolled' => 'Vurnayışanê qontrolkerdeyan pela vurnayışê peyêni de bınımne',
'tog-newpageshidepatrolled' => 'Pelanê qontrolkerdeyan lista pelanê neweyan de bınımne',
'tog-extendwatchlist' => 'Lista seyrkerdışi hera bıke ke vurnayışi pêro bıasê, tenya tewr peyêni nê',
-'tog-usenewrc' => 'Vurnayışanê peyênanê herakerdeyan bıxebetne (JavaScript lazımo)',
+'tog-usenewrc' => 'Vurnayışanê peyniya hera kerdeyan bıxebetne (JavaScript lazımo)',
'tog-numberheadings' => 'Sernuşteyan be xo numre cı şane',
'tog-showtoolbar' => 'Goceganê hacetanê vurnayışi bımocne (JavaScript lazımo)',
'tog-editondblclick' => 'Pê dı rey tıknayış pele sero bıxebetiye (JavaScript lazımo)',
# Contributions
'contributions' => 'İştirakê karberi',
'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştırakê mı',
+'mycontris' => 'İştıraqê mı',
'contribsub2' => 'Qandê $1 ($2)',
'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
'uctop' => '(ser)',
Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
'invalidtitle-knownnamespace' => 'Njepłaśiwy titel z mjenjowym rumom "$2" a tekstom "$3"',
'invalidtitle-unknownnamespace' => 'Njepłaśiwy titel z njeznatym mjenjowym rumom $1 a tekstom "$2"',
+'exception-nologin' => 'Njejsy se pśizjawił',
+'exception-nologin-text' => 'Toś ten bok abo toś ta akcija pomina, až sy na toś tom wikiju pśizjawjony.',
# Virus scanner
'virus-badscanner' => "Špatna konfiguracija: njeznaty wirusowy scanner: ''$1''",
'mergelogpagetext' => 'Παρακάτω είναι μια λίστα με τις πιο πρόσφατες συγχωνεύσεις ιστορικού μιας σελίδας σε άλλο.',
# Diffs
-'history-title' => 'Ιστορικό εκδόσεων για τη σελίδα "$1"',
+'history-title' => '"$1": Ιστορικό εκδόσεων',
'difference-title' => 'Διαφορά μεταξύ των αναθεωρήσεων του "$1"',
'difference-title-multipage' => 'Διαφορά μεταξύ των σελίδων "$1" και "$2"',
'difference-multipage' => '(Διαφορές μεταξύ των σελίδων)',
Please choose a different name.',
'loginerror' => 'Login error',
'createaccounterror' => 'Could not create account: $1',
+'exception-nologin' => 'Not logged in',
+'exception-nologin-text' => 'This page or action requires you to be logged in on this wiki.',
'nocookiesnew' => 'The user account was created, but you are not logged in.
{{SITENAME}} uses cookies to log in users.
You have cookies disabled.
L’administrateur qui l’a verrouillé a fourni ce motif: « $3 ».',
'invalidtitle-knownnamespace' => 'Titre invalide avec l’espace de noms « $2 » et l’intitulé « $3 »',
'invalidtitle-unknownnamespace' => 'Titre invalide avec le numéro d’espace de noms $1 et l’intitulé « $2 » inconnus',
+'exception-nologin' => 'Non connecté',
+'exception-nologin-text' => "Cette page ou cette action nécessite d'être connecté sur ce wiki.",
# Virus scanner
'virus-badscanner' => "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
'tog-hidepatrolled' => 'Latje änringe fersteege',
'tog-newpageshidepatrolled' => 'Kontroliirde side aw e list "Naie side" fersteege',
'tog-extendwatchlist' => 'Ütwidede wåchelist tun wisen foon åle änringe',
-'tog-usenewrc' => 'Ütwidede deerstaling foon da "Leeste Änringe" (brükt JavaScript)',
+'tog-usenewrc' => "Ütwidede deerstaling foon da ''Leeste Änringe'' än aw da ''Eefterkiikliste'' (brükt JavaScript)",
'tog-numberheadings' => 'Ouerschrafte automatisch numeriire',
'tog-showtoolbar' => 'Beårbe-wärktjüch wise',
'tog-editondblclick' => 'Side ma dööweltklik beårbe (brükt JavaScript)',
מנהל המערכת שנעל את המאגר סיפק את ההסבר הבא: "\'\'\'$3\'\'\'".',
'invalidtitle-knownnamespace' => 'כותרת בלתי־תקינה עם מרחב השם "$2" ושם דף "$3"',
'invalidtitle-unknownnamespace' => 'כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף "$2"',
+'exception-nologin' => 'לא בחשבון',
+'exception-nologin-text' => 'כדי לראות את הדף הזה או לבצע את הפעולה הזאת צריך להיכנס לחשבון בוויקי הזה.',
# Virus scanner
'virus-badscanner' => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
'invalidtitle-knownnamespace' => 'Njepłaćiwy titul z mjenowym rumom "$2" a tekstom "$3"',
'invalidtitle-unknownnamespace' => 'Njepłaćiwy titul z njeznatym mjenowym rumom $1 a tekstom "$2"',
+'exception-nologin' => 'Njejsy přizjewjeny',
+'exception-nologin-text' => 'Tuta strona abo akcija sej wužaduje, zo sy na tutym wikiju přizjewjeny.',
# Virus scanner
'virus-badscanner' => "Špatna konfiguracija: Njeznaty wirusowy skener: ''$1''",
* @author R-Joe
* @author Samat
* @author Sucy
+ * @author TK-999
* @author Terik
* @author Tgr
* @author Xbspiro
'tog-hidepatrolled' => 'Az ellenőrzött szerkesztések elrejtése a friss változtatások lapon',
'tog-newpageshidepatrolled' => 'Ellenőrzött lapok elrejtése az új lapok listájáról',
'tog-extendwatchlist' => 'A figyelőlistán az összes változtatás látszódjon, ne csak az utolsó',
-'tog-usenewrc' => 'Fejlettebb friss változások listája (JavaScript-alapú)',
+'tog-usenewrc' => 'Fejlettebb friss változások használata (JavaScript-alapú)',
'tog-numberheadings' => 'Fejezetcímek automatikus számozása',
'tog-showtoolbar' => 'Szerkesztőeszközsor megjelenítése (JavaScript-alapú)',
'tog-editondblclick' => 'A lapok szerkesztése dupla kattintásra (JavaScript-alapú)',
L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
'invalidtitle-knownnamespace' => 'Titolo non valido con namespace "$2" e testo "$3"',
'invalidtitle-unknownnamespace' => 'Titolo non valido con namespace sconosciuto "$1" e testo "$2"',
+'exception-nologin' => 'Accesso non effettuato',
+'exception-nologin-text' => "Questa pagina o azione richiede che tu abbia effettuato l'accesso su questo wiki.",
# Virus scanner
'virus-badscanner' => "Errore di configurazione: antivirus sconosciuto: ''$1''",
'prefs-watchlist-days-max' => 'Massimo $1 {{PLURAL:$1|giorno|giorni}}',
'prefs-watchlist-edits' => 'Numero di modifiche da mostrare con le funzioni avanzate:',
'prefs-watchlist-edits-max' => 'Numero massimo: 1000',
-'prefs-watchlist-token' => 'Token Osservati speciali:',
+'prefs-watchlist-token' => 'Token osservati speciali:',
'prefs-misc' => 'Varie',
'prefs-resetpass' => 'Cambia password',
'prefs-changeemail' => 'Modifica e-mail',
'tog-hidepatrolled' => 'დამალეთ შესწორებული რედაქტირებები ბოლო ცვლილებებში',
'tog-newpageshidepatrolled' => 'დამალეთ შემოწმებული გვერდები ახალი გვერდების სიიდან',
'tog-extendwatchlist' => 'გავრცობილი კონტროლის სია ყველა დაკავშირებული ცვლილების ჩვენების ჩათვლით',
-'tog-usenewrc' => 'á\83\92á\83\90á\83\9bá\83\9dá\83\98á\83§á\83\94á\83\9cá\83\94 á\83\91á\83\9dá\83\9aá\83\9d á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83£á\83\99á\83\94á\83\97á\83\94á\83¡á\83\98 á\83¡á\83\98á\83\90 (ჯავასკრიპტი)',
+'tog-usenewrc' => 'á\83\91á\83\9dá\83\9aá\83\9d á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83\93á\83\90 á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83¡á\83\98á\83\98á\83¡ á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83\93á\83\90á\83¯á\83\92á\83£á\83¤á\83\94á\83\91á\83\90 (á\83¡á\83\90á\83á\83\98á\83 á\83\9dá\83\90 ჯავასკრიპტი)',
'tog-numberheadings' => 'ავტომატურად დანომრე ქვესათაურები',
'tog-showtoolbar' => 'რედაქტირების ინსტრუმენტების ჩვენება (ჯავასკრიპტი)',
'tog-editondblclick' => 'გვერდების რედაქტირება ორმაგი დაწკაპუნებით (ჯავასკრიპტი)',
'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'ვერ მოხერხდა ბლოკირების მიღება სერვერზე $1.',
);
# Contributions
'contributions' => 'İştırakê karberi',
'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştırakê mı',
+'mycontris' => 'İştıraqê mı',
'contribsub2' => 'Serba $1 ($2)',
'uctop' => '(ser)',
'month' => 'Asme ra (u ravêr):',
'tog-usenewrc' => '최근 바뀜 및 주시 문서 목록에서 문서별 그룹 바뀜 (자바스크립트 필요)',
'tog-numberheadings' => '머릿글 번호 매기기',
'tog-showtoolbar' => '편집창에 툴바 보이기 (자바스크립트)',
-'tog-editondblclick' => '더블클릭으로 문서 편집하기 (자바스크립트)',
+'tog-editondblclick' => '더블 클릭으로 문서 편집하기 (자바스크립트)',
'tog-editsection' => '[편집] 링크로 부분 편집하기',
'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트)',
'tog-showtoc' => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)',
'category-empty' => '이 분류에 속하는 문서나 자료가 없습니다.',
'hidden-categories' => '{{PLURAL:$1|숨은 분류}}',
'hidden-category-category' => '숨은 분류',
-'category-subcat-count' => '{{PLURAL:$2|이 분류에는 하위 분류 1 개만이 속해 있습니다.|다음은 이 분류에 속하는 하위 분류 $2 개 가운데 $1 개입니다.}}',
+'category-subcat-count' => '{{PLURAL:$2|이 분류에는 하위 분류 1개만이 속해 있습니다.|다음은 이 분류에 속하는 하위 분류 $2개 가운데 $1개입니다.}}',
'category-subcat-count-limited' => '이 분류에 하위분류가 $1개 있습니다.',
-'category-article-count' => '{{PLURAL:$2|이 분류에는 문서 1 개만이 속해 있습니다.|다음은 이 분류에 속하는 문서 $2 개 가운데 $1 개입니다.}}',
+'category-article-count' => '{{PLURAL:$2|이 분류에는 문서 1개만이 속해 있습니다.|다음은 이 분류에 속하는 문서 $2개 가운데 $1개입니다.}}',
'category-article-count-limited' => '이 분류에 문서가 $1개 있습니다.',
-'category-file-count' => '{{PLURAL:$2|이 분류에는 파일 1 개만이 속해 있습니다.|다음은 이 분류에 속하는 파일 $2 개 가운데 $1 개입니다.}}',
+'category-file-count' => '{{PLURAL:$2|이 분류에는 파일 1개만이 속해 있습니다.|다음은 이 분류에 속하는 파일 $2개 가운데 $1개입니다.}}',
'category-file-count-limited' => '이 분류에 파일이 $1개 있습니다.',
'listingcontinuesabbrev' => ' (계속)',
'index-category' => '색인된 문서',
'collapsible-expand' => '보이기',
'thisisdeleted' => '$1을 보거나 되살리겠습니까?',
'viewdeleted' => '$1을 보겠습니까?',
-'restorelink' => '삭제된 편집 $1 개',
+'restorelink' => '삭제된 편집 $1개',
'feedlinks' => '피드:',
'feed-invalid' => '잘못된 구독 피드 방식입니다.',
'feed-unavailable' => '피드 서비스는 제공하지 않습니다',
저장소 관리자가 파일 저장소를 잠근 이유에 대해 "\'\'$3\'\'"이라는 설명을 남겼습니다.',
'invalidtitle-knownnamespace' => '제목 오류: 이름공간 "$2"와 텍스트 "$3"',
'invalidtitle-unknownnamespace' => '제목 오류: 알 수 없는 이름공간 번호 "$1"과, 텍스트 "$2"',
+'exception-nologin' => '로그인하지 않음',
+'exception-nologin-text' => '이 문서나 행동은 이 위키에 로그인을 해야 합니다.',
# Virus scanner
'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: ''$1''",
'userlogout' => '로그아웃',
'notloggedin' => '로그인하지 않음',
'nologin' => '계정이 없나요? $1.',
-'nologinlink' => '계정 만들기',
+'nologinlink' => '계정을 만들 수 있습니다',
'createaccount' => '계정 만들기',
'gotaccount' => "계정이 이미 있다면, '''$1'''.",
'gotaccountlink' => '로그인',
'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
'login-userblocked' => '이 사용자는 차단되었습니다. 로그인할 수 없습니다.',
'wrongpassword' => '입력한 비밀번호가 다릅니다. 다시 시도해 주세요.',
-'wrongpasswordempty' => 'ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\93°지 않았습니다.
+'wrongpasswordempty' => 'ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\9e\85ë ¥í\95\98지 않았습니다.
다시 시도해 주세요.',
'passwordtooshort' => '비밀번호는 $1 문자 이상이어야 합니다.',
'password-name-match' => '비밀번호는 사용자 이름과 반드시 달라야 합니다.',
'eauthentsent' => '확인 이메일을 보냈습니다. 이메일 내용의 지시대로 계정 확인 절차를 실행해 주십시오.',
'throttled-mailpassword' => '비밀번호 확인 이메일을 이미 최근 $1 시간 안에 보냈습니다. 악용을 방지하기 위해 비밀번호 확인 메일은 $1 시간마다 오직 하나씩만 보낼 수 있습니다.',
'mailerror' => '메일 보내기 오류: $1',
-'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 생성하여, 계정 생성 한도를 초과하였습니다.
+'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 만들어, 계정 생성 한도를 초과하였습니다.
따라서 지금은 이 IP 주소로는 더 이상 계정을 만들 수 없습니다.',
'emailauthenticated' => '당신의 이메일 주소는 $2 $3에 인증되었습니다.',
'emailnotauthenticated' => '이메일 주소를 인증하지 않았습니다. 이메일 확인 절차를 거치지 않으면 다음 이메일 기능을 사용할 수 없습니다.',
'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 생성되어 아래에 표시되었지만 발송하는 데에는 실패했습니다: $1',
# Special:ChangeEmail
-'changeemail' => 'E-mail 주소 변경',
+'changeemail' => '이메일 주소 바꾸기',
'changeemail-header' => '계정 메일 주소 변경',
'changeemail-text' => '이메일 주소를 바꾸려면 이 양식을 채워주십시오. 변경 내용을 확인하기 위해 당신의 비밀번호를 입력해야합니다.',
'changeemail-no-info' => '이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.',
'template-semiprotected' => '(준보호됨)',
'hiddencategories' => '이 문서는 다음 숨은 분류 $1 개에 속해 있습니다:',
'edittools' => '<!-- 이 문서는 편집 창과 파일 올리기 창에 출력됩니다. -->',
-'nocreatetitle' => '문서 생성 제한',
+'nocreatetitle' => '문서 만들기 제한',
'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 생성하는 것은 제한되어 있습니다. 이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들 수 있습니다]].',
'nocreate-loggedin' => '새 문서를 만들 권한이 없습니다.',
'sectioneditnotsupported-title' => '부분 편집 지원 안됨',
# Rights
'right-read' => '문서 읽기',
'right-edit' => '문서 편집',
-'right-createpage' => '문서 생성 (토론 문서 제외)',
-'right-createtalk' => '토론 문서 생성',
+'right-createpage' => '문서 만들기 (토론 문서 제외)',
+'right-createtalk' => '토론 문서 만들기',
'right-createaccount' => '새 계정 만들기',
'right-minoredit' => '사소한 편집 사용 가능',
'right-move' => '문서 이동',
'action-read' => '이 문서를 읽기',
'action-edit' => '문서 편집',
'action-createpage' => '문서 생성',
-'action-createtalk' => '토론 문서 생성하기',
+'action-createtalk' => '토론 문서 만들기',
'action-createaccount' => '새 계정 만들기',
'action-minoredit' => '이 편집을 사소한 편집으로 표시하기',
'action-move' => '이 문서 옮기기',
'filedelete-maintenance-title' => '파일을 삭제할 수 없습니다',
# MIME search
-'mimesearch' => 'MIME 검색',
+'mimesearch' => 'MIME 찾기',
'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 검색합니다. MIME 값을 <tt>image/jpeg</tt> 형태로 입력해주세요.',
'mimetype' => 'MIME 종류:',
'download' => '다운로드',
'nmembers' => '문서 $1개',
'nrevisions' => '편집 $1개',
'nviews' => '$1회 읽음',
-'nimagelinks' => '{{PLURAL:$1}}ê°\9c 문ì\84\9cì\97\90ì\84\9c ì\82¬ì\9a© ì¤\91',
-'ntransclusions' => '{{PLURAL:$1}}ê°\9c 문ì\84\9cì\97\90ì\84\9c ì\82¬ì\9a© ì¤\91',
+'nimagelinks' => '문ì\84\9c $1ê°\9cì\97\90ì\84\9c ì\82¬ì\9a© ì¤\91',
+'ntransclusions' => '문ì\84\9c $1ê°\9cì\97\90ì\84\9c ì\82¬ì\9a© ì¤\91',
'specialpage-empty' => '명령에 대한 결과가 없습니다.',
'lonelypages' => '외톨이 문서 목록',
'lonelypagestext' => '{{SITENAME}}에서 다른 모든 문서에서 링크되거나 틀로 포함되지 않은 문서의 목록입니다.',
[[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
'unblocklogentry' => '$1을 차단 해제했습니다.',
'block-log-flags-anononly' => 'IP만 막음',
-'block-log-flags-nocreate' => '계정 생성 막음',
+'block-log-flags-nocreate' => '계정 생성 금지됨',
'block-log-flags-noautoblock' => '자동 차단 비활성화됨',
'block-log-flags-noemail' => '이메일 막음',
'block-log-flags-nousertalk' => '자신의 토론 문서 편집 불가',
Администраторот што ја заклучи го понуди следново образложение: „''$3''“.",
'invalidtitle-knownnamespace' => 'Неважечки наслов со именски простор „$2“ и текст „$3“',
'invalidtitle-unknownnamespace' => 'Неважечки наслов со именски простор бр. $1 и текст „$2“',
+'exception-nologin' => 'Не сте најавени',
+'exception-nologin-text' => 'Оваа страница или постапка бара да сте најавени на викито.',
# Virus scanner
'virus-badscanner' => "Лоша поставка: непознат проверувач на вируси: ''$1''",
'edithelp' => 'دچیین رانما',
'edithelppage' => 'Help:دَچیین',
'helppage' => 'Help:راهنما',
-'mainpage' => 'گت ولگ',
+'mainpage' => 'گت صفحه',
'mainpage-description' => 'گت صفحه',
'policy-url' => 'Project:سیاستون',
'portal' => 'کارورون ِلوش',
L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
'invalidtitle-knownnamespace' => 'Tìtol pa bon con spassi nominal "$2" e test "$3"',
'invalidtitle-unknownnamespace' => 'Tìtol pa bon con spassi nominal sconossù nùmer $1 e test "$2"',
+'exception-nologin' => 'Nen rintrà ant ël sistema',
+'exception-nologin-text' => "Sta pagina o assion a veul ch'it sie intrà dzora a sta wiki.",
# Virus scanner
'virus-badscanner' => "Configurassion falà: antivìrus nen conossù: ''$1''",
* @author Mihai
* @author Mormegil
* @author Mpradeep
+ * @author Murma174
* @author Najami
* @author Nemo bis
* @author Niels
'tog-hidepatrolled' => 'Option in Recent changes tab of [[Special:Preferences]] (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}',
'tog-newpageshidepatrolled' => 'Toggle in [[Special:Preferences]], section "Recent changes" (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}',
'tog-extendwatchlist' => "[[Special:Preferences]], tab 'Watchlist'. Offers user to show all applicable changes in watchlist (by default only the last change to a page on the watchlist is shown). {{Gender}}",
-'tog-usenewrc' => "[[Special:Preferences]], tab 'Recent changes'. Offers user to use alternative reprsentation of [[Special:RecentChanges]] and watchlist. {{Gender}}",
+'tog-usenewrc' => "[[Special:Preferences]], tab 'Recent changes'. Offers user to use alternative representation of [[Special:RecentChanges]] and watchlist. {{Gender}}",
'tog-numberheadings' => "[[Special:Preferences]], tab 'Misc'. Offers numbered headings on content pages to user. {{Gender}}",
'tog-showtoolbar' => "[[Special:Preferences]], tab 'Edit'. Offers user to show edit toolbar in page edit screen. {{Gender}}
'invalidtitle-unknownnamespace' => 'Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.
* $1 is the namespace number
* $2 is the part of the title after the namespace (e.g. SomeName for the page User:SomeName)',
+'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
+'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
# Login and logout pages
'logouttext' => 'Log out message',
Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
'invalidtitle-knownnamespace' => 'Titlu invalid cu spațiul de nume „$2” și textul „$3”',
'invalidtitle-unknownnamespace' => 'Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”',
+'exception-nologin' => 'Neautentificat{{GENDER:||ă}}.',
+'exception-nologin-text' => 'Această pagină sau acțiune necesită ca dumneavoastră să fiți autentificat{{GENDER:||ă}} pe acest wiki.',
# Virus scanner
'virus-badscanner' => "Configurație greșită: scaner de virus necunoscut: ''$1''",
manual paginile de discuții, dacă dorești acest lucru.",
'movearticle' => 'Pagina de redenumit:',
'moveuserpage-warning' => "'''Atenție''': sunteți pe cale să redenumiți o pagină de utilizator. Vă rugăm să rețineți că singura redenumită va fi pagina, nu și utilizatorul.",
-'movenologin' => 'Nu ești autentificat',
+'movenologin' => 'Nu sunteți autentificat{{GENDER:||ă}}.',
'movenologintext' => 'Trebuie să fii un utilizator înregistrat și să te [[Special:UserLogin|autentifici]] pentru a muta o pagină.',
'movenotallowed' => 'Nu ai permisiunea să muți pagini.',
'movenotallowedfile' => 'Nu ai permisiunea de a muta fișiere.',
Установивший этот режим администратор оставил следующее разъяснение: «''$3''».",
'invalidtitle-knownnamespace' => 'Недопустимый заголовок с пространством имен «$2» и текстом «$3»',
'invalidtitle-unknownnamespace' => 'Недопустимый заголовок с неизвестным номером пространства $1 и текстом «$2»',
+'exception-nologin' => 'Вы не представились системе',
+'exception-nologin-text' => 'Для просмотра этой станицы или выполнения запрошенного действия необходимо представиться системе.',
# Virus scanner
'virus-badscanner' => "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
Administrator, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.',
'invalidtitle-knownnamespace' => 'Neveljaven naslov z imenskim prostorom »$2« in besedilom »$3«',
'invalidtitle-unknownnamespace' => 'Neveljaven naslov z neznano številko imenskega prostora $1 in besedilom »$2«',
+'exception-nologin' => 'Niste prijavljeni',
+'exception-nologin-text' => 'Izbrana stran ali dejanje zahteva, da ste na tem wikiju prijavljeni.',
# Virus scanner
'virus-badscanner' => "Slaba konfiguracija: neznani virus skener: ''$1''",
Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
'invalidtitle-knownnamespace' => 'Ogiltig titel med namnrymden "$2" och texten "$3"',
'invalidtitle-unknownnamespace' => 'Ogiltig titel med okänt namnrymdsnummer $1 och texten "$2"',
+'exception-nologin' => 'Inte inloggad',
+'exception-nologin-text' => 'Denna sida eller åtgärd kräver att du måste vara inloggad på denna wiki.',
# Virus scanner
'virus-badscanner' => "Dålig konfigurering: okänd virusskanner: ''$1''",
'nextn-title' => 'Дараазында $1 {{PLURAL:$1|бижик|бижик}}',
'shown-title' => 'Арынга $1 {{PLURAL:$1|түңнелди|түңнелди}} көргүзери',
'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) көөрү',
+'searchmenu-exists' => "'''Бо викиде \"[[:\$1]]\" деп арын бар.'''",
'searchmenu-new' => "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
'searchhelp-url' => 'Help:Допчузу',
'searchprofile-articles' => 'үндезин арыннар',
'searchprofile-everything-tooltip' => 'Шупту арыннардан дилээри (сумележиишкиннерден база)',
'searchprofile-advanced-tooltip' => 'Айыткан аттар делгемнеринден дилээри',
'search-result-size' => '$1 ({{PLURAL:$2|$2 сөс}})',
+'search-redirect' => '(шигледир $1)',
'search-section' => '(«$1» деп салбыр)',
'search-suggest' => 'Силер «$1» деп бодадыңар чадавас',
'search-interwiki-more' => '(артык)',
'recentchanges-feed-description' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
'recentchanges-label-newpage' => 'Бо өскерлиишкин чаа арынны чогааткан.',
'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
+'recentchanges-label-bot' => 'Бо эдилгени робот күүсетти.',
'recentchanges-label-unpatrolled' => 'Бо өскерлиишкин истенмейн каан',
'rclistfrom' => 'Starting from $1 чаа өскерлиишкиннерни көргүзери',
'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1',
'show' => 'көргүзери',
'minoreditletter' => 'б',
'newpageletter' => 'Ч',
-'boteditletter' => 'б',
+'boteditletter' => 'р',
'number_of_watching_users_pageview' => '[$1 хайгаараар {{PLURAL:$1|ажыглакчы}}]',
'newsectionsummary' => '/* $1 */ чаа салбыр',
'rc-enhanced-expand' => 'Тодаларны көргүзери (JavaScript херек)',
'longpages' => 'Узун арыннар',
'protectedpages' => 'Камгалаган арыннар',
'listusers' => 'Ажыглакчылар даңзызы',
+'usereditcount' => '$1 {{PLURAL:$1|эдилге}}',
'newpages' => 'Чаа арыннар',
'newpages-username' => 'Ажыглакчының ады:',
'ancientpages' => 'Эң эрги арыннар',
'watchthispage' => 'Бо арынны хайгаараары',
'unwatch' => 'Хайгааравас',
'unwatchthispage' => 'Бо арынны хайгаарабас',
+'watchlist-details' => 'Not counting talk pages, хайгаарал даңзыңарда {{PLURAL:$1|$1 арын}} бар.',
'wlshowlast' => 'Сөөлү $1 шак болгаш $2 хүн иштинде $3 көргүзери',
'watchlist-options' => 'Хайгаарал даңзының эдиглери',
'enotif_newpagetext' => 'Бо чаа арын-дыр.',
'enotif_impersonal_salutation' => '{{grammar:genitive|{{SITENAME}}}} ажыглакчызы',
+'changed' => 'өскертти',
'enotif_anon_editor' => 'ат эвес ажыглакчы $1',
# Delete
'tog-hidepatrolled' => 'Приховувати патрульовані редагування у списку нових редагувань',
'tog-newpageshidepatrolled' => 'Приховувати патрульовані сторінки у списку нових сторінок',
'tog-extendwatchlist' => 'Розширений список спостереження, що містить усі зміни, а не лише останню',
-'tog-usenewrc' => 'Ð\92икоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и покÑ\80аÑ\89ений Ñ\81пиÑ\81ок оÑ\81Ñ\82аннÑ\96Ñ\85 змÑ\96н (JavaScript)',
+'tog-usenewrc' => 'Ð\9dа Ñ\81Ñ\82оÑ\80Ñ\96нкаÑ\85 оÑ\81Ñ\82аннÑ\96Ñ\85 змÑ\96н Ñ\82а в Ñ\81пиÑ\81кÑ\83 Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f гÑ\80Ñ\83пÑ\83ваÑ\82и Ñ\80едагÑ\83ваннÑ\8f (поÑ\82Ñ\80Ñ\96бен JavaScript)',
'tog-numberheadings' => 'Автоматично нумерувати заголовки',
'tog-showtoolbar' => 'Показувати панель інструментів (JavaScript)',
'tog-editondblclick' => 'Редагувати сторінки при подвійному клацанні мишкою (JavaScript)',
'filereadonlyerror' => "Неможливо змінити файл «$1» тому, що файловий архів «$2» перебуває в режимі «лише для читання».
Адміністратор, що заблокував його, залишив таке пояснення: «''$3''».",
'invalidtitle-knownnamespace' => 'Неприйнятна назва у просторі імен «$2» і текстом «$3»',
+'exception-nologin' => 'Не виконано вхід',
+'exception-nologin-text' => 'Ця сторінка чи дія потребує, щоб Ви ввійшли до цієї Вікі.',
# Virus scanner
'virus-badscanner' => "Помилка налаштування: невідомий сканер вірусів: ''$1''",
'invalidemailaddress' => 'Уведена адреса не може бути прийнята, бо вона не відповідає формату адрес електронної пошти.
Будь ласка, введіть коректну адресу або залиште поле порожнім.',
'cannotchangeemail' => 'У цій вікі не можна міняти свою адресу ел. пошти.',
+'emaildisabled' => 'Цей сайт не може надіслати електронні листи.',
'accountcreated' => 'Обліковий запис створено.',
'accountcreatedtext' => 'Обліковий запис для $1 створено.',
'createaccount-title' => 'Створення облікового запису для {{SITENAME}}',
'edit-no-change' => 'Ваше редагування відхилене, оскільки в тексті не було зроблено змін.',
'edit-already-exists' => 'Неможливо створити нову сторінку.
Вона вже існує.',
+'defaultmessagetext' => 'Текст «за замовчування»',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Увага: Ця сторінка містить дуже багато викликів ресурсомістких функцій.
'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' => 'Виявлено незакритий тег (такий, як <pre>)',
# "Undo" feature
'backend-fail-internal' => 'Сталася невідома помилка у сховищі рушія "$1".',
'backend-fail-contenttype' => 'Не вдалося визначити тип вмісту файла, щоб зберегти його в "$1".',
'backend-fail-batchsize' => 'Серверна частина отримала блок із $1 {{PLURAL:$1|файлової операції|файлових операцій}}; обмеження складає $2 {{PLURAL:$2|файлову операцію|файлові операції|файлових операцій}}.',
+'backend-fail-usable' => 'Файл $1 не може бути записано через недостатні повноваження чи відсутність каталогів (контейнерів).',
# File journal errors
'filejournal-fail-dbconnect' => 'Не вдалося підключитися до бази даних журналу для сховища «$1».',
Додаткову інформацію можна знайти на [$2 сторінці опису файлу].',
'sharedupload-desc-here' => 'Цей файл з $1 і може використовуватися в інших проектах.
Далі наведена інформація з його [$2 сторінки опису].',
+'sharedupload-desc-edit' => 'Цей файл з $1 і може використовуватися в інших проектах.
+Його опис можна відредагувати [$2 на відповідній сторінці тут].',
+'sharedupload-desc-create' => 'Цей файл з $1 і може використовуватися в інших проектах.
+Його опис можна зробити [$2 на відповідній сторінці тут].',
'filepage-nofile' => 'Не існує файлу з такою назвою.',
'filepage-nofile-link' => 'Не існує файлу з такою назвою, але ви можете [$1 завантажити його].',
'uploadnewversion-linktext' => 'Завантажити нову версію цього файлу',
'allpages-hide-redirects' => 'Сховати перенаправлення',
# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Ви переглядаєте кешовану версію сторінки, яка могла бути оновлена $1 тому.',
'cachedspecial-viewing-cached-ts' => 'Ви переглядаєте кешовану версію сторінки, яка могла втратити актуальність',
'cachedspecial-refresh-now' => 'Показати останні',
'duration-centuries' => '$1 {{PLURAL:$1|століття|століття|століть}}',
'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'Не вдалося одержати блокування на сервері $1.',
);
'tog-hidepatrolled' => 'Ẩn sửa đổi đã tuần tra trong trang thay đổi gần đây',
'tog-newpageshidepatrolled' => 'Ẩn trang đã tuần tra trong danh sách các trang mới',
'tog-extendwatchlist' => 'Mở rộng danh sách theo dõi để hiển thị tất cả các thay đổi, chứ không chỉ các thay đổi gần đây',
-'tog-usenewrc' => 'Sử dụng Thay đổi gần đây nâng cao (cần JavaScript)',
+'tog-usenewrc' => 'Thu gọn các thay đổi theo trang trong thay đổi gần đây và danh sách theo dõi (cần JavaScript)',
'tog-numberheadings' => 'Tự động đánh số các đề mục',
'tog-showtoolbar' => 'Hiển thị thanh định dạng (JavaScript)',
'tog-editondblclick' => 'Nhấn đúp để sửa đổi trang (JavaScript)',
Bảo quản viên khóa nó đưa lý do là: “$3”.',
'invalidtitle-knownnamespace' => 'Tựa trang không hợp lệ có không gian tên “$2” và văn bản “$3”',
'invalidtitle-unknownnamespace' => 'Tựa trang không hợp lệ có không gian tên số $1 không rõ và văn bản “$2”',
+'exception-nologin' => 'Chưa đăng nhập',
+'exception-nologin-text' => 'Bạn cần phải đăng nhập để truy cập trang hoặc thực hiện tác vụ này tại wiki này.',
# Virus scanner
'virus-badscanner' => "Cấu hình sau: không nhận ra bộ quét virus: ''$1''",
'uploadnologintext' => 'I vs fåt esse [[Special:UserLogin|elodjî]] por vos pleur eberweter des fitchîs.',
'upload_directory_read_only' => "Li sierveu waibe èn pout nén scrire sol ridant d' eberwetaedje ($1).",
'uploaderror' => "Aroke d' eberwetaedje",
-'uploadtext' => "Eployîz les boesses d' intrêye chal pa dzo po-z eberweter des noveas fitchîs.
-Po håyner ou cweri des fitchîs k' ont ddja stî rçuvous, alez sol [[Special:FileList|djivêye des fitchîs ddja eberweté]].
-Les (r)eberwetaedjes sont eto metos sol [[Special:Log/uplozf|djournå des eberwetaedjes]], les disfaçaedjes sol [[Special:Log/upload|ci des disfaçaedjes]].
+'uploadtext' => "Eployîz les boesses d' intrêye chal pa dzo po-z eberweter des fitchîs.
+Po håyner ou cweri des fitchîs k' ont ddja stî rçuvous, alez sol [[Special:FileList|djivêye des fitchîs ddja eberwetés]].
+Les (r)eberwetaedjes sont eto metos sol [[Special:Log/upload|djournå des eberwetaedjes]], les disfaçaedjes sol [[Special:Log/delete|ci des disfaçaedjes]].
Po mete on fitchî dins ene pådje, eployîz on loyén del fôme:
* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fitchî.jpg]]</nowiki></tt>''' po-z eployî l' modêye e grandeu oridjinnåle do fitchî
# Attribution
'anonymous' => '{{PLURAL:$1|Uzeu anonime|Uzeus anonimes}} di {{SITENAME}}',
'siteuser' => "$1, {{GENDER:$2|uzeu d'|uzeuse di}} {{SITENAME}}",
-'anonuser' => '$1, {{GENDER:$2|uzeu|uzeuse}} anonime di {{SITENAME}}',
+'anonuser' => '$1, uzeu anonime di {{SITENAME}}',
'lastmodifiedatby' => 'Cisse pådje a stî candjeye pol dierin côp li $2, $1 pa $3.',
'othercontribs' => "Båzé so l' ovraedje da $1.",
'others' => 'co ds ôtes',
# Special:UploadStash
'uploadstash' => 'אַרויפֿלאָד רעזערוו',
+'uploadstash-clear' => 'אויסמעקן טעקעס פון זאפאס',
+'uploadstash-nofiles' => 'איר האט נישט קיין טעקעס אין זאפאס.',
'uploadstash-refresh' => 'דערפֿרישן די רשימה פון טעקעס',
# img_auth script messages
'javascripttest-disabled' => 'די פֿונקציע איז אומאַקטיווירט אין דער דאזיקער וויקי.',
'javascripttest-title' => 'דורכפירנדיק $1 בדיקות',
'javascripttest-pagetext-skins' => 'קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:',
+'javascripttest-qunit-intro' => 'זעט [$1 דאקומענטאציע פאר טעסטן] בײַ mediawiki.org.',
+'javascripttest-qunit-heading' => 'מעדיעוויקי JavaScript QUnit קאנטראל־פראגראם',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'אייער באניצער בלאט',
'youhavenewmessages' => '你有$1($2)。',
'newmessageslink' => '新信息',
'newmessagesdifflink' => '最后更改',
-'youhavenewmessagesmulti' => '您在$1有一条新信息',
+'youhavenewmessagesmulti' => '你在$1有新信息',
'editsection' => '编辑',
'editold' => '编辑',
'viewsourceold' => '查看源代码',
'anoneditwarning' => "'''警告:'''您没有登录。
您的IP地址将记录在此页的编辑历史中。",
'anonpreviewwarning' => "''您没有登录。保存页面将会把您的IP地址记录在此页的编辑历史中。''",
-'missingsummary' => "'''提示:''' 您没有提供一个编辑摘要。如果您再次单击“{{int:savearticle}}”,您的编辑将不带编辑摘要保存。",
+'missingsummary' => "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
'missingcommenttext' => '请在下面输入评论。',
'missingcommentheader' => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击“{{int:savearticle}}”,您的编辑将不带标题保存。",
'summary-preview' => '摘要预览:',
锁定数据库的管理员有如下解释:$1",
'protectedpagewarning' => "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
-'semiprotectedpagewarning' => "'''注意:''' 本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
-'cascadeprotectedwarning' => "'''è¦å\91\8aï¼\9a'''æ\9c¬é¡µé\9d¢å·²è¢«ä¿\9dæ\8a¤ï¼\8cå\8fªæ\9c\89æ\8b¥æ\9c\89管ç\90\86å\91\98æ\9d\83é\99\90ç\9a\84ç\94¨æ\88·å\8f¯ä»¥ç¼\96è¾\91ï¼\8cå\9b 为å\85¶å\8c\85å\90«äº\8eä¸\8bå\88\97受连锁保护的{{PLURAL:$1|页面}}:",
+'semiprotectedpagewarning' => "'''注意:'''本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
+'cascadeprotectedwarning' => "'''è¦å\91\8aï¼\9a'''æ\9c¬é¡µé\9d¢å·²è¢«ä¿\9dæ\8a¤ï¼\8cå\8fªæ\9c\89æ\8b¥æ\9c\89管ç\90\86å\91\98æ\9d\83é\99\90ç\9a\84ç\94¨æ\88·å\8f¯ä»¥ç¼\96è¾\91ï¼\8cå\9b 为å\85¶å\8c\85å\90«äº\8e以ä¸\8b受连锁保护的{{PLURAL:$1|页面}}:",
'titleprotectedwarning' => "'''警告:本页面已被保护,创建本页面需要[[Special:ListGroupRights|特定权限]]。'''下面提供最后的日志条目以供参考:",
'templatesused' => '该页面使用的{{PLURAL:$1|模板}}:',
'templatesusedpreview' => '本预览使用的{{PLURAL:$1|模板}}:',
'template-protected' => '(保护)',
'template-semiprotected' => '(半保护)',
'hiddencategories' => '本页面属于$1个隐藏分类:',
-'edittools' => '<!-- 这里的文字将显示在编辑和上传表单下方。 -->',
+'edittools' => '<!-- 这里的文字将显示在编辑和上传表格下面。 -->',
'nocreatetitle' => '创建页面受限',
'nocreatetext' => '{{SITENAME}}限制了创建新页面的功能。你可以返回并编辑已有的页面,或者[[Special:UserLogin|登录或创建新账户]]。',
'nocreate-loggedin' => '你没有权限创建新页面。',
'sectioneditnotsupported-title' => '段落编辑不支持',
'sectioneditnotsupported-text' => '本页面不支持段落编辑。',
'permissionserrors' => '权限错误',
-'permissionserrorstext' => '根据下列{{PLURAL:$1|原因}},你没有权限进行本操作:',
+'permissionserrorstext' => '因为以下{{PLURAL:$1|原因}},你没有权限进行该操作:',
'permissionserrorstext-withaction' => '因为以下{{PLURAL:$1|原因}},你没有权限$2:',
'recreate-moveddeleted-warn' => "'''警告:你正在重新创建曾经被删除的页面。'''
尝试[[Special:Search|搜索本站]]获得相关的新建页面。',
# Revision deletion
-'rev-deleted-comment' => '(编辑摘要已删除)',
-'rev-deleted-user' => '(用户名已删除)',
-'rev-deleted-event' => '(日志条目已删除)',
-'rev-deleted-user-contribs' => '[用户名或IP地址已移除 - 从贡献中隐藏编辑]',
+'rev-deleted-comment' => '(编辑摘要被删除)',
+'rev-deleted-user' => '(用户名被删除)',
+'rev-deleted-event' => '(日志条目被删除)',
+'rev-deleted-user-contribs' => '[用户名或IP地址被删除 - 编辑在贡献中隐藏]',
'rev-deleted-text-permission' => "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 删除日志]。",
'rev-deleted-text-unhide' => "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。如果你想继续操作,你仍然可以[$1 查看本版本]。",
'rev-suppressed-text-unhide' => "该页面修订已经被'''监督隐藏'''。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。如果您想继续的话,您可以仍然[$1 去查看这次修订]。",
-'rev-deleted-text-view' => "该页面修订已经被'''删除'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到详细的信息。",
+'rev-deleted-text-view' => "本页面版本已被'''删除'''。你可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
'rev-suppressed-text-view' => "该页面修订已经被'''监督隐藏'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。",
'rev-deleted-no-diff' => "因为其中一次修订已被'''删除''',您不可以查看这个差异。
在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。",
'search-redirect' => '(重定向自“$1”)',
'search-section' => '(“$1”段落)',
'search-suggest' => '您是不是要找:$1',
-'search-interwiki-caption' => 'å§\90妹项目',
+'search-interwiki-caption' => 'å§\8a妹项目',
'search-interwiki-default' => '$1项结果:',
'search-interwiki-more' => '(更多)',
'search-mwsuggest-enabled' => '有建议',
'gender-male' => '男',
'gender-female' => '女',
'prefs-help-gender' => '选填项目。使软件使用正确的性别称呼。该信息将会公开。',
-'email' => '电子邮箱',
+'email' => '电子邮件',
'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
'prefs-help-email' => '电子邮件地址是选填项目。但是在你忘记密码需要重置密码时需要电子邮件地址。',
'prefs-help-email-others' => '你亦可以选择让其他用户通过你的用户页或讨论页上的链接用电子邮件联系你。其他用户联系你时你的电子邮件地址不会显示。',
'prefs-help-email-required' => '电子邮件地址是必填项目。',
-'prefs-info' => '基本资料',
+'prefs-info' => '基本信息',
'prefs-i18n' => '界面语言',
'prefs-signature' => '签名',
'prefs-dateformat' => '日期格式',
'recentchanges-label-newpage' => '这次编辑建立了一个新页面',
'recentchanges-label-minor' => '这是一个小编辑',
'recentchanges-label-bot' => '这次编辑是由机器人进行',
-'recentchanges-label-unpatrolled' => 'è¿\99次ç¼\96è¾\91å°\9aæ\9cªå·¡æ\9f¥è¿\87',
+'recentchanges-label-unpatrolled' => '该ç¼\96è¾\91å°\9aæ\9cªå·¡æ\9f¥',
'rcnote' => "下面是最后'''$2'''天的最后'''$1'''个更改,截至$4 $5。",
'rcnotefrom' => "下面是自'''$2'''起的更改(最多显示'''$1'''个)。",
'rclistfrom' => '显示自$1起的新更改',
** 作者申请
** 侵犯著作权
** 破坏行为',
-'delete-edit-reasonlist' => '编辑删除理由',
+'delete-edit-reasonlist' => '编辑删除原因',
'delete-toobig' => '这个页面有一个十分大量的编辑历史,超过$1次修订。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。',
'delete-warning-toobig' => '这个页面有一个十分大量的编辑历史,超过$1次修订。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。',
** 过多垃圾信息
** 负面的编辑战
** 高流量页面',
-'protect-edit-reasonlist' => '编辑保护理由',
+'protect-edit-reasonlist' => '编辑保护原因',
'protect-expiry-options' => '1小时:1 hour,1天:1 day,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,无限期:infinite',
'restriction-type' => '权限:',
'restriction-level' => '限制级别:',
'whatlinkshere' => '链入页面',
'whatlinkshere-title' => '链接至“$1”的页面',
'whatlinkshere-page' => '页面:',
-'linkshere' => "ä¸\8bå\88\97页面链接至'''[[:$1]]''':",
+'linkshere' => "以ä¸\8b页面链接至'''[[:$1]]''':",
'nolinkshere' => "没有页面链接至'''[[:$1]]'''。",
'nolinkshere-ns' => "在所选的名字空间内没有页面链接到'''[[:$1]]'''。",
'isredirect' => '重定向页',
** 恐吓行为/骚扰
** 滥用多个账户
** 不能接受的用户名',
-'ipb-hardblock' => 'é\98²æ¢å·²ç\99»å½\95ç\9a\84ç\94¨æ\88·ä»\8e该IP地址编辑',
+'ipb-hardblock' => 'é\98»æ¢ç\99»å½\95ç\94¨æ\88·ä½¿ç\94¨该IP地址编辑',
'ipbcreateaccount' => '阻止创建新账号',
'ipbemailban' => '阻止用户发送电邮',
'ipbenableautoblock' => '自动封禁该用户最后使用的IP地址,以及他们随后试图用于编辑的所有IP地址',
'ipbotheroption' => '其他',
'ipbotherreason' => '其他/附加原因:',
'ipbhidename' => '在编辑及列表中隐藏用户名',
-'ipbwatchuser' => 'ç\9b\91è§\86è¿\99ä½\8dç\94¨æ\88·ç\9a\84ç\94¨æ\88·é¡µé\9d¢ä»¥å\8f\8aå\85¶å¯¹è¯\9d页面',
-'ipb-disableusertalk' => '禁止被封禁用户编辑自己的对话页',
+'ipbwatchuser' => 'ç\9b\91è§\86该ç\94¨æ\88·ç\9a\84ç\94¨æ\88·é¡µé\9d¢å\92\8c讨论页面',
+'ipb-disableusertalk' => '阻止用户在封禁期间编辑自己的讨论页面',
'ipb-change-block' => '使用这些设置重新封禁用户',
'ipb-confirm' => '确认封禁',
'badipaddress' => '无效IP地址',
参见[[Special:BlockList|封禁列表]]以复核封禁。',
'ipb-blockingself' => '您将要封禁自己!确实要这样做吗?',
'ipb-confirmhideuser' => '您即将在封禁用户的同时启用“隐藏账户”功能。这将从所有列表和日志记录中隐藏这个用户名。您确认这样做吗?',
-'ipb-edit-dropdown' => '编辑封禁理由',
+'ipb-edit-dropdown' => '编辑封禁原因',
'ipb-unblock-addr' => '解封$1',
'ipb-unblock' => '解封用户名或IP地址',
'ipb-blocklist' => '查看现有封禁',
'unblocked-id' => '封禁$1已被解除',
'blocklist' => '被封禁用户',
'ipblocklist' => '被封禁用户',
-'ipblocklist-legend' => '查找已封禁用户',
+'ipblocklist-legend' => '查找被封禁用户',
'blocklist-userblocks' => '隐藏帐户封禁',
'blocklist-tempblocks' => '隐藏临时封禁',
'blocklist-addressblocks' => '隐藏单个IP封禁',
'autoblocker' => '由于您与“[[User:$1|$1]]”共享一个IP地址而被自动封禁。
$1被封禁的理由是:“$2”',
'blocklogpage' => '封禁日志',
-'blocklog-showlog' => '此用户曾被封禁。以下列出封禁日志以供参考:',
+'blocklog-showlog' => '该用户曾被封禁。下面提供封禁日志以供参考:',
'blocklog-showsuppresslog' => '此用户曾被封禁并隐藏。以下列出隐藏日志以供参考:',
'blocklogentry' => '封禁[[$1]],终止时间为$2$3',
'reblock-logentry' => '更改[[$1]]的封禁终止时间 $2 $3',
在这些情况下,您在必要时必须手工移动或合并页面。",
'movearticle' => '移动页面:',
-'moveuserpage-warning' => "'''警告:'''您将会移动一个用户页面。请留意该页面在移动后该用户的名字是''不会''变更的。",
+'moveuserpage-warning' => "'''警告:'''你将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
'movenologin' => '未登录',
'movenologintext' => '您必须是一名登记用户并且[[Special:UserLogin|登录]]
后才可移动一个页面。',
-'movenotallowed' => '您并没有权限去移动页面。',
-'movenotallowedfile' => '您并没有权限去移动文件。',
-'cant-move-user-page' => '您并没有许可权去移动用户页面(它的子页面除外)。',
-'cant-move-to-user-page' => '您并没有许可权去移动到用户页面(它的子页面除外)。',
+'movenotallowed' => '你没有权限移动页面。',
+'movenotallowedfile' => '你没有权限移动文件。',
+'cant-move-user-page' => '你没有权限移动用户页面(子页面除外)。',
+'cant-move-to-user-page' => '你没有权限移动页面至用户页面(用户子页面除外)。',
'newtitle' => '新标题:',
-'move-watch' => '监视来源以及目标页',
+'move-watch' => '监视来源页面和目标页面',
'movepagebtn' => '移动页面',
'pagemovedsub' => '移动成功',
'movepage-moved' => "'''“$1”已移动到“$2”'''",
'movepage-page-unmoved' => '页面$1无法移动到$2。',
'movepage-max-pages' => '所移动$1个页面的数量已达最大限额,无法同时自动移动更多页面。',
'movelogpage' => '移动日志',
-'movelogpagetext' => '以ä¸\8bæ\98¯æ\89\80æ\9c\89移å\8a¨ç\9a\84页é\9d¢å\88\97表ï¼\9a',
-'movesubpage' => '{{PLURAL:$1|子页面|子页面}}',
+'movelogpagetext' => 'ä¸\8bé\9d¢æ\98¯æ\89\80æ\9c\89页é\9d¢ç§»å\8a¨ç\9a\84å\88\97表ã\80\82',
+'movesubpage' => '{{PLURAL:$1|子页面}}',
'movesubpagetext' => '这个页面有$1个子页面,列示如下。',
'movenosubpage' => '这个页面没有子页面。',
'movereason' => '原因:',
'imageinvalidfilename' => '目标文件名称无效',
'fix-double-redirects' => '更新所有指向原始标题的重定向',
'move-leave-redirect' => '保留重定向',
-'protectedpagemovewarning' => "'''警告:'''这个页面已经被保护,只有拥有管理员权限的用户才可以移动它。
-最近的日志在下面提供以便参考:",
-'semiprotectedpagemovewarning' => "'''注意:'''这个页面已经被保护,只有已经注册的用户才可以移动它。
-最近的日志在下面提供以便参考:",
+'protectedpagemovewarning' => "'''警告:'''本页面已被保护,只有拥有管理员权限的用户可以移动。下面提供最后的日志条目以供参考:",
+'semiprotectedpagemovewarning' => "'''注意:'''本页面已被保护,只有注册用户可以移动。下面提供最后的日志条目以供参考:",
'move-over-sharedrepo' => '== 文件已存在 ==
[[:$1]]已于共享资源存在,将文件移动到此标题会覆盖共享资源中的文件。',
'file-exists-sharedrepo' => '同名文件已于共享资源存在。
'''注意:'''由于性能原因,从此表单导出页面的全部历史已被禁用。",
'exportlistauthors' => '为每个页面包含贡献者的完整列表',
'export-submit' => '导出',
-'export-addcattext' => '由分类中添加页面:',
+'export-addcattext' => '从分类添加页面:',
'export-addcat' => '添加',
-'export-addnstext' => '由名字空间中添加页面:',
+'export-addnstext' => '从名字空间添加页面:',
'export-addns' => '添加',
'export-download' => '另存为文件',
'export-templates' => '包含模板',
# Import log
'importlogpage' => '导入日志',
'importlogpagetext' => '由管理员从其他wiki导入的带有编辑历史的页面。',
-'import-logentry-upload' => '通过文件上传导入的[[$1]]',
+'import-logentry-upload' => '以文件上传导入[[$1]]',
'import-logentry-upload-detail' => '$1个版本',
'import-logentry-interwiki' => '跨站导入 $1',
'import-logentry-interwiki-detail' => '来自$2的$1个修订',
'exif-model' => '相机型号',
'exif-software' => '使用软件',
'exif-artist' => '作者',
-'exif-copyright' => '著作权所有者',
+'exif-copyright' => '著作权所有人',
'exif-exifversion' => 'Exif版本',
'exif-flashpixversion' => '支持的Flashpix版本',
'exif-colorspace' => '色彩空间',
'api-error-overwrite' => '不允许覆盖现有文件。',
'api-error-stashfailed' => '内部错误:服务器保存临时文件失败。',
'api-error-timeout' => '服务器没有在预期内响应。',
-'api-error-unclassified' => 'å\8f\91ç\94\9fæ\9cªç\9f¥é\94\99误',
+'api-error-unclassified' => 'å\87ºç\8e°æ\9cªç\9f¥é\94\99误ã\80\82',
'api-error-unknown-code' => '未知错误:$1',
'api-error-unknown-error' => '内部错误:尝试上传文件时出错。',
'api-error-unknown-warning' => '未知的警告:$1',
'api-error-verification-error' => '此文件可能已损坏,或有错误的扩展名。',
# Durations
-'duration-seconds' => '$1{{PLURAL:$1|秒|秒}}',
-'duration-minutes' => '$1{{PLURAL:$1|分钟|分钟}}',
-'duration-hours' => '$1{{PLURAL:$1|小时|小时}}',
-'duration-days' => '$1{{PLURAL:$1|天|天}}',
-'duration-weeks' => '$1{{PLURAL:$1|星期|星期}}',
-'duration-years' => '$1{{PLURAL:$1|年|年}}',
-'duration-decades' => '$1{{PLURAL:$1|0年|0年}}',
-'duration-centuries' => '$1{{PLURAL:$1|00年|00年}}',
-'duration-millennia' => '$1{{PLURAL:$1|千年|千年}}',
+'duration-seconds' => '$1秒',
+'duration-minutes' => '$1分',
+'duration-hours' => '$1小时',
+'duration-days' => '$1天',
+'duration-weeks' => '$1周',
+'duration-years' => '$1年',
+'duration-decades' => '$10年',
+'duration-centuries' => '$1个世纪',
+'duration-millennia' => '$1千年',
);
{
require( MWInit::interpretedPath( 'AdminSettings.php' ) );
}
+
+if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
+ if ( $wgLocalisationCacheConf['storeClass'] === false && ( $wgLocalisationCacheConf['store'] == 'db' || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) ) )
+ $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+}
$maintenance->finalSetup();
// Some last includes
require_once( MWInit::compiledPath( 'includes/Setup.php' ) );
'filereadonlyerror',
'invalidtitle-knownnamespace',
'invalidtitle-unknownnamespace',
+ 'exception-nologin',
+ 'exception-nologin-text',
),
'virus' => array(
'virus-badscanner',
wfWaitForSlaves();
$t = microtime( true );
$offset = $job->id;
+ $this->runJobsLog( $job->toString() . " STARTING" );
$status = $job->run();
$t = microtime( true ) - $t;
$timeMs = intval( $t * 1000 );
!! end
+###
+### 2-quote opening sequence tests
+###
+!! test
+Italics and bold: 2-quote opening sequence: (2,2)
+!! input
+''foo''
+!! result
+<p><i>foo</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 2-quote opening sequence: (2,3)
+!! input
+''foo'''
+!! result
+<p><i>foo'</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 2-quote opening sequence: (2,4)
+!! input
+''foo''''
+!! result
+<p><i>foo''</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 2-quote opening sequence: (2,5)
+!! input
+''foo'''''
+!! result
+<p><i>foo</i>
+</p>
+!!end
+
+
+###
+### 3-quote opening sequence tests
+###
+
+!! test
+Italics and bold: 3-quote opening sequence: (3,2)
+!! input
+'''foo''
+!! result
+<p>'<i>foo</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 3-quote opening sequence: (3,3)
+!! input
+'''foo'''
+!! result
+<p><b>foo</b>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 3-quote opening sequence: (3,4)
+!! input
+'''foo''''
+!! result
+<p><b>foo'</b>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 3-quote opening sequence: (3,5)
+!! input
+'''foo'''''
+!! result
+<p><b>foo</b>
+</p>
+!!end
+
+
+###
+### 4-quote opening sequence tests
+###
+
+!! test
+Italics and bold: 4-quote opening sequence: (4,2)
+!! input
+''''foo''
+!! result
+<p>''<i>foo</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 4-quote opening sequence: (4,3)
+!! input
+''''foo'''
+!! result
+<p>'<b>foo</b>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 4-quote opening sequence: (4,4)
+!! input
+''''foo''''
+!! result
+<p>'<b>foo'</b>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 4-quote opening sequence: (4,5)
+!! input
+''''foo'''''
+!! result
+<p>'<b>foo</b>
+</p>
+!!end
+
+
+###
+### 5-quote opening sequence tests
+###
+
+!! test
+Italics and bold: 5-quote opening sequence: (5,2)
+!! input
+'''''foo''
+!! result
+<p><b><i>foo</i></b>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 5-quote opening sequence: (5,3)
+!! input
+'''''foo'''
+!! result
+<p><i><b>foo</b></i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 5-quote opening sequence: (5,4)
+!! input
+'''''foo''''
+!! result
+<p><i><b>foo'</b></i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: 5-quote opening sequence: (5,5)
+!! input
+'''''foo'''''
+!! result
+<p><i><b>foo</b></i>
+</p>
+!!end
+
+###
+### multiple quote sequences in a line
+###
+!! test
+Italics and bold: multiple quote sequences: (2,4,2)
+!! input
+''foo''''bar''
+!! result
+<p><i>foo'<b>bar</b></i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: multiple quote sequences: (2,4,3)
+!! input
+''foo''''bar'''
+!! result
+<p><i>foo'<b>bar</b></i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: multiple quote sequences: (2,4,4)
+!! input
+''foo''''bar''''
+!! result
+<p><i>foo'<b>bar'</b></i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: multiple quote sequences: (3,4,2)
+!! input
+'''foo''''bar''
+!! result
+<p><b>foo'</b>bar
+</p>
+!!end
+
+
+!! test
+Italics and bold: multiple quote sequences: (3,4,3)
+!! input
+'''foo''''bar'''
+!! result
+<p><b>foo'</b>bar
+</p>
+!!end
+
+###
+### other quote tests
+###
+!! test
+Italics and bold: other quote tests: (2,3,5)
+!! input
+''this is about '''foo's family'''''
+!! result
+<p><i>this is about <b>foo's family</b></i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: other quote tests: (2,(3,3),2)
+!! input
+''this is about '''foo's''' family''
+!! result
+<p><i>this is about <b>foo's</b> family</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: other quote tests: (3,2,3,2)
+!! input
+'''this is about ''foo'''s family''
+!! result
+<p><b>this is about <i>foo</i></b><i>s family</i>
+</p>
+!!end
+
+
+!! test
+Italics and bold: other quote tests: (3,2,3,3)
+!! input
+'''this is about ''foo'''s family'''
+!! result
+<p>'<i>this is about </i>foo<b>s family</b>
+</p>
+!!end
+
+
+
+!! test
+Italics and bold: other quote tests: (3,(2,2),3)
+!! input
+'''this is about ''foo's'' family'''
+!! result
+<p><b>this is about <i>foo's</i> family</b>
+</p>
+!!end
+
###
### <nowiki> test cases
###
</p>
!! end
-###
-### External links
-###
!! test
-External links: non-bracketed
+Definition Lists: No nesting: Multiple dd's
!! input
-Non-bracketed: http://example.com
+;x
+:a
+:b
!! result
-<p>Non-bracketed: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
-</p>
+<dl><dt>x
+</dt><dd>a
+</dd><dd>b
+</dd></dl>
+
!! end
!! test
-External links: numbered
+Definition Lists: Indentation: Regular
!! input
-Numbered: [http://example.com]
-Numbered: [http://example.net]
-Numbered: [http://example.com]
+:i1
+::i2
+:::i3
!! result
-<p>Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>
-Numbered: <a rel="nofollow" class="external autonumber" href="http://example.net">[2]</a>
-Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[3]</a>
-</p>
-!!end
+<dl><dd>i1
+<dl><dd>i2
+<dl><dd>i3
+</dd></dl>
+</dd></dl>
+</dd></dl>
-!! test
-External links: specified text
-!! input
-Specified text: [http://example.com link]
-!! result
-<p>Specified text: <a rel="nofollow" class="external text" href="http://example.com">link</a>
-</p>
-!!end
+!! end
!! test
-External links: trail
+Definition Lists: Indentation: Missing 1st level
!! input
-Linktrails should not work for external links: [http://example.com link]s
+::i2
+:::i3
!! result
-<p>Linktrails should not work for external links: <a rel="nofollow" class="external text" href="http://example.com">link</a>s
-</p>
+<dl><dd><dl><dd>i2
+<dl><dd>i3
+</dd></dl>
+</dd></dl>
+</dd></dl>
+
!! end
!! test
-External links: dollar sign in URL
+Definition Lists: Indentation: Multi-level indent
!! input
-http://example.com/1$2345
+:::i3
!! result
-<p><a rel="nofollow" class="external free" href="http://example.com/1$2345">http://example.com/1$2345</a>
-</p>
-!! end
-
+<dl><dd><dl><dd><dl><dd>i3
+</dd></dl>
+</dd></dl>
+</dd></dl>
+
+!! end
+
+## The PHP parser treats : items (dd) without a corresponding ; item (dt)
+## as an empty dt item. It also ignores all but the last ";" when followed
+## by ":" later on. So, ";" are not ignored in ";;;t3" but are ignored in
+## ";;;t3 :d1". So, PHP parser behavior is a little inconsistent wrt multiple
+## ";"s.
+##
+## Ex: ";;t2 ::d2" is transformed into:
+##
+## <dl>
+## <dt>t2 </dt>
+## <dd>
+## <dl>
+## <dt></dt>
+## <dd>d2</dd>
+## </dl>
+## </dd>
+## </dl>
+##
+## But, Parsoid treats "; :" as a tight atomic unit and excess ":" as plain text
+## So, the same wikitext above (;;t2 ::d2) is transformed into:
+##
+## <dl>
+## <dt>
+## <dl>
+## <dt>t2 </dt>
+## <dd>:d2</dd>
+## </dl>
+## </dt>
+## </dl>
+##
+## All Parsoid only definition list tests have this difference.
+##
+## See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=6569
+## and http://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html
+
!! test
-External links: dollar sign in URL (named)
+Definition Lists: Nesting: Multi-level (Parsoid only)
+!! options
+disabled
!! input
-[http://example.com/1$2345]
+;t1 :d1
+;;t2 ::d2
+;;;t3 :::d3
!! result
-<p><a rel="nofollow" class="external autonumber" href="http://example.com/1$2345">[1]</a>
-</p>
-!!end
+<dl>
+ <dt>t1 </dt>
+ <dd>d1</dd>
+ <dt>
+ <dl>
+ <dt>t2 </dt>
+ <dd>:d2</dd>
+ <dt>
+ <dl>
+ <dt>t3 </dt>
+ <dd>::d3</dd>
+ </dl>
+ </dt>
+ </dl>
+ </dt>
+</dl>
+
+
+!! end
+
!! test
-External links: open square bracket forbidden in URL (bug 4377)
+Definition Lists: Nesting: Test 2 (Parsoid only)
+!! options
+disabled
!! input
-http://example.com/1[2345
+;t1
+::d2
!! result
-<p><a rel="nofollow" class="external free" href="http://example.com/1">http://example.com/1</a>[2345
-</p>
+<dl>
+ <dt>t1</dt>
+ <dd>
+ <dl>
+ <dd>d2</dd>
+ </dl>
+ </dd>
+</dl>
+
!! end
+
!! test
-External links: open square bracket forbidden in URL (named) (bug 4377)
+Definition Lists: Nesting: Test 3 (Parsoid only)
+!! options
+disabled
!! input
-[http://example.com/1[2345]
+:;t1
+::::d2
!! result
-<p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
-</p>
-!!end
+<dl>
+ <dd>
+ <dl>
+ <dt>t1</dt>
+ <dd>
+ <dl>
+ <dd>
+ <dl>
+ <dd>d2</dd>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+ </dl>
+ </dd>
+</dl>
-!! test
-External links: nowiki in URL link text (bug 6230)
-!!input
-[http://example.com/ <nowiki>''example site''</nowiki>]
-!! result
-<p><a rel="nofollow" class="external text" href="http://example.com/">''example site''</a>
-</p>
!! end
+
!! test
-External links: newline forbidden in text (bug 6230 regression check)
+Definition Lists: Nesting: Test 4
!! input
-[http://example.com/ first
-second]
+::;t3
+:::d3
!! result
-<p>[<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a> first
-second]
-</p>
-!!end
+<dl><dd><dl><dd><dl><dt>t3
+</dt><dd>d3
+</dd></dl>
+</dd></dl>
+</dd></dl>
+
+!! end
+
!! test
-External links: protocol-relative URL in brackets
+Definition Lists: Mixed Lists: Test 1
!! input
-[//example.com/ Test]
+:;* foo
+::* bar
+:; baz
!! result
-<p><a rel="nofollow" class="external text" href="//example.com/">Test</a>
-</p>
+<dl><dd><dl><dt><ul><li> foo
+</li><li> bar
+</li></ul>
+</dt></dl>
+<dl><dt> baz
+</dt></dl>
+</dd></dl>
+
!! end
+
!! test
-External links: protocol-relative URL in brackets without text
+Definition Lists: Mixed Lists: Test 2
!! input
-[//example.com]
+*: d1
+*: d2
!! result
-<p><a rel="nofollow" class="external autonumber" href="//example.com">[1]</a>
-</p>
+<ul><li><dl><dd> d1
+</dd><dd> d2
+</dd></dl>
+</li></ul>
+
!! end
+
!! test
-External links: protocol-relative URL in free text is left alone
+Definition Lists: Mixed Lists: Test 3
!! input
-//example.com/Foo
+*::: d1
+*::: d2
!! result
-<p>//example.com/Foo
-</p>
-!!end
+<ul><li><dl><dd><dl><dd><dl><dd> d1
+</dd><dd> d2
+</dd></dl>
+</dd></dl>
+</dd></dl>
+</li></ul>
+
+!! end
+
!! test
-External links: protocol-relative URL in the middle of a word is left alone (bug 30269)
+Definition Lists: Mixed Lists: Test 4
!! input
-foo//example.com/Foo
+*;d1 :d2
+*;d3 :d4
!! result
-<p>foo//example.com/Foo
-</p>
+<ul><li><dl><dt>d1 </dt><dd>d2
+</dd><dt>d3 </dt><dd>d4
+</dd></dl>
+</li></ul>
+
!! end
+
!! test
-External image
+Definition Lists: Mixed Lists: Test 5
!! input
-External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
+*:d1
+*:: d2
!! result
-<p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
-</p>
+<ul><li><dl><dd>d1
+<dl><dd> d2
+</dd></dl>
+</dd></dl>
+</li></ul>
+
!! end
+
!! test
-External image from https
+Definition Lists: Mixed Lists: Test 6
!! input
-External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
+#*:d1
+#*::: d3
!! result
-<p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
-</p>
+<ol><li><ul><li><dl><dd>d1
+<dl><dd><dl><dd> d3
+</dd></dl>
+</dd></dl>
+</dd></dl>
+</li></ul>
+</li></ol>
+
!! end
+
!! test
-Link to non-http image, no img tag
+Definition Lists: Mixed Lists: Test 7
!! input
-Link to non-http image, no img tag: ftp://example.com/test.jpg
+:* d1
+:* d2
!! result
-<p>Link to non-http image, no img tag: <a rel="nofollow" class="external free" href="ftp://example.com/test.jpg">ftp://example.com/test.jpg</a>
-</p>
+<dl><dd><ul><li> d1
+</li><li> d2
+</li></ul>
+</dd></dl>
+
!! end
+
!! test
-External links: terminating separator
+Definition Lists: Mixed Lists: Test 8
!! input
-Terminating separator: http://example.com/thing,
+:* d1
+::* d2
!! result
-<p>Terminating separator: <a rel="nofollow" class="external free" href="http://example.com/thing">http://example.com/thing</a>,
-</p>
+<dl><dd><ul><li> d1
+</li></ul>
+<dl><dd><ul><li> d2
+</li></ul>
+</dd></dl>
+</dd></dl>
+
!! end
+
!! test
-External links: intervening separator
+Definition Lists: Mixed Lists: Test 9
!! input
-Intervening separator: http://example.com/1,2,3
+*;foo :bar
!! result
-<p>Intervening separator: <a rel="nofollow" class="external free" href="http://example.com/1,2,3">http://example.com/1,2,3</a>
-</p>
+<ul><li><dl><dt>foo </dt><dd>bar
+</dd></dl>
+</li></ul>
+
!! end
+
!! test
-External links: old bug with URL in query
+Definition Lists: Mixed Lists: Test 10
!! input
-Old bug with URL in query: [http://example.com/thing?url=http://example.com link]
+*#;foo :bar
!! result
-<p>Old bug with URL in query: <a rel="nofollow" class="external text" href="http://example.com/thing?url=http://example.com">link</a>
-</p>
+<ul><li><ol><li><dl><dt>foo </dt><dd>bar
+</dd></dl>
+</li></ol>
+</li></ul>
+
!! end
+
!! test
-External links: old URL-in-URL bug, mixed protocols
+Definition Lists: Mixed Lists: Test 11
!! input
-And again with mixed protocols: [ftp://example.com?url=http://example.com link]
+*#*#;*;;foo :bar
+*#*#;boo :baz
!! result
-<p>And again with mixed protocols: <a rel="nofollow" class="external text" href="ftp://example.com?url=http://example.com">link</a>
-</p>
-!!end
+<ul><li><ol><li><ul><li><ol><li><dl><dt>foo </dt><dd><ul><li><dl><dt><dl><dt>bar
+</dt></dl>
+</dd></dl>
+</li></ul>
+</dd></dl>
+<dl><dt>boo </dt><dd>baz
+</dd></dl>
+</li></ol>
+</li></ul>
+</li></ol>
+</li></ul>
+
+!! end
+
!! test
-External links: URL in text
+Definition Lists: Weird Ones: Test 1
!! input
-URL in text: [http://example.com http://example.com]
+*#;*::;; foo : bar (who uses this?)
!! result
-<p>URL in text: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
-</p>
+<ul><li><ol><li><dl><dt> foo </dt><dd><ul><li><dl><dd><dl><dd><dl><dt><dl><dt> bar (who uses this?)
+</dt></dl>
+</dd></dl>
+</dd></dl>
+</dd></dl>
+</li></ul>
+</dd></dl>
+</li></ol>
+</li></ul>
+
!! end
+###
+### External links
+###
!! test
-External links: Clickable images
+External links: non-bracketed
!! input
-ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
+Non-bracketed: http://example.com
!! result
-<p>ja-style clickable images: <a rel="nofollow" class="external text" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
+<p>Non-bracketed: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
</p>
-!!end
+!! end
+
+!! test
+External links: numbered
+!! input
+Numbered: [http://example.com]
+Numbered: [http://example.net]
+Numbered: [http://example.com]
+!! result
+<p>Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>
+Numbered: <a rel="nofollow" class="external autonumber" href="http://example.net">[2]</a>
+Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[3]</a>
+</p>
+!!end
+
+!! test
+External links: specified text
+!! input
+Specified text: [http://example.com link]
+!! result
+<p>Specified text: <a rel="nofollow" class="external text" href="http://example.com">link</a>
+</p>
+!!end
+
+!! test
+External links: trail
+!! input
+Linktrails should not work for external links: [http://example.com link]s
+!! result
+<p>Linktrails should not work for external links: <a rel="nofollow" class="external text" href="http://example.com">link</a>s
+</p>
+!! end
+
+!! test
+External links: dollar sign in URL
+!! input
+http://example.com/1$2345
+!! result
+<p><a rel="nofollow" class="external free" href="http://example.com/1$2345">http://example.com/1$2345</a>
+</p>
+!! end
+
+!! test
+External links: dollar sign in URL (named)
+!! input
+[http://example.com/1$2345]
+!! result
+<p><a rel="nofollow" class="external autonumber" href="http://example.com/1$2345">[1]</a>
+</p>
+!!end
+
+!! test
+External links: open square bracket forbidden in URL (bug 4377)
+!! input
+http://example.com/1[2345
+!! result
+<p><a rel="nofollow" class="external free" href="http://example.com/1">http://example.com/1</a>[2345
+</p>
+!! end
+
+!! test
+External links: open square bracket forbidden in URL (named) (bug 4377)
+!! input
+[http://example.com/1[2345]
+!! result
+<p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
+</p>
+!!end
+
+!! test
+External links: nowiki in URL link text (bug 6230)
+!!input
+[http://example.com/ <nowiki>''example site''</nowiki>]
+!! result
+<p><a rel="nofollow" class="external text" href="http://example.com/">''example site''</a>
+</p>
+!! end
+
+!! test
+External links: newline forbidden in text (bug 6230 regression check)
+!! input
+[http://example.com/ first
+second]
+!! result
+<p>[<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a> first
+second]
+</p>
+!!end
+
+!! test
+External links: protocol-relative URL in brackets
+!! input
+[//example.com/ Test]
+!! result
+<p><a rel="nofollow" class="external text" href="//example.com/">Test</a>
+</p>
+!! end
+
+!! test
+External links: protocol-relative URL in brackets without text
+!! input
+[//example.com]
+!! result
+<p><a rel="nofollow" class="external autonumber" href="//example.com">[1]</a>
+</p>
+!! end
+
+!! test
+External links: protocol-relative URL in free text is left alone
+!! input
+//example.com/Foo
+!! result
+<p>//example.com/Foo
+</p>
+!!end
+
+!! test
+External links: protocol-relative URL in the middle of a word is left alone (bug 30269)
+!! input
+foo//example.com/Foo
+!! result
+<p>foo//example.com/Foo
+</p>
+!! end
+
+!! test
+External image
+!! input
+External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
+!! result
+<p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
+</p>
+!! end
+
+!! test
+External image from https
+!! input
+External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
+!! result
+<p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
+</p>
+!! end
+
+!! test
+Link to non-http image, no img tag
+!! input
+Link to non-http image, no img tag: ftp://example.com/test.jpg
+!! result
+<p>Link to non-http image, no img tag: <a rel="nofollow" class="external free" href="ftp://example.com/test.jpg">ftp://example.com/test.jpg</a>
+</p>
+!! end
+
+!! test
+External links: terminating separator
+!! input
+Terminating separator: http://example.com/thing,
+!! result
+<p>Terminating separator: <a rel="nofollow" class="external free" href="http://example.com/thing">http://example.com/thing</a>,
+</p>
+!! end
+
+!! test
+External links: intervening separator
+!! input
+Intervening separator: http://example.com/1,2,3
+!! result
+<p>Intervening separator: <a rel="nofollow" class="external free" href="http://example.com/1,2,3">http://example.com/1,2,3</a>
+</p>
+!! end
+
+!! test
+External links: old bug with URL in query
+!! input
+Old bug with URL in query: [http://example.com/thing?url=http://example.com link]
+!! result
+<p>Old bug with URL in query: <a rel="nofollow" class="external text" href="http://example.com/thing?url=http://example.com">link</a>
+</p>
+!! end
+
+!! test
+External links: old URL-in-URL bug, mixed protocols
+!! input
+And again with mixed protocols: [ftp://example.com?url=http://example.com link]
+!! result
+<p>And again with mixed protocols: <a rel="nofollow" class="external text" href="ftp://example.com?url=http://example.com">link</a>
+</p>
+!!end
+
+!! test
+External links: URL in text
+!! input
+URL in text: [http://example.com http://example.com]
+!! result
+<p>URL in text: <a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
+</p>
+!! end
+
+!! test
+External links: Clickable images
+!! input
+ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
+!! result
+<p>ja-style clickable images: <a rel="nofollow" class="external text" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
+</p>
+!!end
!! test
External links: raw ampersand
!! end
+!! test
+Nested lists 7 (skip initial nesting levels)
+!! input
+*** foo
+!! result
+<ul><li><ul><li><ul><li> foo
+</li></ul>
+</li></ul>
+</li></ul>
+
+!! end
+
+!! test
+Nested lists 8 (multiple nesting transitions)
+!! input
+* foo
+*** bar
+** baz
+* boo
+!! result
+<ul><li> foo
+<ul><li><ul><li> bar
+</li></ul>
+</li><li> baz
+</li></ul>
+</li><li> boo
+</li></ul>
+
+!! end
+
!! test
List items are not parsed correctly following a <pre> block (bug 785)
</p>
!! end
-!! test
-DL Tests: No nesting: Multiple dd's
-!! input
-;x
-:a
-:b
-!! result
-<dl><dt>x
-</dt><dd>a
-</dd><dd>b
-</dd></dl>
-
-!! end
-
-!! test
-DL Tests: Indentation: Regular
-!! input
-:i1
-::i2
-:::i3
-!! result
-<dl><dd>i1
-<dl><dd>i2
-<dl><dd>i3
-</dd></dl>
-</dd></dl>
-</dd></dl>
-
-!! end
-
-!! test
-DL Tests: Indentation: Missing 1st level
-!! input
-::i2
-:::i3
-!! result
-<dl><dd><dl><dd>i2
-<dl><dd>i3
-</dd></dl>
-</dd></dl>
-</dd></dl>
-
-!! end
-
-!! test
-DL Tests: Indentation: Multi-level indent
-!! input
-:::i3
-!! result
-<dl><dd><dl><dd><dl><dd>i3
-</dd></dl>
-</dd></dl>
-</dd></dl>
-
-!! end
-
-!! test
-DL Tests: Nesting: Multi-level (Parsoid only)
-!! options
-disabled
-!! input
-;t1 :d1
-;;t2 ::d2
-;;;t3 :::d3
-!! result
-<dl>
-<dt>t1 </dt>
-<dd>d1</dd>
-<dt>
-<dl>
-<dt>t2 </dt>
-<dd>:d2</dd>
-<dt>
-<dl>
-<dt>t3 </dt>
-<dd>::d3</dd></dl></dt></dl></dt></dl>
-
-
-!! end
-
-
-!! test
-DL Tests: Nesting: Test 2 (Parsoid only)
-!! options
-disabled
-!! input
-;t1
-::d2
-!! result
-<dl>
-<dt>t1</dt>
-<dd>
-<dl>
-<dd>d2</dd></dl></dd></dl>
-
-!! end
-
-
-!! test
-DL Tests: Nesting: Test 3
-!! input
-::;t3
-:::d3
-!! result
-<dl><dd><dl><dd><dl><dt>t3
-</dt><dd>d3
-</dd></dl>
-</dd></dl>
-</dd></dl>
-
-!! end
-
-
-!! test
-DL Tests: Nesting: Test 4 (Parsoid only)
-!! options
-disabled
-!! input
-:;t1
-::::d2
-!! result
-<dl>
-<dd>
-<dl>
-<dt>t1</dt>
-<dd>
-<dl>
-<dd>
-<dl>
-<dd>d2</dd></dl></dd></dl></dd></dl></dd></dl>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 1
-!! input
-:;* foo
-::* bar
-:; baz
-!! result
-<dl><dd><dl><dt><ul><li> foo
-</li><li> bar
-</li></ul>
-</dt></dl>
-<dl><dt> baz
-</dt></dl>
-</dd></dl>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 2
-!! input
-*: d1
-*: d2
-!! result
-<ul><li><dl><dd> d1
-</dd><dd> d2
-</dd></dl>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 3
-!! input
-*::: d1
-*::: d2
-!! result
-<ul><li><dl><dd><dl><dd><dl><dd> d1
-</dd><dd> d2
-</dd></dl>
-</dd></dl>
-</dd></dl>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 4
-!! input
-*;d1 :d2
-*;d3 :d4
-!! result
-<ul><li><dl><dt>d1 </dt><dd>d2
-</dd><dt>d3 </dt><dd>d4
-</dd></dl>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 5
-!! input
-*:d1
-*:: d2
-!! result
-<ul><li><dl><dd>d1
-<dl><dd> d2
-</dd></dl>
-</dd></dl>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 6
-!! input
-#*:d1
-#*::: d3
-!! result
-<ol><li><ul><li><dl><dd>d1
-<dl><dd><dl><dd> d3
-</dd></dl>
-</dd></dl>
-</dd></dl>
-</li></ul>
-</li></ol>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 7
-!! input
-:* d1
-:* d2
-!! result
-<dl><dd><ul><li> d1
-</li><li> d2
-</li></ul>
-</dd></dl>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 8
-!! input
-:* d1
-::* d2
-!! result
-<dl><dd><ul><li> d1
-</li></ul>
-<dl><dd><ul><li> d2
-</li></ul>
-</dd></dl>
-</dd></dl>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 9
-!! input
-*;foo :bar
-!! result
-<ul><li><dl><dt>foo </dt><dd>bar
-</dd></dl>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 10
-!! input
-*#;foo :bar
-!! result
-<ul><li><ol><li><dl><dt>foo </dt><dd>bar
-</dd></dl>
-</li></ol>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Mixed Lists: Test 11
-!! input
-*#*#;*;;foo :bar
-*#*#;boo :baz
-!! result
-<ul><li><ol><li><ul><li><ol><li><dl><dt>foo </dt><dd><ul><li><dl><dt><dl><dt>bar
-</dt></dl>
-</dd></dl>
-</li></ul>
-</dd></dl>
-<dl><dt>boo </dt><dd>baz
-</dd></dl>
-</li></ol>
-</li></ul>
-</li></ol>
-</li></ul>
-
-!! end
-
-
-!! test
-DL Tests: Weird Ones: Test 1
-!! input
-*#;*::;; foo : bar (who uses this?)
-!! result
-<ul><li><ol><li><dl><dt> foo </dt><dd><ul><li><dl><dd><dl><dd><dl><dt><dl><dt> bar (who uses this?)
-</dt></dl>
-</dd></dl>
-</dd></dl>
-</dd></dl>
-</li></ul>
-</dd></dl>
-</li></ol>
-</li></ul>
-
-!! end
-
TODO:
more images
$this->skipWhitespace();
$this->assertTextNode( "id", $id );
- if( $parentid ) {
+ if ( $parentid !== false ) {
$this->assertTextNode( "parentid", $parentid );
}
$this->assertTextNode( "timestamp", false );