'SetupAfterCache': Called in Setup.php, after cache objects are set
+'ShortPagesQuery': Allow extensions to modify the query used by
+Special:ShortPages.
+&$tables: tables to join in the query
+&$conds: conditions for the query
+&$joinConds: join conditions for the query
+&$options: options for the query
+
'ShowMissingArticle': Called when generating the output for a non-existent page.
$article: The article object corresponding to the page
}
unset( $repo ); // no global pollution; destroy reference
+$rcMaxAgeDays = $wgRCMaxAge / ( 3600 * 24 );
if ( $wgRCFilterByAge ) {
// Trim down $wgRCLinkDays so that it only lists links which are valid
// as determined by $wgRCMaxAge.
// @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) {
// @codingStandardsIgnoreEnd
- if ( $wgRCLinkDays[$i] >= $wgRCMaxAge / ( 3600 * 24 ) ) {
+ if ( $wgRCLinkDays[$i] >= $rcMaxAgeDays ) {
$wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1, false );
break;
}
}
}
+// Ensure that default user options are not invalid, since that breaks Special:Preferences
+$wgDefaultUserOptions['rcdays'] = min(
+ $wgDefaultUserOptions['rcdays'],
+ ceil( $rcMaxAgeDays )
+);
+$wgDefaultUserOptions['watchlistdays'] = min(
+ $wgDefaultUserOptions['watchlistdays'],
+ ceil( $rcMaxAgeDays )
+);
+unset( $rcMaxAgeDays );
if ( $wgSkipSkin ) {
$wgSkipSkins[] = $wgSkipSkin;
$wgDBerrorLogTZ = $wgLocaltimezone;
}
+// initialize the request object in $wgRequest
+$wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
+
// Useful debug output
if ( $wgCommandLineMode ) {
- $wgRequest = new FauxRequest( array() );
-
wfDebug( "\n\nStart command line script $self\n" );
} else {
- // Can't stub this one, it sets up $_GET and $_REQUEST in its constructor
- $wgRequest = new WebRequest;
-
$debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
if ( $wgDebugPrintHttpHeaders ) {
return wfExpandUrl( $this->getRequestURL(), PROTO_CURRENT );
}
- /**
- * Take an arbitrary query and rewrite the present URL to include it
- * @deprecated Use appendQueryValue/appendQueryArray instead
- * @param string $query Query string fragment; do not include initial '?'
- * @return string
- */
- public function appendQuery( $query ) {
- wfDeprecated( __METHOD__, '1.25' );
- return $this->appendQueryArray( wfCgiToArray( $query ) );
- }
-
/**
* @param string $key
* @param string $value
- * @param bool $onlyquery [deprecated]
* @return string
*/
- public function appendQueryValue( $key, $value, $onlyquery = true ) {
- return $this->appendQueryArray( array( $key => $value ), $onlyquery );
+ public function appendQueryValue( $key, $value ) {
+ return $this->appendQueryArray( array( $key => $value ) );
}
/**
* Appends or replaces value of query variables.
*
* @param array $array Array of values to replace/add to query
- * @param bool $onlyquery Whether to only return the query string
- * and not the complete URL [deprecated]
* @return string
*/
- public function appendQueryArray( $array, $onlyquery = true ) {
- global $wgTitle;
+ public function appendQueryArray( $array ) {
$newquery = $this->getQueryValues();
unset( $newquery['title'] );
$newquery = array_merge( $newquery, $array );
- $query = wfArrayToCgi( $newquery );
- if ( !$onlyquery ) {
- wfDeprecated( __METHOD__, '1.25' );
- return $wgTitle->getLocalURL( $query );
- }
- return $query;
+ return wfArrayToCgi( $newquery );
}
/**
"御坂美琴",
"RyRubyy",
"Umherirrender",
- "Apflu"
+ "Apflu",
+ "Hzy980512"
]
},
"apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文档]]\n* [[mw:API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:API:Errors_and_warnings|API: 错误与警告]]。",
"apihelp-query+contributors-param-limit": "返回的贡献数。",
"apihelp-query+contributors-example-simple": "显示<kbd>Main Page</kbd>的贡献。",
"apihelp-query+deletedrevisions-description": "获得删除修订版本信息。\n\n可在很多途径中使用:\n# 获得一组页面的已删除修订,通过设置标题或页面ID。以标题和时间戳排序。\n# 通过设置它们的ID与修订ID获得关于一组已删除修订。以修订ID排序。",
+ "apihelp-query+deletedrevisions-param-start": "要开始枚举的时间戳。在处理修订ID列表时无视。",
+ "apihelp-query+deletedrevisions-param-end": "要停止枚举的时间戳。在处理修订ID列表时无视。",
"apihelp-query+deletedrevisions-param-tag": "只列出被此标签标记的修订。",
"apihelp-query+deletedrevisions-param-user": "只列出此用户做出的修订。",
"apihelp-query+deletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
"apihelp-query+deletedrevs-param-user": "只列出此用户做出的修订。",
"apihelp-query+deletedrevs-param-excludeuser": "不要列出此用户做出的修订。",
"apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
+ "apihelp-query+deletedrevs-param-limit": "要列出的最大修订数量。",
"apihelp-query+deletedrevs-param-prop": "要获取的属性:\n;revid:添加被删除修订的修订ID。\n;parentid:添加上一修订的修订ID至页面。\n;user:添加做出修订的用户。\n;userid:添加做出修订的用户ID。\n;comment:添加修订摘要。\n;parsedcomment:添加解析过的修订摘要。\n;minor:如果修订是小编辑则加标签。\n;len:添加修订长度(字节)。\n;sha1:添加修订的SHA-1(base 16)。\n;content:添加修订内容。\n;token:<span class=\"apihelp-deprecated\">已弃用。</span>提供编辑令牌。\n;tags:修订标签。",
"apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的贡献,带内容(模式1)。",
"apihelp-query+deletedrevs-example-mode2": "列出由<kbd>Bob</kbd>作出的最近50次已删除贡献(模式2)。",
"apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)。",
"apihelp-query+deletedrevs-example-mode3-talk": "列出前50次{{ns:talk}}名字空间已删除页面(模式3)。",
"apihelp-query+disabled-description": "此查询模块已被禁用。",
+ "apihelp-query+duplicatefiles-description": "根据哈希值列出此给定文件的所有副本。",
"apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
"apihelp-query+duplicatefiles-param-dir": "罗列所采用的方向。",
"apihelp-query+duplicatefiles-param-localonly": "只看本地存储库的文件。",
"apihelp-query+users-paramvalue-prop-emailable": "Tags if the user can and wants to receive email through [[Special:Emailuser]].",
"apihelp-query+users-paramvalue-prop-gender": "Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
"apihelp-query+users-paramvalue-prop-centralids": "添加中心ID并为用户附加状态。",
+ "apihelp-query+users-param-users": "要获取信息的用户列表。",
"apihelp-query+users-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
"apihelp-query+users-example-simple": "返回用户<kbd>Example</kbd>的信息。",
"apihelp-query+watchlist-description": "在当前用户的监视列表中获取对页面的最近更改。",
"apihelp-query+watchlistraw-param-fromtitle": "要列举的起始标题(带名字空间前缀)。",
"apihelp-query+watchlistraw-param-totitle": "要列举的最终标题(带名字空间前缀)。",
"apihelp-query+watchlistraw-example-simple": "列出当前用户的监视列表中的页面。",
+ "apihelp-query+watchlistraw-example-generator": "获取在此用户的监视列表中的页面的信息。",
"apihelp-revisiondelete-description": "删除和恢复修订版本。",
"apihelp-revisiondelete-param-type": "正在执行的修订版本删除类型。",
"apihelp-revisiondelete-param-target": "要进行修订版本删除的页面标题,如果对某一类型需要。",
*/
private function formatChangeLine( RecentChange $rc, array &$classes, $watched ) {
$html = '';
+ $unpatrolled = $this->showAsUnpatrolled( $rc );
if ( $rc->mAttribs['rc_log_type'] ) {
$logtitle = SpecialPage::getTitleFor( 'Log', $rc->mAttribs['rc_log_type'] );
$this->insertLog( $html, $logtitle, $rc->mAttribs['rc_log_type'] );
+ $flags = $this->recentChangesFlags( array( 'unpatrolled' =>$unpatrolled,
+ 'bot' => $rc->mAttribs['rc_bot'] ), '' );
+ if ( $flags !== '' ) {
+ $html .= ' ' . $flags;
+ }
// Log entries (old format) or log targets, and special pages
} elseif ( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) {
list( $name, $htmlubpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
}
// Regular entries
} else {
- $unpatrolled = $this->showAsUnpatrolled( $rc );
$this->insertDiffHist( $html, $rc, $unpatrolled );
# M, N, b and ! (minor, new, bot and unpatrolled)
$html .= $this->recentChangesFlags(
* @param string $params
* @param int $newId
* @param string $actionCommentIRC
+ * @param int $revId Id of associated revision, if any
* @return RecentChange
*/
public static function newLogEntry( $timestamp, &$title, &$user, $actionComment, $ip,
- $type, $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' ) {
+ $type, $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '',
+ $revId = 0 ) {
global $wgRequest;
# # Get pageStatus for email notification
break;
}
+ // Allow unpatrolled status when an associated rev id is passed
+ // May be used in core by moves and uploads
+ $markPatrolled = ( $revId > 0 ) ? $user->isAllowed( 'autopatrol' ) : true;
+
$rc = new RecentChange;
$rc->mTitle = $target;
$rc->mPerformer = $user;
'rc_user' => $user->getId(),
'rc_user_text' => $user->getName(),
'rc_comment' => $logComment,
- 'rc_this_oldid' => 0,
+ 'rc_this_oldid' => $revId,
'rc_last_oldid' => 0,
'rc_bot' => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
'rc_ip' => self::checkIPAddress( $ip ),
- 'rc_patrolled' => 1,
+ 'rc_patrolled' => $markPatrolled ? 1 : 0,
'rc_new' => 0, # obsolete
'rc_old_len' => null,
'rc_new_len' => null,
*/
public function getRequest() {
if ( $this->request === null ) {
- global $wgRequest; # fallback to $wg till we can improve this
- $this->request = $wgRequest;
+ global $wgCommandLineMode;
+ // create the WebRequest object on the fly
+ if ( $wgCommandLineMode ) {
+ $this->request = new FauxRequest( array() );
+ } else {
+ $this->request = new WebRequest();
+ }
}
return $this->request;
array( $msg ) );
} else {
# Give explanation and add a link to view the diff...
- $query = $this->getRequest()->appendQueryValue( 'unhide', '1', true );
+ $query = $this->getRequest()->appendQueryValue( 'unhide', '1' );
$link = $this->getTitle()->getFullURL( $query );
$msg = $suppressed ? 'rev-suppressed-unhide-diff' : 'rev-deleted-unhide-diff';
$out->wrapWikiMsg(
$prevId = $dbw->selectField( 'revision', 'rev_id',
array(
'rev_page' => $pageId,
- 'rev_timestamp <= ' . $dbw->timestamp( $this->timestamp ),
+ 'rev_timestamp <= ' . $dbw->addQuotes( $dbw->timestamp( $this->timestamp ) ),
),
__METHOD__,
array( 'ORDER BY' => array(
function importLogItem() {
$dbw = wfGetDB( DB_MASTER );
+
+ $user = User::newFromName( $this->getUser() );
+ if ( $user ) {
+ $userId = intval( $user->getId() );
+ $userText = $user->getName();
+ } else {
+ $userId = 0;
+ $userText = $this->getUser();
+ }
+
# @todo FIXME: This will not record autoblocks
if ( !$this->getTitle() ) {
wfDebug( __METHOD__ . ": skipping invalid {$this->type}/{$this->action} log time, timestamp " .
'log_type' => $this->type,
'log_action' => $this->action,
'log_timestamp' => $dbw->timestamp( $this->timestamp ),
- 'log_user' => User::idFromName( $this->user_text ),
- # 'log_user_text' => $this->user_text,
+ 'log_user' => $userId,
+ 'log_user_text' => $userText,
'log_namespace' => $this->getTitle()->getNamespace(),
'log_title' => $this->getTitle()->getDBkey(),
'log_comment' => $this->getComment(),
"config-db-web-account": "Dä Zohjang zor Daatebangk för et Wiki",
"config-db-web-help": "Donn ene Name un e Paßwoot för der Zohjang zor Daatebangk för et Wiki em nomaale Bedrief aanjävve.",
"config-db-web-account-same": "Donn dersällve Zohjang nämme, wi heh beim Opsäze.",
- "config-db-web-create": "Donn dä Zohjang aanlääje, wann dä noch nit doh es.",
+ "config-db-web-create": "Donn dä Zohjang aanlähje, wann dä noch nit doh es.",
"config-db-web-no-create-privs": "Dä Zohjang för et Opsäze es nit berääschtesch, ene ander Zohjan enzereeschte.\nDä aanjejovve Zohjang för der Nomaalbedrief moß dröm schunn enjersht sen!",
"config-mysql-engine": "De Zoot udder et Fommaat vun de Tabälle:",
"config-mysql-innodb": "InnoDB",
/** @var string Comment for the log entry */
protected $comment = '';
+ /** @var int A rev id associated to the log entry */
+ protected $revId = 0;
+
/** @var int Deletion state of the log entry */
protected $deleted;
$this->comment = $comment;
}
+ /**
+ * Set an associated revision id.
+ *
+ * @since 1.27
+ *
+ * @param int $revId
+ */
+ public function setAssociatedRevId( $revId ) {
+ $this->revId = $revId;
+ }
+
/**
* Set the 'legacy' flag
*
$this->getComment(),
LogEntryBase::makeParamBlob( $this->getParameters() ),
$newId,
- $formatter->getIRCActionComment() // Used for IRC feeds
+ $formatter->getIRCActionComment(), // Used for IRC feeds
+ $this->getAssociatedRevId() // Used for e.g. moves and uploads
);
}
if ( $to === 'udp' || $to === 'rcandudp' ) {
$rc->notifyRCFeeds();
}
+
+ // Log the autopatrol if an associated rev id was passed
+ if ( $this->getAssociatedRevId() > 0 &&
+ $rc->getAttribute( 'rc_patrolled' ) === 1 ) {
+ PatrolLog::record( $rc, true, $this->getPerformer() );
+ }
}
// LogEntry->
return $this->comment;
}
+ /**
+ * @since 1.27
+ * @return int
+ */
+ public function getAssociatedRevId() {
+ return $this->revId;
+ }
+
/**
* @since 1.25
* @return bool
$nav_urls['print'] = array(
'text' => $this->msg( 'printableversion' )->text(),
'href' => $this->getTitle()->getLocalURL(
- $request->appendQueryValue( 'printable', 'yes', true ) )
+ $request->appendQueryValue( 'printable', 'yes' ) )
);
}
protected function preText() {
$this->getOutput()->addModules( array( 'mediawiki.special.block', 'mediawiki.userSuggest' ) );
- $text = $this->msg( 'blockiptext' )->parse();
+ $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+ $text = $this->msg( 'blockiptext', $blockCIDRLimit['IPv4'], $blockCIDRLimit['IPv6'] )->parse();
$otherBlockMessages = array();
if ( $this->target !== null ) {
$form
->setSubmitTextMsg( 'expand_templates_ok' )
->setWrapperLegendMsg( 'expandtemplates' )
- ->setHeaderText( $this->msg( 'expand_templates_intro' )->text() )
+ ->setHeaderText( $this->msg( 'expand_templates_intro' )->parse() )
->setSubmitCallback( array( $this, 'onSubmitInput' ) )
->showAlways();
}
}
public function getQueryInfo() {
+ $tables = array( 'page' );
+ $conds = array(
+ 'page_namespace' => MWNamespace::getContentNamespaces(),
+ 'page_is_redirect' => 0
+ );
+ $joinConds = array();
+ $options = array( 'USE INDEX' => array( 'page' => 'page_redirect_namespace_len' ) );
+
+ // Allow extensions to modify the query
+ Hooks::run( 'ShortPagesQuery', array( &$tables, &$conds, &$joinConds, &$options ) );
+
return array(
- 'tables' => array( 'page' ),
+ 'tables' => $tables,
'fields' => array(
'namespace' => 'page_namespace',
'title' => 'page_title',
'value' => 'page_len'
),
- 'conds' => array(
- 'page_namespace' => MWNamespace::getContentNamespaces(),
- 'page_is_redirect' => 0
- ),
- 'options' => array( 'USE INDEX' => 'page_redirect_namespace_len' )
+ 'conds' => $conds,
+ 'join_conds' => $joinConds,
+ 'options' => $options
);
}
"passwordreset-emailtext-ip": "Dalguién (seique vusté, dende la direición IP $1)solicitó'l reaniciu de la so contraseña de {{SITENAME}} ($4).\n{{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}}\na esta direición de corréu electrónicu:\n\n$2\n\n{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.\nTendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona,\no si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir\nusando la contraseña antigua.",
"passwordreset-emailtext-user": "L'usuariu $1 de {{SITENAME}} solicitó un reaniciu de la so contraseña de {{SITENAME}} ($4). {{PLURAL:$3|La cuenta d'usuariu siguiente ta asociada|Les cuentes d'usuariu siguientes tán asociaes}} con esta direición de corréu electrónicu:\n\n$2\n\n{{PLURAL:$3|Esta contraseña provisional caduca|Estes contraseñes provisionales caduquen}} {{PLURAL:$5|nun día|en $5 díes}}.\nTendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solicitú la fizo otra persona, o si recordó la clave orixinal y yá nun quier camudala, pue escaecer esti mensaxe y siguir usando la contraseña antigua.",
"passwordreset-emailelement": "Nome d'usuariu: \n$1\n\nContraseña temporal: \n$2",
- "passwordreset-emailsentemail": "Si esta ye una direición de corréu electrónicu rexistrada pa la to cuenta, unviaráse un corréu pa reaniciar la contraseña.",
- "passwordreset-emailsentusername": "Si hai una direición rexistrada de corréu electrónicu correspondiente a esta cuenta, unviaráse un corréu electrónicu pa reaniciar la contraseña.",
+ "passwordreset-emailsentemail": "Si esta direición de corréu electrónicu ta asociada cola to cuenta, unviaráse un corréu pa reaniciar la contraseña.",
+ "passwordreset-emailsentusername": "Si hai una direición de corréu electrónicu asociada con esti nome d'usuariu, unviaráse un corréu electrónicu pa reaniciar la contraseña.",
"passwordreset-emailsent-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo.",
"passwordreset-emailerror-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu {{GENDER:$2|al usuariu|a la usuaria}}: $1",
"changeemail": "Camudar o desaniciar la dirección de corréu electrónicu",
"upload-form-label-select-file": "Seleiciona un ficheru",
"upload-form-label-infoform-title": "Detalles",
"upload-form-label-infoform-name": "Nome",
+ "upload-form-label-infoform-name-tooltip": "Un títulu descriptivu únicu pal ficheru, que sirvirá para da-y nome al ficheru. Se pue usar llinguax normal con espacios. Nun amiestes la estensión del ficheru.",
"upload-form-label-infoform-description": "Descripción",
+ "upload-form-label-infoform-description-tooltip": "Describe de mou curtiu cualquier cosa notable de la obra.\nPa una semeya, cuenta les principales coses qu'apaecen, la ocasión o'l sitiu.",
"upload-form-label-usage-title": "Usu",
"upload-form-label-usage-filename": "Nome del ficheru",
"foreign-structured-upload-form-label-own-work": "Esti ye'l mio propiu trabayu",
"export-download": "Guardar como archivu",
"export-templates": "Inxerir plantíes",
"export-pagelinks": "Incluyir páxines enllazaes fasta una profundidá de:",
+ "export-manual": "Amestar páxines a mano:",
"allmessages": "Tolos mensaxes del sistema",
"allmessagesname": "Nome",
"allmessagesdefault": "Testu predetermináu",
"expand_templates_preview": "Vista previa",
"expand_templates_preview_fail_html": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y hebo una perda de datos de la sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, vuelvi a intentalo.</strong>\nSi inda nun funciona, intenta [[Special:UserLogout|salir]] y volver a entrar na to cuenta.",
"expand_templates_preview_fail_html_anon": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y nun aniciasti sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, intenta [[Special:UserLogin|entrar]] y vuelvi a intentalo.</strong>",
+ "expand_templates_input_missing": "Fai falta dar daqué de testu d'entrada.",
"pagelanguage": "Selector de llingua de la páxina",
"pagelang-name": "Páxina",
"pagelang-language": "Llingua",
"pagelang-use-default": "Usar la llingua predeterminada",
"pagelang-select-lang": "Escoyer llingua",
+ "pagelang-submit": "Unviar",
"right-pagelang": "Cambiar la llingua de la páxina",
"action-pagelang": "cambiar la llingua de la páxina",
"log-name-pagelang": "Rexistru de cambios de llingua",
"mediastatistics": "Estadístiques de multimedia",
"mediastatistics-summary": "Estadístiques sobro los tipos de ficheros xubíos. Esto sólo incluye la versión más nueva d'un ficheru. Escluyense les versiones antigües o desaniciaes de los ficheros.",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-bytespertype": "Tamañu total del ficheru pa esta sección: {{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%).",
+ "mediastatistics-allbytes": "Tamañu total del ficheru pa tolos ficheros: {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
"mediastatistics-table-mimetype": "Tipu MIME",
"mediastatistics-table-extensions": "Estensiones posibles",
"mediastatistics-table-count": "Númberu de ficheros",
"mediastatistics-header-text": "Testual",
"mediastatistics-header-executable": "Executables",
"mediastatistics-header-archive": "Formatos comprimíos",
+ "mediastatistics-header-total": "Tolos ficheros",
"json-warn-trailing-comma": "$1 {{PLURAL:$1|coma al final desanicióse|comes al final desaniciáronse}} de JSON",
"json-error-unknown": "Hebo un problema col JSON. Error: $1",
"json-error-depth": "Pasóse de la fondura máxima de la pila",
"tags-deactivate": "адключыць",
"tags-hitcount": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
"tags-manage-no-permission": "Вы ня маеце правоў на зьмену метак.",
+ "tags-manage-blocked": "Вы ня можаце мяняць меткі, калі заблякаваныя.",
"tags-create-heading": "Стварэньне новай меткі",
"tags-create-explanation": "Па змоўчаньні, наваствораныя меткі будуць даступныя для выкарыстаньня ўдзельнікамі і робатамі.",
"tags-create-tag-name": "Назва меткі:",
"tags-deactivate-not-allowed": "Немагчыма дэактываваць метку «$1».",
"tags-deactivate-submit": "Адключыць",
"tags-apply-no-permission": "Вы ня маеце права прымяняць меткі да вашых рэдагаваньняў.",
+ "tags-apply-blocked": "Вы ня можаце мяняць меткі да вашых зьменаў, калі заблякаваныя.",
"tags-apply-not-allowed-one": "Метка «$1» ня можа быць прызначаная ўручную.",
"tags-apply-not-allowed-multi": "{{PLURAL:$2|Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
"tags-update-no-permission": "Вы ня маеце права на дадаваньне ці выдаленьне метак зьменаў для асобных вэрсіяў ці запісаў журналаў.",
"sig_tip": "Вашият подпис заедно с времева отметка",
"hr_tip": "Хоризонтална линия (използвайте пестеливо)",
"summary": "Резюме:",
- "subject": "Тема/заглавие:",
+ "subject": "Ð\97аглавие:",
"minoredit": "Това е малка промяна",
"watchthis": "Наблюдаване на страницата",
"savearticle": "Съхраняване",
"anonpreviewwarning": "Внимание: Не сте влезли в системата. Ако съхраните редакцията си, тя ще бъде записана в историята на страницата с вашият IP-адрес.",
"missingsummary": "'''Напомняне:''' Не е въведено кратко описание на промените. При повторно натискане на бутона „Съхраняване“, редакцията ще бъде съхранена без резюме.",
"missingcommenttext": "По-долу въведете вашето съобщение.",
- "missingcommentheader": "'''Напомняне:''' Не е въведено заглавие на коментара.\nПри повторно натискане на \"{{int:savearticle}}\", редакцията ще бъде записана без такова.",
+ "missingcommentheader": "<strong>Напомняне:</strong> Не е въведено заглавие на коментара.\nПри повторно натискане на \"{{int:savearticle}}\", редакцията ще бъде записана без такова.",
"summary-preview": "Предварителен преглед на резюмето:",
"subject-preview": "Предварителен преглед на заглавието:",
+ "previewerrortext": "Възникна грешка при опита за преглед на промените.",
"blockedtitle": "Потребителят е блокиран",
"blockedtext": "'''Вашето потребителско име (или IP-адрес) беше блокирано.'''\n\nБлокирането е извършено от $1. Посочената причина е: ''$2''\n\n*Начало на блокирането: $8\n*Край на блокирането: $6\n*Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „Пращане писмо на потребител“ само ако не ви е забранена употребата й и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nВашият IP адрес е $3, а номерът на блокирането е $5. Включвайте едно от двете или и двете във всяко запитване, което правите.",
"autoblockedtext": "IP-адресът ви беше блокиран автоматично, защото е бил използван от друг потребител, който е бил блокиран от $1.\nПосочената причина е:\n\n:''$2''\n\n* Начало на блокирането: $8\n* Край на блокирането: $6\n* Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „Пращане писмо на потребител“ само ако не ви е забранена употребата й и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nТекущият ви IP-адрес е $3, а номерът на блокирането ви е $5. Включвайте ги във всяко питане, което правите.",
"copyrightwarning": "Обърнете внимание, че всички приноси към {{SITENAME}} се публикуват при условията на $2 (за подробности вижте $1).\nАко не сте съгласни вашата писмена работа да бъде променяна и разпространявана без ограничения, не я публикувайте.<br />\n\nСъщо потвърждавате, че '''вие''' сте написали материала или сте използвали '''свободни ресурси''' — <em>обществено достояние</em> или друг свободен източник.\nАко сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.\n\n<div style=\"font-variant:small-caps\">'''Не публикувайте произведения с авторски права без разрешение!'''</div>",
"copyrightwarning2": "Обърнете внимание, че всички приноси към {{SITENAME}} могат да бъдат редактирани, променяни или премахвани от останалите сътрудници.\nАко не сте съгласни вашата писмена работа да бъде променяна без ограничения, не я публикувайте.<br />\nСъщо потвърждавате, че '''вие''' сте написали материала или сте използвали '''свободни ресурси''' — <em>обществено достояние</em> или друг свободен източник (за подробности вижте $1).\nАко сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.\n\n<div style=\"font-variant:small-caps\">'''Не публикувайте произведения с авторски права без разрешение!'''</div>",
"longpageerror": "'''ГРЕШКА: Изпратеният текст е с големина {{PLURAL:$1|един килобайт|$1 килобайта}}, което надвишава позволения максимум от {{PLURAL:$2|един килобайт|$2 килобайта}}.'''\nПоради тази причина той не може да бъде съхранен.",
- "readonlywarning": "'''ВНИМАНИЕ: Базата от данни беше затворена за поддръжка, затова в момента промените няма да могат да бъдат съхранени.'''\n\nАко желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.\n\nАдминистраторът, който е затворил базата от данни, е посочил следната причина: $1",
+ "readonlywarning": "<strong>ВНИМАНИЕ: Базата от данни беше затворена за поддръжка, затова в момента промените няма да могат да бъдат съхранени.</strong>\n\nАко желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.\n\nСистемният администратор, който е затворил базата от данни, е посочил следната причина: $1",
"protectedpagewarning": "'''Внимание: Страницата е защитена и само потребители със статут на администратори могат да я редактират.'''\nЗа справка по-долу е показан последният запис от дневниците.",
"semiprotectedpagewarning": "'''Забележка:''' Тази страница е защитена и само регистрирани потребители могат да я редактират.\nЗа справка по-долу е показан последният запис от дневниците.",
- "cascadeprotectedwarning": "'''Внимание:''' Страницата е защитена, като само потребители с администраторски права могат да я редактират. Тя е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
+ "cascadeprotectedwarning": "<strong>Внимание:</strong> Страницата е защитена, като само потребители с администраторски права могат да я редактират. Тя е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
"titleprotectedwarning": "'''Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специални права]], за да бъде създадена.'''\nЗа справка по-долу е показан последният запис от дневниците.",
"templatesused": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} на страницата:",
"templatesusedpreview": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} в предварителния преглед:",
"columns": "Колони:",
"searchresultshead": "Търсене",
"stub-threshold": "Праг за форматиране на <a href=\"#\" class=\"stub\">препратки към мъничета</a>:",
+ "stub-threshold-sample-link": "пример",
"stub-threshold-disabled": "Изключено",
"recentchangesdays": "Брой дни в последни промени:",
"recentchangesdays-max": "(най-много $1 {{PLURAL:$1|ден|дни}})",
"upload-misc-error-text": "Неизвестна грешка при качване. Убедете се, че адресът е верен и опитайте отново. Ако отново имате проблем, обърнете се към [[Special:ListUsers/sysop|администратор]].",
"upload-too-many-redirects": "Адресът съдържа твърде много пренасочвания",
"upload-http-error": "Възникна HTTP грешка: $1",
+ "upload-dialog-button-cancel": "Отказване",
+ "upload-dialog-button-done": "Готово",
+ "upload-dialog-button-save": "Съхраняване",
+ "upload-dialog-button-upload": "Качване",
+ "upload-form-label-select-file": "Избиране на файл",
+ "upload-form-label-infoform-title": "Подробности",
+ "upload-form-label-infoform-name": "Име",
+ "upload-form-label-infoform-description": "Описание",
+ "upload-form-label-usage-title": "Използване",
+ "upload-form-label-usage-filename": "Име на файл",
+ "foreign-structured-upload-form-label-infoform-categories": "Категории",
+ "foreign-structured-upload-form-label-infoform-date": "Дата",
"foreign-structured-upload-form-3-label-yes": "Да",
"foreign-structured-upload-form-3-label-no": "Не",
"backend-fail-notexists": "Файлът $1 не съществува.",
"wlshowlast": "Показване на последните $1 часа $2 дни",
"watchlistall2": "всички",
"watchlist-hide": "Скриване",
+ "watchlist-submit": "Показване",
"wlshowtime": "Период от време за показване:",
+ "wlshowhideminor": "малки промени",
+ "wlshowhidebots": "ботове",
+ "wlshowhideliu": "регистрирани потребители",
+ "wlshowhideanons": "анонимни потребители",
+ "wlshowhidepatr": "проверени редакции",
+ "wlshowhidemine": "моите редакции",
"watchlist-options": "Опции на списъка за наблюдение",
"watching": "Наблюдение…",
"unwatching": "Спиране на наблюдение…",
"deletepage": "Изтриване",
"confirm": "Потвърждаване",
"excontent": "съдържанието беше: „$1“",
- "excontentauthor": "съдържанието беше: „$1“ (като единственият автор беше [[Special:Contributions/$2|$2]])",
+ "excontentauthor": "съдържанието беше: „$1“, като единственият автор беше \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|беседа]])",
"exbeforeblank": "премахнато преди това съдържание: „$1“",
"delete-confirm": "Изтриване на „$1“",
"delete-legend": "Изтриване",
- "historywarning": "'''Внимание:''' Страницата, която възнамерявате да изтриете, има история с приблизително $1 {{PLURAL:$1|редакция|редакции}}:",
+ "historywarning": "\"Внимание:</strong> Страницата, която възнамерявате да изтриете, има история с приблизително $1 {{PLURAL:$1|редакция|редакции}}:",
"historyaction-submit": "Показване",
"confirmdeletetext": "На път сте безвъзвратно да изтриете страница или файл, заедно с цялата прилежаща редакционна история, от базата от данни.\nПотвърдете, че искате това, разбирате последствията и правите това в съответствие с [[{{MediaWiki:Policy-url}}|линията на поведение]].",
"actioncomplete": "Действието беше изпълнено",
"rollback-success": "Отменени редакции на $1; възвръщане към последната версия на $2.",
"sessionfailure-title": "Прекъсната сесия",
"sessionfailure": "Изглежда има проблем със сесията ви; действието беше отказано като предпазна мярка срещу крадене на сесията. Натиснете бутона за връщане на браузъра, презаредете страницата, от която сте дошли, и опитайте отново.",
+ "changecontentmodel-title-label": "Заглавие на страницата",
+ "changecontentmodel-reason-label": "Причина:",
"protectlogpage": "Дневник на защитата",
"protectlogtext": "Списък на промените в защитата за страницата.\nМожете да прегледате и [[Special:ProtectedPages|списъка на текущо защитените страници]].",
"protectedarticle": "защити „[[$1]]“",
"movenotallowedfile": "Нямате права да премествате файлове.",
"cant-move-user-page": "Нямате нужните права на достъп, за да местите потребителски страници (можете да местите само подстраници).",
"cant-move-to-user-page": "Нямате нужните права на достъп, за да извършвате преместване на страници върху потребителски страници (можете да местите само върху подстраници от потребителското пространство).",
- "newtitle": "Ð\9aÑ\8aм ново заглавие:",
+ "newtitle": "Ð\9dово заглавие:",
"move-watch": "Наблюдаване на страницата",
"movepagebtn": "Преместване",
"pagemovedsub": "Преместването беше успешно",
"version-libraries": "Инсталирани библиотеки",
"version-libraries-library": "Библиотека",
"version-libraries-version": "Версия",
+ "version-libraries-description": "Описание",
+ "version-libraries-authors": "Автори",
"redirect-submit": "Отваряне",
"redirect-value": "Стойност:",
"redirect-user": "Потребителски номер",
"special-characters-title-minus": "знак минус",
"mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
"mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
+ "mw-widgets-titleinput-description-new-page": "страницата все още не съществува",
+ "mw-widgets-titleinput-description-redirect": "пренасочване към $1",
"api-error-blacklisted": "Моля, изберете различно, описателно заглавие."
}
"viewpagelogs": "Pogledaj zapisnike ove stranice",
"nohistory": "Ne postoji historija izmjena za ovu stranicu.",
"currentrev": "Trenutna verzija",
- "currentrev-asof": "Trenutna verzija na dan $1",
+ "currentrev-asof": "Trenutna verzija na dan $2 u $3",
"revisionasof": "Verzija od $1",
"revision-info": "Izmjena od $1 od {{GENDER:$6|$2}}$7",
"previousrevision": "← Starija izmjena",
"unblock": "Benutzer freigeben",
"blockip": "IP-Adresse/{{GENDER:$1|Benutzer|Benutzerin}} sperren",
"blockip-legend": "IP-Adresse/Benutzer sperren",
- "blockiptext": "Mit diesem Formular sperrst du eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte gib den Grund für die Sperre an.",
+ "blockiptext": "Mit diesem Formular sperrst du eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte gib den Grund für die Sperre an.\nDu kannst IP-Bereiche mit der [https://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]-Syntax sperren; der größte erlaubte Bereich ist /$1 für IPv4 und /$2 für IPv6.",
"ipaddressorusername": "IP-Adresse oder Benutzername:",
"ipbexpiry": "Sperrdauer:",
"ipbreason": "Grund:",
"unblock-summary": "",
"blockip": "Block {{GENDER:$1|user}}",
"blockip-legend": "Block user",
- "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).",
+ "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).\nYou can block IP ranges using the [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; the largest allowed range is /$1 for IPv4 and /$2 for IPv6.",
"ipaddressorusername": "IP address or username:",
"ipbexpiry": "Expiry:",
"ipbreason": "Reason:",
"unblock": "שחרור משתמש",
"blockip": "חסימת {{GENDER:$1|משתמש|משתמשת}}",
"blockip-legend": "חסימת משתמש",
- "blockiptext": "השתמשו בטופס שלהלן כדי לחסום את הרשאות הכתיבה מכתובת IP או משתמש מסוימים.\nחסימות כאלה צריכות להתבצע רק כדי למנוע השחתה, ובהתאם ל[[{{MediaWiki:Policy-url}}|נהלים]].\nאנא מלאו את הסיבה הפרטנית לחסימה להלן (לדוגמה, באמצעות ציון דפים מסוימים שהשחית המשתמש).",
+ "blockiptext": "השתמשו בטופס שלהלן כדי לחסום את הרשאות הכתיבה מכתובת IP או משתמש מסוימים.\nחסימות כאלה צריכות להתבצע רק כדי למנוע השחתה, ובהתאם ל[[{{MediaWiki:Policy-url}}|נהלים]].\nאנא מלאו את הסיבה הפרטנית לחסימה להלן (לדוגמה, באמצעות ציון דפים מסוימים שהשחית המשתמש).\nבאפשרותך לחסום טווחי IP באמצעות תחביר [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; הטווח הגדול ביותר שמורשה הוא <span dir=\"ltr\">/$1</span> עבור IPv4 ו־<span dir=\"ltr\">/$2</span> עבור IPv6.",
"ipaddressorusername": "כתובת IP או שם משתמש:",
"ipbexpiry": "פקיעה:",
"ipbreason": "סיבה:",
"wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
"watchlistall2": "sve",
"watchlist-hide": "Sakrij",
+ "watchlist-submit": "Prikaži",
"wlshowtime": "Prikaži posljednjih:",
"wlshowhideminor": "manje promjene",
"wlshowhidebots": "botove",
"mediastatistics": "メディア統計",
"mediastatistics-summary": "アップロードされたファイルの種類に関する統計です。これはファイルの最新バージョンのみを含みます。以前のまたは削除されたバージョンについては除外されています。",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 バイト}} ($2; $3%)",
- "mediastatistics-bytespertype": "このセクションの総ファイルサイズは $1 バイトです。",
- "mediastatistics-allbytes": "全ファイルの総ファイルサイズは $1 バイトです。",
+ "mediastatistics-bytespertype": "このセクションの総ファイルサイズは {{PLURAL:$1|$1 バイト}} ($2、$3%) です。",
+ "mediastatistics-allbytes": "全ファイルの総ファイルサイズは {{PLURAL:$1|$1 バイト}} ($2) です。",
"mediastatistics-table-mimetype": "MIMEタイプ",
"mediastatistics-table-extensions": "取りうる拡張子",
"mediastatistics-table-count": "ファイル数",
"cachedspecial-viewing-cached-ts": "თქვენ ნახულობთ ამ გვერდის ქეშირებულ ვერსიას, რომელიც შესაძლოა მნიშვნელოვნად განსხვავდებოდეს მიმდინარე ვერსისაგან.",
"cachedspecial-refresh-now": "ბოლო ვერსიის ხილვა.",
"categories": "კატეგორიები",
+ "categories-submit": "ჩვენება",
"categoriespagetext": "შემდეგი {{PLURAL:$1|კატეგორია შეიცავს|კატეგორია შეიცავს}} გვერდს ან მედიას.\n[[Special:UnusedCategories|გამოუყენებელი კატეგორიები]] აქ ნაჩვენები არ არის.\nიხ. ასევე [[Special:WantedCategories|მოთხოვნილი კატეგორიები]].",
"categoriesfrom": "აჩვენეთ კატეგორიები, რომლებიც იწყება:",
"special-categories-sort-count": "დაალაგეთ რაოდენობის მიხედვით",
"delete-confirm": "„$1“-ის წაშლა",
"delete-legend": "წაშლა",
"historywarning": "'''ყურადღება:''' გვერდს, რომლის წაშლასაც აპირებთ, აქვს დიდი ისტორია: ($1)",
+ "historyaction-submit": "ჩვენება",
"confirmdeletetext": "თქვენ მოითხოვეთ გვერდისა (ან ფაილისა) და მონაცემთა ბაზიდან მისი ისტორიის წაშლა.\nგთხოვთ დაადასტუროთ, რომ მართლაც აპირებთ ამის გაკეთებას და გესმით თქვენი ქმედებების ფასი.\nასევე გადაამოწმეთ, თუ ასრულებთ ამას [[{{MediaWiki:Policy-url}}|წესებიდან გამომდინარე]].",
"actioncomplete": "მოქმედება შესრულებულია",
"actionfailed": "მოქმედება ვერ განხორციელდა",
"emailccme": "Scheck mer en Kopie vun dä E-Mail.",
"emailccsubject": "En Kopie vun Dinger E-Mail aan $1: $2",
"emailsent": "De <i lang=\"en\">e-mail</i> es ongerwähs",
- "emailsenttext": "Ding E-Mail es jetz lossjescheck woode.",
+ "emailsenttext": "Ding <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> es jäz loßßjeschek woode.",
"emailuserfooter": "Heh di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> hät {{GENDER:$1|dä|et|dä Metmaacher|di Metmaacherėn|dät}} „$1“ an {{GENDER:$2|dä|et|dä Metmaacher|di Metmaacherėn|dät}} „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.",
"usermessage-summary": "En Nohreesch vum Wiki afjelivvert.",
"usermessage-editor": "Name vum Metmaacher för de Täxte un Nohreshte vum Wiki ze beärbeide",
"thumbnail_error_remote": "Ene Fähler es em $1 opjevalle:\n$2",
"djvu_page_error": "De DjVu-Sgg es ußerhallef",
"djvu_no_xml": "De XML-Date för di DjVu-Datei kunnte mer nit afrofe",
- "thumbnail-temp-create": "Mer kunnte kein Zweschedattei für Minnibeldscher aanlääje.",
+ "thumbnail-temp-create": "Mer kunnte kein Zweschedattei für Minnibeldscher aanlähje.",
"thumbnail-dest-create": "Mer kunnte kein Minnibeldscher faßhallde, woh se hen sulle.",
"thumbnail_invalid_params": "Ene Parameter för et Breefmarke-Belldsche (<i lang=\"en\">thumbnail</i>) Maache wohr nit en Odenung",
"thumbnail_toobigimagearea": "Datteij met mih wi $1",
"tog-watchlisthidebots": "Recensiones per automaton factas in paginarum observatarum indice supprimere",
"tog-watchlisthideminor": "Minores recensiones in paginarum observatarum indice supprimere",
"tog-watchlisthideliu": "Recensiones ab usoribus notis factas in paginarum observatarum indice supprimere",
- "tog-watchlistreloadautomatically": "Quamprimum aliquis selectus mutatus erit, indicem paginarum observatarum reficere (JavaScript required)",
+ "tog-watchlistreloadautomatically": "Quamprimum aliquis selectus mutatus erit, indicem paginarum observatarum reficere (JavaScript necesse est)",
"tog-watchlisthideanons": "Recensiones ab usoribus ignotis factas in paginarum observatarum indice supprimere",
- "tog-watchlisthidepatrolled": "Recensiones custoditarum paginarum supprimere",
+ "tog-watchlisthidepatrolled": "Recensiones custoditas supprimere",
"tog-ccmeonemails": "Transcriptiones earum, quas ad alios usores misero litteras, mihi ipsi mittantur",
"tog-diffonly": "Nihil nisi differentiam in pagina factam ostendatur",
"tog-showhiddencats": "Categorias celatas monstrare",
"email": "Litterae electronicae",
"prefs-help-realname": "Nomen verum non necesse est.\nSi vis id dare, opera tua tibi ascribentur.",
"prefs-help-email": "Non necesse est inscriptionem electronicam dare. Qua tamen data tessera tibi tribui poterit nova, si prioris oblitus eris.",
- "prefs-help-email-others": "Praeterea, si libeat, aliis concedas tibi nuntia per nexum in pagina vel disputatione tua positum mitttere electronicas.\nInscriptio tua electronica usoribus tibi scribentis non erit visibilis.",
+ "prefs-help-email-others": "Praeterea, si libeat, aliis concedas tibi nuntia per nexum in pagina vel disputatione tua positum mittere electronicas.\nInscriptio tua electronica usoribus tibi scribentis non erit visibilis.",
"prefs-help-email-required": "Inscriptio electronica necesse est.",
"prefs-info": "Generalia",
"prefs-i18n": "Sermonis delectus",
"userpage-userdoesnotexist": "'O cunto utente \"<nowiki>$1</nowiki>\" nun è riggistrato. Cuntrolla ca si buò overo crià o cagnà sta paggena.",
"userpage-userdoesnotexist-view": "'O cunto utente \"$1\" nun è riggistrato.",
"blocked-notice-logextract": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
- "clearyourcache": "'''Nota:''' aroppo sarvate putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe' vedé 'e cagnamiente. \n*'''Firefox / Safari''': sprémme 'o buttóne maiuscole e ffà clic ncopp'a ''Recarreca'', o pure spremme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' ncopp'a Mac)\n*'''Google Chrome''': spremme ''Ctrl-Shift-R'' (''⌘-Shift-R'' ncopp'a nu Mac)\n*'''Internet Explorer''': spremme 'o buttóne ''Ctrl'' pe' tramente ca faie click ncopp'a ''Refresh'', o pure spremmere ''Ctrl-F5''\n*'''Opera''': abbacanta tutt' 'a cache addò menu ''Strumiente → Preferenze''",
+ "clearyourcache": "'''Nota:''' aroppo sarvate putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe' vedé 'e cagnamiente. \n*'''Firefox / Safari''': sprémme 'o buttóne maiuscole e ffà clic ncopp'a ''Recarreca'', o pure spremme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' ncopp'a Mac)\n*'''Google Chrome''': spremme ''Ctrl-Shift-R'' (''⌘-Shift-R'' ncopp'a nu Mac)\n*'''Internet Explorer''': spremme 'o buttóne ''Ctrl'' pe' tramente ca faie click ncopp'a ''Refresh'', o pure spremmere ''Ctrl-F5''\n*'''Opera''': sbacanta tutt' 'a cache addò menu ''Strumiente → Preferenze''",
"usercssyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o CSS nuovo apprimma d' 'o sarvà.",
"userjsyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o JavaScript nuovo apprimma d' 'o sarvà.",
"usercsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS perzunale. 'E cagnamiente nun so' state ancora sarvate!'''",
"watchlistedit-clear-done": "L'elenco 'e paggene cuntrullate vuosto è stat'abbacantato.",
"watchlistedit-clear-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
"watchlistedit-too-many": "Ce stanno troppe paggene 'a veré ccà.",
- "watchlisttools-clear": "Abbacanta l'elenco 'e paggene cuntrullate",
+ "watchlisttools-clear": "Sbacanta l'elenco 'e paggene cuntrullate",
"watchlisttools-view": "Vide 'e cagnamiente mpurtante",
"watchlisttools-edit": "Vide e cagna l'elenco 'e paggene cuntrullate",
"watchlisttools-raw": "Cagna l'elenco 'e paggene cuntrullate ncruro",
"revdelete-uname-unhid": "brukarnamn gjort synleg",
"revdelete-restricted": "la til avgrensingar for administratorar",
"revdelete-unrestricted": "fjerna avgrensingar for administratorar",
+ "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} for $5 $6",
"logentry-suppress-reblock": "$1 {{GENDER:$2|endra}} blokkeringsinnstillingar for {{GENDER:$4|$3}} med opphøyrstid $5 $6",
"logentry-move-move": "$1 {{GENDER:$2|flytte}} sida $3 til $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|flytte}} sida $3 til $4 utan å lata etter ei omdirigering",
"Rhcastilhos",
"Claudio Emanuel Weiler",
"Almondega",
- "Eduardo Addad de Oliveira"
+ "Eduardo Addad de Oliveira",
+ "Raphaelras"
]
},
"tog-underline": "Sublinhar links:",
"contributions": "Contribuições {{GENDER:$1|do usuário|da usuária|do(a) usuário(a)}}",
"contributions-title": "Contribuições {{GENDER:$1|do usuário|da usuária|do(a) usuário(a)}} $1",
"mycontris": "Contribuições",
+ "anoncontribs": "Contribuições",
"contribsub2": "Para {{GENDER:$3|$1}} ($2)",
"contributions-userdoesnotexist": "A conta de usuário \"$1\" não está registrada.",
"nocontribs": "Não foram encontradas mudanças com este critério.",
"unblock-summary": "{{doc-specialpagesummary|unblock}}",
"blockip": "Used as the text of a link in the sidebar toolbox. Clicking this link takes you to [[Special:Block]], with a relevant username or IP address (e.g. \"Username\" on [[User talk:Username]], [[Special:Contributions/Username]], etc.) already filled in.\n\nParameters:\n* $1 - username, for GENDER support\n{{Identical|Block user}}",
"blockip-legend": "Legend/Header for the fieldset around the input form of [[Special:Block]].\n\n{{Identical|Block user}}",
- "blockiptext": "Used in the {{msg-mw|Blockip}} form in [[Special:Block]].\n\nRefers to {{msg-mw|Policy-url}}.\n\nThis message may follow the message {{msg-mw|Ipb-otherblocks-header}} and other block messages.\n\nSee also:\n* {{msg-mw|Unblockiptext}}",
+ "blockiptext": "Used in the {{msg-mw|Blockip}} form in [[Special:Block]].\n\nRefers to {{msg-mw|Policy-url}}.\n\nThis message may follow the message {{msg-mw|Ipb-otherblocks-header}} and other block messages.\n\nParameters:\n* $1 - CIDR suffix of the largest allowed IPv4 block (as an integer)\n* $2 - CIDR suffix of the largest allowed IPv6 block (as an integer)\n\nSee also:\n* {{msg-mw|Unblockiptext}}",
"ipaddressorusername": "{{Identical|IP address or username}}",
"ipbexpiry": "{{Identical|Expiry}}",
"ipbreason": "Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].\n\n{{Identical|Reason}}",
"Nzeemin",
"INS Pirat",
"Краснорядцева Елена",
- "Frhdkazan"
+ "Frhdkazan",
+ "Ядерный Трамвай"
]
},
"tog-underline": "Подчёркивание ссылок:",
"upload-form-label-select-file": "Выбрать файл",
"upload-form-label-infoform-title": "Подробности",
"upload-form-label-infoform-name": "Имя",
+ "upload-form-label-infoform-name-tooltip": "Уникальный описательный заголовок для файла, который будет сохранён как его название. Можете использовать простой язык и пробелы. Не указывайте расширение.",
"upload-form-label-infoform-description": "Описание",
+ "upload-form-label-infoform-description-tooltip": "Коротко опишите всё самое важное об этом произведении. Для фото — укажите, что главное изображено, обстоятельства съёмки или место.",
"upload-form-label-usage-title": "Использование",
"upload-form-label-usage-filename": "Имя файла",
"foreign-structured-upload-form-label-own-work": "Это моя собственная работа",
"expand_templates_preview": "Предпросмотр",
"expand_templates_preview_fail_html": "<em>Поскольку на сайте {{SITENAME}} с включенным «сырым» HTML произошла потеря данных сессии, предварительный просмотр скрыт в качестве меры предосторожности против JavaScript-атак.</em>\n\n<strong>Если это была правомерная попытка предварительного просмотра, пожалуйста, попробуйте ещё раз.</strong>\nЕсли у вас по-прежнему не получается, попробуйте [[Special:UserLogout|завершить сеанс работы]] и авторизоваться ещё раз.",
"expand_templates_preview_fail_html_anon": "<em>Поскольку на сайте {{SITENAME}} включен «сырой» HTML, а вы не авторизовались, предварительный просмотр скрыт в качестве меры предосторожности против JavaScript-атак.</em>\n\n<strong>Если это правомерная попытка предварительного просмотра, пожалуйста, [[Special:UserLogin|войдите]] и попробуйте ещё раз.",
+ "expand_templates_input_missing": "Вы должны вставить хоть какой-то текст.",
"pagelanguage": "Выбор языка страницы",
"pagelang-name": "Страница",
"pagelang-language": "Язык",
"grunt-jsonlint": "1.0.7",
"grunt-karma": "0.12.1",
"karma": "0.13.19",
- "karma-chrome-launcher": "0.2.0",
- "karma-firefox-launcher": "0.1.6",
+ "karma-chrome-launcher": "0.2.2",
+ "karma-firefox-launcher": "0.1.7",
"karma-qunit": "0.1.5",
"qunitjs": "1.18.0"
}
*/
( function ( $, mw ) {
-// Cached access key prefix for used browser
-var cachedAccessKeyPrefix,
+// Cached access key modifiers for used browser
+var cachedAccessKeyModifiers,
// Whether to use 'test-' instead of correct prefix (used for testing)
useTestPrefix = false,
labelable = 'button, input, textarea, keygen, meter, output, progress, select';
/**
- * Get the prefix for the access key for browsers that don't support accessKeyLabel.
+ * Find the modifier keys that need to be pressed together with the accesskey to trigger the input.
*
+ * The result is dependant on the ua paramater or the current platform.
* For browsers that support accessKeyLabel, #getAccessKeyLabel never calls here.
+ * Valid key values that are returned can be: ctrl, alt, option, shift, esc
*
* @private
* @param {Object} [ua] An object with a 'userAgent' and 'platform' property.
- * @return {string} Access key prefix
+ * @return {Array} Array with 0 or more of the string values: ctrl, option, alt, shift, esc
*/
-function getAccessKeyPrefix( ua ) {
+function getAccessKeyModifiers( ua ) {
// use cached prefix if possible
- if ( !ua && cachedAccessKeyPrefix ) {
- return cachedAccessKeyPrefix;
+ if ( !ua && cachedAccessKeyModifiers ) {
+ return cachedAccessKeyModifiers;
}
var profile = $.client.profile( ua ),
- accessKeyPrefix = 'alt-';
+ accessKeyModifiers = [ 'alt' ];
// Classic Opera on any platform
if ( profile.name === 'opera' && profile.versionNumber < 15 ) {
- accessKeyPrefix = 'shift-esc-';
+ accessKeyModifiers = [ 'shift', 'esc' ];
// Chrome and modern Opera on any platform
} else if ( profile.name === 'chrome' || profile.name === 'opera' ) {
- accessKeyPrefix = (
+ accessKeyModifiers = (
profile.platform === 'mac'
// Chrome on Mac
- ? 'ctrl-option-'
+ ? [ 'ctrl', 'option' ]
// Chrome on Windows or Linux
// (both alt- and alt-shift work, but alt with E, D, F etc does not
// work since they are browser shortcuts)
- : 'alt-shift-'
+ : [ 'alt', 'shift' ]
);
// Non-Windows Safari with webkit_version > 526
&& profile.name === 'safari'
&& profile.layoutVersion > 526
) {
- accessKeyPrefix = 'ctrl-alt-';
+ accessKeyModifiers = [ 'ctrl', 'alt' ];
// Safari/Konqueror on any platform, or any browser on Mac
// (but not Safari on Windows)
|| profile.platform === 'mac'
|| profile.name === 'konqueror' )
) {
- accessKeyPrefix = 'ctrl-';
+ accessKeyModifiers = [ 'ctrl' ];
// Firefox/Iceweasel 2.x and later
} else if ( ( profile.name === 'firefox' || profile.name === 'iceweasel' )
&& profile.versionBase > '1'
) {
- accessKeyPrefix = 'alt-shift-';
+ accessKeyModifiers = [ 'alt', 'shift' ];
}
- // cache prefix
+ // cache modifiers
if ( !ua ) {
- cachedAccessKeyPrefix = accessKeyPrefix;
+ cachedAccessKeyModifiers = accessKeyModifiers;
}
- return accessKeyPrefix;
+ return accessKeyModifiers;
}
/**
* Get the access key label for an element.
*
* Will use native accessKeyLabel if available (currently only in Firefox 8+),
- * falls back to #getAccessKeyPrefix.
+ * falls back to #getAccessKeyModifiers.
*
* @private
* @param {HTMLElement} element Element to get the label for
if ( !useTestPrefix && element.accessKeyLabel ) {
return element.accessKeyLabel;
}
- return ( useTestPrefix ? 'test-' : getAccessKeyPrefix() ) + element.accessKey;
+ return ( useTestPrefix ? 'test' : getAccessKeyModifiers().join( '-' ) ) + '-' + element.accessKey;
}
/**
};
/**
- * Exposed for testing.
+ * getAccessKeyModifiers
+ *
+ * @method updateTooltipAccessKeys_getAccessKeyModifiers
+ * @inheritdoc #getAccessKeyModifiers
+ */
+$.fn.updateTooltipAccessKeys.getAccessKeyModifiers = getAccessKeyModifiers;
+
+/**
+ * getAccessKeyLabel
+ *
+ * @method updateTooltipAccessKeys_getAccessKeyLabel
+ * @inheritdoc #getAccessKeyLabel
+ */
+$.fn.updateTooltipAccessKeys.getAccessKeyLabel = getAccessKeyLabel;
+
+/**
+ * getAccessKeyPrefix
*
* @method updateTooltipAccessKeys_getAccessKeyPrefix
- * @inheritdoc #getAccessKeyPrefix
+ * @deprecated 1.27 Use #getAccessKeyModifiers
*/
-$.fn.updateTooltipAccessKeys.getAccessKeyPrefix = getAccessKeyPrefix;
+$.fn.updateTooltipAccessKeys.getAccessKeyPrefix = function ( ua ) {
+ return getAccessKeyModifiers( ua ).join( '-' ) + '-';
+};
/**
* Switch test mode on and off.
mw.ForeignStructuredUpload.BookletLayout.parent.prototype.initialize.call( this )
.done( function () {
// Point the CategorySelector to the right wiki
- this.upload.apiPromise.done( function ( api ) {
+ this.upload.getApi().done( function ( api ) {
// If this is a ForeignApi, it will have a apiUrl, otherwise we don't need to do anything
if ( api.apiUrl ) {
// Can't reuse the same object, CategorySelector calls #abort on its mw.Api instance
* or to local uploads if no foreign target is configured.
*/
+ /**
+ * @inheritdoc
+ */
+ ForeignUpload.prototype.getApi = function () {
+ return this.apiPromise;
+ };
+
/**
* Override from mw.Upload to make sure the API info is found and allowed
*/
*/
mw.Upload.BookletLayout.prototype.initialize = function () {
var
- apiPromise,
booklet = this,
deferred = $.Deferred();
this.upload = this.createUpload();
this.setPage( 'upload' );
- apiPromise = this.upload.apiPromise || $.Deferred().resolve( this.upload.api );
- apiPromise.done( function ( api ) {
+ this.upload.getApi().done( function ( api ) {
// If the user can't upload anything, don't give them the option to.
api.getUserInfo().done( function ( userInfo ) {
if ( userInfo.rights.indexOf( 'upload' ) === -1 ) {
UP = Upload.prototype;
+ /**
+ * Get the mw.Api instance used by this Upload object.
+ *
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {mw.Api} return.done.api
+ */
+ UP.getApi = function () {
+ return $.Deferred().resolve( this.api ).promise();
+ };
+
/**
* Set the text of the file page, to be created on file upload.
*