'TidyUpBug37714' => __DIR__ . '/maintenance/tidyUpBug37714.php',
'TiffHandler' => __DIR__ . '/includes/media/Tiff.php',
'TimestampException' => __DIR__ . '/includes/exception/TimestampException.php',
+ 'Timing' => __DIR__ . '/includes/libs/Timing.php',
'Title' => __DIR__ . '/includes/Title.php',
'TitleArray' => __DIR__ . '/includes/TitleArray.php',
'TitleArrayFromResult' => __DIR__ . '/includes/TitleArrayFromResult.php',
"ext-iconv": "*",
"liuggio/statsd-php-client": "1.0.16",
"mediawiki/at-ease": "1.1.0",
- "oojs/oojs-ui": "0.13.0",
+ "oojs/oojs-ui": "0.13.1",
"oyejorge/less.php": "1.7.0.9",
"php": ">=5.3.3",
"psr/log": "1.0.0",
define( 'EDIT_MINOR', 4 );
define( 'EDIT_SUPPRESS_RC', 8 );
define( 'EDIT_FORCE_BOT', 16 );
-define( 'EDIT_DEFER_UPDATES', 32 );
+define( 'EDIT_DEFER_UPDATES', 32 ); // Unused since 1.27
define( 'EDIT_AUTOSUMMARY', 64 );
/**@}*/
$linkText = $text;
$linkTarget = Linker::normalizeSubpageLink( $title, $match[1], $linkText );
- $target = Title::newFromText( $linkTarget );
- if ( $target ) {
- if ( $target->getText() == '' && !$target->isExternal()
- && !$local && $title
- ) {
- $newTarget = clone $title;
- $newTarget->setFragment( '#' . $target->getFragment() );
- $target = $newTarget;
- }
+ if ( $linkTarget !== null ) {
+ $target = Title::newFromText( $linkTarget );
+ if ( $target ) {
+ if ( $target->getText() == '' && !$target->isExternal()
+ && !$local && $title
+ ) {
+ $newTarget = clone $title;
+ $newTarget->setFragment( '#' . $target->getFragment() );
+ $target = $newTarget;
+ }
- $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
+ $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
+ }
}
}
if ( $thelink ) {
* @since 1.26
*/
public function doPostOutputShutdown( $mode = 'normal' ) {
+ $timing = $this->context->getTiming();
+ $timing->mark( 'requestShutdown' );
+
// Show visible profiling data if enabled (which cannot be post-send)
Profiler::instance()->logDataPageOutputOnly();
$options['httpOnly'] );
}
}
+
+ /**
+ * Unset a browser cookie.
+ * This sets the cookie with an empty value and an expiry set to a time in the past,
+ * which will cause the browser to remove any cookie with the given name, domain and
+ * path from its cookie store. Options other than these (and prefix) have no effect.
+ * @param string $name Cookie name
+ * @param array $options Cookie options, see {@link setCookie()}
+ * @since 1.27
+ */
+ public function clearCookie( $name, $options = array() ) {
+ $this->setCookie( $name, '', time() - 31536000 /* 1 year */, $options );
+ }
}
/**
// Set a warning if a deprecated parameter has been passed
if ( $deprecated && $value !== false ) {
$this->setWarning( "The $encParamName parameter has been deprecated." );
+
+ $feature = $encParamName;
+ $m = $this;
+ while ( !$m->isMain() ) {
+ $p = $m->getParent();
+ $name = $m->getModuleName();
+ $param = $p->encodeParamName( $p->getModuleManager()->getModuleGroup( $name ) );
+ $feature = "{$param}={$name}&{$feature}";
+ $m = $p;
+ }
+ $this->logFeatureUsage( $feature );
}
} elseif ( $required ) {
$this->dieUsageMsg( array( 'missingparam', $paramName ) );
// Deprecated parameters
if ( $params['watch'] ) {
- $this->logFeatureUsage( 'action=delete&watch' );
$watch = 'watch';
} elseif ( $params['unwatch'] ) {
- $this->logFeatureUsage( 'action=delete&unwatch' );
$watch = 'unwatch';
} else {
$watch = $params['watchlist'];
// Deprecated parameters
if ( $params['watch'] ) {
- $this->logFeatureUsage( 'action=edit&watch' );
$watch = true;
} elseif ( $params['unwatch'] ) {
- $this->logFeatureUsage( 'action=edit&unwatch' );
$watch = false;
}
$retval = array();
if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
- if ( !isset( $prop['parsetree'] ) ) {
- $this->logFeatureUsage( 'action=expandtemplates&generatexml' );
- }
-
$wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
$dom = $wgParser->preprocessToDom( $params['text'] );
if ( is_callable( array( $dom, 'saveXML' ) ) ) {
$watch = $params['watchlist'];
} elseif ( $params['watch'] ) {
$watch = 'watch';
- $this->logFeatureUsage( 'action=move&watch' );
} elseif ( $params['unwatch'] ) {
$watch = 'unwatch';
- $this->logFeatureUsage( 'action=move&unwatch' );
}
// Watch pages
}
if ( is_array( $params['querymodules'] ) ) {
- $this->logFeatureUsage( 'action=paraminfo&querymodules' );
$queryModules = $params['querymodules'];
foreach ( $queryModules as $m ) {
$modules[] = 'query+' . $m;
}
if ( is_array( $params['formatmodules'] ) ) {
- $this->logFeatureUsage( 'action=paraminfo&formatmodules' );
$formatModules = $params['formatmodules'];
foreach ( $formatModules as $m ) {
$modules[] = $m;
}
if ( $params['mainmodule'] ) {
- $this->logFeatureUsage( 'action=paraminfo&mainmodule' );
$res['mainmodule'] = $this->getModuleInfo( $this->getMain() );
}
if ( $params['pagesetmodule'] ) {
- $this->logFeatureUsage( 'action=paraminfo&pagesetmodule' );
$pageSet = new ApiPageSet( $this->getMain()->getModuleManager()->getModule( 'query' ) );
$res['pagesetmodule'] = $this->getModuleInfo( $pageSet );
unset( $res['pagesetmodule']['name'] );
}
if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
- if ( !isset( $prop['parsetree'] ) ) {
- $this->logFeatureUsage( 'action=parse&generatexml' );
- }
if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
$this->dieUsage( "parsetree is only supported for wikitext content", "notwikitext" );
}
$cascade = $params['cascade'];
- if ( $params['watch'] ) {
- $this->logFeatureUsage( 'action=protect&watch' );
- }
$watch = $params['watch'] ? 'watch' : $params['watchlist'];
$this->setWatch( $watch, $titleObj, 'watchdefault' );
}
$startsortkey = pack( 'H*', $params['starthexsortkey'] );
} else {
- if ( $params['startsortkey'] !== null ) {
- $this->logFeatureUsage( 'list=categorymembers&cmstartsortkey' );
- }
$startsortkey = $params['startsortkey'];
}
if ( $params['endsortkeyprefix'] !== null ) {
}
$endsortkey = pack( 'H*', $params['endhexsortkey'] );
} else {
- if ( $params['endsortkey'] !== null ) {
- $this->logFeatureUsage( 'list=categorymembers&cmendsortkey' );
- }
$endsortkey = $params['endsortkey'];
}
// Handle deprecated param
$this->requireMaxOneParameter( $params, 'url', 'prop' );
if ( $params['url'] ) {
- $this->logFeatureUsage( 'prop=iwlinks&iwurl' );
$prop = array( 'url' => 1 );
}
// Handle deprecated param
$this->requireMaxOneParameter( $params, 'url', 'prop' );
if ( $params['url'] ) {
- $this->logFeatureUsage( 'prop=langlinks&llurl' );
$prop = array( 'url' => 1 );
}
$this->requireMaxOneParameter( $params, 'filterredir', 'redirect' );
}
- if ( $params['redirect'] ) {
- $this->logFeatureUsage( "list=random&rnredirect=" );
- }
-
if ( isset( $params['continue'] ) ) {
$cont = explode( '|', $params['continue'] );
$this->dieContinueUsageIf( count( $cont ) != 4 );
}
}
if ( $this->fld_parsetree || ( $this->fld_content && $this->generateXML ) ) {
- if ( !$this->fld_parsetree ) {
- $this->logFeatureUsage( 'action=query&prop=revisions+base&generatexml' );
- }
if ( $content ) {
if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
$t = $content->getNativeData(); # note: don't set $text
// Alias sessionkey to filekey, but give an existing filekey precedence.
if ( !$params['filekey'] && $params['sessionkey'] ) {
- $this->logFeatureUsage( 'prop=stashimageinfo&siisessionkey' );
$params['filekey'] = $params['sessionkey'];
}
$show = $this->params['show'];
if ( $this->params['toponly'] ) { // deprecated/old param
- $this->logFeatureUsage( 'list=usercontribs&uctoponly' );
$show[] = 'top';
}
if ( !is_null( $show ) ) {
// Copy the session key to the file key, for backward compatibility.
if ( !$this->mParams['filekey'] && $this->mParams['sessionkey'] ) {
- $this->logFeatureUsage( 'action=upload&sessionkey' );
$this->mParams['filekey'] = $this->mParams['sessionkey'];
}
// Deprecated parameters
if ( $this->mParams['watch'] ) {
- $this->logFeatureUsage( 'action=upload&watch' );
$watch = true;
}
);
}
- $this->logFeatureUsage( 'action=watch&title' );
$title = Title::newFromText( $params['title'] );
if ( !$title || !$title->isWatchable() ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
"apihelp-query+watchlist-paramvalue-prop-loginfo": "Engade información do rexistro cando sexa axeitado.",
"apihelp-query+watchlist-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
"apihelp-query+watchlist-param-type": "Que tipos de cambios mostrar:",
+ "apihelp-query+watchlist-paramvalue-type-edit": "Edicións comúns a páxinas.",
+ "apihelp-query+watchlist-paramvalue-type-external": "Cambios externos.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Creacións de páxinas.",
+ "apihelp-query+watchlist-paramvalue-type-log": "Entradas do rexistro",
"apihelp-query+watchlist-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
"apihelp-query+watchlist-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
"apihelp-query+watchlist-example-simple": "Listar a última revisión das páxinas recentemente modificadas da lista de vixiancia do usuario actual.",
"apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
"apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
"apihelp-feedrecentchanges-param-hideliu": "Nascondi le modifiche apportate dagli utenti registrati.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Nascondi modifiche verificate.",
"apihelp-feedrecentchanges-param-hidemyself": "Nasconde le modifiche effettuate dall'utente attuale.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtra per etichetta.",
+ "apihelp-feedrecentchanges-param-target": "Mostra solo le modifiche alle pagine collegate da questa pagina.",
"apihelp-feedrecentchanges-param-showlinkedto": "Mostra solo le modifiche alle pagine collegate a quella specificata.",
"apihelp-feedrecentchanges-example-simple": "Mostra le ultime modifiche.",
"apihelp-feedrecentchanges-example-30days": "Mostra le modifiche degli ultimi 30 giorni.",
+ "apihelp-feedwatchlist-param-linktosections": "Collega direttamente alla sezione modificata, se possibile.",
+ "apihelp-filerevert-description": "Ripristina un file ad una versione precedente.",
+ "apihelp-filerevert-param-filename": "Nome del file di destinazione, senza il prefisso 'File:'.",
+ "apihelp-filerevert-example-revert": "Ripristina <kbd>Wiki.png</kbd> alla versione del <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-imagerotate-description": "Ruota una o più immagini.",
+ "apihelp-imagerotate-param-rotation": "Gradi di rotazione dell'immagine in senso orario.",
+ "apihelp-imagerotate-example-simple": "Ruota <kbd>File:Example.png</kbd> di <kbd>90</kbd> gradi.",
+ "apihelp-imagerotate-example-generator": "Ruota tutte le immagini in <kbd>Category:Flip</kbd> di <kbd>180</kbd> gradi.",
+ "apihelp-import-param-summary": "Oggetto dell'importazione.",
+ "apihelp-import-param-xml": "File XML caricato.",
+ "apihelp-import-param-interwikisource": "Per importazioni interwiki: wiki da cui importare.",
+ "apihelp-import-param-interwikipage": "Per importazioni interwiki: pagina da importare.",
+ "apihelp-import-param-fullhistory": "Per importazioni interwiki: importa l'intera cronologia, non solo la versione attuale.",
+ "apihelp-import-param-templates": "Per importazioni interwiki: importa anche tutti i template inclusi.",
+ "apihelp-import-example-import": "Importa [[meta:Help:ParserFunctions]] nel namespace 100 con cronologia completa.",
"apihelp-login-param-name": "Nome utente.",
"apihelp-login-param-password": "Password.",
"apihelp-login-param-domain": "Dominio (opzionale).",
"apihelp-edit-param-redirect": "Автоматически разрешать редиректы.",
"apihelp-edit-param-contentformat": "Формат сериализации содержимого, используемый для ввода текста.",
"apihelp-edit-example-edit": "Редактировать страницу",
+ "apihelp-edit-example-prepend": "Добавить магическое слово <kbd>__NOTOC__</kbd> в начало страницы.",
+ "apihelp-edit-example-undo": "Отменить изменения с 13579 по 13585 с добавлением автоматического описания правки.",
"apihelp-emailuser-description": "Письмо участнику",
"apihelp-emailuser-param-target": "Адресат электронного письма",
"apihelp-emailuser-param-subject": "Заголовок темы.",
return $this->getContext()->getSkin();
}
+ /**
+ * Get the Timing object
+ *
+ * @since 1.27
+ * @return Timing
+ */
+ public function getTiming() {
+ return $this->getContext()->getTiming();
+ }
+
/**
* Get the Stats object
*
*/
private $stats;
+ /**
+ * @var Timing
+ */
+ private $timing;
+
/**
* Constructor
* @param IContextSource $context Context to inherit from
}
}
+ /**
+ * Get the timing object
+ *
+ * @return Timing
+ */
+ public function getTiming() {
+ if ( !is_null( $this->timing ) ) {
+ return $this->timing;
+ } else {
+ return $this->getContext()->getTiming();
+ }
+ }
+
/**
* Set the WebRequest object
*
*/
public function getStats();
+ /**
+ * Get the timing object
+ *
+ * @since 1.27
+ * @return Timing
+ */
+ public function getTiming();
+
/**
* Get a Message object with context set. See wfMessage for parameters.
*
*/
private $stats;
+ /**
+ * @var Timing
+ */
+ private $timing;
+
/**
* @var Config
*/
return $this->stats;
}
+ /**
+ * Get the timing object
+ *
+ * @return Timing
+ */
+ public function getTiming() {
+ if ( $this->timing === null ) {
+ $this->timing = new Timing();
+ }
+ return $this->timing;
+ }
+
/**
* Set the Title object
*
$msg = $error;
$error = array();
}
- $error = $this->msg( $msg, $error )->parse();
+ // if the error is already a message object, don't use it as a message key
+ if ( !$msg instanceof Message ) {
+ $error = $this->msg( $msg, $error )->parse();
+ } else {
+ $error = $msg->parse();
+ }
$error = new OOUI\HtmlSnippet( $error );
}
"config-nofile": "Non se puido atopar o ficheiro \"$1\". Se cadra, foi borrado.",
"config-extension-link": "Sabía que o seu wiki soporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensións]?\n\nPode explorar as [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensións por categoría] ou a [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensións] para ollar a lista completa de extensións.",
"mainpagetext": "<strong>MediaWiki instalouse correctamente.</strong>",
- "mainpagedocfooter": "Consulte a [//meta.wikimedia.org/wiki/Help:Contents guía de usuario] para obter máis información sobre como usar o software wiki.\n\n== Primeiros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista das opcións de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localice MediaWiki á súa lingua]"
+ "mainpagedocfooter": "Consulte a [//meta.wikimedia.org/wiki/Help:Contents guía de usuario] para obter máis información sobre como usar o software wiki.\n\n== Primeiros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista das opcións de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localice MediaWiki á súa lingua]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda como combater a publicidade na súa wiki]"
}
--- /dev/null
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * An interface to help developers measure the performance of their applications.
+ * This interface closely matches the W3C's User Timing specification.
+ * The key differences are:
+ *
+ * - The reference point for all measurements which do not explicitly specify
+ * a start time is $_SERVER['REQUEST_TIME_FLOAT'], not navigationStart.
+ * - Successive calls to mark() and measure() with the same entry name cause
+ * the previous entry to be overwritten. This ensures that there is a 1:1
+ * mapping between names and entries.
+ * - Because there is a 1:1 mapping, instead of getEntriesByName(), we have
+ * getEntryByName().
+ *
+ * The in-line documentation incorporates content from the User Timing Specification
+ * http://www.w3.org/TR/user-timing/
+ * Copyright © 2013 World Wide Web Consortium, (MIT, ERCIM, Keio, Beihang).
+ * http://www.w3.org/Consortium/Legal/2015/doc-license
+ *
+ * @since 1.27
+ */
+class Timing {
+
+ /** @var array[] */
+ private $entries = array();
+
+ public function __construct() {
+ $this->clearMarks();
+ }
+
+ /**
+ * Store a timestamp with the associated name (a "mark")
+ *
+ * @param string $markName The name associated with the timestamp.
+ * If there already exists an entry by that name, it is overwritten.
+ * @return array The mark that has been created.
+ */
+ public function mark( $markName ) {
+ $this->entries[$markName] = array(
+ 'name' => $markName,
+ 'entryType' => 'mark',
+ 'startTime' => microtime( true ),
+ 'duration' => 0,
+ );
+ return $this->entries[$markName];
+ }
+
+ /**
+ * @param string $markName The name of the mark that should
+ * be cleared. If not specified, all marks will be cleared.
+ */
+ public function clearMarks( $markName = null ) {
+ if ( $markName !== null ) {
+ unset( $this->entries[$markName] );
+ } else {
+ $this->entries = array(
+ 'requestStart' => array(
+ 'name' => 'requestStart',
+ 'entryType' => 'mark',
+ 'startTime' => isset( $_SERVER['REQUEST_TIME_FLOAT'] )
+ ? $_SERVER['REQUEST_TIME_FLOAT']
+ : $_SERVER['REQUEST_TIME'],
+ 'duration' => 0,
+ ),
+ );
+ }
+ }
+
+ /**
+ * This method stores the duration between two marks along with
+ * the associated name (a "measure").
+ *
+ * If neither the startMark nor the endMark argument is specified,
+ * measure() will store the duration from $_SERVER['REQUEST_TIME_FLOAT'] to
+ * the current time.
+ * If the startMark argument is specified, but the endMark argument is not
+ * specified, measure() will store the duration from the most recent
+ * occurrence of the start mark to the current time.
+ * If both the startMark and endMark arguments are specified, measure()
+ * will store the duration from the most recent occurrence of the start
+ * mark to the most recent occurrence of the end mark.
+ *
+ * @param string $measureName
+ * @param string $startMark
+ * @param string $endMark
+ * @return array The measure that has been created.
+ */
+ public function measure( $measureName, $startMark = 'requestStart', $endMark = null ) {
+ $start = $this->getEntryByName( $startMark );
+ $startTime = $start['startTime'];
+
+ if ( $endMark ) {
+ $end = $this->getEntryByName( $endMark );
+ $endTime = $end['startTime'];
+ } else {
+ $endTime = microtime( true );
+ }
+
+ $this->entries[$measureName] = array(
+ 'name' => $measureName,
+ 'entryType' => 'measure',
+ 'startTime' => $startTime,
+ 'duration' => $endTime - $startTime,
+ );
+
+ return $this->entries[$measureName];
+ }
+
+ /**
+ * Sort entries in chronological order with respect to startTime.
+ */
+ private function sortEntries() {
+ uasort( $this->entries, function ( $a, $b ) {
+ return 10000 * ( $a['startTime'] - $b['startTime'] );
+ } );
+ }
+
+ /**
+ * @return array[] All entries in chronological order.
+ */
+ public function getEntries() {
+ $this->sortEntries();
+ return $this->entries;
+ }
+
+ /**
+ * @param string $entryType
+ * @return array[] Entries (in chronological order) that have the same value
+ * for the entryType attribute as the $entryType parameter.
+ */
+ public function getEntriesByType( $entryType ) {
+ $this->sortEntries();
+ $entries = array();
+ foreach ( $this->entries as $entry ) {
+ if ( $entry['entryType'] === $entryType ) {
+ $entries[] = $entry;
+ }
+ }
+ return $entries;
+ }
+
+ /**
+ * @param string $name
+ * @return array|null Entry named $name or null if it does not exist.
+ */
+ public function getEntryByName( $name ) {
+ return isset( $this->entries[$name] ) ? $this->entries[$name] : null;
+ }
+}
* Giving 0 indicates the new page flag should be set on.
* @param bool $lastRevIsRedirect If given, will optimize adding and
* removing rows in redirect table.
- * @return bool True on success, false on failure
+ * @return bool Success; false if the page row was missing or page_latest changed
*/
public function updateRevisionOn( $dbw, $revision, $lastRevision = null,
$lastRevIsRedirect = null
$changed = !$content->equals( $old_content );
if ( $changed ) {
- $dbw->begin( __METHOD__ );
-
$prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
$status->merge( $prepStatus );
if ( !$status->isOK() ) {
- $dbw->rollback( __METHOD__ );
+ return $status;
+ }
+
+ $dbw->begin( __METHOD__ );
+ // Get the latest page_latest value while locking it.
+ // Do a CAS style check to see if it's the same as when this method
+ // started. If it changed then bail out before touching the DB.
+ $latestNow = $this->lock();
+ if ( $latestNow != $oldid ) {
+ $dbw->commit( __METHOD__ );
+ // Page updated or deleted in the mean time
+ $status->fatal( 'edit-conflict' );
return $status;
}
- $revisionId = $revision->insertOn( $dbw );
- // Update page.
- // We check for conflicts by comparing $oldid with the current latest revision ID.
- $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
+ // At this point we are now comitted to returning an OK
+ // status unless some DB query error or other exception comes up.
+ // This way callers don't have to call rollback() if $status is bad
+ // unless they actually try to catch exceptions (which is rare).
- if ( !$ok ) {
- // Belated edit conflict! Run away!!
- $status->fatal( 'edit-conflict' );
+ $revisionId = $revision->insertOn( $dbw );
+ // Update page_latest and friends to reflect the new revision
+ if ( !$this->updateRevisionOn( $dbw, $revision, null, $oldIsRedirect ) ) {
$dbw->rollback( __METHOD__ );
-
- return $status;
+ throw new MWException( "Failed to update page row to use new revision." );
}
Hooks::run( 'NewRevisionFromEditComplete',
// Create new article
$status->value['new'] = true;
- $dbw->begin( __METHOD__ );
-
$prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
$status->merge( $prepStatus );
-
if ( !$status->isOK() ) {
- $dbw->rollback( __METHOD__ );
-
return $status;
}
- $status->merge( $prepStatus );
+ $dbw->begin( __METHOD__ );
- // Add the page record; stake our claim on this title!
- // This will return false if the article already exists
+ // Add the page record unless one already exists for the title
$newid = $this->insertOn( $dbw );
-
if ( $newid === false ) {
- $dbw->rollback( __METHOD__ );
+ $dbw->commit( __METHOD__ ); // nothing inserted
$status->fatal( 'edit-already-exists' );
- return $status;
+ return $status; // nothing done
}
+ // At this point we are now comitted to returning an OK
+ // status unless some DB query error or other exception comes up.
+ // This way callers don't have to call rollback() if $status is bad
+ // unless they actually try to catch exceptions (which is rare).
+
// Save the revision text...
$revision = new Revision( array(
'page' => $newid,
}
// Update the page record with revision data
- $this->updateRevisionOn( $dbw, $revision, 0 );
+ if ( !$this->updateRevisionOn( $dbw, $revision, 0 ) ) {
+ $dbw->rollback( __METHOD__ );
+ throw new MWException( "Failed to update page row to use new revision." );
+ }
Hooks::run( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
foreach ( $temp_terms as $t ) {
$searchon .= ( $terms[1] == '-' ? ' ~' : ' & ' ) . $this->escapeTerm( $t );
}
- }
- else {
+ } else {
$searchon .= ( $terms[1] == '-' ? ' ~' : ' & ' ) . $this->escapeTerm( $terms[2] );
}
if ( !empty( $terms[3] ) ) {
}
if ( strtolower( $terms[2] ) === 'and' ) {
$searchstring .= ' & ';
- }
- elseif ( strtolower( $terms[2] ) === 'or' || $terms[2] === '|' ) {
+ } elseif ( strtolower( $terms[2] ) === 'or' || $terms[2] === '|' ) {
$searchstring .= ' | ';
- }
- elseif ( strtolower( $terms[2] ) === 'not' ) {
+ } elseif ( strtolower( $terms[2] ) === 'not' ) {
$searchstring .= ' & !';
- }
- else {
+ } else {
$searchstring .= " & $terms[2]";
}
}
$query = "SELECT page_id, page_namespace, page_title, 0 AS score " .
"FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
"AND r.rev_text_id = c.old_id AND 1=0";
- }
- else {
+ } else {
$m = array();
if ( preg_match_all( "/'([^']+)'/", $top, $m, PREG_SET_ORDER ) ) {
foreach ( $m as $terms ) {
}
$query = "SELECT page_id, page_namespace, page_title, " .
- "ts_rank($fulltext, to_tsquery($searchstring), 5) AS score " .
- "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
- "AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery($searchstring)";
+ "ts_rank($fulltext, to_tsquery($searchstring), 5) AS score " .
+ "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
+ "AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery($searchstring)";
}
# # Namespaces - defaults to 0
return true;
}
- try {
- $this->mUserName = $request->getVal( 'wpName', $this->getUser()->getName() );
- $this->mDomain = $wgAuth->getDomain();
+ $this->mUserName = $request->getVal( 'wpName', $this->getUser()->getName() );
+ $this->mDomain = $wgAuth->getDomain();
- if ( !$wgAuth->allowPasswordChange() ) {
- throw new ErrorPageError( 'changepassword', 'resetpass_forbidden' );
- }
+ if ( !$wgAuth->allowPasswordChange() ) {
+ throw new ErrorPageError( 'changepassword', 'resetpass_forbidden' );
+ }
- $this->attemptReset( $data['Password'], $data['NewPassword'], $data['Retype'] );
+ $status = $this->attemptReset( $data['Password'], $data['NewPassword'], $data['Retype'] );
- return true;
- } catch ( PasswordError $e ) {
- return $e->getMessage();
- }
+ return $status;
}
public function onSuccess() {
}
/**
- * @param string $oldpass
- * @param string $newpass
- * @param string $retype
- * @throws PasswordError When cannot set the new password because requirements not met.
+ * Checks the new password if it meets the requirements for passwords and set
+ * it as a current password, otherwise set the passed Status object to fatal
+ * and doesn't change anything
+ *
+ * @param string $oldpass The current (temporary) password.
+ * @param string $newpass The password to set.
+ * @param string $retype The string of the retype password field to check with newpass
+ * @return Status
*/
protected function attemptReset( $oldpass, $newpass, $retype ) {
$isSelf = ( $this->mUserName === $this->getUser()->getName() );
}
if ( !$user || $user->isAnon() ) {
- throw new PasswordError( $this->msg( 'nosuchusershort', $this->mUserName )->text() );
+ return Status::newFatal( $this->msg( 'nosuchusershort', $this->mUserName ) );
}
if ( $newpass !== $retype ) {
Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'badretype' ) );
- throw new PasswordError( $this->msg( 'badretype' )->text() );
+ return Status::newFatal( $this->msg( 'badretype' ) );
}
$throttleCount = LoginForm::incLoginThrottle( $this->mUserName );
if ( $throttleCount === true ) {
$lang = $this->getLanguage();
$throttleInfo = $this->getConfig()->get( 'PasswordAttemptThrottle' );
- throw new PasswordError( $this->msg( 'changepassword-throttled' )
+ return Status::newFatal( $this->msg( 'changepassword-throttled' )
->params( $lang->formatDuration( $throttleInfo['seconds'] ) )
- ->text()
);
}
// @todo Make these separate messages, since the message is written for both cases
if ( !$user->checkTemporaryPassword( $oldpass ) && !$user->checkPassword( $oldpass ) ) {
Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
- throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
+ return Status::newFatal( $this->msg( 'resetpass-wrong-oldpass' ) );
}
// User is resetting their password to their old password
if ( $oldpass === $newpass ) {
- throw new PasswordError( $this->msg( 'resetpass-recycled' )->text() );
+ return Status::newFatal( $this->msg( 'resetpass-recycled' ) );
}
// Do AbortChangePassword after checking mOldpass, so we don't leak information
$abortMsg = 'resetpass-abort-generic';
if ( !Hooks::run( 'AbortChangePassword', array( $user, $oldpass, $newpass, &$abortMsg ) ) ) {
Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'abortreset' ) );
- throw new PasswordError( $this->msg( $abortMsg )->text() );
+ return Status::newFatal( $this->msg( $abortMsg ) );
}
// Please reset throttle for successful logins, thanks!
Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'success' ) );
} catch ( PasswordError $e ) {
Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) );
- throw new PasswordError( $e->getMessage() );
+ return Status::newFatal( new RawMessage( $e->getMessage() ) );
}
if ( $isSelf ) {
}
$user->saveSettings();
$this->resetPasswordExpiration( $user );
+ return Status::newGood();
}
public function requiresUnblock() {
__METHOD__
);
}
+
+ protected function getDisplayFormat() {
+ return 'ooui';
+ }
}
"htmlform-cloner-delete": "Выдаліць",
"htmlform-cloner-required": "Патрабуецца як мінімум яшчэ адно значэньне.",
"htmlform-title-badnamespace": "[[:$1]] знаходзіцца не ў прасторы назваў «{{ns:$2}}».",
+ "htmlform-title-not-creatable": "«$1» — немагчымы загаловак для старонкі",
"htmlform-user-not-exists": "<strong>$1</strong> не існуе.",
"htmlform-user-not-valid": "<strong>$1</strong> — некарэктнае імя карыстальніка.",
"sqlite-has-fts": "$1 з падтрымкай поўнатэкстнага пошуку",
"search-category": "(catégorie $1)",
"search-file-match": "(correspond au contenu du fichier)",
"search-suggest": "Essayez avec cette orthographe : $1",
- "search-rewritten": "Affiche les résultats pour $1. Recherchez à sa place pour $2.",
+ "search-rewritten": "Résultats affichés pour $1. Rechercher $2 à la place.",
"search-interwiki-caption": "Projets frères",
"search-interwiki-default": "Résultats de $1 :",
"search-interwiki-more": "(plus)",
"createaccountreason": "Motivo:",
"createacct-reason": "Motivo",
"createacct-reason-ph": "Por que crea outra conta?",
- "createacct-captcha": "Comprobación de seguridade",
- "createacct-imgcaptcha-ph": "Insira o texto que ve enriba",
"createacct-submit": "Crear a conta",
"createacct-another-submit": "Crear conta",
"createacct-benefit-heading": "Xente coma vostede elabora {{SITENAME}}.",
"showingresultsinrange": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados do <strong>$1</strong> ao <strong>$2</strong>, dun total de <strong>$3</strong>}}",
"search-nonefound": "Non se atopou ningún resultado que coincidise coa procura.",
+ "search-nonefound-thiswiki": "Non hai resultados que cumpran os criterios de busca neste sitio.",
"powersearch-legend": "Busca avanzada",
"powersearch-ns": "Procurar nos espazos de nomes:",
"powersearch-togglelabel": "Seleccionar:",
"Statix64",
"CassiodoroVicinetti",
"Bultro",
- "Oggioniale"
+ "Oggioniale",
+ "Wim b"
]
},
"tog-underline": "Sottolinea i collegamenti:",
"passwordreset-capture-help": "Se si seleziona questa casella, l'indirizzo e-mail (con la password temporanea), verrà mostrato a voi, oltre ad essere inviato all'utente.",
"passwordreset-email": "Indirizzo email:",
"passwordreset-emailtitle": "Dettagli dell'utente su {{SITENAME}}",
- "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
+ "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare ad utilizzare la tua vecchia password.",
"passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
"passwordreset-emailelement": "Nome utente: \n$1\n\nPassword temporanea: \n$2",
"passwordreset-emailsent": "Se questo è un indirizzo di posta elettronica registrato per la tua utenza, allora verrà inviata una email per reimpostare la password.",
"viewsource": "មើលកូដ",
"viewsource-title": "មើលកូដរបស់ $1",
"actionthrottled": "សកម្មភាពត្រូវបានកម្រិត",
- "actionthrottledtext": "ក្រោមវិធានការប្រឆាំងស្ប៉ាម អ្នកត្រូវបានគេកំហិតមិនឱ្យធ្វើសកម្មភាពនេះច្រើនដងពេកទេក្នុងរយៈពេលខ្លីមួយ។\n\nសូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។",
+ "actionthrottledtext": "ក្រោមវិធានការប្រឆាំងស្ប៉ាម អ្នកត្រូវបានគេកំហិតមិនឱ្យធ្វើសកម្មភាពនេះច្រើនដងពេកទេក្នុងរយៈពេលខ្លីមួយ តែអ្នកបានធ្វើលើសចំនួនកំហិត។\n\nសូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។",
"protectedpagetext": "ទំព័រនេះបានត្រូវការពារមិនឱ្យកែប្រែឬធ្វើសកម្មភាពផ្សេងទៀតលើវា។",
"viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ។",
"viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់<strong>ការកែប្រែរបស់អ្នក</strong>មកកាន់ទំព័រនេះ។",
"passwordreset-emailtext-ip": "មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកសម្រាប់ {{SITENAME}} ($4)។ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះ\nមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
"passwordreset-emailtext-user": "អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកនៅក្នុង {{SITENAME}} ($4)។\n {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
"passwordreset-emailelement": "អត្តនាម៖ \n$1\n\nពាក្យសម្ងាត់បណ្ដោះអាសន្ន៖ \n$2",
- "passwordreset-emailsent": "á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e½á\9e\99á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85á\9e á\9e¾á\9e\99។",
+ "passwordreset-emailsent": "á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e\93á\9f\81á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\82á\9e\8eá\9e\93á\9e¸á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80 á\9e\93á\9f\84á\9f\87á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e½á\9e\99á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85។",
"passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
"passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
- "changeemail": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែល",
- "changeemail-header": "á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\82á\9e\8eá\9e\93á\9e¸á\9e\93á\9f\81á\9f\87",
+ "changeemail": "á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¬á\9e\9bá\9e»á\9e\94á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9b",
+ "changeemail-header": "á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\86á\9e\96á\9f\81á\9e\89á\9e\9fá\9f\86á\9e\8eá\9e»á\9f\86á\9e\94á\9f\82á\9e\94á\9e\94á\9e\91á\9e\93á\9f\81á\9f\87á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9f\94 á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e¢á\9f\92á\9e\93á\9e\80á\9e\85á\9e\84á\9f\8bá\9e\9bá\9e»á\9e\94á\9e\80á\9e¶á\9e\9aá\9e\8fá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\96á\9e¸á\9e\82á\9e\8eá\9e\93á\9e¸á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80 á\9e\9fá\9e¼á\9e\98á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9f\92á\9e\9aá\9e¡á\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\90á\9f\92á\9e\98á\9e¸á\9e¢á\9f\84á\9e\99á\9e\93á\9f\85á\9e\91á\9f\86á\9e\93á\9f\81á\9e\9aá\9e\96á\9f\81á\9e\9bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9f\81á\9e\85á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\86á\9e\8eá\9e»á\9f\86á\9e\94á\9f\82á\9e\94á\9e\94á\9e\91á\9f\94",
"changeemail-no-info": "អ្នកចាំបាច់ត្រូវតែកត់ឈ្មោះចូល ដើម្បីចូលទៅកាន់ទំព័រនេះដោយផ្ទាល់។",
"changeemail-oldemail": "អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖",
"changeemail-newemail": "អាសយដ្ឋានអ៊ីមែលថ្មី៖",
"upload-form-label-infoform-description": "ការពិពណ៌នា",
"upload-form-label-usage-title": "បម្រើបម្រាស់",
"upload-form-label-usage-filename": "ឈ្មោះឯកសារ",
+ "foreign-structured-upload-form-label-own-work": "នេះជាការងារផ្ទាល់ខ្លួនរបស់ខ្ញុំ",
+ "foreign-structured-upload-form-label-infoform-categories": "ចំណាត់ថ្នាក់ក្រុម",
+ "foreign-structured-upload-form-label-infoform-date": "កាលបរិច្ឆេទ",
"backend-fail-notexists": "គ្មានឯកសារ \"$1\" ទេ។",
"backend-fail-notsame": "ឯកសារដែលមិនដូចគ្នាបេះបិទមួយមានរួចហើយនៅ \"$1\"។",
"backend-fail-delete": "មិនអាចលុបឯកសារ \"$1\" បានទេ។",
"cant-move-to-user-page": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងទំព័រមួយទៅកាន់ទំព័រអ្នកប្រើប្រាស់មួយទេ (លើកលែងតែទៅកាន់ទំព័ររងមួយ)។",
"cant-move-category-page": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យប្តូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុមទេ។",
"cant-move-to-category-page": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងទំព័រមួយទៅកាន់ទំព័រចំណាត់ថ្នាក់ក្រុមមួយទេ។",
- "newtitle": "á\9e\91á\9f\85á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\90á\9f\92á\9e\98á\9e¸á\9f\96",
+ "newtitle": "ចំណងជើងថ្មី៖",
"move-watch": "តាមដានទំព័រនេះ",
"movepagebtn": "ប្ដូរទីតាំង",
"pagemovedsub": "ប្ដូរទីតាំងដោយជោគជ័យ",
"tooltip-ca-nstab-main": "មើលទំព័រមាតិកា",
"tooltip-ca-nstab-user": "មើលទំព័រអ្នកប្រើប្រាស់",
"tooltip-ca-nstab-media": "មើលទំព័រមេឌា",
- "tooltip-ca-nstab-special": "á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\9fá\9f\81á\9e\9fâ\80\8bá\9f\94 á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87បានទេ។",
+ "tooltip-ca-nstab-special": "á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\9fá\9f\81á\9e\9fâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82បានទេ។",
"tooltip-ca-nstab-project": "មើលទំព័រគម្រោង",
"tooltip-ca-nstab-image": "មើលទំព័រឯកសារ",
"tooltip-ca-nstab-mediawiki": "មើលសាររបស់ប្រព័ន្ធ",
"site-atom-feed": "$1 ऍटम रसद (Atom Feed)",
"page-rss-feed": "\"$1\" आर.एस.एस.रसद (RSS Feed)",
"page-atom-feed": "\"$1\" ऍटम रसद (Atom Feed)",
- "feed-atom": "ॲटम",
+ "feed-atom": "à¤\85à¥\85टम",
"feed-rss": "आर.एस.एस.",
"red-link-title": "$1 (पान अस्तित्वात नाही)",
"sort-descending": "उतरत्या क्रमाने लावा",
"resettokens-no-tokens": "पुनर्स्थापित करण्यासाठी कोणतीही ओळखचिन्हे नाहीत.",
"resettokens-tokens": "ओळखचिन्हे:",
"resettokens-token-label": "$1 (सद्य मुल्य: $2)",
- "resettokens-watchlist-token": "[[Special:Watchlist|à¤\86पलà¥\8dया निरà¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80तà¥\80ल पानाà¤\82मधà¥\80ल बदलाà¤\9aा]] वà¥\87ब रसद बिलà¥\8dला (ॲटम/आरएसएस)",
+ "resettokens-watchlist-token": "[[Special:Watchlist|à¤\86पलà¥\8dया निरà¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80तà¥\80ल पानाà¤\82मधà¥\80ल बदलाà¤\9aा]] वà¥\87ब रसद बिलà¥\8dला (à¤\85à¥\85टम/आरएसएस)",
"resettokens-done": "ओळखचिन्हे पुनर्स्थापन.",
"resettokens-resetbutton": "निवडलेली ओळखचिन्हे पुनर्स्थापित करा",
"bold_sample": "ठळक मजकूर",
"accmailtitle": "परवलीचा शब्द पाठविण्यात आलेला आहे.",
"accmailtext": "[[User talk:$1|$1]] यांसाठी अनियतक्रमाने निर्मित केलेला परवलीचा शब्द $2 यांना पाठवण्यात आला आहे.\n\nया नवीन खात्यासाठीचा परवलीचा शब्द,सनोंद-प्रवेश घेतल्यावर [[Special:ChangePassword|परवलीचा शब्द बदला]] येथे बदलता येईल.",
"newarticle": "(नवीन लेख)",
- "newarticletext": "à¤\86पण सधà¥\8dया à¤\85सà¥\8dतितà¥\8dवात नसलà¥\87लà¥\8dया पानाà¤\9aà¥\8dया दà¥\81वà¥\8dयाà¤\9aा माà¤\97à¥\8bवा à¤\98à¥\87त à¤\86ला à¤\86हात.\nहà¥\87 पान तयार à¤\95रणà¥\8dयासाठà¥\80,खालील पेटीत टंकन करणे सुरु करा(अधिक माहितीसाठी [$1 साहाय्य पान] बघा).\n\nजर आपण येथे चुकून आला असाल तर ब्राउझरच्या <strong>परत</strong>(बॅक) कळीवर टिचकी द्या.",
+ "newarticletext": "à¤\86पण सधà¥\8dया à¤\85सà¥\8dतितà¥\8dतà¥\8dवात नसलà¥\87लà¥\8dया पानाà¤\9aà¥\8dया दà¥\81वà¥\8dयाà¤\9aा माà¤\97à¥\8bवा à¤\98à¥\87त à¤\86ला à¤\86हात.\nहà¥\87 पान नवà¥\8dयानà¥\87 तयार à¤\95रणà¥\8dयासाठà¥\80 खालील पेटीत टंकन करणे सुरु करा(अधिक माहितीसाठी [$1 साहाय्य पान] बघा).\n\nजर आपण येथे चुकून आला असाल तर ब्राउझरच्या <strong>परत</strong>(बॅक) कळीवर टिचकी द्या.",
"anontalkpagetext": "---- ''हे चर्चापान अशा अज्ञात सदस्यासाठी आहे, ज्यांनी खाते तयार केलेले नाही किंवा त्याचा वापर करत नाहीत. त्यांच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहोत. असा अंकपत्ता बऱ्याच लोकांचा एकच असू शकतो. जर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक संदेश मिळाला असेल तर कृपया [[Special:UserLogin| खाते तयार करा]] किंवा [[Special:UserLogin/signup|सनोंद-प्रवेश करा]] ज्यामुळे, पुढे असे गैरसमज होणार नाहीत.''",
"noarticletext": "या लेखात सध्या काहीही मजकूर नाही.\nतुम्ही विकिपीडियावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}| मथळ्याचा शोध घेऊ शकता]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर नोंदी शोधा],\nकिंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}} लिहू शकता]</span>.",
"noarticletext-nopermission": "सध्या या लेखात काहीही मजकूर नाही.\nतुम्ही विकिपीडियावरील इतर लेखांमध्ये [[Special:Search/{{PAGENAME}}| या मथळ्याचा शोध घेऊ शकता]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAME}}}}आपण या लेखाच्या इतर नोंदी शोधा]</span>,परंतु, आपणास हा लेख लिहीण्याची परवानगी देण्यात येउ शकत नाही.",
"showingresultsinrange": "खाली #<strong>$2</strong> ते #<strong>$3</strong> पर्यंतच्या कक्षेतील {{PLURAL:$1|<strong>१</strong> निकाल दाखविला आहे|<strong>$1</strong> निकाल दाखविले आहेत}}.",
"search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|निकाल <strong>$3</strong> चे<strong>$1 - $2</strong>}}",
"search-nonefound": "दिलेल्या पृच्छेशी जुळणारे निकाल नाहीत.",
+ "search-nonefound-thiswiki": "या संकेतस्थळावर,दिलेल्या पृच्छेशी जुळणारे निकाल मिळाले नाही.",
"powersearch-legend": "प्रगत शोध",
"powersearch-ns": "नामविश्वांमध्ये शोधा:",
"powersearch-togglelabel": "तपासा:",
"tog-hideminor": "Sembunyikan suntingan kecil daripada perubahan terkini",
"tog-hidepatrolled": "Sembunyikan suntingan yang telah dironda daripada perubahan terkini",
"tog-newpageshidepatrolled": "Sorokkan laman yang telah dironda daripada senarai laman baru",
+ "tog-hidecategorization": "Sorokkan pengkategorian laman",
"tog-extendwatchlist": "Kembangkan senarai pantau untuk memaparkan semua perubahan, bukan hanya yang terkini",
"tog-usenewrc": "Kumpulkan perubahan mengikut laman dalam perubahan terkini dan senarai pantau",
"tog-numberheadings": "Nomborkan tajuk secara automatik",
"tog-watchlisthideliu": "Sembunyikan suntingan oleh pengguna yang telah log masuk daripada senarai pantau",
"tog-watchlisthideanons": "Sembunyikan suntingan oleh pengguna tanpa nama daripada senarai pantau",
"tog-watchlisthidepatrolled": "Sembunyikan suntingan yang telah dironda daripada senarai pantau",
+ "tog-watchlisthidecategorization": "Sorokkan pengkategorian laman",
"tog-ccmeonemails": "Kirimkan saya salinan e-mel yang saya hantar kepada pengguna lain",
"tog-diffonly": "Jangan tunjukkan kandungan laman di bawah perbezaan",
"tog-showhiddencats": "Tunjukkan kategori tersembunyi",
"nstab-template": "Templat",
"nstab-help": "Laman bantuan",
"nstab-category": "Kategori",
+ "mainpage-nstab": "Laman utama",
"nosuchaction": "Tindakan tidak dikenali",
"nosuchactiontext": "Tindakan yang dinyatakan dalam URL ini tidak sah. Anda mungkin telah menaip URL yang salah atau mengikuti pautan yang tidak sah. Ini juga mungkin bererti terdapat pepijat dalam perisian yang digunakan oleh {{SITENAME}}.",
"nosuchspecialpage": "Laman khas tidak wujud",
"createaccountreason": "Sebab:",
"createacct-reason": "Sebab",
"createacct-reason-ph": "Mengapa anda membuka satu lagi akaun",
- "createacct-captcha": "Pemeriksaan sekuriti",
- "createacct-imgcaptcha-ph": "Isikan teks yang anda lihat di atas",
"createacct-submit": "Wujudkan akaun anda",
"createacct-another-submit": "Buka akaun baru",
"createacct-benefit-heading": "{{SITENAME}} dijayakan oleh orang ramai seperti anda.",
"prefs-watchlist-token": "Token senarai pantau:",
"prefs-misc": "Pelbagai",
"prefs-resetpass": "Tukar kata laluan",
- "prefs-changeemail": "Tukar E-mel",
+ "prefs-changeemail": "Tukar atau padamkan alamat e-mel",
"prefs-setemail": "Tetapkan alamat e-mel",
"prefs-email": "Pilihan e-mel",
"prefs-rendering": "Penampilan",
"columns": "Lajur:",
"searchresultshead": "Cari",
"stub-threshold": "Ambang bagi pemformatan <a href=\"#\" class=\"stub\">pautan ke rencana ringkas</a> (bait):",
+ "stub-threshold-sample-link": "contoh",
"stub-threshold-disabled": "Dimatikan",
"recentchangesdays": "Bilangan hari dalam perubahan terkini:",
"recentchangesdays-max": "(had $1 hari)",
"rcshowhidemine": "$1 suntingan saya",
"rcshowhidemine-show": "Paparkan",
"rcshowhidemine-hide": "Sorokkan",
+ "rcshowhidecategorization-show": "Paparkan",
+ "rcshowhidecategorization-hide": "Sorokkan",
"rclinks": "Paparkan $1 perubahan terakhir sejak $2 hari yang lalu<br />$3",
"diff": "beza",
"hist": "sej",
"unpatrolledletter": "!",
"number_of_watching_users_pageview": "[$1 pemantau]",
"rc_categories": "Hadkan kepada kategori (asingkan dengan \"|\")",
- "rc_categories_any": "Semua",
+ "rc_categories_any": "Mana-mana yang terpilih",
"rc-change-size": "$1",
"rc-change-size-new": "$1 bait selepas perubahan",
"newsectionsummary": "/* $1 */ bahagian baru",
"recentchangeslinked-summary": "Laman khas ini menyenaraikan perubahan terkini bagi laman-laman yang dipaut. Laman-laman yang terdapat dalam senarai pantau anda ditandakan dengan '''teks tebal'''.",
"recentchangeslinked-page": "Nama laman:",
"recentchangeslinked-to": "Paparkan perubahan pada laman yang mengandungi pautan ke laman yang diberikan",
+ "recentchanges-page-added-to-category": "[[:$1]] ditambahkan kepada kategori",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu|$2}} lagi halaman ditambahkan kepada kategori",
+ "recentchanges-page-removed-from-category": "[[:$1]] digugurkan dari kategori",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu|$2}} lagi halaman digugurkan dari kategori",
+ "autochange-username": "Perubahan automatik MediaWiki",
"upload": "Muat naik fail",
"uploadbtn": "Muat naik fail",
"reuploaddesc": "Kembali ke borang muat naik",
"upload-too-many-redirects": "URL ini mengandungi terlalu banyak lencongan",
"upload-http-error": "Berlaku ralat HTTP: $1",
"upload-copy-upload-invalid-domain": "Muat naik salin tidak terdapat dari domain ini.",
+ "foreign-structured-upload-form-label-own-work": "Ini ialah karya saya sendiri",
+ "foreign-structured-upload-form-label-infoform-categories": "Kategori",
+ "foreign-structured-upload-form-label-infoform-date": "Tarikh",
+ "foreign-structured-upload-form-label-not-own-work-local-local": "Anda mungkin juga mahu mencuba [[Special:Upload|laman muat naik yang asal]].",
"backend-fail-stream": "Fail $1 tidak dapat distrimkan.",
"backend-fail-backup": "Fail $1 tidak dapat disandarkan.",
"backend-fail-notexists": "Fail $1 tidak wujud.",
"cant-move-to-user-page": "Anda tidak mempunyai keizinan untuk memindahkan sesebuah laman ke mana-mana laman pengguna (kecuali sebagai sublamannya sahaja).",
"cant-move-category-page": "Anda tidak mempunyai kebenaran untuk memindah laman-laman kategori.",
"cant-move-to-category-page": "Anda tidak mempunyai kebenaran untuk memindah sebuah laman ke sebuah laman kategori.",
- "newtitle": "Ke tajuk baru:",
+ "newtitle": "Tajuk baru:",
"move-watch": "Pantau laman ini",
"movepagebtn": "Pindahkan laman",
"pagemovedsub": "Pemindahan berjaya",
"tooltip-ca-nstab-main": "Lihat laman kandungan",
"tooltip-ca-nstab-user": "Lihat laman pengguna",
"tooltip-ca-nstab-media": "Lihat laman media",
- "tooltip-ca-nstab-special": "Ini adalah sebuah laman khas, anda tidak boleh menyunting laman ini secara terus.",
+ "tooltip-ca-nstab-special": "Ini adalah laman khas yang tidak boleh disunting.",
"tooltip-ca-nstab-project": "Lihat laman projek",
"tooltip-ca-nstab-image": "Lihat laman imej",
"tooltip-ca-nstab-mediawiki": "Lihat pesanan sistem",
"spam_reverting": "Membalikkan kepada versi terakhir yang tidak mengandungi pautan ke $1",
"spam_blanking": "Mengosongkan semua semakan yang mengandungi pautan ke $1",
"spam_deleting": "Menghapuskan semua semakan yang mengandungi pautan ke $1",
- "simpleantispam-label": "Pemeriksaan anti-spam.\n'''JANGAN''' isi ruangan ini!",
+ "simpleantispam-label": "Pemeriksaan anti-spam.\n<strong>Jangan</strong> isi ruangan ini!",
"pageinfo-title": "Maklumat untuk \"$1\"",
"pageinfo-not-current": "Maaf, maklumat ini tidak dapat disediakan untuk semakan lama.",
"pageinfo-header-basic": "Maklumat asas",
"pageinfo-robot-index": "Dibenarkan",
"pageinfo-robot-noindex": "Tidak dibenarkan",
"pageinfo-watchers": "Bilangan pemantau halaman",
+ "pageinfo-visiting-watchers": "Bilangan penonton laman yang melawat suntingan terkini",
"pageinfo-few-watchers": "Kurang daripada $1 orang pemantau",
"pageinfo-redirects-name": "Jumlah lencongan ke laman ini",
"pageinfo-subpages-name": "Subhalaman untuk halaman ini",
"version-libraries": "Perpustakaan terpasang",
"version-libraries-library": "Perpustakaan",
"version-libraries-version": "Versi",
+ "version-libraries-license": "Lesen",
+ "version-libraries-description": "Keterangan",
+ "version-libraries-authors": "Pengarang",
"redirect": "Lencongkan mengikut ID fail, pengguna, halaman atau semakan",
"redirect-legend": "Lencongkan ke fail atau halaman",
"redirect-summary": "Halaman khas ini melencong kepada fail (dengan nama fail), halaman (dengan ID semakan atau ID halaman) atau halaman pengguna (dengan ID pengguna berangka). Penggunaan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], atau [[{{#Special:Redirect}}/user/101]].",
"tog-previewonfirst": "Ozuta ezikačondu kerras, ku edituičendu zavoditah",
"tog-enotifwatchlistpages": "Työnnä minule sähköpoštu minun valvondulistal olijoin sivuloin kohenduksis",
"tog-enotifusertalkpages": "Työnnä minule sähköpoštu minun paginsivun muutoksis",
- "tog-enotifminoredits": "Ilmoita minule pienisgi korjavuksis sähköpoštale",
+ "tog-enotifminoredits": "Ilmoita minule pienisgi kohenduksis sähköpoštale",
"tog-enotifrevealaddr": "Näytä minun sähköpoštuadressii muile lähetettylöis ilmoituksis",
"tog-shownumberswatching": "Ozuta tädä sivuu tarkailevien käyttäjien miäriä",
"tog-oldsig": "Nygöine allekirjutus:",
"and": " da",
"qbfind": "Eči",
"qbbrowse": "Livua",
- "qbedit": "Korjata",
+ "qbedit": "Kohendele",
"qbpageoptions": "Tämä sivu",
"qbmyoptions": "Minun sivut",
"faq": "PKK",
"view": "Kačo",
"view-foreign": "Kačo saital $1",
"edit": "Kohendele",
- "edit-local": "Edituiče paikallistu kuvavustu",
+ "edit-local": "Kohendele paikallistu kuvavustu",
"create": "Luaji",
"create-local": "Ližiä paikalline kuvavus",
"editthispage": "Kohendele tädä sivuu",
"currentevents-url": "Project:Aijankohtazet tapahtumat",
"disclaimers": "Kieldävymine vastuos",
"disclaimerpage": "Project:Vastuos kieldävymine",
- "edithelp": "Abu korjuamizeh",
+ "edithelp": "Abu kohendelemizeh",
"helppage-top-gethelp": "Kyzy abuu",
"mainpage": "Piäsivu",
"mainpage-description": "Piäsivu",
"userpage-userdoesnotexist-view": "Käyttäitunnustu ”$1” ei ole registruittu.",
"updated": "(Päivitetty)",
"continue-editing": "Mene edituičendualovehele",
- "editing": "Edituijah sivuu $1",
+ "editing": "Kohendellah sivuu $1",
"creating": "Luajitah sivuu \"$1\"",
- "editingsection": "Korjuandu $1 (alalugu)",
+ "editingsection": "Kohendellah $1 (alalugu)",
"editingcomment": "Edituijah $1 (uuzi sektsii)",
"yourtext": "Sinun tekstu",
"yourdiff": "Erot",
"powersearch-toggleall": "Kai",
"powersearch-togglenone": "Nimidä",
"mypreferences": "Azetukset",
- "prefs-edits": "Edituičendoi kaikkiedah:",
+ "prefs-edits": "Kohenduksii kaikkiedah:",
"prefs-skin": "Kettu",
"prefs-user-pages": "Käyttäisivut",
"prefs-watchlist": "Valvondulistu",
"group-user": "Käyttäjät",
"group-all": "(kai)",
"right-read": "Lugie sivuloi",
- "right-edit": "Edituija sivuloi",
+ "right-edit": "Kohendella sivuloi",
"right-createpage": "Luadie sivuloi (kudamat ei olla paginsivuloi)",
"right-createtalk": "Luadie paginsivuloi",
"right-createaccount": "Luadie uuzii käyttäitunnuksii",
"recentchanges": "Uvvet kohendukset",
"recentchanges-legend": "Tuorehien muutoksien azetukset",
"recentchanges-summary": "Jällitä kaikkii jälgimäzet muutokset wikih täl sivul.",
- "recentchanges-label-newpage": "Tämä korjavus on johtanuh uvven sivun luadimizeh",
+ "recentchanges-label-newpage": "Tämä kohendus on johtanuh uvven sivun luadimizeh",
"recentchanges-label-minor": "Tämä on pieni kohendus",
- "recentchanges-label-bot": "Tämän muutoksen on luadinuh bot",
+ "recentchanges-label-bot": "Tämän kohenduksen on luadinuh bot",
"recentchanges-label-unpatrolled": "Tädä korjuandua vie ei ole tarkistettu",
"recentchanges-label-plusminus": "Sivu on kazvanuh [] baital",
"recentchanges-legend-heading": "'''Legendu:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kačo sežo [[Special:NewPages|uuzien sivuloin listu]])",
"rclistfrom": "Ozuta jälgimäzet muutokset algajen $2, $3",
- "rcshowhideminor": "$1 pienet muutokset",
+ "rcshowhideminor": "$1 pienet kohendukset",
"rcshowhideminor-show": "Ozuta",
"rcshowhideminor-hide": "Peitä",
"rcshowhidebots": "$1 botat",
"tooltip-t-permalink": "Pyzyi linki tämän sivun versieh",
"tooltip-ca-nstab-main": "Kačo piäsivun sizäldö",
"tooltip-ca-nstab-user": "Ozuta käyttäisivu",
- "tooltip-ca-nstab-special": "Tämä on erikoine sivu, sidä ei voi korjata",
+ "tooltip-ca-nstab-special": "Tämä on erikoine sivu, sidä ei voi kohendella",
"tooltip-ca-nstab-project": "Ozuta projektusivu",
"tooltip-ca-nstab-image": "Kačo failan sivu",
"tooltip-ca-nstab-template": "Ozuta šablon",
"eauthentsent": "На указанный адрес электронной почты отправлено письмо. \nЧтобы получать письма в дальнейшем, следуйте изложенным там инструкциям для подтверждения, что этот адрес действительно принадлежит вам.",
"throttled-mailpassword": "Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|1=последнего часа|последних $1 часов}}.\nДля предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания {{PLURAL:$1|за $1 час|за $1 часов|за $1 часа|1=в час}}.",
"mailerror": "Ошибка при отправке почты: $1",
- "acct_creation_throttle_hit": "За сутки с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись участника|было создано $1 учётных записей участников|1=уже была создана учётная запись участника}}, что является пределом для данного отрезка времени.\nТаким образом, пользователи, обладающие данным IP-адресом, в данный момент больше не могут создавать новых учётных записей.",
+ "acct_creation_throttle_hit": "За сутки с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись|было создано $1 учётных записей|были созданы $1 учётных записи|1=уже была создана учётная запись}} — это предельное количество для данного отрезка времени.\nВ результате, пользователи с этим IP-адресом в данный момент больше не могут создавать новых учётных записей.",
"emailauthenticated": "Ваш адрес электронной почты подтверждён $2 в $3.",
"emailnotauthenticated": "Ваш адрес электронной почты ещё не был подтверждён.\nПисьма не будут отправляться ни для одной из следующий функций.",
"noemailprefs": "Адрес электронной почты не был указан, функции вики-движка по работе с эл. почтой отключены.",
"resetpass-abort-generic": "Изменение пароля было прервано расширением.",
"resetpass-expired": "Срок действия вашего пароля истёк. Пожалуйста, установите новый пароль для входа в систему.",
"resetpass-expired-soft": "Срок действия вашего пароля истёк, и теперь он должен быть изменён. Пожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы изменить его позже.",
- "resetpass-validity-soft": "Ð\92аÑ\88 паÑ\80олÑ\8c Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f некоÑ\80Ñ\80екÑ\82нÑ\8bм: $1\n\nПожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы сбросить его позже.",
+ "resetpass-validity-soft": "Ð\97адан некоÑ\80Ñ\80екÑ\82нÑ\8bй паÑ\80олÑ\8c: $1\n\nПожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы сбросить его позже.",
"passwordreset": "Сброс пароля",
"passwordreset-text-one": "Заполните эту форму, чтобы сбросить свой пароль.",
"passwordreset-text-many": "{{PLURAL:$1|Заполните одно из полей для получения временного пароля по электронной почте.}}",
"permissionserrors": "Ошибка прав доступа",
"permissionserrorstext": "У вас нет прав на выполнение этой операции по {{PLURAL:$1|1=следующей причине|следующим причинам}}:",
"permissionserrorstext-withaction": "У вас нет прав на $2 по {{PLURAL:$1|1=следующей причине|следующим причинам}}:",
- "contentmodelediterror": "Ð\92Ñ\8b не можеÑ\82е Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 веÑ\80Ñ\81иÑ\8e, поÑ\81колÑ\8cкÑ\83 еÑ\91 моделÑ\8cÑ\8e Ñ\81одеÑ\80жимого Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f <code>$1</code>, а Ñ\82екÑ\83Ñ\89аÑ\8f моделÑ\8c Ñ\81одеÑ\80жимого страницы — <code>$2</code>.",
+ "contentmodelediterror": "Ð\92Ñ\8b не можеÑ\82е Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 веÑ\80Ñ\81иÑ\8e, поÑ\81колÑ\8cкÑ\83 моделÑ\8c еÑ\91 Ñ\81одеÑ\80жаниÑ\8f â\80\94 <code>$1</code>, а Ñ\82екÑ\83Ñ\89аÑ\8f моделÑ\8c Ñ\81одеÑ\80жаниÑ\8f страницы — <code>$2</code>.",
"recreate-moveddeleted-warn": "'''Внимание. Вы пытаетесь воссоздать страницу, которая ранее удалялась.'''\n\nПроверьте, действительно ли вам нужно воссоздавать эту страницу.\nНиже приведены журналы удалений и переименований этой страницы.",
"moveddeleted-notice": "Эта страница была удалена.\nДля справки ниже показаны соответствующие записи из журналов удалений и переименований.",
"moveddeleted-notice-recent": "К сожалению, эта страница была недавно удалена (в течение последних 24 часов).\nНиже для справки приведены журналы удаления и перемещения для этой страницы.",
"htmlform-cloner-create": "Өссө эп",
"htmlform-cloner-delete": "Сот",
"htmlform-cloner-required": "Саатар биирин толоруохтаах эбиккин.",
+ "htmlform-title-badnamespace": "[[:$1]] бу аат далыгар киирбэт эбит «{{ns:$2}}».",
"htmlform-title-not-creatable": "«$1» оҥоһуллар сирэй аата буолбатах",
"htmlform-title-not-exists": "[[:$1]] суох.",
"htmlform-user-not-exists": "<strong>$1</strong> суох.",
+ "htmlform-user-not-valid": "<strong>$1</strong> — маннык аат сатаммат.",
"sqlite-has-fts": "$1 толору тиэкистээх көрдөөһүнү өйүүр",
"sqlite-no-fts": "$1 толору тиэкистээх көрдөөһүнү өйөөбөт",
"logentry-delete-delete": "$3 сирэйи $1 соппут",
"revdelete-uname-unhid": "кыттааччы аата көстөр буолбут",
"revdelete-restricted": "хааччахтааһын администраатардарга сыһыаннаах",
"revdelete-unrestricted": "хааччахтааһын админстраатардартан уһулунна",
+ "logentry-block-block": "$1 маннык болдьоххо $5 $6 {{GENDER:$4|$3}} {{GENDER:$2|хааччахтаабыт}}",
"logentry-block-unblock": "$1 {{GENDER:$2|хааччаҕын суох гыммыт}} {{GENDER:$4|$3}}",
"logentry-block-reblock": "$1 хааччах болдьоҕун {{GENDER:$4|$3}} манныкка $5 $6 {{GENDER:$2|уларыппыт}}",
"logentry-suppress-block": "$1 маннык болдьоххо $5 $6 {{GENDER:$4|$3}} {{GENDER:$2|хааччаҕын суох гыммыт}}",
"logentry-suppress-reblock": "$1 хааччах болдьоҕун {{GENDER:$4|$3}} манныкка $5 $6 {{GENDER:$2|уларыппыт}}",
+ "logentry-import-upload": "$1 {{GENDER:$2|киллэрбит}} $3 билэни хачайдыыр ньыманнан",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|киллэрбит}} $3 атын биикиттэн",
+ "logentry-merge-merge": "$1 {{GENDER:$2|холбообут}} мантан $3 манна $4 ($5 диэри торумнара)",
"logentry-move-move": "$1 $3 сирэй аатын маннык $4 уларыппыт",
"logentry-move-move-noredirect": "$3 сирэй аатын $1 маннык $4 уларыппыт, утаарыы-сирэй хаалларбатах",
"logentry-move-move_redir": "$3 сирэйи $1 диэн кыттааччы манныкка $4 уларыппыт (утаарыы үрдүнэн)",
"logentry-newusers-create2": "$3 кыттааччы аатын $1 бэлиэтээтэ",
"logentry-newusers-byemail": "$3 бэлиэ-ааты $1 оҥорбут, киирии тыла электрон почтанан ыытыллыбыт",
"logentry-newusers-autocreate": "$1 бэлиэ-аат аптамаатынан бэлиэтэннэ",
+ "logentry-protect-move_prot": "$1 көмүскэл нарылааһынан мантан $4 манна $3 {{GENDER:$2|көһөрбүт}}",
+ "logentry-protect-unprotect": "$1 мантан $3 көмүскэли {{GENDER:$2|суох гыммыт}}",
"logentry-protect-protect": "$1 {{GENDER:$2|көмүскээтэ}} $3 $4",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|көмүскээбит}} $3 $4 [каскаадынан]",
"logentry-protect-modify": "$1 {{GENDER:$2|уларыппыт}}: $3 $4 көмүскэлин таһымын",
"noname": "توهان جو ڄاڻايل يُوزرنانءُ ناقابل ڪار آهي.",
"loginsuccesstitle": "لاگ اِن ڪامياب",
"loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" لاگ اِن ٿيل آهيو.'''",
- "nosuchuser": "\"$1\" نالي سان ڪو بہ يوزر نہ آهي. يُوزرنانءُ، ننڍن وڏن اکرن ۾ امتياز ڪري ٿو. هِجي چڪاسيو، يا نئون کاتو کوليو.",
+ "nosuchuser": "\"$1\" نالي سان ڪو بہ يوزر نہ آهي. \"$1\".\n ننڍن وڏن اکرن ۾ امتياز ڪرڻ لازمي آهي. \nهِجي چڪاسيو،يا [[Special:UserLogin/signup|نئون کاتو تخليق ڪريو]]",
"nosuchusershort": "\"$1\" نالي ڪو بہ يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
"nouserspecified": "توهان کي ڪو يوزرنانءُ ڄاڻائڻو پوندو.",
"login-userblocked": "هيءُ يُوزر بندشيل آهي. لاگ اِن جي اجازت نہ ٿي ڏجي.",
"passwordtooshort": "ڳجھي لفظ گھٽ ۾ گھٽ {{PLURAL:$1|1 اکر|$1 اکرَن}} تي ٻڌل هوڻ گھرجي.",
"passwordtoolong": "ڳجھو لفظ {{PLURAL:$1|1 اکر|$1 اکرن}} کان وڏو نہ ٿو ٿي سگھي.",
"password-name-match": "توهان جو ڳجھو لفظ توهان جي يوزرنانءُ کان مختلف هجڻ گھرجي.",
- "mailmypassword": "ڳجھو لفظ برق ٽپاليو",
+ "mailmypassword": "ڳجھو لفظ ٻيهر ترتيب ڪريو",
"passwordremindertitle": "{{SITENAME}} لاءِ نئون عارضي ڳجھو لفظ",
"passwordremindertext": "ڪنهن (شايد توهان آءِ پي پتي $1 تان) اسان کي {{SITENAME}} ($4) لاءِ نئون ڳجھو لفظ اماڻڻ جي گھُرَ ڪئي.\n\nهاڻي يوزر \"$2\" لاءِ ڳجھو لفظ \"$3\" آهي. توهان کي هينئر ئي لاگ اِن ٿي پنهنجو ڳجھو لفظ تبديل ڪرڻ گھرجي.\n\nجيڪڏهن اها گھُرَ اوهان نه ڪئي هئي، يا هاڻي اوهان کي پنهنجو ڳجھو لفظ ياد اچي ويو آهي ۽ توهان ان کي تبديل ڪرڻ نه ٿا چاهيو، ته توهان هن نياپي کي نظر انداز ڪندي پنهنجو پراڻو ڳجھو لفظ ئي استعمال ڪري سگھو ٿا.",
"noemail": "يُوزر \"$1\" جي ڪو به برق ٽپال پتو درج ٿيل ناهي.",
"cannotchangeemail": "هن وڪيءَ تي کاتيدار جو برق ٽپال پتو بدلائي نہ ٿو سگھجي.",
"emaildisabled": "هيءَ سرزمين برق ٽپال اماڻي نہ ٿي سگھي.",
"accountcreated": "کاتو کلي چڪو",
- "accountcreatedtext": "$1 نالي يوزر کاتو کلي چڪو آھي.",
+ "accountcreatedtext": "يوزر کاتو [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) جي لاءِ تخليق ٿي چڪو آهي.",
"createaccount-title": "{{SITENAME}} تي کاتو کولڻ",
"login-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
"login-abort-generic": "توهان جو لاگ اِن ناڪام ويو.",
"Nemo bis",
"Aktron",
"Srdjan m",
- "Macofe"
+ "Macofe",
+ "Сербијана"
]
},
"tog-underline": "Подвлачење веза:",
"category-media-header": "Датотеке у категорији „$1“",
"category-empty": "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ова категорија тренутно не садржи странице или датотеке.''</div>",
"hidden-categories": "{{PLURAL:$1|Сакривена категорија|Сакривене категорије}}",
- "hidden-category-category": "СакÑ\80ивене каÑ\82егоÑ\80иÑ\98е",
+ "hidden-category-category": "Скривене категорије",
"category-subcat-count": "{{PLURAL:$2|1=Ова категорија садржи само следећу поткатегорију.|Ова категорија има {{PLURAL:$1|1=следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}, од укупно $2.}}",
"category-subcat-count-limited": "Ова категорија садржи {{PLURAL:$1|следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}.",
"category-article-count": "{{PLURAL:$2|1=Ова категорија садржи само следећу страницу.|{{PLURAL:$1|Следећа страница је|Следеће $1 странице су|Следећих $1 страница је}} у овој категорији, од укупно $2.}}",
"protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
"semiprotectedpagewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод:",
"cascadeprotectedwarning": "<strong>Упозорење:</strong> ова страница је заштићена тако да је могу уређивати само администратори, јер је она укључена у {{PLURAL:$1|следећу страницу која је|следеће странице које су}} заштићене „преносивом“ заштитом:",
- "titleprotectedwarning": "'''Упозорење: ова страница је заштићена тако да је могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].'''",
+ "titleprotectedwarning": "<strong>Упозорење: ову страницу могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].</strong>\nИспод су наведени последњи записи у дневнику:",
"templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
"templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом прегледу:",
"templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
"permissionserrors": "Грешка у дозволи",
"permissionserrorstext": "Немате овлашћење за ову радњу из {{PLURAL:$1|1=следећег|следећих}} разлога:",
"permissionserrorstext-withaction": "Немате дозволу за $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
- "recreate-moveddeleted-warn": "'''Упозорење: поново правите страницу која је претходно обрисана.'''\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
+ "recreate-moveddeleted-warn": "<strong>Упозорење: поново правите страницу која је претходно обрисана.</strong>\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
"moveddeleted-notice": "Ова страница је обрисана.\nИсторија њеног брисања и премештања налази се испод:",
"moveddeleted-notice-recent": "Жао нам је, ова страница је недавно обрисана (у последњих 24 сата).\nОвде је наведена историја брисања и премештања с образложењем.",
"log-fulllog": "Погледај целу историју",
"revdelete-selected-text": "{{PLURAL:$1|Изабрана измена|Изабране измене}} [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|Изабрана верзија датотеке|Изабране верзије датотеке}} [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Изабрана ставка у историји|Изабране ставке у историји}}:",
- "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступну.",
- "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступну.",
- "logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступну.",
+ "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступни.",
+ "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступни.",
+ "logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступни.",
"revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
"revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
"revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
"아라",
"Nemo bis",
"Srdjan m",
- "Macofe"
+ "Macofe",
+ "Сербијана"
]
},
"tog-underline": "Podvlačenje veza:",
"category-media-header": "Datoteke u kategoriji „$1“",
"category-empty": "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ova kategorija trenutno ne sadrži stranice ili datoteke.''</div>",
"hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}",
- "hidden-category-category": "Sakrivene kategorije",
+ "hidden-category-category": "Skrivene kategorije",
"category-subcat-count": "{{PLURAL:$2|1=Ova kategorija sadrži samo sledeću potkategoriju.|Ova kategorija ima {{PLURAL:$1|1=sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}, od ukupno $2.}}",
"category-subcat-count-limited": "Ova kategorija sadrži {{PLURAL:$1|sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}.",
"category-article-count": "{{PLURAL:$2|1=Ova kategorija sadrži samo sledeću stranicu.|{{PLURAL:$1|Sledeća stranica je|Sledeće $1 stranice su|Sledećih $1 stranica je}} u ovoj kategoriji, od ukupno $2.}}",
"protectedpagewarning": "<strong>Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.</strong>\nPoslednji zapis u dnevniku je prikazan ispod:",
"semiprotectedpagewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je uređuju.\nPoslednji zapis u dnevniku je prikazan ispod:",
"cascadeprotectedwarning": "<strong>Upozorenje:</strong> ova stranica je zaštićena tako da je mogu uređivati samo administratori, jer je ona uključena u {{PLURAL:$1|sledeću stranicu koja je|sledeće stranice koje su}} zaštićene „prenosivom“ zaštitom:",
- "titleprotectedwarning": "'''Upozorenje: ova stranica je zaštićena tako da je mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].'''",
+ "titleprotectedwarning": "<strong>Upozorenje: ovu stranicu mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].</strong>\nIspod su navedeni poslednji zapisi u dnevniku:",
"templatesused": "{{PLURAL:$1|Šablon|Šabloni}} na ovoj stranici:",
"templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} u ovom pregledu:",
"templatesusedsection": "{{PLURAL:$1|Šablon|Šabloni}} u ovom odeljku:",
"revdelete-selected-text": "{{PLURAL:$1|Izabrana izmena|Izabrane izmene}} [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|Izabrana verzija datoteke|Izabrane verzije datoteke}} [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Izabrana stavka u istoriji|Izabrane stavke u istoriji}}:",
- "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupnu.",
- "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupnu.",
- "logdelete-text": "Izbrisani unosi u dnevnicima će i dalje biti vidljivi u dnevnicima, ali delovi njihovog sadržaja neće biti javno dostupnu.",
+ "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupni.",
+ "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupni.",
+ "logdelete-text": "Izbrisani unosi u dnevnicima će i dalje biti vidljivi u dnevnicima, ali delovi njihovog sadržaja neće biti javno dostupni.",
"revdelete-text-others": "Ostali administratori će i dalje moći da pristupe skrivenom sadržaju i vrate ga, osim ako se postave dodatna ograničenja.",
"revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
"revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti <strong>samo</strong> u sledećim slučajevima:\n* zlonamerni ili pogrdni podaci\n* neprikladni lični podaci\n*: <em>kućna adresa i broj telefona, broj kreditne kartice, JMBG itd.</em>",
"pageinfo-recent-edits": "Broj skorašnjih izmena (u poslednjih $1)",
"pageinfo-recent-authors": "Broj skorašnjih zasebnih autora",
"pageinfo-magic-words": "{{PLURAL:$1|Magična reč|Magične reči}} ($1)",
- "pageinfo-hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|Skrivena kategorija|Skrivene kategorije}} ($1)",
"pageinfo-templates": "{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)",
"pageinfo-transclusions": "{{PLURAL:$1|Stranica|Stranice}} uključene u ($1)",
"pageinfo-toolboxlink": "Podaci o stranici",
"Sborsody",
"friends at tyvawiki.org",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Монгуш Салим"
]
},
"tog-underline": "Холбааны шыяры:",
"underline-never": "Кажан-даа",
"underline-default": "Кештиң азы веб-браузерниң ниити үнези",
"editfont-default": "Веб-браузерниң ниити үнези",
- "sunday": "Улуг хүн",
+ "sunday": "Улуг-хүн",
"monday": "Бир дугаар хүн",
"tuesday": "Ийи дугаар хүн",
"wednesday": "Үш дугаар хүн",
"thursday": "Дөрт дугаар хүн",
"friday": "Беш дугаар хүн",
- "saturday": "ЧаÑ\80Ñ\82Ñ\8bк Ñ\83лÑ\83г хүн",
+ "saturday": "Ð\90лдÑ\8b дÑ\83гааÑ\80 хүн",
"sun": "Улуг-хүн",
"mon": "Пн",
"tue": "Вт",
"thu": "Чт",
"fri": "Пт",
"sat": "Сб",
- "january": "Бир ай",
- "february": "ийи ай",
- "march": "Үш ай",
- "april": "Ð\94Ó©Ñ\80Ñ\82 ай",
- "may_long": "Ð\91еÑ\88 ай",
- "june": "Ð\90лдÑ\8b ай",
- "july": "Чеди ай",
- "august": "СеÑ\81 ай",
- "september": "Тос ай",
- "october": "Ð\9eн ай",
- "november": "Ð\9eн биÑ\80 ай",
- "december": "Ð\9eн ийи ай",
+ "january": "январь",
+ "february": "февраль",
+ "march": "март",
+ "april": "апÑ\80елÑ\8c",
+ "may_long": "май",
+ "june": "иÑ\8eнÑ\8c",
+ "july": "иÑ\8eлÑ\8c",
+ "august": "авгÑ\83Ñ\81Ñ\82",
+ "september": "сентябрь",
+ "october": "окÑ\82Ñ\8fбÑ\80Ñ\8c",
+ "november": "ноÑ\8fбÑ\80Ñ\8c",
+ "december": "декабÑ\80Ñ\8c",
"january-gen": "Бир айның",
- "february-gen": "Ð\98йи айнÑ\8bÒ£",
+ "february-gen": "ФевÑ\80алÑ\8c",
"march-gen": "Үш айның",
"april-gen": "Дөрт айның",
"may-gen": "Беш айның",
"october-gen": "Он айның",
"november-gen": "Он бир айның",
"december-gen": "Он ийи айның",
- "jan": "1 ай",
- "feb": "2 ай",
- "mar": "3 ай",
- "apr": "4 ай",
- "may": "5 ай",
- "jun": "6 ай",
- "jul": "7 ай",
- "aug": "8 ай",
- "sep": "9 ай",
- "oct": "10 ай",
- "nov": "11 ай",
- "dec": "12 ай",
- "pagecategories": "{{PLURAL:$1|Ð\90ңгÑ\8bлал}}",
- "category_header": "«$1» деп бөлүкÑ\82Ò¯ң арыннары",
+ "jan": "январь",
+ "feb": "фев",
+ "mar": "март",
+ "apr": "апрель",
+ "may": "май",
+ "jun": "июнь",
+ "jul": "июль",
+ "aug": "август",
+ "sep": "сентябрь",
+ "oct": "октябрь",
+ "nov": "ноябрь",
+ "dec": "декабрь",
+ "pagecategories": "{{PLURAL:$1|Ð\9aаÑ\82егоÑ\80иÑ\8f|Ð\9aаÑ\82егоÑ\80иÑ\8fлаÑ\80}}",
+ "category_header": "«$1» каÑ\82егоÑ\80иÑ\8fнÑ\8bң арыннары",
"subcategories": "Адаккы бөлүктер",
"category-media-header": "«$1» деп бөлүкте файлдар",
"category-empty": "''Амгы бо бөлүкте медиа база арыннар чок.''",
- "hidden-categories": "{{PLURAL:$1|1=ЧажÑ\8bÑ\82 аңгÑ\8bлал|ЧажÑ\8bÑ\82 аңгÑ\8bлалдар}}",
+ "hidden-categories": "{{PLURAL:$1|1=Ð\9aөзүлбеÑ\81 каÑ\82егоÑ\80иÑ\8f|Ð\9aөзүлбеÑ\81 каÑ\82егоÑ\80иÑ\8fлар}}",
"hidden-category-category": "Чажыт бөлүктер",
- "category-subcat-count": "{{PLURAL:$2|1=Ð\91о аңгÑ\8bлал Ñ\87үгле даÑ\80аазÑ\8bнда аңгÑ\8bламнÑ\8bг.|Ð\91о аңгÑ\8bлалдÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 аңгÑ\8bламнаÑ\80нÑ\8bÒ£ аÑ\80азÑ\8bндан даÑ\80аазÑ\8bнда $1 аңгÑ\8bламнÑ\8b көÑ\80гүÑ\81кен.}}",
+ "category-subcat-count": "{{PLURAL:$2|1=Ð\91о каÑ\82егоÑ\80иÑ\8f Ñ\87үгле даÑ\80аазÑ\8bнда иÑ\88Ñ\82ики каÑ\82егоÑ\80иÑ\8fлÑ\8bг.|Ð\91о каÑ\82егоÑ\80иÑ\8fда баÑ\80-ла $2 иÑ\88Ñ\82ики каÑ\82егоÑ\80иÑ\8fлаÑ\80нÑ\8bÒ£ $1 деп иÑ\88Ñ\82ики каÑ\82егоÑ\80иÑ\8fзÑ\8b көÑ\81Ñ\82үп Ñ\82Ñ\83Ñ\80аÑ\80.}}",
"category-subcat-count-limited": "Бо аңгылал {{PLURAL:$1|1=бир|$1}} аңгыламныг.",
- "category-article-count": "{{PLURAL:$2|1=Ð\91о аңгÑ\8bлал Ñ\87үгле даÑ\80аазÑ\8bнда аÑ\80Ñ\8bннаÑ\80лÑ\8bг.|Ð\91о аңгÑ\8bлалдÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 аÑ\80Ñ\8bннаÑ\80Ñ\8bнÑ\8bÒ£ аÑ\80азÑ\8bндан даÑ\80аазÑ\8bнда $1 аÑ\80Ñ\8bнÑ\8bн көргүскен.}}",
- "category-file-count": "{{PLURAL:$2|1=Ð\91о бөлүк Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ñ\84айлдÑ\8bг.|Ð\91о бөлүкÑ\82Ò¯Ò£ нииÑ\82и $2 файлының $1 файлын көргүскен.}}",
+ "category-article-count": "{{PLURAL:$2|1=Ð\91о каÑ\82егоÑ\80иÑ\8fда Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 аÑ\80Ñ\8bн баÑ\80.|Ук каÑ\82егоÑ\80иÑ\8fда баÑ\80 $2 аÑ\80Ñ\8bннаÑ\80Ñ\8bнÑ\8bÒ£ аÑ\80азÑ\8bндан}} |{{PLURAL:$1 аÑ\80Ñ\8bннÑ\8b көÑ\80гүÑ\81кен| $1 аÑ\80Ñ\8bннаÑ\80нÑ\8b көргүскен.}}",
+ "category-file-count": "{{PLURAL:$2|1=Ð\91о каÑ\82егоÑ\80иÑ\8f Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ñ\84айлдÑ\8bг.|Ð\91о каÑ\82егоÑ\80иÑ\8fнÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 файлының $1 файлын көргүскен.}}",
"listingcontinuesabbrev": "(уланчы)",
"noindex-category": "Индекстелбес арынар",
"broken-file-category": "Ажылдавайн турар файл-шөлүлгелиг арыннар",
"about": "Дугайында",
"article": "Допчу арын",
- "newwindow": "(чаа көзенээ ажыытынар)",
- "cancel": "СокÑ\81ааÑ\80Ñ\8b",
+ "newwindow": "(чаа көзенекке)",
+ "cancel": "ЫнÑ\87анмаÑ\81",
"moredotdotdot": "Артык...",
"mypage": "Арын",
"mytalk": "Чугаа",
"faqpage": "Project:БлСА",
"actions": "Кылыглар",
"namespaces": "Аттар делгемнери",
- "variants": "Бир янзы",
+ "variants": "Янзы-хевирлери",
+ "navigation-heading": "Навигация менюзу",
"errorpagetitle": "Алдаг",
"returnto": "«$1» деп арынже эглири.",
- "tagline": "{{SITENAME}} деп веб-сайттан",
+ "tagline": "{{SITENAME}} сайттан",
"help": "Дуза",
- "search": "Диле",
+ "search": "Дилээр",
"searchbutton": "Дилээр",
"go": "Баары",
- "searcharticle": "Ð\9aÒ¯Ò¯cедиÑ\80и",
+ "searcharticle": "Че-ве",
"history": "Арынның төөгүзү",
"history_short": "Төөгү",
- "printableversion": "СаазÑ\8bнга үндүÑ\80еÑ\80ин көөÑ\80Ò¯",
- "permalink": "ТÑ\83Ñ\80Ñ\83м айÑ\82Ñ\8bг",
+ "printableversion": "Ð\9fаÑ\80лап үндүÑ\80еÑ\80 Ñ\8fнзÑ\8bзÑ\8b",
+ "permalink": "Ð\94окÑ\82аамал Ñ\88өлүлге",
"print": "Саазынга үндүрер",
- "view": "Көөрү",
+ "view": "Көөр",
+ "view-foreign": "$1 сайттан көөр",
"edit": "Эдер",
"create": "Чогаадыры",
+ "create-local": "Кызыы тайылбыр немээр",
"editthispage": "Бо арынны өскертири",
"create-this-page": "Бо арынны чогаадыры",
"delete": "Ыраары",
"unprotectthispage": "Бо арынның камгалалын өскертири",
"newpage": "Чаа арын",
"talkpage": "Бо арын дугайында чугаалажыры",
- "talkpagelinktext": "Чугаа",
+ "talkpagelinktext": "Чугаалажып сайгарар",
"specialpage": "Тускай арын",
"personaltools": "Хууда херекселдер",
"articlepage": "Допчу арынны көөрү",
- "talk": "ЧÑ\83гаа",
- "views": "Көрүүшкүннери",
+ "talk": "СайгаÑ\80Ñ\8bлга",
+ "views": "Көрүлделер",
"toolbox": "Херекселдер",
"userpage": "Ажыглакчының арынын көөрү",
"projectpage": "Төлевилелдиң арынын көөрү",
"categorypage": "Бөлүктүң арынын көөрү",
"viewtalkpage": "Чугааны көөрү",
"otherlanguages": "Өске дылдарга",
- "redirectedfrom": "($1 шигленген)",
+ "redirectedfrom": "($1 катап чоруткан)",
"redirectpagesub": "шигледир арын",
- "lastmodifiedat": "Бо арын сөөлгү катап $1, $2 өскерилген.",
+ "lastmodifiedat": "Бо арын сөөлгү катап $1-ның хүнүнде, $2 турда өскерилген.",
"protectedpage": "Камгалаган арын",
"jumpto": "Шилчиир:",
"jumptonavigation": "навигация",
- "jumptosearch": "дилээри",
+ "jumptosearch": "дилээр",
"pool-errorunknown": "Билбес алдаг",
"aboutsite": "{{SITENAME}} дугайында",
"aboutpage": "Project:Дугайында",
- "copyrightpage": "{{ns:project}}:ЧогаалÑ\87Ñ\8bнÑ\8bң эргелери",
+ "copyrightpage": "{{ns:project}}:авÑ\82оÑ\80нÑ\83ң эргелери",
"currentevents": "Амгы үеде болуушкуннар",
"currentevents-url": "Project:Амгы үеде болуушкуннар",
- "disclaimers": "Ð\90жÑ\8bглааÑ\80 Ñ\85аÑ\80Ñ\8bÑ\81аалгазÑ\8bн Ñ\87Ó©Ñ\80Ñ\87Ò¯Ò¯Ñ\80Ò¯ (ойÑ\82алааÑ\80Ñ\8b)",
- "disclaimerpage": "Project:Ð\90жÑ\8bглааÑ\80 Ñ\85аÑ\80Ñ\8bÑ\81аалгазÑ\8bн ойÑ\82алааÑ\80Ñ\8b",
+ "disclaimers": "ХаÑ\80Ñ\8bÑ\8bÑ\81алгадан ойÑ\82алал",
+ "disclaimerpage": "Project:ХаÑ\80Ñ\8bÑ\8bÑ\81алгадан ойÑ\82алааÑ\88кÑ\8bн",
"edithelp": "Эдеринге дуза",
- "mainpage": "Ð\9aол Ð\90рын",
- "mainpage-description": "Ð\9aол Ð\90рын",
+ "mainpage": "Ð\9aол арын",
+ "mainpage-description": "Ð\9aол арын",
"policy-url": "Project:Чурум",
- "portal": "Ниитилел хаалгазы",
- "portal-url": "Project:Ниитилел хаалгазы",
- "privacy": "Ð\90кÑ\82Ñ\8bг бүзүрел дугуржулгазы",
- "privacypage": "Project:Ð\90кÑ\82Ñ\8bг бүзүрел дугуржулгазы",
+ "portal": "Ниитилелдиң порталы",
+ "portal-url": "Project:Ниитилелдиң порталы",
+ "privacy": "Ð\91үзүрел дугуржулгазы",
+ "privacypage": "Project:Ð\91үзүрел дугуржулгазы",
"badaccess": "Алдаг:Эргеңер чок.",
"versionrequired": "МедиаВикиниң $1 үндүреризи херек",
"ok": "Чөп",
- "retrievedfrom": "«$1» деп адрестен парлаттынган",
+ "retrievedfrom": "Дөзү - «$1»",
"youhavenewmessages": "Силерде $1 ($2) бар.",
"youhavenewmessagesmulti": "«$1» деп арында силерге чаа чагаалар бар.",
"editsection": "эдер",
"editold": "эдер",
"viewsourceold": "дөзү кодун көөрү",
"editlink": "эдер",
- "viewsourcelink": "дөзү кодун көөрү",
- "editsectionhint": "«$1» деп салбырны эдер",
+ "viewsourcelink": "Үндезин кодту көөр",
+ "editsectionhint": "«$1» салбырны эдер",
"toc": "Допчузу",
"showtoc": "көргүзери",
"hidetoc": "чажырары",
"feedlinks": "Агым:",
"feed-invalid": "Бижидилгениң агым хевири багай-дыр.",
"site-rss-feed": "$1 RSS Медээ Агымы",
- "site-atom-feed": "$1 Atom Медээ Агымы",
+ "site-atom-feed": "$1 Atom-лента",
"page-rss-feed": "«$1» RSS Медээ Агымы",
"page-atom-feed": "«$1» Atom Медээ Агымы",
- "red-link-title": "$1 (арны чок)",
+ "red-link-title": "$1 (арын чок)",
"nstab-main": "Арын",
"nstab-user": "Ажыглакчының арыны",
"nstab-media": "Медиа арыны",
- "nstab-special": "ТÑ\83Ñ\81кай арын",
+ "nstab-special": "Ð\90лбан-Ñ\85аакÑ\87Ñ\8bÑ\82 арын",
"nstab-project": "Төлевилел дугайында",
"nstab-image": "Файл",
"nstab-mediawiki": "Чагаа",
"nstab-template": "Майык",
"nstab-help": "Дуза",
- "nstab-category": "Аңгылал",
+ "nstab-category": "Категория",
+ "mainpage-nstab": "Кол арын",
"nosuchaction": "Ындыг кылыг чок",
"nosuchspecialpage": "Ындыг тускай арын чок",
"error": "Алдаг",
"internalerror_info": "Иштики алдаг: $1",
"badtitle": "Багай ат",
"badtitletext": "Негеттинип турар арын ады меге, куруг, чок болза өске дылда азы интервикиде ады шын эвес айыттынган.\n\nАттарга ажыглавас ужурлуг демдектер, үжүктер бары чадапчок.",
- "viewsource": "Ð\94өзүн көөÑ\80Ò¯",
+ "viewsource": "Ð\9aÓ©Ñ\80үлде",
"actionthrottled": "Шеглээн дүрген",
"exception-nologin": "Кирбес",
"welcomeuser": "Кирип моорлаңар, %s!",
"yourname": "Aжыглакчының ады",
+ "userlogin-yourname": "Бүрүткел ат",
+ "userlogin-yourname-ph": "Бүрүткедир адыңар киириңер",
"yourpassword": "Чажыт сөс",
+ "userlogin-yourpassword": "Пароль",
"yourpasswordagain": "Чажыт сөзүңерни катап бижиңер:",
"remembermypassword": "Мени бо компьютерде сактып алыры ($1 {{PLURAL:$1|1=хүн|хүн}}ге чедир)",
"login": "Кирери",
"accountcreatedtext": "«$1» деп ажыглакчының бүрүткел бижиини бүдүрген.",
"login-abort-generic": "Системаже таптыг эвес кирип тур силер",
"loginlanguagelabel": "Дыл: $1",
+ "pt-login": "Кирер",
+ "pt-createaccount": "Бүрүткел бижик кылыр",
"pt-userlogout": "Үнер",
"php-mail-error-unknown": "PHP-ниң mail() ажыл-чорудулгазында билбес алдаг бар.",
"changepassword": "Чажыт сөстү өскертири",
"passwordreset-email": "Э-чагааның адреси:",
"passwordreset-emailelement": "Ажыглакчы ады: \n$1\n\nТүр чажыт сөс: \n$2",
"changeemail": "Э-чагааның адресин өскертири",
+ "changeemail-header": "Бүрүткел бижиктиң э-чагааның адресин өскертири",
"changeemail-oldemail": "Амгы э-чагааның адреси:",
"changeemail-newemail": "Чаа э-чагааның адреси:",
"changeemail-none": "(чок)",
"changeemail-submit": "Э-чагааны өскертири",
- "bold_sample": "Кара сөзүглел",
- "bold_tip": "Кара сөзүглел",
- "italic_sample": "Ð\98йлендиÑ\80еÑ\80 Ñ\81өзүглел",
- "italic_tip": "Курсив бижик",
- "link_sample": "ХолбаанÑ\8bң ады",
- "link_tip": "Ð\98Ñ\88Ñ\82ики Ñ\85олбаа",
+ "bold_sample": "семис үжүк",
+ "bold_tip": "семис үжүк",
+ "italic_sample": "кÑ\83Ñ\80Ñ\81ив Ñ\85евиÑ\80",
+ "italic_tip": "Курсив хевир",
+ "link_sample": "Шөлүлгениң ады",
+ "link_tip": "Ð\98Ñ\88Ñ\82ики Ñ\88өлүлге",
"extlink_sample": "http://www.example.com холбааның ады",
- "extlink_tip": "Ð\94аÑ\88Ñ\82Ñ\8bкÑ\8b Ñ\85олбаа (\"http://\" Ñ\87үве Ñ\81акÑ\82Ñ\8bп алÑ\8bр)",
- "headline_sample": "Ð\9aÑ\8bÑ\80Ñ\8bкÑ\8b сөзүглели",
- "headline_tip": "2-ги деңнелдиг кырыкы ады",
- "nowiki_sample": "Форматтаваан сөзүглелини бээр салыры",
- "nowiki_tip": "Вики форматтаарын херекке албас",
+ "extlink_tip": "Ð\94аÑ\88Ñ\82Ñ\8bкÑ\8b Ñ\88өлүлге (\"http://\" пÑ\80еÑ\84икÑ\81 дÑ\83гайÑ\8bнда Ñ\83Ñ\82паңар)",
+ "headline_sample": "Ðге аÑ\82Ñ\82Ñ\8bÒ£ сөзүглели",
+ "headline_tip": "2-ги деңнелдиң эге ады",
+ "nowiki_sample": "Форматтавас сөзүглелди бээр салыңар",
+ "nowiki_tip": "Вики-форматтаашкын кылбас",
"image_sample": "Чижек.jpg",
- "image_tip": "Киир туткан файл",
+ "image_tip": "Киирген файл",
"media_sample": "Чижек.ogg",
- "media_tip": "Файлдың холбаазы",
- "sig_tip": "Шак-биле Ñ\85ол үжүңеÑ\80",
+ "media_tip": "Файлче шөлүлге",
+ "sig_tip": "ХолÑ\83ңаÑ\80 үжүү, үе-Ñ\88агÑ\8b",
"hr_tip": "Доора шугум (көвей ажыглаваңар)",
"summary": "Түңнел:",
"subject": "Кол сөс:",
"minoredit": "Бо эдилге бичии-дир",
- "watchthis": "Бо арынны хайгаараары",
- "savearticle": "Арын шыгжаар",
+ "watchthis": "Бо арынны хайгаараар",
+ "savearticle": "Арынны шыгжаар",
"preview": "Чижеглей көөрү",
- "showpreview": "Чижеглей көөÑ\80Ò¯",
- "showdiff": "Өскерлиишкиннерни көргүзери",
- "anoneditwarning": "<strong>Кичээңгейлиг!</strong> Силер сайтче кирип албаан силер. Чаартылгалар киирер болзуңарза, Силерниң IP-адрезиңер чүүлдүң төөгүзүнге көстүп кээр. Кажан сайтче <strong>[$1 шолаңар-биле кире бээриңерге]</strong> азы <strong>[$2 чаа шола чаяап алырыңарга]</strong>, эдилгеңерни шолаңар-биле холбаап каар база Силерге ажыктыг тускай херекселдер тыптып келир.",
+ "showpreview": "Чижек көÑ\80үлде",
+ "showdiff": "Кииртинген эдилгелер",
+ "anoneditwarning": "<strong> Кичээңгейлиг! </strong> Сайтта бүрүткеттинмээн-дир силер. Кандыг-даа бол эдилгелер киирер болзуңарза, IP-адрезиңер хөйге көскү болур. Сайтче <strong>[$1 кире бээр азы]</strong> азы <strong>[$2 бүрүткеттинип алыр] болзуңарза, эдилгелер силерниң адыңар-биле холбаалыг апаар, силерге өске-даа эптиг аргаларлыг тыптып кээр.",
"missingcommenttext": "Тайылбырни адаанда чогаадыңар.",
"summary-preview": "Түңнелдү чижеглей көөрү:",
"subject-preview": "Кол сөс чижеглей көөрү:",
"blockednoreason": "чылдагаан чок",
"nosuchsectiontitle": "Бо салбыр чок",
- "loginreqlink": "кирери",
+ "loginreqlink": "кирер",
"accmailtitle": "Чажыт сөс чоргустунган.",
"accmailtext": "A randomly generated password for [[User talk:$1|$1]] has been sent to $2.\n\nThe password for this new account can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
"newarticle": "(Чаа)",
"newarticletext": "Амдыызында чаяатынмаан арынче шөлүглеп шилчий бердиңер.\nОну чаяарда адакы көзенекке сөзүглелден таналап киириңер ([$1 тайылбыр арынын] тода көрүңер).. \nМаңаа алдаг аайы-биле шилчий берген болзуңарза, браузериңерниң \"дедир\" деп таназын базыптыңар.",
"noarticletext": "Амдыызында ук арында сөзүглел чок.\nОл дилеп турар [[Special:Search/{{PAGENAME}}|арыныңар дугайында өске чүүлдерге бижээнин тып аап]] болур силер,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналдар аразынга айытканын көрүп болур силер] азы '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} шак ындыг аттыг арын чаяап болур силер]'''</span>.,",
- "noarticletext-nopermission": "Ð\90мдÑ\8bÑ\8bзÑ\8bнда Ñ\83к аÑ\80Ñ\8bнда Ñ\81өзүглел Ñ\87ок.\nÐ\9eл дилеп Ñ\82Ñ\83Ñ\80аÑ\80 [[Special:Search/{{PAGENAME}}|аÑ\80Ñ\8bнÑ\8bңаÑ\80 дÑ\83гайÑ\8bнда Ó©Ñ\81ке Ñ\87үүлдеÑ\80ге бижÑ\8dÑ\8dнин Ñ\82Ñ\8bп аап]] болÑ\83Ñ\80 Ñ\81илеÑ\80, азÑ\8b\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} жÑ\83Ñ\80налдаÑ\80 аÑ\80азÑ\8bнга айÑ\8bÑ\82канÑ\8bн көÑ\80үп болÑ\83Ñ\80 Ñ\81илеÑ\80]. Шак Ñ\8bндÑ\8bг Ñ\83к аÑ\80Ñ\8bн Ñ\87аÑ\8fаÑ\80 Ñ\87Ó©Ñ\88пÑ\8dÑ\8dÑ\80елиңеÑ\80 чок.",
+ "noarticletext-nopermission": "Ð\90мгÑ\8b үеде бо аÑ\80Ñ\8bнда Ñ\81өзүглел Ñ\87ок. Ук аÑ\82Ñ\82Ñ\8b Ó©Ñ\81ке аÑ\80Ñ\8bннаÑ\80дан Ñ\82Ñ\8bп ап, азÑ\8b [[Special:Search/{{PAGENAME}}|аÑ\80Ñ\8bнÑ\8bңаÑ\80 дÑ\83гайÑ\8bнда Ó©Ñ\81ке Ñ\87үүлдеÑ\80ге бижÑ\8dÑ\8dнин Ñ\82Ñ\8bп ап]] болÑ\83Ñ\80 Ñ\81илеÑ\80, азÑ\8b\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} депÑ\82еÑ\80леÑ\80де Ñ\87огÑ\83Ñ\83Ñ\80 бижикÑ\82еÑ\80ни Ñ\82Ñ\8bп ап болÑ\83Ñ\80 Ñ\81илеÑ\80]. Ук аÑ\80Ñ\8bннÑ\8b кÑ\8bлÑ\8bÑ\80 Ñ\87өпÑ\88Ñ\8dÑ\8dÑ\80ел Ñ\81илеÑ\80де чок.",
"userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» деп ажыглакчы is not registered.\nPlease check if you want to create/edit this page.",
"userpage-userdoesnotexist-view": "«$1» деп ажыглакчы not registered.",
"note": "'''Тайылбыр:'''",
"editingcomment": "«$1» деп арынны өскертип турар (чаа салбыр)",
"yourtext": "Силерниң сөзүглелиңер",
"yourdiff": "Ылгалдар",
- "templatesused": "Ð\91о аÑ\80Ñ\8bнда ажÑ\8bглаан {{PLURAL:$1|1=Ð\9cайÑ\8bк|Ð\9cайыктар}}:",
+ "templatesused": "Ð\91о аÑ\80Ñ\8bнда ажÑ\8bглап Ñ\82Ñ\83Ñ\80аÑ\80{{PLURAL:$1|1=майÑ\8bк|майыктар}}:",
"template-protected": "(камгалаан)",
- "template-semiprotected": "(Ñ\87еÑ\82пеÑ\81 камгалаан)",
- "hiddencategories": "Бо арын {{PLURAL:$1|$1 чажыт бөлүкке}} хамааржыр:",
- "permissionserrorstext-withaction": "Мында «'''$2'''» силерниң эргеңер чок, {{PLURAL:$1|1=чылдагааны|чылдагааннары}}:",
+ "template-semiprotected": "(Ñ\87аÑ\80Ñ\82Ñ\8bк-Ñ\87амдÑ\8bÑ\8bзÑ\8b камгалалдÑ\8bг)",
+ "hiddencategories": "Бо арын{{PLURAL:$1|$1 көзүлбес категорияга|$1 көзүлбес категорияларга|1=бир көзүлбес категорияга}} хамааржыр:",
+ "permissionserrorstext-withaction": "{{PLURAL:$1|1=дараазында чылдагаан-биле|дараазында чылдагааннар-биле}} $2-ни ажыглаар эрге силерде чок:",
"recreate-moveddeleted-warn": "'''Кичээңейлиг. Ооң мурнунда казыттынган арынны катап тургузар деп тур Силер.'''\n\nОл арынны катап тургузары шынап-ла чугула бе, боданыңар.\nБо адаанда ол арынның казыышкыннар болгаш өскээр адалгалар журналдарын көргүскен.",
"moveddeleted-notice": "Бо арын ап каавыткан.\nАдаанда ап каавыткан биле өскээр адаан бижиктер шынзылгазын көргүскен.",
"post-expand-template-inclusion-warning": "Сагындырыг: Кошкан майыктарның ниити хемчээли дендии улуг.\nЧамдык майыктар коштунмаан боор.",
"currentrev-asof": "Амгы $1 үениң бижээни",
"revisionasof": "$1 версиязы",
"revision-info": "$2 киржикчиниң $1 хүнүнде киирилдези",
- "previousrevision": "←Артык эрги үндүрери",
+ "previousrevision": "←Амдыы арын",
"nextrevision": "Артык чаа үндүрери→",
"currentrevisionlink": "Амгы үе үндүрери",
"cur": "амгы",
"next": "дараазында",
- "last": "эрткен",
+ "last": "амдыы",
"page_first": "бирги",
"page_last": "сөөлгү",
"histlegend": "Версиялар шилиири: деңнээр дээн арыныңар версияларын имнеңеш, бээр базыптыңар '''{{int:compare-submit}}'''.<br />\nТайылбыр: '''({{int:cur}})''' — амгы версиядан ылгавыр; '''({{int:last}})''' — эрткен версиядан ылгавыр; '''{{int:minoreditletter}}''' — биче өскерилгелер.",
"history-title": "«$1» деп арынның эдилге төөгүзү",
"lineno": "Одуруг $1:",
"compareselectedversions": "Шилип алган хевирлери деңнээри",
- "editundo": "чөрчүүрү",
- "searchresults": "ТүңнелдеÑ\80",
- "searchresults-title": "«$1» деп диле",
- "prevn": "эрткен {{PLURAL:$1|$1}}",
+ "editundo": "ойталаар",
+ "searchresults": "Ð\94илÑ\8dÑ\8dÑ\88кинниң Ñ\82үңнелдеÑ\80и",
+ "searchresults-title": "«$1» дилÑ\8dÑ\8dÑ\80",
+ "prevn": "амдыы {{PLURAL:$1|$1}}",
"nextn": "дараазында {{PLURAL:$1|$1}}",
"prevn-title": "Эрткен $1 {{PLURAL:$1|1=бижик|бижик}}",
"nextn-title": "Дараазында $1 {{PLURAL:$1|1=бижик|бижик}}",
- "shown-title": "Арынга $1 {{PLURAL:$1|түңнел}} көргүзер",
- "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) көөрү",
+ "shown-title": "Арынга $1 {{PLURAL:$1|бижикти, бижиктерни, бижиктерин}} көргүзер",
+ "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) көөр",
"searchmenu-exists": "'''Бо викиде \"[[:$1]]\" деп арын бар.'''",
- "searchmenu-new": "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
+ "searchmenu-new": "Бо вики-төлевилелге «[[:$1]]» деп арынны кылыр.{{PLURAL:$2|0=|Ол ышкаш дилээшкиниңерниң түңнелинде тывылган арынны база көрүңер.|Ол ышкаш дилээшкиниңерниң түңнелдерин база көрүңер.}}",
"searchprofile-articles": "үндезин арыннар",
"searchprofile-images": "Мультимедиа",
- "searchprofile-everything": "Ð\91үгүде",
- "searchprofile-advanced": "Ð\9aалбайÑ\82Ñ\8bÑ\80",
+ "searchprofile-everything": "каÑ\8fа-даа",
+ "searchprofile-advanced": "Ð\94елгеÑ\80еңгей",
"searchprofile-articles-tooltip": "$1 иштинден дилээри",
"searchprofile-images-tooltip": "Файлдар дилээри",
- "searchprofile-everything-tooltip": "Шупту арыннардан дилээри (сумележиишкиннерден база)",
+ "searchprofile-everything-tooltip": "Шупту арыннардан дилээр (сайгаржылга арыннарындан база)",
"searchprofile-advanced-tooltip": "Айыткан аттар делгемнеринден дилээри",
- "search-result-size": "$1 ({{PLURAL:$2|$2 сөс}})",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 сөс|$2 сөстер|$2}})",
"search-result-category-size": "{{PLURAL:$1|1=1 кежигүүн|$1 кежигүүн}} ({{PLURAL:$2|1=1 аңгылам|$2 аңгылам}}, {{PLURAL:$3|1=1 файл|$3 файл}})",
- "search-redirect": "($1-н Ñ\88иглелге)",
+ "search-redirect": "($1-ден Ñ\8dде Ñ\87оÑ\80Ñ\83дÑ\83г)",
"search-section": "(«$1» деп салбыр)",
"search-suggest": "Силер «$1» деп бодадыңар чадавас",
"search-interwiki-more": "(артык)",
"searchrelated": "холбаалыг",
"searchall": "шупту",
- "search-nonefound": "Ð\90йÑ\8bÑ\82кан негелдениң Ñ\82үңнели Ñ\87ок",
+ "search-nonefound": "Ð\90йÑ\8bÑ\82кан негелдеге дүгжүÑ\80 Ñ\87Ò¯Ò¯-даа Ñ\82Ñ\8bвÑ\8bлбаан.",
"powersearch-ns": "Аттар делгемнеринден дилээри:",
"powersearch-toggleall": "Шупту",
"preferences": "Шилилгелер",
"right-createaccount": "Чаа бүрүткел бижиктерин бүдүрери",
"right-move": "Арыннарны шимчээри",
"right-movefile": "Файлдарны шимчээри",
+ "right-writeapi": "API-ни бижикке ажыглаары",
"right-editusercssjs": "Өске ажыглакчыларның CSS база Javascript файлдарын өскертири.",
"right-editusercss": "Өске ажыглакчыларның CSS файлдарын өскертири.",
"right-edituserjs": "Өске ажыглакчыларның JavaScript файлдарын өскертири.",
- "newuserlogpage": "Чаа ажÑ\8bглакÑ\87Ñ\8b кÑ\8bÑ\80Ñ\8bнда жÑ\83Ñ\80нал",
+ "newuserlogpage": "Ð\9aиÑ\80жикÑ\87илеÑ\80 бүÑ\80Ò¯Ñ\82кÑ\8dÑ\8dÑ\80 депÑ\82еÑ\80",
"action-read": "бо арынны номчууру",
"action-edit": "бо арынның эдилгези",
"action-createpage": "арыннарны чогаадыры",
"action-movefile": "бо файлды шимчээри",
"action-sendemail": "э-чагаалар чорудары",
"nchanges": "$1 {{PLURAL:$1|өскерлиишкин}}",
- "recentchanges": "Ð\90мгÑ\8b Ó©Ñ\81кеÑ\80лииÑ\88киннер",
- "recentchanges-legend": "Ð\90мгÑ\8b Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80ниң Ñ\8dдиглеÑ\80и",
- "recentchanges-summary": "Ð\91о агÑ\8bмда викиниң Ñ\81өөлгү Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80ин көөÑ\80Ò¯.",
+ "recentchanges": "Чаа Ñ\8dдилгелер",
+ "recentchanges-legend": "Чаа Ñ\8dдилгелеÑ\80ни аайлааÑ\80",
+ "recentchanges-summary": "Ð\9cооң адаанда аÑ\80Ñ\8bннаÑ\80да Ñ\81өөлгү Ó©Ñ\81кеÑ\80илгелеÑ\80ни үе-Ñ\88ак аайÑ\8b-биле Ñ\87изелеп Ñ\87Ñ\8bÑ\81кааган.",
"recentchanges-feed-description": "Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.",
- "recentchanges-label-newpage": "Бо өскерлиишкин чаа арынны чогааткан.",
- "recentchanges-label-minor": "Ð\91о Ó©Ñ\81кеÑ\80лииÑ\88кин биÑ\87ии",
+ "recentchanges-label-newpage": "Бо эдилге-биле чаа арын кылдынган.",
+ "recentchanges-label-minor": "УлÑ\83г Ñ\8dвеÑ\81 Ó©Ñ\81кеÑ\80Ñ\82илге-диÑ\80",
"recentchanges-label-bot": "Бо эдилгени робот күүсеткен.",
- "recentchanges-label-unpatrolled": "Бо өскертилге истетинмээн (патрульдаттынмаан)",
+ "recentchanges-label-unpatrolled": "Бо эдилгени кым-даа хайгаараваан",
"recentchanges-label-plusminus": "Арынның сөзүглели бердинген түң байт-биле өскерилген",
- "recentchanges-legend-newpage": "$1 — чаа арын",
+ "recentchanges-legend-newpage": " $1 — чаа арыннар даңзызы",
"rcnotefrom": "<strong>$2</strong> үеде <strong>$1</strong> чедир өскертилгелерни санаан.",
- "rclistfrom": "$3 $2 тура чаа өскерилгелерни көргүзер",
- "rcshowhideminor": "Бичии өскерлиишкиннерни $1",
+ "rclistfrom": "$3 $2 тура өскерилгелерни көргүзер",
+ "rcshowhideminor": "$1 биче эдилгелер",
"rcshowhideminor-show": "көргүзер",
"rcshowhideminor-hide": "чажырар",
"rcshowhidebots": "Роботтарны $1",
- "rcshowhideliu": "Кирген киржикчилерни $1",
+ "rcshowhidebots-show": "Көргүзер",
+ "rcshowhideliu": "бүрүткеттинген киржикчилер $1",
"rcshowhideliu-show": "көргүзер",
- "rcshowhideliu-hide": "чажырар",
- "rcshowhideanons": "Адыжок киржикчилерни $1",
+ "rcshowhideliu-hide": "Чажырар",
+ "rcshowhideanons": "Ады билдинмес киржикчилер $1",
"rcshowhideanons-show": "көргүзер",
"rcshowhideanons-hide": "чажырар",
"rcshowhidepatr": "истээн өскерлиишкиннерни $1",
"rcshowhidepatr-show": "көргүзер",
"rcshowhidepatr-hide": "чажырар",
- "rcshowhidemine": "Эдиглеримни $1",
+ "rcshowhidemine": "$1 боттуң эдилгелери",
"rcshowhidemine-show": "көргүзер",
"rcshowhidemine-hide": "чажырар",
- "rclinks": "Сөөлгү $2 Ñ\85үн иÑ\88Ñ\82инде болган $1 өскерлиишкиннерни көргүзер<br />$3",
+ "rclinks": "ЧооккÑ\83 $2 Ñ\85үн иÑ\88Ñ\82инде Ñ\81өөлгү $1 өскерлиишкиннерни көргүзер<br />$3",
"diff": "ылгал",
"hist": "төөгү",
"hide": "Чажырар",
"newpageletter": "Ч",
"boteditletter": "р",
"number_of_watching_users_pageview": "[$1 хайгаараар {{PLURAL:$1|ажыглакчы}}]",
+ "rc-change-size-new": "Өскертилге соонда хемчээли:$1 {{PLURAL:$1|байт}}",
"newsectionsummary": "/* $1 */ чаа салбыр",
"rc-enhanced-expand": "Тодаларны көргүзери (JavaScript херек)",
"rc-enhanced-hide": "Тодаларны чажырары",
- "recentchangeslinked": "ХамааÑ\80Ñ\8bÑ\88кан өскерилгелер",
- "recentchangeslinked-toolbox": "ХамааÑ\80Ñ\8bÑ\88кан өскерилгелер",
- "recentchangeslinked-title": "«$1» деп арынга хамаарыштырган өскерлиишкиннер",
+ "recentchangeslinked": "ТÑ\83дÑ\83Ñ\88 өскерилгелер",
+ "recentchangeslinked-toolbox": "ТÑ\83дÑ\83Ñ\88 өскерилгелер",
+ "recentchangeslinked-title": "«$1» деп арынга кошкан эдилгелер",
"recentchangeslinked-summary": "Айыткан арынның (азы айыткан аңгылалга хамаарышкан) шөлүлүглериниң чедер арыннарнының чаа өскерилгер даңзызы.\n[[Special:Watchlist|Силерниң хайгаарал даңзызынче]] кирип турар арыннарны '''ылгап каан'''.",
"recentchangeslinked-page": "Арынның ады:",
- "recentchangeslinked-to": "Ð\90йÑ\8bÑ\82кан аÑ\80Ñ\8bнÑ\87е Ñ\88өлүп Ñ\82Ñ\83Ñ\80аÑ\80 аÑ\80Ñ\8bннаÑ\80га өскерилгелерни көргүзер",
- "upload": "Файл чүдүрер",
+ "recentchangeslinked-to": "Ð\90йÑ\8bÑ\82кан аÑ\80Ñ\8bнÑ\87е Ñ\88өлүп Ñ\82Ñ\83Ñ\80аÑ\80 аÑ\80Ñ\8bннаÑ\80да өскерилгелерни көргүзер",
+ "upload": "Файлды киир чүдүрер",
"uploadbtn": "Файлды салыры",
"uploadnologin": "Кирбес",
"uploaderror": "Кииреринге алдаг",
"upload-misc-error": "Билбес кииреринге алдаг",
"http-read-error": "HTTP-биле номчуур алдаг.",
"license": "Хоойлужудары:",
- "license-header": "ХоойлÑ\83жÑ\83дары",
+ "license-header": "Ð\9bиÑ\86ензиÑ\8fлаары",
"imgfile": "файл",
"listfiles": "Файл даңзызы",
"listfiles_name": "Ат",
"listfiles_count": "Үндүрерилер",
"file-anchor-link": "Файл",
"filehist": "Файлдың төөгүзү",
- "filehist-help": "Ð\9eл үеде Ñ\84айлдÑ\8bÒ£ көÑ\81Ñ\82Ò¯Ñ\80үн көөÑ\80де, даÑ\82а/үеже базÑ\8bпÑ\82Ñ\8bңар.",
+ "filehist-help": "Ð\90й-Ñ\85үн/үе-Ñ\88акÑ\87е базÑ\8bпкаÑ\88, Ñ\84айлдÑ\8bÒ£ Ñ\8bнÑ\87ан кандÑ\8bг Ñ\82Ñ\83Ñ\80ганÑ\8bн көÑ\80үңер.",
"filehist-deleteall": "шуптуну ырадыры",
"filehist-deleteone": "ырадыры",
"filehist-revert": "эгидип тургузары",
"filehist-current": "амгы",
- "filehist-datetime": "Ай, Хүн/Шак",
- "filehist-thumb": "Ð\91иÑ\87ии Ñ\87Ñ\83Ñ\80Ñ\83мал",
- "filehist-thumbtext": "$1 Ñ\85амааÑ\80жÑ\8bÑ\80 Ñ\85евиÑ\80иниң биÑ\87е Ñ\87Ñ\83Ñ\80Ñ\83малÑ\8b (миниаÑ\82Ñ\8eÑ\80азÑ\8b)",
- "filehist-user": "Ð\90жÑ\8bглакÑ\87Ñ\8b",
+ "filehist-datetime": "Ай-хүн/Үе-шак",
+ "filehist-thumb": "Ынай Ñ\87Ñ\83Ñ\80Ñ\83к",
+ "filehist-thumbtext": "$1 Ñ\8fнзÑ\8bзÑ\8bнга Ñ\8bнай Ñ\87Ñ\83Ñ\80Ñ\83к",
+ "filehist-user": "Ð\9aиÑ\80жикÑ\87и",
"filehist-dimensions": "Хемчээлдери",
"filehist-filesize": "Файл хемчээли",
"filehist-comment": "Тайылбыр",
"imagelinks": "Файлдың ажыглаашкыны",
- "linkstoimage": "Ð\91еÑ\80динген Ñ\84айлÑ\87е даÑ\80аазÑ\8bнда {{PLURAL:$1|1=аÑ\80Ñ\8bн Ñ\88өлүдүп Ñ\82Ñ\83Ñ\80|$1 аÑ\80Ñ\8bн Ñ\88өлүдүп Ñ\82Ñ\83Ñ\80}}:",
+ "linkstoimage": "Ð\94аÑ\80аазÑ\8bнда {{PLURAL:$1|1=аÑ\80Ñ\8bн|$1 аÑ\80Ñ\8bннаÑ\80нÑ\8bÒ£ Ñ\88өлүлгези Ñ\84айл}}:",
"nolinkstoimage": "Бердинген файлче шөлүп турар арыннар чок.",
- "sharedupload-desc-here": "Моон $1 алган файл өске төлевилелдерге ажыглаттынып болур.\nОоң [$2 допчу тайылбыр арынындан] медеглели адаанда бердинген.",
+ "sharedupload-desc-here": "Моон $1 алган файл өске төлевилелдерге база ажыглаттынып болур.\nОоң [$2 тайылбыр арнындан] медээни адаанда киирген.",
+ "upload-disallowed-here": "Бо файлды эде бижидип шыдавас силер.",
"filerevert": "$1 эгидип тургузары",
"filerevert-legend": "Файлды эгидип тургузары",
"filerevert-comment": "Чылдагаан:",
"unwatchedpages": "Хайгаарабас арыннар",
"unusedtemplates": "Ажыглаан эвес майыктар",
"unusedtemplateswlh": "өске холбаалар",
- "randompage": "Душ арын",
+ "randompage": "Дужа-келби таварышкан арын",
"statistics": "Статистика",
"statistics-pages": "Арыннар",
"brokenredirects-edit": "өскертири",
"nbytes": "$1 {{PLURAL:$1|байт}}",
"ncategories": "$1 {{PLURAL:$1|аңгылал}}",
"nlinks": "$1 {{PLURAL:$1|холбаа}}",
- "nmembers": "$1 {{PLURAL:$1|кежигүн}}",
+ "nmembers": "$1 {{PLURAL:$1|кежигүн|кежигүннер}}",
"nrevisions": "$1 {{PLURAL:$1|үндүрери}}",
"specialpage-empty": "Бо илеткелдиң түңнели чок.",
"lonelypages": "Чааскаан арыннар",
"move": "Шимчээри",
"movethispage": "Бо арынны шимчээри",
"pager-newer-n": "{{PLURAL:$1|артык чаа}}",
- "pager-older-n": "{{PLURAL:$1|аÑ\80Ñ\82Ñ\8bк Ñ\8dÑ\81ки}}",
+ "pager-older-n": "{{PLURAL:$1|аÑ\80Ñ\82Ñ\8bк Ñ\8dÑ\80ги}}",
"booksources": "Номнарның үнген дөзү",
"booksources-search-legend": "Номнуң медээлерин дилээри",
"specialloguserlabel": "Күүседикчи:",
"speciallogtitlelabel": "Target (aтка азы ажыглакчыга):",
- "log": "Ð\96Ñ\83Ñ\80налдар",
+ "log": "Ð\94епÑ\82еÑ\80лер",
"allpages": "Шупту арыннар",
"nextpage": "Дараазында арын ($1)",
"prevpage": "Эрткен арын ($1)",
"allarticles": "Шупту арыннар",
- "allpagessubmit": "Ð\9aÒ¯Ò¯cедиÑ\80и",
+ "allpagessubmit": "Че-ве",
"categories": "Аңгылалдар",
"sp-deletedcontributions-contribs": "дадывыр",
"linksearch": "Даштыкы холбааларга дилээри",
"namespace": "Аттар делгеми:",
"invert": "Шилээнин аңдарар. (Обратить выбранное)",
"blanknamespace": "(Кол)",
- "contributions": "{{GENDER:$1|Ð\90жÑ\8bглакÑ\87Ñ\8bнÑ\8bÒ£}} Ñ\81алÑ\8bÑ\8bÑ\88кÑ\8bннаÑ\80Ñ\8b",
+ "contributions": "{{GENDER:$1|киÑ\80жикÑ\87иниң}} үлүү",
"contributions-title": "«$1» деп ажыглакчының салыышкыннары",
"mycontris": "Дадывыр",
"contribsub2": "$1 ($2)",
"isredirect": "шиглидер арын",
"istemplate": "киирткен арыннар",
"isimage": "файлдың холбаазы",
- "whatlinkshere-prev": "{{PLURAL:$1|1=эрткен|эрткен $1}}",
+ "whatlinkshere-prev": "{{PLURAL:$1|1= амдыы|амдыы $1}}",
"whatlinkshere-next": "{{PLURAL:$1|1=дараазында|дараазында $1}}",
"whatlinkshere-links": "← холбаалар",
"whatlinkshere-hideredirs": "$1-че шиглиглер",
"blocklist-reason": "Чылдагаан",
"ipblocklist-submit": "Дилээр",
"infiniteblock": "кезээ-мөңгеде",
- "blocklink": "кÑ\8bзÑ\8bгааÑ\80лааÑ\80Ñ\8b",
+ "blocklink": "доÑ\81Ñ\82Ñ\83Ñ\80аÑ\80",
"unblocklink": "ажыдып хостаар",
"change-blocklink": "кызыгаарлаашкынны өскертири",
- "contribslink": "дадывыр",
+ "contribslink": "үлүг",
"blocklogpage": "Кызыгаарлаашкынның журналы",
"blocklogentry": ", [[$1]] $2 дургузунда кызыгаарлаттынган: $3",
"block-log-flags-anononly": "чүгле адыжок киржикчилер",
"unlockbtn": "Медээ шыгжамырын ажыттынар",
"move-page": "«$1» деп арынны шимчээри",
"move-page-legend": "Арынны шимчээр",
- "movearticle": "Бо арынны шимчээри:",
"newtitle": "Чаа ат:",
"move-watch": "Бо арынны хайгаараары",
"movepagebtn": "Арынны шимчээри",
"tooltip-pt-preferences": "Силерниң шилилгеңер",
"tooltip-pt-watchlist": "Карактап (хынап) турар өскертилгелерге хамааржыр арыннарның даңзызы",
"tooltip-pt-mycontris": "Силерниң салыышкыннарыңарның даңзызы",
- "tooltip-pt-login": "Ð\9cаңаа Ñ\81иÑ\81Ñ\82емаже кииÑ\80 бүÑ\80Ò¯Ñ\82кенип болÑ\83Ñ\80, Ñ\8bнÑ\87алза-даа ол албан эвес.",
+ "tooltip-pt-login": "Ð\9cаңаа Ñ\81иÑ\81Ñ\82емага бүÑ\80Ò¯Ñ\82кедип ап болÑ\83Ñ\80, Ñ\87огÑ\83м албан эвес.",
"tooltip-pt-logout": "Үнери",
- "tooltip-ca-talk": "Бо арын дугайында чыгаалажыры",
- "tooltip-ca-edit": "Ук арынны эдип болур силер. Эдилгеңер бижидерин бертинде чижеглей көөрүн утпаңар.",
- "tooltip-ca-addsection": "Чаа салбыр чаяар",
- "tooltip-ca-viewsource": "Бо арын камгалаттырган.\nДөзү кодун көрүп болур силер.",
- "tooltip-ca-history": "Арынның мурнуку өскерлиишкиннери",
+ "tooltip-pt-createaccount": "Албан эвес-даа болза, бүрүткел бижикти кылгаш, системаже кирерин силерге саналдап тур бис.",
+ "tooltip-ca-talk": "Кол арынны сайгарары",
+ "tooltip-ca-edit": "Бо арынны эдер",
+ "tooltip-ca-addsection": "Чаа салбыр кылыр",
+ "tooltip-ca-viewsource": "Бо арынны өскертилгелерден камгалап каан, чогум ону көрүп, ооң үндезин кодун хоолгалап ап болур силер.",
+ "tooltip-ca-history": "Арынның өскерлиишкиннериниң дептери",
"tooltip-ca-protect": "Бо арынны камгалаары",
"tooltip-ca-delete": "Бо арынны ырадыры",
"tooltip-ca-move": "Бо арынны шимчээри",
- "tooltip-ca-watch": "СилеÑ\80ниң Ñ\85айгааÑ\80ал даңзÑ\8bзÑ\8bнга бо аÑ\80Ñ\8bннÑ\8b немеÑ\80елÑ\8dÑ\8dÑ\80и",
+ "tooltip-ca-watch": "Ð\91о аÑ\80Ñ\8bннÑ\8b Ñ\85айгааÑ\80алÑ\8bңаÑ\80 даңзÑ\8bзÑ\8bнÑ\87е немÑ\8dÑ\8dÑ\80",
"tooltip-ca-unwatch": "Силерниң хайгаарал даңзызындан бо арынны ырадыры",
- "tooltip-search": "{{grammar:locative|{{SITENAME}}}} дилээри",
- "tooltip-search-go": "Шак Ñ\8bндÑ\8bг аÑ\82Ñ\82Ñ\8bг аÑ\80Ñ\8bнÑ\87е Ñ\89илчиир",
- "tooltip-search-fulltext": "Ð\91о бижике аÑ\80Ñ\8bннаÑ\80дан дилÑ\8dÑ\8dÑ\80и",
- "tooltip-p-logo": "Ð\9aол Ð\90Ñ\80Ñ\8bн",
- "tooltip-n-mainpage": "Ð\9aол Ð\90рынче шилчиир",
- "tooltip-n-mainpage-description": "Ð\9aол Ð\90Ñ\80Ñ\8bнÑ\87е киÑ\80еÑ\80и",
- "tooltip-n-portal": "Төлевилел дÑ\8bгайÑ\8bнда, Ñ\87үнү кÑ\8bлÑ\8bп болÑ\83Ñ\80 Ñ\81илеÑ\80, кайда Ñ\87Ò¯Ò¯ Ñ\87Ñ\8bдарыл",
- "tooltip-n-currentevents": "Ам болуп турар таварылгалар даңзызы",
- "tooltip-n-recentchanges": "Ð\92икиниң Ñ\8dниÑ\80 Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80и",
- "tooltip-n-randompage": "Душ арынны көөрү",
- "tooltip-n-help": "Төлевилелдиң Ñ\82айÑ\8bлбÑ\8bÑ\80Ñ\8b «{{SITENAME}}»",
- "tooltip-t-whatlinkshere": "Ð\91үгү маңаа Ñ\88өлүÑ\82ген вики арыннарның даңзызы",
- "tooltip-t-recentchangeslinked": "Бо арындан шөлүткен өске арыннарның сөөлгү өскерлиишкиннери",
+ "tooltip-search": "{{grammar:locative|{{SITENAME}}}} дилээр",
+ "tooltip-search-go": "Шак Ñ\8bндÑ\8bг аÑ\82Ñ\82Ñ\8bг аÑ\80Ñ\8bнÑ\87е Ñ\88илчиир",
+ "tooltip-search-fulltext": "Ð\90йÑ\8bÑ\82Ñ\82Ñ\8bнган Ñ\81өзүглелдиг аÑ\80Ñ\8bннаÑ\80нÑ\8b дилÑ\8dÑ\8dÑ\80",
+ "tooltip-p-logo": "Ð\9aол аÑ\80Ñ\8bнÑ\87е киÑ\80еÑ\80",
+ "tooltip-n-mainpage": "Ð\9aол арынче шилчиир",
+ "tooltip-n-mainpage-description": "Ð\9aол аÑ\80Ñ\8bнÑ\87е киÑ\80еÑ\80",
+ "tooltip-n-portal": "Төлевилел дÑ\83гайÑ\8bнда, маңаа Ñ\87үнү кÑ\8bлÑ\8bп болÑ\83Ñ\80Ñ\83л, ол Ñ\8bÑ\88каÑ\88 кайда Ñ\87Ò¯Ò¯ барыл",
+ "tooltip-n-currentevents": "Амгы болуушкуннар дугайында медээ",
+ "tooltip-n-recentchanges": "Ð\92икиниң Ñ\81өөлгү Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80 даңзÑ\8bзÑ\8b",
+ "tooltip-n-randompage": "Дужа-келби таварышкан арынны көөр",
+ "tooltip-n-help": "ШÑ\8bнзÑ\8bлга ап болÑ\83Ñ\80 Ñ\87еÑ\80",
+ "tooltip-t-whatlinkshere": "Ук аÑ\80Ñ\8bнÑ\87е Ñ\88өлүлгелиг Ñ\88Ñ\83пÑ\82Ñ\83 арыннарның даңзызы",
+ "tooltip-t-recentchangeslinked": "Бо арындан шөлүлгелиг арыннарында сөөлгү өскерилгелер",
"tooltip-feed-rss": "Бо арының РСС медээ агымы",
"tooltip-feed-atom": "Бо арының Атом медээ агымы",
"tooltip-t-contributions": "Бо ажыглакчының салыышкыннарының даңзазын көөрү.",
"tooltip-t-emailuser": "Бо ажыглакчыга э-чагааны чорудаары",
- "tooltip-t-upload": "Файлдарны киирери",
- "tooltip-t-specialpages": "ШÑ\83пÑ\82Ñ\83 Ñ\82Ñ\83Ñ\81кай арыннар даңзызы",
- "tooltip-t-print": "Бо арынның парлаттынар хевири",
- "tooltip-t-permalink": "Ук арынның амгы янзызының турум айтыы",
- "tooltip-ca-nstab-main": "Ð\94опÑ\87Ñ\8b аÑ\80Ñ\8bнÑ\8bн көөÑ\80Ò¯",
+ "tooltip-t-upload": "Файлдарны киир чүдүрери",
+ "tooltip-t-specialpages": "Ð\90лбан-Ñ\85аакÑ\87Ñ\8bÑ\82 арыннар даңзызы",
+ "tooltip-t-print": "Бо арынның парлап үндүрер янзызы",
+ "tooltip-t-permalink": "Ук арынның амгы янзызының доктаамал шөлүлгези",
+ "tooltip-ca-nstab-main": "Ð\9aол аÑ\80Ñ\8bннÑ\8b көөÑ\80",
"tooltip-ca-nstab-user": "Ажыглакчының арынын көөрү",
"tooltip-ca-nstab-media": "Медиа арынын көөрү",
- "tooltip-ca-nstab-special": "Ð\91о бөлгÑ\8dÑ\8dÑ\82 аÑ\80Ñ\8bн-дÑ\8bÑ\80 (Ñ\81лÑ\83жебнаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а), ооң эдери болдунмас.",
+ "tooltip-ca-nstab-special": "Ð\91о албан-Ñ\85аакÑ\87Ñ\8bÑ\82 аÑ\80Ñ\8bн-дÑ\8bÑ\80, онÑ\83 эдери болдунмас.",
"tooltip-ca-nstab-project": "Төлевилелдиң арынын көөрү",
- "tooltip-ca-nstab-image": "Файлдың арынын көөрү",
+ "tooltip-ca-nstab-image": "Файлдың арны",
"tooltip-ca-nstab-template": "Майыкты көөрү",
"tooltip-ca-nstab-help": "Дуза арынын көөрү",
- "tooltip-ca-nstab-category": "Ð\90ңгÑ\8bлалдÑ\8bÒ£ аÑ\80Ñ\8bнÑ\8bн көөÑ\80Ò¯",
+ "tooltip-ca-nstab-category": "Ð\9aаÑ\82егоÑ\80иÑ\8f аÑ\80нÑ\8b",
"tooltip-minoredit": "Бо өскертилгени \"биче\" деп демдеглээр",
- "tooltip-save": "СилеÑ\80ниң Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80иңеÑ\80ни Ñ\88Ñ\8bгжааÑ\80Ñ\8b",
- "tooltip-preview": "ШÑ\8bгжааÑ\80 мÑ\83Ñ\80нÑ\83нда Ñ\81илеÑ\80ниң Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80ин Ñ\87ижеглеп көÑ\80ем!",
- "tooltip-diff": "Бо сөзүглелге хамаарыштыр кандыг өскертилгелерни кылган Силер - ону көргүзер.",
+ "tooltip-save": "ÐдилгелеÑ\80иңеÑ\80ни Ñ\88Ñ\8bгжап аÑ\80Ñ\82Ñ\82Ñ\8bÑ\80аÑ\80",
+ "tooltip-preview": "Ð\90Ñ\80Ñ\8bннÑ\8bÒ£ Ñ\87ижек көÑ\80үлдези: Ñ\88Ñ\8bгжааÑ\80 беÑ\82инде онÑ\83 ажÑ\8bглааÑ\80 Ñ\81илеÑ\80!",
+ "tooltip-diff": "Үндезин сөзүглелге хамаарыштыр кылдынган өскерлиишкиннерни көргүзер.",
"tooltip-compareselectedversions": "Бо арынның шилиттинген ийи хевиринниң ылгалын көөр.",
"tooltip-watch": "Силерниң хайгаарал даңзызынга бо арынны немерелээри",
"tooltip-rollback": "Сөөлгү киржикчиниң өскерилгелерин чаңгыс баскаш, ойталаар",
"tooltip-undo": "Киирген эдигни казааш, ойталалдың чылдагаанын айтыр аргалыг мурнай көргүзүүн көргүзер.",
- "tooltip-summary": "Кысказы-биле бижиңер",
+ "tooltip-summary": "Кыска тайылбырны киириңер",
"anonymous": "{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}",
+ "simpleantispam-label": "Спам-га удур хыналда.\nМону <strong>долдуруңар </strong>долдурбаңар",
"pageinfo-title": "«$1» дугайында",
"pageinfo-header-basic": "Кол медээлел",
"pageinfo-toolboxlink": "Арын дугайында",
"file-info-size-pages": "$1 × $2 пикcелдер, файл хемчээли: $3, MIME хевири: $4, $5 {{PLURAL:$5|1=арын|арын}}",
"file-nohires": "Оон улуг хевири чок",
"svg-long-desc": "SVG файл, $1 x $2 пиксел, файл хемчээли: $3",
- "show-big-image": "Улуг чурумал",
+ "show-big-image": "Үндезин файл",
"show-big-image-size": "$1 × $2 пиксел",
"newimages-legend": "Шүүрү",
"noimages": "Nothing to see.",
"ago": "$1 бурунгаар",
"bad_image_list": "Формады мындыг боор ужурлуг:\n\nЧүгле даңзының идегеттери (элементилери) санатынар боор (* деп демдектен эгелээн одуруглар).\nОдуругнуң бирги шөлүдүү салдынмас чурумалче шөлүдүг болуру албан.\nОл-ла одуругнуң арткан шөлүдүглери онзагай кылдыр азы чурумал капсырып болур чүүлдер кылдыр санаттынар.",
"metadata": "Чурумал дугайында медээлер",
- "metadata-help": "Бо файл немелде данныйларлыг:санныг камералар азы сканнерлер дугайында медеглел. Файл чаяанының соонда эдидип турган болза, чамдык параметрлери амгы чурумалга меге кылдыр хамааржып болур.",
+ "metadata-help": "Бо файлда цифралыг камераларның болгаш сканерлерниң немеп каары немелде медээлер бар. Файлды кылган соонда эдип турган болза, ооң чамдык параметрлери ооң амгы чуруунга дүүшпес бооп болур.",
"metadata-fields": "Бо даңзыда айыткан чурумалдар метаданныйларның кезектери чурумалдың арынынга көстүп кээр, метаданныйлар таблицазын дүрүп каан болур. \nАрткан кезектер аайлаан ёзугаар чажыт көстүр.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Калбаа",
"exif-imagelength": "Бедик",
+ "exif-orientation": "Кадрның ориентациязы",
+ "exif-xresolution": "доора разрешение",
+ "exif-yresolution": "узун дургаар разрешение",
+ "exif-datetime": "Файлды өскерткен ай-хүн, үе-шак",
"exif-imagedescription": "Чурумалдың ады",
+ "exif-make": "Камераның бүдүрүкчүзү",
+ "exif-model": "Камераның модели",
"exif-artist": "Чогаадыкчы",
+ "exif-colorspace": "Өңнер девискээри",
"exif-usercomment": "Ажыглакчының тайылбырлары",
+ "exif-datetimeoriginal": "Шын ай-хүн болгаш үе-шак",
"exif-jpegfilecomment": "JPEG фалй тайылбыры",
"exif-headline": "Баш ат",
"exif-languagecode": "Дыл",
"compare-submit": "Дөмейлээри",
"htmlform-submit": "Күүcедири",
"htmlform-selectorother-other": "Өске",
+ "logentry-delete-delete": "$1 {{GENDER:$2|арынны баладып каапкан}} $3",
"rightsnone": "(чок)",
"feedback-cancel": "Соксаары",
"feedback-message": "Чагаа:",
"feedback-subject": "Кол сөс:",
- "searchsuggest-search": "Ð\94илÑ\8dÑ\8dÑ\88кин",
+ "searchsuggest-search": "Ð\94илÑ\8dÑ\8dÑ\80",
"duration-seconds": "$1 {{PLURAL:$1|секунда|секунда}}",
"duration-minutes": "$1 {{PLURAL:$1|минут|минут}}",
"duration-hours": "$1 {{PLURAL:$1|шак|шак}}",
"enhancedrc-history": "tarix",
"recentchanges": "Yangi oʻzgarishlar",
"recentchanges-legend": "Yangi oʻzgarishlar moslamalari",
- "recentchanges-summary": "Bu sahifada siz {{SITENAME}}da sodir boʻlgan soʻnggi oʻzgarishlarni koʻrishingiz mumkin.",
+ "recentchanges-summary": "Bu sahifada {{SITENAME}} loyihasida sodir boʻlgan soʻnggi oʻzgarishlarni koʻrishingiz mumkin.",
"recentchanges-noresult": "Koʻrsatilgan muddatga va shartlarga oid oʻzgarishlar topilmadi.",
"recentchanges-feed-description": "Vikida mazkur oqimdagi oxirgi oʻzgarishlarni kuzatish",
"recentchanges-label-newpage": "Bu tahrir orqali yangi sahifa yaratilgan",
"undeleteinvert": "Tanlash tartibini almashtirish",
"undeletecomment": "Sababi:",
"undeletedrevisions": "{{PLURAL:$1|1 ta oʻzgarish|$1 ta tahrirlar}} tiklandi",
- "undeletedfiles": "$1 ta fayl tiklandi",
+ "undeletedfiles": "{{PLURAL:$1|Bitta fayl|$1 ta fayl}} tiklandi",
"undelete-search-title": "O'chirilgan sahifalarni qidirish",
"undelete-search-box": "O'chirilgan sahifalarni qidirish",
"undelete-search-prefix": "Bundan boshlangan sahifalarni koʻrsatish:",
} elseif ( $this->state == "page" ) {
$this->thisPage .= $data;
}
- }
- elseif ( $this->lastName == "model" ) {
+ } elseif ( $this->lastName == "model" ) {
$this->thisRevModel .= $data;
- }
- elseif ( $this->lastName == "format" ) {
+ } elseif ( $this->lastName == "format" ) {
$this->thisRevFormat .= $data;
}
"ooui-dialog-process-dismiss": "Փակել",
"ooui-dialog-process-retry": "Կրկին փորձել",
"ooui-dialog-process-continue": "Շարունակել",
+ "ooui-selectfile-button-select": "Ընտրել նիշք",
"ooui-selectfile-not-supported": "Ֆայլի ընտրությունը չի պաշտպանվում",
- "ooui-selectfile-placeholder": "Ֆայլն ընտրված չէ"
+ "ooui-selectfile-placeholder": "Ֆայլն ընտրված չէ",
+ "ooui-selectfile-dragdrop-placeholder": "Ֆայլը գցել այստե"
}
"Gleki",
"NoiX180",
"Pras",
- "Jadinegara"
+ "Jadinegara",
+ "Meursault2004"
]
},
"ooui-outline-control-move-down": "Pindhahaken butir mangandhap",
- "ooui-outline-control-move-up": "Pindhah kara mêndhuwur",
+ "ooui-outline-control-move-up": "Pindhah kara menyang dhuwur",
"ooui-outline-control-remove": "Busak kara",
- "ooui-toolbar-more": "Mênèh",
- "ooui-toolgroup-expand": "Mênèh",
+ "ooui-toolbar-more": "Manèh",
+ "ooui-toolgroup-expand": "Manèh",
"ooui-toolgroup-collapse": "Suda",
"ooui-dialog-message-accept": "Oké",
"ooui-dialog-message-reject": "Batal",
"ooui-dialog-process-dismiss": "Tutup",
"ooui-dialog-process-retry": "Jajal manèh",
"ooui-dialog-process-continue": "Tutug",
- "ooui-selectfile-not-supported": "Pilihan bêrkas ora disokong",
- "ooui-selectfile-placeholder": "Ora ana bêrkas sing kapilih"
+ "ooui-selectfile-not-supported": "Pilihan berkas ora disokong",
+ "ooui-selectfile-placeholder": "Ora ana berkas sing kapilih"
}
"ooui-dialog-process-retry": "Nach eng Kéier probéieren",
"ooui-dialog-process-continue": "Virufueren",
"ooui-selectfile-button-select": "E Fichier eraussichen",
+ "ooui-selectfile-not-supported": "D'Eraussiche vu Fichiere gëtt net ënnerstëtzt.",
"ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht",
"ooui-selectfile-dragdrop-placeholder": "Fichier hei ofleeën"
}
},
"ooui-outline-control-move-down": "Perkelti elementą žemyn",
"ooui-outline-control-move-up": "Perkelti elementą aukštyn",
- "ooui-outline-control-remove": "Šalinti elementus",
+ "ooui-outline-control-remove": "Šalinti įrašą",
"ooui-toolbar-more": "Daugiau",
"ooui-toolgroup-expand": "Daugiau",
"ooui-toolgroup-collapse": "Mažiau",
"ooui-dialog-process-dismiss": "Dispensar",
"ooui-dialog-process-retry": "Tentar novamente",
"ooui-dialog-process-continue": "Continuar",
+ "ooui-selectfile-button-select": "Selecionar um arquivo",
"ooui-selectfile-not-supported": "O selecionamento de arquivos não é suportado",
- "ooui-selectfile-placeholder": "Nenhum arquivo selecionado"
+ "ooui-selectfile-placeholder": "Nenhum arquivo selecionado",
+ "ooui-selectfile-dragdrop-placeholder": "Arraste o arquivo para cá"
}
/*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-27T17:53:00Z
+ * Date: 2015-11-03T21:42:28Z
*/
@-webkit-keyframes oo-ui-progressBarWidget-slide {
from {
.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
background-color: transparent;
}
-.oo-ui-textInputWidget-icon {
- width: 2em;
-}
.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
outline: none;
}
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
width: 1.875em;
+ max-height: 2.375em;
margin-left: 0.3em;
}
.oo-ui-textInputWidget.oo-ui-indicatorElement input,
}
.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
width: 0.9375em;
+ max-height: 2.375em;
margin-right: 0.775em;
}
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
/*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-27T17:52:51Z
+ * Date: 2015-11-03T21:42:20Z
*/
/**
* @class
/*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-27T17:53:00Z
+ * Date: 2015-11-03T21:42:28Z
*/
@-webkit-keyframes oo-ui-progressBarWidget-slide {
from {
.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
background-color: transparent;
}
-.oo-ui-textInputWidget-icon {
- width: 2em;
-}
.oo-ui-textInputWidget.oo-ui-widget-enabled input,
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-webkit-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
left: 0;
width: 1.875em;
+ max-height: 2.375em;
margin-left: 0.5em;
height: 100%;
background-position: right center;
}
.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
width: 0.9375em;
+ max-height: 2.375em;
margin: 0 0.775em;
height: 100%;
}
margin-right: 2.0875em;
}
.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
- margin-right: 2.475em;
+ margin-left: 2.475em;
}
.oo-ui-menuSelectWidget {
position: absolute;
/*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-27T17:52:51Z
+ * Date: 2015-11-03T21:42:20Z
*/
/**
* @class
/*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2015 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2015-10-27T17:52:51Z
+ * Date: 2015-11-03T21:42:20Z
*/
( function ( OO ) {
}
}
} );
+ // allow widgets to reuse parts of the DOM
+ data = cls.static.reusePreInfuseDOM( $elem[ 0 ], data );
// pick up dynamic state, like focus, value of form inputs, scroll position, etc.
- state = cls.static.gatherPreInfuseState( $elem, data );
+ state = cls.static.gatherPreInfuseState( $elem[ 0 ], data );
+ // rebuild widget
// jscs:disable requireCapitalizedConstructors
- obj = new cls( data ); // rebuild widget
+ obj = new cls( data );
+ // jscs:enable requireCapitalizedConstructors
// now replace old DOM with this new DOM.
if ( top ) {
- $elem.replaceWith( obj.$element );
- // This element is now gone from the DOM, but if anyone is holding a reference to it,
- // let's allow them to OO.ui.infuse() it and do what they expect (T105828).
- // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.
- $elem[ 0 ].oouiInfused = obj;
+ // An efficient constructor might be able to reuse the entire DOM tree of the original element,
+ // so only mutate the DOM if we need to.
+ if ( $elem[ 0 ] !== obj.$element[ 0 ] ) {
+ $elem.replaceWith( obj.$element );
+ // This element is now gone from the DOM, but if anyone is holding a reference to it,
+ // let's allow them to OO.ui.infuse() it and do what they expect (T105828).
+ // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.
+ $elem[ 0 ].oouiInfused = obj;
+ }
top.resolve();
}
obj.$element.data( 'ooui-infused', obj );
return obj;
};
+/**
+ * Pick out parts of `node`'s DOM to be reused when infusing a widget.
+ *
+ * This method **must not** make any changes to the DOM, only find interesting pieces and add them
+ * to `config` (which should then be returned). Actual DOM juggling should then be done by the
+ * constructor, which will be given the enhanced config.
+ *
+ * @protected
+ * @param {HTMLElement} node
+ * @param {Object} config
+ * @return {Object}
+ */
+OO.ui.Element.static.reusePreInfuseDOM = function ( node, config ) {
+ return config;
+};
+
/**
* Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of a HTML DOM node
* (and its children) that represent an Element of the same class and the given configuration,
* @throws {Error} An error is thrown if no widget is specified
*/
OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
- var hasInputWidget, div, i;
+ var hasInputWidget, div;
// Allow passing positional parameters inside the config object
if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
// Properties
this.fieldWidget = fieldWidget;
- this.errors = config.errors || [];
- this.notices = config.notices || [];
+ this.errors = [];
+ this.notices = [];
this.$field = $( '<div>' );
this.$messages = $( '<ul>' );
this.$body = $( '<' + ( hasInputWidget ? 'label' : 'div' ) + '>' );
this.$element
.addClass( 'oo-ui-fieldLayout' )
.append( this.$help, this.$body );
- if ( this.errors.length || this.notices.length ) {
- this.$element.append( this.$messages );
- }
this.$body.addClass( 'oo-ui-fieldLayout-body' );
this.$messages.addClass( 'oo-ui-fieldLayout-messages' );
this.$field
.toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
.append( this.fieldWidget.$element );
- for ( i = 0; i < this.notices.length; i++ ) {
- this.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );
- }
- for ( i = 0; i < this.errors.length; i++ ) {
- this.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );
- }
-
+ this.setErrors( config.errors || [] );
+ this.setNotices( config.notices || [] );
this.setAlignment( config.align );
};
};
/**
+ * @protected
* @param {string} kind 'error' or 'notice'
* @param {string|OO.ui.HtmlSnippet} text
* @return {jQuery}
return this;
};
+/**
+ * Set the list of error messages.
+ *
+ * @param {Array} errors Error messages about the widget, which will be displayed below the widget.
+ * The array may contain strings or OO.ui.HtmlSnippet instances.
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setErrors = function ( errors ) {
+ this.errors = errors.slice();
+ this.updateMessages();
+ return this;
+};
+
+/**
+ * Set the list of notice messages.
+ *
+ * @param {Array} notices Notices about the widget, which will be displayed below the widget.
+ * The array may contain strings or OO.ui.HtmlSnippet instances.
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setNotices = function ( notices ) {
+ this.notices = notices.slice();
+ this.updateMessages();
+ return this;
+};
+
+/**
+ * Update the rendering of error and notice messages.
+ *
+ * @private
+ */
+OO.ui.FieldLayout.prototype.updateMessages = function () {
+ var i;
+ this.$messages.empty();
+
+ if ( this.errors.length || this.notices.length ) {
+ this.$body.after( this.$messages );
+ } else {
+ this.$messages.remove();
+ return;
+ }
+
+ for ( i = 0; i < this.notices.length; i++ ) {
+ this.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );
+ }
+ for ( i = 0; i < this.errors.length; i++ ) {
+ this.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );
+ }
+};
+
/**
* ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,
* and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),
* @param {Object} [config] Configuration options
* @cfg {string} [name=''] The value of the input’s HTML `name` attribute.
* @cfg {string} [value=''] The value of the input.
- * @cfg {string} [accessKey=''] The access key of the input.
+ * @cfg {string} [dir] The directionality of the input (ltr/rtl).
* @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
* before it is accepted.
*/
.append( this.$input );
this.setValue( config.value );
this.setAccessKey( config.accessKey );
+ if ( config.dir ) {
+ this.setDir( config.dir );
+ }
};
/* Setup */
/* Static Methods */
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.static.reusePreInfuseDOM = function ( node, config ) {
+ config = OO.ui.InputWidget.parent.static.reusePreInfuseDOM( node, config );
+ // Reusing $input lets browsers preserve inputted values across page reloads (T114134)
+ config.$input = $( node ).find( '.oo-ui-inputWidget-input' );
+ return config;
+};
+
/**
* @inheritdoc
*/
OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {
- var
- state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config ),
- $input = state.$input || $( node ).find( '.oo-ui-inputWidget-input' );
- state.value = $input.val();
+ var state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config );
+ state.value = config.$input.val();
// Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward
- state.focus = $input.is( ':focus' );
+ state.focus = config.$input.is( ':focus' );
return state;
};
* @param {Object} config Configuration options
* @return {jQuery} Input element
*/
-OO.ui.InputWidget.prototype.getInputElement = function () {
- return $( '<input>' );
+OO.ui.InputWidget.prototype.getInputElement = function ( config ) {
+ // See #reusePreInfuseDOM about config.$input
+ return config.$input || $( '<input>' );
};
/**
};
/**
- * Set the direction of the input, either RTL (right-to-left) or LTR (left-to-right).
+ * Set the directionality of the input, either RTL (right-to-left) or LTR (left-to-right).
*
- * @param {boolean} isRTL
- * Direction is right-to-left
+ * @deprecated since v0.13.1, use #setDir directly
+ * @param {boolean} isRTL Directionality is right-to-left
+ * @chainable
*/
OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
- this.$input.prop( 'dir', isRTL ? 'rtl' : 'ltr' );
+ this.setDir( isRTL ? 'rtl' : 'ltr' );
+ return this;
+};
+
+/**
+ * Set the directionality of the input.
+ *
+ * @param {string} dir Text directionality: 'ltr', 'rtl' or 'auto'
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setDir = function ( dir ) {
+ this.$input.prop( 'dir', dir );
+ return this;
};
/**
* @protected
*/
OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
- var type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ?
- config.type :
- 'button';
+ var type;
+ // See InputWidget#reusePreInfuseDOM about config.$input
+ if ( config.$input ) {
+ return config.$input.empty();
+ }
+ type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ? config.type : 'button';
return $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + type + '">' );
};
* @inheritdoc
*/
OO.ui.CheckboxInputWidget.static.gatherPreInfuseState = function ( node, config ) {
- var
- state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config ),
- $input = $( node ).find( '.oo-ui-inputWidget-input' );
- state.$input = $input; // shortcut for performance, used in InputWidget
- state.checked = $input.prop( 'checked' );
+ var state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config );
+ state.checked = config.$input.prop( 'checked' );
return state;
};
* @inheritdoc
* @protected
*/
-OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
+OO.ui.DropdownInputWidget.prototype.getInputElement = function ( config ) {
+ // See InputWidget#reusePreInfuseDOM about config.$input
+ if ( config.$input ) {
+ return config.$input.addClass( 'oo-ui-element-hidden' );
+ }
return $( '<input type="hidden">' );
};
* @inheritdoc
*/
OO.ui.RadioInputWidget.static.gatherPreInfuseState = function ( node, config ) {
- var
- state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config ),
- $input = $( node ).find( '.oo-ui-inputWidget-input' );
- state.$input = $input; // shortcut for performance, used in InputWidget
- state.checked = $input.prop( 'checked' );
+ var state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config );
+ state.checked = config.$input.prop( 'checked' );
return state;
};
this.maxRows = config.maxRows || Math.max( 2 * ( this.minRows || 0 ), 10 );
this.validate = null;
this.styleHeight = null;
+ this.scrollWidth = null;
// Clone for resizing
if ( this.autosize ) {
* @inheritdoc
*/
OO.ui.TextInputWidget.static.gatherPreInfuseState = function ( node, config ) {
- var
- state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config ),
- $input = $( node ).find( '.oo-ui-inputWidget-input' );
- state.$input = $input; // shortcut for performance, used in InputWidget
+ var state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config );
if ( config.multiline ) {
- state.scrollTop = $input.scrollTop();
+ state.scrollTop = config.$input.scrollTop();
}
return state;
};
* @fires resize
*/
OO.ui.TextInputWidget.prototype.adjustSize = function () {
- var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight, newHeight;
-
- if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
- this.$clone
- .val( this.$input.val() )
- .attr( 'rows', this.minRows )
- // Set inline height property to 0 to measure scroll height
- .css( 'height', 0 );
-
- this.$clone.removeClass( 'oo-ui-element-hidden' );
-
- this.valCache = this.$input.val();
-
- scrollHeight = this.$clone[ 0 ].scrollHeight;
-
- // Remove inline height property to measure natural heights
- this.$clone.css( 'height', '' );
- innerHeight = this.$clone.innerHeight();
- outerHeight = this.$clone.outerHeight();
-
- // Measure max rows height
- this.$clone
- .attr( 'rows', this.maxRows )
- .css( 'height', 'auto' )
- .val( '' );
- maxInnerHeight = this.$clone.innerHeight();
-
- // Difference between reported innerHeight and scrollHeight with no scrollbars present
- // Equals 1 on Blink-based browsers and 0 everywhere else
- measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
- idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
-
- this.$clone.addClass( 'oo-ui-element-hidden' );
-
- // Only apply inline height when expansion beyond natural height is needed
- // Use the difference between the inner and outer height as a buffer
- newHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';
- if ( newHeight !== this.styleHeight ) {
- this.$input.css( 'height', newHeight );
- this.styleHeight = newHeight;
- this.emit( 'resize' );
+ var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError,
+ idealHeight, newHeight, scrollWidth, property;
+
+ if ( this.multiline && this.$input.val() !== this.valCache ) {
+ if ( this.autosize ) {
+ this.$clone
+ .val( this.$input.val() )
+ .attr( 'rows', this.minRows )
+ // Set inline height property to 0 to measure scroll height
+ .css( 'height', 0 );
+
+ this.$clone.removeClass( 'oo-ui-element-hidden' );
+
+ this.valCache = this.$input.val();
+
+ scrollHeight = this.$clone[ 0 ].scrollHeight;
+
+ // Remove inline height property to measure natural heights
+ this.$clone.css( 'height', '' );
+ innerHeight = this.$clone.innerHeight();
+ outerHeight = this.$clone.outerHeight();
+
+ // Measure max rows height
+ this.$clone
+ .attr( 'rows', this.maxRows )
+ .css( 'height', 'auto' )
+ .val( '' );
+ maxInnerHeight = this.$clone.innerHeight();
+
+ // Difference between reported innerHeight and scrollHeight with no scrollbars present
+ // Equals 1 on Blink-based browsers and 0 everywhere else
+ measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
+ idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
+
+ this.$clone.addClass( 'oo-ui-element-hidden' );
+
+ // Only apply inline height when expansion beyond natural height is needed
+ // Use the difference between the inner and outer height as a buffer
+ newHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';
+ if ( newHeight !== this.styleHeight ) {
+ this.$input.css( 'height', newHeight );
+ this.styleHeight = newHeight;
+ this.emit( 'resize' );
+ }
+ }
+ scrollWidth = this.$input[ 0 ].offsetWidth - this.$input[ 0 ].clientWidth;
+ if ( scrollWidth !== this.scrollWidth ) {
+ property = this.$element.css( 'direction' ) === 'rtl' ? 'left' : 'right';
+ // Reset
+ this.$label.css( { right: '', left: '' } );
+ this.$indicator.css( { right: '', left: '' } );
+
+ if ( scrollWidth ) {
+ this.$indicator.css( property, scrollWidth );
+ if ( this.labelPosition === 'after' ) {
+ this.$label.css( property, scrollWidth );
+ }
+ }
+
+ this.scrollWidth = scrollWidth;
+ this.positionLabel();
}
}
return this;
.toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )
.toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );
+ this.valCache = null;
+ this.scrollWidth = null;
+ this.adjustSize();
this.positionLabel();
return this;
rtl = this.$element.css( 'direction' ) === 'rtl';
property = after === rtl ? 'padding-left' : 'padding-right';
- this.$input.css( property, this.$label.outerWidth( true ) );
+ this.$input.css( property, this.$label.outerWidth( true ) + ( after ? this.scrollWidth : 0 ) );
return this;
};
OO.inheritClass( mw.widgets.ComplexTitleInputWidget, OO.ui.Widget );
+ /* Static Methods */
+ /*jshint -W024*/
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.ComplexTitleInputWidget.static.reusePreInfuseDOM = function ( node, config ) {
+ config = mw.widgets.ComplexTitleInputWidget.parent.static.reusePreInfuseDOM( node, config );
+ config.namespace = mw.widgets.NamespaceInputWidget.static.reusePreInfuseDOM(
+ $( node ).find( '.mw-widget-namespaceInputWidget' ),
+ config.namespace
+ );
+ config.title = mw.widgets.TitleInputWidget.static.reusePreInfuseDOM(
+ $( node ).find( '.mw-widget-titleInputWidget' ),
+ config.title
+ );
+ return config;
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.ComplexTitleInputWidget.static.gatherPreInfuseState = function ( node, config ) {
+ var state = mw.widgets.ComplexTitleInputWidget.parent.static.gatherPreInfuseState( node, config );
+ state.namespace = mw.widgets.NamespaceInputWidget.static.gatherPreInfuseState(
+ $( node ).find( '.mw-widget-namespaceInputWidget' ),
+ config.namespace
+ );
+ state.title = mw.widgets.TitleInputWidget.static.gatherPreInfuseState(
+ $( node ).find( '.mw-widget-titleInputWidget' ),
+ config.title
+ );
+ return state;
+ };
+
+ /*jshint +W024*/
+
/* Methods */
/**
this.title.setNamespace( Number( this.namespace.getValue() ) );
};
+ /**
+ * @inheritdoc
+ */
+ mw.widgets.ComplexTitleInputWidget.prototype.restorePreInfuseState = function ( state ) {
+ mw.widgets.ComplexTitleInputWidget.parent.prototype.restorePreInfuseState.call( this, state );
+ this.namespace.restorePreInfuseState( state.namespace );
+ this.title.restorePreInfuseState( state.title );
+ };
+
}( jQuery, mediaWiki ) );
--- /dev/null
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Ori Livneh <ori@wikimedia.org>
+ */
+
+class TimingTest extends PHPUnit_Framework_TestCase {
+
+ /**
+ * @covers Timing::clearMarks
+ * @covers Timing::getEntries
+ */
+ public function testClearMarks() {
+ $timing = new Timing;
+ $this->assertCount( 1, $timing->getEntries() );
+
+ $timing->mark( 'a' );
+ $timing->mark( 'b' );
+ $this->assertCount( 3, $timing->getEntries() );
+
+ $timing->clearMarks( 'a' );
+ $this->assertNull( $timing->getEntryByName( 'a' ) );
+ $this->assertNotNull( $timing->getEntryByName( 'b' ) );
+
+ $timing->clearMarks();
+ $this->assertCount( 1, $timing->getEntries() );
+ }
+
+ /**
+ * @covers Timing::mark
+ * @covers Timing::getEntryByName
+ */
+ public function testMark() {
+ $timing = new Timing;
+ $timing->mark( 'a' );
+
+ $entry = $timing->getEntryByName( 'a' );
+ $this->assertEquals( 'a', $entry['name'] );
+ $this->assertEquals( 'mark', $entry['entryType'] );
+ $this->assertArrayHasKey( 'startTime', $entry );
+ $this->assertEquals( 0, $entry['duration'] );
+
+ $timing->mark( 'a' );
+ $newEntry = $timing->getEntryByName( 'a' );
+ $this->assertGreaterThan( $entry['startTime'], $newEntry['startTime'] );
+ }
+
+ /**
+ * @covers Timing::measure
+ */
+ public function testMeasure() {
+ $timing = new Timing;
+
+ $timing->mark( 'a' );
+ $a = $timing->getEntryByName( 'a' );
+
+ $timing->mark( 'b' );
+ $b = $timing->getEntryByName( 'b' );
+
+ $timing->measure( 'a_to_b', 'a', 'b' );
+
+ $entry = $timing->getEntryByName( 'a_to_b' );
+ $this->assertEquals( 'a_to_b', $entry['name'] );
+ $this->assertEquals( 'measure', $entry['entryType'] );
+ $this->assertEquals( $a['startTime'], $entry['startTime'] );
+ $this->assertEquals( $b['startTime'] - $a['startTime'], $entry['duration'] );
+ }
+
+ /**
+ * @covers Timing::getEntriesByType
+ */
+ public function testGetEntriesByType() {
+ $timing = new Timing;
+
+ $timing->mark( 'mark_a' );
+ usleep( 100 );
+ $timing->mark( 'mark_b' );
+ usleep( 100 );
+ $timing->mark( 'mark_c' );
+
+ $timing->measure( 'measure_a', 'mark_a', 'mark_b' );
+ $timing->measure( 'measure_b', 'mark_b', 'mark_c' );
+
+ $marks = array_map( function ( $entry ) {
+ return $entry['name'];
+ }, $timing->getEntriesByType( 'mark' ) );
+
+ $this->assertEquals( array( 'requestStart', 'mark_a', 'mark_b', 'mark_c' ), $marks );
+
+ $measures = array_map( function ( $entry ) {
+ return $entry['name'];
+ }, $timing->getEntriesByType( 'measure' ) );
+
+ $this->assertEquals( array( 'measure_a', 'measure_b' ), $measures );
+ }
+}