the ParserOutput::getText() post-cache transformations.
* Added a hook, UploadForm:getInitialPageText, to allow extensions to alter the
initial page text for file uploads.
-* (T181651) The info page for File pages now displays the file's base-36 SHA1
+* (T181651) The info page for File pages now displays the file's base-16 SHA1
hash value in the table of basic information.
=== External library changes in 1.31 ===
* because articles can be created such that they are hard to view or edit.
*
* In some rare cases you may wish to remove + for compatibility with old links.
- *
- * Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but
- * this breaks interlanguage links
*/
$wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+";
// being set. This is used by ConfirmEdit to display a captcha
// without any error message cruft.
} else {
- $this->hookError = $status->getWikiText();
+ $this->hookError = $this->formatStatusErrors( $status );
}
// Use the existing $status->value if the hook set it
if ( !$status->value ) {
} elseif ( !$status->isOK() ) {
# ...or the hook could be expecting us to produce an error
// FIXME this sucks, we should just use the Status object throughout
- $this->hookError = $status->getWikiText();
+ $this->hookError = $this->formatStatusErrors( $status );
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR_EXPECTED;
return false;
return true;
}
+ /**
+ * Wrap status errors in an errorbox for increased visiblity
+ *
+ * @param Status $status
+ * @return string Wikitext
+ */
+ private function formatStatusErrors( Status $status ) {
+ $errmsg = $status->getWikiText(
+ 'edit-error-short',
+ 'edit-error-long',
+ $this->context->getLanguage()
+ );
+ return <<<ERROR
+<div class="errorbox">
+{$errmsg}
+</div>
+<br clear="all" />
+ERROR;
+ }
+
/**
* Return the summary to be used for a new section.
*
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionStore;
use Wikimedia\Rdbms\LBFactory;
use LinkCache;
return $this->getService( 'RevisionStore' );
}
+ /**
+ * @since 1.31
+ * @return RevisionLookup
+ */
+ public function getRevisionLookup() {
+ return $this->getService( 'RevisionLookup' );
+ }
+
+ /**
+ * @since 1.31
+ * @return RevisionFactory
+ */
+ public function getRevisionFactory() {
+ return $this->getService( 'RevisionFactory' );
+ }
+
/**
* @since 1.31
* @return PreferencesFactory
use MediaWiki\Storage\MutableRevisionRecord;
use MediaWiki\Storage\RevisionAccessException;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionRecord;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\RevisionStoreRecord;
return MediaWikiServices::getInstance()->getRevisionStore();
}
+ /**
+ * @return RevisionLookup
+ */
+ protected static function getRevisionLookup() {
+ return MediaWikiServices::getInstance()->getRevisionLookup();
+ }
+
+ /**
+ * @return RevisionFactory
+ */
+ protected static function getRevisionFactory() {
+ return MediaWikiServices::getInstance()->getRevisionFactory();
+ }
+
/**
* @param bool|string $wiki The ID of the target wiki database. Use false for the local wiki.
*
* @return Revision|null
*/
public static function newFromId( $id, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionById( $id, $flags );
+ $rec = self::getRevisionLookup()->getRevisionById( $id, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
* @return Revision|null
*/
public static function newFromTitle( LinkTarget $linkTarget, $id = 0, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionByTitle( $linkTarget, $id, $flags );
+ $rec = self::getRevisionLookup()->getRevisionByTitle( $linkTarget, $id, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
* @return Revision|null
*/
public static function newFromPageId( $pageId, $revId = 0, $flags = 0 ) {
- $rec = self::getRevisionStore()->getRevisionByPageId( $pageId, $revId, $flags );
+ $rec = self::getRevisionLookup()->getRevisionByPageId( $pageId, $revId, $flags );
return $rec === null ? null : new Revision( $rec, $flags );
}
}
}
- $rec = self::getRevisionStore()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
+ $rec = self::getRevisionFactory()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
return new Revision( $rec, self::READ_NORMAL, $title );
}
*/
public static function newFromRow( $row ) {
if ( is_array( $row ) ) {
- $rec = self::getRevisionStore()->newMutableRevisionFromArray( $row );
+ $rec = self::getRevisionFactory()->newMutableRevisionFromArray( $row );
} else {
- $rec = self::getRevisionStore()->newRevisionFromRow( $row );
+ $rec = self::getRevisionFactory()->newRevisionFromRow( $row );
}
return new Revision( $rec );
$row['user'] = $wgUser;
}
- $this->mRecord = self::getRevisionStore()->newMutableRevisionFromArray(
+ $this->mRecord = self::getRevisionFactory()->newMutableRevisionFromArray(
$row,
$queryFlags,
$this->ensureTitle( $row, $queryFlags, $title )
);
} elseif ( is_object( $row ) ) {
- $this->mRecord = self::getRevisionStore()->newRevisionFromRow(
+ $this->mRecord = self::getRevisionFactory()->newRevisionFromRow(
$row,
$queryFlags,
$this->ensureTitle( $row, $queryFlags, $title )
*/
public function getPrevious() {
$title = $this->getTitle();
- $rec = self::getRevisionStore()->getPreviousRevision( $this->mRecord, $title );
+ $rec = self::getRevisionLookup()->getPreviousRevision( $this->mRecord, $title );
return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title );
}
*/
public function getNext() {
$title = $this->getTitle();
- $rec = self::getRevisionStore()->getNextRevision( $this->mRecord, $title );
+ $rec = self::getRevisionLookup()->getNextRevision( $this->mRecord, $title );
return $rec === null ? null : new Revision( $rec, self::READ_NORMAL, $title );
}
return false;
}
- $record = self::getRevisionStore()->getKnownCurrentRevision( $title, $revId );
+ $record = self::getRevisionLookup()->getKnownCurrentRevision( $title, $revId );
return $record ? new Revision( $record ) : false;
}
}
return $store;
},
+ 'RevisionLookup' => function ( MediaWikiServices $services ) {
+ return $services->getRevisionStore();
+ },
+
+ 'RevisionFactory' => function ( MediaWikiServices $services ) {
+ return $services->getRevisionStore();
+ },
+
'BlobStoreFactory' => function ( MediaWikiServices $services ) {
global $wgContLang;
return new BlobStoreFactory(
if ( $title->inNamespace( NS_FILE ) ) {
$fileObj = wfFindFile( $title );
if ( $fileObj !== false ) {
- $output = $fileObj->getSha1();
+ // Convert the base-36 sha1 value obtained from database to base-16
+ $output = Wikimedia\base_convert( $fileObj->getSha1(), 36, 16, 40 );
$pageInfo['header-basic'][] = [
$this->msg( 'pageinfo-file-hash' ),
$output
}
/**
- * Set the IContextSource object
- *
* @since 1.18
* @param IContextSource $context
*/
}
/**
- * Get the Config object
- *
* @since 1.23
* @return Config
*/
}
/**
- * Get the WebRequest object
- *
* @since 1.18
* @return WebRequest
*/
}
/**
- * Get the Title object
- *
* @since 1.18
* @return Title|null
*/
}
/**
- * Get the OutputPage object
- *
* @since 1.18
* @return OutputPage
*/
}
/**
- * Get the User object
- *
* @since 1.18
* @return User
*/
}
/**
- * Get the Language object
- *
* @since 1.19
* @return Language
*/
}
/**
- * Get the Skin object
- *
* @since 1.18
* @return Skin
*/
}
/**
- * Get the Timing object
- *
* @since 1.27
* @return Timing
*/
}
/**
- * Get the Stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @since 1.25
}
/**
- * Set the SiteConfiguration object
- *
- * @param Config $s
+ * @param Config $config
*/
- public function setConfig( Config $s ) {
- $this->config = $s;
+ public function setConfig( Config $config ) {
+ $this->config = $config;
}
/**
- * Get the Config object
- *
* @return Config
*/
public function getConfig() {
}
/**
- * Get the stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @return IBufferingStatsdDataFactory
}
/**
- * Get the timing object
- *
* @return Timing
*/
public function getTiming() {
}
/**
- * Set the WebRequest object
- *
- * @param WebRequest $r
+ * @param WebRequest $request
*/
- public function setRequest( WebRequest $r ) {
- $this->request = $r;
+ public function setRequest( WebRequest $request ) {
+ $this->request = $request;
}
/**
- * Get the WebRequest object
- *
* @return WebRequest
*/
public function getRequest() {
}
/**
- * Set the Title object
- *
- * @param Title $t
+ * @param Title $title
*/
- public function setTitle( Title $t ) {
- $this->title = $t;
+ public function setTitle( Title $title ) {
+ $this->title = $title;
}
/**
- * Get the Title object
- *
* @return Title|null
*/
public function getTitle() {
}
/**
- * Set the WikiPage object
- *
* @since 1.19
- * @param WikiPage $p
+ * @param WikiPage $wikiPage
*/
- public function setWikiPage( WikiPage $p ) {
- $this->wikipage = $p;
+ public function setWikiPage( WikiPage $wikiPage ) {
+ $this->wikipage = $wikiPage;
}
/**
}
/**
- * Set the OutputPage object
- *
- * @param OutputPage $o
+ * @param OutputPage $output
*/
- public function setOutput( OutputPage $o ) {
- $this->output = $o;
+ public function setOutput( OutputPage $output ) {
+ $this->output = $output;
}
/**
- * Get the OutputPage object
- *
* @return OutputPage
*/
public function getOutput() {
}
/**
- * Set the User object
- *
- * @param User $u
+ * @param User $user
*/
- public function setUser( User $u ) {
- $this->user = $u;
+ public function setUser( User $user ) {
+ $this->user = $user;
}
/**
- * Get the User object
- *
* @return User
*/
public function getUser() {
}
/**
- * Set the Language object
- *
- * @param Language|string $l Language instance or language code
+ * @param Language|string $language Language instance or language code
* @throws MWException
* @since 1.19
*/
- public function setLanguage( $l ) {
- if ( $l instanceof Language ) {
- $this->lang = $l;
- } elseif ( is_string( $l ) ) {
- $l = RequestContext::sanitizeLangCode( $l );
- $obj = Language::factory( $l );
+ public function setLanguage( $language ) {
+ if ( $language instanceof Language ) {
+ $this->lang = $language;
+ } elseif ( is_string( $language ) ) {
+ $language = RequestContext::sanitizeLangCode( $language );
+ $obj = Language::factory( $language );
$this->lang = $obj;
} else {
throw new MWException( __METHOD__ . " was passed an invalid type of data." );
}
/**
- * Get the Language object
- *
* @return Language
* @since 1.19
*/
}
/**
- * Set the Skin object
- *
- * @param Skin $s
+ * @param Skin $skin
*/
- public function setSkin( Skin $s ) {
- $this->skin = clone $s;
+ public function setSkin( Skin $skin ) {
+ $this->skin = clone $skin;
$this->skin->setContext( $this );
}
/**
- * Get the Skin object
- *
* @return Skin
*/
public function getSkin() {
* shutdown by separate persistence handler objects, for example.
*/
interface IContextSource extends MessageLocalizer {
+
/**
- * Get the WebRequest object
- *
* @return WebRequest
*/
public function getRequest();
/**
- * Get the Title object
- *
* @return Title|null
*/
public function getTitle();
public function getWikiPage();
/**
- * Get the OutputPage object
- *
* @return OutputPage
*/
public function getOutput();
/**
- * Get the User object
- *
* @return User
*/
public function getUser();
/**
- * Get the Language object
- *
* @return Language
* @since 1.19
*/
public function getLanguage();
/**
- * Get the Skin object
- *
* @return Skin
*/
public function getSkin();
public function getConfig();
/**
- * Get the stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @since 1.25
public function getStats();
/**
- * Get the timing object
- *
* @since 1.27
* @return Timing
*/
*/
interface MutableContext {
+
/**
- * Set the Config object
- *
* @param Config $config
*/
public function setConfig( Config $config );
/**
- * Set the WebRequest object
- *
- * @param WebRequest $r
+ * @param WebRequest $request
*/
- public function setRequest( WebRequest $r );
+ public function setRequest( WebRequest $request );
/**
- * Set the Title object
- *
- * @param Title $t
+ * @param Title $title
*/
- public function setTitle( Title $t );
+ public function setTitle( Title $title );
/**
- * Set the WikiPage object
- *
- * @param WikiPage $p
+ * @param WikiPage $wikiPage
*/
- public function setWikiPage( WikiPage $p );
+ public function setWikiPage( WikiPage $wikiPage );
/**
- * Set the OutputPage object
- *
- * @param OutputPage $o
+ * @param OutputPage $output
*/
- public function setOutput( OutputPage $o );
+ public function setOutput( OutputPage $output );
/**
- * Set the User object
- *
- * @param User $u
+ * @param User $user
*/
- public function setUser( User $u );
+ public function setUser( User $user );
/**
- * Set the Language object
- *
- * @param Language|string $l Language instance or language code
+ * @param Language|string $language Language instance or language code
*/
- public function setLanguage( $l );
+ public function setLanguage( $language );
/**
- * Set the Skin object
- *
- * @param Skin $s
+ * @param Skin $skin
*/
- public function setSkin( Skin $s );
+ public function setSkin( Skin $skin );
}
}
/**
- * Set the WebRequest object
- *
- * @param WebRequest $r
+ * @param WebRequest $request
*/
- public function setRequest( WebRequest $r ) {
- $this->request = $r;
+ public function setRequest( WebRequest $request ) {
+ $this->request = $request;
}
/**
- * Get the WebRequest object
- *
* @return WebRequest
*/
public function getRequest() {
}
/**
- * Get the Stats object
- *
* @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
*
* @return IBufferingStatsdDataFactory
}
/**
- * Get the timing object
- *
* @return Timing
*/
public function getTiming() {
}
/**
- * Set the Title object
- *
* @param Title|null $title
*/
public function setTitle( Title $title = null ) {
}
/**
- * Get the Title object
- *
* @return Title|null
*/
public function getTitle() {
}
/**
- * Set the WikiPage object
- *
* @since 1.19
- * @param WikiPage $p
+ * @param WikiPage $wikiPage
*/
- public function setWikiPage( WikiPage $p ) {
- $pageTitle = $p->getTitle();
+ public function setWikiPage( WikiPage $wikiPage ) {
+ $pageTitle = $wikiPage->getTitle();
if ( !$this->hasTitle() || !$pageTitle->equals( $this->getTitle() ) ) {
$this->setTitle( $pageTitle );
}
// Defer this to the end since setTitle sets it to null.
- $this->wikipage = $p;
+ $this->wikipage = $wikiPage;
}
/**
}
/**
- * @param OutputPage $o
+ * @param OutputPage $output
*/
- public function setOutput( OutputPage $o ) {
- $this->output = $o;
+ public function setOutput( OutputPage $output ) {
+ $this->output = $output;
}
/**
- * Get the OutputPage object
- *
* @return OutputPage
*/
public function getOutput() {
}
/**
- * Set the User object
- *
- * @param User $u
+ * @param User $user
*/
- public function setUser( User $u ) {
- $this->user = $u;
+ public function setUser( User $user ) {
+ $this->user = $user;
}
/**
- * Get the User object
- *
* @return User
*/
public function getUser() {
}
/**
- * Set the Language object
- *
- * @param Language|string $l Language instance or language code
+ * @param Language|string $language Language instance or language code
* @throws MWException
* @since 1.19
*/
- public function setLanguage( $l ) {
- if ( $l instanceof Language ) {
- $this->lang = $l;
- } elseif ( is_string( $l ) ) {
- $l = self::sanitizeLangCode( $l );
- $obj = Language::factory( $l );
+ public function setLanguage( $language ) {
+ if ( $language instanceof Language ) {
+ $this->lang = $language;
+ } elseif ( is_string( $language ) ) {
+ $language = self::sanitizeLangCode( $language );
+ $obj = Language::factory( $language );
$this->lang = $obj;
} else {
throw new MWException( __METHOD__ . " was passed an invalid type of data." );
}
/**
- * Set the Skin object
- *
- * @param Skin $s
+ * @param Skin $skin
*/
- public function setSkin( Skin $s ) {
- $this->skin = clone $s;
+ public function setSkin( Skin $skin ) {
+ $this->skin = clone $skin;
$this->skin->setContext( $this );
}
/**
- * Get the Skin object
- *
* @return Skin
*/
public function getSkin() {
/**
* Set how wide each image will be, in pixels.
*
- * @param int $num Integer > 0; invalid numbers will be ignored
+ * @param string $num Number. Unit other than 'px is invalid. Invalid numbers
+ * and those below 0 are ignored.
*/
public function setWidths( $num ) {
- if ( $num > 0 ) {
- $this->mWidths = (int)$num;
+ $parsed = Parser::parseWidthParam( $num, false );
+ if ( isset( $parsed['width'] ) && $parsed['width'] > 0 ) {
+ $this->mWidths = $parsed['width'];
}
}
/**
* Set how high each image will be, in pixels.
*
- * @param int $num Integer > 0; invalid numbers will be ignored
+ * @param string $num Number. Unit other than 'px is invalid. Invalid numbers
+ * and those below 0 are ignored.
*/
public function setHeights( $num ) {
- if ( $num > 0 ) {
- $this->mHeights = (int)$num;
+ $parsed = Parser::parseWidthParam( $num, false );
+ if ( isset( $parsed['width'] ) && $parsed['width'] > 0 ) {
+ $this->mHeights = $parsed['width'];
}
}
"Milicevic01",
"Aktron",
"Сербијана",
- "Zoranzoki21"
+ "Zoranzoki21",
+ "Acamicamacaraca"
]
},
"config-desc": "Инсталација за Медијавики",
"config-title": "Инсталација Медијавикија $1",
- "config-information": "Информације",
+ "config-information": "Информација",
+ "config-localsettings-key": "Кључ за уградњу:",
"config-session-error": "Грешка при започињању сесије: $1",
"config-session-expired": "Ваши подаци о сесији су истекли.\nСесије су подешене да трају $1.\nЊихов рок можете повећати постављањем <code>session.gc_maxlifetime</code> у php.ini.\nПоново покрените инсталацију.",
"config-no-session": "Ваши подаци о сесији су изгубљени!\nПроверите Ваш php.ini и обезбедите да је <code>session.save_path</code> постављен на одговарајући директоријум.",
"config-back": "← Назад",
"config-continue": "Настави →",
"config-page-language": "Језик",
- "config-page-welcome": "Ð\94обÑ\80о доÑ\88ли на Ð\9cедиÑ\98аÐ\92ики!",
+ "config-page-welcome": "Ð\94обÑ\80о доÑ\88ли на Ð\9cедиÑ\98авики!",
"config-page-dbconnect": "Повезивање са базом података",
"config-page-upgrade": "Надоградња постојеће инсталације",
"config-page-dbsettings": "Подешавања базе података",
"config-page-name": "Назив",
- "config-page-options": "Поставке",
+ "config-page-options": "Подешавања",
"config-page-install": "Инсталирај",
"config-page-complete": "Завршено!",
"config-page-restart": "Поновно покретање инсталације",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] је инсталиран",
"config-db-type": "Тип базе података:",
"config-db-host": "Хост базе података",
+ "config-db-wiki-settings": "Идентификуј овај вики",
"config-db-name": "Назив базе података:",
- "config-db-password": "Лозинка за базу података:",
+ "config-db-name-oracle": "Шема базе података:",
+ "config-db-username": "Корисничко име базе података:",
+ "config-db-password": "Лозинка базе података:",
+ "config-db-port": "Порт базе података:",
+ "config-db-schema": "Шема за Медијавики:",
"config-type-mysql": "MySQL (или компактибилан)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-mysql-myisam": "MyISAM",
"config-mysql-utf8": "UTF-8",
"config-mssql-auth": "Тип провере идентитета:",
- "config-mssql-sqlauth": "Провера идентитета за SQL Server",
- "config-mssql-windowsauth": "Провера идентитета Windows-а",
+ "config-mssql-sqlauth": "Провера идентитета SQL Server-а",
+ "config-mssql-windowsauth": "Провера идентитета Виндоуса",
"config-site-name": "Име викија:",
- "config-admin-name": "Ð\9aорисничко име:",
+ "config-admin-name": "Ð\92аÑ\88е корисничко име:",
"config-admin-password": "Лозинка:",
"config-admin-email": "Имејл адреса:",
- "config-optional-skip": "Ð\94оÑ\81адно ми Ñ\98е, Ñ\85аÑ\98де да инÑ\81Ñ\82алиÑ\80амо вики.",
+ "config-optional-skip": "Ð\94оÑ\81адно ми Ñ\98е, Ñ\81амо инÑ\81Ñ\82алиÑ\80аÑ\98 вики.",
"config-profile-no-anon": "Неопходно је отворити налог",
"config-profile-fishbowl": "Само овлашћени корисници",
"config-profile-private": "Приватна вики",
"config-skins": "Теме",
"config-install-step-done": "готово",
"config-install-step-failed": "није успело",
+ "config-install-extensions": "Обухвата екстензије",
+ "config-install-schema": "Прављење шеме",
+ "config-install-tables": "Прављење табела",
+ "config-install-keys": "Генеришем тајне кључеве",
"config-install-mainpage-exists": "Главна страна већ постоји, прескакање",
+ "config-install-mainpage-failed": "Не могу да убацим главну страну: „$1”",
+ "config-download-localsettings": "Преузми <code>LocalSettings.php</code>",
"config-help": "помоћ",
"config-help-tooltip": "кликните да проширите",
+ "config-nofile": "Не могу да пронађем датотеку „$1”. Није ли она била избрисана?",
+ "config-skins-screenshots": "„$1” (снимци екрана: $2)",
+ "config-screenshot": "снимак екрана",
"mainpagetext": "<strong>Медијавики је успешно инсталиран.</strong>",
"mainpagedocfooter": "Погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
}
if ( $argA == 'nowiki' ) {
// {{filepath: | option [| size] }}
$isNowiki = true;
- $parsedWidthParam = $parser->parseWidthParam( $argB );
+ $parsedWidthParam = Parser::parseWidthParam( $argB );
} else {
// {{filepath: [| size [|option]] }}
- $parsedWidthParam = $parser->parseWidthParam( $argA );
+ $parsedWidthParam = Parser::parseWidthParam( $argA );
$isNowiki = ( $argB == 'nowiki' );
}
# Special case; width and height come in one variable together
if ( $type === 'handler' && $paramName === 'width' ) {
- $parsedWidthParam = $this->parseWidthParam( $value );
+ $parsedWidthParam = self::parseWidthParam( $value );
if ( isset( $parsedWidthParam['width'] ) ) {
$width = $parsedWidthParam['width'];
if ( $handler->validateParam( 'width', $width ) ) {
* Parsed a width param of imagelink like 300px or 200x300px
*
* @param string $value
+ * @param bool $parseHeight
*
* @return array
* @since 1.20
*/
- public function parseWidthParam( $value ) {
+ public static function parseWidthParam( $value, $parseHeight = true ) {
$parsedWidthParam = [];
if ( $value === '' ) {
return $parsedWidthParam;
$m = [];
# (T15500) In both cases (width/height and width only),
# permit trailing "px" for backward compatibility.
- if ( preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
+ if ( $parseHeight && preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
$width = intval( $m[1] );
$height = intval( $m[2] );
$parsedWidthParam['width'] = $width;
public function getFinalGroupName() {
$name = $this->getName();
- // Allow overbidding the group from the wiki side
+ // Allow overriding the group from the wiki side
$msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
if ( !$msg->isBlank() ) {
$group = $msg->text();
<?php
-/**
- * MediaWiki Widgets – ComplexNamespaceInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Namespace input widget. Displays a dropdown box with the choice of available namespaces, plus two
* checkboxes to include associated namespace or to invert selection.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class ComplexNamespaceInputWidget extends \OOUI\Widget {
<?php
-/**
- * MediaWiki Widgets – ComplexTitleInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Complex title input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class ComplexTitleInputWidget extends \OOUI\Widget {
<?php
-/**
- * MediaWiki Widgets – DateInputWidget class.
- *
- * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
namespace MediaWiki\Widget;
* Date input widget.
*
* @since 1.29
+ * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class DateInputWidget extends \OOUI\TextInputWidget {
<?php
-/**
- * MediaWiki Widgets – DateTimeInputWidget class.
- *
- * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
use OOUI\Tag;
/**
* Date-time input widget.
+ *
+ * @copyright 2016 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class DateTimeInputWidget extends \OOUI\InputWidget {
<?php
-/**
- * MediaWiki Widgets – NamespaceInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Namespace input widget. Displays a dropdown box with the choice of available namespaces.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
<?php
-/**
- * MediaWiki Widgets – SearchInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Search input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class SearchInputWidget extends TitleInputWidget {
<?php
-/**
- * MediaWiki Widgets – SelectWithInputWidget class.
- *
- * @copyright 2011-2017 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
-use \OOUI\TextInputWidget;
-use \OOUI\DropdownInputWidget;
+use OOUI\DropdownInputWidget;
+use OOUI\TextInputWidget;
/**
* Select and input widget.
+ *
+ * @copyright 2011-2017 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class SelectWithInputWidget extends \OOUI\Widget {
<?php
-/**
- * MediaWiki Widgets – TitleInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* Title input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class TitleInputWidget extends \OOUI\TextInputWidget {
<?php
-/**
- * MediaWiki Widgets – UserInputWidget class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
/**
* User input widget.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class UserInputWidget extends \OOUI\TextInputWidget {
<?php
-/**
- * MediaWiki Widgets – UsersMultiselectWidget class.
- *
- * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
+
namespace MediaWiki\Widget;
-use \OOUI\MultilineTextInputWidget;
+use OOUI\MultilineTextInputWidget;
/**
* Widget to select multiple users.
+ *
+ * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
*/
class UsersMultiselectWidget extends \OOUI\Widget {
"doubleredirects": "تحويلات مزدوجة",
"doubleredirectstext": "هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.\nكل سطر يحتوي على وصلات للتحويلة الأولى والثانية وهدف التحويلة الثانية، والذي عادة ما يشير إلى صفحة الهدف \"الحقيقية\"، التي من المفترض أن تحول إليها التحويلة الأولى.\nالمدخلات <del>المشطوبة</del> صححت.",
"double-redirect-fixed-move": "نُقلت [[$1]].\nحُدّثت تلقائيا وهي الآن تحويلة إلى [[$2]].",
- "double-redirect-fixed-maintenance": "تصحيح تلقائي لتحويلة مزدوجة من [[$1]] إلى [[$2]] في مهمة صيانة.",
+ "double-redirect-fixed-maintenance": "تصحيح تلقائي لتحويلة مزدوجة من [[$1]] إلى [[$2]] في مهمة صيانة",
"double-redirect-fixer": "مصلح التحويل",
"brokenredirects": "تحويلات مكسورة",
"brokenredirectstext": "التحويلات التالية تصل لصفحات غير موجودة:",
"grouppage-sysop": "{{ns:project}}:Адміністрацыя",
"grouppage-bureaucrat": "{{ns:project}}:Бюракраты",
"grouppage-suppress": "{{ns:project}}:Падаўляльнікі_вэрсіяў",
- "right-read": "прагляд старонак",
+ "right-read": "Ð\9fрагляд старонак",
"right-edit": "рэдагаваньне старонак",
"right-createpage": "стварэньне старонак (акрамя старонак абмеркаваньняў)",
"right-createtalk": "стварэньне старонак абмеркаваньня",
"doubleredirects": "Двайныя перанакіраваньні",
"doubleredirectstext": "На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне.\n<del>Закрэсьленыя</del> элемэнты былі выпраўленыя.",
"double-redirect-fixed-move": "[[$1]] была перанесеная.\nСтаронка аўтаматычна абноўленая і цяпер перанакіроўвае на [[$2]].",
- "double-redirect-fixed-maintenance": "Аўтаматычнае выпраўленьне падвойнага перанакіраваньня з [[$1]] на [[$2]] падчас тэхнічнага абслугоўваньня.",
+ "double-redirect-fixed-maintenance": "Аўтаматычнае выпраўленьне падвойнага перанакіраваньня з [[$1]] на [[$2]] падчас тэхнічнага абслугоўваньня",
"double-redirect-fixer": "Выпраўленьне перанакіраваньняў",
"brokenredirects": "Некарэктныя перанакіраваньні",
"brokenredirectstext": "Наступныя перанакіраваньні спасылаюцца на неіснуючыя старонкі:",
"tog-shownumberswatching": "धियान रखे वाला प्रयोगकर्ता लोग के संख्या देखावल जाव",
"tog-oldsig": "राउर वर्तमान दसखत:",
"tog-fancysig": "दसखत के विकी पाठ के रुप में उपयोग करीं (बिना ऑटोमेटिक कड़ी के)",
- "tog-uselivepreview": "लà¤\97ातार à¤\9dलà¤\95 (लाà¤\87व पà¥\8dरà¥\80वà¥\8dयà¥\82) à¤\87सà¥\8dतà¥\87माल à¤\95à¤\87ल à¤\9cाव",
+ "tog-uselivepreview": "पनà¥\8dना à¤\95à¥\87 रà¥\80लà¥\8bड à¤\95à¤\87लà¥\87 बिना à¤à¥\80 à¤\9dलà¤\95 दà¥\87à¤\96ावल à¤\9cाय",
"tog-forceeditsummary": "संपादन सारांश ना भरल गइल होखे त हमके सूचित कइल जाय",
"tog-watchlisthideown": "धियानसूची से हमार खुद के संपादन छिपावल जाय",
"tog-watchlisthidebots": "धियानसूची से बॉट संपादन छिपावल जाय",
"protect-cascadeon": "ھەنووکە ئەم پەڕە پارێزراوە بۆ ئەوەی کە لە نێو ئەم {{PLURAL:$1|پەڕە کە پاراستنی تاڤگەییی|پەڕانە کە پاراستنی تاڤگەیییان}} بۆ چالاککراوە، ھێنراوە.\nدەتوانی ئاستی پاراستنی ئەم پەڕە بگۆڕی، بەڵام ھیچ کاریگەرییەکی نابێت لە سەر پاراستنی تاڤگەیی",
"protect-default": "بە ھەموو بەکارھێنەران ڕێگە بدە",
"protect-fallback": "تەنیا بە بەکارھێنەران بە مافی «$1» ڕێگە بدە",
- "protect-level-autoconfirmed": "تەنیا بە بەکارھێنەرانی پەسندکراو ڕێگە بدە",
+ "protect-level-autoconfirmed": "تەنیا بە [[ویکیپیدیا:بەکارھێنەرانی پەسندکراوی خۆگەڕ|بەکارھێنەرانی پەسندکراوی خۆگەڕ ]] ڕێگە بدە",
"protect-level-sysop": "تەنیا بە بەڕێوەبەران ڕێگە بدە",
"protect-summary-cascade": "تاڤگەیی",
"protect-expiring": "بەسەردەچێ لە ڕێکەوتی $1 (UTC)",
"logentry-protect-unprotect": "$1 {{GENDER:$2|پاراستنی}} لەسەر $3 لابرد",
"logentry-protect-protect": "$1 $3ی {{GENDER:$2|پاراست}} $4",
"logentry-protect-modify": "$1 ئاستی پاراستنی $3ی {{GENDER:$2|گۆڕی}} $4",
+ "logentry-protect-modify-cascade": "$1 $2 ئاستی پاراستنی $3ی $4 گۆڕی [تاڤگەیی]",
"logentry-rights-rights": "$1 ئەندامێتیی {{GENDER:$6|$3}}ی لە $4 بۆ $5 {{GENDER:$2|گۆڕی}}",
"logentry-upload-upload": "$1 $3ی {{GENDER:$2|بار کرد}}",
"logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
"preview": "Pòdzérk",
"showpreview": "Wëskrzëni pòdzérk",
"showdiff": "Wëskrzëni zjinaczi",
- "anoneditwarning": "<strong>Bôczë:</strong> Të nie jes wlogòwóny. Jeżlë wëkònôsz jakąs zmianã, twòja adresa IP mdze widocznô dlô wszëtczich. Jeżlë <strong>[$1 wlogùjesz sã]</strong> abò <strong>[$2 ùsadzysz kònto]</strong>twòje zjinaczi òstóną przëpisóné do kònta, co wicy mającë kònto dobëjesz rozmajité ùdogòdnienia.",
+ "anoneditwarning": "<strong>Bôczë:</strong> Të nie jes wlogòwóny. Jeżlë wëkònôsz jakąs zmianã, twòja adresa IP mdze widocznô dlô wszëtczich. Jeżlë <strong>[$1 wlogùjesz sã]</strong> abò <strong>[$2 ùsadzysz kònto]</strong>, twòje zjinaczi òstóną przëpisóné do kònta, co wicy mającë kònto dobëjesz rozmajité ùdogòdnienia.",
"anonpreviewwarning": "Të nie jes wlogòwóny. Jeżlë wprowadzysz jaczés zjinaczi, twòja adresa IP mdze ùmieszczónô w historie edicji starnë.",
"summary-preview": "Pòdzérk òpisënka zjinaków:",
"blockedtitle": "Brëkòwnik je zascëgóny",
"doubleredirects": "Doppelte Weiterleitungen",
"doubleredirectstext": "Diese Liste enthält Weiterleitungen, die auf Weiterleitungen verlinken.\nJede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel der zweiten Weiterleitung, welches für gewöhnlich die gewünschte Zielseite ist, auf die bereits die erste Weiterleitung zeigen sollte.\n<del>Durchgestrichene</del> Einträge wurden bereits erfolgreich bearbeitet.",
"double-redirect-fixed-move": "[[$1]] wurde verschoben.\nDie Seite wurde automatisch aktualisiert und leitet nun nach [[$2]] weiter.",
- "double-redirect-fixed-maintenance": "Automatische Bereinigung der doppelten Weiterleitung von [[$1]] nach [[$2]] in einem Wartungsauftrag.",
+ "double-redirect-fixed-maintenance": "Automatische Bereinigung der doppelten Weiterleitung von [[$1]] nach [[$2]] in einem Wartungsauftrag",
"double-redirect-fixer": "RedirectBot",
"brokenredirects": "Defekte Weiterleitungen",
"brokenredirectstext": "Diese Spezialseite listet Weiterleitungen auf nicht existierende Seiten auf.",
"restrictionsfield-badip": "Invalid IP address or range: $1",
"restrictionsfield-label": "Allowed IP ranges:",
"restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use:<pre>0.0.0.0/0\n::/0</pre>",
+ "edit-error-short": "Error: $1",
+ "edit-error-long": "Errors:\n\n$1",
"revid": "revision $1",
"pageid": "page ID $1",
"rawhtml-notallowed": "<html> tags cannot be used outside of normal pages.",
"doubleredirects": "Redirecciones dobles",
"doubleredirectstext": "Esta página contiene una lista de páginas que redirigen a otras páginas de redirección.\nCada fila contiene enlaces a la segunda y tercera redirección, así como la primera línea de la segunda redirección, en la que usualmente se encontrará el artículo «real» al que la primera redirección debería apuntar.\nLas entradas <del>tachadas</del> han sido resueltas.",
"double-redirect-fixed-move": "[[$1]] se ha trasladado.\nSe actualizó automáticamente y ahora redirecciona a [[$2]].",
- "double-redirect-fixed-maintenance": "Corrigiendo automáticamente la doble redirección desde [[$1]] a [[$2]] en un trabajo de mantenimiento.",
+ "double-redirect-fixed-maintenance": "Corrección automática de redirección doble de [[$1]] a [[$2]] mediante una tarea de mantenimiento",
"double-redirect-fixer": "Corrector de redirecciones",
"brokenredirects": "Redirecciones incorrectas",
"brokenredirectstext": "Las siguientes redirecciones enlazan a páginas que no existen:",
"doubleredirects": "Doubles redirections",
"doubleredirectstext": "Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection.\nChaque entrée contient des liens vers la première et la seconde redirections, ainsi que la première ligne de texte de la seconde page, ce qui fournit habituellement la « vraie » page cible, vers laquelle la première redirection devrait rediriger.\nLes entrées <del>barrées</del> ont été résolues.",
"double-redirect-fixed-move": "[[$1]] a été déplacé.\nIl a été mis à jour automatiquement et redirige maintenant vers [[$2]].",
- "double-redirect-fixed-maintenance": "Correction automatique de la double redirection de [[$1]] vers [[$2]] dans une tâche de maintenance.",
+ "double-redirect-fixed-maintenance": "Correction automatique de la double redirection de [[$1]] vers [[$2]] dans une tâche de maintenance",
"double-redirect-fixer": "Correcteur de redirection",
"brokenredirects": "Redirections cassées",
"brokenredirectstext": "Ces redirections mènent vers des pages inexistantes :",
"doubleredirects": "הפניות כפולות",
"doubleredirectstext": "בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.\nכל שורה מכילה קישור לשתי ההפניות הראשונות, וכן את היעד של ההפניה השנייה, שהיא לרוב היעד ה\"אמיתי\" של ההפניה, שההפניה הראשונה אמורה להצביע אליו.\nפריטים <del>מחוקים</del> כבר תוקנו.",
"double-redirect-fixed-move": "הדף [[$1]] הועבר.\nהוא עודכן אוטומטית ועכשיו מפנה לדף [[$2]].",
- "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מהדף [[$1]] אל הדף [[$2]] במשימת תחזוקה.",
+ "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מהדף [[$1]] אל הדף [[$2]] במשימת תחזוקה",
"double-redirect-fixer": "מתקן הפניות",
"brokenredirects": "הפניות לא תקינות",
"brokenredirectstext": "ההפניות שלהלן מפנות לדפים שאינם קיימים:",
"doubleredirects": "Redirectiones duple",
"doubleredirectstext": "Iste pagina lista paginas de redirection verso altere paginas de redirection.\nCata linea contine ligamines al prime e al secunde redirection, con le destination del secunde redirection. Iste es normalmente le \"ver\" pagina de destination, al qual le prime redirection tamben deberea punctar.\nLe entratas <del>cancellate</del> ha essite resolvite.",
"double-redirect-fixed-move": "[[$1]] ha essite renominate.\nIllo ha essite automaticamente actualisate e ora redirige verso [[$2]].",
- "double-redirect-fixed-maintenance": "Corrige automaticamente le redirection duple de [[$1]] a [[$2]] durante un carga de mantenentia.",
+ "double-redirect-fixed-maintenance": "Correction automatic del redirection duple de [[$1]] a [[$2]] in un processo de mantenentia",
"double-redirect-fixer": "Corrector de redirectiones",
"brokenredirects": "Redirectiones rupte",
"brokenredirectstext": "Le sequente redirectiones mena a paginas non existente:",
"Tusholi"
]
},
- "tog-underline": "ТIаÑ\85Ñ\8cожаÑ\8fÑ\80га кIала така хьакхар:",
- "tog-hideminor": "Къайладаккха з|амига дола хувцамаш керда хувцамашта юкъера",
+ "tog-underline": "ТIаÑ\82овжама кIала така хьакхар:",
+ "tog-hideminor": "Къайладаккха зӏамига дола хувцамаш керда хувцамашта юкъера",
"tog-hidepatrolled": "Къайладаккха ха дера чакхдаьнна дола (патрулированные) хувцамаш керда хувцамашта юкъера",
"tog-newpageshidepatrolled": "Къайлаяьккха ха дера чакхъянна йола (патрулированные) оагIонаш керда оагIонашта юкъера",
"tog-hidecategorization": "Къайлаяха оагӀонай категореш",
"tog-watchlisthideminor": "Са зем бара хьаязъяьр чура зIамига хувцамаш къайладаха",
"tog-watchlisthideliu": "Шоаш хьабайзийта доакъошхоша хувцамаш къайладаха зем бара хьаязъяьр чура",
"tog-watchlisthideanons": "ЦIийоацача доакъошхоша хувцамаш къайладаха зем бара хьаязъяьр чура",
- "tog-watchlisthidepatrolled": "Ха даь дола хувцамаш къайладаха зем бара хьаязъяьр чура",
- "tog-watchlisthidecategorization": "Ð\9aÑ\8aайлаÑ\8fккÑ\85а оагÓ\80онай каÑ\82егоÑ\80еÑ\88",
+ "tog-watchlisthidepatrolled": "Ха даь дола хувцамаш къайладаха зéма хьаязъяьра чу",
+ "tog-watchlisthidecategorization": "Ð\9eагÓ\80онаÑ\88Ñ\82а оагIаÑ\82аÑ\88 Ñ\82оÑ\85аÑ\80 кÑ\8aайладаккÑ\85а",
"tog-ccmeonemails": "Сона хьатIаахийта аз доакъашхошта дIадахийта дола каьхатий кепаш",
"tog-diffonly": "Ма гойта оагIон чулоацам ши верси вIашидистара кIал",
- "tog-showhiddencats": "Ð\93ойÑ\82а кÑ\8aайла каÑ\82егоÑ\80еш",
- "tog-useeditwarning": "Хоамбе хьадаь хувцамаш дӀа ца яздеш аз болх дӀаберзабеча ханахь",
+ "tog-showhiddencats": "Ð\93ойÑ\82а кÑ\8aайла оагIаÑ\82аш",
+ "tog-useeditwarning": "Хоамбе хьадаь хувцамаш дӀа а ца яздеш аз болх дӀаберзабеча хана",
"underline-always": "Даиман",
"underline-never": "ЦIаккха",
"underline-default": "Браузера гIирсаш тоаяраш лелае",
"sunday": "кIиранди",
"monday": "оршот",
"tuesday": "шинара",
- "wednesday": "Ð\9aхаьра",
+ "wednesday": "кхаьра",
"thursday": "éра",
"friday": "пӀаьраска",
"saturday": "шоатта",
- "sun": "Ð\9aIиранди",
- "mon": "Ð\9eÑ\80Ñ\88",
- "tue": "Шин",
- "wed": "Ð\9aÑ\85",
- "thu": "Ð\95Ñ\80",
- "fri": "Ð\9fI",
- "sat": "Шоа",
+ "sun": "кIиранди",
+ "mon": "оÑ\80Ñ\88оÑ\82",
+ "tue": "шинара",
+ "wed": "кÑ\85аÑ\8cÑ\80а",
+ "thu": "еÑ\80а",
+ "fri": "пIаÑ\8cÑ\80аÑ\81ка",
+ "sat": "шоатта",
"january": "АгIой",
"february": "Саь-кур",
"march": "Мутт-хьал",
"anontalk": "Дувца оттадар",
"navigation": "Навигаци",
"and": " а",
- "faq": "Ð\9aТХ",
+ "faq": "Ð\9aÐ\9bХ",
"actions": "Ардамаш",
"namespaces": "ЦIерий аренаш",
"variants": "Эршаш",
"otherlanguages": "Кхыча меттаех",
"redirectedfrom": "($1 дIа-сахьожаяьй укхаз)",
"redirectpagesub": "ОагIув-дIа-сахьожадар",
- "redirectto": "Ð\94Iа-Ñ\81аÑ\85Ñ\8cожадар укхаза:",
+ "redirectto": "Ð\94Iа-Ñ\85Ñ\8cа Ñ\85Ñ\8cожавар укхаза:",
"lastmodifiedat": "Ер оагIув тIеххьара хийца хиннай $2 $1 яьннача ха́на.",
"viewcount": "Укх оагIонга хьежа хиннаб $1{{PLURAL:$1|-зза}}.",
"protectedpage": "ГIо оттадаь лораяь оагIув",
"badaccess-groups": "ДIадийха ардам кхоачашде могаш ба алхха доакъашхой {{PLURAL:$2|1=тоабан «$1»|укх тоабаш чура: $1}}",
"versionrequired": "Эшаш я $1 версех йола MediaWiki",
"versionrequiredtext": "Укх оагIонца болх бергболаш $1 версех йола MediaWiki эша. Хьажа [[Special:Version|програмни Iалашдарах бола хоамага]].",
- "ok": "Мега",
+ "ok": "Мег",
"retrievedfrom": "Хьаст — «$1»",
"youhavenewmessages": "{{PLURAL:$3|Хьога денад}} $1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|Хьога кхаьчад}} $1 {{PLURAL:$3|1=$3 доакъашхочунгара|$3 доакъашхоштагара|1=кхыволча доакъашхочунгара}} ($2).",
"showtoc": "хьахьокха",
"hidetoc": "хьулде",
"collapsible-collapse": "дIахьулде",
- "collapsible-expand": "доаржаде",
- "confirmable-yes": "XӀа-а",
+ "collapsible-expand": "хьадоаржаде",
+ "confirmable-yes": "XӀау",
"confirmable-no": "A",
"thisisdeleted": "БIаргтоха е юхаметтаоттае $1?",
"viewdeleted": "Хьажа $1?",
"nav-login-createaccount": "Шоаш довзийтар / Дагара йоазув кхоллар",
"logout": "Аравала/яла",
"userlogout": "Аравала/яла",
- "notloggedin": "Ð\9eаÑ\88 Ñ\88оаÑ\88 довзийÑ\82адаÑ\86 Ñ\81иÑ\81Ñ\82еман",
- "userlogin-noaccount": "Ð\94оакÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\83Ñ\87еÑ\82а Ñ\8fздаÑ\80 диÑ\86е Ñ\85Ñ\8cа?",
- "userlogin-joinproject": "ДIахоттале {{SITENAME}}аца",
+ "notloggedin": "РажаÑ\87а Ñ\87Ñ\83даÑ\8cннадаÑ\86 Ñ\88о",
+ "userlogin-noaccount": "Ð\94агаÑ\80а йоазÑ\83в деÑ\86е Ñ\85Ñ\8cога?",
+ "userlogin-joinproject": "ДIахоттале {{SITENAME}} яхача проекта",
"createaccount": "Дагара йоазув хьакхолла",
"userlogin-resetpassword-link": "Тӏеракхосса езий хьа пароль?",
- "userlogin-helplink2": "Раже чувалара новкъостал",
+ "userlogin-helplink2": "Ражеча чувалара новкъостал",
"userlogin-createanother": "Кхыдола дагара йоазув хьакхолла",
"createacct-emailoptional": "Электронни поштан цӀай (ца яздича мегаш да)",
"createacct-email-ph": "Ӏочуязде хьай электронни поштан цӀай",
"bold_tip": "Сома йоазон текст",
"italic_sample": "Сиха йоазон текст",
"italic_tip": "Сиха йоазон текст",
- "link_sample": "ТIахьожаярга дáкъа цIи",
- "link_tip": "Чура тIахьожаярг",
+ "link_sample": "Тӏатовжама кепакерта цIи",
+ "link_tip": "Чура тӏатовжам",
"extlink_sample": "http://www.example.com тIахьожаярга дáкъа цIи",
"extlink_tip": "Арахьара тIахьожаярг (йиц ма ялийтта префикс http://)",
"headline_sample": "Дáкъа цIера текст",
"nowiki_sample": "Укхаза хувца езаш йоаца текст хьачуоттае",
"nowiki_tip": "Теркал ма е вики-форматировани",
"image_tip": "Чуоттаяь файл",
- "media_tip": "Файла тIахьожавар",
+ "media_tip": "Файлá тIатовжам",
"sig_tip": "Хьа кулгаяздар а, хӀанзара ха а",
"hr_tip": "ПхьорагIен така (цох пайда эцар тIехдаьнна кастта ма де)",
"summary": "Хувцамий сурт оттадар",
"rcshowhidebots": "$1 боташ",
"rcshowhidebots-show": "Хьахьокха",
"rcshowhidebots-hide": "Къайладаккха",
- "rcshowhideliu": "$1 бовзийтарчара доакъашхой",
+ "rcshowhideliu": "$1 ражача дӏаэтта доакъашхой",
"rcshowhideliu-show": "Хьахьокха",
"rcshowhideliu-hide": "Къайлабаха",
"rcshowhideanons": "$1 цIияккханза доакъашхой",
"sp-contributions-newonly": "ОагIонаш кхоллара мара хувцамаш ма гойта.",
"sp-contributions-submit": "Хьалáха",
"whatlinkshere": "Тӏатовжамаш укхаза",
- "whatlinkshere-title": "«$1» ← укхунна тӏатовжаш йола оагӏонаш",
+ "whatlinkshere-title": "«$1» яхача оагӏонна тӏатовжаш йола оагӏонаш",
"whatlinkshere-page": "ОагIув:",
- "linkshere": "ТIехьайоагIа оагIонаш тIахьожаву «'''[[:$1]]'''»:",
- "nolinkshere": "Ð\9eагIона '''[[:$1]]''' кÑ\85Ñ\8bйола оагIонаÑ\88каÑ\80а Ñ\82IаÑ\85Ñ\8cожаÑ\8fÑ\80гаÑ\88 йоаÑ\86аÑ\88 Ñ\8f.",
+ "linkshere": "«'''[[:$1]]'''» яхача оагIонна тIахьожавеш я тIехьайоагIа:",
+ "nolinkshere": "Ð\9aÑ\85Ñ\8bйолÑ\87а оагÓ\8fонаÑ\88каÑ\80а '''[[:$1]]''' Ñ\8fÑ\85аÑ\87а оагÓ\8fон Ñ\82IаÑ\82овжамаÑ\88 доаÑ\86аÑ\88 да.",
"isredirect": "оагIув-дIа-сахьожадар",
"istemplate": "юкъейоалаяр",
"isimage": "Файлови тӏатовжам",
"whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайоагIа|хьалхайоагIараш}} $1",
"whatlinkshere-next": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
"whatlinkshere-links": "← тӏатовжамаш",
- "whatlinkshere-hideredirs": "$1 дIа-сахьожадараш",
- "whatlinkshere-hidetrans": "$1 Ñ\8eкÑ\8aейоалаÑ\8fраш",
- "whatlinkshere-hidelinks": "$1 тIахьожаяргаш",
+ "whatlinkshere-hideredirs": "$1 дӏа-сахьожадаьраш",
+ "whatlinkshere-hidetrans": "$1 Ñ\8eкÑ\8aедоаладаÑ\8cраш",
+ "whatlinkshere-hidelinks": "$1 тӏатовжамаш",
"whatlinkshere-hideimages": "$1 файлай тIахьожаяргаш",
"whatlinkshere-filters": "Фильтраш",
"blockip": "ЧIега тоха {{GENDER:$1|доакъашхочун}}",
"movelogpage": "ЦӀераш хувцара тептар",
"movereason": "Бахьан:",
"revertmove": "юха",
- "export": "ОагIонай экспорт",
+ "export": "Оагӏоний экспорт",
"allmessagesname": "Хоам",
"allmessagesdefault": "Массаза йола текст",
"allmessages-filter-all": "Еррига",
"exif-software": "Программни Iалашдар",
"exif-artist": "Автор",
"exif-exifversion": "Верси Exif",
- "exif-colorspace": "Ð\91еÑ\81ай моÑ\82Ñ\82",
+ "exif-colorspace": "Ð\91еÑ\81ий моÑ\82Ñ\82иг",
"exif-pixelxdimension": "Сурта шорал",
"exif-pixelydimension": "Сурта лакхал",
"exif-datetimeoriginal": "Оригинальни таьрахьи хаи",
"htmlform-submit": "ДIадахьийта",
"htmlform-reset": "Хувцамаш юхадаккха",
"htmlform-selectorother-other": "Кхыдар",
- "logentry-delete-delete": "$1 {{GENDER:$2|дIаяккхай}} оагIув $3",
+ "logentry-delete-delete": "$1 яхача доакъашхочо {{GENDER:$2|дIаяккхай}} $3 яха оагӏув",
"logentry-delete-restore": "$1 доакъашхочо {{GENDER:$2|юхаметтаоттаяьй}} $3 яха оагIув ($4)",
"logentry-delete-revision": "$1 цIи йолча доакъашхочо {{GENDER:$2|хийцай}} $3 яхача оагIон {{PLURAL:$5|$5 версин|1=версин}} гуш хилар: $4",
"revdelete-content-hid": "чулоацам къайлабаьккхаб",
"doubleredirects": "Redirect doppi",
"doubleredirectstext": "In questa pagina sono elencate pagine che reindirizzano ad altre pagine di redirect.\nCiascuna riga contiene i collegamenti al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene la pagina di destinazione \"corretta\" alla quale dovrebbe puntare anche il primo redirect.\nI redirect <del>cancellati</del> sono stati corretti.",
"double-redirect-fixed-move": "[[$1]] è stata spostato.\nÈ stato automaticamente aggiornato e ora è un redirect a [[$2]].",
- "double-redirect-fixed-maintenance": "Corretto automaticamente il doppio redirect da [[$1]] a [[$2]] nel lavoro di manutenzione.",
+ "double-redirect-fixed-maintenance": "Corretto automaticamente il doppio redirect da [[$1]] a [[$2]] nel lavoro di manutenzione",
"double-redirect-fixer": "Correttore di redirect",
"brokenredirects": "Redirect errati",
"brokenredirectstext": "I seguenti redirect puntano a pagine inesistenti:",
"doubleredirects": "二重転送",
"doubleredirectstext": "このページでは、転送ページへの転送ページを列挙します。\n最初の転送ページ、その転送先にある転送ページ、さらにその転送先にあるページ、それぞれへのリンクを各行に表示しています。多くの場合は最終的な転送先が「正しい」転送先であり、最初の転送ページの転送先は最終的な転送先に直接向けるべきです。\n<del>取り消し線</del>が入った項目は解決済みです。",
"double-redirect-fixed-move": "[[$1]]を移動しました。\n自動的に更新され、今後は[[$2]]に転送されます。",
- "double-redirect-fixed-maintenance": "メンテナンス作業の一環として[[$1]]から[[$2]]への二重転送を自動的に修正します。",
+ "double-redirect-fixed-maintenance": "メンテナンス作業の一環として[[$1]]から[[$2]]への二重転送を自動的に修正します",
"double-redirect-fixer": "転送修正係",
"brokenredirects": "迷子のリダイレクト",
"brokenredirectstext": "以下は、存在しないページへのリダイレクトの一覧です:",
"doubleredirects": "이중 넘겨주기 목록",
"doubleredirectstext": "이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.\n매 줄에는 첫 번째 문서와 두 번째 문서의 링크가 있습니다. 그리고 보통 첫 번째 문서가 넘겨주어야 할 \"실제\" 문서인 두 번째 넘겨주기의 대상이 있습니다.\n<del>취소선이 그어진</del> 부분은 이미 해결되었습니다.",
"double-redirect-fixed-move": "[[$1]] 문서를 이동하였습니다.\n이 문서는 자동으로 수정되었으며 이제 [[$2]] 문서로 자동으로 넘겨줍니다.",
- "double-redirect-fixed-maintenance": "유지 보수 작업에서 [[$1]]에서 [[$2]](으)로 이중 넘겨주기를 자동으로 고치고 있습니다.",
+ "double-redirect-fixed-maintenance": "유지 보수 작업에서 [[$1]]에서 [[$2]](으)로 이중 넘겨주기를 자동으로 고치고 있습니다",
"double-redirect-fixer": "넘겨주기 수리꾼",
"brokenredirects": "끊긴 넘겨주기 목록",
"brokenredirectstext": "존재하지 않는 문서로 넘겨주기가 되어 있는 문서의 목록입니다:",
"restriction-level-all": "모두",
"undelete": "삭제된 문서 보기",
"undeletepage": "삭제된 문서를 보거나 되살리기",
- "undeletepagetitle": "'''아래는 [[:$1|$1]] 판의 삭제된 판입니다'''.",
+ "undeletepagetitle": "<strong>아래 내용은 [[:$1|$1]] 문서의 삭제된 판입니다</strong>.",
"viewdeletedpage": "삭제된 문서 보기",
"undeletepagetext": "다음 {{PLURAL:$1|문서는 삭제되었지만|문서 $1개는 삭제되었지만}} 아직 보관되어 있고 되살릴 수 있습니다.\n보관된 문서는 주기적으로 삭제될 것입니다.",
"undelete-fieldset-title": "문서 되살리기",
"watchlistedit-raw-done": "주시문서 목록을 새로 고쳤습니다.",
"watchlistedit-raw-added": "{{PLURAL:$1|문서 1개|문서 $1개}}를 추가했습니다:",
"watchlistedit-raw-removed": "{{PLURAL:$1|문서 1개|문서 $1개}}를 제거했습니다:",
- "watchlistedit-clear-title": "주시문서 목록 지우기",
- "watchlistedit-clear-legend": "주시문서 목록 지우기",
+ "watchlistedit-clear-title": "주시문서 목록 비우기",
+ "watchlistedit-clear-legend": "주시문서 목록 비우기",
"watchlistedit-clear-explain": "모든 문서가 주시문서 목록에서 제거됩니다",
"watchlistedit-clear-titles": "제목:",
"watchlistedit-clear-submit": "주시목록 문서 지우기 (이는 영구적입니다!)",
"doubleredirects": "Dubbele doorverwijzingen",
"doubleredirectstext": "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's.\nElke rij bevat koppelingen naar de eerste en de tweede doorverwijspagina en een koppeling naar de doelpagina van de tweede doorverwijspagina.\nMeestal is de laatste pagina het eigenlijke doel, waar de eerste pagina naar zou moeten doorverwijzen.\n<del>Doorgehaalde regels</del> geven aan dat het probleem al is opgelost.",
"double-redirect-fixed-move": "[[$1]] is verplaatst.\nHet is automatisch bijgewerkt en verwijst nu naar [[$2]].",
- "double-redirect-fixed-maintenance": "Automatische dubbele doorverwijzing van [[$1]] naar [[$2]] herstellen in een onderhoudstaak.",
+ "double-redirect-fixed-maintenance": "Automatische dubbele doorverwijzing van [[$1]] naar [[$2]] herstellen in een onderhoudstaak",
"double-redirect-fixer": "Doorverwijzingen opschonen",
"brokenredirects": "Defecte doorverwijzingen",
"brokenredirectstext": "De onderstaande doorverwijzingen verwijzen naar niet-bestaande pagina's.",
"doubleredirects": "Redirecionamentos duplos",
"doubleredirectstext": "Esta página lista as páginas que redirecionam para outros redirecionamentos.\nCada linha contém links para o primeiro e o segundo redirecionamentos, juntamente com o alvo do segundo redirecionamento, que é geralmente a verdadeira página de destino, para a qual o primeiro redirecionamento deveria apontar.\nEntradas <del>riscadas</del> foram resolvidas.",
"double-redirect-fixed-move": "[[$1]] foi movido\nEle foi atualizado automaticamente e agora é um redirecionamento para [[$2]]",
- "double-redirect-fixed-maintenance": "Corrigindo automaticamente o redirecionamento duplo de [[$1]] para [[$2]] em uma tarefa de manutenção.",
+ "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção",
"double-redirect-fixer": "Corretor de redirecionamentos",
"brokenredirects": "Redirecionamentos quebrados",
"brokenredirectstext": "Os seguintes redirecionamentos ligam para páginas inexistentes:",
"doubleredirects": "Redirecionamentos duplos",
"doubleredirectstext": "Esta página lista todas as páginas que redirecionam para outras páginas de redirecionamento.\nCada linha contém hiperligações para o primeiro e segundo redirecionamentos, bem como o destino do segundo redirecionamento, geralmente contendo a verdadeira página de destino, que devia ser o destino do primeiro redirecionamento.\n<del>Entradas cortadas</del> já foram solucionadas.",
"double-redirect-fixed-move": "[[$1]] foi movida.\nEla foi atualizada automaticamente e agora redireciona para [[$2]].",
- "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção.",
+ "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção",
"double-redirect-fixer": "Corretor de redirecionamentos",
"brokenredirects": "Redirecionamentos quebrados",
"brokenredirectstext": "Os seguintes redirecionamentos contêm hiperligações para páginas inexistentes:",
"anonpreviewwarning": "See also:\n* {{msg-mw|Anoneditwarning}}",
"missingsummary": "The text \"edit summary\" is in {{msg-mw|Summary}}.\n\nSee also:\n* {{msg-mw|Missingcommentheader}}\n* {{msg-mw|Savearticle}}\n\nParameters:\n* $1 – The label of the save button – one of {{msg-mw|savearticle}} or {{msg-mw|savechanges}} on save-labelled wiki, or {{msg-mw|publishpage}} or {{msg-mw|publishchanges}} on publish-labelled wikis.",
"selfredirect": "Notice displayed once after the user tries to create a redirect to the same article.\n\nParameters:\n* $1 – The label of the save button – one of {{msg-mw|savearticle}} or {{msg-mw|savechanges}} on save-labelled wiki, or {{msg-mw|publishpage}} or {{msg-mw|publishchanges}} on publish-labelled wikis.",
- "missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
+ "missingcommenttext": "This message is shown when the user tries to save a textbox created by the new section links, and the textbox is empty. \"Comment\" refers to the content that is supposed to be posted in the new section, usually a talk page comment.",
"missingcommentheader": "Edit summary that is shown if you enable \"Prompt me when entering a blank summary\" and add a new section without headline to a talk page.\n\nParameters:\n* $1 – The label of the save button – one of {{msg-mw|savearticle}} or {{msg-mw|savechanges}} on save-labelled wiki, or {{msg-mw|publishpage}} or {{msg-mw|publishchanges}} on publish-labelled wikis.\n\n\"Subject\" is {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Missingsummary}}\n* {{msg-mw|Savearticle}}",
"summary-preview": "Preview of the edit summary, shown under the edit summary itself.\nShould match: {{msg-mw|summary}}.",
"subject-preview": "Used as label for preview of the section title when adding a new section on a talk page.\n\nShould match {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Summary-preview}}\n\n{{Identical|Subject}}",
"pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
"pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
"pageinfo-user-id": "The numeric ID for a user\n{{Identical|User ID}}",
- "pageinfo-file-hash": "Base-36 SHA-1 value of the file",
+ "pageinfo-file-hash": "Base-16 SHA-1 value of the file",
"markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
"markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
"markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",
"restrictionsfield-badip": "An error message shown when one entered an invalid IP address or range in a restrictions field (such as Special:BotPassword). $1 is the IP address.",
"restrictionsfield-label": "Field label shown for restriction fields (e.g. on Special:BotPassword).",
"restrictionsfield-help": "Placeholder text displayed in restriction fields (e.g. on Special:BotPassword).",
+ "edit-error-short": "Error message. Parameters:\n* $1 - the error details\nSee also:\n* {{msg-mw|edit-error-long}}\n{{Identical|Error}}",
+ "edit-error-long": "Error message. Parameters:\n* $1 - the error details\nSee also:\n* {{msg-mw|edit-error-short}}\n{{Identical|Error}}",
"revid": "Used to format a revision ID number in text. Parameters:\n* $1 - Revision ID number.\n{{Identical|Revision}}",
"pageid": "Used to format a page ID number in text. Parameters:\n* $1 - Page ID number.",
"rawhtml-notallowed": "Error message given when $wgRawHtml = true; is set and a user uses an <html> tag in a system message or somewhere other than a normal page.",
"rcfilters-hours-title": "Тиһэх чаастар",
"rcfilters-days-show-days": "$1 хонук",
"rcfilters-days-show-hours": "$1 чаас",
+ "rcfilters-highlighted-filters-list": "Тыктарыллыбыт: $1",
"rcfilters-quickfilters": "Бигэргэммит сиидэлэр",
- "rcfilters-quickfilters-placeholder-title": "Ð\91игÑ\8dÑ\80гÑ\8dммиÑ\82 Ñ\81игэ билигин суох",
+ "rcfilters-quickfilters-placeholder-title": "Ð\91игÑ\8dÑ\80гÑ\8dммиÑ\82 Ñ\81иидэ билигин суох",
"rcfilters-quickfilters-placeholder-description": "Сиидэ туруорууларын кэлин туһанарга, \"Холбоммут сиидэ\" хонуутугар кыбытык ойуутун баттаа.",
"rcfilters-savedqueries-defaultlabel": "Бигэргэммит сиидэлэр",
"rcfilters-savedqueries-rename": "Аатын уларыт",
"rcfilters-restore-default-filters": "Анаан этиллибэтэҕинэ турар сиидэлэри холбоо",
"rcfilters-clear-all-filters": "Сиидэлэри барытын суох гын",
"rcfilters-show-new-changes": "Тиһэх уларытыылар",
- "rcfilters-search-placeholder": "Сиидэлэри кэнники уларытыы (көр биитэр киллэр)",
+ "rcfilters-search-placeholder": "Сиидэлэр уларыйыылара (талбаны туһан биитэр сиидэ аатынан көрдөө)",
"rcfilters-invalid-filter": "Сатаммат сиидэ",
"rcfilters-empty-filter": "Холбоммут сиидэ суох. Улартыы барыта көстөр.",
"rcfilters-filterlist-title": "Сиидэ",
"rcfilters-watchlist-edit-watchlist-button": "Кэтэбилиҥ тиһилигин уларытыы",
"rcfilters-watchlist-showupdated": "Эн көрбүтүҥ кэннэ уларыйбыт <strong>модьу бичигинэн</strong> уонна толору бэлиэннэн бэлиэтэммит.",
"rcfilters-preference-label": "Тиһэх барылын көстүбэт гын",
+ "rcfilters-preference-help": "2017 сыл алтыһаанын уларытыыларын уонн ол кэннэ киирбит тэриллэри суох гынар.",
"rcfilters-filter-showlinkedfrom-label": "Сигэнэр сирэйдэрбэр уларытыылары көрдөр",
"rcfilters-filter-showlinkedfrom-option-label": "<strong>Талбыт сирэйиҥ</strong> сигэнэр сирэйдэрэ",
"rcfilters-filter-showlinkedto-label": "Сигэнэр сирэйдэри уларытыыны көрдөр",
"uploadstash-file-not-found-no-object": "Ойуучаан билэтин эбийиэгин оҥорор сатаммата.",
"uploadstash-file-not-found-no-remote-thumb": "Эскиис сатаан хостоммото: $1\nURL = $2",
"uploadstash-file-not-found-missing-content-type": "Content-type аат көстүбэтэ.",
+ "uploadstash-file-not-found-not-exists": "Билэ сытар сирэ көстүбэтэ эбэтэр өйдөммөтө.",
+ "uploadstash-file-too-large": "$1 баайтан бөдөҥ билэни таҥастыыр сатаммат.",
"uploadstash-not-logged-in": "Бэлиэтэммит кыттааччы суох, билэ кыттааччы киэнэ буолуохтаах.",
"uploadstash-wrong-owner": "Бу билэ ($1) кыттааччы киэнэ буолбатах.",
"uploadstash-no-such-key": "Күлүүс ($1) суох, сотор сатаммат.",
"apisandbox-sending-request": "API-көрдөбүлү ыытыы…",
"apisandbox-loading-results": "API-түмүгүн ылыы…",
"apisandbox-results-error": "Көрдөбүлгэ API-хоруйу киллэрии кэмигэр алҕас таҕыста: $1.",
+ "apisandbox-results-login-suppressed": "Бу ыйытык браузер домены хааччахтыырын туораары бэлиэтэммэтэх кыттааччы ыйытыгын курдук таҥастаммыт. API кумаҕын токена оннук ыйытыктары аптамаатынан сороҕор сөпкө таҥастаабат, онон, бука диэн, бэйэҥ толор.",
"apisandbox-request-selectformat-label": "Көрдөбүлү маннык көрдөр:",
"apisandbox-request-format-url-label": "Көрдөбүл URL-ун устуруоката",
"apisandbox-request-url-label": "Көрдөбүл URL-аадырыһа:",
"sp-contributions-newonly": "Саҥаттан оҥоһуллубут сирэйдэри эрэ көрдөр",
"sp-contributions-hideminor": "Суолтата суох уларытыылары көрдөрүмэ",
"sp-contributions-submit": "Көрдөө",
+ "sp-contributions-outofrange": "Түмүгү көрдөрөр сатаммата. Көрдөммүт IP-диапазон CIDR /$1 лимиититтэн улахан эбит.",
"whatlinkshere": "Манна сигэнэллэр",
"whatlinkshere-title": "Сирэй манна сигэнэр \"$1\"",
"whatlinkshere-page": "Сирэй:",
"ipb_blocked_as_range": "Сыыһа: $1 IP-та чопчу бобуллубатах (не блокирован), онон аһыллар кыаҕа суох. Ол гынан баран IP бу $2 диапазон сорҕотун быһыытынан бобуллубут, ону арыйыахха (бобуутун устуохха) сөп.",
"ip_range_invalid": "IP-лар диапазоннара сатаммат.",
"ip_range_toolarge": "Мантан /$1 үөһэ диапазоннары хааччахтыыр сатаммат.",
+ "ip_range_exceeded": "IP-диапазон муҥутууру куоһарар. Көҥүллэнэр диапазон маннык: /$1.",
"proxyblocker": "Прокси бобуллуута",
"proxyblockreason": "Эн IP-ҥ аһаҕас прокси эбит, онон бобулунна. Интернет-провайдергын эбэтэр техническэй сулууспаны кытта сибээстэһэн кутталлаах суол баарын биллэр.",
"sorbsreason": "Эн IP-ҥ {{SITENAME}} саайт DNSBL-гар аһаҕас прокси быһыытынан сылдьар.",
"usercssispublic": "Болҕой: CSS сирэйигэр кистэлэҥ сибидиэнньэ суох буолуохтаах, тоҕо диэтэххэ ону атын кыттааччылар хааччаҕа суох көрөр кыахтаахтар.",
"restrictionsfield-badip": "IP эбэтэр IP-лар диапазоннара сатаммат: $1",
"restrictionsfield-label": "Көҥүллэммит IP диапазона:",
+ "restrictionsfield-help": "Устуруокаҕа биирдии IP-аадырыс эбэтэр CIDR-диапазон. Барытын көҥүллүүргэ маны туһан:<pre>0.0.0.0/0\n::/0</pre>",
"revid": "$1 торум",
"pageid": "$1 сирэй нүөмэрэ",
"rawhtml-notallowed": "<html> тиэктэр көннөрү сирэйдэр эрэ истэригэр туттулаллар.",
"doubleredirects": "Dvojne preusmeritve",
"doubleredirectstext": "Ta stran navaja strani, ki se preusmerjajo na druge preusmeritvene strani.\nVsaka vrstica vsebuje povezavo do prve in druge preusmeritve, kakor tudi do cilja druge preusmeritve, ki je po navadi »prava« ciljna stran, na katero naj bi kazala prva preusmeritev.\n<del>Prečrtani</del> vnosi so bili razrešeni.",
"double-redirect-fixed-move": "Stran [[$1]] smo premaknili.\nSamodejno smo jo posodobili in sedaj se preusmerja na [[$2]].",
- "double-redirect-fixed-maintenance": "Samodejno popravljanje dvojne preusmeritve z [[$1]] na [[$2]] v vzdrževalnem delu.",
+ "double-redirect-fixed-maintenance": "Samodejno popravljanje dvojne preusmeritve z [[$1]] na [[$2]] v vzdrževalnem delu",
"double-redirect-fixer": "Popravljalec preusmeritev",
"brokenredirects": "Pretrgane preusmeritve",
"brokenredirectstext": "Naslednje preusmeritve kažejo na neobstoječe strani:",
"upload-disallowed-here": "Du kan inte skriva över denna fil.",
"filerevert": "Återställ $1",
"filerevert-legend": "Återställ fil",
- "filerevert-intro": "Du återställer '''[[Media:$1|$1]]''' till [$4 versionen från $2 kl. $3].",
+ "filerevert-intro": "Du håller på att återställa filen <strong>[[Media:$1|$1]]</strong> till [$4 versionen från $2 kl. $3].",
"filerevert-comment": "Anledning:",
"filerevert-defaultcomment": "Återställd till versionen från $1, kl. $2 ($3)",
"filerevert-submit": "Återställ",
"doubleredirects": "双重重定向",
"doubleredirectstext": "本页面列出重定向至其他重定向页面的页面。每行含有第一及第二重定向的链接和第二重定向的目标(这通常是第一重定向应该指向的“实际”目标页面)。<del>带删除线的</del>条目已经被解决。",
"double-redirect-fixed-move": "[[$1]]已被移动。它已自动更新,并且现在重定向至[[$2]]。",
- "double-redirect-fixed-maintenance": "在维护工作中自动修复双重重定向自[[$1]]至[[$2]]。",
+ "double-redirect-fixed-maintenance": "在维护工作中自动修复双重重定向自[[$1]]至[[$2]]",
"double-redirect-fixer": "重定向修复器",
"brokenredirects": "受损重定向",
"brokenredirectstext": "以下重定向链接至不存在的页面:",
$this->fatalError( $err, intval( $die ) );
}
$this->outputChanneled( false );
- if ( PHP_SAPI == 'cli' || PHP_SAPI == 'phpdbg' ) {
+ if (
+ ( PHP_SAPI == 'cli' || PHP_SAPI == 'phpdbg' ) &&
+ !defined( 'MW_PHPUNIT_TEST' )
+ ) {
fwrite( STDERR, $err . "\n" );
} else {
print $err;
'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
],
'mediawiki.special.preferences' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'scripts' => [
'resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js',
'resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js',
],
],
'mediawiki.special.preferences.styles' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'styles' => 'resources/src/mediawiki.special/mediawiki.special.preferences.styles.css',
],
'mediawiki.special.recentchanges' => [
rvdifftotext: $textbox.textSelection( 'getContents' ),
rvdifftotextpst: true,
rvprop: '',
- rvsection: section === '' ? undefined : section
+ rvsection: section === '' ? undefined : section,
+ uselang: mw.config.get( 'wgUserLanguage' )
} );
// Wait for the summary before showing the diff so the page doesn't jump twice
</ul>
!! end
+!! test
+Gallery (without px units)
+!! wikitext
+<gallery widths="70" heights="40">
+File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional">
+ <li class="gallerybox" style="width: 105px"><div style="width: 105px">
+ <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
+ <div class="gallerytext">
+ </div>
+ </div></li>
+</ul>
+
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"widths":"70","heights":"40"},"body":{"extsrc":"\nFile:Foobar.jpg\n"}}'>
+<li class="gallerybox" style="width: 105px;"><div class="thumb" style="width: 100px; height: 70px;"><figure-inline typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="8" width="70"/></a></figure-inline></div><div class="gallerytext"></div></li>
+</ul>
+!! end
+
+!! test
+Gallery (with invalid units)
+!! wikitext
+<gallery widths="70em" heights="40em">
+File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional">
+ <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
+ <div class="gallerytext">
+ </div>
+ </div></li>
+</ul>
+
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"widths":"70em","heights":"40em"},"body":{"extsrc":"\nFile:Foobar.jpg\n"}}'>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><figure-inline typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></figure-inline></div><div class="gallerytext"></div></li>
+</ul>
+!! end
+
!! test
Gallery with link that has fragment
!! options
<?php
-/** tests for includes/Html.php */
class HtmlTest extends MediaWikiTestCase {
* @file
*/
-/**
- * Test class for MWNamespace.
- * @todo FIXME: this test file is a mess
- */
class MWNamespaceTest extends MediaWikiTestCase {
+
protected function setUp() {
parent::setUp();
] );
}
-# ### START OF TESTS #########################################################
-
/**
* @todo Write more texts, handle $wgAllowImageMoving setting
* @covers MWNamespace::isMovable
*/
public function testIsMovable() {
$this->assertFalse( MWNamespace::isMovable( NS_SPECIAL ) );
- # @todo FIXME: Write more tests!!
}
/**
$this->assertNull( MWNamespace::getAssociated( NS_SPECIAL ) );
}
- /**
- * @todo Implement testExists().
- */
- /*
- public function testExists() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
/**
* Test MWNamespace::equals
* Note if we add a namespace registration system with keys like 'MAIN'
);
}
- /**
- * @todo Implement testGetCanonicalNamespaces().
- */
- /*
- public function testGetCanonicalNamespaces() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
- /**
- * @todo Implement testGetCanonicalName().
- */
- /*
- public function testGetCanonicalName() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
- /**
- * @todo Implement testGetCanonicalIndex().
- */
- /*
- public function testGetCanonicalIndex() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
- /**
- * @todo Implement testGetValidNamespaces().
- */
- /*
- public function testGetValidNamespaces() {
- // Remove the following lines when you implement this test.
- $this->markTestIncomplete(
- 'This test has not been implemented yet. Rely on $wgCanonicalNamespaces.'
- );
- }
- */
-
public function provideHasTalkNamespace() {
return [
[ NS_MEDIA, false ],
use MediaWiki\Shell\CommandFactory;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
+use MediaWiki\Storage\RevisionLookup;
use MediaWiki\Storage\RevisionStore;
use MediaWiki\Storage\SqlBlobStore;
'BlobStore' => [ 'BlobStore', BlobStore::class ],
'_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ],
'RevisionStore' => [ 'RevisionStore', RevisionStore::class ],
+ 'RevisionLookup' => [ 'RevisionLookup', RevisionLookup::class ],
'HttpRequestFactory' => [ 'HttpRequestFactory', HttpRequestFactory::class ],
];
}
[ 'gzip', 'object' ],
'2®Àþ2',
];
+ yield 'T184749 (windows-1252 encoding), string in string out' => [
+ 'windows-1252',
+ iconv( 'utf-8', 'windows-1252', "sammansättningar" ),
+ [],
+ 'sammansättningar',
+ ];
+ yield 'T184749 (windows-1252 encoding), string in string out with gzip' => [
+ 'windows-1252',
+ gzdeflate( iconv( 'utf-8', 'windows-1252', "sammansättningar" ) ),
+ [ 'gzip' ],
+ 'sammansättningar',
+ ];
}
/**
public function provideBlobs() {
yield [ '' ];
yield [ 'someText' ];
+ yield [ "sammansättningar" ];
}
/**
$this->assertSame( $blob, $store->getBlob( $address ) );
}
+ /**
+ * @dataProvider provideBlobs
+ * @covers \MediaWiki\Storage\SqlBlobStore::storeBlob
+ * @covers \MediaWiki\Storage\SqlBlobStore::getBlob
+ */
+ public function testSimpleStoreGetBlobSimpleRoundtripWindowsLegacyEncoding( $blob ) {
+ $store = $this->getBlobStore( 'windows-1252' );
+ $address = $store->storeBlob( $blob );
+ $this->assertSame( $blob, $store->getBlob( $address ) );
+ }
+
+ /**
+ * @dataProvider provideBlobs
+ * @covers \MediaWiki\Storage\SqlBlobStore::storeBlob
+ * @covers \MediaWiki\Storage\SqlBlobStore::getBlob
+ */
+ public function testSimpleStoreGetBlobSimpleRoundtripWindowsLegacyEncodingGzip( $blob ) {
+ $store = $this->getBlobStore( 'windows-1252', true );
+ $address = $store->storeBlob( $blob );
+ $this->assertSame( $blob, $store->getBlob( $address ) );
+ }
+
}
$this->assertNull( $text );
}
- /*
- public static function makeContent( $text, Title $title, $modelId = null, $format = null ) {}
- */
-
public static function dataMakeContent() {
return [
[ 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ],
$this->assertSame( $tag, 'mw-contentmodelchange' );
}
- /*
- public function testSupportsSections() {
- $this->markTestIncomplete( "not yet implemented" );
- }
- */
-
/**
* @covers ContentHandler::supportsCategories
*/
$this->assertSame( $expected, $tag );
}
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {}
- */
-
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetUndoContent( Revision $current, Revision $undo,
- Revision $undoafter = null
- ) {
- }
- */
-
/**
* @covers WikitextContentHandler::getDataForSearchIndex
*/
$this->assertEquals( $expected, $meta['Copyright']['x-default'] );
}
- /**
- * Test extraction of pHYs tags, which can tell what the
- * actual resolution of the image is (aka in dots per meter).
- */
- /*
- public function testPngPhysTag() {
- $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
- 'Png-native-test.png' );
-
- $this->assertArrayHasKey( 'text', $meta );
- $meta = $meta['text'];
-
- $this->assertEquals( '2835/100', $meta['XResolution'] );
- $this->assertEquals( '2835/100', $meta['YResolution'] );
- $this->assertEquals( 3, $meta['ResolutionUnit'] ); // 3 = cm
- }
- */
-
/**
* Given a normal static PNG, check the animation metadata returned.
*/
* @return void
*/
function wfThumbErrorText( $status, $msgText ) {
- wfThumbError( $status, htmlspecialchars( $msgText ) );
+ wfThumbError( $status, htmlspecialchars( $msgText, ENT_NOQUOTES ) );
}
/**
if ( $wgShowHostnames ) {
header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() );
$url = htmlspecialchars(
- isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : ''
+ isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '',
+ ENT_NOQUOTES
);
- $hostname = htmlspecialchars( wfHostname() );
+ $hostname = htmlspecialchars( wfHostname(), ENT_NOQUOTES );
$debug = "<!-- $url -->\n<!-- $hostname -->\n";
} else {
$debug = '';