[BOT] jenkins-bot <jenkins-bot@gerrit.wikimedia.org>
[BOT] jenkins-bot <jenkins-bot@gerrit.wikimedia.org> <jenkins-bot@wikimedia.org>
[BOT] Translation updater bot <l10n-bot@translatewiki.net>
+[BOT] libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Aaron Schulz <aschulz@wikimedia.org>
Aaron Schulz <aschulz@wikimedia.org> <aaron@users.mediawiki.org>
Adam Roses Wight <awight@wikimedia.org>
<exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
<exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.SingleSpaceBeforeSingleLineComment" />
<exclude name="Squiz.Scope.MethodScope.Missing" />
- <exclude name="Squiz.Scope.MemberVarScope.Missing" />
</rule>
<rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
<properties>
* Benny Situ
* Bergi
* Bertrand Grondin
+* Bill Pirkle
* Bill Traynor
* Billinghurst
* billm
* Conrad Irwin
* Cormac Parle
* cryptocoryne
+* Daimona Eaytoy
* Dan Barrett
* Dan Collins
* Dan Duvall
* dr0ptp4kt
* Ebrahim Byagowi
* Ed Sanders
+* Ed Schouten
* Eddie Greiner-Petter
* Edward Chernenko
* Edward Z. Yang
* glaisher
* golopot
* gopavasanth
+* Greg Grossmeier
* Greg Maxwell
* Greg Sabino Mullane
* Gregory Szorc
* Guillaume Blanchard
* Guy Van den Broeck
* Guycn2
+* Hagar Shilo
* Haikal Izzuddin
* HakanIST
* Happy-melon
* Jacob Clark
* jagori
* Jaime Crespo
+* Jakob Warkotsch
* Jakub Vrana
* James D. Forrester
* James Earl Douglas
* kipod
* kishanio
* konarak
+* Kosta Harlan
* krishna keshav
* Krzysztof Krzyzaniak
* Krzysztof Zbudniewek
* OverlordQ
* Owen Davis
* Paa Kwesi Imbeah
+* Pablo Grass
* paladox
+* Pankajeshkr
* Patricio Molina
* Patrick Reilly
* Patrick Westerhoff
* Roman Tsukanov
* Rotem Liss
* Rowan Collins
+* runntb
* Russ Nelson
* Russell Blau
* Rusty Burchfield
* Stephan Muggli
* Stephane Bisson
* Stephen Liang
+* Stephen Niedzielski
* Steve Sanbeg
* Steven Roddis
* Steven Walling
* Str4nd
+* Strainu
* Subin Siby
* Subramanya Sastry
* Sumit Asthana
+* superyetkin
* Suriyaa Kudo
* svip
* Szymon Świerkosz
* T.D. Corell
+* tacsipacsi
* Tarquin
* TerraCodes
* Thalia Chan
<namespace key="2" case="first-letter">User</namespace>
<namespace key="3" case="first-letter">User talk</namespace>
<namespace key="4" case="first-letter">DemoWiki</namespace>
- <namespace key="5" case="first-letter">DemoWIki talk</namespace>
+ <namespace key="5" case="first-letter">DemoWiki talk</namespace>
<namespace key="6" case="first-letter">File</namespace>
<namespace key="7" case="first-letter">File talk</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
* @param int $subcategories Subcategory count
*/
public function writeCategoryData( $categoryName, $isHidden, $pages, $subcategories ) {
+ if ( $pages < 0 ) {
+ // Bugfix for T201119
+ $pages = 0;
+ }
$title = Title::makeTitle( NS_CATEGORY, $categoryName );
$this->rdfWriter->about( $this->titleToUrl( $title ) )
->say( 'a' )
class ContentSecurityPolicy {
const REPORT_ONLY_MODE = 1;
const FULL_MODE = 2;
- /** Used for meta tag. Does not include report urls or nonce sources */
- const FULL_MODE_RESTRICTED = 3;
/** @var string The nonce to use for inline scripts (from OutputPage) */
private $nonce;
}
}
- /**
- * Return the meta header to use for after load restricted mode
- *
- * This should restrict browsers that don't support nonce-sources.
- * Idea stolen from
- * https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/
- *
- * @param array $csp CSP configuration
- * @return string Content for meta tag
- */
- public function getMetaHeader( $csp ) {
- return $this->makeCSPDirectives( $csp, self::FULL_MODE_RESTRICTED );
- }
-
/**
* Send CSP headers based on wiki config
*
$csp->sendCSPHeader( $cspConfig, self::FULL_MODE );
$csp->sendCSPHeader( $cspConfigReportOnly, self::REPORT_ONLY_MODE );
- // Include <meta> header which increases security level after initial load.
- // This helps mitigate attacks on browsers not supporting CSP2. It also
- // helps mitigate attacks due to the shared nonce that non-logged in users
- // get due to varnish cache.
- // Unclear if this is the best place to insert the meta tag, or if
- // it should be in a RL module. I figure its best to do this as early
- // as possible.
- // FIXME: Needs testing to see if this actually works properly
- $metaHeader = $csp->getMetaHeader( $cspConfig );
- if ( $metaHeader ) {
- $context->getOutput()->addScript(
- ResourceLoader::makeInlineScript(
- $csp->makeMetaInsertScript(
- $metaHeader
- ),
- $out->getCSPNonce()
- )
- );
- }
- }
-
- /**
- * Makes javascript to insert a meta CSP header after page load
- *
- * @see https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/
- * @param string $metaContents content of meta tag
- * @return string JS for including in page
- */
- private function makeMetaInsertScript( $metaContents ) {
- return "$('\\x3Cmeta http-equiv=\"Content-Security-Policy\"\\x3E')" .
- '.attr("content",' .
- Xml::encodeJsVar( $metaContents ) .
- ').prependTo($("head"))';
+ // This used to insert a <meta> tag here, per advice at
+ // https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/
+ // The goal was to prevent nonce from working after the page hit onready,
+ // This would help in old browsers that didn't support nonces, and
+ // also assist for varnish-cached pages which repeat nonces.
+ // However, this is incompatible with how resource loader storage works
+ // via mw.domEval() so it was removed.
}
/**
*
* @param int $reportOnly Either self::REPORT_ONLY_MODE or self::FULL_MODE
* @return string Name of http header
- * @throws UnexpectedValueException if you feed it self::FULL_MODE_RESTRICTED.
*/
private function getHeaderName( $reportOnly ) {
if ( $reportOnly === self::REPORT_ONLY_MODE ) {
* Determine what CSP policies to set for this page
*
* @param array|bool $config Policy configuration (Either $wgCSPHeader or $wgCSPReportOnlyHeader)
- * @param int $mode self::REPORT_ONLY_MODE, self::FULL_MODE or Self::FULL_MODE_RESTRICTED
+ * @param int $mode self::REPORT_ONLY_MODE, self::FULL_MODE
* @return string Policy directives, or empty string for no policy.
*/
private function makeCSPDirectives( $policyConfig, $mode ) {
$cssSrc = false;
$imgSrc = false;
$scriptSrc = [ "'unsafe-eval'", "'self'" ];
- if (
- $mode !== self::FULL_MODE_RESTRICTED &&
- ( !isset( $policyConfig['useNonces'] ) || $policyConfig['useNonces'] )
- ) {
- $nonceSrc = "'nonce-" . $this->nonce . "'";
- $scriptSrc[] = $nonceSrc;
+ if ( !isset( $policyConfig['useNonces'] ) || $policyConfig['useNonces'] ) {
+ $scriptSrc[] = "'nonce-" . $this->nonce . "'";
}
+
$scriptSrc = array_merge( $scriptSrc, $additionalSelfUrlsScript );
if ( isset( $policyConfig['script-src'] )
&& is_array( $policyConfig['script-src'] )
// Note: default on if unspecified.
if ( ( !isset( $policyConfig['unsafeFallback'] )
|| $policyConfig['unsafeFallback'] )
- && $mode !== self::FULL_MODE_RESTRICTED
) {
// unsafe-inline should be ignored on browsers
// that support 'nonce-foo' sources.
$cssSrc = array_merge( $defaultSrc, [ "'unsafe-inline'" ] );
}
- if ( $mode === self::FULL_MODE_RESTRICTED ) {
- // report-uri disallowed in <meta> tags.
- $reportUri = false;
- } elseif ( isset( $policyConfig['report-uri'] ) && $policyConfig['report-uri'] !== true ) {
+ if ( isset( $policyConfig['report-uri'] ) && $policyConfig['report-uri'] !== true ) {
if ( $policyConfig['report-uri'] === false ) {
$reportUri = false;
} else {
/**
* Get the default report uri.
*
- * @param int $mode self::*_MODE constant. Do not use with self::FULL_MODE_RESTRICTED
+ * @param int $mode self::*_MODE constant.
* @return string The URI to send reports to.
* @throws UnexpectedValueException if given invalid mode.
*/
private function getReportUri( $mode ) {
- if ( $mode === self::FULL_MODE_RESTRICTED ) {
- throw new UnexpectedValueException( $mode );
- }
$apiArguments = [
'action' => 'cspreport',
'format' => 'json'
]
];
- $script = 'mw.loader.using("mediawiki.toolbar", function () {';
+ $script = '';
foreach ( $toolarray as $tool ) {
if ( !$tool ) {
continue;
);
}
- $script .= '});';
-
$toolbar = '<div id="toolbar"></div>';
if ( Hooks::run( 'EditPageBeforeEditToolbar', [ &$toolbar ] ) ) {
// Only add the old toolbar cruft to the page payload if the toolbar has not
// been over-written by a hook caller
$nonce = $wgOut->getCSPNonce();
- $wgOut->addScript( ResourceLoader::makeInlineScript( $script, $nonce ) );
+ $wgOut->addScript( Html::inlineScript(
+ ResourceLoader::makeInlineCodeWithModule( 'mediawiki.toolbar', $script ),
+ $nonce
+ ) );
};
return $toolbar;
'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
'wgRelevantArticleId' => $relevantTitle->getArticleID(),
'wgRequestId' => WebRequest::getRequestId(),
+ 'wgCSPNonce' => $this->getCSPNonce(),
];
if ( $user->isLoggedIn() ) {
*/
// phpcs:disable Generic.Arrays.DisallowLongArraySyntax,PSR2.Classes.PropertyDeclaration,MediaWiki.Usage.DirUsage
+// phpcs:disable Squiz.Scope.MemberVarScope.Missing,Squiz.Scope.MethodScope.Missing
/**
* Check PHP Version, as well as for composer dependencies in entry points,
* and display something vaguely comprehensible in the event of a totally
return ( $this->mcrMigrationStage & $flags ) === $flags;
}
+ /**
+ * Throws a RevisionAccessException if this RevisionStore is configured for cross-wiki loading
+ * and still reading from the old DB schema.
+ *
+ * @throws RevisionAccessException
+ */
+ private function assertCrossWikiContentLoadingIsSafe() {
+ if ( $this->wikiId !== false && $this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_OLD ) ) {
+ throw new RevisionAccessException(
+ "Cross-wiki content loading is not supported by the pre-MCR schema"
+ );
+ }
+ }
+
public function setLogger( LoggerInterface $logger ) {
$this->logger = $logger;
}
// MCR migration note: rev_content_model and rev_content_format will go away
if ( $this->contentHandlerUseDB ) {
+ $this->assertCrossWikiContentLoadingIsSafe();
+
$defaultModel = ContentHandler::getDefaultModelFor( $title );
$defaultFormat = ContentHandler::getForModelID( $defaultModel )->getDefaultFormat();
// if $wgContentHandlerUseDB is not set,
// all revisions must use the default content model and format.
+ $this->assertCrossWikiContentLoadingIsSafe();
+
$defaultModel = ContentHandler::getDefaultModelFor( $title );
$defaultHandler = ContentHandler::getForModelID( $defaultModel );
$defaultFormat = $defaultHandler->getDefaultFormat();
if ( $mainSlotRow->model_name === null ) {
$mainSlotRow->model_name = function ( SlotRecord $slot ) use ( $title ) {
+ $this->assertCrossWikiContentLoadingIsSafe();
+
// TODO: MCR: consider slot role in getDefaultModelFor()! Use LinkTarget!
// TODO: MCR: deprecate $title->getModel().
return ContentHandler::getDefaultModelFor( $title );
* @param ActorMigration $actorMigration
* @param int $migrationStage
* @param LoggerSpi $loggerProvider
- * @param bool $contentHandlerUseDB see {@link $wgContentHandlerUseDB}
+ * @param bool $contentHandlerUseDB see {@link $wgContentHandlerUseDB}. Must be the same
+ * for all wikis in the cluster. Will go away after MCR migration.
*/
public function __construct(
ILBFactory $dbLoadBalancerFactory,
) {
// If an item is renewed, mind the cache TTL determined by config and parser functions.
// Put an upper limit on the TTL for sanity to avoid extreme template/file staleness.
- $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
+ $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getCacheTime() );
$ttl = min( $parserOutput->getCacheExpiry() - $since, self::MAX_CACHE_TTL );
// Avoid extremely stale user signature timestamps (T84843)
public function __construct( $info ) {
$info['nodata'] = true;
+
+ $this->setShowEmptyLabel( false );
+
+ parent::__construct( $info );
+
if ( isset( $info['flags'] ) ) {
$this->mFlags = $info['flags'];
}
} elseif ( isset( $info['buttonlabel-raw'] ) ) {
$this->buttonLabel = $info['buttonlabel-raw'];
}
-
- $this->setShowEmptyLabel( false );
-
- parent::__construct( $info );
}
public function getInputHTML( $value ) {
"config-sqlite-dir-help": "SQLite は単一のファイル内にすべてのデータを格納しています。\n\n指定したディレクトリは、インストール時にウェブ サーバーが書き込めるようにしておく必要があります。\n\nこのディレクトリはウェブからアクセス<strong>不可能</strong>である必要があります。PHP ファイルがある場所には配置できないのはこのためです。\n\nインストーラーは <code>.htaccess</code> ファイルにも書き込みます。しかし、これが失敗した場合は、誰かが生のデータベースにアクセスできてしまいます。\nデータベースは、生のデータ (メールアドレス、パスワードのハッシュ値) の他、削除された版、その他ウィキ上の制限されているデータを含んでいます。\n\n例えば <code>/var/lib/mediawiki/yourwiki</code> のように、別の場所にデータベースを配置することを検討してください。",
"config-oracle-def-ts": "既定のテーブル領域:",
"config-oracle-temp-ts": "一時的なテーブル領域:",
- "config-type-mysql": "MySQL(または互換製品)",
+ "config-type-mysql": "MariaDB、MySQLまたは互換製品",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-type-oracle": "Oracle",
"config-type-mssql": "マイクロソフト SQL Server",
"config-support-info": "MediaWiki は以下のデータベース システムに対応しています:\n\n$1\n\n使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。",
- "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]はMediaWikiの主要な対象であり、最もよくサポートされています。MediaWikiはMySQLと互換性のある[{{int:version-db-mariadb-url}} MariaDB]、[{{int:version-db-percona-url}} Percona Server]でも動きます。 ([https://secure.php.net/manual/ja/mysqli.installation.php PHPをMySQLサポート付きでコンパイルする方法])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB]はMediaWikiの主要な対象であり、最もよくサポートされています。MediaWikiはMariaDBと互換性のある[{{int:version-db-mysql-url}} MySQL]、[{{int:version-db-percona-url}} Percona Server]でも動きます。 ([https://secure.php.net/manual/ja/mysqli.installation.php PHPをMySQLサポート付きでコンパイルする方法])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] は、MySQLの代替として人気がある公開のデータベースシステムです。([https://secure.php.net/manual/en/pgsql.installation.php PHPをPostgreSQLサポート付きでコンパイルする方法])",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]は、良くサポートされている、軽量データベースシステムです。([https://secure.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)",
"config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]は商業企業のデータベースです。([https://secure.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])",
"config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]は商業企業のWindows用データベースです。([https://secure.php.net/manual/en/sqlsrv.installation.php SQLSRVサポートなPHPをコンパイルする方法])",
- "config-header-mysql": "MySQL の設定",
+ "config-header-mysql": "MariaDB/MySQL の設定",
"config-header-postgres": "PostgreSQL の設定",
"config-header-sqlite": "SQLite の設定",
"config-header-oracle": "Oracle の設定",
"config-db-web-create": "アカウントが存在しない場合は作成する",
"config-db-web-no-create-privs": "あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。\nあなたがここで指定したアカウントは既に存在している必要があります。",
"config-mysql-engine": "ストレージ エンジン:",
- "config-mysql-innodb": "InnoDB",
+ "config-mysql-innodb": "InnoDB(推奨)",
"config-mysql-myisam": "MyISAM",
"config-mysql-myisam-dep": "<strong>警告:</strong> MySQLのストレージエンジンとして MyISAM を選択していますが、これをMediaWikiで利用するのは推奨されていません。その理由は: \n* テーブルロックによる並列性をほとんどサポートしていない\n* 他のエンジンに比べて壊れやすい\n* MediaWiki のコードベースは必ずしも MyISAM を本来あるべきほどには扱っていない\n\nあなたがインストールした MySQL が InnoDB をサポートしている場合、代わりにそちらをお使いになることを強くお勧めします。\nあなたがインストールした MySQL が InnoDB をサポートしていない場合、アップグレードした方がいいでしょう。",
"config-mysql-only-myisam-dep": "<strong>警告:</strong> MyISAM がこのマシンの MySQL の唯一のストレージエンジンですが、これをMediaWikiで利用するのは推奨されていません。その理由は: \n* テーブルロックによる並列性をほとんどサポートしていない\n* 他のエンジンに比べて壊れやすい\n* MediaWiki のコードベースは必ずしも MyISAM を本来あるべきほどには扱っていない\n\nあなたがインストールした MySQL が InnoDB をサポートしていない場合、アップグレードした方がいいでしょう。",
* This should only be used if all entries in the process
* cache were added after the files were already locked. (since 1.20)
*
- * @remarks Remarks on locking:
+ * @note Remarks on locking:
* File system paths given to operations should refer to files that are
* already locked or otherwise safe from modification from other processes.
* Normally these files will be new temp files, which should be adequate.
'IPAddress' => $_SERVER[ 'REMOTE_ADDR' ] ?? '',
'UserAgent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
// Headers application can inject via LBFactory::setRequestInfo()
+ 'ChronologyProtection' => null,
'ChronologyClientId' => null, // prior $cpClientId value from LBFactory::shutdown()
'ChronologyPositionIndex' => null // prior $cpIndex value from LBFactory::shutdown()
];
!empty( $extraInputsDescriptor )
) {
$formDescriptor[ 'extra' ] = $extraInputsDescriptor;
- } elseif ( is_string( $extraInputsDescriptor ) ) {
+ } elseif (
+ is_string( $extraInputsDescriptor ) &&
+ $extraInputsDescriptor !== ''
+ ) {
// We'll add this to the footer of the form later
$extraInputsString = $extraInputsDescriptor;
- wfDeprecated( 'Using $input in LogEventsListGetExtraInputs hook', '1.32' );
+ wfDeprecated( '$input in LogEventsListGetExtraInputs hook', '1.32' );
}
// Title pattern, if allowed
* @param Title|null $title The page
* @param array $parameters Query parameters
* @param string|null $html Linktext of the link as raw html
- * @throws MWException
* @return string
*/
protected function makePageLink( Title $title = null, $parameters = [], $html = null ) {
if ( !$title instanceof Title ) {
- throw new MWException( 'Expected title, got null' );
+ $msg = $this->msg( 'invalidtitle' )->text();
+ if ( !$this->plaintext ) {
+ return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ], $msg );
+ } else {
+ return $msg;
+ }
}
+
if ( !$this->plaintext ) {
$html = $html !== null ? new HtmlArmor( $html ) : $html;
$link = $this->getLinkRenderer()->makeLink( $title, $html, [], $parameters );
* @return string JavaScript code
*/
public static function makeLoaderConditionalScript( $script ) {
+ // Adds a function to lazy-created RLQ
return '(window.RLQ=window.RLQ||[]).push(function(){' .
trim( $script ) . '});';
}
+ /**
+ * Wraps JavaScript code to run after a required module.
+ *
+ * @since 1.32
+ * @param string|string[] $modules Module name(s)
+ * @param string $script JavaScript code
+ * @return string JavaScript code
+ */
+ public static function makeInlineCodeWithModule( $modules, $script ) {
+ // Adds an array to lazy-created RLQ
+ return '(window.RLQ=window.RLQ||[]).push(['
+ . json_encode( $modules ) . ','
+ . 'function(){' . trim( $script ) . '}'
+ . ']);';
+ }
+
/**
* Returns an HTML script tag that runs given JS code after startup and base modules.
*
* results available.
*/
public function __construct( $containedSyntax = false, $hasMoreResults = false ) {
- if ( static::class === __CLASS__ ) {
+ if ( static::class === self::class ) {
// This class will eventually be abstract. SearchEngine implementations
// already have to extend this class anyways to provide the actual
// search results.
if ( $title->getNamespace() == NS_USER && !$title->isSubpage() ) {
$tools['contributions'] = $linkRenderer->makeKnownLink(
SpecialPage::getTitleFor( 'Contributions', $title->getText() ),
- $this->msg( 'contributions' )->text()
+ $this->msg( 'contribslink' )->text()
);
}
}
# @todo Allow Title::getUserPermissionsErrors() to take an array
- # @todo FIXME: Title::checkSpecialsAndNSPermissions() has a very wierd expectation of what
+ # @todo FIXME: Title::checkSpecialsAndNSPermissions() has a very weird expectation of what
# getUserPermissionsErrors() might actually be used for, hence the 'ns-specialprotected'
$errors = wfMergeErrorArrays(
$this->getPageTitle()->getUserPermissionsErrors(
$logEntry->setComment( $this->reason );
$logEntry->setPerformer( $this->getUser() );
$logEntry->setParameters( $logParams );
- $logid = $logEntry->insert();
+ // Make sure the null revision will be tagged as well
+ $logEntry->setAssociatedRevId( $nullRevId );
if ( count( $this->logTags ) ) {
$logEntry->setTags( $this->logTags );
}
- // Make sure the null revision will be tagged as well
- $logEntry->setAssociatedRevId( $nullRevId );
-
+ $logid = $logEntry->insert();
$logEntry->publish( $logid );
-
} else {
$this->getOutput()->addHTML( "<li>" . $linkRenderer->makeKnownLink( $title ) . " " .
$this->msg( 'import-nonewrevisions' )->escaped() . "</li>\n" );
$pElement = $parentData->childPElement;
$parentData->childPElement = null;
$newRef = $refElement->userData;
- $this->endTag( $pElement, $sourceStart, 0 );
} elseif ( $under && $parentData->isSplittable
&& (bool)$parentData->ancestorPNode !== $inline
) {
* @return string
*/
public function getAutoload( $commandName = 'AutoloadGenerator' ) {
- // We need to check whether an extenson.json or skin.json exists or not, and
+ // We need to check whether an extension.json or skin.json exists or not, and
// incase it doesn't, update the autoload.php file.
$fileinfo = $this->getTargetFileinfo();
"grant-editmycssjs": "Рэдагаваньне вашага CSS/JSON/JavaScript",
"grant-editmyoptions": "Рэдагаваньне вашых наладаў удзельніка",
"grant-editmywatchlist": "Рэдагаваньне вашага сьпісу назіраньня",
+ "grant-editsiteconfig": "Рэдагаваньне агульнасайтавага і карыстальніцкага CSS/JS",
"grant-editpage": "Рэдагаваньне існых старонак",
"grant-editprotected": "Рэдагаваньне абароненых старонак",
"grant-highvolume": "Рэдагаваньне з высокай інтэнсіўнасьцю",
"upload-misc-error-text": "Адбылася невядомая памылка падчас загрузкі.\nКалі ласка, упэўніцеся, што URL-адрас слушны, і паспрабуйце ізноў.\nКалі памылка паўторыцца, зьвярніцеся да [[Special:ListUsers/sysop|адміністратара]].",
"upload-too-many-redirects": "URL-адрас утрымлівае зашмат перанакіраваньняў",
"upload-http-error": "Узьнікла памылка HTTP: $1",
- "upload-copy-upload-invalid-domain": "Капіяваньне загрузак не дазволенае ў гэтым дамэне.",
+ "upload-copy-upload-invalid-domain": "Капіяваньне загрузак не дазволенае з гэтага дамэну.",
"upload-foreign-cant-upload": "Гэтая вікі не наладжаная для загрузкі файлаў у запытанае вонкавае сховішча файлаў.",
"upload-foreign-cant-load-config": "Не атрымалася загрузіць канфігурацыю для загрузкі файлаў у вонкавае сховішча.",
"upload-dialog-disabled": "Загрузка файлаў з дапамогай гэтага дыялёгу адключаная ў гэтай вікі.",
"ns-specialprotected": "Special pages cannot be edited.",
"titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is <em>$2</em>.",
"filereadonlyerror": "Unable to modify the file \"$1\" because the file repository \"$2\" is in read-only mode.\n\nThe system administrator who locked it offered this explanation: \"$3\".",
+ "invalidtitle": "Invalid title",
"invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
"invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
"exception-nologin": "Not logged in",
"uctop": "(edición actual)",
"month": "Desde el mes (y anteriores):",
"year": "Desde el año (y anteriores):",
+ "date": "Desde el día (y anteriores):",
"sp-contributions-newbies": "Mostrar solo las contribuciones de usuarios nuevos",
"sp-contributions-newbies-sub": "Para cuentas nuevas",
"sp-contributions-newbies-title": "Contribuciones de usuarios nuevos",
"ipbemailban": "Impedir que el usuario envíe correo electrónico",
"ipbenableautoblock": "Bloquear automáticamente la última dirección IP usada por este usuario y cualquier IP posterior desde la cual intente editar",
"ipbsubmit": "Bloquear a este usuario",
- "ipbother": "En otro momento:",
+ "ipbother": "Otra duración o fecha:",
"ipboptions": "2 horas:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite",
"ipbhidename": "Ocultar nombre de usuario de ediciones y listas",
"ipbwatchuser": "Vigilar las páginas de usuario y de discusión de este usuario",
"Urbalazs",
"Bencemac",
"Rodrigo",
- "Tothasze"
+ "Tothasze",
+ "David92003"
]
},
"tog-underline": "Hivatkozások aláhúzása:",
"speciallogtitlelabel": "Cél (cím vagy felhasználóhoz {{ns:user}}:felhasználói név):",
"log": "Rendszernaplók",
"logeventslist-submit": "Mutat",
- "logeventslist-more-filters": "További szűrők:",
+ "logeventslist-more-filters": "Egyéb naplók megjelenítése:",
"logeventslist-patrol-log": "Ellenőrzési napló (patrol)",
"logeventslist-tag-log": "Címkenapló",
"all-logs-page": "Minden nyilvános napló",
"customcssprotected": "この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
"customjsonprotected": "この JSON ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
"customjsprotected": "この JavaScript ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
+ "sitecssprotected": "すべての訪問者に影響する可能性があるためこのCSSページを編集する権限がありません",
+ "sitejsonprotected": "すべての訪問者に影響する可能性があるためこのJSONページを編集する権限がありません",
+ "sitejsprotected": "すべての訪問者に影響する可能性があるためこのJavaScriptページを編集する権限がありません",
"mycustomcssprotected": "あなたにはこの CSS ページを編集する権限がありません。",
"mycustomjsonprotected": "あなたにはこの JSON ページを編集する権限がありません。",
"mycustomjsprotected": "あなたにはこの JavaScript ページを編集する権限がありません。",
"may_long": "ꯃꯦ",
"june": "ꯖꯨꯟ",
"july": "ꯖꯨꯂꯥꯏ",
- "august": "ê¯\91ꯥê¯\92ꯥê¯\81ê¯\87",
+ "august": "ꯑꯒꯥꯁꯇ",
"september": "ꯁꯦꯄꯇꯦꯝꯕꯔ",
"october": "ꯑꯣꯛꯇꯣꯕꯔ",
"november": "ꯅꯣꯕꯦꯝꯕꯔ",
"december-date": "$1 ꯗꯤꯁꯦꯝꯕꯔ",
"period-am": "ꯑꯦ ꯑꯦꯝ",
"period-pm": "ꯄꯤ ꯑꯦꯝ",
- "pagecategories": "{{PLURAL:$1|Category|Categories}}",
+ "pagecategories": "{{PLURAL:$1|ꯃꯆꯥꯈꯥꯏꯕ|ꯃꯆꯥꯈꯥꯏꯕꯁꯤꯡ}}",
"category_header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯂꯥꯃꯥꯏꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
"subcategories": "ꯃꯆꯥꯈꯥꯏꯕꯥ ꯃꯆꯥ",
"category-media-header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯃꯦꯗꯤꯌꯥꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
"mytalk": "ꯉꯥꯡꯐꯝ",
"anontalk": "ꯉꯥꯡꯐꯝ",
"navigation": "ꯆꯠꯄꯥ",
- "and": "꯱ê¯\81ꯪ #꯳꯲; ꯑꯃꯁꯨꯪ",
+ "and": "ê¯\91ê¯\83ê¯\81ꯨꯡ #꯳꯲; ꯑꯃꯁꯨꯪ",
"faq": "FAQ",
"actions": "Actions",
"namespaces": "ꯃꯥꯃꯤꯡꯒꯤ ꯃꯐꯝ",
"help": "ꯃꯥꯇꯦꯡ",
"search": "ꯊꯤꯕꯥ",
"search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment.\n# * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
- "searchbutton": "ê¯\87ꯤꯕꯥ",
+ "searchbutton": "ê¯\8aꯤꯕꯥ",
"go": "ꯆꯠꯂꯨ",
"searcharticle": "ꯆꯠꯂꯨ",
"history": "ꯂꯥꯃꯥꯏꯒꯤ ꯄꯨꯋꯥꯔꯤ",
"disclaimerpage": "Project:ꯃꯌꯥꯝꯒꯤ ꯑꯣꯏꯅꯥ ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯔꯛꯄꯥ",
"edithelp": "ꯁꯦꯝꯒꯠꯅꯕꯥ ꯃꯥꯇꯦꯡ",
"helppage-top-gethelp": "ꯃꯥꯇꯦꯡ",
- "mainpage": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+ "mainpage": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
"mainpage-description": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
"policy-url": "Project:ꯈꯣꯡꯊꯥꯡ",
"portal": "ꯃꯤꯌꯥꯝꯒꯤ ꯄꯣꯔꯇꯦꯜ",
"portal-url": "Project:ꯃꯤꯌꯥꯝꯒꯤ ꯄꯣꯔꯇꯦꯜ",
"privacy": "ꯑꯔꯣꯟꯕꯥ ꯊꯧꯔꯥꯡ",
- "privacypage": "Project:ꯑꯔꯣꯟꯕꯥ ꯊꯧꯔꯥꯡ",
+ "privacypage": "Project:ꯑꯔꯣꯟꯕ ꯊꯧꯔꯥꯡ",
"badaccess": "ꯑꯌꯥꯕꯥꯗꯨ ꯁꯣꯏꯔꯦ",
"badaccess-group0": "ꯅꯪ ꯍꯧꯖꯤꯛ ꯑꯦꯛꯁꯟ ꯂꯧꯈꯠꯄꯥ ꯌꯥꯗꯔꯤ ꯅꯪꯅꯥ ꯍꯪꯒꯠꯆꯔꯤꯕꯗꯨꯒꯤ ꯃꯇꯥꯡꯗ",
"badaccess-groups": "The action you have requested is limited to users in {{PLURAL:$2|the group|one of the groups}}: $1.",
"nstab-template": "ꯇꯦꯝꯄꯂꯦꯠ",
"nstab-help": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯇꯦꯂꯧꯐꯝ",
"nstab-category": "ꯃꯥꯆꯥꯛꯈꯥꯏꯕꯥ",
- "mainpage-nstab": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+ "mainpage-nstab": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
"nosuchaction": "ꯃꯁꯤꯒꯨꯕꯥ ꯃꯥꯑꯣꯡꯁꯤ ꯅꯠꯇꯦ",
"nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
"nosuchspecialpage": "ꯃꯁꯤꯒꯥ ꯃꯥꯟꯅꯕꯥ ꯑꯈꯟꯅꯕꯥ ꯂꯥꯃꯥꯏ ꯂꯩꯇꯦ",
"content-json-empty-object": "ꯑꯍꯥꯡꯕꯥ ꯄꯣꯠꯁꯛ",
"viewpagelogs": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯅꯧꯅ ꯆꯪꯉꯨ",
"currentrev-asof": "$1 ꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ ꯃꯤꯠꯌꯦꯡ",
- "revisionasof": "Revision as of $1",
+ "revisionasof": " $1 ꯒꯤ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕ",
"revision-info": "Revision as of $1 by {{GENDER:$6|$2}}$7",
"previousrevision": "ꯑꯔꯤꯕꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
"nextrevision": "ꯑꯅꯧꯕꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
"group-bot": "ꯕꯣꯇꯁꯤꯡ",
"group-sysop": "ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
"grouppage-bot": "{{ns:project}}:ꯕꯣꯠꯁꯤꯡ",
- "grouppage-sysop": "ꯉꯥꯛ ꯁꯦꯟꯂꯤꯕ {{ns:project}}",
+ "grouppage-sysop": "ꯉꯥꯛ ꯁꯦꯟꯂꯤꯕ:{{ns:project}}",
"right-writeapi": "API sijinaduna eba",
"newuserlogpage": "User creation log",
"action-edit": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯁꯦꯝꯒꯠꯂꯨ",
"tooltip-invert": "Akhannaba maming gi manungda page tungi ahongba lotnaba oopu du yeng ngoo",
"namespace_association": "Maming eefam ga marileinaba",
"tooltip-namespace_association": "Oopu du yengoo maming eefam gi hiramga mari leinaba khangatlaba maming eefam amadi wa ngangfam manung channaba",
- "blanknamespace": "ꯃꯔꯨꯑꯣꯏꯕꯥ",
+ "blanknamespace": "ꯃꯔꯨꯑꯣꯏꯕ",
"contributions": "{{GENDER:$1|User}} ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡ",
"contributions-title": "$1 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯅ ꯈꯣꯝꯖꯤꯜꯂꯛꯄꯁꯤꯡ",
"mycontris": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
"anoncontribs": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
"contribsub2": "{{GENDER:$3|$1}}$2 ꯒꯤ",
+ "nocontribs": "ꯃꯁꯤꯗ ꯆꯪꯂꯤꯕꯁꯤꯒ ꯆꯥꯟꯅꯕ ꯑꯍꯣꯡꯕ ꯂꯩꯇꯦ ꯫",
"uctop": "ꯍꯧꯖꯤꯛ",
"month": "ꯃꯗꯨꯒꯤ ꯊꯥꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
"year": "ꯃꯗꯨꯒꯤ ꯆꯥꯍꯤꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
"contribslink": "ꯈꯣꯝ",
"blocklogpage": "ꯆꯪꯁꯤꯟꯕꯥ ꯊꯤꯡꯕꯥ",
"reblock-logentry": "[[$1]] ꯒꯤ ꯁꯦꯝꯐꯝꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯊꯤꯡꯉꯨ $2 $3 ꯒꯤ ꯑꯍꯦꯟꯕ ꯃꯇꯝꯒ ꯂꯣꯏꯅꯅ",
+ "block-log-flags-nocreate": "ꯑꯩꯀꯥꯎꯟ ꯁꯦꯝꯕ ꯕꯥꯍꯟꯗꯕ",
"movelogpage": "ꯂꯣꯒ ꯁꯤ ꯂꯦꯡꯍꯟꯂꯨ",
"export": "ꯂꯥꯃꯥꯏꯁꯤꯡ ꯄꯨꯊꯣꯛꯈꯣ",
"thumbnail-more": "ꯆꯥꯑꯣꯍꯟꯕꯥ",
"file-info-size-pages": "$1 × $2 pixels, ꯐꯥꯏꯜ ꯆꯥꯎꯕꯒꯤ ꯆꯥꯡ: $3, MIME type: $4, $5 {{PLURAL:$5|ꯂꯥꯃꯥꯏ|ꯂꯥꯃꯥꯏꯁꯤꯡ}}",
"file-nohires": "ꯃꯁꯤꯗꯒꯤ ꯍꯦꯟꯅꯥ ꯁꯦꯡꯕꯥ ꯂꯩꯇꯔꯦ",
"svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
- "show-big-image": "File Asengba",
+ "show-big-image": "ꯐꯥꯏꯜ ꯑꯁꯦꯡꯕ",
"show-big-image-preview": "Size of this preview: $1.",
- "show-big-image-other": "Other {{PLURAL:$2|resolution|resolutions}}: $1.",
+ "show-big-image-other": "ꯑꯇꯩ {{PLURAL:$2|resolution|ꯁꯦꯡꯅ ꯌꯦꯡꯕ ꯌꯥꯕ}}: $1.",
"show-big-image-size": "$1 × $2 pixels",
"metadata": "ꯃꯦꯇꯥꯗꯥꯇꯥ",
"metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
"redirect-revision": "ꯂꯥꯃꯥꯏ ꯑꯃꯨꯧꯍꯟꯅ ꯌꯦꯡꯕ",
"redirect-file": "ꯐꯥꯏꯜ ꯃꯃꯤꯡ",
"specialpages": "ꯑꯈꯟꯅꯕ ꯂꯥꯃꯥꯏꯁꯤꯡ",
- "tag-filter": "[[Special:Tags|Tag]] filter:",
+ "tag-filter": "[[Special:Tags|ꯊꯦꯡꯕ]] ꯁꯦꯡꯇꯣꯛꯄ:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
"tags-active-yes": "ꯍꯣꯏ",
"tags-active-no": "ꯅꯠꯇꯦ",
"broken-file-category": "ကျိုးပျက်နေသော ဖိုင်လင့်များပါသည့် စာမျက်နှာများ",
"about": "အကြောင်း",
"article": "စာမျက်နှာ",
- "newwindow": "(á\80\9dá\80\84á\80ºá\80¸á\80\92á\80á\80¯á\80¸á\80¡á\80\9eá\80\85á\80ºá\80\90á\80\81á\80¯á\80\80á\80á\80¯ဖွင့်ရန်)",
+ "newwindow": "(á\80\9dá\80\84á\80ºá\80¸á\80\92á\80á\80¯á\80¸á\80¡á\80\9eá\80\85á\80ºá\80\90á\80\85á\80ºá\80\81á\80¯á\80\90á\80½á\80\84á\80º ဖွင့်ရန်)",
"cancel": "မလုပ်တော့",
"moredotdotdot": "နောက်ထပ်...",
"morenotlisted": "ဤစာရင်းမှာ မပြည့်စုံနိုင်ပါ။",
"viewhelppage": "အကူအညီစာမျက်နှာကို ကြည့်ရန်",
"categorypage": "ကဏ္ဍစာမျက်နှာကို ကြည့်ရန်",
"viewtalkpage": "ဆွေးနွေးမှုကို ကြည့်ရန်",
- "otherlanguages": "အခြား ဘာသာဖြင့်",
+ "otherlanguages": "á\80¡á\80\81á\80¼á\80¬á\80¸ á\80\98á\80¬á\80\9eá\80¬á\80\85á\80\80á\80¬á\80¸á\80\99á\80»á\80¬á\80¸á\80\96á\80¼á\80\84á\80·á\80º",
"redirectedfrom": "($1 မှ ပြန်ညွှန်းထားသည်)",
"redirectpagesub": "ပြန်ညွှန်းသော စာမျက်နှာ",
"redirectto": "ပြန်ညွှန်းရန် -",
"cachedspecial-refresh-now": "Vis siste.",
"categories": "Kategorier",
"categories-submit": "Vis",
- "categoriespagetext": "Følgende {{PLURAL:$1|kategori|kategorier}} inneholder sider eller media.\n[[Special:UnusedCategories|Ubrukte kategorier]] vises ikke her.\nSe også [[Special:WantedCategories|ønskede kategorier]].",
+ "categoriespagetext": "Følgende {{PLURAL:$1|kategori|kategorier}} eksisterer på wikien, og er muligens {{PLURAL:$1|ubrukt|ubrukte}}.\nSe også [[Special:WantedCategories|ønskede kategorier]].",
"categoriesfrom": "Vis kategorier fra og med:",
"deletedcontributions": "Slettede brukerbidrag",
"deletedcontributions-title": "Slettede brukerbidrag",
"edit-error-long": "Feil:\n\n$1",
"revid": "revisjon $1",
"pageid": "side-ID $1",
+ "interfaceadmin-info": "$1\n\nTillatelse til å redigere CSS, JavaScript og JSON som gjelder hele nettstedet ble nylig utskilt til rettigheten <code>editinterface</code>. Om du ikke forstår hvorfor du får denne feilmeldingen, se [[mw:MediaWiki_1.32/interface-admin]].",
"rawhtml-notallowed": "<html>-tagger kan ikke brukes utenfor normale sider.",
"gotointerwiki": "Forlater {{SITENAME}}",
"gotointerwiki-invalid": "Den gitte tittelen er ugyldig.",
"passwordpolicies-policy-minimumpasswordlengthtologin": "Passordet må være på minst $1 {{PLURAL:$1|tegn}} for å kunne logge inn",
"passwordpolicies-policy-passwordcannotmatchusername": "Passordet kan ikke være det samme som brukernavnet",
"passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikke matche spesifikt svartelistede passord",
- "passwordpolicies-policy-maximalpasswordlength": "Passordet må være på minst $1 {{PLURAL:$1|tegn}}",
+ "passwordpolicies-policy-maximalpasswordlength": "Passordet kan maksimalt være på $1 {{PLURAL:$1|tegn}}",
"passwordpolicies-policy-passwordcannotbepopular": "Passordet kan ikke være {{PLURAL:$1|det populære passordet|i lista over $1 populære passord}}",
"easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert"
}
"ns-specialprotected": "Error message displayed when trying to edit a page in the Special namespace",
"titleprotected": "Used as error message. Parameters:\n* $1 - username; GENDER supported\n* $2 - reason for protection",
"filereadonlyerror": "Parameters:\n* $1 - file name\n* $2 - file repository name\n* $3 - reason",
+ "invalidtitle": "Displayed when an invalid title was encountered (generally in a list) and there are no details about it to be shown.",
"invalidtitle-knownnamespace": "Displayed when an invalid title was encountered (generally in a list), but the namespace number is known to exist.\n\nParameters:\n* $1 - (Unused) the namespace number\n* $2 - the namespace name in content language or {{msg-mw|blanknamespace}} for the main namespace\n* $3 - the part of the title after the namespace (e.g. SomeName for the page User:SomeName)",
"invalidtitle-unknownnamespace": "Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.\n\nParameters:\n* $1 - the namespace number\n* $2 - the part of the title after the namespace (e.g. SomeName for the page User:SomeName)",
"exception-nologin": "Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.\n{{Identical|Not logged in}}",
"tog-watchlisthideminor": "Scunne le cangiaminde stuèdeche da l'elenghe de le pàggene condrollate",
"tog-watchlisthideliu": "Scunne le cangiaminde de l'utinde canusciute da l'elenghe de le pàggene condrollate",
"tog-watchlistreloadautomatically": "Recareche automaticamende l'eleghe de le pàggene condrollate quanne cange 'nu filtre (richieste Javascript)",
- "tog-watchlistunwatchlinks": "Aggiunge collegaminde dirette pe langià/non langià le eleminde jndr'à le pàggene condrollate (vole 'u JavaScript pe ausà sta funzionalità).",
+ "tog-watchlistunwatchlinks": "Aggiunge marcature dirette ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) pe langià/non langià le cangiaminde a le pàggene (vole 'u JavaScript pe ausà sta funzionalità).",
"tog-watchlisthideanons": "Scunne le cangiaminde de l'utinde scanusciute da l'elenghe de le pàggene condrollate",
"tog-watchlisthidepatrolled": "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
"tog-watchlisthidecategorization": "Scunne 'a categorizzazzione d'a vôsce",
"missingarticle-rev": "(versione#: $1)",
"missingarticle-diff": "(Diff: $1, $2)",
"readonly_lag": "'U database ha state automaticamende blocchete purcè le server de le database ca depennene da 'u master onne sciute in eccezzione",
+ "nonwrite-api-promise-error": "Ha state mannate a 'ndestazione HTTP 'Promise-Non-Write-API-Action', ma 'a richieste ere de 'nu module API de scritture.",
"internalerror": "Errore inderne",
"internalerror_info": "Errore inderne: $1",
"internalerror-fatal-exception": "Eccezzione fatale d'u tipe \"$1\"",
"cascadeprotected": "Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l'opzione \"a cascate\":\n$2",
"namespaceprotected": "Non ge tine 'u permesse pe cangià pàggene d'u neimspeise '''$1'''.",
"customcssprotected": "Non ge tine 'u permesse pe cangià sta pàgene de CSS, purcè tène otre configurazione personale.",
+ "customjsonprotected": "Non ge tine 'u permesse pe cangià sta pàgene de JSON, purcè tène otre configurazione personale.",
"customjsprotected": "Non ge tine 'u permesse pe cangià sta pàgene de Javascript, purcè tène otre configurazione personale.",
"mycustomcssprotected": "Non ge tìne le permesse pe cangià sta pàgene CSS",
"mycustomjsprotected": "Non ge tìne le permesse pe cangià sta pàgene JavaScript",
"Ramjit Tudu",
"R Ashwani Banjan Murmu",
"Fagunkoyel Hansdah",
- "Subasmurmu"
+ "Subasmurmu",
+ "Amire80"
]
},
"tog-underline": "ᱡᱚᱱᱚᱲ ᱞᱟᱛᱟᱨᱨᱮ ᱫᱟᱜᱽ ᱩᱫᱩᱜᱽᱢᱮ:",
"pool-errorunknown": "ᱵᱟᱝ ᱵᱟᱰᱟᱭ ᱦᱩᱲᱟᱹᱜ",
"poolcounter-usage-error": "ᱵᱮᱵᱷᱟᱨᱟᱜ ᱦᱩᱲᱟᱹᱜᱺ $1",
"aboutsite": "{{SITENAME}} ᱵᱟᱵᱚᱛ",
- "aboutpage": "Project: ᱵᱟᱵᱚᱛ",
+ "aboutpage": "Project:ᱵᱟᱵᱚᱛ",
"copyright": "ᱩᱱᱩᱫᱩᱜ ᱫᱚ ᱧᱟᱢᱚᱜ-ᱟ $1 ᱞᱮᱠᱟᱛᱮ ᱵᱟᱝᱠᱷᱟᱱ ᱚᱞ ᱛᱟᱦᱮᱱᱟ",
- "copyrightpage": "{{ns:project}}: ᱮᱠᱛᱤᱭᱟᱨ",
+ "copyrightpage": "{{ns:project}}:ᱮᱠᱛᱤᱭᱟᱨ",
"currentevents": "ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨ",
- "currentevents-url": "Project: ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨᱠᱳ",
+ "currentevents-url": "Project:ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨᱠᱳ",
"disclaimers": "ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱳ",
- "disclaimerpage": "Project: ᱥᱟᱫᱷᱟᱨᱚᱱ ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱩ",
+ "disclaimerpage": "Project:ᱥᱟᱫᱷᱟᱨᱚᱱ ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱩ",
"edithelp": "ᱥᱟᱯᱲᱟᱣ ᱜᱚᱸᱲᱚᱸ",
"helppage-top-gethelp": "ᱜᱚᱸᱲᱚᱸ",
"mainpage": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ",
"portal": "ᱜᱩᱥᱴᱤ ᱵᱚᱞᱚᱜ ᱫᱩᱭᱟᱹᱨ",
"portal-url": "Project:ᱠᱷᱩᱴ ᱵᱚᱞᱚᱱ ᱦᱚᱨ",
"privacy": "ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
- "privacypage": "Project: ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
+ "privacypage": "Project:ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
"badaccess": "ᱟᱹᱭᱫᱟᱹᱨᱤ ᱦᱩᱲᱟᱹᱜ",
"badaccess-group0": "ᱟᱢ ᱫᱚ ᱚᱠᱟ ᱠᱟᱹᱢᱤ ᱞᱟᱹᱜᱤᱛ ᱮᱢ ᱟᱨᱚᱡᱽ ᱟᱠᱟᱛ, ᱚᱱᱟ ᱠᱟᱹᱢᱤ ᱯᱩᱨᱟᱹᱣ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
"badaccess-groups": "ᱟᱢ ᱫᱚ ᱚᱠᱟ ᱠᱟᱹᱢᱤᱢ ᱢᱮᱱᱡᱚᱝᱠᱟᱱ ᱚᱱᱟ ᱫᱚ ᱠᱷᱟᱹᱞᱤ {{PLURAL:$2 ᱨᱟᱹᱥᱤᱭᱟᱹᱠᱚᱨᱮ ᱱᱚᱣᱟ ᱨᱟᱹᱥᱤᱭᱟᱹ ᱨᱮᱭᱟᱜ ᱢᱤᱫᱴᱮᱱ ᱨᱮ}} ᱢᱤᱫᱴᱮᱱ ᱵᱮᱵᱷᱟᱨᱤᱡ ᱥᱟᱯᱲᱟᱣ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ: $1᱾",
"nosuchusershort": "\"$1\" ńutuman jahãe beoharko do banuḱkoa. Ńutum reaḱ banan biḍaomẽ.",
"nouserspecified": "Am do pusṭaote laṛcaṛićaḱ ńutum em hoyoḱtama.",
"login-userblocked": "Nui laṛcaṛic doe esetgea. bhitri boloḱ ạidạri bań emoḱ kana.",
- "wrongpassword": "ᱵᱮᱷᱟᱨᱤᱭᱟᱜ ᱧᱩᱛᱩᱢ ᱥᱮ ᱩᱠᱩ ᱱᱟᱢᱵᱟᱨ ᱵᱟᱝ ᱢᱤᱞᱟᱹᱜ ᱠᱟᱱᱟ᱾ ᱫᱚᱲᱦᱟᱛᱮ ᱠᱩᱨᱩᱢᱩᱴᱩᱭᱢᱮ᱾",
+ "wrongpassword": "ᱵᱮᱷᱟᱨᱤᱭᱟᱜ ᱧᱩᱛᱩᱢ ᱥᱮ ᱩᱠᱩ ᱱᱟᱢᱵᱟᱨ ᱵᱟᱝ ᱢᱤᱞᱟᱹᱜ ᱠᱟᱱᱟ᱾\nᱫᱚᱲᱦᱟᱛᱮ ᱠᱩᱨᱩᱢᱩᱴᱩᱭᱢᱮ᱾",
"wrongpasswordempty": "Em hoyen oku nambar do cetge banuḱa.\nDaya katet́ arhõ kurumuṭuyme.",
"passwordtooshort": "Uku nambar do {{PLURAL:$1 1 horop reaḱ $1 horop reaḱ}} mudre hoyoḱ jạruṛa.",
"password-name-match": "Amaḱ oku nambar do amaḱ ńutum khon eṭaḱ hoyoḱ jạruṛtama.",
"link_sample": "ᱡᱚᱱᱚᱲ ᱴᱟᱭᱴᱮᱞ",
"link_tip": "ᱵᱷᱤᱛᱨᱤ ᱡᱚᱱᱚᱲ",
"extlink_sample": "http://www.example.com ᱡᱚᱱᱚᱲ ᱴᱟᱭᱴᱮᱞ",
- "extlink_tip": "ᱵᱟᱨᱦᱮ ᱨᱮᱱᱟᱜ ᱡᱚᱱᱚᱲ (ᱫᱤᱥᱟᱹᱭᱢᱮ http://prefix)",
+ "extlink_tip": "ᱵᱟᱨᱦᱮ ᱨᱮᱱᱟᱜ ᱡᱚᱱᱚᱲ (ᱫᱤᱥᱟᱹᱭᱢᱮ http:// prefix)",
"headline_sample": "ᱵᱚᱦᱚᱜ ᱨᱮᱱᱟᱜ ᱚᱞ",
"headline_tip": "ᱞᱮᱵᱷᱮᱞ ᱒ ᱦᱮᱰᱞᱟᱭᱤᱱ",
"nowiki_sample": "ᱵᱮᱜᱚᱨ ᱯᱷᱚᱨᱢᱮᱴ ᱚᱞᱠᱩ ᱵᱷᱚᱨᱟᱣᱢᱮ",
"istemplate": "ᱥᱮᱞᱮᱫ",
"isimage": "ᱨᱮᱫ ᱡᱚᱱᱚᱲ",
"whatlinkshere-prev": "{{PLURAL:$1|ᱞᱟᱦᱟ ᱨᱮᱭᱟᱜ |ᱞᱟᱦᱟ ᱨᱮᱭᱟᱜ$1}}",
- "whatlinkshere-next": "{{PLURAL:$1 |ᱛᱟᱭᱚᱢ |ᱛᱟᱭᱚᱢ $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|ᱛᱟᱭᱚᱢ|ᱛᱟᱭᱚᱢ $1}}",
"whatlinkshere-links": "← ᱡᱚᱱᱚᱲᱠᱚ",
"whatlinkshere-hideredirs": "$1 ᱟᱨᱦᱚᱸ ᱩᱱᱩᱫᱩᱜ",
"whatlinkshere-hidetrans": "ᱥᱮᱞᱮᱫ $1",
"show-big-image": "ᱟᱥᱚᱞ ᱨᱮᱫ",
"show-big-image-preview": "ᱧᱮᱞᱡᱚᱝ ᱨᱮᱱᱟᱜ ᱟᱠᱟᱨ:$1",
"show-big-image-other": "ᱮᱢᱟᱱ ᱛᱮᱭᱟᱜ {{PLURAL:$2|resolution|resolutions}}: $1",
- "show-big-image-size": "$1 X $2 Pixels",
+ "show-big-image-size": "$1 × $2 Pixels",
"ilsubmit": "ᱥᱮᱸᱫᱽᱨᱟ",
"bydate": "ᱢᱟᱹᱦᱤᱛ ᱛᱮ",
"monday-at": "ᱚᱛᱮᱢᱟᱦᱟᱸ $1 ᱨᱮ",
"anontalk": "Ságastallan IP-čujuhussii",
"navigation": "Navigašuvdna",
"and": " ja",
+ "variants": "Variánttat",
"errorpagetitle": "Feaila",
"returnto": "Máhcat siidui $1.",
"tagline": "{{SITENAME}}",
"template-protected": "(suodjáluvvon)",
"template-semiprotected": "(suodjáluvvon anonyma ja ođđa geavaheddjiin)",
"edittools": "<!-- Teaksta mii lea dás, čájehuvvo rievdadanskovi vuolábealde. -->",
+ "content-model-wikitext": "wikiteaksta",
"viewpagelogs": "Čájet dán siiddu loggaid",
"nohistory": "Dán siiddus ii leat rievdadanhistorjá.",
"currentrev": "Dálá veršuvdna",
"page_first": "vuosttas siidu",
"page_last": "maŋimus siidu",
"history-fieldset-title": "Bláđe historjjá",
- "histfirst": "Vuosttas",
- "histlast": "Maŋimus",
+ "histfirst": "vuosttas",
+ "histlast": "maŋimus",
"historysize": "($1 stávvala)",
"historyempty": "(guoros)",
"history-feed-title": "Rievdadushistorjá",
"upload-file-error": "Stuorra feaila",
"upload-misc-error": "Feaila",
"upload-curl-error6": "Čujuhus ii doaimma",
- "license": "Liseansa",
+ "license": "Liseansa:",
"license-header": "Liseansa",
"nolicense": "Ii liseansa",
"license-nopreview": "(ovdalgihtii geahččan ii leat vejolaš)",
"notargettext": "It leat meroštallan mearresiiddu dahje -geavaheaddji, masa dahku laktása.",
"booksources": "Girjegáldut",
"booksources-search-legend": "Oza girjegálduid",
+ "booksources-search": "Oza",
"booksources-text": "Vuolábealde leat liŋkkat olggobeal siidduide, main vuvdojuvvot ođđa ja boares girjjid. Siiddui sáhttá maid leat lassedieđut girjjiin.",
"specialloguserlabel": "Geavaheaddji:",
"speciallogtitlelabel": "Mearri",
"revertpage": "Geavaheaddji [[Special:Contributions/$2|$2]] ([[User_talk:$2|ságastallan]]) rievdadusat sihkkojuvvui ja siidu máhcahuvvui veršuvdnii, man geavaheaddji [[User:$1|$1]] lei dahkan.",
"rollback-success": "Rievdadusat, maid geavaheaddji ”$1” lei dahkan, sihkojuvvui ja artihkal máhcaduvvui veršuvdnii, man geavaheaddji $2 lei dahkan.",
"protectlogpage": "Suodjálanlogga",
- "protectedarticle": "suodjálii siiddu $1",
+ "protectedarticle": "suodjálii siiddu [[$1]]",
"modifiedarticleprotection": "rievddai siiddu [[$1]] suodjálandási",
"unprotectedarticle": "heittii siiddu $1 suodjaleami",
"protect-title": "Siiddu $1 suodjáleapmi",
"contributions": "Geavaheaddji rievdadusat",
"contributions-title": "Geavaheaddji $1 rievdadusat",
"mycontris": "Rievdadusat",
+ "anoncontribs": "Rievdadusat",
"uctop": "(ođđaseamos)",
"month": "Mánotbadji",
"year": "Jahki",
"sp-contributions-newbies": "Čájet ođđa geavaheddjiid rievdadusaid",
"sp-contributions-newbies-sub": "Ođđa geavaheddjiid rievdadusat",
"sp-contributions-blocklog": "cakkastallamat",
+ "sp-contributions-logs": "loggat",
"sp-contributions-talk": "ságastallan",
"sp-contributions-userrights": "Geavaheaddjirivttiid stivren",
"sp-contributions-search": "Oza rievdadusaid",
"watchlisttools-view": "Čájet rievdadusaid",
"watchlisttools-edit": "Ođasmahte listtu",
"version": "Veršuvdna",
+ "redirect-file": "Fiilanamma",
"specialpages": "Erenomáš siiddut",
"logentry-delete-delete": "$1 sihkui siiddu $3",
"logentry-delete-restore": "$1 máhcahii siiddu $3",
"logentry-move-move": "$1 sirddii siiddu $3 nammii $4",
"logentry-move-move_redir-noredirect": "$1 sirddii siiddu $3 nammii $4 iige ráhkadan ođđasitstivrema",
"logentry-newusers-create": "$1 ráhkadii dovddaldaga",
- "logentry-newusers-autocreate": "Dovddaldat $1 ráhkaduvvui automáhtalaččat",
+ "logentry-newusers-autocreate": "Dovddaldat $1 {{GENDER:$2|ráhkaduvvui}} automáhtalaččat",
"rightsnone": "(eai rievttit)",
"searchsuggest-search": "Oza"
}
"userrights": "Postavke korisničkih prava",
"userrights-lookup-user": "Menadžment korisničkih prava",
"userrights-user-editname": "Unesi korisničko ime:",
- "editusergroup": "Menjaj Grupe Korisnika",
+ "editusergroup": "Učitaj korisničke grupe",
"editinguser": "Mijenjate korisnička prava {{GENDER:$1|korisnika|korisnice}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Uredi korisničke grupe",
"saveusergroups": "Snimi korisničke grupe",
"talk": "Разговор",
"views": "Прегледи",
"toolbox": "Алатке",
- "tool-link-userrights": "УÑ\80еди {{GENDER:$1|корисничке}} групе",
- "tool-link-userrights-readonly": "{{GENDER:$1|Корисничке}} групе",
+ "tool-link-userrights": "Ð\9fÑ\80омени {{GENDER:$1|корисничке}} групе",
+ "tool-link-userrights-readonly": "Поглед {{GENDER:$1|корисничких}} група",
"tool-link-emailuser": "Слање имејла {{GENDER:$1|кориснику|корисници}}",
"imagepage": "Погледај страницу датотеке",
"mediawikipage": "Погледај страницу поруке",
"createacct-realname": "Право име (необавезно)",
"createacct-reason": "Разлог",
"createacct-reason-ph": "Зашто правите још један налог?",
- "createacct-reason-help": "Ð\9fоÑ\80Ñ\83ка коÑ\98а Ñ\81е пÑ\80иказÑ\83Ñ\98е Ñ\83 дневникÑ\83 Ñ\81Ñ\82ваÑ\80ања корисничких налога",
- "createacct-submit": "Отвори налог",
+ "createacct-reason-help": "Ð\9fоÑ\80Ñ\83ка коÑ\98а Ñ\81е пÑ\80иказÑ\83Ñ\98е Ñ\83 евиденÑ\86иÑ\98и пÑ\80авÑ\99ења корисничких налога",
+ "createacct-submit": "Отвори свој налог",
"createacct-another-submit": "Отвори налог",
"createacct-continue-submit": "Наставите отварање налога",
"createacct-another-continue-submit": "Наставите отварање налога",
"passwordtoopopular": "Често изабране лозинке не могу да се користе. Изаберите лозинку коју је теже погодити.",
"password-name-match": "Лозинка се мора разликовати од корисничког имена.",
"password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
- "mailmypassword": "РеÑ\81еÑ\82Ñ\83Ñ\98 лозинку",
+ "mailmypassword": "Ð\9eбнови лозинку",
"passwordremindertitle": "{{SITENAME}} — привремена лозинка",
"passwordremindertext": "Неко са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
"noemail": "Не постоји имејл адреса за {{GENDER:$1|корисника|корисницу}} $1.",
"botpasswords-label-update": "Ажурирај",
"botpasswords-label-cancel": "Откажи",
"botpasswords-label-delete": "Обриши",
- "botpasswords-label-resetpassword": "РеÑ\81еÑ\82Ñ\83Ñ\98 лозинку",
+ "botpasswords-label-resetpassword": "Ð\9eбнови лозинку",
"botpasswords-label-grants": "Применљиве дозволе:",
"botpasswords-label-grants-column": "Одобрено",
"botpasswords-bad-appid": "Име бота „$1” није валидно.",
"resettokens-token-label": "$1 (тренутна вредност: $2)",
"resettokens-watchlist-token": "Жетон за веб довод (Atom/RSS) [[Special:Watchlist|измена на страницама у вашем списку надгледања]]",
"resettokens-done": "Жетони су ресетовани",
- "resettokens-resetbutton": "РеÑ\81еÑ\82Ñ\83Ñ\98 изабране жетоне",
+ "resettokens-resetbutton": "Ð\9eбнови изабране жетоне",
"bold_sample": "Подебљан текст",
"bold_tip": "Подебљан текст",
"italic_sample": "Искошен текст",
"image_tip": "Уграђивање датотеке",
"media_sample": "Пример.ogg",
"media_tip": "Веза",
- "sig_tip": "Ваш потпис са тренутним временом",
+ "sig_tip": "Ваш потпис с временском ознаком",
"hr_tip": "Водоравна линија (користите ретко)",
"summary": "Опис измене:",
"subject": "Тема:",
"anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану IP адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
"noarticletext": "На овој страници тренутно нема текста.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} направити ову страницу]</span>.",
"noarticletext-nopermission": "Тренутно нема текста на овој страници.\nМожете да [[Special:Search/{{PAGENAME}}|потражите овај наслов странице]] на другим страницама или <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражите сродне евиденције]</span>, али немате дозволу да направите ову страницу.",
- "missing-revision": "Ð\98змена бÑ\80. $1 на Ñ\81Ñ\82Ñ\80аниÑ\86и под именом â\80\9e{{FULLPAGENAME}}â\80\9c не поÑ\81Ñ\82оÑ\98и.\n\nÐ\9eво Ñ\81е обиÑ\87но деÑ\88ава када пÑ\80аÑ\82иÑ\82е заÑ\81Ñ\82аÑ\80елÑ\83 везÑ\83 до Ñ\81Ñ\82Ñ\80аниÑ\86е коÑ\98а Ñ\98е обÑ\80иÑ\81ана.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникÑ\83 брисања].",
+ "missing-revision": "Ð\98змена бÑ\80. $1 на Ñ\81Ñ\82Ñ\80аниÑ\86и под именом â\80\9e{{FULLPAGENAME}}â\80\9c не поÑ\81Ñ\82оÑ\98и.\n\nÐ\9eво Ñ\81е обиÑ\87но деÑ\88ава када пÑ\80аÑ\82иÑ\82е заÑ\81Ñ\82аÑ\80елÑ\83 везÑ\83 до Ñ\81Ñ\82Ñ\80аниÑ\86е коÑ\98а Ñ\98е обÑ\80иÑ\81ана.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и брисања].",
"userpage-userdoesnotexist": "Кориснички налог „<nowiki>$1</nowiki>“ није отворен.\nРазмислите да ли заиста желите да направите/уредите ову страницу.",
"userpage-userdoesnotexist-view": "Кориснички налог „$1“ није отворен.",
"blocked-notice-logextract": "Овај корисник је тренутно блокиран.\nИзвештај о последњем блокирању можете погледати испод:",
"longpageerror": "<strong>Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.</strong>\nСтраница не може бити сачувана.",
"readonlywarning": "<strong>Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.</strong>\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nСистемски администратор је навео следеће објашњење: $1",
"protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је мењају.</strong>\nПоследњи унос у евиденцији је наведен испод као референца:",
- "semiprotectedpagewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод као референца:",
+ "semiprotectedpagewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је уређују.\nПоследњи унос у евиденцији је наведен испод као референца:",
"cascadeprotectedwarning": "<strong>Упозорење:</strong> Ова страница је заштићена тако да је могу уређивати само корисници са [[Special:ListGroupRights|одређеним правима]] (администратори), јер је иста укључена у {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом” заштитом:",
- "titleprotectedwarning": "<strong>УпозоÑ\80еÑ\9aе: ова Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е заÑ\88Ñ\82иÑ\9bена, Ñ\82ако да Ñ\81Ñ\83 поÑ\82Ñ\80ебна [[Special:ListGroupRights|поÑ\81ебна пÑ\80авима]] да Ñ\81е она напÑ\80ави.</strong>\nÐ\9fоÑ\81ледÑ\9aи запиÑ\81 Ñ\83 дневникÑ\83 Ñ\98е пÑ\80иказан испод као референца:",
+ "titleprotectedwarning": "<strong>УпозоÑ\80еÑ\9aе: ова Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е заÑ\88Ñ\82иÑ\9bена, Ñ\82ако да Ñ\81Ñ\83 поÑ\82Ñ\80ебна [[Special:ListGroupRights|поÑ\81ебна пÑ\80ава]] да Ñ\81е она напÑ\80ави.</strong>\nÐ\9fоÑ\81ледÑ\9aи Ñ\83ноÑ\81 Ñ\83 евиденÑ\86иÑ\98и Ñ\98е наведен испод као референца:",
"templatesused": "{{PLURAL:$1|Шаблон који се користи|Шаблони који се користе}} на овој страници:",
"templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом претпрегледу:",
"templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
"rev-deleted-user-contribs": "[корисничко име или ИП адреса је уклоњена – измена је сакривена са списка доприноса]",
"rev-deleted-text-permission": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
"rev-suppressed-text-permission": "Измена ове странице је <strong>сакривена</strong>. Више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
- "rev-deleted-text-unhide": "Ð\98змена ове Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникÑ\83 брисања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
- "rev-suppressed-text-unhide": "Ð\98змена ове Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникÑ\83 сакривања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
+ "rev-deleted-text-unhide": "Ð\98змена ове Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и брисања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
+ "rev-suppressed-text-unhide": "Ð\98змена ове Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и сакривања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
"rev-deleted-text-view": "Измена ове странице је '''обрисана'''.\nМожете је погледати; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
"rev-suppressed-text-view": "Измена ове странице је '''сакривена'''.\nМожете је погледати; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
"rev-deleted-no-diff": "Не можете видети ову разлику јер је једна од измена '''обрисана'''.\nДетаљи се налазе у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
"rev-suppressed-no-diff": "Не можете видети ову разлику јер је једна од измена '''обрисана'''.",
- "rev-deleted-unhide-diff": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникÑ\83 брисања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
- "rev-suppressed-unhide-diff": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникÑ\83 сакривања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
- "rev-deleted-diff-view": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\98пак можеÑ\82е да погледаÑ\82е овÑ\83 Ñ\80азликÑ\83; виÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникÑ\83 брисања].",
- "rev-suppressed-diff-view": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\98пак можеÑ\82е да погледаÑ\82е овÑ\83 Ñ\80азликÑ\83; виÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникÑ\83 сакривања].",
+ "rev-deleted-unhide-diff": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и брисања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
+ "rev-suppressed-unhide-diff": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и сакривања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
+ "rev-deleted-diff-view": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\98пак можеÑ\82е да погледаÑ\82е овÑ\83 Ñ\80азликÑ\83; виÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и брисања].",
+ "rev-suppressed-diff-view": "Ð\88една од измена Ñ\83 овоÑ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\98пак можеÑ\82е да погледаÑ\82е овÑ\83 Ñ\80азликÑ\83; виÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и сакривања].",
"rev-delundel": "промени видљивост",
"rev-showdeleted": "прикажи",
"revisiondelete": "Брисање/враћање измена",
"logdelete-selected": "{{PLURAL:$1|Изабрана ставка у историји|Изабране ставке у историји}}:",
"revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступни.",
"revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступни.",
- "logdelete-text": "Ð\98збÑ\80иÑ\81ани Ñ\83ноÑ\81и Ñ\83 дневниÑ\86има Ñ\9bе и даÑ\99е биÑ\82и видÑ\99иви Ñ\83 дневниÑ\86има, али делови Ñ\9aиÑ\85овог Ñ\81адÑ\80жаÑ\98а неÑ\9bе биÑ\82и Ñ\98авно доÑ\81Ñ\82Ñ\83пни.",
+ "logdelete-text": "Ð\9eбÑ\80иÑ\81ани догаÑ\92аÑ\98и Ñ\83 евиденÑ\86иÑ\98ама Ñ\9bе Ñ\81е идаÑ\99е поÑ\98авÑ\99иваÑ\82и Ñ\83 евиденÑ\86иÑ\98и, али Ñ\9bе делови Ñ\9aиÑ\85овог Ñ\81адÑ\80жаÑ\98а биÑ\82и недоÑ\81Ñ\82Ñ\83пни Ñ\98авноÑ\81Ñ\82и.",
"revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
"revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
"revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
"mergehistory-fail-toobig": "Није могуће спојити историје јер више од $1 {{PLURAL:$1|измене ће бити премештене|измена ће бити премештено}}.",
"mergehistory-no-source": "Изворна страница $1 не постоји.",
"mergehistory-no-destination": "Одредишна страница $1 не постоји.",
- "mergehistory-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а моÑ\80а имаÑ\82и иÑ\81пÑ\80аван наслов.",
+ "mergehistory-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а моÑ\80а имаÑ\82и валидан наслов.",
"mergehistory-invalid-destination": "Одредишна страница мора имати исправан наслов.",
"mergehistory-autocomment": "Страница [[:$1]] је спојена у [[:$2]]",
"mergehistory-comment": "Страница [[:$1]] је спојена у [[:$2]]: $3",
"diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
"diff-paragraph-moved-tonew": "Пасус је премештен. Кликните да пређете на његово ново место.",
"diff-paragraph-moved-toold": "Пасус је премештен. Кликните да пређете на његово старо место.",
- "difference-missing-revision": "{{PLURAL:$2|Ð\88една измена|$2 измене}} од ове Ñ\80азлике ($1) не {{PLURAL:$2|поÑ\81Ñ\82оÑ\98и|поÑ\81Ñ\82оÑ\98е}}.\n\nÐ\9eво Ñ\81е обиÑ\87но деÑ\88ава када пÑ\80аÑ\82иÑ\82е заÑ\81Ñ\82аÑ\80елÑ\83 везÑ\83 до Ñ\81Ñ\82Ñ\80аниÑ\86е коÑ\98а Ñ\98е обÑ\80иÑ\81ана.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникÑ\83 брисања].",
+ "difference-missing-revision": "{{PLURAL:$2|Ð\88една измена|$2 измене}} од ове Ñ\80азлике ($1) не {{PLURAL:$2|поÑ\81Ñ\82оÑ\98и|поÑ\81Ñ\82оÑ\98е}}.\n\nÐ\9eво Ñ\81е обиÑ\87но деÑ\88ава када пÑ\80аÑ\82иÑ\82е заÑ\81Ñ\82аÑ\80елÑ\83 везÑ\83 до Ñ\81Ñ\82Ñ\80аниÑ\86е коÑ\98а Ñ\98е обÑ\80иÑ\81ана.\nÐ\92иÑ\88е инÑ\84оÑ\80маÑ\86иÑ\98а можеÑ\82е да пÑ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденÑ\86иÑ\98и брисања].",
"searchresults": "Резултати претраге",
"searchresults-title": "Резултати претраге за „$1“",
"titlematches": "Наслов странице одговара",
"prefs-editwatchlist-label": "Уређивање списка:",
"prefs-editwatchlist-edit": "уреди списак",
"prefs-editwatchlist-raw": "уреди сиров списак",
- "prefs-editwatchlist-clear": "иÑ\81пÑ\80азни Ñ\81пиÑ\81ак",
+ "prefs-editwatchlist-clear": "оÑ\87иÑ\81Ñ\82и Ñ\81пиÑ\81ак надгледаÑ\9aа",
"prefs-watchlist-days": "Број дана у списку надгледања:",
"prefs-watchlist-days-max": "Највише $1 {{PLURAL:$1|дан|дана|дана}}",
"prefs-watchlist-edits": "Највећи број измена приказаних на списку надгледања:",
"stub-threshold-disabled": "онемогућено",
"recentchangesdays": "Број дана у скорашњим изменама:",
"recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
- "recentchangescount": "Ð\9fодÑ\80азÑ\83мевани бÑ\80оÑ\98 измена за пÑ\80иказ Ñ\83 Ñ\81коÑ\80аÑ\88Ñ\9aим изменама, иÑ\81Ñ\82оÑ\80иÑ\98ама Ñ\81Ñ\82Ñ\80аниÑ\86а и дневниÑ\86има:",
- "prefs-help-recentchangescount": "Ð\9dаÑ\98веÑ\9bа број: 1000",
+ "recentchangescount": "Ð\9fодÑ\80азÑ\83мевани бÑ\80оÑ\98 измена за пÑ\80иказ Ñ\83 Ñ\81коÑ\80аÑ\88Ñ\9aим изменама, иÑ\81Ñ\82оÑ\80иÑ\98ама Ñ\81Ñ\82Ñ\80аниÑ\86а и евиденÑ\86иÑ\98ама:",
+ "prefs-help-recentchangescount": "Ð\9dаÑ\98веÑ\9bи број: 1000",
"prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да чита Ваш списак надгледања, зато га немојте делити. \nАко је потребно, [[Special:ResetTokens|можете га обновити]].",
"savedprefs": "Ваша подешавања су сачувана.",
- "savedrights": "Корисничке групе за {{GENDER:$1|$1}} су сачуване.",
+ "savedrights": "Корисничке групе {{GENDER:$1|корисника|кориснице}} $1 су сачуване.",
"timezonelegend": "Временска зона:",
"localtime": "Локално време:",
"timezoneuseserverdefault": "подразумеване вредности ($1)",
"prefs-custom-json": "Прилагођени JSON",
"prefs-custom-js": "прилагођени Јаваскрипт",
"prefs-common-config": "Дељени CSS/JSON/Јаваскрипт за све теме:",
- "prefs-reset-intro": "Ð\9cожеÑ\82е коÑ\80иÑ\81Ñ\82иÑ\82и овÑ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 да пониÑ\88Ñ\82иÑ\82е Ñ\81воÑ\98а подеÑ\88аваÑ\9aа на подÑ\80азÑ\83меване вÑ\80едноÑ\81Ñ\82и.\nÐ\9eва Ñ\80адÑ\9aа Ñ\81е не може вÑ\80аÑ\82ити.",
+ "prefs-reset-intro": "Ð\9cожеÑ\82е коÑ\80иÑ\81Ñ\82иÑ\82и овÑ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 да поново поÑ\81Ñ\82авиÑ\82е Ñ\81воÑ\98а подеÑ\88аваÑ\9aа на подÑ\80азÑ\83меване вÑ\80едноÑ\81Ñ\82и Ñ\81аÑ\98Ñ\82а.\nÐ\9eво Ñ\81е не може опозвати.",
"prefs-emailconfirm-label": "Потврда имејла:",
"youremail": "Имејл:",
"username": "{{GENDER:$1|Корисничко име}}:",
"yourvariant": "Варијанта језика:",
"prefs-help-variant": "Жељена варијанта или правопис за приказ страница са садржајем овог викија.",
"yournick": "Нови потпис:",
- "prefs-help-signature": "Ð\9aоменÑ\82аÑ\80и на Ñ\81Ñ\82Ñ\80аниÑ\86ама за Ñ\80азговоÑ\80 Ñ\82Ñ\80еба да бÑ\83дÑ\83 поÑ\82пиÑ\81ани Ñ\81а â\80\9e<nowiki>~~~~</nowiki>â\80\9c коÑ\98е Ñ\9bе биÑ\82и пÑ\80еÑ\82воÑ\80ено Ñ\83 Ð\92аÑ\88 поÑ\82пиÑ\81 Ñ\81 Ñ\82Ñ\80енÑ\83Ñ\82ним вÑ\80еменом.",
+ "prefs-help-signature": "Ð\9aоменÑ\82аÑ\80и на Ñ\81Ñ\82Ñ\80аниÑ\86ама за Ñ\80азговоÑ\80 Ñ\82Ñ\80еба да бÑ\83дÑ\83 поÑ\82пиÑ\81ани Ñ\81а â\80\9e<nowiki>~~~~</nowiki>â\80\9c коÑ\98е Ñ\9bе биÑ\82и пÑ\80еÑ\82воÑ\80ено Ñ\83 ваÑ\88 поÑ\82пиÑ\81 и вÑ\80еменÑ\81кÑ\83 ознакÑ\83.",
"badsig": "Потпис је неисправан.\nПроверите ознаке HTML.",
"badsiglength": "Ваш потпис је предугачак.\nНе сме бити дужи од $1 {{PLURAL:$1|знака|знака|знакова}}.",
"yourgender": "Како желите да се представите?",
"right-writeapi": "могућност писања API-ја",
"right-delete": "брисање страница",
"right-bigdelete": "брисање страница с великом историјом",
- "right-deletelogentry": "бÑ\80иÑ\81аÑ\9aе и вÑ\80аÑ\9bаÑ\9aе одÑ\80еÑ\92ениÑ\85 Ñ\81Ñ\82авки Ñ\83 дневникÑ\83",
+ "right-deletelogentry": "бÑ\80иÑ\81аÑ\9aе и вÑ\80аÑ\9bаÑ\9aе одÑ\80еÑ\92ениÑ\85 Ñ\83ноÑ\81а Ñ\83 евиденÑ\86иÑ\98и",
"right-deleterevision": "брисање и враћање одређених измена страница",
"right-deletedhistory": "прегледање обрисаних ставки историје без повезаног текста",
"right-deletedtext": "прегледање обрисаног текста и измена између обрисаних измена",
"right-sendemail": "слање имејла другим корисницима",
"right-managechangetags": "прављење и (де)активирање [[Special:Tags|ознака]]",
"right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије измене",
- "right-changetags": "додаваÑ\9aе и Ñ\83клаÑ\9aаÑ\9aе Ñ\80азниÑ\85 [[Special:Tags|ознака]] на поÑ\98единаÑ\87ним изменама и Ñ\83ноÑ\81има Ñ\83 дневниÑ\86има",
+ "right-changetags": "додаваÑ\9aе и Ñ\83клаÑ\9aаÑ\9aе Ñ\80азниÑ\85 [[Special:Tags|ознака]] на поÑ\98единаÑ\87ним изменама и Ñ\83ноÑ\81има Ñ\83 евиденÑ\86иÑ\98ама",
"right-deletechangetags": "брисање [[Special:Tags|ознака]] из базе података",
"grant-generic": "Скуп права „$1“",
"grant-group-page-interaction": "Уређивање страница",
"grant-blockusers": "Блокирање и одблокирање корисника",
"grant-createaccount": "Отварање налога",
"grant-createeditmovepage": "Прављење, уређивање и премештање страница",
- "grant-delete": "Ð\91Ñ\80иÑ\81аÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а, измена и Ñ\83ноÑ\81а Ñ\83 дневниÑ\86има",
+ "grant-delete": "Ð\91Ñ\80иÑ\81аÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а, измена и Ñ\83ноÑ\81а Ñ\83 евиденÑ\86иÑ\98ама",
"grant-editinterface": "Уређивање Медијавики именског простора и корисничких CSS/JSON/Јаваскрипт страница",
"grant-editmycssjs": "Уређивање вашег CSS/JSON/Јаваскрипта",
"grant-editmyoptions": "Уређивање Ваших подешавања",
"action-writeapi": "писање API-ја",
"action-delete": "брисање ове странице",
"action-deleterevision": "брисање измена",
- "action-deletelogentry": "бирсање уноса у дневницима",
+ "action-deletelogentry": "брисање уноса у евиденцијама",
"action-deletedhistory": "прегледање обрисане историје странице",
"action-deletedtext": "преглед обрисаног текста измене",
"action-browsearchive": "претраживање обрисаних страница",
"action-editcontentmodel": "мењање модела садржаја странице",
"action-managechangetags": "прављење и (де)активирање ознака",
"action-applychangetags": "додавање ознака на ваше измене",
- "action-changetags": "додаваÑ\9aе и Ñ\83клаÑ\9aаÑ\9aе Ñ\80азниÑ\85 ознака на поÑ\98единаÑ\87ним изменама и Ñ\83ноÑ\81има Ñ\83 дневниÑ\86има",
+ "action-changetags": "додаваÑ\9aе и Ñ\83клаÑ\9aаÑ\9aе Ñ\80азниÑ\85 ознака на поÑ\98единаÑ\87ним изменама и Ñ\83ноÑ\81има Ñ\83 евиденÑ\86иÑ\98ама",
"action-deletechangetags": "Обриши ознаке из базе података",
"action-purge": "чишћење привремене меморије ове странице",
"nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
"rcfilters-filter-newpages-description": "Измене којима се праве нове странице.",
"rcfilters-filter-categorization-label": "Измене категорија",
"rcfilters-filter-categorization-description": "Записи о страницама додатим или уклоњеним из категорија.",
- "rcfilters-filter-logactions-label": "Ð\97абележене радње",
+ "rcfilters-filter-logactions-label": "Ð\95виденÑ\82иÑ\80ане радње",
"rcfilters-filter-logactions-description": "Административне радње, прављење налога, брисање страница, отпремања…",
"rcfilters-hideminor-conflicts-typeofchange-global": "Филтер за „мање” измене је у сукобу са једним или више филтера типа измена, зато што одређени типови измена не могу да се означе као „мање”. Сукобљени филтери су означени у подручју Активни филтери, изнад.",
"rcfilters-hideminor-conflicts-typeofchange": "Одређени типови измена не могу да се означе као „мање”, тако да је овај филтер у сукобу са следећим филтерима типа измена: $1",
"rcfilters-filter-showlinkedto-option-label": "<strong>Странице ка којима воде везе са</strong> изабране странице",
"rcfilters-target-page-placeholder": "Унесите име странице (или категорије)",
"rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
- "rclistfromreset": "РеÑ\81еÑ\82Ñ\83Ñ\98 одабир датума",
+ "rclistfromreset": "Ð\9eбнови одабир датума",
"rclistfrom": "Прикажи нове измене почев од $2, $3",
"rcshowhideminor": "$1 мање измене",
"rcshowhideminor-show": "Прикажи",
"protectedpages-cascade": "Само преносиве заштите",
"protectedpages-noredirect": "Сакриј преусмерења",
"protectedpagesempty": "Нема заштићених страница с овим параметрима.",
- "protectedpages-timestamp": "Време и датум",
+ "protectedpages-timestamp": "Временска ознака",
"protectedpages-page": "Страница",
"protectedpages-expiry": "Истиче",
"protectedpages-performer": "Заштитио",
"logeventslist-patrol-log": "Евиденција патролирања",
"logeventslist-tag-log": "Евиденција ознака",
"all-logs-page": "Све јавне евиденције",
- "alllogstext": "СкÑ\83пни пÑ\80иказ Ñ\81виÑ\85 доÑ\81Ñ\82Ñ\83пниÑ\85 иÑ\81Ñ\82оÑ\80иÑ\98а овог викиÑ\98а.\nÐ\9cожеÑ\82е Ñ\81Ñ\83зиÑ\82и пÑ\80иказ одабиÑ\80Ñ\83Ñ\9bи вÑ\80Ñ\81Ñ\82Ñ\83 иÑ\81Ñ\82оÑ\80иÑ\98е, коÑ\80иÑ\81ниÑ\87ког имена или Ñ\82Ñ\80ажене Ñ\81Ñ\82Ñ\80аниÑ\86е.",
+ "alllogstext": "СкÑ\83пни пÑ\80иказ Ñ\81виÑ\85 доÑ\81Ñ\82Ñ\83пниÑ\85 евиденÑ\86иÑ\98а Ñ\81а овог викиÑ\98а.\nÐ\9cожеÑ\82е Ñ\81Ñ\83зиÑ\82и пÑ\80иказ изабиÑ\80аÑ\9aем Ñ\82ипа евиденÑ\86иÑ\98е, коÑ\80иÑ\81ниÑ\87ког имена (оÑ\81еÑ\82Ñ\99иво на мала и велика Ñ\81лова) или Ñ\82Ñ\80ажене Ñ\81Ñ\82Ñ\80аниÑ\86е (Ñ\82акоÑ\92е оÑ\81еÑ\82Ñ\99иво на мала и велика Ñ\81лова).",
"logempty": "Нема пронађених уноса у евиденцији.",
"log-title-wildcard": "Претражи наслове који почињу са овим текстом",
"showhideselectedlogentries": "Прикажи/сакриј изабране догађаје",
- "log-edit-tags": "УÑ\80еди ознаке изабÑ\80аниÑ\85 Ñ\83ноÑ\81а Ñ\83 дневниÑ\86има",
+ "log-edit-tags": "УÑ\80еди ознаке изабÑ\80аниÑ\85 Ñ\83ноÑ\81а Ñ\83 евиденÑ\86иÑ\98ама",
"checkbox-select": "Изабери: $1",
"checkbox-all": "Све",
"checkbox-none": "Ништа",
"actionfailed": "Радња није успела",
"deletedtext": "Страница „$1“ је обрисана.\nПогледајте ''$2'' за више детаља.",
"dellogpage": "Евиденција брисања",
- "dellogpagetext": "Испод је списак последњих брисања.",
+ "dellogpagetext": "Испод је списак скорашњих брисања.",
"deletionlog": "евиденција брисања",
"log-name-create": "Евиденција прављења страница",
"log-description-create": "Испод је списак скорашњих прављења страница.",
"namespace_association": "Повезани именски простор",
"tooltip-namespace_association": "Означите ову кутијицу да бисте укључили и разговор или именски простор теме која је повезана са изабраним именским простором",
"blanknamespace": "(главни)",
- "contributions": "{{GENDER:$1|Кориснички}} доприноси",
+ "contributions": "Доприноси {{GENDER:$1|корисника|кориснице}}",
"contributions-title": "Доприноси {{GENDER:$1|корисника|кориснице}} $1",
"mycontris": "Доприноси",
"anoncontribs": "Доприноси",
"sp-contributions-newbies-sub": "За нове кориснике",
"sp-contributions-newbies-title": "Доприноси нових корисника",
"sp-contributions-blocklog": "евиденција блокирања",
- "sp-contributions-suppresslog": "обрисани {{GENDER:$1|кориснички}} доприноси",
+ "sp-contributions-suppresslog": "обрисани доприноси {{GENDER:$1|корисника|кориснице}}",
"sp-contributions-deleted": "обрисани доприноси {{GENDER:$1|корисника|кориснице}}",
"sp-contributions-uploads": "отпремања",
"sp-contributions-logs": "евиденције",
"sp-contributions-talk": "разговор",
"sp-contributions-userrights": "управљање правима {{GENDER:$1|корисника|кориснице}}",
- "sp-contributions-blocked-notice": "Ð\9eваÑ\98 коÑ\80иÑ\81ник Ñ\98е Ñ\82Ñ\80енÑ\83Ñ\82но блокиÑ\80ан. \nÐ\98Ñ\81под Ñ\81Ñ\83 наведени поÑ\81ледÑ\9aи запиÑ\81и Ñ\83 дневникÑ\83 блокиÑ\80аÑ\9aа:",
- "sp-contributions-blocked-notice-anon": "Ова ИП адреса је тренутно блокирана.\nИспод су наведени последњи записи у дневнику блокирања:",
+ "sp-contributions-blocked-notice": "Ð\9eваÑ\98 коÑ\80иÑ\81ник Ñ\98е Ñ\82Ñ\80енÑ\83Ñ\82но блокиÑ\80ан. \nÐ\9fоÑ\81ледÑ\9aи Ñ\83ноÑ\81 Ñ\83 евиденÑ\86иÑ\98и блокиÑ\80аÑ\9aа Ñ\98е наведен иÑ\81под као Ñ\80еÑ\84еÑ\80енÑ\86а:",
+ "sp-contributions-blocked-notice-anon": "Ова IP адреса је тренутно блокирана.\nПоследњи унос у евиденцији блокирања је наведен испод као референца:",
"sp-contributions-search": "Претрага доприноса",
"sp-contributions-username": "ИП адреса или корисничко име:",
"sp-contributions-toponly": "Само најновије измене",
"blocklist-tempblocks": "Сакриј привремена блокирања",
"blocklist-addressblocks": "Сакриј појединачна блокирања ИП адресе",
"blocklist-rangeblocks": "Сакриј блокирања опсега",
- "blocklist-timestamp": "Време и датум",
+ "blocklist-timestamp": "Временска ознака",
"blocklist-target": "Корисник",
"blocklist-expiry": "Истиче",
"blocklist-by": "Блокирао",
"fix-double-redirects": "Ажурирајте сва преусмерења која воде до првобитног наслова",
"move-leave-redirect": "Остави преусмерење",
"protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nПоследњи унос у евиденцији је наведен испод као референца:",
- "semiprotectedpagemovewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је преместе.\nПоследњи запис у дневнику је приказан испод као референца:",
+ "semiprotectedpagemovewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је преместе.\nПоследњи унос у евиденцији је наведен испод као референца:",
"move-over-sharedrepo": "[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
"file-exists-sharedrepo": "Наведени назив датотеке се већ користи у дељеном складишту.\nИзаберите други назив.",
"export": "Извоз страница",
"filemissing": "Недостаје датотека",
"thumbnail_error": "Грешка при стварању минијатуре: $1",
"thumbnail_error_remote": "Порука о грешци из $1:\n$2",
- "djvu_page_error": "DjVu Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е недоÑ\81Ñ\82Ñ\83пна",
+ "djvu_page_error": "DjVu Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е ван опÑ\81ега",
"djvu_no_xml": "Не могу да преузмем XML за DjVu датотеку.",
"thumbnail-temp-create": "Не могу да направим привремену датотеку минијатуре",
"thumbnail-dest-create": "Не могу да сачувам минијатуру у одредишту",
"thumbnail_image-failure-limit": "Било је превише скорашњих неуспешних покушаја ($1 или више) рендеровања ове минијатуре. Покушајте поново касније.",
"import": "Увоз страница",
"importinterwiki": "Увоз са другог викија",
- "import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].",
+ "import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми измена и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су евидентиране у [[Special:Log/import|евиденцији увоза]].",
"import-interwiki-sourcewiki": "Изворна вики:",
"import-interwiki-sourcepage": "Изворна страница:",
"import-interwiki-history": "Копирај све верзије историје за ову страницу",
"spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
"spam_blanking": "Све измене садрже везе до $1. Чистим",
"spam_deleting": "Све измене садрже везе до $1. Бришем",
- "simpleantispam-label": "Анти-спам провера. \n<strong>Не</strong> попуњавај ово унутра!",
+ "simpleantispam-label": "Анти-спам провера. \n<strong>Не</strong> попуњавајте ово!",
"pageinfo-title": "Информације за „$1“",
"pageinfo-not-current": "Нажалост, немогуће је прибавити ове податке за старије измене.",
"pageinfo-header-basic": "Основне информације",
"svg-long-desc": "SVG датотека, номинално $1 × $2 пиксела, величина: $3",
"svg-long-desc-animated": "Анимирана SVG датотека, номинално: $1 × $2 пиксела, величина: $3",
"svg-long-error": "Неисправна SVG датотека: $1",
- "show-big-image": "Ð\98звоÑ\80на датотека",
+ "show-big-image": "Ð\9fÑ\80вобиÑ\82на датотека",
"show-big-image-preview": "Величина овог приказа: $1.",
"show-big-image-preview-differ": "Величина $3 прегледа за ову $2 датотеку је $1.",
"show-big-image-other": "$2 {{PLURAL:$2|друга резолуција|друге резолуције|других резолуција}}: $1.",
"exif-iimsupplementalcategory": "Допунске категорије",
"exif-datetimeexpires": "Не користи након",
"exif-datetimereleased": "Објављено",
- "exif-originaltransmissionref": "Ð\98звоÑ\80ни пÑ\80еноÑ\81 кода локаÑ\86иÑ\98е",
+ "exif-originaltransmissionref": "Ð\9fÑ\80вобиÑ\82ни код локаÑ\86иÑ\98е пÑ\80еноÑ\81а",
"exif-identifier": "Назнака",
"exif-lens": "Коришћени објектив",
"exif-serialnumber": "Серијски број камере",
"watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
"watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
- "watchlistedit-clear-title": "Ð\9fÑ\80ажÑ\9aење списка надгледања",
- "watchlistedit-clear-legend": "Ð\98Ñ\81пÑ\80азни Ñ\81пиÑ\81ак надгледања",
+ "watchlistedit-clear-title": "ЧиÑ\88Ñ\9bење списка надгледања",
+ "watchlistedit-clear-legend": "ЧиÑ\88Ñ\9bеÑ\9aе Ñ\81пиÑ\81ка надгледања",
"watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
"watchlistedit-clear-titles": "Наслови:",
- "watchlistedit-clear-submit": "Ð\98Ñ\81пÑ\80азни списак надгледања (Ово је неповратно!)",
+ "watchlistedit-clear-submit": "Ð\9eÑ\87иÑ\81Ñ\82и списак надгледања (Ово је неповратно!)",
"watchlistedit-clear-done": "Ваш списак надгледања је испражњен.",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:",
"watchlistedit-too-many": "Има превише страница за приказ овде.",
- "watchlisttools-clear": "иÑ\81пÑ\80азни списак надгледања",
+ "watchlisttools-clear": "оÑ\87иÑ\81Ñ\82и списак надгледања",
"watchlisttools-view": "прикажи сродне измене",
"watchlisttools-edit": "прикажи и уреди списак надгледања",
"watchlisttools-raw": "уреди сиров списак надгледања",
"version-libraries-description": "Опис",
"version-libraries-authors": "Аутори",
"redirect": "Преусмерење на датотеку, корисника, страницу, измену или евиденцију (ID)",
- "redirect-summary": "Ð\9eва поÑ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а пÑ\80еÑ\83Ñ\81меÑ\80ава до даÑ\82оÑ\82еке (Ñ\81 даÑ\82им именом даÑ\82оÑ\82еке), Ñ\81Ñ\82Ñ\80аниÑ\86е (Ñ\81 даÑ\82им ID-ом измене или ID-ом Ñ\81Ñ\82Ñ\80аниÑ\86е), коÑ\80иÑ\81ниÑ\87ке Ñ\81Ñ\82Ñ\80аниÑ\86е (Ñ\81 даÑ\82им нÑ\83меÑ\80иÑ\87ким коÑ\80иÑ\81ниÑ\87ким ID-ом), или Ñ\83ноÑ\81а Ñ\83 дневникÑ\83 (Ñ\81 даÑ\82им дневниÑ\87ким ID-ом). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
+ "redirect-summary": "Ð\9eва поÑ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а пÑ\80еÑ\83Ñ\81меÑ\80ава до даÑ\82оÑ\82еке (Ñ\81 даÑ\82им именом даÑ\82оÑ\82еке), Ñ\81Ñ\82Ñ\80аниÑ\86е (Ñ\81 даÑ\82им ID-ом измене или ID-ом Ñ\81Ñ\82Ñ\80аниÑ\86е), коÑ\80иÑ\81ниÑ\87ке Ñ\81Ñ\82Ñ\80аниÑ\86е (Ñ\81 даÑ\82им нÑ\83меÑ\80иÑ\87ким коÑ\80иÑ\81ниÑ\87ким ID-ом), или Ñ\83ноÑ\81а Ñ\83 евиденÑ\86иÑ\98и (Ñ\81 даÑ\82им ID-ом евиденÑ\86иÑ\98е). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
"redirect-submit": "Иди",
"redirect-lookup": "Тип вредности:",
"redirect-value": "Вредност:",
"tags-deactivate-reason": "Разлог:",
"tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
"tags-deactivate-submit": "Декативирај",
- "tags-update-no-permission": "Ð\9dемаÑ\82е дозволÑ\83 за додаваÑ\9aе или Ñ\83клаÑ\9aаÑ\9aе ознаке измена из заÑ\81ебниÑ\85 измена или Ñ\83ноÑ\81а Ñ\83 дневникÑ\83.",
+ "tags-update-no-permission": "Ð\9dемаÑ\82е дозволÑ\83 за додаваÑ\9aе или Ñ\83клаÑ\9aаÑ\9aе ознаке измена из поÑ\98единаÑ\87ниÑ\85 измена или Ñ\83ноÑ\81а Ñ\83 евиденÑ\86иÑ\98и.",
"tags-update-blocked": "Не можете додавати нити уклањати ознаке измена док {{GENDER:$1|сте}} блокирани.",
"tags-update-add-not-allowed-one": "Није дозвољено да се ознака „$1” додаје ручно.",
"tags-edit-title": "Уреди ознаке",
"restore-count-files": "{{PLURAL:$1|1 датотека|$1 датотеке|$1 датотека}}",
"logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|догађаја|$5 догађаја}} у евиденцији на страници „$3”: $4",
"logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=једне измене|$5 измене|$5 измена}} на страници $3: $4",
- "logentry-delete-event-legacy": "$1 Ñ\98е {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} видÑ\99ивоÑ\81Ñ\82 догаÑ\92аÑ\98а Ñ\83 дневникÑ\83 $3",
+ "logentry-delete-event-legacy": "$1 Ñ\98е {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} видÑ\99ивоÑ\81Ñ\82 догаÑ\92аÑ\98а Ñ\83 евиденÑ\86иÑ\98и на Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$3â\80\9d",
"logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
"logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
"logentry-suppress-event": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|догађаја|$5 догађаја}} у евиденцији на страници „$3”: $4",
"logentry-suppress-revision": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|измене|$5 измена}} на страници $3: $4",
- "logentry-suppress-event-legacy": "$1 Ñ\98е поÑ\82аÑ\98но {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} видÑ\99ивоÑ\81Ñ\82 догаÑ\92аÑ\98а Ñ\83 дневникÑ\83 $3",
+ "logentry-suppress-event-legacy": "$1 Ñ\98е поÑ\82аÑ\98но {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} видÑ\99ивоÑ\81Ñ\82 догаÑ\92аÑ\98а Ñ\83 евиденÑ\86иÑ\98и на Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$3â\80\9d",
"logentry-suppress-revision-legacy": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
"revdelete-content-hid": "садржај је сакривен",
"revdelete-summary-hid": "опис измене је сакривен",
"log-action-filter-delete-delete": "брисање странице",
"log-action-filter-delete-delete_redir": "преснимавање преусмерења",
"log-action-filter-delete-restore": "враћање странице",
- "log-action-filter-delete-event": "брисање уноса у дневницима",
+ "log-action-filter-delete-event": "брисање евиденције",
"log-action-filter-delete-revision": "брисање измене",
"log-action-filter-import-interwiki": "Међувики увоз",
"log-action-filter-import-upload": "Увоз постављањем XML-а",
"log-action-filter-protect-move_prot": "премештање заштите",
"log-action-filter-rights-rights": "ручно",
"log-action-filter-rights-autopromote": "аутоматски",
- "log-action-filter-suppress-event": "СкÑ\80иваÑ\9aе Ñ\83ноÑ\81а Ñ\83 дневникÑ\83",
+ "log-action-filter-suppress-event": "СкÑ\80иваÑ\9aе Ñ\83ноÑ\81а Ñ\83 евиденÑ\86иÑ\98и",
"log-action-filter-suppress-revision": "Скривање измене",
"log-action-filter-suppress-delete": "Скривање странице",
"log-action-filter-suppress-block": "Скривање корисника блокирањем",
"grant-createaccount": "開戶口",
"grant-createeditmovepage": "開版、改版同搬版",
"grant-delete": "刪版、修訂同日誌紀錄",
- "grant-editinterface": "改 MediaWiki 空間名同用戶 CSS/JSON/JavaScript",
+ "grant-editinterface": "改MediaWiki空間名同成個網站/用戶嘅JSON",
"grant-editmycssjs": "改你嘅用戶CSS/JSON/JavaScript",
"grant-editmyoptions": "改你嘅用戶設定",
"grant-editmywatchlist": "改你嘅監視清單",
$fallback = 'ur, pnb';
$rtl = true;
+
+$digitTransformTable = [
+ '0' => '۰', # ۰
+ '1' => '۱', # ۱
+ '2' => '۲', # ۲
+ '3' => '۳', # ۳
+ '4' => '۴', # ۴
+ '5' => '۵', # ۵
+ '6' => '۶', # ۶
+ '7' => '۷', # ۷
+ '8' => '۸', # ۸
+ '9' => '۹', # ۹
+ '%' => '٪', # ٪
+];
$dateFormats = [
'dmy time' => 'H:i',
'dmy date' => 'j xg Y',
- 'dmy both' => 'H:i، j xg Y',
+ 'dmy both' => 'H:i, j xg Y',
'persian time' => 'H:i',
'persian date' => 'xij xiF xiY',
- 'persian both' => 'H:i، xij xiF xiY',
+ 'persian both' => 'H:i, xij xiF xiY',
'ISO 8601 time' => 'xnH:xni:xns',
'ISO 8601 date' => 'xnY-xnm-xnd',
// This is the list of arguments that were actually passed
protected $mArgs = [];
+ // Allow arbitrary options to be passed, or only specified ones?
+ protected $mAllowUnregisteredOptions = false;
+
// Name of the script currently running
protected $mSelf;
*/
abstract public function execute();
+ /**
+ * Checks to see if a particular option in supported. Normally this means it
+ * has been registered by the script via addOption.
+ * @param string $name The name of the option
+ * @return bool true if the option exists, false otherwise
+ */
+ protected function supportsOption( $name ) {
+ return isset( $this->mParams[$name] );
+ }
+
/**
* Add a parameter to the script. Will be displayed on --help
* with the associated description
}
/**
- * Checks to see if a particular param exists.
- * @param string $name The name of the param
+ * Checks to see if a particular option exists.
+ * @param string $name The name of the option
* @return bool
*/
protected function hasOption( $name ) {
unset( $this->mParams[$name] );
}
+ /**
+ * Sets whether to allow unregistered options, which are options passed to
+ * a script that do not match an expected parameter.
+ * @param bool $allow Should we allow?
+ */
+ protected function setAllowUnregisteredOptions( $allow ) {
+ $this->mAllowUnregisteredOptions = $allow;
+ }
+
/**
* Set the description text.
* @param string $text The text of the description
$die = true;
}
}
+ if ( !$this->mAllowUnregisteredOptions ) {
+ # Check for unexpected options
+ foreach ( $this->mOptions as $opt => $val ) {
+ if ( !$this->supportsOption( $opt ) ) {
+ $this->error( "Unexpected option $opt!" );
+ $die = true;
+ }
+ }
+ }
if ( $die ) {
$this->maybeHelp( true );
require_once __DIR__ . '/Maintenance.php';
// phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-global $optionsWithArgs, $optionsWithoutArgs;
+global $optionsWithArgs, $optionsWithoutArgs, $allowUnregisteredOptions;
if ( !isset( $optionsWithArgs ) ) {
$optionsWithArgs = [];
if ( !isset( $optionsWithoutArgs ) ) {
$optionsWithoutArgs = [];
}
+if ( !isset( $allowUnregisteredOptions ) ) {
+ $allowUnregisteredOptions = false;
+}
class CommandLineInc extends Maintenance {
public function __construct() {
// phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
- global $optionsWithArgs, $optionsWithoutArgs;
+ global $optionsWithArgs, $optionsWithoutArgs, $allowUnregisteredOptions;
parent::__construct();
+
foreach ( $optionsWithArgs as $name ) {
$this->addOption( $name, '', false, true );
}
foreach ( $optionsWithoutArgs as $name ) {
$this->addOption( $name, '', false, false );
}
+
+ $this->setAllowUnregisteredOptions( $allowUnregisteredOptions );
}
/**
-/**\r
-Copyright (c) 2013, Specialisterne.\r
-http://specialisterne.com/dk/\r
-All rights reserved.\r
-Authors:\r
-Jacob Christian Munch-Andersen\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are met:\r
-\r
-1. Redistributions of source code must retain the above copyright notice, this\r
- list of conditions and the following disclaimer.\r
-2. Redistributions in binary form must reproduce the above copyright notice,\r
- this list of conditions and the following disclaimer in the documentation\r
- and/or other materials provided with the distribution.\r
-\r
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-**/\r
-// For information and latest version see: https://github.com/Jacob-Christian-Munch-Andersen/Easy-Deflate\r
-(function(){\r
-\r
-var zip={};\r
-function UTF8encode(str){\r
- var out=[];\r
- var a;\r
- var c,c2;\r
- for(a=0;a<str.length;a++){\r
- c=str.charCodeAt(a);\r
- if(c<128){\r
- out.push(c);\r
- }\r
- else if(c<2048){\r
- out.push((c >> 6)+192);\r
- out.push((c & 63)+128);\r
- }\r
- else if(c<65536){\r
- if(c>=0xD800 && c<0xDC00){\r
- a++;\r
- if(a>=str.length){\r
- return null;\r
- }\r
- c2=str.charCodeAt(a);\r
- if(c2>=0xDC00 && c2<0xE000){\r
- c=65536+(c-0xD800)*1024+c2-0xDC00;\r
- out.push((c >> 18)+240);\r
- out.push(((c >> 12) & 63)+128);\r
- out.push(((c >> 6) & 63)+128);\r
- out.push((c & 63)+128);\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- else if(c>=0xDC00 && c<0xE000){\r
- return null;\r
- }\r
- else{\r
- out.push((c >> 12)+224);\r
- out.push(((c >> 6) & 63)+128);\r
- out.push((c & 63)+128);\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- return new Uint8Array(out);\r
-}\r
-function UTF8decodeA(arrarr){\r
- var result="";\r
- var intermediate;\r
- var minvalue;\r
- var missing=0;\r
- var a,b;\r
- var arr;\r
- var c;\r
- var lower,upper;\r
- for(a=0;a<arrarr.length;a++){\r
- arr=arrarr[a];\r
- for(b=0;b<arr.length;b++){\r
- c=arr[b];\r
- if(missing){\r
- if(c>127 && c<192){\r
- intermediate=intermediate*64+c-128;\r
- missing--;\r
- if(!missing){\r
- if(intermediate>=minvalue){\r
- if(intermediate>=65536){\r
- if(intermediate>0x10FFFF){\r
- return null;\r
- }\r
- upper=(intermediate-65536)>>10;\r
- lower=intermediate%1024;\r
- result+=String.fromCharCode(upper+0xD800,lower+0xDC00);\r
- }\r
- else{\r
- result+=String.fromCharCode(intermediate);\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- else if(c<128){\r
- result+=String.fromCharCode(c);\r
- }\r
- else if(c>191 && c<248){\r
- if(c<224){\r
- intermediate=c-192;\r
- minvalue=128;\r
- missing=1;\r
- }\r
- else if(c<240){\r
- intermediate=c-224;\r
- minvalue=2048;\r
- missing=2;\r
- }\r
- else{\r
- intermediate=c-240;\r
- minvalue=65536;\r
- missing=3;\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- }\r
- if(missing){\r
- return null;\r
- }\r
- return result;\r
-}\r
-function deflate(str){\r
- var a,c;\r
- var readlen=50000;\r
- var resulta=[];\r
- var results="";\r
- var b,d;\r
- var zipper=new zip.Deflater(9);\r
- for(a=0;a<str.length;a+=readlen){\r
- d=UTF8encode(str.substr(a,readlen));\r
- if(d===null){ //This error may be due to a 4 byte charachter being split, retry with a string that is 1 longer to fix it.\r
- d=UTF8encode(str.substr(a,readlen+1));\r
- a+=1;\r
- if(d===null){\r
- return null;\r
- }\r
- }\r
- b=zipper.append(d);\r
- if(b.length!==0){\r
- resulta.push(b);\r
- }\r
- }\r
- b=zipper.flush();\r
- if(b.length!==0){\r
- resulta.push(b);\r
- }\r
- for(a=0;a<resulta.length;a++){\r
- for(c=0;c<resulta[a].length;c++){\r
- results+=String.fromCharCode(resulta[a][c]);\r
- }\r
- }\r
- return "rawdeflate,"+btoa(results);\r
-}\r
-function inflate(dfl){\r
- var unzipper=new zip.Inflater();\r
- var resulta=[];\r
- var dfls;\r
- var a,c;\r
- var b,d;\r
- if(dfl.slice(0,11)!="rawdeflate,"){\r
- return null;\r
- }\r
- try{\r
- dfls=atob(dfl.slice(11));\r
- }\r
- catch(e){\r
- return null;\r
- }\r
- try{\r
- for(a=0;a<dfls.length;a+=50000){\r
- b=new Uint8Array(Math.min(50000,dfls.length-a));\r
- for(c=0;c<b.length;c++){\r
- b[c]=dfls.charCodeAt(c+a);\r
- }\r
- d=unzipper.append(b);\r
- if(d.length){\r
- resulta.push(d);\r
- }\r
- }\r
- return UTF8decodeA(resulta);\r
- }\r
- catch(e){\r
- return null;\r
- }\r
-}\r
-\r
-window.EasyDeflate = {\r
- 'zip': zip,\r
- 'inflate': inflate,\r
- 'deflate': deflate\r
-};\r
-\r
-})();
\ No newline at end of file
+/**
+Copyright (c) 2013, Specialisterne.
+http://specialisterne.com/dk/
+All rights reserved.
+Authors:
+Jacob Christian Munch-Andersen
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+// For information and latest version see: https://github.com/Jacob-Christian-Munch-Andersen/Easy-Deflate
+(function(){
+
+var zip={};
+function UTF8encode(str){
+ var out=[];
+ var a;
+ var c,c2;
+ for(a=0;a<str.length;a++){
+ c=str.charCodeAt(a);
+ if(c<128){
+ out.push(c);
+ }
+ else if(c<2048){
+ out.push((c >> 6)+192);
+ out.push((c & 63)+128);
+ }
+ else if(c<65536){
+ if(c>=0xD800 && c<0xDC00){
+ a++;
+ if(a>=str.length){
+ return null;
+ }
+ c2=str.charCodeAt(a);
+ if(c2>=0xDC00 && c2<0xE000){
+ c=65536+(c-0xD800)*1024+c2-0xDC00;
+ out.push((c >> 18)+240);
+ out.push(((c >> 12) & 63)+128);
+ out.push(((c >> 6) & 63)+128);
+ out.push((c & 63)+128);
+ }
+ else{
+ return null;
+ }
+ }
+ else if(c>=0xDC00 && c<0xE000){
+ return null;
+ }
+ else{
+ out.push((c >> 12)+224);
+ out.push(((c >> 6) & 63)+128);
+ out.push((c & 63)+128);
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ return new Uint8Array(out);
+}
+function UTF8decodeA(arrarr){
+ var result="";
+ var intermediate;
+ var minvalue;
+ var missing=0;
+ var a,b;
+ var arr;
+ var c;
+ var lower,upper;
+ for(a=0;a<arrarr.length;a++){
+ arr=arrarr[a];
+ for(b=0;b<arr.length;b++){
+ c=arr[b];
+ if(missing){
+ if(c>127 && c<192){
+ intermediate=intermediate*64+c-128;
+ missing--;
+ if(!missing){
+ if(intermediate>=minvalue){
+ if(intermediate>=65536){
+ if(intermediate>0x10FFFF){
+ return null;
+ }
+ upper=(intermediate-65536)>>10;
+ lower=intermediate%1024;
+ result+=String.fromCharCode(upper+0xD800,lower+0xDC00);
+ }
+ else{
+ result+=String.fromCharCode(intermediate);
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ else if(c<128){
+ result+=String.fromCharCode(c);
+ }
+ else if(c>191 && c<248){
+ if(c<224){
+ intermediate=c-192;
+ minvalue=128;
+ missing=1;
+ }
+ else if(c<240){
+ intermediate=c-224;
+ minvalue=2048;
+ missing=2;
+ }
+ else{
+ intermediate=c-240;
+ minvalue=65536;
+ missing=3;
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ }
+ if(missing){
+ return null;
+ }
+ return result;
+}
+function deflate(str){
+ var a,c;
+ var readlen=50000;
+ var resulta=[];
+ var results="";
+ var b,d;
+ var zipper=new zip.Deflater(9);
+ for(a=0;a<str.length;a+=readlen){
+ d=UTF8encode(str.substr(a,readlen));
+ if(d===null){ //This error may be due to a 4 byte charachter being split, retry with a string that is 1 longer to fix it.
+ d=UTF8encode(str.substr(a,readlen+1));
+ a+=1;
+ if(d===null){
+ return null;
+ }
+ }
+ b=zipper.append(d);
+ if(b.length!==0){
+ resulta.push(b);
+ }
+ }
+ b=zipper.flush();
+ if(b.length!==0){
+ resulta.push(b);
+ }
+ for(a=0;a<resulta.length;a++){
+ for(c=0;c<resulta[a].length;c++){
+ results+=String.fromCharCode(resulta[a][c]);
+ }
+ }
+ return "rawdeflate,"+btoa(results);
+}
+function inflate(dfl){
+ var unzipper=new zip.Inflater();
+ var resulta=[];
+ var dfls;
+ var a,c;
+ var b,d;
+ if(dfl.slice(0,11)!="rawdeflate,"){
+ return null;
+ }
+ try{
+ dfls=atob(dfl.slice(11));
+ }
+ catch(e){
+ return null;
+ }
+ try{
+ for(a=0;a<dfls.length;a+=50000){
+ b=new Uint8Array(Math.min(50000,dfls.length-a));
+ for(c=0;c<b.length;c++){
+ b[c]=dfls.charCodeAt(c+a);
+ }
+ d=unzipper.append(b);
+ if(d.length){
+ resulta.push(d);
+ }
+ }
+ return UTF8decodeA(resulta);
+ }
+ catch(e){
+ return null;
+ }
+}
+
+window.EasyDeflate = {
+ 'zip': zip,
+ 'inflate': inflate,
+ 'deflate': deflate
+};
+
+})();
'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq', 'android'
],
- // Tanslations for conforming browser names
+ // Translations for conforming browser names
nameTranslations = [],
// Names of known layout engines
layouts = ['gecko', 'konqueror', 'msie', 'trident', 'edge', 'opera', 'webkit'],
* @return {string}
*/
text = function ( s ) {
- if ( s !== null && s !== undefined ) {
- return s.replace( /_/g, ' ' );
- } else {
- return '';
- }
+ return s.replace( /_/g, ' ' );
},
/**
*/
function domEval( code ) {
var script = document.createElement( 'script' );
+ if ( mw.config.get( 'wgCSPNonce' ) !== false ) {
+ script.nonce = mw.config.get( 'wgCSPNonce' );
+ }
script.text = code;
document.head.appendChild( script );
script.parentNode.removeChild( script );
*
* - Beware: This file MUST parse without errors on even the most ancient of browsers!
*/
-
+/* eslint-disable vars-on-top, no-unmodified-loop-condition */
/* global mw, isCompatible, $VARS, $CODE */
/**
);
};
-// Conditional script injection
( function () {
var NORLQ, script;
+ // Handle Grade C
if ( !isCompatible() ) {
- // Undo class swapping in case of an unsupported browser.
- // See ResourceLoaderClientHtml::getDocumentAttributes().
+ // Undo speculative Grade A <html> class. See ResourceLoaderClientHtml::getDocumentAttributes().
document.documentElement.className = document.documentElement.className
.replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
- NORLQ = window.NORLQ || [];
- while ( NORLQ.length ) {
+ // Process any callbacks for Grade C
+ NORLQ = window.NORLQ;
+ while ( NORLQ && NORLQ[ 0 ] ) {
NORLQ.shift()();
}
window.NORLQ = {
}
};
- // Clear and disable the other queue
+ // Clear and disable the Grade A queue
window.RLQ = {
- // No-op
push: function () {}
};
mw.config.set( $VARS.configuration );
- // Must be after mw.config.set because these callbacks may use mw.loader which
- // needs to have values 'skin', 'debug' etc. from mw.config.
- // eslint-disable-next-line vars-on-top
- var RLQ = window.RLQ || [];
- while ( RLQ.length ) {
- RLQ.shift()();
- }
+ // Process callbacks for Grade A
+ // Must be after registrations and mw.config.set, which mw.loader depends on.
+ var queue = window.RLQ;
window.RLQ = {
push: function ( fn ) {
- fn();
+ if ( typeof fn === 'function' ) {
+ fn();
+ } else {
+ // This callback has a requirement.
+ mw.loader.using( fn[ 0 ], fn[ 1 ] );
+ }
}
};
+ while ( queue && queue[ 0 ] ) {
+ // Re-use our push()
+ window.RLQ.push( queue.shift() );
+ }
- // Clear and disable the other queue
+ // Clear and disable the Grade C queue
window.NORLQ = {
- // No-op
push: function () {}
};
}
public function testMakeCSPDirectives(
$policy,
$expectedFull,
- $expectedReport,
- $expectedRestricted
+ $expectedReport
) {
$actualFull = $this->csp->makeCSPDirectives( $policy, ContentSecurityPolicy::FULL_MODE );
$actualReport = $this->csp->makeCSPDirectives(
$policy, ContentSecurityPolicy::REPORT_ONLY_MODE
);
- $actualRestricted = $this->csp->makeCSPDirectives(
- $policy, ContentSecurityPolicy::FULL_MODE_RESTRICTED
- );
$policyJson = formatJson::encode( $policy );
$this->assertEquals( $expectedFull, $actualFull, "full: " . $policyJson );
$this->assertEquals( $expectedReport, $actualReport, "report: " . $policyJson );
- $this->assertEquals( $expectedRestricted, $actualRestricted, "restricted: " . $policyJson );
}
public function providerMakeCSPDirectives() {
// @codingStandardsIgnoreStart Generic.Files.LineLength
return [
- [ false, '', '', '' ],
+ [ false, '', '' ],
[
[ 'useNonces' => false ],
"script-src 'unsafe-eval' 'self' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
true,
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'script-src' => [ 'http://example.com', 'http://something,else.com' ] ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' http://example.com http://something%2Celse.com sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'unsafeFallback' => false ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'unsafeFallback' => true ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'default-src' => false ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'default-src' => true ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'",
],
[
[ 'default-src' => [ 'https://foo.com', 'http://bar.com', 'baz.de' ] ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'",
],
[
[ 'includeCORS' => false ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'includeCORS' => false, 'default-src' => true ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'",
],
[
[ 'includeCORS' => true ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'report-uri' => false ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'report-uri' => true ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
[
[ 'report-uri' => 'https://example.com/index.php?foo;report=csp' ],
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri https://example.com/index.php?foo%3Breport=csp",
"script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri https://example.com/index.php?foo%3Breport=csp",
- "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
],
];
}
}
/**
- * @override MediaWikiTestCase::getSchemaOverrides
* @return array[]
*/
protected function getSchemaOverrides( IMaintainableDatabase $db ) {
}
/**
- * @override MediaWikiTestCase::getSchemaOverrides
* @return array[]
*/
protected function getSchemaOverrides( IMaintainableDatabase $db ) {
}
/**
- * @override MediaWikiTestCase::getSchemaOverrides
* @return array[]
*/
protected function getSchemaOverrides( IMaintainableDatabase $db ) {
*/
/**
- * @uses XhprofData
- * @uses AutoLoader
* @copyright © 2014 Wikimedia Foundation and contributors
* @since 1.25
*/
/**
* @covers XhprofData::getCallers
* @covers XhprofData::getCallees
- * @uses XhprofData
*/
public function testEdges() {
$xhprofData = $this->getXhprofDataFixture();
/**
* @covers XhprofData::getCriticalPath
- * @uses XhprofData
*/
public function testCriticalPath() {
$xhprofData = $this->getXhprofDataFixture();
* parameter (a password) should match.
* @return array
* @throws MWException
- * @abstract
*/
public static function providePasswordTests() {
throw new MWException( "Not implemented" );
'<i><blockquote>x</i></blockquote>',
'<i></i><blockquote><p><i>x</i></p></blockquote>',
],
+ [
+ 'p-wrap ended by reparenting (T200827)',
+ '<i><blockquote><p></i>',
+ '<i></i><blockquote><p><i></i></p><p><i></i></p></blockquote>',
+ ],
];
public function provider() {
public function __construct() {
parent::__construct();
+ $this->setAllowUnregisteredOptions( true );
$this->addOption(
'with-phpunitclass',
'Class name of the PHPUnit entry point to use',
);
} );
+ QUnit.test( 'RLQ.push', function ( assert ) {
+ /* global RLQ */
+ var loaded = 0,
+ done = assert.async();
+ mw.loader.testCallback = function () {
+ loaded++;
+ delete mw.loader.testCallback;
+ };
+ mw.loader.implement( 'test.rlq-push', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/mwLoaderTestCallback.js' ) ] );
+
+ RLQ.push( [ 'test.rlq-push', function () {
+ assert.strictEqual( loaded, 1, 'Load the required module' );
+ done();
+ } ] );
+ } );
+
}( mediaWiki ) );