diff options
190 files changed, 3414 insertions, 2216 deletions
diff --git a/RELEASE-NOTES-1.44 b/RELEASE-NOTES-1.44 index 8c3f7e05a30a..0355f639e559 100644 --- a/RELEASE-NOTES-1.44 +++ b/RELEASE-NOTES-1.44 @@ -149,6 +149,7 @@ For notes on 1.43.x and older releases, see HISTORY. * Updated codex, codex-design-tokens and codex-icons from v1.14.0 to v1.22.0. * Updated mck89/peast from 1.16.3 to 1.17.0. +* Updated moment from v2.25.2 to v2.30.1. * Updated OOUI from v0.51.2 to v0.51.7. * Updated vue from 3.4.27 to 3.5.13. * Updated wikimedia/bcp-47-code from 2.0.0 to 2.0.1. diff --git a/autoload.php b/autoload.php index ffcec57a34b9..42d2dfac6e1a 100644 --- a/autoload.php +++ b/autoload.php @@ -1294,6 +1294,7 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\DomainEvent\\EventSubscriberBase' => __DIR__ . '/includes/DomainEvent/DomainEventIngress.php', 'MediaWiki\\DomainEvent\\InitializableDomainEventSubscriber' => __DIR__ . '/includes/DomainEvent/InitializableDomainEventSubscriber.php', 'MediaWiki\\EditPage\\Constraint\\AccidentalRecreationConstraint' => __DIR__ . '/includes/editpage/Constraint/AccidentalRecreationConstraint.php', + 'MediaWiki\\EditPage\\Constraint\\AuthorizationConstraint' => __DIR__ . '/includes/editpage/Constraint/AuthorizationConstraint.php', 'MediaWiki\\EditPage\\Constraint\\BrokenRedirectConstraint' => __DIR__ . '/includes/editpage/Constraint/BrokenRedirectConstraint.php', 'MediaWiki\\EditPage\\Constraint\\ChangeTagsConstraint' => __DIR__ . '/includes/editpage/Constraint/ChangeTagsConstraint.php', 'MediaWiki\\EditPage\\Constraint\\ContentModelChangeConstraint' => __DIR__ . '/includes/editpage/Constraint/ContentModelChangeConstraint.php', @@ -1302,10 +1303,10 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\EditPage\\Constraint\\EditConstraintFactory' => __DIR__ . '/includes/editpage/Constraint/EditConstraintFactory.php', 'MediaWiki\\EditPage\\Constraint\\EditConstraintRunner' => __DIR__ . '/includes/editpage/Constraint/EditConstraintRunner.php', 'MediaWiki\\EditPage\\Constraint\\EditFilterMergedContentHookConstraint' => __DIR__ . '/includes/editpage/Constraint/EditFilterMergedContentHookConstraint.php', - 'MediaWiki\\EditPage\\Constraint\\EditRightConstraint' => __DIR__ . '/includes/editpage/Constraint/EditRightConstraint.php', 'MediaWiki\\EditPage\\Constraint\\ExistingSectionEditConstraint' => __DIR__ . '/includes/editpage/Constraint/ExistingSectionEditConstraint.php', 'MediaWiki\\EditPage\\Constraint\\IEditConstraint' => __DIR__ . '/includes/editpage/Constraint/IEditConstraint.php', 'MediaWiki\\EditPage\\Constraint\\ImageRedirectConstraint' => __DIR__ . '/includes/editpage/Constraint/ImageRedirectConstraint.php', + 'MediaWiki\\EditPage\\Constraint\\LinkPurgeRateLimitConstraint' => __DIR__ . '/includes/editpage/Constraint/LinkPurgeRateLimitConstraint.php', 'MediaWiki\\EditPage\\Constraint\\MissingCommentConstraint' => __DIR__ . '/includes/editpage/Constraint/MissingCommentConstraint.php', 'MediaWiki\\EditPage\\Constraint\\NewSectionMissingSubjectConstraint' => __DIR__ . '/includes/editpage/Constraint/NewSectionMissingSubjectConstraint.php', 'MediaWiki\\EditPage\\Constraint\\PageSizeConstraint' => __DIR__ . '/includes/editpage/Constraint/PageSizeConstraint.php', @@ -1314,8 +1315,6 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\EditPage\\Constraint\\SimpleAntiSpamConstraint' => __DIR__ . '/includes/editpage/Constraint/SimpleAntiSpamConstraint.php', 'MediaWiki\\EditPage\\Constraint\\SpamRegexConstraint' => __DIR__ . '/includes/editpage/Constraint/SpamRegexConstraint.php', 'MediaWiki\\EditPage\\Constraint\\UnicodeConstraint' => __DIR__ . '/includes/editpage/Constraint/UnicodeConstraint.php', - 'MediaWiki\\EditPage\\Constraint\\UserBlockConstraint' => __DIR__ . '/includes/editpage/Constraint/UserBlockConstraint.php', - 'MediaWiki\\EditPage\\Constraint\\UserRateLimitConstraint' => __DIR__ . '/includes/editpage/Constraint/UserRateLimitConstraint.php', 'MediaWiki\\EditPage\\EditPage' => __DIR__ . '/includes/editpage/EditPage.php', 'MediaWiki\\EditPage\\IEditObject' => __DIR__ . '/includes/editpage/IEditObject.php', 'MediaWiki\\EditPage\\IntroMessageBuilder' => __DIR__ . '/includes/editpage/IntroMessageBuilder.php', diff --git a/includes/Output/OutputPage.php b/includes/Output/OutputPage.php index 0a33bb608ccd..80fd513cc61b 100644 --- a/includes/Output/OutputPage.php +++ b/includes/Output/OutputPage.php @@ -2102,6 +2102,7 @@ class OutputPage extends ContextSource { * @deprecated since 1.44, use ::getMetadata()->setRevisionTimestamp(...) */ public function setRevisionTimestamp( $timestamp ) { + wfDeprecated( __METHOD__, '1.44' ); $previousValue = $this->metadata->getRevisionTimestamp(); $this->metadata->setRevisionTimestamp( $timestamp ); return $previousValue; diff --git a/includes/Rest/i18n/gl.json b/includes/Rest/i18n/gl.json index 54c07b691cca..ee2bdc9ab2eb 100644 --- a/includes/Rest/i18n/gl.json +++ b/includes/Rest/i18n/gl.json @@ -87,6 +87,14 @@ "rest-unsupported-language-conversion": "Conversión de lingua non compatible: $1 a $2", "rest-unknown-content-model": "Modelo de contido descoñecido: $1", "rest-page-bundle-validation-error": "PageBundle non coincide con contentVersion: $1", + "rest-module": "Módulo", + "rest-module-default": "Módulo predeterminado", + "rest-module-extra-routes-title": "API REST de MediaWiki", + "rest-module-extra-routes-desc": "Extremos REST non asociados a ningún módulo", + "rest-module-specs.v0-title": "Especificacións", + "rest-module-specs.v0-desc": "Módulo de autodocumentación que proporciona descubrimento, especificacións e esquemas para todos os módulos dispoñibles.", + "rest-module-content.v1-title": "Contido da páxina", + "rest-module-content.v1-desc": "Ofrece acceso ao contido e metadatos das páxinas e revisións", "rest-param-desc-revision-id": "Identificador da revisión", "rest-param-desc-source": "Contido da páxina no formato especificado pola propiedade content_model" } diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index f82bb3598935..68ec604820dd 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -2793,9 +2793,6 @@ return [ ), LoggerFactory::getProvider(), - // UserBlockConstraint - $services->getPermissionManager(), - // EditFilterMergedContentHookConstraint $services->getHookContainer(), @@ -2805,7 +2802,7 @@ return [ // SpamRegexConstraint $services->getSpamChecker(), - // UserRateLimitConstraint + // LinkPurgeRateLimitConstraint $services->getRateLimiter() ); }, diff --git a/includes/api/ApiMessageTrait.php b/includes/api/ApiMessageTrait.php index 8f796101ce2b..9c2bd7575117 100644 --- a/includes/api/ApiMessageTrait.php +++ b/includes/api/ApiMessageTrait.php @@ -67,6 +67,7 @@ trait ApiMessageTrait { 'importuploaderrorpartial' => 'partialupload', 'importuploaderrorsize' => 'filetoobig', 'importuploaderrortemp' => 'notempdir', + 'ipb-block-not-found' => 'alreadyblocked', 'ipb_already_blocked' => 'alreadyblocked', 'ipb_blocked_as_range' => 'blockedasrange', 'ipb_cant_unblock' => 'cantunblock', diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json index 7a7b7cca92f3..35e9fadef31c 100644 --- a/includes/api/i18n/ja.json +++ b/includes/api/i18n/ja.json @@ -27,12 +27,14 @@ "Yamagata Yusuke", "Yusuke1109", "Yuukin0248", + "もなー(偽物)", "ネイ" ] }, "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|ドキュメンテーション]]\n* [[mw:Special:MyLanguage/API:Etiquette|エチケットと使用ガイドライン]]\n* [[mw:Special:MyLanguage/API:FAQ|よくある質問]]\n* [https://lists.wikimedia.org/postorius/lists/mediawiki-api.lists.wikimedia.org/ メーリングリスト]\n* [https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/ API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグと要望]\n</div>\n<strong>状態:</strong> MediaWiki APIは、サポートおよび更新が恒常的に続けられている、安定した多機能インターフェースです。時折大きな仕様変更が適用されることもありますが、[https://lists.wikimedia.org/hyperkitty/list/mediawiki-api-announce@lists.wikimedia.org/ the mediawiki-api-announce メーリングリスト]を購読すると適時にアップデート通知を受け取ることができます。\n\n<strong>リクエストエラー:</strong> 非適合形式でAPIにリクエストに送られた場合、\"MediaWiki-API-Error\"のキーを含むHTTPヘッダーが返され、レスポンスのヘッダー値とエラーコード値が同値になります。詳細は、[[mw:Special:MyLanguage/API:Errors_and_warnings|API:エラーと警告]]をご覧ください。\n\n<p class=\"mw-apisandbox-link\"><strong>テスト:</strong> [[Special:ApiSandbox|APIサンドボックス]]を使用すると、容易にAPIリクエストのテストが可能です。</p>", "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": "<code>s-maxage</code>のHTTPキャッシュコントロールヘッダーをこの秒数に指定します。エラーはキャッシュされません。", "apihelp-main-param-maxage": "<code>max-age</code>のHTTPキャッシュコントロールヘッダーをこの秒数に指定します。エラーはキャッシュされません。", "apihelp-main-param-assert": "<kbd>user</kbd> に設定した場合は利用者がログインしていること(臨時利用者としてログインしている場合も含む)を、 <kbd>anon</kbd> に設定した場合はログインして<em>いない</em>ことを、<kbd>bot</kbd> の場合はボット利用者権限があることを検証します。", @@ -52,6 +54,7 @@ "apihelp-main-param-errorlang": "警告およびエラーで使用する言語。 <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]]</kbd> は言語コードの一覧を返します。 <kbd>content</kbd> を指定するとこのウィキのコンテンツ言語、<kbd>uselang</kbd> を指定すると <var>uselang</var> パラメーターと同じ値を使用します。", "apihelp-main-param-errorsuselocal": "指定された場合、エラーテキストは{{ns:MediaWiki}}名前空間からローカルにカスタマイズされたメッセージを使用します。", "apihelp-block-summary": "利用者をブロックします。", + "apihelp-block-param-id": "変更するブロックID。", "apihelp-block-param-user": "ブロックする利用者。", "apihelp-block-param-userid": "代わりに <kbd>$1user=#<var>ID</var></kbd> を指定してください。", "apihelp-block-param-expiry": "有効期限。相対的 (例: <kbd>5 months</kbd> または <kbd>2 weeks</kbd>) または絶対的 (e.g. <kbd>2014-09-18T12:34:56Z</kbd>) どちらでも構いません。<kbd>infinite</kbd>, <kbd>indefinite</kbd>, もしくは <kbd>never</kbd> と設定した場合, 無期限ブロックとなります。", @@ -63,18 +66,26 @@ "apihelp-block-param-hidename": "ブロック記録から利用者名を秘匿します。(<code>hideuser</code> 権限が必要です)", "apihelp-block-param-allowusertalk": "自身のトークページの編集を許可する (<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> に依存)。", "apihelp-block-param-reblock": "その利用者がすでにブロックされている場合、ブロックを上書きします。", + "apihelp-block-param-newblock": "利用者がすでにブロックされている場合でも、別のブロックを追加します。", "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。", "apihelp-block-param-watchlistexpiry": "ウォッチリストの有効期限のタイムスタンプ。現在の有効期限を変更せずそのままにするには、このパラメーターを完全に省略します。", "apihelp-block-param-tags": "ブロック記録の項目に適用する変更タグ。", "apihelp-block-param-partial": "サイト全体ではなく特定のページまたは名前空間での編集をブロックします。", "apihelp-block-param-pagerestrictions": "利用者が編集できないようにするページのタイトルのリスト。<var>partial</var> に true が設定されている場合のみ適用します。", "apihelp-block-param-namespacerestrictions": "利用者が編集できないようにする名前空間のID。<var>partial</var> に true が設定されている場合のみ適用します。", + "apihelp-block-param-actionrestrictions": "利用者に実行させない操作のリスト。<var>partial</var> が true に設定されている場合のみ適用されます。", "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を何らかの理由で3日ブロックする。", "apihelp-block-example-user-complex": "利用者 <kbd>Vandal</kbd> を何らかの理由で無期限ブロックし、新たなアカウント作成とメールの送信を禁止する。", "apihelp-changeauthenticationdata-summary": "現在の利用者の認証データを変更します。", "apihelp-changeauthenticationdata-example-password": "現在の利用者のパスワードを <kbd>ExamplePassword</kbd> に変更する。", "apihelp-changecontentmodel-summary": "ページのコンテンツモデルを変更します。", + "apihelp-changecontentmodel-param-title": "コンテンツモデルを変更するページ名。<var>$1pageid</var>と併用することはできません。", + "apihelp-changecontentmodel-param-pageid": "コンテンツモデルを変更するページID。<var>$1title</var> とは併用できません。", + "apihelp-changecontentmodel-param-summary": "編集の概要と記録エントリの理由", + "apihelp-changecontentmodel-param-tags": "記録エントリに適用するタグを変更して編集します。", "apihelp-changecontentmodel-param-model": "新しいコンテンツのコンテンツモデル。", + "apihelp-changecontentmodel-param-bot": "コンテンツモデルの変更をボット フラグでマークします。", + "apihelp-changecontentmodel-example": "メインページが<code>text</code>コンテンツモデルを持つよう変更する", "apihelp-checktoken-summary": "<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> のトークンの妥当性を確認します。", "apihelp-checktoken-param-type": "調べるトークンの種類。", "apihelp-checktoken-param-token": "調べるトークン。", diff --git a/includes/block/BlockUser.php b/includes/block/BlockUser.php index aa9ac9269fd4..3de0388d1611 100644 --- a/includes/block/BlockUser.php +++ b/includes/block/BlockUser.php @@ -587,7 +587,6 @@ class BlockUser { } $expectedTargetCount = 0; - $priorBlock = null; $priorBlocks = $this->getPriorBlocksForTarget(); if ( $this->blockToUpdate !== null ) { @@ -601,7 +600,7 @@ class BlockUser { } elseif ( $conflictMode === self::CONFLICT_NEW && $this->options->get( MainConfigNames::EnableMultiBlocks ) ) { - foreach ( $this->getPriorBlocksForTarget() as $priorBlock ) { + foreach ( $priorBlocks as $priorBlock ) { if ( $block->equals( $priorBlock ) ) { // Block settings are equal => user is already blocked $this->logger->debug( 'placeBlockInternal: ' . @@ -610,8 +609,10 @@ class BlockUser { } } $expectedTargetCount = null; + $priorBlock = null; $update = false; } elseif ( !$priorBlocks ) { + $priorBlock = null; $update = false; } else { // Reblock only if the caller wants so diff --git a/includes/block/DatabaseBlockStore.php b/includes/block/DatabaseBlockStore.php index c33157b58157..20f662e044d5 100644 --- a/includes/block/DatabaseBlockStore.php +++ b/includes/block/DatabaseBlockStore.php @@ -1044,6 +1044,7 @@ class DatabaseBlockStore { $targetUserName = (string)$target; $targetUserId = $target->getUserIdentity()->getId( $this->wikiId ); $targetConds = [ 'bt_user' => $targetUserId ]; + $targetLockKey = $dbw->getDomainID() . ':block:u:' . $targetUserId; } else { $targetAddress = (string)$target; $targetUserName = null; @@ -1052,6 +1053,8 @@ class DatabaseBlockStore { 'bt_address' => $targetAddress, 'bt_auto' => $isAuto, ]; + $targetLockKey = $dbw->getDomainID() . ':block:' . + ( $isAuto ? 'a' : 'i' ) . ':' . $targetAddress; } $condsWithCount = $targetConds; @@ -1059,6 +1062,15 @@ class DatabaseBlockStore { $condsWithCount['bt_count'] = $expectedTargetCount; } + $dbw->lock( $targetLockKey, __METHOD__ ); + $func = __METHOD__; + $dbw->onTransactionCommitOrIdle( + static function () use ( $dbw, $targetLockKey, $func ) { + $dbw->unlock( $targetLockKey, "$func.closure" ); + }, + __METHOD__ + ); + // This query locks the index gap when the target doesn't exist yet, // so there is a risk of throttling adjacent block insertions, // especially on small wikis which have larger gaps. If this proves to @@ -1076,6 +1088,7 @@ class DatabaseBlockStore { ->select( [ 'bt_id', 'bt_count' ] ) ->from( 'block_target' ) ->where( $targetConds ) + ->forUpdate() ->caller( __METHOD__ ) ->fetchResultSet(); if ( $res->numRows() > 1 ) { diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php index faca5c529263..e5a3b1428525 100644 --- a/includes/diff/DifferenceEngine.php +++ b/includes/diff/DifferenceEngine.php @@ -1238,7 +1238,7 @@ class DifferenceEngine extends ContextSource { $out->setRevisionId( $this->mNewid ); $out->setRevisionIsCurrent( $this->mNewRevisionRecord->isCurrent() ); - $out->setRevisionTimestamp( $this->mNewRevisionRecord->getTimestamp() ); + $out->getMetadata()->setRevisionTimestamp( $this->mNewRevisionRecord->getTimestamp() ); $out->setArticleFlag( true ); if ( !$this->hookRunner->onArticleRevisionViewCustom( diff --git a/includes/editpage/Constraint/AuthorizationConstraint.php b/includes/editpage/Constraint/AuthorizationConstraint.php new file mode 100644 index 000000000000..73247160fa7b --- /dev/null +++ b/includes/editpage/Constraint/AuthorizationConstraint.php @@ -0,0 +1,88 @@ +<?php +/** + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + */ + +namespace MediaWiki\EditPage\Constraint; + +use MediaWiki\Page\PageIdentity; +use MediaWiki\Permissions\Authority; +use MediaWiki\Permissions\PermissionStatus; +use StatusValue; + +/** + * Verify authorization to edit the page (user rights, rate limits, blocks). + * + * @since 1.44 + * @internal + */ +class AuthorizationConstraint implements IEditConstraint { + + private PermissionStatus $status; + + private Authority $performer; + private PageIdentity $target; + private bool $new; + + public function __construct( + Authority $performer, + PageIdentity $target, + bool $new + ) { + $this->performer = $performer; + $this->target = $target; + $this->new = $new; + } + + public function checkConstraint(): string { + $this->status = PermissionStatus::newEmpty(); + + if ( $this->new && !$this->performer->authorizeWrite( 'create', $this->target, $this->status ) ) { + return self::CONSTRAINT_FAILED; + } + + if ( !$this->performer->authorizeWrite( 'edit', $this->target, $this->status ) ) { + return self::CONSTRAINT_FAILED; + } + + return self::CONSTRAINT_PASSED; + } + + public function getLegacyStatus(): StatusValue { + $statusValue = StatusValue::newGood(); + + if ( !$this->status->isGood() ) { + // Report the most specific errors first + if ( $this->status->isBlocked() ) { + $statusValue->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER ); + } elseif ( $this->status->isRateLimitExceeded() ) { + $statusValue->setResult( false, self::AS_RATE_LIMITED ); + } elseif ( $this->status->getPermission() === 'create' ) { + $statusValue->setResult( false, self::AS_NO_CREATE_PERMISSION ); + } elseif ( !$this->performer->isRegistered() ) { + $statusValue->setResult( false, self::AS_READ_ONLY_PAGE_ANON ); + } else { + $statusValue->setResult( false, self::AS_READ_ONLY_PAGE_LOGGED ); + } + } + + // TODO: Use error messages from the PermissionStatus ($this->status) here - T384399 + return $statusValue; + } + +} diff --git a/includes/editpage/Constraint/ContentModelChangeConstraint.php b/includes/editpage/Constraint/ContentModelChangeConstraint.php index 8ed2e56debde..2581ebab3c14 100644 --- a/includes/editpage/Constraint/ContentModelChangeConstraint.php +++ b/includes/editpage/Constraint/ContentModelChangeConstraint.php @@ -21,6 +21,7 @@ namespace MediaWiki\EditPage\Constraint; use MediaWiki\Permissions\Authority; +use MediaWiki\Permissions\PermissionStatus; use MediaWiki\Title\Title; use StatusValue; @@ -28,6 +29,7 @@ use StatusValue; * Verify user permissions if changing content model: * Must have editcontentmodel rights * Must be able to edit under the new content model + * Must not have exceeded the rate limit * * @since 1.36 * @internal @@ -35,10 +37,11 @@ use StatusValue; */ class ContentModelChangeConstraint implements IEditConstraint { + private PermissionStatus $status; + private Authority $performer; private Title $title; private string $newContentModel; - private string $result; /** * @param Authority $performer @@ -56,45 +59,43 @@ class ContentModelChangeConstraint implements IEditConstraint { } public function checkConstraint(): string { + $this->status = PermissionStatus::newEmpty(); + if ( $this->newContentModel === $this->title->getContentModel() ) { // No change - $this->result = self::CONSTRAINT_PASSED; return self::CONSTRAINT_PASSED; } - if ( !$this->performer->isAllowed( 'editcontentmodel' ) ) { - $this->result = self::CONSTRAINT_FAILED; + if ( !$this->performer->authorizeWrite( 'editcontentmodel', $this->title, $this->status ) ) { return self::CONSTRAINT_FAILED; } - // Make sure the user can edit the page under the new content model too + // Make sure the user can edit the page under the new content model too. + // We rely on caching in UserAuthority to avoid bumping the rate limit counter twice. $titleWithNewContentModel = clone $this->title; $titleWithNewContentModel->setContentModel( $this->newContentModel ); - - $canEditModel = $this->performer->authorizeWrite( - 'editcontentmodel', - $titleWithNewContentModel - ); - if ( - !$canEditModel - || !$this->performer->authorizeWrite( 'edit', $titleWithNewContentModel ) + !$this->performer->authorizeWrite( 'editcontentmodel', $titleWithNewContentModel, $this->status ) + || !$this->performer->authorizeWrite( 'edit', $titleWithNewContentModel, $this->status ) ) { - $this->result = self::CONSTRAINT_FAILED; return self::CONSTRAINT_FAILED; } - $this->result = self::CONSTRAINT_PASSED; return self::CONSTRAINT_PASSED; } public function getLegacyStatus(): StatusValue { $statusValue = StatusValue::newGood(); - if ( $this->result === self::CONSTRAINT_FAILED ) { - $statusValue->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL ); + if ( !$this->status->isGood() ) { + if ( $this->status->isRateLimitExceeded() ) { + $statusValue->setResult( false, self::AS_RATE_LIMITED ); + } else { + $statusValue->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL ); + } } + // TODO: Use error messages from the PermissionStatus ($this->status) here - T384399 return $statusValue; } diff --git a/includes/editpage/Constraint/EditConstraintFactory.php b/includes/editpage/Constraint/EditConstraintFactory.php index 750c977d2312..e9fede9f256c 100644 --- a/includes/editpage/Constraint/EditConstraintFactory.php +++ b/includes/editpage/Constraint/EditConstraintFactory.php @@ -26,10 +26,8 @@ use MediaWiki\Context\IContextSource; use MediaWiki\EditPage\SpamChecker; use MediaWiki\HookContainer\HookContainer; use MediaWiki\Language\Language; -use MediaWiki\Linker\LinkTarget; use MediaWiki\Logger\Spi; use MediaWiki\MainConfigNames; -use MediaWiki\Permissions\PermissionManager; use MediaWiki\Permissions\RateLimiter; use MediaWiki\Permissions\RateLimitSubject; use MediaWiki\Title\Title; @@ -54,7 +52,6 @@ class EditConstraintFactory { private ServiceOptions $options; private Spi $loggerFactory; - private PermissionManager $permissionManager; private HookContainer $hookContainer; private ReadOnlyMode $readOnlyMode; private SpamChecker $spamRegexChecker; @@ -74,7 +71,6 @@ class EditConstraintFactory { * * @param ServiceOptions $options * @param Spi $loggerFactory - * @param PermissionManager $permissionManager * @param HookContainer $hookContainer * @param ReadOnlyMode $readOnlyMode * @param SpamChecker $spamRegexChecker @@ -83,7 +79,6 @@ class EditConstraintFactory { public function __construct( ServiceOptions $options, Spi $loggerFactory, - PermissionManager $permissionManager, HookContainer $hookContainer, ReadOnlyMode $readOnlyMode, SpamChecker $spamRegexChecker, @@ -95,9 +90,6 @@ class EditConstraintFactory { $this->options = $options; $this->loggerFactory = $loggerFactory; - // UserBlockConstraint - $this->permissionManager = $permissionManager; - // EditFilterMergedContentHookConstraint $this->hookContainer = $hookContainer; @@ -107,7 +99,7 @@ class EditConstraintFactory { // SpamRegexConstraint $this->spamRegexChecker = $spamRegexChecker; - // UserRateLimitConstraint + // LinkPurgeRateLimitConstraint $this->rateLimiter = $rateLimiter; } @@ -163,21 +155,15 @@ class EditConstraintFactory { /** * @param RateLimitSubject $subject - * @param string $oldModel - * @param string $newModel * - * @return UserRateLimitConstraint + * @return LinkPurgeRateLimitConstraint */ - public function newUserRateLimitConstraint( - RateLimitSubject $subject, - string $oldModel, - string $newModel - ): UserRateLimitConstraint { - return new UserRateLimitConstraint( + public function newLinkPurgeRateLimitConstraint( + RateLimitSubject $subject + ): LinkPurgeRateLimitConstraint { + return new LinkPurgeRateLimitConstraint( $this->rateLimiter, - $subject, - $oldModel, - $newModel + $subject ); } @@ -226,39 +212,4 @@ class EditConstraintFactory { ); } - /** - * @param LinkTarget $title - * @param User $user - * @return UserBlockConstraint - */ - public function newUserBlockConstraint( - LinkTarget $title, - User $user - ): UserBlockConstraint { - return new UserBlockConstraint( - $this->permissionManager, - $title, - $user - ); - } - - /** - * @param User $performer - * @param Title $title - * @param bool $new - * @return EditRightConstraint - */ - public function newEditRightConstraint( - User $performer, - Title $title, - bool $new - ): EditRightConstraint { - return new EditRightConstraint( - $performer, - $this->permissionManager, - $title, - $new - ); - } - } diff --git a/includes/editpage/Constraint/EditRightConstraint.php b/includes/editpage/Constraint/EditRightConstraint.php deleted file mode 100644 index 47be037e4dad..000000000000 --- a/includes/editpage/Constraint/EditRightConstraint.php +++ /dev/null @@ -1,105 +0,0 @@ -<?php -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - */ - -namespace MediaWiki\EditPage\Constraint; - -use MediaWiki\Permissions\PermissionManager; -use MediaWiki\Title\Title; -use MediaWiki\User\User; -use StatusValue; - -/** - * Verify user permissions: - * Must have edit rights - * - * @since 1.36 - * @internal - * @author DannyS712 - */ -class EditRightConstraint implements IEditConstraint { - - private User $performer; - private PermissionManager $permManager; - private Title $title; - private string $result; - private bool $new; - - /** - * @param User $performer - * @param PermissionManager $permManager - * @param Title $title - * @param bool $new - */ - public function __construct( - User $performer, - PermissionManager $permManager, - Title $title, - bool $new - ) { - $this->performer = $performer; - $this->permManager = $permManager; - $this->title = $title; - $this->new = $new; - } - - public function checkConstraint(): string { - if ( $this->new ) { - // Check isn't simple enough to just repeat when getting the status - if ( !$this->performer->authorizeWrite( 'create', $this->title ) ) { - $this->result = (string)self::AS_NO_CREATE_PERMISSION; - return self::CONSTRAINT_FAILED; - } - } - - // Check isn't simple enough to just repeat when getting the status - // Prior to 1.41 this checked if the user had edit rights in general - // instead of for the specific page in question. - if ( !$this->permManager->userCan( - 'edit', - $this->performer, - $this->title - ) ) { - $this->result = self::CONSTRAINT_FAILED; - return self::CONSTRAINT_FAILED; - } - - $this->result = self::CONSTRAINT_PASSED; - return self::CONSTRAINT_PASSED; - } - - public function getLegacyStatus(): StatusValue { - $statusValue = StatusValue::newGood(); - - if ( $this->result === self::CONSTRAINT_FAILED ) { - if ( !$this->performer->isRegistered() ) { - $statusValue->setResult( false, self::AS_READ_ONLY_PAGE_ANON ); - } else { - $statusValue->fatal( 'readonlytext' ); - $statusValue->value = self::AS_READ_ONLY_PAGE_LOGGED; - } - } elseif ( $this->result === (string)self::AS_NO_CREATE_PERMISSION ) { - $statusValue->fatal( 'nocreatetext' ); - $statusValue->value = self::AS_NO_CREATE_PERMISSION; - } - - return $statusValue; - } - -} diff --git a/includes/editpage/Constraint/UserRateLimitConstraint.php b/includes/editpage/Constraint/LinkPurgeRateLimitConstraint.php index 8f35dd5879d0..d25cf9336d88 100644 --- a/includes/editpage/Constraint/UserRateLimitConstraint.php +++ b/includes/editpage/Constraint/LinkPurgeRateLimitConstraint.php @@ -25,31 +25,26 @@ use MediaWiki\Permissions\RateLimitSubject; use StatusValue; /** - * Verify user doesn't exceed rate limits + * Verify that the user doesn't exceed 'linkpurge' limits, which are weird and special. + * Other rate limits have been integrated into their respective permission checks. * - * @since 1.36 + * @since 1.44 * @internal * @author DannyS712 */ -class UserRateLimitConstraint implements IEditConstraint { +class LinkPurgeRateLimitConstraint implements IEditConstraint { private RateLimitSubject $subject; - private string $oldContentModel; - private string $newContentModel; private RateLimiter $limiter; private string $result; public function __construct( RateLimiter $limiter, - RateLimitSubject $subject, - string $oldContentModel, - string $newContentModel + RateLimitSubject $subject ) { $this->limiter = $limiter; $this->subject = $subject; - $this->oldContentModel = $oldContentModel; - $this->newContentModel = $newContentModel; } private function limit( string $action, int $inc = 1 ): bool { @@ -57,16 +52,10 @@ class UserRateLimitConstraint implements IEditConstraint { } public function checkConstraint(): string { - // Need to check for rate limits on `editcontentmodel` if it is changing - $contentModelChange = ( $this->newContentModel !== $this->oldContentModel ); - // TODO inject and use a ThrottleStore once available, see T261744 // Checking if the user is rate limited increments the counts, so we cannot perform // the check again when getting the status; thus, store the result - if ( $this->limit( 'edit' ) - || $this->limit( 'linkpurge', 0 ) // only counted after the fact - || ( $contentModelChange && $this->limit( 'editcontentmodel' ) ) - ) { + if ( $this->limit( 'linkpurge', /* only counted after the fact */ 0 ) ) { $this->result = self::CONSTRAINT_FAILED; } else { $this->result = self::CONSTRAINT_PASSED; diff --git a/includes/editpage/Constraint/UserBlockConstraint.php b/includes/editpage/Constraint/UserBlockConstraint.php deleted file mode 100644 index bdd33262d434..000000000000 --- a/includes/editpage/Constraint/UserBlockConstraint.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - */ - -namespace MediaWiki\EditPage\Constraint; - -use MediaWiki\Linker\LinkTarget; -use MediaWiki\Permissions\PermissionManager; -use MediaWiki\User\User; -use StatusValue; - -/** - * Verify user permissions: - * Must not be blocked from the page - * - * @since 1.36 - * @internal - * @author DannyS712 - */ -class UserBlockConstraint implements IEditConstraint { - - private PermissionManager $permissionManager; - private LinkTarget $title; - private User $user; - private string $result; - - /** - * @param PermissionManager $permissionManager - * @param LinkTarget $title - * @param User $user - */ - public function __construct( - PermissionManager $permissionManager, - LinkTarget $title, - User $user - ) { - $this->permissionManager = $permissionManager; - $this->title = $title; - $this->user = $user; - } - - public function checkConstraint(): string { - // Check isn't simple enough to just repeat when getting the status - if ( $this->permissionManager->isBlockedFrom( $this->user, $this->title ) ) { - $this->result = self::CONSTRAINT_FAILED; - return self::CONSTRAINT_FAILED; - } - - $this->result = self::CONSTRAINT_PASSED; - return self::CONSTRAINT_PASSED; - } - - public function getLegacyStatus(): StatusValue { - $statusValue = StatusValue::newGood(); - - if ( $this->result === self::CONSTRAINT_FAILED ) { - $statusValue->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER ); - } - - return $statusValue; - } - -} diff --git a/includes/editpage/EditPage.php b/includes/editpage/EditPage.php index 93a3ad5a28e8..f08196894d88 100644 --- a/includes/editpage/EditPage.php +++ b/includes/editpage/EditPage.php @@ -37,6 +37,7 @@ use MediaWiki\Context\IContextSource; use MediaWiki\Debug\DeprecationHelper; use MediaWiki\Deferred\DeferredUpdates; use MediaWiki\EditPage\Constraint\AccidentalRecreationConstraint; +use MediaWiki\EditPage\Constraint\AuthorizationConstraint; use MediaWiki\EditPage\Constraint\BrokenRedirectConstraint; use MediaWiki\EditPage\Constraint\ChangeTagsConstraint; use MediaWiki\EditPage\Constraint\ContentModelChangeConstraint; @@ -54,7 +55,6 @@ use MediaWiki\EditPage\Constraint\PageSizeConstraint; use MediaWiki\EditPage\Constraint\SelfRedirectConstraint; use MediaWiki\EditPage\Constraint\SpamRegexConstraint; use MediaWiki\EditPage\Constraint\UnicodeConstraint; -use MediaWiki\EditPage\Constraint\UserBlockConstraint; use MediaWiki\Exception\ErrorPageError; use MediaWiki\Exception\MWContentSerializationException; use MediaWiki\Exception\MWException; @@ -2189,24 +2189,31 @@ class EditPage implements IEditObject { ) ); $constraintRunner->addConstraint( - $constraintFactory->newUserBlockConstraint( $this->mTitle, $requestUser ) + $constraintFactory->newReadOnlyConstraint() ); + + // Load the page data from the primary DB. If anything changes in the meantime, + // we detect it by using page_latest like a token in a 1 try compare-and-swap. + $this->page->loadPageData( IDBAccessObject::READ_LATEST ); + $new = !$this->page->exists(); + $constraintRunner->addConstraint( - new ContentModelChangeConstraint( + new AuthorizationConstraint( $authority, $this->mTitle, - $this->contentModel + $new ) ); - $constraintRunner->addConstraint( - $constraintFactory->newReadOnlyConstraint() + new ContentModelChangeConstraint( + $authority, + $this->mTitle, + $this->contentModel + ) ); $constraintRunner->addConstraint( - $constraintFactory->newUserRateLimitConstraint( - $requestUser->toRateLimitSubject(), - $this->mTitle->getContentModel(), - $this->contentModel + $constraintFactory->newLinkPurgeRateLimitConstraint( + $requestUser->toRateLimitSubject() ) ); $constraintRunner->addConstraint( @@ -2230,16 +2237,6 @@ class EditPage implements IEditObject { ) ); - // Load the page data from the primary DB. If anything changes in the meantime, - // we detect it by using page_latest like a token in a 1 try compare-and-swap. - $this->page->loadPageData( IDBAccessObject::READ_LATEST ); - $new = !$this->page->exists(); - - // We do this last, as some of the other constraints are more specific - $constraintRunner->addConstraint( - $constraintFactory->newEditRightConstraint( $this->getUserForPermissions(), $this->mTitle, $new ) - ); - // Check the constraints if ( !$constraintRunner->checkConstraints() ) { $failed = $constraintRunner->getFailedConstraint(); @@ -2625,9 +2622,12 @@ class EditPage implements IEditObject { * result from the backend. */ private function handleFailedConstraint( IEditConstraint $failed ): void { - if ( $failed instanceof UserBlockConstraint ) { + if ( $failed instanceof AuthorizationConstraint ) { // Auto-block user's IP if the account was "hard" blocked - if ( !MediaWikiServices::getInstance()->getReadOnlyMode()->isReadOnly() ) { + if ( + !MediaWikiServices::getInstance()->getReadOnlyMode()->isReadOnly() + && $failed->getLegacyStatus()->value === self::AS_BLOCKED_PAGE_FOR_USER + ) { $this->context->getUser()->spreadAnyEditBlock(); } } elseif ( $failed instanceof DefaultTextConstraint ) { diff --git a/includes/installer/i18n/nan-hant.json b/includes/installer/i18n/nan-hant.json index 7ca51f8702fc..59cbdd5709e9 100644 --- a/includes/installer/i18n/nan-hant.json +++ b/includes/installer/i18n/nan-hant.json @@ -15,7 +15,7 @@ "config-no-session": "你連線的資料已經無去矣,看你的php.ini,並且確定<code>session.save_path</code>是正確的目錄。", "config-your-language": "你的語言:", "config-your-language-help": "選一个安裝過程時欲用的話語", - "config-wiki-language": "Wiki話語", + "config-wiki-language": "wiki語言:", "config-wiki-language-help": "選一个Wiki大部份用的話", "config-back": "← 倒退", "config-continue": "繼續 →", @@ -42,5 +42,6 @@ "config-header-postgres": "PostgreSQL設定", "config-header-sqlite": "SQLite設定", "config-project-namespace": "專案名空間:", - "config-ns-generic": "專案" + "config-ns-generic": "專案", + "mainpagedocfooter": "請查看[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 用者說明書]的資料通使用wiki 軟體\n\n== 入門 ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 配置的設定]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki時常問答]\n* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki的公布列單]" } diff --git a/includes/installer/i18n/nan-latn-pehoeji.json b/includes/installer/i18n/nan-latn-pehoeji.json index e3437e4d4805..8430b8f9272a 100644 --- a/includes/installer/i18n/nan-latn-pehoeji.json +++ b/includes/installer/i18n/nan-latn-pehoeji.json @@ -22,13 +22,10 @@ "config-session-error": "連線開始了的錯誤:$1", "config-session-expired": "你連線資料已經過時矣,連線的使用期限是設做$1。你會使改共php.ini的<code>session.gc_maxlifetime</code>改較長,並且重新安裝動作。", "config-no-session": "你連線的資料已經無去矣,看你的php.ini,並且確定<code>session.save_path</code>是正確的目錄。", - "config-your-language": "你的話語:", - "config-your-language-help": "選一个安裝過程時欲用的話語", - "config-wiki-language": "Wiki話語", - "config-wiki-language-help": "選一个Wiki大部份用的話", + "config-wiki-language": "Wiki gí-giân:", "config-back": "← 倒退", "config-continue": "繼續 →", - "config-page-language": "話語", + "config-page-language": "Gí-giân", "config-page-welcome": "歡迎來MediaWiki!", "config-page-dbconnect": "連接去資料庫", "config-page-upgrade": "共這馬的安裝升級", @@ -53,6 +50,5 @@ "config-no-db": "揣無適合的資料庫驅動程式!你需要安裝 PHP 資料庫驅動程式。\n這馬支援下跤類型的資料庫: $1 。\n\n若你是家己編譯 PHP,你需要重新設定並且開資料庫客戶端,譬如:用 <code>./configure --with-mysqli</code> 指令參數。\n如你是用 Debian 或 Ubuntu 的套件安裝,你著需要閣另外安裝,例:<code>php-mysql</code> 套件。", "config-outdated-sqlite": "<strong>Kéng-kò:</strong> Lí í-keng an-chng SQLite $1, m̄-koh i--ê pán-pún pí thang-chng--ê pán-pún $2 khah kū. Só͘-í lí bô-hoat-tō͘ ēng SQLite.", "config-no-fts3": "<strong>Kéng-kò: </strong> SQLite tī pian-e̍k--ê sî-chūn bô pau-koat [//sqlite.org/fts3.html FTS3 module], āu-tâi chhiau-chhoē kong-lêng tiō ē bô-hoat-tō͘ iōng.", - "mainpagetext": "'''MediaWiki已經裝好矣。'''", - "mainpagedocfooter": "請查看[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 用者說明書]的資料通使用wiki 軟體\n\n== 入門 ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 配置的設定]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki時常問答]\n* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki的公布列單]" + "mainpagetext": "'''MediaWiki已經裝好矣。'''" } diff --git a/includes/page/Article.php b/includes/page/Article.php index c6ff94f24503..962990012952 100644 --- a/includes/page/Article.php +++ b/includes/page/Article.php @@ -784,7 +784,7 @@ class Article implements Page { $outputPage->setRevisionId( $this->getRevIdFetched() ); $outputPage->setRevisionIsCurrent( $rev->isCurrent() ); # Preload timestamp to avoid a DB hit - $outputPage->setRevisionTimestamp( $rev->getTimestamp() ); + $outputPage->getMetadata()->setRevisionTimestamp( $rev->getTimestamp() ); # Pages containing custom CSS or JavaScript get special treatment if ( $this->getTitle()->isSiteConfigPage() || $this->getTitle()->isUserConfigPage() ) { @@ -929,7 +929,7 @@ class Article implements Page { # Preload timestamp to avoid a DB hit $cachedTimestamp = $pOutput->getRevisionTimestamp(); if ( $cachedTimestamp !== null ) { - $outputPage->setRevisionTimestamp( $cachedTimestamp ); + $outputPage->getMetadata()->setRevisionTimestamp( $cachedTimestamp ); $this->mPage->setTimestamp( $cachedTimestamp ); } } @@ -972,7 +972,7 @@ class Article implements Page { $cachedId = $pOutput->getCacheRevisionId(); if ( $cachedId !== null ) { $outputPage->setRevisionId( $cachedId ); - $outputPage->setRevisionTimestamp( $pOutput->getTimestamp() ); + $outputPage->getMetadata()->setRevisionTimestamp( $pOutput->getTimestamp() ); } } diff --git a/languages/i18n/ann.json b/languages/i18n/ann.json index 4407cf884539..08a215fd3d28 100644 --- a/languages/i18n/ann.json +++ b/languages/i18n/ann.json @@ -284,6 +284,7 @@ "grouppage-bot": "{{ns:project}}:Ebi kè Bọt", "grouppage-sysop": "{{ns:project}}:Ebi otuchieen̄", "rightslog": "log unen Òsikwaan̄", + "skin-action-addsection": "Tap ibot ikọ gbaalek", "action-edit": "nen̄e akpọk yi ge", "action-createaccount": "Chili irek òsikwaan̄ yi", "enhancedrc-history": "mfufuk", @@ -339,6 +340,8 @@ "recentchangeslinked-summary": "Ge erieen̄ akpọk tap inyi owu òmun̄ unwene òkup me akpọk cha ògọbọ isi mè ìre igọbọ inan̄a me lek akpọk ya. (Ire obomun̄ echi ìkup me ọgbọn̄ ge, ge {{ns:category}}:Erieen̄ ọgbọn̄). Unwene erọbe me lek akpọk òkup me [[Special:Watchlist|your Watchlist]] ekup me <strong>bold</strong>.", "recentchangeslinked-page": "Erieen̄ akpọk:", "recentchangeslinked-to": "Jeen̄ unwene òkup me lek akpọk cha egọbọbe inu me lek akpọk keyi, kpan̄asi ikeya", + "recentchanges-page-added-to-category": "Mîtap [[:$1]] me ọgbọn̄", + "recentchanges-page-removed-from-category": "Mîsan̄a [[:$1]] me ọgbọn̄", "upload": "Ria failu fo emen efet", "filedesc": "Nkana-ngwook", "upload-dialog-button-cancel": "Gwak", diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index bbce24eff659..895c301ed8ad 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -112,6 +112,7 @@ "عبد الإله صديقي", "علاء", "عمرو", + "مارك العبيدي", "محمد أحمد عبد الفتاح", "مشعل الحربي", "نصوح", @@ -119,7 +120,7 @@ "아라" ] }, - "pagecategories": "{{PLURAL:$1|بلا تصنيف|تصنيف|تصنيفان|تصنيفات}}", + "pagecategories": "{{PLURAL:$1|تصنيف|تصنيفات}}:", "category_header": "صفحات تصنيف «$1»", "subcategories": "تصنيفات فرعية", "category-media-header": "ملفات وسائط في تصنيف «$1»", @@ -742,10 +743,10 @@ "editpage-cannot-use-custom-model": "نموذج المحتوى لهذه الصفحة لا يمكن تغييره.", "longpageerror": "يبلغ طول النص الذي قمت بإرساله $1 {{PLURAL:$1|كيلوبايت}}، وهو أكثر من الحد الأقصى وهو $2 {{PLURAL:$2|كيلوبايت}}.", "readonlywarning": "<strong>تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من نشر التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.</strong>\n\nإداري النظام الذي أغلقها أعطى هذا التفسير: $1", - "protectedpagewarning": "<strong>تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.</strong>\nآخر مدخلة سجل موفرة بالأسفل كمرجع:", - "semiprotectedpagewarning": "<strong>ملاحظة:</strong> هذه الصفحة محمية بحيث يمكن للمستخدمين المؤكدين تلقائيًّا فقط تعديلها،\nأحدث مدخلة سجل معروضة بالأسفل كمرجع:", + "protectedpagewarning": "<strong>تحذير: حُميت هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.</strong>\nآخر مدخلة سجل موفرة بالأسفل مرجعًا:", + "semiprotectedpagewarning": "<strong>ملاحظة:</strong> هذه الصفحة محمية بحيث يمكن للمستخدمين المؤكدين تلقائيًّا فقط تعديلها،\nأحدث مدخلة سجل معروضة بالأسفل مرجعًا:", "cascadeprotectedwarning": "<strong>تحذير:</strong> تمت حماية هذه الصفحة بحيث يستطيع المستخدمون [[Special:ListGroupRights|ذوو صلاحيات محددة]] فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":", - "titleprotectedwarning": "<strong>تحذير: هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.</strong>\nآخر مدخلة سجل موفرة بالأسفل كمرجع:", + "titleprotectedwarning": "<strong>تحذير: هذه الصفحة حُميت بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.</strong>\nآخر مدخلة سجل موفرة بالأسفل مرجعًا:", "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:", "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:", "templatesusedsection": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:", @@ -2828,8 +2829,8 @@ "imageinvalidfilename": "اسم الملف الهدف غير صحيح", "fix-double-redirects": "حدث أي تحويلات تشير إلى العنوان الأصلي", "move-leave-redirect": "اترك تحويلة", - "protectedpagemovewarning": "<strong>تحذير:</strong> هذه الصفحة قد تم حمايتها، فقط المستخدمون الذين يمتلكون امتيازات الإدارة يمكنهم نقلها.\nآخر مدخلة سجل موفرة بالأسفل كمرجع:", - "semiprotectedpagemovewarning": "<strong>ملاحظة:</strong> هذه الصفحة تمت حمايتها ليتمكن المستخدمون المؤكون تلقائيا وحدهم من نقلها،\nآخر مدخلة سجل موفرة بالأسفل كمرجع:", + "protectedpagemovewarning": "<strong>تحذير:</strong> هذه الصفحة محمية، فقط المستخدمون الذين يمتلكون امتيازات الإدارة يمكنهم نقلها.\nآخر مدخلة سجل موفرة بالأسفل مرجعًا:", + "semiprotectedpagemovewarning": "<strong>ملاحظة:</strong> هذه الصفحة حميت ليتمكن المستخدمون المؤكون تلقائيًّا وحدهم من نقلها،\nآخر مدخلة سجل موفرة بالأسفل مرجعًا:", "move-over-sharedrepo": "[[:$1]] موجود في مستودع مشترك. نقل الملف إلى هذا العنوان سوف يلغي الملف المشترك.", "file-exists-sharedrepo": "اسم الملف الذي اخترته مستخدم من قبل في مستودع مشترك.\nمن فضلك اختر اسماً آخر.", "export": "تصدير صفحات", diff --git a/languages/i18n/az.json b/languages/i18n/az.json index 1c087548f762..2dd60acb4509 100644 --- a/languages/i18n/az.json +++ b/languages/i18n/az.json @@ -2535,9 +2535,11 @@ "block-confirm-yes": "Bəli", "block-confirm-no": "Xeyr", "block-submit": "Təsdiq et", - "block-success": "[[Special:Contributions/$1|$1]] bloklandı. Bloklara nəzər yetirmək üçün [[Special:BlockList|blok siyahısına]] baxın.", + "block-success": "[[Special:Contributions/$1|$1]] ([[{{ns:user_talk}}:$1|müzakirə]]) bloklandı. Bloklara nəzər yetirmək üçün [[Special:BlockList|blok siyahısına]] baxın.", "block-user-active-blocks": "Aktiv bloklar", "block-user-no-active-blocks": "Aktiv blok yoxdur", + "block-user-active-range-blocks": "Aktiv diapazon blokları", + "block-user-no-active-range-blocks": "Aktiv diapazon bloku yoxdur", "block-user-previous-blocks": "Blok jurnalı", "block-user-no-previous-blocks": "Blokda olmayıb", "block-user-suppressed-blocks": "Gizlədilmiş blok jurnalı", @@ -2558,6 +2560,7 @@ "block-javascript-required": "Xüsusi:Blok interfeysindən istifadə etmək üçün JavaScript tələb olunur.", "block-removed": "Blok silindi.", "block-reblock-multi-legacy": "Bu istifadəçi artıq bir neçə dəfə bloklanıb və bu forma ilə yenidən bloklana bilməz.", + "block-view-target": "Bax", "unblockip": "İstifadəçinin blokunu götür", "unblockiptext": "Əvvəlcədən bloklanmış bir IP ünvanına və ya istifadəçi adına yazma geri vermek için aşağıdakı formadan istifadə edin.", "unblock-target": "Hədəfin blokunu aç", @@ -3219,6 +3222,7 @@ "version-hooks": "Çəngəllər", "version-parser-extensiontags": "Ayrışdırıcı uzantı teqləri", "version-parser-function-hooks": "Ayrışdırıcı funksiya qarmaqları", + "version-parsoid-modules": "Parsoid uzantı modulları", "version-hook-name": "Çəngəlin adı", "version-hook-subscribedby": "Abunə olan", "version-no-ext-name": "[adsız]", @@ -3990,6 +3994,7 @@ "skin-action-move": "Adını dəyiş", "skin-json-warning": "@XƏBƏRDARLIQ", "skin-json-warning-message": "Bu API deyil, yalnız sazlama üçündür! Qadcetlərdə və ya əsas kodda istifadə etməyin.", + "parsoid-async-not-ready-fallback": "Məzmun hazır deyil", "parsoid-stash-rate-limit-error": "Sürət limiti aşıldığına görə saxlama uğursuz oldu. Zəhmət olmasa, daha sonra yenidən cəhd edin.", "parsoid-resource-limit-exceeded": "Parsoid resursları limiti keçdi: $1", "parsoid-revision-access": "Parsoid versiyaya daxil ola bilmir: $1", diff --git a/languages/i18n/btm.json b/languages/i18n/btm.json index 21d294fe88fd..ebd72c4dd960 100644 --- a/languages/i18n/btm.json +++ b/languages/i18n/btm.json @@ -1706,8 +1706,14 @@ "emailuser": "Email ni pamake on", "emailuser-title-target": "Surel ni {{GENDER:$1|user}} on", "emailuser-title-notarget": "Kirim surel", + "defemailsubject": "Surel {{SITENAME}} sian on pamake $1", "usermaildisabled": "Surel ni pamake ipamate", + "usermaildisabledtext": "Ho inda bisa mengirim surel tu pamake nalain i wiki on", "noemailtitle": "Inda adong alamat surel", + "noemailtext": "Pamake na onan inda mangalehen alamat surel na sah", + "nowikiemailtext": "Pamake on mandung mamili anso inda manarimo surel sian on pamake nalain nai", + "emailnotarget": "Golar ni pamake akun on inda adong sngape inda sah", + "emailtarget": "Pamasuk golar ni pamake na manarimo", "emailusername": "Gorar pamake:", "emailusernamesubmit": "Lehen", "email-legend": "Kirim surel tu pamakena {{SITENAME}} nalain nai", @@ -1716,6 +1722,7 @@ "emailsubject": "Subjek:", "emailmessage": "Pesan:", "emailsend": "Kirim", + "emailccme": "Kirimkon tu au salinan ni pesan ni aupuna on", "emailccsubject": "Salin pesan ho puna tu $1: $2", "emailsent": "Surel ma ikirim", "emailsenttext": "Surel mi mandung ikirim.", @@ -1806,6 +1813,8 @@ "protect-unchain-permissions": "Mambuka umbahat opsi jagoon.", "protect-locked-access": "Akun mu inda mampunai santabi tu paubahon pangaturan panjagoan alaman. On pangaturan tu alaman <strong>$1</strong>:", "protect-default": "Patola sude pamake", + "protect-fallback": "on nungna tu pamake na mandung i izinkon $1", + "protect-level-autoconfirmed": "On nungna tu pamake na mandung tardaftar otomatis", "protect-level-sysop": "Nungna tu pangurus maiya", "protect-summary-cascade": "sarab", "protect-expiring": "mandung bari $1 (UTC)", @@ -1831,6 +1840,8 @@ "restriction-level-autoconfirmed": "Palindungan na resmi", "restriction-level-all": "sude na i karejo mu", "undelete": "Pambatalan pangapusan", + "undeletepage": "Ligi dohot batalkon panghapusan ni alaman on", + "viewdeletedpage": "Pambatalan pangapusan", "skin-action-viewdeleted": "Ligi $1?", "namespace": "Ruang gorar:", "invert": "Pilian sabalikna", diff --git a/languages/i18n/bug-bugi.json b/languages/i18n/bug-bugi.json index cd11289cb356..62a1b7c72eb9 100644 --- a/languages/i18n/bug-bugi.json +++ b/languages/i18n/bug-bugi.json @@ -108,7 +108,7 @@ "mainpage": "ᨓᨈᨇᨚᨒ", "mainpage-description": "ᨓᨈᨇᨚᨒ", "policy-url": "Project:ᨄᨈᨑᨚ", - "portal": "ᨔᨕᨚᨉᨙᨋᨕᨙ", + "portal": "ᨄᨋᨘ", "portal-url": "Project:ᨔᨕᨚᨉᨙᨋᨕᨙ", "privacy": "ᨄᨈᨑᨚ ᨑᨗᨐᨒᨙ", "privacypage": "Project:ᨄᨈᨑᨚ ᨑᨗᨐᨒᨙ", @@ -320,7 +320,10 @@ "mypreferences": "ᨕᨄᨚᨌᨛᨊᨗᨂᨛ", "userrights-user-editname": "ᨔᨛᨒᨛᨑᨗ ᨕᨔᨛᨄᨁᨘᨊ :", "group-sysop": "ᨄᨍᨇ", + "group-interface-admin": "ᨄᨍᨇ ᨈᨇᨗᨒ", + "group-interface-admin-member": "{{GENDER:$1|ᨄᨍᨇ ᨈᨇᨗᨒ}}", "grouppage-sysop": "{{ns:project}}:ᨄᨍᨇ", + "grouppage-interface-admin": "{{ns:project}}:ᨄᨍᨇ ᨈᨇᨗᨒ", "right-move": "ᨄᨒᨙᨌᨙ ᨒᨛᨇᨑ", "right-movefile": "ᨄᨒᨙᨌᨙ ᨈᨑᨚᨂᨛ", "right-delete": "ᨒᨛᨇᨑ ᨑᨗᨐᨅᨗᨐ", diff --git a/languages/i18n/bug.json b/languages/i18n/bug.json index 1591b6a2cf0f..41855f0b6a22 100644 --- a/languages/i18n/bug.json +++ b/languages/i18n/bug.json @@ -11,13 +11,13 @@ "Zaidpjd (on bug.wikipedia.org)" ] }, - "pagecategories": "{{PLURAL:$1|ᨀᨈᨁᨚᨑᨗ}}", - "category_header": "ᨒᨛᨇᨑ ᨑᨗᨒᨒᨛ ᨀᨈᨁᨚᨑᨗ \"$1\"", - "subcategories": "ᨔᨘᨀᨈᨁᨚᨑᨗ", + "pagecategories": "{{PLURAL:$1|katagori}}", + "category_header": "Lemparang rilaleng katagori \"$1\"", + "subcategories": "Suqkatagori", "category-media-header": "Médiya ilaleng katagori \"$1\"", "category-empty": "<em>Katagoriyyé dénengka makkokkowé, lempa ala médiya.</em>", - "hidden-categories": "{{PLURAL:$1|ᨀᨈᨁᨚᨑᨗ ᨈᨔᨘᨅᨘ}}", - "hidden-category-category": "ᨀᨈᨁᨚᨑᨗ ᨈᨔᨘᨅᨘ", + "hidden-categories": "{{PLURAL:$1|Katagori tassubbu}}", + "hidden-category-category": "Katagori tassubbu", "index-category": "Lemparang tarindéq", "broken-file-category": "Lemparang sibawa assumpungeng tarongeng iya masolang", "about": "Assisumpungenna", @@ -33,7 +33,7 @@ "namespaces": "Pétakkaseng", "navigation-heading": "Menu napigasi", "errorpagetitle": "Éroroq", - "returnto": "Lisu ri $1.", + "returnto": "Réweq ri $1.", "tagline": "Polé {{SITENAME}}", "help": "Bantuwang", "search": "Assappareng", @@ -95,9 +95,9 @@ "ok": "OK", "editsection": "padécéng", "editold": "padécéng", - "viewsourceold": "ita apoléng", + "viewsourceold": "ita pabbéré", "editlink": "padécéng", - "viewsourcelink": "ita apoléng", + "viewsourcelink": "ita pabbéré", "editsectionhint": "Padécéng bagéang: $1", "red-link-title": "$1 (lempa deqnengka)", "nstab-main": "Lempa", @@ -109,23 +109,23 @@ "nstab-mediawiki": "Rampé-rampé", "nstab-template": "Accuwang", "nstab-help": "Lempa bantuwang", - "nstab-category": "ᨀᨈᨁᨚᨑᨗ", + "nstab-category": "Katagori", "mainpage-nstab": "Watangpola", "nosuchspecialpage": "Déqgaga lempa malebbi akkuangngé", "error": "Éroroq", "databaseerror": "Databéseq éroroq", "readonly": "Databéseq tallaccaq", "missingarticle-diff": "(Silaing: $1, $2)", - "internalerror": "Éroroq interénalaq", - "internalerror_info": "Éroroq interénalaq: $1", - "badtitle": "Juduluq deqmagello", - "viewsource": "Ita apoléng", + "internalerror": "Rocaq ilaleng", + "internalerror_info": "Rocaq ilaleng: $1", + "badtitle": "Tajuq deq wedding", + "viewsource": "Ita pabbéré", "virus-unknownscanner": "antivirusuq déqnissengngi:", "welcomeuser": "Salamaq mattamaq, $1!", "yourname": "Aseppagguna:", "userlogin-yourname": "Aseppagguna", "userlogin-yourpassword": "Liwengngada", - "userlogin-yourpassword-ph": "Selleri liwengngadataq", + "userlogin-yourpassword-ph": "Selleri liwengngada idiq", "createacct-yourpassword-ph": "Selleri liwengngada", "createacct-yourpasswordagain": "Paddettangengngi liwengngada", "createacct-yourpasswordagain-ph": "Selleri pémeng liwengngada", @@ -174,7 +174,7 @@ "revdelete-hide-text": "Oki apparisi", "revdelete-hide-comment": "Padécéng rangkumang", "revdelete-hide-user": "Aseppagguna/alamaq IP pammadécéng", - "revdelete-log": "Saba:", + "revdelete-log": "Sabaq:", "editundo": "baléq", "viewprevnext": "Ita ($1 {{int:pipe-separator}} $2) ($3)", "searchprofile-articles": "Lemparang liseq", @@ -187,6 +187,7 @@ "prefs-namespaces": "Pétakkaseng", "email": "Suréléq", "group-sysop": "Pajjampang", + "group-interface-admin": "Pajjampang tampilang", "group-all": "(sininna)", "group-user-member": "{{GENDER:$1|pagguna}}", "group-sysop-member": "{{GENDER:$1|pajjampang}}", @@ -229,7 +230,7 @@ "filedelete-success-old": "Pérresi <strong>[[Media:$1|$1]]</strong> rianu $3, $2 pura riabbiyang.", "filedelete-nofile": "<strong>$1</strong> déqnengka.", "mimesearch": "Assappareng MIME", - "mimetype": "Tipe MIME:", + "mimetype": "Tipé MIME:", "download": "pala", "unusedtemplates": "Accuwang deqnipaké", "randompage": "Lempa sembarang", @@ -243,7 +244,7 @@ "wantedtemplates": "Accuwang ripaélo", "newpages": "Lemparang mparu", "ancientpages": "Lemparang malaung", - "move": "Paleccé", + "move": "Paléccéq", "movethispage": "Palléccéi lemparédé", "specialloguserlabel": "Paggauq:", "log": "Loq", @@ -280,21 +281,21 @@ "sp-contributions-search": "Sappai konribusi", "sp-contributions-submit": "Sappa", "whatlinkshere": "Assumpungeng aga kué", - "whatlinkshere-title": "Lemparang iya assumpung ku \"$1\"", + "whatlinkshere-title": "Lemparang iya massumpung ku \"$1\"", "whatlinkshere-page": "Lempa:", - "linkshere": "Lemparangngé iyéhé makkasumpung ku <strong>$2</strong>:", - "nolinkshere": "Deqgaga lemparang assumpung ku <strong>$2</strong>.", + "linkshere": "Lemparangngé iyéhé massumpung ku <strong>$2</strong>:", + "nolinkshere": "Deqgaga lemparang massumpung ku <strong>$2</strong>.", "isimage": "Assumpung tarongeng", "whatlinkshere-links": "← assumpungeng", "whatlinkshere-hidelinks": "Subbuwi assumpungeng", - "whatlinkshere-hideimages": "Subbuwi assumpungeng ngattarong", + "whatlinkshere-hideimages": "Subbuwi assumpungeng tarongengngé", "ipb-namespaces-label": "Pétakkaseng", "ipb-blocklist-contribs": "Konribusi ku {{GENDER:$1|$1}}", "ipblocklist-submit": "Sappa", "blocklist-editing-ns": "pétakkaseng", "blocklink": "lawa", "contribslink": "konriq", - "newtitle": "Juduluq baru:", + "newtitle": "Tajuq baru:", "articleexists": "Lempa [[:$1]] purani engka, iyaréga aseng lempa iya ripilé déqna saheng.\nLalokiq pilé aseng iya laing.", "movelogpage": "Loq paleccéq", "movereason": "Sabaq:", @@ -303,7 +304,7 @@ "delete_and_move_reason": "Riyabbiyang baréq weddingngi mappaléccéq polé \"[[$1]]\"", "immobile-source-namespace": "Déqwedding paléccéqi lemparang ilaleng pétakkaseng \"$1\".", "immobile-source-page": "Lempa iyaé déqnullé ripaléccéq.", - "export": "Passui lemparang", + "export": "Passuwi lemparang", "export-addcattext": "ᨈᨅ ᨒᨛᨇᨑ ᨆᨀᨈᨁᨚᨑᨗ :", "allmessages": "Rampéng-dampéng sissiteng", "allmessagesname": "Aseng", diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index f08908e19f08..81d2f4fe0de3 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -2370,6 +2370,7 @@ "anoncontribs": "Contribucions", "contribute": "Contribució", "contributions-subtitle": "Pertanyents a {{GENDER:$2|$1}}", + "contributions-edit-count": "{{GENDER:$1|Usuari|Usuària}} amb $2 {{PLURAL:$2|edició|edicions}}.", "contributions-account-creation-date": "Compte creat el $1.", "contributions-userdoesnotexist": "El compte d'usuari «$1» no està registrat.", "negative-namespace-not-supported": "No es permeten espais de noms amb valors negatius.", @@ -2386,7 +2387,7 @@ "sp-contributions-talk": "discussió", "sp-contributions-userrights": "gestió de drets d'{{GENDER:$1|usuari|usuària}}", "sp-contributions-blocked-notice": "En aquests moments aquest {{GENDER:$1|compte}} d'usuari està blocat.\nPer a més informació, a continuació es mostra l'última entrada del registre:", - "sp-contributions-blocked-notice-partial": "Actualment, aquest compte d'usuari està parcialment blocat.\nPer a més informació, a continuació es mostra l'última entrada del registre:", + "sp-contributions-blocked-notice-partial": "Actualment, {{GENDER:$1|aquest usuari|aquesta usuària}} està parcialment {{GENDER:$1|blocat|blocada}}.\nPer a més informació, a continuació es mostra l'última entrada del registre:", "sp-contributions-blocked-notice-anon": "En aquests moments, aquesta adreça IP es troba blocada.\nPer més detalls, l'última entrada del registre es mostra a continuació:", "sp-contributions-blocked-notice-anon-partial": "Actualment, aquesta adreça IP es troba parcialment blocada.\nPer més detalls, l'última entrada del registre es mostra a continuació:", "sp-contributions-search": "Cerca les contribucions", diff --git a/languages/i18n/crh-latn.json b/languages/i18n/crh-latn.json index fe2862c5fcb2..bbc6b63f2c96 100644 --- a/languages/i18n/crh-latn.json +++ b/languages/i18n/crh-latn.json @@ -97,7 +97,7 @@ "redirectedfrom": "($1 saifesinden yollandı)", "redirectpagesub": "Yollama saifesi", "redirectto": "Yollama:", - "lastmodifiedat": "Bu saife soñki olaraq $1, $2 tarihında yañardı.", + "lastmodifiedat": "Bu saife soñki olaraq $1, $2 tarihında deñiştirildi.", "viewcount": "Bu saife {{PLURAL:$1|1|$1}} defa irişilgen.", "protectedpage": "Qorçalanğan saife", "jumpto": "Buña keç:", @@ -444,9 +444,9 @@ "viewpagelogs-lowercase": "bu saifeniñ jurnallarını köster", "nohistory": "Bu saifeniñ keçmiş versiyası yoq.", "currentrev": "Şimdiki versiya", - "currentrev-asof": "$1 tarihından başlap saifeniñ şimdiki alı", - "revisionasof": "Saifeniñ $1 tarihındaki alı", - "revision-info": "Saifeniñ {{GENDER:$6|$2}}$7 tarafından yazılğan $4, $5 tarihındaki alı", + "currentrev-asof": "$2 $3 tarihından başlap saifeniñ şimdiki alı", + "revisionasof": "Saifeniñ $2 $3 tarihındaki alı", + "revision-info": "Saifeniñ {{GENDER:$6|$2}}$7 tarafından yazılğan $4 $5 tarihındaki alı", "previousrevision": "← Evelki alı", "nextrevision": "Soñraki alı →", "currentrevisionlink": "eñ yañı alını köster", @@ -500,9 +500,16 @@ "showhideselectedversions": "Saylanğan versiyalarnı köster/gizle", "editundo": "lâğu et", "diff-empty": "(farq yoq)", + "diff-user-edits": "<span>$1</span> {{PLURAL:$1|deñiştirme}}", "diff-multi-sameuser": "(Aynı {{GENDER:$3|qullanıcınıñ}} yapqan {{PLURAL:$1|aradaki başqa bir deñiştirmesi|aradaki başqa {{GENDER:$3|$1 deñiştirmesi}}}} kösterilmey)", "diff-multi-otherusers": "({{PLURAL:$2|Bir başqa qullanıcınıñ|$2 qullanıcınıñ}} yapqan {{PLURAL:$1|bir ara versiya|$1 ara versiya}} kösterilmey)", "diff-multi-manyusers": "($2-den ziyade {{PLURAL:$2|qullanıcı|qullanıcı}}nıñ yapqan {{PLURAL:$1|bir ara versiyası|$1 ara versiyası}} kösterilmey)", + "diff-inline-tooltip-ins": "Qoşulğan", + "diff-inline-tooltip-del": "Yoq etilgen", + "diff-inline-format-label": "Satır içi", + "diff-inline-switch-desc": "Satır içi format ve eki sutunlı format arasında almaştıra", + "diff-line-deleted": "⟵ yoq etilgen", + "diff-newline": "↲ yañı satır", "searchresults": "Qıdıruv neticeleri", "search-filter-title-prefix-reset": "Bütün saifelerde qıdır", "searchresults-title": "“$1” içün qıdıruv neticeleri", @@ -541,7 +548,7 @@ "search-relatedarticle": "Bağlı", "searchrelated": "bağlı", "searchall": "episi", - "showingresultsinrange": "Aşağıda <strong>$2</strong> ile <strong>$3</strong> arasında <strong>$1</strong> {{PLURAL:$1<strong>$1</strong> netice}} kösterile.", + "showingresultsinrange": "Aşağıda <strong>$2</strong> ile <strong>$3</strong> arasında episi olıp <strong>$1</strong> {{PLURAL:$1|netice}} kösterile.", "search-showingresults": "{{PLURAL:$4|1=<strong>$3</strong> neticeden <strong>$1</strong> netice|<strong>$3</strong> neticeden <strong>$1 – $2</strong> arası}}", "search-nonefound": "Soratmanen eşleşken bir netice yoq.", "powersearch-legend": "Tafsilâtlı qıdıruv", @@ -552,6 +559,7 @@ "searchdisabled": "{{SITENAME}} saytında qıdıruv yapma vaqtınca toqtatıldı. Bu arada Google qullanıp {{SITENAME}} içinde qıdıruv yapıp olasıñız. Qıdıruv saytlarında indekslemeleriniñ biraz eski qalğan ola bilecegini köz ögüne alıñız.", "mypreferences": "Sazlamalar", "searchresultshead": "Qıdıruv", + "prefs-description-misc": "Münderice tablosını sazlañız.", "prefs-namespaces": "İsim fezaları", "default": "original", "email": "E-mail", @@ -568,6 +576,7 @@ "userrights-systemuser": "{{GENDER:$1|Bu qullanıcı}} bir sistema qullanıcısıdır", "userrights-reason": "Sebep:", "userrights-expiry-othertime": "Başqa vaqıt:", + "userrights-expiry-options": "1 kün:1 day,1 afta:1 week,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 yıl:1 year", "group": "Gruppa:", "group-user": "Qullanıcılar", "group-temp": "Muvaqqat qullanıcılar", @@ -634,6 +643,7 @@ "rcfilters-advancedfilters": "Tafsilâtlı süzgüçler", "rcfilters-limit-title": "Kösterilecek neticeler", "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|deñiştirme}}, $2", + "rcfilters-date-popup-title": "Qıdırılacaq vaqıt arası", "rcfilters-days-title": "Soñki künler", "rcfilters-hours-title": "Soñki saatlar", "rcfilters-days-show-days": "$1 {{PLURAL:$1|kün}}", @@ -654,10 +664,12 @@ "rcfilters-filterlist-whatsthis": "Bular nasıl işley?", "rcfilters-highlightmenu-title": "Bir tüs saylañız", "rcfilters-filterlist-noresults": "Süzgüç tapılmadı", + "rcfilters-filtergroup-authorship": "İsse müellifligi", "rcfilters-filter-editsbyself-label": "Siziñ deñiştirgenleriñiz", "rcfilters-filter-editsbyself-description": "Öz deñiştirmeleriñiz.", "rcfilters-filter-editsbyother-label": "Başqalarınıñ deñiştirgenleri", "rcfilters-filter-editsbyother-description": "Siziñ etkenleriñizden ğayrı deñiştirmelerniñ episi.", + "rcfilters-filtergroup-user-experience-level": "Qullanıcı qaydiyeti ve tecribesi", "rcfilters-filter-user-experience-level-registered-label": "Qaydlı", "rcfilters-filter-user-experience-level-registered-description": "Oturım açqan qullanıcılar.", "rcfilters-filter-user-experience-level-unregistered-label": "Qaydsız", @@ -666,31 +678,54 @@ "rcfilters-filter-user-experience-level-newcomer-label": "Yañı kelgenler", "rcfilters-filter-user-experience-level-newcomer-description": "10-dan az deñiştirme etken ve ya 4 künden az faal olğan qaydlı qullanıcılar.", "rcfilters-filter-user-experience-level-learner-label": "Ögreniciler", + "rcfilters-filter-user-experience-level-learner-description": "Tecribesi \"Yañı kelgenler\" ve \"Tecribeli qullanıcılar\" arasındaki qullanıcılar.", "rcfilters-filter-user-experience-level-experienced-label": "Tecribeli qullanıcılar", "rcfilters-filter-user-experience-level-experienced-description": "30 künden ziyade faal olğan ve 500-den ziyade deñiştirme yapqan qaydlı qullanıcılar.", + "rcfilters-filtergroup-automated": "Avtomatikleştirilgen deñiştirmeler", "rcfilters-filter-bots-label": "Bot", "rcfilters-filter-bots-description": "Avtomatikleştirilgen aletler tarafından yapılğan deñiştirmeler.", "rcfilters-filter-humans-label": "İnsan (bot degil)", "rcfilters-filter-humans-description": "İnsan tarafından yapılğan deñiştirmeler.", + "rcfilters-filtergroup-reviewstatus": "Teşkerüv statusı", + "rcfilters-filter-reviewstatus-unpatrolled-description": "Ne qolnen, ne de avtomatik olaraq teşkerilgen olaraq belgilengen deñiştirmeler.", "rcfilters-filter-reviewstatus-unpatrolled-label": "Teşkerilmegen", + "rcfilters-filter-reviewstatus-manual-description": "Qolnen teşkerilgen olaraq belgilengen deñiştirmeler.", "rcfilters-filter-reviewstatus-manual-label": "Qolnen teşkerilgen", + "rcfilters-filter-reviewstatus-auto-description": "Tecribeli bir qullanıcı tarafından yapılğanı içün avtomatik olaraq teşkerilgen dep belgilengen deñiştirmeler.", "rcfilters-filter-reviewstatus-auto-label": "Avtomatik teşkerilgen", + "rcfilters-filtergroup-significance": "Emiyetlilik", "rcfilters-filter-minor-label": "Kiçkene deñiştirmeler", + "rcfilters-filter-minor-description": "Müellifniñ kiçkene olaraq belgilengen deñiştirmeler.", "rcfilters-filter-major-label": "Kiçkene olmağan deñiştirmeler", "rcfilters-filter-major-description": "Kiçkene dep belgilenmegen deñiştirmeler.", + "rcfilters-filtergroup-watchlist": "Közetilgen saifeler", + "rcfilters-filtergroup-watchlistactivity": "Közetüv cedvelinde faaliyet", "rcfilters-filter-watchlistactivity-unseen-label": "Körülmegen deñiştirmeler", "rcfilters-filter-watchlistactivity-unseen-description": "Deñiştirilgeninden soñ ziyaret etmegen saifeleriñizdeki deñişmeler.", "rcfilters-filter-watchlistactivity-seen-label": "Körülgen deñiştirmeler", + "rcfilters-filter-watchlistactivity-seen-description": "Deñiştirilgeninden soñ ziyaret etken saifeleriñizdeki deñişmeler.", "rcfilters-filtergroup-changetype": "Deñiştirme türü", "rcfilters-filter-pageedits-label": "Saife deñiştirilmeleri", + "rcfilters-filter-pageedits-description": "Viki mündericesi, muzakereler, kategoriya açıqlamalarındaki deñiştirmeler...", "rcfilters-filter-newpages-label": "Saife yaratılmaları", + "rcfilters-filter-newpages-description": "Yañı saife yaratqan deñiştirmeler.", + "rcfilters-filter-categorization-label": "Kategoriya deñiştirilüvleri", + "rcfilters-filter-categorization-description": "Saifelerde kategoriyalarnıñ qoşuluvı ve çıqarıluvı qaydları.", "rcfilters-filter-logactions-label": "Kündeligi yapılğan areketler", - "rcfilters-filter-accountcreations-label": "Qullanıcı esabı yaratılmaları", + "rcfilters-filter-logactions-description": "İdare areketleri, saife yoq etilüvleri, fayl yüklenüvleri...", + "rcfilters-filter-accountcreations-label": "Qullanıcı esabı yaratıluvları", "rcfilters-filter-accountcreations-description": "Qullanıcı esabı yaratuv içün kündelik qaydları. Kündeligi yapılğan areketler saylanmalı.", + "rcfilters-filtergroup-lastrevision": "Soñki versiyalar", + "rcfilters-filter-lastrevision-label": "Soñki versiya", + "rcfilters-filter-lastrevision-description": "Bir saifedeki eñ yañı deñişme.", + "rcfilters-filter-previousrevision-label": "Soñki olmağan versiya", + "rcfilters-filter-previousrevision-description": "\"Soñki versiya\" olmağan bütün deñiştirmeler.", "rcfilters-liveupdates-button": "Canlı yañartuv", + "rcfilters-watchlist-markseen-button": "Deñiştirmelerniñ episini körülgen olaraq belgile", + "rcfilters-watchlist-edit-watchlist-button": "Közetüv cedveliñizni deñiştir", "rcfilters-watchlist-showupdated": "Deñiştirilgeninden soñ ziyaret etmegen saifeleriñiz <strong>qalın</strong> kösterilgen.", "rcfilters-target-page-placeholder": "Bir saife (ya da kategoriya) adını kirsetiñiz", - "rcnotefrom": "<strong>$3, $4</strong> tarihından başlap yapılğan {{PLURAL:$5|deñiştirme|deñiştirmeler}} aşağıdadır (eñ çоq <strong>$1</strong> dane saife kösterile).", + "rcnotefrom": "<strong>$3 $4</strong> tarihından başlap yapılğan {{PLURAL:$5|deñiştirme|deñiştirmeler}} aşağıdadır (eñ çоq <strong>$1</strong> dane saife kösterile).", "rclistfrom": "$3 $2 tarihından berli yapılğan deñiştirmelerni köster", "rcshowhideminor": "kiçik deñiştirmelerni $1", "rcshowhideminor-show": "köster", @@ -816,8 +851,10 @@ "upload_source_file": " (cihazıñızdan saylanğan faylıñız)", "listfiles-delete": "yoq et", "listfiles-summary": "Bu mahsus saife bütün yüklengen fayllarnı köstere.", + "listfiles-pager-submit": "Fayl cedvelini köster", "imgfile": "fayl", - "listfiles": "Resim cedveli", + "listfiles": "Fayl cedveli", + "listfiles_subpage": "$1 tarafından yüklengenler", "listfiles_thumb": "Kiçik resim", "listfiles_date": "Tarih", "listfiles_name": "Fayl adı", @@ -825,6 +862,8 @@ "listfiles_size": "Büyüklik", "listfiles_description": "Tasvir", "listfiles_count": "Versiyalar", + "listfiles-show-all": "Fayllarnıñ eski versiyaları da kösterilsin", + "listfiles-latestversion": "Şimdiki versiya", "listfiles-latestversion-yes": "Ebet", "listfiles-latestversion-no": "Yoq", "file-anchor-link": "Fayl", @@ -832,11 +871,11 @@ "filehist-help": "Faylnıñ kerekli anki alını körmek içün tarihqa/saatqa basıñız.", "filehist-deleteall": "episini yoq et", "filehist-deleteone": "yoq et", - "filehist-revert": "keri al", + "filehist-revert": "keri qaytar", "filehist-current": "şimdiki", "filehist-datetime": "Tarih ve saat", "filehist-thumb": "Kiçik resim", - "filehist-thumbtext": "$1 tarihındaki versiyanıñ ufaqlaştırılğan alı", + "filehist-thumbtext": "$2 $3 tarihındaki versiyanıñ ufaqlaştırılğan alı", "filehist-nothumb": "Ufaqlaştırılğan resim yoq", "filehist-user": "Qullanıcı", "filehist-dimensions": "En × boy", @@ -856,9 +895,9 @@ "upload-disallowed-here": "Bu faylnı yañıdan yüklep olamaysıñız.", "filerevert": "$1 faylını eski alına qaytar", "filerevert-legend": "Faylnı eski alına qaytar", - "filerevert-intro": "'''[[Media:$1|$1]]''' faylınıñ [$4 $2, $3 tarihındaki versiyası]nı keri ketiresiñiz.", + "filerevert-intro": "'''[[Media:$1|$1]]''' faylınıñ [$4 $2 $3 tarihındaki versiyası]nı keri ketiresiñiz.", "filerevert-comment": "Sebep:", - "filerevert-defaultcomment": "$1, $2 ($3) tarihındaki versiya keri qaytarıldı", + "filerevert-defaultcomment": "$1 $2 ($3) tarihındaki versiya keri qaytarıldı", "filedelete-comment": "Sebep:", "filedelete-submit": "Yoq et", "filedelete-otherreason": "Başqa/qoşumça sebep:", @@ -952,9 +991,16 @@ "specialloguserlabel": "Yapqan qullanıcı:", "speciallogtitlelabel": "İsim (saife adı ya da qullanıcı içün {{ns:user}}:qullanıcı adı):", "log": "Jurnallar", + "logeventslist-submit": "Köster", + "logeventslist-more-filters": "Daa ziyade jurnal köster:", + "logeventslist-patrol-log": "Teşkerüv jurnalı", + "logeventslist-tag-log": "Teg jurnalı", + "logeventslist-newusers-log": "Yañı qullanıcı jurnalı", "all-logs-page": "Esas umumiy jurnallar", + "alllogstext": "{{SITENAME}} içün bar olğan bütün jurnallarnıñ birleştirilgen cedveli.\nJurnal türüni, qullanıcı adını (büyük-kiçik arif hassas), ya da tesir etilgen saifeni (kene büyük-kiçik arif hassas) saylap kösterilgen cevdelni tarlata bilesiñiz.", "logempty": "Jurnalda bir kelgen malümat yoq.", "log-title-wildcard": "Bu işaretlerden başlanğan serlevalarnı qıdır", + "showhideselectedlogentries": "Saylanğan jurnal qaydlarını köster/gizle", "checkbox-all": "Episi", "checkbox-none": "İç biri", "allpages": "Bütün saifeler", @@ -1051,20 +1097,23 @@ "dellogpage": "Yoq etüv jurnalı", "dellogpagetext": "Aşağıdaki cedvel soñki yoq etüvler jurnalıdır.", "deletionlog": "yoq etüv jurnalı", + "logentry-create-create": "$1, $3 saifesini {{GENDER:$2|yarattı}}", "reverted": "Evelki versiya keri ketirildi", "deletecomment": "Sebep:", "deleteotherreason": "Başqa/qoşumça sebep:", "deletereasonotherlist": "Diger sebep", - "rollback": "Deñiştirmelerni keri al", + "rollback": "Deñiştirmelerni keri qaytar", "rollbacklink": "keri qaytar", "rollbacklinkcount": "$1 {{PLURAL:$1|deñiştirmeni}} keri ketir", "rollbacklinkcount-morethan": "$1 deñiştirmeden daa ziyadesini keri qaytar", - "rollbackfailed": "keri aluv muvafaqiyetsiz", - "cantrollback": "Deñiştirmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir", + "rollbackfailed": "Keri qaytarıp olamadı", + "cantrollback": "Deñiştirmelerni keri qaytarılıp olamay.\nSaifeni soñki deñiştirgen kişi onıñ tek bir müellifidir.", "editcomment": "Deñiştirme izaatı: <em>$1</em> edi.", - "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan deñiştirmeler keri alınıp, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri ketirildi.", + "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|muzakere]]) tarafından yapılğan {{PLURAL:$7|deñiştirme|deñiştirmeler}} lâğu etilip, [[User:$1|$1]] tarafından deñiştirilgen evelki versiya keri qaytarıldı.", "changecontentmodel-title-label": "Saife adı:", "changecontentmodel-reason-label": "Sebep:", + "logentry-contentmodel-change-revertlink": "keri qaytar", + "logentry-contentmodel-change-revert": "keri qaytar", "protectlogpage": "Qorçalav jurnalı", "protectlogtext": "Aşağıdaki, saifeni qorçalavğa aluv/qorçalavdan çıqaruv ile bağlı deñişmeler jurnalıdır.\nQorçalanğan saifeler [[Special:ProtectedPages|tam cedvelini]] de köre bilesiñiz.", "prot_1movedto2": "[[$1]] saifesiniñ adı [[$2]] dep deñiştirildi", @@ -1115,7 +1164,7 @@ "contributions-title": "$1 {{GENDER:$2|qullanıcısınıñ}} isseleri", "mycontris": "İsseler", "anoncontribs": "İsseler", - "contributions-subtitle": "{{GENDER:$2|$1}} içün", + "contributions-subtitle": "{{GENDER:$2|$1}} içün neticeler", "contributions-edit-count": "$2 {{PLURAL:$2|deñiştirme}} yapqan bir {{GENDER:$1|qullanıcı}}.", "contributions-account-creation-date": "Qullanıcı esabınıñ yaratılğan tarihı: $1", "nocontribs": "Bu kriteriylerge uyğan deñiştirme tapılamadı", @@ -1123,7 +1172,9 @@ "month": "Bu ay (ve ondan erte):", "year": "Bu sene (ve ondan erte):", "date": "Bu tarihtan (ve daa evelâ):", - "sp-contributions-blocklog": "Blok etüv jurnalı", + "sp-contributions-blocklog": "blok etüv jurnalı", + "sp-contributions-suppresslog": "{{GENDER:$1|qullanıcınıñ}} gizlengen isseleri", + "sp-contributions-deleted": "{{GENDER:$1|qullanıcınıñ}} yoq etilgen isseleri", "sp-contributions-uploads": "yüklemeler", "sp-contributions-logs": "jurnallar", "sp-contributions-talk": "muzakere", @@ -1307,11 +1358,11 @@ "tooltip-recreate": "Yoq etilgen olmasına baqmadan saifeni yañıdan yañart", "tooltip-upload": "Yüklenip başla", "tooltip-rollback": "\"Keri qaytar\" basqanda soñki deñiştirgenniñ bu saifede yapılğan bütün deñiştirmeleri yoq etilecek", - "tooltip-undo": "\"Keri al\" bu deñişiklikni keri ala ve deñişiklik penceresini baqıp çıquv rejiminde aça. Keri aluvnıñ sebebini bildirmege izin bere.", + "tooltip-undo": "\"Lâğu et\" bu deñiştirmeni keri qaytara ve deñiştirüv penceresini baqıp çıquv rejiminde aça. Keri qaytaruvnıñ sebebini bildirmege imkân bere.", "anonymous": "{{SITENAME}} saytınıñ {{PLURAL:$1|1|$1}} qaydsız (anonim) qullanıcıları", "siteuser": "{{SITENAME}} saytınıñ qullanıcısı $1", "anonuser": "{{SITENAME}} saytınıñ qaydsız (anonim) qullanıcısı $1", - "lastmodifiedatby": "Saife eñ soñki $3 tarafından $1, $2 tarihında deñiştirildi.", + "lastmodifiedatby": "Saife eñ soñki $3 tarafından $1 $2 tarihında deñiştirildi.", "othercontribs": "Bu saifeni yaratqanda iştirak etken: $1.", "others": "digerleri", "siteusers": "{{SITENAME}} saytınıñ {{PLURAL:$2|1|$2}} qullanıcısı $1", @@ -1352,7 +1403,7 @@ "noimages": "Resim yoq.", "ilsubmit": "Qıdır", "bydate": "hronologik sıranen", - "sp-newimages-showfrom": "$1, $2 tarihından başlap yañı fayllar köster", + "sp-newimages-showfrom": "$1 $2 tarihından başlap yañı fayllar köster", "video-dims": "$1, $2 × $3", "bad_image_list": "Format böyle olmalı:\n\nEr satır * işaretinen başlamalı. Satırnıñ birinci bağlantısı qoşmağa yasaqlanğan faylğa bağlanmalı.\nŞu satırda ilerideki bağlantılar istisna olur, yani şu saifelerde işbu fayl qullanmaq mümkün.", "variantname-crh": "Lat./Кир.", @@ -1389,6 +1440,7 @@ "recreate": "Saifeni yañıdan yarat", "confirm_purge_button": "Ok", "confirm-purge-top": "Bu saifeniñ keşi temizlensinmi?", + "watchlist-expiry-options": "daimiy:infinite,1 afta:1 week,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 yıl:1 year", "imgmultipageprev": "← evelki saife", "imgmultipagenext": "soñraki saife →", "imgmultigo": "Bar!", @@ -1398,6 +1450,7 @@ "table_pager_first": "İlk saife", "table_pager_last": "Soñki saife", "table_pager_limit": "Saife başına $1 dane köster", + "table_pager_limit_label": "Saife başına element:", "table_pager_limit_submit": "Bar", "table_pager_empty": "İç netice yoq", "autosumm-blank": "Saife boşatıldı", @@ -1411,6 +1464,7 @@ "watchlistedit-normal-legend": "Közetüv cedvelinden saife yoq etilüvi", "watchlistedit-normal-explain": "Közetüv cedveliñizdeki saifeler aşağıda kösterilgen.\nBir saife közetüv cedvelinden yoq etmek içün onı belgilep \"{{int:Watchlistedit-normal-submit}}\" dögmesine basıñız.\nKözetüv cedveliñizni [[Special:EditWatchlist/raw|metin olaraq da]] deñiştirip olasıñız.", "watchlistedit-normal-submit": "Saylanğan saifelerni közetüv cevelinden yoq et", + "watchlistedit-normal-check-all": "Episini belgile", "watchlistedit-normal-done": "{{PLURAL:$1|1 saife|$1 saife}} közetüv cedveliñizden yoq etildi:", "watchlistedit-raw-title": "Közetüv ceveliñizni metin şeklinde deñiştiresiñiz", "watchlistedit-raw-legend": "Közetüv cedvelini deñiştirilüvi", @@ -1420,6 +1474,7 @@ "watchlistedit-raw-done": "Közetüv cedveliñiz yañardı.", "watchlistedit-raw-added": "{{PLURAL:$1|1 saife|$1 saife}} ilâve olundı:", "watchlistedit-raw-removed": "{{PLURAL:$1|1 saife|$1 saife}} yoq etildi:", + "watchlistedit-clear-submit": "Közetüv cedvelini temizle (Keri qaytarılmaz!)", "watchlisttools-clear": "Közetüv cedvelini temizle", "watchlisttools-view": "Deñişikliklerni köster", "watchlisttools-edit": "Közetüv cedvelini kör ve deñiştir", @@ -1461,7 +1516,9 @@ "tag-mw-new-redirect-description": "Yañı bir yollama yaratqan ve ya bir saifeni bir yollamağa çevirgen deñiştirmeler", "tag-mw-removed-redirect": "Yollama yoq etilgen", "tag-mw-rollback": "Eski alına ketirildi", - "tag-mw-undo": "Lâğu etildi", + "tag-mw-undo": "Keri qaytar", + "tag-mw-manual-revert": "Elnen keri qaytaruv", + "tag-mw-reverted": "Keri qaytarıldı", "tags-title": "Belgiler", "tags-source-header": "Menba", "tags-active-header": "Faalmi?", @@ -1475,6 +1532,8 @@ "tags-create-submit": "Yarat", "comparepages": "Saifelerni teñeştirüv", "compare-submit": "Teñeştir", + "diff-form": "Farqlar", + "permanentlink": "Daimiy bağlantı", "deletepage": "Saifeni yoq et", "htmlform-invalid-input": "Yiberilgen malümatnen bir mesele çıqtı.", "htmlform-select-badoption": "Bildirgeniñiz deger keçerli degil.", @@ -1504,6 +1563,9 @@ "htmlform-user-not-exists": "<strong>$1</strong> mevcüt degil.", "htmlform-user-not-valid": "<strong>$1</strong> keçerli bir qullanıcı adı degil.", "htmlform-tag-not-allowed": "$1 ruhset etilgen bir teg degil", + "logentry-delete-delete": "$1, $3 saifesini {{GENDER:$2|yoq etti}}", + "logentry-delete-delete_redir": "$1, $3 yollama saifesini üzerine yazılması içün {{GENDER:$2|yoq etti}}", + "logentry-delete-delete_redir2": "$1, üzerine yazıp $3 yollama saifesini yoq {{GENDER:$2|etti}}", "revdelete-content-hid": "münderice gizlendi", "logentry-move-move": "$1 adlı qulanıcı $3 saifesiniñ adını $4 dep {{GENDER:$2|deñiştirildi}}.", "logentry-move-move-noredirect": "$1 adlı qullanıcı $3 saifesiniñ adını yönetme qaldırmayıp $4 dep {{GENDER:$2|deñiştirdi}}", diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json index a2d264a960a7..8bf0e902d1d1 100644 --- a/languages/i18n/cs.json +++ b/languages/i18n/cs.json @@ -2545,7 +2545,7 @@ "block-reason-other": "Dodatečný nebo jiný důvod", "block-confirm-yes": "Ano", "block-confirm-no": "Ne", - "block-success": "„[[Special:Contributions/$1|$1]]“ je {{GENDER:$1|zablokován|zablokována}}. Můžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]].", + "block-success": "„[[Special:Contributions/$1|$1]]“ ([[{{ns:user_talk}}:$1|diskuse]]) je {{GENDER:$1|zablokován|zablokována}}. Můžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]].", "block-user-active-blocks": "Aktivní blokování", "block-user-previous-blocks": "Kniha blokování", "block-user-no-previous-blocks": "Nebyly nalezeny žádné předchozí blokování", diff --git a/languages/i18n/datetime/ann.json b/languages/i18n/datetime/ann.json index 8163e4df22ff..57385012dddd 100644 --- a/languages/i18n/datetime/ann.json +++ b/languages/i18n/datetime/ann.json @@ -45,7 +45,7 @@ "wednesday": "Etetende", "thursday": "Ogbonde", "friday": "Udun̄nde", - "saturday": "Otande", + "saturday": "Òtande", "sunday": "Ukanande", "mon": "Isi.", "tue": "Use.", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index e5a7a69d76a5..5ebf89b809c1 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -2564,7 +2564,7 @@ "ipbother": "Andere Dauer (englisch):", "ipboptions": "2 Stunden:2 hours,1 Tag:1 day,3 Tagen:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monaten:3 months,6 Monaten:6 months,1 Jahr:1 year,unbeschränkt:infinite", "ipbhidename": "Benutzername in Bearbeitungen und Listen verstecken", - "ipbwatchuser": "Beobachten der Benutzerseite und der Diskussionsseite des Ziels", + "ipbwatchuser": "Benutzerseite und Diskussionsseite des Ziels beobachten", "ipb-disableusertalk": "Eigene Diskussionsseite bearbeiten", "ipb-change-block": "Sperre mit diesen Sperrparametern erneuern", "ipb-confirm": "Sperrung bestätigen", @@ -2598,7 +2598,7 @@ "block-details": "Details der Sperre", "block-details-description": "Verwende diese Optionen, um das Ziel daran zu hindern, neben der Bearbeitung andere Aktionen auszuführen.", "block-expiry": "Sperrdauer", - "block-expiry-preset": "Voreingestellte der Dauer", + "block-expiry-preset": "Voreingestellte Dauer", "block-expiry-preset-placeholder": "Wähle eine Dauer", "block-expiry-custom": "Benutzerdefinierte Dauer", "block-expiry-custom-minutes": "Minuten", @@ -2615,9 +2615,11 @@ "block-confirm-yes": "Ja", "block-confirm-no": "Nein", "block-submit": "Speichern", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] wurde gesperrt. Siehe die [[Special:BlockList|Liste aller Sperren]], um Sperren zu überprüfen.", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|Diskussion]]) wurde gesperrt. Siehe die [[Special:BlockList|Liste aller Sperren]], um Sperren zu überprüfen.", "block-user-active-blocks": "Aktive Sperren", "block-user-no-active-blocks": "Keine aktiven Sperren gefunden", + "block-user-active-range-blocks": "Aktive Bereichssperren", + "block-user-no-active-range-blocks": "Keine aktiven Bereichssperren gefunden", "block-user-previous-blocks": "Benutzersperr-Logbuch", "block-user-no-previous-blocks": "Keine vorherigen Sperren gefunden", "block-user-suppressed-blocks": "Logbuch unterdrückter Sperren", @@ -2638,6 +2640,7 @@ "block-javascript-required": "Zur Verwendung von „Special:Block“ ist JavaScript erforderlich.", "block-removed": "Die Sperre wurde entfernt.", "block-reblock-multi-legacy": "Dieser Benutzer ist bereits mehrfach gesperrt und kann mit diesem Formular nicht erneut gesperrt werden.", + "block-view-target": "Ansehen", "unblockip": "Benutzer freigeben", "unblockiptext": "Mit diesem Formular kannst du eine IP-Adresse oder einen Benutzer freigeben.", "unblock-target": "Ziel entsperren", @@ -3300,6 +3303,7 @@ "version-hooks": "Schnittstellen ''(Hooks)''", "version-parser-extensiontags": "Parsererweiterungen (Tags)", "version-parser-function-hooks": "Parsererweiterungen (Funktionen)", + "version-parsoid-modules": "Parsoid-Erweiterungsmodule", "version-hook-name": "Schnittstellenname", "version-hook-subscribedby": "Aufruf von", "version-no-ext-name": "[kein Name]", @@ -4078,6 +4082,7 @@ "skin-action-move": "Verschieben", "skin-json-warning": "@WARNUNG", "skin-json-warning-message": "Dies ist keine API, es dient nur zum Debuggen! Nicht in Helferlein oder produktiven Code verwenden.", + "parsoid-async-not-ready-fallback": "Inhalt nicht fertig", "parsoid-stash-rate-limit-error": "Die Vorabspeicherung ist fehlgeschlagen, weil ein Limit überschritten wurde. Bitte versuche es später noch einmal.", "parsoid-resource-limit-exceeded": "Limit für Parsoid-Ressourcen überschritten: $1", "parsoid-revision-access": "Parsoid kann nicht auf die Version zugreifen: $1", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index a2f807404712..2393d99a6656 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -2621,7 +2621,7 @@ "blockipsuccesssub": "Block succeeded", "blockipsuccesstext": "[[Special:Contributions/$1|$1]] has been blocked.<br />\nSee the [[Special:BlockList|block list]] to review blocks.", "ipb-empty-block": "The block submitted has no restrictions enabled.", - "ipb-block-not-found": "The block could not be made, but no existing block was found for \"$1\". If this problem persists, please [https://www.mediawiki.org/wiki/Special:MyLanguage/Help_talk:Blocking_users report it].", + "ipb-block-not-found": "The block could not be made, probably because another administrator tried to block this user at the same time. Check the block status and try again.", "ipb-blockingself": "You are about to block yourself! Are you sure you want to do that?", "ipb-confirmhideuser": "You are about to block a user with \"hide user\" enabled. This will suppress the user's name in all lists and log entries. Are you sure you want to do that?", "ipb-confirmaction": "If you are sure you really want to do it, please check the \"{{int:ipb-confirm}}\" field at the bottom.", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 2957ebd5d14b..b4ce6857605d 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -1191,6 +1191,7 @@ "searchall": "todos", "showingresultsinrange": "A continuación se muestran hasta <strong>$1</strong> {{PLURAL:$1|resultado|resultados}} entre el n.º <strong>$2</strong> y el n.º <strong>$3</strong>.", "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados <strong>$1 – $2</strong> de <strong>$3</strong>}}", + "search-showingresults-approximate": "{{PLURAL:$4|1=Resultado <strong>$1</strong> de al menos <strong>$3</strong> |Resultados <strong>$1 – $2</strong> de al menos <strong>$3</strong>}}", "search-nonefound": "No hay resultados que cumplan los criterios de búsqueda.", "search-nonefound-thiswiki": "No hay resultados que cumplan los criterios de búsqueda en este sitio.", "powersearch-legend": "Búsqueda avanzada", @@ -2016,7 +2017,7 @@ "filedelete-reason-dropdown": "*Razones habituales de borrado\n** Violación de derechos de autor\n** Archivo duplicado", "filedelete-edit-reasonlist": "Edita los motivos del borrado", "filedelete-edit-reasonlist-suppress": "Editar motivos de supresión", - "filedelete-maintenance": "Borrado y restauración de archivos temporalmente deshabilitados durante el mantenimiento.", + "filedelete-maintenance": "La eliminación y recuperación de archivos está deshabilitada temporalmente durante el mantenimiento.", "filedelete-maintenance-title": "No se puede eliminar el archivo", "mimesearch": "Búsqueda por MIME", "mimesearch-summary": "Esta página permite el filtrado de archivos por su tipo MIME.\nEntrada: tipo/subtipo o tipo/*, p. ej. <code>image/jpeg</code>.", diff --git a/languages/i18n/exif/ja.json b/languages/i18n/exif/ja.json index 4bec1e3219ef..526bd5d1252b 100644 --- a/languages/i18n/exif/ja.json +++ b/languages/i18n/exif/ja.json @@ -16,6 +16,7 @@ "Whym", "Yaakiyu.jp", "Yusuke1109", + "もなー(偽物)", "ネイ" ] }, @@ -417,6 +418,7 @@ "exif-initialviewrolldegrees": "初回ビューのロール角(度数)", "exif-initialhorizontalfovdegrees": "初期FOV(水平角度)", "exif-initialverticalfovdegrees": "初期FOV(垂直角度)", + "exif-sourcephotoscount": "ソース写真数", "exif-croppedareaimagewidthpixels": "パノラマのトリミング幅", "exif-croppedareaimageheightpixels": "パノラマのトリミング高さ", "exif-fullpanowidthpixels": "パノラマ全体の幅", diff --git a/languages/i18n/ext.json b/languages/i18n/ext.json index 8d58786c32e8..4332610ba0b6 100644 --- a/languages/i18n/ext.json +++ b/languages/i18n/ext.json @@ -21,11 +21,11 @@ "아라" ] }, - "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}", - "category_header": "Artículus ena categoria \"$1\"", + "pagecategories": "{{PLURAL:$1|Categoría|Categorías}}", + "category_header": "Artícalus ena categoría \"$1\"", "subcategories": "Sucategorias", - "category-media-header": "Meya ena categoria \"$1\"", - "category-empty": "''Atualmenti nu desistin ni artículus ni archivus murtimeya nesta categoria.''", + "category-media-header": "Meya ena categoría \"$1\"", + "category-empty": "<em>Ogañu no essestin ni artícalus ni archivus murtimeya nesta categoría.</em>", "hidden-categories": "{{PLURAL:$1|categoria açonchá|categorias açonchás}}", "hidden-category-category": "Categorias açonchás", "category-subcat-count": "{{PLURAL:$2|Esta categoria solu tiini la siguienti sucategoria.|Esta categoria tiini {{PLURAL:$1|la siguienti sucategoria|las siguientis $1 sucategorias}}, dun total de $2.}}", @@ -49,7 +49,7 @@ "faq": "ਆਮ ਸੁਆਲ਼", "actions": "Acionis", "namespaces": "Espaciu de nombris", - "variants": "Variantis", + "variants": "Varianças", "navigation-heading": "Menú de navegación", "errorpagetitle": "Marru", "returnto": "Gorvel a $1.", @@ -63,15 +63,15 @@ "history": "Estorial", "history_short": "Estorial", "updatedmarker": "atualizau dendi la mi úrtima vesita", - "printableversion": "Velsión pa imprental", + "printableversion": "Vessión pa emprental", "permalink": "Atiju prepetu", - "print": "Imprental", + "print": "Emprental", "view": "Guipal", "skin-view-view": "Leyel", "skin-view-foreign": "Vel en $1", - "edit": "Edital", - "skin-view-edit": "Edital", - "edit-local": "Eital descrición local", + "edit": "Dital", + "skin-view-edit": "Dital", + "edit-local": "Dital descrición local", "create": "Crial", "skin-view-create": "Crial", "create-local": "Azeñil descrición local", @@ -79,16 +79,16 @@ "undelete_short": "Arrecuperal {{PLURAL:$1|una eición|$1 eicionis}}", "viewdeleted_short": "Guipal {{PLURAL:$1|una eición esborrá|$1 eicionis esborrás}}", "protect": "Protegel", - "protect_change": "escambial", - "skin-action-unprotect": "Escambial proteción", - "unprotect": "Escambial proteción", - "newpage": "Páhina nueva", + "protect_change": "mual", + "skin-action-unprotect": "Mual proteción", + "unprotect": "Mual proteción", + "newpage": "Página nuea", "talkpagelinktext": "carava", "specialpage": "Página Especial", - "personaltools": "Herramientas presonalis", + "personaltools": "Herramientas pressonalis", "talk": "Carava", "views": "Guipás", - "toolbox": "Achiperris", + "toolbox": "Herramientas", "cactions": "Más", "imagepage": "Vel páhina la imahin", "mediawikipage": "Vel páhina el mensahi", @@ -99,7 +99,7 @@ "otherlanguages": "En otras palras", "redirectedfrom": "(Rederigíu dendi $1)", "redirectpagesub": "Rederigil página", - "redirectto": "Redirihi a:", + "redirectto": "Redirigi a:", "lastmodifiedat": "Las últimas muacionis desta página huerun alas $2 el día $1.", "viewcount": "Esta páhina á siu visoreá {{PLURAL:$1|una vezi|$1 vezis}}.", "protectedpage": "Página protegia", @@ -114,15 +114,15 @@ "currentevents-url": "Project:La troji las enteracionis", "disclaimers": "Avissu legal", "disclaimerpage": "Project:Arrayu heneral de responsabiliá", - "edithelp": "Ayua d'eición", + "edithelp": "Ayua de dición", "helppage-top-gethelp": "Ayúa", "mainpage": "Página prencipal", "mainpage-description": "Página prencipal", - "policy-url": "Project:Pulítica", + "policy-url": "Project:Política", "portal": "Portal dela comunidá", "portal-url": "Project:Portal dela comunidá", - "privacy": "Pulítica", - "privacypage": "Project:Pulítica e privaciá", + "privacy": "Política de privaciá", + "privacypage": "Project:Política de privaciá", "badaccess": "Marru colos tus premisus", "badaccess-group0": "Nu se te premiti hazel esa ación.", "badaccess-groups": "Solu los usuárius {{PLURAL:$2|del grupu|de los grupus}} $1 puein hazel esa ación.", @@ -133,13 +133,13 @@ "new-messages": "Tiinis $1 ($2).", "new-messages-from-many-users": "Tienis $1 de muchus usuárius ($2).", "new-messages-link-plural": "{{PLURAL:$1|un mensahi nuevu|999=mensahis nuevus}}", - "editsection": "Edital", - "editold": "Edital", + "editsection": "Dital", + "editold": "Dital", "viewsourceold": "Visoreal coigu huenti", - "editlink": "edital", + "editlink": "dital", "viewsourcelink": "vel coigu", - "editsectionhint": "Edital seción: $1", - "toc": "Continius", + "editsectionhint": "Dital seción: $1", + "toc": "Contenius", "showtoc": "muestral", "hidetoc": "açonchal", "collapsible-expand": "Destendel", @@ -153,20 +153,20 @@ "site-atom-feed": "Canal Atom $1", "page-rss-feed": "Canal RSS \"$1\"", "page-atom-feed": "Canal Atom \"$1\"", - "red-link-title": "$1 (la página nu dessisti)", + "red-link-title": "$1 (la página no essesti)", "nstab-main": "Artícalu", "nstab-user": "Página {{GENDER:$1|d'usuariu|d'usuaria}}", - "nstab-media": "Páhina \"Meya\"", + "nstab-media": "Multimeya", "nstab-special": "Página especial", "nstab-project": "Página el proyeutu", "nstab-image": "Archivu", - "nstab-mediawiki": "Mensahi", + "nstab-mediawiki": "Messagi", "nstab-template": "Prantilla", "nstab-help": "Página d'ayúa", - "nstab-category": "Categoria", + "nstab-category": "Categoría", "mainpage-nstab": "Página prencipal", - "nosuchaction": "Nu desisti tal ación", - "nosuchactiontext": "La URL nu es vália.\nEs possibri que aigas marrau escribiendu la direción, u aigas siguiu un atiju encorretu.\nTamién es possibri que se trati dun marru entelnu de {{SITENAME}}.\nespecificá ena URL", + "nosuchaction": "No essesti tal ación", + "nosuchactiontext": "La URL no es vália.\nEs possibri qu'aigas marrau escreviendu la direción, u aigas siguíu un atiju encorretu.\nTamién es possibri que se trati dun marru p'ahuera de {{SITENAME}}.\nespecificá ena URL", "nosuchspecialpage": "Nu desisti tal páhina especial", "nospecialpagetext": "<strong>No essesti esa página especial.</strong>\n\nPueis encontral una lista conas páginas especialis essestentis en [[Special:SpecialPages]].", "error": "Marru", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index df67af2e2d16..83a2ffc1c227 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -2570,9 +2570,11 @@ "block-confirm-yes": "Kyllä", "block-confirm-no": "Ei", "block-submit": "Lähetä", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] on estetty. Voimassa olevat estot näkyvät [[Special:BlockList|estoluettelossa]].", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|keskustelu]]) on estetty. Voimassa olevat estot näkyvät [[Special:BlockList|estoluettelossa]].", "block-user-active-blocks": "Voimassa olevat estot", "block-user-no-active-blocks": "Aktiivisia estoja ei löytynyt", + "block-user-active-range-blocks": "Aktiiviset avaruusestot", + "block-user-no-active-range-blocks": "Aktiivisia avaruusestoja ei löytynyt", "block-user-previous-blocks": "Estoloki", "block-user-no-previous-blocks": "Aiempia estoja ei löydy", "block-user-suppressed-blocks": "Piilotettujen estojen loki", @@ -2593,6 +2595,7 @@ "block-javascript-required": "JavaScript vaaditaan Special:Block-käyttöliittymän käyttämiseen.", "block-removed": "Esto on poistettu.", "block-reblock-multi-legacy": "Tämä käyttäjä on jo estetty useampaan kertaa, eikä sille pysty asettamaan uusia estoja tällä lomakkeella.", + "block-view-target": "Näytä", "unblockip": "Muokkauseston poisto käyttäjältä", "unblockiptext": "Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.", "unblock-target": "Poista kohteen esto", @@ -3279,6 +3282,7 @@ "version-hooks": "Kytköspisteet", "version-parser-extensiontags": "Jäsentimen laajennustagit", "version-parser-function-hooks": "Jäsentimen laajennusfunktiot", + "version-parsoid-modules": "Parsoid-laajennusmoduulit", "version-hook-name": "Kytköspisteen nimi", "version-hook-subscribedby": "Kytkökset", "version-no-ext-name": "[ei nimeä]", @@ -4053,6 +4057,7 @@ "skin-action-delete": "Poista", "skin-action-move": "Siirrä", "skin-json-warning": "@VAROITUS", + "parsoid-async-not-ready-fallback": "Sisältö ei ole valmis", "parsoid-resource-limit-exceeded": "Parsoidin resurssiraja ylittyi: $1", "parsoid-revision-access": "Jäsennin ei pääse versioon: $1", "parsoid-client-error": "Virheellinen Parsoidin syöte: $1", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index 910f3d62b42d..6b7e86346edd 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -2709,7 +2709,7 @@ "block-confirm-yes": "Oui", "block-confirm-no": "Non", "block-submit": "Valider", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] a été {{GENDER:$1|bloqué|bloquée}}. Consultez la [[Special:BlockList|liste de blocage]] pour voir les blocages.", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|talk]]) a été bloqué. Consultez la [[Special:BlockList|liste de blocages]] pour consulter les blocages.", "block-user-active-blocks": "Blocages actifs", "block-user-no-active-blocks": "Aucun bloc actif trouvé", "block-user-previous-blocks": "Journal des blocages", @@ -2732,6 +2732,7 @@ "block-javascript-required": "JavaScript est requis pour utiliser l'interface de Spécial:Bloquer.", "block-removed": "Le blocage a été supprimé.", "block-reblock-multi-legacy": "Cet utilisateur est déjà bloqué plusieurs fois et ne peut pas être rebloqué avec ce formulaire.", + "block-view-target": "Afficher", "unblockip": "Débloquer un utilisateur", "unblockiptext": "Utilisez le formulaire ci-dessous pour redonner les droits d’écriture à une adresse IP ou un nom d’utilisateur qui a été bloqué auparavant.", "unblock-target": "Débloquer la cible", @@ -3454,6 +3455,7 @@ "version-hooks": "Greffons", "version-parser-extensiontags": "Balises étendues de l’analyseur syntaxique", "version-parser-function-hooks": "Fonctions étendues de l’analyseur syntaxique", + "version-parsoid-modules": "Modules d'extension Parsoid", "version-hook-name": "Nom du greffon", "version-hook-subscribedby": "Abonnés :", "version-version": "($1)", @@ -4238,6 +4240,7 @@ "skin-action-move": "Renommer", "skin-json-warning": "@AVERTISSEMENT", "skin-json-warning-message": "Ce n'est pas une API car elle sert uniquement au débogage ! Ne pas utiliser dans les gadgets ou au code de production.", + "parsoid-async-not-ready-fallback": "Contenu non prêt", "parsoid-stash-rate-limit-error": "La dissimulation a échoué parce que le taux limite d’utilisation a été dépassé. Veuillez essayer à nouveau plus tard.", "parsoid-resource-limit-exceeded": "Limite de ressources de Parsoid dépassée : $1", "parsoid-revision-access": "Parsoid ne peut pas accéder à la révision : $1", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index 888d7cccc016..61664f2081cb 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -2419,8 +2419,8 @@ "sp-contributions-blocked-notice-partial": "{{GENDER:$1|Este usuario|Esta usuaria|Esta conta}} está bloquead{{GENDER:$1|o|a|a}} parcialmente.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", "sp-contributions-blocked-notice-anon": "Este enderezo IP está bloqueado.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", "sp-contributions-blocked-notice-anon-partial": "Este enderezo IP está bloqueado parcialmente.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", - "sp-contributions-blocked-notice-multi": "{{GENDER:$1|Este usuario|Esta usuaria|Esta conta}} está bloquead{{GENDER:$1|o|a|a}} $2 veces.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", - "sp-contributions-blocked-notice-anon-multi": "Este enderezo IP está bloqueado $2 veces.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", + "sp-contributions-blocked-notice-multi": "{{GENDER:$1|Este usuario|Esta usuaria|Esta conta}} está bloquead{{GENDER:$1|o|a|a}} $2 {{PLURAL:$2|vez|veces}}.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", + "sp-contributions-blocked-notice-anon-multi": "Este enderezo IP está bloqueado $2 {{PLURAL:$2|vez|veces}}.\nVelaquí a última entrada do rexistro de bloqueos, por se queres consultala:", "sp-contributions-search": "Procura de contribucións", "sp-contributions-username": "Enderezo IP ou nome da conta:", "sp-contributions-toponly": "Amosar só as edicións que son a revisión máis recente", @@ -2523,9 +2523,11 @@ "block-confirm-yes": "Si", "block-confirm-no": "Non", "block-submit": "Enviar", - "block-success": "[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}. Olla a [[Special:BlockList|lista de bloqueos]] para revisar os bloqueos.", + "block-success": "[[Special:Contributions/$1|$1]] ([[{{ns:user_talk}}:$1|conversa]]) foi {{GENDER:$1|bloqueado|bloqueada}}. Olla a [[Special:BlockList|lista de bloqueos]] para revisar os bloqueos.", "block-user-active-blocks": "Bloqueos activos", "block-user-no-active-blocks": "Non se atoparon bloqueos activos", + "block-user-active-range-blocks": "Bloqueos de rango activos", + "block-user-no-active-range-blocks": "Non se atoparon bloqueos de rango activos", "block-user-previous-blocks": "Rexistro de bloqueos", "block-user-no-previous-blocks": "Non se atoparon bloqueos anteriores", "block-user-suppressed-blocks": "Rexistro de bloqueos suprimidos", @@ -2546,6 +2548,7 @@ "block-javascript-required": "Cómpre JavaScript para utilizar a interface de Special:Block.", "block-removed": "Retirouse o bloqueo.", "block-reblock-multi-legacy": "Este usuario xa está bloqueado varias veces e non se pode volver bloquear con este formulario.", + "block-view-target": "Ver", "unblockip": "Desbloquear un usuario", "unblockiptext": "Utiliza o seguinte formulario para dar de novo acceso de escritura a un enderezo IP ou usuario que estea bloqueado.", "unblock-target": "Desbloquear un obxectivo", @@ -3230,6 +3233,7 @@ "version-hooks": "Asociadores", "version-parser-extensiontags": "Etiquetas das extensións do analizador", "version-parser-function-hooks": "Asociadores das funcións do analizador", + "version-parsoid-modules": "Módulos da extensión Parsoid", "version-hook-name": "Nome do asociador", "version-hook-subscribedby": "Subscrito por", "version-no-ext-name": "[sen nome]", @@ -4003,6 +4007,7 @@ "skin-action-move": "Mover", "skin-json-warning": "@AVISO", "skin-json-warning-message": "Isto non é unha API, é só para depuración! Non uses trebellos nin código de produción.", + "parsoid-async-not-ready-fallback": "O contido non está listo", "parsoid-stash-rate-limit-error": "Produciuse un erro no almacenamento porque se superou o límite de taxa. Por favor, inténtao de novo máis tarde.", "parsoid-resource-limit-exceeded": "Superouse o límite de recursos de Parsoid: $1", "parsoid-revision-access": "Parsoid non pode acceder á revisión: $1", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index b8809ff7c843..c4aa9202591a 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -2542,9 +2542,11 @@ "block-confirm-yes": "כן", "block-confirm-no": "לא", "block-submit": "שליחה", - "block-success": "[[Special:Contributions/$1|$1]] {{GENDER:$1|נחסם|נחסמה}}. ר' את [[Special:BlockList|רשימת החסימות]] כדי לסקור חסימות.", + "block-success": "[[Special:Contributions/$1|$1]] ([[{{ns:user_talk}}:$1|שיחה]]) {{GENDER:$1|נחסם|נחסמה}}. ר' את [[Special:BlockList|רשימת החסימות]] כדי לסקור חסימות.", "block-user-active-blocks": "חסימות פעילות", "block-user-no-active-blocks": "לא נמצאו חסימות פעילות", + "block-user-active-range-blocks": "חסימות טווח פעילות", + "block-user-no-active-range-blocks": "לא נמצאו חסימות טווח פעילות", "block-user-previous-blocks": "יומן חסימות", "block-user-no-previous-blocks": "לא נמצאו חסימות קודמות", "block-user-suppressed-blocks": "יומן חסימות מועלמות", @@ -2565,6 +2567,7 @@ "block-javascript-required": "נדרשת הפעלת JavaScript כדי להשתמש בממשק Special:Block.", "block-removed": "החסימה הוסרה.", "block-reblock-multi-legacy": "החשבון הזה כבר חסום כמה פעמים ולא ניתן לחסום אותו מחדש באמצעות הטופס הזה.", + "block-view-target": "צפייה", "unblockip": "שחרור חסימה של משתמש", "unblockiptext": "ניתן להשתמש בטופס שלהלן כדי להחזיר את הרשאות הכתיבה לכתובת IP חסומה או למשתמש חסום.", "unblock-target": "לשחרר את חסימת היעד", @@ -3245,6 +3248,7 @@ "version-hooks": "מבני hook", "version-parser-extensiontags": "תגיות של הרחבות מפענח", "version-parser-function-hooks": "מבנים של פונקציות מפענח", + "version-parsoid-modules": "מודולים של הרחבת פרסואיד", "version-hook-name": "שם ה־hook", "version-hook-subscribedby": "הפונקציה הרושמת", "version-no-ext-name": "[ללא שם]", @@ -4015,6 +4019,7 @@ "skin-action-move": "העברה", "skin-json-warning": "@אזהרה", "skin-json-warning-message": "זה לא API, זה רק לניפוי באגים! אין להשתמש בזה בגאדג'טים או בקוד מבצעי.", + "parsoid-async-not-ready-fallback": "התוכן לא מוכן", "parsoid-stash-rate-limit-error": "שמירה במאגר העלאות נכשלה בשל עקיפת מגבלת קצב. נא לנסות שוב מאוחר יותר.", "parsoid-resource-limit-exceeded": "משאבי פרסואיד עברו את המגבלה: $1", "parsoid-revision-access": "פרסואיד אינו יכול לגשת לגרסה: $1", @@ -4024,7 +4029,7 @@ "newpages-showhide-redirect": "$1 הפניות", "newpages-showhide-registered": "$1 משתמשים רשומים", "restsandbox": "ארגז חול של REST", - "restsandbox-text": "ניתן להשתמש בדף הזה כדי להתנסות ב־REST APIs של מדיה־ויקי. קריאות API שייעשו דרך ממשק ארגז החול יתחברו לתוכן ויקי חי, והן יכולות לשנות אותו. נא לעיין ב[https://www.mediawiki.org/wiki/API:REST_API תיעוד ה־API] למידע נוסף על שימוש ב־API.", + "restsandbox-text": "ניתן להשתמש בדף זה כדי להתנסות ב־REST APIs של מדיה־ויקי. קריאות API שייעשו דרך ממשק ארגז החול יתחברו לתוכן ויקי חי, והן יכולות לשנות אותו. נא לעיין ב[https://www.mediawiki.org/wiki/API:REST_API תיעוד ה־API] למידע נוסף על שימוש ב־API.", "restsandbox-disclaimer": "יש לך משוב על ארגז החול הזה? ניתן להשאירו [https://www.mediawiki.org/wiki/MediaWiki_Interfaces_Team/Feature_Feedback/REST_Sandbox כאן].<br />לתשומת ליבך: כעת עדיין לא ניתן לתרגם את הממשק של ארגז החול ואת תפריטי הניווט.<br />", "restsandbox-select-api": "נא לבחור איזה API לחקור.", "restsandbox-no-specs-configured": "לא הוגדרו ממשקי REST API שאפשר לחקור. נא להשתמש בהגדרה RestSandboxSpecs.", diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json index 39aea9662737..dc905cc609c2 100644 --- a/languages/i18n/ia.json +++ b/languages/i18n/ia.json @@ -2497,7 +2497,7 @@ "block-confirm-yes": "Si", "block-confirm-no": "No", "block-submit": "Submitter", - "block-success": "[[Special:Contributions/$1|$1]] ha essite blocate. Vide le [[Special:BlockList|lista de blocadas]] pro revider le blocadas.", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|discussion]]) ha essite blocate. Vide le [[Special:BlockList|lista de blocadas]] pro revider le blocadas.", "block-user-active-blocks": "Blocadas active", "block-user-no-active-blocks": "Necun blocada active trovate", "block-user-previous-blocks": "Registro de blocadas", diff --git a/languages/i18n/ike-cans.json b/languages/i18n/ike-cans.json index eebc0d5974ed..27ee2682c985 100644 --- a/languages/i18n/ike-cans.json +++ b/languages/i18n/ike-cans.json @@ -183,7 +183,7 @@ "hiddencategories": "ᑖᓐᓇ ᒪᒃᐱᒐᖅ ᐃᓚᒋᔭᐅᔪᖅ {{PLURAL:$1|ᓴᐳᑎᓯᓯᐅᑎᖅ ᖁᓛᖅᑐᖅ|$1 ᓴᐳᑎᓯᓯᐅᑎᖅ ᖁᓛᖅᑐᖅ}}:", "permissionserrors": "ᐱᔪᓐᓇᐅᑎ ᑕᒻᒪᖅᓯᒪᔪᖅ", "permissionserrorstext-withaction": "ᐱᔪᓐᓇᐅᑎᖃᙱᓚᑎᑦ $2, ᐅᑯᓄᖓ {{PLURAL:$1|ᐃᑕᕐᒥᒃ|ᐱᔾᔪᑎᖏᑦ}}:", - "recreate-moveddeleted-warn": "<strong>ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ: ᐊᑕᐃᓈᓇᐅᔪᐊᖅ ᒪᒃᐱᒐᖅ ᐅᕐᓗᐃᑦ ᑕᕐᑐᓗᑕᐅᔪᖅ.</strong>\n\nᐃᓱᒪᒃᓴᖅᓯᐅᕈᑎᖃᕆᐊᖃᖅᐳᑎᑦ ᓈᒻᒪᒃᑲᓗᐊᕐᒪᖔᑦ ᑲᔪᓯᑎᑕᐅᓗᓂ ᐋᖅᑭᒋᐊᕆᓂᖅ ᑖᔅᓱᒥᖓ ᒪᒃᐱᒐᕐᒥᒃ.\nᑕᕐᑖᕆᐊᖅᑐᖅ ᑭᓯᕈᓐᓇᕐᑐᖅᐅᓯᐊᕈᓐᓇᕐᑐᖅ ᒪᒃᐱᒐᖅ ᓂᕆᓄᑦᑎᒃ ᐃᒪᓗ ᐊᐃᑎᕐᓇᓄᖅ:", + "recreate-moveddeleted-warn": "<strong>ᐅᔾᔨᖅᓱᕆᑦ: ᐊᑕᐃᓈᓇᐅᔪᐊᖅ ᒪᒃᐱᒐᖅ ᐅᕐᓗᐃᑦ ᑕᕐᑐᓗᑕᐅᔪᖅ.</strong>\n\nᐃᓱᒪᒃᓴᖅᓯᐅᕈᑎᖃᕆᐊᖃᖅᐳᑎᑦ ᓈᒻᒪᒃᑲᓗᐊᕐᒪᖔᑦ ᑲᔪᓯᑎᑕᐅᓗᓂ ᐋᖅᑭᒋᐊᕆᓂᖅ ᑖᔅᓱᒥᖓ ᒪᒃᐱᒐᕐᒥᒃ.\nᑕᕐᑖᕆᐊᖅᑐᖅ ᑭᓯᕈᓐᓇᕐᑐᖅᐅᓯᐊᕈᓐᓇᕐᑐᖅ ᒪᒃᐱᒐᖅ ᓂᕆᓄᑦᑎᒃ ᐃᒪᓗ ᐊᐃᑎᕐᓇᓄᖅ:", "moveddeleted-notice": "ᑕᒪᕐᒦᑕᐅᔪᒃ ᐅᓪᓛᕐᔪᑦ ᒪᒃᐱᒐᖅ.\nᐃᒡᓗᓕᒫᑦᓴᓂᒃ, ᓂᓯᕈᖓᐃᒡᔪᓂᒃ, ᓯᓯᐅᔪᓂᒃ ᐊᒻᒪ ᐅᕙᓂᖃᖅᑐᐃᓐᓇᐅᔪᒃ ᓴᐅᒻᒪᓂᖏᑦ ᐱᔭᐅᔪᓂᒃᑯᑦ ᐊᐅᒃᓯᖅᑕᐅᓇᕐᓂᒃ ᐅᕝᕙᑦᑎᓪᓗᒋᓗ.", "undo-failure": "ᐋᖅᑭᒋᐊᖅᑕᐅᓯᒪᔪᖅ ᐅᑎᖅᑎᑕᐅᔪᓐᓇᓚᐅᙱᓚᖅ ᐱᔾᔪᑎᒋᓪᓗᒍ ᐊᔾᔨᒌᙱᓐᓂᖏᑦ ᐊᑯᓐᓂᖓᓂ ᐋᖅᑭᒋᐊᖅᑕᐅᓯᒪᔪᑦ.", "viewpagelogs": "ᑕᑯᒋᐊᕐᓗᒍ ᑎᑎᕋᖅᓯᒪᔪᑦ ᑖᔅᓱᒧᖓ ᒪᒃᐱᒐᕐᒧᑦ", diff --git a/languages/i18n/ike-latn.json b/languages/i18n/ike-latn.json index 780c7e268037..f7cee9c2cb34 100644 --- a/languages/i18n/ike-latn.json +++ b/languages/i18n/ike-latn.json @@ -8,6 +8,7 @@ "pagecategories": "{{PLURAL:$1|tukisiumajuq|tukisiumaniq}}", "category_header": "makpigait aviktuqsimajuni \"$1\"", "subcategories": "aviktuqsimaningit", + "category-media-header": "salumaninga taakkua \"$1\"", "category-empty": "<em>uvani takujunnaqtasi arraagutamaaqsiuti titiqqaup qaangagut.</em>", "hidden-categories": "{{PLURAL:$1|ijiqsimajut aviktuqsimajut|ijiqsimajut aviktuqsimanikkut}}", "category-subcat-count": "{{PLURAL:$2|taanna nalunaikkutaq ukuningatuaq nalunaikkutaqaqpuq.|taanna aviktuqsimajuq ukuninga pitaqaqpuq {{PLURAL:$1|aviktuqsimaninga|$1 aviktuqsimaningit}}, nakinngaarninga $2 katillugit.}}", @@ -56,6 +57,7 @@ "otherlanguages": "asiagut uqarlugu", "redirectedfrom": "(qaningani kamagijaq aasit nakit $1)", "redirectpagesub": "aningani kamagijaq aasit nakit mappitaq", + "redirectto": "turaaqtitaukkannirluni uvunga:", "lastmodifiedat": "sivulliuvaktut sivurngagut $1, tigujausimavut $2.", "jumpto": "ujaraktaqtaujuq:", "jumptonavigation": "mianirivaa", @@ -101,6 +103,7 @@ "mainpage-nstab": "amiq", "nospecialpagetext": "<strong>tuksiraqsimagavit atunngittumik pituinnaungittumik makpigarmik</strong>\n\nuqalimaarlugit sivulliqpaat atuqtaujut uqalimaagait katimatillugit [[Special:SpecialPages|{{int:specialpages}}]].", "badtitle": "ajuqtuq atiq", + "badtitletext": "tuksirautaujuq makpigaup taiguusinga naammalaunngilaq, iluliqanngilaq, uvvaluunniit tammaqsimalluni turaangalluni tukiqaqtunut uqausirnut uvvaluunniit wiki taiguusinganut.\natuliqtittinasuarniq ujjirusuliqtittinirmik naqittagarnik amma sanaugarnik.", "viewsource": "takulugu tukisigiarvik", "skin-action-viewsource": "takulugu tukisigiarvik", "viewsource-title": "takulugu tukisigiarvik $1", @@ -109,21 +112,36 @@ "userlogin-yourname": "atuqtiup atinga", "userlogin-yourname-ph": "titirarlugu atuqtiunirmut atiq", "userlogin-yourpassword": "nagguaq", + "userlogin-yourpassword-ph": "titiraqtausimajut katujjillutik", + "createacct-yourpassword-ph": "katujjaujunnaqtuq ilinniarutiksaq", "yourpasswordagain": "tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti", + "createacct-yourpasswordagain": "umiaqtuqatigiinniq", + "createacct-yourpasswordagain-ph": "titirakkannirlugu naqittagaq", + "userlogin-remembermypassword": "ikinniqpaanguniaqtuq", "login": "akunnapuq", "logout": "anivvik", "userlogout": "anivvik", "notloggedin": "ilauniaqtut", + "userlogin-noaccount": "akiliksaqanngilatit?", "userlogin-joinproject": "ilauvvigilugit {{SITENAME}}", "createaccount": "saqqittilutit akiliksamik", + "userlogin-resetpassword-link": "puiguraviuk naqittagait?", + "userlogin-helplink2": "qanuittunik qanuinniujunik", + "createacct-emailoptional": "irngiinnaaqtautikkut turaarutinga (atuqtaujunnaqtuq)", + "createacct-email-ph": "titirarlugu irngiinnaaqtautikkut turaarutigijait", + "createacct-submit": "saqqittilutit akiliksarijarnik", "createacct-benefit-heading": "{{SITENAME}} sanajausimajut iliksititut inungnut.", + "createacct-benefit-body1": "{{PLURAL:$1|suqutaunngilaq|aaqqigiaqtauningit}}", + "createacct-benefit-body2": "{{PLURAL:$1|mappigaq|makpigait}}", + "createacct-benefit-body3": "qangattialisaq {{PLURAL:$1|tunisijuq|tunisijut}}", "mailmypassword": "isirunnautinga asijjiqtauluni", "loginlanguagelabel": "uqausiq: $1", "pt-login": "akunnapuq", "pt-login-button": "akunnapuq", "pt-createaccount": "saqqittilutit akiliksamik", "pt-userlogout": "anivvik", - "summary": "suvit:", + "passwordreset": "aaqqigiarlugu naqittagaq", + "summary": "nainaaqsimajuq:", "minoredit": "ukiukiluaq asianngutuq", "watchthis": "tusaramiuk", "savearticle": "uqausillaringgita titiraqtauninggil", @@ -144,30 +162,53 @@ "anontalkpagetext": "----\n<em>una uqaqatigiigutaujunnaqtuq makpigaq nalunaiqtausimanngittumut atuqtimut suli saqqittisimanngittumut akiliksamik, uvvaluunniit atunngittumut.</em>\ntaimaittuq IP turaaruti katujjaujunnaqtuq amisunut atuqtinut.\nnalunaiqtausimanngittumik atuqtiuguvit ammalu ikpigusuglutit atuutiqanngittunik uqausiksanik ilingnut turaaqtitausimaninginnik, atii [[Special:CreateAccount|saqqittilutit akiliksamik]] uvvaluunniit [[Special:UserLogin|atiliurit]] sivuniksami nalulirutauqunagu asinginnut nalunaiqtausimanngittunut atuqtinut.", "noarticletext": "maannaujuq titiraqsimajuqanngilaq tavvani makpigarmi.\n[[Special:Search/{{PAGENAME}}|qinirunnaqputit taassuminga makpigaup taiguusinganik]] asinginni makpigarni, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qinirlutit aktuaniqaqtunik titiraqsimajunik], uvvaluunniit [{{fullurl:{{FULLPAGENAME}}|action=edit}} saqqittilutit taassuminga makpigarmik]</span>.", "noarticletext-nopermission": "maannaujuq titiraqsimajuqanngilaq tavvani makpigarmi.\nuqautilutit kisumik [[Special:Search/{{PAGENAME}}|ilagijaujut uqausiqaqattanngilat]] miksaanut, uvanga <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAME}}}} asiguntikut titiraqtingit]</span>, namiimmangaata nutaat nirijauvaktut niqit, nani tunijaujumangmangaaqpit ikajuutinik.", + "userpage-userdoesnotexist-view": "atuqtiup akiliksanga \"$1\" titiraqsimanngittuq wiki-mi.", + "previewnote": "<strong>iqqaumagit taanna takunnagatuinnaummat</strong>\nasijjiqtatit suli saqqitausimanngilat!", + "continue-editing": "aaqqiksuivingmuarlutit", + "editing": "aaqqigiariniq $1", + "creating": "sananiq $1", "editingsection": "suqusiqpaa $1 (ilangiutititsiguti)", "editingcomment": "suqusiqpaa $1 (ujjirijaq)", "editconflict": "suqusiqpaa akaunngiliurutiniq: $1", + "templatesused": "{{PLURAL:$1|aaqqiksimaninga|aaqqiksimaningit}} kanatamiutaugama:", + "templatesusedpreview": "{{PLURAL:$1|aaqqiksimaninga|aaqqiksimaningit}} kanatamiutaugama:", "template-protected": "(sapujjausimajut)", "template-semiprotected": "(avvalluanga sapujjausimajuq)", + "hiddencategories": "taanna makpigaq ilagijaujuq {{PLURAL:$1|sapummijjuti qulaani|$1 sapummijjuti qulaani}}:", + "permissionserrors": "pijunnauti tammaqsimajuq", + "permissionserrorstext-withaction": "pijunnautiqanngilatit $2, ikunga {{PLURAL:$1|pijjuti|pijjutingit}}:", + "recreate-moveddeleted-warn": "<strong>ujjiqsurit: saqqittikkanniravit makpigarmik piiqtaulauqtumik.</strong>\n\nisumagijariaqaqtait naammakkaluarmangaat kajusititauluni aaqqigiariniq taassuminga makpigarmik.\npulaariaqsimajuq makpigaqtaarunnaqtuq niqinut imirnullu:", + "moveddeleted-notice": "taanna makpigaq pitaqanngilaq.\npiiqtauningit, sapummijauningit, ammalu nuutauningit titiraqsimajut makpigarmut tunijausimajut ataani tukisigiarutiksaullutik.", + "undo-failure": "aaqqigiaqtausimajuq utiqtitaujunnalaunngilaq pijjutigillugu ajjigiinnginningit aaqqigiaqtausimajut.", + "viewpagelogs": "takulugu titiraqsimajuq taassumunga makpigarmut", "currentrev": "maanna titiraqtaugiarngarut", "currentrev-asof": "tikitittijiup tigusijunnarninga uilianaimik $1", "revisionasof": "aaqqigiarutimi $1", + "revision-info": "aaqqigiarutimi $1 ikunga {{GENDER:$6|$2}}$7", "previousrevision": "←utuqaq titiraqtaugiarngarut", "nextrevision": "pilluarivaa pigivuk revision titiraqtaugiarngarut→", "currentrevisionlink": "maanna titiraqtaugiarngarut", "cur": "maannaujuq", "next": "tagga", "last": "qujannamiik", + "histlegend": "ajjigiinnginningit niruaqtauningit: nalunairlugit naalautikkut naqittagait aaqqigiaqtausimajut nalimugiiliqtittinirmut ammalu naqillugu Enter uvvaluunniit naqittagaq ataani.\n<br />\nunikkaaqtuaq: <strong>({{int:cur}})</strong> = ajjigiinnginningit kingulliqpaami aaqqigiaqtausimajut, <strong>({{int:last}})</strong> = ajjigiinnginningit kingulliqpaami aaqqigiarutaujut, <strong>{{int:minoreditletter}}</strong> = \nmikijumik aaqqigiariniq.", "history-feed-title": "titiraqtaugiarngarut mappitaq kingunittinni", "history-feed-description": "titiraqtaugiarngarut mappitaq kingunittinni ikiaq uiki", + "rev-delundel": "asijjirlugu takuksauninga", + "mergelog": "katitiriniq titiraqsimajunik", "history-title": "$1: aaqqigiaqtauqattaqsimajut", + "difference-title": "$1: uqaqatiqarniq pivalliajulirijinik", "lineno": "tukiqsiq $1:", + "compareselectedversions": "naliqqiutiniq niruaqtausimajunik aaqqigiaqtausimajunik", "editundo": "ipiutjaapaa", + "diff-empty": "(akaunngiliurutit)", "diff-multi-sameuser": "({{PLURAL:$1|pijariakittuq|$1 pijariaqaqtut}} qanuq akulaitigijuq {{GENDER:$3|atuqti}} piqujausimajut)", + "diff-multi-otherusers": "({{PLURAL:$1|pijariakittuq|$1 pijariaqaqtut}} uumunga {{PLURAL:$2|atausikkanniq atuqti|$2 atuqtiit}} piqujausimajut)", "searchresults": "qinirniujut saqqitaujut", "searchresults-title": "qiniqtaujuq ukununga \"$1\"", "prevn": "sivulliq {{PLURAL:$1|$1}}", "nextn": "tagga {{PLURAL:$1|$1}}", + "prevn-title": "sivulliq $1 {{PLURAL:$1|saumi|saumilik}}", "nextn-title": "nivingataaq $1 {{PLURAL:$1|saumi|saumilik}}", "shown-title": "takuksautittiniq $1 {{PLURAL:$1|saumi|anijuq}} atausiq makpigaq", "viewprevnext": "tautungniq ($1 {{int:pipe-separator}} $2) ($3)", @@ -179,6 +220,7 @@ "search-result-size": "$1 ({{PLURAL:$2|1 uqausiq|$2 uqausiksait}})", "search-redirect": "(turaaqtitaukkanniqtuq uvanngat $1)", "search-section": "(agguqsimaninga $1)", + "search-suggest": "tukiqaqpiit: $1", "searchall": "sunamittuq", "search-showingresults": "{{PLURAL:$4|1=qanuilingalirnirijangit <strong>$1</strong> taakkunangat <strong>$3</strong>|qanuilinganingit <strong>$1 – $2</strong> taakkunangat <strong>$3</strong>}}", "search-nonefound": "kiujjutitaqalaunngilaq ajjipalunginnik apiqqutiup.", @@ -186,8 +228,13 @@ "searchresultshead": "ivaaqpuq", "email": "kigutiup sitiniqpaanga", "editinguser": "suqusiqpaa qatannguti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])", + "group-bot": "qarasaujakkut", + "group-sysop": "allavviliriniq", + "grouppage-bot": "{{ns:project}}:qarasaujakkut", "grouppage-sysop": "{{ns:project}}:allavviliriniq", + "rightslog": "ilaliutilugu naqittagaq naalaktimut", "skin-action-addsection": "ilasilutit uqausiksamik", + "action-createaccount": "saqqittilutit taassuminga atuqtiup akiliksanganik", "action-protect": "sapummivaa", "enhancedrc-history": "kingunittinni", "recentchanges": "pigivuq asianngutuq", @@ -208,6 +255,7 @@ "rcshowhideanons": "$1 kinauningit nalunaiqtausimanngittut atuqtiit", "rcshowhideanons-show": "taimailauqpaa", "rcshowhideanons-hide": "amirainga", + "rcshowhidepatr": "$1 timmiaralaat tilijausimajunik", "rcshowhidemine": "$1 aaqqigiarisimajakka", "rcshowhidemine-show": "taimailauqpaa", "rcshowhidemine-hide": "amirainga", @@ -216,6 +264,7 @@ "hist": "piusirijauvalauqtut", "hide": "amirainga", "show": "taimailauqpaa", + "rc-old-title": "saqqitaugianngalauqtuq \"$1\"", "recentchangeslinked": "asiattauq miksaanut", "recentchangeslinked-feed": "asiaNngutuq mitsaasijuq", "recentchangeslinked-toolbox": "asiattauq miksaanut", @@ -227,21 +276,26 @@ "recentchanges-page-removed-from-category": "[[:$1]] asijjirniujut titiqqamut", "upload": "mappipaa nalinaijatit", "uploadbtn": "mappipaa nalunaijautit", - "filedesc": "piliriaksat pivigjuanguningit", + "filedesc": "nainaaqsimajuq", "fileuploadsummary": "suvit:", "watchthisupload": "uvva", "license-header": "laisansitaaqtittiniq", + "imgfile": "agiut", "file-anchor-link": "agiut", "filehist": "titiqqauvunga pigiarutiqaqtunga", "filehist-help": "katimaniq pijjutiqaqpuq kisutuinnarmik/ullurmik amma quvianaqtuq katimaniq pijjutiqaqpuq iglumik.", + "filehist-revert": "utiqtuq", "filehist-current": "maannaujuq", "filehist-datetime": "qanuq isumavit/ulluq", "filehist-thumb": "mikijukuluk ajjinnguaq", "filehist-thumbtext": "nainaaqsimajuq ajjinnguap aaqqiksimaningata uvunga $1", + "filehist-nothumb": "mikijuungittuq", "filehist-user": "atuqti", "filehist-dimensions": "angininga", + "filehist-comment": "uqausiksaq", "imagelinks": "titiqqait atuqtauningit", "sharedupload-desc-here": "taanna paippaaq $1-minngaaqtuq ammalu atuqtaujunnaqtuq asiginnut pilirianut.\nnalunaijaqsimaninga [$2 paippaaq nalunaijaqsimaninga makpigaq] takuksauvuq ataani.", + "filepage-nofile": "titiqqaqutitaqanngilaq taassuminga atilingmik.", "upload-disallowed-here": "takujunnaqtitaunngilat naqittagaksait titiqqaqutingit.", "listredirects": "nipi qaningani kamagijaq aasit nakit", "randompage": "nakituinnaq qaujisarniq mappitaq", @@ -252,18 +306,29 @@ "brokenredirects": "napivaa qaningani kamagijaq aasit nakit", "brokenredirects-edit": "suqusiqpaa", "brokenredirects-delete": "nipaqtipaa", + "nmembers": "$1 {{PLURAL:$1|maligaliuqti|maligaliuqtiit}}", + "prefixindex": "sivunilimaangit makpigait", "listusers": "qatannguti nipi", "newpages": "pigivuk mappitaq", "newpages-username": "uikipitia atiq:", "ancientpages": "utuqaq ittusaq mappitaq", "move": "uajuq", "booksources": "uqalimaagait nakinngaarningit", + "booksources-search-legend": "siakspia tukisigiarviksait uqalimaagait", "booksources-search": "ivaaqpuq", + "specialloguserlabel": "quviasuktittiji:", + "speciallogtitlelabel": "tikitaujumajuq (uqausiq uvvaluunniit {{ns:user}}:atuqti atuqtimut):", "log": "titiraqsimajut", + "alllogstext": "katinngajut takunnagangit atuinnaujulimaat titiraqsimajut {{SITENAME}}.\nnailligiarunnaqtait takuksauninga niruarlutit titiraqsimajuq qanuittuuninganik, atuqtiup atinganik (akitujunut), uvvaluunniit aktuqtaujuq makpigaq (angijuutitigut titiqqatigut).", + "logempty": "isumagijaujuq ujjiqsuttiariaqarnirmik titirakammaksimajunik.", "allpages": "sunamittuq mappitaq", "nextpage": "tagga mappitaq ($1)", + "allarticles": "sunamittuq mappitaq", "allpagessubmit": "aivuk", + "allpages-hide-redirects": "ijiqsimalugit turaaqtitaukkanniqtut", "categories": "nuapput", + "listgrouprights-members": "(aulattilutit tusagaksamik)", + "emailuser": "sannginiqpaaq kigutinga inungmut", "emailfrom": "nakit", "emailmessage": "kiggapaa", "emailsend": "qiutsavigivaa", @@ -272,10 +337,14 @@ "watch": "uvva", "watchthispage": "uvva", "unwatch": "iq uvva", + "wlheader-showupdated": "makpigait asijjiqsimajut taimanngat kingulliqpaami takulauravigit takuksauvut <strong>kappiattaittu</strong>.", + "wlnote": "ataani {{PLURAL:$1|kingulliqpaanguva asijjirniujuq|kingulliqpaanguvat <strong>$1</strong> asijjiqtaujut}} kingulliqpaami {{PLURAL:$2|ikarraq|<strong>$2</strong> ikarrait}}, pigiarutigilugu $3, $4.", + "enotif_reset": "nalunairlugit makpigalimaat pulaariaqtausimajut", "enotif_impersonal_salutation": "{{SITENAME}} qatannguti", "dellogpage": "nipaq nipi", "deletionlog": "nipaq nipi", "rollbacklink": "utiqtuq", + "rollbacklinkcount": "utiqtuq $1 {{PLURAL:$1|suqutaunngilaq|aaqqigiaqtauningit}}", "prot_1movedto2": "[[$1]] surramajuq [[$2]]", "protect-legend": "patimmivaa sapummivaa", "protect-level-sysop": "sirlak titiraqsimajunik tuqquqtiriji", @@ -287,6 +356,9 @@ "contributions": "atuqtiup tunirrutingit", "mycontris": "tunirrusiat", "anoncontribs": "tunirrusiat", + "nocontribs": "asijjiqtuqalaunngittuq maliktunik taakkununga maliktaujariaqaqtunut.", + "month": "taqqiq (ammalu sivuniani)", + "year": "arraagu (ammalu sivuniani):", "sp-contributions-blocklog": "angiqtaujuq tusaajauqullugu", "sp-contributions-talk": "uqallaktuq", "sp-contributions-username": "IP turaaruti uvvaluunniit atuqtiup atinga:", @@ -294,16 +366,22 @@ "whatlinkshere": "uqsiq maungu", "whatlinkshere-title": "makpigait aktuaniqaqtut uvunga \"$1\"", "whatlinkshere-page": "makpigaq:", + "linkshere": "iqqanaijaaqaqtuq surattirinirmik nunalilimaanik <strong>$2</strong>:", "isredirect": "tapitariik uqsaq mappitaq", "istemplate": "tukiliuriniq", + "isimage": "titiqqakkuvik aktuaninga", + "whatlinkshere-prev": "{{PLURAL:$1|sivulliq|kinguningaattinni $1}}", + "whatlinkshere-next": "{{PLURAL:$1|nivingataaq|nivingataaq $1}}", "whatlinkshere-links": "← atajuq", "whatlinkshere-hideredirs": "ijiqsimalugit turaaqtitaukkanniqtut", "whatlinkshere-hidetrans": "ijiqsimalugit ilaliutisimajut", "whatlinkshere-hidelinks": "ijiqsimalugit qaritaujakkut turaarutingit", + "whatlinkshere-hideimages": "takulugit naalunulimaat", "blockip": "iq aaqqiksuiji", "badipaddress": "illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq", "blockipsuccesssub": "uminngasisijuq naajuq", "ipblocklist-submit": "ivaaqpuq", + "infiniteblock": "isuqanngittuq", "anononlyblock": "sirlak ilisarnanngitittuq", "blocklink": "iq", "contribslink": "qatannguti suqusiqpaa", @@ -326,10 +404,12 @@ "tooltip-compareselectedversions": "uvva asiaNngutuq mappitaq akunninganni marruuk titiraqtaugiarngarut", "anonymous": "ilisarnanngitittuq qatannguti nakit {{SITENAME}}", "pageinfo-toolboxlink": "asijjiqtarunnaqtuq turaaruti", + "patrol-log-page": "paliisikkut titiraqsimajangit", "deletedrevision": "nipaq utuqaq titiraqtaugiarngarut $1", "previousdiff": "← pituqauniqsaq aaqqiksimaninga", "nextdiff": "nutaanguniqsamik aaqqigiarutimik →", "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|makpigaq|makpigait}}", + "file-nohires": "quttingniqsamik takuksauniqaqtumik atuinnaqtaqanngilaq.", "show-big-image": "titiqqaqutillattaanga", "show-big-image-preview": "angininga taatsuma sivurngagut takunnagaup imannauvuq: $1.", "show-big-image-other": "asingit {{PLURAL:$2|pigiaqtittijuq|piqujivungaarutiit}}: $1.", @@ -345,13 +425,20 @@ "imgmultipageprev": "← tunullipaaq mappitaq", "imgmultipagenext": "tagga mappitaq →", "imgmultigo": "aivuq!", + "imgmultigoto": "makpigarmuurlutit $1", "table_pager_limit_submit": "aivuk", "autoredircomment": "qaningani kamagijaq aasit nakit [[$1]]", "autosumm-new": "pigivuq mappitaq: $1", + "watchlisttools-view": "takunnarniq asijjirniq", + "watchlisttools-raw": "ullukutaamik tuksirautiliuqtuq", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uqaluk]])", "specialpages": "piji mappitaq", + "tags-active-yes": "ii", + "tags-active-no": "aakka", "tags-edit": "suqusiqpaa", + "tags-hitcount": "$1 {{PLURAL:$1|asijjirniq|asijjirniujut}}", "htmlform-submit": "tunisiniq", + "revdelete-content-hid": "tusaumaqattautiniq", "searchsuggest-search": "ivaaqpuq {{SITENAME}}", "searchsuggest-containing": "qinirlugit makpigait iluliqaqtut", "nstab-mainpage": "amiq", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index c546d3ad2d5b..91ca4051eeca 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -722,7 +722,7 @@ "userpage-userdoesnotexist": "L'utenza \"$1\" non è registrata su questo wiki.\nVerificare se vuoi davvero creare o modificare questa pagina.", "userpage-userdoesnotexist-view": "L'utenza \"$1\" non è registrata su questo wiki.", "blocked-notice-logextract": "Questo {{GENDER:$1|utente}} è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", - "blocked-notice-logextract-multi": "Questo {{GENDER:$1|utente}} è attualmente bloccato $2 {{PLURAL:$2|volta|volte}}.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", + "blocked-notice-logextract-multi": "Questo {{GENDER:$1|utente}} è stato bloccato $2 {{PLURAL:$2|volta|volte}}.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", "clearyourcache": "<strong>Nota:</strong> dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*<strong>Firefox / Safari:</strong> tieni premuto il tasto delle maiuscole <em>Shift</em> e fai clic su <em>Ricarica</em>, oppure premi <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> su Mac)\n*<strong>Google Chrome:</strong> premi <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> su un Mac)\n*<strong>Edge:</strong> tieni premuto il tasto <em>Ctrl</em> e fai clic su <em>Aggiorna</em>, oppure premi <em>Ctrl-F5</em>.", "usercssyoucanpreview": "<strong>Suggerimento:<strong> usa il pulsante \"{{int:showpreview}}\" per provare il tuo nuovo CSS prima di pubblicarlo.", "userjsonyoucanpreview": "<strong>Suggerimento:<strong> usa il pulsante \"{{int:showpreview}}\" per provare il tuo nuovo JSON prima di pubblicarlo.", @@ -2494,8 +2494,8 @@ "sp-contributions-blocked-notice-partial": "{{GENDER:$1|Questo|Questa}} utente è attualmente {{GENDER:$1|bloccato|bloccata}} parzialmente.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", "sp-contributions-blocked-notice-anon": "Questo indirizzo IP è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", "sp-contributions-blocked-notice-anon-partial": "Questo indirizzo IP è attualmente bloccato parzialmente.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", - "sp-contributions-blocked-notice-multi": "Questo {{GENDER:$1|utente}} è attualmente bloccato $2 {{PLURAL:$2|volta|volte}}.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", - "sp-contributions-blocked-notice-anon-multi": "Questo indirizzo IP è attualmente bloccato $2 {{PLURAL:$2|volta|volte}}.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", + "sp-contributions-blocked-notice-multi": "Questo {{GENDER:$1|utente}} è stato bloccato $2 {{PLURAL:$2|volta|volte}}.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", + "sp-contributions-blocked-notice-anon-multi": "Questo indirizzo IP è stato bloccato $2 {{PLURAL:$2|volta|volte}}.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:", "sp-contributions-search": "Ricerca contributi", "sp-contributions-username": "Indirizzo IP o nome utente:", "sp-contributions-toponly": "Mostra solo i contributi che sono le ultime versioni per la pagina", @@ -2598,7 +2598,7 @@ "block-confirm-yes": "Sì", "block-confirm-no": "No", "block-submit": "Invia", - "block-success": "[[Special:Contributions/$1|$1]] è {{GENDER:$1|stato bloccato|stata bloccata}}. Consulta la [[Special:BlockList|lista dei blocchi]] per rivedere i blocchi.", + "block-success": "[[Special:Contributions/$1|$1]] ([[{{ns:user_talk}}:$1|disc]]) è {{GENDER:$1|stato bloccato|stata bloccata}}. Consulta la [[Special:BlockList|lista dei blocchi]] per rivedere i blocchi.", "block-user-active-blocks": "Blocchi attivi", "block-user-no-active-blocks": "Nessun blocco attivo trovato", "block-user-previous-blocks": "Registro dei blocchi", diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json index 9ece1f472465..b54368bb377c 100644 --- a/languages/i18n/ja.json +++ b/languages/i18n/ja.json @@ -2541,8 +2541,8 @@ "sp-contributions-blocked-notice-partial": "この{{GENDER:$1|利用者}}は現在部分ブロックされています。\n参考のために最新のブロック記録項目を以下に表示します:", "sp-contributions-blocked-notice-anon": "このIPアドレスは現在ブロックされています。\n参考のために最近のブロック記録項目を以下に表示します:", "sp-contributions-blocked-notice-anon-partial": "このIPアドレスは現在部分ブロックされています。\n参考のために最近のブロック記録項目を以下に表示します:", - "sp-contributions-blocked-notice-multi": "この{{GENDER:$1|利用者}}は現在 $2 回ブロックされています。\n参考のために最新のブロック記録項目を以下に示します:", - "sp-contributions-blocked-notice-anon-multi": "このIPアドレスは現在 $2 回ブロックされています。\n参考のために最新のブロック記録項目を以下に示します:", + "sp-contributions-blocked-notice-multi": "この{{GENDER:$1|利用者}}は現在 $2 {{PLURAL:$2|回}}ブロックされています。\n参考のために最新のブロック記録項目を以下に示します:", + "sp-contributions-blocked-notice-anon-multi": "このIPアドレスは現在 $2 {{PLURAL:$2|回}}ブロックされています。\n参考のために最新のブロック記録項目を以下に示します:", "sp-contributions-search": "投稿の検索", "sp-contributions-username": "IPアドレスまたは利用者名:", "sp-contributions-toponly": "最新版の編集のみを表示", @@ -2648,6 +2648,7 @@ "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]]をブロックしました。ブロックを確認するには、[[Special:BlockList|ブロックの一覧]]を参照してください。", "block-user-active-blocks": "有効なブロック", "block-user-no-active-blocks": "有効なブロックは見つかりませんでした", + "block-user-no-active-range-blocks": "有効な範囲ブロックは見つかりませんでした", "block-user-previous-blocks": "ブロック記録", "block-user-no-previous-blocks": "過去にブロックされた記録は見つかりませんでした", "block-user-suppressed-blocks": "秘匿されたブロック記録", @@ -2668,6 +2669,7 @@ "block-javascript-required": "特別:投稿ブロック インターフェースを使用するには JavaScript が必要です。", "block-removed": "ブロックを除去しました。", "block-reblock-multi-legacy": "この利用者はすでに複数回ブロックされており、このフォームから再度ブロックすることはできません。", + "block-view-target": "表示", "unblockip": "ブロックを解除", "unblockiptext": "以下のフォームで利用者またはIPアドレスのブロックを解除できます。", "unblock-target": "ブロック解除", @@ -3402,6 +3404,7 @@ "version-hooks": "フック", "version-parser-extensiontags": "構文解析拡張機能タグ", "version-parser-function-hooks": "パーサー関数フック", + "version-parsoid-modules": "Parsoid拡張機能モジュール", "version-hook-name": "フック名", "version-hook-subscribedby": "使用個所", "version-no-ext-name": "[名前なし]", @@ -4183,6 +4186,7 @@ "skin-action-move": "移動", "skin-json-warning": "@警告", "skin-json-warning-message": "これはAPIではなく、デバッグ目的で存在します!ガジェットや本番環境のコードでは使用しないでください。", + "parsoid-async-not-ready-fallback": "コンテンツの準備ができていません", "parsoid-stash-rate-limit-error": "レート制限を超えたため、ストッシングに失敗しました。後で再試行してください。", "parsoid-resource-limit-exceeded": "パースイドリソースの上限を超えた:$1", "parsoid-revision-access": "Parsoid がその版にアクセスできません: $1", @@ -4192,7 +4196,7 @@ "newpages-showhide-redirect": "リダイレクトを$1", "newpages-showhide-registered": "登録利用者を$1", "restsandbox": "REST サンドボックス", - "restsandbox-text": "このページでは、REST API のクエリ ビルダーを提供します。API 呼び出しはライブ ウィキ コンテンツとやり取りすることに注意してください。", + "restsandbox-text": "このページを MediaWiki REST API の実験に使ってください。サンドボックスインターフェース経由での API 呼び出しは実際のウィキ コンテンツとやり取りしウィキを変更する可能性があることに注意してください。APIの使用法に関するさらなる詳細は[https://www.mediawiki.org/wiki/API:REST_API API 文書]を参照してください。", "restsandbox-disclaimer": "このサンドボックスに関するフィードバックはありますか?[https://www.mediawiki.org/wiki/MediaWiki_Interfaces_Team/Feature_Feedback/REST_Sandbox こちら]からフィードバックを送ってください。<br />注意: サンドボックスUIとナビゲーション項目はまだ翻訳をサポートしていません。<br />", "restsandbox-select-api": "探索する API を選択します。", "restsandbox-no-specs-configured": "探索用に REST API が構成されていません。RestSandboxSpecs 設定を使用してください。", @@ -4227,6 +4231,7 @@ "renameuser-error-same-user": "現在と同じ利用者名には変更できません。", "renameuser-error-temp-user": "臨時アカウント「$1」の名前は変更できません。", "renameuser-error-temp-user-reserved": "「$1」は使用できません。臨時アカウントのために予約されています。", + "renameuser-error-unexpected-name": "対象の利用者の名前は予期されたものではありません。", "renameuser-error-global-detaching": "この利用者はグローバルに接続されています。このアカウントの名前を変更するには、CentralAuth を使用してください。", "renameuser-error-global-rights": "グローバル利用者名を変更する権限がありません。", "renameusersuccess": "{{GENDER:$2|利用者}}名を「<nowiki>$1</nowiki>」から「<nowiki>$2</nowiki>」に変更しました。", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index 163fc7652308..6910b1a37c87 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -2241,6 +2241,7 @@ "block-reason": "Grond", "block-confirm-yes": "Jo", "block-confirm-no": "Neen", + "block-success": "{{GENDER:$1|De(n) [[Special:Contributions/$1|$1]]|D'[[Special:Contributions/$1|$1]]}} ([[{{ns:user_talk}}:$1|Diskussioun]]) gouf gespaart. Kuckt d'[[Special:BlockList|Lëscht vun de Späre]] fir Spären nozekucken.", "block-user-active-blocks": "Aktiv Spären", "block-user-no-active-blocks": "Keng aktiv Späre fonnt", "block-user-previous-blocks": "Spärlëscht", @@ -2255,6 +2256,7 @@ "block-removal-reason-placeholder": "Tippt ee Grond an", "block-removal-confirm-yes": "Spär ophiewen", "block-removal-confirm-no": "Ofbriechen", + "block-view-target": "Weisen", "unblockip": "Spär vum Benotzer ophiewen", "unblockiptext": "Benotzt dëse Formulaire fir enger IP-Adress oder engem Benotzer seng Spär opzehiewen.", "unblock-target": "Zil entspären", @@ -2300,7 +2302,7 @@ "blocklist-editing-page": "Säiten", "blocklist-editing-ns": "Nummraim", "blocklist-editing-action": "Aktiounen", - "ipblocklist-empty": "D'Spärlëscht ass eidel.", + "ipblocklist-empty": "D'Lëscht vun de Spären ass eidel.", "ipblocklist-no-results": "Keng Spär fonnt fir déi ugefroten IP-Adress oder Benotzer.", "blocklink": "spären", "unblocklink": "Spär ophiewen", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index 187b1a7725b4..69edd292118f 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -2505,9 +2505,11 @@ "block-confirm-yes": "Scì", "block-confirm-no": "No", "block-submit": "Mànda", - "block-success": "[[Special:Contributions/$1|$1]] {{GENDER:$1|o l'é stæto blocòu|a l'é stæta blocâ}}. Védde a [[Special:BlockList|lìsta di blòcchi]] pe amiâli tórna.", + "block-success": "[[Special:Contributions/$1|$1]] ([[{{ns:user_talk}}:$1|disc]]) {{GENDER:$1|o l'é stæto blocòu|a l'é stæta blocâ}}. Védde a [[Special:BlockList|lìsta di blòcchi]] pe amiâli tórna.", "block-user-active-blocks": "Blòcchi atîvi", "block-user-no-active-blocks": "No l'é stæto atrovòu di blòcchi atîvi", + "block-user-active-range-blocks": "Blòcchi de range atîvi", + "block-user-no-active-range-blocks": "Nisciùn blòcco de range atîvo trovòu", "block-user-previous-blocks": "Regìstro di blòcchi", "block-user-no-previous-blocks": "Nisciùn blòcco de prìmma trovòu", "block-user-suppressed-blocks": "Regìstro di blòcchi soprèsci", @@ -2528,6 +2530,7 @@ "block-javascript-required": "L'é necesâio JavaScript pe dêuviâ l'interfàccia Special:Block.", "block-removed": "O blòcco o l'é stæto levòu.", "block-reblock-multi-legacy": "St'uténte chi o l'é za stæto blocòu ciù vòtte e o no peu êse tórna blocòu con sto mòdolo chi.", + "block-view-target": "Véddi", "unblockip": "Sblòcca uténte", "unblockiptext": "Dêuvia o mòdolo chi de sótta pe restitoî l'intrâ in scritûa a 'n uténte ò indirìsso IP blocòu.", "unblock-target": "Sblòcca l'òbietîvo", @@ -3187,6 +3190,7 @@ "version-hooks": "Hook", "version-parser-extensiontags": "Tag riconosciûi da-o parser introdûti da di estenscioìn", "version-parser-function-hooks": "Hook pe de fonçioìn do parser", + "version-parsoid-modules": "Mòdoli d'estensción parsoid", "version-hook-name": "Nómme de l'hook", "version-hook-subscribedby": "Sotoscriçioìn", "version-no-ext-name": "[sénsa nómme]", @@ -3958,6 +3962,7 @@ "skin-action-move": "Méscia", "skin-json-warning": "@ATENÇIÓN", "skin-json-warning-message": "Sta chi a no l'é 'n'API, ma a fonçiónn-a sôlo pò-u debugging! No dêuviâ di acesòri ò di còdichi prodûto.", + "parsoid-async-not-ready-fallback": "Contegnûo no prónto", "parsoid-stash-rate-limit-error": "O stashing o no l'é ariêscîo perché l'é stæto superòu o lìmite de velocitæ. Prêuva tórna ciù tàrdi.", "parsoid-resource-limit-exceeded": "Lìmite de vivàgne Parsoid sconpasòu: $1", "parsoid-revision-access": "Parsoid o no peu acêde a-a versción: $1", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index fe7d2dbd9f5f..755a8a4767c6 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -2413,8 +2413,8 @@ "sp-contributions-blocked-notice-partial": "Овој {{GENDER:$1|корисник}} е делумно блокиран.\nПоследната ставка во дневникот е прикажана подолу за ваша информација:", "sp-contributions-blocked-notice-anon": "Оваа IP-адреса е моментално блокирана.\nПодолу е наведен најновиот дневнички запис на блокирање:", "sp-contributions-blocked-notice-anon-partial": "Оваа IP-адреса е моментално делумно блокирана.\nПодолу е наведен најновиот дневнички запис на блокирање:", - "sp-contributions-blocked-notice-multi": "Овој {{GENDER:$1|корисник}} тековно е блокиран $2 пати.\nЗа ваша информација подолу е прикажана најновата дневничка ставка на блокот:", - "sp-contributions-blocked-notice-anon-multi": "Оваа IP-адреса тековно е блокирана $2 пати.\nЗа ваша информација подолу е прикажана најновата дневничка ставка на блокот:", + "sp-contributions-blocked-notice-multi": "Овој {{GENDER:$1|корисник}} моментално е блокиран {{PLURAL:$2|еднаш|$2 пати}}.\nЗа ваша информација подолу е прикажана најновата дневничка ставка на блокот:", + "sp-contributions-blocked-notice-anon-multi": "Оваа IP-адреса моментално е блокирана {{PLURAL:$2|еднаш|$2 пати}}.\nЗа ваша информација подолу е прикажана најновата дневничка ставка на блокот:", "sp-contributions-search": "Пребарување на придонеси", "sp-contributions-username": "IP-адреса или корисничко име:", "sp-contributions-toponly": "Само последни преработки", @@ -2517,9 +2517,11 @@ "block-confirm-yes": "Да", "block-confirm-no": "Не", "block-submit": "Поднеси", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] е блокиран. Погледајте го [[Special:BlockList|списокот на блокови]] за да ги прегледате.", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|разговор]]) е блокиран. Погледајте го [[Special:BlockList|списокот на блокови]] за да ги прегледате.", "block-user-active-blocks": "Активни блокови", "block-user-no-active-blocks": "Не најдов активни блокови", + "block-user-active-range-blocks": "Активни опсежни блокови", + "block-user-no-active-range-blocks": "Не најдов активни опсежни блокови", "block-user-previous-blocks": "Дневник на блокови", "block-user-no-previous-blocks": "Не пронајдов претходни блокови", "block-user-suppressed-blocks": "Дневник на потиснати блокови", @@ -2540,6 +2542,7 @@ "block-javascript-required": "Ви треба JavaScript за да го користите Специјална:Блокирање.", "block-removed": "Блокот е отстранет.", "block-reblock-multi-legacy": "Овој корисник е веќе блокиран на повеќе наврати и не може да се преблокира со овој образец.", + "block-view-target": "Преглед", "unblockip": "Одблокирај корисник", "unblockiptext": "Користете го долниот образец да го вратите правото на пишување на претходно блокирана IP-адреса или корисничко име.", "unblock-target": "Одблокирај цел", @@ -3235,6 +3238,7 @@ "version-hooks": "Пресретник", "version-parser-extensiontags": "Ознаки за расчленувачки додатоци", "version-parser-function-hooks": "Пресретници на расчленувачки функции", + "version-parsoid-modules": "Модули на додатокот Parsoid", "version-hook-name": "Назив на пресретникот", "version-hook-subscribedby": "Претплатено од", "version-no-ext-name": "[нема име]", @@ -4011,6 +4015,7 @@ "skin-action-move": "Премести", "skin-json-warning": "@ПРЕДУПРЕДУВАЊЕ", "skin-json-warning-message": "Ова не е приложник, туку само за отстранување грешки. Не го користете во алатки или производен код.", + "parsoid-async-not-ready-fallback": "Содржината не е подготвена", "parsoid-stash-rate-limit-error": "Складирањето не успеа бидејќи е надмината временската граница. Обидете се повторно подоцна.", "parsoid-resource-limit-exceeded": "Надминато е ограничувањето на ресурсите на Parsoid: $1", "parsoid-revision-access": "Parsoid не може да ѝ пристапи на преработката: $1", diff --git a/languages/i18n/na.json b/languages/i18n/na.json deleted file mode 100644 index 1ad0ecd05e2a..000000000000 --- a/languages/i18n/na.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "@metadata": { - "authors": [ - "Belgian man", - "CdaMVvWgS", - "MinecraftAustralia", - "Node ue", - "Tok Pisin" - ] - }, - "moredotdotdot": "Iyuw...", - "and": " me", - "errorpagetitle": "Dairinaiya", - "help": "Ipuok", - "search": "Kanani", - "go": "Nuwa ko!", - "history_short": "Ekadaedaenigawae", - "edit": "Kiwiwid", - "delete": "Iyababa", - "unprotect": "Eab oberei", - "toolbox": "Tools", - "currentevents": "Imwin", - "currentevents-url": "Project:Imwin", - "edithelp": "Oomo/edar Ipuok", - "mainpage": "Bwiema peij", - "mainpage-description": "Bwiema peij", - "editsection": "Kiwiwid", - "showtoc": "oduwen", - "hidetoc": "ewewin", - "nstab-main": "Peij", - "nstab-help": "Ipuok", - "mainpage-nstab": "Bwiema peij", - "error": "Dairinaiya", - "userlogin-remembermypassword": "Keep me Metu", - "login": "Metu", - "logout": "Meta", - "userlogout": "Meta", - "pt-login-button": "Metu", - "savearticle": "Otsimor", - "newarticle": "(Etsimeduw)", - "editing": "Oomo/edar $1", - "editingsection": "Oomo/edar $1 (itubwang)", - "searchresultshead": "Anani ko", - "group-sysop": "Administrators", - "grouppage-sysop": "{{ns:project}}:Administrators", - "recentchanges": "Iwiwidit tsimeduw", - "hist": "eka", - "hide": "witsit imin gogoro", - "show": "oduwen", - "randompage": "Tamo peij", - "move": "Memori", - "allpagessubmit": "nuwa ko", - "emailuser": "Emaileiy amune", - "emailfrom": "Atsiu", - "emailto": "Animwen", - "emailsend": "Oiyon", - "watch": "Aea", - "unwatch": "Eab krak", - "confirm": "Oebwigaga", - "blanknamespace": "(Bwiema)", - "tool-link-contributions": "{{GENDER:$1|User}} contributions", - "whatlinkshere-page": "Peij:", - "tooltip-pt-logout": "Meta", - "pageinfo-article-id": "Peij ID", - "ilsubmit": "Anani ko", - "redirect-page": "Peij ID" -} diff --git a/languages/i18n/nan-latn-pehoeji.json b/languages/i18n/nan-latn-pehoeji.json index fbff24c2cfca..d165bb81292f 100644 --- a/languages/i18n/nan-latn-pehoeji.json +++ b/languages/i18n/nan-latn-pehoeji.json @@ -211,7 +211,7 @@ "cannotdelete": "Bô-hoat-tō· kā hit ê ia̍h a̍h-sī iáⁿ-siōng 「$1」 thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)", "cannotdelete-title": "Bô-hoat-tō͘ kā \"$1\" chit ia̍h thâi-tiāu.", "badtitle": "M̄-chiâⁿ piau-tê", - "badtitletext": "Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.", + "badtitletext": "Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê interlanguage/interwiki piau-tê.", "title-invalid": "Chhéng-kiû ê ia̍h ê piau-tê bô-hāu", "title-invalid-empty": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k sī khang--ê he̍k-chiá kaⁿ-taⁿ hâm liáu miâ-khong-kan.", "title-invalid-utf8": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k hâm liáu bô chiàⁿ-khak ê 1 lia̍t UTF-8 ê jī.", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index 7bbada14920a..a62a906cba86 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -2548,7 +2548,7 @@ "block-confirm-yes": "Ja", "block-confirm-no": "Nei", "block-submit": "Send", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] har blitt blokkert. Se [[Special:BlockList|blokkeringslista]] for å gå gjennom blokkeringer.", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|diskusjon]]) har blitt blokkert. Se [[Special:BlockList|blokkeringslista]] for å gå gjennom blokkeringer.", "block-user-active-blocks": "Aktive blokkeringer", "block-user-no-active-blocks": "Ingen aktive blokkeringer funnet", "block-user-previous-blocks": "Blokkeringslogg", diff --git a/languages/i18n/nia.json b/languages/i18n/nia.json index 99f37c2e6441..ea50e3242dd8 100644 --- a/languages/i18n/nia.json +++ b/languages/i18n/nia.json @@ -113,7 +113,7 @@ "poolcounter-usage-error": "Sifasala: $1", "aboutsite": "Sanandrösa {{SITENAME}}", "aboutpage": "Project:Sanandrösa", - "copyright-footer": "Te'asogö nösi barö $1, hatö na fabö'ö nifatunö", + "copyright-footer": "Te'asogö nösi barö $1, baero na so wamotokhi bö'ö.", "copyrightpage": "{{ns:project}}:Hak cipta", "currentevents": "Salua barö da'a", "currentevents-url": "Project:Salua barö da'a", @@ -136,7 +136,7 @@ "ok": "Lau", "retrievedfrom": "Tehalö moroi ba \"$1\"", "new-messages": "{{PLURAL:$3|So khöu}} $1 ($2).", - "new-messages-from-users": "{{PLURAL:$4|So khöu}} $1 moroi {{PLURAL:$3|zangoguna tanö bö'ö|$3 zangoguna tanö bö'ö}} ($2).", + "new-messages-from-users": "{{PLURAL:$4|So khöu}} $1 moroi {{PLURAL:$3|zangoguna bö'ö|$3 zangoguna bö'ö}} ($2).", "new-messages-from-many-users": "So $1 duria moroi khö ndra sangoguna ($2).", "new-messages-link-plural": "{{PLURAL:$1|sambua duria si bohou|999=duria}}", "new-messages-diff-link-plural": "{{PLURAL:$1|zifabö'ö|999=zifabö'ö}} safuria", @@ -554,11 +554,11 @@ "summary-preview": "Khala-khala garutua wamulö'ö:", "previewerrortext": "So zi fasala me edöna te'oroma'ö hadia nibulö'ö.", "blockedtitle": "No teba'agö zangoguna andre", - "blockedtext": "<strong>Töi zangoguna ma alamat IP-mö no toba'agö.</strong>\n\n{{int:blockedtext-made-by|$1}}\n{{int:blockedtext-reason-comment|$2}}\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-contact-blocker-admin|$1}}\n\nTola ö'oguna'ö \"{{int:emailuser}}\" na no öbe'e email bakha ba [[Special:Preferences|preferensi]] ba lö göi teba'agö ndra'ugö ba wangoguna'ö ya'ia.\n{{int:blockedtext-block-ip|$3}} {{int:blockedtext-block-id|$5}}\n{{int:blockedtext-include-details-queries}}", - "blockedtext-partial": "<strong>No teba'agö döi zangogunamö ma zui nomoro IP-mö ba wamalua da'a. Te tola sa öfalua hadia ia bö'ö, simane famulö'ö fasambua nga'örö.</strong>\n\nTola öfaigi detail womba'agö ba [[Special:MyContributions|kontribusi akun]].\n\n{{int:blockedtext-made-by|$1}}\n\n{{int:blockedtext-reason-comment|$2}}\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n*{{int:blockedtext-block-id|$5}}", + "blockedtext": "<strong>No toba'agö döi zangoguna khöu ma zui alamat IP khöu.</strong>\n\n{{int:blockedtext-made-by|$1}}\n{{int:blockedtext-reason-comment|$2}}\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-contact-blocker-admin|$1}}\n\nTola ö'oguna'ö \"{{int:emailuser}}\" na no ösura emailmö bakha ba [[Special:Preferences|preferensi]] ba na lö göi niba'agö ndra'ugö ba wangoguna'ö ya'ia.\n{{int:blockedtext-block-ip|$3}} {{int:blockedtext-block-id|$5}}\n{{int:blockedtext-include-details-queries}}", + "blockedtext-partial": "<strong>No teba'agö döi zangoguna khöu ma zui nomoro IP-mö ba wamalua da'a. Te tola sa öfalua hadia ia bö'ö, simane famulö'ö fasambua nga'örö.</strong>\n\nTola öfaigi wamotokhi womba'agö ba [[Special:MyContributions|kontribusi akun]].\n\n{{int:blockedtext-made-by|$1}}\n\n{{int:blockedtext-reason-comment|$2}}\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n*{{int:blockedtext-block-id|$5}}", "autoblockedtext": "No otomatis teba'agö nomoro IP-mö, börö no i'oguna'ö ia sangoguna bö'ö si no teba'agö $1.\nBörö nibe'e:\n\n:<em>$2</em>.\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-contact-blocker-admin|$1}} \n\nTola öfa'ohe'ö fitur \"{{int:emailuser}}\" na no öbe'e alamat emailmö ba [[Special:Preferences|preferences]] ba lö niba'agö ndra'ugö ba wangoguna'ö ya'ia.\n\n{{int:blockedtext-block-ip|$3}} {{int:blockedtext-block-id|$5}}\n{{int:blockedtext-include-details-queries}}", "systemblockedtext": "No otomatis iba'agö nomoro IP-mö MediaWiki.\nBörö nibe'e:\n\n:<em>$2</em>.\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-block-ip|$3}}\n{{int:blockedtext-include-details-queries}}", - "blockedtext-tempuser": "<strong>No teba'agö döi zangoguna andrö ma zui nomoro IP-mö.</strong>\n\n{{int:blockedtext-made-by|$1}}\n{{int:blockedtext-reason-comment|$2}}\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-contact-blocker-admin|$1}}\n\n{{int:blockedtext-block-ip|$3}} {{int:blockedtext-block-id|$5}}\n{{int:blockedtext-include-details-queries}}", + "blockedtext-tempuser": "<strong>No teba'agö döi zangoguna khöu ma zui nomoro IP-mö.</strong>\n\n{{int:blockedtext-made-by|$1}}\n{{int:blockedtext-reason-comment|$2}}\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-contact-blocker-admin|$1}}\n\n{{int:blockedtext-block-ip|$3}} {{int:blockedtext-block-id|$5}}\n{{int:blockedtext-include-details-queries}}", "autoblockedtext-tempuser": "No otomatis teba'agö nomoro IP-mö, börö no i'oguna'ö ia sangoguna bö'ö si no iba'agö $1.\nBörö nibe'e:\n\n:<em>$2</em>.\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-time|$6}}\n*{{int:blockedtext-intended-blockee|$7}}\n\n{{int:blockedtext-contact-blocker-admin|$1}}\n\n{{int:blockedtext-block-ip|$3}} {{int:blockedtext-block-id|$5}}\n{{int:blockedtext-include-details-queries}}", "blockednoreason": "lö nibe'e mbörö", "blockedtext-composite": "<strong>No teba'agö döi zangoguna ma zui nomoro IP-mö.</strong>\n\nBörö nibe'e:\n\n:<em>$2</em>.\n\n*{{int:blockedtext-start-time|$8}}\n*{{int:blockedtext-expiration-longest-block|$6}}\n\n* $5\n\n{{int:blockedtext-block-ip|$3}}\n{{int:blockedtext-include-details-queries}}", @@ -703,7 +703,7 @@ "searchresults-title": "Nisöndra ba wangalui \"$1\"", "prevn": "si oföna {{PLURAL:$1|$1}}", "nextn": "safuria {{PLURAL:$1|$1}}", - "prevn-title": "$1 {{PLURAL:$1|nisöndra}} si oföna", + "prevn-title": "$1 {{PLURAL:$1|Nisöndra}} si oföna", "nextn-title": "$1 {{PLURAL:$1|nisöndra}} tanö bö'ö", "shown-title": "Oroma'ö $1 {{PLURAL:$1|nisöndra}} ero nga'örö", "viewprevnext": "Faigi ($1 {{int:pipe-separator}} $2) ($3)", @@ -737,7 +737,7 @@ "action-edit": "bulö'ö nga'örö andre", "action-createaccount": "fazökhi akun andre", "action-move": "Fawu'a nga'örö andre", - "action-delete": "Tibo'ö", + "action-delete": "Tibo'ö nga'örö andre", "action-undelete": "Fangawuli furi zi no tetibo'ö", "action-protect": "Bulö'ö setelan wokusi nga'örö andre", "enhancedrc-history": "waö-waö", @@ -786,6 +786,8 @@ "recentchangeslinked-summary": "Raka döi zura ba wamaigi zifabö'ö ba nga'örö si fakhai ba nga'örö andre. (Sura {{ns:category}}:Töi kategori ba wamaigi zifao ba sambua kategori). Sifabö'ö ba nga'örö [[Special:Watchlist|nga'örö nihörögö]] no tesura <strong>esolo</strong>.", "recentchangeslinked-page": "Töi nga'örö:", "recentchangeslinked-to": "Oroma'ö zifabö'ö si fakhai ba nga'örö da'ö no mege", + "recentchanges-page-added-to-category": "[[:$1]] tenönö ba kategori", + "recentchanges-page-removed-from-category": "[[:$1]] teheta moroi kategori", "upload": "Fairö berkas", "uploadlogpage": "Lahe wairö", "filedesc": "Furugönia", @@ -866,8 +868,8 @@ "tooltip-namespace_association": "Tandrai kota andre ena'ö fao wahuhuosa ma zui duho namespace si fakhai ba namespace nifili", "blanknamespace": "(Tuho)", "contributions": "Kontribusi zangoguna", - "tool-link-contributions": "Nilau {{GENDER:$1|zangoguna}}", - "contributions-title": "Kontribusi $1 zangoguna", + "tool-link-contributions": "Kontribusi {{GENDER:$1|zangoguna}}", + "contributions-title": "Kontribusi $1 {{GENDER:$2|zangoguna}}", "mycontris": "Kontribusi", "anoncontribs": "Kontribusi", "nocontribs": "Lö zifabö'ö sifaudu ba kriteria andre", @@ -891,7 +893,7 @@ "isredirect": "aekhugö nga'örö ba nahia bö'ö", "istemplate": "transklusi", "isimage": "khai-khai berkas", - "whatlinkshere-prev": "{{PLURAL:$1|si oföna|oföna $1}}", + "whatlinkshere-prev": "{{PLURAL:$1|si oföna|si oföna $1}}", "whatlinkshere-next": "{{PLURAL:$1|tohu-tohu|tohu-tohu $1}}", "whatlinkshere-links": "← khai-khai", "whatlinkshere-hideredirs": "Bini'ö wangaekhugö ba nahia bö'ö", @@ -936,7 +938,7 @@ "tooltip-n-mainpage": "Ae ba golayama", "tooltip-n-mainpage-description": "Ae faigi golayama", "tooltip-n-portal": "Sanandrösa ba proyek, hadia zi tola ölau, heza musöndra oi hadia ia", - "tooltip-n-currentevents": "Alui turia sanandrösa ba zalua ba ginötö andre", + "tooltip-n-currentevents": "Alui duria sanandrösa ba zalua ba ginötö andre", "tooltip-n-recentchanges": "Fefu zi tebulö si bohou ba wiki", "tooltip-n-randompage": "Oroma'ö gofu nga'örö", "tooltip-n-help": "Nahia wanöndra fanolo", @@ -1046,8 +1048,8 @@ "logentry-delete-revision": "$1 {{GENDER:$2|mamulö'ö}} wa'oroma {{PLURAL:$5|revisi|$5 revisi}} ba nga'örö $3: $4", "revdelete-content-hid": "ösi no tobini", "logentry-move-move": "No {{GENDER:$2|ifawu'a}} $1 nga'örö $3 tobali $4", - "logentry-move-move-noredirect": "No {{GENDER:$2|ifawu'a}} $1 nga'örö $3 tobali $4 ba lö fangaekhugö", - "logentry-move-move_redir": "{{GENDER:$2|Ifawu'a}} ga $1 nga'örö $3 ba nga'örö $4 faoma ''redirect''", + "logentry-move-move-noredirect": "No {{GENDER:$2|ifawu'a}} $1 nga'örö $3 tobali $4 ba lö fangaekhugönia", + "logentry-move-move_redir": "No {{GENDER:$2|ifawu'a}} $1 nga'örö $3 tobali nga'örö $4 börö''redirect''", "logentry-patrol-patrol-auto": "No {{GENDER:$2|itandrai}} $1 revisi $4 ngaörö $3 tobali nifahuhuosi", "logentry-newusers-create": "Akun zi $1 no {{GENDER:$2|tefazökhi}}", "logentry-newusers-autocreate": "No otomatis {{GENDER:$2|tefazökhi}} akun zi $1", diff --git a/languages/i18n/pa.json b/languages/i18n/pa.json index bd9246fa50dc..d625bd89d2d4 100644 --- a/languages/i18n/pa.json +++ b/languages/i18n/pa.json @@ -514,6 +514,8 @@ "passwordreset-success-details-generic": "ਜੇਕਰ ਹਵਾਲੇ ਕੀਤੀ ਜਾਣਕਾਰੀ ਜਾਇਜ ਏ, ਤਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਕਾਇਮ ਕਰਨ ਲਈ ਈਮੇਲ ਭੇਜੀ ਜਾਵੇਗੀ। ਜੇਕਰ ਤੁਹਾਨੂੰ ਕੋਈ ਈਮੇਲ ਨਹੀਂ ਮਿਲਦੀ ਹੈ, ਤਾਂ ਅਸੀਂ ਸਿਫ਼ਾਰਿਸ਼ ਕਰਦੇ ਹਾਂ ਕਿ ਤੁਸੀਂ [[mw:Special:MyLanguage/Help:Reset_password| ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਕਾਇਮ ਕਰਨ ਦੇ ਮਦਦ ਸਫ਼ੇ]] 'ਤੇ ਜਾਓ ਜਾਂ ਬਾਅਦ ਵਿੱਚ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਤੁਸੀਂ <strong>ਥੋੜ੍ਹੇ ਸਮੇਂ ਦੇ ਅੰਦਰ ਘੱਟ ਗਿਣਤੀ ਵਿੱਚ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਕਾਇਮ ਕਰਨ ਲਈ ਬੇਨਤੀ ਕਰ ਸਕਦੇ ਹੋ। ਦੁਰਵਰਤੋਂ ਨੂੰ ਰੋਕਣ ਲਈ ਹਰ {{PLURAL:$1|ਘੰਟੇ|$1 ਘੰਟੇ}}</strong> ਹਰ ਜਾਇਜ ਖਾਤੇ ਲਈ ਸਿਰਫ਼ ਇੱਕ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਕਾਇਮ ਕਰਨ ਦੀ ਈਮੇਲ ਭੇਜੀ ਜਾਵੇਗੀ।", "passwordreset-success-info": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਜਮ੍ਹਾਂ ਕੀਤੇ ਵੇਰਵੇ ਹਨ: $1", "passwordreset-emailtext-require-email": "ਹਾਲਾਂਕਿ, ਜੇਕਰ ਤੁਸੀਂ ਇਹ ਬੇਨਤੀ ਤਿਆਰ ਨਹੀਂ ਕੀਤੀ ਹੈ ਅਤੇ ਬੇਲੋੜੀ ਈਮੇਲਾਂ ਨੂੰ ਰੋਕਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇੱਥੇ ਆਪਣੇ ਈਮੇਲ ਚੋਣਾਂ ਨੂੰ ਨਵਿਆਓਣਾ ਕਰ ਸਕਦੇ ਹੋ\n$1।\nਤੁਹਾਨੂੰ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਬਣਾਉਣ ਲਈ ਵਰਤੋਂਕਾਰ ਨਾਂ ਅਤੇ ਈਮੇਲ ਪਤੇ ਦੋਵਾਂ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ। ਇਸ ਨਾਲ ਅਜਿਹੀਆਂ ਵਾਰਦਾਤਾਂ ਦੀ ਗਿਣਤੀ ਘੱਟ ਸਕਦੀ ਹੈ।", + "passwordreset-nocaller": "ਬੇਨਤੀ ਦੇ ਸਰੋਤ ਬਾਰੇ ਜਾਣਕਾਰੀ ਜ਼ਰੂਰ ਦਿੱਤੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ", + "passwordreset-nosuchcaller": "ਬੇਨਤੀ ਦਾ ਸਰੋਤ ਮੌਜੂਦ ਨਹੀਂ ਏ: $1", "passwordreset-ignored": "ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਸੰਭਾਲਿਆ ਨਹੀਂ ਗਿਆ ਸੀ। ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਕੋਈ ਪੂਰਕ ਬਣਤਰ ਨਹੀਂ ਦਿਤੀ ਗਈ ਸੀ?", "passwordreset-invalidemail": "ਗ਼ਲਤ ਈਮੇਲ ਪਤਾ", "passwordreset-nodata": "ਨਾ ਤਾਂ ਕੋਈ ਵਰਤੋਂਕਾਰ ਨਾਮ ਅਤੇ ਨਾ ਹੀ ਕੋਈ ਈਮੇਲ ਪਤਾ ਪ੍ਰਦਾਨ ਕੀਤਾ ਗਿਆ ਸੀ", @@ -585,6 +587,7 @@ "missingsummary": "<strong>ਯਾਦ-ਦਿਵਾਉਣੀ:</strong> ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। \nਜੇ ਤੁਸੀਂ \"$1\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਪ੍ਰਕਾਸ਼ਿਤ ਕੀਤਾ ਜਾਵੇਗਾ।", "selfredirect": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਨੂੰ ਆਪਣੇ ਵੱਲ ਮੁਡ਼ ਵਾਪਸ-ਮੋੜ ਰਹੇ ਹੋ। \nਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਮੁੜ-ਵਾਪਸ ਕਰਨ ਲਈ ਗਲਤ ਟੀਚਾ ਬਿਆਨ ਕੀਤਾ ਹੋਵੇ, ਜਾਂ ਹੋ ਸਕਦਾ ਹੈ ਤੁਸੀਂ ਗਲਤ ਵਰਕੇ ਨੂੰ ਸੋਧ ਰਹੇ ਹੋ। \nਜੇਕਰ ਤੁਸੀਂ ਮੁੜ \"$1\" ਬਟਨ ਨੂੰ ਦੱਬਦੇ ਹੋ, ਤਾਂ ਮੁੜ-ਵਾਪਸ ਕਰੋ ਸਫ਼ੇ ਨੂੰ ਕਿਸੇ ਵੀ ਤਰ੍ਹਾਂ ਬਣਾਇਆ ਜਾਵੇਗਾ।", "edit-constraint-brokenredirect": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਨੂੰ ਅਜਿਹੇ ਸਫ਼ੇ ਵੱਲ ਵਾਪਸ-ਮੋੜ ਰਹੇ ਹੋ ਜੋ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।\nਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਮੁੜ-ਵਾਪਸ ਕਰਨ ਲਈ ਗਲਤ ਟੀਚਾ ਬਿਆਨ ਕੀਤਾ ਹੋਵੇ। \nਜੇਕਰ ਤੁਸੀਂ ਮੁੜ \"$1\" ਬਟਨ ਨੂੰ ਦੱਬਦੇ ਹੋ, ਤਾਂ ਮੁੜ-ਵਾਪਸ ਕਰੋ ਸਫ਼ੇ ਨੂੰ ਕਿਸੇ ਵੀ ਤਰ੍ਹਾਂ ਬਣਾਇਆ ਜਾਵੇਗਾ।", + "edit-constraint-doubleredirect": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਤੁਸੀਂ ਇਸ ਵਰਕੇ ਨੂੰ ਇੱਕ ਦੂਜੇ ਅਜਿਹੇ ਵਰਕੇ 'ਤੇ ਮੋੜਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹੋ, ਜਿਸ ਨਾਲ ਇੱਕ ਦੋ-ਵਾਰੀ ਮੋੜ(double-redirect) ਬਣ ਜਾਵੇਗਾ।\nਤੁਹਾਡਾ ਟੀਚਾ ਵਰਕਾ ਇਸ ਵੇਲੇ [[$2]] ਵੱਲ ਮੋੜ(redirect) ਰਿਹਾ ਹੈ।\n\nਕਿਰਪਾ ਕਰਕੇ ਇਸ ਮੋੜਣ ਦੀ ਸਮੱਗਰੀ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਸੋਧਣ 'ਤੇ ਵਿਚਾਰ ਕਰੋ:\n$3\n\nਧਿਆਨ ਦਿਓ: ਜੇਕਰ ਤੁਸੀਂ \"$1\" 'ਤੇ ਮੁੜ ਨੱਪਦੇ ਹੋ, ਤਾਂ ਦੋ-ਵਾਰੀ ਮੋੜ(double-redirect) ਕਿਸੇ ਵੀ ਤਰ੍ਹਾਂ ਬਣਾਇਆ ਜਾਵੇਗਾ।", "missingcommenttext": "ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਟਿੱਪਣੀ ਦਰਜ ਕਰੋ।", "missingcommentheader": "<strong>ਯਾਦ-ਦਿਵਾਉਣੀ:</strong> ਤੁਸੀਂ ਇਸ ਟਿੱਪਣੀ ਲਈ ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ ਦਿੱਤਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ \"$1\" 'ਤੇ ਮੁੜ ਨੱਪ ਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਸੋਧ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਛਾਪਿਆਂ ਜਾਵੇਗਾ।", "summary-preview": "ਸੋਧ ਸਾਰ ਦੀ ਝਲਕ:", @@ -641,6 +644,7 @@ "previewconflict": "ਇਹ ਝਲਕ ਉੱਪਰਲੀ ਲਿਖਤ ਸੋਧ ਖੇਤਰ ਵਿੱਚ ਲਿਖਤ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਪ੍ਰਕਾਸ਼ਿਤ ਚੋਣ ਕਰਨ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।", "session_fail_preview": "ਮਾਫ ਕਰਨਾ! ਅਸੀਂ ਅਜਲਾਸ ਡੇਟਾ ਦੇ ਨੁਕਸਾਨ ਦੇ ਕਾਰਨ ਤੁਹਾਡੇ ਸੋਧਾਂ ਦੀ ਕਾਰਵਾਈ ਨਹੀਂ ਕਰ ਸਕੇ। \nਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਬਾਹਰ ਹੋ ਗਏ ਹੋਵੋ। <strong>ਕਿਰਪਾ ਕਰਕੇ ਤਸਦੀਕ ਕਰੋ ਕਿ ਤੁਸੀਂ ਅਜੇ ਵੀ ਦਾਖਲ ਹੋ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ</strong>। ਜੇਕਰ ਇਹ ਅਜੇ ਵੀ ਕੰਮ ਨਹੀਂ ਕਰਦਾ ਹੈ, ਤਾਂ [[Special:UserLogout|ਬਾਹਰ ਆਉ]] ਅਤੇ ਮੁੜ ਦਾਖਲ ਹੋਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ, ਅਤੇ ਜਾਂਚ ਕਰੋ ਕਿ ਤੁਹਾਡਾ ਬ੍ਰਾਊਜ਼ਰ ਇਸ ਸਾਈਟ ਤੋਂ ਕੂਕੀਜ਼ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।", "session_fail_preview_html": "ਮਾਫ ਕਰਨਾ! ਅਸੀਂ ਅਜਲਾਸ ਡੇਟਾ ਦੇ ਨੁਕਸਾਨ ਦੇ ਕਾਰਨ ਤੁਹਾਡੇ ਸੋਧਾਂ ਦੀ ਕਾਰਵਾਈ ਨਹੀਂ ਕਰ ਸਕੇ।\n\n <em>ਕਿਉਂਕਿ {{SITENAME}} ਵਿੱਚ ਕੱਚਾ HTML ਸਮਰਥਿਤ ਹੈ, ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਹਮਲਿਆਂ ਦੇ ਵਿਰੁੱਧ ਸਾਵਧਾਨੀ ਵਜੋਂ ਝਲਕ ਨੂੰ ਲੁਕਾਇਆ ਗਿਆ ਹੈ।</em> \n\n <strong>ਜੇਕਰ ਇਹ ਇੱਕ ਜਾਇਜ਼ ਸੋਧ ਕੋਸ਼ਿਸ਼ ਹੈ, ਤਾਂ ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</strong> \n ਜੇਕਰ ਇਹ ਅਜੇ ਵੀ ਕੰਮ ਨਹੀਂ ਕਰਦਾ ਹੈ, ਤਾਂ [[Special:UserLogout|ਬਾਹਰ ਆਉ]] ਅਤੇ ਮੁੜ ਦਾਖਲ ਹੋਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ, ਅਤੇ ਜਾਂਚ ਕਰੋ ਕਿ ਤੁਹਾਡਾ ਬ੍ਰਾਊਜ਼ਰ ਇਸ ਸਾਈਟ ਤੋਂ ਕੂਕੀਜ਼ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।", + "edit_form_incomplete": "<strong>ਸੋਧ ਪਰਚੇ ਦੇ ਕੁਝ ਹਿੱਸੇ ਸਰਵਰ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚੇ ਸਨ; ਮੁੜ ਜਾਂਚੋ ਕਿ ਤੁਹਾਡੇ ਸੋਧ ਠੀਕ ਹਨ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</strong>", "editing": "$1 ਸੋਧਣਾ ਜਾਰੀ", "edit-textarea-aria-label": "ਵਿਕੀਲਿਖਤ ਸਰੋਤ ਸੰਪਾਦਕ", "creating": "$1 ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ", @@ -698,6 +702,7 @@ "postedit-temp-created": "ਤੁਹਾਡੇ ਬਰਾਊਜ਼ਰ ਵਿੱਚ ਇੱਕ ਕੂਕੀ ਜੋੜ ਕੇ ਤੁਹਾਡੇ ਲਈ ਇੱਕ [[$2|ਆਪਣੇ-ਆਪ ਤਿਆਰ ਖਾਤਾ]] ਬਣਾਇਆ ਗਿਆ ਹੈ। ਆਪਣੀ ਪਸੰਦ ਦਾ ਇੱਕ ਨਾਮ ਚੁਣਨ ਅਤੇ ਹੋਰ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲੈਣ ਲਈ, [$1 ਇੱਕ ਖਾਤਾ ਬਣਾਉਣ] 'ਤੇ ਵਿਚਾਰ ਕਰੋ।", "edit-already-exists": "ਨਵਾਂ ਸਫ਼ਾ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਿਆ।\nਇਹ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।", "defaultmessagetext": "ਮੂਲ ਸੁਨੇਹਾ ਲਿਖਤ", + "content-failed-to-parse": "$1 ਨਾਮੂਨੇ ਲਈ $2 ਸਮੱਗਰੀ ਨੂੰ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਵਿੱਚ ਨਾਕਾਮ: $3", "invalid-content-data": "ਗ਼ਲਤ ਸਮੱਗਰੀ", "invalid-json-data": "ਗਲਤ JSON: $1", "content-not-allowed-here": "ਥਾਂ \"$3\" ਵਿੱਚ [[:$2]] ਸਫ਼ੇ ਉੱਤੇ \"$1\" ਸਮੱਗਰੀ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ", @@ -719,15 +724,19 @@ "duplicate-args-warning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> [[:$1]] ਮਾਪਦੰਡ \"$3\" ਲਈ ਇੱਕ ਤੋਂ ਵੱਧ ਮੁੱਲ ਦੇ ਨਾਲ [[:$2]] ਨੂੰ ਵਰਤੋਂ ਵਿੱਚ ਲਿਆ ਰਿਹਾ ਏ। ਸਿਰਫ਼ ਪ੍ਰਦਾਨ ਕੀਤੇ ਗਏ ਆਖਰੀ ਮੁੱਲ ਦੀ ਵਰਤੋਂ ਹੀ ਕੀਤੀ ਜਾਵੇਗੀ।", "duplicate-args-category": "ਫਰਮੇ ਦੀ ਵਰਤੋਂ ਵਿੱਚ ਦੁਹਰਾਇਆ ਕੁੰਜੀਆਂ", "duplicate-args-category-desc": "ਸਫ਼ੇ ਵਿੱਚ ਫਰਮਾ ਬੁਲਾਉਣਾ ਸ਼ਾਮਲ ਹੈ ਜੋ ਦਲੀਲਾਂ ਦੀ ਹੂਬਹੂ ਨਕਲ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ਜਾਂ <code><nowiki>{{foo |bar|1=baz}}</nowiki></code>।", + "expensive-parserfunction-warning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਇਸ ਸਫ਼ੇ ਵਿੱਚ ਬਹੁਤ ਜ਼ਿਆਦਾ ਮਹਿੰਗੇ ਵਿਸ਼ਲੇਸ਼ਕ(parser) ਕਾਰਜ਼ ਸੱਦੇ(calls) ਹਨ। \n\nਇਸ ਵਿੱਚ $2 ਤੋਂ ਘੱਟ {{PLURAL:$2|ਸੱਦਾ(call)|ਸੱਦੇ(calls)}} ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ, ਜਦੋਂ ਕਿ {{PLURAL:$1|ਹੁਣ $1 ਸੱਦਾ(call) ਹੈ|ਹੁਣ $1 ਸੱਦੇ(calls) ਹਨ}}।", "expensive-parserfunction-category": "ਫਲਨ ਪਦ ਛੇਦ ਕਰਨ ਦਾ ਕੰਮ ਬਹੁਤ ਭਾਰਾ ਹੈ", "post-expand-template-inclusion-warning": "'''ਖ਼ਬਰਦਾਰ:''' ਫਰਮੇ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਕੁਝ ਫਰਮੇ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣਗੇ।", "post-expand-template-inclusion-category": "ਉਹ ਸਫ਼ੇ ਜਿੱਥੇ ਫਰਮੇ ਸ਼ਾਮਲ ਕਰਨ ਦਾ ਅਕਾਰ ਹੱਦੋਂ ਵੱਧ ਗਿਆ ਹੈ", "post-expand-template-argument-warning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਇਸ ਸਫ਼ੇ ਤੇ ਘੱਟੋ ਘੱਟ ਇੱਕ ਐਸੀ ਫਰਮੇ ਦੀ ਬਹਿਸ ਹੈ ਜਿਸ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। \nਅਜਿਹੀਆਂ ਦਲੀਲਾਂ ਨੂੰ ਛੱਡ ਦਿੱਤਾ ਗਿਆ ਹੈ।", "post-expand-template-argument-category": "ਛੱਡੇ ਗਏ ਫਰਮੇ ਦੀ ਦਲੀਲਾਂ ਵਾਲੇ ਸਫ਼ੇ", "template-equals-category": "ਸਫ਼ੇ ਜੋ = ਇੱਕ ਫਰਮੇ ਵਜੋਂ ਵਰਤਦੇ ਹਨ", + "template-equals-category-desc": "ਇਸ ਵਰਕੇ ਵਿੱਚ <code><nowiki>{{=}}</nowiki></code> ਸ਼ਾਮਲ ਹੈ ਪਰ ਇਸ ਵਿਕੀ 'ਤੇ ਇਹ <code>=</code> ਤੱਕ ਨਹੀਂ ਫੈਲਦਾ। ਇਹ ਵਰਤੋਂ ਨੂੰ ਹੁਣ ਪੁਰਾਣਾ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ; ਭਵਿੱਖ ਦਾ ਮੀਡੀਆਵਿਕੀ ਸੰਸਕਰਣ <code><nowiki>{{=}}</nowiki></code> ਨੂੰ ਵਿਸ਼ਲੇਸ਼ਕ(parser) ਕਾਰਜ਼ ਵਜੋਂ ਲਾਗੂ ਕਰੇਗਾ।", + "template-equals-warning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਇਹ ਵਰਕਾ <code><nowiki>{{=}}</nowiki></code> ਵਰਤਦਾ ਹੈ ਪਰ ਇਸ ਵਿਕੀ 'ਤੇ ਇਹ <code>=</code> ਤੱਕ ਨਹੀਂ ਫੈਲਦਾ। ਇਹ ਵਰਤੋਂ ਹੁਣ ਪੁਰਾਣੀ ਹੋ ਗਈ ਹੈ; ਭਵਿੱਖ ਦਾ ਮੀਡੀਆਵਿਕੀ ਸੰਸਕਰਨ <code><nowiki>{{=}}</nowiki></code> ਨੂੰ ਵਿਸ਼ਲੇਸ਼ਕ(parser) ਕਾਰਜ਼ ਵਜੋਂ ਲਾਗੂ ਕਰੇਗਾ।", "parser-template-loop-warning": "ਫਰਮੇ ਦਾ ਘੇਰਾ ਲੱਭਿਆ: [[:$1]]", "template-loop-category": "ਫਰਮੇ ਦੇ ਘੇਰੇ ਵਾਲੇ ਸਫ਼ੇ", "template-loop-category-desc": "ਵਰਕੇ ਵਿੱਚ ਇੱਕ ਫਰਮੇ ਦਾ ਘੇਰਾ ਏ, ਜਿਵੇਂ ਕਿ, ਇੱਕ ਫਰਮਾ ਜੋ ਆਪਣੇ ਆਪ ਨੂੰ ਵਾਰ-ਵਾਰ ਵਰਤੋਂ ਵਿੱਚ ਲਿਆੰਦਾ ਏ।", + "template-loop-warning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਇਹ ਵਰਕਾ [[:$1]] ਨੂੰ ਸੱਦਾ ਦਿੰਦਾ ਹੈ, ਜੋ ਇੱਕ ਫਰਮਾ-ਘੇਰਾ(loop) (ਇੱਕ ਅਣਗਿਣਤ ਮੁੜੋ-ਮੁੜ ਆਉਣ ਵਾਲਾ ਸੱਦਾ(call)) ਬਣਦਾ ਹੈ।", "parser-template-recursion-depth-warning": "ਫਰਮਾ ਵਾਪਸੀ ਡੂੰਘਾਈ ਹੱਦ ਤੋਂ ਵੱਧ ਹੋ ਗਈ ($1)", "language-converter-depth-warning": "ਭਾਸ਼ਾ ਵਟਾਂਦਰਾਂ ਡੂੰਘਾਈ ਹੱਦ ਤੋਂ ਵੱਧ ਹੋ ਗਈ ($1)", "node-count-exceeded-category": "ਨੋਡ ਦੀ ਗਿਣਤੀ ਵੱਦ ਗਈ ਹੈ", @@ -814,7 +823,9 @@ "revdelete-show-file-confirm": "ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ ਤੁਸੀਂ $2 ਨੂੰ $3 ਦੀ ਫ਼ਾਈਲ \"<nowiki>$1</nowiki>\" ਦੀ ਮਿਟਾਈ ਗਈ ਦੁਹਰਾਅ ਵੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?", "revdelete-show-file-submit": "ਹਾਂ", "revdelete-selected-text": "[[:$2]] ਵਿੱਚੋਂ {{PLURAL:$1|ਚੁਣਿਆ ਦੁਹਰਾਅ|ਚੁਣੇ ਹੋਏ ਦੁਹਰਾਅ}}:", + "revdelete-selected-file": "[[:$2]] ਵਿੱਚੋਂ {{PLURAL:$1|ਚੁਣੀ ਹੋਈ ਫ਼ਾਈਲ ਸੰਸਕਰਣ|ਚੁਣੇ ਹੋਏ ਫਾਈਲਾਂ ਦੇ ਸੰਸਕਰਣ}}:", "revdelete-text-text": "ਮਿਟਾਏ ਗਏ ਦੁਹਰਾਅ ਅਜੇ ਵੀ ਵਰਕੇ ਦੇ ਇਤਿਹਾਸ ਵਿੱਚ ਵਿਖਾਈ ਦੇਣਗੇ, ਪਰ ਉਹਨਾਂ ਦੀ ਸਮੱਗਰੀ ਦੇ ਕੁਝ ਹਿੱਸੇ ਜਨਤਾ ਲਈ ਪਹੁੰਚ ਤੋਂ ਬਾਹਰ ਹੋਣਗੇ।", + "revdelete-text-file": "ਮਿਟਾਏ ਗਏ ਫਾਈਲ ਸੰਸਕਰਣ ਅਜੇ ਵੀ ਫਾਈਲ ਦੇ ਇਤਿਹਾਸ ਵਿੱਚ ਵਿਖਾਈ ਦੇਣਗੇ, ਪਰ ਉਹਨਾਂ ਦੀ ਸਮੱਗਰੀ ਦੇ ਕੁਝ ਹਿੱਸੇ ਲੋਕਾਂ ਲਈ ਪਹੁੰਚ ਤੋਂ ਬਾਹਰ ਹੋਣਗੇ।", "logdelete-text": "ਮਿਟਾਈ ਗਈ ਇੰਦਰਾਜ ਘਟਨਾ ਅਜੇ ਵੀ ਇੰਦਰਾਜ ਵਿੱਚ ਵਿਖਾਈ ਦੇਵੇਗੀ, ਪਰ ਉਹਨਾਂ ਦੀ ਸਮੱਗਰੀ ਦੇ ਕੁਝ ਹਿੱਸੇ ਜਨਤਾ ਲਈ ਪਹੁੰਚ ਤੋਂ ਬਾਹਰ ਹੋਣਗੇ।", "revdelete-text-others": "ਹੋਰ ਪ੍ਰਬੰਧਕ ਅਜੇ ਵੀ ਲੁਕੀ ਹੋਈ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਅਤੇ ਇਸ ਨੂੰ ਹਟਾਉਣ ਦੇ ਯੋਗ ਹੋਣਗੇ, ਜਦੋਂ ਤੱਕ ਵਾਧੂ ਪਾਬੰਦੀਆਂ ਕਾਇਮ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ।", "revdelete-confirm": "ਕਿਰਪਾ ਕਰਕੇ ਤਸਦੀਕ ਕਰੋ ਕਿ ਤੁਸੀਂ ਅਜਿਹਾ ਕਰਨ ਦਾ ਇਰਾਦਾ ਰੱਖਦੇ ਹੋ, ਕਿ ਤੁਸੀਂ ਨਤੀਜਿਆਂ ਨੂੰ ਸਮਝਦੇ ਹੋ, ਅਤੇ ਇਹ ਕਿ ਤੁਸੀਂ [[{{MediaWiki:Policy-url}}|ਨੀਤੀ]] ਦੇ ਮੁਤਾਬਕ ਅਜਿਹਾ ਕਰ ਰਹੇ ਹੋ।", @@ -864,6 +875,7 @@ "mergehistory-from": "ਸਰੋਤ ਸਫ਼ਾ:", "mergehistory-into": "ਮੰਜਲੀ ਸਫ਼ਾ:", "mergehistory-list": "ਰਲ਼ਾਉਣਯੋਗ ਸੋਧ ਅਤੀਤ", + "mergehistory-merge": "[[:$1]] ਦੇ ਹੇਠ ਲਿਖੇ ਸੋਧਾਂ ਨੂੰ [[:$2]] ਵਿੱਚ ਮਿਲਾਇਆ ਜਾ ਸਕਦਾ ਹੈ। ਸਿਰਫ਼ ਦਰਸਾਏ ਗਏ ਸਮੇਂ 'ਤੇ ਅਤੇ ਉਸ ਤੋਂ ਪਹਿਲਾਂ ਬਣਾਏ ਗਏ ਸੋਧਾਂ ਨੂੰ ਮਿਲਾਉਣ ਲਈ ਗੋਲ ਬਟਨ ਖਾਨੇ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਧਿਆਨ ਦਿਓ ਕਿ ਆਵਾਜਾਵੀ ਕੜੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਕਾਰਨ ਖੇਤਰ ਸਾਫ਼ ਹੋ ਜਾਵੇਗਾ।", "mergehistory-go": "ਰਲ਼ਾਉਣਯੋਗ ਸੋਧਾਂ ਵਖਾਓ", "mergehistory-submit": "ਦੁਹਰਾਅ ਰਲ਼ਾਓ", "mergehistory-empty": "ਕਿਸੇ ਵੀ ਦੁਹਰਾਅ ਨੂੰ ਮਿਲਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।", @@ -899,6 +911,7 @@ "lineno-inline": "ਲਕੀਰ $1 ⟶ $2:", "compareselectedversions": "ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ", "showhideselectedversions": "ਚੁਣੀਆਂ ਸੁਧਾਈਆਂ ਦੀ ਦਿਸਣਯੋਗਤਾ ਬਦਲੋ", + "showhideselectedfileversions": "ਚੁਣੀਆਂ ਫਾਈਲਾਂ ਸੰਸਕਰਣ ਦੀ ਦਿਸਣਯੋਗਤਾ ਬਦਲੋ", "editundo": "ਰੱਦ ਕਰੋ", "diff-incompatible": "ਸਮੱਗਰੀ ਨਮੂਨੇਆਂ \"$1\" ਅਤੇ \"$2\" ਦੀ ਤੁਲਨਾ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ", "diff-empty": "(ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ)", @@ -934,6 +947,7 @@ "viewprevnext": "ਵੇਖੋ ($1 {{int:pipe-separator}} $2) ($3)", "searchmenu-exists": "{{SITENAME}} ਉੱਤੇ \"[[:$1]]\" ਨਾਂ ਦਾ ਇੱਕ ਸਫ਼ਾ ਹੈ। {{PLURAL:$2|0=|ਹੋਰ ਖੋਜ ਨਤੀਜੇ ਵੀ ਵੇਖੋ।}}", "searchmenu-new": "ਇਸ ਵਿਕੀ ਉੱਤੇ ਸਫ਼ਾ \"[[:$1]]\" ਬਣਾਓ! {{PLURAL:$2|0=|ਇਸਦੇ ਨਾਲ ਖੋਜ ਦੇ ਨਤੀਜੇ ਵੀ ਦੇਖ ਲਵੋ।}}", + "searchmenu-new-external": "\"[[:$1]]\" ਵਰਕਾ ਕਿਸੇ ਹੋਰ ਵਿਕੀ 'ਤੇ ਜਾਪਦਾ ਹੈ। ਤੁਸੀਂ ਉੱਥੇ ਇਸਨੂੰ ਵੇਖ ਸਕਦੇ ਹੋ। {{PLURAL:$2|0=|ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮਿਲਿਆ ਵਰਕਾ ਵੀ ਵੇਖੋ।|ਲੱਭੇ ਗਏ ਖੋਜ ਨਤੀਜੇ ਵੀ ਵੇਖੋ।}}", "searchprofile-articles": "ਸਮੱਗਰੀ ਸਫ਼ੇ", "searchprofile-images": "ਮਲਟੀਮੀਡੀਆ", "searchprofile-everything": "ਸਭ ਕੁਝ", @@ -954,6 +968,7 @@ "search-interwiki-more": "(ਹੋਰ)", "search-interwiki-more-results": "ਹੋਰ ਨਤੀਜੇ", "search-relatedarticle": "ਸਬੰਧਤ", + "search-invalid-sort-order": "$1 ਦਾ ਕ੍ਰਮ ਪਛਾਣਿਆ ਨਹੀਂ ਗਿਆ, ਮੂਲ ਛਾਂਟੀ ਲਾਗੂ ਕੀਤੀ ਜਾਵੇਗੀ। ਵੈਧ ਕ੍ਰਮ ਹਨ: $2", "search-unknown-profile": "$1 ਦੀ ਖੋਜ ਪ੍ਰੋਫਾਈਲ ਅਣਪਛਾਤੀ ਹੈ, ਮੂਲ ਖੋਜ ਪ੍ਰੋਫਾਈਲ ਲਾਗੂ ਕੀਤਾ ਜਾਵੇਗਾ।", "search-thumbnail-alt": "$1 ਲਈ ਥੰਬਨੇਲ", "searchrelated": "ਸਬੰਧਤ", @@ -969,25 +984,37 @@ "powersearch-toggleall": "ਸਾਰੇ", "powersearch-togglenone": "ਕੋਈ ਨਹੀਂ", "powersearch-remember": "ਇਸ ਚੋਣ ਨੂੰ ਅੱਗੋਂ ਦੀਆਂ ਭਾਲ਼ਾਂ ਵਾਸਤੇ ਯਾਦ ਰੱਖੋ", + "searchdisabled": "ਇਸ ਵਿਕੀ 'ਤੇ ਖੋਜ ਬੰਦ ਹੈ, ਅਤੇ ਕੋਈ ਬਾਹਰੀ ਖੋਜ ਦਾ URL [[$1|ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ]] ਹੈ।", "search-error": "ਖੋਜ ਕਰਦੇ ਵਕਤ ਇੱਕ ਦੋਸ਼ ਮਿਲਿਆ:$1", "search-warning": "ਖੋਜ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਚੇਤਾਵਨੀ ਆਈ ਏ: $1", "mypreferences": "ਤਰਜੀਹਾਂ", "searchresultshead": "ਖੋਜ", + "prefs-description-misc": "ਵਿਸ਼ਾ-ਸੂਚੀ ਨੂੰ ਆਪਣੀ ਲੋੜ ਮੁਤਾਬਕ ਬਣਾਓ", + "prefs-help-watchlist-token2": "ਇਹ ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ ਸੂਚੀ ਦੇ web feed ਦੀ ਲੁਕੀ ਹੋਈ ਚਾੱਬੀ ਹੈ। ਕੋਈ ਵੀ ਜਿਸਨੂੰ ਇਹ ਪਤਾ ਹੋਵੇਗਾ ਉਹ ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ ਸੂਚੀ ਨੂੰ ਪੜ੍ਹ ਸਕੇਗਾ, ਇਸ ਲਈ ਇਸਨੂੰ ਸਾਂਝਾ ਨਾ ਕਰੋ। ਜੇਕਰ ਤੁਹਾਨੂੰ ਲੋੜ ਹੈ, ਤਾਂ [[Special:ResetTokens|ਤੁਸੀਂ ਇਸਨੂੰ ਮੁੜ-ਕਾਇਮ ਕਰ ਸਕਦੇ ਹੋ]]।", "savedrights": "{{GENDER:$1|$1}} ਦੇ ਵਰਤੋਂਕਾਰ ਟੋਲੀਆਂ ਨੂੰ ਸੰਭਾਲਿਆ ਗਿਆ ਏ।", "prefs-namespaces": "ਥਾਂ-ਨਾਮ", "default": "ਮੂਲ", "linterror-bogus-image-options": "ਜਾਅਲੀ ਫਾਇਲ ਚੋਣ", "linterror-deletable-table-tag": "ਸਾਰਨੀ ਦੇ ਟੈਗ ਜੋ ਮਿਟਾਏ ਜਾਣੇ ਚਾਹੀਦੇ ਹਨ", + "linterror-html5-misnesting": "ਗ਼ਲਤ ਰੱਖਿਆ (ਹੁਣ ਟੁੱਟਿਆ ਹੋਇਆ)", "linterror-inline-media-caption": "ਅੱਖੋ-ਓਹਲੇ ਸੁਰਖੀ", "linterror-large-tables": "ਵੱਡੀਆਂ ਸਾਰਨੀਆਂ ਜੋ ਮੋਬਾਈਲ ਜੰਤਰਾਂ 'ਤੇ ਡਿਸਪਲੇ ਨੂੰ ਤੋੜਦੀਆਂ ਹਨ", + "linterror-misc-tidy-replacement-issues": "ਫੁਟਕਲ ਨਿਸ਼ਾਨਦੇਹੀ ਗਲਤੀਆਂ", + "linterror-misnested-tag": "ਬੇਤਰਤੀਬੀ ਨਾਲ ਰੱਖਿਆ ਗਿਆ ਟੈਗ ਜਿਸਨੂੰ ਢੁਕਵੇਂ ਤਰੀਕੇ ਨਾਲ ਰੱਖਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਏ", "linterror-missing-end-tag": "ਗੁਆਚੇ ਅਖੀਰਲੇ ਟੈਗ", "linterror-missing-end-tag-in-heading": "ਸਿਰਲੇਖ ਵਿੱਚ ਅਖੀਰਲੇ ਟੈਗ ਮੌਜੂਦ ਨਹੀਂ ਏ", "linterror-missing-image-alt-text": "ਤਸਵੀਰ ਵਿੱਚ ਬਦਲਵੀਂ ਲਿਖਤ ਮੌਜੂਦ ਨਹੀਂ ਏ", + "linterror-multi-colon-escape": "ਬਹੁਤੇ ਦੁਬਿੰਦੀ ਤੋਂ ਬਚਾਅ", "linterror-multiline-html-table-in-list": "ਸੂਚੀ ਦੇ ਵਿੱਚ ਕਈ-ਲਕੀਰ ਵਾਲੀ HTML5 ਸਾਰਣੀ ਏ", + "linterror-multiple-unclosed-formatting-tags": "ਸਫ਼ੇ 'ਤੇ ਕਈ ਨਹੀਂ ਬੰਦ ਕੀਤੇ ਹੋਏ ਤਰਤੀਬੀ ਟੈਗ", "linterror-night-mode-unaware-background-color": "ਪਿਛੋਕਡ਼ ਰੰਗ ਲਕੀਰ-ਅੰਦਰ ਸ਼ੈਲੀ ਲਈ ਅੱਖਰ ਨੂੰ ਰੰਗ ਦੀ ਲੋਡ਼ ਏ", "linterror-obsolete-tag": "ਪੁਰਾਣਾ HTML ਟੈਗ", + "linterror-pwrap-bug-workaround": "ਪੈਰੇ ਨੂੰ ਲਪੇਟਣ ਵਾਲੇ ਮਾਂਙਣੂ(bug) ਦਾ ਕੰਮਚਲਾਊ ਹੱਲ", + "linterror-self-closed-tag": "ਸਵੈ-ਬੰਦ ਟੈਗ", "linterror-stripped-tag": "ਵਾਂਝਾ ਕੀਤਾ ਟੈਗ", "linterror-tidy-font-bug": "ਅੱਖਰ ਟੈਗ ਕੜੀ ਦਾ ਰੰਗ ਬਦਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਐ", + "linterror-tidy-whitespace-bug": "ਖਾਲੀ ਥਾਂ ਵਿਸ਼ਲੇਸ਼ਣ ਮਾਂਙਣੂ(bug)", + "linterror-unclosed-quotes-in-heading": "ਨਾ ਬੰਦ ਕੀਤਾ ਗਿਆ ਕਥਨ ਜੋ ਵਿਸ਼ਾ-ਸੂਚੀ ਤੋਂ ਬਾਹਰ ਫੈਲਦਾ ਏ", "linterror-wikilink-in-extlink": "ਕੜੀਆਂ ਵਿੱਚ ਕੜੀਆਂ", "email": "ਈਮੇਲ", "userrights": "ਵਰਤੋਂਕਾਰ ਹੱਕ", @@ -1058,15 +1085,19 @@ "right-minoredit": "ਸੋਧਾਂ ਦੇ ਛੋਟਾ ਹੋਣ ਲਈ ਨਿਸ਼ਾਨ ਲਾਉਣਾ", "right-move": "ਸਫ਼ੇ ਭੇਜਣਾ", "right-move-subpages": "ਉਪ-ਸਫ਼ਿਆਂ ਸਮੇਤ ਸਫ਼ੇ ਭੇਜੋ", + "right-move-rootuserpages": "ਮੂਲ ਵਰਤੋਂਕਾਰ ਸਫ਼ਿਆਂ ਦੀ ਥਾਂ ਬਦਲੋ", "right-move-categorypages": "ਵਰਗਾਂ ਦੇ ਸਫ਼ੇ ਭੇਜੋ", "right-movefile": "ਫਾਇਲਾਂ ਭੇਜਣੀਆਂ", + "right-suppressredirect": "ਸਫ਼ਿਆਂ ਨੂੰ ਤਬਦੀਲ ਕਰਦੇ ਸਮੇਂ ਸਰੋਤ ਵਰਕਿਆਂ ਤੋਂ ਦੁਬਾਰਾ ਭੇਜਣਾ ਨਹੀਂ ਬਣਾਓ", "right-upload": "ਫਾਇਲਾਂ ਅੱਪਲੋਡ", "right-reupload": "ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ", "right-reupload-own": "ਆਪ ਚੜ੍ਹਾਈਆਂ ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ", + "right-reupload-shared": "ਸਾਂਝੇ ਮੀਡੀਆ ਭੰਡਾਰ 'ਤੇ ਫਾਈਲਾਂ ਨੂੰ ਮਕਾਮੀ/ਸਥਾਨਕ ਤੌਰ ਉੱਤੇ ਲਿਖੋ", "right-upload_by_url": "URL ਤੋਂ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ", "right-purge": "ਇੱਕ ਸਫ਼ੇ ਲਈ ਕੈਸ਼ ਨੂੰ ਸਾਫ਼ ਕਰੋ", "right-autoconfirmed": "ਆਈਪੀ (IP)-ਬੁਨਿਆਦੀ ਦਰ ਦੀ ਹੱਦਾਂ ਵੱਲੋਂ ਅਸਰ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ", "right-bot": "ਇੱਕ ਸਵੈ-ਚਾਲਤ ਅਮਲ ਵਜੋਂ ਗਿਣਿਆ ਜਾਣਾ", + "right-nominornewtalk": "ਗੱਲਬਾਤ ਵਾਲੇ ਸਫ਼ਿਆਂ ਵਿੱਚ ਛੋਟੀਆਂ ਤਬਦੀਲੀਆਂ ਨਵੀਂਆਂ ਸੁਨੇਹਿਆਂ ਵਾਲੇ ਹਦਾਇਤ ਨੂੰ ਚਾਲੂ ਨਾ ਕਰਨ", "right-apihighlimits": "API ਪੁੱਛਗਿੱਛ ਵਿੱਚ ਵਾਧੂ ਹੱਦਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ", "right-delete": "ਸਫ਼ੇ ਹਟਾਓ", "right-delete-redirect": "ਇਕੱਲੇ ਮੁੜ-ਵਾਪਸ ਕੀਤੇ ਦੁਹਰਾਅ ਮਿਟਾਓ", @@ -1085,6 +1116,7 @@ "right-hideuser": "ਵਰਤੋਂਕਾਰ ਨਾਮ ਤੇ ਪਾਬੰਦੀ ਲਾਓ ਅਤੇ ਇਸਨੂੰ ਲੋਕਾਂ ਤੋਂ ਲੁਕਾਓ ਜਾਂ ਦਿਖਾਓ", "right-ipblock-exempt": "ਆਈਪੀ (IP) ਪਾਬੰਦੀਆਂ, ਸਵੈ-ਪਾਬੰਦੀਆਂ ਅਤੇ ਹੱਦ ਪਾਬੰਦੀਆਂ ਨੂੰ ਛੱਡ ਕੇ ਲੰਘੋ", "right-unblockself": "ਕਿਸੇ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", + "right-protect": "ਸੁਰੱਖਿਆ ਤਰਜੀਹਾਂ ਬਦਲੋ ਅਤੇ ਹੇਠਾਂ ਤੱਕ ਲੜੀਵਾਰ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧੋ", "right-editprotected": "\"{{int:protect-level-sysop}}\" ਵਜੋਂ ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਦੀ ਸੋਧ ਕਰੋ", "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" ਵਜੋਂ ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਦੀ ਸੋਧ ਕਰੋ", "right-editcontentmodel": "ਕਿਸੇ ਸਫ਼ੇ ਦਾ ਸਮੱਗਰੀ ਨਮੂਨਾ ਸੋਧੋ", @@ -1137,9 +1169,11 @@ "grant-createaccount": "ਖਾਤੇ ਬਣਾਓ", "grant-createeditmovepage": "ਸਫ਼ੇ ਬਣਾਓ, ਸੋਧ, ਅਤੇ ਹਿੱਲਾਓ", "grant-delete": "ਸਫ਼ੇ, ਦੁਹਰਾਅ ਅਤੇ ਇੰਦਰਾਜ ਨੂੰ ਮਿਟਾਓ", + "grant-editinterface": "ਮੀਡੀਆਵਿਕੀ ਦੇ ਨਾਂ-ਥਾਂ ਅਤੇ ਸਾਈਟ-ਵਿਆਪੀ/ਵਰਤੋਂਕਾਰ JSON ਨੂੰ ਸੋਧੋ", "grant-editmycssjs": "ਆਪਣੇ ਵਰਤੋਂਕਾਰ CSS/JSON/JavaScript ਨੂੰ ਸੋਧੋ", "grant-editmyoptions": "ਆਪਣੀ ਵਰਤੋਂਕਾਰ ਤਰਜੀਹਾਂ ਅਤੇ JSON ਬਣਤਰ ਨੂੰ ਸੋਧੋ", "grant-editmywatchlist": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ", + "grant-editsiteconfig": "ਸਾਈਟ-ਵਿਆਪੀ ਅਤੇ ਵਰਤੋਂਕਾਰ CSS/JS ਨੂੰ ਸੋਧੋ", "grant-editpage": "ਮੌਜੂਦਾ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧੋ", "grant-editprotected": "ਸੁਰੱਖਿਅਤ ਸਫ਼ੇ ਸੋਧ", "grant-highvolume": "ਉੱਚੀ-ਆਵਾਜ਼ (ਬੋਟ) ਪਹੁੰਚ", @@ -1175,6 +1209,7 @@ "action-minoredit": "ਇਹ ਸੋਧ ਨੂੰ ਛੋਟੀ ਤੌਰ ਉੱਤੇ ਮੰਨੋ", "action-move": "ਇਹ ਸਫ਼ਾ ਭੇਜੋ", "action-move-subpages": "ਇਹ ਸਫ਼ਾ ਤੇ ਇਸ ਦੇ ਅਧੀਨ-ਸਫ਼ਿਆਂ ਨੂੰ ਭੇਜੋ", + "action-move-rootuserpages": "ਮੂਲ ਵਰਤੋਂਕਾਰ ਸਫ਼ਿਆਂ ਦੀ ਥਾਂ ਬਦਲੋ", "action-move-categorypages": "ਵਰਗਾਂ ਦੇ ਸਫ਼ੇ ਭੇਜੋ", "action-movefile": "ਇਹ ਫ਼ਾਈਲ ਭੇਜੋ", "action-upload": "ਇਹ ਫ਼ਾਈਲ ਚੜ੍ਹਾਉ", @@ -1222,6 +1257,7 @@ "action-bot": "ਇੱਕ ਸਵੈਚਲਿਤ ਅਮਲ ਵਜੋਂ ਗਿਣਿਆ ਜਾਵੇ", "action-editprotected": "\"{{int:protect-level-sysop}}\" ਵਜੋਂ ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਦੀ ਸੋਧ ਕਰੋ", "action-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" ਵਜੋਂ ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਦੀ ਸੋਧ ਕਰੋ", + "action-editinterface": "ਵਰਤੋਂਕਾਰ ਰਾਬਤਾ(interface) ਨੂੰ ਸੋਧੋ", "action-editusercss": "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ CSS ਫ਼ਾਈਲਾਂ ਸੋਧੋ", "action-edituserjson": "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ JSON ਫ਼ਾਈਲਾਂ ਸੋਧੋ", "action-edituserjs": "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਜਾਵਾਸਕਰਿਪਟ ਫ਼ਾਈਲਾਂ ਸੋਧੋ", @@ -1238,6 +1274,7 @@ "action-unblockself": "ਆਪਣੇ ਆਪ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", "action-noratelimit": "ਦਰ ਦੀ ਹੱਦਾਂ ਵੱਲੋਂ ਅਸਰ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ", "action-reupload-own": "ਆਪ ਚੜ੍ਹਾਈਆਂ ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ", + "action-nominornewtalk": "ਗੱਲਬਾਤ ਵਾਲੇ ਸਫ਼ਿਆਂ ਵਿੱਚ ਛੋਟੀਆਂ ਤਬਦੀਲੀਆਂ ਨਵੀਂਆਂ ਸੁਨੇਹਿਆਂ ਵਾਲੇ ਹਦਾਇਤ ਨੂੰ ਚਾਲੂ ਨਾ ਕਰਨ", "action-markbotedits": "ਵਾਪਸ-ਮੋੜੇ ਸੋਧਾਂ ਨੂੰ ਬੋਟ ਸੋਧਾਂ ਵਜੋਂ ਨਿਸ਼ਾਨੀ ਲਾਵੋ", "action-patrolmarks": "ਹਾਲੀਆ ਤਬਦੀਲੀਆਂ ਤੇ ਗਸ਼ਤ ਦੇ ਨਿਸ਼ਾਨ ਵੇਖੋ", "action-override-export-depth": "5 ਦੀ ਡੂੰਘਾਈ ਤੱਕ ਕੜੀਆਂ ਨਾਲ ਜੁੜੇ ਸਫ਼ਿਆਂ ਸਮੇਤ ਵਰਕਿਆਂ ਨੂੰ ਬਰਾਮਦ ਕਰੋ", @@ -1267,26 +1304,42 @@ "rcfilters-legend-heading": "<strong>ਸੰਖੇਪ-ਸ਼ਬਦਾਂ ਦੀ ਸੂਚੀ:</strong>", "rcfilters-other-review-tools": "ਹੋਰ ਸਮੀਖਿਆ ਸੰਦ", "rcfilters-group-results-by-page": "ਟੋਲੀਆਂ ਦੇ ਨਤੀਜੇ ਸਫ਼ੇ ਮੁਤਾਬਕ ਕਰੋ", + "rcfilters-activefilters": "ਸਰਗਰਮ ਛਾਣਨੀ", "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-limit-and-date-popup-dialog-aria-label": "ਤਬਦੀਲੀਆਂ ਦੀ ਗਿਣਤੀ ਅਤੇ ਸਮੇਂ ਦੀ ਮਿਆਦ ਦੇ ਮੁਤਾਬਕ ਨਤੀਜਿਆਂ ਨੂੰ ਛਾਣੋ", "rcfilters-date-popup-title": "ਖੋਜ ਕਰਨ ਲਈ ਸਮਾਂ ਮਿਆਦ", "rcfilters-days-title": "ਹਾਲ ਦੇ ਦਿਨਾਂ", "rcfilters-hours-title": "ਹਾਲ ਦੇ ਘੰਟੇਆਂ", "rcfilters-days-show-days": "$1 {{PLURAL:$1|ਦਿਨ}}", "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ਘੰਟਾ|ਘੰਟੇ}}", "rcfilters-highlighted-filters-list": "ਉਜਾਗਰ ਕੀਤਾ: $1", + "rcfilters-quickfilters": "ਸੰਭਾਲੀਆਂ ਹੋਈਆਂ ਛਾਣਨੀਆਂ", + "rcfilters-quickfilters-placeholder-title": "ਅਜੇ ਤੱਕ ਕੋਈ ਛਾਣਨੀਆਂ ਸੰਭਾਲਿਆ ਨਹੀਂ ਗਈਆਂ", + "rcfilters-quickfilters-placeholder-description": "ਆਪਣੀਆਂ ਛਾਣਨੀ ਤਰਜੀਹਾਂ ਨੂੰ ਸੰਭਾਲਣ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਮੁੜ ਵਰਤਣ ਲਈ, ਹੇਠਾਂ ਸਰਗਰਮ ਛਾਣਨੀ ਵਾਲੇ ਖੇਤਰ ਵਿੱਚ ਵਰਕਾ-ਨਿਸ਼ਾਨਦੇਹੀ ਦੇ ਨਿਸ਼ਾਨ 'ਤੇ ਨੱਪੋ", + "rcfilters-savedqueries-defaultlabel": "ਸੰਭਾਲੀਆਂ ਹੋਈਆਂ ਛਾਣਨੀਆਂ", "rcfilters-savedqueries-rename": "ਨਾਂ ਬਦਲੋ", "rcfilters-savedqueries-setdefault": "ਮੂਲ ਵਜੋਂ ਕਾਇਮ ਕਰੋ", "rcfilters-savedqueries-unsetdefault": "ਮੂਲ ਵਜੋਂ ਹਟਾਓ", "rcfilters-savedqueries-remove": "ਮਿਟਾਓ", "rcfilters-savedqueries-new-name-label": "ਨਾਮ", + "rcfilters-savedqueries-new-name-placeholder": "ਛਾਣਨੀ ਦਾ ਟੀਚਾ ਦੱਸੋ", "rcfilters-savedqueries-apply-label": "ਫਿਲਟਰ ਬਣਾਓ", "rcfilters-savedqueries-cancel-label": "ਰੱਦ ਕਰੋ", + "rcfilters-savedqueries-add-new-title": "ਮੌਜੂਦਾ ਛਾਣਨੀ ਤਰਜੀਹਾਂ ਨੂੰ ਸੰਭਾਲੋ", + "rcfilters-savedqueries-already-saved": "ਇਹ ਛਾਣਨੀਆਂ ਪਹਿਲਾਂ ਹੀ ਸੰਭਾਲੀਆਂ ਗਈਆਂ ਹਨ। ਇੱਕ ਨਵੀਂ ਸੰਭਾਲੀ ਹੋਈ ਛਾਣਨੀ ਬਣਾਉਣ ਲਈ ਆਪਣੀਆਂ ਤਰਜੀਹਾਂ ਬਦਲੋ।", + "rcfilters-restore-default-filters": "ਮੂਲ ਛਾਣਨੀਆਂ ਮੁੜ-ਬਹਾਲ ਕਰੋ", + "rcfilters-clear-all-filters": "ਸਾਰੀਆਂ ਛਾਣਨੀਆਂ ਹਟਾਓ/ਸਾਫ਼ ਕਰੋ", "rcfilters-show-new-changes": "$1 ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਵੇਖੋ", + "rcfilters-search-placeholder": "ਛਾਣਨੀ ਤਬਦੀਲੀਆਂ (ਮੇਨੂ ਦੀ ਵਰਤੋ ਕਰੋ ਜਾਂ ਛਾਣਨੀ ਦਾ ਨਾਂ ਲੱਭੋ)", "rcfilters-search-placeholder-mobile": "ਫਿਲਟਰ", "rcfilters-invalid-filter": "ਅਵੈਧ ਫਿਲਟਰ", + "rcfilters-empty-filter": "ਕੋਈ ਸਰਗਰਮ ਛਾਣਨੀਆਂ ਨਹੀਂ ਹਨ। ਸਾਰੇ ਯੋਗਦਾਨ ਵਿਖਾਏ ਜਾ ਰਹੇ ਹਨ।", "rcfilters-filterlist-title": "ਫਿਲਟਰ", "rcfilters-filterlist-whatsthis": "ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦੇ ਹਨ?", "rcfilters-highlightbutton-title": "ਨਤੀਜਿਆਂ ਨੂੰ ਉਜਾਗਰ ਕਰੋ", @@ -1294,6 +1347,8 @@ "rcfilters-highlightmenu-help": "ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਉਜਾਗਰ ਕਰਨ ਲਈ ਇੱਕ ਰੰਗ ਚੁਣੋ", "rcfilters-filterlist-noresults": "ਕੋਈ ਫਿਲਟਰ ਨਹੀਂ ਮਿਲੇ", "rcfilters-noresults-conflict": "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਮਿਲਿਆ ਕਿਉਂਕਿ ਖੋਜ ਮਾਪਦੰਡ ਵਿਵਾਦ ਵਿੱਚ ਹਨ", + "rcfilters-state-message-subset": "ਇਸ ਛਾਣਨੀ ਦਾ ਕੋਈ ਅਸਰ ਨਹੀਂ ਹੁੰਦਾ ਕਿਉਂਕਿ ਇਸਦੇ ਨਤੀਜੇ ਹੇਠ ਲਿਖੀਆਂ, ਵਧੇਰੇ ਵਿਆਪਕ {{PLURAL:$2|ਛਾਣਨੀ|ਛਾਣਨੀਆਂ}} ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ (ਇਸਨੂੰ ਵੱਖਰਾ ਵਿਖਾਉਣ ਲਈ ਜ਼ਾਹਰ ਕਰਕੇ ਵੇਖੋ): $1", + "rcfilters-state-message-fullcoverage": "ਇਸ ਟੋਲੀ ਵਿੱਚ ਸਾਰੀਆਂ ਛਾਣਨੀਆਂ ਦੀ ਚੋਣ ਕਰਨਾ ਕਿਸੇ ਦੀ ਵੀ ਚੋਣ ਨਾ ਕਰਨ ਦੇ ਬਰਾਬਰ ਏ, ਇਸ ਲਈ ਇਸ ਛਾਣਨੀ ਦਾ ਕੋਈ ਅਸਰ ਨਹੀਂ ਹੁੰਦਾ। ਟੋਲੀ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ: $1", "rcfilters-filtergroup-authorship": "ਯੋਗਦਾਨੀ ਲੇਖਕ", "rcfilters-filter-editsbyself-label": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਤਬਦੀਲੀਆਂ", "rcfilters-filter-editsbyself-description": "ਤੁਹਾਡੇ ਆਪਣੇ ਯੋਗਦਾਨ।", @@ -1316,6 +1371,7 @@ "rcfilters-filter-bots-description": "ਸਵੈਚਲਿਤ ਸੰਦ ਵੱਲੋਂ ਕੀਤੇ ਗਏ ਸੋਧ।", "rcfilters-filter-humans-label": "ਮਨੁੱਖੀ (ਬੋਟ ਨਹੀਂ)", "rcfilters-filter-humans-description": "ਮਨੁੱਖੀ ਸੰਪਾਦਕਾਂ ਵੱਲੋਂ ਕੀਤੇ ਸੰਪਾਦਨ।", + "rcfilters-filtergroup-reviewstatus": "ਜਾਇਜ਼ਾ ਸਥਿਤੀ", "rcfilters-filter-reviewstatus-unpatrolled-description": "ਸੋਧਾਂ ਨੂੰ ਹੱਥੀਂ ਜਾਂ ਆਪਣੇ-ਆਪ ਤੌਰ 'ਤੇ ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨੀ ਨਹੀਂ ਲਾਈ ਗਈ।", "rcfilters-filter-reviewstatus-unpatrolled-label": "ਬਗੈਰ ਗਸ਼ਤ ਦੇ", "rcfilters-filter-reviewstatus-manual-description": "ਸੋਧਾਂ ਨੂੰ ਹੱਥੀਂ ਤੌਰ 'ਤੇ ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨੀ ਲਾਈ ਗਈ।", @@ -1349,6 +1405,10 @@ "rcfilters-filter-logactions-label": "ਦਾਖ਼ਲ ਕੀਤੀਆਂ ਕਾਰਵਾਈਆਂ", "rcfilters-filter-logactions-description": "ਪ੍ਰਬੰਧਕੀ ਕਾਰਵਾਈਆਂ, ਸਫ਼ੇ ਹਟਾਉਣਾ, ਚੜ੍ਹਾਉਣਾਂ...", "rcfilters-filter-accountcreations-label": "ਖ਼ਾਤਾ ਬਣਾਉਣਾ", + "rcfilters-filter-accountcreations-description": "ਖਾਤਾ ਬਣਾਉਣ ਲਈ ਦਰਜ ਇੰਦਰਾਜ। ਦਰਜ ਕੀਤੀਆਂ ਗਈਆਂ ਕਾਰਵਾਈਆਂ ਦੀ ਚੋਣ ਲਾਜ਼ਮੀ ਹੈ।", + "rcfilters-hideminor-conflicts-typeofchange-global": "\"ਮਾਮੂਲੀ ਸੋਧ\" ਵਾਲੀ ਛਾਣਨੀ ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵੱਧ \"ਤਬਦੀਲੀ ਦੀ ਕਿਸਮ\" ਵਾਲੀ ਛਾਣਨੀਆਂ ਨਾਲ ਟਕਰਾਉਂਦੀ ਹੈ, ਕਿਉਂਕਿ ਕੁਝ ਕਿਸਮਾਂ ਦੇ ਤਬਦੀਲੀਆਂ ਨੂੰ \"ਮਾਮੂਲੀ\" ਵਜੋਂ ਨਿਸ਼ਾਨਦੇਹੀ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਟਕਰਾਉਣ ਵਾਲੀ ਛਾਣਨੀ ਉੱਪਰ ਸਰਗਰਮ ਛਾਣਨੀਆਂ ਵਾਲੇ ਖੇਤਰ ਵਿੱਚ ਦਰਸਾਈ ਗਈ ਹੈ।", + "rcfilters-hideminor-conflicts-typeofchange": "ਕੁਝ ਕਿਸਮਾਂ ਦੀ ਤਬਦੀਲੀ ਨੂੰ \"ਮਾਮੂਲੀ\" ਵਜੋਂ ਨਿਸ਼ਾਨਦੇਹੀ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਇਸ ਲਈ ਇਹ ਛਾਣਨੀ ਹੇਠ ਲਿਖੀਆਂ \"ਤਬਦੀਲੀ ਦੀ ਕਿਸਮ\" ਵਾਲੀਆਂ ਛਾਣਨੀਆਂ ਨਾਲ ਟਕਰਾਉਂਦਾ ਹੈ: $1", + "rcfilters-typeofchange-conflicts-hideminor": "ਇਹ \"ਤਬਦੀਲੀ ਦੀ ਕਿਸਮ\" ਵਾਲੀ ਛਾਣਨੀ \"ਮਾਮੂਲੀ ਸੋਧ\" ਵਾਲੀ ਛਾਣਨੀ ਨਾਲ ਟਕਰਾਉਂਦੀ ਹੈ। ਕੁਝ ਕਿਸਮਾਂ ਦੀ ਤਬਦੀਲੀ ਨੂੰ \"ਮਾਮੂਲੀ\" ਵਜੋਂ ਨਿਸ਼ਾਨਦੇਹੀ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।", "rcfilters-filtergroup-lastrevision": "ਤਾਜ਼ਾ ਦੁਹਰਾਅ", "rcfilters-filter-lastrevision-label": "ਤਾਜ਼ਾ ਦੁਹਰਾਅ", "rcfilters-filter-lastrevision-description": "ਸਿਰਫ਼ ਇੱਕ ਵਰਕੇ ਵਿੱਚ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਤਬਦੀਲੀ।", @@ -1361,10 +1421,18 @@ "rcfilters-exclude-button-off": "ਚੁਣਿਆ ਨੂੰ ਛੱਡ ਕੇ", "rcfilters-exclude-button-on": "ਚੋਣ ਕੀਤੇ ਨੂੰ ਛੱਡ ਕੇ", "rcfilters-view-tags": "ਟੈਗ ਕੀਤੇ ਸੋਧ", + "rcfilters-view-namespaces-tooltip": "ਨਾਂ-ਥਾਂ ਨਾਲ ਨਤੀਜਿਆਂ ਨੂੰ ਛਾਣੋ", + "rcfilters-view-tags-tooltip": "ਸੋਧ ਟੈਗਾਂ ਦੀ ਵਰਤੋਂ ਨਾਲ ਨਤੀਜਿਆਂ ਨੂੰ ਛਾਣੋ", + "rcfilters-view-return-to-default-tooltip": "ਮੁੱਢਲੀ ਛਾਣਨੀ ਮੇਨੂ 'ਤੇ ਵਾਪਸ ਜਾਓ", "rcfilters-view-tags-help-icon-tooltip": "ਟੈਗ ਕੀਤੇ ਸੋਧਾਂ ਬਾਰੇ ਹੋਰ ਜਾਣੋ", "rcfilters-liveupdates-button-title-off": "ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਜਿਵੇਂ ਹੀ ਵਾਪਰਦੀਆਂ ਹਨ ਉਹਨਾ ਨੂੰ ਵੇਖਾਓ", "rcfilters-watchlist-markseen-button": "ਸਾਰੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵੇਖੀਆਂ ਗਇਆਂ ਵੱਲੋਂ ਨਿਸ਼ਾਨ ਲਾਓ", "rcfilters-watchlist-edit-watchlist-button": "ਤੁਹਾਡੇ ਵੇਖੇ ਗਏ ਵਰਕਿਆਂ ਦੀ ਸੂਚੀ ਨੂੰ ਸੋਧੋ", + "rcfilters-watchlist-showupdated": "ਤਬਦੀਲੀਆਂ ਹੋਣ ਤੋਂ ਬਾਅਦ ਤੁਹਾਡੇ ਵੱਲੋਂ ਨਹੀਂ ਵੇਖੇ ਗਏ ਵਰਕਿਆਂ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਠੋਸ ਨਿਸ਼ਾਨਾਂ ਦੇ ਨਾਲ <strong>ਮੋਟੇ ਅੱਖਰਾਂ</strong> ਵਿੱਚ ਹਨ।", + "rcfilters-filter-showlinkedfrom-label": "ਤੋਂ ਜੋੜੇ ਗਏ ਵਰਕਿਆਂ 'ਤੇ ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ", + "rcfilters-filter-showlinkedfrom-option-label": "ਚੁਣੇ ਗਏ ਵਰਕੇ ਤੋਂ <strong>ਜੋੜੇ ਗਏ ਵਰਕੇ</strong>", + "rcfilters-filter-showlinkedto-label": "ਨਾਲ ਜੁੜੇ ਸਫ਼ਿਆਂ 'ਤੇ ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ", + "rcfilters-filter-showlinkedto-option-label": "ਚੁਣੇ ਗਏ ਵਰਕੇ ਨਾਲ <strong>ਜੋੜੇ ਗਏ ਵਰਕੇ</strong>", "rcfilters-target-page-placeholder": "ਇੱਕ ਵਰਕੇ ਦਾ ਨਾਂ (ਜਾਂ ਸ਼੍ਰੇਣੀ) ਦਾਖਲ ਕਰੋ", "rcfilters-allcontents-label": "ਸਾਰੀਆਂ ਸਮੱਗਰੀਆਂ", "rcfilters-alldiscussions-label": "ਸਾਰੀਆਂ ਚਰਚਾਵਾਂ", @@ -1389,6 +1457,7 @@ "rcshowhidemine": "ਮੇਰੀਆਂ ਤਬਦੀਲੀਆਂ $1", "rcshowhidemine-show": "ਵੇਖੋ", "rcshowhidemine-hide": "ਓਹਲੇ", + "rcshowhidecategorization": "$1 ਵਰਕੇ ਦੀ ਸ਼੍ਰੇਣੀਬੰਦੀ", "rcshowhidecategorization-show": "ਵਿਖਾਓ", "rcshowhidecategorization-hide": "ਲੁਕਾਉ", "rclinks": "ਪਿਛਲੇ $2 ਦਿਨਾਂ ਵਿੱਚ ਹੋਈਆਂ $1 ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ", @@ -1418,7 +1487,11 @@ "uploadbtn": "ਫ਼ਾਈਲ ਚੜ੍ਹਾਉ", "reuploaddesc": "ਅੱਪਲੋਡ ਫਾਰਮ ਉੱਤੇ ਜਾਓ।", "upload-refresh": "ਮੁੜ-ਤਾਜ਼ਾ ਕਰੋ", + "upload-progress-queued": "ਉਤਾਰਾ ਸ਼ੁਰੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਮੁੜ ਜਾਂਚ ਕਰਨ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਤਾਜ਼ਾ-ਕਰੋ ਬਟਨ ਨੱਪੋ।", + "upload-progress-downloading": "ਤਸਵੀਰ ਲਾਹੀ ਜਾ ਰਹੀ ਹੈ। ਮੁੜ ਜਾਂਚ ਕਰਨ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਤਾਜ਼ਾ-ਕਰੋ ਬਟਨ ਨੱਪੋ।", + "upload-progress-processing": "ਤਸਵੀਰ ਤੇ ਕਾਰਵਾਈ ਹੋ ਰਹੀ ਹੈ। ਮੁੜ ਜਾਂਚ ਕਰਨ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਤਾਜ਼ਾ-ਕਰੋ ਬਟਨ ਨੱਪੋ।", "upload-tryagain": "ਬਦਲਿਆ ਹੋਇਆ ਫ਼ਾਈਲ ਵੇਰਵਾ ਪੇਸ਼ ਕਰੋ", + "upload-tryagain-nostash": "ਮੁੜ-ਚੜਾਈ ਗਈ ਫਾਈਲ ਅਤੇ ਸੋਧੀ ਹੋਈ ਜਾਣਕਾਰੀ ਜਮ੍ਹਾਂ ਕਰੋ।", "uploadnologin": "ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ", "uploadnologintext": "ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।", "uploaderror": "ਅੱਪਲੋਡ ਗਲਤੀ", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index b18f1750df8d..65257bb1a1ab 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -2598,9 +2598,11 @@ "block-confirm-yes": "Tak", "block-confirm-no": "Nie", "block-submit": "Zatwierdź", - "block-success": "[[Special:Contributions/$1|$1]] {{GENDER:$1|został zablokowany|została zablokowana}}. Przejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.", + "block-success": "Konto [[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|dyskusja]]) zostało zablokowane.\nPrzejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.", "block-user-active-blocks": "Aktywne blokady", "block-user-no-active-blocks": "Nie znaleziono aktywnych blokad", + "block-user-active-range-blocks": "Aktywne blokady zakresów", + "block-user-no-active-range-blocks": "Nie znaleziono aktywnych blokad zakresów", "block-user-previous-blocks": "Rejestr blokad", "block-user-no-previous-blocks": "Nie znaleziono wcześniejszych blokad", "block-user-suppressed-blocks": "Rejestr ukrytych blokad", @@ -2621,6 +2623,7 @@ "block-javascript-required": "Do korzystania z interfejsu {{#special:Block}} wymagana jest obsługa JavaScriptu.", "block-removed": "Blokada została usunięta.", "block-reblock-multi-legacy": "Użytkownik ma kilka trwających blokad, w związku z czym nie może być zablokowany ponownie z użyciem tego formularza.", + "block-view-target": "Zobacz", "unblockip": "Odblokuj użytkownika", "unblockiptext": "Użyj poniższego formularza, by przywrócić możliwość edycji z wcześniej zablokowanego adresu IP lub użytkownikowi.", "unblock-target": "Odblokuj cel", @@ -3286,6 +3289,7 @@ "version-hooks": "Haki (ang. hooks)", "version-parser-extensiontags": "Znaczniki parsera pochodzące z rozszerzeń", "version-parser-function-hooks": "Funkcje parsera", + "version-parsoid-modules": "Moduły rozszerzeń Parsoid", "version-hook-name": "Nazwa haka (ang. hook name)", "version-hook-subscribedby": "Zapotrzebowany przez", "version-no-ext-name": "[bez nazwy]", @@ -4059,6 +4063,7 @@ "skin-action-move": "Przenieś", "skin-json-warning": "@UWAGA", "skin-json-warning-message": "To nie jest API, służy tylko w celu debugowania! Nie wykorzystuj tego interfejsu w gadżetach ani kodzie na funkcjonującej wiki.", + "parsoid-async-not-ready-fallback": "Zawartość nie jest gotowa", "parsoid-stash-rate-limit-error": "Przechowywanie nie powiodło się, ponieważ przekroczono limit przepustowości. Spróbuj ponownie później.", "parsoid-resource-limit-exceeded": "Przekroczono limit zasobów Parsoida: $1", "parsoid-revision-access": "Parsoid nie może uzyskać dostępu do wersji: $1", diff --git a/languages/i18n/preferences/crh-latn.json b/languages/i18n/preferences/crh-latn.json index bd3732cbe246..c79e9ff13dec 100644 --- a/languages/i18n/preferences/crh-latn.json +++ b/languages/i18n/preferences/crh-latn.json @@ -21,9 +21,11 @@ "prefs-info": "Esas malümat", "username": "{{GENDER:$1|Qullanıcı adı}}:", "prefs-memberingroups": "{{GENDER:$2|Azası}} olğan {{PLURAL:$1|gruppa|gruppalar}}:", + "prefs-memberingroups-type": "$1", "group-membership-link-with-expiry": "$1 ($2 tarihına qadar)", "prefs-edits": "Deñiştirmeler sayısı:", "prefs-registration": "Qaydiyet tarihı:", + "prefs-registration-date-time": "$1", "yourrealname": "Kerçek adıñız:", "prefs-help-realname": "Kerçek adıñız mecburiy degildir.\nEger bildirseñiz, saifelerdeki deñiştirmelerni kimniñ yapqanını köstermek içün qullanıla bilir.", "yourpassword": "Paroliñiz", @@ -74,7 +76,7 @@ "prefs-help-email": "E-mail (mecburiy degildir). E-mail adresi bildirilgen olsa, paroliñizni unutsañız, sizge yañı bir parol yollamaq içün qullanılır.", "prefs-help-email-required": "E-mail adresi lâzim.", "prefs-help-email-others": "Ayrıca, qullanıcı ve ya muzakere saifeñizdeki bir bağlantı vastasınen başqalarına siznen e-mail ile bağlanmağa imkân bermege de saylay bilirsiñiz.\nBaşqa qullanıcılar siznen bağlanğanda e-mail adresiñiz açıqlanmaz.", - "tog-requireemail": "Parol sıfırlama mektübini tek e-mail adresi ve qullanıcı adı bildirilgen taqdirde yolla.", + "tog-requireemail": "Parol sıfırlav mektübini tek e-mail adresi ve qullanıcı adı bildirilgen taqdirde yolla.", "prefs-help-requireemail": "Bu gizlilikni arttıra ve istenilmegen e-mail mektüplerniñ yollanmamasına yardım ete.", "noemailprefs": "Bu funktsiyalarnıñ çalışması içün sazlamalarıñızda bir e-mail adresi bildiriñiz.", "emailnotauthenticated": "E-mail adresiñiz alâ daa tasdıqlanmadı.\nAşağıdaki funktsiyalarınıñ iç biri içün e-mail yollanmaycaq.", @@ -83,6 +85,7 @@ "emailauthenticated": "E-mail adresiñiz $2 $3 tarihında tasdıqlandı.", "allowemail": "Başqa qullanıcılar maña e-mail mektüpleri yollap olsun", "email-allow-new-users-label": "Yañı qullanıcılar da maña e-mail mektüpleri yollap olsun", + "prefs-help-email-allow-new-users": "Bu optsiyanı saylap [[{{MediaWiki:grouppage-autoconfirmed}}|avtomatik tasdıqlanğan]] olmağan qullanıcılarğa sizge e-mail yollamaq imkânını berirsiñiz.", "tog-ccmeonemails": "Diger qullanıcılarğa yollağan mektüplerimniñ kopiyalarını maña da yolla", "email-mutelist-label": "Şu qullanıcılarğa maña e-mail yollamaq ruhset etme:", "tog-enotifwatchlistpages": "Közetüv cedvelimdeki bir saife ya da fayl deñiştirilgende maña e-mail yolla", diff --git a/languages/i18n/preferences/nan-latn-pehoeji.json b/languages/i18n/preferences/nan-latn-pehoeji.json index b74fedbce7c6..25e9feacc8b6 100644 --- a/languages/i18n/preferences/nan-latn-pehoeji.json +++ b/languages/i18n/preferences/nan-latn-pehoeji.json @@ -16,7 +16,7 @@ "yourpassword": "Lí ê bi̍t-bé:", "password-name-match": "Lí--ê bi̍t-bé ài kap lí--ê iōng-chiá-miâ bô kāng.", "tog-prefershttps": "Teng-ji̍p ê sî lóng ēng an-choân liân-chiap", - "yourlanguage": "Kài-bīn gú-giân:", + "yourlanguage": "Gí-giân:", "prefs-signature": "Chhiam-miâ", "tog-oldsig": "Lí kì-sêng ê chhiam-miâ:", "yournick": "Lí ê sió-miâ (chhiam-miâ iōng):", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index a59b7947d043..db4804a8a803 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -2032,7 +2032,7 @@ "shortpages": "Páginas curtas", "longpages": "Páginas longas", "deadendpages": "Páginas sem saída", - "deadendpagestext": "As seguintes páginas não contêm links para outras páginas no wiki {{SITENAME}}.", + "deadendpagestext": "As seguintes páginas não contêm ligações para outras páginas na wiki {{SITENAME}}.", "protectedpages": "Páginas protegidas", "protectedpages-filters": "Filtros:", "protectedpages-indef": "Proteções infinitas apenas", diff --git a/languages/i18n/ro.json b/languages/i18n/ro.json index bc000a051059..6d44a503d3c8 100644 --- a/languages/i18n/ro.json +++ b/languages/i18n/ro.json @@ -364,6 +364,7 @@ "cannotcreateaccount-text": "Crearea directă de conturi nu este activată pe acest wiki.", "yourdomainname": "Domeniul dumneavoastră:", "password-change-forbidden": "Nu puteți schimba parole pe acest wiki.", + "error-temporary-accounts-cannot-have-passwords": "Conturile temporare nu pot avea parole.", "externaldberror": "A fost fie o eroare de bază de date pentru o autentificare extenă sau nu aveți permisiunea să actualizați contul extern.", "login": "Autentificare", "login-security": "Verificați-vă identitatea", @@ -590,7 +591,7 @@ "preview": "Previzualizare", "showpreview": "Previzualizare", "showdiff": "Afișare diferențe", - "tempuser-expired-link-tooltip": "Acest cont a expirat", + "tempuser-expired-link-tooltip": "Acest cont temporar a expirat", "temp-user-banner-description": "Folosiți un cont temporar", "temp-user-banner-tooltip-label": "Mai multe informații despre conturile temporare", "temp-user-banner-tooltip-title": "Cont temporar", @@ -642,7 +643,8 @@ "userpage-userdoesnotexist": "Contul de utilizator „<nowiki>$1</nowiki>” nu este înregistrat.\nAsigurați-vă că doriți să creați/modificați această pagină.", "userpage-userdoesnotexist-view": "Contul de utilizator „$1” nu este înregistrat pe acest wiki.", "blocked-notice-logextract": "{{GENDER:$1|Acest utilizator|Această utilizatoare|Acest utilizator}} este momentan {{GENDER:$1|blocat|blocată|blocat}}.\nUltima intrare în jurnalul blocărilor este afișată mai jos pentru referință:", - "clearyourcache": "<strong>Notă:</strong> După publicare, trebuie să treceți peste memoria cache a navigatorului pentru a putea vedea modificările:\n* <strong>Firefox / Safari:</strong> Țineți apăsat pe <em>Shift</em> în timp ce faceți clic pe <em>Reîncărcare</em> ori apăsați <em>Ctrl-F5</em> sau <em>Ctrl-R</em> (<em>⌘-R</em> pe un sistem Mac);\n* <strong>Google Chrome:</strong> Apăsați <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> pe un sistem Mac);\n* <strong>Internet Explorer / Edge:</strong> Țineți apăsat pe <em>Ctrl</em> în timp ce faceți clic pe ''Reîmprosptare'' sau apăsați <em>Ctrl-F5</em>;\n* <strong>Opera:</strong> Apăsați <em>Ctrl-F5</em>.", + "blocked-notice-list-link": "Vezi lista de blocări", + "clearyourcache": "<strong>Notă:</strong> După publicare, trebuie să curățați memoria cache a navigatorului pentru a putea vedea modificările:\n* <strong>Firefox / Safari:</strong> Țineți apăsat pe <em>Shift</em> în timp ce faceți clic pe <em>Reîncărcare</em> ori apăsați <em>Ctrl-F5</em> sau <em>Ctrl-R</em> (<em>⌘-R</em> pe un sistem Mac);\n* <strong>Google Chrome:</strong> Apăsați <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> pe un sistem Mac);\n* <strong>Internet Explorer / Edge:</strong> Țineți apăsat pe <em>Ctrl</em> în timp ce faceți clic pe ''Reîmprosptare'' sau apăsați <em>Ctrl-F5</em>;\n* <strong>Opera:</strong> Apăsați <em>Ctrl-F5</em>.", "usercssyoucanpreview": "<strong>Sfat:</strong> Folosiți butonul „{{int:showpreview}}” pentru a testa noul CSS înainte de a-l publica.", "userjsonyoucanpreview": "<strong>Sfat:</strong>''' Folosiți butonul „{{int:showpreview}}” pentru a testa noul JSON înainte de a-l publica.", "userjsyoucanpreview": "<strong>Sfat:</strong> Folosiți butonul „{{int:showpreview}}” pentru a testa noul JavaScript înainte de a-l publica.", @@ -766,6 +768,8 @@ "unstrip-size-warning": "Limita de dimensiune delimitată depășită ($1)", "unstrip-size-category": "Pagini în care este depășită limita de dimensiune de fixare", "unstrip-size-category-desc": "Pagina depășește limita de adâncime a înlocuirii funcțiilor parser.", + "bad-language-code-category": "Pagini cu coduri de limbă greșite", + "bad-language-code-category-desc": "Această pagină conține un <code><nowiki>{{#dir}}</nowiki></code> cu un cod de limbă greșit.", "converter-manual-rule-error": "Eroare detectată în regula manuală de conversie a limbii", "undo-success": "Editarea poate fi anulată. \nVă rugăm să verificați comparația de dedesubt pentru a verifica că asta este ceea ce vreți să faceți, iar apoi publicați schimbările de mai jos pentru a finaliza anularea editării.", "undo-failure": "Modificarea nu poate fi reversibilă datorită conflictului de modificări intermediare.", diff --git a/languages/i18n/sk.json b/languages/i18n/sk.json index f23680073321..64dc84757985 100644 --- a/languages/i18n/sk.json +++ b/languages/i18n/sk.json @@ -61,7 +61,7 @@ "subcategories": "Podkategórie", "category-media-header": "Multimediálne súbory v kategórii „$1“", "category-empty": "''Táto kategória momentálne neobsahuje články ani multimediálne súbory.''", - "hidden-categories": "{{PLURAL:$1|Skrytá kategória|Skryté kategórie|Skrytých kategórií}}", + "hidden-categories": "{{PLURAL:$1|Skrytá kategória|Skryté kategórie}}", "hidden-category-category": "Skryté kategórie", "category-subcat-count": "{{PLURAL:$2|Táto kategória má nasledovnú podkategóriu.|Táto kategória má {{PLURAL:$1|nasledovnú podkategóriu|nasledovné $1 podkategórie|nasledovných $1 podkategórií}} z $2 celkom.}}", "category-subcat-count-limited": "Táto kategória má {{PLURAL:$1|nasledovnú podkategóriu|nasledovné $1 podkategórie|nasledovných $1 podkategórií}}.", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index ca56213f1138..fdad2fd1f8b4 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -377,7 +377,7 @@ "virus-scanfailed": "skanning misslyckades (kod $1)", "virus-unknownscanner": "okänt antivirusprogram:", "logouttext": "<strong>Du är nu utloggad.</strong>\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan det se ut som att du fortfarande är inloggad.", - "logouttext-for-temporary-account": "<strong>Du är nu utloggad från ditt temporära konto.</strong>\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan det se ut som att du fortfarande är inloggad.", + "logouttext-for-temporary-account": "<strong>Du är nu utloggad från ditt tillfälliga konto.</strong>\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan det se ut som att du fortfarande är inloggad.", "logging-out-notify": "Du loggas ut. Var god vänta.", "logout-failed": "Kan inte logga ut nu: $1", "cannotlogoutnow-title": "Kan inte logga ut nu", @@ -452,7 +452,7 @@ "nocookieslogin": "{{SITENAME}} använder kakor för att logga in användare. Du har stängt av kakor i din webbläsare. Försök igen med stöd för kakor aktiverat.", "nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat kakor, ladda om denna sida och försök igen.", "createacct-loginerror": "Kontot skapades men du kunde inte loggas in automatiskt. Var god [[Special:UserLogin|logga in manuellt]].", - "createacct-temp-warning": "Redigeringarna du gjort med ditt temporära konto <strong> $1 </strong> kommer inte att överföras till ditt permanenta.", + "createacct-temp-warning": "Redigeringarna du gjort med ditt tillfälliga konto <strong> $1 </strong> kommer inte att överföras till ditt permanenta.", "noname": "Du har angett ett ogiltigt användarnamn.", "userlogin-authpopup-loggingin-title": "Loggar in…", "userlogin-authpopup-loggingin-body": "Ett popup-fönster borde ha öppnats. Om du inte kan se det kan vi försöka öppna det igen. Eller så kan du [$1 logga på det gamla sättet].", @@ -632,19 +632,19 @@ "preview": "Förhandsgranskning", "showpreview": "Visa förhandsgranskning", "showdiff": "Visa ändringar", - "tempuser-expired-link-tooltip": "Detta konto har löpt ut.", - "temp-user-banner-description": "Du använder ett temporärt konto", - "temp-user-banner-tooltip-label": "Mer information om temporära konton", - "temp-user-banner-tooltip-title": "Temporärt konto", - "temp-user-banner-tooltip-description-expiration-soon": "<strong>Ditt temporära konto löper ut om {{PLURAL:$1|1 dag|$1 dagar}}.</strong> När den upphör kommer ett nytt att skapas nästa gång du gör en redigering utan att logga in.", - "temp-user-banner-tooltip-description-expiration-soon-day": "<strong>Ditt temporära konto löper ut om mindre än en dag.</strong> När det upphör kommer ett nytt att skapas nästa gång du gör en redigering utan att logga in.", + "tempuser-expired-link-tooltip": "Tillfälligt konto har löpt ut", + "temp-user-banner-description": "Du använder ett tillfälligt konto", + "temp-user-banner-tooltip-label": "Mer information om tillfälliga konton", + "temp-user-banner-tooltip-title": "Tillfälligt konto", + "temp-user-banner-tooltip-description-expiration-soon": "<strong>Ditt tillfälliga konto löper ut om {{PLURAL:$1|1 dag|$1 dagar}}.</strong> När den upphör kommer ett nytt att skapas nästa gång du gör en redigering utan att logga in.", + "temp-user-banner-tooltip-description-expiration-soon-day": "<strong>Ditt tillfälliga konto löper ut om mindre än en dag.</strong> När det upphör kommer ett nytt att skapas nästa gång du gör en redigering utan att logga in.", "temp-user-banner-tooltip-description-learn-more": "Det här tillfälliga kontot skapades efter att en redigering gjordes utan ett konto på den här webbläsaren och enheten. [[mw:Help:Temporary_accounts|Läs mer]].", "temp-user-banner-tooltip-description-login": "[[Special:UserLogin|Logga in]] eller [[Special:CreateAccount|skapa ett konto]] för att få erkännande för framtida redigeringar och tillgång till andra funktioner.", "blankarticle": "<strong>Varning:</strong> Sidan du skapar är tom.\nOm du klickar på ”$1” igen kommer sidan skapas utan något innehåll.", "anoneditwarning": "<strong>Varning:</strong> Du är inte inloggad. Din IP-adress kommer att vara publikt synlig om du gör några redigeringar. Om du <strong>[$1 loggar in]</strong> eller <strong>[$2 skapar ett konto]</strong> kommer dina redigeringar att tillskrivas ditt användarnamn, tillsammans med andra fördelar.", - "autocreate-edit-warning": "<strong>Varning:</strong> Du är inte inloggad. När du gör en redigering kommer ett temporärt konto skapas åt dig. [[{{MediaWiki:tempuser-helppage}}|Läs mer]]. <strong>[$1 Logga in]</strong> eller <strong>[$2 skapa ett konto]</strong> för att fortsätta få aviseringar efter detta konto upphör att gälla samt för att komma åt andra funktioner.", + "autocreate-edit-warning": "<strong>Varning:</strong> Du är inte inloggad. När du gör en redigering kommer ett tillfälliga konto skapas åt dig. [[{{MediaWiki:tempuser-helppage}}|Läs mer]]. <strong>[$1 Logga in]</strong> eller <strong>[$2 skapa ett konto]</strong> för att fortsätta få aviseringar efter detta konto upphör att gälla samt för att komma åt andra funktioner.", "anonpreviewwarning": "<em>Du är inte inloggad. Om du publicerar kommer din IP-adress registreras på denna sidas redigeringshistorik.</em>", - "autocreate-preview-warning": "<em>Du är inte inloggad. När du gör en redigering kommer ett temporärt konto skapas åt dig. [[{{MediaWiki:tempuser-helppage}}|Läs mer]].</em>", + "autocreate-preview-warning": "<em>Du är inte inloggad. När du gör en redigering kommer ett tillfälliga konto skapas åt dig. [[{{MediaWiki:tempuser-helppage}}|Läs mer]].</em>", "missingsummary": "<strong>Påminnelse:</strong> Du har inte skrivit någon redigeringskommentar.\nOm du klickar på ”$1” igen kommer din redigering att publiceras utan en sådan.", "selfredirect": "<strong>Varning:</strong> Du omdirigerar denna sida till sig själv.\nDu kanske angav fel mål för din omdirigering, eller redigerar fel sida.\nOm du klickar på ”$1” igen kommer omdirigeringen att skapas trots detta.", "edit-constraint-brokenredirect": "<strong>Varning:</strong> Du omdirigerar den här sidan till en sida som inte finns.\nDu kan ha angivit fel omdirigeringsmål.\nOm du klickar på \"$1\" igen kommer omdirigeringen att skapas ändå.", @@ -685,7 +685,7 @@ "userpage-userdoesnotexist": "Användarkontot ”$1” är inte registrerat på denna wiki. Tänk efter om du vill skapa/redigera den här sidan.", "userpage-userdoesnotexist-view": "Användarkontot ”$1” är inte registrerat på denna wiki.", "blocked-notice-logextract": "{{GENDER:$1|Användaren}} är blockerad.\nOrsaken till senaste blockeringen kan ses nedan:", - "blocked-notice-logextract-multi": "{{GENDER:$1|Användaren}} har blockerats $2 gånger.\nDen senaste posten i blockeringsloggen visas nedan som referens:", + "blocked-notice-logextract-multi": "{{GENDER:$1|Användaren}} har blockerats $2 {{PLURAL:$2|gång|gånger}}.\nDen senaste posten i blockeringsloggen visas nedan som referens:", "blocked-notice-list-link": "Visa blockeringslista", "clearyourcache": "<strong>OBS:</strong> Efter du har publicerat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.\n* <strong>Firefox / Safari:</strong> Håll ned <em>Skift</em> och klicka på <em>Uppdatera sidan</em> eller tryck <em>Ctrl-F5</em> eller <em>Ctrl-R</em> (<em>⌘-R</em> på Mac)\n* <strong>Google Chrome:</strong> Tryck <em>Ctrl-Skift-R</em> (<em>⌘-Skift-R</em> på Mac)\n* <strong>Edge</strong> Håll ned <em>Ctrl</em> och klicka på <em>Uppdatera</em> eller tryck <em>Ctrl-F5</em>.\n* <strong>Opera:</strong> Tryck <em>Ctrl-F5</em>.", "usercssyoucanpreview": "<strong>Tips:</strong> Använd knappen ”{{int:showpreview}}” för att testa din nya CSS innan du publicerar.", @@ -759,7 +759,7 @@ "postedit-confirmation-restored": "Sidan har [[Special:Diff/$2|återställts]].", "postedit-confirmation-saved": "[[Special:Diff/$2|Din redigering]] sparades.", "postedit-confirmation-published": "[[Special:Diff/$2|Din ändring]] publicerades.", - "postedit-temp-created-label": "Temporärt konto", + "postedit-temp-created-label": "Tillfälligt konto", "postedit-temp-created": "Ett [[$2|automatiskt genererat kont]]o har skapats åt dig genom att lägga till en kaka i din webbläsare. För att välja ett eget namn och få fler funktioner bör du överväga att [$1 skapa ett konto].", "edit-already-exists": "Sidan kunde inte skapas.\nDen finns redan.", "defaultmessagetext": "Standardtext för meddelande", @@ -1107,7 +1107,7 @@ "userrights-cannot-shorten-expiry": "Du kan inte flytta fram förfallotiden för medlemskapet i gruppen ”$1”. Endast användare med behörighet att lägga till och ta bort denna grupp kan flytta fram förfallodatum.", "userrights-no-tempuser": "Tillfälliga användare kan inte läggas till i grupper.", "userrights-no-group": "Tillfälliga användare har inte grupper.", - "userrights-cross-wiki-assignment-for-reserved-name": "Du kan inte tilldela grupper på en icke-lokal wiki för ett användarnamn som systemet för temporära konton har reserverat i syfte att förhindra temporära användare från att tilldelas grupper.", + "userrights-cross-wiki-assignment-for-reserved-name": "Du kan inte tilldela grupper på en icke-lokal wiki för ett användarnamn som systemet för tillfälliga konton har reserverat i syfte att förhindra tillfälliga användare från att tilldelas grupper.", "userrights-conflict": "Konflikt vid ändringar av användarrättigheter! Var god granska och bekräfta dina ändringar.", "group": "Grupp:", "group-user": "Användare", @@ -1860,7 +1860,7 @@ "filedelete-reason-dropdown": "*Vanliga anledningar till radering\n** Upphovsrättsbrott\n** Dubblettfil", "filedelete-edit-reasonlist": "Redigera anledningar för radering", "filedelete-edit-reasonlist-suppress": "Redigera anledningar till censurering", - "filedelete-maintenance": "Radering och återställning av filer har tillfälligt avaktiverats under underhåll.", + "filedelete-maintenance": "Radering och återställning av filer har tillfälligt inaktiverats vid underhåll.", "filedelete-maintenance-title": "Kan inte radera filen", "mimesearch": "MIME-sökning", "mimesearch-summary": "Denna sidan gör det möjligt att filtrera filer via dess MIME-typ.\nIndata: contenttype/subtype eller contenttype/*, t.ex. <code>image/jpeg</code>.", @@ -1988,7 +1988,7 @@ "listusers": "Användarlista", "listusers-editsonly": "Visa endast användare som redigerat", "listusers-temporarygroupsonly": "Visa endast användare i tillfälliga användargrupper", - "listusers-temporaryaccountsonly": "Visa endast temporära konton", + "listusers-temporaryaccountsonly": "Visa endast tillfälliga konton", "listusers-creationsort": "Sortera efter datum skapat", "listusers-desc": "Sortera i fallande ordning", "usereditcount": "$1 {{PLURAL:$1|redigering|redigeringar}}", @@ -2450,7 +2450,7 @@ "blanknamespace": "(Huvudnamnrymden)", "contributions": "Användarbidrag", "tool-link-contributions": "{{GENDER:$1|Användarbidrag}}", - "contributions-title": "Användarbidrag av $1", + "contributions-title": "{{GENDER:$2|Användarbidrag}} av $1", "contributions-title-for-ip-when-temporary-accounts-enabled": "Äldre IP-bidrag för $1", "contribute-title": "Användarbidrag", "mycontris": "Bidrag", @@ -2477,8 +2477,8 @@ "sp-contributions-blocked-notice-partial": "Denna {{GENDER:$1|användare}} är delvis blockerad just nu.\nDen senaste blockeringsloggsposten visas nedan för referens:", "sp-contributions-blocked-notice-anon": "Denna IP-adress är för närvarande blockerad.\nDen senaste posten i blockeringsloggen visas nedan som referens:", "sp-contributions-blocked-notice-anon-partial": "Denna IP-adress är för närvarande delvist blockerad.\nDen senaste posten i blockeringsloggen visas nedan som referens:", - "sp-contributions-blocked-notice-multi": "{{GENDER:$1|Användaren}} har blockerats $2 gånger.\nDen senaste posten i blockeringsloggen visas nedan som referens:", - "sp-contributions-blocked-notice-anon-multi": "Denna IP-adress har blockerats $2 gånger.\nDen senaste posten i blockeringsloggen visas nedan som referens:", + "sp-contributions-blocked-notice-multi": "{{GENDER:$1|Användaren}} har blockerats $2 {{PLURAL:$2|gång|gånger}}.\nDen senaste posten i blockeringsloggen visas nedan som referens:", + "sp-contributions-blocked-notice-anon-multi": "Denna IP-adress har blockerats $2 {{PLURAL:$2|gång|gånger}}.\nDen senaste posten i blockeringsloggen visas nedan som referens:", "sp-contributions-search": "Sök efter användarbidrag", "sp-contributions-username": "IP-adress eller användarnamn:", "sp-contributions-toponly": "Visa endast aktuella sidversioner", @@ -2512,6 +2512,7 @@ "block": "Blockera användare", "block-manage-blocks": "Hantera blockeringar", "unblock": "Upphäv blockering av användare", + "unblock-error-multiblocks": "Använd [[Special:Block/$1]] för att hantera flera blockeringar.", "changeblockip": "Ändra blockering", "block-cancel": "Avbryt", "block-create": "Lägg till blockering", @@ -2556,11 +2557,13 @@ "ipb-blocklist": "Visa gällande blockeringar", "ipb-blocklist-contribs": "Bidrag från {{GENDER:$1|$1}}", "ipb-blocklist-duration-left": "$1 kvar", + "block-added-message": "Blockering lades till", + "block-updated-message": "Blockering uppdaterades", "block-actions": "Blockeringstyp:", "block-change-visibility": "Ändra synlighet", "block-details": "Blockeringsdetaljer", "block-details-description": "Använd dessa alternativ för att blockera målet från att utföra andra åtgärder, förutom att redigera.", - "block-expiry": "Varaktighet:", + "block-expiry": "Varaktighet", "block-expiry-preset": "Förinställd varaktighet", "block-expiry-preset-placeholder": "Välj en varaktighet", "block-expiry-custom": "Anpassad varaktighet", @@ -2571,12 +2574,13 @@ "block-expiry-custom-months": "månader", "block-expiry-custom-years": "år", "block-expiry-datetime": "Specifikt datum och tid", - "block-options": "Ytterligare alternativ:", - "block-reason": "Anledning:", + "block-options": "Ytterligare alternativ", + "block-reason": "Anledning", "block-reason-help": "Hänvisa exempelvis till särskilda sidor som vandaliserades", "block-reason-other": "Ytterligare eller annan anledning", "block-confirm-yes": "Ja", "block-confirm-no": "Nej", + "block-submit": "Skicka", "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] har blockerats. Se [[Special:BlockList|blockeringslistan]] för att granska blockeringar.", "block-user-active-blocks": "Aktiva blockeringar", "block-user-no-active-blocks": "Inga aktiva blockeringar hittades", @@ -2599,6 +2603,7 @@ "block-removal-confirm-no": "Avbryt", "block-javascript-required": "JavaScript krävs för att använda gränssnittet i Special:Blockera.", "block-removed": "Blockering har tagits bort.", + "block-reblock-multi-legacy": "Denna användare har redan blockerats flera gånger och kan inte blockeras igen med detta formulär.", "unblockip": "Ta bort blockering av användare/IP-adress", "unblockiptext": "Använd formuläret nedan för att ta bort blockeringen av en IP-adress.", "unblock-target": "Upphäv blockering på målet", @@ -2623,9 +2628,10 @@ "blocklist-tempblocks": "Dölj tillfälliga blockeringar", "blocklist-indefblocks": "Dölj otydliga blockeringar", "blocklist-addressblocks": "Dölj enskilda IP-blockeringar", - "blocklist-tempuserblocks": "Dölj blockeringar av temporära användare", + "blocklist-tempuserblocks": "Dölj blockeringar av tillfälliga användare", "blocklist-type": "Typ:", "blocklist-type-header": "Typ", + "blocklist-actions-header": "Åtgärder", "blocklist-type-opt-all": "Alla", "blocklist-type-opt-sitewide": "Hela webbplatsen", "blocklist-type-opt-partial": "Delvist", @@ -4003,7 +4009,7 @@ "deflate-invaliddeflate": "Innehåll som tillhandahålls är inte helt komprimerat", "unprotected-js": "Av säkerhetsskäl kan inte JavaScript läsas in från oskyddade sidor. Skapa endast JavaScript i namnrymden MediaWiki: eller som en användarundersida.", "userlogout-continue": "Vill du logga ut?", - "userlogout-temp": "Är du säker på att du vill logga ut? Det kommer inte finnas något sätt att logga tillbaka in på ditt temporära konto.", + "userlogout-temp": "Är du säker på att du vill logga ut? Det kommer inte finnas något sätt att logga tillbaka in på ditt tillfälliga konto.", "paramvalidator-baduser": "\"$2\" är ett ogiltigt värde för användarparametern <var>$1</var>.", "paramvalidator-help-type-user": "Typ: {{PLURAL:$1|1=användare|2=lista över användare}}, {{PLURAL:$3|genom|genom något av}} $2", "paramvalidator-help-type-user-subtype-name": "användarnamn", @@ -4041,7 +4047,8 @@ "newpages-showhide-redirect": "$1 omdirigeringar", "newpages-showhide-registered": "$1 registrerade användare", "restsandbox": "Sandlåda för REST", - "restsandbox-text": "Denna sida tillhandahåller en frågebyggare för REST-API:er. Observera att API-anrop kommer att interagera direkt med wiki-innehåll.", + "restsandbox-text": "Använd den här sidan för att experimentera med MediaWikis REST API:er. API-anrop som görs via sandlådans gränssnitt interagerar med aktuellt wikiinnehåll och kan ändra själva wikin. Se [https://www.mediawiki.org/wiki/API:REST_API API-dokumentationen] för ytterligare information om hur API används.", + "restsandbox-disclaimer": "Har du återkoppling om den här sandlådan? Lämna den [https://www.mediawiki.org/wiki/MediaWiki_Interfaces_Team/Feature_Feedback/REST_Sandbox här].<br />OBS! Sandlådans gränssnitt och navigeringsobjekten saknar fortfarande stöd för att översättas.<br />", "restsandbox-select-api": "Välj ett API att utforska.", "restsandbox-no-specs-configured": "Inget REST-API har konfigurerats för att kunna utforskas. Använd inställningen RestSandboxSpecs.", "restsandbox-no-such-api": "Den angivna API-parametern stöds inte: $1", @@ -4073,7 +4080,7 @@ "renameusererrorinvalid": "Användarnamnet \"<nowiki>$1</nowiki>\" är ogiltigt.", "renameuser-error-request": "Ett problem inträffade i hanteringen av begäran. Gå tillbaks och försök igen.", "renameuser-error-same-user": "Du kan inte byta namn på en användare till samma som tidigare.", - "renameuser-error-temp-user": "Du kan inte döpa om det temporära kontot \"$1\".", + "renameuser-error-temp-user": "Du kan inte döpa om det tillfälliga kontot \"$1\".", "renameuser-error-temp-user-reserved": "Du kan inte använda \"$1\". Det har reserverats för tillfälliga konton.", "renameuser-error-unexpected-name": "Målanvändaren har inte det förväntade namnet.", "renameuser-error-global-detaching": "Användaren är globalt ansluten. Använd CentralAuth för att byta namn på detta konto.", @@ -4099,7 +4106,7 @@ "benefit-1-description": "Bevakningslistor som låter dig hålla reda på sidor som du är intresserad av.", "benefit-2-description": "Permanent lista över dina bidrag till projektet.", "benefit-3-description": "Inställningar som låter dig anpassa din upplevelse.", - "temp-user-unable-to-acquire": "Kunde inte skaffa ett tillfälligt kontoanvändarnamn. Var god försök igen.", + "temp-user-unable-to-acquire": "Kunde inte skaffa ett användarnamn för det tillfälliga kontot. Var god försök igen.", "table-of-contents-show-button-aria-label": "Visa innehållsförteckningen", "table-of-contents-hide-button-aria-label": "Dölj innehållsförteckningen", "interwiki": "Visa och redigera interwikidata", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index 4089f0c40f97..d183df59e260 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -2511,8 +2511,8 @@ "sp-contributions-blocked-notice-partial": "Bu {{GENDER:$1|kullanıcı}} şu anda kısmen engellendi.\nEn son engel günlüğü girdisi kaynak olarak aşağıda verilmiştir:", "sp-contributions-blocked-notice-anon": "Bu IP adresi şu anda engellenmiş.\nSon engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:", "sp-contributions-blocked-notice-anon-partial": "Bu IP adresi şu anda kısmen engellendi.\nEn son engel günlüğü girişi referans olarak aşağıda verilmiştir:", - "sp-contributions-blocked-notice-multi": "Bu {{GENDER:$1|kullanıcı}} şu anda $2 kez engellendi.\nSon engelleme günlüğü girişi kaynak amacıyla aşağıda verilmiştir:", - "sp-contributions-blocked-notice-anon-multi": "Bu IP adresi şu anda $2 kez engellendi.\nSon engelleme günlüğü girişi kaynak amacıyla aşağıda verilmiştir:", + "sp-contributions-blocked-notice-multi": "Bu {{GENDER:$1|kullanıcı}} şu anda $2 {{PLURAL:$2|kez}} engellendi.\nSon engelleme günlüğü girişi kaynak amacıyla aşağıda verilmiştir:", + "sp-contributions-blocked-notice-anon-multi": "Bu IP adresi şu anda $2 {{PLURAL:$2|kez}} engellendi.\nSon engelleme günlüğü girişi kaynak amacıyla aşağıda verilmiştir:", "sp-contributions-search": "Katkıları ara", "sp-contributions-username": "IP adresi veya kullanıcı adı:", "sp-contributions-toponly": "Yalnızca güncel revizyon olan değişiklikleri göster", @@ -2615,9 +2615,11 @@ "block-confirm-yes": "Evet", "block-confirm-no": "Hayır", "block-submit": "Gönder", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] engellendi. Engellemeleri gözden geçirmek için [[Special:BlockList|engelleme listesine]] bakın.", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] ([[{{ns:user_talk}}:$1|tartışma]]) engellendi. Engellemeleri gözden geçirmek için [[Special:BlockList|engelleme listesine]] bakın.", "block-user-active-blocks": "Etkin engellemeler", "block-user-no-active-blocks": "Etkin engelleme bulunamadı", + "block-user-active-range-blocks": "Etkin aralık engelleri", + "block-user-no-active-range-blocks": "Etkin aralık engeli bulunamadı", "block-user-previous-blocks": "Engel günlüğü", "block-user-no-previous-blocks": "Önceki engelleme bulunamadı", "block-user-suppressed-blocks": "Bastırılmış engelleme günlüğü", @@ -2638,6 +2640,7 @@ "block-javascript-required": "Özel:Engelle arayüzünü kullanmak için JavaScript gereklidir.", "block-removed": "Engelleme kaldırıldı.", "block-reblock-multi-legacy": "Bu kullanıcı daha önce birden fazla kez engellenmiş ve bu formla yeniden engellenemez.", + "block-view-target": "Görüntüle", "unblockip": "Kullanıcının engelini kaldır", "unblockiptext": "Daha önceden engellenmiş bir IP adresine ya da kullanıcı adına yazma erişimini geri vermek için aşağıdaki formu kullanın.", "unblock-target": "Hedefin engellemesini kaldır", @@ -3303,6 +3306,7 @@ "version-hooks": "Çengeller", "version-parser-extensiontags": "Derleyici uzantı etiketleri", "version-parser-function-hooks": "Derleyici işlevi çengelleri", + "version-parsoid-modules": "Parsoid uzantı modülleri", "version-hook-name": "Çengel adı", "version-hook-subscribedby": "Abone olan", "version-no-ext-name": "[isim yok]", @@ -4076,6 +4080,7 @@ "skin-action-move": "Taşı", "skin-json-warning": "@UYARI", "skin-json-warning-message": "Bu bir API değildir, yalnızca hata ayıklama amaçlıdır! Küçük araçlarda ya da üretim kodunda kullanmayın.", + "parsoid-async-not-ready-fallback": "İçerik hazır değil", "parsoid-stash-rate-limit-error": "Hız sınırı aşıldığından saklama başarısız oldu. Lütfen daha sonra tekrar deneyiniz.", "parsoid-resource-limit-exceeded": "Parsoid kaynak sınırı aşıldı: $1", "parsoid-revision-access": "Parsoid sürüme erişemiyor: $1", diff --git a/languages/i18n/vo.json b/languages/i18n/vo.json index 7a53d696968d..e4d67154c9a3 100644 --- a/languages/i18n/vo.json +++ b/languages/i18n/vo.json @@ -565,6 +565,8 @@ "autocreate-preview-warning": "<em>No enunädol oli. Sosus udunol votükami, lönaspad nelaidüpik pro ol pojafon. [[{{MediaWiki:tempuser-helppage}}|Seivolös mödikumosi]]!</em>", "missingsummary": "'''Noet:''' No epenol redakamipläni. If ovälol dönu knopi: \"$1\" (Dakipolöd), redakam olik podakipon nen plän.", "selfredirect": "<strong>Prüdö!</strong> Lüodükol yümi de pad at lü on it.\nBa evälol-la zeilamapüni neverätik pö lüodükam isao, ba evotükol-la padi neverätik.\nIf ovälaklavol eli \"$1\" nogna, lüodükam isao alo pojafon.", + "edit-constraint-brokenredirect": "<strong>Nuned:</strong> Anu votükol topodi pada at lüodükölo ad pad no nog dabinöl.\nBa neverätiko efümükol topodi tefü lüodükam pezeilöli.\nIf uvälol klavölo eli \"$1\" dönu, tän lüodükam nulik podadunon nendemü atos.", + "edit-constraint-doubleredirect": "<strong>Nuned:</strong> Anu steifülol ad lüodükön alani de pad at lü pad lüodüköl telid, dunölo lüodükami telik.\nPad pezeilöl ola nu nemediko lüodükon ad el [[$2]].\n\nBetikolös votükami ninäda lüodükama at ma sam sököl:\n$3\n\nNoet: If nogna uvälol klavölo eli \"$1\", lüodükam telik pojafon nendemü atos.", "missingcommenttext": "Penolös, begö! küpeti dono.", "missingcommentheader": "'''Meib:''' No epenol yegädi/tiädi pö küpet at.\nIf ovälol dönu knopi: \"$1\", redakam olik podakipon nen on.", "summary-preview": "Büologed brefik votükama:", @@ -601,6 +603,8 @@ "userpage-userdoesnotexist": "Lönaspad gebanik: \"$1\" no peregistaron pö vükatoped at. Fümükolös, va vilol jafön/redakön padi at.", "userpage-userdoesnotexist-view": "Lönaspad gebana: \"$1\" no peregistaron.", "blocked-notice-logextract": "{{GENDER:$1|Geban at}} anu pestöpädon büoneletiko.\nNün lätik peregistaröl jurnala proibaneletas papladon dono ad nunam:", + "blocked-notice-logextract-multi": "{{GENDER:$1|Geban}} at ya pestöpädon büoneletiko {{PLURAL:$2|pö naed|pö naeds}} $2.\nNün lätik peregistaröl jurnala proibaneletas papladon dono ad nunam:", + "blocked-notice-list-link": "Jonön jurnali proibaneletas", "clearyourcache": "'''Prudö!''' Pos dakip buükamas, mögos, das ozesüdos ad nedemön memi nelaidüpik bevüresodatävöma ad logön votükamis.\n* <strong>Firefox / Safari:</strong> Laidulo pedolöd klavi: <em>Shift</em> du välaklavol eli <em>Reload</em>, u pedolöd ud eli <em>Ctrl-F5</em> ud eli <em>Ctrl-R</em> (<em>⌘-R</em> pö ‚Mac’)\n* <strong>Google Chrome:</strong> Pedolöd klavis: <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> pö ‚Mac’)\n* <strong>Edge:</strong> Laidulo pedolöd klavi <em>Ctrl</em> du välaklavol eli <em>Refresh</em>, u pedolöd klavis: <em>Ctrl-F5</em>.", "usercssyoucanpreview": "'''Mob:''' Välolös eli „{{int:showpreview}}“ ad blufön eli CSS nulik olik bü dakip.", "userjsonyoucanpreview": "<strong>Konsäl:</strong> Gebolös gnobi: \"{{int:showpreview}}\" ad blufön eli JSON nulik ola bü notükam.", @@ -919,6 +923,7 @@ "viewprevnext": "Logön padis ($1 {{int:pipe-separator}} $2) ($3).", "searchmenu-exists": "Dabinon pad labü nem: \"[[:$1]]\" pö {{SITENAME}}. {{PLURAL:$2|0=|I logoy sukasekis votik petuvöl.}}", "searchmenu-new": "<strong>Jafolös padi: \"[[:$1]]\" pro vükaproyeg at!</strong> {{PLURAL:$2|0=|Logolös i padi ma suk olik petuvöli.|Logolös i sukasekis petuvöl.}}", + "searchmenu-new-external": "Pad: \"[[:$1]]\" eklülädon dabinön pö vükaproyeg votik. Kanol tuvön oni us. {{PLURAL:$2|0=|I logolös padi petuvöl ma nünisäk olik.|I logolös petuvölosi ma nünisäk olik.}}", "searchprofile-articles": "Ninädapads", "searchprofile-images": "Mödamedäd", "searchprofile-everything": "Valikos", @@ -945,7 +950,8 @@ "searchrelated": "tefik", "searchall": "valik", "showingresultsinrange": "Dono padajonos jü {{PLURAL:$1|sek <strong>1</strong>|seks<strong>$1</strong>}} se ked mögikas de #<strong>$2</strong> jü #<strong>$3</strong>.", - "search-showingresults": "{{PLURAL:$4|seks <strong>$1</strong> <strong>$3</strong>|sekas <strong>$1 – $2</strong> de <strong>$3</strong>}}", + "search-showingresults": "{{PLURAL:$4|1=Sek <strong>$1</strong> de |seks <strong>$3</strong>: <strong>$1 – $2</strong> de <strong>$3</strong>}}", + "search-showingresults-approximate": "{{PLURAL:$4|1=Sek <strong>$1</strong> utas nemu <strong>$3</strong>|Seks <strong>$1 – $2</strong> utas nemu <strong>$3</strong>}}", "search-nonefound": "Sukaseks nonik dabinons.", "search-nonefound-thiswiki": "Seks nonik dabinons baiädü nünisäk pö resodatoped at.", "powersearch-legend": "Suk komplitikum", @@ -954,7 +960,7 @@ "powersearch-toggleall": "Valik", "powersearch-togglenone": "Nonik", "powersearch-remember": "Dakipön välapatis pro suks fütürik", - "searchdisabled": "Suk in {{SITENAME}} penemogükon. Vütimo kanol sukön yufü el Google. Demolös, das liseds onik tefü ninäd in {{SITENAME}} ba no binon anuik.", + "searchdisabled": "Suk in vükaproeg at penemogükon, zuo sukaladet plödik: URL [[$1|no pekuratükon]].", "search-error": "Pöl esüikon pö suk: $1", "search-warning": "Nuned esüikon pö suk: $1", "mypreferences": "Buükams", @@ -1447,7 +1453,7 @@ "recentchangeslinked-feed": "Votükams teföl", "recentchangeslinked-toolbox": "Votükams teföl", "recentchangeslinked-title": "Votükams tefü pad: \"$1\"", - "recentchangeslinked-summary": "Su pad patik at palisedons votükams padas, lü kels pad pevälöl yumon.\nIf ye pad pevälöl binon klad, palisedons is votükams nulik padas in klad at.\nPads [[Special:Watchlist|galädaliseda olik]] '''pakazetons'''.", + "recentchangeslinked-summary": "Su pad patik at palisedons votükams padas, lü kels pad pevälöl yumon.\nIf ye pad pevälöl binon klad, palisedons is votükams nulik padas in klad at.\nPads [[Special:Watchlist|daküpedaliseda olik]] '''pakazetons'''.", "recentchangeslinked-page": "Padanem:", "recentchangeslinked-to": "Jonön güo votükamis padas, kels yumons ad pad pevälöl", "recentchanges-page-added-to-category": "[[:$1]] penüpladon ini klad", @@ -1896,6 +1902,7 @@ "listusers": "Gebanalised", "listusers-editsonly": "Jonön te gebanis keblünöl", "listusers-temporarygroupsonly": "Dajonön te gebanis se gebanagrups nelaidüpik", + "listusers-temporaryaccountsonly": "Dajonön te lönaspadis nelaidüpik", "listusers-creationsort": "Dadilädön ma jafadät", "listusers-desc": "Leodükön ma sökaleod löpiköl", "usereditcount": "{{PLURAL:$1|redakam|redakams}} $1", @@ -2102,11 +2109,12 @@ "emailuserfooter": "Pened leäktronik at {{GENDER:$1|pesedon}} fa geban: $1 gebane: {{GENDER:$2|$2}} medü jäfid \"{{int:emailuser}}\" pö {{SITENAME}}. If {{GENDER:$2|gespikolöv}} pötü pened at, {{GENDER:$2|pened olik}} posedon nemediko {{GENDER:$1|sedane rigik}}, sevädükölo ladeti leäktronik {{GENDER:$2|ola}} {{GENDER:$1|one}}.", "usermessage-summary": "Notükam sitanuna.", "usermessage-editor": "Nunian sitik", - "watchlist": "Galädalised", - "mywatchlist": "Galädalised", + "watchlist": "Daküpedalised", + "mywatchlist": "Daküpedalised", "watchlistfor2": "Ela $1", "nowatchlist": "Labol nosi in galädalised olik.", "watchlistanontext": "Nunädolös oli ad logön u votükön binädis dalogamaliseda olik.", + "watchlistanontext-for-temp-user": "Jafolös lönaspadi ad logön u votükön binädis daküpedaliseda.", "watchnologin": "No enunädon oki", "watchlistnotwatchable": "Pad binon nelogamovik.", "addwatch": "Peläükön lä galädalised", @@ -2149,7 +2157,7 @@ "wlshowhidepatr": "votükams padalogöl", "wlshowhidemine": "votükams obik", "wlshowhidecategorization": "dadiläd padas", - "watchlist-options": "Paramets galädaliseda", + "watchlist-options": "Paramets daküpedaliseda", "watching": "Papladon ini galädalised...", "unwatching": "Pamoükon se galädalised...", "enotif_reset": "Malön padis pevisitöl valik", @@ -2157,33 +2165,56 @@ "enotif_subject_deleted": "{{SITENAME}} pad: $1 {{GENDER:$2|pemoükon}} fa geban $2", "enotif_subject_created": "{{SITENAME}} pad: $1 {{GENDER:$2|pejafon}} fa geban $2", "enotif_subject_moved": "{{SITENAME}} pad: $1 {{GENDER:$2|pefeapladon}} fa geban $2", + "enotif_subject_restored": "{{SITENAME}} pad: $1 {{GENDER:$2|pegeblinon}} fa $2", + "enotif_subject_changed": "{{SITENAME}} pad: $1 {{GENDER:$2|pevotükon}} fa $2", + "enotif_body_intro_deleted": "Pad: $1 ela {{SITENAME}} n{{GENDER:$2|pemoükon}} pö el $PAGEEDITDATE fa $2, logolös eli $3.", + "enotif_body_intro_created": "Pad: $1 ela {{SITENAME}} {{GENDER:$2|pejafon}} pö $PAGEEDITDATE fa $2, logolös eli $3 tefü sotül nuik.", + "enotif_body_intro_moved": "Pad: $1 ela {{SITENAME}} {{GENDER:$2|pefeapladon}} pö $PAGEEDITDATE fa $2, logolös eli $3 tefü sotül nuik.", + "enotif_body_intro_restored": "Pad: $1 ela {{SITENAME}} {{GENDER:$2|pegeblinon}} pö $PAGEEDITDATE fa $2, logolös eli $3 tefü sotül nuik.", + "enotif_body_intro_changed": "Pad: $1 {{SITENAME}} {{GENDER:$2|pevotükon}} pö $PAGEEDITDATE fa $2, logolös eli $3 tefü sotül nuik.", "enotif_lastvisited": "Logolös eli $1 ad tuvön lisedi votükamas valik pos visit lätik ola.", "enotif_lastdiff": "Logolös eli $1 ad tuvön votükami at.", + "enotif_pagelog": "Ad dajonön jurnali pada at, logolös eli $1", "enotif_anon_editor": "geban nennemik: $1", - "enotif_body": "O $WATCHINGUSERNAME löfik!\n\n$PAGEINTRO $NEWPAGE $PAGELOG\n\nNaböfodönuam redakana: $PAGESUMMARY $PAGEMINOREDIT\n\nKanol penön gebane:\npot leäktronik: $PAGEEDITOR_EMAIL\npad in vük: $PAGEEDITOR_WIKI\n\nVotükams fütürik no ponunons ole if no ovisitol dönu padi at.\nKanol i geükön nunamastänis padas valik galädaliseda olik.\n\nNunamasit flenöfik ela {{SITENAME}} olik\n\n--\nAd votükön parametami galädaliseda olik, loglös\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nKüpets e yuf pluik:\n$HELPPAGE", + "enotif_temp_editor": "geban nelaidüpik: $1", + "enotif_body": "O $WATCHINGUSERNAME löfik!\n\n$PAGEINTRO $NEWPAGE $PAGELOG\n\nNaböfodönuam redakana: $PAGESUMMARY $PAGEMINOREDIT\n\nKanol penön redakane:\npotabog leäktronik: $PAGEEDITOR_EMAIL\nvükapad: $PAGEEDITOR_WIKI\n\nVotükams fütürik no ponunons ole if no ovisitol dönu padi at ön stad penunädöl medü lönaspad.\nKanol i geükön nunamastänis padas valik daküpedaliseda olik.\n\nNunamasit flenöfik olik ela {{SITENAME}}\n\n--\nAd votükön buükami olik nunama medü pot leäktronik, reafolös ad\n{{canonicalurl:{{#special:Preferences}}}}\n\nAd votükön buükami daküpedaliseda olik, reafolös ad\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nAd moükön padi se daküpedalised olik, reafolös ad\n$UNWATCHURL\n\nKüpets e yuf pluik:\n$HELPPAGE", + "enotif_minoredit": "Atos binon votükam pülik", + "deletepage-deletetalk": "Moükolöd bespikapadi tefik", "deletepage-submit": "Moükolöd padi", "confirm": "Fümedolös", "excontent": "ninäd äbinon: '$1'", - "excontentauthor": "ninäd äbinon: '$1' (e keblünan teik äbinon '[[Special:Contributions/$2|$2]]')", + "excontentauthor": "ninäd äbinon: \"$1\", e keblünan teik äbinon \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|bespik]])", "exbeforeblank": "ninäd bü vagükam äbinon: '$1'", "delete-confirm": "Moükön padi: \"$1\"", "delete-legend": "Moükön", - "historywarning": "'''Nuned:''' Pad, keli vilol moükön, labon jenotemi laböl za {{PLURAL:$1|revid|revids}} $1:", + "delete-talk-summary-prefix": "Penosükon leigüpo ko pad peyümätöl sekü kod: $1", + "historywarning": "'''Nuned:''' Pad, keli vilol moükön, labon jenotemi laböl za {{PLURAL:$1|revid|revids}} $1:", + "historyaction-submit": "Dajonön revidasotülis", "confirmdeletetext": "Primikol ad moükön laidüpiko padi u magodi sa jenotem valik ona. Fümedolös, das desinol ad dunön atosi, das suemol sekis, e das dunol atosi bai [[{{MediaWiki:Policy-url}}]].", "actioncomplete": "Dunot eplöpon", "actionfailed": "Dunot eneplöpon", "deletedtext": "Pad: \"$1\" pemoükon;\n$2 jonon moükamis nulik.", + "deleted-page-and-talkpage": "Els \"$1\" e \"$2\" penosükons.\nLogolös eli $3 tefü registaramapenets nosükamas brefobüik.", "dellogpage": "Jenotalised moükamas", "dellogpagetext": "Dono binon lised moükamas nulikün.", "deletionlog": "jenotalised moükamas", + "log-name-create": "Jurnal padijafas", + "log-description-create": "Dono binon lised padijafas nulikün.", + "logentry-create-create": "El $1 {{GENDER:$2|ejafom|ejafof|ejafon}} padi: $3", "reverted": "Pegeükon ad revid büik", "deletecomment": "Kod:", "deleteotherreason": "Kod votik:", "deletereasonotherlist": "Kod votik", "deletereason-dropdown": "* Kods kösömik moükama\n** 'Spam'\n** Vandalim\n** Kopiedagitäts\n** Beg lautana\n** Lüodüköm dädik", "delete-edit-reasonlist": "Redakön kodis moükama", + "delete-edit-reasonlist-suppress": "Votükön kodis refuda", "delete-toobig": "Pad at labon redakamajenotemi lunik ({{PLURAL:$1|revid|revids}} plu $1).\nMoükam padas somik pemiedükon ad vitön däropami pö {{SITENAME}}.", + "delete-toomanyrevisions": "Steifülol ad moükön {{PLURAL:$1|revidasotüli|revidasotülis}} plu $1 leigüpo.\nDun somik pemiedöfükon ad büoneletön dämükami fädik ela {{SITENAME}}.", "delete-warning-toobig": "Pad at labon jenotemi lunik: {{PLURAL:$1|revid|revids}} plu $1.\nPrudö! Moükam onik ba osäkädükon jäfidi nünodema: {{SITENAME}}.", + "delete-error-associated-alreadytalk": "Nemögos ad nosükön bespikapadi peyümätöl tefü bespikapad at.", + "delete-error-associated-doesnotexist": "Nemögos ad nosükön bespikapadi peyümätöl no dabinöli.", + "deleteprotected": "No dalol moükön padi at, bi pejelon.", + "deleting-backlinks-warning": "<strong>Nuned:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Pads votik]] peyümons lü pad, keli desinol ad moükön, u ninädons oti.", "rollback": "Sädunön redakamis", "rollbacklink": "sädunön vali", "rollbacklinkcount": "sädunön {{PLURAL:$1|redakami|redakamis}} $1", @@ -2274,7 +2305,7 @@ "blanknamespace": "(Cifik)", "contributions": "Keblünots gebana", "tool-link-contributions": "{{GENDER:$1|Gebanakeblünots}}", - "contributions-title": "Gebanakeblünots pro $1", + "contributions-title": "Keblünots {{GENDER:$2|gebana}} pro $1", "mycontris": "Keblünots", "anoncontribs": "Keblünots", "nocontribs": "Votükams nonik petuvons me paramets at.", @@ -2687,8 +2718,8 @@ "watchlistedit-raw-removed": "{{PLURAL:$1|Tiäd bal pemoükon|Tiäds $1 pemoükons}}:", "watchlisttools-clear": "Vagükön dalogamalisedi", "watchlisttools-view": "Logön votükamis teföl", - "watchlisttools-edit": "Logön e redakön galädalisedi", - "watchlisttools-raw": "Redakön galädalisedi nen fomät", + "watchlisttools-edit": "Logön e redakön daküpedalisedi", + "watchlisttools-raw": "Redakön daküpedalisedi nen fomam", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bespik]])", "duplicate-defaultsort": "Nüned: Leodükamakik kösömik: „$2“ buon bu leodükamakik kösömik büik: „$1“.", "version": "Fomam", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index a6e57f63d6b9..a96004ecd640 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -2705,9 +2705,11 @@ "block-confirm-yes": "是", "block-confirm-no": "否", "block-submit": "提交", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]]已被封禁。参见[[Special:BlockList|封禁列表]]以检查目前的封禁。", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]]([[{{ns:user_talk}}:$1|讨论]])已被封禁。参见[[Special:BlockList|封禁列表]]以检查目前的封禁。", "block-user-active-blocks": "现有封禁", "block-user-no-active-blocks": "没有找到生效的封禁", + "block-user-active-range-blocks": "现有的段封禁", + "block-user-no-active-range-blocks": "没有找到生效的段封禁", "block-user-previous-blocks": "封禁日志", "block-user-no-previous-blocks": "没有找到先前的封禁", "block-user-label-count-exceeds-limit": "$1+", @@ -2729,6 +2731,7 @@ "block-javascript-required": "要使用Special:Block的界面,必须启用JavaScript。", "block-removed": "封禁已移除。", "block-reblock-multi-legacy": "此用户已遭到多重封禁,无法再以此表单重新封禁。", + "block-view-target": "查看", "unblockip": "解封用户", "unblockiptext": "使用下列表单来恢复之前被封禁的IP地址或用户名的写权限。", "unblock-target": "解封目标", @@ -3431,6 +3434,7 @@ "version-hooks": "钩子函数", "version-parser-extensiontags": "解析器扩展标签", "version-parser-function-hooks": "解析器函数钩子", + "version-parsoid-modules": "Parsoid扩展模块", "version-hook-name": "钩子函数名", "version-hook-subscribedby": "订阅", "version-version": "($1)", @@ -4207,6 +4211,7 @@ "skin-action-move": "移动", "skin-json-warning": "@警告", "skin-json-warning-message": "这不是API,仅应当用于调试!请勿在小工具或生产代码中使用。", + "parsoid-async-not-ready-fallback": "内容未就绪", "parsoid-stash-rate-limit-error": "由于超出速率限制,暂存失败。请稍后再试。", "parsoid-resource-limit-exceeded": "超出 Parsoid 资源限制:$1", "parsoid-revision-access": "Parsoid无法访问修订版本:$1", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 9bd46d541c07..b73843af9e55 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -2525,8 +2525,8 @@ "sp-contributions-blocked-notice-partial": "這位{{GENDER:$1|使用者}}目前被部分封鎖。以下提供最近的封鎖日誌以供參考:", "sp-contributions-blocked-notice-anon": "這個IP位址目前被封鎖。以下提供最近的封鎖日誌以供參考:", "sp-contributions-blocked-notice-anon-partial": "這個IP位址目前被部分封鎖。以下提供最近的封鎖日誌以供參考:", - "sp-contributions-blocked-notice-multi": "這位{{GENDER:$1|使用者}}目前已被封鎖$2次。以下提供最近的封鎖日誌以供參考:", - "sp-contributions-blocked-notice-anon-multi": "這個IP位址目前已被封鎖$2次。以下提供最近的封鎖日誌以供參考:", + "sp-contributions-blocked-notice-multi": "這位{{GENDER:$1|使用者}}目前已被封鎖$2{{PLURAL:$2|次}}。以下提供最近的封鎖日誌以供參考:", + "sp-contributions-blocked-notice-anon-multi": "這個IP位址目前已被封鎖$2{{PLURAL:$2|次}}。以下提供最近的封鎖日誌以供參考:", "sp-contributions-search": "搜尋貢獻", "sp-contributions-username": "IP 位址或使用者名稱:", "sp-contributions-toponly": "只顯示最新修訂的編輯", @@ -2629,9 +2629,11 @@ "block-confirm-yes": "是", "block-confirm-no": "否", "block-submit": "提交", - "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]]已經被封鎖。參見[[Special:BlockList|封鎖清單]]以檢查目前的封鎖。", + "block-success": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]]([[{{ns:user_talk}}:$1|討論]])已經被封鎖。參見[[Special:BlockList|封鎖清單]]以檢查目前的封鎖。", "block-user-active-blocks": "生效封鎖", "block-user-no-active-blocks": "沒有找到生效的封鎖", + "block-user-active-range-blocks": "生效的範圍封鎖", + "block-user-no-active-range-blocks": "沒有找到生效的範圍封鎖", "block-user-previous-blocks": "封鎖日誌", "block-user-no-previous-blocks": "沒有找到之前的封鎖", "block-user-suppressed-blocks": "監督隱藏的封鎖日誌", @@ -2652,6 +2654,7 @@ "block-javascript-required": "使用Special:Block介面需要JavaScript。", "block-removed": "封鎖已移除。", "block-reblock-multi-legacy": "此使用者已遭多重封鎖,無法再以此表單重新封鎖。", + "block-view-target": "檢視", "unblockip": "解除封鎖使用者", "unblockiptext": "使用以下表單以還原之前被封鎖的IP位址或使用者名稱的寫入權限。", "unblock-target": "解除目標的封鎖", @@ -3328,6 +3331,7 @@ "version-hooks": "函數鉤", "version-parser-extensiontags": "解析器擴充功能標籤", "version-parser-function-hooks": "解析器函數鉤", + "version-parsoid-modules": "Parsoid擴充模組", "version-hook-name": "函數鉤名稱", "version-hook-subscribedby": "署名", "version-version": "($1)", @@ -4102,6 +4106,7 @@ "skin-action-move": "移動", "skin-json-warning": "@警告", "skin-json-warning-message": "這不是 API,這僅用來偵錯!請不要在小工具或是正式環境的程式碼中使用。", + "parsoid-async-not-ready-fallback": "內容尚未就緒", "parsoid-stash-rate-limit-error": "由於超出速率限制,暫存失敗。請稍後再試。", "parsoid-resource-limit-exceeded": "超出 Parsoid 資源限制:$1", "parsoid-revision-access": "Parsoid無法存取修訂:$1", diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index b47f4b33d8dd..0af0ca79b75b 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -552,7 +552,7 @@ $specialPageAliases = [ 'Userlogin' => [ 'UserLogin', 'Login' ], 'Userlogout' => [ 'UserLogout', 'Logout' ], 'Userrights' => [ 'UserRights', 'MakeSysop', 'MakeBot' ], - 'Version' => [ 'Version' ], + 'Version' => [ 'Version', 'Versions' ], 'Wantedcategories' => [ 'WantedCategories' ], 'Wantedfiles' => [ 'WantedFiles' ], 'Wantedpages' => [ 'WantedPages', 'BrokenLinks' ], diff --git a/resources/Resources.php b/resources/Resources.php index 2883843e5bd6..5f4e85c1e81e 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -399,12 +399,14 @@ return [ 'af' => 'resources/lib/moment/locale/af.js', 'ar' => 'resources/lib/moment/locale/ar.js', 'ar-ma' => 'resources/lib/moment/locale/ar-ma.js', + 'ar-ps' => 'resources/lib/moment/locale/ar-ps.js', 'ar-sa' => 'resources/lib/moment/locale/ar-sa.js', 'az' => 'resources/lib/moment/locale/az.js', 'be' => 'resources/lib/moment/locale/be.js', 'bg' => 'resources/lib/moment/locale/bg.js', 'bm' => 'resources/lib/moment/locale/bm.js', 'bn' => 'resources/lib/moment/locale/bn.js', + 'bn-bd' => 'resources/lib/moment/locale/bn-bd.js', 'bo' => 'resources/lib/moment/locale/bo.js', 'br' => 'resources/lib/moment/locale/br.js', 'bs' => 'resources/lib/moment/locale/bs.js', @@ -424,6 +426,7 @@ return [ 'en-gb' => 'resources/lib/moment/locale/en-gb.js', 'eo' => 'resources/lib/moment/locale/eo.js', 'es' => 'resources/lib/moment/locale/es.js', + 'es-mx' => 'resources/lib/moment/locale/es-mx.js', 'et' => 'resources/lib/moment/locale/et.js', 'eu' => 'resources/lib/moment/locale/eu.js', 'fa' => 'resources/lib/moment/locale/fa.js', @@ -452,6 +455,7 @@ return [ 'kk-cyrl' => 'resources/lib/moment/locale/kk.js', 'kn' => 'resources/lib/moment/locale/kn.js', 'ko' => 'resources/lib/moment/locale/ko.js', + 'ku' => 'resources/lib/moment/locale/ku-kmr.js', 'ky' => 'resources/lib/moment/locale/ky.js', 'lo' => 'resources/lib/moment/locale/lo.js', 'lt' => 'resources/lib/moment/locale/lt.js', @@ -488,6 +492,7 @@ return [ 'te' => 'resources/lib/moment/locale/te.js', 'tet' => 'resources/lib/moment/locale/tet.js', 'th' => 'resources/lib/moment/locale/th.js', + 'tk' => 'resources/lib/moment/locale/tk.js', 'tl' => 'resources/lib/moment/locale/tl-ph.js', 'tr' => 'resources/lib/moment/locale/tr.js', 'tzm' => 'resources/lib/moment/locale/tzm.js', diff --git a/resources/lib/foreign-resources.cdx.json b/resources/lib/foreign-resources.cdx.json index 318f04343cde..739007cc9ecb 100644 --- a/resources/lib/foreign-resources.cdx.json +++ b/resources/lib/foreign-resources.cdx.json @@ -2,7 +2,7 @@ "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json", "bomFormat": "CycloneDX", "specVersion": "1.6", - "serialNumber": "urn:uuid:922dbfb8-d8b8-4a04-8969-0fe49e42c738", + "serialNumber": "urn:uuid:2d3c408e-f84b-4c39-aca6-1a6705f8b41e", "version": 1, "components": [ { @@ -330,7 +330,7 @@ { "type": "library", "name": "moment", - "version": "2.25.2", + "version": "2.30.1", "licenses": [ { "license": { @@ -338,7 +338,7 @@ } } ], - "purl": "pkg:github/moment/moment@2.25.2", + "purl": "pkg:github/moment/moment@2.30.1", "authors": [ { "name": "JS Foundation and other contributors" diff --git a/resources/lib/foreign-resources.yaml b/resources/lib/foreign-resources.yaml index d436a68011b8..d0a58cc23824 100644 --- a/resources/lib/foreign-resources.yaml +++ b/resources/lib/foreign-resources.yaml @@ -301,17 +301,17 @@ moment: license: MIT homepage: https://momentjs.com authors: JS Foundation and other contributors - version: 2.25.2 - purl: pkg:github/moment/moment@2.25.2 + version: 2.30.1 + purl: pkg:github/moment/moment@2.30.1 type: tar - src: https://codeload.github.com/moment/moment/tar.gz/2.25.2 - integrity: sha384-Kdi8+psMUggMYwnp+uBCuy03sBfDbKFyjzdLWJks/4O8x4DwOFWzYbtm7RbJ4ISU + src: https://codeload.github.com/moment/moment/tar.gz/2.30.1 + integrity: sha384-PqvOPbeNfcZqJunZo/JI3zgtel3Y36u3wR6Da8vs6HKuNlPDUiacaXoe3+a8efyH dest: - moment-2.25.2/moment.js: - moment-2.25.2/CHANGELOG.md: - moment-2.25.2/README.md: - moment-2.25.2/LICENSE: - moment-2.25.2/locale/*.js: locale + moment-2.30.1/moment.js: + moment-2.30.1/CHANGELOG.md: + moment-2.30.1/README.md: + moment-2.30.1/LICENSE: + moment-2.30.1/locale/*.js: locale mustache: license: MIT diff --git a/resources/lib/moment/CHANGELOG.md b/resources/lib/moment/CHANGELOG.md index f614dfc768d0..90933d6e632a 100644 --- a/resources/lib/moment/CHANGELOG.md +++ b/resources/lib/moment/CHANGELOG.md @@ -1,6 +1,73 @@ Changelog ========= +### 2.30.1 +* Release Dec 27, 2023 +* Revert https://github.com/moment/moment/pull/5827, because it's breaking + a lot of TS code. + +### 2.30.0 [Full changelog](https://gist.github.com/ichernev/e277bcd1f0eeabb834f60a777237925a) +* Release Dec 26, 2023 + +### 2.29.4 + +* Release Jul 6, 2022 + * [#6015](https://github.com/moment/moment/pull/6015) [bugfix] Fix ReDoS in preprocessRFC2822 regex + +### 2.29.3 [Full changelog](https://gist.github.com/ichernev/edebd440f49adcaec72e5e77b791d8be) + +* Release Apr 17, 2022 + * [#5995](https://github.com/moment/moment/pull/5995) [bugfix] Remove const usage + * [#5990](https://github.com/moment/moment/pull/5990) misc: fix advisory link + + +### 2.29.2 [See full changelog](https://gist.github.com/ichernev/1904b564f6679d9aac1ae08ce13bc45c) + +* Release Apr 3 2022 + +Address https://github.com/moment/moment/security/advisories/GHSA-8hfj-j24r-96c4 + +### 2.29.1 [See full changelog](https://gist.github.com/marwahaha/cc478ba01a1292ab4bd4e861d164d99b) + +* Release Oct 6, 2020 + +Updated deprecation message, bugfix in hi locale + +### 2.29.0 [See full changelog](https://gist.github.com/marwahaha/b0111718641a6461800066549957ec14) + +* Release Sept 22, 2020 + +New locales (es-mx, bn-bd). +Minor bugfixes and locale improvements. +More tests. +Moment is in maintenance mode. Read more at this link: +https://momentjs.com/docs/#/-project-status/ + +### 2.28.0 [See full changelog](https://gist.github.com/marwahaha/028fd6c2b2470b2804857cfd63c0e94f) + +* Release Sept 13, 2020 + +Fix bug where .format() modifies original instance, and locale updates + +### 2.27.0 [See full changelog](https://gist.github.com/marwahaha/5100c9c2f42019067b1f6cefc333daa7) + +* Release June 18, 2020 + +Added Turkmen locale, other locale improvements, slight TypeScript fixes + +### 2.26.0 [See full changelog](https://gist.github.com/marwahaha/0725c40740560854a849b096ea7b7590) + +* Release May 19, 2020 + +TypeScript fixes and many locale improvements + +### 2.25.3 + +* Release May 4, 2020 + +Remove package.json module property. It looks like webpack behaves differently +for modules loaded via module vs jsnext:main. + ### 2.25.2 * Release May 4, 2020 diff --git a/resources/lib/moment/README.md b/resources/lib/moment/README.md index 96077622ccc7..38e61bb812d6 100644 --- a/resources/lib/moment/README.md +++ b/resources/lib/moment/README.md @@ -1,69 +1,55 @@ -[](https://gitter.im/moment/moment?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +# [Moment.js](http://momentjs.com/) -[![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][downloads-url] [![MIT License][license-image]][license-url] [![Build Status][travis-image]][travis-url] -[](https://coveralls.io/r/moment/moment?branch=develop) -[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_shield) -[](https://dependabot.com/compatibility-score.html?dependency-name=moment&package-manager=npm_and_yarn&version-scheme=semver) +[![NPM version][npm-version-image]][npm-url] +[![NPM downloads][npm-downloads-image]][npm-downloads-url] +[![MIT License][license-image]][license-url] +[![Build Status][travis-image]][travis-url] +[![Coverage Status][coveralls-image]][coveralls-url] +[![FOSSA Status][fossa-badge-image]][fossa-badge-url] +[![SemVer compatibility][semver-image]][semver-url] -A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates. +A JavaScript date library for parsing, validating, manipulating, and formatting dates. -**[Documentation](http://momentjs.com/docs/)** +## Project Status -## Port to ECMAScript 6 (version 2.10.0) +Moment.js is a legacy project, now in maintenance mode. In most cases, you should choose a different library. -Moment 2.10.0 does not bring any new features, but the code is now written in -ECMAScript 6 modules and placed inside `src/`. Previously `moment.js`, `locale/*.js` and -`test/moment/*.js`, `test/locale/*.js` contained the source of the project. Now -the source is in `src/`, temporary build (ECMAScript 5) files are placed under -`build/umd/` (for running tests during development), and the `moment.js` and -`locale/*.js` files are updated only on release. +For more details and recommendations, please see [Project Status](https://momentjs.com/docs/#/-project-status/) in the docs. -If you want to use a particular revision of the code, make sure to run -`grunt transpile update-index`, so `moment.js` and `locales/*.js` are synced -with `src/*`. We might place that in a commit hook in the future. +*Thank you.* -## Upgrading to 2.0.0 +## Resources -There are a number of small backwards incompatible changes with version 2.0.0. [See the full descriptions here](https://gist.github.com/timrwood/e72f2eef320ed9e37c51#backwards-incompatible-changes) +- [Documentation](https://momentjs.com/docs/) +- [Changelog](CHANGELOG.md) +- [Stack Overflow](https://stackoverflow.com/questions/tagged/momentjs) - * Changed language ordinal method to return the number + ordinal instead of just the ordinal. - - * Changed two digit year parsing cutoff to match strptime. - - * Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`. - - * Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`. - - * Removed the lang data objects from the top level namespace. - - * Duplicate `Date` passed to `moment()` instead of referencing it. - -## [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - -## [Contributing](https://github.com/moment/moment/blob/develop/CONTRIBUTING.md) [](https://www.codetriage.com/moment/moment) +## License -We're looking for co-maintainers! If you want to become a master of time please -write to [ichernev](https://github.com/ichernev). +Moment.js is freely distributable under the terms of the [MIT license][license-url]. -In addition to contributing code, you can help to triage issues. This can include reproducing bug reports, or asking for vital information such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to [subscribe to moment/moment on CodeTriage](https://www.codetriage.com/moment/moment). +[![FOSSA Status][fossa-large-image]][fossa-large-url] -### Frequently asked questions +[license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat +[license-url]: LICENSE -See [FAQ.md](FAQ.md). +[npm-url]: https://npmjs.org/package/moment +[npm-version-image]: https://img.shields.io/npm/v/moment.svg?style=flat -## License +[npm-downloads-image]: https://img.shields.io/npm/dm/moment.svg?style=flat +[npm-downloads-url]: https://npmcharts.com/compare/moment?minimal=true -Moment.js is freely distributable under the terms of the [MIT license](https://github.com/moment/moment/blob/develop/LICENSE). +[travis-url]: https://travis-ci.org/moment/moment +[travis-image]: https://img.shields.io/travis/moment/moment/develop.svg?style=flat -[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_large) +[coveralls-image]: https://coveralls.io/repos/moment/moment/badge.svg?branch=develop +[coveralls-url]: https://coveralls.io/r/moment/moment?branch=develop -[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat -[license-url]: LICENSE +[fossa-badge-image]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment.svg?type=shield +[fossa-badge-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_shield -[npm-url]: https://npmjs.org/package/moment -[npm-version-image]: http://img.shields.io/npm/v/moment.svg?style=flat -[npm-downloads-image]: http://img.shields.io/npm/dm/moment.svg?style=flat -[downloads-url]: https://npmcharts.com/compare/moment?minimal=true +[fossa-large-image]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment.svg?type=large +[fossa-large-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_large -[travis-url]: http://travis-ci.org/moment/moment -[travis-image]: http://img.shields.io/travis/moment/moment/develop.svg?style=flat +[semver-image]: https://api.dependabot.com/badges/compatibility_score?dependency-name=moment&package-manager=npm_and_yarn&version-scheme=semver +[semver-url]: https://dependabot.com/compatibility-score.html?dependency-name=moment&package-manager=npm_and_yarn&version-scheme=semver diff --git a/resources/lib/moment/locale/ar-dz.js b/resources/lib/moment/locale/ar-dz.js index 9ad2ad6e5620..8f9e14916cc6 100644 --- a/resources/lib/moment/locale/ar-dz.js +++ b/resources/lib/moment/locale/ar-dz.js @@ -1,6 +1,10 @@ //! moment.js locale configuration //! locale : Arabic (Algeria) [ar-dz] -//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme +//! author : Amine Roukh: https://github.com/Amine27 +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi +//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' @@ -11,48 +15,146 @@ //! moment.js locale configuration + var pluralForm = function (n) { + return n === 0 + ? 0 + : n === 1 + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; + }, + plurals = { + s: [ + 'أقل من ثانية', + 'ثانية واحدة', + ['ثانيتان', 'ثانيتين'], + '%d ثوان', + '%d ثانية', + '%d ثانية', + ], + m: [ + 'أقل من دقيقة', + 'دقيقة واحدة', + ['دقيقتان', 'دقيقتين'], + '%d دقائق', + '%d دقيقة', + '%d دقيقة', + ], + h: [ + 'أقل من ساعة', + 'ساعة واحدة', + ['ساعتان', 'ساعتين'], + '%d ساعات', + '%d ساعة', + '%d ساعة', + ], + d: [ + 'أقل من يوم', + 'يوم واحد', + ['يومان', 'يومين'], + '%d أيام', + '%d يومًا', + '%d يوم', + ], + M: [ + 'أقل من شهر', + 'شهر واحد', + ['شهران', 'شهرين'], + '%d أشهر', + '%d شهرا', + '%d شهر', + ], + y: [ + 'أقل من عام', + 'عام واحد', + ['عامان', 'عامين'], + '%d أعوام', + '%d عامًا', + '%d عام', + ], + }, + pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; + }, + months = [ + 'جانفي', + 'فيفري', + 'مارس', + 'أفريل', + 'ماي', + 'جوان', + 'جويلية', + 'أوت', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر', + ]; + var arDz = moment.defineLocale('ar-dz', { - months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( - '_' - ), - monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( - '_' - ), + months: months, + monthsShort: months, weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin: 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), weekdaysParseExact: true, longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', - L: 'DD/MM/YYYY', + L: 'D/\u200FM/\u200FYYYY', LL: 'D MMMM YYYY', LLL: 'D MMMM YYYY HH:mm', LLLL: 'dddd D MMMM YYYY HH:mm', }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, calendar: { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', sameElse: 'L', }, relativeTime: { - future: 'في %s', + future: 'بعد %s', past: 'منذ %s', - s: 'ثوان', - ss: '%d ثانية', - m: 'دقيقة', - mm: '%d دقائق', - h: 'ساعة', - hh: '%d ساعات', - d: 'يوم', - dd: '%d أيام', - M: 'شهر', - MM: '%d أشهر', - y: 'سنة', - yy: '%d سنوات', + s: pluralize('s'), + ss: pluralize('s'), + m: pluralize('m'), + mm: pluralize('m'), + h: pluralize('h'), + hh: pluralize('h'), + d: pluralize('d'), + dd: pluralize('d'), + M: pluralize('M'), + MM: pluralize('M'), + y: pluralize('y'), + yy: pluralize('y'), + }, + postformat: function (string) { + return string.replace(/,/g, '،'); }, week: { dow: 0, // Sunday is the first day of the week. diff --git a/resources/lib/moment/locale/ar-kw.js b/resources/lib/moment/locale/ar-kw.js index fcca10c9d467..c6ecef89fe22 100644 --- a/resources/lib/moment/locale/ar-kw.js +++ b/resources/lib/moment/locale/ar-kw.js @@ -15,9 +15,10 @@ months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( '_' ), - monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( - '_' - ), + monthsShort: + 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), diff --git a/resources/lib/moment/locale/ar-ly.js b/resources/lib/moment/locale/ar-ly.js index 276a02e6c6cf..0ec9ec8dd9ee 100644 --- a/resources/lib/moment/locale/ar-ly.js +++ b/resources/lib/moment/locale/ar-ly.js @@ -1,5 +1,5 @@ //! moment.js locale configuration -//! locale : Arabic (Lybia) [ar-ly] +//! locale : Arabic (Libya) [ar-ly] //! author : Ali Hmer: https://github.com/kikoanis ;(function (global, factory) { @@ -12,29 +12,29 @@ //! moment.js locale configuration var symbolMap = { - '1': '1', - '2': '2', - '3': '3', - '4': '4', - '5': '5', - '6': '6', - '7': '7', - '8': '8', - '9': '9', - '0': '0', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 0: '0', }, pluralForm = function (n) { return n === 0 ? 0 : n === 1 - ? 1 - : n === 2 - ? 2 - : n % 100 >= 3 && n % 100 <= 10 - ? 3 - : n % 100 >= 11 - ? 4 - : 5; + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; }, plurals = { s: [ diff --git a/resources/lib/moment/locale/ar-ma.js b/resources/lib/moment/locale/ar-ma.js index c21e1f6c3391..11f061a19d3d 100644 --- a/resources/lib/moment/locale/ar-ma.js +++ b/resources/lib/moment/locale/ar-ma.js @@ -16,9 +16,10 @@ months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( '_' ), - monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( - '_' - ), + monthsShort: + 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split( + '_' + ), weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), @@ -56,8 +57,8 @@ yy: '%d سنوات', }, week: { - dow: 6, // Saturday is the first day of the week. - doy: 12, // The week that contains Jan 12th is the first week of the year. + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. }, }); diff --git a/resources/lib/moment/locale/ar-ps.js b/resources/lib/moment/locale/ar-ps.js new file mode 100644 index 000000000000..4533bfa607aa --- /dev/null +++ b/resources/lib/moment/locale/ar-ps.js @@ -0,0 +1,123 @@ +//! moment.js locale configuration +//! locale : Arabic (Palestine) [ar-ps] +//! author : Majd Al-Shihabi : https://github.com/majdal + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + var symbolMap = { + 1: '١', + 2: '٢', + 3: '٣', + 4: '٤', + 5: '٥', + 6: '٦', + 7: '٧', + 8: '٨', + 9: '٩', + 0: '٠', + }, + numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0', + }; + + var arPs = moment.defineLocale('ar-ps', { + months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split( + '_' + ), + monthsShort: + 'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm', + }, + meridiemParse: /ص|م/, + isPM: function (input) { + return 'م' === input; + }, + meridiem: function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L', + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + ss: '%d ثانية', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات', + }, + preparse: function (string) { + return string + .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }) + .split('') // reversed since negative lookbehind not supported everywhere + .reverse() + .join('') + .replace(/[١٢](?![\u062a\u0643])/g, function (match) { + return numberMap[match]; + }) + .split('') + .reverse() + .join('') + .replace(/،/g, ','); + }, + postformat: function (string) { + return string + .replace(/\d/g, function (match) { + return symbolMap[match]; + }) + .replace(/,/g, '،'); + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + return arPs; + +}))); diff --git a/resources/lib/moment/locale/ar-sa.js b/resources/lib/moment/locale/ar-sa.js index 44f9ff9be357..e329df08b0d8 100644 --- a/resources/lib/moment/locale/ar-sa.js +++ b/resources/lib/moment/locale/ar-sa.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠', + 1: '١', + 2: '٢', + 3: '٣', + 4: '٤', + 5: '٥', + 6: '٦', + 7: '٧', + 8: '٨', + 9: '٩', + 0: '٠', }, numberMap = { '١': '1', @@ -40,9 +40,10 @@ months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( '_' ), - monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( - '_' - ), + monthsShort: + 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), diff --git a/resources/lib/moment/locale/ar-tn.js b/resources/lib/moment/locale/ar-tn.js index a32af75fdabd..a390ed22949e 100644 --- a/resources/lib/moment/locale/ar-tn.js +++ b/resources/lib/moment/locale/ar-tn.js @@ -15,9 +15,10 @@ months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( '_' ), - monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( - '_' - ), + monthsShort: + 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split( + '_' + ), weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), diff --git a/resources/lib/moment/locale/ar.js b/resources/lib/moment/locale/ar.js index 4c3e041edd70..5bfb05748974 100644 --- a/resources/lib/moment/locale/ar.js +++ b/resources/lib/moment/locale/ar.js @@ -14,16 +14,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠', + 1: '١', + 2: '٢', + 3: '٣', + 4: '٤', + 5: '٥', + 6: '٦', + 7: '٧', + 8: '٨', + 9: '٩', + 0: '٠', }, numberMap = { '١': '1', @@ -41,14 +41,14 @@ return n === 0 ? 0 : n === 1 - ? 1 - : n === 2 - ? 2 - : n % 100 >= 3 && n % 100 <= 10 - ? 3 - : n % 100 >= 11 - ? 4 - : 5; + ? 1 + : n === 2 + ? 2 + : n % 100 >= 3 && n % 100 <= 10 + ? 3 + : n % 100 >= 11 + ? 4 + : 5; }, plurals = { s: [ diff --git a/resources/lib/moment/locale/az.js b/resources/lib/moment/locale/az.js index f68ad1735513..472bee160e8c 100644 --- a/resources/lib/moment/locale/az.js +++ b/resources/lib/moment/locale/az.js @@ -37,9 +37,10 @@ '_' ), monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), - weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split( - '_' - ), + weekdays: + 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split( + '_' + ), weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), weekdaysParseExact: true, @@ -62,7 +63,7 @@ relativeTime: { future: '%s sonra', past: '%s əvvəl', - s: 'birneçə saniyə', + s: 'bir neçə saniyə', ss: '%d saniyə', m: 'bir dəqiqə', mm: '%d dəqiqə', diff --git a/resources/lib/moment/locale/be.js b/resources/lib/moment/locale/be.js index 0768acbfa958..fd7e772bb386 100644 --- a/resources/lib/moment/locale/be.js +++ b/resources/lib/moment/locale/be.js @@ -18,8 +18,8 @@ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) - ? forms[1] - : forms[2]; + ? forms[1] + : forms[2]; } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { @@ -44,20 +44,21 @@ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split( '_' ), - standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split( - '_' - ), + standalone: + 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split( + '_' + ), }, - monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split( - '_' - ), + monthsShort: + 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), weekdays: { format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split( '_' ), - standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split( - '_' - ), + standalone: + 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split( + '_' + ), isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/, }, weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), diff --git a/resources/lib/moment/locale/bg.js b/resources/lib/moment/locale/bg.js index 05b6cf8ed2c6..5a1bda825b99 100644 --- a/resources/lib/moment/locale/bg.js +++ b/resources/lib/moment/locale/bg.js @@ -60,6 +60,8 @@ hh: '%d часа', d: 'ден', dd: '%d дена', + w: 'седмица', + ww: '%d седмици', M: 'месец', MM: '%d месеца', y: 'година', diff --git a/resources/lib/moment/locale/bn-bd.js b/resources/lib/moment/locale/bn-bd.js new file mode 100644 index 000000000000..1154aa4efc6b --- /dev/null +++ b/resources/lib/moment/locale/bn-bd.js @@ -0,0 +1,140 @@ +//! moment.js locale configuration +//! locale : Bengali (Bangladesh) [bn-bd] +//! author : Asraf Hossain Patoary : https://github.com/ashwoolford + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + var symbolMap = { + 1: '১', + 2: '২', + 3: '৩', + 4: '৪', + 5: '৫', + 6: '৬', + 7: '৭', + 8: '৮', + 9: '৯', + 0: '০', + }, + numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0', + }; + + var bnBd = moment.defineLocale('bn-bd', { + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split( + '_' + ), + monthsShort: + 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( + '_' + ), + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split( + '_' + ), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'), + longDateFormat: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY, A h:mm সময়', + }, + calendar: { + sameDay: '[আজ] LT', + nextDay: '[আগামীকাল] LT', + nextWeek: 'dddd, LT', + lastDay: '[গতকাল] LT', + lastWeek: '[গত] dddd, LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + ss: '%d সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর', + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + + meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'রাত') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ভোর') { + return hour; + } else if (meridiem === 'সকাল') { + return hour; + } else if (meridiem === 'দুপুর') { + return hour >= 3 ? hour : hour + 12; + } else if (meridiem === 'বিকাল') { + return hour + 12; + } else if (meridiem === 'সন্ধ্যা') { + return hour + 12; + } + }, + + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 6) { + return 'ভোর'; + } else if (hour < 12) { + return 'সকাল'; + } else if (hour < 15) { + return 'দুপুর'; + } else if (hour < 18) { + return 'বিকাল'; + } else if (hour < 20) { + return 'সন্ধ্যা'; + } else { + return 'রাত'; + } + }, + week: { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }, + }); + + return bnBd; + +}))); diff --git a/resources/lib/moment/locale/bn.js b/resources/lib/moment/locale/bn.js index e97f0f61d83a..e5e3e5f51996 100644 --- a/resources/lib/moment/locale/bn.js +++ b/resources/lib/moment/locale/bn.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '১', - '2': '২', - '3': '৩', - '4': '৪', - '5': '৫', - '6': '৬', - '7': '৭', - '8': '৮', - '9': '৯', - '0': '০', + 1: '১', + 2: '২', + 3: '৩', + 4: '৪', + 5: '৫', + 6: '৬', + 7: '৭', + 8: '৮', + 9: '৯', + 0: '০', }, numberMap = { '১': '1', @@ -40,9 +40,10 @@ months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split( '_' ), - monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( - '_' - ), + monthsShort: + 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split( + '_' + ), weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split( '_' ), diff --git a/resources/lib/moment/locale/bo.js b/resources/lib/moment/locale/bo.js index 1b514e4b98b1..c4a7c5210982 100644 --- a/resources/lib/moment/locale/bo.js +++ b/resources/lib/moment/locale/bo.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '༡', - '2': '༢', - '3': '༣', - '4': '༤', - '5': '༥', - '6': '༦', - '7': '༧', - '8': '༨', - '9': '༩', - '0': '༠', + 1: '༡', + 2: '༢', + 3: '༣', + 4: '༤', + 5: '༥', + 6: '༦', + 7: '༧', + 8: '༨', + 9: '༩', + 0: '༠', }, numberMap = { '༡': '1', @@ -40,14 +40,16 @@ months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split( '_' ), - monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split( - '_' - ), + monthsShort: + 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split( + '_' + ), monthsShortRegex: /^(ཟླ་\d{1,2})/, monthsParseExact: true, - weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split( - '_' - ), + weekdays: + 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split( + '_' + ), weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split( '_' ), diff --git a/resources/lib/moment/locale/br.js b/resources/lib/moment/locale/br.js index ee8cdb9e9751..bd047fe435d7 100644 --- a/resources/lib/moment/locale/br.js +++ b/resources/lib/moment/locale/br.js @@ -55,15 +55,75 @@ return mutationTable[text.charAt(0)] + text.substring(1); } + var monthsParse = [ + /^gen/i, + /^c[ʼ\']hwe/i, + /^meu/i, + /^ebr/i, + /^mae/i, + /^(mez|eve)/i, + /^gou/i, + /^eos/i, + /^gwe/i, + /^her/i, + /^du/i, + /^ker/i, + ], + monthsRegex = + /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + monthsStrictRegex = + /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i, + monthsShortStrictRegex = + /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i, + fullWeekdaysParse = [ + /^sul/i, + /^lun/i, + /^meurzh/i, + /^merc[ʼ\']her/i, + /^yaou/i, + /^gwener/i, + /^sadorn/i, + ], + shortWeekdaysParse = [ + /^Sul/i, + /^Lun/i, + /^Meu/i, + /^Mer/i, + /^Yao/i, + /^Gwe/i, + /^Sad/i, + ], + minWeekdaysParse = [ + /^Su/i, + /^Lu/i, + /^Me([^r]|$)/i, + /^Mer/i, + /^Ya/i, + /^Gw/i, + /^Sa/i, + ]; + var br = moment.defineLocale('br', { - months: "Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split( + months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split( '_' ), - monthsShort: "Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split('_'), - weekdays: "Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split('_'), + monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), - weekdaysParseExact: true, + weekdaysParse: minWeekdaysParse, + fullWeekdaysParse: fullWeekdaysParse, + shortWeekdaysParse: shortWeekdaysParse, + minWeekdaysParse: minWeekdaysParse, + + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: monthsStrictRegex, + monthsShortStrictRegex: monthsShortStrictRegex, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', @@ -74,15 +134,15 @@ }, calendar: { sameDay: '[Hiziv da] LT', - nextDay: "[Warc'hoazh da] LT", + nextDay: '[Warcʼhoazh da] LT', nextWeek: 'dddd [da] LT', - lastDay: "[Dec'h da] LT", + lastDay: '[Decʼh da] LT', lastWeek: 'dddd [paset da] LT', sameElse: 'L', }, relativeTime: { future: 'a-benn %s', - past: "%s 'zo", + past: '%s ʼzo', s: 'un nebeud segondennoù', ss: '%d eilenn', m: 'ur vunutenn', @@ -105,6 +165,13 @@ dow: 1, // Monday is the first day of the week. doy: 4, // The week that contains Jan 4th is the first week of the year. }, + meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn + isPM: function (token) { + return token === 'g.m.'; + }, + meridiem: function (hour, minute, isLower) { + return hour < 12 ? 'a.m.' : 'g.m.'; + }, }); return br; diff --git a/resources/lib/moment/locale/bs.js b/resources/lib/moment/locale/bs.js index 6086f0a9a1f0..55a4d80c9e8c 100644 --- a/resources/lib/moment/locale/bs.js +++ b/resources/lib/moment/locale/bs.js @@ -1,6 +1,7 @@ //! moment.js locale configuration //! locale : Bosnian [bs] //! author : Nedim Cholich : https://github.com/frontyard +//! author : Rasid Redzic : https://github.com/rasidre //! based on (hr) translation by Bojan Marković ;(function (global, factory) { @@ -12,6 +13,17 @@ //! moment.js locale configuration + function processRelativeTime(number, withoutSuffix, key, isFuture) { + switch (key) { + case 'm': + return withoutSuffix + ? 'jedna minuta' + : isFuture + ? 'jednu minutu' + : 'jedne minute'; + } + } + function translate(number, withoutSuffix, key) { var result = number + ' '; switch (key) { @@ -24,8 +36,6 @@ result += 'sekundi'; } return result; - case 'm': - return withoutSuffix ? 'jedna minuta' : 'jedne minute'; case 'mm': if (number === 1) { result += 'minuta'; @@ -36,7 +46,7 @@ } return result; case 'h': - return withoutSuffix ? 'jedan sat' : 'jednog sata'; + return withoutSuffix ? 'jedan sat' : 'jedan sat'; case 'hh': if (number === 1) { result += 'sat'; @@ -78,9 +88,10 @@ months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split( '_' ), - monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( - '_' - ), + monthsShort: + 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split( + '_' + ), monthsParseExact: true, weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( '_' @@ -136,7 +147,7 @@ past: 'prije %s', s: 'par sekundi', ss: translate, - m: translate, + m: processRelativeTime, mm: translate, h: translate, hh: translate, diff --git a/resources/lib/moment/locale/ca.js b/resources/lib/moment/locale/ca.js index c603b9763870..50f264caf6e2 100644 --- a/resources/lib/moment/locale/ca.js +++ b/resources/lib/moment/locale/ca.js @@ -13,21 +13,24 @@ var ca = moment.defineLocale('ca', { months: { - standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( - '_' - ), + standalone: + 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split( + '_' + ), format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split( '_' ), isFormat: /D[oD]?(\s)+MMMM/, }, - monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( - '_' - ), + monthsShort: + 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split( + '_' + ), monthsParseExact: true, - weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( - '_' - ), + weekdays: + 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split( + '_' + ), weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'), weekdaysParseExact: true, @@ -86,12 +89,12 @@ number === 1 ? 'r' : number === 2 - ? 'n' - : number === 3 - ? 'r' - : number === 4 - ? 't' - : 'è'; + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; if (period === 'w' || period === 'W') { output = 'a'; } diff --git a/resources/lib/moment/locale/cs.js b/resources/lib/moment/locale/cs.js index ec25c413a324..7cd88321c35c 100644 --- a/resources/lib/moment/locale/cs.js +++ b/resources/lib/moment/locale/cs.js @@ -11,9 +11,16 @@ //! moment.js locale configuration - var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split( - '_' - ), + var months = { + standalone: + 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split( + '_' + ), + format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split( + '_' + ), + isFormat: /DD?[o.]?(\[[^\[\]]*\]|\s)+MMMM/, + }, monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'), monthsParse = [ /^led/i, @@ -31,7 +38,8 @@ ], // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. - monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i; + monthsRegex = + /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i; function plural(n) { return n > 1 && n < 5 && ~~(n / 10) !== 1; @@ -97,8 +105,10 @@ monthsShortRegex: monthsRegex, // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched. // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'. - monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i, - monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i, + monthsStrictRegex: + /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i, + monthsShortStrictRegex: + /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i, monthsParse: monthsParse, longMonthsParse: monthsParse, shortMonthsParse: monthsParse, diff --git a/resources/lib/moment/locale/cv.js b/resources/lib/moment/locale/cv.js index 891eb00c93ef..6749d4828c87 100644 --- a/resources/lib/moment/locale/cv.js +++ b/resources/lib/moment/locale/cv.js @@ -16,9 +16,10 @@ '_' ), monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), - weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split( - '_' - ), + weekdays: + 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split( + '_' + ), weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), longDateFormat: { @@ -42,8 +43,8 @@ var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) - ? 'тан' - : 'ран'; + ? 'тан' + : 'ран'; return output + affix; }, past: '%s каялла', diff --git a/resources/lib/moment/locale/cy.js b/resources/lib/moment/locale/cy.js index 1bcd649a2e69..3b987f277e50 100644 --- a/resources/lib/moment/locale/cy.js +++ b/resources/lib/moment/locale/cy.js @@ -19,9 +19,10 @@ monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split( '_' ), - weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( - '_' - ), + weekdays: + 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split( + '_' + ), weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/de-at.js b/resources/lib/moment/locale/de-at.js index 5346e19ed07a..7c3130284db8 100644 --- a/resources/lib/moment/locale/de-at.js +++ b/resources/lib/moment/locale/de-at.js @@ -20,6 +20,7 @@ h: ['eine Stunde', 'einer Stunde'], d: ['ein Tag', 'einem Tag'], dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], M: ['ein Monat', 'einem Monat'], MM: [number + ' Monate', number + ' Monaten'], y: ['ein Jahr', 'einem Jahr'], @@ -32,13 +33,13 @@ months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( '_' ), - monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( - '_' - ), + monthsShort: + 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), monthsParseExact: true, - weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( - '_' - ), + weekdays: + 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), weekdaysParseExact: true, @@ -69,6 +70,8 @@ hh: '%d Stunden', d: processRelativeTime, dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', M: processRelativeTime, MM: processRelativeTime, y: processRelativeTime, diff --git a/resources/lib/moment/locale/de-ch.js b/resources/lib/moment/locale/de-ch.js index dbcdd59225c1..10fed176d2ce 100644 --- a/resources/lib/moment/locale/de-ch.js +++ b/resources/lib/moment/locale/de-ch.js @@ -17,6 +17,7 @@ h: ['eine Stunde', 'einer Stunde'], d: ['ein Tag', 'einem Tag'], dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], M: ['ein Monat', 'einem Monat'], MM: [number + ' Monate', number + ' Monaten'], y: ['ein Jahr', 'einem Jahr'], @@ -29,13 +30,13 @@ months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( '_' ), - monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( - '_' - ), + monthsShort: + 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), monthsParseExact: true, - weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( - '_' - ), + weekdays: + 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), weekdaysParseExact: true, @@ -66,6 +67,8 @@ hh: '%d Stunden', d: processRelativeTime, dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', M: processRelativeTime, MM: processRelativeTime, y: processRelativeTime, diff --git a/resources/lib/moment/locale/de.js b/resources/lib/moment/locale/de.js index e29ec2c64cd8..cc061ebf46f4 100644 --- a/resources/lib/moment/locale/de.js +++ b/resources/lib/moment/locale/de.js @@ -19,6 +19,7 @@ h: ['eine Stunde', 'einer Stunde'], d: ['ein Tag', 'einem Tag'], dd: [number + ' Tage', number + ' Tagen'], + w: ['eine Woche', 'einer Woche'], M: ['ein Monat', 'einem Monat'], MM: [number + ' Monate', number + ' Monaten'], y: ['ein Jahr', 'einem Jahr'], @@ -31,13 +32,13 @@ months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split( '_' ), - monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split( - '_' - ), + monthsShort: + 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), monthsParseExact: true, - weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( - '_' - ), + weekdays: + 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split( + '_' + ), weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), weekdaysParseExact: true, @@ -68,6 +69,8 @@ hh: '%d Stunden', d: processRelativeTime, dd: processRelativeTime, + w: processRelativeTime, + ww: '%d Wochen', M: processRelativeTime, MM: processRelativeTime, y: processRelativeTime, diff --git a/resources/lib/moment/locale/el.js b/resources/lib/moment/locale/el.js index 5ffc0fb7b972..a14785979acf 100644 --- a/resources/lib/moment/locale/el.js +++ b/resources/lib/moment/locale/el.js @@ -19,12 +19,14 @@ } var el = moment.defineLocale('el', { - monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split( - '_' - ), - monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split( - '_' - ), + monthsNominativeEl: + 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split( + '_' + ), + monthsGenitiveEl: + 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split( + '_' + ), months: function (momentToFormat, format) { if (!momentToFormat) { return this._monthsNominativeEl; diff --git a/resources/lib/moment/locale/en-au.js b/resources/lib/moment/locale/en-au.js index d415e2bdb3d6..869f51d1f9f6 100644 --- a/resources/lib/moment/locale/en-au.js +++ b/resources/lib/moment/locale/en-au.js @@ -60,16 +60,16 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { - dow: 1, // Monday is the first day of the week. + dow: 0, // Sunday is the first day of the week. doy: 4, // The week that contains Jan 4th is the first week of the year. }, }); diff --git a/resources/lib/moment/locale/en-ca.js b/resources/lib/moment/locale/en-ca.js index bc574f1a4187..29a33906a4b2 100644 --- a/resources/lib/moment/locale/en-ca.js +++ b/resources/lib/moment/locale/en-ca.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, }); diff --git a/resources/lib/moment/locale/en-gb.js b/resources/lib/moment/locale/en-gb.js index 828791e259b7..a159749de5a3 100644 --- a/resources/lib/moment/locale/en-gb.js +++ b/resources/lib/moment/locale/en-gb.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/en-ie.js b/resources/lib/moment/locale/en-ie.js index 086cf395d5e1..bbde281450de 100644 --- a/resources/lib/moment/locale/en-ie.js +++ b/resources/lib/moment/locale/en-ie.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/en-il.js b/resources/lib/moment/locale/en-il.js index e52503ce8349..c9c567a98f85 100644 --- a/resources/lib/moment/locale/en-il.js +++ b/resources/lib/moment/locale/en-il.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, }); diff --git a/resources/lib/moment/locale/en-in.js b/resources/lib/moment/locale/en-in.js index 68db5108a343..c10fb4bb9f0b 100644 --- a/resources/lib/moment/locale/en-in.js +++ b/resources/lib/moment/locale/en-in.js @@ -60,17 +60,17 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { - dow: 1, // Monday is the first day of the week. - doy: 4, // The week that contains Jan 4th is the first week of the year. + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 1st is the first week of the year. }, }); diff --git a/resources/lib/moment/locale/en-nz.js b/resources/lib/moment/locale/en-nz.js index 3bc7e9f60d9b..3a9d88fc6413 100644 --- a/resources/lib/moment/locale/en-nz.js +++ b/resources/lib/moment/locale/en-nz.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/en-sg.js b/resources/lib/moment/locale/en-sg.js index 4de803c133ca..f7805ad49b7e 100644 --- a/resources/lib/moment/locale/en-sg.js +++ b/resources/lib/moment/locale/en-sg.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/es-do.js b/resources/lib/moment/locale/es-do.js index d550f1130fbe..8a557c331255 100644 --- a/resources/lib/moment/locale/es-do.js +++ b/resources/lib/moment/locale/es-do.js @@ -10,9 +10,10 @@ //! moment.js locale configuration - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( - '_' - ), + var monthsShortDot = + 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), monthsParse = [ /^ene/i, @@ -28,7 +29,8 @@ /^nov/i, /^dic/i, ], - monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + monthsRegex = + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; var esDo = moment.defineLocale('es-do', { months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( @@ -45,8 +47,10 @@ }, monthsRegex: monthsRegex, monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, - monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsStrictRegex: + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: + /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, monthsParse: monthsParse, longMonthsParse: monthsParse, shortMonthsParse: monthsParse, @@ -95,6 +99,8 @@ hh: '%d horas', d: 'un día', dd: '%d días', + w: 'una semana', + ww: '%d semanas', M: 'un mes', MM: '%d meses', y: 'un año', diff --git a/resources/lib/moment/locale/es-mx.js b/resources/lib/moment/locale/es-mx.js new file mode 100644 index 000000000000..a233e402ebc3 --- /dev/null +++ b/resources/lib/moment/locale/es-mx.js @@ -0,0 +1,121 @@ +//! moment.js locale configuration +//! locale : Spanish (Mexico) [es-mx] +//! author : JC Franco : https://github.com/jcfranco + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + var monthsShortDot = + 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), + monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParse = [ + /^ene/i, + /^feb/i, + /^mar/i, + /^abr/i, + /^may/i, + /^jun/i, + /^jul/i, + /^ago/i, + /^sep/i, + /^oct/i, + /^nov/i, + /^dic/i, + ], + monthsRegex = + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + + var esMx = moment.defineLocale('es-mx', { + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( + '_' + ), + monthsShort: function (m, format) { + if (!m) { + return monthsShortDot; + } else if (/-MMM-/.test(format)) { + return monthsShort[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: + /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact: true, + longDateFormat: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm', + }, + calendar: { + sameDay: function () { + return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextDay: function () { + return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + nextWeek: function () { + return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastDay: function () { + return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT'; + }, + lastWeek: function () { + return ( + '[el] dddd [pasado a la' + + (this.hours() !== 1 ? 's' : '') + + '] LT' + ); + }, + sameElse: 'L', + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + ss: '%d segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + w: 'una semana', + ww: '%d semanas', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años', + }, + dayOfMonthOrdinalParse: /\d{1,2}º/, + ordinal: '%dº', + week: { + dow: 0, // Sunday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + invalidDate: 'Fecha inválida', + }); + + return esMx; + +}))); diff --git a/resources/lib/moment/locale/es-us.js b/resources/lib/moment/locale/es-us.js index c0207eb02a10..2c52254cdf3a 100644 --- a/resources/lib/moment/locale/es-us.js +++ b/resources/lib/moment/locale/es-us.js @@ -12,9 +12,10 @@ //! moment.js locale configuration - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( - '_' - ), + var monthsShortDot = + 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), monthsParse = [ /^ene/i, @@ -30,7 +31,8 @@ /^nov/i, /^dic/i, ], - monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + monthsRegex = + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; var esUs = moment.defineLocale('es-us', { months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( @@ -47,8 +49,10 @@ }, monthsRegex: monthsRegex, monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, - monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsStrictRegex: + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: + /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, monthsParse: monthsParse, longMonthsParse: monthsParse, shortMonthsParse: monthsParse, @@ -97,6 +101,8 @@ hh: '%d horas', d: 'un día', dd: '%d días', + w: 'una semana', + ww: '%d semanas', M: 'un mes', MM: '%d meses', y: 'un año', diff --git a/resources/lib/moment/locale/es.js b/resources/lib/moment/locale/es.js index e4e6d4166500..7fc46286a267 100644 --- a/resources/lib/moment/locale/es.js +++ b/resources/lib/moment/locale/es.js @@ -11,9 +11,10 @@ //! moment.js locale configuration - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( - '_' - ), + var monthsShortDot = + 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split( + '_' + ), monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), monthsParse = [ /^ene/i, @@ -29,7 +30,8 @@ /^nov/i, /^dic/i, ], - monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; + monthsRegex = + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; var es = moment.defineLocale('es', { months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split( @@ -46,8 +48,10 @@ }, monthsRegex: monthsRegex, monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, - monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, + monthsStrictRegex: + /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, + monthsShortStrictRegex: + /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, monthsParse: monthsParse, longMonthsParse: monthsParse, shortMonthsParse: monthsParse, @@ -96,6 +100,8 @@ hh: '%d horas', d: 'un día', dd: '%d días', + w: 'una semana', + ww: '%d semanas', M: 'un mes', MM: '%d meses', y: 'un año', @@ -107,7 +113,7 @@ dow: 1, // Monday is the first day of the week. doy: 4, // The week that contains Jan 4th is the first week of the year. }, - invalidDate: 'Fecha invalida', + invalidDate: 'Fecha inválida', }); return es; diff --git a/resources/lib/moment/locale/et.js b/resources/lib/moment/locale/et.js index d5ec94e0bced..7c8760d8bcef 100644 --- a/resources/lib/moment/locale/et.js +++ b/resources/lib/moment/locale/et.js @@ -36,12 +36,12 @@ months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split( '_' ), - monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split( - '_' - ), - weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( - '_' - ), + monthsShort: + 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + weekdays: + 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split( + '_' + ), weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/eu.js b/resources/lib/moment/locale/eu.js index b9843a476a0e..ca2e547633f9 100644 --- a/resources/lib/moment/locale/eu.js +++ b/resources/lib/moment/locale/eu.js @@ -15,13 +15,15 @@ months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split( '_' ), - monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( - '_' - ), + monthsShort: + 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split( + '_' + ), monthsParseExact: true, - weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( - '_' - ), + weekdays: + 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split( + '_' + ), weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/fa.js b/resources/lib/moment/locale/fa.js index fff48cf702f3..845757b8db54 100644 --- a/resources/lib/moment/locale/fa.js +++ b/resources/lib/moment/locale/fa.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '۱', - '2': '۲', - '3': '۳', - '4': '۴', - '5': '۵', - '6': '۶', - '7': '۷', - '8': '۸', - '9': '۹', - '0': '۰', + 1: '۱', + 2: '۲', + 3: '۳', + 4: '۴', + 5: '۵', + 6: '۶', + 7: '۷', + 8: '۸', + 9: '۹', + 0: '۰', }, numberMap = { '۱': '1', @@ -40,15 +40,18 @@ months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( '_' ), - monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( - '_' - ), - weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( - '_' - ), - weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( - '_' - ), + monthsShort: + 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split( + '_' + ), + weekdays: + 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), + weekdaysShort: + 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split( + '_' + ), weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), weekdaysParseExact: true, longDateFormat: { diff --git a/resources/lib/moment/locale/fi.js b/resources/lib/moment/locale/fi.js index c47f735206c9..07e57cf6e4dc 100644 --- a/resources/lib/moment/locale/fi.js +++ b/resources/lib/moment/locale/fi.js @@ -11,9 +11,10 @@ //! moment.js locale configuration - var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( - ' ' - ), + var numbersPast = + 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split( + ' ' + ), numbersFuture = [ 'nolla', 'yhden', @@ -32,7 +33,8 @@ case 's': return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; case 'ss': - return isFuture ? 'sekunnin' : 'sekuntia'; + result = isFuture ? 'sekunnin' : 'sekuntia'; + break; case 'm': return isFuture ? 'minuutin' : 'minuutti'; case 'mm': @@ -74,12 +76,14 @@ months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split( '_' ), - monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( - '_' - ), - weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( - '_' - ), + monthsShort: + 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split( + '_' + ), + weekdays: + 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split( + '_' + ), weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/fo.js b/resources/lib/moment/locale/fo.js index 94c4f3555402..217fcfbb32bc 100644 --- a/resources/lib/moment/locale/fo.js +++ b/resources/lib/moment/locale/fo.js @@ -17,9 +17,10 @@ '_' ), monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), - weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split( - '_' - ), + weekdays: + 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split( + '_' + ), weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'), weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/fr-ca.js b/resources/lib/moment/locale/fr-ca.js index a170e973573b..7d48fd7b71da 100644 --- a/resources/lib/moment/locale/fr-ca.js +++ b/resources/lib/moment/locale/fr-ca.js @@ -15,9 +15,10 @@ months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( '_' ), - monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( - '_' - ), + monthsShort: + 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), monthsParseExact: true, weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), diff --git a/resources/lib/moment/locale/fr-ch.js b/resources/lib/moment/locale/fr-ch.js index d371fa71d705..c28d81cfb76c 100644 --- a/resources/lib/moment/locale/fr-ch.js +++ b/resources/lib/moment/locale/fr-ch.js @@ -15,9 +15,10 @@ months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( '_' ), - monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( - '_' - ), + monthsShort: + 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), monthsParseExact: true, weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), diff --git a/resources/lib/moment/locale/fr.js b/resources/lib/moment/locale/fr.js index e79d52e0ef97..4e5536b49b88 100644 --- a/resources/lib/moment/locale/fr.js +++ b/resources/lib/moment/locale/fr.js @@ -11,14 +11,42 @@ //! moment.js locale configuration + var monthsStrictRegex = + /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsShortStrictRegex = + /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i, + monthsRegex = + /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i, + monthsParse = [ + /^janv/i, + /^févr/i, + /^mars/i, + /^avr/i, + /^mai/i, + /^juin/i, + /^juil/i, + /^août/i, + /^sept/i, + /^oct/i, + /^nov/i, + /^déc/i, + ]; + var fr = moment.defineLocale('fr', { months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split( '_' ), - monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( - '_' - ), - monthsParseExact: true, + monthsShort: + 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split( + '_' + ), + monthsRegex: monthsRegex, + monthsShortRegex: monthsRegex, + monthsStrictRegex: monthsStrictRegex, + monthsShortStrictRegex: monthsShortStrictRegex, + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), @@ -50,6 +78,8 @@ hh: '%d heures', d: 'un jour', dd: '%d jours', + w: 'une semaine', + ww: '%d semaines', M: 'un mois', MM: '%d mois', y: 'un an', diff --git a/resources/lib/moment/locale/fy.js b/resources/lib/moment/locale/fy.js index ed5da084be82..46cac083d767 100644 --- a/resources/lib/moment/locale/fy.js +++ b/resources/lib/moment/locale/fy.js @@ -11,12 +11,10 @@ //! moment.js locale configuration - var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split( - '_' - ), - monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split( - '_' - ); + var monthsShortWithDots = + 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), + monthsShortWithoutDots = + 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); var fy = moment.defineLocale('fy', { months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split( diff --git a/resources/lib/moment/locale/gl.js b/resources/lib/moment/locale/gl.js index a663e20e0f24..16dcb5ab0f81 100644 --- a/resources/lib/moment/locale/gl.js +++ b/resources/lib/moment/locale/gl.js @@ -15,9 +15,10 @@ months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split( '_' ), - monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( - '_' - ), + monthsShort: + 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split( + '_' + ), monthsParseExact: true, weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), diff --git a/resources/lib/moment/locale/gom-deva.js b/resources/lib/moment/locale/gom-deva.js index eae9364aa048..ae93d0d16ba1 100644 --- a/resources/lib/moment/locale/gom-deva.js +++ b/resources/lib/moment/locale/gom-deva.js @@ -31,17 +31,19 @@ var gomDeva = moment.defineLocale('gom-deva', { months: { - standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( - '_' - ), + standalone: + 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( + '_' + ), format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split( '_' ), isFormat: /MMMM(\s)+D[oD]?/, }, - monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( - '_' - ), + monthsShort: + 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), monthsParseExact: true, weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'), weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'), @@ -97,8 +99,8 @@ } }, week: { - dow: 1, // Monday is the first day of the week. - doy: 4, // The week that contains Jan 4th is the first week of the year. + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) }, meridiemParse: /राती|सकाळीं|दनपारां|सांजे/, meridiemHour: function (hour, meridiem) { diff --git a/resources/lib/moment/locale/gom-latn.js b/resources/lib/moment/locale/gom-latn.js index 8be90c2e934a..93cbe159bf0f 100644 --- a/resources/lib/moment/locale/gom-latn.js +++ b/resources/lib/moment/locale/gom-latn.js @@ -31,17 +31,17 @@ var gomLatn = moment.defineLocale('gom-latn', { months: { - standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( - '_' - ), + standalone: + 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split( + '_' + ), format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split( '_' ), isFormat: /MMMM(\s)+D[oD]?/, }, - monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split( - '_' - ), + monthsShort: + 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), monthsParseExact: true, weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'), weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), @@ -97,8 +97,8 @@ } }, week: { - dow: 1, // Monday is the first day of the week. - doy: 4, // The week that contains Jan 4th is the first week of the year. + dow: 0, // Sunday is the first day of the week + doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4) }, meridiemParse: /rati|sokallim|donparam|sanje/, meridiemHour: function (hour, meridiem) { diff --git a/resources/lib/moment/locale/gu.js b/resources/lib/moment/locale/gu.js index d5e5d956148e..6583f7763a7f 100644 --- a/resources/lib/moment/locale/gu.js +++ b/resources/lib/moment/locale/gu.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '૧', - '2': '૨', - '3': '૩', - '4': '૪', - '5': '૫', - '6': '૬', - '7': '૭', - '8': '૮', - '9': '૯', - '0': '૦', + 1: '૧', + 2: '૨', + 3: '૩', + 4: '૪', + 5: '૫', + 6: '૬', + 7: '૭', + 8: '૮', + 9: '૯', + 0: '૦', }, numberMap = { '૧': '1', @@ -40,9 +40,10 @@ months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split( '_' ), - monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split( - '_' - ), + monthsShort: + 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split( + '_' + ), monthsParseExact: true, weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split( '_' @@ -67,7 +68,7 @@ }, relativeTime: { future: '%s મા', - past: '%s પેહલા', + past: '%s પહેલા', s: 'અમુક પળો', ss: '%d સેકંડ', m: 'એક મિનિટ', diff --git a/resources/lib/moment/locale/he.js b/resources/lib/moment/locale/he.js index 00fc4311b8b7..e19a0f984e52 100644 --- a/resources/lib/moment/locale/he.js +++ b/resources/lib/moment/locale/he.js @@ -17,9 +17,8 @@ months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split( '_' ), - monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split( - '_' - ), + monthsShort: + 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'), @@ -81,7 +80,8 @@ return number + ' שנים'; }, }, - meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + meridiemParse: + /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, isPM: function (input) { return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); }, diff --git a/resources/lib/moment/locale/hi.js b/resources/lib/moment/locale/hi.js index 3615f4d0907c..56515bdc1e40 100644 --- a/resources/lib/moment/locale/hi.js +++ b/resources/lib/moment/locale/hi.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०', + 1: '१', + 2: '२', + 3: '३', + 4: '४', + 5: '५', + 6: '६', + 7: '७', + 8: '८', + 9: '९', + 0: '०', }, numberMap = { '१': '1', @@ -34,16 +34,48 @@ '८': '8', '९': '9', '०': '0', - }; + }, + monthsParse = [ + /^जन/i, + /^फ़र|फर/i, + /^मार्च/i, + /^अप्रै/i, + /^मई/i, + /^जून/i, + /^जुल/i, + /^अग/i, + /^सितं|सित/i, + /^अक्टू/i, + /^नव|नवं/i, + /^दिसं|दिस/i, + ], + shortMonthsParse = [ + /^जन/i, + /^फ़र/i, + /^मार्च/i, + /^अप्रै/i, + /^मई/i, + /^जून/i, + /^जुल/i, + /^अग/i, + /^सित/i, + /^अक्टू/i, + /^नव/i, + /^दिस/i, + ]; var hi = moment.defineLocale('hi', { - months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split( - '_' - ), - monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split( - '_' - ), - monthsParseExact: true, + months: { + format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split( + '_' + ), + standalone: + 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split( + '_' + ), + }, + monthsShort: + 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), @@ -55,6 +87,23 @@ LLL: 'D MMMM YYYY, A h:mm बजे', LLLL: 'dddd, D MMMM YYYY, A h:mm बजे', }, + + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: shortMonthsParse, + + monthsRegex: + /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i, + + monthsShortRegex: + /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i, + + monthsStrictRegex: + /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i, + + monthsShortStrictRegex: + /^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i, + calendar: { sameDay: '[आज] LT', nextDay: '[कल] LT', diff --git a/resources/lib/moment/locale/hr.js b/resources/lib/moment/locale/hr.js index 6184618ff968..f41cce061687 100644 --- a/resources/lib/moment/locale/hr.js +++ b/resources/lib/moment/locale/hr.js @@ -78,13 +78,15 @@ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split( '_' ), - standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( + standalone: + 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split( + '_' + ), + }, + monthsShort: + 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( '_' ), - }, - monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split( - '_' - ), monthsParseExact: true, weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( '_' diff --git a/resources/lib/moment/locale/hu.js b/resources/lib/moment/locale/hu.js index 3a6685c9439f..162959d848ee 100644 --- a/resources/lib/moment/locale/hu.js +++ b/resources/lib/moment/locale/hu.js @@ -1,6 +1,7 @@ //! moment.js locale configuration //! locale : Hungarian [hu] //! author : Adam Brunner : https://github.com/adambrunner +//! author : Peter Viszt : https://github.com/passatgt ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' @@ -11,9 +12,8 @@ //! moment.js locale configuration - var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split( - ' ' - ); + var weekEndings = + 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); function translate(number, withoutSuffix, key, isFuture) { var num = number; switch (key) { @@ -61,9 +61,11 @@ months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split( '_' ), - monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split( - '_' - ), + monthsShort: + 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split( + '_' + ), + monthsParseExact: true, weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), diff --git a/resources/lib/moment/locale/hy-am.js b/resources/lib/moment/locale/hy-am.js index e495232dd11f..9c65b1e92dc1 100644 --- a/resources/lib/moment/locale/hy-am.js +++ b/resources/lib/moment/locale/hy-am.js @@ -16,14 +16,16 @@ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split( '_' ), - standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split( - '_' - ), + standalone: + 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split( + '_' + ), }, monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), - weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split( - '_' - ), + weekdays: + 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split( + '_' + ), weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/id.js b/resources/lib/moment/locale/id.js index 682ecf7a827b..9f8ff0a05b8b 100644 --- a/resources/lib/moment/locale/id.js +++ b/resources/lib/moment/locale/id.js @@ -77,8 +77,8 @@ yy: '%d tahun', }, week: { - dow: 1, // Monday is the first day of the week. - doy: 7, // The week that contains Jan 7th is the first week of the year. + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. }, }); diff --git a/resources/lib/moment/locale/is.js b/resources/lib/moment/locale/is.js index 480fa567ac9e..02520062d4ac 100644 --- a/resources/lib/moment/locale/is.js +++ b/resources/lib/moment/locale/is.js @@ -100,9 +100,10 @@ '_' ), monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), - weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( - '_' - ), + weekdays: + 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split( + '_' + ), weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/it.js b/resources/lib/moment/locale/it.js index 4fa1efc0d49f..910e00542078 100644 --- a/resources/lib/moment/locale/it.js +++ b/resources/lib/moment/locale/it.js @@ -68,8 +68,8 @@ (this.hours() > 1 ? 'lle ' : this.hours() === 0 - ? ' ' - : "ll'") + + ? ' ' + : "ll'") + ']LT' ); default: @@ -78,8 +78,8 @@ (this.hours() > 1 ? 'lle ' : this.hours() === 0 - ? ' ' - : "ll'") + + ? ' ' + : "ll'") + ']LT' ); } @@ -87,9 +87,7 @@ sameElse: 'L', }, relativeTime: { - future: function (s) { - return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s; - }, + future: 'tra %s', past: '%s fa', s: 'alcuni secondi', ss: '%d secondi', @@ -99,6 +97,8 @@ hh: '%d ore', d: 'un giorno', dd: '%d giorni', + w: 'una settimana', + ww: '%d settimane', M: 'un mese', MM: '%d mesi', y: 'un anno', diff --git a/resources/lib/moment/locale/ka.js b/resources/lib/moment/locale/ka.js index 5bb33b0e8b24..635766940f8e 100644 --- a/resources/lib/moment/locale/ka.js +++ b/resources/lib/moment/locale/ka.js @@ -17,9 +17,10 @@ ), monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), weekdays: { - standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split( - '_' - ), + standalone: + 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split( + '_' + ), format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split( '_' ), @@ -45,13 +46,12 @@ }, relativeTime: { future: function (s) { - return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function ( - $0, - $1, - $2 - ) { - return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში'; - }); + return s.replace( + /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, + function ($0, $1, $2) { + return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში'; + } + ); }, past: function (s) { if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) { diff --git a/resources/lib/moment/locale/km.js b/resources/lib/moment/locale/km.js index a4457886d563..5306436e5e44 100644 --- a/resources/lib/moment/locale/km.js +++ b/resources/lib/moment/locale/km.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '១', - '2': '២', - '3': '៣', - '4': '៤', - '5': '៥', - '6': '៦', - '7': '៧', - '8': '៨', - '9': '៩', - '0': '០', + 1: '១', + 2: '២', + 3: '៣', + 4: '៤', + 5: '៥', + 6: '៦', + 7: '៧', + 8: '៨', + 9: '៩', + 0: '០', }, numberMap = { '១': '1', @@ -40,9 +40,10 @@ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( '_' ), - monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( - '_' - ), + monthsShort: + 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split( + '_' + ), weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), diff --git a/resources/lib/moment/locale/kn.js b/resources/lib/moment/locale/kn.js index 84ff9b83ea65..5fe70b0ba8a5 100644 --- a/resources/lib/moment/locale/kn.js +++ b/resources/lib/moment/locale/kn.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '೧', - '2': '೨', - '3': '೩', - '4': '೪', - '5': '೫', - '6': '೬', - '7': '೭', - '8': '೮', - '9': '೯', - '0': '೦', + 1: '೧', + 2: '೨', + 3: '೩', + 4: '೪', + 5: '೫', + 6: '೬', + 7: '೭', + 8: '೮', + 9: '೯', + 0: '೦', }, numberMap = { '೧': '1', @@ -40,9 +40,10 @@ months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split( '_' ), - monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split( - '_' - ), + monthsShort: + 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split( + '_' + ), monthsParseExact: true, weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split( '_' diff --git a/resources/lib/moment/locale/ku-kmr.js b/resources/lib/moment/locale/ku-kmr.js new file mode 100644 index 000000000000..8ba23ed5685b --- /dev/null +++ b/resources/lib/moment/locale/ku-kmr.js @@ -0,0 +1,125 @@ +//! moment.js locale configuration +//! locale : Northern Kurdish [ku-kmr] +//! authors : Mazlum Özdogan : https://github.com/mergehez + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + function processRelativeTime(num, withoutSuffix, key, isFuture) { + var format = { + s: ['çend sanîye', 'çend sanîyeyan'], + ss: [num + ' sanîye', num + ' sanîyeyan'], + m: ['deqîqeyek', 'deqîqeyekê'], + mm: [num + ' deqîqe', num + ' deqîqeyan'], + h: ['saetek', 'saetekê'], + hh: [num + ' saet', num + ' saetan'], + d: ['rojek', 'rojekê'], + dd: [num + ' roj', num + ' rojan'], + w: ['hefteyek', 'hefteyekê'], + ww: [num + ' hefte', num + ' hefteyan'], + M: ['mehek', 'mehekê'], + MM: [num + ' meh', num + ' mehan'], + y: ['salek', 'salekê'], + yy: [num + ' sal', num + ' salan'], + }; + return withoutSuffix ? format[key][0] : format[key][1]; + } + // function obliqueNumSuffix(num) { + // if(num.includes(':')) + // num = parseInt(num.split(':')[0]); + // else + // num = parseInt(num); + // return num == 0 || num % 10 == 1 ? 'ê' + // : (num > 10 && num % 10 == 0 ? 'î' : 'an'); + // } + function ezafeNumSuffix(num) { + num = '' + num; + var l = num.substring(num.length - 1), + ll = num.length > 1 ? num.substring(num.length - 2) : ''; + if ( + !(ll == 12 || ll == 13) && + (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80') + ) + return 'yê'; + return 'ê'; + } + + var kuKmr = moment.defineLocale('ku-kmr', { + // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation) + // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn' + // But the names below are more well known and handy + months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split( + '_' + ), + monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'), + monthsParseExact: true, + weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'), + weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'), + weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'bn' : 'BN'; + } else { + return isLower ? 'pn' : 'PN'; + } + }, + meridiemParse: /bn|BN|pn|PN/, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'Do MMMM[a] YYYY[an]', + LLL: 'Do MMMM[a] YYYY[an] HH:mm', + LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm', + ll: 'Do MMM[.] YYYY[an]', + lll: 'Do MMM[.] YYYY[an] HH:mm', + llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm', + }, + calendar: { + sameDay: '[Îro di saet] LT [de]', + nextDay: '[Sibê di saet] LT [de]', + nextWeek: 'dddd [di saet] LT [de]', + lastDay: '[Duh di saet] LT [de]', + lastWeek: 'dddd[a borî di saet] LT [de]', + sameElse: 'L', + }, + relativeTime: { + future: 'di %s de', + past: 'berî %s', + s: processRelativeTime, + ss: processRelativeTime, + m: processRelativeTime, + mm: processRelativeTime, + h: processRelativeTime, + hh: processRelativeTime, + d: processRelativeTime, + dd: processRelativeTime, + w: processRelativeTime, + ww: processRelativeTime, + M: processRelativeTime, + MM: processRelativeTime, + y: processRelativeTime, + yy: processRelativeTime, + }, + dayOfMonthOrdinalParse: /\d{1,2}(?:yê|ê|\.)/, + ordinal: function (num, period) { + var p = period.toLowerCase(); + if (p.includes('w') || p.includes('m')) return num + '.'; + + return num + ezafeNumSuffix(num); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4, // The week that contains Jan 4th is the first week of the year. + }, + }); + + return kuKmr; + +}))); diff --git a/resources/lib/moment/locale/ku.js b/resources/lib/moment/locale/ku.js index 2c4f7e28fe8b..71c56a1140f8 100644 --- a/resources/lib/moment/locale/ku.js +++ b/resources/lib/moment/locale/ku.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠', + 1: '١', + 2: '٢', + 3: '٣', + 4: '٤', + 5: '٥', + 6: '٦', + 7: '٧', + 8: '٨', + 9: '٩', + 0: '٠', }, numberMap = { '١': '1', @@ -53,12 +53,12 @@ var ku = moment.defineLocale('ku', { months: months, monthsShort: months, - weekdays: 'یهكشهممه_دووشهممه_سێشهممه_چوارشهممه_پێنجشهممه_ههینی_شهممه'.split( - '_' - ), - weekdaysShort: 'یهكشهم_دووشهم_سێشهم_چوارشهم_پێنجشهم_ههینی_شهممه'.split( - '_' - ), + weekdays: + 'یهكشهممه_دووشهممه_سێشهممه_چوارشهممه_پێنجشهممه_ههینی_شهممه'.split( + '_' + ), + weekdaysShort: + 'یهكشهم_دووشهم_سێشهم_چوارشهم_پێنجشهم_ههینی_شهممه'.split('_'), weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'), weekdaysParseExact: true, longDateFormat: { diff --git a/resources/lib/moment/locale/lb.js b/resources/lib/moment/locale/lb.js index 72a975efec7f..ffcb7584fce6 100644 --- a/resources/lib/moment/locale/lb.js +++ b/resources/lib/moment/locale/lb.js @@ -82,13 +82,15 @@ months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split( '_' ), - monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( - '_' - ), + monthsShort: + 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split( + '_' + ), monthsParseExact: true, - weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( - '_' - ), + weekdays: + 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split( + '_' + ), weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/lo.js b/resources/lib/moment/locale/lo.js index 29aab3c096d7..18fc666d5c73 100644 --- a/resources/lib/moment/locale/lo.js +++ b/resources/lib/moment/locale/lo.js @@ -15,9 +15,10 @@ months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( '_' ), - monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( - '_' - ), + monthsShort: + 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split( + '_' + ), weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), diff --git a/resources/lib/moment/locale/lt.js b/resources/lib/moment/locale/lt.js index c076a13a811c..4140cf861333 100644 --- a/resources/lib/moment/locale/lt.js +++ b/resources/lib/moment/locale/lt.js @@ -35,8 +35,8 @@ return withoutSuffix ? forms(key)[0] : isFuture - ? forms(key)[1] - : forms(key)[2]; + ? forms(key)[1] + : forms(key)[2]; } function special(number) { return number % 10 === 0 || (number > 10 && number < 20); @@ -65,9 +65,10 @@ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split( '_' ), - standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split( - '_' - ), + standalone: + 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split( + '_' + ), isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/, }, monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), @@ -75,9 +76,10 @@ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split( '_' ), - standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split( - '_' - ), + standalone: + 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split( + '_' + ), isFormat: /dddd HH:mm/, }, weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), diff --git a/resources/lib/moment/locale/lv.js b/resources/lib/moment/locale/lv.js index e9a744824d0b..109fdfe3c69d 100644 --- a/resources/lib/moment/locale/lv.js +++ b/resources/lib/moment/locale/lv.js @@ -53,9 +53,10 @@ '_' ), monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), - weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split( - '_' - ), + weekdays: + 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split( + '_' + ), weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/me.js b/resources/lib/moment/locale/me.js index bd78eb02448f..9b2583d5b9a4 100644 --- a/resources/lib/moment/locale/me.js +++ b/resources/lib/moment/locale/me.js @@ -27,8 +27,8 @@ return number === 1 ? wordKey[0] : number >= 2 && number <= 4 - ? wordKey[1] - : wordKey[2]; + ? wordKey[1] + : wordKey[2]; }, translate: function (number, withoutSuffix, key) { var wordKey = translator.words[key]; @@ -48,9 +48,8 @@ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( '_' ), - monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( - '_' - ), + monthsShort: + 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), monthsParseExact: true, weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split( '_' diff --git a/resources/lib/moment/locale/mi.js b/resources/lib/moment/locale/mi.js index 747bf2591d80..f95f9cb67868 100644 --- a/resources/lib/moment/locale/mi.js +++ b/resources/lib/moment/locale/mi.js @@ -15,9 +15,10 @@ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split( '_' ), - monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( - '_' - ), + monthsShort: + 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split( + '_' + ), monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, diff --git a/resources/lib/moment/locale/ml.js b/resources/lib/moment/locale/ml.js index 552f61ff7db3..6a7298cebf22 100644 --- a/resources/lib/moment/locale/ml.js +++ b/resources/lib/moment/locale/ml.js @@ -15,13 +15,15 @@ months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split( '_' ), - monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split( - '_' - ), + monthsShort: + 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split( + '_' + ), monthsParseExact: true, - weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split( - '_' - ), + weekdays: + 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split( + '_' + ), weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/mn.js b/resources/lib/moment/locale/mn.js index fc3d027302a6..a37b792b432c 100644 --- a/resources/lib/moment/locale/mn.js +++ b/resources/lib/moment/locale/mn.js @@ -41,9 +41,10 @@ months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split( '_' ), - monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( - '_' - ), + monthsShort: + '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split( + '_' + ), monthsParseExact: true, weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), diff --git a/resources/lib/moment/locale/mr.js b/resources/lib/moment/locale/mr.js index 84f4e645425e..73d5762333b3 100644 --- a/resources/lib/moment/locale/mr.js +++ b/resources/lib/moment/locale/mr.js @@ -13,16 +13,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०', + 1: '१', + 2: '२', + 3: '३', + 4: '४', + 5: '५', + 6: '६', + 7: '७', + 8: '८', + 9: '९', + 0: '०', }, numberMap = { '१': '1', @@ -125,9 +125,10 @@ months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split( '_' ), - monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( - '_' - ), + monthsShort: + 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split( + '_' + ), monthsParseExact: true, weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), diff --git a/resources/lib/moment/locale/mt.js b/resources/lib/moment/locale/mt.js index 5a61655c4e41..94b2559a27fb 100644 --- a/resources/lib/moment/locale/mt.js +++ b/resources/lib/moment/locale/mt.js @@ -16,9 +16,10 @@ '_' ), monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), - weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split( - '_' - ), + weekdays: + 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split( + '_' + ), weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/my.js b/resources/lib/moment/locale/my.js index 77be4fee8b9f..c1ef2dff5fa8 100644 --- a/resources/lib/moment/locale/my.js +++ b/resources/lib/moment/locale/my.js @@ -14,16 +14,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '၁', - '2': '၂', - '3': '၃', - '4': '၄', - '5': '၅', - '6': '၆', - '7': '၇', - '8': '၈', - '9': '၉', - '0': '၀', + 1: '၁', + 2: '၂', + 3: '၃', + 4: '၄', + 5: '၅', + 6: '၆', + 7: '၇', + 8: '၈', + 9: '၉', + 0: '၀', }, numberMap = { '၁': '1', diff --git a/resources/lib/moment/locale/nb.js b/resources/lib/moment/locale/nb.js index 0138f095385e..1f271aae28fe 100644 --- a/resources/lib/moment/locale/nb.js +++ b/resources/lib/moment/locale/nb.js @@ -17,9 +17,8 @@ months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( '_' ), - monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( - '_' - ), + monthsShort: + 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), monthsParseExact: true, weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), @@ -48,11 +47,13 @@ ss: '%d sekunder', m: 'ett minutt', mm: '%d minutter', - h: 'en time', + h: 'én time', hh: '%d timer', - d: 'en dag', + d: 'én dag', dd: '%d dager', - M: 'en måned', + w: 'én uke', + ww: '%d uker', + M: 'én måned', MM: '%d måneder', y: 'ett år', yy: '%d år', diff --git a/resources/lib/moment/locale/ne.js b/resources/lib/moment/locale/ne.js index e2c737eab197..d455e004ba55 100644 --- a/resources/lib/moment/locale/ne.js +++ b/resources/lib/moment/locale/ne.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०', + 1: '१', + 2: '२', + 3: '३', + 4: '४', + 5: '५', + 6: '६', + 7: '७', + 8: '८', + 9: '९', + 0: '०', }, numberMap = { '१': '1', @@ -40,9 +40,10 @@ months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split( '_' ), - monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split( - '_' - ), + monthsShort: + 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split( + '_' + ), monthsParseExact: true, weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split( '_' diff --git a/resources/lib/moment/locale/nl-be.js b/resources/lib/moment/locale/nl-be.js index 8d1dec9b1e1d..a35546f8cfd1 100644 --- a/resources/lib/moment/locale/nl-be.js +++ b/resources/lib/moment/locale/nl-be.js @@ -12,16 +12,14 @@ //! moment.js locale configuration - var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( - '_' - ), - monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( - '_' - ), + var monthsShortWithDots = + 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsShortWithoutDots = + 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'), monthsParse = [ /^jan/i, /^feb/i, - /^maart|mrt.?$/i, + /^(maart|mrt\.?)$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, @@ -32,7 +30,8 @@ /^nov/i, /^dec/i, ], - monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + monthsRegex = + /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; var nlBe = moment.defineLocale('nl-be', { months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( @@ -50,16 +49,17 @@ monthsRegex: monthsRegex, monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, - monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + monthsStrictRegex: + /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: + /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, monthsParse: monthsParse, longMonthsParse: monthsParse, shortMonthsParse: monthsParse, - weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( - '_' - ), + weekdays: + 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/nl.js b/resources/lib/moment/locale/nl.js index bc6dac757ff4..a285c040c845 100644 --- a/resources/lib/moment/locale/nl.js +++ b/resources/lib/moment/locale/nl.js @@ -12,16 +12,14 @@ //! moment.js locale configuration - var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split( - '_' - ), - monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split( - '_' - ), + var monthsShortWithDots = + 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsShortWithoutDots = + 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'), monthsParse = [ /^jan/i, /^feb/i, - /^maart|mrt.?$/i, + /^(maart|mrt\.?)$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, @@ -32,7 +30,8 @@ /^nov/i, /^dec/i, ], - monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + monthsRegex = + /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; var nl = moment.defineLocale('nl', { months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split( @@ -50,16 +49,17 @@ monthsRegex: monthsRegex, monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, - monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + monthsStrictRegex: + /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: + /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, monthsParse: monthsParse, longMonthsParse: monthsParse, shortMonthsParse: monthsParse, - weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split( - '_' - ), + weekdays: + 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), weekdaysParseExact: true, @@ -90,6 +90,8 @@ hh: '%d uur', d: 'één dag', dd: '%d dagen', + w: 'één week', + ww: '%d weken', M: 'één maand', MM: '%d maanden', y: 'één jaar', diff --git a/resources/lib/moment/locale/nn.js b/resources/lib/moment/locale/nn.js index 638cefb9242c..c65268ea80de 100644 --- a/resources/lib/moment/locale/nn.js +++ b/resources/lib/moment/locale/nn.js @@ -16,9 +16,8 @@ months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split( '_' ), - monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split( - '_' - ), + monthsShort: + 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), monthsParseExact: true, weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'), @@ -51,6 +50,8 @@ hh: '%d timar', d: 'ein dag', dd: '%d dagar', + w: 'ei veke', + ww: '%d veker', M: 'ein månad', MM: '%d månader', y: 'eit år', diff --git a/resources/lib/moment/locale/oc-lnc.js b/resources/lib/moment/locale/oc-lnc.js index 7301280e2d92..a6a8c911bcda 100644 --- a/resources/lib/moment/locale/oc-lnc.js +++ b/resources/lib/moment/locale/oc-lnc.js @@ -13,17 +13,19 @@ var ocLnc = moment.defineLocale('oc-lnc', { months: { - standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( - '_' - ), + standalone: + 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split( + '_' + ), format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split( '_' ), isFormat: /D[oD]?(\s)+MMMM/, }, - monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( - '_' - ), + monthsShort: + 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split( + '_' + ), monthsParseExact: true, weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split( '_' @@ -72,12 +74,12 @@ number === 1 ? 'r' : number === 2 - ? 'n' - : number === 3 - ? 'r' - : number === 4 - ? 't' - : 'è'; + ? 'n' + : number === 3 + ? 'r' + : number === 4 + ? 't' + : 'è'; if (period === 'w' || period === 'W') { output = 'a'; } diff --git a/resources/lib/moment/locale/pa-in.js b/resources/lib/moment/locale/pa-in.js index ff01b87ff032..d57eb7501b71 100644 --- a/resources/lib/moment/locale/pa-in.js +++ b/resources/lib/moment/locale/pa-in.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '੧', - '2': '੨', - '3': '੩', - '4': '੪', - '5': '੫', - '6': '੬', - '7': '੭', - '8': '੮', - '9': '੯', - '0': '੦', + 1: '੧', + 2: '੨', + 3: '੩', + 4: '੪', + 5: '੫', + 6: '੬', + 7: '੭', + 8: '੮', + 9: '੯', + 0: '੦', }, numberMap = { '੧': '1', @@ -41,9 +41,10 @@ months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( '_' ), - monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( - '_' - ), + monthsShort: + 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split( + '_' + ), weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split( '_' ), diff --git a/resources/lib/moment/locale/pl.js b/resources/lib/moment/locale/pl.js index 1d2b5f29eaab..0750bb3bc1fa 100644 --- a/resources/lib/moment/locale/pl.js +++ b/resources/lib/moment/locale/pl.js @@ -11,12 +11,28 @@ //! moment.js locale configuration - var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split( - '_' - ), - monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split( - '_' - ); + var monthsNominative = + 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split( + '_' + ), + monthsSubjective = + 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split( + '_' + ), + monthsParse = [ + /^sty/i, + /^lut/i, + /^mar/i, + /^kwi/i, + /^maj/i, + /^cze/i, + /^lip/i, + /^sie/i, + /^wrz/i, + /^paź/i, + /^lis/i, + /^gru/i, + ]; function plural(n) { return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; } @@ -33,6 +49,8 @@ return withoutSuffix ? 'godzina' : 'godzinę'; case 'hh': return result + (plural(number) ? 'godziny' : 'godzin'); + case 'ww': + return result + (plural(number) ? 'tygodnie' : 'tygodni'); case 'MM': return result + (plural(number) ? 'miesiące' : 'miesięcy'); case 'yy': @@ -44,17 +62,6 @@ months: function (momentToFormat, format) { if (!momentToFormat) { return monthsNominative; - } else if (format === '') { - // Hack: if format empty we know this is used to generate - // RegExp by moment. Give then back both valid forms of months - // in RegExp ready format. - return ( - '(' + - monthsSubjective[momentToFormat.month()] + - '|' + - monthsNominative[momentToFormat.month()] + - ')' - ); } else if (/D MMMM/.test(format)) { return monthsSubjective[momentToFormat.month()]; } else { @@ -62,9 +69,11 @@ } }, monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), - weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split( - '_' - ), + monthsParse: monthsParse, + longMonthsParse: monthsParse, + shortMonthsParse: monthsParse, + weekdays: + 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), longDateFormat: { @@ -122,6 +131,8 @@ hh: translate, d: '1 dzień', dd: '%d dni', + w: 'tydzień', + ww: translate, M: 'miesiąc', MM: translate, y: 'rok', diff --git a/resources/lib/moment/locale/pt-br.js b/resources/lib/moment/locale/pt-br.js index d903b7231d74..ee123bda7267 100644 --- a/resources/lib/moment/locale/pt-br.js +++ b/resources/lib/moment/locale/pt-br.js @@ -16,9 +16,10 @@ '_' ), monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), - weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( - '_' - ), + weekdays: + 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split( + '_' + ), weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'), weekdaysParseExact: true, @@ -60,6 +61,7 @@ }, dayOfMonthOrdinalParse: /\d{1,2}º/, ordinal: '%dº', + invalidDate: 'Data inválida', }); return ptBr; diff --git a/resources/lib/moment/locale/pt.js b/resources/lib/moment/locale/pt.js index 6d6bd869f897..a113ed7b9b88 100644 --- a/resources/lib/moment/locale/pt.js +++ b/resources/lib/moment/locale/pt.js @@ -16,9 +16,10 @@ '_' ), monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), - weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( - '_' - ), + weekdays: + 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split( + '_' + ), weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), weekdaysParseExact: true, @@ -53,6 +54,8 @@ hh: '%d horas', d: 'um dia', dd: '%d dias', + w: 'uma semana', + ww: '%d semanas', M: 'um mês', MM: '%d meses', y: 'um ano', diff --git a/resources/lib/moment/locale/ro.js b/resources/lib/moment/locale/ro.js index ae846ef465bf..c2a9dd87e2e2 100644 --- a/resources/lib/moment/locale/ro.js +++ b/resources/lib/moment/locale/ro.js @@ -19,6 +19,7 @@ mm: 'minute', hh: 'ore', dd: 'zile', + ww: 'săptămâni', MM: 'luni', yy: 'ani', }, @@ -33,9 +34,10 @@ months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split( '_' ), - monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( - '_' - ), + monthsShort: + 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split( + '_' + ), monthsParseExact: true, weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), @@ -67,6 +69,8 @@ hh: relativeTimeWithPlural, d: 'o zi', dd: relativeTimeWithPlural, + w: 'o săptămână', + ww: relativeTimeWithPlural, M: 'o lună', MM: relativeTimeWithPlural, y: 'un an', diff --git a/resources/lib/moment/locale/ru.js b/resources/lib/moment/locale/ru.js index 863223e02454..d313eae8bb07 100644 --- a/resources/lib/moment/locale/ru.js +++ b/resources/lib/moment/locale/ru.js @@ -1,7 +1,7 @@ //! moment.js locale configuration //! locale : Russian [ru] //! author : Viktorminator : https://github.com/Viktorminator -//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Menelion Elensúle : https://github.com/Oire //! author : Коренберг Марк : https://github.com/socketpair ;(function (global, factory) { @@ -18,8 +18,8 @@ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) - ? forms[1] - : forms[2]; + ? forms[1] + : forms[2]; } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { @@ -27,6 +27,7 @@ mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', hh: 'час_часа_часов', dd: 'день_дня_дней', + ww: 'неделя_недели_недель', MM: 'месяц_месяца_месяцев', yy: 'год_года_лет', }; @@ -59,27 +60,30 @@ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split( '_' ), - standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( - '_' - ), + standalone: + 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split( + '_' + ), }, monthsShort: { - // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку? format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split( '_' ), - standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( - '_' - ), + standalone: + 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split( + '_' + ), }, weekdays: { - standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( - '_' - ), + standalone: + 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split( + '_' + ), format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split( '_' ), - isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/, + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/, }, weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), @@ -88,16 +92,20 @@ shortMonthsParse: monthsParse, // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки - monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + monthsRegex: + /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, // копия предыдущего - monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + monthsShortRegex: + /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, // полные названия с падежами - monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + monthsStrictRegex: + /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, - // Выражение, которое соотвествует только сокращённым формам - monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + // Выражение, которое соответствует только сокращённым формам + monthsShortStrictRegex: + /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, longDateFormat: { LT: 'H:mm', LTS: 'H:mm:ss', @@ -167,6 +175,8 @@ hh: relativeTimeWithPlural, d: 'день', dd: relativeTimeWithPlural, + w: 'неделя', + ww: relativeTimeWithPlural, M: 'месяц', MM: relativeTimeWithPlural, y: 'год', diff --git a/resources/lib/moment/locale/se.js b/resources/lib/moment/locale/se.js index 65e2f12dfa54..289929a48b7a 100644 --- a/resources/lib/moment/locale/se.js +++ b/resources/lib/moment/locale/se.js @@ -15,12 +15,12 @@ months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split( '_' ), - monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split( - '_' - ), - weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( - '_' - ), + monthsShort: + 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdays: + 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split( + '_' + ), weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), weekdaysMin: 's_v_m_g_d_b_L'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/si.js b/resources/lib/moment/locale/si.js index 8cc6ac69dc92..4421d044f326 100644 --- a/resources/lib/moment/locale/si.js +++ b/resources/lib/moment/locale/si.js @@ -19,9 +19,10 @@ monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split( '_' ), - weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split( - '_' - ), + weekdays: + 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split( + '_' + ), weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන'.split('_'), weekdaysMin: 'ඉ_ස_අ_බ_බ්ර_සි_සෙ'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/sk.js b/resources/lib/moment/locale/sk.js index bd60f7bae994..99edae7717c1 100644 --- a/resources/lib/moment/locale/sk.js +++ b/resources/lib/moment/locale/sk.js @@ -12,9 +12,10 @@ //! moment.js locale configuration - var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split( - '_' - ), + var months = + 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split( + '_' + ), monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); function plural(n) { return n > 1 && n < 5; diff --git a/resources/lib/moment/locale/sl.js b/resources/lib/moment/locale/sl.js index 73f1b17347a5..38f12109a19e 100644 --- a/resources/lib/moment/locale/sl.js +++ b/resources/lib/moment/locale/sl.js @@ -99,9 +99,10 @@ months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split( '_' ), - monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( - '_' - ), + monthsShort: + 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split( + '_' + ), monthsParseExact: true, weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), diff --git a/resources/lib/moment/locale/sr-cyrl.js b/resources/lib/moment/locale/sr-cyrl.js index 14d47b250e72..9da10fa60d50 100644 --- a/resources/lib/moment/locale/sr-cyrl.js +++ b/resources/lib/moment/locale/sr-cyrl.js @@ -1,6 +1,7 @@ //! moment.js locale configuration //! locale : Serbian Cyrillic [sr-cyrl] //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j +//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' @@ -15,32 +16,44 @@ words: { //Different grammatical cases ss: ['секунда', 'секунде', 'секунди'], - m: ['један минут', 'једне минуте'], - mm: ['минут', 'минуте', 'минута'], + m: ['један минут', 'једног минута'], + mm: ['минут', 'минута', 'минута'], h: ['један сат', 'једног сата'], hh: ['сат', 'сата', 'сати'], + d: ['један дан', 'једног дана'], dd: ['дан', 'дана', 'дана'], + M: ['један месец', 'једног месеца'], MM: ['месец', 'месеца', 'месеци'], - yy: ['година', 'године', 'година'], + y: ['једну годину', 'једне године'], + yy: ['годину', 'године', 'година'], }, correctGrammaticalCase: function (number, wordKey) { - return number === 1 - ? wordKey[0] - : number >= 2 && number <= 4 - ? wordKey[1] - : wordKey[2]; + if ( + number % 10 >= 1 && + number % 10 <= 4 && + (number % 100 < 10 || number % 100 >= 20) + ) { + return number % 10 === 1 ? wordKey[0] : wordKey[1]; + } + return wordKey[2]; }, - translate: function (number, withoutSuffix, key) { - var wordKey = translator.words[key]; + translate: function (number, withoutSuffix, key, isFuture) { + var wordKey = translator.words[key], + word; + if (key.length === 1) { - return withoutSuffix ? wordKey[0] : wordKey[1]; - } else { - return ( - number + - ' ' + - translator.correctGrammaticalCase(number, wordKey) - ); + // Nominativ + if (key === 'y' && withoutSuffix) return 'једна година'; + return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]; + } + + word = translator.correctGrammaticalCase(number, wordKey); + // Nominativ + if (key === 'yy' && withoutSuffix && word === 'годину') { + return number + ' година'; } + + return number + ' ' + word; }, }; @@ -48,9 +61,8 @@ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split( '_' ), - monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split( - '_' - ), + monthsShort: + 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), monthsParseExact: true, weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), @@ -59,10 +71,10 @@ longDateFormat: { LT: 'H:mm', LTS: 'H:mm:ss', - L: 'DD.MM.YYYY', - LL: 'D. MMMM YYYY', - LLL: 'D. MMMM YYYY H:mm', - LLLL: 'dddd, D. MMMM YYYY H:mm', + L: 'D. M. YYYY.', + LL: 'D. MMMM YYYY.', + LLL: 'D. MMMM YYYY. H:mm', + LLLL: 'dddd, D. MMMM YYYY. H:mm', }, calendar: { sameDay: '[данас у] LT', @@ -106,18 +118,18 @@ mm: translator.translate, h: translator.translate, hh: translator.translate, - d: 'дан', + d: translator.translate, dd: translator.translate, - M: 'месец', + M: translator.translate, MM: translator.translate, - y: 'годину', + y: translator.translate, yy: translator.translate, }, dayOfMonthOrdinalParse: /\d{1,2}\./, ordinal: '%d.', week: { dow: 1, // Monday is the first day of the week. - doy: 7, // The week that contains Jan 7th is the first week of the year. + doy: 7, // The week that contains Jan 1st is the first week of the year. }, }); diff --git a/resources/lib/moment/locale/sr.js b/resources/lib/moment/locale/sr.js index 8cf996e6a888..8f53e7ccf60f 100644 --- a/resources/lib/moment/locale/sr.js +++ b/resources/lib/moment/locale/sr.js @@ -1,6 +1,7 @@ //! moment.js locale configuration //! locale : Serbian [sr] //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j +//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' @@ -15,32 +16,44 @@ words: { //Different grammatical cases ss: ['sekunda', 'sekunde', 'sekundi'], - m: ['jedan minut', 'jedne minute'], - mm: ['minut', 'minute', 'minuta'], + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], h: ['jedan sat', 'jednog sata'], hh: ['sat', 'sata', 'sati'], + d: ['jedan dan', 'jednog dana'], dd: ['dan', 'dana', 'dana'], + M: ['jedan mesec', 'jednog meseca'], MM: ['mesec', 'meseca', 'meseci'], - yy: ['godina', 'godine', 'godina'], + y: ['jednu godinu', 'jedne godine'], + yy: ['godinu', 'godine', 'godina'], }, correctGrammaticalCase: function (number, wordKey) { - return number === 1 - ? wordKey[0] - : number >= 2 && number <= 4 - ? wordKey[1] - : wordKey[2]; + if ( + number % 10 >= 1 && + number % 10 <= 4 && + (number % 100 < 10 || number % 100 >= 20) + ) { + return number % 10 === 1 ? wordKey[0] : wordKey[1]; + } + return wordKey[2]; }, - translate: function (number, withoutSuffix, key) { - var wordKey = translator.words[key]; + translate: function (number, withoutSuffix, key, isFuture) { + var wordKey = translator.words[key], + word; + if (key.length === 1) { - return withoutSuffix ? wordKey[0] : wordKey[1]; - } else { - return ( - number + - ' ' + - translator.correctGrammaticalCase(number, wordKey) - ); + // Nominativ + if (key === 'y' && withoutSuffix) return 'jedna godina'; + return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]; + } + + word = translator.correctGrammaticalCase(number, wordKey); + // Nominativ + if (key === 'yy' && withoutSuffix && word === 'godinu') { + return number + ' godina'; } + + return number + ' ' + word; }, }; @@ -48,9 +61,8 @@ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split( '_' ), - monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split( - '_' - ), + monthsShort: + 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), monthsParseExact: true, weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split( '_' @@ -61,10 +73,10 @@ longDateFormat: { LT: 'H:mm', LTS: 'H:mm:ss', - L: 'DD.MM.YYYY', - LL: 'D. MMMM YYYY', - LLL: 'D. MMMM YYYY H:mm', - LLLL: 'dddd, D. MMMM YYYY H:mm', + L: 'D. M. YYYY.', + LL: 'D. MMMM YYYY.', + LLL: 'D. MMMM YYYY. H:mm', + LLLL: 'dddd, D. MMMM YYYY. H:mm', }, calendar: { sameDay: '[danas u] LT', @@ -108,11 +120,11 @@ mm: translator.translate, h: translator.translate, hh: translator.translate, - d: 'dan', + d: translator.translate, dd: translator.translate, - M: 'mesec', + M: translator.translate, MM: translator.translate, - y: 'godinu', + y: translator.translate, yy: translator.translate, }, dayOfMonthOrdinalParse: /\d{1,2}\./, diff --git a/resources/lib/moment/locale/ss.js b/resources/lib/moment/locale/ss.js index 1bcf4effd7b6..ce8a657c19b7 100644 --- a/resources/lib/moment/locale/ss.js +++ b/resources/lib/moment/locale/ss.js @@ -16,9 +16,10 @@ '_' ), monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), - weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( - '_' - ), + weekdays: + 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split( + '_' + ), weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), weekdaysParseExact: true, diff --git a/resources/lib/moment/locale/sv.js b/resources/lib/moment/locale/sv.js index 90fe441fcb68..5962e878d50d 100644 --- a/resources/lib/moment/locale/sv.js +++ b/resources/lib/moment/locale/sv.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? ':e' : b === 1 - ? ':a' - : b === 2 - ? ':a' - : b === 3 - ? ':e' - : ':e'; + ? ':a' + : b === 2 + ? ':a' + : b === 3 + ? ':e' + : ':e'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/sw.js b/resources/lib/moment/locale/sw.js index 3e5839a0117f..1a5ac6438221 100644 --- a/resources/lib/moment/locale/sw.js +++ b/resources/lib/moment/locale/sw.js @@ -16,14 +16,15 @@ '_' ), monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), - weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( - '_' - ), + weekdays: + 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split( + '_' + ), weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), weekdaysParseExact: true, longDateFormat: { - LT: 'HH:mm', + LT: 'hh:mm A', LTS: 'HH:mm:ss', L: 'DD.MM.YYYY', LL: 'D MMMM YYYY', @@ -48,7 +49,7 @@ h: 'saa limoja', hh: 'masaa %d', d: 'siku moja', - dd: 'masiku %d', + dd: 'siku %d', M: 'mwezi mmoja', MM: 'miezi %d', y: 'mwaka mmoja', diff --git a/resources/lib/moment/locale/ta.js b/resources/lib/moment/locale/ta.js index 139f1ecb02a5..0f288320e6b4 100644 --- a/resources/lib/moment/locale/ta.js +++ b/resources/lib/moment/locale/ta.js @@ -12,16 +12,16 @@ //! moment.js locale configuration var symbolMap = { - '1': '௧', - '2': '௨', - '3': '௩', - '4': '௪', - '5': '௫', - '6': '௬', - '7': '௭', - '8': '௮', - '9': '௯', - '0': '௦', + 1: '௧', + 2: '௨', + 3: '௩', + 4: '௪', + 5: '௫', + 6: '௬', + 7: '௭', + 8: '௮', + 9: '௯', + 0: '௦', }, numberMap = { '௧': '1', @@ -40,12 +40,14 @@ months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( '_' ), - monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( - '_' - ), - weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split( - '_' - ), + monthsShort: + 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split( + '_' + ), + weekdays: + 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split( + '_' + ), weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split( '_' ), diff --git a/resources/lib/moment/locale/te.js b/resources/lib/moment/locale/te.js index e1d69bd411a8..85bab7efd879 100644 --- a/resources/lib/moment/locale/te.js +++ b/resources/lib/moment/locale/te.js @@ -15,13 +15,15 @@ months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split( '_' ), - monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split( - '_' - ), + monthsShort: + 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split( + '_' + ), monthsParseExact: true, - weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split( - '_' - ), + weekdays: + 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split( + '_' + ), weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/tet.js b/resources/lib/moment/locale/tet.js index 931384a600e5..5c62c6c9ca6d 100644 --- a/resources/lib/moment/locale/tet.js +++ b/resources/lib/moment/locale/tet.js @@ -60,12 +60,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/tg.js b/resources/lib/moment/locale/tg.js index a8ae777566ed..bde72ad13683 100644 --- a/resources/lib/moment/locale/tg.js +++ b/resources/lib/moment/locale/tg.js @@ -37,9 +37,15 @@ }; var tg = moment.defineLocale('tg', { - months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( - '_' - ), + months: { + format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split( + '_' + ), + standalone: + 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split( + '_' + ), + }, monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split( '_' @@ -49,14 +55,14 @@ longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', - L: 'DD/MM/YYYY', + L: 'DD.MM.YYYY', LL: 'D MMMM YYYY', LLL: 'D MMMM YYYY HH:mm', LLLL: 'dddd, D MMMM YYYY HH:mm', }, calendar: { sameDay: '[Имрӯз соати] LT', - nextDay: '[Пагоҳ соати] LT', + nextDay: '[Фардо соати] LT', lastDay: '[Дирӯз соати] LT', nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT', lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT', diff --git a/resources/lib/moment/locale/th.js b/resources/lib/moment/locale/th.js index 4e82f1b1d682..f83bad95e668 100644 --- a/resources/lib/moment/locale/th.js +++ b/resources/lib/moment/locale/th.js @@ -15,9 +15,10 @@ months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split( '_' ), - monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split( - '_' - ), + monthsShort: + 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split( + '_' + ), monthsParseExact: true, weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference @@ -61,6 +62,8 @@ hh: '%d ชั่วโมง', d: '1 วัน', dd: '%d วัน', + w: '1 สัปดาห์', + ww: '%d สัปดาห์', M: '1 เดือน', MM: '%d เดือน', y: '1 ปี', diff --git a/resources/lib/moment/locale/tk.js b/resources/lib/moment/locale/tk.js new file mode 100644 index 000000000000..24d4ede9084c --- /dev/null +++ b/resources/lib/moment/locale/tk.js @@ -0,0 +1,102 @@ +//! moment.js locale configuration +//! locale : Turkmen [tk] +//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['../moment'], factory) : + factory(global.moment) +}(this, (function (moment) { 'use strict'; + + //! moment.js locale configuration + + var suffixes = { + 1: "'inji", + 5: "'inji", + 8: "'inji", + 70: "'inji", + 80: "'inji", + 2: "'nji", + 7: "'nji", + 20: "'nji", + 50: "'nji", + 3: "'ünji", + 4: "'ünji", + 100: "'ünji", + 6: "'njy", + 9: "'unjy", + 10: "'unjy", + 30: "'unjy", + 60: "'ynjy", + 90: "'ynjy", + }; + + var tk = moment.defineLocale('tk', { + months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split( + '_' + ), + monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), + weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split( + '_' + ), + weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'), + weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm', + }, + calendar: { + sameDay: '[bugün sagat] LT', + nextDay: '[ertir sagat] LT', + nextWeek: '[indiki] dddd [sagat] LT', + lastDay: '[düýn] LT', + lastWeek: '[geçen] dddd [sagat] LT', + sameElse: 'L', + }, + relativeTime: { + future: '%s soň', + past: '%s öň', + s: 'birnäçe sekunt', + m: 'bir minut', + mm: '%d minut', + h: 'bir sagat', + hh: '%d sagat', + d: 'bir gün', + dd: '%d gün', + M: 'bir aý', + MM: '%d aý', + y: 'bir ýyl', + yy: '%d ýyl', + }, + ordinal: function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'Do': + case 'DD': + return number; + default: + if (number === 0) { + // special case for zero + return number + "'unjy"; + } + var a = number % 10, + b = (number % 100) - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + } + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 7, // The week that contains Jan 7th is the first week of the year. + }, + }); + + return tk; + +}))); diff --git a/resources/lib/moment/locale/tlh.js b/resources/lib/moment/locale/tlh.js index 22c1fc30d2ba..ed61731a5c10 100644 --- a/resources/lib/moment/locale/tlh.js +++ b/resources/lib/moment/locale/tlh.js @@ -19,10 +19,10 @@ output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'leS' : output.indexOf('jar') !== -1 - ? time.slice(0, -3) + 'waQ' - : output.indexOf('DIS') !== -1 - ? time.slice(0, -3) + 'nem' - : time + ' pIq'; + ? time.slice(0, -3) + 'waQ' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'nem' + : time + ' pIq'; return time; } @@ -32,10 +32,10 @@ output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'Hu’' : output.indexOf('jar') !== -1 - ? time.slice(0, -3) + 'wen' - : output.indexOf('DIS') !== -1 - ? time.slice(0, -3) + 'ben' - : time + ' ret'; + ? time.slice(0, -3) + 'wen' + : output.indexOf('DIS') !== -1 + ? time.slice(0, -3) + 'ben' + : time + ' ret'; return time; } @@ -78,19 +78,18 @@ months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split( '_' ), - monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split( - '_' - ), + monthsShort: + 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split( + '_' + ), monthsParseExact: true, weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( '_' ), - weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( - '_' - ), - weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split( - '_' - ), + weekdaysShort: + 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysMin: + 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', diff --git a/resources/lib/moment/locale/tr.js b/resources/lib/moment/locale/tr.js index 93c278823d90..663778e99450 100644 --- a/resources/lib/moment/locale/tr.js +++ b/resources/lib/moment/locale/tr.js @@ -41,8 +41,19 @@ weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split( '_' ), - weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'), weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + meridiem: function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'öö' : 'ÖÖ'; + } else { + return isLower ? 'ös' : 'ÖS'; + } + }, + meridiemParse: /öö|ÖÖ|ös|ÖS/, + isPM: function (input) { + return input === 'ös' || input === 'ÖS'; + }, longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', @@ -70,6 +81,8 @@ hh: '%d saat', d: 'bir gün', dd: '%d gün', + w: 'bir hafta', + ww: '%d hafta', M: 'bir ay', MM: '%d ay', y: 'bir yıl', diff --git a/resources/lib/moment/locale/tzl.js b/resources/lib/moment/locale/tzl.js index 5eb1c067ee6e..43ad139ebf09 100644 --- a/resources/lib/moment/locale/tzl.js +++ b/resources/lib/moment/locale/tzl.js @@ -91,8 +91,8 @@ return isFuture ? format[key][0] : withoutSuffix - ? format[key][0] - : format[key][1]; + ? format[key][0] + : format[key][1]; } return tzl; diff --git a/resources/lib/moment/locale/tzm-latn.js b/resources/lib/moment/locale/tzm-latn.js index d362c28aeda7..34425a7e4d64 100644 --- a/resources/lib/moment/locale/tzm-latn.js +++ b/resources/lib/moment/locale/tzm-latn.js @@ -15,9 +15,10 @@ months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( '_' ), - monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( - '_' - ), + monthsShort: + 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split( + '_' + ), weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), diff --git a/resources/lib/moment/locale/tzm.js b/resources/lib/moment/locale/tzm.js index 0427f4c221fd..5db61f946d43 100644 --- a/resources/lib/moment/locale/tzm.js +++ b/resources/lib/moment/locale/tzm.js @@ -15,9 +15,10 @@ months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( '_' ), - monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( - '_' - ), + monthsShort: + 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split( + '_' + ), weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), diff --git a/resources/lib/moment/locale/ug-cn.js b/resources/lib/moment/locale/ug-cn.js index 09cea4066933..5efffdd4575d 100644 --- a/resources/lib/moment/locale/ug-cn.js +++ b/resources/lib/moment/locale/ug-cn.js @@ -1,4 +1,4 @@ -//! moment.js language configuration +//! moment.js locale configuration //! locale : Uyghur (China) [ug-cn] //! author: boyaq : https://github.com/boyaq @@ -9,15 +9,16 @@ factory(global.moment) }(this, (function (moment) { 'use strict'; - //! moment.js language configuration + //! moment.js locale configuration var ugCn = moment.defineLocale('ug-cn', { months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( '_' ), - monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( - '_' - ), + monthsShort: + 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split( + '_' + ), weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split( '_' ), diff --git a/resources/lib/moment/locale/uk.js b/resources/lib/moment/locale/uk.js index d2a80e51ea4a..f5fd3528dfc1 100644 --- a/resources/lib/moment/locale/uk.js +++ b/resources/lib/moment/locale/uk.js @@ -17,8 +17,8 @@ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) - ? forms[1] - : forms[2]; + ? forms[1] + : forms[2]; } function relativeTimeWithPlural(number, withoutSuffix, key) { var format = { @@ -39,15 +39,18 @@ } function weekdaysCaseReplace(m, format) { var weekdays = { - nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split( - '_' - ), - accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split( - '_' - ), - genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split( - '_' - ), + nominative: + 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split( + '_' + ), + accusative: + 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split( + '_' + ), + genitive: + 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split( + '_' + ), }, nounCase; @@ -63,8 +66,8 @@ nounCase = /(\[[ВвУу]\]) ?dddd/.test(format) ? 'accusative' : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format) - ? 'genitive' - : 'nominative'; + ? 'genitive' + : 'nominative'; return weekdays[nounCase][m.day()]; } function processHoursFunction(str) { @@ -78,9 +81,10 @@ format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split( '_' ), - standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split( - '_' - ), + standalone: + 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split( + '_' + ), }, monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split( '_' diff --git a/resources/lib/moment/locale/uz-latn.js b/resources/lib/moment/locale/uz-latn.js index 93403ec63da4..af08e60f0160 100644 --- a/resources/lib/moment/locale/uz-latn.js +++ b/resources/lib/moment/locale/uz-latn.js @@ -16,9 +16,10 @@ '_' ), monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), - weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( - '_' - ), + weekdays: + 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( + '_' + ), weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), longDateFormat: { diff --git a/resources/lib/moment/locale/vi.js b/resources/lib/moment/locale/vi.js index 0587d4ab6d96..fb6b4b40bb81 100644 --- a/resources/lib/moment/locale/vi.js +++ b/resources/lib/moment/locale/vi.js @@ -16,9 +16,10 @@ months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split( '_' ), - monthsShort: 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split( - '_' - ), + monthsShort: + 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split( + '_' + ), monthsParseExact: true, weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split( '_' @@ -68,6 +69,8 @@ hh: '%d giờ', d: 'một ngày', dd: '%d ngày', + w: 'một tuần', + ww: '%d tuần', M: 'một tháng', MM: '%d tháng', y: 'một năm', diff --git a/resources/lib/moment/locale/x-pseudo.js b/resources/lib/moment/locale/x-pseudo.js index e688a940dd5c..a46e1d7d4047 100644 --- a/resources/lib/moment/locale/x-pseudo.js +++ b/resources/lib/moment/locale/x-pseudo.js @@ -15,13 +15,15 @@ months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split( '_' ), - monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split( - '_' - ), + monthsShort: + 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split( + '_' + ), monthsParseExact: true, - weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split( - '_' - ), + weekdays: + 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split( + '_' + ), weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), weekdaysParseExact: true, @@ -63,12 +65,12 @@ ~~((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, week: { diff --git a/resources/lib/moment/locale/zh-cn.js b/resources/lib/moment/locale/zh-cn.js index a11589869da3..c14ca47cac9e 100644 --- a/resources/lib/moment/locale/zh-cn.js +++ b/resources/lib/moment/locale/zh-cn.js @@ -2,6 +2,7 @@ //! locale : Chinese (China) [zh-cn] //! author : suupic : https://github.com/suupic //! author : Zeno Zeng : https://github.com/zenozeng +//! author : uu109 : https://github.com/uu109 ;(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' @@ -67,9 +68,21 @@ calendar: { sameDay: '[今天]LT', nextDay: '[明天]LT', - nextWeek: '[下]ddddLT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + return '[下]dddLT'; + } else { + return '[本]dddLT'; + } + }, lastDay: '[昨天]LT', - lastWeek: '[上]ddddLT', + lastWeek: function (now) { + if (this.week() !== now.week()) { + return '[上]dddLT'; + } else { + return '[本]dddLT'; + } + }, sameElse: 'L', }, dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, @@ -99,6 +112,8 @@ hh: '%d 小时', d: '1 天', dd: '%d 天', + w: '1 周', + ww: '%d 周', M: '1 个月', MM: '%d 个月', y: '1 年', diff --git a/resources/lib/moment/moment.js b/resources/lib/moment/moment.js index 0c0071d5c72b..480b9fb3db59 100644 --- a/resources/lib/moment/moment.js +++ b/resources/lib/moment/moment.js @@ -1,5 +1,5 @@ //! moment.js -//! version : 2.25.2 +//! version : 2.30.1 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com @@ -76,8 +76,9 @@ function map(arr, fn) { var res = [], - i; - for (i = 0; i < arr.length; ++i) { + i, + arrLen = arr.length; + for (i = 0; i < arrLen; ++i) { res.push(fn(arr[i], i)); } return res; @@ -154,24 +155,25 @@ } function isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m), - parsedParts = some.call(flags.parsedDateParts, function (i) { - return i != null; - }), - isNowValid = - !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidEra && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.weekdayMismatch && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated && - (!flags.meridiem || (flags.meridiem && parsedParts)); - + var flags = null, + parsedParts = false, + isNowValid = m._d && !isNaN(m._d.getTime()); + if (isNowValid) { + flags = getParsingFlags(m); + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }); + isNowValid = + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); if (m._strict) { isNowValid = isNowValid && @@ -179,12 +181,11 @@ flags.unusedTokens.length === 0 && flags.bigHour === undefined; } - - if (Object.isFrozen == null || !Object.isFrozen(m)) { - m._isValid = isNowValid; - } else { - return isNowValid; - } + } + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; } return m._isValid; } @@ -206,7 +207,10 @@ updateInProgress = false; function copyConfig(to, from) { - var i, prop, val; + var i, + prop, + val, + momentPropertiesLen = momentProperties.length; if (!isUndefined(from._isAMomentObject)) { to._isAMomentObject = from._isAMomentObject; @@ -239,8 +243,8 @@ to._locale = from._locale; } - if (momentProperties.length > 0) { - for (i = 0; i < momentProperties.length; i++) { + if (momentPropertiesLen > 0) { + for (i = 0; i < momentPropertiesLen; i++) { prop = momentProperties[i]; val = from[prop]; if (!isUndefined(val)) { @@ -295,8 +299,9 @@ var args = [], arg, i, - key; - for (i = 0; i < arguments.length; i++) { + key, + argLen = arguments.length; + for (i = 0; i < argLen; i++) { arg = ''; if (typeof arguments[i] === 'object') { arg += '\n[' + i + '] '; @@ -446,7 +451,8 @@ ); } - var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + var formattingTokens = + /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {}; @@ -624,12 +630,56 @@ return isFunction(format) ? format(output) : format.replace(/%s/i, output); } - var aliases = {}; - - function addUnitAlias(unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } + var aliases = { + D: 'date', + dates: 'date', + date: 'date', + d: 'day', + days: 'day', + day: 'day', + e: 'weekday', + weekdays: 'weekday', + weekday: 'weekday', + E: 'isoWeekday', + isoweekdays: 'isoWeekday', + isoweekday: 'isoWeekday', + DDD: 'dayOfYear', + dayofyears: 'dayOfYear', + dayofyear: 'dayOfYear', + h: 'hour', + hours: 'hour', + hour: 'hour', + ms: 'millisecond', + milliseconds: 'millisecond', + millisecond: 'millisecond', + m: 'minute', + minutes: 'minute', + minute: 'minute', + M: 'month', + months: 'month', + month: 'month', + Q: 'quarter', + quarters: 'quarter', + quarter: 'quarter', + s: 'second', + seconds: 'second', + second: 'second', + gg: 'weekYear', + weekyears: 'weekYear', + weekyear: 'weekYear', + GG: 'isoWeekYear', + isoweekyears: 'isoWeekYear', + isoweekyear: 'isoWeekYear', + w: 'week', + weeks: 'week', + week: 'week', + W: 'isoWeek', + isoweeks: 'isoWeek', + isoweek: 'isoWeek', + y: 'year', + years: 'year', + year: 'year', + }; function normalizeUnits(units) { return typeof units === 'string' @@ -654,11 +704,24 @@ return normalizedInput; } - var priorities = {}; - - function addUnitPriority(unit, priority) { - priorities[unit] = priority; - } + var priorities = { + date: 9, + day: 11, + weekday: 11, + isoWeekday: 11, + dayOfYear: 4, + hour: 13, + millisecond: 16, + minute: 14, + month: 8, + quarter: 7, + second: 15, + weekYear: 1, + isoWeekYear: 1, + week: 5, + isoWeek: 5, + year: 1, + }; function getPrioritizedUnits(unitsObj) { var units = [], @@ -674,95 +737,6 @@ return units; } - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - function absFloor(number) { - if (number < 0) { - // -0 -> 0 - return Math.ceil(number) || 0; - } else { - return Math.floor(number); - } - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } - - return value; - } - - function makeGetSet(unit, keepTime) { - return function (value) { - if (value != null) { - set$1(this, unit, value); - hooks.updateOffset(this, keepTime); - return this; - } else { - return get(this, unit); - } - }; - } - - function get(mom, unit) { - return mom.isValid() - ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() - : NaN; - } - - function set$1(mom, unit, value) { - if (mom.isValid() && !isNaN(value)) { - if ( - unit === 'FullYear' && - isLeapYear(mom.year()) && - mom.month() === 1 && - mom.date() === 29 - ) { - value = toInt(value); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( - value, - mom.month(), - daysInMonth(value, mom.month()) - ); - } else { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - } - - // MOMENTS - - function stringGet(units) { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](); - } - return this; - } - - function stringSet(units, value) { - if (typeof units === 'object') { - units = normalizeObjectUnits(units); - var prioritized = getPrioritizedUnits(units), - i; - for (i = 0; i < prioritized.length; i++) { - this[prioritized[i].unit](units[prioritized[i].unit]); - } - } else { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](value); - } - } - return this; - } - var match1 = /\d/, // 0 - 9 match2 = /\d\d/, // 00 - 99 match3 = /\d{3}/, // 000 - 999 @@ -781,7 +755,10 @@ matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 // any word (or two) characters or numbers including two/three word month in arabic. // includes scottish gaelic two word and hyphenated months - matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + matchWord = + /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99 + match1to2HasZero = /^([1-9]\d|\d)/, // 0-99 regexes; regexes = {}; @@ -807,15 +784,12 @@ return regexEscape( s .replace('\\', '') - .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( - matched, - p1, - p2, - p3, - p4 - ) { - return p1 || p2 || p3 || p4; - }) + .replace( + /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, + function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + } + ) ); } @@ -823,11 +797,32 @@ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + var tokens = {}; function addParseToken(token, callback) { var i, - func = callback; + func = callback, + tokenLen; if (typeof token === 'string') { token = [token]; } @@ -836,7 +831,8 @@ array[callback] = toInt(input); }; } - for (i = 0; i < token.length; i++) { + tokenLen = token.length; + for (i = 0; i < tokenLen; i++) { tokens[token[i]] = func; } } @@ -854,6 +850,10 @@ } } + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + var YEAR = 0, MONTH = 1, DATE = 2, @@ -864,6 +864,173 @@ WEEK = 7, WEEKDAY = 8; + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + if (!mom.isValid()) { + return NaN; + } + + var d = mom._d, + isUTC = mom._isUTC; + + switch (unit) { + case 'Milliseconds': + return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds(); + case 'Seconds': + return isUTC ? d.getUTCSeconds() : d.getSeconds(); + case 'Minutes': + return isUTC ? d.getUTCMinutes() : d.getMinutes(); + case 'Hours': + return isUTC ? d.getUTCHours() : d.getHours(); + case 'Date': + return isUTC ? d.getUTCDate() : d.getDate(); + case 'Day': + return isUTC ? d.getUTCDay() : d.getDay(); + case 'Month': + return isUTC ? d.getUTCMonth() : d.getMonth(); + case 'FullYear': + return isUTC ? d.getUTCFullYear() : d.getFullYear(); + default: + return NaN; // Just in case + } + } + + function set$1(mom, unit, value) { + var d, isUTC, year, month, date; + + if (!mom.isValid() || isNaN(value)) { + return; + } + + d = mom._d; + isUTC = mom._isUTC; + + switch (unit) { + case 'Milliseconds': + return void (isUTC + ? d.setUTCMilliseconds(value) + : d.setMilliseconds(value)); + case 'Seconds': + return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value)); + case 'Minutes': + return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value)); + case 'Hours': + return void (isUTC ? d.setUTCHours(value) : d.setHours(value)); + case 'Date': + return void (isUTC ? d.setUTCDate(value) : d.setDate(value)); + // case 'Day': // Not real + // return void (isUTC ? d.setUTCDay(value) : d.setDay(value)); + // case 'Month': // Not used because we need to pass two variables + // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value)); + case 'FullYear': + break; // See below ... + default: + return; // Just in case + } + + year = value; + month = mom.month(); + date = mom.date(); + date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date; + void (isUTC + ? d.setUTCFullYear(year, month, date) + : d.setFullYear(year, month, date)); + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i, + prioritizedLen = prioritized.length; + for (i = 0; i < prioritizedLen; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + function mod(n, x) { return ((n % x) + x) % x; } @@ -912,17 +1079,9 @@ return this.localeData().months(this, format); }); - // ALIASES - - addUnitAlias('month', 'M'); - - // PRIORITY - - addUnitPriority('month', 8); - // PARSING - addRegexToken('M', match1to2); + addRegexToken('M', match1to2, match1to2NoLeadingZero); addRegexToken('MM', match1to2, match2); addRegexToken('MMM', function (isStrict, locale) { return locale.monthsShortRegex(isStrict); @@ -947,12 +1106,12 @@ // LOCALES - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( - '_' - ), - defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( - '_' - ), + var defaultLocaleMonths = + 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = + 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord; @@ -1088,8 +1247,6 @@ // MOMENTS function setMonth(mom, value) { - var dayOfMonth; - if (!mom.isValid()) { // No op return mom; @@ -1107,8 +1264,13 @@ } } - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + var month = value, + date = mom.date(); + + date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month)); + void (mom._isUTC + ? mom._d.setUTCMonth(month, date) + : mom._d.setMonth(month, date)); return mom; } @@ -1175,27 +1337,24 @@ longPieces = [], mixedPieces = [], i, - mom; + mom, + shortP, + longP; for (i = 0; i < 12; i++) { // make the regex if we don't have it already mom = createUTC([2000, i]); - shortPieces.push(this.monthsShort(mom, '')); - longPieces.push(this.months(mom, '')); - mixedPieces.push(this.months(mom, '')); - mixedPieces.push(this.monthsShort(mom, '')); + shortP = regexEscape(this.monthsShort(mom, '')); + longP = regexEscape(this.months(mom, '')); + shortPieces.push(shortP); + longPieces.push(longP); + mixedPieces.push(longP); + mixedPieces.push(shortP); } // Sorting makes sure if one month (or abbr) is a prefix of another it // will match the longer piece. shortPieces.sort(cmpLenRev); longPieces.sort(cmpLenRev); mixedPieces.sort(cmpLenRev); - for (i = 0; i < 12; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - } - for (i = 0; i < 24; i++) { - mixedPieces[i] = regexEscape(mixedPieces[i]); - } this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); this._monthsShortRegex = this._monthsRegex; @@ -1209,69 +1368,6 @@ ); } - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? zeroFill(y, 4) : '+' + y; - }); - - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); - - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - - // ALIASES - - addUnitAlias('year', 'y'); - - // PRIORITIES - - addUnitPriority('year', 1); - - // PARSING - - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = - input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = hooks.parseTwoDigitYear(input); - }); - addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); - }); - - // HELPERS - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - // HOOKS - - hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - // MOMENTS - - var getSetYear = makeGetSet('FullYear', true); - - function getIsLeapYear() { - return isLeapYear(this.year()); - } - function createDate(y, m, d, h, M, s, ms) { // can't just apply() to create a date: // https://stackoverflow.com/q/181348 @@ -1377,31 +1473,19 @@ addFormatToken('w', ['ww', 2], 'wo', 'week'); addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - // ALIASES - - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); - - // PRIORITIES - - addUnitPriority('week', 5); - addUnitPriority('isoWeek', 5); - // PARSING - addRegexToken('w', match1to2); + addRegexToken('w', match1to2, match1to2NoLeadingZero); addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); + addRegexToken('W', match1to2, match1to2NoLeadingZero); addRegexToken('WW', match1to2, match2); - addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( - input, - week, - config, - token - ) { - week[token.substr(0, 1)] = toInt(input); - }); + addWeekParseToken( + ['w', 'ww', 'W', 'WW'], + function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); + } + ); // HELPERS @@ -1455,17 +1539,6 @@ addFormatToken('e', 0, 0, 'weekday'); addFormatToken('E', 0, 0, 'isoWeekday'); - // ALIASES - - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); - - // PRIORITY - addUnitPriority('day', 11); - addUnitPriority('weekday', 11); - addUnitPriority('isoWeekday', 11); - // PARSING addRegexToken('d', match1to2); @@ -1526,9 +1599,8 @@ return ws.slice(n, 7).concat(ws.slice(0, n)); } - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( - '_' - ), + var defaultLocaleWeekdays = + 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), defaultWeekdaysRegex = matchWord, @@ -1546,24 +1618,24 @@ return m === true ? shiftWeekdays(weekdays, this._week.dow) : m - ? weekdays[m.day()] - : weekdays; + ? weekdays[m.day()] + : weekdays; } function localeWeekdaysShort(m) { return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m - ? this._weekdaysShort[m.day()] - : this._weekdaysShort; + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; } function localeWeekdaysMin(m) { return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m - ? this._weekdaysMin[m.day()] - : this._weekdaysMin; + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; } function handleStrictParse$1(weekdayName, format, strict) { @@ -1712,7 +1784,8 @@ if (!this.isValid()) { return input != null ? this : NaN; } - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + + var day = get(this, 'Day'); if (input != null) { input = parseWeekday(input, this.localeData()); return this.add(input - day, 'd'); @@ -1911,13 +1984,6 @@ meridiem('a', true); meridiem('A', false); - // ALIASES - - addUnitAlias('hour', 'h'); - - // PRIORITY - addUnitPriority('hour', 13); - // PARSING function matchMeridiem(isStrict, locale) { @@ -1926,9 +1992,9 @@ addRegexToken('a', matchMeridiem); addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('k', match1to2); + addRegexToken('H', match1to2, match1to2HasZero); + addRegexToken('h', match1to2, match1to2NoLeadingZero); + addRegexToken('k', match1to2, match1to2NoLeadingZero); addRegexToken('HH', match1to2, match2); addRegexToken('hh', match1to2, match2); addRegexToken('kk', match1to2, match2); @@ -2076,6 +2142,12 @@ return globalLocale; } + function isLocaleNameSane(name) { + // Prevent names that look like filesystem paths, i.e contain '/' or '\' + // Ensure name is available and function returns boolean + return !!(name && name.match('^[^/\\\\]*$')); + } + function loadLocale(name) { var oldLocale = null, aliasedRequire; @@ -2084,7 +2156,8 @@ locales[name] === undefined && typeof module !== 'undefined' && module && - module.exports + module.exports && + isLocaleNameSane(name) ) { try { oldLocale = globalLocale._abbr; @@ -2264,21 +2337,21 @@ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) - ? DATE - : a[HOUR] < 0 || - a[HOUR] > 24 || - (a[HOUR] === 24 && - (a[MINUTE] !== 0 || - a[SECOND] !== 0 || - a[MILLISECOND] !== 0)) - ? HOUR - : a[MINUTE] < 0 || a[MINUTE] > 59 - ? MINUTE - : a[SECOND] < 0 || a[SECOND] > 59 - ? SECOND - : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 - ? MILLISECOND - : -1; + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; if ( getParsingFlags(m)._overflowDayOfYear && @@ -2301,8 +2374,10 @@ // iso 8601 regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, - basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + var extendedIsoRegex = + /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = + /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], @@ -2333,7 +2408,8 @@ ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 - rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + rfc2822 = + /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = { UT: 0, GMT: 0, @@ -2356,12 +2432,13 @@ allowTime, dateFormat, timeFormat, - tzFormat; + tzFormat, + isoDatesLen = isoDates.length, + isoTimesLen = isoTimes.length; if (match) { getParsingFlags(config).iso = true; - - for (i = 0, l = isoDates.length; i < l; i++) { + for (i = 0, l = isoDatesLen; i < l; i++) { if (isoDates[i][1].exec(match[1])) { dateFormat = isoDates[i][0]; allowTime = isoDates[i][2] !== false; @@ -2373,7 +2450,7 @@ return; } if (match[3]) { - for (i = 0, l = isoTimes.length; i < l; i++) { + for (i = 0, l = isoTimesLen; i < l; i++) { if (isoTimes[i][1].exec(match[3])) { // match[2] should be 'T' or space timeFormat = (match[2] || ' ') + isoTimes[i][0]; @@ -2440,7 +2517,7 @@ function preprocessRFC2822(s) { // Remove comments and folding whitespace and replace multiple-spaces with a single space return s - .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/\([^()]*\)|[\n\t]/g, ' ') .replace(/(\s\s+)/g, ' ') .replace(/^\s\s*/, '') .replace(/\s\s*$/, ''); @@ -2540,8 +2617,7 @@ hooks.createFromInputFallback = deprecate( 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + - 'discouraged and will be removed in an upcoming major release. Please refer to ' + - 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) { config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); } @@ -2754,17 +2830,16 @@ skipped, stringLength = string.length, totalParsedInputLength = 0, - era; + era, + tokenLen; tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { + tokenLen = tokens.length; + for (i = 0; i < tokenLen; i++) { token = tokens[i]; parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); if (parsedInput) { skipped = string.substr(0, string.indexOf(parsedInput)); if (skipped.length > 0) { @@ -2856,15 +2931,16 @@ i, currentScore, validFormatFound, - bestFormatIsValid = false; + bestFormatIsValid = false, + configfLen = config._f.length; - if (config._f.length === 0) { + if (configfLen === 0) { getParsingFlags(config).invalidFormat = true; config._d = new Date(NaN); return; } - for (i = 0; i < config._f.length; i++) { + for (i = 0; i < configfLen; i++) { currentScore = 0; validFormatFound = false; tempConfig = copyConfig({}, config); @@ -3105,7 +3181,8 @@ function isDurationValid(m) { var key, unitHasDecimal = false, - i; + i, + orderLen = ordering.length; for (key in m) { if ( hasOwnProp(m, key) && @@ -3118,7 +3195,7 @@ } } - for (i = 0; i < ordering.length; ++i) { + for (i = 0; i < orderLen; ++i) { if (m[ordering[i]]) { if (unitHasDecimal) { return false; // only allow non-integers for smallest unit @@ -3443,7 +3520,8 @@ // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere // and further modified to allow for strings containing both week and day - isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + isoRegex = + /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; function createDuration(input, key) { var duration = input, @@ -3664,9 +3742,10 @@ 'ms', ], i, - property; + property, + propertyLen = properties.length; - for (i = 0; i < properties.length; i += 1) { + for (i = 0; i < propertyLen; i += 1) { property = properties[i]; propertyTest = propertyTest || hasOwnProp(input, property); } @@ -3713,22 +3792,25 @@ return diff < -6 ? 'sameElse' : diff < -1 - ? 'lastWeek' - : diff < 0 - ? 'lastDay' - : diff < 1 - ? 'sameDay' - : diff < 2 - ? 'nextDay' - : diff < 7 - ? 'nextWeek' - : 'sameElse'; + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; } function calendar$1(time, formats) { // Support for single parameter, formats only overload to the calendar function if (arguments.length === 1) { - if (isMomentInput(arguments[0])) { + if (!arguments[0]) { + time = undefined; + formats = undefined; + } else if (isMomentInput(arguments[0])) { time = arguments[0]; formats = undefined; } else if (isCalendarSpec(arguments[0])) { @@ -4286,19 +4368,17 @@ addRegexToken('NNNN', matchEraName); addRegexToken('NNNNN', matchEraNarrow); - addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( - input, - array, - config, - token - ) { - var era = config._locale.erasParse(input, token, config._strict); - if (era) { - getParsingFlags(config).era = era; - } else { - getParsingFlags(config).invalidEra = input; + addParseToken( + ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], + function (input, array, config, token) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } } - }); + ); addRegexToken('y', matchUnsigned); addRegexToken('yy', matchUnsigned); @@ -4406,7 +4486,7 @@ eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].name; @@ -4426,7 +4506,7 @@ eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].narrow; @@ -4446,7 +4526,7 @@ eras = this.localeData().eras(); for (i = 0, l = eras.length; i < l; ++i) { // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if (eras[i].since <= val && val <= eras[i].until) { return eras[i].abbr; @@ -4469,7 +4549,7 @@ dir = eras[i].since <= eras[i].until ? +1 : -1; // truncate time - val = this.startOf('day').valueOf(); + val = this.clone().startOf('day').valueOf(); if ( (eras[i].since <= val && val <= eras[i].until) || @@ -4529,16 +4609,22 @@ mixedPieces = [], i, l, + erasName, + erasAbbr, + erasNarrow, eras = this.eras(); for (i = 0, l = eras.length; i < l; ++i) { - namePieces.push(regexEscape(eras[i].name)); - abbrPieces.push(regexEscape(eras[i].abbr)); - narrowPieces.push(regexEscape(eras[i].narrow)); + erasName = regexEscape(eras[i].name); + erasAbbr = regexEscape(eras[i].abbr); + erasNarrow = regexEscape(eras[i].narrow); - mixedPieces.push(regexEscape(eras[i].name)); - mixedPieces.push(regexEscape(eras[i].abbr)); - mixedPieces.push(regexEscape(eras[i].narrow)); + namePieces.push(erasName); + abbrPieces.push(erasAbbr); + narrowPieces.push(erasNarrow); + mixedPieces.push(erasName); + mixedPieces.push(erasAbbr); + mixedPieces.push(erasNarrow); } this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); @@ -4571,14 +4657,6 @@ // ALIASES - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); - - // PRIORITY - - addUnitPriority('weekYear', 1); - addUnitPriority('isoWeekYear', 1); - // PARSING addRegexToken('G', matchSigned); @@ -4590,14 +4668,12 @@ addRegexToken('GGGGG', match1to6, match6); addRegexToken('ggggg', match1to6, match6); - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( - input, - week, - config, - token - ) { - week[token.substr(0, 2)] = toInt(input); - }); + addWeekParseToken( + ['gggg', 'ggggg', 'GGGG', 'GGGGG'], + function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); + } + ); addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { week[token] = hooks.parseTwoDigitYear(input); @@ -4610,7 +4686,7 @@ this, input, this.week(), - this.weekday(), + this.weekday() + this.localeData()._week.dow, this.localeData()._week.dow, this.localeData()._week.doy ); @@ -4672,14 +4748,6 @@ addFormatToken('Q', 0, 'Qo', 'quarter'); - // ALIASES - - addUnitAlias('quarter', 'Q'); - - // PRIORITY - - addUnitPriority('quarter', 7); - // PARSING addRegexToken('Q', match1); @@ -4699,16 +4767,9 @@ addFormatToken('D', ['DD', 2], 'Do', 'date'); - // ALIASES - - addUnitAlias('date', 'D'); - - // PRIORITY - addUnitPriority('date', 9); - // PARSING - addRegexToken('D', match1to2); + addRegexToken('D', match1to2, match1to2NoLeadingZero); addRegexToken('DD', match1to2, match2); addRegexToken('Do', function (isStrict, locale) { // TODO: Remove "ordinalParse" fallback in next major release. @@ -4730,13 +4791,6 @@ addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - // ALIASES - - addUnitAlias('dayOfYear', 'DDD'); - - // PRIORITY - addUnitPriority('dayOfYear', 4); - // PARSING addRegexToken('DDD', match1to3); @@ -4761,17 +4815,9 @@ addFormatToken('m', ['mm', 2], 0, 'minute'); - // ALIASES - - addUnitAlias('minute', 'm'); - - // PRIORITY - - addUnitPriority('minute', 14); - // PARSING - addRegexToken('m', match1to2); + addRegexToken('m', match1to2, match1to2HasZero); addRegexToken('mm', match1to2, match2); addParseToken(['m', 'mm'], MINUTE); @@ -4783,17 +4829,9 @@ addFormatToken('s', ['ss', 2], 0, 'second'); - // ALIASES - - addUnitAlias('second', 's'); - - // PRIORITY - - addUnitPriority('second', 15); - // PARSING - addRegexToken('s', match1to2); + addRegexToken('s', match1to2, match1to2HasZero); addRegexToken('ss', match1to2, match2); addParseToken(['s', 'ss'], SECOND); @@ -4831,14 +4869,6 @@ return this.millisecond() * 1000000; }); - // ALIASES - - addUnitAlias('millisecond', 'ms'); - - // PRIORITY - - addUnitPriority('millisecond', 16); - // PARSING addRegexToken('S', match1to3, match1); @@ -5146,12 +5176,12 @@ toInt((number % 100) / 10) === 1 ? 'th' : b === 1 - ? 'st' - : b === 2 - ? 'nd' - : b === 3 - ? 'rd' - : 'th'; + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; return number + output; }, }); @@ -5324,19 +5354,6 @@ } } - // TODO: Use this.as('ms')? - function valueOf$1() { - if (!this.isValid()) { - return NaN; - } - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); - } - function makeAs(alias) { return function () { return this.as(alias); @@ -5351,7 +5368,8 @@ asWeeks = makeAs('w'), asMonths = makeAs('M'), asQuarters = makeAs('Q'), - asYears = makeAs('y'); + asYears = makeAs('y'), + valueOf$1 = asMilliseconds; function clone$1() { return createDuration(this); @@ -5620,7 +5638,7 @@ //! moment.js - hooks.version = '2.25.2'; + hooks.version = '2.30.1'; setHookCallback(createLocal); diff --git a/tests/api-testing/action/Block.js b/tests/api-testing/action/Block.js new file mode 100644 index 000000000000..8053137494b5 --- /dev/null +++ b/tests/api-testing/action/Block.js @@ -0,0 +1,29 @@ +'use strict'; + +const { action, assert } = require( 'api-testing' ); + +describe( 'Block', () => { + const ip = '::' + Math.floor( Math.random() * 65534 ).toString( 16 ); + it( 'should not allow multiblocks without newblock (T389028)', async () => { + const mindy = await action.mindy(); + const token = await mindy.token(); + const promises = [ + mindy.request( { action: 'block', user: ip, token: token }, 'POST' ), + mindy.request( { action: 'block', user: ip, token: token }, 'POST' ) + ]; + const res = await Promise.all( promises ); + assert.lengthOf( res, 2 ); + assert.equal( res[ 0 ].status, 200 ); + assert.equal( res[ 1 ].status, 200 ); + + const goodIndex = 'block' in res[ 0 ].body ? 0 : 1; + const goodBody = res[ goodIndex ].body; + const badBody = res[ +!goodIndex ].body; + + assert.property( goodBody, 'block' ); + assert.isOk( goodBody.block.id ); + + assert.property( badBody, 'error' ); + assert.equal( badBody.error.code, 'alreadyblocked' ); + } ); +} ); diff --git a/tests/phpunit/includes/Output/OutputPageTest.php b/tests/phpunit/includes/Output/OutputPageTest.php index 1b6b59413436..10f871f21a76 100644 --- a/tests/phpunit/includes/Output/OutputPageTest.php +++ b/tests/phpunit/includes/Output/OutputPageTest.php @@ -1614,6 +1614,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase { } public function testRevisionTimestamp() { + $this->filterDeprecated( '/OutputPage::setRevisionTimestamp was deprecated/' ); $op = $this->newInstance(); $this->assertNull( $op->getRevisionTimestamp() ); diff --git a/tests/phpunit/includes/editpage/EditPageConstraintsTest.php b/tests/phpunit/includes/editpage/EditPageConstraintsTest.php index 2ca607066035..84dbbc7c7723 100644 --- a/tests/phpunit/includes/editpage/EditPageConstraintsTest.php +++ b/tests/phpunit/includes/editpage/EditPageConstraintsTest.php @@ -7,7 +7,9 @@ use MediaWiki\EditPage\EditPage; use MediaWiki\EditPage\SpamChecker; use MediaWiki\MainConfigNames; use MediaWiki\Permissions\PermissionManager; +use MediaWiki\Permissions\PermissionStatus; use MediaWiki\Request\FauxRequest; +use MediaWiki\Tests\Unit\MockBlockTrait; use MediaWiki\Tests\User\TempUser\TempUserTestTrait; use MediaWiki\Title\Title; use MediaWiki\User\User; @@ -27,6 +29,7 @@ use Wikimedia\Rdbms\ReadOnlyMode; class EditPageConstraintsTest extends MediaWikiLangTestCase { use TempUserTestTrait; + use MockBlockTrait; protected function setUp(): void { parent::setUp(); @@ -183,8 +186,8 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach AccidentalRecreationConstraint - $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); + // Needs these rights to pass AuthorizationConstraint and reach AccidentalRecreationConstraint + $permissionManager->overrideUserRightsForTesting( $user, [ 'edit', 'createpage' ] ); // Started the edit on 1 January 2019, page was deleted on 1 January 2020 $edit = [ @@ -215,7 +218,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach NewSectionMissingSubjectConstraint + // Needs these rights to pass AuthorizationConstraint and reach NewSectionMissingSubjectConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); $edit = [ @@ -258,7 +261,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { public function testContentModelChangeConstraint() { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach ContentModelChangeConstraint + // Needs these rights to pass AuthorizationConstraint and reach ContentModelChangeConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); $edit = [ @@ -285,14 +288,13 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { ); } - /** CreationPermissionConstraint integration */ - public function testCreationPermissionConstraint() { - $page = $this->getNonexistingTestPage( 'CreationPermissionConstraint page does not exist' ); + /** AuthorizationConstraint integration - 'create' rights */ + public function testAuthorizationConstraint_create() { + $page = $this->getNonexistingTestPage( 'AuthorizationConstraint_create page does not exist' ); $title = $page->getTitle(); $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach CreationPermissionConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); $edit = [ @@ -316,7 +318,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit and createpage rights to pass EditRightConstraint and CreationPermissionConstraint + // Needs these rights to pass AuthorizationConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit', 'createpage' ] ); $edit = [ @@ -366,7 +368,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit and createpage rights to pass EditRightConstraint and CreationPermissionConstraint + // Needs these rights to pass AuthorizationConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit', 'createpage' ] ); $edit = [ @@ -399,12 +401,12 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { } /** - * EditRightConstraint integration - * @dataProvider provideTestEditRightConstraint + * AuthorizationConstraint integration - 'edit' rights + * @dataProvider provideTestAuthorizationConstraint_edit * @param bool $anon * @param int $expectedErrorCode */ - public function testEditRightConstraint( $anon, $expectedErrorCode ) { + public function testAuthorizationConstraint_edit( $anon, $expectedErrorCode ) { if ( $anon ) { $this->disableAutoCreateTempUser(); $user = $this->getServiceContainer()->getUserFactory()->newAnonymous( '127.0.0.1' ); @@ -428,7 +430,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { ); } - public static function provideTestEditRightConstraint() { + public static function provideTestAuthorizationConstraint_edit() { yield 'Anonymous user' => [ true, EditPage::AS_READ_ONLY_PAGE_ANON ]; yield 'Registered user' => [ false, EditPage::AS_READ_ONLY_PAGE_LOGGED ]; } @@ -448,7 +450,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { } $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach ImageRedirectConstraint + // Needs these rights to pass AuthorizationConstraint and reach ImageRedirectConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); $edit = [ @@ -480,7 +482,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach MissingCommentConstraint + // Needs these rights to pass AuthorizationConstraint and reach MissingCommentConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); $edit = [ @@ -512,7 +514,7 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { $user = $this->getTestUser()->getUser(); $permissionManager = $this->getServiceContainer()->getPermissionManager(); - // Needs edit rights to pass EditRightConstraint and reach NewSectionMissingSubjectConstraint + // Needs these rights to pass AuthorizationConstraint and reach NewSectionMissingSubjectConstraint $permissionManager->overrideUserRightsForTesting( $user, [ 'edit' ] ); $edit = [ @@ -646,21 +648,14 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { ); } - /** UserBlockConstraint integration */ - public function testUserBlockConstraint() { - $user = $this->createMock( User::class ); - $user->method( 'getName' )->willReturn( 'NameGoesHere' ); - $user->method( 'getId' )->willReturn( 12345 ); - + /** AuthorizationConstraint integration - user blocks */ + public function testAuthorizationConstraint_block() { $permissionManager = $this->createMock( PermissionManager::class ); - // Needs edit rights to pass EditRightConstraint and reach UserBlockConstraint - $permissionManager->method( 'userHasRight' )->willReturn( true ); - $permissionManager->method( 'userCan' )->willReturn( true ); - + $permissionStatus = PermissionStatus::newEmpty(); + $permissionStatus->setBlock( $this->makeMockBlock() ); // Not worried about the specifics of the method call, those are tested in - // the UserBlockConstraintTest - $permissionManager->method( 'isBlockedFrom' )->willReturn( true ); - + // the AuthorizationConstraintTest + $permissionManager->method( 'getPermissionStatus' )->willReturn( $permissionStatus ); $this->setService( 'PermissionManager', $permissionManager ); $edit = [ @@ -677,8 +672,8 @@ class EditPageConstraintsTest extends MediaWikiLangTestCase { ); } - /** UserRateLimitConstraint integration */ - public function testUserRateLimitConstraint() { + /** LinkPurgeRateLimitConstraint integration */ + public function testLinkPurgeRateLimitConstraint() { $this->setTemporaryHook( 'PingLimiter', static function ( $user, $action, &$result, $incrBy ) { diff --git a/tests/phpunit/mocks/permissions/MockAuthorityTrait.php b/tests/phpunit/mocks/permissions/MockAuthorityTrait.php index b9b0c9350cbd..eedb4e3d7c70 100644 --- a/tests/phpunit/mocks/permissions/MockAuthorityTrait.php +++ b/tests/phpunit/mocks/permissions/MockAuthorityTrait.php @@ -334,6 +334,7 @@ trait MockAuthorityTrait { return true; } ); $mock->method( 'getBlock' )->willReturn( $block ); + $mock->method( 'isRegistered' )->willReturn( $user->isRegistered() ); $mock->method( 'isTemp' )->willReturn( $isTemp ); $mock->method( 'isNamed' )->willReturn( $user->isRegistered() && !$isTemp ); return $mock; diff --git a/tests/phpunit/unit/includes/editpage/Constraint/AuthorizationConstraintTest.php b/tests/phpunit/unit/includes/editpage/Constraint/AuthorizationConstraintTest.php new file mode 100644 index 000000000000..68d8c6541858 --- /dev/null +++ b/tests/phpunit/unit/includes/editpage/Constraint/AuthorizationConstraintTest.php @@ -0,0 +1,111 @@ +<?php +/** + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + */ + +use MediaWiki\EditPage\Constraint\AuthorizationConstraint; +use MediaWiki\EditPage\Constraint\IEditConstraint; +use MediaWiki\Page\PageIdentity; +use MediaWiki\Page\PageIdentityValue; +use MediaWiki\Permissions\Authority; +use MediaWiki\Tests\Unit\MockBlockTrait; +use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait; +use MediaWiki\User\UserIdentityValue; + +/** + * @covers \MediaWiki\EditPage\Constraint\AuthorizationConstraint + */ +class AuthorizationConstraintTest extends MediaWikiUnitTestCase { + use EditConstraintTestTrait; + use MockAuthorityTrait; + use MockTitleTrait; + use MockBlockTrait; + + /** + * @dataProvider provideTestPass + */ + public function testPass( Authority $performer, PageIdentity $page, bool $new ): void { + $constraint = new AuthorizationConstraint( + $performer, + $page, + $new + ); + $this->assertConstraintPassed( $constraint ); + } + + public function provideTestPass(): iterable { + yield 'Edit existing page' => [ + 'performer' => $this->mockAnonAuthorityWithPermissions( [ 'edit' ] ), + 'page' => PageIdentityValue::localIdentity( 123, NS_MAIN, 'AuthorizationConstraintTest' ), + 'new' => false, + ]; + yield 'Create a new page' => [ + 'performer' => $this->mockAnonAuthorityWithPermissions( [ 'edit', 'create' ] ), + 'page' => PageIdentityValue::localIdentity( 0, NS_MAIN, 'AuthorizationConstraintTest' ), + 'new' => true, + ]; + } + + /** + * @dataProvider provideTestFailure + */ + public function testFailure( + Authority $performer, PageIdentity $page, bool $new, int $expectedValue + ): void { + $constraint = new AuthorizationConstraint( + $performer, + $page, + $new + ); + $this->assertConstraintFailed( $constraint, $expectedValue ); + } + + public function provideTestFailure(): iterable { + yield 'Anonymous user' => [ + 'performer' => $this->mockAnonAuthorityWithoutPermissions( [ 'edit' ] ), + 'page' => PageIdentityValue::localIdentity( 123, NS_MAIN, 'AuthorizationConstraintTest' ), + 'new' => false, + 'expectedValue' => IEditConstraint::AS_READ_ONLY_PAGE_ANON, + ]; + yield 'Registered user' => [ + 'performer' => $this->mockRegisteredAuthorityWithoutPermissions( [ 'edit' ] ), + 'page' => PageIdentityValue::localIdentity( 123, NS_MAIN, 'AuthorizationConstraintTest' ), + 'new' => false, + 'expectedValue' => IEditConstraint::AS_READ_ONLY_PAGE_LOGGED, + ]; + yield 'User without create permission creates a page' => [ + 'performer' => $this->mockAnonAuthorityWithoutPermissions( [ 'create' ] ), + 'page' => PageIdentityValue::localIdentity( 0, NS_MAIN, 'AuthorizationConstraintTest' ), + 'new' => true, + 'expectedValue' => IEditConstraint::AS_NO_CREATE_PERMISSION, + ]; + yield 'Blocked user' => [ + 'performer' => $this->mockUserAuthorityWithBlock( + UserIdentityValue::newRegistered( 42, 'AuthorizationConstraintTest User' ), + $this->makeMockBlock( [ + 'decodedExpiry' => 'infinity', + ] ), + [ 'edit' ] + ), + 'page' => PageIdentityValue::localIdentity( 123, NS_MAIN, 'AuthorizationConstraintTest' ), + 'new' => false, + 'expectedValue' => IEditConstraint::AS_BLOCKED_PAGE_FOR_USER, + ]; + } + +} diff --git a/tests/phpunit/unit/includes/editpage/Constraint/EditConstraintFactoryTest.php b/tests/phpunit/unit/includes/editpage/Constraint/EditConstraintFactoryTest.php index dabb27a15ff1..76ce13cb71d5 100644 --- a/tests/phpunit/unit/includes/editpage/Constraint/EditConstraintFactoryTest.php +++ b/tests/phpunit/unit/includes/editpage/Constraint/EditConstraintFactoryTest.php @@ -27,13 +27,11 @@ use MediaWiki\EditPage\Constraint\PageSizeConstraint; use MediaWiki\EditPage\Constraint\ReadOnlyConstraint; use MediaWiki\EditPage\Constraint\SimpleAntiSpamConstraint; use MediaWiki\EditPage\Constraint\SpamRegexConstraint; -use MediaWiki\EditPage\Constraint\UserBlockConstraint; use MediaWiki\EditPage\SpamChecker; use MediaWiki\HookContainer\HookContainer; use MediaWiki\Language\Language; use MediaWiki\Logger\Spi; use MediaWiki\MainConfigNames; -use MediaWiki\Permissions\PermissionManager; use MediaWiki\Permissions\RateLimiter; use MediaWiki\Title\Title; use MediaWiki\User\User; @@ -61,7 +59,6 @@ class EditConstraintFactoryTest extends MediaWikiUnitTestCase { $factory = new EditConstraintFactory( $options, $loggerFactory, - $this->createMock( PermissionManager::class ), $this->createMock( HookContainer::class ), $this->createMock( ReadOnlyMode::class ), $this->createMock( SpamChecker::class ), @@ -107,9 +104,5 @@ class EditConstraintFactoryTest extends MediaWikiUnitTestCase { $title ) ); - $this->assertInstanceOf( - UserBlockConstraint::class, - $factory->newUserBlockConstraint( $title, $user ) - ); } } diff --git a/tests/phpunit/unit/includes/editpage/Constraint/EditRightConstraintTest.php b/tests/phpunit/unit/includes/editpage/Constraint/EditRightConstraintTest.php deleted file mode 100644 index 9d3346e87d01..000000000000 --- a/tests/phpunit/unit/includes/editpage/Constraint/EditRightConstraintTest.php +++ /dev/null @@ -1,170 +0,0 @@ -<?php -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - */ - -use MediaWiki\EditPage\Constraint\EditRightConstraint; -use MediaWiki\EditPage\Constraint\IEditConstraint; -use MediaWiki\Permissions\PermissionManager; -use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait; -use MediaWiki\Title\Title; -use MediaWiki\User\User; - -/** - * Tests the EditRightConstraint - * - * @author DannyS712 - * - * @covers \MediaWiki\EditPage\Constraint\EditRightConstraint - */ -class EditRightConstraintTest extends MediaWikiUnitTestCase { - use EditConstraintTestTrait; - use MockAuthorityTrait; - use MockTitleTrait; - - /** - * @dataProvider provideTestPass - * @param User $performer - * @param bool $new - * @param PermissionManager $permissionManager - * @return void - */ - public function testPass( User $performer, bool $new, PermissionManager $permissionManager ) { - $constraint = new EditRightConstraint( - $performer, - $permissionManager, - $this->createMock( Title::class ), - $new - ); - $this->assertConstraintPassed( $constraint ); - } - - public function provideTestPass() { - $title = $this->createMock( Title::class ); - $userEdit = $this->createMock( User::class ); - $permissionManagerEdit = $this->createMock( PermissionManager::class ); - $permissionManagerEdit->expects( $this->once() ) - ->method( 'userCan' ) - ->with( - 'edit', - $userEdit, - $title - ) - ->willReturn( true ); - $userCreateAndEdit = $this->createMock( User::class ); - $userCreateAndEdit->expects( $this->once() ) - ->method( 'authorizeWrite' ) - ->with( - 'create', - $title - ) - ->willReturn( true ); - $permissionManagerCreateAndEdit = $this->createMock( PermissionManager::class ); - $permissionManagerCreateAndEdit->expects( $this->once() ) - ->method( 'userCan' ) - ->with( - 'edit', - $userCreateAndEdit, - $title - ) - ->willReturn( true ); - yield 'Edit existing page' => [ - 'performer' => $userEdit, - 'new' => false, - 'permissionManager' => $permissionManagerEdit - ]; - yield 'Create a new page' => [ - 'performer' => $userCreateAndEdit, - 'new' => true, - 'permissionManager' => $permissionManagerCreateAndEdit - ]; - } - - /** - * @dataProvider provideTestFailure - * @param User $performer - * @param bool $new - * @param PermissionManager $permissionManager - * @param int $expectedValue - */ - public function testFailure( - User $performer, bool $new, PermissionManager $permissionManager, int $expectedValue - ) { - $title = $this->createMock( Title::class ); - $constraint = new EditRightConstraint( - $performer, - $permissionManager, - $title, - $new - ); - $this->assertConstraintFailed( $constraint, $expectedValue ); - } - - public function provideTestFailure() { - $title = $this->createMock( Title::class ); - $anon = $this->createMock( User::class ); - $anon->expects( $this->once() )->method( 'isRegistered' )->willReturn( false ); - $permissionManagerAnon = $this->createMock( PermissionManager::class ); - $permissionManagerAnon->expects( $this->once() ) - ->method( 'userCan' ) - ->with( - 'edit', - $anon, - $title - ) - ->willReturn( false ); - $reg = $this->createMock( User::class ); - $reg->expects( $this->once() )->method( 'isRegistered' )->willReturn( true ); - $permissionManagerReg = $this->createMock( PermissionManager::class ); - $permissionManagerReg->expects( $this->once() ) - ->method( 'userCan' ) - ->with( - 'edit', - $reg, - $title - ) - ->willReturn( false ); - $userWithoutCreatePerm = $this->createMock( User::class ); - $userWithoutCreatePerm->expects( $this->once() ) - ->method( 'authorizeWrite' ) - ->with( - 'create', - $title - ) - ->willReturn( false ); - yield 'Anonymous user' => [ - 'performer' => $anon, - 'new' => false, - 'permissionManager' => $permissionManagerAnon, - 'expectedValue' => IEditConstraint::AS_READ_ONLY_PAGE_ANON, - ]; - yield 'Registered user' => [ - 'performer' => $reg, - 'new' => false, - 'permissionManager' => $permissionManagerReg, - 'expectedValue' => IEditConstraint::AS_READ_ONLY_PAGE_LOGGED, - ]; - yield 'User without create permission creates a page' => [ - 'performer' => $userWithoutCreatePerm, - 'new' => true, - 'permissionManager' => $this->createMock( PermissionManager::class ), - 'expectedValue' => IEditConstraint::AS_NO_CREATE_PERMISSION, - ]; - } - -} diff --git a/tests/phpunit/unit/includes/editpage/Constraint/UserRateLimitConstraintTest.php b/tests/phpunit/unit/includes/editpage/Constraint/LinkPurgeRateLimitConstraintTest.php index b832aa7ee5e5..7363601e0f72 100644 --- a/tests/phpunit/unit/includes/editpage/Constraint/UserRateLimitConstraintTest.php +++ b/tests/phpunit/unit/includes/editpage/Constraint/LinkPurgeRateLimitConstraintTest.php @@ -19,20 +19,20 @@ */ use MediaWiki\EditPage\Constraint\IEditConstraint; -use MediaWiki\EditPage\Constraint\UserRateLimitConstraint; +use MediaWiki\EditPage\Constraint\LinkPurgeRateLimitConstraint; use MediaWiki\Permissions\RateLimiter; use MediaWiki\Permissions\RateLimitSubject; use MediaWiki\User\UserIdentityValue; use PHPUnit\Framework\MockObject\MockObject; /** - * Tests the UserRateLimitConstraint + * Tests the LinkPurgeRateLimitConstraint * * @author DannyS712 * - * @covers \MediaWiki\EditPage\Constraint\UserRateLimitConstraint + * @covers \MediaWiki\EditPage\Constraint\LinkPurgeRateLimitConstraint */ -class UserRateLimitConstraintTest extends MediaWikiUnitTestCase { +class LinkPurgeRateLimitConstraintTest extends MediaWikiUnitTestCase { use EditConstraintTestTrait; /** @@ -42,19 +42,10 @@ class UserRateLimitConstraintTest extends MediaWikiUnitTestCase { */ private function getRateLimiter( $fail ) { $mock = $this->createNoOpMock( RateLimiter::class, [ 'limit' ] ); - $expectedArgs = [ - [ 'edit', 1, false ], - [ 'linkpurge', 0, false ], - [ 'editcontentmodel', 1, $fail ] - ]; - $mock->expects( $this->exactly( 3 ) ) + $mock->expects( $this->once() ) ->method( 'limit' ) - ->willReturnCallback( function ( $_, $action, $incrBy ) use ( &$expectedArgs ) { - $curExpectedArgs = array_shift( $expectedArgs ); - $this->assertSame( $curExpectedArgs[0], $action ); - $this->assertSame( $curExpectedArgs[1], $incrBy ); - return $curExpectedArgs[2]; - } ); + ->with( self::anything(), 'linkpurge', 0 ) + ->willReturn( $fail ); return $mock; } @@ -63,7 +54,7 @@ class UserRateLimitConstraintTest extends MediaWikiUnitTestCase { $subject = new RateLimitSubject( new UserIdentityValue( 1, 'test' ), null, [] ); - $constraint = new UserRateLimitConstraint( $limiter, $subject, 'OldContentModel', 'NewContentModel' ); + $constraint = new LinkPurgeRateLimitConstraint( $limiter, $subject ); $this->assertConstraintPassed( $constraint ); } @@ -72,7 +63,7 @@ class UserRateLimitConstraintTest extends MediaWikiUnitTestCase { $subject = new RateLimitSubject( new UserIdentityValue( 1, 'test' ), null, [] ); - $constraint = new UserRateLimitConstraint( $limiter, $subject, 'OldContentModel', 'NewContentModel' ); + $constraint = new LinkPurgeRateLimitConstraint( $limiter, $subject ); $this->assertConstraintFailed( $constraint, IEditConstraint::AS_RATE_LIMITED ); } diff --git a/tests/phpunit/unit/includes/editpage/Constraint/UserBlockConstraintTest.php b/tests/phpunit/unit/includes/editpage/Constraint/UserBlockConstraintTest.php deleted file mode 100644 index e231e4a50c66..000000000000 --- a/tests/phpunit/unit/includes/editpage/Constraint/UserBlockConstraintTest.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -/** - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - */ - -use MediaWiki\EditPage\Constraint\IEditConstraint; -use MediaWiki\EditPage\Constraint\UserBlockConstraint; -use MediaWiki\Permissions\PermissionManager; -use MediaWiki\Title\Title; -use MediaWiki\User\User; - -/** - * Tests the UserBlockConstraint - * - * @author DannyS712 - * - * @covers \MediaWiki\EditPage\Constraint\UserBlockConstraint - */ -class UserBlockConstraintTest extends MediaWikiUnitTestCase { - use EditConstraintTestTrait; - - public function testPass() { - $title = $this->createMock( Title::class ); - $user = $this->createMock( User::class ); - $permissionManager = $this->createMock( PermissionManager::class ); - $permissionManager->expects( $this->once() ) - ->method( 'isBlockedFrom' ) - ->with( - $user, - $title - ) - ->willReturn( false ); - - $constraint = new UserBlockConstraint( $permissionManager, $title, $user ); - $this->assertConstraintPassed( $constraint ); - } - - public function testFailure() { - $title = $this->createMock( Title::class ); - $user = $this->createMock( User::class ); - $permissionManager = $this->createMock( PermissionManager::class ); - $permissionManager->expects( $this->once() ) - ->method( 'isBlockedFrom' ) - ->with( - $user, - $title - ) - ->willReturn( true ); - - $constraint = new UserBlockConstraint( $permissionManager, $title, $user ); - $this->assertConstraintFailed( - $constraint, - IEditConstraint::AS_BLOCKED_PAGE_FOR_USER - ); - } - -} |