warmup: true
runs: 5
scenarios:
- Load a page:
+ Read a page:
# The only page that exists by default is the main page.
# But its actual name is configurable/unknown (T216791).
# Omit 'title' to let MediaWiki show the default (which is the main page),
probes:
- screenshot
- trace
+ View history of a page:
+ url: "{MW_SERVER}{MW_SCRIPT_PATH}/index.php?action=history"
+ viewport:
+ width: 1100
+ height: 700
+ reports:
+ - navtiming
+ - paint
+ - transfer
+ probes:
+ - screenshot
+ - trace
View recent changes:
url: "{MW_SERVER}{MW_SCRIPT_PATH}/index.php?title=Special:RecentChanges"
viewport:
// approximate error count: 127
"PhanParamTooMany",
// approximate error count: 2
- "PhanPluginDuplicateExpressionBinaryOp",
- // approximate error count: 2
"PhanTraitParentReference",
// approximate error count: 30
"PhanTypeArraySuspicious",
"PhanTypeArraySuspiciousNullable",
// approximate error count: 26
"PhanTypeComparisonFromArray",
- // approximate error count: 2
- "PhanTypeComparisonToArray",
- // approximate error count: 7
- "PhanTypeExpectedObjectPropAccess",
// approximate error count: 63
"PhanTypeInvalidDimOffset",
- // approximate error count: 6
- "PhanTypeInvalidExpressionArrayDestructuring",
// approximate error count: 7
"PhanTypeInvalidLeftOperandOfIntegerOp",
// approximate error count: 2
- "PhanTypeInvalidRightOperand",
- // approximate error count: 2
"PhanTypeInvalidRightOperandOfIntegerOp",
// approximate error count: 154
"PhanTypeMismatchArgument",
// approximate error count: 27
"PhanTypeMismatchArgumentInternal",
- // approximate error count: 1
- "PhanTypeMismatchBitwiseBinaryOperands",
// approximate error count: 2
"PhanTypeMismatchDimEmpty",
// approximate error count: 27
argon2 to be used, by default, it will automatically choose the best available
algorithm depending on which version of PHP you have available. To use this,
you can set `$wgPasswordDefault = 'argon2';`.
+* $wgActorTableSchemaMigrationStage now defaults to reading the new schema.
+ update.php will back-populate the new database fields due to the changed
+ setting, which may take some time on large wikis. You can avoid downtime by
+ following a process like that described in T188327.
==== Removed configuration ====
* $wgTagStatisticsNewTable (T199334) — This temporary setting, added in
insertions into links tables.
* Category::newFromID( $id )->getID() will now return $id without any
validation, to avoid a mostly unnecessary DB query.
+* On Special:Version, the name for an extension can no longer be arbitrary
+ html when no link is specified.
== Compatibility ==
MediaWiki 1.33 requires PHP 7.0.13 or later. Although HHVM 3.18.5 or later is
notifications.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
-$query: query options passed to Title::getCanonicalURL()
+$query: query options as string passed to Title::getCanonicalURL()
'GetContentModels': Add content models to the list of available models.
&$models: array containing current model list, as strings. Extensions should add to this list.
'GetFullURL': Modify fully-qualified URLs used in redirects/export/offsite data.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
-$query: query options passed to Title::getFullURL()
+$query: query options as string passed to Title::getFullURL()
'GetHumanTimestamp': Pre-emptively override the human-readable timestamp
generated by MWTimestamp::getHumanTimestamp(). Return false in this hook to use
'GetInternalURL': Modify fully-qualified URLs used for squid cache purging.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
-$query: query options passed to Title::getInternalURL()
+$query: query options as string passed to Title::getInternalURL()
'GetIP': modify the ip of the current user (called only once).
&$ip: string holding the ip as determined so far
hack that Title::getLocalURL uses in your own extension.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
-$query: query options passed to Title::getLocalURL()
+$query: query options as string passed to Title::getLocalURL()
'GetLocalURL::Article': Modify local URLs specifically pointing to article paths
without any fancy queries or variants.
'GetLocalURL::Internal': Modify local URLs to internal pages.
&$title: Title object of page
&$url: string value as output (out parameter, can modify)
-$query: query options passed to Title::getLocalURL()
+$query: query options as string passed to Title::getLocalURL()
'GetLogTypesOnUser': Add log types where the target is a userpage
&$types: Array of log types
* - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
* - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
* All tables, fields, and joins are aliased, so `+` is safe to use.
+ * @phan-return array{tables:string[],fields:string[],joins:array}
*/
public function getJoin( $key = null ) {
$key = $this->getKey( $key );
* @since 1.32 changed allowed flags
* @var int An appropriate combination of SCHEMA_COMPAT_XXX flags.
*/
-$wgActorTableSchemaMigrationStage = SCHEMA_COMPAT_OLD;
+$wgActorTableSchemaMigrationStage = SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW;
/**
* Flag to enable Partial Blocks. This allows an admin to prevent a user from editing specific pages
* @param string|string[] ...$args strings to escape and glue together,
* or a single array of strings parameter
* @return string
- * @deprecated since 1.30 use MediaWiki\Shell::escape()
+ * @deprecated since 1.30 use MediaWiki\Shell\Shell::escape()
*/
function wfEscapeShellArg( ...$args ) {
return Shell::escape( ...$args );
* @deprecated since 1.32, use MagicWordFactory::get
*/
public static function get( $id ) {
+ wfDeprecated( __METHOD__, '1.32' );
return MediaWikiServices::getInstance()->getMagicWordFactory()->get( $id );
}
* @deprecated since 1.32, use MagicWordFactory::getVariableIDs
*/
public static function getVariableIDs() {
+ wfDeprecated( __METHOD__, '1.32' );
return MediaWikiServices::getInstance()->getMagicWordFactory()->getVariableIDs();
}
* @deprecated since 1.32, use MagicWordFactory::getSubstIDs
*/
public static function getSubstIDs() {
+ wfDeprecated( __METHOD__, '1.32' );
return MediaWikiServices::getInstance()->getMagicWordFactory()->getSubstIDs();
}
* @deprecated since 1.32, use MagicWordFactory::getCacheTTL
*/
public static function getCacheTTL( $id ) {
+ wfDeprecated( __METHOD__, '1.32' );
return MediaWikiServices::getInstance()->getMagicWordFactory()->getCacheTTL( $id );
}
* @deprecated since 1.32, use MagicWordFactory::getDoubleUnderscoreArray
*/
public static function getDoubleUnderscoreArray() {
+ wfDeprecated( __METHOD__, '1.32' );
return MediaWikiServices::getInstance()->getMagicWordFactory()->getDoubleUnderscoreArray();
}
// Use an IE conditional comment to serve the script only to old IE
$pieces[] = '<!--[if lt IE 9]>' .
ResourceLoaderClientHtml::makeLoad(
- ResourceLoaderContext::newDummyContext(),
+ new ResourceLoaderContext(
+ $this->getResourceLoader(),
+ new FauxRequest( [] )
+ ),
[ 'html5shiv' ],
ResourceLoaderModule::TYPE_SCRIPTS,
[ 'sync' => true ],
$services->getContentLanguage(),
wfUrlProtocols(),
$services->getSpecialPageFactory(),
- $services->getMainConfig()
+ $services->getMainConfig(),
+ $services->getLinkRendererFactory()
);
},
},
'ResourceLoader' => function ( MediaWikiServices $services ) : ResourceLoader {
+ global $IP;
$config = $services->getMainConfig();
$rl = new ResourceLoader(
LoggerFactory::getInstance( 'resourceloader' )
);
$rl->addSource( $config->get( 'ResourceLoaderSources' ) );
+ $rl->register( include "$IP/resources/Resources.php" );
return $rl;
},
* protocol-relative, the URL will be expanded to http://
*
* @see self::getLocalURL for the arguments.
- * @param string $query
- * @param string|bool $query2
+ * @param string|string[] $query
+ * @param string|bool $query2 Deprecated
* @return string The URL
*/
public function getInternalURL( $query = '', $query2 = false ) {
* NOTE: Unlike getInternalURL(), the canonical URL includes the fragment
*
* @see self::getLocalURL for the arguments.
- * @param string $query
- * @param string|bool $query2
+ * @param string|string[] $query
+ * @param string|bool $query2 Deprecated
* @return string The URL
* @since 1.18
*/
$id = $this->getArticleID();
if ( $id ) {
$fname = __METHOD__;
- $loadRestrictionsFromDb = function ( Database $dbr ) use ( $fname, $id ) {
+ $loadRestrictionsFromDb = function ( IDatabase $dbr ) use ( $fname, $id ) {
return iterator_to_array(
$dbr->select(
'page_restrictions',
$htmlForm
->setMethod( 'get' )
->setAction( wfScript() )
+ ->setCollapsible( true )
->setId( 'mw-history-searchform' )
->setSubmitText( $this->msg( 'historyaction-submit' )->text() )
->setWrapperAttributes( [ 'id' => 'mw-history-search' ] )
"apihelp-query+userinfo-paramvalue-prop-registrationdate": "Adiciona a data de registro do usuário.",
"apihelp-query+userinfo-paramvalue-prop-unreadcount": "Adiciona a contagem de páginas não lidas na lista de páginas vigiadas do usuário (máximo $1; retorna <samp>$2</samp> se mais).",
"apihelp-query+userinfo-paramvalue-prop-centralids": "Adiciona os IDs centrais e o status do anexo do usuário.",
+ "apihelp-query+userinfo-paramvalue-prop-latestcontrib": "Adiciona a data da última contribuição do usuário.",
"apihelp-query+userinfo-param-attachedwiki": "Com <kbd>$1prop=centralids</kbd>, indique se o usuário está conectado com a wiki identificada por este ID.",
"apihelp-query+userinfo-example-simple": "Ober informações sobre o usuário atual.",
"apihelp-query+userinfo-example-data": "Obter informações adicionais sobre o usuário atual.",
"apihelp-query+usercontribs-summary": "Hämta alla redigeringar av en användare.",
"apihelp-query+userinfo-summary": "Få information om den aktuella användaren.",
"apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Hämta en nyckel för att ändra aktuell användares inställningar.",
+ "apihelp-query+userinfo-paramvalue-prop-latestcontrib": "Lägg till datumet för användarens senaste bidrag.",
"apihelp-query+userinfo-example-simple": "Få information om den aktuella användaren.",
"apihelp-query+userinfo-example-data": "Få ytterligare information om den aktuella användaren.",
"apihelp-query+users-summary": "Hämta information om en lista över användare.",
"apihelp-main-param-action": "要執行的動作。",
"apihelp-main-param-format": "輸出的格式。",
"apihelp-main-param-maxlag": "最大延遲可在當 MediaWiki 安裝於資料庫複寫叢集時使用。為了保存引起更多站台複寫延遲的操作,此參數可讓客戶端等待至複寫延遲小於指定值為止。在過渡延遲的情況下,錯誤碼 <samp>maxlag</samp> 會帶有著像是 <samp>Waiting for $host: $lag seconds lagged</samp> 的訊息內容回傳。<br />請查看[[mw:Special:MyLanguage/Manual:Maxlag_parameter|手冊:Maxlag 參數]]來獲取更多資訊。",
- "apihelp-main-param-smaxage": "將HTTP緩存控制頭欄位設為<code>s-maxage</code>秒。錯誤不會做緩存。",
- "apihelp-main-param-maxage": "將HTTP緩存控制頭欄位設為<code>max-age</code>秒。錯誤不會做緩存。",
+ "apihelp-main-param-smaxage": "將HTTP暫存控制頭欄位設為<code>s-maxage</code>秒。錯誤不會做暫存。",
+ "apihelp-main-param-maxage": "將HTTP暫存控制頭欄位設為<code>max-age</code>秒。錯誤不會做暫存。",
"apihelp-main-param-assert": "若設為<kbd>user</kbd>,會確認使用者是否已登入;若設為<kbd>bot</kbd>,會確認是否擁有機械人權限。",
"apihelp-main-param-assertuser": "確認目前使用者就是指定的使用者。",
"apihelp-main-param-requestid": "在此處提供的任何值都將包括在響應之中。可用於區分請求。",
"apihelp-format-example-generic": "以 $1 格式傳回查詢結果。",
"apihelp-format-param-wrappedhtml": "回傳作為 JSON 物件的美觀列印 HTML 內容以及關聯 ResourceLoader 模組。",
"apihelp-json-summary": "使用 JSON 格式輸出資料。",
- "apihelp-json-param-callback": "若有指定,將輸出包在指定的函式調用。出於安全考量,會限制所有使用者特定資料。",
+ "apihelp-json-param-callback": "若有指定,將輸出包在指定的函式呼叫。出於安全考量,會限制所有使用者特定資料。",
"apihelp-json-param-utf8": "若有指定的話,將多數(並非全部)非 ASCII 字元編碼成 UTF-8,而不是以十六進位轉義序列來取代掉。預設是當 <var>formatversion</var> 不是 <kbd>1</kbd> 時。",
- "apihelp-json-param-ascii": "è\8b¥æ\9c\89æ\8c\87å®\9aï¼\8c編碼æ\89\80æ\9c\89使ç\94¨å\8d\81å\85é\80²ä½\8dè½\89義序列的非 ASCII。預設當 <var>formatversion</var> 為 <kbd>1</kbd> 時。",
- "apihelp-json-param-formatversion": "輸出格式:\n;1:向下兼容格式(XML 風格布林,用於內容節點的 <samp>*</samp> 鍵、其它)。\n;2:現代格式。\n;latest:使用最新格式(目前為 <kbd>2</kbd>)可能會不帶警告作更改。",
+ "apihelp-json-param-ascii": "è\8b¥æ\9c\89æ\8c\87å®\9aï¼\8c編碼æ\89\80æ\9c\89使ç\94¨å\8d\81å\85é\80²ä½\8dè·³è\84«序列的非 ASCII。預設當 <var>formatversion</var> 為 <kbd>1</kbd> 時。",
+ "apihelp-json-param-formatversion": "輸出格式:\n;1:向下相容格式(XML 式布林值,用於內容節點的 <samp>*</samp> 鍵、其它)。\n;2:現代格式。\n;latest:使用最新格式(目前為 <kbd>2</kbd>)可能會不帶警告作更改。",
"apihelp-jsonfm-summary": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
"apihelp-none-summary": "不輸出。",
"apihelp-php-summary": "使用序列化 PHP 格式輸出資料。",
"api-help-examples": "{{PLURAL:$1|範例}}:",
"api-help-permissions": "{{PLURAL:$1|權限}}:",
"api-help-permissions-granted-to": "{{PLURAL:$1|已授權給}}: $2",
- "api-help-right-apihighlimits": "在 API 查詢使用較高的限制(慢查詢:$1;快查詢:$2)。慢查詢的限制也適用於多值參數。",
+ "api-help-right-apihighlimits": "在 API 查詢使用較高的限制(慢速查詢:$1;快速查詢:$2)。慢速查詢的限制也適用於多值參數。",
"api-help-open-in-apisandbox": "<small>[在沙盒中開啟]</small>",
- "api-help-authmanager-general-usage": "使用此模組的一般程式是:\n# 通過 <kbd>amirequestsfor=$4</kbd> 取得來自 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> 的可用欄位,和來自 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> 的<kbd>$5</kbd>權杖。\n# 向用戶顯示欄位,並獲得其提交的內容。\n# 提交(POST)至此模組,提供 <var>$1returnurl</var> 及任何相關欄位。\n# 在回應中檢查 <samp>status</samp>。\n#* 如果您收到了 <samp>PASS</samp>(成功)或<samp>FAIL</samp>(失敗),則認為操作結束。成功與否如上句所示。\n#* 如果您收到了 <samp>UI</samp>,向用戶顯示新欄位,並再次獲取其提交的內容。然後再次使用 <var>$1continue</var>,向本模組提交相關欄位,並重復第四步。\n#* 如果您收到了 <samp>REDIRECT</samp>,將使用者指向<samp>redirecttarget</samp> 中的目標,等待其返回<var>$1returnurl</var>。然後再次使用 <var>$1continue</var>,向本模組提交返回 URL 中提供的一切欄位,並重復第四步。\n#* 如果您收到了 <samp>RESTART</samp>,這意味著身份驗證正常運作,但我們沒有連結的使用者帳戶。您可以將此視為 <samp>UI</samp>或<samp>FAIL</samp>。",
+ "api-help-authmanager-general-usage": "使用此模組的一般步驟是:\n# 透過 <kbd>amirequestsfor=$4</kbd> 取得來自 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> 的可用欄位,和來自 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> 的<kbd>$5</kbd>權杖。\n# 向使用者顯示欄位,並獲得其提交的內容。\n# 提交(POST)至此模組,提供 <var>$1returnurl</var> 及任何相關欄位。\n# 在回應中檢查 <samp>status</samp>。\n#* 如果您收到了 <samp>PASS</samp>(成功)或<samp>FAIL</samp>(失敗),則認為操作結束。成功與否如上句所示。\n#* 如果您收到了 <samp>UI</samp>,向使用者顯示新欄位,並再次獲取其提交的內容。然後再次使用 <var>$1continue</var>,向本模組提交相關欄位,並重復第四步。\n#* 如果您收到了 <samp>REDIRECT</samp>,將使用者指向<samp>redirecttarget</samp> 中的目標,等待其返回<var>$1returnurl</var>。然後再次使用 <var>$1continue</var>,向本模組提交返回 URL 中提供的一切欄位,並重復第四步。\n#* 如果您收到了 <samp>RESTART</samp>,表示身份驗證正常運作,但我們沒有連結的使用者帳戶。您可以將此視為 <samp>UI</samp>或<samp>FAIL</samp>。",
"api-help-authmanagerhelper-requests": "只使用這些身份驗證請求,透過自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>回傳的<samp>id</samp>與<kbd>amirequestsfor=$1</kbd>,或來自此模組之前的回應。",
"api-help-authmanagerhelper-request": "使用此身份驗證請求,透過自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>回傳的<samp>id</samp>與<kbd>amirequestsfor=$1</kbd>。",
"api-help-authmanagerhelper-messageformat": "用於回傳訊息的格式。",
* the name of the class defining the property, <component> is the MediaWiki component
* (extension, skin etc.) for use in the deprecation warning) or null if it is MediaWiki.
* E.g. [ 'mNewRev' => [ '1.32', 'DifferenceEngine', null ]
- * @var string[]
+ * @var string[][]
*/
protected $deprecatedPublicProperties = [];
* @file
*/
+use MediaWiki\Shell\Shell;
+
/**
* @ingroup Dump
*/
*/
function setup7zCommand( $file ) {
$command = "7za a -bd -si -mx=";
- $command .= wfEscapeShellArg( $this->compressionLevel ) . ' ';
- $command .= wfEscapeShellArg( $file );
+ $command .= Shell::escape( $this->compressionLevel ) . ' ';
+ $command .= Shell::escape( $file );
// Suppress annoying useless crap from p7zip
// Unfortunately this could suppress real error messages too
$command .= ' >' . wfGetNull() . ' 2>&1';
* @file
*/
+use MediaWiki\Shell\Shell;
+
/**
* @ingroup Dump
*/
*/
function __construct( $command, $file = null ) {
if ( !is_null( $file ) ) {
- $command .= " > " . wfEscapeShellArg( $file );
+ $command .= " > " . Shell::escape( $file );
}
$this->startCommand( $command );
$this->renameOrException( $newname );
if ( $open ) {
$command = $this->command;
- $command .= " > " . wfEscapeShellArg( $this->filename );
+ $command .= " > " . Shell::escape( $this->filename );
$this->startCommand( $command );
}
}
* @return string
*/
function closePage() {
+ if ( $this->currentTitle !== null ) {
+ $linkCache = MediaWikiServices::getInstance()->getLinkCache();
+ // In rare cases, link cache has the same key for some pages which
+ // might be read as part of the same batch. T220424 and T220316
+ $linkCache->clearLink( $this->currentTitle );
+ }
return " </page>\n";
}
try {
$text = $content_handler->exportTransform( $text, $content_format );
}
- catch ( MWException $ex ) {
- // leave text as is; that's the way it goes
+ catch ( Exception $ex ) {
+ if ( $ex instanceof MWException || $ex instanceof RuntimeException ) {
+ // leave text as is; that's the way it goes
+ wfLogWarning( 'exportTransform failed on text for revid ' . $row->rev_id . "\n" );
+ } else {
+ throw $ex;
+ }
}
$out .= " " . Xml::elementClean( 'text',
[ 'xml:space' => 'preserve', 'bytes' => intval( $row->rev_len ) ],
// TODO: make this fully MCR aware, see T174031
$rev = $this->getRevisionStore()->newRevisionFromRow( $row, 0, $this->currentTitle );
$slot = $rev->getSlot( 'main' );
- $content = $slot->getContent();
-
- if ( $content instanceof TextContent ) {
- // HACK: For text based models, bypass the serialization step.
- // This allows extensions (like Flow)that use incompatible combinations
- // of serialization format and content model.
- $text = $content->getNativeData();
- } else {
- $text = $content->serialize( $content_format );
+ try {
+ $content = $slot->getContent();
+
+ if ( $content instanceof TextContent ) {
+ // HACK: For text based models, bypass the serialization step.
+ // This allows extensions (like Flow)that use incompatible combinations
+ // of serialization format and content model.
+ $text = $content->getNativeData();
+ } else {
+ $text = $content->serialize( $content_format );
+ }
+ $text = $content_handler->exportTransform( $text, $content_format );
+ $out .= " " . Xml::elementClean( 'text',
+ [ 'xml:space' => 'preserve', 'bytes' => intval( $slot->getSize() ) ],
+ strval( $text ) ) . "\n";
+ }
+ catch ( Exception $ex ) {
+ if ( $ex instanceof MWException || $ex instanceof RuntimeException ) {
+ // there's no provsion in the schema for an attribute that will let
+ // the user know this element was unavailable due to error; an empty
+ // tag is the best we can do
+ $out .= " " . Xml::element( 'text' ) . "\n";
+ wfLogWarning( 'failed to load content for revid ' . $row->rev_id . "\n" );
+ } else {
+ throw $ex;
+ }
}
-
- $text = $content_handler->exportTransform( $text, $content_format );
- $out .= " " . Xml::elementClean( 'text',
- [ 'xml:space' => 'preserve', 'bytes' => intval( $slot->getSize() ) ],
- strval( $text ) ) . "\n";
} elseif ( isset( $row->rev_text_id ) ) {
// Stub output for pre-MCR schema
// TODO: MCR: rev_text_id only exists in the pre-MCR schema. Remove this when
*/
protected $mAction = false;
+ /**
+ * Whether the HTML form can be collapsed
+ * @since 1.33
+ * @var bool
+ */
+ protected $mCollapsible = false;
+
+ /**
+ * Whether the HTML form IS collapsed by default
+ * @since 1.33
+ * @var bool
+ */
+ protected $mCollapsed = false;
+
/**
* Form attribute autocomplete. A typical value is "off". null does not set the attribute
* @since 1.27
return '' . $this->mPre . $html . $this->mPost;
}
+ /**
+ * Make the form collapsible
+ * @since 1.33
+ * @param bool $collapsed whether it should be by default
+ * @return HTMLForm $this for chaining calls (since 1.20)
+ */
+ public function setCollapsible( $collapsed = false ) {
+ $this->mCollapsible = true;
+ $this->mCollapsed = $collapsed;
+ return $this;
+ }
+
/**
* Get HTML attributes for the `<form>` tag.
* @return array
public function wrapForm( $html ) {
if ( is_string( $this->mWrapperLegend ) ) {
+ $classes = $this->mCollapsible ? [ 'mw-collapsible' ] : [];
+ if ( $this->mCollapsed ) {
+ $classes[] = 'mw-collapsed';
+ }
$content = new OOUI\FieldsetLayout( [
'label' => $this->mWrapperLegend,
- 'items' => [
- new OOUI\Widget( [
- 'content' => new OOUI\HtmlSnippet( $html )
- ] ),
- ],
+ 'classes' => $classes,
+ 'group' => new OOUI\StackLayout( [
+ 'expanded' => false,
+ 'classes' => [ 'oo-ui-fieldsetLayout-group mw-collapsible-content' ],
+ 'items' => [
+ new OOUI\Widget( [
+ 'content' => new OOUI\HtmlSnippet( $html )
+ ] ),
+ ],
+ ] ),
] + OOUI\Element::configFromHtmlAttributes( $this->mWrapperAttributes ) );
} else {
$content = new OOUI\HtmlSnippet( $html );
}
+ $classes = [ 'mw-htmlform', 'mw-htmlform-ooui' ];
$form = new OOUI\FormLayout( $this->getFormAttributes() + [
- 'classes' => [ 'mw-htmlform', 'mw-htmlform-ooui' ],
+ 'classes' => $classes,
'content' => $content,
] );
* @file
* @ingroup Deployment
*/
-use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
use MediaWiki\MediaWikiServices;
require_once __DIR__ . '/../../maintenance/Maintenance.php';
/**
* Handle to the database subclass
*
- * @var Database
+ * @var IMaintainableDatabase
*/
protected $db;
protected $holdContentHandlerUseDB = true;
/**
- * @param Database &$db To perform updates on
+ * @param IMaintainableDatabase &$db To perform updates on
* @param bool $shared Whether to perform updates on shared tables
* @param Maintenance|null $maintenance Maintenance object which created us
*/
- protected function __construct( Database &$db, $shared, Maintenance $maintenance = null ) {
+ protected function __construct(
+ IMaintainableDatabase &$db,
+ $shared,
+ Maintenance $maintenance = null
+ ) {
$this->db = $db;
$this->db->setFlag( DBO_DDLMODE ); // For Oracle's handling of schema files
$this->shared = $shared;
}
/**
- * @param Database $db
+ * @param IMaintainableDatabase $db
* @param bool $shared
* @param Maintenance|null $maintenance
*
* @throws MWException
* @return DatabaseUpdater
*/
- public static function newForDB( Database $db, $shared = false, Maintenance $maintenance = null ) {
+ public static function newForDB(
+ IMaintainableDatabase $db,
+ $shared = false,
+ Maintenance $maintenance = null
+ ) {
$type = $db->getType();
if ( in_array( $type, Installer::getDBTypes() ) ) {
$class = ucfirst( $type ) . 'Updater';
/**
* Get a database connection to run updates
*
- * @return Database
+ * @return IMaintainableDatabase
*/
public function getDB() {
return $this->db;
"Hamisun",
"Alifakoor",
"Seb35",
- "Ahmad252"
+ "Ahmad252",
+ "FarsiNevis"
]
},
"config-desc": "نصبکنندهٔ مدیاویکی",
"config-install-done": "'''تبریک!'''\nبا موفقیت مدیاویکی را نصب کردید.\nبرنامه نصبکننده پرونده <code>LocalSettings.php</code> را درست کرد.\nکه شامل تمام تنظیمات میباشد.\n\nشما نیاز به دریافت آن دارید و آن را در پایهٔ نصب ویکی قرار دهید (همان پوشهٔ index.php). دریافت باید به صورت خودکار شروع شدهباشد.\n\nاگر دریافت شروع نشد یا اگر آن را لغو کردید با کلیک روی پیوند زیر میتوانید آن را دریافت کنید:\n\n$3\n\n'''توجه داشته باشید:''' اگر این را الآن انجام ندهید، این پرونده تولیدشده در صورتی که نصب را بدون دریافت آن تمام کردید بعداً در اختیار شما قرار نخواهد گرفت.\n\nوقتی انجام شد شما میتوانید '''[$2 وارد ویکی شوید]'''.",
"config-install-done-path": "<strong>تبریک!</strong>\nمدیاویکی با موفقیت نصب گردید.\nبرنامه نصبکننده یک پرونده <code>LocalSettings.php</code> ایجاد کرده است که شامل تمام تنظیمات میباشد.\n\nلازم است شما آن را دریافت کرده و در <code>$4</code> قرار دهید. اِن دریافت می باِست به صورت خودکار شروع شدهباشد.\n\nاگر دریافت شروع نشده بود و یا آن را لغو کرده اید با کلیک روی پیوند زیر میتوانید آن را دریافت کنید:\n\n$3\n\n<strong>توجه:</strong> اگر این کار را هم اکنون انجام ندهید و بدون دریافت آن از برنامه نصب خارج شويد، این پرونده تنظیمات تولیدشده در آینده در اختیار شما قرار نخواهد داشت.\n\nوقتی که آن کار را انجام داديد، میتوانید <strong>[$2 وارد ويکی خودتان شويد]</strong>.",
"config-install-success": "نصب مدیاویکی موفق بود. شما میتوانید برای دیدن ویکیتان از <$1$2> بازدید کنید.\nاگر پرسشی داشتید، فهرست پرسشهای متداول ما را مطالعه کنید:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> یا از یکی از انجمنهای پشیبانی که در آن صفحه فهرست شدهاند استفاده کنید.",
+ "config-install-db-success": "دادگان با موفقیت نصب شد",
"config-download-localsettings": "دریافت <code>LocalSettings.php</code>",
"config-help": "راهنما",
"config-help-tooltip": "برای گسترش کلیک کنید",
"config-sqlite-cant-create-db": "Non poteva crear le file de base de datos <code>$1</code>.",
"config-sqlite-fts3-downgrade": "PHP non ha supporto pro FTS3. Le tabellas es retrogradate.",
"config-can-upgrade": "Il ha tabellas MediaWiki in iste base de datos.\nPro actualisar los a MediaWiki $1, clicca super '''Continuar'''.",
+ "config-upgrade-error": "Un error ha occurrite durante le actualisation del tabellas MediaWiki in tu base de datos.\n\nPro plus information, examina le registro supra. Pro tentar lo de novo, clicca sur <strong>Continuar</strong>.",
"config-upgrade-done": "Actualisation complete.\n\nTu pote ora [$1 comenciar a usar tu wiki].\n\nSi tu vole regenerar tu file <code>LocalSettings.php</code>, clicca super le button hic infra.\nIsto '''non es recommendate''' si tu non ha problemas con tu wiki.",
"config-upgrade-done-no-regenerate": "Actualisation complete.\n\nTu pote ora [$1 comenciar a usar tu wiki].",
"config-regenerate": "Regenerar LocalSettings.php →",
"config-install-done": "<strong>Felicitationes!</strong>\nTu ha installate MediaWiki.\n\nLe installator ha generate un file <code>LocalSettings.php</code>.\nIste contine tote le configuration.\n\nEs necessari discargar lo e poner lo in le base del installation wiki (le mesme directorio que index.php).\nLe discargamento debe haber comenciate automaticamente.\n\nSi le discargamento non ha comenciate, o si illo esseva cancellate, recomencia le discargamento con un clic sur le ligamine sequente:\n\n$3\n\n<strong>Nota:</strong> Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde.\n\nPost facer isto, tu pote <strong>[$2 entrar in tu wiki]</strong>.",
"config-install-done-path": "<strong>Felicitationes!</strong>\nTu ha installate MediaWiki.\n\nLe installator ha generate un file <code>LocalSettings.php</code>.\nIste contine tote le configuration.\n\nEs necessari discargar lo e poner lo in <code>$4</code>.\nLe discargamento debe haber comenciate automaticamente.\n\nSi le discargamento non ha comenciate, o si illo esseva cancellate, recomencia le discargamento con un clic sur le ligamine sequente:\n\n$3\n\n<strong>Nota:</strong> Si tu non discarga iste file de configuration ora, illo non essera disponibile plus tarde.\n\nPost facer isto, tu pote <strong>[$2 entrar in tu wiki]</strong>.",
"config-install-success": "MediaWiki ha essite installate con successo. Tu pote ora\nvisitar <$1$2> pro vider tu wiki.\nSi tu ha questiones, consulta nostre lista de questiones frequentemente ponite:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> o usa un del\nforos de supporto indicate sur ille pagina.",
+ "config-install-db-success": "Le installation del base de datos ha succedite",
"config-download-localsettings": "Discargar <code>LocalSettings.php</code>",
"config-help": "adjuta",
"config-help-tooltip": "clicca pro displicar",
"config-skins-screenshots": "$1 (capturas de schermo: $2)",
"config-extensions-requires": "$1 (require $2)",
"config-screenshot": "captura de schermo",
+ "config-extension-not-found": "Impossibile trovar le file de registration pro le extension \"$1\"",
+ "config-extension-dependency": "Un error de dependentia se ha producite durante le installation del extension \"$1\": $2",
"mainpagetext": "<strong>MediaWiki ha essite installate.</strong>",
"mainpagedocfooter": "Consulta le [https://meta.wikimedia.org/wiki/Help:Contents Guida del usator] pro information sur le uso del software wiki.\n\n== Pro initiar ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de configurationes]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ a proposito de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de diffusion pro annuncios de nove versiones de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducer MediaWiki in tu lingua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Como combatter le spam in tu wiki]"
}
"config-install-done": "<strong>Gefeliciteerd!</strong>\nU hebt MediaWiki geïnstalleerd.\n\nHet installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.\nDit bevat al uw instellingen.\n\nU moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsen, in dezelfde map als index.php.\nDe download zou automatisch moeten zijn gestart.\n\nAls de download niet is gestart of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\n<strong>Let op:</strong> als u dit niet nu doet, dan is het bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kunt u <strong>[$2 uw wiki gebruiken]</strong>.",
"config-install-done-path": "<strong>Gefeliciteerd!</strong>\nU hebt MediaWiki geïnstalleerd.\n\nHet installatieprogramma heeft het bestand <code>LocalSettings.php</code> aangemaakt.\nDit bevat al uw instellingen.\n\nU moet het bestand downloaden en in <code>$4</code> plaatsen. De download zou automatisch moeten zijn gestart.\n\nAls de download niet is gestart of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\n<strong>Let op:</strong> Als u dit niet nu doet, dan is het bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kunt u <strong>[$2 uw wiki gebruiken]</strong>.",
"config-install-success": "MediaWiki is geïnstalleerd. U kunt nu\n<$1$2> bezoeken om uw wiki te bekijken.\nAls u vragen hebt, bekijk dan onze lijst met veelgestelde vragen:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ>, of gebruik een van de hulpforums vermeld op die pagina.",
+ "config-install-db-success": "Het installeren van de database is geslaagd",
"config-download-localsettings": "<code>LocalSettings.php</code> downloaden",
"config-help": "hulp",
"config-help-tooltip": "klik om uit te vouwen",
"config-using-32bit": "<strong>Varning:</strong> ditt system verkar vara en 32-bitarsversion. Detta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit rekommenderas inte].",
"config-db-type": "Databastyp:",
"config-db-host": "Databasvärd:",
- "config-db-host-help": "Om din databasserver är på en annan server, ange då värdnamnet eller IP-adressen här.\n\nOm du använder ett delat webbhotell, bör din leverantör ge dig rätt värdnamn i deras dokumentation.\n\nOm du installerar på en Windowsserver och använder MySQL, kanske \"localhost\" inte fungerar för servernamnet. Om det inte gör det försök med \"127.0.0.1\" som den lokala IP-adressen.\n\nOm du använder PostgreSQL, lämna detta fält blankt för att ansluta via en Unix-socket.",
+ "config-db-host-help": "Om din databasserver är på en annan server, ange då värdnamnet eller IP-adressen här.\n\nOm du använder ett delat webbhotell, bör din leverantör ge dig rätt värdnamn i deras dokumentation.\n\nOm du använder MySQL, kanske \"localhost\" inte fungerar för servernamnet. Om det inte gör det försök med \"127.0.0.1\" som den lokala IP-adressen.\n\nOm du använder PostgreSQL, lämna detta fält blankt för att ansluta via en Unix-socket.",
"config-db-host-oracle": "Databas TNS:",
"config-db-host-oracle-help": "Ange ett giltigt [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil måste vara synlig för denna installation.<br />Om du använder klientbibliotek 10g eller nyare kan du också använda [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] namngivningsmetoden.",
"config-db-wiki-settings": "Identifiera denna wiki",
"config-invalid-db-server-oracle": "Ogiltig databas-TNS \"$1\".\nAnvända antingen \"TNS Name\" eller en \"Easy Connect\"-sträng ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracles namngivningsmetoder]).",
"config-invalid-db-name": "\"$1\" är ett ogiltigt databasnamn.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
"config-invalid-db-prefix": "\"$1\" är ett ogiltigt databasprefix.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
- "config-connection-error": "$1.\n\nKontrollera värd, användarnamn och lösenord och försök igen.",
+ "config-connection-error": "$1.\n\nKontrollera värd, användarnamn och lösenord och försök igen. Om du använder \"localhost\" som databasvärden, försök använda \"127.0.0.1\" istället (eller tvärtom).",
"config-invalid-schema": "\"$1\" är ett ogiltigt schema för MediaWiki.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
"config-db-sys-create-oracle": "Installationsprogrammet stöder endast användningen av ett SYSDBA-konto för att skapa ett nytt konto.",
"config-db-sys-user-exists-oracle": "Användarkontot \"$1\" finns redan. SYSDBA kan endast användas för att skapa ett nytt konto!",
"config-install-done": "<strong>Grattis!</strong>\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen <code>LocalSettings.php</code>.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i roten för din wiki-installation (samma katalog som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\n<strong>OBS</strong>: Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du <strong>[$2 gå in på din wiki]</strong>",
"config-install-done-path": "<strong>Grattis!</strong>\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen <code>LocalSettings.php</code>.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i <code>$4</code>. Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\n<strong>OBS</strong>: Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du <strong>[$2 gå in på din wiki]</strong>",
"config-install-success": "MediaWiki har installerats. Du kan nu besöka <$1$2> för att se din wiki.\nOm du undrar någonting, kolla in vår lista över vanliga ställda frågor:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> eller använda något supportforum som länkas på sidan.",
+ "config-install-db-success": "Databasen har konfigurerats",
"config-download-localsettings": "Ladda ner <code>LocalSettings.php</code>",
"config-help": "hjälp",
"config-help-tooltip": "klicka för att expandera",
public function set( $key, $value, $expire = 0, $flags = 0 ) {
$result = wincache_ucache_set( $key, serialize( $value ), $expire );
+ // false positive, wincache_ucache_set returns an empty array
+ // in some circumstances.
+ // @phan-suppress-next-line PhanTypeComparisonToArray
return ( $result === [] || $result === true );
}
public function add( $key, $value, $exptime = 0, $flags = 0 ) {
$result = wincache_ucache_add( $key, serialize( $value ), $exptime );
+ // false positive, wincache_ucache_add returns an empty array
+ // in some circumstances.
+ // @phan-suppress-next-line PhanTypeComparisonToArray
return ( $result === [] || $result === true );
}
/** @var callable Deprecation logging callback */
protected $deprecationLogger;
- /** @var resource|null Database connection */
+ /** @var object|resource|null Database connection */
protected $conn = null;
/** @var bool */
protected $opened = false;
}
if ( is_null( $value ) ) {
$sql .= 'null';
- } elseif ( is_array( $value ) || is_object( $value ) ) {
- if ( is_object( $value ) && $value instanceof Blob ) {
- $sql .= $this->addQuotes( $value );
- } else {
- $sql .= $this->addQuotes( serialize( $value ) );
- }
} else {
$sql .= $this->addQuotes( $value );
}
/** @noinspection PhpMissingParentConstructorInspection */
/**
- * @param Blob|array|string $data
+ * @param Blob|string $data
*/
public function __construct( $data ) {
if ( $data instanceof MssqlBlob ) {
$this->data = $data->data;
} elseif ( $data instanceof Blob ) {
$this->data = $data->fetch();
- } elseif ( is_array( $data ) && is_object( $data ) ) {
- $this->data = serialize( $data );
} else {
$this->data = $data;
}
/**
* Get the access restriction.
*
- * @return string
+ * @return int
*/
public function getDeleted();
* @ingroup Media
*/
+use MediaWiki\Shell\Shell;
+
/**
* Generic handler for bitmap images
*
$rotation = isset( $params['disableRotation'] ) ? 0 : $this->getRotation( $image );
list( $width, $height ) = $this->extractPreRotationDimensions( $params, $rotation );
- $cmd = wfEscapeShellArg( ...array_merge(
+ $cmd = Shell::escape( ...array_merge(
[ $wgImageMagickConvertCommand ],
$quality,
// Specify white background color, will be used for transparent images
global $wgCustomConvertCommand;
# Variables: %s %d %w %h
- $src = wfEscapeShellArg( $params['srcPath'] );
- $dst = wfEscapeShellArg( $params['dstPath'] );
+ $src = Shell::escape( $params['srcPath'] );
+ $dst = Shell::escape( $params['dstPath'] );
$cmd = $wgCustomConvertCommand;
$cmd = str_replace( '%s', $src, str_replace( '%d', $dst, $cmd ) ); # Filenames
- $cmd = str_replace( '%h', wfEscapeShellArg( $params['physicalHeight'] ),
- str_replace( '%w', wfEscapeShellArg( $params['physicalWidth'] ), $cmd ) ); # Size
+ $cmd = str_replace( '%h', Shell::escape( $params['physicalHeight'] ),
+ str_replace( '%w', Shell::escape( $params['physicalWidth'] ), $cmd ) ); # Size
wfDebug( __METHOD__ . ": Running custom convert command $cmd\n" );
$retval = 0;
$err = wfShellExecWithStderr( $cmd, $retval );
$scaler = $this->getScalerType( null, false );
switch ( $scaler ) {
case 'im':
- $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . " " .
- wfEscapeShellArg( $this->escapeMagickInput( $params['srcPath'], $scene ) ) .
- " -rotate " . wfEscapeShellArg( "-$rotation" ) . " " .
- wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) );
+ $cmd = Shell::escape( $wgImageMagickConvertCommand ) . " " .
+ Shell::escape( $this->escapeMagickInput( $params['srcPath'], $scene ) ) .
+ " -rotate " . Shell::escape( "-$rotation" ) . " " .
+ Shell::escape( $this->escapeMagickOutput( $params['dstPath'] ) );
wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
$retval = 0;
$err = wfShellExecWithStderr( $cmd, $retval );
* @ingroup Media
*/
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
/**
* Handler for DjVu images
# Use a subshell (brackets) to aggregate stderr from both pipeline commands
# before redirecting it to the overall stdout. This works in both Linux and Windows XP.
- $cmd = '(' . wfEscapeShellArg(
+ $cmd = '(' . Shell::escape(
$wgDjvuRenderer,
"-format=ppm",
"-page={$page}",
if ( $wgDjvuPostProcessor ) {
$cmd .= " | {$wgDjvuPostProcessor}";
}
- $cmd .= ' > ' . wfEscapeShellArg( $dstPath ) . ') 2>&1';
+ $cmd .= ' > ' . Shell::escape( $dstPath ) . ') 2>&1';
wfDebug( __METHOD__ . ": $cmd\n" );
$retval = '';
$err = wfShellExec( $cmd, $retval );
* @ingroup Media
*/
+use MediaWiki\Shell\Shell;
+
/**
* Support for detecting/validating DjVu image files and getting
* some basic file metadata (resolution etc)
$this->dumpForm( $file, $chunkLength, $indent + 1 );
} else {
fseek( $file, $chunkLength, SEEK_CUR );
- if ( $chunkLength & 1 == 1 ) {
+ if ( ( $chunkLength & 1 ) == 1 ) {
// Padding byte between chunks
fseek( $file, 1, SEEK_CUR );
}
private function skipChunk( $file, $chunkLength ) {
fseek( $file, $chunkLength, SEEK_CUR );
- if ( $chunkLength & 0x01 == 1 && !feof( $file ) ) {
+ if ( ( $chunkLength & 0x01 ) == 1 && !feof( $file ) ) {
// padding byte
fseek( $file, 1, SEEK_CUR );
}
if ( isset( $wgDjvuDump ) ) {
# djvudump is faster as of version 3.5
# https://sourceforge.net/p/djvu/bugs/71/
- $cmd = wfEscapeShellArg( $wgDjvuDump ) . ' ' . wfEscapeShellArg( $this->mFilename );
+ $cmd = Shell::escape( $wgDjvuDump ) . ' ' . Shell::escape( $this->mFilename );
$dump = wfShellExec( $cmd );
$xml = $this->convertDumpToXML( $dump );
} elseif ( isset( $wgDjvuToXML ) ) {
- $cmd = wfEscapeShellArg( $wgDjvuToXML ) . ' --without-anno --without-text ' .
- wfEscapeShellArg( $this->mFilename );
+ $cmd = Shell::escape( $wgDjvuToXML ) . ' --without-anno --without-text ' .
+ Shell::escape( $this->mFilename );
$xml = wfShellExec( $cmd );
} else {
$xml = null;
}
# Text layer
if ( isset( $wgDjvuTxt ) ) {
- $cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename );
+ $cmd = Shell::escape( $wgDjvuTxt ) . ' --detail=page ' . Shell::escape( $this->mFilename );
wfDebug( __METHOD__ . ": $cmd\n" );
$retval = '';
$txt = wfShellExec( $cmd, $retval, [], [ 'memory' => self::DJVUTXT_MEMORY_LIMIT ] );
* @file
* @ingroup Media
*/
+
+use MediaWiki\Shell\Shell;
use Wikimedia\ScopedCallback;
/**
// External command
$cmd = str_replace(
[ '$path/', '$width', '$height', '$input', '$output' ],
- [ $wgSVGConverterPath ? wfEscapeShellArg( "$wgSVGConverterPath/" ) : "",
+ [ $wgSVGConverterPath ? Shell::escape( "$wgSVGConverterPath/" ) : "",
intval( $width ),
intval( $height ),
- wfEscapeShellArg( $srcPath ),
- wfEscapeShellArg( $dstPath ) ],
+ Shell::escape( $srcPath ),
+ Shell::escape( $dstPath ) ],
$wgSVGConverters[$wgSVGConverter]
);
* @ingroup Media
*/
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
/**
* Handler for images that need to be transformed
function () use ( $method ) {
global $wgImageMagickConvertCommand;
- $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . ' -version';
+ $cmd = Shell::escape( $wgImageMagickConvertCommand ) . ' -version';
wfDebug( $method . ": Running convert -version\n" );
$retval = '';
$return = wfShellExecWithStderr( $cmd, $retval );
* @ingroup Parser
*/
use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\MediaWikiServices;
use MediaWiki\Special\SpecialPageFactory;
use Wikimedia\ScopedCallback;
/** @var Config */
private $siteConfig;
+ /** @var LinkRendererFactory */
+ private $linkRendererFactory;
+
/**
* @param array $parserConf See $wgParserConf documentation
* @param MagicWordFactory|null $magicWordFactory
* @param string|null $urlProtocols As returned from wfUrlProtocols()
* @param SpecialPageFactory|null $spFactory
* @param Config|null $siteConfig
+ * @param LinkRendererFactory|null $linkRendererFactory
*/
public function __construct(
array $parserConf = [], MagicWordFactory $magicWordFactory = null,
Language $contLang = null, ParserFactory $factory = null, $urlProtocols = null,
- SpecialPageFactory $spFactory = null, Config $siteConfig = null
+ SpecialPageFactory $spFactory = null, Config $siteConfig = null,
+ LinkRendererFactory $linkRendererFactory = null
) {
$this->mConf = $parserConf;
$this->mUrlProtocols = $urlProtocols ?? wfUrlProtocols();
$this->factory = $factory ?? $services->getParserFactory();
$this->specialPageFactory = $spFactory ?? $services->getSpecialPageFactory();
$this->siteConfig = $siteConfig ?? MediaWikiServices::getInstance()->getMainConfig();
+
+ $this->linkRendererFactory =
+ $linkRendererFactory ?? MediaWikiServices::getInstance()->getLinkRendererFactory();
}
/**
* @return LinkRenderer
*/
public function getLinkRenderer() {
+ // XXX We make the LinkRenderer with current options and then cache it forever
if ( !$this->mLinkRenderer ) {
- $this->mLinkRenderer = MediaWikiServices::getInstance()
- ->getLinkRendererFactory()->create();
+ $this->mLinkRenderer = $this->linkRendererFactory->create();
$this->mLinkRenderer->setStubThreshold(
$this->getOptions()->getStubThreshold()
);
* @file
* @ingroup Parser
*/
+use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\Special\SpecialPageFactory;
/** @var Config */
private $siteConfig;
+ /** @var LinkRendererFactory */
+ private $linkRendererFactory;
+
/**
* @param array $parserConf See $wgParserConf documentation
* @param MagicWordFactory $magicWordFactory
* @param string $urlProtocols As returned from wfUrlProtocols()
* @param SpecialPageFactory $spFactory
* @param Config $siteConfig
+ * @param LinkRendererFactory $linkRendererFactory
* @since 1.32
*/
public function __construct(
array $parserConf, MagicWordFactory $magicWordFactory, Language $contLang, $urlProtocols,
- SpecialPageFactory $spFactory, Config $siteConfig
+ SpecialPageFactory $spFactory, Config $siteConfig, LinkRendererFactory $linkRendererFactory
) {
$this->parserConf = $parserConf;
$this->magicWordFactory = $magicWordFactory;
$this->urlProtocols = $urlProtocols;
$this->specialPageFactory = $spFactory;
$this->siteConfig = $siteConfig;
+ $this->linkRendererFactory = $linkRendererFactory;
}
/**
*/
public function create() : Parser {
return new Parser( $this->parserConf, $this->magicWordFactory, $this->contLang, $this,
- $this->urlProtocols, $this->specialPageFactory, $this->siteConfig );
+ $this->urlProtocols, $this->specialPageFactory, $this->siteConfig,
+ $this->linkRendererFactory );
}
}
return $this->accum;
}
+ /**
+ * @return bool|PPDPart
+ */
public function getCurrentPart() {
if ( $this->top === false ) {
return false;
$this->parts[] = new $class( $s );
}
+ /**
+ * @return PPDPart
+ */
public function getCurrentPart() {
return $this->parts[count( $this->parts ) - 1];
}
* @param LoggerInterface|null $logger [optional]
*/
public function __construct( Config $config = null, LoggerInterface $logger = null ) {
- global $IP;
-
$this->logger = $logger ?: new NullLogger();
if ( !$config ) {
// Add 'local' source first
$this->addSource( 'local', $config->get( 'LoadScript' ) );
- // Register core modules
- $this->register( include "$IP/resources/Resources.php" );
+ // Special module that always exists
+ $this->register( 'startup', [ 'class' => ResourceLoaderStartUpModule::class ] );
+
// Register extension modules
$this->register( $config->get( 'ResourceModules' ) );
*/
private function ensureNewline( $str ) {
$end = substr( $str, -1 );
- if ( $end === false || $end === "\n" ) {
+ if ( $end === false || $end === '' || $end === "\n" ) {
return $str;
}
return $str . "\n";
}
}
- array_walk( $modules, [ 'self', 'trimArray' ] );
+ array_walk( $modules, [ self::class, 'trimArray' ] );
return Xml::encodeJsCall(
'mw.loader.register',
* things that don't "really" need a context.
*
* Use cases:
- * - Creating html5shiv script tag in OutputPage.
* - Unit tests (deprecated, create empty instance directly or use RLTestCase).
*
* @return ResourceLoaderContext
* @file
*/
+use MediaWiki\Shell\Shell;
+
/**
* Class encapsulating an image used in a ResourceLoaderImageModule.
*
if ( strpos( $wgSVGConverter, 'rsvg' ) === 0 ) {
$command = 'rsvg-convert';
if ( $wgSVGConverterPath ) {
- $command = wfEscapeShellArg( "$wgSVGConverterPath/" ) . $command;
+ $command = Shell::escape( "$wgSVGConverterPath/" ) . $command;
}
$process = proc_open(
* @file
* @ingroup Search
*/
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
/**
* Search engine hook base class for Postgres
$top = $res->fetchRow()[0];
$this->searchTerms = [];
+ $slotRoleStore = MediaWikiServices::getInstance()->getSlotRoleStore();
if ( $top === "" ) { # # e.g. if only stopwords are used XXX return something better
$query = "SELECT page_id, page_namespace, page_title, 0 AS score " .
- "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
- "AND r.rev_text_id = c.old_id AND 1=0";
+ "FROM page p, revision r, slots s, content c, pagecontent pc " .
+ "WHERE p.page_latest = r.rev_id " .
+ "AND s.slot_revision_id = r.rev_id " .
+ "AND s.slot_role_id = " . $slotRoleStore->getId( SlotRecord::MAIN ) . " " .
+ "AND c.content_id = s.slot_content_id " .
+ "AND pc.old_id = substring( c.content_address from '^tt:([0-9]+)$' )::int " .
+ "AND 1=0";
} else {
$m = [];
if ( preg_match_all( "/'([^']+)'/", $top, $m, PREG_SET_ORDER ) ) {
$query = "SELECT page_id, page_namespace, page_title, " .
"ts_rank($fulltext, to_tsquery($searchstring), 5) AS score " .
- "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
- "AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery($searchstring)";
+ "FROM page p, revision r, slots s, content c, pagecontent pc " .
+ "WHERE p.page_latest = r.rev_id " .
+ "AND s.slot_revision_id = r.rev_id " .
+ "AND s.slot_role_id = " . $slotRoleStore->getId( SlotRecord::MAIN ) . " " .
+ "AND c.content_id = s.slot_content_id " .
+ "AND pc.old_id = substring( c.content_address from '^tt:([0-9]+)$' )::int " .
+ "AND $fulltext @@ to_tsquery($searchstring)";
}
-
# # Namespaces - defaults to 0
if ( !is_null( $this->namespaces ) ) { // null -> search all
if ( count( $this->namespaces ) < 1 ) {
function update( $pageid, $title, $text ) {
# # We don't want to index older revisions
- $sql = "UPDATE pagecontent SET textvector = NULL WHERE textvector IS NOT NULL and old_id IN " .
- "(SELECT DISTINCT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) .
- " ORDER BY rev_text_id DESC OFFSET 1)";
+ $slotRoleStore = MediaWikiServices::getInstance()->getSlotRoleStore();
+ $sql = "UPDATE pagecontent SET textvector = NULL " .
+ "WHERE textvector IS NOT NULL " .
+ "AND old_id IN " .
+ "(SELECT DISTINCT substring( c.content_address from '^tt:([0-9]+)$' )::int AS old_rev_text_id " .
+ " FROM content c, slots s, revision r " .
+ " WHERE r.rev_page = $pageid " .
+ " AND s.slot_revision_id = r.rev_id " .
+ " AND s.slot_role_id = " . $slotRoleStore->getId( SlotRecord::MAIN ) . " " .
+ " AND c.content_id = s.slot_content_id " .
+ " ORDER BY old_rev_text_id DESC OFFSET 1)";
$this->db->query( $sql );
return true;
}
* @param User $user
* @param string $editToken Edit token
* @param Config|null $config optional for backwards compatibility
- * @return string|null Null on success or string on error
+ * @return null|string|array Null on success, string on error, or array on
+ * hook error
*/
public static function getPermissionsError( $user, $editToken, Config $config = null ) {
if ( $config === null ) {
$scalerThumbUrl = $scalerBaseUrl . '/' . $file->getUrlRel() .
'/' . rawurlencode( $scalerThumbName );
+ // If a thumb proxy is set up for the repo, we favor that, as that will
+ // keep the request internal
+ $thumbProxyUrl = $file->getRepo()->getThumbProxyUrl();
+
+ if ( strlen( $thumbProxyUrl ) ) {
+ $scalerThumbUrl = $thumbProxyUrl . 'temp/' . $file->getUrlRel() .
+ '/' . rawurlencode( $scalerThumbName );
+ }
+
// make an http request based on wgUploadStashScalerBaseUrl to lazy-create
// a thumbnail
$httpOptions = [
'timeout' => 5 // T90599 attempt to time out cleanly
];
$req = MWHttpRequest::factory( $scalerThumbUrl, $httpOptions, __METHOD__ );
+
+ $secret = $file->getRepo()->getThumbProxySecret();
+
+ // Pass a secret key shared with the proxied service if any
+ if ( strlen( $secret ) ) {
+ $req->setHeader( 'X-Swift-Secret', $secret );
+ }
+
$status = $req->execute();
if ( !$status->isOK() ) {
$errors = $status->getErrorsArray();
[ 'class' => 'mw-version-ext-name' ]
);
} else {
- $extensionNameLink = $extensionName;
+ $extensionNameLink = htmlspecialchars( $extensionName );
}
// ... and the version information
* @ingroup Upload
*/
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
/**
* @defgroup Upload Upload related
if ( strpos( $command, "%f" ) === false ) {
# simple pattern: append file to scan
- $command .= " " . wfEscapeShellArg( $file );
+ $command .= " " . Shell::escape( $file );
} else {
# complex pattern: replace "%f" with file to scan
- $command = str_replace( "%f", wfEscapeShellArg( $file ), $command );
+ $command = str_replace( "%f", Shell::escape( $file ), $command );
}
wfDebug( __METHOD__ . ": running virus scan: $command \n" );
* protected against race conditions using a compare-and-set (CAS) mechanism
* based on comparing $this->mTouched with the user_touched field.
*
- * @param Database $db
+ * @param IDatabase $db
* @param array $conditions WHERE conditions for use with Database::update
* @return array WHERE conditions for use with Database::update
*/
- protected function makeUpdateConditions( Database $db, array $conditions ) {
+ protected function makeUpdateConditions( IDatabase $db, array $conditions ) {
if ( $this->mTouched ) {
// CAS check: only update if the row wasn't changed sicne it was loaded.
$conditions['user_touched'] = $db->timestamp( $this->mTouched );
// Set the user limit key
if ( $userLimit !== false ) {
+ // phan is confused because &can-bypass's value is a bool, so it assumes
+ // that $userLimit is also a bool here.
+ // @phan-suppress-next-line PhanTypeInvalidExpressionArrayDestructuring
list( $max, $period ) = $userLimit;
wfDebug( __METHOD__ . ": effective user limit: $max in {$period}s\n" );
$keys[$cache->makeKey( 'limiter', $action, 'user', $id )] = $userLimit;
$triggered = false;
foreach ( $keys as $key => $limit ) {
+ // phan is confused because &can-bypass's value is a bool, so it assumes
+ // that $userLimit is also a bool here.
+ // @phan-suppress-next-line PhanTypeInvalidExpressionArrayDestructuring
list( $max, $period ) = $limit;
$summary = "(limit $max in {$period}s)";
$count = $cache->get( $key );
}
/**
- * @return array
+ * @return string
*/
function fallback8bitEncoding() {
return self::$dataCache->getItem( $this->mCode, 'fallback8bitEncoding' );
}
} elseif ( $dispLen > $length && $dispLen > strlen( $ellipsis ) ) {
# String in fact does need truncation, the truncation point was OK.
+ // @phan-suppress-next-line PhanTypeInvalidExpressionArrayDestructuring
list( $ret, $openTags ) = $maybeState; // reload state
$ret = $this->removeBadCharLast( $ret ); // multi-byte char fix
$ret .= $ellipsis; // add ellipsis
"delete-confirm": "حذف \"$1\"",
"delete-legend": "حذف",
"historywarning": "'''تنبيه:''' الصفحة التي تريد حذفها بها {{PLURAL:$1|نسخة|نسخة واحدة|نسختان|$1 نسخ|$1 نسخة}}. انظر",
- "historyaction-submit": "أظÙ\87ر",
+ "historyaction-submit": "عرض اÙ\84Ù\85راجعات",
"confirmdeletetext": "أنت على وشك أن تقوم بحذف صفحة بالإضافة إلى كل تاريخها.\nمن فضلك التأكد من عزمك على الحذف، وبأنك مدرك للعواقب، وبأنك تقوم بهذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
"actioncomplete": "انتهاء العملية",
"actionfailed": "الفعل فشل",
"userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" istifadəçi adı qeydiyyata alınmayıb.\nƏgər siz bu səhifəni yaratmaq/redaktə etmək istəyirsinizsə, xahiş edirik bunu yoxlayın.",
"userpage-userdoesnotexist-view": "\"$1\" istifadəçi hesabı qeydiyyatda deyil",
"blocked-notice-logextract": "Bu istifadəçi hal-hazırda bloklanmışdır.\nBloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:",
+ "clearyourcache": "<strong>Qeyd:</strong> Yaddaşa verdikdən sonra dəyişikliklərin görünməsi üçün brauzerinizin keşindən yan keçilməsi lazım ola bilər. \n<strong>Mozilla / Firefox / Safari:</strong>''' <em>Reload</em> düyməsini basarkən eyni vaxtda <em>Shift</em>-i basılı tutun və ya ''Ctrl-Shift-R''-a basın. (Apple Mac-da ''Cmd-Shift-R''). '''İE''': ''Refresh'' düyməsini basarkən eyni vaxtda ''Ctrl''-i basılı tutun və ya ''Ctrl-F5''-ə basın. '''Conqueror:''' Sadəcə ''Reload'' düyməsinə və ya ''F5''-ə basın. '''Opera''' brauzeri istifadəçiləri ''Tools→Preferences''-dən ''cache''-lərini tamamilə təmizləməli ola bilərlər.",
"usercssyoucanpreview": "'''İpucu:''' Qeyd etmədən əvvəl \"{{int:showpreview}}\"ə klikləyərək yeni CSSinizi yoxlayın.",
+ "userjsonyoucanpreview": "'''İpucu:''' Qeyd etməzdən əvvəl \"{{int:showpreview}}\" düyməsinə klikləyərək yeni JSON-unuzu yoxlayın.",
"userjsyoucanpreview": "'''İpucu:''' Qeyd etmədən əvvəl \"{{int:showpreview}}\"ə klikləyərək yeni JavaScriptinizi yoxlayın.",
"usercsspreview": "''Xatırladırıq ki, siz yalnız CSS-də sınaq göstərişi etmisiniz.'''\n'''Bu hələ yaddaşda saxlanılmayıb!'''",
+ "userjsonpreview": "''Xatırladırıq ki, siz yalnız JSON-da sınaq göstərişi etmisiniz.'''\n'''Bu hələ yaddaşda saxlanılmayıb!'''",
"userjspreview": "''Xatırladırıq ki, siz yalnız JavaScript-də test/sınaq göstərişi etmisiniz.'''\n'''Bu hələ yaddaşda saxlanılmayıb!'''",
"sitecsspreview": "''Xatırladırıq ki, siz yalnız CSS-də sınaq göstərişi etmisiniz.'''\n'''Bu hələ yaddaşda saxlanılmayıb!'''",
+ "sitejsonpreview": "''Xatırladırıq ki, siz yalnız JSON-da sınaq göstərişi etmisiniz.'''\n'''Bu hələ yaddaşda saxlanılmayıb!'''",
"sitejspreview": "''Xatırladırıq ki, siz yalnız JavaScript kodunda sınaq göstərişi etmisiniz.'''\n'''Bu hələ yaddaşda saxlanılmayıb!'''",
+ "userinvalidconfigtitle": "<strong>Xəbərdarlıq:</strong> \"$1\" dərisi (skin) yoxdur.\nXüsusi css, .json, və .js səhifələri kiçik hərflə başlayır. Məsələn: {{ns:user}}:Foo/vector.css",
"updated": "(yeniləndi)",
"note": "'''Qeyd:'''",
"previewnote": "<strong>Unutmayın ki, bu yalnız sınaq göstərişidir.</strong> Dəyişiklikləriniz hal-hazırda qeyd edilməmişdir!",
"continue-editing": "Redaktə sahəsinə qayıt",
"previewconflict": "Bu sınaq göstərişidir və yaddaşda saxlayacağınız təqdirdə mətnin redaktə səhifəsinin yuxarı hissəsində nəticənin necə olacağını göstərir.",
"session_fail_preview": "Üzr istəyirik! Sizin redaktəniz saxlanmadı. \n\nOla bilsin ki, profilinizdən çıxmısınız. <strong>Lütfən hesabınıza daxil olmağınızı yoxlayın və təkrar cəhd edin</strong>. Problem həll olunmazsa, [[Special:UserLogout|hesabınızdan çıxın]] və yenidən daxil olun, həmçinin brauzerinizin bu saytdan kukiləri qəbul etdiyini yoxlayın.",
+ "session_fail_preview_html": "Üzr istəyirik! Sessiya məlumatlarının itirilməsi səbəbindən düzəlişiniz yayımlanmadı.\n\n<em> {{SITENAME}} saytında xammal HTML effektiv olduğundan, sınaq görüntüsü JavaScript hücumlarına qarşı tədbir kimi gizlidir.</em>\n\n<strong>Bu qanuni bir redaktə cəhdidirsə, yenidən cəhd edin. </strong>\nƏgər hələ də işləməsə, [[Special:UserLogout|çıxış]] edin və yenidən daxil olun və brauzerinizin bu saytda çərəzlərə (cookies) icazə verdiyini yoxlayın.",
+ "token_suffix_mismatch": "<strong>Redaktəniz rədd edildi, çünki müştəri düzəliş jetonundakı punktuasiya simvollarını qarışdırdı.</strong>\nDüzəliş səhifə mətninin korrupsiyasının qarşısını almaq üçün rədd edildi.\nBu, bir arqument \"web-based anonim proxy\" xidməti istifadə edərkən bəzən olur.",
+ "edit_form_incomplete": "<strong>Düzəliş formasının bir hissəsi serverə çatmadı; Redaktələrinizin sağlam olduğunu və yenidən cəhd etdiyini təkrarlayın.</strong>",
"editing": "Redaktə $1",
"creating": "Qurulur $1",
"editingsection": "Redaktə $1 (bölmə)",
"yourtext": "Mətniniz",
"storedversion": "Qeyd edilmiş versiya",
"editingold": "'''DİQQƏT! Siz bu səhifənin köhnə versiyasını redaktə edirsiniz. Məqaləni yaddaşda saxlayacağınız halda bu versiyadan sonra edilmiş hər bir dəyişiklik itiriləcək.'''",
+ "unicode-support-fail": "Brauzeriniz Unicode-nu dəstəkləmir. Səhifələri redaktə edərkən, redaktəniz saxlanmadı.",
"yourdiff": "Fərqlər",
"copyrightwarning": "Xahiş olunur diqqətə alasınız ki, {{SITENAME}}dakı bütün fəaliyyətləriniz $2 lisenziyasına tabe olduğu hesab edilir (təfərrüat üçün bax: $1). Əgər yazdıqlarınızın əsaslı şəkildə redaktə edilməsini və istənildiyi vaxt başqa yerə ötürülməsini istəmirsinizsə, yazılarınızı burada dərc etməyin.\n<br />\nSiz eyni zamanda söz verirsiniz ki, bu yazıları siz özünüz yazmısınız və ya onları hamıya açıq mühitdən ya da buna bənzər mənbədən köçürmüsünüz.\n\n----\n\n<div style=\"font-weight: bold; font-size: 110%; color:red;\">MÜƏLLİF HÜQUQLARI İLƏ QORUNMUŞ HEÇ BİR İŞİ İCAZƏSİZ DƏRC ETMƏYİN!</div>",
+ "copyrightwarning2": "{{SITENAME}} saytında edilən bütün töhfələr digər istifadəçilər tərəfindən redaktə, dəyişdirilə və ya silinə bilər.\nYazılarınızın redaktə edilməsini istəmirsinizsə, buraya təqdim etməyin. <br />\nSiz də bunu özünüz yazdığınızı və ya ictimai bir domendən və ya digər bir etibarlı mənbədən kopyaladığınızı vəd edirsiniz (ətraflı məlumat üçün $1-ə baxın).",
+ "editpage-cannot-use-custom-model": "Bu səhifənin məzmunu modeli dəyişdirilə bilməz.",
+ "longpageerror": "<strong>Səhv: Siz təqdim etdiyiniz mətn {{PLURAL:$11 kilobayt|$1 kilobayt}} uzundur; bu {{PLURAL: $2 |bir kilobayt | $2 kilobayt}} maksimumdan daha uzundur.</strong>\nSaxlanıla bilməz.",
+ "readonlywarning": "<strong>Xəbərdarlıq: Verilənlər bazası saxlamaq üçün kilidlənib, beləliklə, düzəlişlərinizi hazırda saxlaya bilməyəcəksiniz.</strong>\nMətni mətn faylına kopyalayıp yapışdırılmasını və daha sonra saxlamağınızı tövsiyə edirik.\n\nBunu kilidləyən sistem idarəçisi bu izahatı verdi: $1",
+ "protectedpagewarning": "<strong>Xəbərdarlıq:</strong> Bu səhifə mühafizə edildiyi üçün yalnız idarəçilər redaktə edə bilərlər.\n\nƏn son jurnal qeydi aşağıda verilmişdir:",
"semiprotectedpagewarning": "'''Qeyd:''' Bu səhifə mühafizəli olduğu üçün onu yalnız qeydiyyatdan keçmiş istifadəçilər redaktə edə bilərlər.",
+ "cascadeprotectedwarning": "<strong>Xəbərdarlıq:</strong> Bu səhifə yalnız [[Special:ListGroupRights|xüsusi hüquqlara malik]] istifadəçilər tərəfindən redaktə ediləcək şəkildə mühafizə edilir. Çünki bu səhifə aşağıdakı kaskad mühafizə ilə qorunan {{PLURAL:$1|səhifəyə|səhifələrə}} daxildir:",
"titleprotectedwarning": "'''DİQQƏT! Bu səhifə mühafizəlidir, yalnız [[Special:ListGroupRights|icazəsi olan]] istifadəçilər onu redaktə edə bilərlər.'''",
"templatesused": "Bu səhifədə istifadə edilmiş {{PLURAL:$1|şablon|şablonlar}}:",
"templatesusedpreview": "Bu sınaq göstərişində istifadə edilmiş {{PLURAL:$1|şablon|şablonlar}}:",
"permissionserrors": "İcazə xətası",
"permissionserrorstext": "Siz, bunu aşağıdakı {{PLURAL:$1|səbəbə|səbəblərə}} görə edə bilməzsiniz:",
"permissionserrorstext-withaction": "Aşağıdakı {{PLURAL:$1|səbəbə|səbəblərə}} görə, $2 hüququnuz yoxdur:",
+ "contentmodelediterror": "<code>$1</code> <code>$2</code> səhifəsinin mövcud məzmun modelindən fərqləndiyi üçün bu versiyanı redaktə edə bilməzsiniz.",
"recreate-moveddeleted-warn": "'''Diqqət! Siz əvvəllər silinmiş səhifəni bərpa etmək istəyirsiz.'''\n\nBu səhifəni yenidən yaratmağın nə qədər zəruri olduğunu bir daha yoxlayın.\nBu səhifə üçün silmə qeydləri aşağıda göstərilmişdir:",
"moveddeleted-notice": "Bu səhifə silinmişdir.\nMəlumat üçün aşağıda bu səhifənin tarixçəsindən müvafiq silmə, mühafizə və köçmə qeydləri göstərilmişdir.",
+ "moveddeleted-notice-recent": "Üzr istəyirik, bu səhifə son vaxtlarda silinib (son 24 saat ərzində)\nBu səhifənin silinməsi, mühafizə edilməsi və yerdəyişmə qeydləri aşağıda verilmişdir.",
"log-fulllog": "Bütöv məlumatı göstər",
"edit-hook-aborted": "Düzəlişlər qarmaq-prosedur tərəfindən geri qaytarılıb.\nƏlavə izahat verilməyib.",
"edit-gone-missing": "Səhifəni yeniləmək mümkün deyil.\nÇox güman ki, səhifə silinmişdir.",
"allpages": "Усе старонкі",
"nextpage": "Наступная старонка ($1)",
"prevpage": "Папярэдняя старонка ($1)",
- "allpagesfrom": "Паказаць старонкі, пачынаючы з:",
+ "allpagesfrom": "Паказаць старонкі ад:",
"allpagesto": "Паказаць старонкі да:",
"allarticles": "Усе старонкі",
"allinnamespace": "Усе старонкі (прастора назваў: $1)",
"tog-norollbackdiff": "Не паказваць розніцу ў выніку адкату",
"tog-useeditwarning": "Папярэдзіць мяне, калі я пакідаю старонку з незахаванымі праўкамі",
"tog-prefershttps": "Заўсёды выкарыстоўваць бяспечнае злучэнне па ўваходзе ў сістэму",
+ "tog-showrollbackconfirmation": "Паказваць акно пацвярджэння пры націску спасылкі адкату",
"underline-always": "Заўсёды",
"underline-never": "Ніколі",
"underline-default": "Як у браўзеры",
"returnto": "Вярнуцца да $1.",
"tagline": "З пляцоўкі {{SITENAME}}",
"help": "Даведка",
+ "help-mediawiki": "Дапамога пра MediaWiki",
"search": "Знайсці",
"search-ignored-headings": " #<!-- не змяняйце гэты радок --> <pre>\n# Загалоўкі, якія будзе ігнараваць рухавік пошуку.\n# Змены набудуць моц па наступным індэксаванні старонкі.\n# Вы можаце змусіць пераіндэксаванне старонкі, зрабіўшы пустое рэдагаванне.\n# Сінтаксіс наступны:\n# * Усё ад сімвала \"#\" да канца радка - каментарый.\n# * Кожны непусты радок - дакладны загаловак, які трэба ігнараваць, з рэгістрам і інш.\nКрыніцы\nСпасылкі\nГл. таксама\n #</pre> <!-- не змяняйце гэты радок -->",
"searchbutton": "Знайсці",
"ns-specialprotected": "Не дазволена правіць старонкі ў прасторы назваў {{ns:special}}.",
"titleprotected": "Назва засцерагаецца ад стварэння; ахова пастаўлена ўдзельнікам: [[User:$1|$1]].\nТлумачэнне пастаноўкі пад ахову: <em>$2</em>.",
"filereadonlyerror": "Немагчыма змяніць файл \"$1\", таму што файлавае сховішча \"$2\" зараз у рэжыме \"толькі для чытання\".\n\nСістэмны адміністратар, які абмежаваў доступ, патлумачыў гэта так: \"$3\".",
+ "invalidtitle": "Няслушная назва",
"invalidtitle-knownnamespace": "Недапушчальны загаловак з прасторай імёнаў \"$2\" і тэкстам \"$3\"",
"invalidtitle-unknownnamespace": "Недапушчальны загаловак з невядомым лікам прасторы імён $1 і тэкстам \"$2\"",
"exception-nologin": "Вы не ўвайшлі ў сістэму",
"resetpass-temp-password": "Тымчасовы пароль:",
"resetpass-abort-generic": "Змяненне пароля было спынена прыстаўкаю.",
"resetpass-expired": "Ваш пароль пратэрмінаваны. Калі ласка, устанавіце новы пароль для ўваходу ў сістэму.",
- "resetpass-expired-soft": "Ваш пароль пратэрмінаваны, яго трэба замяніць. Калі ласка, выберыце новы пароль зараз, ці націсніце \"{{int:authprovider-resetpass-skip-label}}\", каб змяніць яго пазней.",
+ "resetpass-expired-soft": "Ваш пароль пратэрмінаваны і яго трэба замяніць. Калі ласка, выберыце новы пароль зараз, ці націсніце \"{{int:authprovider-resetpass-skip-label}}\", каб змяніць яго пазней.",
+ "resetpass-validity": "Ваш пароль няверны: $1 \n\nКалі ласка, устанавіце новы пароль для ўваходу ў сістэму.",
"resetpass-validity-soft": "Ваш пароль недапушчальны: $1\n\nКалі ласка, выберыце новы пароль зараз, або націсніце \"{{int:authprovider-resetpass-skip-label}}\", каб скінуць яго пазней.",
"passwordreset": "Выслаць мне новы пароль",
"passwordreset-text-one": "Запоўніце гэту форму, каб атрымаць часовы пароль па эл.пошце.",
"histfirst": "найстарэйшыя",
"histlast": "найноўшыя",
"historysize": "({{PLURAL:$1|1 байт|$1 байты|$1 байтаў}})",
- "historyempty": "(пуста)",
+ "historyempty": "пуста",
"history-feed-title": "Гісторыя версій",
"history-feed-description": "Гісторыя версій гэтай старонкі",
"history-feed-item-nocomment": "$1 на $2",
"difference-missing-revision": "{{PLURAL:$2|$2 версія|$2 версіі|$2 версій}} гэтай розніцы ($1) {{PLURAL:$2|не знойдзена|не знойдзены}}.\n\nЗвычайна такое здараецца з-за пераходу па састарэлай спасылцы на розніцу ў старонцы, якая была выдалена.\nПадрабязнасці могуць быць у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленняў].",
"searchresults": "Вынікі пошуку",
"search-filter-title-prefix": "Шукаць толькі на старонках, назва якіх пачынаецца з «$1»",
+ "search-filter-title-prefix-reset": "Шукаць усе старонкі",
"searchresults-title": "Вынікі пошуку «$1»",
"titlematches": "Знойдзена ў назвах",
"textmatches": "Знойдзена ў тэкстах",
"group-autoconfirmed-member": "{{GENDER:$1|аўта-пацверджаны ўдзельнік|аўта-пацверджаная ўдзельніца}}",
"group-bot-member": "{{GENDER:$1|бот}}",
"group-sysop-member": "{{GENDER:$1|адміністратар}}",
+ "group-interface-admin-member": "{{GENDER:$1|адміністратар інтэрфейсу}}",
"group-bureaucrat-member": "{{GENDER:$1|бюракрат}}",
"group-suppress-member": "{{GENDER:$1|схоўваючы|схоўваючая}}",
"grouppage-user": "{{ns:project}}:Удзельнікі",
"grouppage-autoconfirmed": "{{ns:project}}:Аўтапацверджаныя ўдзельнікі",
"grouppage-bot": "{{ns:project}}:Робаты",
"grouppage-sysop": "{{ns:project}}:Адміністратары",
+ "grouppage-interface-admin": "{{ns:project}}:Адміністратары інтэрфейсу",
"grouppage-bureaucrat": "{{ns:project}}:Бюракраты",
"grouppage-suppress": "{{ns:project}}:Схоўваючыя",
"right-read": "Чытаць старонкі",
"right-reupload-own": "Запісваць паўзверх існуючага файла, які ўкладвалі самі",
"right-reupload-shared": "Перамагаць файлы з агульнага сховішча тутэйшымі файламі",
"right-upload_by_url": "Укладваць файлы з сеціўнага адраса (URL)",
- "right-purge": "ЧÑ\8bÑ\81Ñ\86Ñ\96Ñ\86Ñ\8c кÑ\8dÑ\88 плÑ\8fÑ\86оÑ\9eкÑ\96 длÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 без паÑ\86веÑ\80джаннÑ\8f",
+ "right-purge": "Ð\90Ñ\87Ñ\8bÑ\81Ñ\82ка кÑ\8dÑ\88Ñ\83 плÑ\8fÑ\86оÑ\9eкÑ\96 длÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96",
"right-autoconfirmed": "Не падпарадкоўвацца абмежаванням хуткасці, накладзеным на IP",
"right-bot": "Лічыцца аўтаматычным працэсам",
"right-nominornewtalk": "Не паведамляць пра новыя паведамленні ў адказ на дробныя праўкі размоўных старонак",
"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": "Правіць ваш спіс назірання",
"rcfilters-activefilters-hide": "Схаваць",
"rcfilters-activefilters-show": "Паказаць",
"rcfilters-activefilters-hide-tooltip": "Схаваць вобласць актыўных фільтраў",
+ "rcfilters-activefilters-show-tooltip": "Паказаць вобласць актыўных фільтраў",
"rcfilters-advancedfilters": "Пашыраныя фільтры",
"rcfilters-limit-title": "Вынікі для паказу",
"rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|змена|змены|змен}}, $2",
"rcfilters-watchlist-markseen-button": "Пазначыць усе змены як прагледжаныя",
"rcfilters-watchlist-edit-watchlist-button": "Рэдагаваць Ваш спіс назіраных старонак",
"rcfilters-watchlist-showupdated": "Змены старонак, якія Вы не наведвалі з таго часу, як яны адбыліся, выдзелены <strong>тлустым</strong> і пазначаны маркерам.",
- "rcfilters-preference-label": "СÑ\85аваÑ\86Ñ\8c палепÑ\88анÑ\83Ñ\8e веÑ\80Ñ\81Ñ\96Ñ\8e «Ð\90поÑ\88нÑ\96Ñ\85 змен»",
+ "rcfilters-preference-label": "Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ñ\96нÑ\82Ñ\8dÑ\80Ñ\84ейÑ\81 без JavaScript",
"rcfilters-preference-help": "Адкатвае рэдызайн інтэрфейсу 2017 года і ўсе інструменты, дададзеныя з тых часоў.",
- "rcfilters-watchlist-preference-label": "СÑ\85аваÑ\86Ñ\8c палепÑ\88анÑ\83Ñ\8e веÑ\80Ñ\81Ñ\96Ñ\8e Ñ\81пÑ\96Ñ\81а назÑ\96Ñ\80аннÑ\8f",
+ "rcfilters-watchlist-preference-label": "Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ñ\96нÑ\82Ñ\8dÑ\80Ñ\84ейÑ\81 без JavaScript",
"rcfilters-watchlist-preference-help": "Адкатвае рэдызайн інтэрфейсу 2017 года і ўсе інструменты, дададзеныя з тых часоў.",
"rcnotefrom": "Ніжэй {{PLURAL:$5|паказана змяненне|паказаны змены}} з <strong>$3, $4</strong> (не больш за <strong>$1</strong>).",
"rclistfrom": "Паказаць змены з $3 $2",
"recentchangeslinked-feed": "Звязаныя праўкі",
"recentchangeslinked-toolbox": "Звязаныя праўкі",
"recentchangeslinked-title": "Змяненні, якія датычаць \"$1\"",
- "recentchangeslinked-summary": "Увядзіце імя старонкі, каб убачыць змяненні на старонках, якія спасылаюцца на дадзеную старонку ці на якія яна спасылаецца. (Каб убачыць складнікі катэгорыі, увядзіце Катэгорыя:Назва катэгорыі). Старонкі, якія ўваходзяць у [[Special:Watchlist|Ваш спіс назірання]], выдзелены <strong>тлустым шрыфтам</strong>.",
+ "recentchangeslinked-summary": "Увядзіце імя старонкі, каб убачыць змяненні на старонках, на якія яна спасылаецца або якія спасылаюцца на яе (каб убачыць складнікі катэгорыі, увядзіце {{ns:category}}:Назва катэгорыі). Змены старонак з [[Special:Watchlist|Вашага спісу назірання]] выдзелены <strong>тлустым шрыфтам</strong>.",
"recentchangeslinked-page": "Назва старонкі:",
"recentchangeslinked-to": "Паказваць, замест гэтага, змяненні на старонках, што спасылаюцца сюды",
"recentchanges-page-added-to-category": "[[:$1]] дададзена ў катэгорыю",
"listfiles_size": "Памер у байтах",
"listfiles_description": "Апісанне",
"listfiles_count": "Версіі",
- "listfiles-show-all": "Уключыць старыя версіі відарысаў",
+ "listfiles-show-all": "Уключыць старыя версіі файлаў",
"listfiles-latestversion": "Актуальная версія",
"listfiles-latestversion-yes": "Так",
"listfiles-latestversion-no": "Не",
"filehist-filesize": "Аб'ём файла",
"filehist-comment": "Тлумачэнне",
"imagelinks": "Выкарыстанне файла",
- "linkstoimage": "Наступн{{PLURAL:$1|ая старонка спасылаецца|ыя $1 старонкі спасылаюцца}} на гэты файл:",
+ "linkstoimage": "{{PLURAL:$1|Наступная $1 старонка выкарыстоўвае|Наступныя $1 старонкі выкарыстоўваюць|Наступныя $1 старонак выкарыстоўваюць}} гэты файл:",
"linkstoimage-more": "На гэты файл існуюць спасылкі з больш як $1 {{PLURAL:$1|старонкі|старонак}}.\nНаступны пералік паказвае толькі {{PLURAL:$1|першую спасылку|першыя $1 з іх}}.\nТаксама ёсць [[Special:WhatLinksHere/$2|поўны пералік]].",
"nolinkstoimage": "Няма старонак, якія б спасылаліся на файл.",
"morelinkstoimage": "Паказаць [[Special:WhatLinksHere/$1|больш спасылак]] на гэты файл.",
"statistics-files": "Укладзеныя файлы",
"statistics-edits": "Праўкі старонак ад часу інсталяцыі {{SITENAME}}",
"statistics-edits-average": "Колькасць правак на 1 старонку",
- "statistics-users": "Registered [[Special:ListUsers|users]]",
+ "statistics-users": "Зарэгістраваныя ўдзельнікі",
"statistics-users-active": "Актыўныя ўдзельнікі",
"statistics-users-active-desc": "Удзельнікі, якія хоць нешта зрабілі за апошн{{PLURAL:$1|і дзень|ія $1 дзён}}",
"pageswithprop": "Старонкі з уласцівасцю старонкі",
"pageswithprop-legend": "Старонкі з пэўнай уласцівасцю",
"pageswithprop-text": "На гэтай старонцы пералічаны старонкі, якія выкарыстоўваюць пэўную уласцівасць.",
"pageswithprop-prop": "Назва ўласцівасці:",
+ "pageswithprop-reverse": "Сартаваць у зваротным парадку",
+ "pageswithprop-sortbyvalue": "Сартаваць па значэнню ўласцівасці",
"pageswithprop-submit": "Перайсці",
"pageswithprop-prophidden-long": "доўгае тэкставае значэнне ўласцівасці схавана ($1)",
"pageswithprop-prophidden-binary": "двайковае значэнне ўласцівасці схавана ($1)",
"doubleredirects": "Падвойныя перасылкі",
"doubleredirectstext": "Тут пералічаныя старонкі-перасылкі, якія паказваюць на іншыя перасылкі.\nКожны радок утрымлівае спасылкі на першую і другую перасылкі, а таксама мэту другой перасылкі, якая звычайна і ёсць \"сапраўдная\" мэтавая старонка, на якую павінна была паказваць першая перасылка.\n<del>Закрэсленыя складнікі</del> ўжо былі папраўленыя.",
"double-redirect-fixed-move": "Назва [[$1]] была перанесена.\nПасля аўтаматычнага абнаўлення зараз яна перасылае да [[$2]]",
- "double-redirect-fixed-maintenance": "Аўтаматычнае выпраўленне падвойнай перасылкі з [[$1]] на [[$2]] цягам тэхнічнага абслугоўвання.",
+ "double-redirect-fixed-maintenance": "Аўтаматычнае выпраўленне падвойнай перасылкі з [[$1]] на [[$2]] цягам тэхнічнага абслугоўвання",
"double-redirect-fixer": "Выпраўляльнік перасылак",
"brokenredirects": "Паламаныя перасылкі",
"brokenredirectstext": "Гэтыя перасылкі паказваюць на старонкі, якіх няма:",
"prefixindex": "Старонкі з назвамі на ўзор",
"prefixindex-namespace": "Усе старонкі з прэфіксам (прастора назваў «{{ns:$1}}»)",
"prefixindex-submit": "Паказаць",
- "prefixindex-strip": "Ð\9fÑ\80Ñ\8bбÑ\80аÑ\86Ñ\8c пÑ\80Ñ\8dÑ\84Ñ\96кÑ\81 Ñ\83 пеÑ\80алÑ\96кÑ\83",
+ "prefixindex-strip": "Ð\9fÑ\80Ñ\8bбÑ\80аÑ\86Ñ\8c пÑ\80Ñ\8dÑ\84Ñ\96кÑ\81 Ñ\83 вÑ\8bнÑ\96каÑ\85",
"shortpages": "Старонкі малога аб'ёму",
"longpages": "Старонкі вялікага аб'ёму",
"deadendpages": "Старонкі без спасылак",
"protectedtitles-submit": "Паказаць назвы",
"listusers": "Усе ўдзельнікі",
"listusers-editsonly": "Толькі ўдзельнікі, якія маюць праўкі",
+ "listusers-temporarygroupsonly": "Паказваць толькі ўдзельнікаў у тымчасовых групах удзельнікаў",
"listusers-creationsort": "У парадку датаў стварэння",
"listusers-desc": "Парадкаваць да памяншэння",
"usereditcount": "$1 {{PLURAL:$1|праўка|праўкі|правак}}",
"deleting-backlinks-warning": "<strong>Увага:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Іншыя старонкі]] спасылаюцца на ці ўключаюць старонку, якую вы збіраецеся выдаліць.",
"deleting-subpages-warning": "<strong>Увага:</strong> Старонка, якую Вы хочаце выдаліць, мае [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|$1 падстаронка|$1 падстаронкі|$1 падстаронак|51=болей за 50 падстаронак}}]].",
"rollback": "Адкаціць праўкі",
+ "rollback-confirmation-confirm": "Калі ласка, пацвердзіце:",
+ "rollback-confirmation-yes": "Адкат",
+ "rollback-confirmation-no": "Адмяніць",
"rollbacklink": "адкат",
"rollbacklinkcount": "адкаціць $1 {{PLURAL:$1|праўку|праўкі|правак}}",
"rollbacklinkcount-morethan": "адкаціць больш за $1 {{PLURAL:$1|праўку|праўкі|правак}}",
"tog-norollbackdiff": "রোলব্যাকের পরে সংস্করণগুলির পার্থক্য না দেখানো হোক",
"tog-useeditwarning": "কোনো সম্পাদনা পাতা ত্যাগের সময় পরিবর্তনগুলি সংরক্ষিত না হয়ে থাকলে আমাকে সাবধান করা হোক",
"tog-prefershttps": "অ্যাকাউন্টে প্রবেশ করার সময় সবসময় নিরাপদ সংযোগ ব্যবহার করুন",
+ "tog-showrollbackconfirmation": "একটি রোলব্যাক লিঙ্ক ক্লিক করার সময় একটি নিশ্চিতকরণ বার্তা দেখান",
"underline-always": "সব সময়",
"underline-never": "কখনো নয়",
"underline-default": "আবরণ বা ব্রাউজারে যেমনভাবে নির্দিষ্ট করা আছে",
"badretype": "আপনার প্রবেশ করানো পাসওয়ার্ডটি মিলছে না।",
"usernameinprogress": "এই ব্যবহারকারী নামের জন্য একটি অ্যাকাউন্ট তৈরি আগে থেকেই চলছে। দয়া করে অপেক্ষা করুন।",
"userexists": "এই ব্যবহারকারী নামটি ইতমধ্যে ব্যবহার করা হয়েছে।\nঅনুগ্রহ করে অন্য নাম বেছে নিন।",
+ "createacct-normalization": "কারিগরি সীমাবদ্ধতার কারণে আপনার ব্যবহারকারীর নাম সামঞ্জস্য করে \"$2\" করা হবে।",
"loginerror": "প্রবেশ করতে সমস্যা হয়েছে",
"createacct-error": "অ্যাকাউন্ট তৈরিতে ত্রুটি",
"createaccounterror": "অ্যাকাউন্ট তৈরি হয়নি: $1",
"specialpages-group-developer": "ডেভলপারের সরঞ্জাম",
"blankpage": "খালি পাতা",
"intentionallyblankpage": "এই পাতাটি ইচ্ছা করে খালি রাখা হয়েছে",
+ "disabledspecialpage-disabled": "এই পৃষ্ঠাটি একজন সিস্টেম প্রশাসক দ্বারা নিষ্ক্রিয় করা হয়েছে।",
"external_image_whitelist": " #এই লাইন ঠিক যেমন আছে<প্রাক> তেমন রাখুন<pre>\n #রেগুলার এক্সপ্রেশনের টুকরা নীচে (শুধুমাত্র অংশ / / মধ্যে যে যায়) বসান\n#এইগুলি এক্সটার্নাল (hotlinked) ইমেজের URL-এর সাথে মেলানো হবে\n#যেগুলি মিলবে, সেগুলি চিত্র হিসাবে প্রদর্শিত হবে, অন্যথায় শুধুমাত্র ইমেজ লিঙ্ক প্রদর্শিত হবে\n#যে লাইনের প্রারম্ভে # আছে সেই লাইনগুলি মন্তব্যসমূহ হিসাবে ব্যবহার করা হয়\n#এটি কেস-অসংবেদী\n\n#এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>",
"tags": "বৈধ পরিবর্তন ট্যাগ",
"tag-filter": "[[Special:Tags|ট্যাগ]] ছাঁকনি:",
"delete-confirm": "Supressió de la pàgina «$1»",
"delete-legend": "Suprimeix",
"historywarning": "<strong>Avís:</strong> la pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|revisió|revisions}}:",
- "historyaction-submit": "Mostra",
+ "historyaction-submit": "Mostra les revisions",
"confirmdeletetext": "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.\nConfirmeu que realment ho voleu fer, que enteneu les\nconseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
"actioncomplete": "Acció realitzada",
"actionfailed": "L'acció ha fallat",
"logentry-import-upload": "$1 {{GENDER:$2|بارکرد}} $3 بە بەکارھێنانی [[special:Import|بارکەر]]",
"logentry-import-interwiki": "$1 $3ی لە ویکییەکی ترەوە ھاوردەکرد",
"logentry-import-interwiki-details": "$1 $3ی لە $5ەوە ھەناردە کرد ($4 بەسەرداچوونەوە)",
+ "logentry-merge-merge": "$1 $3ی لەگەڵ $4 تێکەڵکرد (بەسەرداچوونەکان لە $5 زیاترن)",
"logentry-move-move": "$1 پەڕەی $3ی {{GENDER:$2|گواستەوە}} بۆ $4",
"logentry-move-move-noredirect": "$1 پەڕەی $3ی بە بێ بەجێھشتنی ڕەوانەکەرێک {{GENDER:$2|گواستەوە}} بۆ $4",
"logentry-move-move_redir": "$1 پەڕەی $3 {{GENDER:$2|گواستەوە}} بۆ $4 کە پێشتر ڕەوانەکەر بوو",
"Jorn Ari",
"Fnielsen",
"Weblars",
- "Kranix"
+ "Kranix",
+ "Psl85"
]
},
"tog-underline": "Understreg link:",
"tog-norollbackdiff": "Vis ikke forskel efter udførelse af en tilbagerulning",
"tog-useeditwarning": "Advar mig, hvis jeg forlader en redigeringsside med ændringer, der ikke er gemt.",
"tog-prefershttps": "Brug altid en sikker forbindelse, når jeg er logget ind",
+ "tog-showrollbackconfirmation": "Bed om bekræftelse når der bliver klikket på et tilbagerulningslink",
"underline-always": "Altid",
"underline-never": "Aldrig",
"underline-default": "Standard for browseren eller udseendet",
"edithelp": "Hjælp til redigering",
"helppage-top-gethelp": "Hjælp",
"mainpage": "Forside",
- "mainpage-description": "Hovedside",
+ "mainpage-description": "Forside",
"policy-url": "Project:Politik",
"portal": "Fællesskabs portal",
"portal-url": "Project:Fællesskabs portal",
"cannotlogoutnow-title": "Kan ikke logge af på nuværende tidspunkt",
"cannotlogoutnow-text": "Det er ikke muligt at logge af når du bruger $1.",
"welcomeuser": "Velkommen, $1!",
- "welcomecreation-msg": "Din konto er blevet oprettet.\nDu kan ændre dine {{SITENAME}} [[Special:Indstilling|indstillinger]] hvis du ønsker.",
+ "welcomecreation-msg": "Din konto er blevet oprettet.\nDu kan ændre dine {{SITENAME}} [[Special:Preferences|indstillinger]] hvis du ønsker.",
"yourname": "Brugernavn:",
"userlogin-yourname": "Brugernavn",
"userlogin-yourname-ph": "Indtast dit brugernavn",
"badretype": "De indtastede adgangskoder er ikke ens.",
"usernameinprogress": "En oprettelse af konto for dette brugernavn er allerede i gang.\nVent venligst.",
"userexists": "Det brugernavn, du har valgt, er allerede i brug.\nVælg venligst et andet brugernavn.",
+ "createacct-normalization": "Dit brugernavn vil blive ændret til «$2» på grund af tekniske begrænsninger.",
"loginerror": "Logon mislykket",
"createacct-error": "Fejl ved kontooprettelse",
"createaccounterror": "Kunne ikke oprette brugerkonto: $1",
"content-json-empty-array": "Tomt matrix",
"deprecated-self-close-category": "Sider, der bruger ugyldige, selvlukkende HTML-tags",
"deprecated-self-close-category-desc": "Siden bruger ugyldige selvlukkende HTML tags, som <code><b/></code> eller <code><span/></code>. De vil snart blive ændret i overensstemmelse med HTML5-specifikationen, så de ikke kan bruges i wikitext.",
+ "duplicate-args-warning": "<strong>Advarsel</strong>: [[:$1]] kaldes [[:$2]] med flere end en værdi for \"$3\"-parameteren. Bare den sidst angitte værdien vil bruges.",
"duplicate-args-category": "Sider der bruger samme argument mere end en gang i en skabelon",
"duplicate-args-category-desc": "Siden indeholder en skabelon hvor et argument er brugt mere end en gang, som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Advarsel: Der er for mange beregningstunge oversætter-funktionskald på denne side.\n\nDer bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 kald}}.",
"post-expand-template-argument-category": "Sider med udeladte skabelonparametre",
"parser-template-loop-warning": "Skabelonløkke fundet: [[$1]]",
"template-loop-category": "Sider med skabelonløkker",
+ "template-loop-category-desc": "Siden indeholder en malløkke, altså en skabelon som kalder sig selv rekursivt.",
"parser-template-recursion-depth-warning": "En skabelon er rekursivt inkluderet for mange gange ($1)",
"language-converter-depth-warning": "Dybdegrænse for sprogkonvertering overskredet ($1)",
"node-count-exceeded-category": "Sider hvor antal noder er overskredet",
"histfirst": "ældste",
"histlast": "nyeste",
"historysize": "($1 {{PLURAL:$1|Byte|Bytes}})",
- "historyempty": "(tom)",
+ "historyempty": "tom",
"history-feed-title": "Versionshistorie",
"history-feed-description": "Versionshistorie for denne side i {{SITENAME}}",
"history-feed-item-nocomment": "$1 med $2",
"right-reupload-own": "Overskrive en eksisterende fil, som er lagt op af brugeren selv",
"right-reupload-shared": "Lægge en lokal fil op, selvom den allerede findes centralt",
"right-upload_by_url": "Lægge en fil op fra en URL",
- "right-purge": "Nulstille sidens cache uden bekræftelse",
+ "right-purge": "Nulstil sidens cache for en side",
"right-autoconfirmed": "Påvirkes ikke af IP-baserede hastighedsgrænser",
"right-bot": "Redigeringer markeres som robot",
"right-nominornewtalk": "Mindre ændringer på diskussionssider markerer ikke disse med nyt indhold",
"deleteprotected": "Du kan ikke slette denne side, fordi den er beskyttet.",
"deleting-backlinks-warning": "<strong>Advarsel:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] henviser til eller inkluderer den side, du er ved at slette.",
"rollback": "Fjern redigeringer",
+ "rollback-confirmation-confirm": "Bekræft venligst:",
+ "rollback-confirmation-yes": "Tilbagerul",
+ "rollback-confirmation-no": "Fortryd",
"rollbacklink": "rul tilbage",
"rollbacklinkcount": "rul {{PLURAL:$1|en redigering|$1 redigeringer}} tilbage",
"rollbacklinkcount-morethan": "rul mere end {{PLURAL:$1|en redigering|$1 redigeringer}} tilbage",
"ipb-change-block": "Forny brugerens blokering med disse indstillinger",
"ipb-confirm": "Bekræft blokering",
"ipb-partial": "Delvist",
+ "ipb-partial-help": "Specifikke sider eller navnerum.",
"ipb-pages-label": "Sider",
"ipb-namespaces-label": "Navnerum",
"badipaddress": "IP-adressen/brugernavnet er udformet forkert eller eksistere ikke.",
"watchthis": "Na pele de seyr ke",
"savearticle": "Pele qeyd ke",
"savechanges": "Vurnayışan qeyd ke",
- "publishpage": "Riperri bare ke",
+ "publishpage": "Pele neşr kerê",
"publishchanges": "Vırnayışan qeyd ke",
"savearticle-start": "Pele qeyd ke...",
"savechanges-start": "Vurnayışan qeyd ke...",
"template-protected": "(şeveknaye)",
"template-semiprotected": "(nime staryayış)",
"hiddencategories": "Ena per de {{PLURAL:$1|1 kategoriyo nımıte|$1 kategoriyê nımıtey}} muhtewa benê:",
- "edittools": "<div id=\"specialcharss\" class=\"toccolours specialchars\" style=\"margin-top:.5em; padding: .3em .5em; font-size: 100%; color:#aaa; text-align:left;\" title=\"{{int:bw-edittools-tooltip}}\">\n<p class=\"specialbasic\" id=\"Standard\">\n'''{{int:bw-edittools-lead-in}}''' \n<charinsert>Á á É é Í í Ó ó Ú ú Ý ý</charinsert> –\n<charinsert>À à È è Ì ì Ò ò Ù ù </charinsert> –\n<charinsert> â Ê ê Î î Ô ô Û û </charinsert> –\n<charinsert>Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ</charinsert> –\n<charinsert>Æ æ Ø ø Œ œ ẞ ß </charinsert> –\n<charinsert>Å å Ů ů </charinsert> –\n<charinsert>à ã Ẽ ẽ ɛ̃ Ĩ ĩ Ñ ñ Õ õ ɔ̃ Ũ ũ </charinsert> –\n<charinsert>Ð ð Þ þ </charinsert> –\n<charinsert>Ç ç Ģ ģ Ķ ķ Ļ ļ Ņ ņ Ŗ ŗ Ş ş Ţ ţ </charinsert> –\n<charinsert>Ć ć Ĺ ĺ Ń ń Ŕ ŕ Ś ś Ý ý Ź ź </charinsert> –\n<charinsert>Č č Ď ď Ľ ľ Ň ň Ř ř Š š Ť ť Ž ž </charinsert> –\n<charinsert>Ǎ ǎ Ě ě Ǐ ǐ Ǒ ǒ Ǔ ǔ </charinsert> –\n<charinsert>Ā ā Ē ē Ī ī Ō ō Ū ū </charinsert> –\n<charinsert>ǖ ǘ ǚ ǜ </charinsert> –\n<charinsert>Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŵ ŵ Ŷ ŷ </charinsert> –\n<charinsert>Ă ă Ğ ğ Ŭ ŭ </charinsert> –\n<charinsert>Ċ ċ Ė ė Ġ ġ Għ għ İ ı Ż ż </charinsert> –\n<charinsert>Ą ą Ę ę Į į Ų ų </charinsert> –\n<charinsert>Ő ő Ű ű </charinsert> –\n<charinsert>Đ đ Ħ ħ Ł ł Ŀ ŀ </charinsert> –\n<charinsert>Ɖ ɖ Ɛ ɛ Ƒ ƒ Ɣ ɣ Ŋ ŋ Ɔ ɔ Ʋ ʋ </charinsert> -\n<charinsert>Ə ə </charinsert> –\n<charinsert>– — ’</charinsert> –\n<charinsert>~ | ° ¹ ² ³ ⅛ ¼ ⅓ ⅜ ½ ⅝ ¾ ⅔ ⅞ € $ ¥ £ † × ← → ↔ ↑ ± ≠ © ® ™ ‰ «+» ‹+› „+“ „+” ‚+‘ ¡ ¿ …</charinsert> –\n<charinsert>&nbsp; [[Category:+]] #REDIRECT[[+]] {{msg-mw|+|notext=1}} !!FUZZY!! ~~~~ <nowiki>+</nowiki></charinsert>\n<charinsert>ڈ ڑ ٹ </charinsert>\n<charinsert>ټ څ ځ ډ ړ ږ ښ ڼ ؤ ي ې ۍ ئ </charinsert>\n<charinsert>{{{+}}} {{+}} {{subst:+}} <noinclude>+</noinclude></charinsert>\n<charinsert><!-- + --> <br /></charinsert>\n</p></div>",
+ "edittools": "<!-- Beno ke no metın bınê formanê vurnayışi û barkerdışi de bımocniyo. -->",
"edittools-upload": "-",
"nocreatetext": "{{SITENAME}}, Perrê newey vıraştış rê destur çıniyo.\nŞıma şenê tepeya şorê u eke şıma qeydbiyayey [[Special:UserLogin|şıma şenê yew hesab akerê]], eke şıma niyê [[Special:UserLogin|şıma şenê qeyd bıbê]].",
"nocreate-loggedin": "Desturê şıma çıniyo ke pelanê neweyan vırazê.",
"prevn": "{{PLURAL:$1|$1}} verên",
"nextn": "{{PLURAL:$1|$1}} peyên",
"prev-page": "Perra verêne",
- "next-page": "pela peyco",
+ "next-page": "pela bahdoyêne",
"prevn-title": "$1o verên {{PLURAL:$1|netice|neticeyan}}",
"nextn-title": "$1o ke yeno {{PLURAL:$1|netice|neticey}}",
"shown-title": "Her pele sero $1 {{PLURAL:$1|netici|netica}} bımocne",
"searchprofile-articles": "Pelê zerreki",
"searchprofile-images": "Multimedya",
"searchprofile-everything": "Her çi",
- "searchprofile-advanced": "Hirayên",
+ "searchprofile-advanced": "Herayên",
"searchprofile-articles-tooltip": "$1 de cı geyre",
"searchprofile-images-tooltip": "Dosya cı geyre",
"searchprofile-everything-tooltip": "Tedeesteyan hemine cı geyre (pelanê werênayışi zi tey)",
"unusedtemplates": "Şablonê ke nêguriyenê",
"unusedtemplatestext": "no pel, {{ns:template}} pelê ke pelê binan de nêaseni, ninan keno.",
"unusedtemplateswlh": "linkanê binî",
- "randompage": "Perra raştameyiye",
+ "randompage": "Pela raştameyiye",
"randompage-nopages": "Na {{PLURAL:$2|heruna namey|heruna nameyan}} de nê peli çıniyê: $1.",
"randomincategory": "Ena kategoriye dı pela raştameye",
"randomincategory-invalidcategory": "\"$1\" yew nameyê kategoriya vêrdiye niyo.",
"checkbox-none": "Çıniyo",
"checkbox-invert": "Dimlaşt ke",
"allpages": "Pêro peli",
- "nextpage": "Pela peyco ($1)",
+ "nextpage": "Pela bahdoyêne ($1)",
"prevpage": "Pela veri ($1)",
"allpagesfrom": "Herfa kı pa liste bo:",
"allpagesto": "Perranê ke ena herfe qediyenê bımotne:",
"delete-warning-toobig": "no pel wayirê tarixê vurnayiş ê derg o, $1 {{PLURAL:$1|revizyonê|revizyonê}} seri de.\nhewn a kerdışê ıney {{SITENAME}} şuxul bıne gırano;\nbı diqqet dewam kerê.",
"deleteprotected": "Şıma nêşenê ena perer esternê, çıkı per starya ya.",
"rollback": "vurnayişan tepiya bıger",
+ "rollback-confirmation-yes": "Peyser biya",
"rollback-confirmation-no": "Bıtexelne",
"rollbacklink": "ageyrayış",
"rollbacklinkcount": "$1 {{PLURAL:$1|vurnayış|vurnayışi}} peyd gıroti",
"tooltip-search-go": "Ebe nê namey tami şo yew pela ke esta",
"tooltip-search-fulltext": "Pelan miyan de nê metıni cı geyre",
"tooltip-p-logo": "Şo perra seri",
- "tooltip-n-mainpage": "Şo perra seri",
+ "tooltip-n-mainpage": "Şo pela seri",
"tooltip-n-mainpage-description": "Şo perra seri",
"tooltip-n-portal": "Heqa procey de, kes çı şeno bıkero, çı kamca vêniyeno",
"tooltip-n-currentevents": "Vurnayışanê peyênan de melumatê pey bıvêne",
"tooltip-ca-nstab-category": "Pela kategoriye bıvêne",
"tooltip-minoredit": "Ney vırnayışo werdi nışan bıkerê",
"tooltip-save": "Vurnayışanê xo qeyd ke",
- "tooltip-publish": "Vırnayışê xo aşkera ke",
+ "tooltip-publish": "Vurnayışê xo neşr kerê",
"tooltip-preview": "Vurnayışanê xo çım ra bıviyarnê. Qeydkerdış ra ver bıgurê cı!",
"tooltip-diff": "Kamci vırnayışê ke şıma nuştey sero kerdê, inan bıvênê.",
"tooltip-compareselectedversions": "Ena per de ferqê rewziyonan de dı weçinaya bıvinê",
"brackets": "[$1]",
"quotation-marks": "\"$1\"",
"imgmultipageprev": "← pela veri",
- "imgmultipagenext": "pela peyco →",
+ "imgmultipagenext": "pela bahdoyêne →",
"imgmultigo": "Şo!",
"imgmultigoto": "Şo pela da $1",
"img-lang-default": "(zıwano hesabiyaye)",
"img-lang-go": "Şo",
"ascending_abbrev": "berz",
"descending_abbrev": "nızm",
- "table_pager_next": "Pela peyco",
+ "table_pager_next": "Pela bahdoyêne",
"table_pager_prev": "Pela veri",
"table_pager_first": "Pela sıfteyêne",
"table_pager_last": "Pela peyêne",
"pageinfo-category-subcats": "Αριθμός υποκατηγοριών",
"pageinfo-category-files": "Αριθμός αρχείων",
"pageinfo-user-id": "Αναγνωριστικό χρήση",
+ "pageinfo-view-protect-log": "Δείτε το αρχείο καταγραφών προστασίας για αυτή τη σελίδα.",
"markaspatrolleddiff": "Σήμανση ως ελεγμένο",
"markaspatrolledtext": "Σήμανση αυτής της σελίδας ως ελεγμένης",
"markaspatrolledtext-file": "Επισημάνετε αυτή τη έκδοση του αρχείου ως ελεγμένη",
"delete-confirm": "Delete \"$1\"",
"delete-legend": "Delete",
"historywarning": "<strong>Warning:</strong> The page you are about to delete has a history with $1 {{PLURAL:$1|revision|revisions}}:",
- "historyaction-submit": "Show",
+ "historyaction-submit": "Show revisions",
"confirmdeletetext": "You are about to delete a page along with all of its history.\nPlease confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].",
"actioncomplete": "Action complete",
"actionfailed": "Action failed",
"logentry-rights-autopromote": "$1 automatikoki $4tik $5ra {{GENDER:$2|igo}} egin zaio",
"logentry-upload-upload": "$1(e)k $3 {{GENDER:$2|igo du}}",
"logentry-upload-overwrite": "$1(e)k $3(r)en bertsio berria {{GENDER:$2|igo du}}",
- "logentry-upload-revert": "$1(e)k $3 {{GENDER:$2|igo du}}",
+ "logentry-upload-revert": "$1(e)k $3 bertsio zahar batera {{GENDER:$2|itzuli du}}",
"log-name-managetags": "Etiketa kudeatze erregistroa",
"log-description-managetags": "Orrialde honetan [[Special:Tags|etiketekin]] lotutako kudeaketa-zereginak zerrendatzen dira. Saioak administratzaileak eskuz egiten dituen ekintzak soilik ditu; Wiki softwarerrarekin etiketak sortu edo ezabatzeko ahalmenarekin erregistro honetan erregistratutako sarrerarik gabe.",
"logentry-managetags-create": "$1 lankideak \"$4\" etiketa {{GENDER:$2|sortu du}}",
"edit-gone-missing": "Sivun päivitys ei onnistunut.\nSe on ilmeisesti poistettu.",
"edit-conflict": "Päällekkäinen muokkaus.",
"edit-no-change": "Muokkauksesi sivuutettiin, koska tekstiin ei tehty mitään muutoksia.",
+ "edit-slots-cannot-add": "{{PLURAL:$1|Seuraava slotti ei ole tuettu|Seuraavat slotit eivät ole tuettuja}} täällä: $2.",
+ "edit-slots-cannot-remove": "{{PLURAL:$1|Seuraava slotti vaaditaan eikä sitä voi poistaa|Seuraavat alueet vaaditaan eikä niitä voida poistaa}}: $2.",
+ "edit-slots-missing": "{{PLURAL:$1|Seuraava slotti puuttuu|Seuraavat slotit puuttuvat}}: $2.",
"postedit-confirmation-created": "Sivu on nyt luotu.",
"postedit-confirmation-restored": "Sivu on nyt palautettu (aiempaan versioonsa).",
"postedit-confirmation-saved": "Muokkauksesi on tallennettu.",
"defaultmessagetext": "Viestin oletusteksti",
"content-failed-to-parse": "Sisältö tyypiltään $2 ei jäsenny tyypiksi $1: $3",
"invalid-content-data": "Virheellinen sisältö",
- "content-not-allowed-here": "Sivun [[:$2]] sisältö ei voi olla tyyppiä $1.",
+ "content-not-allowed-here": "Sivun [[:$2]] sisältö ei voi olla tyyppiä \"$1\" slotissa \"$3\"",
"editwarning-warning": "Tältä sivulta poistuminen saattaa aiheuttaa kaikkien tekemiesi muutosten katoamisen.\nJos olet kirjautunut sisään, voit poistaa tämän varoituksen käytöstä omien asetuksien osiossa ”{{int:prefs-editing}}”.",
"editpage-invalidcontentmodel-title": "Sisältömalli ei ole tuettu",
"editpage-invalidcontentmodel-text": "Sisältömalli ”$1” ei ole tuettu.",
"watcherrortext": "Sivun ”$1” tarkkailulista-asetusten muutoksissa tapahtui virhe.",
"enotif_reset": "Merkitse kaikki sivut nähdyiksi",
"enotif_impersonal_salutation": "{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä",
- "enotif_subject_deleted": "{{GENDER:$2|$2}} poisti {{GRAMMAR:elative|{{SITENAME}}}} sivun $1",
- "enotif_subject_created": "{{GENDER:$2|$2}} loi {{GRAMMAR:illative|{{SITENAME}}}} sivun $1",
- "enotif_subject_moved": "{{GENDER:$2|$2}} siirsi {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1",
- "enotif_subject_restored": "{{GENDER:$2|$2}} palautti {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1",
- "enotif_subject_changed": "{{GENDER:$2|$2}} muutti {{GRAMMAR:inessive|{{SITENAME}}}} sivua $1",
- "enotif_body_intro_deleted": "{{GENDER:$2|$2}} poisti {{GRAMMAR:elative|{{SITENAME}}}} sivun $1 $PAGEEDITDATE ($3).",
+ "enotif_subject_deleted": "$2 {{GENDER:$2|poisti}} {{GRAMMAR:elative|{{SITENAME}}}} sivun $1",
+ "enotif_subject_created": "$2 {{GENDER:$2|loi}} {{GRAMMAR:illative|{{SITENAME}}}} sivun $1",
+ "enotif_subject_moved": "$2 {{GENDER:$2|siirsi}} {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1",
+ "enotif_subject_restored": "$2 {{GENDER:$2|palautti}} {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1",
+ "enotif_subject_changed": "$2 {{GENDER:$2|muutti}} {{GRAMMAR:inessive|{{SITENAME}}}} sivua $1",
+ "enotif_body_intro_deleted": "$2 {{GENDER:$2|poisti}} {{GRAMMAR:elative|{{SITENAME}}}} sivun $1 $PAGEEDITDATE ($3).",
"enotif_body_intro_created": "{{GENDER:$2|$2}} loi {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.",
"enotif_body_intro_moved": "{{GENDER:$2|$2}} siirsi {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.",
"enotif_body_intro_restored": "{{GENDER:$2|$2}} palautti {{GRAMMAR:inessive|{{SITENAME}}}} sivun $1 $PAGEEDITDATE. Sivun nykyinen versio on osoitteessa $3.",
"deletereasonotherlist": "Muu syy",
"deletereason-dropdown": "* Yleiset poistosyyt\n** Spam tai mainossivu\n** Vandalismi\n** Tekijänoikeusrikkomus\n** Sivun tekijän pyyntö\n** Virheellinen ohjaus",
"delete-edit-reasonlist": "Muokkaa poistosyitä",
- "delete-toobig": "Tällä sivulla on pitkä muokkaushistoria, yli $1 {{PLURAL:$1|versio|versiota}}. \nTämänkaltaisten sivujen poistamista on rajoitettu. Tällä ehkäistään sivuston {{SITENAME}} vaurioitumista tahattomasti.",
+ "delete-toobig": "Tällä sivulla on pitkä muokkaushistoria, yli $1 {{PLURAL:$1|versio|versiota}}. \nTämänkaltaisten sivujen poistamista on rajoitettu. Tällä ehkäistään {{GRAMMAR:genitive|{{SITENAME}}}} vaurioitumista tahattomasti.",
"delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.",
"deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.",
"deleting-backlinks-warning": "<strong>Varoitus:</strong> Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], taikka sivu on sisällytetty muuhun sivuun.",
"mycontris": "Muokkaukset",
"anoncontribs": "Muokkaukset",
"contribsub2": "Käyttäjän {{GENDER:$3|$1}} ($2) muokkaukset",
+ "contributions-subtitle": "Käyttäjän {{GENDER:$3|$1}} muokkaukset",
"contributions-userdoesnotexist": "Käyttäjätunnusta ”$1” ei ole rekisteröity.",
+ "negative-namespace-not-supported": "Negatiivisia arvoja sisältäviä nimiavaruuksia ei tueta.",
"nocontribs": "Näihin ehtoihin sopivia muokkauksia ei löytynyt.",
"uctop": "uusin",
"month": "Alkaen kuukaudesta (ja aiemmin):",
"ip_range_toolow": "IP-alueet eivät käytännöllisesti katsoen ole sallittuja.",
"proxyblocker": "Välityspalvelinesto",
"proxyblockreason": "IP-osoitteestasi on estetty muokkaukset, koska se on avoin välityspalvelin. Ota yhteyttä Internet-palveluntarjoajaasi tai tekniseen tukeen ja kerro heille tästä tietoturvaongelmasta.",
- "sorbsreason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla sivustolla {{SITENAME}}.",
- "sorbs_create_account_reason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla sivustolla {{SITENAME}}. \nEt voi luoda käyttäjätunnusta.",
+ "sorbsreason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla {{GRAMMAR:inessive|{{SITENAME}}}}.",
+ "sorbs_create_account_reason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla {{GRAMMAR:inessive|{{SITENAME}}}}.\nEt voi luoda käyttäjätunnusta.",
"softblockrangesreason": "Anonyymit muokkaukset eivät ole sallittuja IP-osoitteestasi ($1). Ole hyvä ja kirjaudu.",
"xffblockreason": "Yhteydet IP-osoitteesta, joka löytyy sinun tai käyttämäsi välipalvelimen X-Forwarded-For-otsakkeesta, on estetty. Alkuperäinen estämisen syy oli: $1",
"cant-see-hidden-user": "Käyttäjä, jota yrität estää, on jo estetty ja käyttäjänimi on piilotettu. \nKoska sinulla ei ole hideuser-oikeutta, et voi nähdä tai muuttaa käyttäjän estoasetuksia.",
"logentry-partialblock-block-page": "the {{PLURAL:$1|page|pages}} $2",
"logentry-partialblock-block-ns": "the {{PLURAL:$1|namespace|namespaces}} $2",
"logentry-partialblock-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} from editing $7 with an expiration time of $5 $6",
- "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} muokkauseston asetuksia estäen muokkausten tekemisen {{PLURAL:$8||sivuihin}} $7. Eston kesto on $5 $6",
+ "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} muokkauseston asetuksia estäen muokkausten tekemisen $7. Eston kesto on $5 $6",
"logentry-non-editing-block-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} suorittamasta määrättyjä toimenpiteitä (lukuun ottamatta muokkaamista). Eston kesto on $5 $6",
"logentry-non-editing-block-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} toimintaeston asetuksia, jotka koskevat määrättyjä toimenpiteitä. Eston kesto on $5 $6",
"logentry-suppress-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
"create-local": "Lokale beskriuwing tafoegje",
"delete": "Fuortsmite",
"undelete_short": "$1 {{PLURAL:$1|ferzje|ferzjes}} weromsette",
- "protect": "Skoattel",
+ "protect": "Skoattelje",
"protect_change": "feroarje nivo fan skoatteljen",
"unprotect": "Jou frij",
"newpage": "Nije side",
"passwordremindertitle": "Nij tydlik wachtwurd foar {{SITENAME}}",
"passwordremindertext": "Immen (nei alle gedachten jo, fan ynternetadres $1) had in nij wachtwurd\nfoar {{SITENAME}} ($4) oanfrege. Der is in tydlik wachtwurd foar meidogger\n\"$2\" makke en ynstelt as \"$3\". As dat jo bedoeling wie, melde jo jo dan\nno oan en kies in nij wachtwurd. Dyn tydlik wachtwurd komt yn {{PLURAL:$5|ien dei|$5 dagen}} te ferfallen.\nDer is in tydlik wachtwurd oanmakke foar meidogger \"$2\": \"$3\".\n\nAs immen oars as jo dit fersyk dien hat of at it wachtwurd jo tuskentiidsk wer yn 't sin kommen is en\njo it net langer feroarje wolle, dan kinne jo dit berjocht ferjitte en\nfierdergean mei it brûken fan jo âlde wachtwurd.",
"noemail": "Der is gjin e-postadres foar meidogger \"$1\".",
- "passwordsent": "In nij wachtwurd is tastjoerd oan it e-postadres foar \"$1\". Jo kinne jo wer oanmelde as jo it wachtwurd ûntfongen hawwe.",
+ "passwordsent": "Der is in nij wachtwurd ferstjoerd nei it opjûne e-mailadres fan \"$1\".\nMeld jo nei ûntfangst op 'e nij oan.",
"blocked-mailpassword": "Jo IP-adres is blokkearre foar it meitsjen fan feroarings. Om misbrûk tefoaren te kommen is it net mûglik in oar wachtwurd oan te freegjen.",
"eauthentsent": "Foar befêstiging is jo in netpostberjocht tastjoerd op it adres dat jo ynsteld hawwe. Der wurdt gjin oare netpost stjoerd, oant jo it adres befêstigje sa't it yn it netpostberjocht stiet.",
"throttled-mailpassword": "Yn {{PLURAL:$1|de lêste oere|de lêste $1 oeren}} is der al in wachtwurdwink ferstjoerd.\nOm misbrûk tefoaren te kommen wurdt der mar ien wachtwurdwink yn 'e {{PLURAL:$1|oere|$1 oeren}} ferstjoerd.",
"editing": "Bewurkje \"$1\"",
"creating": "$1 oanmeitsje",
"editingsection": "Bewurkje $1 (seksje)",
- "editingcomment": "Dwaande mei bewurkjen fan $1 (opmerking)",
+ "editingcomment": "Bewurkjen fan $1 (nij mêd)",
"editconflict": "Tagelyk bewurke: \"$1\"",
"explainconflict": "In oar hat de side feroare sûnt jo begûn binne mei it bewurkjen.\nIt earste bewurkingsfjild is hoe't de tekst wilens wurden is.\nJo feroarings stean yn it twadde fjild.\nDy wurde allinnich tapast safier as jo se yn it earste fjild ynpasse.\n'''Allinnich''' de tekst út it earste fjild kin fêstlein wurde.",
"yourtext": "Jo tekst",
"showingresults": "Totaal {{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1</strong> resultaten}}, hjirûnder werjûn fan #<strong>$2</strong> ôf.",
"search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> fan <strong>$3</strong>|Resultaten <strong>$1 - $2</strong> fan <strong>$3</strong>}}",
"search-nonefound": "Der binne gjin resultaten foar jo sykopdracht.",
- "powersearch-legend": "Sykje",
+ "powersearch-legend": "Utwreidich sykje",
"powersearch-ns": "Sykje yn nammeromten:",
"powersearch-togglelabel": "Oantikje:",
"powersearch-toggleall": "Alle",
"powersearch-togglenone": "Gjin",
"powersearch-remember": "Seleksje ûnthâlde foar sykopdrachten yn 'e takomst",
"search-external": "Utwindich sykje",
- "searchdisabled": "<p>Op it stuit stiet it trochsykjen fan tekst út omdat dizze funksje tefolle kompjûterkapasiteit ferget. As we nije apparatuer krije, en dy is ûnderweis, dan wurdt dizze funksje wer aktyf. Oant salang kinne jo sykje fia Google:</p>",
+ "searchdisabled": "Sykjen op {{SITENAME}} is útskeakele.\nJo kinne yn 'e tuskentiid mei Google sykje.\nTink derom dat harren yndeksearring fan 'e ynhâld op {{SITENAME}} ferâldere wêze kin.",
"preferences": "Foarkarren",
"mypreferences": "Foarkarren",
"prefs-edits": "Tal bewurkings:",
"skin-preview": "Proefbyld",
"datedefault": "Gjin foarkar",
"prefs-user-pages": "Meidoggersiden",
- "prefs-personal": "Persoanlike gegevens",
+ "prefs-personal": "Meidogger",
"prefs-rc": "Koartlyn feroare",
"prefs-watchlist": "Folchlist",
"prefs-editwatchlist": "Folchlist bewurkje",
"right-deletedhistory": "Wiske ferzjes besjen, sûnder sjen te kinnen wat wiske is.",
"right-browsearchive": "Wiske siden besjen",
"right-undelete": "Wiske siden tebeksette",
- "right-suppressrevision": "Ferskûle ferzjes besjen en tebeksette",
+ "right-suppressrevision": "Beskate sideferzjes fan in meidogger besjen, ferbergje of net ferbergje",
"right-suppressionlog": "Net-publike logboeken besjen",
"right-block": "Oare meidoggers de mûglikheid ta bewurkjen ôfnimme",
"right-blockemail": "In meidogger it rjocht ta it ferstjoeren fan e-mail ôfnimme",
"recentchanges-legend-heading": "<strong>Leginda:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}<br />(sjoch ek de [[Special:NewPages|list mei nije siden]])",
"rcfilters-legend-heading": "<strong>List fan ôfkoartings:</strong>",
- "rcnotefrom": "Dit binne de feroarings sûnt <b>$2</b> (maksimaal <b>$1</b>).",
+ "rcnotefrom": "Hjirûnder {{PLURAL:$5|stiet de feroaring|steane de feroarings}} sûnt <strong>$3, $4</strong> (maksimaal <strong>$1</strong> werjûn).",
"rclistfrom": "Jou nije feroarings, begjinnende mei $3 $2",
"rcshowhideminor": "Lytse feroarings $1",
"rcshowhideminor-show": "werjaan",
"rcshowhidemine": "Myn bewurkings $1",
"rcshowhidemine-show": "werjaan",
"rcshowhidemine-hide": "ferbergje",
- "rclinks": "Jou $1 nije feroarings yn de lêste $2 dagen",
+ "rclinks": "Jou de lêste $1 feroarings fan 'e lêste $2 dagen",
"diff": "fersk.",
"hist": "skied.",
"hide": "gjin",
"recentchangeslinked-to": "Feroarings oan siden mei ferwizings nei dizze side besjen",
"upload": "Bied bestân oan",
"uploadbtn": "Bied bestân oan",
- "reuploaddesc": "Werom nei oanbied-side.",
+ "reuploaddesc": "Opladen annulearje en weromgean nei it oanbiedformulier",
"uploadnologin": "Net oanmeld",
"uploadnologintext": "Jo moatte $1 om bestannen oplade te kinnen.",
"upload_directory_missing": "De heechlaadmap ($1) is der net en koe net oanmakke wurde troch de webserver.",
"tooltip-pt-createaccount": "Jo wurde fan herten útnûge in akkount oan te meitsjen en jo oan te melden, mar it hoecht net.",
"tooltip-ca-talk": "Oerlis oer de ynhâldlike side",
"tooltip-ca-edit": "Dizze side bewurkje",
- "tooltip-ca-addsection": "In opmerking tafoegje oan de oerlis-side.",
+ "tooltip-ca-addsection": "In nij mêd tafoegje",
"tooltip-ca-viewsource": "Dizze side is skoattele, mar jo kinne de boarne wol besjen.",
"tooltip-ca-history": "Eardere ferzjes fan dizze side",
"tooltip-ca-protect": "Dizze side befeiligje",
"mypreferencesprotected": "Դուք բավարար իրավունքներ չունեք Ձեր նախընտրությունները խմբագրելու համար։",
"ns-specialprotected": "«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։",
"titleprotected": "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։\nՏրված պատճառն է՝ <em>$2</em>։",
+ "invalidtitle": "Սխալ վերնագիր",
"exception-nologin": "Չեք մտել համակարգ",
"exception-nologin-text": "Խնդրում ենք, մուտք գործեք՝ այս էջը դիտելու կամ գործողությունը կատարելու համար։",
"virus-badscanner": "Սխալ կարգավորւմ։ Անծանոթ վիրուսների զննիչ. ''$1''",
"savechanges": "Պահպանել փոփոխությունները",
"publishpage": "Ստեղծել էջը",
"publishchanges": "Պահպանել",
+ "savearticle-start": "Հիշել էջը...",
+ "savechanges-start": "Հիշել փոփոխությունները...",
+ "publishpage-start": "Հրատարակել էջը...",
"publishchanges-start": "Պահպանել…",
"preview": "Նախադիտում",
"showpreview": "Նախադիտել",
"diff-empty": "(Տարբերություն չկա)",
"diff-multi-sameuser": "(Միևնույն մասնակցի {{PLURAL:$1|մեկ միջանկյալ տարբերակ|$1 միջանկյալ տարբերակներ}} թաքցված է)",
"searchresults": "Որոնման արդյունքներ",
+ "search-filter-title-prefix-reset": "Որոնել բոլոր էջեր",
"searchresults-title": "«$1»-ի որոնման արդյունքներ",
"titlematches": "Համընկած հոդվածների անվանումներ",
"textmatches": "Համընկած տեքստերով էջեր",
"prefs-rc": "Վերջին փոփոխություններ",
"prefs-watchlist": "Հսկացանկ",
"prefs-editwatchlist": "Խմբագրել հսկացանկը",
+ "prefs-editwatchlist-clear": "Մաքրել հսկացանկը",
"prefs-watchlist-days": "Հսկացանկում ցուցադրվող օրերի թիվը՝",
"prefs-watchlist-days-max": "Առավելագույնը $1 {{PLURAL:$1|օր}}",
"prefs-watchlist-edits": "Ընդարձակված հսկացանկում ցուցադրվող օրերի թիվը՝",
"grant-group-email": "Ուղարկել էլ. նամակ",
"grant-createaccount": "Ստեղծել հաշիվներ",
"grant-createeditmovepage": "Ստեղծել․ խմբագրել և տեղափոխել էջեր",
+ "grant-uploadfile": "Բեռնել նոր նիշքեր",
"grant-basic": "Հիմնական իրավունքներ",
+ "grant-viewmywatchlist": "Դիտել ձեր հսկացանկը",
"newuserlogpage": "Մասնակիցների գրանցման տեղեկամատյան",
"newuserlogpagetext": "Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.",
"rightslog": "Մասնակցի իրավունքների տեղեկամատյան",
"action-read": "կարդալ այս էջը",
"action-edit": "խմբագրել այս էջը",
"action-createpage": "Ստեղծել էջ",
+ "action-createtalk": "Ստեղծել քննարկման էջ",
"action-createaccount": "ստեղծել այս մասնակցային հաշիվը",
"action-move": "տեղափոխել այս էջը",
"action-move-rootuserpages": "տեղափոխել մասնակցի էջի արմատը",
"listfiles_size": "Չափ",
"listfiles_description": "Նկարագրություն",
"listfiles_count": "Տարբերակ",
+ "listfiles-latestversion": "Ընթացիկ տարբերակ",
"listfiles-latestversion-yes": "Այո",
"listfiles-latestversion-no": "Ոչ",
"file-anchor-link": "Նիշք",
"unusedtemplateswlh": "այլ հղումներ",
"randompage": "Պատահական էջ",
"randompage-nopages": "Այս անվանատարածքում էջեր չկան։",
+ "randomincategory-category": "Կատեգորիա:",
+ "randomincategory-legend": "Կատեգորիայի պատահական էջ",
"randomincategory-submit": "Անցնել",
"randomredirect": "Պատահական վերահղում",
"randomredirect-nopages": "Այս անվանատարածքում վերահղումներ չկան։",
"deletedcontributions-title": "Մասնակցի ջնջված ներդրում",
"sp-deletedcontributions-contribs": "ներդրում",
"linksearch": "Արտաքին հղումներ",
+ "linksearch-ns": "Անվանատարածք.",
"linksearch-ok": "Որոնել",
"linksearch-line": " \n$1-ը հղվել է $2 ից",
"listusersfrom": "Ցուցադրել մասնակիցներին՝ սկսած.",
"activeusers-noresult": "Այդպիսի մասնակիցներ չեն գտնվել։",
"activeusers-submit": "Ցույց տալ ակտիվ մասնակիցներին",
"listgrouprights-group": "Խումբ",
+ "listgrouprights-rights": "Իրավունքներ",
"listgrouprights-members": "(անդամների ցանկ)",
"listgrouprights-addgroup": "Ավելացնեել {{PLURAL:$2|խումբ|խմբեր}}՝ $1",
+ "listgrants-rights": "Իրավունքներ",
"mailnologin": "Ուղարկման հասցե չկա",
"mailnologintext": "Անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]] և ունենալ գործող էլ-փոստի հասցե ձեր [[Special:Preferences|նախընտրություններում]]՝ ուրիշ մասնակիցներին էլեկտրոնային նամակներ ուղարկելու համար։",
"emailuser": "էլ-նամակ ուղարկել այս մասնակցին",
"delete-edit-reasonlist": "Խմբագրել ջնջման պատճառները",
"deleting-backlinks-warning": "'''Զգուշացում''', ձեր կողմից ջնջվող էջին հղվում են [[Special:WhatLinksHere/{{FULLPAGENAME}}|այլ հոդվածներ]]:",
"rollback": "Հետ գլորել խմբագրումները",
+ "rollback-confirmation-confirm": "Խնդրում ենք հաստատել.",
"rollback-confirmation-no": "Չեղարկել",
"rollbacklink": "հետ գլորել",
"rollbacklinkcount": "հետ գլորել $1 {{PLURAL:$1|խմբագրում}}",
"rollback-success": "Հետ են շրջվել $1 մասնակցի խմբագրումները. վերադարձվել է $2 մասնակցի վերջին տարբերակին։",
"sessionfailure-title": "Սեսիայի խափանում",
"sessionfailure": "Կարծես խնդիր է առաջացել կապված ձեր ընթացիկ աշխատանքային սեսիայի հետ.\nայս գործողությունը բեկանվել է սեսիայի հափշտակման կանխման նպատակով։\nԽնդրում ենք սեղմել «back» կոճակը և վերբեռնել այն էջը որտեղից եկել եք ու փորձել կրկին։",
+ "changecontentmodel-reason-label": "Պատճառ՝",
"changecontentmodel-submit": "Փոխել",
+ "logentry-contentmodel-change-revertlink": "հետ շրջել",
+ "logentry-contentmodel-change-revert": "հետ շրջել",
"protectlogpage": "Պաշտպանման տեղեկամատյան",
"protectlogtext": "Ստորև բերված է պաշտպանված և պաշտպանումից հանված էջերի ցանկը։ Տես նաև [[Special:ProtectedPages|ներկայումս պաշտպանված էջերի ցանկը]]։",
"protectedarticle": "պաշտպանվեց «[[$1]]» էջը",
"mycontris": "Ներդրում",
"anoncontribs": "Ներդրումներ",
"contribsub2": "{{GENDER:$3|$1}}-ի ներդրումները ($2)",
+ "contributions-subtitle": "{{GENDER:$3|$1}}-ի համար",
"nocontribs": "Այս չափանիշներին համապատասխանող փոփոխություններ չեն գտնվել։",
"uctop": " վերջինը",
"month": "Սկսած ամսից (և վաղ)՝",
"sp-contributions-username": "IP-հասցե կամ մասնակցի անուն.",
"sp-contributions-toponly": "Ցույց տալ միայն այն խմբագրումները, որոնք վերջին փոփոխություն են",
"sp-contributions-newonly": "Ցույց տալ միայն նոր էջերի խմբագրումները",
+ "sp-contributions-hideminor": "Թագցնել չնչին խմբագրումներ",
"sp-contributions-submit": "Որոնել",
"whatlinkshere": "Այստեղ հղվող էջերը",
"whatlinkshere-title": "Էջեր, որոնք հղում են դեպի «$1»",
"ipbwatchuser": "Հսկացանկում ավելացնել մասնակցի էջն ու քննարկման էջը",
"ipb-disableusertalk": "Արգելել մասնակցին խմբագրել իր քննարկման էջն արգելափակման ընթացքում",
"ipb-pages-label": "Էջեր",
+ "ipb-namespaces-label": "Անվանատարածքներ",
"badipaddress": "Սխալ IP-հասցե",
"blockipsuccesssub": "Արգելափակումը կատարված է",
"blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] արգելափակված է։\n<br />Տես [[Special:BlockList|արգելափակված IP-հասցեների ցանկը]]։",
"ipb-blocklist": "Դիտել գործող արգելափակումները",
"ipb-blocklist-contribs": "$1 մասնակցի ներդրումը",
"block-expiry": "Մարման ժամկետ.",
+ "block-reason": "Պատճառ՝",
"unblockip": "Արգելափակումից հանել մասնակցին",
"unblockiptext": "Օգտագործեք ստորև ձևը՝ նախկինում արգելափակված IP-հասցեի կամ մասնակցի գրելու հնարավորությունը վերականգնելու համար։",
"ipusubmit": "Հանել արգելափակումը",
"unblocked": "[[User:$1|$1]] մասնակիցը անարգելված է։",
"unblocked-id": "$1 արգելափակումը հանված է",
"blocklist": "Արգելափակված մասնակիցներ։",
+ "autoblocklist-submit": "Որոնել",
"ipblocklist": "Արգելափակված IP-հասցեները և մասնակիցները",
"ipblocklist-legend": "Արգելափակված մասնակցի որոնում",
"blocklist-expiry": "Լրանում է",
+ "blocklist-reason": "Պատճառ",
"ipblocklist-submit": "Որոնել",
"infiniteblock": "ընդմիշտ",
"expiringblock": "կմարվի $1 $2",
"import": "Էջերի ներմուծում",
"importinterwiki": "Միջվիքի ներմուծում",
"import-interwiki-text": "Նշեք վիքի և ներմուծվող էջի անվանումը։\nՓոփոխումների ժամանակները և խմբագրողների անունները կպահպանվեն։\nԲոլոր միջվիքի ներմուծման գործողությունները գրանցվում են [[Special:Log/import|ներմուծման տեղեկամատյանում]]։",
+ "import-interwiki-sourcewiki": "Աղբյուր վիքի.",
+ "import-interwiki-sourcepage": "Աղբյուր էջ.",
"import-interwiki-history": "Պատճենել այս էջի փոփոխումների լրիվ պատմությունը",
"import-interwiki-submit": "Ներմուծել",
"import-upload-filename": "Նիշքի անուն․",
"pageinfo-contentpage": "Հաշվառված որպես բովանդակային էջ",
"pageinfo-contentpage-yes": "Այո",
"pageinfo-protect-cascading-yes": "Այո",
+ "pageinfo-category-pages": "Էջերի քանակ",
+ "pageinfo-category-subcats": "Ենթակատեգորիաների քանակ",
+ "pageinfo-category-files": "Հոդվածների քանակ",
+ "pageinfo-user-id": "Մասնակցի ID-ն",
"markaspatrolleddiff": "Նշել որպես ստուգված",
"markaspatrolledtext": "Նշել այս էջը որպես ստուգված",
"markedaspatrolled": "Նշված է որպես ստուգված",
"imgmultipagenext": "հաջորդ էջ →",
"imgmultigo": "Անցնե՛լ",
"imgmultigoto": "Անցնել $1 էջը",
+ "img-lang-go": "Անցնել",
"ascending_abbrev": "աճմ. կարգ.",
"descending_abbrev": "նվազ",
"table_pager_next": "Հաջորդ էջ",
"watchlistedit-raw-done": "Ձեր հսկացանկը թարմացված է։",
"watchlistedit-raw-added": "Ավելացվեց {{PLURAL:$1|1 անվանում|$1 անվանում}}.",
"watchlistedit-raw-removed": "Հեռացվեց {{PLURAL:$1|1 անվանում|$1 անվանում}}.",
+ "watchlistedit-clear-title": "Մաքրել հսկացանկը",
+ "watchlistedit-clear-legend": "Մաքրել հսկացանկը",
"watchlisttools-clear": "Մաքրել հսկացանկը",
"watchlisttools-view": "Փոփոխությունները հսկացանկում",
"watchlisttools-edit": "Դիտել և խմբագրել հսկացանկը",
"watchlisttools-raw": "Խմբագրել հում հսկացանկը",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|քննարկում]])",
"version": "ՄեդիաՎիքի տարբերակը",
+ "version-editors": "Խմբագիրներ",
"version-ext-license": "Արտոնագիր",
"version-ext-colheader-name": "Ընդլայնում",
"version-ext-colheader-version": "Տարբերակ",
"version-ext-colheader-license": "Արտոնագիր",
+ "version-ext-colheader-description": "Նկարագրություն",
+ "version-ext-colheader-credits": "Հեղինակներ",
"version-license-title": "Արտոնագիր $1-ի համար",
"version-poweredby-credits": "Այս վիքին աշխատում է '''[https://www.mediawiki.org/ MediaWiki]'''֊ով, copyright © 2001-$1 $2։",
+ "version-poweredby-translators": "translatewiki.net թարգմանիչներ",
+ "version-software-version": "Տարբերակ",
+ "version-libraries-library": "Գրադարան",
+ "version-libraries-version": "Տարբերակ",
+ "version-libraries-license": "Արտոնագիր",
+ "version-libraries-description": "Նկարագրություն",
+ "version-libraries-authors": "Հեղինակներ",
"redirect": "Վերահղում նիշքի, մասնակցի, էջի, տարբերակի կամ գրանցամատյանի նույնականացման համարից",
"redirect-submit": "Անցնել",
"redirect-lookup": "Որոնում՝",
"tag-filter": "[[Special:Tags|Պիտակների]] զտիչ՝",
"tag-filter-submit": "Ֆիլտրել",
"tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2",
+ "tag-mw-new-redirect": "Նոր վերահղում",
"tags-title": "Պիտակներ",
"tags-source-header": "Աղբյուր",
"tags-actions-header": "Գործողություններ",
"compare-invalid-title": "Ձեր նշած վերնագիրը անվավեր է։",
"compare-title-not-exists": "Ձեր նշած վերնագիրը գոյություն չունի:",
"compare-revision-not-exists": "Ձեր նշած փոփոխությունը գոյություն չունի։",
+ "diff-form": "Տարբերությունները",
+ "permanentlink": "Մշտական հղում",
"dberr-problems": "Այս կայքում առաջացել են տեխնիկական խնդիրներ։ Հայցում ենք ձեր ներողությունը։",
"dberr-again": "Փորձեք մի քանի րոպե սպասել և վերաբեռնել էջը։",
"htmlform-submit": " \nՀաշվել",
+ "htmlform-selectorother-other": "Այլ",
+ "htmlform-no": "Ոչ",
+ "htmlform-yes": "Այո",
+ "htmlform-title-not-exists": "$1՝ գոյություն չունի",
"logentry-delete-delete": "$1 {{GENDER:$2|ջնջեց}} $3 էջը",
"logentry-delete-restore": "$1 վերականգնեց $3 ($4) էջը",
"logentry-delete-event": "$1 փոխեց տեղեկամատյանի {{PLURAL:$5|1 գրանցման|$5 գրանցումների}} տեսանելությունը $3-ում. $4",
"feedback-close": "Արված է",
"feedback-message": "Հաղորդագրություն․",
"feedback-subject": "Թեմա.",
+ "feedback-thanks-title": "Շնորհակալություն",
"searchsuggest-search": "Որոնել {{SITENAME}} կայքում",
"duration-seconds": "$1 {{PLURAL:$1|վայրկյան}}",
"duration-minutes": "$1 {{PLURAL:$1|րոպե}}",
"duration-centuries": "$1 {{PLURAL:$1|դար}}",
"duration-millennia": "$1 {{PLURAL:$1|հազարամյակ}}",
"expandtemplates": "Կաղապարների ընդարձակում",
+ "expand_templates_ok": "Լավ",
+ "pagelang-name": "Էջ",
+ "pagelang-select-lang": "Ընտրեք լեզուն",
+ "pagelang-reason": "Պատճառ",
+ "pagelang-submit": "Հաստատել",
"pagelang-nonexistent-page": "$1 էջը գոյություն չունի",
+ "mediastatistics-header-total": "Բոլոր նիշքեր",
"special-characters-group-latin": "Լատիներեն",
"special-characters-group-latinextended": "Լատիներեն ընդլայնված",
"special-characters-group-ipa": "ՄՀԱ (IPA)",
"date-range-from": "Սկսած՝",
"date-range-to": "Մինչև՝",
"randomrootpage": "Պատահական կենտրոնական էջ",
- "authmanager-create-from-login": "Հաշիվ ստեղծելու համար, խնդրում ենք լրացնել ստորև դաշտերը"
+ "authmanager-create-from-login": "Հաշիվ ստեղծելու համար, խնդրում ենք լրացնել ստորև դաշտերը",
+ "authprovider-resetpass-skip-label": "Բաց թողնել",
+ "passwordpolicies-group": "Խումբ"
}
"Armeniki",
"Azniv Stepanian",
"Rajemian",
- "Դավիթ Սարոյան"
+ "Դավիթ Սարոյան",
+ "Kareyac"
]
},
"underline-always": "Միշտ",
"pt-userlogout": "Դուրս գալ",
"php-mail-error-unknown": "Անյայտ սխալ PHP-ի mail() կախարկութեան մէջ:",
"changepassword": "Գաղտնաբառը փոխել",
+ "oldpassword": "Հին գաղտնաբառը.",
"newpassword": "Նոր գաղտնաբառը.",
"retypenew": "Նորէն մուտքագրէք գաղտնաբառը",
"changepassword-success": "Ձեր գաղտնաբառը փոխուեցաւ։",
"recreate-moveddeleted-warn": "<strong>Զգուշացում. Նախապէս ջնջուած էջ մը պիտի վերստեղծուի։<strong>\n\nԿը խնդրուի մտածել այս էջի խմբագրման նպատակայարմարութեան մասին։ \nՁեր դիւրութեան համար ներքեւ կը գտնէք այս էջի ջնջումին և տեղափոխումին տեղեկատետրերը։",
"moveddeleted-notice": "Այս էջը ջնջուած է։\nԷջին ջնջումի, պահպանումի եւ փոխադրումի տեղեկատետրը տրամադրելի է ներքեւ որպէս տեղեկութիւն։",
"edit-conflict": "Խմբագրման ընհարում։",
+ "slot-name-main": "Գլխաւոր",
"content-model-wikitext": "ուիքիթէքսթ",
"content-model-text": "պարզ բնաբան",
"content-model-javascript": "ՃաւաՍքրիփթ",
"history-fieldset-title": "Որոնել տարբերակներ",
"histfirst": "հնագոյն",
"histlast": "նորագոյն",
+ "historyempty": "պարապ",
"history-feed-title": "Վերանայումներու ցուցակ",
"history-feed-description": "Ուիքիի այս էջին վերանայումներու ցուցակը",
"history-feed-item-nocomment": "$1՝ $2",
"rev-showdeleted": "Ցուցադրել",
"revdelete-show-file-submit": "Այո",
"revdelete-log": "Պատճառ.",
+ "pagehist": "Էջի պատմութիւն",
"revdelete-reasonotherlist": "Ուրիշ պատճառ.",
"mergehistory-reason": "Պատճառ.",
"mergelog": "Ձուլման տեղեկատետր",
"searchall": "բոլոր",
"search-showingresults": "{{PLURAL:$4|<strong>$1</strong> արդիւնք <strong>$3</strong>-էն|<strong>$1 - $2</strong> արդիւնքներ <strong>$3</strong>-էն}}",
"search-nonefound": "Որոնումին համապատասխանող արդիւնքներ չգտնուեցան",
+ "powersearch-toggleall": "Բոլոր",
+ "powersearch-togglenone": "Ոչ մէկ",
+ "preferences": "Նախընտրութիւններ",
"mypreferences": "Նախընտրութիւններ",
"skin-preview": "Նախադիտել",
+ "prefs-watchlist": "Հսկողութեան ցանկ",
+ "saveprefs": "Յիշել",
+ "searchresultshead": "Որոնել",
"stub-threshold-sample-link": "օրինակ",
"timezoneregion-africa": "Ափրիկէ",
"timezoneregion-america": "Ամերիկա",
"timezoneregion-europe": "Եւրոպա",
"timezoneregion-indian": "Հնդկական Ովկիանոս",
"timezoneregion-pacific": "Խաղաղ Ովկիանոս",
+ "prefs-searchoptions": "Որոնել",
"youremail": "Էլեկտրական Նամակ",
+ "yourlanguage": "Լեզու.",
"email": "Էլեկտրական Նամակ",
+ "prefs-info": "Հիմնական տուեալներ",
+ "prefs-editor": "Խմբագրող",
+ "prefs-preview": "Նախադիտել",
"group": "Խումբ.",
"group-bot": "Մեքենայիկներ",
"group-sysop": "Վարիչներ",
"undelete_short": "Restaurar {{PLURAL:$1|1 redakto|$1 redakti}}",
"viewdeleted_short": "Vidar {{PLURAL:$1|1 redakto efacita|$1 redakti efacita}}",
"protect": "Protektar",
- "protect_change": "chanjar",
+ "protect_change": "modifikar",
"unprotect": "Desprotektar",
"newpage": "Nova pagino",
"talkpagelinktext": "Diskutez",
"right-suppressrevision": "Vidar, celar e deskovrar specifika revizi di pagini de irga uzero",
"right-blockemail": "Blokusar uzero pri sendar e-posto",
"right-unblockself": "Desblokusar su",
+ "right-protect": "Modifikar la protekto-nivelo e la pagini protektata en serio",
"right-viewmywatchlist": "Vidar vua propra atenco-listo",
"right-editmyoptions": "Modifikar vua propra preferaji",
"right-rollback": "Rapide retrorular la redakti da la lasta uzero qua redaktis specigita pagino",
"sessionfailure": "Semblas ke eventis problemo kun vua sesiono di 'login';\nta agado abrogesis, quale presorgo kontre sequestro di sesiono ('hijacking').\nVoluntez risendar la formulario, plenigita.",
"changecontentmodel": "Chanjar la konteno-modelo di (u)la pagino",
"changecontentmodel-title-label": "Titulo di la pagino",
+ "changecontentmodel-submit": "Modifikar",
"log-name-contentmodel": "Registro di la modifikuri en la modelo pri kontenajo",
"logentry-contentmodel-change-revertlink": "restaurar",
"logentry-contentmodel-change-revert": "restaurar",
"expand_templates_output": "Rezulto",
"expand_templates_ok": "O.K.",
"expand_templates_preview": "Previdar",
+ "pagelanguage": "Modifikar la linguo di la pagino",
"pagelang-language": "Linguo",
+ "right-pagelang": "Modifikar l'idiomo di la pagino",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 bicoko*|$1 bicoki*}} ($2; $3%)",
"special-characters-group-latin": "Latina",
"special-characters-group-latinextended": "Latina extensita",
"right-reupload-own": "自身がアップロードした既存のファイルに上書き",
"right-reupload-shared": "共有メディアリポジトリ上のファイルにローカルで上書き",
"right-upload_by_url": "URL からファイルをアップロード",
- "right-purge": "確認なしでサイト上のページ・キャッシュを破棄",
+ "right-purge": "サイト上のページ キャッシュを破棄",
"right-autoconfirmed": "IPベースの速度制限を受けない",
"right-bot": "自動処理と認識させる",
"right-nominornewtalk": "議論ページの細部の編集をした際に、新着メッセージとして通知しない",
"rcfilters-view-tags-help-icon-tooltip": "タグ付けされた編集とは",
"rcfilters-liveupdates-button": "自動読み込み",
"rcfilters-liveupdates-button-title-on": "自動読み込みを停止",
- "rcfilters-liveupdates-button-title-off": "æ\96°ã\81\97ã\81\84ç·¨é\9b\86ã\82\92å\8d³åº§ã\81«èªã\81¿è¡¨ç¤ºã\81\99ã\82\8b",
+ "rcfilters-liveupdates-button-title-off": "新しい編集を即座に表示する",
"rcfilters-watchlist-markseen-button": "すべての変更を訪問済みにする",
"rcfilters-watchlist-edit-watchlist-button": "ウォッチリストを編集",
"rcfilters-watchlist-showupdated": "最終訪問以降に変更されたページは、塗りつぶされた丸印と一緒に、<strong>太字</strong>で表示されます。",
"delete-warning-toobig": "このページには、 $1版を超える編集履歴があります。\n削除すると、{{SITENAME}}のデータベース処理に大きな負荷がかかります。\n十分に注意してください。",
"deleteprotected": "このページは保護されているため削除できません。",
"deleting-backlinks-warning": "<strong>警告:</strong> 削除しようとしているページは、[[Special:WhatLinksHere/{{FULLPAGENAME}}|他のページ]]からリンクまたは参照読み込みされています。",
- "deleting-subpages-warning": "<strong>警告:</strong>削除しようとしているページは、[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|サブページ|$1 個のサブページ|51=50 個以上のサブページ}}]]があります。",
+ "deleting-subpages-warning": "<strong>警告:</strong> 削除しようとしているページには、[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|下位ページ|$1 件の下位ページ|51=50 件以上の下位ページ}}]]があります。",
"rollback": "編集を巻き戻し",
+ "rollback-confirmation-yes": "巻き戻し",
+ "rollback-confirmation-no": "キャンセル",
"rollbacklink": "巻き戻し",
"rollbacklinkcount": "$1{{PLURAL:$1|編集}}を巻き戻し",
"rollbacklinkcount-morethan": "$1{{PLURAL:$1|編集}}以上を巻き戻し",
"cant-move-category-page": "カテゴリのページを移動させる権限がありません。",
"cant-move-to-category-page": "ページをカテゴリのページに移動させる権限がありません。",
"cant-move-subpages": "下位のページを移動する権限がありません。",
- "namespace-nosubpages": "名前空間「$1」はサブページが許可されていません。",
+ "namespace-nosubpages": "名前空間「$1」は下位ページが許可されていません。",
"newtitle": "新しいページ名:",
"move-watch": "移動元と移動先ページをウォッチ",
"movepagebtn": "ページを移動",
"log-action-filter-suppress-reblock": "再ブロックによる利用者の秘匿",
"log-action-filter-upload-upload": "新規アップロード",
"log-action-filter-upload-overwrite": "再アップロード",
+ "log-action-filter-upload-revert": "差し戻し",
"authmanager-authn-not-in-progress": "認証が行われていない、またはセッションデータが失われました。最初からやり直してください。",
"authmanager-authn-no-primary": "指定された証明情報を認証できませんでした。",
"authmanager-authn-no-local-user": "指定された証明情報は、このウィキのどの利用者にも関連付けられていません。",
"unlinkaccounts": "アカウントの関連付け解除",
"unlinkaccounts-success": "アカウントの関連付けが解除されました。",
"authenticationdatachange-ignored": "認証データの変更は処理されませんでした。プロバイダーが設定されていない可能性があります。",
- "userjsispublic": "注意: JavaScript のサブページは第三者が閲覧可能なため、機微な情報を含めないでください。",
- "userjsonispublic": "注意: JSON のサブページは第三者が閲覧可能なため、機微な情報を含めないでください。",
- "usercssispublic": "注意: CSS のサブページは第三者が閲覧可能なため、機微な情報を含めないでください。",
+ "userjsispublic": "注意: JavaScript の下位ページは第三者が閲覧可能なため、機微な情報を含めないでください。",
+ "userjsonispublic": "注意: JSON の下位ページは第三者が閲覧可能なため、機微な情報を含めないでください。",
+ "usercssispublic": "注意: CSS の下位ページは第三者が閲覧可能なため、機微な情報を含めないでください。",
"restrictionsfield-badip": "無効な IP アドレス、またはその範囲: $1",
"restrictionsfield-label": "許可する IP の範囲:",
"restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合: <pre>0.0.0.0/0\n::/0</pre>",
"undelete-cantedit": "このページを編集する許可がないため復元できません。",
"undelete-cantcreate": "同名のページが存在せず、このページを作成する許可がないため復元できません。",
"pagedata-title": "ページ・データ",
- "pagedata-text": "このページは、ページへのデータインターフェースを提供します。サブページの構文を使用して、URLにページタイトルを入力してください。\n* コンテンツのネゴシエーションは、クライアントのAcceptヘッダーに基づいて適用されます。つまり、ページデータはクライアントが優先する形式で提供されます。",
+ "pagedata-text": "このページは、ページへのデータインターフェースを提供します。下位ページの構文を使用して、URLにページ名を入力してください。\n* コンテンツのネゴシエーションは、クライアントのAcceptヘッダーに基づいて適用されます。つまり、ページデータはクライアントが優先する形式で提供されます。",
"pagedata-not-acceptable": "該当する形式が見つかりません。対応している MIME タイプ: $1",
"pagedata-bad-title": "「$1」は無効なページ名です。",
- "unregistered-user-config": "セキュリティ上の理由から、JavaScript、CSSおよびJSONの利用者サブページは、登録されていない利用者に対しては読み込みできません。",
+ "unregistered-user-config": "セキュリティ上の理由から、JavaScript、CSSおよびJSONの利用者下位ページは、登録されていない利用者に対しては読み込みできません。",
"passwordpolicies": "パスワードポリシー",
"passwordpolicies-summary": "これは、このウィキで定義されている利用者グループの有効なパスワードポリシーの一覧です。",
"passwordpolicies-group": "グループ",
"passwordpolicies-policy-maximalpasswordlength": "パスワードは$1{{PLURAL:$1|文字}}以下でなければなりません",
"passwordpolicies-policy-passwordcannotbepopular": "パスワードは{{PLURAL:$1|一般的なものにすることはできません|一般的な$1個のパスワードのリストと一致するものにすることはできません}}",
"easydeflate-invaliddeflate": "提供されたコンテンツが適切に圧縮されていません",
- "unprotected-js": "ã\82»ã\82ã\83¥ã\83ªã\83\86ã\82£ä¸\8aã\81®ç\90\86ç\94±ã\81\8bã\82\89ã\80\81JavaScriptã\81¯ä¿\9dè·ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ã\83¼ã\83\89ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82MediaWiki: å\90\8då\89\8d空é\96\93å\86\85ã\80\81ã\81¾ã\81\9fã\81¯å\88©ç\94¨è\80\85ã\82µã\83\96ã\83\9aã\83¼ã\82¸ã\81¨ã\81\97ã\81¦のみjavascriptを作成してください。"
+ "unprotected-js": "ã\82»ã\82ã\83¥ã\83ªã\83\86ã\82£ä¸\8aã\81®ç\90\86ç\94±ã\81\8bã\82\89ã\80\81JavaScriptã\81¯ä¿\9dè·ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\81¯èªã\81¿è¾¼ã\81¿ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82MediaWiki: å\90\8då\89\8d空é\96\93å\86\85ã\80\81å\88©ç\94¨è\80\85ä¸\8bä½\8dã\83\9aã\83¼ã\82¸ã\81®ã\81\84ã\81\9aã\82\8cã\81\8bã\81§のみjavascriptを作成してください。"
}
"right-reupload-own": "E Fichier iwwerschreiwen deen Dir selwer eropgelueden hutt",
"right-reupload-shared": "Lokalt Iwwerschreiwe vun engem Fichier deen an engem gemeinsam benotzte Repertoire steet",
"right-upload_by_url": "Fichiere vun enger URL-Adress eroplueden",
- "right-purge": "De Säitecache eidel maachen ouni nozefroen",
+ "right-purge": "De Säitecache fir eng Säit eidel maachen",
"right-autoconfirmed": "Net betraff vun IP-baséierten Zäitlimiten",
"right-bot": "Als automatesche Prozess behandelen (Bot)",
"right-nominornewtalk": "Kleng Ännerungen op Diskussiounssäite léisen de Banner vun de neie Messagen net aus",
"viewsourceold": "преглед на кодот",
"editlink": "уреди",
"viewsourcelink": "преглед на кодот",
- "editsectionhint": "УÑ\80еди го паÑ\81Ñ\83Ñ\81оÑ\82: $1",
+ "editsectionhint": "УÑ\80еди го одделоÑ\82 â\80\9e$1â\80\9c",
"toc": "Содржина",
"showtoc": "прикажи",
"hidetoc": "скриј",
"histfirst": "најстари",
"histlast": "најнови",
"historysize": "({{PLURAL:$1|1 бајт|$1 бајти}})",
- "historyempty": "(празно)",
+ "historyempty": "празно",
"history-feed-title": "Историја на измените",
"history-feed-description": "Историја на измените на оваа страница на викито",
"history-feed-item-nocomment": "$1 на $2",
"prefs-custom-json": "Прилагоден JSON",
"prefs-custom-js": "Посебно JS",
"prefs-common-config": "Заеднички CSS/JSON/JavaScript за сите рува:",
- "prefs-reset-intro": "Може да ја користите оваа страница за враќање на вашите нагодувања на основно-зададените нагодувања на викито. Ова дејство е неповратно.",
+ "prefs-reset-intro": "Може да ја користите оваа страница за враќање на вашите нагодувања на стандардните нагодувања на мрежното место.\nОва дејство е неповратно.",
"prefs-emailconfirm-label": "Потврда на е-пошта:",
"youremail": "Е-пошта:",
"username": "{{GENDER:$1|Корисничко име}}:",
"right-reupload-own": "Преснимување на постоечка податотека подигната од вас",
"right-reupload-shared": "Презапис на едни податотеки врз други на заедничкото мултимедијално складиште месно",
"right-upload_by_url": "Подигање на податотека од URL-адреса",
- "right-purge": "Ð\91Ñ\80иÑ\88еÑ\9aе од опÑ\81лÑ\83жÑ\83ваÑ\87ки меÑ\93Ñ\83Ñ\81клад на Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а без баÑ\80аÑ\9aе поÑ\82вÑ\80да за Ñ\82оа",
+ "right-purge": "Ð\91Ñ\80иÑ\88еÑ\9aе на меÑ\93Ñ\83Ñ\81клад на Ñ\81Ñ\82Ñ\80аниÑ\86а",
"right-autoconfirmed": "Без ограничувања на стапки за IP-адреса",
"right-bot": "Третиран како автоматски процес",
"right-nominornewtalk": "Ситните уредувања на разговорни страници да не поттикнуваат потсетник за нова порака",
"grant-delete": "Бришење страници, преработки и дневнички записи",
"grant-editinterface": "Уредување на именскиот простор „МедијаВики“ и JSON за цело вики/за корисник",
"grant-editmycssjs": "Уредување на вашиот кориснички CSS/JSON/JavaScript",
- "grant-editmyoptions": "Уредување на вашите кориснички нагодувања и поставеноста на JSON",
+ "grant-editmyoptions": "Уредување на вашите кориснички нагодувања и JSON-конфигурацијата",
"grant-editmywatchlist": "Уредување на вашите набљудувани",
"grant-editsiteconfig": "Уредување на CSS/JS за цело вики и за корисник",
"grant-editpage": "Менување постоечки страници",
"windows-nonascii-filename": "Опслужувачот не поддржува податотечни имиња со псоебни знаци.",
"fileexists": "Податотека со ова име веќе постои. Проверете <strong>[[:$1]]</strong> ако не {{GENDER:|сте}} сигурни дали сакате да ја промените.\n[[$1|thumb]]",
"filepageexists": "Описната страница на оваа податотека е веќе создадена на <strong>[[:$1]]</strong>, но не постои податотека со тоа име.\nОписот кој го внесовте нема да стои на описната страница.\nДоколку сакате описот да стои тука, ќе морате да го уредите рачно.\n[[$1|thumb]]",
- "fileexists-extension": "Податотека со слично име веќе постои: [[$2|thumb]]\n* Име на податотека која се подигнува: <strong>[[:$1]]</strong>\n* Име на постоечката податотека: <strong>[[:$2]]</strong>\nДали можеби би сакале да користите покарактеристично име.",
+ "fileexists-extension": "Податотека со слично име веќе постои: [[$2|thumb]]\n* Име на податотека која се подигнува: <strong>[[:$1]]</strong>\n* Име на постоечката податотека: <strong>[[:$2]]</strong>\nДали можеби би сакале да користите покарактеристично име?",
"fileexists-thumbnail-yes": "Се чини дека податотеката е слика со намалена големина ''(минијатура)''. [[$1|thumb]]\nПроверете ја податотеката <strong>[[:$1]]</strong>.\nАко податотеката која ја проверувате е истата слика во својата изворна големина тогаш не мора да ја подигате дополнително.",
"file-thumbnail-no": "Името на податотеката почнува со <strong>$1</strong>.\nИзгледа дека е слика со намалена големина ''(мини, thumbnail)''.\nАко ја имате оваа слика во изворна големина, подигнете ја неја. Во спротивно сменете го името на податотеката.",
"fileexists-forbidden": "Податотека со тоа име веќе постои и не може да биде заменета.\nАко и понатаму сакате да ја подигнете вашата податотеката, ве молиме вратете се назад и подигнете ја под друго име. [[File:$1|thumb|center|$1]]",
"upload-form-label-own-work": "Ова е мое дело",
"upload-form-label-infoform-categories": "Категории",
"upload-form-label-infoform-date": "Датум",
- "upload-form-label-own-work-message-generic-local": "Потврдувам дека податотекава ја подигам во согласност со условите на користење и правилата за лиценцирање на {{SITENAME}}.",
+ "upload-form-label-own-work-message-generic-local": "Потврдувам дека ја подигам податотекава во согласност со условите на користење и правилата за лиценцирање на {{SITENAME}}.",
"upload-form-label-not-own-work-message-generic-local": "Ако не сте во можност да ја подигнете податотекава согласно правилата на {{SITENAME}}, затворете го дијалогов и обидете се на друг начин.",
"upload-form-label-not-own-work-local-generic-local": "Можете да ја пробате и [[Special:Upload|стандардната страница за подигање]].",
"upload-form-label-own-work-message-generic-foreign": "Разбирам дека ја подигам податотекава на заедничко складиште. Потврдувам дека со тоа ги почитувам тамошните услови на користење и лиценцните правила.",
"pageinfo-category-files": "Број на податотеки",
"pageinfo-user-id": "Корисничка назнака",
"pageinfo-file-hash": "Тарабна вредност",
- "pageinfo-view-protect-log": "Погл. го дневникот на заштити за страницава.",
+ "pageinfo-view-protect-log": "Преглед на дневникот на заштити за страницава.",
"markaspatrolleddiff": "Означи како проверена верзија",
"markaspatrolledtext": "Означи ја верзијата како проверена",
"markaspatrolledtext-file": "Означи ја верзијава како испатролирана",
"mediastatistics-summary": "Статистики за подигнати типови податотеки. Се зема предвид само последната верзија на податотеката. Старите и избришаните верзии не се бројат.",
"mediastatistics-nfiles": "$1 ($2 %)",
"mediastatistics-nbytes": "{{PLURAL:$1|Еден бајт|$1 бајти}} ($2; $3%)",
- "mediastatistics-bytespertype": "Ð\92кÑ\83пен обем на паÑ\81Ñ\83Ñ\81от: {{PLURAL:$1|$1 бајт|$1 бајти}} ($2; $3%).",
+ "mediastatistics-bytespertype": "Ð\92кÑ\83пен обем на одделот: {{PLURAL:$1|$1 бајт|$1 бајти}} ($2; $3%).",
"mediastatistics-allbytes": "Вкупен обем на сите податотеки: {{PLURAL:$1|$1 бајт|$1 бајти}} ($2).",
"mediastatistics-table-mimetype": "MIME-тип",
"mediastatistics-table-extensions": "Можни додатоци",
"and": " ഒപ്പം",
"faq": "പതിവുചോദ്യങ്ങൾ",
"actions": "നടപടികൾ",
- "namespaces": "നാമമേഖല",
+ "namespaces": "നാമമേഖലകൾ",
"variants": "രൂപഭേദങ്ങൾ",
"navigation-heading": "ഗമന വഴികാട്ടി",
"errorpagetitle": "പിഴവ്",
"history": "നാൾവഴി",
"history_short": "നാൾവഴി",
"history_small": "നാൾവഴി",
- "updatedmarker": "à´\95à´´à´¿à´\9eàµ\8dà´\9e സനàµ\8dദർശനതàµ\8dതിനàµ\81 ശേഷം മാറ്റം വന്നത്",
+ "updatedmarker": "à´\95à´´à´¿à´\9eàµ\8dà´\9e സനàµ\8dദർശനതàµ\8dതിനàµ\8d ശേഷം മാറ്റം വന്നത്",
"printableversion": "അച്ചടിരൂപം",
"permalink": "സ്ഥിരംകണ്ണി",
"print": "അച്ചടിയ്ക്കുക",
"viewdeleted_short": "{{PLURAL:$1|മായ്ക്കപ്പെട്ട ഒരു തിരുത്തൽ|മായ്ക്കപ്പെട്ട $1 തിരുത്തലുകൾ}} കാണുക",
"protect": "സംരക്ഷിക്കുക",
"protect_change": "സംരക്ഷണമാനത്തിൽ മാറ്റം വരുത്തുക",
- "unprotect": "à´¸à´\82à´°à´\95àµ\8dà´·à´£à´\82",
+ "unprotect": "à´¸à´\82à´°à´\95àµ\8dഷണതàµ\8dതിൽ മാറàµ\8dà´±à´\82വരàµ\81à´¤àµ\8dà´¤àµ\81à´\95",
"newpage": "പുതിയ താൾ",
"talkpagelinktext": "സംവാദം",
"specialpage": "പ്രത്യേക താൾ",
- "personaltools": "à´¸àµ\8dà´µà´\95ാരàµ\8dയതാളàµ\81à´\95ൾ",
+ "personaltools": "à´µàµ\8dà´¯à´\95àµ\8dതിà´\97à´¤ à´\89à´ªà´\95à´°à´£à´\99àµ\8dà´\99ൾ",
"talk": "സംവാദം",
"views": "ദർശനീയത",
"toolbox": "ഉപകരണങ്ങൾ",
"versionrequired": "മീഡിയാവിക്കിയുടെ പതിപ്പ് $1 ആവശ്യമാണ്",
"versionrequiredtext": "ഈ താൾ ഉപയോഗിക്കാൻ മീഡിയവിക്കി പതിപ്പ് $1 ആവശ്യമാണ്. കൂടുതൽ വിവരങ്ങൾക്ക് [[Special:Version|മീഡിയാവിക്കി പതിപ്പ് താൾ]] കാണുക.",
"ok": "ശരി",
- "retrievedfrom": "\"$1\" à´\8eà´¨àµ\8dà´¨ താളിൽനിനàµ\8dà´¨àµ\81 ശേഖരിച്ചത്",
+ "retrievedfrom": "\"$1\" à´\8eà´¨àµ\8dà´¨ താളിൽനിനàµ\8dà´¨àµ\8d ശേഖരിച്ചത്",
"youhavenewmessages": "താങ്കൾക്ക് $1 ഉണ്ട് ($2).",
"youhavenewmessagesfromusers": "താങ്കൾക്ക് {{PLURAL:$3|ഒരു ഉപയോക്താവ്|$3 ഉപയോക്താക്കൾ}} $1 ചേർത്തിട്ടുണ്ട് ($2).",
"youhavenewmessagesmanyusers": "താങ്കൾക്ക് പലർ $1 ചേർത്തിട്ടുണ്ട് ($2).",
"red-link-title": "$1 (ഇതുവരെ എഴുതപ്പെട്ടിട്ടില്ല)",
"sort-descending": "അവരോഹണമായി ക്രമപ്പെടുത്തുക",
"sort-ascending": "ആരോഹണമായി ക്രമപ്പെടുത്തുക",
- "nstab-main": "à´²àµ\87à´\96à´¨à´\82",
+ "nstab-main": "താൾ",
"nstab-user": "ഉപയോക്തൃതാൾ",
"nstab-media": "മീഡിയാ താൾ",
"nstab-special": "പ്രത്യേക താൾ",
"badretype": "താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ ഒത്തുപോകുന്നില്ല.",
"usernameinprogress": "ഈ ഉപയോക്തൃനാമത്തിലുള്ള അംഗത്വ നിർമ്മിതി നടന്നുകൊണ്ടിരിക്കുന്നു.\nദയവായി കാത്തിരിക്കുക.",
"userexists": "നൽകിയ ഉപയോക്തൃനാമം മുമ്പേ നിലവിലുണ്ട്.\nദയവായി മറ്റൊരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക.",
+ "createacct-normalization": "സാങ്കേതിക കാരണങ്ങളാൽ താങ്കളുടെ ഉപയോക്തൃനാമം \"$2\" എന്നാക്കി മാറ്റുന്നതാണ്.",
"loginerror": "പ്രവേശനം സാധിച്ചില്ല",
"createacct-error": "അംഗത്വസൃഷ്ടിക്കിടെ പിഴവുണ്ടായി",
"createaccounterror": "അംഗത്വമെടുക്കാൻ കഴിഞ്ഞില്ല:$1",
"linkaccounts-submit": "അംഗത്വങ്ങൾ കണ്ണി ചേർക്കുക",
"unlinkaccounts": "അംഗത്വങ്ങൾ കണ്ണി മാറ്റുക",
"unlinkaccounts-success": "അംഗത്വം കണ്ണി മാറ്റി.",
+ "userjsispublic": "ദയവായി ശ്രദ്ധിക്കുക: ജാവാസ്ക്രിപ്റ്റ് ഉപതാളുകൾ മറ്റ് ഉപയോക്താക്കൾക്ക് കാണാൻ കഴിയും, അവയിൽ സ്വകാര്യവിവരങ്ങൾ ചേർക്കാതിരിക്കുക.",
+ "userjsonispublic": "ദയവായി ശ്രദ്ധിക്കുക: ജെസൺ ഉപതാളുകൾ മറ്റ് ഉപയോക്താക്കൾക്ക് കാണാൻ കഴിയും, അവയിൽ സ്വകാര്യവിവരങ്ങൾ ചേർക്കാതിരിക്കുക.",
+ "usercssispublic": "ദയവായി ശ്രദ്ധിക്കുക: സി.എസ്.എസ്. ഉപതാളുകൾ മറ്റ് ഉപയോക്താക്കൾക്ക് കാണാൻ കഴിയും, അവയിൽ സ്വകാര്യവിവരങ്ങൾ ചേർക്കാതിരിക്കുക.",
"restrictionsfield-badip": "അസാധുവായ ഐ.പി. വിലാസം അല്ലെങ്കിൽ പരിധി:$1",
"restrictionsfield-label": "അനുവദിച്ചിട്ടുള്ള ഐ.പി. പരിധികൾ:",
"edit-error-short": "പിഴവ്: $1",
"tog-norollbackdiff": "နောက်ပြန်ပြင်ဆင်ခြင်း လုပ်ဆောင်ပြီးပါက ကွဲပြားမှုကိုမပြပါနှင့်။",
"tog-useeditwarning": "မသိမ်းရသေးသော ပြောင်းလဲမှုများ နှင့် တည်းဖြတ်ဆဲစာမျက်နှာမှ ထွက်သွားလျှင် သတိပေးပါ",
"tog-prefershttps": "လော့ဂ်အင်ဝင်ချိန်တွင် လုံခြုံသော ဆက်သွယ်မှုကို အမြဲတမ်း အသုံးပြုရန်",
+ "tog-showrollbackconfirmation": "နောက်ပြန် ပြန်သွားရန်လင့်ခ်ကို နှိပ်သောအခါ အတည်ပြုချက်တောင်းခံပုံအား ပြသရန်",
"underline-always": "အမြဲ",
"underline-never": "ဘယ်သောအခါမျှ",
"underline-default": "ဘရောက်ဆာ သို့ Skin default အတိုင်း",
"histfirst": "အဟောင်းဆုံး",
"histlast": "အသစ်ဆုံး",
"historysize": "({{PLURAL:$1|1 ဘိုက်|$1 ဘိုက်}})",
- "historyempty": "(ဘာမှမရှိ)",
+ "historyempty": "ဘာမှမရှိ",
"history-feed-title": "မူရာဇဝင်မှတ်တမ်း",
"history-feed-description": "ဝီကီပေါ်ရှိ ဤစာမျက်နှာ၏ တည်းဖြတ်မှုရာဇဝင်",
"history-feed-item-nocomment": "$2 က $1",
"deleting-backlinks-warning": "<strong>သတိပေးချက်။</strong> သင်ဖျက်ပစ်တော့မည့် စာမျက်နှာအား [[Special:WhatLinksHere/{{FULLPAGENAME}}|အခြားစာမျက်နှာများမှ]] ချိတ်ဆက်ထားခြင်း သို့မဟုတ် ထည့်သွင်းထားခြင်း ရှိနေသည်။",
"deleting-subpages-warning": "<strong>သတိပေးချက်။</strong> သင်ဖျက်တော့မည့် စာမျက်နှာတွင် [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|စာမျက်နှာခွဲ တစ်ခု|စာမျက်နှာခွဲ $1 ခု|51=စာမျက်နှာခွဲ ၅၀ ကျော်}}]] ရှိနေသည်။",
"rollback": "နောက်ပြန်ပြင် တည်းဖြတ်မှုများ",
+ "rollback-confirmation-yes": "နောက်ပြန် ပြန်သွားရန်",
+ "rollback-confirmation-no": "မလုပ်တော့ပါ",
"rollbacklink": "နောက်ပြန် ပြန်သွားရန်",
"rollbacklinkcount": "{{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} $1 ကို နောက်ပြန်ပြင်ရန်",
"rollbacklinkcount-morethan": "$1 ထက်ပိုသော {{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}}ကို နောက်ပြန်ပြင်ရန်",
"logentry-block-block": "$1 {{GENDER:$2|zablokował|zablokowała|zablokował(a)}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
"logentry-block-unblock": "$1 {{GENDER:$2|zdjął|zdjęła}} blokadę z {{GENDER:$4|$3}}",
"logentry-block-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
- "logentry-partialblock-block-page": "{{PLURAL:$1|strony|stron}}: $2",
- "logentry-partialblock-block-ns": "przestrzeni nazw{{PLURAL:$1|:|}} $2",
+ "logentry-partialblock-block-page": "{{PLURAL:$1|strony|stron:}} $2",
+ "logentry-partialblock-block-ns": "przestrzeni {{PLURAL:$1|nazw:|nazw}} $2",
"logentry-partialblock-block": "$1 {{GENDER:$2|wyłączył|wyłączyła}} {{GENDER:$4|$3}} z edytowania $7, czas blokady: $5 $6",
"logentry-partialblock-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia wyłączenia {{GENDER:$4|$3}} z edytowania $7, czas blokady: $5 $6",
"logentry-non-editing-block-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}} wykonywanie określonych operacji nieedycyjnych, czas blokady: $5 $6",
"delete-confirm": "Used as page title. Parameters:\n* $1 - the page title\n{{Identical|Delete}}",
"delete-legend": "{{Identical|Delete}}",
"historywarning": "Warning when about to delete a page that has history.\n\nFollowed by a link which points to the history page.\n\nParameters:\n* $1 - the number of revisions that the page has",
- "historyaction-submit": "Submit button on history pages\n{{Identical|Show}}",
+ "historyaction-submit": "Submit button to show revisions on revision history pages",
"confirmdeletetext": "Introduction shown when deleting a page.\n\nRefers to {{msg-mw|Policy-url}}.",
"actioncomplete": "Used in several situations, for example when a page has been deleted.\n\nSee also:\n* {{msg-mw|Actionfailed|page title}}",
"actionfailed": "Used as page title when the submit operation failed, in [[Special:RevisionDelete]].\n\nSee also:\n* {{msg-mw|Actioncomplete|page title}}",
"tog-norollbackdiff": "Не показывать разницу версий после выполнения отката",
"tog-useeditwarning": "Предупреждать, когда я покидаю страницу с несохранёнными изменениями",
"tog-prefershttps": "Всегда использовать защищённое соединение после представления системе",
+ "tog-showrollbackconfirmation": "Показывать подтверждение при нажатии ссылки для отката",
"underline-always": "Всегда",
"underline-never": "Никогда",
"underline-default": "Использовать настройки браузера",
"histfirst": "старейшие",
"histlast": "новейшие",
"historysize": "($1 {{PLURAL:$1|байт|байта|байт}})",
- "historyempty": "(пусто)",
+ "historyempty": "пусто",
"history-feed-title": "История изменений",
"history-feed-description": "История изменений этой страницы в вики",
"history-feed-item-nocomment": "$1 в $2",
"right-reupload-own": "Перезапись файлов, загруженных тем же участником",
"right-reupload-shared": "Замена файлов из общих хранилищ локальными",
"right-upload_by_url": "Загрузка файлов с адреса URL",
- "right-purge": "Очистка кэша страниц без подтверждения",
+ "right-purge": "Очистка кэша страницы",
"right-autoconfirmed": "Обход ограничений скорости на IP-адрес",
"right-bot": "Автоматический процесс",
"right-nominornewtalk": "Малые правки на страницах обсуждений участников не создают для них уведомление о новом сообщении",
"ipb-confirm": "Подтвердить блокировку",
"ipb-sitewide": "Во всём проекте",
"ipb-partial": "Частичная",
+ "ipb-sitewide-help": "Каждая страница вики и все другие действия вклада.",
+ "ipb-partial-help": "Конкретные страницы или пространства имён.",
"ipb-pages-label": "Страницы",
"ipb-namespaces-label": "Пространства имён",
"badipaddress": "IP-адрес записан в неправильном формате, или участника с таким именем не существует.",
"confirm-unwatch-top": "Удалить эту страницу из вашего списка наблюдения?",
"confirm-rollback-button": "ОК",
"confirm-rollback-top": "Откатить правки на этой странице?",
+ "confirm-rollback-bottom": "Это действие немедленно откатит выбранные изменения этой страницы.",
"confirm-mcrrestore-title": "Восстановить версию",
"confirm-mcrundo-title": "Отменить изменение",
"mcrundofailed": "Отменить не удалось",
"logentry-rights-autopromote": "$1 был{{GENDER:$2||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5",
"logentry-upload-upload": "$1 загрузил{{GENDER:$2||а}} $3",
"logentry-upload-overwrite": "$1 загрузил{{GENDER:$2||а}} новую версию $3",
- "logentry-upload-revert": "$1 загÑ\80Ñ\83зил{{GENDER:$2||а}} $3",
+ "logentry-upload-revert": "$1 оÑ\82каÑ\82ил{{GENDER:$2||а}} $3 к Ñ\81Ñ\82аÑ\80ой веÑ\80Ñ\81ии",
"log-name-managetags": "Журнал управления метками",
"log-description-managetags": "На этой странице перечислены задачи, связанные с управлением [[Special:Tags|метками]]. Журнал содержит только действия, выполненные администратором вручную. Метки могут быть созданы или удалены с помощью программного обеспечения вики без добавления записей в этот журнал.",
"logentry-managetags-create": "$1 создал{{GENDER:$2||а}} метку «$4»",
"log-action-filter-suppress-reblock": "Сокрытие пользователя через повторное блокирование",
"log-action-filter-upload-upload": "Новая загрузка",
"log-action-filter-upload-overwrite": "Повторно загрузить",
+ "log-action-filter-upload-revert": "Откатить",
"authmanager-authn-not-in-progress": "Проверка подлинности не выполняется или данные сессии были утеряны. Пожалуйста, начните снова с самого начала.",
"authmanager-authn-no-primary": "Предоставленные учётные данные не могут быть проверены на подлинность.",
"authmanager-authn-no-local-user": "Предоставленные учётные данные не связаны ни с одним участником этой вики.",
"passwordpolicies-policy-passwordcannotbepopular": "Пароль не может соответствовать {{PLURAL:$1|самому часто используемому паролю|какому-либо из $1 самых часто используемых паролей}}",
"passwordpolicies-policy-passwordnotinlargeblacklist": "Пароль не может соответствовать какому-либо из 100 000 самых часто используемых паролей.",
"passwordpolicies-policyflag-forcechange": "необходимо изменить при входе",
+ "passwordpolicies-policyflag-suggestchangeonlogin": "предложить изменение при входе",
"easydeflate-invaliddeflate": "Предоставленное содержимое не спущено надлежащим образом",
"unprotected-js": "По соображениям безопасности JavaScript нельзя загружать с незащищённых страниц. Пожалуйста, создавайте скрипты только в пространстве имён MediaWiki: или как подстраницы участника."
}
"view": "Видіти",
"view-foreign": "Видіти на $1",
"edit": "Едітовати",
+ "edit-local": "Едітовати локальный опис",
"create": "Створити",
+ "create-local": "Придати локальный опис",
"delete": "Вымазати",
"undelete_short": "Обновити $1 {{PLURAL:$1|верзію|верзії|верзії}}",
"viewdeleted_short": "Видїти {{PLURAL:$1|змазанов едітаціёв|$1 змазаны едітації|$1 змазаных едітацій}}",
"jumptonavigation": "навіґація",
"jumptosearch": "Найти",
"view-pool-error": "Перебачте, серверы суть теперь переладованы.\nТоту сторінку собі теперь пoзерать много хоснователїв.\nПросиме Вас, почекайте і спробуйте доступность пізнїше.\n\n$1",
+ "generic-pool-error": "Перебачте, серверы суть теперь переладованы.\nТоту сторінку собі теперь пoзерать много хоснователїв.\nПросиме Вас, почекайте і спробуйте доступность пізнїше.",
"pool-timeout": "Час скінчіня чекать про замок",
"pool-queuefull": "Фронта є повна",
"pool-errorunknown": "Незнама хыба",
"ns-specialprotected": "Шпеціалны сторінкы не є можне едітовати.",
"titleprotected": "Створїня сторінкы з таков назвов было заборонене хоснователём [[User:$1|$1]] з причінов: <em>$2</em>.",
"filereadonlyerror": "Не годно змінити файл „$1“, бо архів файлів „$2“ є теперь лем на чітаня.\n\nАдміністратор сервера, котрый архів заблоковав, додав тото пояснїня: „''$3''“.",
+ "invalidtitle": "Неприпустна назва",
"invalidtitle-knownnamespace": "Непряавилна назва в просторї назв „$2“ і текстом „$3“",
"invalidtitle-unknownnamespace": "Неправилна назва з незнамым чіслом простору назв $1 і текстом „$2“",
"exception-nologin": "Не сьте приголошеный(а)",
"resetpass_submit": "Наставити гесло і приголосити ся",
"changepassword-success": "Ваше гесло было змінено!",
"changepassword-throttled": "Зробили сьте дуже много спроб о приголошіня.\nПросиме Вас, почекайте $1 перед далшов спробов.",
+ "botpasswords-label-create": "Створити",
+ "botpasswords-label-update": "Обновити",
+ "botpasswords-label-cancel": "Зрушыти",
+ "botpasswords-label-delete": "Вымазати",
"resetpass_forbidden": "Гесла не є можне змінити",
"resetpass_forbidden-reason": "Гесла не є можне змінити: $1",
"resetpass-no-info": "Ку тій сторінцї мають прямый приступ лем приголошены хоснователї.",
"action-createpage": "створити тоту сторінку",
"action-createtalk": "створити тоту діскузну сторінку",
"action-createaccount": "Вытворїня того конта хоснователя",
+ "action-history": "зобразити історію той сторінкы",
"action-minoredit": "означіти тото едітованя як мале",
"action-move": "Переменовати тоту сторінку",
"action-move-subpages": "переменованя той сторінкы зо вшыткыма єй підсторінками",
"action-upload_by_url": "наладовати тот файл з URL адресы",
"action-writeapi": "хосновати API про писаня",
"action-delete": "Вымазати тоту сторінку",
- "action-deleterevision": "вымазати тоту ревізію сторінкы",
- "action-deletedhistory": "зобразити історію змазаных ревізій той сторінкы",
+ "action-deleterevision": "вымазаня ревізій",
+ "action-deletedhistory": "зобразити історію змазаных ревізій сторінкы",
+ "action-deletedtext": "зобразити змазаны тексты ревізії",
"action-browsearchive": "глядати змазаны сторінкы",
"action-undelete": "обновити тоту сторінку",
- "action-suppressrevision": "Ñ\81конÑ\82Ñ\80олÑ\91ваÑ\82и Ñ\96 обновиÑ\82и Ñ\82оÑ\82Ñ\83 Ñ\81Ñ\85ованÑ\83 Ñ\80евÑ\96зÑ\96Ñ\8e",
+ "action-suppressrevision": "Ñ\81конÑ\82Ñ\80олÑ\91ваÑ\82и Ñ\96 обновиÑ\82и Ñ\81Ñ\85ованÑ\8b Ñ\80евÑ\96зÑ\96Ñ\97",
"action-suppressionlog": "перегляд того пріватного лоґу",
"action-block": "блокованя того хоснователя",
"action-protect": "змінити рівень охраны той сторінкы",
"action-rollback": "швыдко вернути управы послїднёго хоснователя едітуючого дану сторінку",
- "action-import": "Ñ\96мпоÑ\80Ñ\82 Ñ\82ой Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b з іншой вікі",
- "action-importupload": "Ñ\96мпоÑ\80Ñ\82 Ñ\82ой Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\8b з файлу",
+ "action-import": "Ñ\96мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок з іншой вікі",
+ "action-importupload": "Ñ\96мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок з наладованÑ\8f файлу",
"action-patrol": "позначіти чуджі едітованя як перевірены",
"action-autopatrol": "означіти властных едітовань як патролованы",
"action-unwatchedpages": "зображіня списку неслїдованых сторінок",
"action-viewmywatchlist": "перезерати ваш список слїдованых сторінок",
"action-viewmyprivateinfo": "перезерати вашы пріватны даны",
"action-editmyprivateinfo": "едітовати вашы пріватны інформації",
+ "action-editcontentmodel": "едітовати модел обсягу сторінкы",
"nchanges": "$1 {{PLURAL:$1|зміна|зміны|змін}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|од остатнёй навщівы}}",
"enhancedrc-history": "історія",
"uploaderror": "Під час ладованя ся притрафила хыба",
"upload-recreate-warning": "'''Увага: Файл з тов назвов быв оперед змазаный ці переменованый.'''\n\nТу є про перегляд зображеный список мазаня і переменованя той сторінкы:",
"uploadtext": "Ниже даный формуларь служыть на наладовованя файлів. Уж наладованы файлы собі можете перезерати і глядати помочов [[Special:FileList|списку наладованых файлів]], кажде наладованя ся тыж зазначує до [[Special:Log/upload|книгы наладованя]], змазаня суть в [[Special:Log/delete|книзї змазаных сторінок]].\n\nПро вложіня образчіка до сторінкы хоснуйте єден із слїдуючіх способів запису:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Файл.jpg]]</nowiki></code>''' до сторінкы вложыть цїлый образок,\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Файл.png|thumb|left|Попис]]</nowiki></code>''' вложыть нагляд в рамику зарівнанім на лівый бік, з пописом „Попис“,\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Файл.ogg]]</nowiki></code>''' вложыть дірект одказ на файл, без того жебы ся зобразив на сторінцї.",
- "upload-permitted": "Дозволены тіпы файлів: $1.",
- "upload-preferred": "Преферованы тіпы файлів: $1",
- "upload-prohibited": "Заказаны тіпы файлів: $1.",
+ "upload-permitted": "{{PLURAL:$2|Дозволеный формат|Дозволены форматы}} файлів: $1.",
+ "upload-preferred": "{{PLURAL:$2|Преферованый формат|Преферованы форматы}} файлів: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Заказаный формат|Заказаны форматы}} файлів: $1.",
"uploadlogpage": "Лоґ наладованых файлів",
"uploadlogpagetext": "Ниже найдете список найновшых файлів. Смотьте [[Special:NewFiles|ґалерію новых образків]] про веце візуалного нагляду.",
"filename": "Назва файлу:",
"largefileserver": "Розмір файлу є векшый як ліміт наставленый на сервері.",
"emptyfile": "Файл, котрый сьте вложыли ся видить быти порожнїй. Могла то запричінити хыба в назві файлу. Просиме, перевірте ці сьте справды хотїли вложыти тот файл.",
"windows-nonascii-filename": "Тота вікі не підпорує назвы файлів з шпеціалныма сімболами.",
- "fileexists": "Файл з тов назвов уж екзістує, просиме посмотьте ся на <strong>[[:$1]]</strong>, покы не знаєте напевно, ці хочете тот файл нагородити.\n[[$1|thumb]]",
+ "fileexists": "Файл з тов назвов уж екзістує, просиме сконтролёвати <strong>[[:$1]]</strong>, покы не знаєте напевно, ці хочете тот файл нагородити.\n[[$1|thumb]]",
"filepageexists": "Пописова сторінка про файл з тов назвов уж была на <strong>[[:$1]]</strong> створена, але одповідаючій файл дотеперь не екзістує.\nЗгорнутя, котре ту зазначіте, ся на пописовій сторінцї не зобразить.\nКідь там хочете своє згорнутя зобразити, будете мусити дану сторінку едітовати мануално. [[$1|thumb]]",
"fileexists-extension": "Уже екзістує файл з подобным іменом: [[$2|thumb]]\n* Назва наладованого файлу: <strong>[[:$1]]</strong>\n* Назва екзістуючого файлу: <strong>[[:$2]]</strong>\nВыберте іншу назву.",
"fileexists-thumbnail-yes": "Тот файл є асі образчік в зменшеній великости ''(нагляд)''. [[$1|thumb]]\nПеревірте файл <strong>[[:$1]]</strong>.\nКідь є вказаный файл векшый, але інакше єднакый, не треба окремо наладовати ёго зменшену верзію.",
"upload-too-many-redirects": "URL обсягує барз велё напрямлінь",
"upload-http-error": "Стала ся хыба HTTP: $1",
"upload-copy-upload-invalid-domain": "Наладовованя копірованём негодно з той домены.",
+ "upload-dialog-title": "Наладовати файл",
+ "upload-dialog-button-cancel": "Зрушыти",
+ "upload-dialog-button-back": "Назад",
+ "upload-dialog-button-done": "Готово",
+ "upload-dialog-button-save": "Уложыти",
+ "upload-dialog-button-upload": "Наладовати",
+ "upload-form-label-infoform-title": "Детайлы",
+ "upload-form-label-infoform-name": "Назва",
+ "upload-form-label-infoform-name-tooltip": "Куртый унікатный тітулок того файлу, котрый буде служыти як ёго назва. Можете хосновати обычайный текст і з павзами. Не вказуйте росшырїня файлу.",
+ "upload-form-label-infoform-description": "Опис",
+ "upload-form-label-infoform-description-tooltip": "Курто попиште вшыткы важны інформації о дїли.\nУ фотоґрафіях спомяните головны зображены обєкты, місце і окацію.",
+ "upload-form-label-usage-title": "Хоснованя",
+ "upload-form-label-infoform-categories": "Катеґорії",
+ "upload-form-label-infoform-date": "Датум",
"backend-fail-stream": "Не вдало ся транслёвати файл $1.",
"backend-fail-backup": "Не вдало ся створити резервну копію файлу $1.",
"backend-fail-notexists": "Файл $1 не існує.",
"logeventslist-tag-log": "Evidencija oznaka",
"all-logs-page": "Sve evidencije - Све евиденције",
"alllogstext": "Zajednički prikaz svih dostupnih evidencija sa {{SITENAME}}.\nMožete specificirati prikaz izabiranjem specifičnog spiska, korisničkog imena ili promjenjenog članka (razlikovati velika slova).",
- "logempty": "Ne postoji takav zapis.",
+ "logempty": "Nema pronađenih stavki u evidenciji.",
"log-title-wildcard": "Traži naslove koji počinju s ovim tekstom",
"showhideselectedlogentries": "Prikaži/sakrij izabrane zapise u evidenciji",
"log-edit-tags": "Uredi oznake izabranih zapisničkih unosa",
"histfirst": "najstarejše",
"histlast": "najnovejše",
"historysize": "({{PLURAL:$1|$1 zlog|$1 zloga|$1 zlogi|$1 zlogov}})",
- "historyempty": "(prazno)",
+ "historyempty": "prazno",
"history-feed-title": "Zgodovina strani",
"history-feed-description": "Zgodovina navedene strani {{GRAMMAR:rodilnik|{{SITENAME}}}}",
"history-feed-item-nocomment": "$1 ob $2",
"histfirst": "äldsta",
"histlast": "nyaste",
"historysize": "({{PLURAL:$1|1 byte|$1 byte}})",
- "historyempty": "(tom)",
+ "historyempty": "tom",
"history-feed-title": "Versionshistorik",
"history-feed-description": "Versionshistorik för denna sida på wikin",
"history-feed-item-nocomment": "$1 den $2",
"logeventslist-tag-log": "Журнал міток",
"all-logs-page": "Усі публічні журнали",
"alllogstext": "Комбінований показ журналів {{grammar:genitive|{{SITENAME}}}}.\nВи можете відфільтрувати результати за типом журналу, іменем користувача (враховується регістр) або зазначеною сторінкою (також враховується регістр).",
- "logempty": "У жÑ\83Ñ\80налÑ\96 немаÑ\94 подÑ\96бних записів.",
+ "logempty": "У жÑ\83Ñ\80налÑ\96 немаÑ\94 вÑ\96дповÑ\96дних записів.",
"log-title-wildcard": "Знайти заголовки, що починаються з цих символів",
"showhideselectedlogentries": "Показати/приховати виділені записи журналу",
"log-edit-tags": "Змінити мітки для вибраних записів журналів",
"Fitoschido",
"Dcljr",
"Bukhari",
- "Sajidkhan"
+ "Sajidkhan",
+ "Hmfs.ind"
]
},
"tog-underline": "ربط کی خط کشیدگی:",
"nstab-category": "زمرہ",
"mainpage-nstab": "صفحۂ اول",
"nosuchaction": "مطلوبہ اقدام موجود نہیں",
- "nosuchactiontext": "URL کی جانب سے مختص کیا گیا عمل درست نہیں.\nآپ نے شاید URL غلط لکھا، یا کسی غیر صحیح ربط کی پیروی کی ہے.\n{{اِس سے SITENAME کے زیرِ استعمال مصنع لطیف میں کھٹمل کی نشاندہی کا بھی اندیشہ ہے}}.",
+ "nosuchactiontext": "URL کی جانب سے مختص کیا گیا عمل درست نہیں۔\nآپ نے شاید URL غلط لکھا ہے یا کسی نادرست ربط پر کلک کیا ہے۔\nاِس سے {{SITENAME}} کے زیرِ استعمال سافٹ ویئر میں کسی خامی کی موجودگی کا بھی اندیشہ ہے۔",
"nosuchspecialpage": "کوئی ایسا خاص صفحہ نہیں",
"nospecialpagetext": "<strong>آپ نے ایک غیر موجود خصوصی صفحہ کی درخواست کی ہے۔</strong>\n\nدرست خاص صفحات کی ایک فہرست [[Special:SpecialPages|{{int:specialpages}}]] پر دیکھی جاسکتی ہے۔",
"error": "نقص",
* @ingroup Maintenance
*/
+use MediaWiki\Shell\Shell;
+
/**
* Stream wrapper around 7za filter program.
* Required since we can't pass an open file resource to XMLReader->open()
} else {
return false;
}
- $arg = wfEscapeShellArg( $this->stripPath( $path ) );
+ $arg = Shell::escape( $this->stripPath( $path ) );
$command = "7za $options $arg";
if ( !wfIsWindows() ) {
// Suppress the stupid messages on stderr
$bash = ExecutableFinder::findInDefaultPaths( 'bash' );
if ( !wfIsWindows() && $bash ) {
$retval = false;
- $encPrompt = wfEscapeShellArg( $prompt );
+ $encPrompt = Shell::escape( $prompt );
$command = "read -er -p $encPrompt && echo \"\$REPLY\"";
- $encCommand = wfEscapeShellArg( $command );
- $line = wfShellExec( "$bash -c $encCommand", $retval, [], [ 'walltime' => 0 ] );
+ $encCommand = Shell::escape( $command );
+ $line = Shell::escape( "$bash -c $encCommand", $retval, [], [ 'walltime' => 0 ] );
if ( $retval == 0 ) {
return $line;
require_once __DIR__ . '/../includes/export/WikiExporter.php';
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
use MediaWiki\Storage\BlobAccessException;
use MediaWiki\Storage\SqlBlobStore;
use Wikimedia\Rdbms\IMaintainableDatabase;
if ( file_exists( "$IP/../multiversion/MWScript.php" ) ) {
$cmd = implode( " ",
- array_map( 'wfEscapeShellArg',
+ array_map( [ Shell::class, 'escape' ],
[
$this->php,
"$IP/../multiversion/MWScript.php",
'--wiki', wfWikiID() ] ) );
} else {
$cmd = implode( " ",
- array_map( 'wfEscapeShellArg',
+ array_map( [ Shell::class, 'escape' ],
[
$this->php,
"$IP/maintenance/fetchText.php",
<?php
+use MediaWiki\Shell\Shell;
+
require __DIR__ . '/../Maintenance.php';
class HHVMMakeRepo extends Maintenance {
$hhvm = $this->getOption( 'hhvm', 'hhvm' );
$verbose = $this->getOption( 'verbose', 3 );
- $cmd = wfEscapeShellArg(
+ $cmd = Shell::escape(
$hhvm,
'--hphp',
'--target', 'hhbc',
#!/usr/bin/hhvm -f
<?php
+use MediaWiki\Shell\Shell;
+
require __DIR__ . '/../Maintenance.php';
class RunHipHopServer extends Maintenance {
global $IP;
passthru(
- 'cd ' . wfEscapeShellArg( $IP ) . " && " .
- wfEscapeShellArg(
+ 'cd ' . Shell::escape( $IP ) . " && " .
+ Shell::escape(
'hhvm',
'-c', __DIR__."/server.conf",
'--mode=server',
* @version first release
*/
+use MediaWiki\Shell\Shell;
+
require_once __DIR__ . '/Maintenance.php';
/**
// Do not use wfShellWikiCmd, because mwdoc-filter.php is not
// a Maintenance script.
- $this->inputFilter = wfEscapeShellArg( [
+ $this->inputFilter = Shell::escape( [
$wgPhpCli,
$IP . '/maintenance/mwdoc-filter.php'
] );
* @ingroup Maintenance
*/
+use MediaWiki\Shell\Shell;
+
require_once __DIR__ . '/Maintenance.php';
/**
// in the pipe buffer. This can improve performance by up to a
// factor of 2.
global $wgDBuser, $wgDBserver, $wgDBpassword, $wgDBname;
- $cmd = 'mysql -u' . wfEscapeShellArg( $wgDBuser ) .
- ' -h' . wfEscapeShellArg( $wgDBserver ) .
- ' -p' . wfEscapeShellArg( $wgDBpassword, $wgDBname );
+ $cmd = 'mysql -u' . Shell::escape( $wgDBuser ) .
+ ' -h' . Shell::escape( $wgDBserver ) .
+ ' -p' . Shell::escape( $wgDBpassword, $wgDBname );
$this->output( "Using pipe method\n" );
$pipe = popen( $cmd, 'w' );
}
*/
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
if ( !defined( 'MEDIAWIKI' ) ) {
$optionsWithoutArgs = [ 'fix' ];
echo "Filtering XML dump...\n";
$exitStatus = 0;
passthru( 'mwdumper ' .
- wfEscapeShellArg(
+ Shell::escape(
"--output=file:$filteredXmlFileName",
"--filter=revlist:$revFileName",
$xml
use MediaWiki\Logger\LegacyLogger;
use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
use Wikimedia\Rdbms\IDatabase;
$optionsWithArgs = RecompressTracked::getOptionsWithArgs();
* writing are all slow.
*/
function startReplicaProcs() {
- $cmd = 'php ' . wfEscapeShellArg( __FILE__ );
+ $cmd = 'php ' . Shell::escape( __FILE__ );
foreach ( self::$cmdLineOptionMap as $cmdOption => $classOption ) {
if ( $cmdOption == 'replica-id' ) {
continue;
} elseif ( in_array( $cmdOption, self::$optionsWithArgs ) && isset( $this->$classOption ) ) {
- $cmd .= " --$cmdOption " . wfEscapeShellArg( $this->$classOption );
+ $cmd .= " --$cmdOption " . Shell::escape( $this->$classOption );
} elseif ( $this->$classOption ) {
$cmd .= " --$cmdOption";
}
}
$cmd .= ' --child' .
- ' --wiki ' . wfEscapeShellArg( wfWikiID() ) .
- ' ' . wfEscapeShellArg( ...$this->destClusters );
+ ' --wiki ' . Shell::escape( wfWikiID() ) .
+ ' ' . Shell::escape( ...$this->destClusters );
$this->replicaPipes = $this->replicaProcs = [];
for ( $i = 0; $i < $this->numProcs; $i++ ) {
global $wgResourceBasePath;
return [
-
- /**
- * Special modules who have their own classes
- */
- 'startup' => [ 'class' => ResourceLoaderStartUpModule::class ],
-
// Scripts managed by the local wiki (stored in the MediaWiki namespace)
'site' => [ 'class' => ResourceLoaderSiteModule::class ],
'site.styles' => [ 'class' => ResourceLoaderSiteStylesModule::class ],
],
],
'mediawiki.action.history' => [
+ 'dependencies' => [ 'jquery.makeCollapsible' ],
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.history.js',
'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css',
],
'mediawiki.action.history.styles' => [
'skinStyles' => [
- 'default' => 'resources/src/mediawiki.action/mediawiki.action.history.styles.css',
+ 'default' => 'resources/src/mediawiki.action/mediawiki.action.history.styles.less',
],
'targets' => [ 'desktop', 'mobile' ],
],
}
}
+fieldset.mw-collapsible .mw-collapsible-toggle {
+ position: absolute;
+ right: 0;
+ z-index: 1;
+}
+
// special treatment for list items to match above
// !important necessary to override overly-specific float left and right above.
ol.mw-collapsible:not( @{exclude} ):before,
+++ /dev/null
-/* Basic styles for the history page */
-
-#pagehistory .history-user {
- margin-left: 0.4em;
- margin-right: 0.2em;
-}
-
-#pagehistory li {
- border: 1px solid #fff;
-}
-
-#pagehistory li.selected {
- background-color: #f8f9fa;
- color: #222;
- border: 1px dashed #a2a9b1;
-}
-
-.mw-history-revisionactions {
- float: right;
-}
-
-.updatedmarker {
- background-color: #b7f430;
-}
--- /dev/null
+/* Basic styles for the history page */
+
+#pagehistory .history-user {
+ margin-left: 0.4em;
+ margin-right: 0.2em;
+}
+
+#pagehistory li {
+ border: 1px solid #fff;
+}
+
+#pagehistory li.selected {
+ background-color: #f8f9fa;
+ color: #222;
+ border: 1px dashed #a2a9b1;
+}
+
+.mw-history-revisionactions {
+ float: right;
+}
+
+.updatedmarker {
+ background-color: #b7f430;
+}
}
.mw-datatable th {
- background-color: #ddf;
+ background-color: #eaeeff;
}
.mw-datatable td {
list-style-image: e( '/* @embed */' ) url( @url );
}
-.list-style-image-svg( @svg, @fallback ) {
- list-style-image: e( '/* @embed */' ) url( @svg );
- /* Fallback to PNG bullet for IE 8 and below using CSS hack */
- list-style-image: e( '/* @embed */' ) url( @fallback ) e( '\9' );
-}
-
.hyphens( @value: auto ) {
& when ( @value = auto ) {
// Legacy `word-wrap`; IE 6-11, Edge 12+, Firefox 3.5+, Chrome 4+, Safari 3.1+,
},
/**
- * Get an automatically generated random ID (persisted in sessionStorage)
+ * Retrieve a random ID persisted in sessionStorage, generating it if needed
*
- * This ID is ephemeral for everyone, staying in their browser only until they
- * close their browsing session.
+ * This ID is stored in sessionStorage and persists within a single tab,
+ * including between page views through links and form submissions,
+ * and when going forwards/backwards in browser history, and when restoring
+ * a closed tab, or restoring a closed browser session.
+ *
+ * This is different from session cookies, because it is not shared between
+ * tabs of the same browser. Two simultaneous pageviews in the same browser
+ * can have different session IDs. The ID is also not re-used when opening
+ * a new tab to a website after fully closing others.
+ *
+ * See https://phabricator.wikimedia.org/T118063#4547178 and
+ * https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
+ * for more information.
*
* @return {string} Random session ID
*/
.mw-widget-dateInputWidget {
&.oo-ui-textInputWidget {
display: inline-block;
- width: 21em;
+ max-width: 21em;
// .oo-ui-inline-spacing( 0.5em ); already inherited from `.oo-ui-inputWidget`
.oo-ui-labelElement-label {
* 'dependencies': ['required.foo', 'bar.also', ...]
* 'group': 'somegroup', (or) null
* 'source': 'local', (or) 'anotherwiki'
- * 'skip': 'return !!window.Example', (or) null
+ * 'skip': 'return !!window.Example', (or) null, (or) boolean result of skip
* 'module': export Object
*
* // Set from execute() or mw.loader.state()
* 'state': 'registered', 'loaded', 'loading', 'ready', 'error', or 'missing'
*
* // Optionally added at run-time by mw.loader.implement()
- * 'skipped': true
* 'script': closure, array of urls, or string
* 'style': { ... } (see #execute)
* 'messages': { 'key': 'value', ... }
/**
* @private
- * @param {Array} modules List of module names
+ * @param {string[]} modules List of module names
* @return {string} Hash of concatenated version hashes.
*/
function getCombinedVersion( modules ) {
* execute the module or job now.
*
* @private
- * @param {Array} modules Names of modules to be checked
+ * @param {string[]} modules Names of modules to be checked
* @return {boolean} True if all modules are in state 'ready', false otherwise
*/
function allReady( modules ) {
* dependencies, such that later modules depend on earlier modules. The array
* contains the module names. If the array contains already some module names,
* this function appends its result to the pre-existing array.
- * @param {StringSet} [unresolved] Used to track the current dependency
- * chain, and to report loops in the dependency graph.
- * @throws {Error} If any unregistered module or a dependency loop is encountered
+ * @param {StringSet} [unresolved] Used to detect loops in the dependency graph.
+ * @throws {Error} If an unknown module or a circular dependency is encountered
*/
function sortDependencies( module, resolved, unresolved ) {
- var i, deps, skip;
+ var i, skip, deps;
if ( !( module in registry ) ) {
- throw new Error( 'Unknown dependency: ' + module );
+ throw new Error( 'Unknown module: ' + module );
}
- if ( registry[ module ].skip !== null ) {
+ if ( typeof registry[ module ].skip === 'string' ) {
// eslint-disable-next-line no-new-func
- skip = new Function( registry[ module ].skip );
- registry[ module ].skip = null;
- if ( skip() ) {
- registry[ module ].skipped = true;
+ skip = ( new Function( registry[ module ].skip )() );
+ registry[ module ].skip = !!skip;
+ if ( skip ) {
registry[ module ].dependencies = [];
setAndPropagate( module, 'ready' );
return;
}
}
- if ( resolved.indexOf( module ) !== -1 ) {
- // Module already resolved; nothing to do
- return;
- }
// Create unresolved if not passed in
if ( !unresolved ) {
unresolved = new StringSet();
}
- // Add base modules
- if ( baseModules.indexOf( module ) === -1 ) {
- for ( i = 0; i < baseModules.length; i++ ) {
- if ( resolved.indexOf( baseModules[ i ] ) === -1 ) {
- resolved.push( baseModules[ i ] );
- }
- }
- }
-
- // Tracks down dependencies
+ // Track down dependencies
deps = registry[ module ].dependencies;
unresolved.add( module );
for ( i = 0; i < deps.length; i++ ) {
sortDependencies( deps[ i ], resolved, unresolved );
}
}
+
resolved.push( module );
}
* @throws {Error} If an unregistered module or a dependency loop is encountered
*/
function resolve( modules ) {
- var resolved = [],
+ // Always load base modules
+ var resolved = baseModules.slice(),
i = 0;
for ( ; i < modules.length; i++ ) {
sortDependencies( modules[ i ], resolved );
*/
function resolveStubbornly( modules ) {
var saved,
- resolved = [],
+ // Always load base modules
+ resolved = baseModules.slice(),
i = 0;
for ( ; i < modules.length; i++ ) {
saved = resolved.slice();
* "text/javascript"; if no type is provided, text/javascript is assumed.
*/
load: function ( modules, type ) {
- var filtered, l;
+ var l;
// Allow calling with a url or single dependency as a string
if ( typeof modules === 'string' ) {
modules = [ modules ];
}
- // Filter out top-level modules that are unknown or failed to load before.
- filtered = modules.filter( function ( module ) {
- var state = mw.loader.getState( module );
- return state !== 'error' && state !== 'missing';
- } );
- // Resolve remaining list using the known dependency tree.
- // This also filters out modules with unknown dependencies. (T36853)
- filtered = resolveStubbornly( filtered );
- // Some modules are not yet ready, add to module load queue.
- enqueue( filtered, undefined, undefined );
+ // Resolve modules into flat list for internal queuing.
+ // This also filters out unknown modules and modules with
+ // unknown dependencies, allowing the rest to continue. (T36853)
+ enqueue( resolveStubbornly( modules ), undefined, undefined );
},
/**
*
* Other browsers that pass the check are considered Grade X.
*
- * @param {string} [str] User agent, defaults to navigator.userAgent
+ * @private
+ * @param {string} ua User agent string
* @return {boolean} User agent is compatible with MediaWiki JS
*/
-function isCompatible( str ) {
- var ua = str || navigator.userAgent;
+function isCompatible( ua ) {
return !!(
// https://caniuse.com/#feat=es5
// https://caniuse.com/#feat=use-strict
);
}
-if ( !isCompatible() ) {
+if ( !isCompatible( navigator.userAgent ) ) {
// Handle Grade C
// Undo speculative Grade A <html> class. See ResourceLoaderClientHtml::getDocumentAttributes().
document.documentElement.className = document.documentElement.className
self::$useTemporaryTables = !$this->getCliArg( 'use-normal-tables' );
self::$reuseDB = $this->getCliArg( 'reuse-db' );
- $this->db = wfGetDB( DB_MASTER );
+ $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+ $this->db = $lb->getConnection( DB_MASTER );
$this->checkDbIsSupported();
* @note this method only works when first called. Subsequent calls have no effect,
* even if using different parameters.
*
- * @param Database $db The database connection
+ * @param IMaintainableDatabase $db The database connection
* @param string $prefix The prefix to use for the new table set (aka schema).
*
* @throws MWException If the database table prefix is already $prefix
*/
- public static function setupTestDB( Database $db, $prefix ) {
+ public static function setupTestDB( IMaintainableDatabase $db, $prefix ) {
if ( self::$dbSetup ) {
return;
}
if ( $tablesToRestore ) {
$this->recloneMockTables( $db, $tablesToRestore );
+
+ // Reset the restored tables, mainly for the side effect of
+ // re-calling $this->addCoreDBData() if necessary.
+ $this->resetDB( $db, $tablesToRestore );
}
}
if ( $oldOverrides['alter'] || $oldOverrides['create'] || $oldOverrides['drop'] ) {
$this->undoSchemaOverrides( $db, $oldOverrides );
+ unset( $db->_schemaOverrides );
}
// Determine new overrides.
if ( array_intersect( $tablesUsed, $userTables ) ) {
$tablesUsed = array_unique( array_merge( $tablesUsed, $userTables ) );
TestUserRegistry::clear();
+
+ // Reset $wgUser, which is probably 127.0.0.1, as its loaded data is probably not valid
+ // @todo Should we start setting $wgUser to something nondeterministic
+ // to encourage tests to be updated to not depend on it?
+ global $wgUser;
+ $wgUser->clearInstanceCache( $wgUser->mFrom );
}
if ( array_intersect( $tablesUsed, $pageTables ) ) {
$tablesUsed = array_unique( array_merge( $tablesUsed, $pageTables ) );
}
public function testVariables() {
- $this->assertSame( MagicWord::getVariableIDs(), $this->doQuery( 'variables' ) );
+ $this->assertSame(
+ MediaWikiServices::getInstance()->getMagicWordFactory()->getVariableIDs(),
+ $this->doQuery( 'variables' )
+ );
}
public function testProtocols() {
$importRevision->setComment( 'Imported edit' );
$importRevision->setTimestamp( '19991122001122' );
$importRevision->setText( 'IMPORTED OLD TEST' );
- $importRevision->setUsername( 'Alan Smithee' );
+ $importRevision->setUsername( 'ext>Alan Smithee' );
$importer = MediaWikiServices::getInstance()->getWikiRevisionOldRevisionImporterNoUpdates();
$importer->import( $importRevision );
* @copyright © 2013 Wikimedia Foundation Inc.
*/
-use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\IMaintainableDatabase;
use Wikimedia\Rdbms\LBFactory;
$factory->destroy();
}
- private function quoteTable( Database $db, $table ) {
+ private function quoteTable( IDatabase $db, $table ) {
if ( $db->getType() === 'sqlite' ) {
return $table;
} else {
'delete',
'delete',
'testing user 0 deletion',
- '0',
+ null,
'127.0.0.1',
(string)$page->getTitle()->getNamespace(),
$page->getTitle()->getDBkey(),
$this->assertNodeStart( "contributor" );
$this->skipWhitespace();
- $this->assertTextNode( "ip", false );
+ $this->assertTextNode( "username", false );
+ $this->assertTextNode( "id", false );
$this->assertNodeEnd( "contributor" );
$this->skipWhitespace();
) {
$status = $page->doEditContent(
ContentHandler::makeContent( $text, $page->getTitle(), $model ),
- $summary
+ $summary, 0, false, $this->getTestUser()->getUser()
);
if ( $status->isGood() ) {
$content = $header;
$iterations = intval( $iterations );
+ $username = $this->getTestUser()->getUser()->getName();
+ $userid = $this->getTestUser()->getUser()->getId();
for ( $i = 0; $i < $iterations; $i++ ) {
$page1 = ' <page>
<title>BackupDumperTestP1</title>
<id>' . ( $this->revId1_1 + $i * self::$numOfRevs ) . '</id>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
- <ip>127.0.0.1</ip>
+ <username>' . $username . '</username>
+ <id>' . $userid . '</id>
</contributor>
<comment>BackupDumperTestP1Summary1</comment>
<model>wikitext</model>
<id>' . ( $this->revId2_1 + $i * self::$numOfRevs ) . '</id>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
- <ip>127.0.0.1</ip>
+ <username>' . $username . '</username>
+ <id>' . $userid . '</id>
</contributor>
<comment>BackupDumperTestP2Summary1</comment>
<model>wikitext</model>
<parentid>' . ( $this->revId2_1 + $i * self::$numOfRevs ) . '</parentid>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
- <ip>127.0.0.1</ip>
+ <username>' . $username . '</username>
+ <id>' . $userid . '</id>
</contributor>
<comment>BackupDumperTestP2Summary2</comment>
<model>wikitext</model>
<parentid>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</parentid>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
- <ip>127.0.0.1</ip>
+ <username>' . $username . '</username>
+ <id>' . $userid . '</id>
</contributor>
<comment>BackupDumperTestP2Summary3</comment>
<model>wikitext</model>
<parentid>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</parentid>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
- <ip>127.0.0.1</ip>
+ <username>' . $username . '</username>
+ <id>' . $userid . '</id>
</contributor>
<comment>BackupDumperTestP2Summary4 extra</comment>
<model>wikitext</model>
<id>' . ( $this->revId4_1 + $i * self::$numOfRevs ) . '</id>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
- <ip>127.0.0.1</ip>
+ <username>' . $username . '</username>
+ <id>' . $userid . '</id>
</contributor>
<comment>Talk BackupDumperTestP1 Summary1</comment>
<model>BackupTextPassTestModel</model>
assert.deepEqual(
[ {
topic: 'resourceloader.exception',
- error: 'Unknown dependency: test.load.unreg',
+ error: 'Unknown module: test.load.unreg',
source: 'resolve'
} ],
capture
assert.deepEqual(
[ {
topic: 'resourceloader.exception',
- error: 'Unknown dependency: test.load.missingdep2',
+ error: 'Unknown module: test.load.missingdep2',
source: 'resolve'
} ],
capture
it( 'should offer a way to cancel rollbacks', function () {
HistoryPage.rollback.click();
+
browser.pause( 300 );
+
HistoryPage.rollbackConfirmableNo.click();
browser.pause( 500 );
it( 'should perform rollbacks after confirming intention', function () {
HistoryPage.rollback.click();
+
+ browser.pause( 300 );
+
HistoryPage.rollbackConfirmableYes.click();
// waitUntil indirectly asserts that the content we are looking for is present