Merge "Blob can't be false"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 20 Jun 2018 20:04:10 +0000 (20:04 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 20 Jun 2018 20:04:10 +0000 (20:04 +0000)
118 files changed:
autoload.php
docs/hooks.txt
includes/Category.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Revision.php
includes/Storage/NameTableStore.php
includes/Storage/SqlBlobStore.php
includes/Title.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/i18n/ar.json
includes/api/i18n/en.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/pl.json
includes/api/i18n/pt-br.json
includes/api/i18n/qqq.json
includes/api/i18n/zh-hans.json
includes/auth/AuthManager.php
includes/cache/LinkCache.php
includes/changetags/ChangeTags.php
includes/db/MWLBFactory.php
includes/deferred/LinksDeletionUpdate.php
includes/installer/i18n/eu.json
includes/installer/i18n/hu.json
includes/libs/MultiHttpClient.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/stats/BufferingStatsdDataFactory.php
includes/media/FormatMetadata.php
includes/preferences/DefaultPreferencesFactory.php
includes/services/ServiceContainer.php
includes/skins/Skin.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialWatchlist.php
includes/upload/UploadStash.php
languages/i18n/ace.json
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/btm.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/eu.json
languages/i18n/fr.json
languages/i18n/gcr.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/inh.json
languages/i18n/it.json
languages/i18n/ko.json
languages/i18n/ku-latn.json
languages/i18n/kum.json
languages/i18n/lb.json
languages/i18n/lv.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/my.json
languages/i18n/nap.json
languages/i18n/nds-nl.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sd.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/tet.json
languages/i18n/tt-cyrl.json
languages/i18n/vi.json
languages/i18n/war.json
languages/i18n/yi.json
languages/i18n/zgh.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/populateChangeTagDef.php [new file with mode: 0644]
package.json
resources/Resources.php
resources/src/jquery.tablesorter/jquery.tablesorter.less
resources/src/jquery/jquery.tablesorter.styles.less [deleted file]
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MainWrapperWidget.js
resources/src/mediawiki.special.contributions.js
resources/src/mediawiki/mediawiki.base.js
resources/src/mediawiki/mediawiki.js
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/Storage/RevisionStoreDbTestBase.php
tests/phpunit/includes/changetags/ChangeTagsTest.php
tests/phpunit/maintenance/populateChangeTagDefTest.php [new file with mode: 0644]
tests/selenium/pageobjects/recentchanges.page.js
tests/selenium/specs/specialrecentchanges.js
tests/selenium/wdio.conf.js

index ac1ac18..6b1f981 100644 (file)
@@ -1103,6 +1103,7 @@ $wgAutoloadLocalClasses = [
        'PopulateArchiveRevId' => __DIR__ . '/maintenance/populateArchiveRevId.php',
        'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
        'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php',
+       'PopulateChangeTagDef' => __DIR__ . '/maintenance/populateChangeTagDef.php',
        'PopulateContentModel' => __DIR__ . '/maintenance/populateContentModel.php',
        'PopulateExternallinksIndex60' => __DIR__ . '/maintenance/populateExternallinksIndex60.php',
        'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
index d9b2c3e..b452b94 100644 (file)
@@ -3592,11 +3592,11 @@ $type: (string) the requested upload type
 &$className: the class name of the Upload instance to be created
 
 'UploadForm:BeforeProcessing': At the beginning of processUpload(). Lets you
-poke at member variables like $mUploadDescription before the file is saved. Do
-not use this hook to break upload processing. This will return the user to a
-blank form with no error message; use UploadVerification and UploadVerifyFile
-instead.
-&$form: UploadForm object
+poke at member variables like $mUploadDescription before the file is saved.
+Do not use this hook to break upload processing.
+This will return the user to a blank form with no error message;
+use UploadVerifyUpload or UploadVerifyFile instead.
+&$upload: SpecialUpload object
 
 'UploadForm:getInitialPageText': After the initial page text for file uploads
 is generated, to allow it to be altered.
@@ -3607,7 +3607,7 @@ $config: Config object
 'UploadForm:initial': Before the upload form is generated. You might set the
 member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject
 text (HTML) either before or after the editform.
-&$form: UploadForm object
+&$upload: SpecialUpload object
 
 'UploadFormInitDescriptor': After the descriptor for the upload form as been
 assembled.
index 2cf44b8..41ecc65 100644 (file)
@@ -48,7 +48,7 @@ class Category {
 
        /**
         * Set up all member variables using a database query.
-        * @param int $mode
+        * @param int $mode One of (Category::LOAD_ONLY, Category::LAZY_INIT_ROW)
         * @throws MWException
         * @return bool True on success, false on failure.
         */
index 70c4d01..2c98283 100644 (file)
@@ -1894,6 +1894,11 @@ $wgSQLMode = '';
  */
 $wgDBmwschema = null;
 
+/**
+ * Default group to use when getting database connections.
+ */
+$wgDBDefaultGroup = null;
+
 /**
  * To override default SQLite data directory ($docroot/../data)
  */
index 9209761..3c97fe6 100644 (file)
@@ -235,7 +235,10 @@ class EditPage {
        /** @var string */
        public $action = 'submit';
 
-       /** @var bool */
+       /** @var bool Whether an edit conflict needs to be resolved. Detected based on whether
+        * $editRevId is different from the current revision. When a conflict has successfully
+        * been resolved by a 3-way-merge, this field is set to false.
+        */
        public $isConflict = false;
 
        /** @var bool New page or new section */
@@ -301,7 +304,7 @@ class EditPage {
        /** @var bool Has a summary been preset using GET parameter &summary= ? */
        public $hasPresetSummary = false;
 
-       /** @var Revision|bool|null */
+       /** @var Revision|bool|null A revision object corresponding to $this->editRevId. */
        public $mBaseRevision = false;
 
        /** @var bool */
@@ -342,7 +345,16 @@ class EditPage {
        /** @var string */
        public $edittime = '';
 
-       /** @var int */
+       /** @var int ID of the current revision at the time editing was initiated on the client.
+        * This is used to detect and resolve edit conflicts.
+        *
+        * @note 0 if the page did not exist at that time.
+        * @note When starting an edit from an old revision, this still records the current
+        * revision at the time , not the one the edit is based on.
+        *
+        * @see $oldid
+        * @see getBaseRevision()
+        */
        private $editRevId = null;
 
        /** @var string */
@@ -354,10 +366,16 @@ class EditPage {
        /** @var string */
        public $starttime = '';
 
-       /** @var int */
+       /** @var int Revision ID the edit is based on, or 0 if it's the current revision.
+        * @see $editRevId
+        */
        public $oldid = 0;
 
-       /** @var int */
+       /** @var int Revision ID the edit is based on, adjusted when an edit conflict is resolved.
+        * @see $editRevId
+        * @see $oldid
+        * @see getparentRevId()
+        */
        public $parentRevId = 0;
 
        /** @var string */
@@ -2021,7 +2039,10 @@ ERROR;
 
                        wfDebug( "timestamp: {$timestamp}, edittime: {$this->edittime}\n" );
 
-                       // Check editRevId if set, which handles same-second timestamp collisions
+                       // An edit conflict is detected if the current revision is different from the
+                       // revision that was current when editing was initiated on the client.
+                       // This is checked based on the timestamp and revision ID.
+                       // TODO: the timestamp based check can probably go away now.
                        if ( $timestamp != $this->edittime
                                || ( $this->editRevId !== null && $this->editRevId != $latest )
                        ) {
@@ -2301,7 +2322,8 @@ ERROR;
        private function mergeChangesIntoContent( &$editContent ) {
                $db = wfGetDB( DB_MASTER );
 
-               // This is the revision the editor started from
+               // This is the revision that was current at the time editing was initiated on the client,
+               // even if the edit was based on an old revision.
                $baseRevision = $this->getBaseRevision();
                $baseContent = $baseRevision ? $baseRevision->getContent() : null;
 
@@ -2332,9 +2354,16 @@ ERROR;
        }
 
        /**
-        * @note: this method is very poorly named. If the user opened the form with ?oldid=X,
-        *        one might think of X as the "base revision", which is NOT what this returns.
-        * @return Revision|null Current version when the edit was started
+        * Returns the revision that was current at the time editing was initiated on the client,
+        * even if the edit was based on an old revision.
+        *
+        * @warning: this method is very poorly named. If the user opened the form with ?oldid=X,
+        *        one might think of X as the "base revision", which is NOT what this returns,
+        *        see oldid for that. One might further assume that this corresponds to the $baseRevId
+        *        parameter of WikiPage::doEditContent, which is not the case either.
+        *        getExpectedParentRevision() would perhaps be a better name.
+        *
+        * @return Revision|null Current version when editing was initiated on the client
         */
        public function getBaseRevision() {
                if ( !$this->mBaseRevision ) {
index 495e484..dc15f97 100644 (file)
@@ -1038,7 +1038,18 @@ class Revision implements IDBAccessObject {
                        ? SqlBlobStore::makeAddressFromTextId( $row->old_id )
                        : null;
 
-               return self::getBlobStore( $wiki )->expandBlob( $text, $flags, $cacheKey );
+               $revisionText = self::getBlobStore( $wiki )->expandBlob( $text, $flags, $cacheKey );
+
+               if ( $revisionText === false ) {
+                       if ( isset( $row->old_id ) ) {
+                               wfLogWarning( __METHOD__ . ": Bad data in text row {$row->old_id}! " );
+                       } else {
+                               wfLogWarning( __METHOD__ . ": Bad data in text row! " );
+                       }
+                       return false;
+               }
+
+               return $revisionText;
        }
 
        /**
index 505ab4c..1982d02 100644 (file)
@@ -352,14 +352,9 @@ class NameTableStore {
 
                $dbw = $this->getDBConnection( DB_MASTER );
 
-               $insertFields = [ $this->nameField => $name ];
-               if ( $this->insertCallback !== null ) {
-                       $insertFields = call_user_func( $this->insertCallback, $insertFields );
-               }
-
                $dbw->insert(
                        $this->table,
-                       $insertFields,
+                       $this->getFieldsToStore( $name ),
                        __METHOD__,
                        [ 'IGNORE' ]
                );
@@ -374,4 +369,16 @@ class NameTableStore {
                return $dbw->insertId();
        }
 
+       /**
+        * @param string $name
+        * @return array
+        */
+       private function getFieldsToStore( $name ) {
+               $fields = [ $this->nameField => $name ];
+               if ( $this->insertCallback !== null ) {
+                       $fields = call_user_func( $this->insertCallback, $fields );
+               }
+               return $fields;
+       }
+
 }
index 79dce49..fb3ef94 100644 (file)
@@ -349,7 +349,7 @@ class SqlBlobStore implements IDBAccessObject, BlobStore {
                $blob = $this->expandBlob( $row->old_text, $row->old_flags, $blobAddress );
 
                if ( $blob === false ) {
-                       wfWarn( __METHOD__ . ": Bad data in text row $textId." );
+                       wfLogWarning( __METHOD__ . ": Bad data in text row $textId." );
                        return false;
                }
 
@@ -484,7 +484,7 @@ class SqlBlobStore implements IDBAccessObject, BlobStore {
                        $blob = gzinflate( $blob );
 
                        if ( $blob === false ) {
-                               wfLogWarning( __METHOD__ . ': gzinflate() failed' );
+                               wfWarn( __METHOD__ . ': gzinflate() failed' );
                                return false;
                        }
                }
index ecbb1b6..f6e5912 100644 (file)
@@ -4983,7 +4983,7 @@ class Title implements LinkTarget {
                        $langObj = $contentHandler->getPageLanguage( $this );
                        $this->mPageLanguage = [ $langObj->getCode(), $wgLanguageCode ];
                } else {
-                       $langObj = wfGetLangObj( $this->mPageLanguage[0] );
+                       $langObj = Language::factory( $this->mPageLanguage[0] );
                }
 
                return $langObj;
index 4589991..279bc0a 100644 (file)
@@ -81,6 +81,7 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                                ApiBase::PARAM_DFLT => implode( '|', $props ),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => $props,
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
                        ],
                ];
        }
@@ -100,14 +101,20 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
 
                $propValues[] = 'canUpload';
 
+               sort( $propValues );
                return $propValues;
        }
 
        protected function getExamplesMessages() {
-               return [
-                       'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
-                               => 'apihelp-query+filerepoinfo-example-simple',
-               ];
+               $examples = [];
+
+               $props = array_intersect( [ 'apiurl', 'name', 'displayname' ], $this->getProps() );
+               if ( $props ) {
+                       $examples['action=query&meta=filerepoinfo&friprop=' . implode( '|', $props )] =
+                               'apihelp-query+filerepoinfo-example-simple';
+               }
+
+               return $examples;
        }
 
        public function getHelpUrls() {
index f19ee11..04eb2e7 100644 (file)
        "apihelp-query+filearchive-paramvalue-prop-archivename": "يضيف اسم ملف إصدار الأرشيف للإصدارات غير الأحدث.",
        "apihelp-query+filearchive-example-simple": "عرض قائمة بجميع الملفات المحذوفة.",
        "apihelp-query+filerepoinfo-summary": "إرجاع معلومات التعريف حول مستودعات الصور المكونة في الويكي.",
+       "apihelp-query+filerepoinfo-param-prop": "أي خصائص المستودع يمكن الحصول عليها (قد يكون هناك المزيد متاح في بعض الويكيات): \n;apiurl:مسار إلى API المستودع ، مفيد للحصول على معلومات الصورة من المضيف.\n;name: مفتاح المستودع، يُستخدَم على سبيل المثال في قيم عودة <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> و[[Special:ApiHelp/query+imageinfo|معلومات الصورة]].",
+       "apihelp-query+filerepoinfo-example-simple": "الحصول على معلومات حول مستودعات الملفات.",
+       "apihelp-query+fileusage-summary": "ابحث عن كل الصفحات التي تستخدم الملفات المعطاة.",
        "apihelp-query+fileusage-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "معرف الصفحة لكل صفحة.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "عنوان كل صفحة.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "علم إذا كانت الصفحة تحويلة.",
+       "apihelp-query+fileusage-param-namespace": "إدراج الصفحات في هذه النطاقات فقط.",
+       "apihelp-query+fileusage-param-limit": "كم العدد للعودة.",
+       "apihelp-query+fileusage-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط:\n;تحويلة: عرض التحويلات فقط.\n;غير تحويلة:إظهار غير التحويلات فقط.",
+       "apihelp-query+fileusage-example-simple": "احصل على قائمة الصفحات التي تستخدم [[:File:Example.jpg]].",
+       "apihelp-query+fileusage-example-generator": "احصل على معلومات حول الصفحات التي تستخدم [[:File:Example.jpg]].",
+       "apihelp-query+imageinfo-summary": "يعرض معلومات الملف وسجل الرفع.",
+       "apihelp-query+imageinfo-param-prop": "أي المعلومات عن الصورة للحصول عليها",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "يضيف الطابع الزمني للنسخة المرفوعة.",
+       "apihelp-query+imageinfo-paramvalue-prop-user": "يضيف المستخدم الذي رفع كل إصدار من الملف.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-comment": "تعليق على الإصدار.",
+       "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "تحليل التعليق على النسخة.",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "يضيف العنوان الأساسي للملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-url": "يعطي مسارا للملف وصفحة الوصف.",
+       "apihelp-query+imageinfo-paramvalue-prop-size": "يضيف حجم الملف بالبايت والطول والعرض وعدد الصفحات (عند قابلية التطبيق).",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "الاسم المستعار للحجم.",
+       "apihelp-query+imageinfo-paramvalue-prop-sha1": "يضيف تجزئة SHA-1 للملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-mime": "يضيف نوع MIME للملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "يضيف نوع MIME للصورة المصغرة (يتطلب مسار ووسيط $1urlwidth).",
+       "apihelp-query+imageinfo-paramvalue-prop-mediatype": "يضيف نوع الوسائط للملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-metadata": "يسرد بيانات تعريف Exif لإصدار الملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "يسرد بيانات التعريف العامة لصيغة الملف لإصدار الملف.",
+       "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "يسرد البيانات الوصفية المنسقة من مصادر متعددة، النتائج بتنسيق HTML.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename": "يضيف اسم ملف إصدار الأرشيف للإصدارات غير الأحدث.",
+       "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "يضيف عمق البت للإصدار.",
+       "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "تُستخدَم من قبل صفحة Special:Upload للحصول على معلومات حول ملف موجود، غير مخصص للاستخدام خارج نواة ميدياويكي.",
+       "apihelp-query+imageinfo-paramvalue-prop-badfile": "يضيف ما إذا كان الملف موجودا في [[MediaWiki:Bad image list]]",
+       "apihelp-query+imageinfo-param-limit": "عدد مراجعات الملفات ليتم إرجاعها لكل ملف.",
+       "apihelp-query+imageinfo-param-start": "الطابع الزمني لبدء الإدراج منه.",
+       "apihelp-query+imageinfo-param-end": "الطابع الزمني لإيقاف الإدراج فيه.",
+       "apihelp-query+imageinfo-param-urlwidth": "إذا تم تعيين $2prop=url، فسيتم إرجاع مسار صورة مقسمة إلى هذا العرض،\nلأسباب تتعلق بالأداء في حالة استخدام هذا الخيار; لن يتم عرض أكثر من $1 من الصور المقاسة.",
+       "apihelp-query+imageinfo-param-urlheight": "على غرار $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "إصدار البيانات الوصفية لاستخدامه، إذا تم تحديد <kbd>latest</kbd>، استخدم أحدث إصدار، الافتراضي <kbd>1</kbd> للتوافق مع الإصدارات السابقة.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "أية لغة لجلب extmetadata بها، هذا يؤثر على كل الترجمة التي يتم جلبها، إذا كانت متعددة متاحة، وكذلك كيفية تنسيق أشياء مثل الأرقام والقيم المختلفة.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "إذا كانت ترجمات خاصية extmetadata متاحة، فاجلبها كلها.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "إذا كان محددا وغير فارغ، فسيتم إرجاع هذه المفاتيح فقط لـ$1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "سلسلة وسيط خاصة بالمعالج، على سبيل المثال، قد تستخدم ملفات PDF <kbd>page15-100px</kbd>، يجب استخدام <var>$1urlwidth</var> وأن يكون متسقا مع <var>$1urlparam</var>.",
+       "apihelp-query+imageinfo-param-badfilecontexttitle": "إذا تم تعيين<kbd>$2prop=badfile</kbd> ، فهذا هو عنوان الصفحة المستخدم عند تقييم [[MediaWiki:Bad image list]]",
+       "apihelp-query+imageinfo-param-localonly": "ابحث فقط عن الملفات في المستودع المحلي.",
+       "apihelp-query+imageinfo-example-simple": "إحضار معلومات حول الإصدار الحالي من [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageinfo-example-dated": "إحضار معلومات حول إصدارات [[:File:Test.jpg]] من عام 2008 وما بعده.",
+       "apihelp-query+images-summary": "يعرض جميع الملفات المضمنة في الصفحات المعينة.",
+       "apihelp-query+images-param-limit": "كم عدد الملفات للعودة.",
+       "apihelp-query+images-param-images": "إدراج هذه الملفات فقط، مفيد للتحقق ما إذا كانت صفحة معينة تحتوي على ملف معين.",
        "apihelp-query+images-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+images-example-simple": "احصل على قائمة بالملفات المستخدمة في [[Main Page]].",
+       "apihelp-query+images-example-generator": "الحصول على معلومات حول جميع الملفات المستخدمة في [[Main Page]].",
+       "apihelp-query+imageusage-summary": "ابحث عن كل الصفحات التي تستخدم عنوان الصورة المعين.",
        "apihelp-query+imageusage-param-title": "عنوان للبحث، لا يمكن استخدامه مع <var>$1pageid</var",
        "apihelp-query+imageusage-param-pageid": "معرف صفحة للبحث، لا يمكن استخدامه مع <var>$1title</var>.",
        "apihelp-query+imageusage-param-namespace": "النطاق للتعداد.",
        "apihelp-query+imageusage-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+imageusage-param-filterredir": "كيفية التصفية للتحويلات، إذا تم ضبطه على <kbd>nonredirects</kbd> عند تمكين <var>$1redirect</var>، فسيتم تطبيق هذا على المستوى الثاني فقط.",
+       "apihelp-query+imageusage-param-limit": "كم عدد الصفحات التي سيتم إرجاعها، إذا تم تمكين <var>$1redirect</var> ، فسيتم تطبيق الحد الأقصى على كل مستوى بشكل منفصل (مما يعني أنه قد يتم إرجاع ما يصل إلى * <var>$1limit</var> نتائج).",
+       "apihelp-query+imageusage-param-redirect": "إذا كان ربط الصفحة تحويلة، فابحث عن جميع الصفحات التي تصل لتلك التحويلة أيضا، الحد الأقصى هو النصف.",
+       "apihelp-query+imageusage-example-simple": "عرض الصفحات التي تستخدم [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageusage-example-generator": "احصل على معلومات حول الصفحات التي تستخدم [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+info-summary": "الحصول على معلومات الصفحة الأساسية.",
+       "apihelp-query+info-param-prop": "أي الخصائص الإضافية للحصول عليها:",
+       "apihelp-query+info-paramvalue-prop-protection": "إدراج مستوى الحماية لكل صفحة.",
+       "apihelp-query+info-paramvalue-prop-talkid": "معرف الصفحة لصفحة النقاش لكل صفحة غير النقاش.",
+       "apihelp-query+info-paramvalue-prop-watched": "أدرج حالة المراقبة لكل صفحة.",
+       "apihelp-query+info-paramvalue-prop-watchers": "عدد المراقبين، إذا كان مسموحا.",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "عدد مراقبي كل صفحة الذين زاروا التحريرات الأخيرة لتلك الصفحة، إذا كان مسموحا بذلك.",
+       "apihelp-query+info-paramvalue-prop-notificationtimestamp": "الطابع الزمني لإشعار قائمة المراقبة لكل صفحة.",
+       "apihelp-query+info-paramvalue-prop-subjectid": "معرف الصفحة للصفحة الرئيسية لكل صفحة نقاش.",
+       "apihelp-query+info-paramvalue-prop-url": "يعطي مسارا كاملا، ومسارا للتعديل، ومسار الأساسي لكل صفحة.",
+       "apihelp-query+info-paramvalue-prop-readable": "ما إذا كان يمكن للمستخدم قراءة هذه الصفحة.",
+       "apihelp-query+info-paramvalue-prop-preload": "يعطي النص الذي تم إرجاعه بواسطة EditFormPreloadText.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "يعطي الطريقة التي يتم بها عرض عنوان الصفحة بالفعل.",
+       "apihelp-query+info-paramvalue-prop-varianttitles": "يعطي عنوان العرض بجميع الصيغ الخاصة بلغة محتوى الموقع.",
+       "apihelp-query+info-param-testactions": "اختبر ما إذا كان المستخدم الحالي يمكنه تنفيذ إجراءات معينة على الصفحة.",
+       "apihelp-query+info-param-token": "استخدم [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] بدلا من ذلك.",
+       "apihelp-query+info-example-simple": "الحصول على معلومات حول الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+info-example-protection": "احصل على معلومات عامة وحماية حول الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+iwbacklinks-summary": "العثور على جميع الصفحات التي تصل إلى وصلة الإنترويكي المعطاه.",
+       "apihelp-query+iwbacklinks-extended-description": "يمكن استخدامها للعثور على جميع الروابط ببادئة، أو كل الروابط إلى عنوان (ببادئة معينة)، استخدام أي من الوسيطين \"جميع روابط الإنترويكي\" على نحو فعال.",
+       "apihelp-query+iwbacklinks-param-prefix": "بادئة للإنترويكي.",
+       "apihelp-query+iwbacklinks-param-title": "رابط إنترويكي للبحث عنه، يجب استخدامه مع <var>$1blprefix</var.",
        "apihelp-query+iwbacklinks-param-limit": "كم عدد مجموع الصفحات للعودة.",
        "apihelp-query+iwbacklinks-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "يضيف بادئة الإنترويكي.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "يضيف عنوان الإنترويكي.",
        "apihelp-query+iwbacklinks-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+iwlinks-summary": "يعرض جميع روابط الإنترويكي من الصفحات المحددة.",
+       "apihelp-query+iwlinks-param-url": "ما إذا كنت تريد الحصول على المسار الكامل (لا يمكن استخدامه مع $1prop).",
+       "apihelp-query+iwlinks-param-prop": "الخصائص الإضافية التي يمكنك الحصول عليها لكل رابط بين اللغات:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "يضيف المسار الكامل.",
        "apihelp-query+iwlinks-param-limit": "كم عدد وصلات الإنترويكي للعودة.",
+       "apihelp-query+iwlinks-param-prefix": "عودة روابط الإنترويكي بهذه البادئة فقط.",
+       "apihelp-query+iwlinks-param-title": "رابط إنترويكي للبحث عنه، يجب استخدامه مع <var>$1prefix</var.",
        "apihelp-query+iwlinks-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+iwlinks-example-simple": "الحصول على روابط إنترويكي من الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+langbacklinks-summary": "ابحث عن جميع الصفحات التي تصل لرابط اللغة المحدد.",
+       "apihelp-query+langbacklinks-extended-description": "يمكن استخدامها للعثور على جميع الروابط برمز لغة، أو كل الروابط إلى عنوان (بلغة معينة)، استخدام أي من الوسيطين \"كل روابط اللغات\" بشكل فعال،\nلاحظ أن هذا قد لا يفكر في روابط اللغة التي تتم إضافتها بواسطة الإضافات.",
+       "apihelp-query+langbacklinks-param-lang": "لغة لرابط اللغة.",
+       "apihelp-query+langbacklinks-param-title": "رابط اللغة للبحث عنه، يجب استخدامه مع $1lang.",
        "apihelp-query+langbacklinks-param-limit": "كم عدد مجموع الصفحات للعودة.",
        "apihelp-query+langbacklinks-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "يضيف رمز لغة رابط اللغة.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "يضيف عنوان رابط اللغة.",
        "apihelp-query+langbacklinks-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+langbacklinks-example-simple": "الحصول على الصفحات التي تصل إلى [[:fr:Test]].",
+       "apihelp-query+langbacklinks-example-generator": "الحصول على معلومات حول الصفحات التي تصل إلى [[:fr:Test]].",
+       "apihelp-query+langlinks-summary": "يعرض جميع روابط الإنترويكي التي تربط من الصفحات المحددة.",
+       "apihelp-query+langlinks-param-limit": "كم عدد الروابط المحلية التي ستعود.",
+       "apihelp-query+langlinks-param-url": "ما إذا كنت ستحصل على المسار الكامل (لا يمكن استخدامه مع <var>$1prop</var>).",
+       "apihelp-query+langlinks-param-prop": "الخصائص الإضافية التي يمكنك الحصول عليها لكل رابط بين اللغات:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "يضيف المسار الكامل.",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "يضيف اسم اللغة المترجمة (أفضل جهد)، استخدم <var>$1inlanguagecode</var> للتحكم في اللغة.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "يضيف اسم اللغة الأم.",
+       "apihelp-query+langlinks-param-lang": "إرجاع روابط اللغة برمز اللغة هذا فقط.",
+       "apihelp-query+langlinks-param-title": "رابط للبحث عنه، يجب استخدامه مع <var>$1prefix</var.",
        "apihelp-query+langlinks-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+langlinks-param-inlanguagecode": "رمز اللغة لأسماء اللغة المترجمة.",
+       "apihelp-query+langlinks-example-simple": "الحصول على روابط بين اللغات تربط من الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+links-summary": "يعرض جميع الروابط من الصفحات المحددة.",
+       "apihelp-query+links-param-namespace": "إظهار الروابط في هذه النطاقات فقط.",
        "apihelp-query+links-param-limit": "كم عدد الوصلات للعودة.",
+       "apihelp-query+links-param-titles": "إدراج الروابط لهذه العناوين فقط، مفيد للتحقق مما إذا كانت صفحة معينة ترتبط بعنوان معين.",
        "apihelp-query+links-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+links-example-simple": "الحصول على روابط من الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-generator": "الحصول على معلومات حول صفحات الارتباط في الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-namespaces": "احصل على روابط من الصفحة <kbd>Main Page</kbd> في النطاقات {{ns:user}} و{{ns:template}}.",
        "apihelp-query+linkshere-summary": "ابحث عن جميع الصفحات الموصولة للصفحة المحددة.",
        "apihelp-query+linkshere-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "معرف الصفحة لكل صفحة.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "عنوان كل صفحة.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "علم إذا كانت الصفحة تحويلة.",
+       "apihelp-query+linkshere-param-namespace": "إدراج الصفحات في هذه النطاقات فقط.",
+       "apihelp-query+linkshere-param-limit": "كم العدد للعودة.",
+       "apihelp-query+linkshere-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط:\n;تحويلة: عرض التحويلات فقط.\n;غير تحويلة:إظهار غير التحويلات فقط.",
+       "apihelp-query+linkshere-example-simple": "احصل على قائمة الصفحات التي تربط بـ[[Main Page]].",
+       "apihelp-query+linkshere-example-generator": "احصل على معلومات حول الصفحات التي تصل إلى [[Main Page]].",
+       "apihelp-query+logevents-summary": "الحصول على الأحداث من السجلات.",
        "apihelp-query+logevents-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+logevents-paramvalue-prop-ids": "يضيف معرف حدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-title": "يضيف عنوان الصفحة لحدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-type": "يضيف نوع حدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-user": "يضيف المستخدم المسؤول عن حدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-userid": "يضيف معرف المستخدم الذي كان مسؤولا عن حدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "يضيف الطابع الزمني لحدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-comment": "يضيف تعليق حدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "يضيف التعليق المحلل لحدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-details": "يسرد تفاصيل إضافية حول حدث السجل.",
+       "apihelp-query+logevents-paramvalue-prop-tags": "يسرد وسوما لحدث السجل.",
+       "apihelp-query+logevents-param-type": "تصفية إدخالات السجل لهذا النوع فقط.",
+       "apihelp-query+logevents-param-action": "تصفية إجراءات السجل لهذا الإجراء فقط، يتجاوز <var>$1type</var>، في قائمة القيم المحتملة، يمكن أن تحتوي القيم بحرف بدل العلامة النجمية مثل <kbd>action/*</kbd> على سلاسل مختلفة بعد الخط المائل (/).",
        "apihelp-query+logevents-param-start": "الطابع الزمني لبدء العد منه.",
+       "apihelp-query+logevents-param-end": "الطابع الزمني لإنهاء التعداد.",
+       "apihelp-query+logevents-param-user": "تصفية الإلدخالات تلك المدخلات من قبل المستخدم المعطى.",
+       "apihelp-query+logevents-param-title": "تصفية الإدخالات إلى تلك المتعلقة بصفحة.",
+       "apihelp-query+logevents-param-namespace": "تصفية الإدخالات إلى تلك الموجودة في النطاق المحدد.",
+       "apihelp-query+logevents-param-prefix": "تصفية الإدخالات التي تبدأ بهذه البادئة.",
+       "apihelp-query+logevents-param-tag": "إدراج إدخالات الحدث الموسومة بهذ الوسم فقط.",
+       "apihelp-query+logevents-param-limit": "كم العدد الكلي لإدخالات الحدث للعودة.",
+       "apihelp-query+logevents-example-simple": "إدراج أحداث السجل الأخيرة.",
+       "apihelp-query+pagepropnames-summary": "إدراج جميع أسماء خواص الصفحة قيد الاستخدام في الويكي.",
+       "apihelp-query+pagepropnames-param-limit": "الحد الأقصى لعدد الأسماء للعودة.",
+       "apihelp-query+pagepropnames-example-simple": "الحصول على أول 10 أسماء خواص.",
+       "apihelp-query+pageprops-summary": "الحصول على خصائص صفحة مختلفة محددة في محتوى الصفحة.",
+       "apihelp-query+pageprops-param-prop": "سرد خصائص الصفحة هذه فقط (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> تقوم بإرجاع أسماء خصائص الصفحة قيد الاستخدام)، مفيد للتحقق مما إذا كانت الصفحات تستخدم خاصية صفحة معينة.",
+       "apihelp-query+pageprops-example-simple": "احصل على خصائص للصفحات <kbd>Main Page</kbd> و<kbd>MediaWiki</kbd>.",
+       "apihelp-query+pageswithprop-summary": "سرد جميع الصفحات التي تستخدم خاصية صفحة معينة.",
+       "apihelp-query+pageswithprop-param-propname": "خاصية الصفحة التي تريد تعداد الصفحات (<kbd>[[Special:ApiHelp/query+pagepropnames|action=query&list=pagepropnames]]</kbd> تقوم بإرجاع أسماء خصائص الصفحة قيد الاستخدام).",
        "apihelp-query+pageswithprop-param-prop": "أية قطعة من المعلومات لتضمينها:",
        "apihelp-query+pageswithprop-paramvalue-prop-ids": "يضيف معرف الصفحة.",
        "apihelp-query+pageswithprop-paramvalue-prop-title": "يضيف معرف عنوان ونطاق الصفحة.",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "يضيف قيمة خاصية الصفحة.",
        "apihelp-query+pageswithprop-param-limit": "الحد الأقصى لعدد الصفحات المطلوب عرضها.",
        "apihelp-query+pageswithprop-param-dir": "في أي اتجاه للفرز.",
+       "apihelp-query+pageswithprop-example-simple": "أدرج أول 10 صفحات تستخدم <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "احصل على معلومات إضافية حول أول 10 صفحات تستخدم <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+prefixsearch-summary": "قم بإجراء بحث بالبادئة عن عناوين الصفحات.",
+       "apihelp-query+prefixsearch-extended-description": "على الرغم من التشابه في الأسماء، لا يُقصَد بهذه الوحدة أن تكون مكافئة لـ [[Special:PrefixIndex]]، لذلك; راجع <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> مع الوسيط <kbd>apprefix</kbd>، يشبه الغرض من هذه الوحدة <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: لأخذ مدخلات المستخدم وتقديم أفضل العناوين المطابقة، استنادا إلى الواجهة الخلفية لمحرك البحث، قد يتضمن هذا تصحيحا مطبعيا أو تجنبا للتحويل أو استدلالا آخر.",
+       "apihelp-query+prefixsearch-param-search": "سلسلة البحث.",
+       "apihelp-query+prefixsearch-param-namespace": "النطاقات للبحث، يتم التجاهل إذا بدأ <var>$1search</var> ببادئة نطاق صالحة.",
+       "apihelp-query+prefixsearch-param-limit": "الحد الأقصى لعدد النتائج للعودة.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها.",
+       "apihelp-query+prefixsearch-example-simple": "ابحث عن عناوين الصفحات التي تبدأ بـ<kbd>meaning</kbd>.",
+       "apihelp-query+prefixsearch-param-profile": "ابحث عن ملف شخصي لاستخدامه.",
+       "apihelp-query+protectedtitles-summary": "سرد جميع العناوين المحمية من الإنشاء.",
+       "apihelp-query+protectedtitles-param-namespace": "إدراج عناوين في هذه النطاقات فقط.",
+       "apihelp-query+protectedtitles-param-level": "إدراج العناوين بمستويات الحماية هذه فقط.",
        "apihelp-query+protectedtitles-param-limit": "كم عدد مجموع الصفحات للعودة.",
+       "apihelp-query+protectedtitles-param-start": "بدء الإدراج في هذا الطابع الزمني للحماية.",
+       "apihelp-query+protectedtitles-param-end": "وقف الإدراج في هذا الطابع الزمني للحماية.",
        "apihelp-query+protectedtitles-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "يإضيف الطابع الزمني عند إضافة الحماية.",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "يضيف المستخدم الذي أضاف الحماية.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "يضيف معرف المستخدم الذي أضاف الحماية.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "يضيف التعليق للحماية.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "يضيف تعليق التعليق المحلل للحماية.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "يإضيف الطابع الزمني للوقت الذي سيتم فيه رفع الحماية.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "يضيف مستوى الحماية.",
+       "apihelp-query+protectedtitles-example-simple": "سرد العناوين المحمية.",
+       "apihelp-query+protectedtitles-example-generator": "ابحث عن روابط للعناوين المحمية في النطاق الرئيسي.",
+       "apihelp-query+querypage-summary": "الحصول على قائمة يتم توفيرها من خلال صفحة خاصة تستند إلى صفحة استعلام.",
+       "apihelp-query+querypage-param-page": "اسم الصفحة الخاصة، ملاحظة: هذا حساس لحالة الأحرف.",
+       "apihelp-query+querypage-param-limit": "عدد النتائج للعودة.",
+       "apihelp-query+querypage-example-ancientpages": "إرجاع النتائج من [[Special:Ancientpages]].",
+       "apihelp-query+random-summary": "الحصول على مجموعة من الصفحات العشوائية.",
+       "apihelp-query+random-extended-description": "يتم سرد الصفحات بتسلسل ثابت، نقطة البداية فقط عشوائية: هذا يعني أنه إذا، على سبيل المثال، كانت <samp>Main Page</samp>  أول صفحة عشوائية في القائمة، <samp>List of fictional monkeys</samp> سوف تكون الثانية <em>always</em>، <samp>List of people on stamps of Vanuatu</samp> الثالثة، إلخ.",
+       "apihelp-query+random-param-namespace": "إرجاع الصفحات في هذه النطاقات فقط.",
+       "apihelp-query+random-param-limit": "تحديد عدد الصفحات العشوائية التي سيتم إرجاعها.",
+       "apihelp-query+random-param-redirect": "استخدم <kbd>$1filterredir=redirects</kbd> بدلا من ذلك.",
        "apihelp-query+random-param-filterredir": "كيفية التصفية للتحويلات.",
+       "apihelp-query+random-example-simple": "قم بإرجاع صفحتين عشوائيتين من النطاق الرئيسي.",
+       "apihelp-query+random-example-generator": "إرجاع معلومات الصفحة حول صفحتين عشوائيتين من النطاق الرئيسي.",
+       "apihelp-query+recentchanges-summary": "تعداد أحدث التغييرات.",
        "apihelp-query+recentchanges-param-start": "الطابع الزمني لبدء العد منه.",
+       "apihelp-query+recentchanges-param-end": "الطابع الزمني لإنهاء التعداد.",
+       "apihelp-query+recentchanges-param-namespace": "تصفية التغييرات على هذه النطاقات فقط.",
+       "apihelp-query+recentchanges-param-user": "إددراج التغييرات بواسطة هذا المستخدم فقط.",
+       "apihelp-query+recentchanges-param-excludeuser": "لا تسرد التغييرات بواسطة هذا المستخدم.",
+       "apihelp-query+recentchanges-param-tag": "إدراج التغييرات الموسومة بهذ الوسم فقط.",
+       "apihelp-query+recentchanges-param-prop": "تضمين أجزاء إضافية من المعلومات:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "يضيف المستخدم المسؤول عن التحرير والوسوم إذا كان يوجد آيبي.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "يضيف المستخدم المسؤول عن التعديل.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "يضيف التعليق للتحرير.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "يضيف التعليق المحلل للتحرير.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "يضيف علامات للتحرير.",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "يضيف الطابع الزمني للتحرير.",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "يضيف عنوان صفحة التحرير.",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "يضيف معرف الصفحة ومعرف أحدث التغييرات ومعرف النسخة الجديدة والقديمة.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "يضيف طول الصفحة الجديد والقديم بالبايت.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "يوسم التحرير إذا كانت الصفحة تحويلة",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "يوسم التعديلات التي يمكن مراجعتها باعتبارها مراجعة أو غير مراجعة.",
+       "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "يوسم التعديلات التي يمكن مراجعتها باعتبارها مراجعة تلقائيا أم لا.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "يضيف معلومات السجل (معرف السجل، نوع السجل، إلخ) لإدخالات السجل.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "يسرد الوسوم للدخول.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "يضيف المجموع الاختباري للمحتوى للإدخالات المرتبطة بمراجعة.",
+       "apihelp-query+recentchanges-param-token": "استخدم [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] بدلا من ذلك.",
+       "apihelp-query+recentchanges-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط، على سبيل المثال، مشاهدة التعديلات الطفيفة فقط التي قام بها المستخدمون مسجلو الدخول، قم بتعيين $1show=minor|!anon.",
+       "apihelp-query+recentchanges-param-limit": "كم عدد التغييرات الإجمالي للعودة.",
+       "apihelp-query+recentchanges-param-type": "أي أنواع التغييرات لعرضها.",
+       "apihelp-query+recentchanges-param-toponly": "سرد التغييرات التي هي أحدث مراجعة فقط.",
+       "apihelp-query+recentchanges-param-title": "تصفية الإدخالات إلى تلك المتعلقة بصفحة.",
+       "apihelp-query+recentchanges-param-generaterevisions": "عند استخدامه كمولد، قم بإنشاء معرفات المراجعة بدلا من العناوين، ولن تؤدي إدخالات التغيير الأخيرة التي لا تحتوي على معرفات المراجعة المرتبطة (مثل معظم إدخالات السجلات) إلى توليد أي شيء.",
+       "apihelp-query+recentchanges-example-simple": "سرد أحدث التغييرات.",
+       "apihelp-query+recentchanges-example-generator": "الحصول على معلومات الصفحة حول أحدث التغييرات غير المراجعة.",
+       "apihelp-query+redirects-summary": "يعرض جميعالتحويلات إلى الصفحات المحددة.",
        "apihelp-query+redirects-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "معرف الصفحة لكل تحويلة.",
+       "apihelp-query+redirects-paramvalue-prop-title": "عنوان كل تحويلة.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "جزء من كل تحويلة، إن وُجِدت.",
+       "apihelp-query+redirects-param-namespace": "إدراج الصفحات في هذه النطاقات فقط.",
+       "apihelp-query+redirects-param-limit": "كم عدد التحويلات لإرجاعها.",
+       "apihelp-query+redirects-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط:\n;fragment:إظهار التحويلات بجزء فقط.\n;!fragment:إظهار التحويلات بدون جزء فقط.",
+       "apihelp-query+redirects-example-simple": "احصل على قائمة بالتحويلات إلى [[Main Page]].",
+       "apihelp-query+redirects-example-generator": "احصل على معلومات حول جميع التحويلات إلى [[Main Page]].",
+       "apihelp-query+revisions-summary": "الحصول على معلومات المراجعة.",
+       "apihelp-query+revisions-extended-description": "يمكن استخدامه بعدة طرق: \n# الحصول على بيانات حول مجموعة من الصفحات (المراجعة الأخيرة)، عن طريق تعيين عناوين أو معرفات صفحات. \n# احصل على مراجعات لصفحة معينة، باستخدام العناوين أو معرفات الصفحات ذات البداية، أو النهاية، أو الحد. \n# الحصول على بيانات حول مجموعة من المراجعات من خلال تعيين معرفاتها مع معرفات المراجعات.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "لا يجوز استخدامها إلا مع صفحة واحدة (الوضع #2).",
+       "apihelp-query+revisions-param-startid": "بدء التعداد من الطابع الزمني لهذه المراجعة، يجب أن تكون النسخة موجودة، لكن لا يجب أن تنتمي إلى هذه الصفحة.",
+       "apihelp-query+revisions-param-endid": "إيقاف التعداد في الطابع الزمني لهذه المراجعة، يجب أن تكون النسخة موجودة، لكن لا يجب أن تنتمي إلى هذه الصفحة.",
+       "apihelp-query+revisions-param-start": "من أي طابع زمني للمراجعة لبدء التعداد.",
+       "apihelp-query+revisions-param-end": "تعداد يصل إلى هذا الطابع الزمني.",
+       "apihelp-query+revisions-param-user": "عدم تضمين سوى المراجعات التي أجراها المستخدم.",
+       "apihelp-query+revisions-param-excludeuser": "استبعاد المراجعات التي أجراها المستخدم.",
        "apihelp-query+revisions-param-tag": "إدراج المراجعات الموسومة بهذ الوسم فقط.",
+       "apihelp-query+revisions-param-token": "أي الرموز المميزة للحصول عليها لكل مراجعة.",
+       "apihelp-query+revisions-example-content": "احصل على بيانات تتضمن محتوى آخر مراجعة لـ<kbd>API</kbd> العناوين و<kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-last5": "احصل على آخر 5 مراجعات لـ<kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5": "احصل على أول 5 مراجعات من <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5-after": "احصل على أول 5 مراجعات للصفحة <kbd>Main Page</kbd> بعد 2006-05-01.",
+       "apihelp-query+revisions-example-first5-not-localhost": "احصل على أول 5 مراجعات للصفحة <kbd>Main Page</kbd> التي لم يجرها المستخدم المجهول <kbd>127.0.0.1</kbd>.",
+       "apihelp-query+revisions-example-first5-user": "احصل على أول 5 مراجعات للصفحة <kbd>Main Page</kbd> التي تم إجراؤها بواسطة المستخدم <kbd>MediaWiki default</kbd>.",
+       "apihelp-query+revisions+base-param-prop": "أي الخصائص للحصول عليها لكل مراجعة:",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "معرف المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "أعلام المراجعة (طفيفة).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "الطابع الزمني للمراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "المستخدم الذي أجرى المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "معرف المستخدم لمنشئ المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "طول (بايت) المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (القاعدة 16) المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "معرف نموذج المحتوى للمراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "تعليق من قبل المستخدم للمراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "تعليق محلل من قبل المستخدم للمراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "نص المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "وسوم للمراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">موقوف.</span> استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> أو <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> بدلا من ذلك، شجرة تحليل XML لمحتوى المراجعة (تتطلب نموذج المحتوى <code>$1</code>).",
+       "apihelp-query+revisions+base-param-limit": "الحد من عدد المراجعات التي سيتم إرجاعها.",
+       "apihelp-query+revisions+base-param-expandtemplates": "استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> بدلا من ذلك، قم بتوسيع القوالب في محتوى المراجعة (يتطلب $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> أو <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> بدلا من ذلك، قم بتوليد شجرة تحليل XML لمحتوى المراجعة (تتطلب $1prop=content).",
+       "apihelp-query+revisions+base-param-parse": "استخدم <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> بدلا من ذلك، تحليل محتوى المراجعة (يتطلب $1prop=content)، لأسباب تتعلق بالأداء; إذا تم استخدام هذا الخيار، يتم فرض $1limit إلى 1.",
+       "apihelp-query+revisions+base-param-section": "استرجع محتويات رقم هذا القسم فقط.",
+       "apihelp-query+revisions+base-param-difftotextpst": "استخدم <kbd>[[Special:ApiHelp/compare|action=compare]]</kbd> بدلا من ذلك، قم بإجراء تحويل ما قبل الحفظ على النص قبل نشره، صالح فقط عند استخدامه مع <var>$1difftotext</var>.",
+       "apihelp-query+revisions+base-param-contentformat": "تنسيق التسلسل المستخدم لـ<var>$1difftotext</var> والمتوقع لإخراج المحتوى.",
+       "apihelp-query+search-summary": "إجراء بحث نص كامل.",
+       "apihelp-query+search-param-search": "ابحث عن عناوين الصفحات أو المحتوى الذي يطابق هذه القيمة، يمكنك استخدام سلسلة البحث لاستدعاء ميزات بحث خاصة، اعتمادا على ما تنفذه الواجهة الخلفية للبحث في موقع الويكي.",
+       "apihelp-query+search-param-namespace": "ابحث داخل هذه النطاقات فقط.",
+       "apihelp-query+search-param-what": "أي نوع من البحث لأدائه.",
+       "apihelp-query+search-param-info": "أية بيانات وصفية لعرضها.",
+       "apihelp-query+search-param-prop": "أي الخصائص للعودة.",
+       "apihelp-query+search-param-qiprofile": "الاستعلام عن ملف شخصي مستقل للاستخدام (يؤثر على خوارزمية الترتيب).",
+       "apihelp-query+search-paramvalue-prop-size": "يضيف حجم الصفحة بالبايت.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "يضيف عدد كلمات الصفحة.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "يضيف الطابع الزمني لوقت آخر تعديل للصفحة.",
+       "apihelp-query+search-paramvalue-prop-snippet": "يضيف مقتطفا محللا للصفحة.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "يضيف مقتطفا محللا لعنوان الصفحة.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "يضيف مقتطفا محللا لعنوان التحويلة.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "يضيف عنوان التحويلة المطابقة.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "يضيف مقتطفا محللا لعنوان القسم المطابق.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "يضيف عنوان القسم المطابق.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "يضيف مقتطفا محللا للتصنيف المطابق.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "يضيف قيمة منطقية تشير إلى ما إذا كان محتوى البحث مطابقا للمحتوى.",
+       "apihelp-query+search-paramvalue-prop-extensiondata": "يضيف بيانات إضافية منشأة بواسطة الإضافات.",
+       "apihelp-query+search-paramvalue-prop-score": "تم تجاهله.",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "تم تجاهله.",
        "apihelp-query+search-param-limit": "كم عدد مجموع الصفحات للعودة.",
+       "apihelp-query+search-param-interwiki": "تضمين نتائج الإنترويكي في البحث، إذا كان ذلك متاحا.",
+       "apihelp-query+search-param-backend": "أية واجهة خلفية للبحث مستخدمة، إن لم تكن الافتراضية.",
+       "apihelp-query+search-param-enablerewrites": "تمكين إعادة كتابة الاستعلام الداخلية، يمكن لبعض الواجهات الخلفية البحث إعادة كتابة الاستعلام إلى آخر يُعتَقد أنه يوفر نتائج أفضل، على سبيل المثال عن طريق تصحيح الأخطاء الإملائية.",
+       "apihelp-query+search-param-sort": "تعيين ترتيب الفرز للنتائج التي تم إرجاعها.",
+       "apihelp-query+search-example-simple": "البحث عن <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-text": "البحث في النصوص عن <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-generator": "احصل على معلومات الصفحة حول الصفحات التي تم إرجاعها للبحث عن <kbd>meaning</kbd>.",
+       "apihelp-query+siteinfo-summary": "إرجاع معلومات عامة حول الموقع.",
+       "apihelp-query+siteinfo-param-prop": "أي المعلومات للحصول عليها:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "معلومات النظام الشاملة.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "قائمة النطاقات المسجلة وأسمائها الأساسية.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "قائمة الاسماء المستعارة المسجلة للنطاقات.",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "قائمة الأسماء المستعارة للصفحات الخاصة.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "قائمة الكلمات السحرية وأسمائها المستعارة.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "يعيد إحصائيات الموقع.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "يرجع خريطة الإنترويكي (يتم ترشيحها اختياريا، ويتم اختيارها اختياريا باستخدام <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "يرجع خادم قاعدة البيانات مع تأخر النسخ المتماثل الأعلى.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "يرجع مجموعات المستخدمين والصلاحيات المرتبطة.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "يرجع المكتبات المثبتة على الويكي.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "يرجع الإضافات المثبتة على الويكي.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "يرجع قائمة امتدادات الملفات (أنواع الملفات) المسموح برفعها.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "يرجع معلومات حقوق (ترخيص) الويكي إن كانت متاحة.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "يرجع المعلومات حول أنواع القيود (الحماية) المتاحة.",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "يعرض قائمة اللغات التي يدعمها ميدياويكي (مترجمة اختياريا باستخدام <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "يعرض قائمة بأكواد اللغات التي يتم تمكين [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] بها، والمتغيرات المدعومة المختلفة لكل منها.",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "يعرض قائمة بجميع المظاهر الممكَّنة (مترجمة اختياريا باستخدام <var>$1inlanguagecode</var>، بخلاف لغة المحتوى).",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "يعرض قائمة وسوم امتداد المحلل.",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "يرجع قائمة خطاطيف دالة المحلل.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "يعرض قائمة بكل الخطاطيف المشتركة (محتويات <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "يعرض قائمة بمعرفات المتغيرات.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "يعرض قائمة بالبروتوكولات المسموح بها في الروابط الخارجية.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "يعرض القيم الافتراضية لتفضيلات المستخدم.",
+       "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "يعرض تكوين مربع حوار الرفع.",
+       "apihelp-query+siteinfo-param-filteriw": "إرجاع الإدخالات المحلية أو غير المحلية فقط بخريطة الإنترويكي.",
+       "apihelp-query+siteinfo-param-showalldb": "سرد جميع خوادم قواعد البيانات، وليست فقط واحدة تخلفت أكثر.",
+       "apihelp-query+siteinfo-param-numberingroup": "يسرد عدد المستخدمين في مجموعات المستخدمين.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "رمز اللغة لأسماء اللغة المترجمة (أفضل جهد) وأسماء المظاهر.",
+       "apihelp-query+siteinfo-example-simple": "إحضار معلومات الموقع.",
+       "apihelp-query+siteinfo-example-interwiki": "إحضار قائمة ببادئات الإنترويكي المحلية.",
+       "apihelp-query+siteinfo-example-replag": "تحقق من تأخر النسخ المتماثل الحالي.",
+       "apihelp-query+stashimageinfo-summary": "يرجع معلومات الملف للملفات المملوءة.",
+       "apihelp-query+stashimageinfo-param-filekey": "المفتاح الذي يحدد التحميل السابق المخزن مؤقتا.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "الاسم المستعار لـ$1filekey; للتوافق مع الإصدارات السابقة.",
+       "apihelp-query+stashimageinfo-example-simple": "يرجع معلومات لملف مملوء.",
+       "apihelp-query+stashimageinfo-example-params": "يرجع الصور المصغرة لملفين مخزنين.",
+       "apihelp-query+tags-summary": "سرد وسوم التغيير.",
+       "apihelp-query+tags-param-limit": "الحد الأقصى لعدد الوسوم لإدراجها.",
        "apihelp-query+tags-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+tags-paramvalue-prop-name": "يضيف اسم الوسم.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "يضيف رسالة نظام للوسم.",
+       "apihelp-query+tags-paramvalue-prop-description": "يضيف وصف الوسم.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "يضيف عدد المراجعات وإدخالات السجلات التي تحتوي على هذا الوسم.",
+       "apihelp-query+tags-paramvalue-prop-defined": "حدد ما إذا كانت الوسم محددا.",
+       "apihelp-query+tags-paramvalue-prop-source": "الحصول على مصادر الوسم، والتي قد تتضمن <samp>extension</samp>  للوسوم المعرفة بالامتداد و<samp>manual</samp> للوسوم التي قد يتم تطبيقها يدويا من قبل المستخدمين.",
+       "apihelp-query+tags-paramvalue-prop-active": "ما إذا كان الوسم لا يزال قيد التطبيق.",
+       "apihelp-query+tags-example-simple": "سرد الوسوم المتاحة.",
+       "apihelp-query+templates-summary": "يعرض جميع الملفات المضمنة في الصفحات المعينة.",
+       "apihelp-query+templates-param-namespace": "إظهار القوالب في هذه النطاقات فقط.",
+       "apihelp-query+templates-param-limit": "كم عدد القوالب للعودة.",
+       "apihelp-query+templates-param-templates": "إدراج هذه القوالب فقط، مفيد للتحقق ما إذا كانت صفحة معينة تستخدم قالبا معينا.",
        "apihelp-query+templates-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+templates-example-simple": "احصل على القوالب المستخدمة في الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-generator": "احصل على معلومات حول صفحات القوالب المستخدمة في <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-namespaces": "احصل على صفحات في نطاقي {{ns:user}} و{{ns:template}} المضمنة في الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+tokens-summary": "الحصول على الرموز المميزة لإجراءات تعديل البيانات.",
+       "apihelp-query+tokens-param-type": "أنواع الرمز المميز للطلب.",
+       "apihelp-query+tokens-example-simple": "استرداد رمز csrf (الافتراضي).",
+       "apihelp-query+tokens-example-types": "استرجع رمز مراقبة ورمز مراجعة.",
+       "apihelp-query+transcludedin-summary": "ابحث عن جميع الصفحات التي تتضمن الصفحات المعينة.",
        "apihelp-query+transcludedin-param-prop": "أي الخصائص للحصول عليها.",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "معرف الصفحة لكل صفحة.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "عنوان كل صفحة.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "علم إذا كانت الصفحة تحويلة.",
+       "apihelp-query+transcludedin-param-namespace": "إدراج الصفحات في هذه النطاقات فقط.",
+       "apihelp-query+transcludedin-param-limit": "كم العدد للعودة.",
+       "apihelp-query+transcludedin-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط:\n;تحويلة: عرض التحويلات فقط.\n;!تحويلة:إظهار غير التحويلات فقط.",
+       "apihelp-query+transcludedin-example-simple": "احصل على قائمة بالصفحات التي تتضمن <kbd>Main Page</kbd>.",
+       "apihelp-query+transcludedin-example-generator": "الحصول على معلومات حول الصفحات التي تتضمن <kbd>Main Page</kbd>.",
+       "apihelp-query+usercontribs-summary": "الحصول على جميع التعديلات من قبل المستخدم.",
+       "apihelp-query+usercontribs-param-limit": "الحد الأقصى لعدد المساهمات للعودة.",
+       "apihelp-query+usercontribs-param-start": "الطابع الزمني للبدء للعودة منه.",
+       "apihelp-query+usercontribs-param-end": "الطابع الزمني للانتهاء للعودة إليه.",
+       "apihelp-query+usercontribs-param-user": "المستخدمون لاسترداد مساهمات لهم، لا يمكن استخدامه مع <var>$1userids</var> أو <var>$1userprefix</var>.",
+       "apihelp-query+usercontribs-param-userprefix": "استرداد المساهمات لجميع المستخدمين الذين تبدأ أسماؤهم بهذه القيمة، لا يمكن استخدامه مع <var>$1user</var> أو <var>$1userids</var>.",
+       "apihelp-query+usercontribs-param-userids": "معرفات المستخدم لاسترداد المساهمات لهم، لا يمكن استخدامه مع <var>$1user</var> أو <var>$1userprefix</var>.",
+       "apihelp-query+usercontribs-param-namespace": "إدراج المساهمات في هذه النطاقات فقط.",
+       "apihelp-query+usercontribs-param-prop": "تضمين أجزاء إضافية من المعلومات:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "يضيف معرف الصفحة ومعرف المراجعة.",
        "apihelp-query+usercontribs-paramvalue-prop-title": "يضيف معرف عنوان ونطاق الصفحة.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "يضيف الطابع الزمني للتحرير.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "يضيف تعليق التعديل.",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "يضيف التعليق المحلل للتحرير.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "يضيف الحجم الجديد للتحرير.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "يضيف حجم دلتا التعديل ضد الأصل.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "يضيف علامات التحرير.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "يوسم التعديلات المراجعة.",
+       "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "يوسم التعديلات المراجعة تلقائيا.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "يسرد وسوما للتحرير.",
+       "apihelp-query+usercontribs-param-show": "عرض العناصر التي تستوفي هذه المعايير فقط، مثل التعديلات الطفيفة فقط: <kbd>$2show=!minor</kbd>.\n\nإذا تم تعيين <kbd>$2show=patrolled</kbd> or <kbd>$2show=!patrolled</kbd>، فإن المراجعات أقدم من <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|ثانية|ثوانٍ}}) لن يتم عرضها.",
        "apihelp-query+usercontribs-param-tag": "إدراج المراجعات الموسومة بهذ الوسم فقط.",
+       "apihelp-query+usercontribs-param-toponly": "سرد التغييرات التي هي أحدث مراجعة فقط.",
+       "apihelp-query+usercontribs-example-user": "عرض مساهمات المستخدم <kbd>Example</kbd>.",
+       "apihelp-query+usercontribs-example-ipprefix": "عرض المساهمات من جميع عناوين الآيبي بالبادئة <kbd>192.0.2.</kbd>.",
+       "apihelp-query+userinfo-summary": "الحصول على معلومات حول المستخدم الحالي.",
        "apihelp-query+userinfo-param-prop": "أية قطعة من المعلومات لتضمينها:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "يوسم إذا تم منع المستخدم الحالي، من قبل أي شخص، ولأي سبب.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "يضيف وسم <samp>messages</samp> إذا كان المستخدم الحالي لديه رسائل معلقة.",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "يسرد كل المجموعات التي ينتمي إليها المستخدم الحالي.",
+       "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "يسرد المجموعات التي تم تعيينها للمستخدم بشكل صريح، بما في ذلك تاريخ انتهاء عضوية كل مجموعة.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "يسرد جميع المجموعات التي يكون المستخدم الحالي عضوا فيها تلقائيا.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "يسرد جميع الصلاحيات التي يمتلكها المستخدم الحالي.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "يسرد المجموعات التي يمكن للمستخدم الحالي الإضافتة والإزالة منها.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "يسرد جميع التفضيلات التي قام المستخدم الحالي بتعيينها.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "الحصول على رمز لتغيير تفضيلات المستخدم الحالي.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "يضيف عدد تحرير المستخدم الحالي.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "يسرد جميع حدود المعدل المطبقة على المستخدم الحالي.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "يضيف اسم المستخدم الحقيقي.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "يضيف عنوان البريد الإلكتروني للمستخدم وتاريخ مصادقة البريد الإلكتروني.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "يكرر الرأس <code>Accept-Language</code> الذي يرسله العميل بتنسيق منظم.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "يضيف تاريخ تسجيل المستخدم.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "يضيف عدد الصفحات غير المقروءة في قائمة مراقبة المستخدم (بحد أقصى $1; ترجع <samp>$2</samp> إذا كان أكثر).",
+       "apihelp-query+userinfo-paramvalue-prop-centralids": "يضيف المعرفات المركزية وحالة المرفقات للمستخدم.",
+       "apihelp-query+userinfo-param-attachedwiki": "باستخدام <kbd>$1prop=centralids</kbd>، حدد ما إذا كان المستخدم مرتبطا بالويكي المحدد بواسطة هذا المعرف.",
+       "apihelp-query+userinfo-example-simple": "الحصول على معلومات حول المستخدم الحالي.",
+       "apihelp-query+userinfo-example-data": "الحصول على معلومات حول المستخدم الحالي.",
+       "apihelp-query+users-summary": "الحصول على معلومات حول قائمة المستخدمين.",
        "apihelp-query+users-param-prop": "أية قطعة من المعلومات لتضمينها:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "يوسم إذا تم منع المستخدم الحالي، من قبل أي شخص، ولأي سبب.",
+       "apihelp-query+users-paramvalue-prop-groups": "يسرد كل المجموعات التي ينتمي إليها كل مستخدم.",
+       "apihelp-query+users-paramvalue-prop-groupmemberships": "يسرد المجموعات التي تم تعيينها للمستخدم بشكل صريح، بما في ذلك تاريخ انتهاء عضوية كل مجموعة.",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "يسرد كل المجموعات التي يوجد فيها المستخدم تلقائيا.",
+       "apihelp-query+users-paramvalue-prop-rights": "يسرد جميع الصلاحيات التي يمتلكها كل مستخدم.",
+       "apihelp-query+users-paramvalue-prop-editcount": "يضيف عدد تحرير المستخدم.",
+       "apihelp-query+users-paramvalue-prop-registration": "يضيف الطابع الزمني للتسجيل للمستخدم.",
+       "apihelp-query+users-paramvalue-prop-emailable": "يوسم إذا كان المستخدم يستطيع ويرغب في تلقي البريد الإلكتروني من خلال [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "يوسم الجنس من المستخدم: يرجع \"ذكر\" أو \"أنثى\" أو \"غير معروف\".",
+       "apihelp-query+users-paramvalue-prop-centralids": "يضيف المعرفات المركزية وحالة المرفقات للمستخدم.",
+       "apihelp-query+users-paramvalue-prop-cancreate": "يشير إلى ما إذا كان يمكن إنشاء حساب لأسماء مستخدمين صالحة ولكن غير مسجلة.",
+       "apihelp-query+users-param-attachedwiki": "باستخدام <kbd>$1prop=centralids</kbd>، حدد ما إذا كان المستخدم مرتبطا بالويكي المحدد بواسطة هذا المعرف.",
+       "apihelp-query+users-param-users": "قائمة من المستخدمين للحصول على معلومات عنهم.",
+       "apihelp-query+users-param-userids": "قائمة معرفات المستخدمين للحصول على معلومات عنهم.",
+       "apihelp-query+users-param-token": "استخدم [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] بدلا من ذلك.",
+       "apihelp-query+users-example-simple": "عودة المعلومات للمستخدم <kbd>Example</kbd>.",
+       "apihelp-query+watchlist-summary": "احصل على أحدث التغييرات على الصفحات في قائمة مراقبة المستخدم الحالي.",
+       "apihelp-query+watchlist-param-allrev": "تضمين مراجعات متعددة لنفس الصفحة في إطار زمني محدد.",
        "apihelp-query+watchlist-param-start": "الطابع الزمني لبدء العد منه.",
+       "apihelp-query+watchlist-param-end": "الطابع الزمني لإنهاء التعداد.",
+       "apihelp-query+watchlist-param-namespace": "تصفية التغييرات على النطاقات المعطاة فقط.",
+       "apihelp-query+watchlist-param-user": "إددراج التغييرات بواسطة هذا المستخدم فقط.",
+       "apihelp-query+watchlist-param-excludeuser": "لا تسرد التغييرات بواسطة هذا المستخدم.",
+       "apihelp-query+watchlist-param-limit": "إجمالي عدد النتائج لإرجاعها لكل طلب.",
+       "apihelp-query+watchlist-param-prop": "أي الخصائص الإضافية للحصول عليها:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "يضيف معرفات المراجعات ومعرفات الصفحات.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "يضيف عنوان الصفحة.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "يضيف علامات للتحرير.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "يضيف المستخدم الذي قام بالتعديل.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "يضيف معرف المستخدم الذي أجرى التعديل.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "يضيف تعليق التعديل.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "يضيف التعليق المحلل للتحرير.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "يضيف الطابع الزمني للتحرير.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "يوسم التعديلات المراجعة.",
+       "apihelp-query+watchlist-paramvalue-prop-autopatrol": "يوسم التعديلات المراجعة تلقائيا.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "يضيف الأطوال القديمة والجديدة للصفحة.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "يإضيف الطابع الزمني عندما تم إبلاغ المستخدم آخر مرة عن التعديل.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "يضيف معلومات السجل عند الاقتضاء.",
+       "apihelp-query+watchlist-paramvalue-prop-tags": "يسرد الوسوم للدخول.",
+       "apihelp-query+watchlist-param-show": "إظهار العناصر التي تستوفي هذه المعايير فقط، على سبيل المثال، مشاهدة التعديلات الطفيفة فقط التي قام بها المستخدمون مسجلو الدخول، قم بتعيين $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "أي أنواع التغييرات لعرضها.",
+       "apihelp-query+watchlist-paramvalue-type-edit": "تعديلات الصفحة العادية.",
+       "apihelp-query+watchlist-paramvalue-type-external": "التغييرات الخارجية.",
+       "apihelp-query+watchlist-paramvalue-type-new": "إنشاء الصفحات.",
+       "apihelp-query+watchlist-paramvalue-type-log": "ادخالات السجلات.",
+       "apihelp-query+watchlist-paramvalue-type-categorize": "تغييرات عضوية التصنيف.",
+       "apihelp-query+watchlist-param-owner": "يًستخدَم مع $1token للوصول إلى قائمة مراقبة مستخدم مختلف.",
+       "apihelp-query+watchlist-param-token": "رمز أمان (متوفر في [[Special:Preferences#mw-prefsection-watchlist|التفضيلات]]) للسماح بالوصول إلى قائمة مراقبة مستخدم آخر.",
+       "apihelp-query+watchlist-example-simple": "أدرج أعلى مراجعة للصفحات التي تم تغييرها مؤخرا في قائمة مراقبة المستخدم الحالية.",
+       "apihelp-query+watchlist-example-props": "احصل على معلومات إضافية حول المراجعة العليا للصفحات التي تم تغييرها مؤخرا في قائمة مراقبة المستخدم الحالية.",
+       "apihelp-query+watchlist-example-allrev": "يمكنك جلب معلومات حول جميع التغييرات الأخيرة على الصفحات في قائمة مراقبة المستخدم الحالي.",
+       "apihelp-query+watchlist-example-generator": "جلب معلومات الصفحة للصفحات التي تم تغييرها مؤخرا في قائمة مراقبة المستخدم الحالية.",
+       "apihelp-query+watchlist-example-generator-rev": "جلب معلومات المراجعة للتغييرات الأخيرة على الصفحات في قائمة مراقبة المستخدم الحالي.",
+       "apihelp-query+watchlist-example-wlowner": "أدرج أعلى مراجعة للصفحات التي تم تغييرها مؤخرا في قائمة مراقبة المستخدم <kbd>Example</kbd>.",
+       "apihelp-query+watchlistraw-summary": "الحصول على جميع صفحات قائمة مراقبة المستخدم الحالي.",
+       "apihelp-query+watchlistraw-param-namespace": "إدراج عناوين في النطاقات المعطاة فقط.",
+       "apihelp-query+watchlistraw-param-limit": "كم الإجمالي العدد للنتائج لإرجاعها لكل طلب.",
+       "apihelp-query+watchlistraw-param-prop": "أي الخصائص الإضافية للحصول عليها:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "يإضيف الطابع الزمني عندما تم إبلاغ المستخدم آخر مرة عن التعديل.",
+       "apihelp-query+watchlistraw-param-show": "إدراج العناصر التي تفي بهذه المعايير فقط.",
+       "apihelp-query+watchlistraw-param-owner": "يًستخدَم مع $1token للوصول إلى قائمة مراقبة مستخدم مختلف.",
+       "apihelp-query+watchlistraw-param-token": "رمز أمان (متوفر في [[Special:Preferences#mw-prefsection-watchlist|التفضيلات]]) للسماح بالوصول إلى قائمة مراقبة مستخدم آخر.",
+       "apihelp-query+watchlistraw-param-dir": "الاتجاه للإدراج فيه.",
+       "apihelp-query+watchlistraw-param-fromtitle": "العنوان (مع بادئة النطاق) لبدء العد منه.",
+       "apihelp-query+watchlistraw-param-totitle": "العنوان (مع بادئة النطاق) لإيقاف العد عنده.",
+       "apihelp-query+watchlistraw-example-simple": "سرد الصفحات في قائمة مراقبة المستخدم الحالي.",
+       "apihelp-query+watchlistraw-example-generator": "جلب معلومات الصفحة للصفحات في قائمة مراقبة المستخدم الحالية.",
+       "apihelp-removeauthenticationdata-summary": "إزالة بيانات المصادقة للمستخدم الحالي.",
+       "apihelp-removeauthenticationdata-example-simple": "محاولة إزالة بيانات المستخدم الحالي لـ<kbd>FooAuthenticationRequest</kbd>.",
+       "apihelp-resetpassword-summary": "إرسال بريد إلكتروني لإعادة تعيين كلمة المرور إلى مستخدم.",
+       "apihelp-resetpassword-extended-description-noroutes": "لا تتوفر طرق إعادة تعيين كلمة المرور.\n\nتمكين المسارات في <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> لاستخدام هذه الوحدة.",
+       "apihelp-resetpassword-param-user": "تجري إعادة تعيين المستخدم.",
+       "apihelp-resetpassword-param-email": "تجري إعادة ضبط عنوان البريد الإلكتروني للمستخدم.",
+       "apihelp-resetpassword-example-user": "إرسال بريد إلكتروني لإعادة تعيين كلمة المرور إلى المستخدم <kbd>Example</kbd>.",
+       "apihelp-resetpassword-example-email": "رسال بريد إلكتروني لإعادة تعيين كلمة المرور لجميع المستخدمين الذين لديهم عنوان البريد الإلكتروني <kbd>user@example.com</kbd>.",
+       "apihelp-revisiondelete-summary": "حذف واسترجاع المراجعات.",
+       "apihelp-revisiondelete-param-type": "نوع حذف المراجعة الذي يتم تنفيذه.",
+       "apihelp-revisiondelete-param-target": "عنوان الصفحة لحذف المراجعة، إذا كان مطلوبا للنوع.",
+       "apihelp-revisiondelete-param-ids": "المعرفات للمراجعات لحذفها.",
+       "apihelp-revisiondelete-param-hide": "ماذا نختبئ لكل مراجعة.",
+       "apihelp-revisiondelete-param-show": "ما الذي يجب إظهاره لكل مراجعة.",
+       "apihelp-revisiondelete-param-suppress": "سواء إخفاء البيانات من الإداريين وكذلك الآخرين.",
+       "apihelp-revisiondelete-param-reason": "سبب للحذف أو الاسترجاع.",
+       "apihelp-revisiondelete-param-tags": "وسوم لتطبيقها على الإدخال في سجل الحذف.",
+       "apihelp-revisiondelete-example-revision": "إخفاء محتوى المراجعة <kbd>12345</kbd> في الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-revisiondelete-example-log": "إخفاء كافة البيانات الموجودة في إدخال السجل <kbd>67890</kbd> بسبب <kbd>BLP violation</kbd>.",
+       "apihelp-rollback-summary": "التراجع عن آخر تعديل على الصفحة.",
+       "apihelp-rollback-extended-description": "إذا قام المستخدم الأخير الذي قام بتحرير الصفحة بإجراء تعديلات متعددة في صف، فسوف يتم استرجاعها مرة أخرى.",
+       "apihelp-rollback-param-title": "عنوان الصفحة للتراجع، لا يمكن استخدامه مع <var>$1project</var>.",
+       "apihelp-rollback-param-pageid": "معرف الصفحة للصفحة للتراجع، لا يمكن استخدامه مع <var>$1project</var>.",
+       "apihelp-rollback-param-tags": "وسوم للتطبيق على التراجع.",
+       "apihelp-rollback-param-user": "اسم المستخدم الذي سيتم إرجاع تعديلاته.",
+       "apihelp-rollback-param-summary": "ملخص تعديل مخصص، إذا كان فارغا، سيتم استخدام الملخص الافتراضي.",
+       "apihelp-rollback-param-markbot": "تعليم التعديلات المسترجعة كتعديلات بوت.",
+       "apihelp-rollback-param-watchlist": "إضافة أو إزالة الصفحة من قائمة مراقبة المستخدم الحالي أو استخدام التفضيلات أو عدم تغيير المراقبة بدون شروط.",
+       "apihelp-rollback-example-simple": "استرجاع التعديلات الأخيرة على الصفحة<kbd>Main Page</kbd> بواسطة المستخدم <kbd>Example</kbd>.",
+       "apihelp-rollback-example-summary": "استرجاع التعديلات الأخيرة على صفحة <kbd>Main Page</kbd>بواسطة مستخدم الآيبي <kbd>192.0.2.5</kbd> بالملخص <kbd>Reverting vandalism</kbd>، وتعليم تلك التعديلات والاسترجاع كتعديلات بوت.",
+       "apihelp-rsd-summary": "تصدير مخطط RSD (اكتشاف بسيط حقا).",
+       "apihelp-rsd-example-simple": "تصدير مخطط RSD.",
+       "apihelp-setnotificationtimestamp-summary": "تحديث الطابع الزمني للإخطار للصفحات المراقبة.",
+       "apihelp-setnotificationtimestamp-extended-description": "يؤثر هذا على إبراز الصفحات التي تم تغييرها في قائمة المراقبة والتاريخ، وإرسال البريد الإلكتروني عند تمكين التفضيل  \"{{int:tog-enotifwatchlistpages}}\".",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "العمل على جميع الصفحات المراقبة.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "الطابع الزمني الذي لتعيين الطابع الزمني للإشعار.",
+       "apihelp-setnotificationtimestamp-param-torevid": "مراجعة لضبط الطابع الزمني للإشعار عليها (صفحة واحدة فقط).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "مراجعة لضبط الطابع الزمني للإشعار الأحدث منها (صفحة واحدة فقط).",
+       "apihelp-setnotificationtimestamp-example-all": "إعادة تعيين حالة الإشعار لقائمة المراقبة بأكملها.",
+       "apihelp-setnotificationtimestamp-example-page": "إعادة ضبط حالة الإخطار لـ<kbd>Main page</kbd>.",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "تعيين الطابع الزمني للإشعار للصفحة <kbd>Main page</kbd> حتى لا يتم عرض جميع التعديلات منذ 1 يناير 2012.",
+       "apihelp-setnotificationtimestamp-example-allpages": "إعادة تعيين حالة الإشعار للصفحات في نطاق <kbd>{{ns:user}}</kbd>.",
+       "apihelp-setpagelanguage-summary": "تغيير لغة صفحة.",
+       "apihelp-setpagelanguage-extended-description-disabled": "لا يُسمَح بتغيير لغة صفحة في هذا الويكي.\n\nتمكين <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]] لاستخدام هذا الإجراء.",
+       "apihelp-setpagelanguage-param-title": "عنوان الصفحة التي ترغب في تغيير لغتها، لا يمكن استخدامه مع <var>$1pageid</var>.",
+       "apihelp-setpagelanguage-param-pageid": "معرف الصفحة للصفحة التي ترغب في تغيير لغتها، لا يمكن استخدامه مع <var>$1title</var>.",
+       "apihelp-setpagelanguage-param-lang": "كود اللغة للغة لتغيير الصفحة إليها، استخدم <kbd>default</kbd> لإعادة تعيين الصفحة إلى لغة محتوى الويكي.",
+       "apihelp-setpagelanguage-param-reason": "سبب للتغيير.",
+       "apihelp-setpagelanguage-param-tags": "تغيير الوسوم لتطبيقها على إدخال السجل الناتج عن هذا الإجراء.",
+       "apihelp-setpagelanguage-example-language": "تغيير لغة <kbd>Main Page</kbd> إلى لغة الباسك.",
+       "apihelp-setpagelanguage-example-default": "تغيير لغة الصفحة بمعرف 123 إلى لغة محتوى الويكي الافتراضية.",
+       "apihelp-stashedit-summary": "إعداد تحرير في ذاكرة التخزين المؤقت المشتركة.",
+       "apihelp-stashedit-extended-description": "يهدف هذا إلى الاستخدام عبر AJAX من نموذج التحرير لتحسين أداء حفظ الصفحة.",
+       "apihelp-stashedit-param-title": "عنوان الصفحة التي يتم تحريرها.",
+       "apihelp-stashedit-param-section": "رقم القسم. <kbd>0</kbd> للقسم العلوي، <kbd>new</kbd> لقسم جديد.",
+       "apihelp-stashedit-param-sectiontitle": "العنوان لقسم جديد.",
+       "apihelp-stashedit-param-text": "محتوى الصفحة.",
+       "apihelp-stashedit-param-stashedtexthash": "رمز رقم محتوى الصفحة من وحدة تخزين سابقة لاستخدامها بدلا من ذلك.",
+       "apihelp-stashedit-param-contentmodel": "نموذج المحتوى للمحتوى الجديد.",
+       "apihelp-stashedit-param-contentformat": "نسق المحتوى التسلسلي المستخدم لنص المدخلات.",
+       "apihelp-stashedit-param-baserevid": "معرف المراجعة للمراجعة الأساسية.",
+       "apihelp-stashedit-param-summary": "تغيير الملخص.",
+       "apihelp-tag-summary": "إضافة أو إزالة وسوم التغيير من المراجعات الفردية أو إدخالات السجلات.",
+       "apihelp-tag-param-rcid": "واحد أو أكثر من التغييرات الحديثة للمعرفات التي يمكن من خلالها إضافة أو إزالة الوسم.",
+       "apihelp-tag-param-revid": "معرف تعديل واحد أو أكثر يمكن من خلاله إضافة أو إزالة الوسم.",
+       "apihelp-tag-param-logid": "واحد أو أكثر من معرفات إدخال السجل يمكن من خلاله إضافة أو إزالة الوسم.",
+       "apihelp-tag-param-add": "وسوم للإضافة، يمكن فقط إضافة وسوم محددة يدويا.",
+       "apihelp-tag-param-remove": "وسوم لإزالتها، لا يمكن إزالة سوى الوسوم المعرفة يدويا أو غير المعرفة تماما.",
+       "apihelp-tag-param-reason": "سبب للتغيير.",
+       "apihelp-tag-param-tags": "وسوم لتطبيقها على إدخال السجل الذي سيتم إنشاؤه كنتيجة لهذا الإجراء.",
+       "apihelp-tag-example-rev": "أضف الوسم <kbd>vandalism</kbd> إلى معرّف المراجعة 123 بدون تحديد سبب",
+       "apihelp-tag-example-log": "إزالة الوسم <kbd>spam</kbd> من معرف إدخال السجل 123 بالسبب <kbd>Wrongly applied</kbd>",
+       "apihelp-tokens-summary": "الحصول على الرموز المميزة لإجراءات تعديل البيانات.",
+       "apihelp-tokens-extended-description": "تم إهمال هذه الوحدة لصالح [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "أنواع الرمز المميز للطلب.",
+       "apihelp-tokens-example-edit": "استرداد رمز تحرير (الافتراضي).",
+       "apihelp-tokens-example-emailmove": "استرداد رمز بريد إلكتروني ورمز نقل.",
+       "apihelp-unblock-summary": "إلغاء منع المستخدم.",
+       "apihelp-unblock-param-id": "معرف المنع لرفع المنع (تم الحصول عليه من خلال <kbd>list=blocks</kbd>)، لا يمكن استخدامه مع <var>$1user</var> أو <var>$1userid</var>.",
+       "apihelp-unblock-param-user": "اسم المستخدم، أو عنوان آيبي أو نطاق عنوان آيبي لمنعه، لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1id</var> أو <var>$1userid</var>.",
+       "apihelp-unblock-param-userid": "معرف الآيبي لرفع منعه، لا يمكن أن يُستخدَم جنبا إلى جنب مع <var>$1id</var> أو <var>$1user</var>.",
+       "apihelp-unblock-param-reason": "سبب لرفع للمنع.",
+       "apihelp-unblock-param-tags": "تغيير الوسوم للتطبيق على الإدخال في سجل المنع.",
+       "apihelp-unblock-example-id": "رفع منع المعرف #<kbd>105</kbd>.",
+       "apihelp-unblock-example-user": "رفع منع المستخدم <kbd>Bob</kbd> بالسبب <kbd>Sorry Bob</kbd>.",
+       "apihelp-undelete-summary": "استعادة مراجعات صفحة محذوفة.",
+       "apihelp-undelete-extended-description": "يمكن استرداد قائمة المراجعات المحذوفة (بما في ذلك الطوابع الزمنية) من خلال [[Special:ApiHelp/query+deletedrevisions|prop=deletedrevisions]]، ويمكن استرداد قائمة معرفات الملفات المحذوفة من خلال [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "عنوان الصفحة للاسترجاع.",
+       "apihelp-undelete-param-reason": "سبب للاسترجاع.",
+       "apihelp-undelete-param-tags": "تغيير وسوم لتطبيقها على الإدخال في سجل الحذف.",
+       "apihelp-undelete-param-timestamps": "الطوابع الزمنية للمراجعات للاسترجاع، إذا كانت كل من <var>$1timestamps</var> فارغة، فستتم استعادتها كلها.",
+       "apihelp-undelete-param-fileids": "الطوابع الزمنية لمراجعات الملف للاسترجاع، إذا كانت كل من <var>$1timestamps</var> فارغة، فستتم استعادتها كلها.",
+       "apihelp-undelete-param-watchlist": "إضافة أو إزالة الصفحة من قائمة مراقبة المستخدم الحالي أو استخدام التفضيلات أو عدم تغيير المراقبة بدون شروط.",
+       "apihelp-undelete-example-page": "استرجاع صفحة <kbd>Main Page</kbd>.",
+       "apihelp-undelete-example-revisions": "استرجاع مراجعتين لصفحة <kbd>Main Page</kbd>.",
+       "apihelp-unlinkaccount-summary": "إزالة حساب جهة خارجية مرتبط من المستخدم الحالي.",
+       "apihelp-unlinkaccount-example-simple": "محاولة إزالة رابط المستخدم الحالي للموفر المقترن بـ<kbd>FooAuthenticationRequest</kbd>.",
+       "apihelp-upload-summary": "رفع ملف أو الحصول على حالة المرفوعات المعلقة.",
+       "apihelp-upload-param-filename": "اسم الملف المستهدف.",
+       "apihelp-upload-param-comment": "تحميل تعليق الرفع، يُستخدَم أيضا كنص الصفحة الأولي للملفات الجديدة إذا لم يتم تحديد <var>$1text</var>.",
+       "apihelp-upload-param-tags": "غتيير الوسوم لتطبيقها على إدخال سجل الرفع ومراجعة صفحة الملف.",
+       "apihelp-upload-param-text": "النص الأولي للصفحة للملفات الجديدة.",
+       "apihelp-upload-param-watch": "راقب الصفحة.",
+       "apihelp-upload-param-watchlist": "إضافة أو إزالة الصفحة من قائمة مراقبة المستخدم الحالي أو استخدام التفضيلات أو عدم تغيير المراقبة بدون شروط.",
+       "apihelp-upload-param-ignorewarnings": "تجاهل أية تحذيرات.",
+       "apihelp-upload-param-file": "محتويات الملف.",
+       "apihelp-upload-param-url": "مسار لجلب الملف منه.",
+       "apihelp-upload-param-filekey": "المفتاح الذي يحدد التحميل السابق المخزن مؤقتا.",
+       "apihelp-upload-param-sessionkey": "نفس $1filekey، تتم صيانته للتوافق مع الإصدارات السابقة.",
+       "apihelp-upload-param-stash": "في حالة التعيين، سيخزن الخادم الملف مؤقتا بدلا من إضافته إلى المستودع.",
+       "apihelp-upload-param-filesize": "حجم ملف الرفع الكامل.",
+       "apihelp-upload-param-offset": "إزاحة القطعة بالبايت.",
+       "apihelp-upload-param-chunk": "محتويات القطعة.",
+       "apihelp-upload-param-async": "إجراء عمليات ملف كبيرة محتملة غير متزامنة عند الإمكان.",
+       "apihelp-upload-param-checkstatus": "فقط جلب حالة الرفع لمفتاح الملف المحدد.",
+       "apihelp-upload-example-url": "رفع من مسار.",
+       "apihelp-upload-example-filekey": "أكمل الرفع الذي أخفق بسبب التحذيرات.",
+       "apihelp-userrights-summary": "تغيير عضوية مجموعة المستخدم.",
+       "apihelp-userrights-param-user": "اسم المستخدم.",
+       "apihelp-userrights-param-userid": "معرف المستخدم.",
+       "apihelp-userrights-param-add": "أضف المستخدم إلى هذه المجموعات، أو إذا كان بالفعل عضوا، قم بتحديث صلاحية عضويته في تلك المجموعة.",
+       "apihelp-userrights-param-expiry": "الطوابع الزمنية لانتهاء الصلاحية، قد تكون نسبية (على سبيل المثال <kbd>5 months</kbd> or <kbd>2 weeks</kbd>) أو مطلقة (على سبيل المثال <kbd>2014-09-18T12:34:56Z</kbd>). إذا تم تعيين طابع زمني واحد فقط، فسيتم استخدامه لكافة المجموعات التي تم تمريرها إلى الوسيط <var>$1add</var>، استخدم <kbd>infinite</kbd> أو <kbd>indefinite</kbd> أو <kbd>infinity</kbd> أو <kbd>never</kbd> لمجموعة مستخدمين لا تنتهي صلاحيتها أبدا.",
+       "apihelp-userrights-param-remove": "أزل المستخدم من هذه المجموعات.",
+       "apihelp-userrights-param-reason": "سبب للتغيير.",
+       "apihelp-userrights-param-tags": "تغيير وسوم لتطبيقها على الإدخال في سجل صلاحيات المستخدم.",
+       "apihelp-userrights-example-user": "إضافة المستخدم <kbd>FooBot</kbd> إلى مجموعة <kbd>bot</kbd> وإزالته من المجموعات <kbd>sysop</kbd> و<kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-userid": "إضافة المستخدم بالمعرف <kbd>123</kbd> إلى مجموعة <kbd>bot</kbd> وإزالته من المجموعات <kbd>sysop</kbd> و<kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-expiry": "إضافة المستخدم <kbd>SometimeSysop</kbd> إلى مجموعة <kbd>sysop</kbd> لمدة شهر واحد.",
+       "apihelp-validatepassword-summary": "التحقق من صحة كلمة المرور ضد سياسات كلمة مرور الويكي.",
+       "apihelp-validatepassword-extended-description": "يتم الإبلاغ عن الصلاحية كـ<samp>Good</samp> إذا كانت كلمة المرور مقبولة، أو <samp>Change</samp> إذا كان قد يتم استخدام كلمة المرور لتسجيل الدخول ولكن يجب تغييرها، أو <samp>Invalid</samp> إذا كان كلمة المرور غير قابلة للاستخدام.",
+       "apihelp-validatepassword-param-password": "كلمة المرور للتحقق.",
+       "apihelp-validatepassword-param-user": "اسم المستخدم; للاستخدام عند اختبار إنشاء الحساب، يجب ألا يكون المستخدم المحدد موجودا.",
+       "apihelp-validatepassword-param-email": "عنوان البريد الإلكتروني; للاستخدام عند اختبار إنشاء الحساب.",
+       "apihelp-validatepassword-param-realname": "الاسم الحقيقي; للاستخدام عند اختبار إنشاء الحساب.",
+       "apihelp-validatepassword-example-1": "تحقق من كلمة المرور <kbd>foobar</kbd> للمستخدم الحالي.",
+       "apihelp-validatepassword-example-2": "تحقق من كلمة المرور <kbd>qwerty</kbd> لإنشاء المستخدم <kbd>Example</kbd>.",
+       "apihelp-watch-summary": "إضافة أو إزالة صفحات من قائمة مراقبة المستخدم الحالي.",
+       "apihelp-watch-param-title": "الصفحة ل(عدم)مراقبتها، استخدم <var>$1titles</var> بدلا من ذلك.",
+       "apihelp-watch-param-unwatch": "إذا تم التعيين فستتم إزالة الصفحة من قائمة المراقبة بدلا من مراقبتها.",
+       "apihelp-watch-example-watch": "راقب الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-watch-example-unwatch": "ألغِ مراقبة الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-watch-example-generator": "راقب الصفحات القليلة الأولى في النطاق الرئيسي.",
+       "apihelp-format-example-generic": "إرجاع نتيجة الاستعلام بتنسيق $1.",
+       "apihelp-format-param-wrappedhtml": "إرجاع HTML المطبوع بشكل جيد ووحدات ResourceLoader المرتبطة به ككائن JSON.",
+       "apihelp-json-summary": "بيانات الإخراج بتنسيق JSON.",
+       "apihelp-json-param-callback": "إذا تم تحديده، فسيقوم بإخراج الإخراج في استدعاء دالة معينة، للسلامة; سيتم تقييد جميع البيانات الخاصة بالمستخدم.",
+       "apihelp-json-param-utf8": "إذا تم تحديده، يقوم بترميز معظم (وليس كل) الأحرف غير ASCII كـUTF-8 بدلا من استبدالها بتسلسلات الهروب السداسية العشرية، افتراضي عندما لا يكون <var>formatversion</var>  <kbd>1</kbd>.",
+       "apihelp-json-param-ascii": "إذا تم تحديده، يشفر كل غير ASCII باستخدام تسلسلات الهروب السداسية العشرية، افتراضي عندما يكون <var>formatversion</var> <kbd>1</kbd>.",
+       "apihelp-jsonfm-summary": "بيانات الإخراج بتنسيق JSON (الطباعة بـHTML).",
+       "apihelp-none-summary": "عدم إخراج أي شيء.",
+       "apihelp-php-summary": "بيانات الإخراج بتنسيق PHP المتسلسل.",
+       "apihelp-phpfm-summary": "بيانات الإخراج بتنسيق JSON (الطباعة بـHTML).",
+       "apihelp-rawfm-summary": "بيانات الإخراج، بما في ذلك عناصر تصحيح الأخطاء، بتنسيق JSON (الطباعة بـHTML).",
+       "apihelp-xml-summary": "بيانات الإخراج بتنسيق XML.",
+       "apihelp-xml-param-xslt": "إذا تم تحديده، سيضيف الصفحة المسماة كورقة أنماط XSL، يجب أن تكون القيمة عنوانا في نطاق {{ns:MediaWiki}} ينتهي بـ<code>.xsl</code>.",
+       "apihelp-xml-param-includexmlnamespace": "If specified, adds an XML namespace.\nإذا تم تحديدها، سيضيف نطاق XML.",
+       "apihelp-xmlfm-summary": "بيانات الإخراج بتنسيق XML (الطباعة بـHTML).",
+       "api-format-title": "ناتج API ميدياويكي",
+       "api-format-prettyprint-header": "هذا هو تمثيل HTML لتنسيق $1، HTML مفيد في تصحيح الأخطاء، ولكنه غير مناسب لاستخدام التطبيق. \n\nحدد الوسيط <var>format</var> لتغيير نسق المخرجات، لمشاهدة تمثيل غير HTML لتنسيق $1; اضبط <kbd>format=$2</kbd>.\n\nراجع [[mw:Special:MyLanguage/API|التوثيق كاملا]]، أو [[Special:ApiHelp/main|مساعدة API]] لمزيد من المعلومات.",
+       "api-format-prettyprint-header-only-html": "هذا تمثيل HTML مخصص للتصحيح، وغير مناسب لاستخدام تطبيق HTML. \n\nراجع [[mw:Special:MyLanguage/API|التوثيق كاملا]]، أو [[Special:ApiHelp/main|مساعدة API]] لمزيد من المعلومات.",
+       "api-format-prettyprint-header-hyperlinked": "هذا هو تمثيل HTML لتنسيق $1، HTML مفيد في تصحيح الأخطاء، ولكنه غير مناسب لاستخدام التطبيق. \n\nحدد الوسيط <var>format</var> لتغيير نسق المخرجات، لمشاهدة تمثيل غير HTML لتنسيق $1; اضبط [$3 <kbd>format=$2</kbd>].\n\nراجع [[mw:API|التوثيق كاملا]]، أو [[Special:ApiHelp/main|مساعدة API]] لمزيد من المعلومات.",
+       "api-format-prettyprint-status": "سيتم إرجاع هذه الاستجابة بحالة HTTP $1 $2.",
+       "api-login-fail-aborted": "تتطلب المصادقة تفاعل المستخدم، والذي لا يدعمه <kbd>action=login</kbd>، لتتمكن من تسجيل الدخول باستخدام <kbd>action=login</kbd>; راجع [[Special:BotPasswords]]، لمتابعة استخدام تسجيل الدخول إلى الحساب الرئيسي; راجع <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+       "api-login-fail-aborted-nobotpw": "تتطلب المصادقة تفاعل المستخدم، والذي لا يدعمه <kbd>action=login</kbd>، لتسجيل الدخول; راجع <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+       "api-login-fail-badsessionprovider": "لا يمكن تسجيل الدخول باستخدام $1.",
+       "api-login-fail-sameorigin": "لا يمكن تسجيل الدخول عندما لا يتم تطبيق السياسة الأصلية.",
+       "api-pageset-param-titles": "قائمة عناوين للعمل عليها.",
+       "api-pageset-param-pageids": "قائمة بمعرفات الصفحات للعمل عليها.",
+       "api-pageset-param-revids": "قائمة بمعرفات المراجعات للعمل عليها.",
+       "api-pageset-param-generator": "احصل على قائمة الصفحات للعمل عليها من خلال تنفيذ وحدة الاستعلام المحددة.\n\n<strong>ملاحظة:</strong> يجب أن تبدأ أسماء وسطائط المولد بـ\"g\"، انظر الأمثلة.",
+       "api-pageset-param-redirects-generator": "حل التحويلات تلقائيا في <var>$1titles</var> و<var>$1pageids</var> و<var>$1revids</var> وفي الصفحات التي يتم إرجاعها بواسطة <var>$1generator</var>.",
+       "api-pageset-param-redirects-nogenerator": "حل التحويلات تلقائيا في <var>$1titles</var> و<var>$1pageids</var> و<var>$1revids</var>.",
+       "api-help-title": "مساعدة API ميدياويكي",
+       "api-help-lead": "\nهذه صفحة توثيق ميدياويكي API التي تم إنشاؤها تلقائيا.\n\nوثائق وأمثلة: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "الوحدة الرئيسية",
+       "api-help-undocumented-module": "لا توجد وثائق للوحدة $1.",
+       "api-help-flag-deprecated": "هذه الوحدة مهملة.",
+       "api-help-flag-internal": "<strong> هذه الوحدة داخلية أو غير مستقرة.</strong> قد تتغير عمليتها دون إشعار.",
+       "api-help-flag-readrights": "هذه الوحدة تتطلب صلاحيات القراءة.",
+       "api-help-flag-writerights": "هذه الوحدة تتطلب صلاحيات الكتابة.",
+       "api-help-flag-mustbeposted": "هذه الوحدة تقبل طلبات POST فقط.",
+       "api-help-flag-generator": "هذه الوحدة يمكن أن تُستخدَم كمولد.",
+       "api-help-source": "المصدر:$1",
+       "api-help-source-unknown": "المصدر: <span class=\"apihelp-unknown\">غير معروف</span>",
+       "api-help-license": "الترخيص: [[$1|$2]]",
+       "api-help-license-noname": "الترخيص: [[$1|انظر الوصلة]]",
+       "api-help-license-unknown": "الترخيص: <span class=\"apihelp-unknown\">غير معروف</span>",
+       "api-help-parameters": "{{PLURAL:$1|وسيط|وسائط}}:",
+       "api-help-param-deprecated": "مهمل.",
+       "api-help-param-required": "هذا الوسيط مطلوب.",
+       "api-help-param-templated": "هذا [[Special:ApiHelp/main#main/templatedparams|وسيط قالب]]، عند تقديم الطلب، $2.",
+       "api-help-param-templated-var-first": "يجب استبدال <var>&#x7B;$1&#x7D;</var> في اسم الوسيط بقيم <var>$2</var>",
+       "api-help-param-templated-var": "<var>&#x7B;$1&#x7D;</var> بقيم <var>$2</var>",
+       "api-help-datatypes-header": "أنواع البيانات",
        "apierror-offline": "لم يمكن المتابعة بسبب مشاكل في الاتصال بالشبكة; تأكد من أنه لديك اتصال بالإنترنت وحاول مرة أخرى.",
        "apierror-timeout": "لم يستجب الخادم ضمن الوقت المتوقع.",
        "api-feed-error-title": "خطأ ($1)"
index 94e1ac6..74efd82 100644 (file)
        "apihelp-query+filearchive-example-simple": "Show a list of all deleted files.",
 
        "apihelp-query+filerepoinfo-summary": "Return meta information about image repositories configured on the wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> and [[Special:ApiHelp/query+imageinfo|imageinfo]] return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (properties available may vary on other wikis).",
+       "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "URL to the repository API - helpful for getting image info from the host.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "Repository wiki's <var>[[mw:Special:MyLanguage/Manual:$wgArticlePath|$wgArticlePath]]</var> or equivalent.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "Whether files can be uploaded to this repository, e.g. via CORS and shared authentication.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "The human-readable name of the repository wiki.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "Repository wiki's favicon URL, from <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "Whether file description pages are fetched from this repository when viewing local file description pages.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "Whether file names implicitly start with a capital letter.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-local": "Whether that repository is the local one or not.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-name": "The key of the repository - used in e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> and [[Special:ApiHelp/query+imageinfo|imageinfo]] return values.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "Root URL path for image paths.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-scriptDirUrl": "Root URL path for the repository wiki's MediaWiki installation.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-server": "Repository wiki's <var>[[mw:Special:MyLanguage/Manual:$wgServer|$wgServer]]</var> or equivalent.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-thumbUrl": "Root URL path for thumbnail paths.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-url": "Public zone URL path.",
        "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
 
        "apihelp-query+fileusage-summary": "Find all pages that use the given files.",
index c36b065..c486045 100644 (file)
        "apihelp-edit-param-watch": "문서를 현재 사용자의 주시문서 목록에 추가합니다.",
        "apihelp-edit-param-unwatch": "문서를 현재 사용자의 주시문서 목록에서 제거합니다.",
        "apihelp-edit-param-watchlist": "현재 사용자의 주시목록에서 문서를 무조건적으로 추가하거나 제거하거나, 환경 설정을 사용하거나 주시를 변경하지 않습니다.",
-       "apihelp-edit-param-redirect": "자동으로 넘겨주기 처리하기.",
+       "apihelp-edit-param-prependtext": "이 텍스를 문서의 처음에 추가합니다. $1text를 무효로 합니다.",
+       "apihelp-edit-param-appendtext": "이 텍스트를 문서의 끝에 추가합니다. $1text를 무효로 합니다.\n\n새 문단을 추가하려면 이 변수 대신 $1section=new를 사용하십시오.",
+       "apihelp-edit-param-undo": "이 판의 편집을 취소합니다. $1text, $1prependtext, $1appendtext를 무효로 합니다.",
+       "apihelp-edit-param-undoafter": "$1undo에서부터 이 판까지의 모든 판의 편집을 취소합니다. 설정하지 않으면 하나의 판만 편집을 취소합니다.",
+       "apihelp-edit-param-redirect": "자동으로 넘겨주기를 처리합니다.",
+       "apihelp-edit-param-contentformat": "입력 텍스트에 사용할 내용 직렬화 포맷입니다.",
        "apihelp-edit-param-contentmodel": "새 콘텐츠의 콘텐츠 모델.",
+       "apihelp-edit-param-token": "토큰은 무조건 마지막 변수로 보내거나 적어도 $1text 변수 뒤에 보내는 것이 좋습니다.",
        "apihelp-edit-example-edit": "문서 편집",
+       "apihelp-edit-example-prepend": "문서의 맨 앞에 <kbd>_&#95;NOTOC_&#95;</kbd>를 추가합니다.",
        "apihelp-edit-example-undo": "자동 편집요약으로 13579판에서 13585판까지 되돌리기.",
        "apihelp-emailuser-summary": "사용자에게 이메일을 보냅니다.",
        "apihelp-emailuser-param-target": "이메일을 받을 사용자.",
        "apihelp-parse-param-sectionpreview": "문단 미리 보기 모드에서 구문 분석을 합니다. (미리 보기 모드도 활성화함)",
        "apihelp-parse-param-disabletoc": "출력에서 목차를 제외합니다.",
        "apihelp-parse-param-useskin": "선택한 스킨을 파서 출력에 적용합니다. 다음의 속성에 영향을 줄 수 있습니다: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
+       "apihelp-parse-param-contentformat": "입력 텍스트에 사용할 내용 직렬화 포맷입니다. $1text와 함께 사용할 때에만 유효합니다.",
        "apihelp-parse-example-page": "페이지의 구문을 분석합니다.",
        "apihelp-parse-example-text": "위키텍스트의 구문을 분석합니다.",
        "apihelp-parse-example-summary": "요약을 구문 분석합니다.",
        "apihelp-stashedit-param-sectiontitle": "새 문단을 위한 제목.",
        "apihelp-stashedit-param-text": "문서 내용.",
        "apihelp-stashedit-param-contentmodel": "새 콘텐츠의 콘텐츠 모델.",
+       "apihelp-stashedit-param-contentformat": "입력 텍스트에 사용할 내용 직렬화 포맷입니다.",
        "apihelp-tag-summary": "개별 판이나 기록 항목에서 변경 태그를 추가하거나 제거합니다.",
        "apihelp-tag-param-rcid": "태그를 변경하거나 추가할 하나 이상의 최근 바뀜 ID입니다.",
        "apihelp-tag-param-revid": "태그를 추가하거나 제거할 하나 이상의 판 ID입니다.",
        "api-help-datatypes-header": "데이터 유형",
        "api-help-datatypes": "API 요청 내 몇몇 매개변수형에 대해 더 자세히 설명해보겠습니다:\n;boolean\n:Boolean 매개변수들은 HTML 체크박스처럼 동작합니다: 만약 매개변수가 지정되었다면, 값에 상관없이 참의 값으로 여겨집니다. 거짓값은 매개변수 전체를 생략하세요.\n;timestamp\n:타임스탬프들은 여러 형식으로 표현될 수 있으나 ISO 8601 날짜와 시간이 추천됩니다. 모든 시간은 UTC이어야 하며, 포함된 시간대는 모두 무시됩니다.\n:* ISO 8601 날짜와 시간, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (구두점과 <kbd>Z</kbd>는 선택입니다.)\n:* ISO 8601 날짜와 시간과 (무시되는) 소수 초, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (대시, 콜론과 <kbd>Z</kbd>는 선택입니다.)\n:* 미디어위키 형식, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* 일반적인 수 형식 <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (<kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, 또는 <kbd>-<var>##</var></kbd>와 같은 선택적 시간대는 무시됩니다)\n:*RFC 2822 형식 (시간대는 생략될 수 있음), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850 형식 (시간대는 생략될 수 있음), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime 형식, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* 1부터 13자리까지의 숫자로 표현된 1970-01-01T00:00:00Z부터 흐른 시간(초) (<kbd>0</kbd>을 제외)\n:* 문자열 <kbd>now</kbd>",
        "api-help-templatedparams-header": "틀 변수",
+       "api-help-templatedparams": "틀 변수는 다른 일부 변수의 개별 값에 대한 API 모듈에 값이 필요한 경우를 지원합니다. 이를테면 과일을 요청하는 API 모듈이 있다면 <var>fruits</var> 변수를 사용하여 요청할 과일을 지정할 수 있으며 틀 변수 <var>{fruit}-quantity</var>를 사용하여 요청할 과일의 수를 지정할 수 있습니다. 사과 1개, 바나나 5개, 딸기 20개를 원하는 API 클라이언트는 <kbd>fruits=apples|bananas|strawberries&apples-quantity=1&bananas-quantity=5&strawberries-quantity=20</kbd>와 같은 요청을 수행할 수 있습니다.",
        "api-help-param-type-limit": "유형: 정수 또는 <kbd>max</kbd>",
        "api-help-param-type-integer": "유형: {{PLURAL:$1|1=정수|2=정수 목록}}",
        "api-help-param-type-boolean": "유형: 불리언 ([[Special:ApiHelp/main#main/datatypes|자세한 정보]])",
        "api-help-param-type-timestamp": "유형: {{PLURAL:$1|1=타임스탬프|2=타임스탬프 목록}} ([[Special:ApiHelp/main#main/datatypes|허용되는 포맷]])",
        "api-help-param-type-user": "유형: {{PLURAL:$1|1=사용자 이름|2=사용자 이름 목록}}",
-       "api-help-param-list": "{{PLURAL:$1|1=다음 값 중 하나|2=값 (<kbd>{{!}}</kbd>로 구분)}}: $2 또는 [[Special:ApiHelp/main#main/datatypes|alternative]]: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=다음 값 중 하나|2=값 (<kbd>{{!}}</kbd>로 구분)}}: $2 또는 [[Special:ApiHelp/main#main/datatypes|다른 문자열]]: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=비어 있어야 함|비어 있을 수 있거나 $2}}",
        "api-help-param-limit": "$1 초과는 허용되지 않습니다.",
        "api-help-param-limit2": "$1 초과는 허용되지 않습니다. (봇의 경우 $2)",
index 8f8a4c3..4ba4062 100644 (file)
        "apihelp-query+links-example-simple": "Holl de Lengks vun dä Sigg <kbd>Main Page</kbd>",
        "apihelp-query+linkshere-summary": "Fengk alle Sigge, di op de aanjejovve Sigge lengke.",
        "apihelp-query+linkshere-param-prop": "Wat för en Eijeschaffte holle:",
-       "apihelp-query+linkshere-paramvalue-prop-pageid": "Page ID of each page.",
-       "apihelp-query+linkshere-paramvalue-prop-title": "Title of each page.",
-       "apihelp-query+linkshere-paramvalue-prop-redirect": "Flag if the page is a redirect.",
        "apihelp-query+linkshere-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
        "apihelp-query+linkshere-param-limit": "Wi vill holle?",
        "apihelp-query+linkshere-example-simple": "Holl en Leß vun Sigge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ lengke donn.",
index 9d43533..9b4ac5f 100644 (file)
        "apihelp-query+search-paramvalue-prop-hasrelated": "Zignorowano",
        "apihelp-query+search-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+search-param-interwiki": "Dołączaj wyniki wyszukiwań interwiki w wyszukiwarce, jeśli możliwe.",
+       "apihelp-query+search-param-sort": "Ustaw porządek sortowania zwracanych wyników.",
        "apihelp-query+search-example-simple": "Szukaj <kbd>meaning</kbd>.",
        "apihelp-query+siteinfo-paramvalue-prop-general": "Ogólne informacje o systemie.",
        "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista zarejestrowanych przestrzeni nazw i ich nazwy kanoniczne.",
index 65c3cff..c177d2e 100644 (file)
        "apihelp-query+search-param-interwiki": "Inclua resultados de interwiki na pesquisa, se disponível.",
        "apihelp-query+search-param-backend": "Qual o backend de pesquisa a ser usado, se não for o padrão.",
        "apihelp-query+search-param-enablerewrites": "Habilita a reescrita de consulta interna. Alguns backends de pesquisa podem reescrever a consulta em outro que é pensado para fornecer melhores resultados, por exemplo, corrigindo erros de ortografia.",
+       "apihelp-query+search-param-sort": "Definir o ordenamento dos resultados devolvidos.",
        "apihelp-query+search-example-simple": "Procurar por <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Procurar textos para <kbd>meaning</kbd>.",
        "apihelp-query+search-example-generator": "Obter informações da página sobre as páginas retornadas para uma pesquisa por <kbd>meaning</kbd>.",
index 1680bb8..2b4a587 100644 (file)
        "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
        "apihelp-query+filerepoinfo-summary": "{{doc-apihelp-summary|query+filerepoinfo}}",
        "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|apiurl}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|articlepath}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|canUpload}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|displayname}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|favicon}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|fetchDescription}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|initialCapital}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-local": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|local}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-name": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|name}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|rootUrl}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-scriptDirUrl": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|scriptDirUrl}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-server": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|server}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-thumbUrl": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|thumbUrl}}",
+       "apihelp-query+filerepoinfo-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+filerepoinfo|prop|url}}",
        "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
        "apihelp-query+fileusage-summary": "{{doc-apihelp-summary|query+fileusage}}",
        "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop|paramvalues=1}}",
index 85d3982..818f717 100644 (file)
        "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
        "apihelp-query+search-param-backend": "要使用的搜索后端,如果没有则为默认。",
        "apihelp-query+search-param-enablerewrites": "启用内部查询重写。一些搜索后端可以重写查询到另一个被认为能提供更好结果的位置,例如纠正拼写错误。",
+       "apihelp-query+search-param-sort": "设置返回结果的排序。",
        "apihelp-query+search-example-simple": "搜索<kbd>meaning</kbd>。",
        "apihelp-query+search-example-text": "搜索文本<kbd>meaning</kbd>。",
        "apihelp-query+search-example-generator": "获取有关搜索<kbd>meaning</kbd>返回页面的页面信息。",
index 161dd56..3260ce4 100644 (file)
@@ -771,7 +771,12 @@ class AuthManager implements LoggerAwareInterface {
                        $status = self::SEC_FAIL;
                }
 
-               $this->logger->info( __METHOD__ . ": $operation is $status" );
+               $this->logger->info( __METHOD__ . ": $operation is $status for '{user}'",
+                       [
+                               'user' => $session->getUser()->getName(),
+                               'clientip' => $this->getRequest()->getIP(),
+                       ]
+               );
 
                return $status;
        }
index 2d08895..7cbb86f 100644 (file)
@@ -321,7 +321,7 @@ class LinkCache {
         */
        public function invalidateTitle( LinkTarget $title ) {
                if ( $this->isCacheable( $title ) ) {
-                       $cache = ObjectCache::getMainWANInstance();
+                       $cache = $this->wanCache;
                        $cache->delete(
                                $cache->makeKey( 'page', $title->getNamespace(), sha1( $title->getDBkey() ) )
                        );
index d019f41..bd9cedc 100644 (file)
@@ -21,7 +21,9 @@
  * @ingroup Change tagging
  */
 
+use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\NameTableStore;
 use Wikimedia\Rdbms\Database;
 
 class ChangeTags {
@@ -346,31 +348,32 @@ class ChangeTags {
                if ( count( $tagsToAdd ) ) {
                        $changeTagMapping = [];
                        if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
-                               $tagDefRows = [];
+                               $changeTagDefStore = new NameTableStore(
+                                       MediaWikiServices::getInstance()->getDBLoadBalancer(),
+                                       MediaWikiServices::getInstance()->getMainWANObjectCache(),
+                                       LoggerFactory::getInstance( 'NameTableSqlStore' ),
+                                       'change_tag_def',
+                                       'ctd_id',
+                                       'ctd_name',
+                                       null,
+                                       false,
+                                       function ( $insertFields ) {
+                                               $insertFields['ctd_user_defined'] = 0;
+                                               $insertFields['ctd_count'] = 0;
+                                               return $insertFields;
+                                       }
+                               );
+
                                foreach ( $tagsToAdd as $tag ) {
-                                       $tagDefRows[] = [
-                                               'ctd_name' => $tag,
-                                               'ctd_user_defined' => 0,
-                                               'ctd_count' => 1
-                                       ];
+                                       $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag );
                                }
 
-                               $dbw->upsert(
+                               $dbw->update(
                                        'change_tag_def',
-                                       $tagDefRows,
-                                       [ 'ctd_name' ],
                                        [ 'ctd_count = ctd_count + 1' ],
+                                       [ 'ctd_name' => $tagsToAdd ],
                                        __METHOD__
                                );
-
-                               $res = $dbw->select(
-                                       'change_tag_def',
-                                       [ 'ctd_name', 'ctd_id' ],
-                                       [ 'ctd_name' => $tagsToAdd ]
-                               );
-                               foreach ( $res as $row ) {
-                                       $changeTagMapping[$row->ctd_name] = $row->ctd_id;
-                               }
                        }
 
                        $tagsRows = [];
index 79f787d..e50f855 100644 (file)
@@ -65,6 +65,7 @@ abstract class MWLBFactory {
                        'cliMode' => $wgCommandLineMode,
                        'hostname' => wfHostname(),
                        'readOnlyReason' => $readOnlyMode->getReason(),
+                       'defaultGroup' => $mainConfig->get( 'DBDefaultGroup' ),
                ];
 
                // When making changes here, remember to also specify MediaWiki-specific options
index 3c86d11..9f6257c 100644 (file)
@@ -90,6 +90,7 @@ class LinksDeletionUpdate extends DataUpdate implements EnqueueableDataUpdate {
                foreach ( $catBatches as $catBatch ) {
                        $this->page->updateCategoryCounts( [], $catBatch, $id );
                        if ( count( $catBatches ) > 1 ) {
+                               // Only sacrifice atomicity if necessary due to size
                                $lbFactory->commitAndWaitForReplication(
                                        __METHOD__, $this->ticket, [ 'domain' => $dbw->getDomainID() ]
                                );
@@ -98,19 +99,10 @@ class LinksDeletionUpdate extends DataUpdate implements EnqueueableDataUpdate {
 
                // Refresh counts on categories that should be empty now
                if ( $title->getNamespace() === NS_CATEGORY ) {
-                       $row = $dbw->selectRow(
-                               'category',
-                               [ 'cat_id', 'cat_title', 'cat_pages', 'cat_subcats', 'cat_files' ],
-                               [ 'cat_title' => $title->getDBkey(), 'cat_pages <= 100' ],
-                               __METHOD__
-                       );
-                       if ( $row ) {
-                               $cat = Category::newFromRow( $row, $title );
-                               // T166757: do the update after the main job DB commit
-                               DeferredUpdates::addCallableUpdate( function () use ( $cat ) {
-                                       $cat->refreshCounts();
-                               } );
-                       }
+                       // T166757: do the update after the main job DB commit
+                       DeferredUpdates::addCallableUpdate( function () use ( $title ) {
+                               $this->refreshCategoryIfEmpty( $title );
+                       } );
                }
 
                $this->batchDeleteByPK(
@@ -195,6 +187,35 @@ class LinksDeletionUpdate extends DataUpdate implements EnqueueableDataUpdate {
                ScopedCallback::consume( $scopedLock );
        }
 
+       /**
+        * @param Title $title
+        */
+       private function refreshCategoryIfEmpty( Title $title ) {
+               $dbw = $this->getDB();
+
+               $row = $dbw->selectRow(
+                       'category',
+                       [ 'cat_id', 'cat_title', 'cat_pages', 'cat_subcats', 'cat_files' ],
+                       [ 'cat_title' => $title->getDBkey(), 'cat_pages <= 100' ],
+                       __METHOD__
+               );
+
+               if ( !$row ) {
+                       return; // nothing to delete
+               }
+
+               $cat = Category::newFromRow( $row, $title );
+               $hasLink = $dbw->selectField(
+                       'categorylinks',
+                       '1',
+                       [ 'cl_to' => $title->getDBkey() ],
+                       __METHOD__
+               );
+               if ( !$hasLink ) {
+                       $cat->refreshCounts(); // delete the category table entry
+               }
+       }
+
        private function batchDeleteByPK( $table, array $conds, array $pk, $bSize ) {
                $services = MediaWikiServices::getInstance();
                $lbFactory = $services->getDBLoadBalancerFactory();
index f840b49..719478e 100644 (file)
@@ -5,7 +5,8 @@
                        "පසිඳු කාවින්ද",
                        "Subi",
                        "Sator",
-                       "Mikel Ibaiba"
+                       "Mikel Ibaiba",
+                       "Fitoschido"
                ]
        },
        "config-desc": "MediaWiki instalatzailea",
        "config-install-done-path": "<strong>Zorionak!</strong>\nMediaWiki instalatu duzu.\n\nInstalatzaileak sortu egin du <code>LocalSettings.php</code>\nZure konfigurazio guztia dauka.\n\nDeskargatu egin behar duzu eta jarri <code>$4</code> -ean . Deskarga automakikoki hasiko da.\n\nEz badizu deskargatzeko aukerarik eman, edo kantzalatu egin baduzu, hurrengo linkean klikatu berrabiatzeko:\n\n$3\n\n<strong>Oharra:</strong> Instalazio prozesuatik ateratzen bazara konfigurazio artxikoa deskargatu barik, gero ez da egongo eskuragarri.\n\nBehin hori eginda, <strong>[$2 enter your wiki]</strong> ahal duzu.",
        "config-install-success": "MediaWiki arrakastaz instalatu da. Orain <$1$2> bisitatu dezakezu zure wikia ikusteko.\nGalderarik izanez gero, begiratu gure maiztasunez egiten diren galderen zerrenda:\n<https://www.mediawiki.org/wiki/Manual:FAQ> edo erabili orrialde honi lotuta dauden laguntza foroetako bat.",
        "config-download-localsettings": "Jaitsi <code>LocalSettings.php</code>",
-       "config-help": "Laguntza",
+       "config-help": "laguntza",
        "config-help-tooltip": "sakatu zabaltzeko",
        "config-nofile": "Ezin da \"$1\" fitxategia aurkitu. Ezabatua izan da?",
        "config-extension-link": "Ba al zenekien wikiak [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions] onartzen dituela?\n\nArakatu [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category] edo [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] ikusi ahal izateko luzapenen zerrenda.",
index d9b6108..525ee6b 100644 (file)
        "config-nofile": "\"$1\" fájl nem található. Törölve lett?",
        "config-extension-link": "Tudtad, hogy a wikid támogat [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions kiterjesztéseket]?\n\nBöngészhetsz [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category kiterjesztéseket kategóriánként] vagy válogathatsz a [https://www.mediawiki.org/wiki/Extension_Matrix kiterjesztésmátrixból] az összes kiterjesztés áttekintéséhez.",
        "config-skins-screenshots": "$1 (képernyőképek: $2)",
+       "config-extensions-requires": "$1 ($2 szükséges hozzá)",
        "config-screenshot": "képernyőkép",
        "mainpagetext": "<strong>A MediaWiki telepítése sikeresen befejeződött.</strong>",
        "mainpagedocfooter": "Ha segítségre van szükséged a wikiszoftver használatához, akkor keresd fel a [https://meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.\n\n== Alapok (angol nyelven) ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Beállítások listája]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki GyIK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources A MediaWiki fordítása a saját nyelvedre]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Tudd meg többet, hogyan küzdhetsz a kéretlen levelek ellen a wikiden]"
index cb60b01..20ddf72 100644 (file)
@@ -50,9 +50,9 @@ class MultiHttpClient implements LoggerAwareInterface {
        protected $multiHandle = null; // curl_multi handle
        /** @var string|null SSL certificates path */
        protected $caBundlePath;
-       /** @var int */
+       /** @var float */
        protected $connTimeout = 10;
-       /** @var int */
+       /** @var float */
        protected $reqTimeout = 300;
        /** @var bool */
        protected $usePipelining = false;
@@ -65,6 +65,11 @@ class MultiHttpClient implements LoggerAwareInterface {
        /** @var LoggerInterface */
        protected $logger;
 
+       // In PHP 7 due to https://bugs.php.net/bug.php?id=76480 the request/connect
+       // timeouts are periodically polled instead of being accurately respected.
+       // The select timeout is set to the minimum timeout multiplied by this factor.
+       const TIMEOUT_ACCURACY_FACTOR = 0.1;
+
        /**
         * @param array $options
         *   - connTimeout     : default connection timeout (seconds)
@@ -148,6 +153,8 @@ class MultiHttpClient implements LoggerAwareInterface {
        public function runMulti( array $reqs, array $opts = [] ) {
                $chm = $this->getCurlMulti();
 
+               $selectTimeout = $this->getSelectTimeout( $opts );
+
                // Normalize $reqs and add all of the required cURL handles...
                $handles = [];
                foreach ( $reqs as $index => &$req ) {
@@ -224,7 +231,7 @@ class MultiHttpClient implements LoggerAwareInterface {
                                } while ( $mrc == CURLM_CALL_MULTI_PERFORM );
                                // Wait (if possible) for available work...
                                if ( $active > 0 && $mrc == CURLM_OK ) {
-                                       if ( curl_multi_select( $chm, 10 ) == -1 ) {
+                                       if ( curl_multi_select( $chm, $selectTimeout ) == -1 ) {
                                                // PHP bug 63411; https://curl.haxx.se/libcurl/c/curl_multi_fdset.html
                                                usleep( 5000 ); // 5ms
                                        }
@@ -285,11 +292,11 @@ class MultiHttpClient implements LoggerAwareInterface {
        protected function getCurlHandle( array &$req, array $opts = [] ) {
                $ch = curl_init();
 
-               curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT,
-                       $opts['connTimeout'] ?? $this->connTimeout );
+               curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT_MS,
+                       ( $opts['connTimeout'] ?? $this->connTimeout ) * 1000 );
                curl_setopt( $ch, CURLOPT_PROXY, $req['proxy'] ?? $this->proxy );
-               curl_setopt( $ch, CURLOPT_TIMEOUT,
-                       $opts['reqTimeout'] ?? $this->reqTimeout );
+               curl_setopt( $ch, CURLOPT_TIMEOUT_MS,
+                       ( $opts['reqTimeout'] ?? $this->reqTimeout ) * 1000 );
                curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
                curl_setopt( $ch, CURLOPT_MAXREDIRS, 4 );
                curl_setopt( $ch, CURLOPT_HEADER, 0 );
@@ -410,6 +417,28 @@ class MultiHttpClient implements LoggerAwareInterface {
                return $ch;
        }
 
+       /**
+        * Get a suitable select timeout for the given options.
+        *
+        * @param array $opts
+        * @return float
+        */
+       private function getSelectTimeout( $opts ) {
+               $connTimeout = $opts['connTimeout'] ?? $this->connTimeout;
+               $reqTimeout = $opts['reqTimeout'] ?? $this->reqTimeout;
+               $timeouts = array_filter( [ $connTimeout, $reqTimeout ] );
+               if ( count( $timeouts ) === 0 ) {
+                       return 1;
+               }
+
+               $selectTimeout = min( $timeouts ) * self::TIMEOUT_ACCURACY_FACTOR;
+               // Minimum 10us for sanity
+               if ( $selectTimeout < 10e-6 ) {
+                       $selectTimeout = 10e-6;
+               }
+               return $selectTimeout;
+       }
+
        /**
         * @return resource
         * @throws Exception
index 927a1e3..0913322 100644 (file)
@@ -1223,7 +1223,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                                }
                                // Use the busy fallback value if nothing else
                                if ( $busyValue !== null ) {
-                                       $this->stats->increment( "wanobjectcache.$kClass.miss.busy" );
+                                       $miss = is_infinite( $minTime ) ? 'renew' : 'miss';
+                                       $this->stats->increment( "wanobjectcache.$kClass.$miss.busy" );
 
                                        return is_callable( $busyValue ) ? $busyValue() : $busyValue;
                                }
@@ -1268,7 +1269,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        $this->cache->changeTTL( self::MUTEX_KEY_PREFIX . $key, (int)$preCallbackTime - 60 );
                }
 
-               $this->stats->increment( "wanobjectcache.$kClass.miss.compute" );
+               $miss = is_infinite( $minTime ) ? 'renew' : 'miss';
+               $this->stats->increment( "wanobjectcache.$kClass.$miss.compute" );
 
                return $value;
        }
index ff296c4..9a30383 100644 (file)
@@ -91,6 +91,9 @@ abstract class LBFactory implements ILBFactory {
        /** @var string One of the ROUND_* class constants */
        private $trxRoundStage = self::ROUND_CURSORY;
 
+       /** @var string|null */
+       private $defaultGroup = null;
+
        const ROUND_CURSORY = 'cursory';
        const ROUND_BEGINNING = 'within-begin';
        const ROUND_COMMITTING = 'within-commit';
@@ -138,6 +141,7 @@ abstract class LBFactory implements ILBFactory {
                $this->cliMode = $conf['cliMode'] ?? ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' );
                $this->hostname = $conf['hostname'] ?? gethostname();
                $this->agent = $conf['agent'] ?? '';
+               $this->defaultGroup = $conf['defaultGroup'] ?? null;
 
                $this->ticket = mt_rand();
        }
@@ -579,6 +583,7 @@ abstract class LBFactory implements ILBFactory {
                        'hostname' => $this->hostname,
                        'cliMode' => $this->cliMode,
                        'agent' => $this->agent,
+                       'defaultGroup' => $this->defaultGroup,
                        'chronologyCallback' => function ( ILoadBalancer $lb ) {
                                // Defer ChronologyProtector construction in case setRequestInfo() ends up
                                // being called later (but before the first connection attempt) (T192611)
index 6b271a7..e01b24e 100644 (file)
@@ -123,6 +123,9 @@ class LoadBalancer implements ILoadBalancer {
        /** @var string Stage of the current transaction round in the transaction round life-cycle */
        private $trxRoundStage = self::ROUND_CURSORY;
 
+       /** @var string|null */
+       private $defaultGroup = null;
+
        /** @var int Warn when this many connection are held */
        const CONN_HELD_WARN_THRESHOLD = 10;
 
@@ -259,6 +262,8 @@ class LoadBalancer implements ILoadBalancer {
                                $this->trxRoundStage = self::ROUND_ROLLBACK_CALLBACKS;
                        }
                }
+
+               $this->defaultGroup = $params['defaultGroup'] ?? null;
        }
 
        /**
@@ -717,8 +722,11 @@ class LoadBalancer implements ILoadBalancer {
                        }
                }
 
+               // Check one "group" per default: the generic pool
+               $defaultGroups = $this->defaultGroup ? [ $this->defaultGroup ] : [ false ];
+
                $groups = ( $groups === false || $groups === [] )
-                       ? [ false ] // check one "group": the generic pool
+                       ? $defaultGroups
                        : (array)$groups;
 
                $masterOnly = ( $i == self::DB_MASTER || $i == $this->getWriterIndex() );
index 06915b2..5ef0135 100644 (file)
@@ -92,10 +92,11 @@ class BufferingStatsdDataFactory extends StatsdDataFactory implements IBuffering
        }
 
        /**
-        * @deprecated Use getData()
+        * @deprecated since 1.30 Use getData() instead
         * @return StatsdData[]
         */
        public function getBuffer() {
+               wfDeprecated( __METHOD__, '1.30' );
                return $this->buffer;
        }
 
@@ -103,6 +104,10 @@ class BufferingStatsdDataFactory extends StatsdDataFactory implements IBuffering
                return !empty( $this->buffer );
        }
 
+       /**
+        * @since 1.30
+        * @return StatsdData[]
+        */
        public function getData() {
                return $this->buffer;
        }
index 52d7373..9ebc63f 100644 (file)
@@ -1859,9 +1859,9 @@ class FormatMetadata extends ContextSource {
                // drop all characters which are not valid in an XML tag name
                // a bunch of non-ASCII letters would be valid but probably won't
                // be used so we take the easy way
-               $key = preg_replace( '/[^a-zA-z0-9_:.-]/', '', $key );
+               $key = preg_replace( '/[^a-zA-z0-9_:.\-]/', '', $key );
                // drop characters which are invalid at the first position
-               $key = preg_replace( '/^[\d-.]+/', '', $key );
+               $key = preg_replace( '/^[\d\-.]+/', '', $key );
 
                if ( $key == '' ) {
                        $key = '_';
index bf6ab4a..03e4bdb 100644 (file)
@@ -1022,6 +1022,12 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        'label-message' => 'tog-hideminor',
                        'section' => 'rc/advancedrc',
                ];
+               $defaultPreferences['rcfilters-rc-collapsed'] = [
+                       'type' => 'api',
+               ];
+               $defaultPreferences['rcfilters-wl-collapsed'] = [
+                       'type' => 'api',
+               ];
                $defaultPreferences['rcfilters-saved-queries'] = [
                        'type' => 'api',
                ];
index 7814194..5ea49ee 100644 (file)
@@ -359,7 +359,7 @@ class ServiceContainer implements DestructibleService {
                                $this,
                                ...$this->extraInstantiationParams
                        );
-                       // NOTE: when adding more wiring logic here, make sure copyWiring() is kept in sync!
+                       // NOTE: when adding more wiring logic here, make sure importWiring() is kept in sync!
                } else {
                        throw new NoSuchServiceException( $name );
                }
index 55d3462..8384ca0 100644 (file)
@@ -220,7 +220,6 @@ abstract class Skin extends ContextSource {
                // Preload jquery.tablesorter for mediawiki.page.ready
                if ( strpos( $out->getHTML(), 'sortable' ) !== false ) {
                        $modules['content'][] = 'jquery.tablesorter';
-                       $modules['styles']['content'][] = 'jquery.tablesorter.styles';
                }
 
                // Preload jquery.makeCollapsible for mediawiki.page.ready
index 831644e..58944b4 100644 (file)
@@ -57,6 +57,12 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         */
        protected static $limitPreferenceName;
 
+       /**
+        * Preference name for collapsing the active filter display. Subclasses should override this.
+        * @var string
+        */
+       protected static $collapsedPreferenceName;
+
        /** @var string */
        protected $rcSubpage;
 
@@ -779,9 +785,13 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        foreach ( $jsData['messageKeys'] as $key ) {
                                $messages[$key] = $this->msg( $key )->plain();
                        }
-
                        $out->addBodyClasses( 'mw-rcfilters-enabled' );
 
+                       $collapsed = $this->getUser()->getBoolOption( static::$collapsedPreferenceName );
+                       if ( $collapsed ) {
+                               $out->addBodyClasses( 'mw-rcfilters-collapsed' );
+                       }
+
                        $out->addHTML(
                                ResourceLoader::makeInlineScript(
                                        ResourceLoader::makeMessageSetScript( $messages ),
@@ -790,6 +800,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        );
 
                        $out->addJsConfigVars( 'wgStructuredChangeFilters', $jsData['groups'] );
+                       $out->addJsConfigVars( 'wgStructuredChangeFiltersCollapsedState', $collapsed );
 
                        $out->addJsConfigVars(
                                'wgRCFiltersChangeTags',
@@ -818,6 +829,10 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                'wgStructuredChangeFiltersDaysPreferenceName',
                                static::$daysPreferenceName
                        );
+                       $out->addJsConfigVars(
+                               'wgStructuredChangeFiltersCollapsedPreferenceName',
+                               static::$collapsedPreferenceName
+                       );
 
                        $out->addJsConfigVars(
                                'StructuredChangeFiltersLiveUpdatePollingRate',
index bfef5e0..2496192 100644 (file)
@@ -35,6 +35,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        protected static $savedQueriesPreferenceName = 'rcfilters-saved-queries';
        protected static $daysPreferenceName = 'rcdays'; // Use general RecentChanges preference
        protected static $limitPreferenceName = 'rcfilters-limit'; // Use RCFilters-specific preference
+       protected static $collapsedPreferenceName = 'rcfilters-rc-collapsed';
 
        private $watchlistFilterGroupDefinition;
 
index ce7fea9..b9543d9 100644 (file)
@@ -35,6 +35,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        protected static $savedQueriesPreferenceName = 'rcfilters-wl-saved-queries';
        protected static $daysPreferenceName = 'watchlistdays';
        protected static $limitPreferenceName = 'wllimit';
+       protected static $collapsedPreferenceName = 'rcfilters-wl-collapsed';
 
        private $maxDays;
 
index e25b11e..e55ab1f 100644 (file)
@@ -52,7 +52,7 @@
  */
 class UploadStash {
        // Format of the key for files -- has to be suitable as a filename itself (e.g. ab12cd34ef.jpg)
-       const KEY_FORMAT_REGEX = '/^[\w-\.]+\.\w*$/';
+       const KEY_FORMAT_REGEX = '/^[\w\-\.]+\.\w*$/';
        const MAX_US_PROPS_SIZE = 65535;
 
        /**
index 0ee0da0..6b67e8d 100644 (file)
        "interlanguage-link-title": "$1 – $2",
        "simpleantispam-label": "Paréksa anti-spam.\n<strong>BÈK</strong> neupasoë!",
        "pageinfo-title": "Keutrangan keu \"$1\"",
+       "pageinfo-header-basic": "Keutrangan peuneuphôn",
+       "pageinfo-header-restrictions": "Lindông mieng",
+       "pageinfo-display-title": "Judul tampilan",
+       "pageinfo-default-sort": "Gunci urôt baku",
+       "pageinfo-length": "Panyang mieng (lam bita)",
+       "pageinfo-article-id": "ID Mieng",
+       "pageinfo-language": "Bahsa asoe mieng",
+       "pageinfo-content-model": "Modèl asoe mieng",
+       "pageinfo-robot-policy": "Geuindèks lé robot",
        "pageinfo-watchers": "Jumeulah ureueng kalön mieng",
+       "pageinfo-redirects-name": "Jumeulah peuninah u mieng nyoe",
        "pageinfo-toolboxlink": "Keutrangan miëng",
        "previousdiff": "← Bida awai",
        "nextdiff": "Geunantoë lheuëh nyan →",
        "logentry-delete-delete": "$1 {{GENDER:$2|geusampôh}} miëng $3",
        "logentry-move-move": "$1 {{GENDER:$2|geupinah}} mieng $3 u $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|geupinah}} mieng $3 u $4 hana geubôh peuninah",
+       "logentry-patrol-patrol-auto": "$1 otomatis {{GENDER:$2|geutanda}} revisi $4 nibak mieng $3 nyang geukawai",
        "logentry-newusers-create": "$1 {{GENDER:$2|geupeugöt}} akun ureuëng ngui",
        "logentry-upload-upload": "$1 {{GENDER:$2|geupasoe}} $3",
        "searchsuggest-search": "Mita {{SITENAME}}",
index a8761fb..8f9b163 100644 (file)
        "resetpass-submit-loggedin": "تغيير كلمة السر",
        "resetpass-submit-cancel": "إلغاء",
        "resetpass-wrong-oldpass": "كلمة سر حالية أو مؤقتة غير صحيحة.\nربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.",
-       "resetpass-recycled": "اÙ\84رجاء Ø¥Ø¹Ø§Ø¯Ø© ØªØ¹Ù\8aÙ\8aÙ\86 كلمة السر الخاصة بك إلى تركيبة أخرى غير كلمة السر الحالية.",
+       "resetpass-recycled": "اÙ\84رجاء ØªØºÙ\8aÙ\8aر كلمة السر الخاصة بك إلى تركيبة أخرى غير كلمة السر الحالية.",
        "resetpass-temp-emailed": "أنت مسجل الدخول حالياً بتركيبة مرسلة عبر البريد الإلكتروني. لإكمال عملية تسجيل الدخول‘ يجب إعادة تعيين كلمة السر هنا:",
        "resetpass-temp-password": "كلمة سر مؤقتة:",
        "resetpass-abort-generic": "منعت مُلحقة إتمام صيرورة تغيير كلمة السّر.",
        "resetpass-expired": "انتهت مدة صلاحية كلمة السر الخاصة بك. الرجاء تعيين كلمة سر جديدة لتسجيل الدخول.",
-       "resetpass-expired-soft": "انتهت مدة صلاحية كلمة السر الخاصة بك. الرجاء تعيين كلمة سر جديدة الآن أو النقر على زر إلغاء لإعادة تعيين كلمة السر لاحقاً.",
+       "resetpass-expired-soft": "انتهت مدة صلاحية كلمة السر الخاصة بك; الرجاء تغيير كلمة سر جديدة الآن أو النقر على زر إلغاء لإعادة تعيين كلمة السر لاحقاً.",
        "resetpass-validity-soft": "كلمة السر الخاصة بك غير صالحة :  $1 \n\nرجاءا اختر كلمة سر جديدة الآن، أو انقر فوق \"{{int:authprovider-resetpass-skip-label}}\" لتغييرها في وقت لاحق.",
        "passwordreset": "إعادة ضبط كلمة السر",
        "passwordreset-text-one": "أكمل هذا النموذج لإعادة ضبط كلمة السر الخاصة بك.",
        "rcfilters-other-review-tools": "أدوات مراجعة أخرى",
        "rcfilters-group-results-by-page": "جمع النتائج حسب الصفحة",
        "rcfilters-activefilters": "المرشحات النشطة",
+       "rcfilters-activefilters-hide": "إخفاء",
+       "rcfilters-activefilters-show": "عرض",
        "rcfilters-advancedfilters": "مرشحات متقدمة",
        "rcfilters-limit-title": "النتائج للعرض",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|تغيير|تغييرات}}، $2",
        "rcfilters-savedqueries-rename": "أعد التسمية",
        "rcfilters-savedqueries-setdefault": "حفظ كقيمة افتراضية",
        "rcfilters-savedqueries-unsetdefault": "إزالة القيمة الافتراضية",
-       "rcfilters-savedqueries-remove": "أزÙ\84",
+       "rcfilters-savedqueries-remove": "حذÙ\81",
        "rcfilters-savedqueries-new-name-label": "الاسم",
        "rcfilters-savedqueries-new-name-placeholder": "صف الغرض من المرشح",
        "rcfilters-savedqueries-apply-label": "أنشئ مرشحا",
        "rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
        "rcfilters-filterlist-title": "مرشحات",
        "rcfilters-filterlist-whatsthis": "كيف تعمل هذه؟",
-       "rcfilters-filterlist-feedbacklink": "أخبرنا ما رأيك حول هذه المرشحات (الجديدة)",
+       "rcfilters-filterlist-feedbacklink": "أخبرنا ما رأيك حول هذه المرشحات",
        "rcfilters-highlightbutton-title": "التعليم على النتائج",
        "rcfilters-highlightmenu-title": "اختر لونًا",
        "rcfilters-highlightmenu-help": "اختر لونا للتعليم على هذه الخاصية",
index cd3f350..ce7e738 100644 (file)
@@ -21,7 +21,8 @@
                        "Dibya Dutta",
                        "Matma Rex",
                        "চাণক্য কুমাৰ দাস",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Sagsag"
                ]
        },
        "tog-underline": "সংযোগসমূহ অধোৰেখিত কৰক:",
        "rcfilters-quickfilters-placeholder-title": "এতিয়ালৈকে কোনো ছেকনী সাঁচি থোৱা নাই",
        "rcfilters-quickfilters-placeholder-description": "আপোনাৰ ছেকনীৰ ছেটিংছ সাঁচি থ'বলৈ আৰু পাছত সেয়া ব্যৱহাৰ কৰিবলৈ তলত থকা সক্ৰিয় পৰিস্ৰাৱক ক্ষেত্ৰৰ বুক্‌মাৰ্ক চিহ্নটো ক্লিক কৰক।",
        "rcfilters-savedqueries-defaultlabel": "সঞ্চিত পৰিস্ৰাৱক",
+       "rcfilters-savedqueries-remove": "মচি পেলাওক",
        "rcfilters-show-new-changes": "নতুন সালসলনিবোৰ চাওক",
        "rcfilters-search-placeholder": "পৰিৱৰ্তনসমূহ ছেকক (ছেকনীৰ নামৰ বাবে মেন্যু বা সন্ধান ব্যৱহাৰ কৰক)",
        "rcfilters-highlightbutton-title": "ফলাফলসমূহ উজ্জ্বল কৰক",
index e3b3172..4f4aa01 100644 (file)
        "resetpass-submit-loggedin": "Camudar la contraseña",
        "resetpass-submit-cancel": "Encaboxar",
        "resetpass-wrong-oldpass": "Contraseña temporal o actual inválida.\nSeique yá camudaras la contraseña o que pidieras una nueva contraseña temporal.",
-       "resetpass-recycled": "Por favor, cambie la so contraseña por otra distinta de la actual.",
+       "resetpass-recycled": "Por favor, cambia la contraseña por otra distinta de la actual.",
        "resetpass-temp-emailed": "Anició sesión con un códigu temporal unviáu per corréu electrónicu.\nPa completar l'aniciu de sesión, tien de definir una nueva contraseña equí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "resetpass-abort-generic": "Una estensión encaboxó'l cambiu de la contraseña.",
        "resetpass-expired": "La so contraseña caducó. Defina una nueva contraseña p'aniciar sesión.",
-       "resetpass-expired-soft": "La contraseña caducó y precisa reaniciase. Escueye agora una contraseña nueva, o pulsia «{{int:authprovider-resetpass-skip-label}}» pa reaniciala sero.",
-       "resetpass-validity-soft": "La contraseña nun ye válida: $1\n\nEscueye agora una contraseña nueva, o pulsia «{{int:authprovider-resetpass-skip-label}}» pa reaniciala sero.",
+       "resetpass-expired-soft": "La contraseña caducó y precisa cambiase. Escueye agora una contraseña nueva, o pulsia «{{int:authprovider-resetpass-skip-label}}» pa cambiala sero.",
+       "resetpass-validity-soft": "La contraseña nun ye válida: $1\n\nEscueye agora una contraseña nueva, o pulsia «{{int:authprovider-resetpass-skip-label}}» pa cambiala sero.",
        "passwordreset": "Reaniciar contraseña",
        "passwordreset-text-one": "Complete esti formulariu pa reaniciar la contraseña.",
        "passwordreset-text-many": "{{PLURAL:$1|Rellene unu de los campos pa recibir una contraseña temporal per corréu.}}",
        "rcfilters-other-review-tools": "Otres ferramientes de revisión",
        "rcfilters-group-results-by-page": "Agrupar resultancies per páxina",
        "rcfilters-activefilters": "Filtros activos",
+       "rcfilters-activefilters-hide": "Tapecer",
+       "rcfilters-activefilters-show": "Amosar",
        "rcfilters-advancedfilters": "Filtros avanzaos",
        "rcfilters-limit-title": "Resultancies qu'amosar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cambiu|$1 cambios}}, $2",
index 9244234..e041164 100644 (file)
        "resetpass-abort-generic": "Зьмяненьне паролю было скасаванае пашырэньнем.",
        "resetpass-expired": "Тэрмін дзеяньня вашага паролю скончыўся. Калі ласка, пазначце новы пароль для ўваходу ў сыстэму.",
        "resetpass-expired-soft": "Тэрмін дзеяньня вашага паролю скончыўся і ён патрабуе замены. Калі ласка, абярыце новы пароль цяпер або націсьніце «{{int:authprovider-resetpass-skip-label}}», каб зьмяніць яго пазьней.",
-       "resetpass-validity-soft": "Ваш пароль зьяўляецца некарэктным: $1\n\nКалі ласка, абярыце зараз новы пароль або націсьніце «{{int:authprovider-resetpass-skip-label}}», каб скінуць яго пазьней.",
+       "resetpass-validity-soft": "Ваш пароль зьяўляецца некарэктным: $1\n\nКалі ласка, абярыце цяпер новы пароль або націсьніце «{{int:authprovider-resetpass-skip-label}}», каб зьмяніць яго пазьней.",
        "passwordreset": "Ачыстка паролю",
        "passwordreset-text-one": "Запоўніце гэтую форму, каб атрымаць часовы пароль электроннай поштай.",
        "passwordreset-text-many": "{{PLURAL:$1|Запоўніце адно з палёў, каб атрымаць часовы пароль праз электронную пошту.}}",
        "rcfilters-other-review-tools": "Іншыя інструмэнты праверкі",
        "rcfilters-group-results-by-page": "Групаваць вынікі паводле старонак",
        "rcfilters-activefilters": "Актыўныя фільтры",
+       "rcfilters-activefilters-hide": "Схаваць",
+       "rcfilters-activefilters-show": "Паказаць",
        "rcfilters-advancedfilters": "Пашыраныя фільтры",
        "rcfilters-limit-title": "Паказаць вынікаў",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}, $2",
        "filetype-banned": "Гэты тып файлу забаронены.",
        "verification-error": "Гэты файл не прайшоў праверку.",
        "hookaborted": "Прапанаваная вамі зьмена была адхіленая пашырэньнем.",
-       "illegal-filename": "Недазволеная назва файла.",
-       "overwrite": "Замена існуючага файла забароненая.",
+       "illegal-filename": "Недазволеная назва файлу.",
+       "overwrite": "Замена існага файлу забароненая.",
        "unknown-error": "Узьнікла невядомая памылка.",
        "tmp-create-error": "Немагчыма стварыць часовы файл.",
-       "tmp-write-error": "Памылка запісу часовага файла.",
+       "tmp-write-error": "Памылка запісу часовага файлу.",
        "large-file": "Рэкамэндаваны памер файлаў — ня болей $1;\nпамер гэтага файла — $2.",
        "largefileserver": "Памер гэтага файла перавышае максымальна дазволены.",
        "emptyfile": "Загружаны файл, здаецца, пусты. Магчыма гэты адбылося з-за памылкі ў назьве файла.\nУдакладніце, ці Вы сапраўды жадаеце загрузіць гэты файл.",
index baabf18..503f7ec 100644 (file)
        "rcfilters-other-review-tools": "অন্যান্য পর্যালোচনা সরঞ্জাম",
        "rcfilters-group-results-by-page": "পাতা অনুযায়ী দলের ফলাফল",
        "rcfilters-activefilters": "সক্রিয় ছাঁকনিসমূহ",
+       "rcfilters-activefilters-hide": "লুকান",
+       "rcfilters-activefilters-show": "দেখান",
        "rcfilters-advancedfilters": "উন্নত ছাঁকনি",
        "rcfilters-limit-title": "যেসব ফলাফল দেখাবে",
        "rcfilters-limit-and-date-label": "$1টি {{PLURAL:$1|পরিবর্তন}}, $2",
index 3c31bf0..6800d66 100644 (file)
        "moredotdotdot": "Lainna...",
        "morenotlisted": "Daftar on mungkin inda singkop",
        "mypage": "Alaman",
-       "mytalk": "Dokon",
+       "mytalk": "Obar",
        "anontalk": "Obar",
        "navigation": "Navigasi",
        "and": "&#32;dot",
        "create-local": "Baen deskripsi lokal",
        "delete": "Apus",
        "newpage": "Alaman baru",
-       "talkpagelinktext": "Dokon",
+       "talkpagelinktext": "obar",
        "personaltools": "Alat pribadi",
        "talk": "Marpokat",
        "views": "Sise",
        "rcshowhidemine-show": "Patidaon",
        "rcshowhidemine-hide": "Bunion",
        "rclinks": "Patidaon sude $1 parubaan $2 ari",
-       "diff": "diff",
-       "hist": "hist",
+       "diff": "beda",
+       "hist": "versi",
        "hide": "Bunion",
        "show": "Alaman pamake",
        "minoreditletter": "m",
        "listgrouprights-members": "(daftar anggota)",
        "emailuser": "Email ni pamake on",
        "usermessage-editor": "Tona ni sistem",
-       "watchlist": "Pamataan",
-       "mywatchlist": "Pamatai",
+       "watchlist": "Daftar Pamataan",
+       "mywatchlist": "Daftar pamataan",
        "watchlistfor2": "Tu $1 $2",
        "watch": "Pamatai",
        "unwatch": "Inda ipamatai",
        "sp-contributions-blocklog": "Log blokir",
        "sp-contributions-uploads": "Unggah",
        "sp-contributions-logs": "Log",
-       "sp-contributions-talk": "Dokon",
+       "sp-contributions-talk": "obar",
        "sp-contributions-search": "Jalaki kontribusi",
        "sp-contributions-username": "Alama IP Pangguna",
        "sp-contributions-toponly": "Umna patidaon editan revisi parpudi",
index fdadfc5..5dac858 100644 (file)
        "resetpass-submit-loggedin": "Canvia la contrasenya",
        "resetpass-submit-cancel": "Cancel·la",
        "resetpass-wrong-oldpass": "Contrasenya actual o temporal no vàlida.\nDeveu haver canviat la vostra contrasenya o demanat una nova contrasenya temporal.",
-       "resetpass-recycled": "Restabliu la contrasenya amb un text diferent que el de la contrasenya actual.",
+       "resetpass-recycled": "Canvieu la contrasenya amb un text diferent que el de la contrasenya actual.",
        "resetpass-temp-emailed": "Heu iniciat una sessió amb un codi temporal enviat per correu.\nPer completar l'inici de sessió heu de definir una contrasenya nova a continuació:",
        "resetpass-temp-password": "Contrasenya temporal:",
        "resetpass-abort-generic": "Una extensió ha interromput el canvi de contrasenya.",
        "resetpass-expired": "La contrasenya ha vençut. Definiu una contrasenya nova per iniciar la sessió.",
-       "resetpass-expired-soft": "La contrasenya ha vençut i cal restablir-la. Trieu una contrasenya nova ara, o feu clic a «{{int:authprovider-resetpass-skip-label}}» per a restablir-la més endavant.",
-       "resetpass-validity-soft": "La contrasenya no és vàlida: $1\n\nTrieu una nova contrasenya ara o cliqueu \"{{int:authprovider-resetpass-skip-label}}\" per a restablir-la més endavant.",
+       "resetpass-expired-soft": "La contrasenya ha vençut i cal canviar-la. Trieu una contrasenya nova ara, o feu clic a «{{int:authprovider-resetpass-skip-label}}» per a canviar-la més endavant.",
+       "resetpass-validity-soft": "La contrasenya no és vàlida: $1\n\nTrieu una nova contrasenya ara o cliqueu \"{{int:authprovider-resetpass-skip-label}}\" per a canviar-la més endavant.",
        "passwordreset": "Restablir contrasenya",
        "passwordreset-text-one": "Cal completar aquest formulari per reiniciar la contrasenya",
        "passwordreset-text-many": "{{PLURAL:$1|Ompliu un dels camps per a rebre una contrasenya temporal al vostre correu electrònic.}}",
        "rcfilters-other-review-tools": "Altres eines de supervisió",
        "rcfilters-group-results-by-page": "Agrupa els resultats per pàgina",
        "rcfilters-activefilters": "Filtres actius",
+       "rcfilters-activefilters-hide": "Amaga",
+       "rcfilters-activefilters-show": "Mostra",
        "rcfilters-advancedfilters": "Filtres avançats",
        "rcfilters-limit-title": "Resultats a mostrar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|canvi|canvis}}, $2",
        "rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.",
        "rcfilters-filterlist-title": "Filtres",
        "rcfilters-filterlist-whatsthis": "Com funciona això?",
-       "rcfilters-filterlist-feedbacklink": "Comenta'ns què et semblen aquestes (noves) eines per filtrar",
+       "rcfilters-filterlist-feedbacklink": "Comenteu-nos què us semblen aquestes eines de filtratge",
        "rcfilters-highlightbutton-title": "Ressalta els resultats",
        "rcfilters-highlightmenu-title": "Selecciona un color",
        "rcfilters-highlightmenu-help": "Seleccioneu un color per ressaltar la propietat",
        "rcfilters-filtergroup-reviewstatus": "Estat de revisió",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "No patrullat",
        "rcfilters-filter-reviewstatus-manual-label": "Patrullat manualment",
+       "rcfilters-filter-reviewstatus-auto-label": "Autopatrullat",
        "rcfilters-filtergroup-significance": "Significació",
        "rcfilters-filter-minor-label": "Modificacions menors",
        "rcfilters-filter-minor-description": "Modificacions que l'autor va etiquetar com a menors.",
        "rcfilters-watchlist-edit-watchlist-button": "Editeu la vostra llista de pàgines seguides",
        "rcfilters-watchlist-showupdated": "Els canvis fets en pàgines que no heu visitat des que s'efectuaren apareixen en <strong>negreta</strong> amb un punt sòlid al costat.",
        "rcfilters-preference-label": "Amaga la versió millorada de Canvis recents",
+       "rcfilters-filter-showlinkedfrom-label": "Mostra els canvis en les pàgines enllaçades des de",
+       "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pàgines enllaçades des de</strong> la pàgina seleccionada",
        "rcfilters-filter-showlinkedto-label": "Mostra els canvis a les pàgines que enllacin a",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Pàgines que enllacen a</strong> la pàgina seleccionada",
        "rcfilters-target-page-placeholder": "Escriviu el nom d’una pàgina (o d’una categoria)",
        "dellogpage": "Registre de supressions",
        "dellogpagetext": "Davall hi ha una llista dels esborraments més recents.",
        "deletionlog": "registre de supressions",
+       "log-name-create": "Registre de creació de pàgines",
        "reverted": "Invertit amb una revisió anterior",
        "deletecomment": "Motiu:",
        "deleteotherreason": "Motiu diferent o addicional:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2)",
        "tag-mw-contentmodelchange": "canvi de model de contingut",
        "tag-mw-new-redirect": "Redirecció nova",
+       "tag-mw-removed-redirect": "Redirecció suprimida",
+       "tag-mw-changed-redirect-target": "La destinació de la redirecció ha canviat",
        "tag-mw-blank": "Buidament",
+       "tag-mw-blank-description": "Modificacions que blanquegen una pàgina",
        "tag-mw-replace": "Substitució",
+       "tag-mw-undo": "Desfés",
        "tags-title": "Etiquetes",
        "tags-intro": "Aquesta pàgina llista les etiquetes amb què el programari pot marcar una modificació, i el seu significat.",
        "tags-tag": "Nom de l'etiqueta",
        "compare-title-not-exists": "El títol que heu especificat no existeix.",
        "compare-revision-not-exists": "La revisió que heu especificat no existeix.",
        "diff-form": "Diferències",
+       "diff-form-oldid": "ID de la revisió antiga (opcional)",
        "diff-form-submit": "Mostra les diferències",
        "permanentlink": "Enllaç permanent",
        "permanentlink-revid": "ID de la revisó",
index b703394..0f2f3fc 100644 (file)
        "dellogpage": "ДӀадаьхнарш долу тéптар",
        "dellogpagetext": "Лахахь гойтуш ю тӀаьххьара дӀаяьхнарш.",
        "deletionlog": "дӀадаьхнарш долу тéптар",
+       "log-name-create": "АгӀонаш кхолларан тептар",
+       "log-description-create": "Лахахь гойтуш ю тӀаьххьара кхоьллина агӀонаш.",
+       "logentry-create-create": "$1 {{GENDER:$2|кхоьллина}} $3 агӀо",
        "deletecomment": "Бахьана:",
        "deleteotherreason": "Кхин бахьана/тӀетохар:",
        "deletereasonotherlist": "Кхин бахьана",
index 8cb2b8f..ef417f5 100644 (file)
        "special-characters-group-khmer": "خمێری",
        "mw-widgets-usersmultiselect-placeholder": "زیادکردن...",
        "log-action-filter-block": "جۆری بلۆک:",
+       "log-action-filter-contentmodel": "جۆری گۆڕینی مۆدێلی ناوەڕۆک:",
        "log-action-filter-all": "ھەموو",
        "log-action-filter-upload-upload": "بارکردنی نوێ",
        "authmanager-email-label": "ئیمەیڵ"
index 90b9c05..4997046 100644 (file)
        "rcfilters-other-review-tools": "Další kontrolní nástroje",
        "rcfilters-group-results-by-page": "Seskupit výsledky podle stránky",
        "rcfilters-activefilters": "Aktivní filtry",
+       "rcfilters-activefilters-hide": "Skrýt",
+       "rcfilters-activefilters-show": "Zobrazit",
        "rcfilters-advancedfilters": "Pokročilé filtry",
        "rcfilters-limit-title": "Zobrazené výsledky",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|Jedna změna|$1 změny|$1 změn}}, $2",
        "rcfilters-savedqueries-rename": "Přejmenovat",
        "rcfilters-savedqueries-setdefault": "Nastavit jako výchozí",
        "rcfilters-savedqueries-unsetdefault": "Nemít jako výchozí",
-       "rcfilters-savedqueries-remove": "Odstranit",
+       "rcfilters-savedqueries-remove": "Smazat",
        "rcfilters-savedqueries-new-name-label": "Název",
        "rcfilters-savedqueries-new-name-placeholder": "Popište účel filtru",
        "rcfilters-savedqueries-apply-label": "Vytvořit filtr",
        "rcfilters-empty-filter": "Žádné aktivní filtry. Zobrazeny jsou všechny příspěvky.",
        "rcfilters-filterlist-title": "Filtry",
        "rcfilters-filterlist-whatsthis": "Jak to funguje?",
-       "rcfilters-filterlist-feedbacklink": "Řekněte nám, co si myslíte o těchto (nových) filtrech",
+       "rcfilters-filterlist-feedbacklink": "Sdělte nám svůj názor na tyto filtrovací nástroje",
        "rcfilters-highlightbutton-title": "Zvýraznit výsledky",
        "rcfilters-highlightmenu-title": "Vybrat barvu",
        "rcfilters-highlightmenu-help": "Vyberte barvu pro zvýraznění této vlastnosti",
        "rcfilters-watchlist-showupdated": "Změny stránek, které jste od provedení změn nenavštívili, jsou zobrazeny <strong>tučně</strong> s vyplněnou značkou.",
        "rcfilters-preference-label": "Skrýt vylepšenou verzi posledních změn",
        "rcfilters-preference-help": "Zruší novou podobu rozhraní zavedenou v roce 2017 a všechny nástroje přidané od té doby.",
+       "rcfilters-watchlist-preference-label": "Skrýt vylepšenou verzi sledovaných stránek",
+       "rcfilters-watchlist-preference-help": "Zruší novou podobu rozhraní zavedenou v roce 2017 a všechny nástroje přidané od té doby.",
        "rcfilters-filter-showlinkedfrom-label": "Zobrazit změny stránek, na které se odkazuje",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Stránky odkazované z</strong> vybrané stránky",
        "rcfilters-filter-showlinkedto-label": "Zobrazit změny stránek, které sem odkazují",
index 78c6068..cab15ae 100644 (file)
        "rcfilters-other-review-tools": "Andere Überprüfungswerkzeuge",
        "rcfilters-group-results-by-page": "Ergebnisse nach Seite gruppieren",
        "rcfilters-activefilters": "Aktive Filter",
+       "rcfilters-activefilters-hide": "Ausblenden",
+       "rcfilters-activefilters-show": "Anzeigen",
        "rcfilters-advancedfilters": "Erweiterte Filter",
        "rcfilters-limit-title": "Anzuzeigende Ergebnisse",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|Eine Änderung|$1 Änderungen}}, $2",
index 5265f3a..fa7a604 100644 (file)
        "rcfilters-other-review-tools": "Άλλα εργαλεία ελέγχου",
        "rcfilters-group-results-by-page": "Ομαδοποίηση αποτελεσμάτων ανά σελίδα",
        "rcfilters-activefilters": "Ενεργά φίλτρα",
+       "rcfilters-activefilters-hide": "Απόκρυψη",
+       "rcfilters-activefilters-show": "Εμφάνιση",
        "rcfilters-advancedfilters": "Σύνθετα Φίλτρα",
        "rcfilters-limit-title": "Αλλαγές προς εμφάνιση",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|αλλαγή|αλλαγές}}, $2",
        "rcfilters-savedqueries-rename": "Μετονομασία",
        "rcfilters-savedqueries-setdefault": "Ορισμός ως προεπιλογή",
        "rcfilters-savedqueries-unsetdefault": "Αφαίρεση από προεπιλογή",
-       "rcfilters-savedqueries-remove": "Î\91Ï\86αίÏ\81εÏ\83η",
+       "rcfilters-savedqueries-remove": "Î\94ιαγÏ\81αÏ\86ή",
        "rcfilters-savedqueries-new-name-label": "Όνομα",
        "rcfilters-savedqueries-new-name-placeholder": "Περιγράψτε το σκοπό του φίλτρου",
        "rcfilters-savedqueries-apply-label": "Δημιουργία φίλτρου",
        "rcfilters-empty-filter": "Χωρίς ενεργά φίλτρα. Εμφανίζονται όλες οι συνεισφορές.",
        "rcfilters-filterlist-title": "Φίλτρα",
        "rcfilters-filterlist-whatsthis": "Πως λειτουργούν αυτά;",
-       "rcfilters-filterlist-feedbacklink": "Πείτε μας τι σκέφτεστε για αυτά τα (νέα) εργαλεία φιλτραρίσματος",
+       "rcfilters-filterlist-feedbacklink": "Πείτε μας τι σκέφτεστε για αυτά τα εργαλεία φιλτραρίσματος",
        "rcfilters-highlightbutton-title": "Επισήμανση αποτελεσμάτων",
        "rcfilters-highlightmenu-title": "Επιλέξτε ένα χρώμα",
        "rcfilters-highlightmenu-help": "Επιλέξτε ένα χρώμα για να επισημάνετε αυτή την ιδιότητα",
        "confirm-unwatch-top": "Κατάργηση αυτής της σελίδας από τη λίστα παρακολούθησης σας;",
        "confirm-rollback-button": "Εντάξει",
        "confirm-rollback-top": "Επαναφέρετε τις επεξεργασίες σε αυτή τη σελίδα;",
+       "semicolon-separator": "&#32;",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← προηγούμενη σελίδα",
        "imgmultipagenext": "επόμενη σελίδα →",
index a4655a1..139140f 100644 (file)
        "rcfilters-other-review-tools": "Other review tools",
        "rcfilters-group-results-by-page": "Group results by page",
        "rcfilters-activefilters": "Active filters",
+       "rcfilters-activefilters-hide": "Hide",
+       "rcfilters-activefilters-show": "Show",
+       "rcfilters-activefilters-hide-tooltip": "Hide Active Filters area",
+       "rcfilters-activefilters-show-tooltip": "Show Active Filters area",
        "rcfilters-advancedfilters": "Advanced filters",
        "rcfilters-limit-title": "Results to show",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|change|changes}}, $2",
index 6d77b10..bf4dc22 100644 (file)
        "resetpass-temp-password": "Provizora pasvorto:",
        "resetpass-abort-generic": "Ŝanĝo de pasvorto estis nuligita per kromprogramo.",
        "resetpass-expired": "Via pasvorto eksvalidiĝis. Bonvolu difini novan pasvorton por la alsalutado.",
-       "resetpass-expired-soft": "Via pasvorto eksvalidiĝis kaj devas esti rekomencigata. Bonvolu nun elekti novan pasvorton, aŭ klaki \"{{int:authprovider-resetpass-skip-label}}\" por rekomencigi ĝin pli malfrue.",
+       "resetpass-expired-soft": "Via pasvorto eksvalidiĝis kaj devas esti ŝanĝata. Bonvolu nun elekti novan pasvorton, aŭ klaki \"{{int:authprovider-resetpass-skip-label}}\" por ŝanĝi ĝin pli malfrue.",
        "resetpass-validity-soft": "Via pasvorto ne estas valida: $1\n\nBonvolu elekti novan pasvorton nun, aŭ klaku \"{{int:authprovider-resetpass-skip-label}}\", por rekomencigi ĝin pli malfrue.",
        "passwordreset": "Restarigo de pasvorto",
        "passwordreset-text-one": "Plenigu ĉi tiun formularon por renovigi vian pasvorton.",
index 376baca..cc44a70 100644 (file)
        "resetpass-submit-loggedin": "Cambiar contraseña",
        "resetpass-submit-cancel": "Cancelar",
        "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado tu contraseña o que hayas pedido una nueva contraseña temporal.",
-       "resetpass-recycled": "Restablece tu contraseña a algo distinto de tu contraseña actual.",
+       "resetpass-recycled": "Cambia tu contraseña a algo distinto de tu contraseña actual.",
        "resetpass-temp-emailed": "Has iniciado sesión con una contraseña temporal enviada por correo electrónico.\nPara continuar, debes establecer una nueva contraseña aquí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "resetpass-abort-generic": "Una extensión ha cancelado el cambio de la contraseña.",
        "resetpass-expired": "Tu contraseña ha caducado. Por favor, establece una nueva contraseña para iniciar sesión.",
-       "resetpass-expired-soft": "Tu contraseña ha caducado, por lo que debes restablecerla. Cámbiala ahora por una nueva, o haz clic en \"{{int:authprovider-resetpass-skip-label}}\" para restablecerla más adelante.",
-       "resetpass-validity-soft": "Tu contraseña no es válida: $1\n\nCámbiala ahora por una nueva, o haz clic en \"{{int:authprovider-resetpass-skip-label}}\" para cambiarla más tarde.",
+       "resetpass-expired-soft": "Tu contraseña ha caducado, por lo que debes cambiarla. Elige ahora una contraseña nueva o pulsa en «{{int:authprovider-resetpass-skip-label}}» para cambiarla más tarde.",
+       "resetpass-validity-soft": "La contraseña no es válida: $1\n\nCámbiala ahora por una nueva, o bien, pulsa en «{{int:authprovider-resetpass-skip-label}}» para cambiarla más tarde.",
        "passwordreset": "Restablecer contraseña",
        "passwordreset-text-one": "Completa este formulario para recibir una contraseña temporal por correo electrónico.",
        "passwordreset-text-many": "{{PLURAL:$1|Rellena uno de los campos para recibir una contraseña temporal por correo electrónico.}}",
        "rcfilters-other-review-tools": "Otras herramientas de revisión",
        "rcfilters-group-results-by-page": "Agrupar resultados por página",
        "rcfilters-activefilters": "Filtros activos",
+       "rcfilters-activefilters-hide": "Ocultar",
+       "rcfilters-activefilters-show": "Mostrar",
        "rcfilters-advancedfilters": "Filtros avanzados",
        "rcfilters-limit-title": "Resultados que mostrar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cambio|cambios}}, $2",
index db373b5..af53e14 100644 (file)
@@ -31,7 +31,8 @@
                        "Osoitz",
                        "Mikel Ibaiba",
                        "MarcoAurelio",
-                       "Iñaki LL"
+                       "Iñaki LL",
+                       "Amaia"
                ]
        },
        "tog-underline": "Azpimarratu loturak:",
        "cascadeprotected": "Orri hau aldaketen aurka babestua dago, barneratuta dagoelako «kaskadako babesa» aukerarekin babestu {{PLURAL:$1|duten orri honetan|dituzten orri hauetan}}:\n$2",
        "namespaceprotected": "Ez daukazu '''$1''' izen-tarteko orrialdeak aldatzeko baimenik.",
        "customcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
+       "customjsonprotected": "Ez duzu baimenik JSON orrialde hau editatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "customjsprotected": "Ez duzu baimenik JavaScript orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "mycustomcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko.",
        "mycustomjsonprotected": "Ez duzu baimenik JSON orrialde hau aldatzeko.",
        "wrongpasswordempty": "Pasahitza hutsik dago. Saiatu berriz.",
        "passwordtooshort": "Pasahitzek {{PLURAL:$1|karaktere 1|$1 karaktere}} gutxienez eduki behar dituzte.",
        "passwordtoolong": "Pasahitzak ezin dira {{PLURAL:$1|karaktere bat|$1 karaktere}} baino luzeagoak izan.",
-       "passwordtoopopular": "Ezin dira arrunki aukeratutako pasahitzak erabili. Aukera ezazu pasahitz originalago bat, mesedez.",
+       "passwordtoopopular": "Ezin dira pasahitz ohikoenak erabili. Aukera ezazu asmatzeko zailagoa den pasahitz bat.",
        "password-name-match": "Zure pasahitza ezin da zure erabiltzaile-izen bera izan.",
        "password-login-forbidden": "Erabiltzaile izen eta pasahitz hau erabiltzea debekaturik dago.",
        "mailmypassword": "Pasahitza berrezarri",
        "passwordremindertitle": "Pasahitzaren gogorarazpena {{SITENAME}}(e)tik",
-       "passwordremindertext": "Norbaitek (ziurrenik zuk, $1 IP helbidetik) pasahitz berri bat\neskatu du {{SITENAME}}(r)ako ($4). Momentu honetan erabiltzeko \"$2\" lankidearentzat\npasahitza sortu da eta \"$3\"(r)a aldatu da. Hau zuk eginiko saiakuntza bazen,\norain saioa hasi beharko duzu zure pasahitza berria aukeratzeko. Zure aldi baterako pasahitzak {{PLURAL:$5|egun baterako|$5 egunetarako}} baino ez du balio izango.\n\nBeste norbaitek eskari hau egin bazuen, edo zure pasahitza gogoratu baduzu,\neta ez baduzu aldatu nahi, mezu honetan irakurritakoari jaramonik ez egin\neta aurretik zenuen pasahitza erabiltzen jarrai ezazu.",
+       "passwordremindertext": "Norbaitek ($1 IP helbidetik) pasahitz berri bat\neskatu du {{SITENAME}}(r)ako ($4). Behin-behineko pasahitz berria sortu da \"$2\" erabiltzailearentzat eta \"$3\"(r)a aldatu da. Zuk eginiko saiakera balitz, jarraian\nsaioa hasi beharko duzu zure pasahitz berria aukeratzeko. Zure behin-behineko pasahitza {{PLURAL:$5|egun baterako|$5 egunetarako}} iraungiko da.\n\nEskari hau beste norbaitek egin izan balu, edo zure pasahitza gogoratu baduzu eta ez baduzu aldatu nahi, ez egin jaramonik mezu honetan irakurritakoari eta aurretik zenuen pasahitza erabiltzen jarrai ezazu.",
        "noemail": "Ez dago \"$1\" erabiltzailearen e-posta helbiderik gordeta.",
        "noemailcreate": "Balioduna den e-posta helbidea eman behar duzu",
        "passwordsent": "Pasahitz berria bidali da \"$1\" erabiltzailearen e-posta helbidera.\nMesedez, saioa hasi jasotakoan.",
        "botpasswords-existing": "Dauden bot-en pasahitzak",
        "botpasswords-createnew": "Sortu errobot pasaitza berri bat",
        "botpasswords-editexisting": "Aldatu lehendik dagoen errobot pasaitza",
+       "botpasswords-label-needsreset": "(pasahitza berrezarri behar da)",
        "botpasswords-label-appid": "Bot izena:",
        "botpasswords-label-create": "Sortu",
        "botpasswords-label-update": "Eguneratu",
        "botpasswords-restriction-failed": "Errobot pasahitza murrizketek logina saihesten dute.",
        "botpasswords-invalid-name": "Zehaztutako erabiltzaileak ez du bot pasahitzaren ($1) bereizlea.",
        "botpasswords-not-exist": "$1 erabiltzaileak ez du $2 izeneko pasahitza.",
+       "botpasswords-needs-reset": "\"$1\"{{GENDER:$1|erabiltzailearen}} \"$2\" robotaren pasahitza berrezarri behar da.",
        "resetpass_forbidden": "Ezin dira pasahitzak aldatu",
        "resetpass_forbidden-reason": "Ezin dira pasahitzak aldatu: $1",
        "resetpass-no-info": "Orrialde honetara zuzenean sartzeko izena eman behar duzu.",
        "resetpass-submit-loggedin": "Pasahitza aldatu",
        "resetpass-submit-cancel": "Utzi",
        "resetpass-wrong-oldpass": "Behin-behineko edo oraintxuko pasahitza ez da baliagarria.\nAgian dagoeneko aldatu duzu zure pasahitza edo behin-behineko pasahitza bat eskatu duzu.",
-       "resetpass-recycled": "Mesedez berritu zure pasahitza.",
+       "resetpass-recycled": "Mesedez aldatu zure pasahitza.",
        "resetpass-temp-emailed": "Aldi baterako posta elektronikoko kodea erabiliz saioa hasi duzu. \nSaio hastea amaitzeko, hemen pasahitz berria ezarri behar duzu:",
        "resetpass-temp-password": "Behin-behineko pasahitza:",
        "resetpass-abort-generic": "Estentsio batek pasahitza aldatzea ekidin du.",
        "resetpass-expired": "Zure pasahitza iraungitu da. Sartzeko, pasahitz berria ezarri, mesedez.",
-       "resetpass-expired-soft": "Zure pasahitza iraungi da eta berrezarri egin behar da. Aukeratu pasahitz berria orain edo egin klik \"{{int:authprovider-resetpass-skip-label}}\"-n geroago berrarazteko.",
-       "resetpass-validity-soft": "Zure pasahitzak ez du balio: $1\n\nAukeratu beste pasahitza berri bat orain mesedez, edo \"{{int:authprovider-resetpass-skip-label}}\" klikatu geroago berrezartzeko.",
+       "resetpass-expired-soft": "Zure pasahitza iraungi egin da eta aldatu beharra dago. Mesedez, aukeratu orain pasahitz berria edo egin klik \"{{int:authprovider-resetpass-skip-label}}\"-n geroago aldatzeko.",
+       "resetpass-validity-soft": "Zure pasahitzak ez du balio: $1\n\nMesedez, aukeratu orain pasahitz berri bat, edo \"{{int:authprovider-resetpass-skip-label}}\" klikatu geroago berrezartzeko.",
        "passwordreset": "Pasahitzaren berrezarpena",
        "passwordreset-text-one": "Bete formulario hau zure pasahitza berrezartzeko.",
        "passwordreset-text-many": "{{PLURAL:$1|Sartu datuetako bat zure pasahitza berrezartzeko.}}",
        "subject-preview": "Gaiaren aurrebista:",
        "previewerrortext": "Errore bat gertatu da aldaketak aurrezten saiatzean.",
        "blockedtitle": "Erabiltzailea blokeatuta dago",
-       "blockedtext": "'''Zure erabiltzaile izena edo IP helbidea blokeaturik dago.'''\n\n$1 administratzaileak ezarri du blokeoa.\nEmandako arrazoia hau da: ''$2''.\n\n* Blokeoaren hasiera: $8\n* Blokeoaren bukaera: $6\n* Blokeatua: $7\n\nBlokeoari buruz eztabaidatzeko, jo ezazu $1 administratzailearengana edo beste [[{{MediaWiki:Grouppage-sysop}}|administratzaile]] batengana.\n«Bidali mezu elektronikoa lankide honi» tresna erabili ahal izateko, ezinbestekoa da zure [[Special:Preferences|hobespenetan]] baliozkoa den helbide elektroniko bat emanda izatea, eta tresna hori erabiltzeko aukera zuri blokeatu ez izana.\nOrain duzun IP helbidea $3 da, eta blokeoaren zenbakia #$5 da.\nEman itzazu datu hauek guztiak, blokeoari buruzko edozein eskaera egitean.",
-       "autoblockedtext": "Zure IP helbidea automatikoki blokeaturik dago, $1 administratzaileak blokeatutako beste wikilari batek erabili zuelako. Emandako arrazoia hau da:\n\n:''$2''\n\n* Blokeoaren hasiera: $8\n* Blokeoaren bukaera: $6\n* Blokeatua: $7\n\nBlokeoari buruz eztabaidatzeko, jo ezazu $1 administratzailearengana edo beste [[{{MediaWiki:Grouppage-sysop}}|administratzaile]] batengana.\n\n«Bidali mezu elektronikoa lankide honi» tresna erabili ahal izateko, ezinbestekoa da zure [[Special:Preferences|hobespenetan]] baliozkoa den helbide elektroniko bat emanda izatea, eta tresna hori erabiltzeko aukera zuri blokeatu ez izana.\n\nOrain duzun IP helbidea $3 da, eta blokeoaren zenbakia #$5 da.\n\nEman itzazu datu hauek guztiak, blokeoari buruzko edozein eskaera egitean.",
+       "blockedtext": "<strong> Zure erabiltzaile izena edo IP helbidea blokeatuta dago. </strong>\n\nBlokeoa $1-ek ezarri du.\nEmandako arrazoia hau da: ''$2''.\n\n* Blokeoaren hasiera: $8\n* Blokeoaren bukaera: $6\n* Blokeatua: $7\n\nBlokeoari buruz eztabaidatzeko, jo ezazu $1 edo beste [[{{MediaWiki:Grouppage-sysop}}|administratzaile]] batengana.\n\"{{int:emailuser}}\" tresna erabili ahal izateko, ezinbestekoa da zure [[Special:Preferences|hobespenetan]] baliozkoa den helbide elektroniko bat emanda izatea, eta tresna hori erabiltzeko aukera blokeatu ez izana.\nOrain duzun IP helbidea $3 da, eta blokeoaren zenbakia #$5.\nMesedez, eman aipatutako datu hauek guztiak, blokeoari buruzko edozein eskaera egitean.",
+       "autoblockedtext": "Zure IP helbidea automatikoki blokeaturik dago, $1-ek blokeatutako beste erabiltzaile batek erabili zuelako. Emandako arrazoia hau da:\n\n:<em>$2</em>\n\n* Blokeoaren hasiera: $8\n* Blokeoaren bukaera: $6\n* Blokeatua: $7\n\nBlokeoari buruz eztabaidatzeko, jo ezazu $1 edo beste [[{{MediaWiki:Grouppage-sysop}}|administratzaile]] batengana.\n\n\"{{int:emailuser}}\" tresna erabili ahal izateko, ezinbestekoa da zure [[Special:Preferences|hobespenetan]] baliozkoa den helbide elektroniko bat emanda izatea, eta tresna hori erabiltzeko aukera blokeatu ez izana.\n\nOrain duzun IP helbidea $3 da, eta blokeoaren zenbakia #$5.\n\nMesedez, eman itzazu aipatutako datu guztiak, blokeoari buruzko edozein eskaera egitean.",
        "systemblockedtext": "Zure erabiltzaile izena edo IP helbidea MediaWiki-k automatikoki blokeatu du.\nHau da emandako arrazoia:\n\n:<em>$2</em>\n\n*Bloke sarrera: $8\n*Blokearen iraungintzea: $6\n*Blokeo helburua: $7\n\nZure uneko IP helbidea: $3.\nSartu goiko xehetasun guztiak egiten dituzun kontsulta guztietan mesedez.",
        "blockednoreason": "ez da arrazoirik zehaztu",
        "whitelistedittext": "$1 behar duzu orrialdeak aldatu ahal izateko..",
        "blocked-notice-logextract": "Erabiltzaile hau blokeatuta dago une honetan.\nAzken blokeoaren erregistroa ageri da behean, erreferentzia gisa:",
        "clearyourcache": "<strong>Oharra:</strong> Gorde ondoren, zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko.\n* <strong>Firefox / Safari:</strong> <em>Shift</em> tekla sakatu birkargatzeko momentuan, edo <em>Ctrl-Shift-R</em> edo <em>Crtl-F5</em>  sakatu (<em>⌘-R</em> Mac batean)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R </em>  sakatu (<em>⌘-Shift-R</em> Mac batean)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em> tekla sakatu birkargatzeko momentuan, edo <em>Ctrl-F5</em> sakatu\n* <strong>Opera</strong> erabiltzaileek <em>Tresnak → Hobespenak</em> atalera joan eta katxea garbitzeko aukera hautatu",
        "usercssyoucanpreview": "'''Laguntza:''' Zure CSS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
+       "userjsonyoucanpreview": "<strong>Aholkua:</strong> Gorde aurretik, erabili \"{{int:showpreview}}\" botoia zure JSON berria probatzeko.",
        "userjsyoucanpreview": "'''Laguntza:''' Zure JS berria gorde aurretik probatzeko \"{{int:showpreview}}\" botoia erabili.",
        "usercsspreview": "'''Ez ahaztu zure CSS kodea aurreikusten zabiltzala.'''\n'''Oraindik gorde gabe dago!'''",
+       "userjsonpreview": "<strong>Gogoratu zure JSON erabiltzaile konfigurazioa probatzen/aurreikusten ari zarela. \nOraindik ez da gorde!</strong>",
        "userjspreview": "'''Gogoratu zure JavaScript kodea probatu/aurreikusten zabiltzala, oraindik ez da gorde!'''",
        "sitecsspreview": "'''Ez ahaztu zure CSS kodea aurreikusten zabiltzala.'''\n'''Oraindik gorde gabe dago!'''",
+       "sitejsonpreview": "<strong>Gogoratu JSON konfigurazio hau probatzen/aurreikusten baino ez zaudela. \nOraindik ez da gorde!</strong>",
        "sitejspreview": "'''Gogoratu zure JavaScript kodea probatu/aurreikusten zabiltzala'''\n'''Oraindik ez da gorde!'''",
-       "userinvalidconfigtitle": "'''Oharra:''' Ez da \"$1\" itxura existitzen. Kontuan izan .css eta .js fitxategi pertsonalizatuen izenak letra xehez idatzi behar direla; adibidez, {{ns:user}}:Adibide/vector.css, eta ez {{ns:user}}:Adibide/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Oharra:</strong> Ez da \"$1\" itxura existitzen. Kontuan izan .css eta .js fitxategi pertsonalizatuen izenak letra xehez idatzi behar direla; adibidez, {{ns:user}}:Adibide/vector.css, eta ez {{ns:user}}:Adibide/Vector.css.",
        "updated": "(Eguneratua)",
        "note": "'''Oharra:'''",
        "previewnote": "'''Gogoratu hau aurrikuspen bat dela.'''\nZure aldaketak ez dira oraindik gorde!",
        "longpageerror": "'''Errorea: Bidali duzun testuak {{PLURAL:$1|kilobyte 1eko|$1 kilobyteko}} luzera du, eta {{PLURAL:$2|kilobyte 1eko|$2 kilobyteko}} maximoa baino luzeagoa da.'''\nEzin da gorde.",
        "readonlywarning": "<strong>Oharra: Datu-basea blokeatu egin da mantenu lanak burutzeko, beraz ezingo dituzu orain zure aldaketak gorde.</strong>I\nTestua fitxategi baten kopiatu dezakezu, eta beranduago erabiltzeko gorde.\n\nBlokeatu zuen administratzaileak honako azalpena eman zuen: $1",
        "protectedpagewarning": "'''Oharra:  Orri hau blokeatua dago administratzaileek soilik eraldatu ahal dezaten.'''\nAzken erregistroa ondoren ikusgai dago erreferentzia gisa:",
-       "semiprotectedpagewarning": "'''Oharra''': Orrialde hau erregistratutako erabiltzaileek bakarrik aldatzeko babestuta dago.\nErregistroko azken sarrera azpian jartzen da erreferentzia gisa:",
+       "semiprotectedpagewarning": "<strong>Oharra:</strong> Orrialde hau babestuta dago erregistratutako erabiltzaileek bakarrik aldatu ahal izateko.\nErregistroko azken sarrera jarraian ikusgarri dagoena da:",
        "cascadeprotectedwarning": "<strong>Oharra:</strong> Orrialde hau blokeatua izan da eta [[Special:ListGroupRights|baimen zehatzak]] dituzten erabiltzaileek baino ez dute berau aldatzeko ahalmena, honako {{PLURAL:$1|orrialdeko|orrialdeetako}} kaskada-babesean txertatuta dagoelako:",
        "titleprotectedwarning": "'''Oharra: Orrialde hau blokeatuta dago eta bakarrik [[Special:ListGroupRights|erabiltzaile batzuek]] sortu dezakete.'''\nAzken erregistroko sarrera ematen da azpian erreferentzia gisa:",
        "templatesused": "Orri honetan erabiltzen {{PLURAL:$1|den txantiloia|diren txantiloiak}}:",
        "expansion-depth-exceeded-warning": "Espantsio sakonera gainditu duten orrialdeak",
        "parser-unstrip-loop-warning": "Loop unstrip bat aurkitu da",
        "unstrip-depth-warning": "Unstrip errekurtsio limitea gainditu da ($1)",
+       "unstrip-depth-category": "Unstrip depth limitea gainditutako orrialdeak.",
+       "unstrip-size-warning": "Unstrip tamaina limitea gainditua ($1)",
+       "unstrip-size-category": "Unstrip tamaina limitea gainditutako orrialdeak.",
        "converter-manual-rule-error": "Akatsa aurkitu da hizkuntzen eskuszko konbertsio arauan",
        "undo-success": "Aldaketa desegin daiteke.\nMesedez beheko alderaketa egiaztatu, egin nahi duzuna hori dela frogatzeko, eta ondoren azpiko aldaketak gorde, aldaketa desegiten amaitzeko.",
        "undo-failure": "Ezin izan da aldaketa desegin tarteko aldaketekin gatazkak direla-eta.",
        "prefs-watchlist-edits": "Ikuspen zerrendan erakutsi beharreko aldaketa gehienezko kopurua:",
        "prefs-watchlist-edits-max": "Gehenezko zenbakia: 1000",
        "prefs-watchlist-token": "Jarraipen zerrendaren tokena:",
-       "prefs-watchlist-managetokens": "Kudeatu token-ak",
+       "prefs-watchlist-managetokens": "Token-ak kudeatu",
        "prefs-misc": "Denetarik",
        "prefs-resetpass": "Pasahitza aldatu",
        "prefs-changeemail": "Aldatu edo kendu e-mail helbidea",
        "stub-threshold-disabled": "Ezgaitua",
        "recentchangesdays": "Aldaketa berrietan erakutsi beharreko egun kopurua:",
        "recentchangesdays-max": "(gehienez {{PLURAL:$1|egun bat|$1 egun}})",
-       "recentchangescount": "Erakusteko aldaketa kopurua, lehenetsita:",
-       "prefs-help-recentchangescount": "Honek azken aldaketak, orrialdeen historiak eta logak barne-biltzen ditu.",
+       "recentchangescount": "Modu lehenetsian erakutsi beharreko zuzneketa kopurua azken aldaketa, orrialdeen historia eta erregistroetan:",
+       "prefs-help-recentchangescount": "Gehienezko zenbakia: 1000",
        "prefs-help-watchlist-token2": "Hau da zure jarraipen zerrendako web jarioaren giltza sekretua.\nEzagutzen duen orok zure jarraipen zerrenda irakurtzeko aukera izango du, ez partekatu.\n[[Special:ResetTokens|berrezarri dezakezu]].",
+       "prefs-help-tokenmanagement": "Zure jarraipen zerrenda Web bidez ikustea ahalbidetzen dizun ezkutuko kodea ikusi eta berrezarri dezakezu. Kodea ezagutzen duen edonork irakur dezake zure jarraipen zerrenda, beraz ez partekatu.",
        "savedprefs": "Zure hobespenak gorde egin dira.",
        "savedrights": "{{GENDER:$1|$1}} erabiltzailearen taldeak gorde dira.",
        "timezonelegend": "Ordu-eremua:",
        "default": "lehenetsia",
        "prefs-files": "Fitxategiak",
        "prefs-custom-css": "CSS pertsonalizatua",
+       "prefs-custom-json": "JSON pertsonalizatua",
        "prefs-custom-js": "JS pertsonalizatua",
-       "prefs-common-config": "Azal mota guztietan elkarbanatutako CSS/JS:",
+       "prefs-common-config": "CSS/JSON/JavaScript azal guztietarako partekatuak:",
        "prefs-reset-intro": "Orrialde hau erabil dezakezu zure guneko berezko hobespenak berreskuratzeko.\nHau ezin da desegin.",
        "prefs-emailconfirm-label": "E-posta baieztapena:",
        "youremail": "E-posta:",
        "right-editcontentmodel": "Aldatu orri bateko eduki eredua",
        "right-editinterface": "Erabiltzailearen interfazea aldatu",
        "right-editusercss": "Beste lankideen CSS fitxategiak aldatu",
+       "right-edituserjson": "Beste erabiltzaileen JSON fitxategiak aldatu",
        "right-edituserjs": "Beste lankideen JS fitxategiak aldatu",
        "right-editmyusercss": "Aldatu zure CSS fitxategi propioak",
+       "right-editmyuserjson": "Zure erabiltzaile JSON fitxategi propioak aldatu",
        "right-editmyuserjs": "Aldatu zure JavaScript fitxategi propioak",
        "right-viewmywatchlist": "Zure jarraipen zerrenda ikusi",
        "right-editmywatchlist": "Zure jarraipen zerrenda aldatu. Kontuan izan ekintza batzuek orrialdeak gehitu dituztela eskumen hau kenduta ere.",
        "grant-createeditmovepage": "Orrialdeak sortu, aldatu eta mugitu",
        "grant-delete": "Ezabatu orriak, berrikuspenak eta sarrerak",
        "grant-editinterface": "MediaWiki izen eremua eta CSS/JavaScript erabiltzailea aldatu",
-       "grant-editmycssjs": "Zure CSS/JavaScript aldatu",
+       "grant-editmycssjs": "Zure CSS/JSON/JavaScript erabiltzailea aldatu",
        "grant-editmyoptions": "Aldatu zure hobespenak",
        "grant-editmywatchlist": "Zure jarraipen zerrenda aldatu",
        "grant-editpage": "Aldatu dauden orrialdeak",
        "rcfilters-other-review-tools": "Beste berrikusketa tresnak",
        "rcfilters-group-results-by-page": "Talde emaitzak orrika",
        "rcfilters-activefilters": "Iragazki aktiboak",
+       "rcfilters-activefilters-hide": "Ezkutatu",
+       "rcfilters-activefilters-show": "Erakutsi",
        "rcfilters-advancedfilters": "Iragazki aurreratuak",
        "rcfilters-limit-title": "Erakusteko emaitzak",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|aldaketa|aldaketak}}, $2",
        "rcfilters-savedqueries-rename": "Berrizendatu",
        "rcfilters-savedqueries-setdefault": "Lehenetsi",
        "rcfilters-savedqueries-unsetdefault": "Kendu lehenetsi gisa",
-       "rcfilters-savedqueries-remove": "Kendu",
+       "rcfilters-savedqueries-remove": "Ezabatu",
        "rcfilters-savedqueries-new-name-label": "Izena",
        "rcfilters-savedqueries-new-name-placeholder": "Deskribatu filtro honen helburua",
        "rcfilters-savedqueries-apply-label": "Sortu iragazkia",
        "rcfilters-empty-filter": "Filtro aktiborik ez dago. Ekarpen guztiak erakusten.",
        "rcfilters-filterlist-title": "Iragazkiak",
        "rcfilters-filterlist-whatsthis": "Nola erabiltzen da?",
-       "rcfilters-filterlist-feedbacklink": "Esaguzu zer pentsatzen duzun iragazteko tresna hauei buruz (berriak)",
+       "rcfilters-filterlist-feedbacklink": "Esaiguzu zer deritzozun iragazteko tresna hauei buruz",
        "rcfilters-highlightbutton-title": "Nabarmendu emaitzak",
        "rcfilters-highlightmenu-title": "Hautatu kolore bat",
        "rcfilters-highlightmenu-help": "Aukeratu kolore bat propietate hau nabarmentzeko",
        "rcfilters-filter-humans-label": "Gizaki (ez bot)",
        "rcfilters-filter-humans-description": "Gizaki editoreek egindako aldaketak.",
        "rcfilters-filtergroup-reviewstatus": "Berrikuspenaren egoera",
+       "rcfilters-filter-reviewstatus-unpatrolled-description": "Ez eskuz ezta automatikoki berrikusitako bezala markatutako aldaketak.",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "Patruilagabea",
+       "rcfilters-filter-reviewstatus-manual-description": "Berrikusitako bezala eskuz markatutako aldaketak",
        "rcfilters-filter-reviewstatus-manual-label": "Eskuz patruilatuak",
+       "rcfilters-filter-reviewstatus-auto-description": "Erabiltzaile aurreratuek aldatuak, zeintzuen lanak automatikoki markatzen diren berrikusitako bezala.",
+       "rcfilters-filter-reviewstatus-auto-label": "Autoberrikusia",
        "rcfilters-filtergroup-significance": "Munta",
        "rcfilters-filter-minor-label": "Aldaketa txikiak",
        "rcfilters-filter-minor-description": "Egileak sailkatutako aldaketa txikiak.",
        "rcfilters-watchlist-showupdated": "Azkenengo aldaketak egin zirenetik bisitatu ez dituzun orrietan eman diren aldaketak <strong>lodi estiloan</strong> daude, markatzaile sendoekin.",
        "rcfilters-preference-label": "Azkenengo Aldaketen hobetutako bertsioa ezkutatu",
        "rcfilters-preference-help": "2017 interfazearen birmoldaketa eta geroztik gehitu diren tresna guztietara bueltatzen da.",
+       "rcfilters-watchlist-preference-label": "Ezkutatu jarraipen zerrendaren bertsio hobetua",
+       "rcfilters-watchlist-preference-help": "Alderantzikatu 2017ko interfaze diseinu berria eta ordutik eta ordura arte gehitutako tresnak.",
        "rcfilters-filter-showlinkedfrom-label": "-tik linkatutako orrietako aldaketak erakutsi",
        "rcfilters-filter-showlinkedfrom-option-label": "hautatutako orritik <strong>linkatutako orriak</strong>",
        "rcfilters-filter-showlinkedto-label": "-ra linkatutako orrietako aldaketak erakutsi",
        "recentchangeslinked-feed": "Lotutako orrietako aldaketak",
        "recentchangeslinked-toolbox": "Lotutako orrietako aldaketak",
        "recentchangeslinked-title": "«$1»(e)kin harremanetan dauden aldaketak",
-       "recentchangeslinked-summary": "Sartu orrialde baten izena orrialdearekin lotutako edota orrialdetik lotutako orrialdeetan aldaketak ikusteko. (Kategoria baten kideak ikusteko, idatzi Kategoria: Kategoria izena). [[Special:Watchlist|Zure jarraipen zerrendan]] dauden orrietan aldaketak <strong>letra lodian</strong> daude.",
+       "recentchangeslinked-summary": "Sartu orrialde baten izena orrialdearekin lotutako edota orrialdetik lotutako orrialdeetan aldaketak ikusteko. (Kategoria baten kideak ikusteko, idatzi {{ns:category}}: Kategoria izena). [[Special:Watchlist|Zure jarraipen zerrendan]] dauden orrietan aldaketak <strong>letra lodian</strong> daude.",
        "recentchangeslinked-page": "Orriaren izena:",
        "recentchangeslinked-to": "Lotutako orrietarako aldaketak erakutsi emandako orriaren ordez",
        "recentchanges-page-added-to-category": "«[[:$1]]» gehitu da kategoriara",
        "protectedtitles-submit": "Izenburuak erakutsi",
        "listusers": "Erabiltzaileen zerrenda",
        "listusers-editsonly": "Aldaketak egin dituzten erabiltzaileak soilik erakutsi",
+       "listusers-temporarygroupsonly": "Behin-behineko erabiltzaile taldeetako erabiltzaileak bakarrik erakutsi.",
        "listusers-creationsort": "Sorrera dataren arabera sailkatu",
        "listusers-desc": "Beheranzko ordenean antolatu",
        "usereditcount": "{{PLURAL:$1|edizio bat|$1 edizio}}",
index f8ccfb2..a81a622 100644 (file)
        "rcfilters-other-review-tools": "Autres outils de relecture",
        "rcfilters-group-results-by-page": "Grouper les résultats par page",
        "rcfilters-activefilters": "Filtres actifs",
+       "rcfilters-activefilters-hide": "Masquer",
+       "rcfilters-activefilters-show": "Afficher",
        "rcfilters-advancedfilters": "Filtres avancés",
        "rcfilters-limit-title": "Résultats à afficher",
        "rcfilters-limit-and-date-label": "$1 modification{{PLURAL:$1||s}}, $2",
index 86f3dd2..d1e6885 100644 (file)
        "tagline": "Di {{SITENAME}}",
        "help": "Èd",
        "search": "Sasé",
-       "search-ignored-headings": " #<!-- pa modifyé sa lign --><pre>\n# Tit dé sèksyon ki sa ignoré pa sasé-a.\n# Chanjman éfèktchwé isi ka pran éfè lò ki paj-a ké tit-a sa endèksé.\n# Zòt pé fòrsé réyendèksasyon di paj-a an éfèktchwan oun modifikasyon vid.\n# Sentaks-a sa swivant :\n#   * Tousa ki ka swiv roun « # » jouk finisman di lign-a sa roun koumantèr.\n#   * Tout lign ki pa-vid sa tit ègzak à ignoré, kas konprann osi.\nRéférans\nLyen èkstèrn\nWè osi\n #</pre><!-- pa modifyé sa lign -->",
+       "search-ignored-headings": " #<!-- pa modifyé sa lign --><pre>\n# Tit dé sèksyon ki ké fika ignoré pa sasé-a.\n# Chanjman-yan ki éfèktchwé isi ka pran léfè lò ki paj-a ké tit-a sa endèksé.\n# Zòt pouvé fòrsé réyendèksasyon di paj-a an éfèktchwan roun modifikasyon vid.\n# Sentaks-a sa swivant-a :\n#   * Tousa ki ka swiv roun « # » jouk finisman-an di lign-an sa roun koumantèr.\n#   * Tout lign ki pa-vid sa tit ègzak-a pou ignoré, kas konprann osi.\nRéférans\nLyen ègstèrn\nWè osi\n #</pre><!-- pa modifyé sa lign -->",
        "searchbutton": "Sasé",
        "go": "Konsilté",
        "searcharticle": "Kontinwé",
        "botpasswords-label-delete": "Souprimé",
        "botpasswords-label-resetpassword": "Réyinisyalizé mo di pas",
        "botpasswords-label-grants": "Drwè aplikab :",
-       "botpasswords-help-grants": "Otorizasyon-yan ka pèrmèt di aksédé o drwè ki ja akòrdé à zòt kont itilizatò. Aktivé roun otorizasyon isi pa ka fourni laksè à pyès drwè ki zòt kont itilizatò pé ké gen dayò. Wè [[Special:ListGrants|tablo dé otorizasyon]] pou plis d’enfòrmasyon.",
+       "botpasswords-help-grants": "Otorizasyon-yan ka pèrmèt di aksédé o drwè ki déja akòrdé à zòt kont itilizatò. Aktivé roun otorizasyon isi ka fourni laksè à pyès drwè ki zòt kont itilizatò pa gen dayò. Wè [[Special:ListGrants|tablo dé otorizasyon]] pou plis d’enfòrmasyon.",
        "botpasswords-label-grants-column": "Akòrdé",
        "botpasswords-bad-appid": "Non-an di robo « $1 » pa valid.",
        "botpasswords-insert-failed": "Échèk di ajou-a di non di robo « $1 ». Ès i té ja ajouté ?",
        "showpreview": "Prévizwalizé",
        "showdiff": "Wè modifikasyon-yan",
        "anoneditwarning": "<strong>Panga :</strong> zòt pa konèkté. Zòt adrès IP ké sa vizib di tout moun si zòt ka fè dé modifikasyon. Si zòt <strong>[$1 ka konèkté zòt kò]</strong> ou <strong>[$2 kréyé roun kont]</strong>, zòt modifikasyon ké sq atribwé à zòt pròp non di itilizatò(ris) é zòt ké gen dé ròt avantaj.",
-       "blockedtext": "<strong>Zòt kont itilizatò oben zòt adrès IP bloké.</strong>\n\nBlokaj té éfèktchwé pa $1.\nRézon-an évoké sa swivant : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Èspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pé kontakté $1 oben rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou an diskité.\nZòt pa pouvé itilizé fonksyon-an « {{int:emailuser}} » rounso si oun adrès di kouryé valid sa èspésifyé andan zòt [[Special:Preferences|préférans]] é rounso si sa fonksyonalité pa bloké.\nZòt adrès IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chakin dé rékèt ki zòt ké fè.",
+       "blockedtext": "<strong>Zòt kont itilizatò oben zòt adrès IP bloké.</strong>\n\nBlokaj té éfèktchwé pa $1.\nRézon-an ki évoké ka swiv : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Èspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pouvé kontakté $1 oben rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou an diskité.\nZòt pa pouvé itilizé fonksyon-an « {{int:emailuser}} » rounso si oun adrès di kouryé valid sa èspésifyé andan zòt [[Special:Preferences|préférans]] é rounso si sa fonksyonalité pa bloké.\nZòt adrès IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chakin dé rékèt ki zòt ké fè.",
        "loginreqlink": "konèkté so kò",
-       "newarticletext": "Zòt té ka swiv roun lyen vèr roun paj ki pa ka ègzisté òkò. \nAtò di kréyé sa paj, antré zòt tèks annan bwat ki aprè (zòt pé konsilté [$1 paj d'èd-a] pou plis enfòrmasyon).\nSi zòt pa rivé{{GENDER:|}} isi pa éròr, kliké asou bouton <strong>Routour</strong> di zòt navigatò.",
-       "anontalkpagetext": "----\n<em>Zòt asou paj di diskisyon di roun itilizatò anonim ki pa òkò kréyé di kont ou ki pa ka an itilizé</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès IP pé sa partajé pa plizyò itilizatò.\nSi zòt roun itiliza{{GENDER:|ò|ris}} anonim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrné zòt sa adrèsé à zòt, zòt pouvé [[Special:CreateAccount|kréyé roun kont]] oben [[Special:UserLogin|konèkté zòt kò]] atò di évité tout konfizyon fitir ké ròt kontribitò anonim.",
-       "noarticletext": "I pa gen atchwèlman pyès tèks asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|lansé oun sasé asou sa tit]] annan ròt paj-ya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sasé annan opérasyon lyé]\noben [{{fullurl:{{FULLPAGENAME}}|action=edit}} kréyé sa paj]</span>.",
+       "newarticletext": "Zòt té ka swiv roun lyen bò'd roun paj ki pa ka ègzisté òkò. \nAfen di kréyé sa paj, antré zòt tèks annan bwèt ki aprè (zòt pouvé konsilté [$1 paj di lèd-a] pou plis d'enfòrmasyon).\nSi zòt vini{{GENDER:|}} isi pa éròr, kliké asou bouton <strong>Routour</strong> di zòt navigatò.",
+       "anontalkpagetext": "----\n<em>Zòt asou paj di diskisyon di roun itilizatò anonim ki pa òkò kréyé di kont oben ki pa ka an itilizé</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès IP pouvé fika partajé pa plizyò itilizatò.\nSi zòt roun itiliza{{GENDER:|ò|ris}} anonim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrné zòt sa adrèsé pou zòt, zòt pouvé [[Special:CreateAccount|kréyé roun kont]] oben [[Special:UserLogin|konèkté zòt kò]] atò di évité tout konfizyon fitir ké ròt kontribitò anonim.",
+       "noarticletext": "I pa gen atchwèlman pyès tèks asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|lansé oun sasé asou sa tit]] annan ròt paj-ya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sasé annan opérasyon ki lyannen]\noben [{{fullurl:{{FULLPAGENAME}}|action=edit}} kréyé sa paj]</span>.",
        "noarticletext-nopermission": "I pa gen atchwèlman pyès tèks asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|fè roun sasé asou sa tit]] andan ròt paj-ya,\noben <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|paj={{FULLPAGENAMEE}}}} sasé annan journal asosyé]</span>, mè zòt pa gen pèrmisyon di kréyé sa paj.",
        "userpage-userdoesnotexist-view": "Kont itilizatò-a « $1 » pa anréjistré.",
        "clearyourcache": "<strong>Nòt :</strong> aprè zòt anréjistré zòt modifikasyon, zòt divèt forsé roucharjman konplè di kach di zòt navigatò pou wè chanjman-yan.\n* <strong>Firefox / Safari :</strong> mentné touch-a <em>Maj</em> (<em>Shift</em>) an klikan asou bouton-an <em>Atchwalizé</em> ou présé <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> asou roun Mac) \n* <strong>Google Chrome :</strong> apwiyé asou <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> asou roun Mac) \n* <strong>Internet Explorer :</strong> mentné touch-a <em>Ctrl</em> an klikan asou bouton-an <em>Atchwalizé</em> ou présé <em>Ctrl-F5</em> \n* <strong>Opera :</strong> alé annan <em>Menu → Settings</em> (<em>Opera → Préférences</em> asou roun Mac) é answit à <em>Konfidansyalité & sékrité → Éfasé doné d'èksplorasyon-yan → Imaj ké fiché an kach</em>.",
        "boteditletter": "b",
        "rc-change-size-new": "$1 {{PLURAL:$1|oktè}} aprè chanjman",
        "rc-old-title": "kréyé inisyalman ké tit « $1 »",
-       "recentchangeslinked": "Swivi dé paj lyé",
-       "recentchangeslinked-feed": "Swivi dé paj lyé",
-       "recentchangeslinked-toolbox": "Swivi dé paj lyé",
+       "recentchangeslinked": "Swivi dé paj ki lyannen",
+       "recentchangeslinked-feed": "Swivi dé paj ki lyannen",
+       "recentchangeslinked-toolbox": "Swivi dé paj ki lyannen",
        "recentchangeslinked-title": "Swivi dé paj asosyé à « $1 »",
-       "recentchangeslinked-summary": "Antré roun non di paj pou wè modifikasyon-yan ki fè résaman asou dé paj lyé dipi oben bò'd sa paj (pou wè manm-yan di oun katégori, antré {{ns:category}}:Non di katégori). Modifikasyon-yan dé paj di [[Special:Watchlist|zòt lis di swivi]] sa <strong>an gra</strong>.",
+       "recentchangeslinked-summary": "Antré roun non di paj pou wè modifikasyon-yan ki fè résaman asou dé paj ki lyannen dipi oben bò'd sa paj (pou wè manm-yan di oun katégori, antré {{ns:category}}:Non di katégori). Modifikasyon-yan dé paj di [[Special:Watchlist|zòt lis di swivi]] sa <strong>an gra</strong>.",
        "recentchangeslinked-page": "Non di paj :",
        "recentchangeslinked-to": "Afiché modifikasyon-yan dé paj ki ka konpòrté roun lyen vèr paj ki bay plito ki envèrs",
        "upload": "Enpòrté roun fiché",
        "sp-contributions-toponly": "Montré ki kontribisyon-yan ki sa dannyé-ya dé artik",
        "sp-contributions-newonly": "Afiché inikman modifikasyon-yan ki sa dé kréyasyon di paj",
        "sp-contributions-submit": "Sasé",
-       "whatlinkshere": "Paj lyé",
+       "whatlinkshere": "Paj ki lyannen",
        "whatlinkshere-title": "Paj ki ka pwenté bò'd « $1 »",
        "whatlinkshere-page": "Paj :",
        "linkshere": "Paj-ya ki anba ka kontni roun lyen vèr <strong>$2</strong> :",
        "tooltip-n-recentchanges": "Lis di modifikasyon résant asou wiki-a",
        "tooltip-n-randompage": "Afiché roun paj o azò",
        "tooltip-n-help": "Aksè à lèd",
-       "tooltip-t-whatlinkshere": "Lis di paj lyé ki ka pwenté asou sala",
+       "tooltip-t-whatlinkshere": "Lis dé paj ki lyannen ki ka pwenté asou sala",
        "tooltip-t-recentchangeslinked": "Lis di modifikasyon résant liyé à sa paj",
        "tooltip-feed-atom": "Flux Atom pou sa paj",
        "tooltip-t-contributions": "Wè lis dé kontribisyon di {{GENDER:$1|sa itilizatò|sa itilizatris}}",
index dc96b30..cf992cc 100644 (file)
        "resetpass-temp-password": "Contrasinal temporal:",
        "resetpass-abort-generic": "Unha extensión cancelou a modificación do contrasinal.",
        "resetpass-expired": "O seu contrasinal caducou. Defina un novo contrasinal para acceder.",
-       "resetpass-expired-soft": "O seu contrasinal caducou e debe restablecelo. Escolla un novo contrasinal ou prema en \"{{int:authprovider-resetpass-skip-label}}\" para restablecelo máis tarde.",
+       "resetpass-expired-soft": "O seu contrasinal caducou e debe mudalo. Escolla un novo contrasinal ou prema en \"{{int:authprovider-resetpass-skip-label}}\" para mudalo máis tarde.",
        "resetpass-validity-soft": "O seu contrasinal non é válido: $1\n\nEscolla un novo contrasinal agora ou prema en \"{{int:authprovider-resetpass-skip-label}}\" para restablecelo máis tarde.",
        "passwordreset": "Restablecer o contrasinal",
        "passwordreset-text-one": "Encha este formulario para restablecer o seu contrasinal.",
index c90d3cd..93ad441 100644 (file)
        "rcfilters-other-review-tools": "כלי סקירה אחרים",
        "rcfilters-group-results-by-page": "חלוקה התוצאות לקבוצות לפי דף",
        "rcfilters-activefilters": "מסננים פעילים",
+       "rcfilters-activefilters-hide": "הסתרה",
+       "rcfilters-activefilters-show": "הצגה",
        "rcfilters-advancedfilters": "מסננים מתקדמים",
        "rcfilters-limit-title": "כמה תוצאות להראות",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}, $2",
        "markedaspatrolled": "השינוי סומן כבדוק",
        "markedaspatrolledtext": "הגרסה שבחרת בדף [[:$1]] סומנה כבדוקה.",
        "rcpatroldisabled": "אפשרות סימון השינויים כבדוקים מבוטלת",
-       "rcpatroldisabledtext": "ת×\9b×\95נת ×¡×\99×\9e×\95×\9f ×©×\99× ×\95×\99×\99×\9d ×\9b×\91×\93×\95ק×\99×\9d ×\91×\93×£ ×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×\91×\95×\98×\9c×\94.",
+       "rcpatroldisabledtext": "ת×\9b×\95נת ×¡×\99×\9e×\95×\9f ×\94ש×\99× ×\95×\99×\99×\9d ×\9b×\91×\93×\95ק×\99×\9d ×\91×\93×£ ×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×\9e×\91×\95×\98×\9cת ×\9bר×\92×¢.",
        "markedaspatrollederror": "לא ניתן לסמן כבדוק",
        "markedaspatrollederrortext": "יש לציין גרסה שברצונך לסמן כבדוקה.",
-       "markedaspatrollederror-noautopatrol": "×\90×\99× ×\9a ×\9e×\95רש×\94 לסמן שינויים של עצמך כבדוקים.",
+       "markedaspatrollederror-noautopatrol": "×\90×\99×\9f ×\91×\90פשר×\95ת×\9a לסמן שינויים של עצמך כבדוקים.",
        "markedaspatrollednotify": "שינוי זה בדף \"$1\" סומן כבדוק.",
        "markedaspatrollederrornotify": "סימון השינוי כבדוק נכשל.",
        "patrol-log-page": "יומן שינויים בדוקים",
        "file-info-png-looped": "בלולאה",
        "file-info-png-repeat": "מוצג {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}",
        "file-info-png-frames": "{{PLURAL:$1|תמונה אחת|$1 תמונות}}",
-       "file-no-thumb-animation": "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.'''",
-       "file-no-thumb-animation-gif": "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.'''",
+       "file-no-thumb-animation": "<strong>לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.</strong>",
+       "file-no-thumb-animation-gif": "<strong>לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.</strong>",
        "newimages": "גלריית קבצים חדשים",
        "imagelisttext": "להלן רשימה של {{PLURAL:$1|קובץ אחד|$1 קבצים}}, ממוינים $2:",
        "newimages-summary": "דף מיוחד זה מציג את הקבצים האחרונים שהועלו.",
-       "newimages-legend": "×\9eסנן",
+       "newimages-legend": "ס×\99× ×\95ן",
        "newimages-label": "שם הקובץ (או חלק ממנו):",
        "newimages-user": "כתובת IP או שם משתמש",
        "newimages-newbies": "הצגת תרומות של משתמשים חדשים בלבד",
        "bydate": "לפי תאריך",
        "sp-newimages-showfrom": "הצגת קבצים חדשים החל מ־$2, $1",
        "seconds-abbrev": "{{PLURAL:$1|שנייה|$1 שניות}}",
-       "minutes-abbrev": "{{PLURAL:$1|דקה|$1 דק'}}",
+       "minutes-abbrev": "{{PLURAL:$1|דקה|$1 דקות}}",
        "hours-abbrev": "{{PLURAL:$1|שעה|שעתיים|$1 שעות}}",
        "days-abbrev": "{{PLURAL:$1|יום|יומיים|$1 ימים}}",
        "seconds": "{{PLURAL:$1|שנייה|$1 שניות}}",
index d88d794..966953c 100644 (file)
        "lag-warn-normal": "Promjene načinjene prije manje od $1 {{PLURAL:$1|sekunde|sekundi}} možda ne će biti prikazane na ovom popisu.",
        "lag-warn-high": "Zbog preopterećenosti poslužitelja na kom je baza podataka, izmjene novije od $1 {{PLURAL:$1|sekunde|sekundi}} možda ne će biti prikazane na ovom popisu.",
        "watchlistedit-normal-title": "Uredi popis praćenja",
-       "watchlistedit-normal-legend": "Ukloni stranice iz popisa praćenja",
+       "watchlistedit-normal-legend": "Uklanjanje naslova s popisa praćenja",
        "watchlistedit-normal-explain": "Prikazane su stranice na Vašem popisu praćenja.\nDa uklonite stranicu s popisa praćenja, označite kućicu kraj nje i kliknite gumb \"{{int:Watchlistedit-normal-submit}}\".\nMožete također [[Special:EditWatchlist/raw|uređivati ovaj popis u okviru za uređivanje]].",
        "watchlistedit-normal-submit": "Ukloni stranice",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} iz Vašeg popisa praćenja:",
index 0279925..6bd9201 100644 (file)
        "resetpass-temp-password": "Ideiglenes jelszó:",
        "resetpass-abort-generic": "A jelszómódosítást megszakította egy kiterjesztés.",
        "resetpass-expired": "A jelszavad lejárt. Adjál meg egy új jelszót a bejelentkezéshez!",
-       "resetpass-expired-soft": "A jelszavad lejárt, ezért újat kell beállítanod. Válassz most egy új jelszót, vagy kattints a {{int:authprovider-resetpass-skip-label}} gombra, ha később akarod csak beállítani.",
-       "resetpass-validity-soft": "A jelszavad érvénytelen: $1\n\nAdj meg egy új jelszót most, vagy kattints a „{{int:authprovider-resetpass-skip-label}}” gombra, ha később akarod megadni.",
+       "resetpass-expired-soft": "A jelszavad lejárt, ezért újat kell beállítanod. Válassz most egy új jelszót, vagy kattints a {{int:authprovider-resetpass-skip-label}} gombra, ha csak később akarod megváltoztatni.",
+       "resetpass-validity-soft": "A jelszavad érvénytelen: $1\n\nAdj meg egy új jelszót most, vagy kattints a „{{int:authprovider-resetpass-skip-label}}” gombra, ha csak később akarod megváltoztatni.",
        "passwordreset": "Jelszó visszaállítása",
        "passwordreset-text-one": "A jelszó átmeneti beállításához töltsd ki az űrlapot.",
        "passwordreset-text-many": "{{PLURAL:$1|Az átmeneti jelszó elküldéséhez töltsd ki az alábbi mezők egyikét.}}",
        "rcfilters-other-review-tools": "Egyéb hasznos hivatkozások",
        "rcfilters-group-results-by-page": "Eredmények csoportosítása lapok szerint",
        "rcfilters-activefilters": "Aktív szűrők",
+       "rcfilters-activefilters-hide": "Elrejt",
+       "rcfilters-activefilters-show": "Mutat",
        "rcfilters-advancedfilters": "Haladó szűrők",
        "rcfilters-limit-title": "Megjelenítendő találatok száma",
        "rcfilters-limit-and-date-label": "$1 változtatás, $2",
index cd15ef6..cc3e900 100644 (file)
        "protectedpagetext": "Ер оагIув лораяь я цу тIа хувцамаш дергдоацаш.",
        "viewsourcetext": "Укх оагIон чухьнахьарча текстах бIаргатоха а, цунах кеп яьккха а, йиш я хьа.",
        "virus-unknownscanner": "йовзанза антивирус:",
+       "logouttext": "<strong>Оаша болх чакхбаьккхаб.</strong>\n\nНекоторые страницы могут продолжить отображаться так, словно вы все ещё не завершили сеанс. Для борьбы с этим явлением обновите кэш браузера.",
        "welcomeuser": "Марша воагIалва, доакъашхо $1!",
        "yourname": "Дагара йоазон цIи:",
        "userlogin-yourname": "Доакъашхочун цӀи",
        "enotif_reset": "Белгалъе еррига оагӀонаш бӀаргтехача санна",
        "enotif_impersonal_salutation": "{{grammar:genitive|{{SITENAME}}}} – доакъашхо",
        "deletepage": "ДIаяккха оагIув",
+       "excontent": "чудар: «$1»",
+       "excontentauthor": "чухьнахьадар: «$1», цу оагIон цаI марка воаца автор ва [[Special:Contributions/$2|$2]] ([[User talk:$2|дувцара оагIув]])",
        "delete-confirm": "$1 — дӀаяккхар",
        "delete-legend": "ДӀаяккхар",
        "confirmdeletetext": "Оаш дIадийхад бIарчча дIадаккхар оагIон а (е сурта), цун деррига хувцара истори а. '''Дехар да''', бакъде шоай из бокъонца де безам болаш долга а, из дича хургдар кхеташ долга а, из дар укх [[{{MediaWiki:Policy-url}}|бокъонашца]] долга.",
        "restriction-move": "ЦIи хувцаp",
        "restriction-create": "Хьакхоллар",
        "restriction-upload": "Доттар",
+       "undeletepage": "ДӀаяьхача оагӀонашка хьажар а уж меттаоттаяр а",
        "undeletelink": "бIаргтоха/юхадаккха",
        "undeleteviewlink": "хьажа",
+       "undeletedpage": "'''Меттаоттаяьй оагӀув «$1».'''\n\nТIехьарча хана дӀаяьха а юхаметтаоттаяь а хиннача оагIонашка хьажара духьа хьадела [[Special:Log/delete|тептар]].",
        "undelete-search-submit": "Хьалáха",
        "namespace": "ЦIерий моттигаш:",
        "invert": "Хержар юхадаккха",
        "movelogpage": "ЦӀераш хувцара тептар",
        "movereason": "Бахьан:",
        "revertmove": "юха",
+       "delete_and_move_reason": "ДӀаяьккхай укх оагIон «[[$1]]» цӀи хувцара духьа",
        "export": "Оагӏоний экспорт",
        "allmessagesname": "Хоам",
        "allmessagesdefault": "Массаза йола текст",
index 3cd07cf..c124df0 100644 (file)
        "resetpass-submit-loggedin": "Cambia password",
        "resetpass-submit-cancel": "Annulla",
        "resetpass-wrong-oldpass": "Password temporanea o attuale non valida.\nLa password potrebbe essere stata già modificata, oppure potrebbe essere stata richiesta una nuova password temporanea.",
-       "resetpass-recycled": "Si prega di reimpostare con una password diversa dalla password attuale.",
+       "resetpass-recycled": "Si prega di modificare la tua password con una diversa da quella attuale.",
        "resetpass-temp-emailed": "L'accesso è stato effettuato con un codice temporaneo, inviato via email. Per completare la registrazione, è necessario impostare una nuova password qui:",
        "resetpass-temp-password": "Password temporanea:",
        "resetpass-abort-generic": "La modifica della password è stata interrotta da un'estensione.",
        "resetpass-expired": "La password è scaduta. Si prega di impostare una nuova password per effettuare l'accesso.",
-       "resetpass-expired-soft": "La tua password è scaduta e deve essere reimpostata. Si prega di scegliere una nuova password o fare clic su \"{{int:authprovider-resetpass-skip-label}}\" per reimpostarla successivamente.",
-       "resetpass-validity-soft": "La tua password non è valida: $1\n\nSi prega di scegliere una nuova password o fare clic su \"{{int:authprovider-resetpass-skip-label}}\" per reimpostarla successivamente.",
+       "resetpass-expired-soft": "La tua password è scaduta e deve essere modificata. Si prega di scegliere una nuova password o fare clic su \"{{int:authprovider-resetpass-skip-label}}\" per modificarla successivamente.",
+       "resetpass-validity-soft": "La tua password non è valida: $1\n\nSi prega di scegliere una nuova password o fare clic su \"{{int:authprovider-resetpass-skip-label}}\" per modificarla successivamente.",
        "passwordreset": "Reimposta password",
        "passwordreset-text-one": "Compila questo modulo per reimpostare la tua password.",
        "passwordreset-text-many": "{{PLURAL:$1|Compila uno dei campi per ricevere una password temporanea tramite email.}}",
        "rcfilters-other-review-tools": "Altri strumenti di revisione",
        "rcfilters-group-results-by-page": "Raggruppa risultati per pagina",
        "rcfilters-activefilters": "Filtri attivi",
+       "rcfilters-activefilters-hide": "Nascondi",
+       "rcfilters-activefilters-show": "Mostra",
        "rcfilters-advancedfilters": "Filtri avanzati",
        "rcfilters-limit-title": "Risultati da mostrare",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|modifica|modifiche}}, $2",
index c8aec7c..de57a0d 100644 (file)
        "recentchanges": "최근 바뀜",
        "recentchanges-legend": "최근 바뀜 설정",
        "recentchanges-summary": "이 페이지에서 위키의 최근 바뀜을 추적합니다.",
-       "recentchanges-noresult": "ì§\80ì \95í\95\9c ì¡°ê±´ê³¼ ì\9d¼ì¹\98í\95\98ë\8a\94 ì£¼ì\96´ì§\84 ê¸°ê°\84 ë\8f\99ì\95\88 바뀜이 없습니다.",
+       "recentchanges-noresult": "주ì\96´ì§\84 ê¸°ê°\84 ë\8f\99ì\95\88ì\97\90 ì\9d´ ì¡°ê±´ë\93¤ì\97\90 ë§\9eë\8a\94 바뀜이 없습니다.",
        "recentchanges-timeout": "이 검색의 시간이 초과되었습니다. 다른 검색 변수를 사용할 수 있습니다.",
        "recentchanges-network": "기술적인 문제로 결과를 불러올 수 없습니다. 페이지를 다시 새로 고침해 주십시오.",
        "recentchanges-notargetpage": "해당 문서에 관한 변경사항을 보려면 상단에 문서 제목을 입력하십시오.",
        "rcfilters-other-review-tools": "다른 검토 도구",
        "rcfilters-group-results-by-page": "문서별로 묶음",
        "rcfilters-activefilters": "사용 중인 필터",
+       "rcfilters-activefilters-hide": "숨기기",
+       "rcfilters-activefilters-show": "보이기",
        "rcfilters-advancedfilters": "고급 필터",
        "rcfilters-limit-title": "표시할 결과 수",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|변경사항}} $1개, $2",
index 4037ecb..d194391 100644 (file)
        "recentchanges-submit": "Nîşan bide",
        "rcfilters-legend-heading": "<strong>Lîsteya kurtenavan:</strong>",
        "rcfilters-activefilters": "Parzûnên çalak",
+       "rcfilters-activefilters-hide": "Veşêre",
+       "rcfilters-activefilters-show": "Nîşan bide",
        "rcfilters-days-show-days": "{{PLURAL:$1|rojek|$1 roj}}",
        "rcfilters-days-show-hours": "{{PLURAL:$1|saetek|$1 saet}}",
        "rcfilters-quickfilters": "Parzûnên tomarkirî",
index cb6a15f..4ec03ed 100644 (file)
        "showpreview": "Ингкъарав",
        "showdiff": "Тюзлевлени гёрсетмек",
        "anoneditwarning": "<strong>Тергев:</strong> Сен гириш этмединг. Тюзлевлер этсенг сени IP адресинг публикли гёрюнер. Эгер <strong>[$1 гириш]</strong> яда <strong>[$2 къайыт]</strong> этсенг, тюзлевлеринг сени ортакъчы аты булан гьисап этилер, оьзге пайдалардан да къайры.",
-       "blockedtext": "Сени ÐºÑ\8aоллавÑ\87Ñ\83 Ð°Ñ\82Ñ\8bнг Ñ\8fда IP Ð°Ð´Ñ\80еÑ\81инг ÐºÑ\8aамалгÑ\8aан Ñ\8dди.''\n\nÐ\9aÑ\8aамав Ñ\8dÑ\82ген $1 ($2).\nСебеп Ð±ÐµÑ\80илген: ''$3'.\n\n* Ð\9aÑ\8aамав Ð±Ð°Ñ\88ладÑ\8b: $4\n* Ð\9aÑ\8aамав Ð±Ð¸Ñ\82е: $5\n* Ð\9aÑ\8aамавнÑ\83 Ð¼Ñ\83Ñ\80адÑ\8b: $7\n\n$1 Ð±Ñ\83лан Ñ\8fда ÐºÑ\8aайÑ\81Ñ\8b Ð¾Ñ\8cзге [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80]] Ð±Ñ\83лан ÐºÑ\8aаÑ\82нап ÐºÑ\8aамавнÑ\83 Ð³Ñ\8cакÑ\8aÑ\8bнда Ñ\81Ñ\91йлеÑ\88меге Ð±Ð¾Ð»Ð°Ñ\81ан.\nТеÑ\80геп ÐºÑ\8aой, Ñ\81ени [[Special:Preferences|Ñ\8dнÑ\87или ÐºÑ\8eйлемлеÑ\80ингде]] e-mail Ð°Ð´Ñ\80еÑ\81инг Ñ\82Ñ\8eз Ð±ÐµÑ\80мединг Ð±Ñ\83Ñ\81а Ñ\8fда Ð³ÐµÑ\80Ñ\82и Ñ\8dÑ\82мединг Ð±Ñ\83Ñ\81а, Ñ\8fда ÐºÑ\8aамав Ñ\88аÑ\80Ñ\82лагÑ\8aа Ð¼Ð°ÐºÑ\82Ñ\83п Ñ\8fзÑ\8bвÑ\83нÑ\83 ÐºÑ\8aадагÑ\8aа Ð³Ð¸Ñ\80е Ð±Ñ\83Ñ\81а, \"кÑ\8aоллавÑ\87Ñ\83гÑ\8aа Ð¼Ð°ÐºÑ\82Ñ\83п\" Ñ\84Ñ\83нкÑ\86иÑ\8fнÑ\8b ÐºÑ\8aоллап Ð±Ð¾Ð»Ð¼Ð°Ñ\81Ñ\81ан.\nСени IP Ð°Ð´Ñ\80еÑ\81инг â\80\94 $3, ÐºÑ\8aамавнÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\84икаÑ\82оÑ\80Ñ\83 â\80\94 $5. Ð¢Ð¸Ð»ÐµÐ², Ð±Ñ\83 Ð¼Ð°Ñ\8aлÑ\8eмаÑ\82ланÑ\8b Ð±Ð°Ñ\80Ñ\8b Ñ\82алаплаÑ\80Ñ\8bнга Ð³Ð¸Ð¹Ð¸Ñ\80.",
+       "blockedtext": "Къамав этген $1 ($2).\nСебеп берилген: ''$3'.\n\n* Къамав башлады: $4\n* Къамав бите: $5\n* Къамавну мурады: $7\n\n$1 булан яда къайсы оьзге [[{{MediaWiki:Grouppage-sysop}}|администратор]] булан къатнап къамавну гьакъында сёйлешмеге боласан.\nТергеп къой, сени [[Special:Preferences|энчили кюйлемлерингде]] e-mail адресинг тюз бермединг буса яда герти этмединг буса, яда къамав шартлагъа мактуп язывуну къадагъа гире буса, \"къоллавчугъа мактуп\" функцияны къоллап болмассан.\nСени IP адресинг — $3, къамавну идентификатору — $5. Тилев, бу маълюматланы бары талапларынга гийир.",
        "loginreqlink": "гирмек",
        "newarticle": "(Янгы)",
        "newarticletext": "Сен гьалиде яратылмагъан сагьифагъа гёчдинг.\nБу сагьифаны яратмакъ учун, тюбюндеги къутугъунда язып башлагъыз (артыкъ маълюмат учун [$1 кёмек сагьифагъа] къара).\nЯнгылыш этип бери гёчген бусанг, сени браузеринг <strong>артгъа</strong> тюймесине бас.",
        "recentchangeslinked-feed": "Байлавлу тюзлевлер",
        "recentchangeslinked-toolbox": "Байлавлу тюзлевлер",
        "recentchangeslinked-title": "\"$1\" сагьифагъа байлавлу тюзлевлер",
-       "recentchangeslinked-summary": "Ð\91Ñ\83 Ñ\81агÑ\8cиÑ\84агÑ\8aа Ð±Ð°Ð¹Ð»Ð°Ð²Ð»Ñ\83 Ñ\82Ñ\8eзлевлеÑ\80и Ð±Ñ\83лан Ñ\81агÑ\8cиÑ\84аланÑ\8b, Ñ\8fда Ð¾ Ñ\81агÑ\8cиÑ\84адан Ð±Ð°Ð¹Ð»Ð°Ð²Ð»Ñ\83ланÑ\8b Ð³Ñ\91Ñ\80мек Ñ\83Ñ\87Ñ\83н атын яз. (Категорияны ортакъчаларын гёрмек учун Category:Категорияны атын яз). Сени [[Special:Watchlist|Гьызарлав тизменгдеги]] алышынывлар <strong>къалын</strong> гьарплылар.",
+       "recentchangeslinked-summary": "СагÑ\8cиÑ\84агÑ\8aа Ñ\8fда Ñ\81агÑ\8cиÑ\84адан Ð±Ð°Ð¹Ð»Ð°Ð²Ð»Ñ\83 Ñ\81агÑ\8cиÑ\84алаÑ\80да Ñ\82Ñ\8eзлевлеÑ\80ин Ð³Ñ\91Ñ\80мек Ñ\83Ñ\87Ñ\83н Ð¾Ð½Ñ\83 атын яз. (Категорияны ортакъчаларын гёрмек учун Category:Категорияны атын яз). Сени [[Special:Watchlist|Гьызарлав тизменгдеги]] алышынывлар <strong>къалын</strong> гьарплылар.",
        "recentchangeslinked-page": "Сагьифаны аты:",
        "recentchangeslinked-to": "Къайта, бу сагьифагъа байлавлу сагьифаланы алышынывларын гёрсетмек",
        "upload": "Сапламны юклемек",
        "sp-contributions-toponly": "Янгыз ахырынчы тюрню тюзлевлерин гёрсетмек",
        "sp-contributions-newonly": "Янгыз сагьифа яратыв деген тюзлевлени гёрсетмек",
        "sp-contributions-submit": "Излев",
-       "whatlinkshere": "Ð\9cÑ\83нда байланылгъан",
+       "whatlinkshere": "Ð\91еÑ\80и байланылгъан",
        "whatlinkshere-title": "\"$1\" бетге байлангъан сагьифалар",
        "whatlinkshere-page": "Сагьифа:",
        "linkshere": "Гелеген сагьифалар бугъар байлавлу <strong>$2</strong>:",
index 27701a3..74001ee 100644 (file)
        "resetpass-temp-password": "Temporäert Passwuert:",
        "resetpass-abort-generic": "D'Ännere vum Passwuert gouf duerch eng Erweiderung ofgebrach.",
        "resetpass-expired": "Äert Passwuert ass ofgelaf. Gitt w.e.g. en neit Passwuert u fir Iech anzeloggen.",
-       "resetpass-expired-soft": "Äert Passwuert ass ofgelaf a muss zeréckgesat. Sicht w.e.g. elo en neit Passwuert eraus oder klickt  \"{{int:authprovider-resetpass-skip-label}}\" fir et spéider zeréckzesetzen.",
-       "resetpass-validity-soft": "Ärt Passwuert ass net valabel: $1",
+       "resetpass-expired-soft": "Äert Passwuert ass ofgelaf a muss geännert ginn. Sicht w.e.g. elo en neit Passwuert eraus oder klickt  \"{{int:authprovider-resetpass-skip-label}}\" fir et spéider z'änneren.",
+       "resetpass-validity-soft": "Äert Passwuert ass net valabel: $1\n\nWielt elo en neit Passwuert oder klickt op \"{{int:authprovider-resetpass-skip-label}}\" fir et méi spéit z'änneren.",
        "passwordreset": "Passwuert zrécksetzen",
        "passwordreset-text-one": "Fëllt dëse Formulaire aus fir Äert Passwuert zréckzesetzen.",
        "passwordreset-text-many": "{{PLURAL:$1|Fëllt eent vun de Felder aus fir en temporäert Passwuert per E-Mail ze kréien.}}",
        "rcfilters-other-review-tools": "Aner Méiglechkeete fir z'iwwerliesen",
        "rcfilters-group-results-by-page": "Resultater no de Säite gruppéieren",
        "rcfilters-activefilters": "Aktiv Filteren",
+       "rcfilters-activefilters-hide": "Verstoppen",
+       "rcfilters-activefilters-show": "Weisen",
        "rcfilters-advancedfilters": "Erweidert Filteren",
        "rcfilters-limit-title": "Resultater fir ze weisen",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|Eng Ännerung|$1 Ännerungen}}, $2",
index 7138233..8532d20 100644 (file)
        "activeusers-submit": "Parādīt aktīvos dalībniekus",
        "listgrouprights": "Dalībnieku grupu tiesības",
        "listgrouprights-summary": "Šis ir šajā viki definēto dalībnieku grupu uzskaitījums, kopā ar tām atbilstošajām piekļuves tiesībām.\nPapildu informāciju par katru individuālu piekļuves tiesību veidu, iespējams, var atrast [[{{MediaWiki:Listgrouprights-helppage}}|šeit]].",
+       "listgrouprights-key": "Apzīmējumi:\n* <span class=\"listgrouprights-granted\">Piešķirtās tiesības</span>\n* <span class=\"listgrouprights-revoked\">Atceltās tiesības</span>",
        "listgrouprights-group": "Grupa",
        "listgrouprights-rights": "Tiesības",
        "listgrouprights-helppage": "Help:Grupu tiesības",
index eecf9e5..6337ea4 100644 (file)
        "redirectedfrom": "(tonga teto avy amin'ny $1)",
        "redirectpagesub": "Pejy fihodinana",
        "redirectto": "Mihodina mankany:",
-       "lastmodifiedat": "Voaova farany tamin'ny $1 amin'ny $2 ity pejy ity<br />",
+       "lastmodifiedat": "Voaova farany tamin'ny $1 amin'ny $2 ity pejy ity.",
        "viewcount": "voastsidika in-$1 ity pejy ity.{{PLURAL:}}",
        "protectedpage": "Pejy voaaro",
        "jumpto": "Hanketo:",
        "nosuchusershort": "Tsy misy mpikambana hoe \"$1\". Hamarino ny tsipelina.",
        "nouserspecified": "Tsy maintsy mampiditra solonanarana ianao.",
        "login-userblocked": "Voasakana io mpikambana io. Fidirana tsy nahazoan-dalana.",
-       "wrongpassword": "Diso ny tenimiafina. Manandrama tenimiafina hafa azafady.",
+       "wrongpassword": "Diso ny tenimiafina. \nAndramo indray azafady.",
        "wrongpasswordempty": "Tsy nampiditra tenimiafina ianao, azafady mba avereno indray.",
        "passwordtooshort": "{{PLURAL:}}Fohy loatra io tenimiafina io.\nFarafahakeliny tokony hisy litera $1 ny tenimiafina.",
        "passwordtoolong": "Tsy azo atao ho lava noho ny soratra {{PLURAL:$1|iray|$1}} ny tenimiafina.",
-       "passwordtoopopular": "Tsy azo ampiasana ny tenimiafina ampiasaina matetika. Misafidiana tenimiafina manokana kokoa.",
+       "passwordtoopopular": "Tsy azo ampiasana ny tenimiafina ampiasaina matetika. Misafidiana tenimiafina sarotra vinavinaina kokoa.",
        "password-name-match": "Tsy maintsy samihafa ny solonanaranao sy ny tenimiafinao tompoko.",
        "password-login-forbidden": "Norarana ny fampiasana io anaram-pikambana ary io tenimiafina io.",
        "mailmypassword": "Hamerina ny tenimiafina",
        "passwordremindertitle": "Fampatsiahivana tenimiafina avy amin'i {{SITENAME}}",
-       "passwordremindertext": "Nisy olona, izay ianao ihany angamba, avy tamin'ny adiresy IP $1, nangataka\nny handefasanay tenimiafina vaovao ho an'ny sehatra {{SITENAME}} ao amin'ny\n$4.\nLasa \"$3\" ankehitriny ny tenimiafin'i \"$2\"\nAfaka miditra ary ianao ankehitriny ary manova ny tenimiafinao.\nLany andro anatin'ny $5 andro ny tenimiafinao\n\nRaha olon-kafa io nangataka io, na tadidinao ihany ny tenimiafinao taloha ka\ntsy irinao hovana intsony, dia fafao fotsiny ity hafatra ity dia ilay\ntenimiafina taloha ihany no ampiasao.{{PLURAL:}}",
+       "passwordremindertext": "Nisy olona (avy amin'ny adiresy IP $1) nangataka tenimiafina vaovao ho an'i {{SITENAME}} ($4). Noforonina ny tenimiafina vonjimaika ho an'ny mpikambana \"$2\" ary natao ho \"$3\". Raha ny finiavanao no nahatonga  izany, dia mila miditra ianao ary misafidy tenimiafina vaovao dien'izao.\nHitsahatra afaka {{PLURAL:$5|iray andro|$5 andro}} ny tenimiafinao.\n\nRaha olon-kafa no nanao ity hataka ity, na efa tadidinao indray ny tenimiafinao ka tsy te-hanova azy intsony, dia azonao tsy raharahiana ity hafatra ity ary azonao ampiasaina ilay tenimiafinao taloha.",
        "noemail": "Tsy nanome adiresy imailaka i \"$1\".",
        "noemailcreate": "Tsy maintsy misy ny adiresy imailaka ho atsofokao",
        "passwordsent": "Nandefasana tenimiafina vaovao any amin'ny adiresy imailak'i \"$1\".\nAzafady midira rehefa voarainao io imailaka io.",
        "botpasswords-insert-failed": "Tsy afaka nanampy ny anarana rôbô \"$1\". Tsy efa nampiana ve ilay izy?",
        "botpasswords-update-failed": "Tsy afaka nanavao ny anarana rôbô \"$1\". Nofafàna ve ilay izy?",
        "botpasswords-created-title": "Noforonina ilay tenimiafina rôbô",
-       "botpasswords-created-body": "Noforonina ny tenimiafina rôbô \"$1\" an'ny mpikambana \"$2\".",
+       "botpasswords-created-body": "Noforonina ny tenimiafina rôbô \"$1\"{{GENDER:$2|}} an'ny mpikambana \"$2\".",
        "botpasswords-updated-title": "Nohavaozina ny tenimiafina rôbô",
-       "botpasswords-updated-body": "Nohavaozina ny tenimiafina rôbô \"$1\" an'ny mpikambana \"$2\".",
+       "botpasswords-updated-body": "Nohavaozina ny tenimiafina rôbô \"$1\" an'ny mpikambana \"$2\"{{GENDER:$2|}}.",
        "botpasswords-deleted-title": "Nofafàna ny tenimiafina rôbô",
-       "botpasswords-deleted-body": "Nofafàna ny tenimiafina rôbô \"$1\" an'ny mpikambana \"$2\".",
-       "botpasswords-newpassword": "Ny tenimiafina idirana amin'i <strong>$1</strong> dia <strong>$2</strong>. <em>Raiketo ilay izy ho an'ny fampiasàna any aoriana any.</em>",
+       "botpasswords-deleted-body": "Nofafàna ny tenimiafina rôbô \"$1\" an'ny mpikambana \"$2{{GENDER:$2|}}\".",
+       "botpasswords-newpassword": "Ny tenimiafina hidirana amin'i <strong>$1</strong> dia <strong>$2</strong>. <em>Raiketo izany ho fampatsiahivana ho an'ny ho avy</em><br>(Ho an'ny rôbô taloha izay mila ny anaram-pidirana mitovy amin'ny anaram-pikambana dia azonao ampiasaina ho anaram-pikambana i <strong>$3</strong> ary niy tenimiafina <strong>$4</strong>.)",
        "botpasswords-no-provider": "Tsy afaka antsoina ny BotPasswordsSessionProvider.",
        "botpasswords-restriction-failed": "Manakana ity fidirana ity ny fepetra mifehy ny tenimiafina rôbô.",
        "resetpass_forbidden": "Tsy afaka ovaina ny tenimiafina",
        "resetpass-submit-loggedin": "Ovay ny tenimiafina",
        "resetpass-submit-cancel": "Aoka ihany",
        "resetpass-wrong-oldpass": "Tsy izy ny tenimiafinao (ankehitriny na vonjimaika)\nMety efa nanova tenimiafina na nangataka hahazo tenimiafina vonjimaika angamba ianao.",
-       "resetpass-recycled": "Avereno amy zavatra hafa nohon'ny tenimiafinao ankehitriny ny tenimiafinao.",
+       "resetpass-recycled": "Ovay ho zavatra samihafa amin'ny tenimiafinao ankehitriny ny tenimiafinao.",
        "resetpass-temp-emailed": "Niditra tamin'ny alalan'ny tenimiafina vonjimaika nalefa mailaka ianao.\nMba hamaranana ny fidirana, dia tsy maintsy mampiditra tenimiafina vaovao eto ianao :",
        "resetpass-temp-password": "Tenimiafina miserana :",
        "resetpass-abort-generic": "Nosakanan'ny itatra (extension) iray ny fanovana tenimiafina.",
        "resetpass-expired": "Efa nitsahatra ny tenimiafinao. Mampidira tenimiafina vaovao hahafahanao miditra.",
-       "resetpass-expired-soft": "Efa nitsahatra ny tenimiafinao, ary tsy maintsy averina ilay izy. Safidio avy hatrany ny tenimiafina, na tsindrio \"{{int:authprovider-resetpass-skip-label}}\" raha tsy hanao izany androany",
-       "resetpass-validity-soft": "Tsy ekena ny tenimiafinao : $1\n\nTenimiafina vaovao fidiana, na tsindrio \"{{int:authprovider-resetpass-skip-label}}\" raha hamerina azy amin'ny fotoana hafa.",
+       "resetpass-expired-soft": "Efa nitsahatra ny tanimiafinao ka mila ovaina. Misafidiana tenimiafina vaovao dien'izao, na tsindrio \"{{int:authprovider-resetpass-skip-label}}\" raha hanova azy amin'ny fotoana hafa.",
+       "resetpass-validity-soft": "Tsy ekena ny tenimiafinao : $1\n\nMisafidiana tenimiafina vaovao izao, na tsindrio  \"{{int:authprovider-resetpass-skip-label}}\" raha te-hanova azy any aoriana.",
        "passwordreset": "Famafana ary famerenana ny tenimiafina",
        "passwordreset-text-one": "Fenoy ity fôrmiolera ity mba hamerenana ny tenimiafinao",
        "passwordreset-text-many": "{{PLURAL:$1|Fenoy ny saha mba hahazoanao tenimiafina vonjimaika.}}",
        "passwordreset-emailtext-ip": "Nisy olona (izay mety ianao, avy amin'ny adiresy IP $1) nangataka ny hamerina ny tenimiafin'ny kaontim-pikambany ho an'i {{SITENAME}} ($4). Mampiasa ity adiresy mailaka ity {{PLURAL:$3|ity kaontim-pikambana mpikambana io|ireo kaontim-mpikambana ireo}}:\n\n$2\n\nHitsahatra afaka $5 andro {{PLURAL:$3|io tenimiafina io|ireo tenimiafina ireo}}.\nTokony miditra ianao ary mifidy tenimiafina vaovao. Raha misy olon-kafa nanao ity hataka ity, na efa tadidinao indray ilay tenimiafinao taloha, ary raha tsy tia hanova azy intsony, azonao tsy raharahiana ity hafatra ity ary mitohy mampiasa ny tenimiafinao taloha.",
        "passwordreset-emailtext-user": "Nisy mpikambana mitondra anarana $1 eo amin'i {{SITENAME}} nangataka fampatsiahivana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). Manana io adiresy imailaka {{PLURAL:$3|io kaontim-pikambana io|ireo kaontim-pikambana ireo}} :\n\n$2\n\nHitsahatra afaka {{PLURAL:$5|iray|$5}} andro {{PLURAL:$3|io|ireo}} tenimiafina {{PLURAL:$3|io|ireo}}. Mila miditra dien'izao ianao izao ary mifidy tenimiafina vaovao. Raha tsy avy aminao ity hataka ity na efa nahatadidy ny tenimiafinao taloha ianao, ary raha tsy tianao hovaina intsony ilay tenimiafinao, dia azonao tsy raharahiana ity hafatra ity ary mampiasa ny tenimiafinao taloha.",
        "passwordreset-emailelement": "Anaram-pikambana : \n$1\n\nTenimiafina miserana : \n$2",
-       "passwordreset-emailsentemail": "Lasa ny mailaka famerenana tenimiafina.",
+       "passwordreset-emailsentemail": "Raha miaraka amin'ny kaontinao ity adiresy mailaka ity, dia ho alefa ny mailaka famerenan-tenimiafina.",
        "passwordreset-nocaller": "Mila manitsy mpiantso",
        "passwordreset-nosuchcaller": "Tsy misy ilay mpiantso: $1",
        "passwordreset-invalidemail": "Adiresy mailaka tsy azo raisina",
        "preview": "Topi-maso",
        "showpreview": "Asehoy aloha",
        "showdiff": "Asehoy ny fiovana",
-       "blankarticle": "<strong>Tandremo:</strong> Fotsy ny pejy tianao hoforonina.\nRaha manindry an'i \"$1\" indray ianao dia hoforonina tsy hisy vontoatiny na inona na innona ilay pejy.",
+       "blankarticle": "<strong>Tandremo:</strong> Fotsy ny pejy tianao hoforonina.\nRaha manindry an'i \"$1\" indray ianao dia hoforonina tsy hisy vontoatiny na inona na inona ilay pejy.",
        "anoneditwarning": "<strong>Fampitandremana :</strong> Tsy niditra tamin'ny kaontinao ianao. Ho hitan'ny vahoaka ny adiresy IP-nao raha manova inona na inona ianao. Raha <strong>[$1 miditra amin'ny kaontinao]</strong> ianao dia ho anisan'ny tombontsoa anananao ny fanaovana ny fiovana amin'ny solonanaranao.",
        "anonpreviewwarning": "''Tsy niditra ianao. Hampitahiry ny adiresy IP anao ao amin'ny tantaram-panovan'ity pejy ity ny fitehirizana ny fanovana.''",
        "missingsummary": "'''Hafatra fampantsiahivana''' : tsy mbola nanome ny ambangovangom-panovanao ianao.\nRaha mbola tsindriano fanindroany eo amin'ny bokotra $1, ho voatahiry tsy fanambarana ny fanovanao.",
        "missingcommenttext": "Ampidiro ny ambangovangony azafady.",
-       "missingcommentheader": "'''Fampahatsiahivana :''' Tsy nampiditra lohateny amin'ity resaka ity ianao.\nRaha tsindrianao indray eo amin'ny « {{MediaWiki:Savearticle}} » ho voatahiry tsy misy lohateny ny fanovananao.",
-       "summary-preview": "Topi-maso n'ilay ambangovangony :",
-       "subject-preview": "Topi maso ny lazaina :",
+       "missingcommentheader": "<strong>Fampatsiahivana: </strong> Tsy nampiditra lohahevitra ho an'ity hafatra ity ianao. Raha tsindrianao fanindroany \"$1\" dia ho tehirizina tsy misy lohahevitra ny hafatrao.",
+       "summary-preview": "Topi-mason'ny ambangovangom-panovana :",
+       "subject-preview": "Topi-mason-dohahevitra:",
        "previewerrortext": "Nisy hadisoana nitranga tamin'ny fanandramana namoaka topi-mason'ny fanovanao",
        "blockedtitle": "Mpikambana voasakana",
-       "blockedtext": "'''Voasakana ny solonanaranao na ny adiresy IP anao.'''\n\nNataon'i $1 ny fisakanana.\nNy antony : ''$2''.\n\n* Fanombohan'ilay fisakanana : $8\n* Farany : $6\n* Kaonty voasakana : $7.\n\nAfaka antsoinao i $1 na [[{{MediaWiki:Grouppage-sysop}}|ny mpandrindra]] mba hiresaka mombamomba n'izany.\nAfaka andefasanao imailaka ra nampiditra ny adiresy imailakanao ianao ao anatin'ny [[Special:Preferences|mombamombanao]].\n'''$3''' ny adiresy IP-nao ary ny ''identifiant de blocage''-nao dia #$5.\nAsio ao anaty ny fangatahanao io adiresy io.",
-       "autoblockedtext": "Voasakana ny adiresy IP anareo satria nampiasain'ny olon-kafa io adiresy ampiasainao io. Ary voasakan'i $1 ilay olona nampiasa ny adiresinao.<br />\nIty ny antony navoakany\n\n:''$2''\n\n* nanomboka tamin'ny $8 ilay fisakanana\n* Amin'ny $6 ilay fisakanana no mijanona\n* $7 no anaran'ilay kaonty voasakana\n\nAfaka antsoinao i $1 na miantso ny [[{{MediaWiki:Grouppage-sysop}}|mpandrindra]] mba hiresaka momba ny fanakananao.\n\nJereo koa fa tsy afaka mampiasa ny asa ''emailuser'' ianao ra tsy nanometraka ny adiresy imailakao anatin'ny [[Special:Preferences|safidinao]]. Jereo koa ra tsy nesorinao ny asa ''emailuser''.\n\n$3 izao ny adiresinao, ary ny isa ny fisakananai dia $5.\nSoraty ireo fanoroana ireo anatin'ny fangatahana ataonao.",
+       "blockedtext": "<strong>Voasakana ny adiresy IP-nao na ny anaram-pikambanao.</strong>\n\nI $1 no nanao ny sakana.\nNy antony nomeny dia <em>$2</em>.\n\n* Fiantombohan'ny sakana: $8\n* Fitsaharan'ny sakana: $6\n* Ny iriana ho sakanana: $7\n\nAzonao atao ny mifandray amin'i $1 na [[{{MediaWiki:Grouppage-sysop}}|mpandrindra]] hafa raha mila miady hevitra momba ny sakana.\nTsy afaka mampiasa ny fahafahana \"{{int:emailuser}}\" ianao raha tsy nanome adiresy azo anoratana anao ao amin'ny [[Special:Preferences|safidin'ny kaontinao]] ary koa raha tsy nosakanana tsy afaka mampiasa azy ianao.\nNy adiresy IP-nao dia $3 ary ny ID ny sakana dia #$5.\nSoraty avokoa ireo antsipirihany eo ambony ireo anatin'ny hataka izay ataonao.",
+       "autoblockedtext": "<strong>Voasakana ny adiresy IP-nao satria nampiasaim-pikambana hafa izay nosakanan'i $1 ilay izy.</strong>\n\n\nNy antony nomeny dia:\n:<em>$2</em>.\n\n* Fiantombohan'ny sakana: $8\n* Fitsaharan'ny sakana: $6\n* Ny iriana ho sakanana: $7\n\nAzonao atao ny mifandray amin'i $1 na [[{{MediaWiki:Grouppage-sysop}}|mpandrindra]] hafa raha mila miady hevitra momba ny sakana.\nTsy afaka mampiasa ny fahafahana \"{{int:emailuser}}\" ianao raha tsy nanome adiresy azo anoratana anao ao amin'ny [[Special:Preferences|safidin'ny kaontinao]] ary koa raha tsy nosakanana tsy afaka mampiasa azy ianao.\nNy adiresy IP-nao dia $3 ary ny ID ny sakana dia #$5.\nSoraty avokoa ireo antsipirihany eo ambony ireo anatin'ny hataka izay ataonao.",
        "blockednoreason": "tsy nisy antony nomeny",
        "whitelistedittext": "Mila $1 aloha ianao vao afaka manova/mamorona pejy eto amin'ity wiki ity.",
        "confirmedittext": "Tsy maintsy marihina ny adiresy imailakao aloha no manova pejy.\nAmpidiro sy Checkeo ny adiresy imailakao amin'ny [[Special:Preferences|safidinao]].",
        "permissionserrorstext": "Tsy afaka manao ilay aza nangatahanao ianao noho ny antony {{PLURAL:$1||maro}} manaraka :",
        "permissionserrorstext-withaction": "{{PLURAL:$1|Tsy manana alalàna ianao|Tsy manana alalàna ianao}} $2. Io ny antony ($2):",
        "recreate-moveddeleted-warn": "'''Tandremo''' : Mamerina pejy efa voafafa ianareo.'''\n\nMarino raha tsara tohizana ny fanovana eto amin'ity pejy ity. Ny laogim-pamafana sy ny famindran-toerana dia eo ambany :",
-       "moveddeleted-notice": "Voafafa ity pejy ity.\nEo ambany eo any laogin'ny famindran-toerana sy ny famafana ho an'ny antsipirihany.",
+       "moveddeleted-notice": "Voafafa ity pejy ity.\nAseho ho  fampatsiahivana eo ambany eo any laogin'ny famindran-toerana sy ny famafana.",
        "log-fulllog": "Hijery ny laogy manontolo",
        "edit-hook-aborted": "Tsy nety ny fanovàna\nTsy nanome antony",
        "edit-gone-missing": "Tsy afaka natao update ilay pejy.\nMety voafafa angamba izy.",
        "page_first": "voalohany",
        "page_last": "farany",
        "histlegend": "Safidim-pahasamihafana: Mariho ireo bokotra radiôn'ny versiona mba hampitahàna azy ireo  ary tsindrony ilay bokotra amin'ny faran'ny pejy: <strong>({{int:cur}})</strong> = fampitahana amin'ny versiona farany indrindra, <strong>({{int:last}})</strong> = fahasamihafana amin'ny versiona farany nialoha ity, <strong>{{int:minoreditletter}}</strong> = fiovana madinika.",
-       "history-fieldset-title": "Karohy ny tantara",
+       "history-fieldset-title": "Hikaroka tantara",
        "history-show-deleted": "Voafafa ihany",
        "histfirst": "antitra indrindra",
        "histlast": "vaovao indrindra",
        "rcshowhidecategorization": "$1 ny fisokajiam-pejy",
        "rcshowhidecategorization-show": "Aseho",
        "rcshowhidecategorization-hide": "Afenina",
-       "rclinks": "Asehoy ny $1 niova farany tato anatin'ny $2 andro",
+       "rclinks": "Haneho ny fiovana $1 farany tanatin'ny andro $2 farany",
        "diff": "Fampitahana",
        "hist": "tant.",
        "hide": "Afeno",
        "recentchangeslinked-feed": "Novaina",
        "recentchangeslinked-toolbox": "Novaina",
        "recentchangeslinked-title": "Fanaraha-maso ny pejy miarak'amin'ny « $1 »",
-       "recentchangeslinked-summary": "Mampiseho ny fanovàna vao haingana ity pejy manokana ity. Voasoratra amin'ny '''sora-matavy''' ny lohaten'ny [[Special:Watchlist|pejy arahinao-maso]].",
+       "recentchangeslinked-summary": "Mampiseho ny fanovàna vao haingana ity pejy manokana ity. Voasoratra amin'ny '''sora-matavy''' ny lohaten'ny [[Special:Watchlist|pejy arahinao-maso]] dia hiseho amin'ny <strong>sora-baventy</strong>.",
        "recentchangeslinked-page": "anaram-pejy :",
        "recentchangeslinked-to": "Ampisehoy ny fanovàn'ny pejy misy rohy makany amin'ny pejy fa tsy atao mivadika",
        "recentchanges-page-added-to-category": "Nampiana tamin'ny sokajy [[:$1]]",
        "revdelete-restricted": "nametraka fanerena ho an'ny mpandrindra",
        "revdelete-unrestricted": "fanerena nesorina tamin'ny mpandrindra",
        "logentry-move-move": "nanova ny anaran'i $3 ho $4 i $1",
+       "logentry-move-move-noredirect": "$1{{GENDER:$2|}} dia namindra ny pejy $3 ho $4 fa tsy namela fihodinana",
        "logentry-newusers-newusers": "{{GENDER:$2|Noforonina}} ny kaontim-pikambana $1",
        "logentry-newusers-create": "{{GENDER:$2|Noforonina}} ny kaontim-pikambana $1",
        "logentry-newusers-create2": "{{GENDER:$2|Noforonin}}'i $1 ny kaomtim-pikambana $3",
index 387dcb9..6283381 100644 (file)
        "resetpass-temp-password": "Привремена лозинка:",
        "resetpass-abort-generic": "Смената на лозинката е откажана од додаток.",
        "resetpass-expired": "Лозинката ви е истечена. Задајте нова лозинка за да се најавите.",
-       "resetpass-expired-soft": "Лозинката ви е истечена и ќе мора да зададете друга. Изберете ја сега, или пак стиснете на „{{int:authprovider-resetpass-skip-label}}“ за да ја зададете подоцна.",
-       "resetpass-validity-soft": "Лозинката ви е неважечка: $1\n\nИзберете друга сега, или пак стиснете на „{{int:authprovider-resetpass-skip-label}}“ за да ја зададете подоцна.",
+       "resetpass-expired-soft": "Лозинката ви е истечена и ќе мора да ја смените. Изберете ја сега, или пак стиснете на „{{int:authprovider-resetpass-skip-label}}“ за да ја смените подоцна.",
+       "resetpass-validity-soft": "Лозинката ви е неважечка: $1\n\nИзберете друга сега, или пак стиснете на „{{int:authprovider-resetpass-skip-label}}“ за да ја смените подоцна.",
        "passwordreset": "Менување на лозинка",
        "passwordreset-text-one": "Пополнете го образецов за да ја измените лозинката.",
        "passwordreset-text-many": "{{PLURAL:$1|Пополнете едно од полињата за добиете привремена лозинка по е-пошта.}}",
        "rcfilters-other-review-tools": "Други алатки за проверка",
        "rcfilters-group-results-by-page": "Групен исход по страница",
        "rcfilters-activefilters": "Активни филтри",
+       "rcfilters-activefilters-hide": "Скриј",
+       "rcfilters-activefilters-show": "Прикажи",
        "rcfilters-advancedfilters": "Напредни филтри",
        "rcfilters-limit-title": "Ставки за приказ",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|промена|промени}}, $2",
        "rcfilters-savedqueries-rename": "Преименувај",
        "rcfilters-savedqueries-setdefault": "Задај како основно",
        "rcfilters-savedqueries-unsetdefault": "Отстрани од основно",
-       "rcfilters-savedqueries-remove": "Ð\9eÑ\82Ñ\81Ñ\82Ñ\80ани",
+       "rcfilters-savedqueries-remove": "Ð\98збÑ\80иÑ\88и",
        "rcfilters-savedqueries-new-name-label": "Назив",
        "rcfilters-savedqueries-new-name-placeholder": "Опишете ја намената на филтерот",
        "rcfilters-savedqueries-apply-label": "Создај филтер",
        "rcfilters-empty-filter": "Нема активни филтри. Прикажани се сите придонеси.",
        "rcfilters-filterlist-title": "Филтри",
        "rcfilters-filterlist-whatsthis": "Како работи ова?",
-       "rcfilters-filterlist-feedbacklink": "Дајте ни ваше мислење за овие (нови) филтерски алатки",
+       "rcfilters-filterlist-feedbacklink": "Дајте ни ваше мислење за овие филтерски алатки",
        "rcfilters-highlightbutton-title": "Истакнување на исход",
        "rcfilters-highlightmenu-title": "Изберете боја",
        "rcfilters-highlightmenu-help": "Изберете боја за да го истакнете ова својство",
index 9b2f488..61b733b 100644 (file)
        "rcfilters-savedqueries-rename": "പേരുമാറ്റുക",
        "rcfilters-savedqueries-setdefault": "സ്വതേയുള്ളതാക്കുക",
        "rcfilters-savedqueries-unsetdefault": "സ്വതേയുള്ളതെന്നത് ഒഴിവാക്കുക",
-       "rcfilters-savedqueries-remove": "à´¨àµ\80à´\95àµ\8dà´\95à´\82 à´\9aàµ\86à´¯àµ\8dà´¯ുക",
+       "rcfilters-savedqueries-remove": "മായàµ\8dà´\95àµ\8dà´\95ുക",
        "rcfilters-savedqueries-new-name-label": "പേര്‌",
        "rcfilters-savedqueries-new-name-placeholder": "അരിപ്പയുടെ ഉപയോഗം വിവരിക്കുക",
        "rcfilters-savedqueries-apply-label": "അരിപ്പ സൃഷ്ടിക്കുക",
        "deadendpages": "അന്തർ വിക്കി കണ്ണിയാൽ ബന്ധിപ്പിക്കപ്പെടാത്ത താളുകൾ",
        "deadendpagestext": "താഴെക്കാണുന്ന താളുകളിൽനിന്ന് {{SITENAME}} സം‌രംഭത്തിലെ മറ്റൊരു താളിലേയ്ക്കും കണ്ണി ചേർത്തിട്ടില്ല.",
        "protectedpages": "സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്ന താളുകൾ",
+       "protectedpages-filters": "അരിപ്പകൾ:",
        "protectedpages-indef": "അനന്തകാലത്തേയ്ക്ക് സംരക്ഷിക്കപ്പെട്ടവ മാത്രം",
        "protectedpages-summary": "ഇപ്പോൾ നിലവിലുള്ള സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ള താളുകളുടെ പട്ടിക ഈ താളിൽ കാണാം. സൃഷ്ടിക്കുന്നതിൽ നിന്നും സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ള തലക്കെട്ടുകൾക്കായി [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] കാണുക.",
        "protectedpages-cascade": "നിർഝരിത സംരക്ഷണങ്ങൾ മാത്രം",
        "pagedata-title": "താൾ വിവരങ്ങൾ",
        "pagedata-not-acceptable": "ഒത്തുപോവുന്ന ഫോർമാറ്റ് കണ്ടെത്താനായില്ല. പിന്തുണയുള്ള മൈം തരങ്ങൾ: $1",
        "pagedata-bad-title": "അസാധുവായ തലക്കെട്ട്: $1.",
+       "unregistered-user-config": "സുരക്ഷാകാരണങ്ങളാൽ രജിസ്റ്റർ ചെയ്യാത്ത ഉപയോക്താക്കൾക്ക് ജാവാസ്ക്രിപ്റ്റ്, സി.എസ്.എസ്., ജെസൺ ഉപയോക്തൃ ഉപതാളുകൾ എടുക്കാൻ കഴിയില്ല.",
+       "passwordpolicies": "രഹസ്യവാക്ക് നയങ്ങൾ",
+       "passwordpolicies-summary": "ഉപയോക്തൃ ഗണത്തിനായി ഈ വിക്കിയിൽ നടപ്പിലുള്ള രഹസ്യവാക്ക് നയങ്ങളുടെ പട്ടികയാണ് ഇത്.",
        "passwordpolicies-group": "ഗണം",
        "passwordpolicies-policies": "നയങ്ങൾ",
        "passwordpolicies-policy-minimalpasswordlength": "രഹസ്യവാക്ക് കുറഞ്ഞത് {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} നീളമുള്ളതാവണം.",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "പ്രവേശിക്കാനായി രഹസ്യവാക്ക് കുറഞ്ഞത് {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} നീളമുള്ളതാവണം.",
-       "passwordpolicies-policy-passwordcannotmatchusername": "ഉപയോക്തൃനാമം തന്നെ രഹസ്യവാക്ക് ആകാൻ പാടില്ല"
+       "passwordpolicies-policy-passwordcannotmatchusername": "ഉപയോക്തൃനാമം തന്നെ രഹസ്യവാക്ക് ആകാൻ പാടില്ല",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "രഹസ്യവാക്ക് കരിമ്പട്ടികയിൽ ഉള്ള രഹസ്യവാക്കുകൾക്ക് സമാനമാകരുത്",
+       "passwordpolicies-policy-maximalpasswordlength": "രഹസ്യവാക്കിന് കുറഞ്ഞത് $1 {{PLURAL:$1|അക്ഷരം|അക്ഷരങ്ങൾ}} നീളമുണ്ടാവണം",
+       "passwordpolicies-policy-passwordcannotbepopular": "രഹസ്യവാക്ക് {{PLURAL:$1|പ്രചുരപ്രചാരത്തിൽ ഉള്ളത്|പ്രചുരപ്രചാരത്തിലുള്ള $1 രഹസ്യവാക്കുകളുടെ പട്ടികയിൽ ഉള്ളത്}} ആകരുത്."
 }
index 229c3d5..f7cd82c 100644 (file)
        "right-userrights": "အသုံးပြုသူ၏အခွင့်အရေးများအားလုံးကို တည်းဖြတ်ရန်",
        "right-userrights-interwiki": "အခြားဝီကီများမှ အသုံးပြုသူများ၏ အသုံးပြုသူအခွင့်အရေးများကို တည်းဖြတ်ရန်",
        "right-sendemail": "အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်",
+       "grant-blockusers": "အသုံးပြုသူများအား ပိတ်ပင်ခြင်းနှင့် ပိတ်ပင်မှု ဖယ်ရှားခြင်း",
        "grant-editmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
        "newuserlogpage": "အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း",
        "newuserlogpagetext": "ဤသည်မှာ အသုံးပြုသူအသစ် ဖန်တီးမှု မှတ်တမ်း ဖြစ်သည်။",
        "whatlinkshere-hidelinks": "လင့်ခ်များ $1 ခု",
        "whatlinkshere-hideimages": "ဖိုင်အချိတ်အဆက်များ $1 ခု",
        "whatlinkshere-filters": "စိစစ်မှုများ",
+       "unblock": "အသုံးပြုသူကို ပိတ်ပင်ထားရာမှ ပြန်ဖွင့်ပေးရန်",
        "blockip": "{{GENDER:$1|အသုံးပြုသူ}} ပိတ်ပင်ရန်",
        "ipaddressorusername": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် -",
        "ipbexpiry": "သက်တမ်းကုန်လွန်ရက် -",
        "unblocked": "[[User:$1|$1]] ကို ပိတ်ပင်ထားရာမှ ပြန်ဖွင့်ပေးလိုက်သည်",
        "unblocked-id": "$1 ကို ပိတ်ပင်ထားမှုကို ဖယ်ရှာလိုက်သည်",
        "blocklist": "ပိတ်ပင်ထားသော အသုံးပြုသူများ",
+       "autoblocklist": "အလိုအလျောက် ပိတ်ပင်မှုများ",
+       "autoblocklist-legend": "အလိုအလျောက် ပိတ်ပင်မှုများ စာရင်း",
+       "autoblocklist-localblocks": "ဒေသဆိုင်ရာ {{PLURAL:$1|အလိုအလျောက် ပိတ်ပင်မှု|အလိုအလျောက် ပိတ်ပင်မှုများ}}",
+       "autoblocklist-otherblocks": "အခြား {{PLURAL:$1|အလိုအလျောက် ပိတ်ပင်မှု|အလိုအလျောက် ပိတ်ပင်မှုများ}}",
        "ipblocklist": "ပိတ်ပင်ထားသော အသုံးပြုသူများ",
        "ipblocklist-legend": "ပိတ်ပင်ထားသော အသုံးပြုသူတစ်ဦးကို ရှာရန်",
        "ipblocklist-submit": "ရှာဖွေရန်",
        "log-action-filter-newusers-create2": "မှတ်ပုံတင်ထားသော အသုံးပြုသူမှ ဖန်တီးမှု",
        "log-action-filter-newusers-autocreate": "အလိုအလျောက် ဖန်တီးမှု",
        "log-action-filter-newusers-byemail": "အီးမေးလ်မှတဆင့် စကားဝှက်ပို့၍ ဖန်တီးမှု",
-       "gotointerwiki": "{{SITENAME}} မှ ထွက်ခွာနေသည်"
+       "gotointerwiki": "{{SITENAME}} မှ ထွက်ခွာနေသည်",
+       "passwordpolicies": "စကားဝှက် မူဝါဒများ",
+       "passwordpolicies-summary": "ဤသည်မှာ ဤဝီကီရှိ အသုံးပြုသူအုပ်စုများအတွက် အကျုံးဝင်သော စကားဝှက် မူဝါဒများ ဖြစ်သည်။"
 }
index fb977f9..3dba87c 100644 (file)
        "recentchanges-label-minor": "Chisto è nu cagnamiénto piccerillo",
        "recentchanges-label-bot": "Cagnamiento affettuato 'a nu bot",
        "recentchanges-label-unpatrolled": "Chisto cagno nun è stato 'ncora verificato",
-       "recentchanges-label-plusminus": "'A grannezza d' 'a paggena s'è cagnata pe' bbia 'e stu nummero 'e bytes",
+       "recentchanges-label-plusminus": "Nummero 'e bytes cagnati int' 'a paggena",
        "recentchanges-legend-heading": "<strong>Liggenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide [[Special:NewPages|'e paggene nove]])",
        "recentchanges-submit": "Faje vedé",
        "nrevisions": "$1 {{PLURAL:$1|verzione|verziune}}",
        "nimagelinks": "Ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
        "ntransclusions": "ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
-       "specialpage-empty": "Nun ce stanno risultate pe' stu report.",
+       "specialpage-empty": "Nun ce stanno risultate pe stu report.",
        "lonelypages": "Paggene orfane",
        "lonelypagestext": "'E paggene ccà abbascio nun so state cullegate o appennute int' 'a n'ati paggene ncopp'a {{SITENAME}}.",
        "uncategorizedpages": "Paggene senza categurìa",
        "ipbother": "N'ata durata:",
        "ipboptions": "2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mese:1 month,3 mise:3 months,6 mise:6 months,1 anno:1 year,infinito:infinite",
        "ipbhidename": "Annascunne 'o nomme utente d' 'a lista 'e cagnamiente e l'ati liste",
-       "ipbwatchuser": "Fà vedé 'a paggena utente e le chiacchieriate 'e st'utente",
+       "ipbwatchuser": "Fà vedé 'a paggena utente e 'e chiacchieriate 'e chist'utente",
        "ipb-disableusertalk": "Nun permettere a st'utente edità 'a paggena 'e chiacchiera d' 'a soja pe' tramente ch'e bloccato",
        "ipb-change-block": "Fremma n'ata vota ll'utente cu ste mpustaziune",
        "ipb-confirm": "Cunferma 'o blocco",
        "version-poweredby-credits": "Sta wiki funziona pe' bbìa 'e <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
        "version-poweredby-others": "ati",
        "version-poweredby-translators": "tradutture 'e translatewiki.net",
-       "version-credits-summary": "Nuje vulessemo tené a mmente 'e perzune ccà abbascio pe' purtà rispetto a 'e cuntribbute 'e lloro ncopp'a [[Special:Version|MediaWiki]].",
+       "version-credits-summary": "Nuje vulessemo tené a mmente 'e perzune ccà abbascio pe purtà rispetto a 'e cuntribbute 'e lloro ncopp'a [[Special:Version|MediaWiki]].",
        "version-license-info": "MediaWiki è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nMediaWiki è destribbuita c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICULARE. Iate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nAvísseve 'a ricevere [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia d' 'a Licienza GNU GPL] cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liggite sta paggena ncopp' 'a l'Internet].",
        "version-software": "Software installato",
        "version-software-product": "Prodotto",
index 45a2f75..7cef2d4 100644 (file)
        "rcfilters-savedqueries-add-new-title": "Filterinstellingen upslån",
        "rcfilters-restore-default-filters": "Standardfilters weerummezetten",
        "rcfilters-clear-all-filters": "Alle filters vortdoon",
+       "rcfilters-show-new-changes": "Låt nyste wysigingen seen",
        "rcfilters-search-placeholder": "Filter wysigingen (gebruuk et menü of söök up filtername)",
        "rcfilters-filterlist-feedbacklink": "Låt uns weaten wat jy van disse (nye) filterhülpmiddels vinden",
        "rcfilters-highlightbutton-title": "Resultåten markeren",
index 343bea8..f91ed5b 100644 (file)
        "rcfilters-other-review-tools": "Andere controlehulpmiddelen",
        "rcfilters-group-results-by-page": "Resultaten per pagina groeperen",
        "rcfilters-activefilters": "Actieve filters",
+       "rcfilters-activefilters-hide": "Verbergen",
+       "rcfilters-activefilters-show": "Weergeven",
        "rcfilters-advancedfilters": "Geavanceerde filters",
        "rcfilters-limit-title": "Resultaten om te tonen",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|wijziging|wijzigingen}}, $2",
index c6225ac..45fe433 100644 (file)
        "resetpass-temp-password": "Tymczasowe hasło:",
        "resetpass-abort-generic": "Zmiana hasła została przerwana przez rozszerzenie.",
        "resetpass-expired": "Twoje hasło wygasło. Proszę ustawić nowe hasło do logowania.",
-       "resetpass-expired-soft": "Twoje hasło wygasło i musi zostać zresetowane. Proszę wybrać nowe hasło albo kliknąć na „{{int:authprovider-resetpass-skip-label}}”, aby zresetować je później.",
-       "resetpass-validity-soft": "Twoje hasło jest niepoprawne: $1\n\nWybierz teraz nowe hasło albo kliknij „{{int:authprovider-resetpass-skip-label}}”, aby zresetować je później.",
+       "resetpass-expired-soft": "Twoje hasło wygasło i musi zostać zmienione. Wybierz nowe hasło albo kliknij na „{{int:authprovider-resetpass-skip-label}}”, aby zmienić je później.",
+       "resetpass-validity-soft": "Twoje hasło jest niepoprawne: $1\n\nWybierz nowe hasło albo kliknij „{{int:authprovider-resetpass-skip-label}}”, aby zmienić je później.",
        "passwordreset": "Wyczyść hasło",
        "passwordreset-text-one": "Wypełnij ten formularz, aby otrzymać tymczasowe hasło na email.",
        "passwordreset-text-many": "{{PLURAL:$1|Wypełnij jedno z poniższych pól, aby otrzymać tymczasowe hasło przez e-mail.}}",
        "rcfilters-other-review-tools": "Inne narzędzia do sprawdzania",
        "rcfilters-group-results-by-page": "Grupuj wyniki według stron",
        "rcfilters-activefilters": "Aktywne filtry",
+       "rcfilters-activefilters-hide": "Ukryj",
+       "rcfilters-activefilters-show": "Pokaż",
        "rcfilters-advancedfilters": "Zaawansowane filtry",
        "rcfilters-limit-title": "Wyników do pokazania",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}, $2",
        "rcfilters-empty-filter": "Brak aktywnych filtrów. Wyświetlane są wszystkie zmiany.",
        "rcfilters-filterlist-title": "Filtry",
        "rcfilters-filterlist-whatsthis": "Jak to działa?",
-       "rcfilters-filterlist-feedbacklink": "Napisz co sądzisz o tych nowych narzędziach filtrowania",
+       "rcfilters-filterlist-feedbacklink": "Napisz nam, co sądzisz o tych narzędziach filtrowania",
        "rcfilters-highlightbutton-title": "Podświetl wyniki",
        "rcfilters-highlightmenu-title": "Wybierz kolor",
        "rcfilters-highlightmenu-help": "Wybierz kolor, aby podświetlić tę właściwość",
index 05dcfbf..726c303 100644 (file)
        "page_first": "prima",
        "page_last": "ùltima",
        "histlegend": "Confront antra version diferente: che as selession-a le casele dle version che a veul e peui che a sgnaca ël boton për anandié ël process.<br />\nLegenda: (cor) = diferense con la version corenta,\n(prim) = diferense con la version prima, c = modìfica cita",
-       "history-fieldset-title": "Serca për revision",
+       "history-fieldset-title": "Sërché dle revision",
        "history-show-deleted": "Mach ëscancelà",
        "histfirst": "ij pì vej",
        "histlast": "ij pì recent",
        "searchprofile-advanced-tooltip": "Sërché ant jë spassi nominaj përsonalisà",
        "search-result-size": "$1 ({{PLURAL:$2|un|$2}} mòt)",
        "search-result-category-size": "{{PLURAL:$1|1 mèmber|$1 mèmber}} ({{PLURAL:$2|1 sot-categorìa|$2 sot-categorìe}}, {{PLURAL:$3|1 archivi|$3 archivi}})",
-       "search-redirect": "(rediression da $1)",
+       "search-redirect": "(ridiression da $1)",
        "search-section": "(session $1)",
        "search-category": "(categorìa $1)",
        "search-file-match": "(a corëspond al contnù d'archivi)",
        "recentchangeslinked-feed": "Modìfiche colegà",
        "recentchangeslinked-toolbox": "Modìfiche colegà",
        "recentchangeslinked-title": "Modìfiche ch'a-i intro con \"$1\"",
-       "recentchangeslinked-summary": "Scriv ël nòm ëd na pàgina për vëdde ij cangiament ans ëd pàgine colegà anvers o da cola pàgina. Ij cangiament a pàgine 'd [[Special:Watchlist|your Watchlist]] a son <strong>neirèt</strong>.",
+       "recentchangeslinked-summary": "Scrive un nòm ëd na pàgina për vëdde ij cangiament an s'ëd pàgine colegà vers o da cola pàgina. (Për vëdde ij mèmber ëd na categorìa, ch'a scriva {{ns:category}}:Nòm ëd categorìa). Ij cangiament a dle pàgine dla [[Special:Watchlist|ròba ch'as ten sot-euj]] a son an <strong>grassèt</strong>.",
        "recentchangeslinked-page": "Nòm ëd la pàgina:",
        "recentchangeslinked-to": "Mostré nopà le modìfiche a le pàgine colegà a cola dàita",
        "upload": "Carié n'archivi",
        "booksources-text": "Ambelessì sota a-i é na lista d'àotri sit che a vendo dij lìber neuv e dë sconda man, e che a peulo ëdcò smon-e dj'anformassion rësgoard ai test che a l'é antramentr che a sërca:",
        "booksources-invalid-isbn": "L'ISBN dàit a smija che a sia pa vàlid; ch'a contròla s'a-i é n'eror an copiand da la sorgiss original.",
        "specialloguserlabel": "Esecutor:",
-       "speciallogtitlelabel": "Obietiv (titol o {{ns:user}}:utent për l'utilisator):",
+       "speciallogtitlelabel": "Obietiv (tìtol o {{ns:user}}:stranòm ëd l'utent):",
        "log": "Registr",
        "all-logs-page": "Tùit ij registr pùblich",
        "alllogstext": "Visualisassion combinà ëd tùit ij registr ëd {{SITENAME}}.\nA peul arstrenze la visualisassion an selessionand la sòrt ëd registr, lë stranòm utent (sensìbil a majùscol/minùscol), e la pàgina anteressà (sensìbil a majùscol/minùscol).",
        "tooltip-feed-rss": "Fluss RSS për costa pàgina",
        "tooltip-feed-atom": "Fluss Atom për costa pàgina.",
        "tooltip-t-contributions": "Vardé la lista dle contribussion ëd {{GENDER:$1|cost utent}}",
-       "tooltip-t-emailuser": "Manda 'n mëssaggi email a {{GENDER:$1|cost|costa}} utent",
+       "tooltip-t-emailuser": "Mandé 'n mëssaggi ëd pòsta eletrònica a {{GENDER:$1|cost|cost}} utent",
        "tooltip-t-info": "Pi d'anformassio su costa pàgina",
        "tooltip-t-upload": "Carié n'archivi ëd figure ò son.",
        "tooltip-t-specialpages": "Lista ëd tute le pàgine speciaj.",
        "version-libraries": "Biblioteche anstalà",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Version",
-       "redirect": "Readressament da archivi, utent, pàgina o ID ëd revision",
+       "redirect": "Ridiression për ID d'archivi, utent, pàgina, revision o argistr",
        "redirect-summary": "Costa pàgina special a ponta a n'archivi (dàit ël nòm dl'archivi), na pàgina (dàit n'ID ëd revision o n'ID ëd pàgina) o na pàgina d'utent (dàit n'identificativ numérich a l'utent). Usagi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Andé",
        "redirect-lookup": "Arserca:",
index ca356b6..a77ff2d 100644 (file)
        "resetpass-submit-loggedin": "Alterar senha",
        "resetpass-submit-cancel": "Cancelar",
        "resetpass-wrong-oldpass": "Senha temporária ou atual inválida.\nVocê pode já ter alterado com sucesso a sua senha, ou solicitado uma nova senha temporária.",
-       "resetpass-recycled": "Por favor, redefina sua nova senha para uma diferente da atual.",
+       "resetpass-recycled": "Por favor, altere sua senha para algo diferente da sua senha atual.",
        "resetpass-temp-emailed": "Você está autenticado com o código temporário enviado. Para finalizar a autenticação, você deve inserir uma nova senha aqui:",
        "resetpass-temp-password": "Senha temporária:",
        "resetpass-abort-generic": "Uma extensão cancelou a alteração da senha.",
        "resetpass-expired": "Sua senha expirou. Por favor insira uma nova senha para autenticar-se.",
-       "resetpass-expired-soft": "Sua senha expirou e necessita ser resetada. Por favor escolha uma nova agora, ou clique \"{{int:authprovider-resetpass-skip-label}}\" para resetar mais tarde.",
-       "resetpass-validity-soft": "Sua senha não é válida: $1\n\nPor favor escolha uma nova senha agora, ou clique \"{{int:authprovider-resetpass-skip-label}}\" para redefini-la mais tarde.",
+       "resetpass-expired-soft": "Sua senha expirou e precisa ser alterada. Escolha uma nova senha agora ou clique em \"{{int:authprovider-resetpass-skip-label}}\" para alterá-la mais tarde.",
+       "resetpass-validity-soft": "Sua senha não é válida: $1\n\nPor favor escolha uma nova senha agora, ou clique \"{{int:authprovider-resetpass-skip-label}}\" para mudar depois.",
        "passwordreset": "Redefinir senha",
        "passwordreset-text-one": "Complete este formulário para trocar sua senha.",
        "passwordreset-text-many": "{{PLURAL:$1|Preencha um dos campos para trocar sua senha.}}",
        "prefs-help-gender": "A configuração dessa preferência é opcional.\nO ''software'' utiliza seu valor para tratar e mencionar você a outros usando o gênero gramatical adequado.\nEssa informação será pública.",
        "email": "E-mail",
        "prefs-help-realname": "O fornecimento de seu nome verdadeiro é opcional.\nCaso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu trabalho.",
-       "prefs-help-email": "O endereço de correio eletrônico é opcional, mas será necessário para recriar sua senha caso esqueça a antiga.",
+       "prefs-help-email": "O endereço de e-mail é opcional, mas será necessário para recriar sua senha caso esqueça a antiga.",
        "prefs-help-email-others": "Você também pode optar por permitir que outros entrem em contato com você através de sua página de usuário ou de discussão sem ter de revelar seus dados pessoais.",
        "prefs-help-email-required": "O endereço de e-mail é requerido.",
        "prefs-info": "Informações básicas",
        "rcfilters-other-review-tools": " Outras ferramentas de revisão:",
        "rcfilters-group-results-by-page": "Agrupar resultado por página",
        "rcfilters-activefilters": "Filtros ativos",
+       "rcfilters-activefilters-hide": "Ocultar",
+       "rcfilters-activefilters-show": "Exibir",
        "rcfilters-advancedfilters": "Filtros avançados",
        "rcfilters-limit-title": "Resultados para mostrar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|mudança|mudanças}}, $2",
        "rcfilters-savedqueries-rename": "Renomear",
        "rcfilters-savedqueries-setdefault": "Definir como padrão",
        "rcfilters-savedqueries-unsetdefault": "Remover como padrão",
-       "rcfilters-savedqueries-remove": "Remover",
+       "rcfilters-savedqueries-remove": "Excluir",
        "rcfilters-savedqueries-new-name-label": "Nome",
        "rcfilters-savedqueries-new-name-placeholder": "Descreva a finalidade do filtro",
        "rcfilters-savedqueries-apply-label": "Criar filtro",
        "rcfilters-empty-filter": "Nenhum filtro ativo. Todas as contribuições são mostradas.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-whatsthis": "Como funcionam estes?",
-       "rcfilters-filterlist-feedbacklink": "Diga-nos o que você pensa sobre estas (novas) ferramentas de filtragem",
+       "rcfilters-filterlist-feedbacklink": "Conte-nos o que você pensa sobre essas ferramentas de filtragem",
        "rcfilters-highlightbutton-title": "Destacar resultados",
        "rcfilters-highlightmenu-title": "Selecione uma cor",
        "rcfilters-highlightmenu-help": "Selecione uma cor para realçar esta propriedade",
        "rcfilters-watchlist-showupdated": "As alterações nas páginas que você não visitou desde as mudanças ocorridas estão em <strong>negrito</strong>, com marcadores sólidos.",
        "rcfilters-preference-label": "Ocultar a versão melhorada das Mudanças Recentes",
        "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
+       "rcfilters-watchlist-preference-label": "Ocultar a versão melhorada das páginas vigiadas",
+       "rcfilters-watchlist-preference-help": "Reverte o redesenho da interface em 2017 e todas as ferramentas adicionadas nessa altura e desde então.",
        "rcfilters-filter-showlinkedfrom-label": "Mostrar alterações nas páginas ligadas de",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Páginas ligadas da</strong> página selecionada",
        "rcfilters-filter-showlinkedto-label": "Mostrar alterações nas páginas que ligam para",
        "dellogpage": "Registro de eliminações",
        "dellogpagetext": "Abaixo uma lista das eliminações mais recentes.",
        "deletionlog": "registro de eliminações",
+       "log-name-create": "Registo de criação de páginas",
+       "log-description-create": "Encontra abaixo uma lista das criações de páginas mais recentes.",
+       "logentry-create-create": "$1 {{GENDER:$2|criou}} a página $3",
        "reverted": "Revertido para versão anterior",
        "deletecomment": "Motivo:",
        "deleteotherreason": "Justificativa adicional:",
        "sp-contributions-newbies-title": "Contribuições de contas novas",
        "sp-contributions-blocklog": "registro de bloqueios",
        "sp-contributions-suppresslog": "Contribuições de {{GENDER:$1|usuário}} suprimidas",
-       "sp-contributions-deleted": "contribuições eliminadas",
+       "sp-contributions-deleted": "{{GENDER:$1|contribuições}} eliminadas",
        "sp-contributions-uploads": "envios",
        "sp-contributions-logs": "registros",
        "sp-contributions-talk": "discussão",
-       "sp-contributions-userrights": "gerenciamento de privilégios",
+       "sp-contributions-userrights": "{{GENDER:$1|gestão}} dos privilégios",
        "sp-contributions-blocked-notice": "Este usuário atualmente está bloqueado. O registro de bloqueio mais recente é fornecido abaixo para referência:",
        "sp-contributions-blocked-notice-anon": "Este endereço IP encontra-se bloqueado.\nSegue, para referência, a entrada mais recente no registro de bloqueios:",
        "sp-contributions-search": "Navegar pelas contribuições",
        "rawhtml-notallowed": "As tags &lt;html&gt; não podem ser usadas fora das páginas normais.",
        "gotointerwiki": "Saindo {{SITENAME}}",
        "gotointerwiki-invalid": "O título especificado é inválido.",
-       "gotointerwiki-external": "Você está prestes a sair {{SITENAME}} para visitar [[$2]] que é um website separado.\n\n[$1 Continuar para $1].",
+       "gotointerwiki-external": "Você está prestes a sair {{SITENAME}} para visitar [[$2]] que é um website separado.\n\n'''[$1 Continuar para $1]'''",
        "undelete-cantedit": "Você não pode restaurar esta página, porque você não está autorizado a editar esta página.",
        "undelete-cantcreate": "Você não pode restaurar esta página, pois não há uma página com este nome e você não está autorizado a criar esta página.",
        "pagedata-title": "Dados de página",
index cb216ce..eed76f1 100644 (file)
        "resetpass-submit-loggedin": "Alterar palavra-passe",
        "resetpass-submit-cancel": "Cancelar",
        "resetpass-wrong-oldpass": "Palavra-passe temporária ou atual inválida.\nPode ter já alterado a sua palavra-passe ou solicitado uma nova palavra-passe temporária.",
-       "resetpass-recycled": "Redefina a sua palavra-passe para uma diferente da atual, por favor.",
+       "resetpass-recycled": "Altere a sua palavra-passe para uma diferente da atual, por favor.",
        "resetpass-temp-emailed": "Iniciou a sessão com um código temporário.\nPara completar a autenticação, tem de definir uma palavra-passe nova aqui:",
        "resetpass-temp-password": "Palavra-passe temporária:",
        "resetpass-abort-generic": "A alteração da palavra-passe foi cancelada por uma extensão.",
        "resetpass-expired": "A sua palavra-passe expirou. Por favor, defina uma nova para iniciar a sessão.",
-       "resetpass-expired-soft": "A sua palavra-passe expirou e tem de ser redefinida. Escolha uma nova agora ou clique \"{{int:authprovider-resetpass-skip-label}}\" para redefini-la mais tarde.",
-       "resetpass-validity-soft": "A sua palavra-passe não é válida: $1\n\nPor favor, escolha uma nova palavra-passe agora, ou clique em \"{{int:authprovider-resetpass-skip-label}}\" para redefini-la mais tarde.",
+       "resetpass-expired-soft": "A sua palavra-passe expirou e tem de ser alterada. Escolha uma nova agora ou clique \"{{int:authprovider-resetpass-skip-label}}\" para alterá-la mais tarde.",
+       "resetpass-validity-soft": "A sua palavra-passe não é válida: $1\n\nEscolha uma palavra-passe nova agora, ou clique em \"{{int:authprovider-resetpass-skip-label}}\" para alterá-la mais tarde, por favor.",
        "passwordreset": "Redefinir palavra-passe",
        "passwordreset-text-one": "Preencha este formulário para receber uma palavra-passe temporária por correio eletrónico.",
        "passwordreset-text-many": "{{PLURAL:$1|Preencha um dos campos para receber uma palavra-passe temporária por correio eletrónico.}}",
        "rcfilters-other-review-tools": "Outras ferramentas de revisão",
        "rcfilters-group-results-by-page": "Agrupar resultados por página",
        "rcfilters-activefilters": "Filtros ativos",
+       "rcfilters-activefilters-hide": "Ocultar",
+       "rcfilters-activefilters-show": "Mostrar",
        "rcfilters-advancedfilters": "Filtros avançados",
        "rcfilters-limit-title": "Resultados a mostrar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|mudança|mudanças}}, $2",
        "rcfilters-savedqueries-rename": "Alterar o nome",
        "rcfilters-savedqueries-setdefault": "Ativar por padrão",
        "rcfilters-savedqueries-unsetdefault": "Remover por padrão",
-       "rcfilters-savedqueries-remove": "Remover",
+       "rcfilters-savedqueries-remove": "Eliminar",
        "rcfilters-savedqueries-new-name-label": "Nome",
        "rcfilters-savedqueries-new-name-placeholder": "Descreve o propósito do filtro",
        "rcfilters-savedqueries-apply-label": "Criar filtro",
        "rcfilters-empty-filter": "Não há filtros ativos. São mostradas todas as contribuições.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-whatsthis": "Como é que funcionam?",
-       "rcfilters-filterlist-feedbacklink": "Diga-nos o que acha das (novas) ferramentas de filtragem",
+       "rcfilters-filterlist-feedbacklink": "Diga-nos o que acha destas ferramentas de filtragem",
        "rcfilters-highlightbutton-title": "Realçar resultados",
        "rcfilters-highlightmenu-title": "Selecionar uma cor",
        "rcfilters-highlightmenu-help": "Selecione uma cor para realçar esta propriedade",
index 94ffcf6..ee09e97 100644 (file)
        "rcfilters-other-review-tools": "Used as a heading for the community collection of other links on [[Special:RecentChanges]] when RCFilters are enabled.",
        "rcfilters-group-results-by-page": "A label for the checkbox describing whether the results in [[Special:RecentChanges]] are grouped by page when RCFilters are enabled.",
        "rcfilters-activefilters": "{{doc-important|Translations of this message should not more than 3 cm long, otherwise it will make bad user experiences for potential mobile users.}}\nTitle for the filters selection showing the active filters.",
+       "rcfilters-activefilters-hide": "Label for the button that hides the active filters list and dropdown in [[Special:RecentChanges]].\n{{Identical|Hide}}",
+       "rcfilters-activefilters-show": "Label for the button that shows the active filters list and dropdown in [[Special:RecentChanges]].\n{{Identical|Show}}",
+       "rcfilters-activefilters-hide-tooltip": "Tooltip for the button that hides the active filters list and dropdown in [[Special:RecentChanges]].",
+       "rcfilters-activefilters-show-tooltip": "Tooltip for the button that shows the active filters list and dropdown in [[Special:RecentChanges]].",
        "rcfilters-advancedfilters": "Title for the buttons allowing the user to switch to the various advanced filters views.",
        "rcfilters-limit-title": "Title for the options to change the number of results shown.",
        "rcfilters-limit-and-date-label": "Title for the button that opens the operation to control how many results to show and in which time period to search. \n\nParameters: $1 - Number of results shown\n\n$2 - Time period to search. One of {{msg-mw|rcfilters-days-title}} or {{msg-mw|rcfilters-hours-title}} is used as $2\n{{Identical|Change}}",
index 69d6cb6..5994991 100644 (file)
        "resetpass-abort-generic": "Изменение пароля было прервано расширением.",
        "resetpass-expired": "Срок действия вашего пароля истёк. Пожалуйста, установите новый пароль для входа в систему.",
        "resetpass-expired-soft": "Срок действия вашего пароля истёк, и теперь он должен быть изменён. Пожалуйста, выберите новый пароль или нажмите «{{int:authprovider-resetpass-skip-label}}», чтобы изменить его позже.",
-       "resetpass-validity-soft": "Задан некорректный пароль: $1\n\nПожалуйста, выберите новый пароль или нажмите «{{int:authprovider-resetpass-skip-label}}», чтобы сбросить его позже.",
+       "resetpass-validity-soft": "Задан некорректный пароль: $1\n\nПожалуйста, выберите новый пароль или нажмите «{{int:authprovider-resetpass-skip-label}}», чтобы изменить его позже.",
        "passwordreset": "Сброс пароля",
        "passwordreset-text-one": "Заполните эту форму, чтобы сбросить свой пароль.",
        "passwordreset-text-many": "{{PLURAL:$1|Заполните одно из полей для получения временного пароля по электронной почте.}}",
        "rcfilters-other-review-tools": "Другие инструменты проверки",
        "rcfilters-group-results-by-page": "Группировать результаты по странице",
        "rcfilters-activefilters": "Активные фильтры",
+       "rcfilters-activefilters-hide": "Скрыть",
+       "rcfilters-activefilters-show": "Показать",
        "rcfilters-advancedfilters": "Расширенные фильтры",
        "rcfilters-limit-title": "Результаты для показа",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|изменение|изменения|изменений}}, $2",
index 3017efb..5dae666 100644 (file)
@@ -9,7 +9,8 @@
                        "Macofe",
                        "Indus Asia",
                        "BukhariSaeed",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Tweety"
                ]
        },
        "tog-underline": "ڳنڍڻي هيٺان لڪير:",
        "summary-preview": "تت جي پيش نگاھ:",
        "subject-preview": "موضوع جي پيش نگاھ:",
        "blockedtitle": "واپرائيندڙ بندشيل آهي",
-       "blockedtext": "'''توھان جي واپرائيندڙ-نانءُ يا آءِ پي کي بندشيو ويو آھي.'''\n\nبندش $1 ھنئي. جڏھن تہ ڄاڻايل سبب ''$2'' آهي.\n\n\n* بندش جو آغاز: $8\n* بندش جو انجام: $6\n* بندش جو هدف: $7\n\nاھڙي روڪ تي بحث ڪرڻ لاءِ توھان $1 يا ڪنھن ٻي [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سان رابطو ڪري سگھو ٿا. جيڪڏهن توھان جو درست [[Special:Preferences|کاتي جي ترجيحن]] ۾ درست برقٽپال پتو درج ٿيل نہ آهي تہ توهان 'هن واپرائيندڙ کي برقٽپال ڪريو' وارو فيچر نہ ٿا \nاستعمال ڪري سگھو. توھان جو ھاڻوڪو آءِپي پتو $3 آھي، ۽ بندش سڃاڻپ $5 آهي. مھرباني ڪري ڪنھن بہ پڇا ڳاڇا يا لھ و چڙھ لاءِ انھن مان ڪنھن ھڪ يا ٻنھي جو حوالو ڏيندا.",
+       "blockedtext": "<strong>توھان جي واپرائيندڙ-نانءُ يا آءِ پي کي بندشيو ويو آھي.</strong>\n\nبندش $1 ھنئي. جڏھن تہ ڄاڻايل سبب ''$2'' آهي.\n\n\n* بندش جو آغاز: $8\n* بندش جو انجام: $6\n* بندش جو هدف: $7\n\nاھڙي روڪ تي بحث ڪرڻ لاءِ توھان $1 يا ڪنھن ٻي [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سان رابطو ڪري سگھو ٿا. جيڪڏهن توھان جو درست [[Special:Preferences|کاتي جي ترجيحن]] ۾ درست برقٽپال پتو درج ٿيل نہ آهي تہ توهان 'هن واپرائيندڙ کي برقٽپال ڪريو' وارو فيچر نہ ٿا \nاستعمال ڪري سگھو. توھان جو ھاڻوڪو آءِپي پتو $3 آھي، ۽ بندش سڃاڻپ $5 آهي. مھرباني ڪري ڪنھن بہ پڇا ڳاڇا يا لھ و چڙھ لاءِ انھن مان ڪنھن ھڪ يا ٻنھي جو حوالو ڏيندا.",
        "blockednoreason": "سبب اڻڄاڻايل",
        "whitelistedittext": "صفحا سنوارڻ لاءِ مھرباني ڪري $1.",
        "confirmedittext": "صفحا سنوارڻ کان اڳ توھان کي پنھنجي برقٽپال پتي جي تصديق ڪرڻي پوندي.\nمھرباني ڪري [[Special:Preferences|واپرائيندڙ جي ترجيحن]] ذريعي پنھنجو برقٽپال پتو ڄاڻايو ۽ تصديقيو.",
        "recentchangeslinked-feed": "لاڳاپيل تبديليون",
        "recentchangeslinked-toolbox": "لاڳاپيل تبديليون",
        "recentchangeslinked-title": "\"$1\" سان لاڳاپيل تبديليون",
+       "recentchangeslinked-summary": "تبديليون ڏسڻ لاءِ صفحي جو نالو هڻو پوءِ اها هن صفحي تي هجن يا ڳنڍيل صفحي تي. (زمري جارُڪن ڏسڻ لاءِ، {{ns:زمرو}}:زمري جو نالو)هڻو. [[Special:Watchlist|your Watchlist]] صفحي تي تبديليون <strong>bold</strong> ۾ آهن.",
        "recentchangeslinked-page": "صفحي جو نالو:",
        "recentchangeslinked-to": "رڳو ڄاڻايل صفحي سان ڳانڍيل صفحن ۾ ٿيل تبديليون نمايو",
        "upload": "فائيل چاڙھيو",
        "anoncontribs": "ڀاڱيداريون",
        "contribsub2": "{{GENDER:$3|$1}} ($2) لاءِ",
        "contributions-userdoesnotexist": "واپرائيندڙ کاتو \"$1\" درج ٿيل نہ آهي.",
+       "nocontribs": "هن معيار تي ڪي به ترميمون نه لڌيون.",
        "uctop": "(هاڻوڪو)",
        "month": "مھيني کان (۽ اڳوڻيون):",
        "year": "سال کان (۽ اڳوڻيون):",
        "pageinfo-language": "صفحي جي مواد جي ٻولي",
        "pageinfo-content-model": "صفحي جي مواد جو ماڊل",
        "pageinfo-robot-index": "اجازت ڏنل",
+       "pageinfo-robot-noindex": "اجازت ناهي",
        "pageinfo-watchers": "صفحا ڏسندڙن جو انگ",
        "pageinfo-few-watchers": "$1 کان گھٽ {{PLURAL:$1|ڏسندڙ}}",
        "pageinfo-redirects-name": "ھن صفحي ڏانھن ڇوريل صفحن جو انگ",
index 82a500a..69a38b4 100644 (file)
        "savechanges": "Uložiť zmeny",
        "publishpage": "Publikovať stránku",
        "publishchanges": "Publikovať zmeny",
+       "publishchanges-start": "Zverejniť zmeny…",
        "preview": "Náhľad",
        "showpreview": "Zobraziť náhľad",
        "showdiff": "Zobraziť rozdiely",
index e47c28c..90ec173 100644 (file)
        "rcfilters-other-review-tools": "Druga orodja za pregled",
        "rcfilters-group-results-by-page": "Združi rezultate po strani",
        "rcfilters-activefilters": "Dejavni filtri",
+       "rcfilters-activefilters-hide": "Skrij",
+       "rcfilters-activefilters-show": "Prikaži",
        "rcfilters-advancedfilters": "Napredni filtri",
        "rcfilters-limit-title": "Rezultati za prikaz",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb}}, $2",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika strani",
        "statistics-header-edits": "Statistika urejanj",
-       "statistics-header-users": "Uporabniška statistika",
+       "statistics-header-users": "Statistika uporabnikov",
        "statistics-header-hooks": "Drugi statistični podatki",
        "statistics-articles": "Članki",
        "statistics-pages": "Strani",
index b634673..440d1c8 100644 (file)
        "compareselectedversions": "Упореди изабране измене",
        "showhideselectedversions": "Промени видљивост изабраних измена",
        "editundo": "поништи",
-       "diff-empty": "(Ð\9dема разлике)",
+       "diff-empty": "(нема разлике)",
        "diff-multi-sameuser": "({{PLURAL:$1|Једна међуизмена истог корисника није приказана|$1 међуизмене истог корисника нису приказане|$1 међуизмена истог корисника није приказано}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Једна међуизмена|$1 међуизмене|$1 међуизмена}} од стране {{PLURAL:$2|још једног корисника није приказана|$2 корисника није приказано}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
        "tags": "Важеће ознаке измена",
        "tag-filter": "Филтер за [[Special:Tags|ознаке]]:",
        "tag-filter-submit": "Филтрирај",
-       "tag-list-wrapper": "([[Special:Tags|$1 {{PLURAL:$1|ознака|ознаке|ознака}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ознака|Ознаке}}]]: $2)",
        "tag-mw-contentmodelchange": "промена модела садржаја",
        "tag-mw-contentmodelchange-description": "Измене које мењају модел садржаја странице",
        "tag-mw-new-redirect": "ново преусмерење",
        "tag-mw-removed-redirect-description": "Измене које мењају постојеће преусмерење у страницу без преусмерења",
        "tag-mw-changed-redirect-target": "промењено одредиште преусмерења",
        "tag-mw-changed-redirect-target-description": "Измене које мењају одредиште преусмерења",
-       "tag-mw-blank": "Страница испражњена",
+       "tag-mw-blank": "страница испражњена",
        "tag-mw-blank-description": "Измене које бришу читав садржај странице",
-       "tag-mw-replace": "Уклоњена већина текста",
+       "tag-mw-replace": "уклоњена већина текста",
        "tag-mw-replace-description": "Измене које уклањају више од 90% садржаја странице",
        "tag-mw-rollback": "враћање",
        "tag-mw-rollback-description": "Измене које враћају страницу на претходне измене",
index a571177..3a72579 100644 (file)
        "resetpass-submit-loggedin": "Ändra lösenord",
        "resetpass-submit-cancel": "Avbryt",
        "resetpass-wrong-oldpass": "Ogiltigt tillfälligt eller nuvarande lösenord.\nDu kanske redan har lyckats ändra ditt lösenord eller begärt ett nytt tillfälligt lösenord.",
-       "resetpass-recycled": "Var god Ã¥terställ ditt lösenord till någonting annat än ditt aktuella lösenord.",
+       "resetpass-recycled": "Var god Ã¤ndra ditt lösenord till någonting annat än ditt aktuella lösenord.",
        "resetpass-temp-emailed": "Du loggade in med en temporär kod som skickats via e-post.\nFör att slutföra inloggningen måste du ange ett nytt lösenord här:",
        "resetpass-temp-password": "Tillfälligt lösenord:",
        "resetpass-abort-generic": "Lösenordsändring av har avbrutits av ett tillägg.",
        "resetpass-expired": "Ditt lösenord har gått ut. Var god ange ett nytt lösenord för att logga in.",
-       "resetpass-expired-soft": "Ditt lösenord har gÃ¥tt ut och behöver Ã¥terställas. Var god välj ett nytt lösenord nu eller klicka pÃ¥ \"{{int:authprovider-resetpass-skip-label}}\" för att Ã¥terställa det senare.",
-       "resetpass-validity-soft": "Ditt lösenord Ã¤r ogiltigt: $1\n\nVar god välj ett nytt lösenord nu eller klicka pÃ¥ \"{{int:authprovider-resetpass-skip-label}}\" för att Ã¥terställa det senare.",
+       "resetpass-expired-soft": "Ditt lösenord har gÃ¥tt ut och behöver Ã¤ndras. Var god välj ett nytt lösenord nu eller klicka pÃ¥ \"{{int:authprovider-resetpass-skip-label}}\" för att Ã¤ndra det senare.",
+       "resetpass-validity-soft": "Ditt lösenord Ã¤r ogiltigt: $1\n\nVar god välj ett nytt lösenord nu eller klicka pÃ¥ \"{{int:authprovider-resetpass-skip-label}}\" för att Ã¤ndra det senare.",
        "passwordreset": "Återställ lösenord",
        "passwordreset-text-one": "Fyll i detta formulär för att återställa ditt lösenord.",
        "passwordreset-text-many": "{{PLURAL:$1|Fyll i ett av fälten för att få ett tillfälligt lösenord via e-post.}}",
        "rcfilters-other-review-tools": "Andra granskningsverktyg",
        "rcfilters-group-results-by-page": "Gruppera resultat efter sida",
        "rcfilters-activefilters": "Aktiva filter",
+       "rcfilters-activefilters-hide": "Dölj",
+       "rcfilters-activefilters-show": "Visa",
        "rcfilters-advancedfilters": "Avancerade filter",
        "rcfilters-limit-title": "Resultat att visa",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|ändring|ändringar}}, $2",
        "speciallogtitlelabel": "Mål (titel eller {{ns:user}}:användarnamn för användare):",
        "log": "Loggar",
        "logeventslist-submit": "Visa",
-       "all-logs-page": "Alla publika loggar",
+       "all-logs-page": "Alla offentliga loggar",
        "alllogstext": "Kombinerad visning av alla tillgängliga loggar för {{SITENAME}}.\nDu kan avgränsa sökningen och få färre träffar genom att ange typ av logg, användarnamn (skiftlägeskänsligt), eller berörd sida (också skiftlägeskänsligt).",
        "logempty": "Inga matchande träffar i loggen.",
        "log-title-wildcard": "Sök efter sidtitlar som börjar med texten",
        "tag-mw-undo": "Ångra",
        "tag-mw-undo-description": "Redigeringar som ångrar föregående redigeringar med ångralänken",
        "tags-title": "Märken",
-       "tags-intro": "Denna sida listar de taggar som mjukvaran kan markera en redigering med, och deras betydelse.",
+       "tags-intro": "Denna sida listar de märken som programvaran kan markera en redigering med, och deras betydelse.",
        "tags-tag": "Märkesnamn",
        "tags-display-header": "Utseende på listor över ändringar",
        "tags-description-header": "Full beskrivning av betydelse",
index 9f36f6c..8c7b63a 100644 (file)
@@ -5,7 +5,8 @@
                        "Nemo bis",
                        "Reedy",
                        "아라",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Raphael Merx"
                ]
        },
        "tog-underline": "Subliña ligasaun sira:",
        "recentchanges-label-newpage": "Pájina foun",
        "recentchanges-label-minor": "Ne'e mudansa ki'ik",
        "recentchanges-label-bot": "Edita husi prosesu automátiku (\"bot\")",
+       "rcfilters-activefilters-hide": "Subar",
+       "rcfilters-activefilters-show": "Hatudu",
+       "rcfilters-savedqueries-remove": "Hapus",
        "rcshowhideminor": "$1 muda ki-ki'ik",
        "rcshowhideminor-show": "Hatudu",
        "rcshowhidebots": "$1 bot sira",
index be64a1d..ba46946 100644 (file)
        "rcfilters-savedqueries-add-new-title": "Хәзерге фильтр көйләнмәләрен саклау",
        "rcfilters-clear-all-filters": "Барлык филтерләрне чистарту",
        "rcfilters-search-placeholder": "Фильтрланы соңгы үзгәртү (карау яисә кертүне башлау)",
-       "rcfilters-filterlist-feedbacklink": "Әлеге (яңа) фильтрлау кораллары турында турында фикер калдырыгыз",
+       "rcfilters-filterlist-feedbacklink": "Әлеге фильтрлау кораллары турында турында фикер калдырыгыз",
        "rcfilters-filtergroup-authorship": "Үзгәртүләрнең авторлыгы",
        "rcfilters-filter-editsbyself-label": "Сезнең үзгәртүләр",
        "rcfilters-filter-editsbyself-description": "Сезнең кертемегез.",
index bad9d86..a05f234 100644 (file)
        "rcfilters-savedqueries-rename": "Đổi tên",
        "rcfilters-savedqueries-setdefault": "Đặt làm mặc định",
        "rcfilters-savedqueries-unsetdefault": "Loại bỏ mặc định",
-       "rcfilters-savedqueries-remove": "Loại bỏ",
+       "rcfilters-savedqueries-remove": "Xóa",
        "rcfilters-savedqueries-new-name-label": "Tên",
        "rcfilters-savedqueries-new-name-placeholder": "Miêu tả mục đích của bộ lọc",
        "rcfilters-savedqueries-apply-label": "Tạo bộ lọc",
        "rcfilters-empty-filter": "Không có bộ lọc hiện hành. Tất cả các đóng góp được hiển thị.",
        "rcfilters-filterlist-title": "Bộ lọc",
        "rcfilters-filterlist-whatsthis": "Chúng hoạt động làm sao?",
-       "rcfilters-filterlist-feedbacklink": "Cho chúng tôi biết bạn cảm thấy sao về các công cụ bộ lọc mới này",
+       "rcfilters-filterlist-feedbacklink": "Hãy cho chúng tôi biết bạn cảm thấy sao về các công cụ bộ lọc này",
        "rcfilters-highlightbutton-title": "Làm nổi bật kết quả",
        "rcfilters-highlightmenu-title": "Chọn màu",
        "rcfilters-highlightmenu-help": "Chọn màu để làm nổi bật thuộc tính này",
        "dellogpage": "Nhật trình xóa",
        "dellogpagetext": "Dưới đây là danh sách các trang bị xóa gần đây nhất.",
        "deletionlog": "nhật trình xóa",
+       "logentry-create-create": "$1 {{GENDER:$2|đã tạo}} trang $3",
        "reverted": "Đã hồi phục một phiên bản cũ",
        "deletecomment": "Lý do:",
        "deleteotherreason": "Lý do khác/bổ sung:",
index bbff36b..7f670e1 100644 (file)
        "recentchangeslinked-feed": "Mga may kalabotan nga binag-o",
        "recentchangeslinked-toolbox": "Mga may kalabotan nga binag-o",
        "recentchangeslinked-title": "Mga pagbag-o kasumpay ha ''$1''",
-       "recentchangeslinked-summary": "Ini nga taramdan hin pagbag-o nga lab-as nga hinimo ha mga pakli nga nakasumpay tikang a naka-specifico nga pakli (o ha api han uska specifico nga kaarangay).\nMga pakli ha [[Special:Watchlist|imo angay timan-an]] in naka-'''bold'''.",
+       "recentchangeslinked-summary": "Ibutang an ngaran han pakli basi maipakita an mga pakli nga nakasumapy pakadto o pakadi hinin nga pakli. (Basi makit-an an mga api hini nga kaarangay, ibutang an {{ns:category}}:Ngaran han kaarangay). An mga binalyuan ha mga pakli ha [[Special:Watchlist|your Watchlist]] nakasurat nga <strong>madakmol</strong>.",
        "recentchangeslinked-page": "Ngaran han pakli:",
        "recentchangeslinked-to": "Igpakita lugod an mga pagbabag-o han mga pakli nga nahisumpay ha ginhatag nga pakli",
        "upload": "Pagkarga hin file",
index 9ba53b3..fa87948 100644 (file)
        "rcfilters-empty-filter": "קיין אַקטיווע פילטערס. אלע ביישטייערונגען געוויזן.",
        "rcfilters-filterlist-title": "פֿילטערס",
        "rcfilters-filterlist-whatsthis": "ווי ארבעט דאס?",
+       "rcfilters-filterlist-feedbacklink": "זאָגט אונדז וואָס איז אייער מיינונג בנוגע פילטער אינסטרומענטן",
        "rcfilters-highlightbutton-title": "ארויסשטאַרצן רעזולטאַטן",
        "rcfilters-highlightmenu-title": "אויסקלויבן א קאליר",
        "rcfilters-filterlist-noresults": "קיין פֿילטערס נישט געטראפֿן",
        "log-action-filter-protect-unprotect": "אראפנעמען שיץ",
        "authmanager-userdoesnotexist": "באניצער קאנטע \"$1\" איז נישט איינגעשריבן.",
        "authmanager-realname-label": "עכטער נאָמען",
+       "authprovider-resetpass-skip-label": "איבערהיפן",
        "revid": "רעוויזיע $1"
 }
index 297bd33..2ed7c43 100644 (file)
        "search-section": "(ⴰⵙⴱⴹⵓ $1)",
        "search-suggest": "ⵉⵙ ⵜⵅⵙⴷ ⴰⴷ ⵜⵉⵏⵉⴷ: $1",
        "search-interwiki-more": "(ⵓⴳⴳⴰⵔ)",
-       "searchall": "ⴰⴽⴽ",
+       "searchall": "âµ\8eâ´°âµ\95âµ\95â´°",
        "search-nonefound": "ⵓⵔ ⵍⵍⵉⵏⵜ ⵜⵢⴰⴼⵓⵜⵉⵏ ⵉⵎⵙⴰⵙⴰⵏ ⴷ ⵓⵙⵓⵜⵔ.",
+       "powersearch-toggleall": "ⵎⴰⵕⵕⴰ",
        "mypreferences": "ⵉⵙⵎⵏⵢⵉⴼⵏ",
        "prefs-watchlist-days": "ⵓⵙⵙⴰⵏ ⵜⵓⵙⴽⵏⵉⵏ ⴳ ⵓⵎⵓⵖ ⵓⵙⵎⵓⵇⵇⵍ",
        "recentchangesdays": "ⵓⵙⵙⴰⵏ ⵜⵓⵙⴽⵏⵉⵏ ⴳ ⵉⵙⵏⴼⵉⵍⵏ ⵉⵎⴳⴳⵓⵔⴰ",
        "prefs-signature": "ⴰⵙⴳⵎⴹ",
        "userrights-reason": "ⵜⴰⵎⵏⵜⵉⵍⵜ:",
        "group-sysop": "ⵉⵏⵎⵀⴰⵍⵏ",
+       "group-all": "(ⵎⴰⵕⵕⴰ)",
        "right-edit": "ⵙⵏⴼⵍ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "right-upload": "ⵙⴽⵜⵔ ⵉⴼⴰⵢⵍⵓⵜⵏ",
        "right-upload_by_url": "ⵙⴽⵜⵔ ⴰⴼⴰⵢⵍⵓ ⵙⴳ URL",
        "booksources-search-legend": "ⵔⵣⵓ ⵅⴼ ⵉⴷⵍⵉⵙⵏ ⵏ ⵓⵙⴰⴳⵎ",
        "booksources-search": "ⵔⵣⵓ",
        "log": "ⵉⵣⵎⵎⴻⵎⵏ",
+       "checkbox-all": "ⵎⴰⵕⵕⴰ",
        "allpages": "ⵎⴰⵕⵕⴰ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "allarticles": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⴰⴽⴽ",
        "allpagessubmit": "ⴷⴷⵓ",
        "categories": "ⵉⵙⵎⵉⵍⵏ",
        "sp-deletedcontributions-contribs": "ⵜⵓⵎⵓⵜⵉⵏ",
        "listgrouprights-members": "ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵉⴳⵎⴰⵎⵏ",
+       "emailmessage": "ⵜⵓⵣⵉⵏⵜ:",
        "usermessage-editor": "ⵓⴷⵓⵙ ⵏ ⵓⵎⵢⴰⵣⴰⵏ",
        "watchlist": "ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ",
        "mywatchlist": "ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ",
        "delete_and_move_confirm": "ⵢⴰⵀ, ⴽⴽⵙ ⵜⴰⵙⵏⴰ",
        "export": "ⵙⵙⵓⴼⵖ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "allmessagesname": "ⵉⵙⵎ",
+       "allmessages-filter-all": "ⵎⴰⵕⵕⴰ",
        "allmessages-language": "ⵜⵓⵜⵍⴰⵢⵜ:",
        "allmessages-filter-translate": "ⵙⵙⵓⵖⵍ",
        "thumbnail-more": "ⵙⵙⵉⵎⵖⵓⵔ",
        "watchlisttools-clear": "ⵙⴼⴹ ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ",
        "watchlisttools-view": "ⵙⴽⵏ ⵉⵙⵏⵉⴼⵉⵍⵏ ⴷ ⵢⵓⵙⴰⵏ",
        "watchlisttools-edit": "ⵥⵕ ⴷ ⵜⵙⵏⴼⵍⴷ ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ",
+       "version-poweredby-translators": "ⵉⵎⵙⵖⵓⵍⵏ ⵏ translatewiki.net",
        "redirect-submit": "ⴷⴷⵓ",
        "redirect-value": "ⴰⵣⴰⵍ",
        "redirect-user": "ID ⵏ ⵓⵎⵙⵙⵎⵔⵙ",
        "logentry-newusers-create": "{{GENDER:$2|ⵉⵙⵏⴼⵍ ⵓⵏⵙⵙⵎⵔⵙ|ⵜⵙⵏⴼⵍ ⵜⵏⵙⵙⵎⵔⵙⵜ}} $1 ⴰⵎⵉⴹⴰⵏ ⵏⵙ",
        "logentry-upload-upload": "{{GENDER:$2|ⵉⵙⴽⵜⵔ|ⵜⵙⴽⵜⵔ}} $1 $3",
        "rightsnone": "(ⵓⵍⴰ ⵢⴰⵏ)",
+       "feedback-message": "ⵜⵓⵣⵉⵏⵜ:",
        "feedback-thanks-title": "ⵜⴰⵏⵎⵎⵉⵔⵜ!",
        "searchsuggest-search": "ⵔⵣⵓ ⴳ {{SITENAME}}",
        "duration-days": "$1 ⵏ {{PLURAL:$1|ⵡⴰⵙⵙ|ⵡⵓⵙⵙⴰⵏ}}",
index 2be48a6..0bc666c 100644 (file)
        "resetpass-submit-loggedin": "更改密码",
        "resetpass-submit-cancel": "取消",
        "resetpass-wrong-oldpass": "临时密码或当前密码无效。您可能已经更改了您的密码,或者请求了新的临时密码。",
-       "resetpass-recycled": "请重置您的密码为与当前密码不同的密码。",
+       "resetpass-recycled": "请更改您的密码为与当前密码不同的密码。",
        "resetpass-temp-emailed": "您使用了通过电子邮件发送的临时密码登录。要完成登录,您必须在此设置一个新密码:",
        "resetpass-temp-password": "临时密码:",
        "resetpass-abort-generic": "密码更改已经被扩展程序中止。",
        "resetpass-expired": "您的密码已经到期。请设置新登录密码。",
-       "resetpass-expired-soft": "您的密码已经到期,需要重置。请现在更换新密码,或单击“{{int:authprovider-resetpass-skip-label}}”以稍后重置。",
-       "resetpass-validity-soft": "您的密码无效:$1\n\n请选择一个新密码,或单击“{{int:authprovider-resetpass-skip-label}}”以稍后重置。",
+       "resetpass-expired-soft": "您的密码已经到期,需要更改。请现在更换新密码,或单击“{{int:authprovider-resetpass-skip-label}}”以稍后更改。",
+       "resetpass-validity-soft": "您的密码无效:$1\n\n请选择一个新密码,或单击“{{int:authprovider-resetpass-skip-label}}”以稍后更改。",
        "passwordreset": "重置密码",
        "passwordreset-text-one": "请完成此表单来通过电子邮件接收临时密码。",
        "passwordreset-text-many": "{{PLURAL:$1|填写其中一个字段以通过电子邮件接收临时密码。}}",
        "rcfilters-other-review-tools": "其他复核工具",
        "rcfilters-group-results-by-page": "按页面分组结果",
        "rcfilters-activefilters": "应用的过滤器",
+       "rcfilters-activefilters-hide": "隐藏",
+       "rcfilters-activefilters-show": "显示",
        "rcfilters-advancedfilters": "高级过滤器",
        "rcfilters-limit-title": "要显示的结果",
        "rcfilters-limit-and-date-label": "$1次{{PLURAL:$1|更改}},$2",
index 40d7f2b..626a454 100644 (file)
        "resetpass-submit-loggedin": "變更密碼",
        "resetpass-submit-cancel": "取消",
        "resetpass-wrong-oldpass": "無效的臨時或現有密碼。\n您可能已經變更了密碼,或者已經請求一個新的臨時密碼。",
-       "resetpass-recycled": "請重設您的密碼為一個與目前不同的密碼。",
+       "resetpass-recycled": "請將您的密碼更改成與目前內容不同的密碼。",
        "resetpass-temp-emailed": "您使用臨時電子郵件傳送的密碼登入。\n要完成登入,您必須在這裡設定一個新密碼:",
        "resetpass-temp-password": "臨時密碼:",
        "resetpass-abort-generic": "擴充套件已中止了變更密碼的操作。",
        "resetpass-expired": "您的密碼已過期。請設定一個新的密碼以登入。",
-       "resetpass-expired-soft": "您的密碼已過期,需要重新設定。請現在設定您的新密碼,或點選 \"{{int:authprovider-resetpass-skip-label}}\" 稍後再重設。",
-       "resetpass-validity-soft": "您的密碼無效:$1 \n\n請現在設定您的新密碼,或點選 \"{{int:authprovider-resetpass-skip-label}}\" 稍後再重設。",
+       "resetpass-expired-soft": "您的密碼已過期,需要作出更改。請現在設定您的新密碼,或點選 \"{{int:authprovider-resetpass-skip-label}}\" 來事後更改。",
+       "resetpass-validity-soft": "您的密碼無效:$1 \n\n請現在設定您的新密碼,或點選 \"{{int:authprovider-resetpass-skip-label}}\" 來事後更改。",
        "passwordreset": "重新設定密碼",
        "passwordreset-text-one": "完成此表單,透過電子郵件傳送臨時密碼以重新設定您的密碼。",
        "passwordreset-text-many": "{{PLURAL:$1|填寫其中一個欄位以透過電子郵件接收臨時密碼。}}",
        "rcfilters-other-review-tools": "其他檢閱工具",
        "rcfilters-group-results-by-page": "按頁面分組結果",
        "rcfilters-activefilters": "使用的篩選器",
+       "rcfilters-activefilters-hide": "隱藏",
+       "rcfilters-activefilters-show": "顯示",
        "rcfilters-advancedfilters": "進階查詢條件",
        "rcfilters-limit-title": "要顯示的結果",
        "rcfilters-limit-and-date-label": "$1次{{PLURAL:$1|變更}},$2",
        "rcfilters-savedqueries-rename": "重新命名",
        "rcfilters-savedqueries-setdefault": "設為預設",
        "rcfilters-savedqueries-unsetdefault": "取消設為預設",
-       "rcfilters-savedqueries-remove": "除",
+       "rcfilters-savedqueries-remove": "除",
        "rcfilters-savedqueries-new-name-label": "名稱",
        "rcfilters-savedqueries-new-name-placeholder": "說明查詢條件的用途",
        "rcfilters-savedqueries-apply-label": "建立查詢條件",
        "rcfilters-empty-filter": "沒有使用中的過濾條件。已顯示所有的貢獻。",
        "rcfilters-filterlist-title": "過濾條件",
        "rcfilters-filterlist-whatsthis": "這些是怎樣工作的?",
-       "rcfilters-filterlist-feedbacklink": "告訴我們您對這些(新)過濾工具有什麼想法",
+       "rcfilters-filterlist-feedbacklink": "告訴我們您對這些過濾工具有什麼想法",
        "rcfilters-highlightbutton-title": "明顯標示結果",
        "rcfilters-highlightmenu-title": "選擇顏色",
        "rcfilters-highlightmenu-help": "選擇要明顯標示此屬性的色彩",
index 80fd7b9..245bb47 100644 (file)
@@ -538,6 +538,7 @@ abstract class Maintenance {
                if ( $this->getDbType() > 0 ) {
                        $this->addOption( 'dbuser', 'The DB user to use for this script', false, true );
                        $this->addOption( 'dbpass', 'The password to use for this script', false, true );
+                       $this->addOption( 'dbgroupdefault', 'The default DB group to use.', false, true );
                }
 
                # Save additional script dependant options to display
@@ -1118,7 +1119,7 @@ abstract class Maintenance {
         */
        public function finalSetup() {
                global $wgCommandLineMode, $wgShowSQLErrors, $wgServer;
-               global $wgDBadminuser, $wgDBadminpassword;
+               global $wgDBadminuser, $wgDBadminpassword, $wgDBDefaultGroup;
                global $wgDBuser, $wgDBpassword, $wgDBservers, $wgLBFactoryConf;
 
                # Turn off output buffering again, it might have been turned on in the settings files
@@ -1140,6 +1141,11 @@ abstract class Maintenance {
                if ( $this->mDbPass ) {
                        $wgDBadminpassword = $this->mDbPass;
                }
+               if ( $this->hasOption( 'dbgroupdefault' ) ) {
+                       $wgDBDefaultGroup = $this->getOption( 'dbgroupdefault', null );
+
+                       MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->destroy();
+               }
 
                if ( $this->getDbType() == self::DB_ADMIN && isset( $wgDBadminuser ) ) {
                        $wgDBuser = $wgDBadminuser;
diff --git a/maintenance/populateChangeTagDef.php b/maintenance/populateChangeTagDef.php
new file mode 100644 (file)
index 0000000..3b32c00
--- /dev/null
@@ -0,0 +1,192 @@
+<?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
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Populate and improve accuracy of change_tag_def statistics.
+ *
+ * @ingroup Maintenance
+ */
+class PopulateChangeTagDef extends Maintenance {
+       /** @var Wikimedia\Rdbms\ILBFactory */
+       protected $lbFactory;
+
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription( 'Populate and improve accuracy of change_tag_def statistics' );
+               $this->addOption( 'dry-run', 'Print debug info instead of actually deleting' );
+               $this->setBatchSize( 1000 );
+               $this->addOption(
+                       'sleep',
+                       'Sleep time (in seconds) between every batch',
+                       false,
+                       true
+               );
+       }
+
+       public function execute() {
+               global $wgChangeTagsSchemaMigrationStage;
+               $this->lbFactory = MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $this->setBatchSize( $this->getOption( 'batch-size', $this->getBatchSize() ) );
+
+               $this->countDown( 5 );
+               if ( $wgChangeTagsSchemaMigrationStage < MIGRATION_NEW ) {
+                       $this->updateCountTag();
+                       $this->backpopulateChangeTagId();
+               } else {
+                       $this->updateCountTagId();
+               }
+
+               // TODO: Implement
+               // $this->cleanZeroCountRows();
+       }
+
+       private function updateCountTagId() {
+               $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA );
+
+               // This query can be pretty expensive, don't run it on master
+               $res = $dbr->select(
+                       'change_tag',
+                       [ 'ct_tag_id', 'hitcount' => 'count(*)' ],
+                       [],
+                       __METHOD__,
+                       [ 'GROUP BY' => 'ct_tag_id' ]
+               );
+
+               $dbw = $this->lbFactory->getMainLB()->getConnection( DB_MASTER );
+
+               foreach ( $res as $row ) {
+                       if ( !$row->ct_tag_id ) {
+                               continue;
+                       }
+
+                       if ( $this->hasOption( 'dry-run' ) ) {
+                               $this->output( 'This row will be updated: ' . implode( ', ', $row ) . "\n" );
+                               continue;
+                       }
+
+                       $dbw->update(
+                               'change_tag_def',
+                               [ 'ctd_count' => $row->hitcount ],
+                               [ 'ctd_id' => $row->ct_tag_id ],
+                               __METHOD__
+                       );
+               }
+               $this->lbFactory->waitForReplication();
+       }
+
+       private function updateCountTag() {
+               $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA );
+
+               // This query can be pretty expensive, don't run it on master
+               $res = $dbr->select(
+                       'change_tag',
+                       [ 'ct_tag', 'hitcount' => 'count(*)' ],
+                       [],
+                       __METHOD__,
+                       [ 'GROUP BY' => 'ct_tag' ]
+               );
+
+               $dbw = $this->lbFactory->getMainLB()->getConnection( DB_MASTER );
+
+               foreach ( $res as $row ) {
+                       // Hygiene check
+                       if ( !$row->ct_tag ) {
+                               continue;
+                       }
+
+                       if ( $this->hasOption( 'dry-run' ) ) {
+                               $this->output( 'This row will be updated: ' . $row->ct_tag . $row->hitcount . "\n" );
+                               continue;
+                       }
+
+                       $dbw->upsert(
+                               'change_tag_def',
+                               [
+                                       'ctd_name' => $row->ct_tag,
+                                       'ctd_user_defined' => 0,
+                                       'ctd_count' => $row->hitcount
+                               ],
+                               [ 'ctd_name' ],
+                               [ 'ctd_count' => $row->hitcount ],
+                               __METHOD__
+                       );
+               }
+               $this->lbFactory->waitForReplication();
+       }
+
+       private function backpopulateChangeTagId() {
+               $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA );
+               $changeTagDefs = $dbr->select(
+                       'change_tag_def',
+                       [ 'ctd_name', 'ctd_id' ],
+                       [],
+                       __METHOD__
+               );
+
+               foreach ( $changeTagDefs as $row ) {
+                       $this->backpopulateChangeTagPerTag( $row->ctd_name, $row->ctd_id );
+               }
+       }
+
+       private function backpopulateChangeTagPerTag( $tagName, $tagId ) {
+               $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA );
+               $dbw = $this->lbFactory->getMainLB()->getConnection( DB_MASTER );
+               $sleep = (int)$this->getOption( 'sleep', 10 );
+               $lastId = 0;
+               while ( true ) {
+                       // Given that indexes might not be there, it's better to use replica
+                       $ids = $dbr->selectFieldValues(
+                               'change_tag',
+                               'ct_id',
+                               [ 'ct_tag' => $tagName, 'ct_tag_id' => null, 'ct_id > ' . $lastId ],
+                               __METHOD__,
+                               [ 'LIMIT' => $this->getBatchSize() ]
+                       );
+
+                       if ( !$ids ) {
+                               break;
+                       }
+                       $lastId = end( $ids );
+
+                       if ( $this->hasOption( 'dry-run' ) ) {
+                               $this->output(
+                                       "These ids will be changed to have \"{$tagId}\" as tag id: " . implode( ', ', $ids ) . "\n"
+                               );
+                               continue;
+                       }
+
+                       $dbw->update(
+                               'change_tag',
+                               [ 'ct_tag_id' => $tagId ],
+                               [ 'ct_id' => $ids ],
+                               __METHOD__
+                       );
+
+                       $this->lbFactory->waitForReplication();
+                       if ( $sleep > 0 ) {
+                               sleep( $sleep );
+                       }
+               }
+       }
+
+}
+
+$maintClass = PopulateChangeTagDef::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
index 36328e0..45533aa 100644 (file)
     "eslint": "4.9.0",
     "eslint-config-wikimedia": "0.5.0",
     "eslint-plugin-qunit": "3.2.1",
-    "grunt": "1.0.1",
+    "grunt": "1.0.3",
     "grunt-banana-checker": "0.6.0",
     "grunt-contrib-copy": "1.0.0",
-    "grunt-contrib-watch": "1.0.1",
+    "grunt-contrib-watch": "1.1.0",
     "grunt-eslint": "20.1.0",
     "grunt-jsonlint": "1.1.0",
     "grunt-karma": "2.0.0",
index 93ef4b1..b7ecd10 100644 (file)
@@ -321,17 +321,10 @@ return [
                'styles' => 'resources/src/jquery.tablesorter/jquery.tablesorter.less',
                'messages' => [ 'sort-descending', 'sort-ascending' ],
                'dependencies' => [
-                       'jquery.tablesorter.styles',
                        'mediawiki.RegExp',
                        'mediawiki.language.months',
                ],
        ],
-       'jquery.tablesorter.styles' => [
-               'targets' => [ 'desktop', 'mobile' ],
-               'styles' => [
-                       'resources/src/jquery/jquery.tablesorter.styles.less',
-               ],
-       ],
        'jquery.textSelection' => [
                'scripts' => 'resources/src/jquery/jquery.textSelection.js',
                'dependencies' => 'jquery.client',
@@ -1894,6 +1887,10 @@ return [
                'messages' => [
                        'rcfilters-tag-remove',
                        'rcfilters-activefilters',
+                       'rcfilters-activefilters-hide',
+                       'rcfilters-activefilters-show',
+                       'rcfilters-activefilters-hide-tooltip',
+                       'rcfilters-activefilters-show-tooltip',
                        'rcfilters-advancedfilters',
                        'rcfilters-group-results-by-page',
                        'rcfilters-limit-title',
index 3bea471..ce24b0d 100644 (file)
@@ -8,10 +8,7 @@ table.jquery-tablesorter {
                cursor: pointer;
                background-repeat: no-repeat;
                background-position: center right;
-               // Note: To avoid reflows, a padding is set in
-               // the jquery.tableSorter.styles module as a render blocking style.
-               // Please do not add any CSS rules here that impact the positioning of the element
-               // e.g. padding, margin, position or float.
+               padding-right: 21px;
        }
 
        th.headerSortUp {
diff --git a/resources/src/jquery/jquery.tablesorter.styles.less b/resources/src/jquery/jquery.tablesorter.styles.less
deleted file mode 100644 (file)
index eda939d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.client-js {
-       // Reserve space for table sortable controls
-       table.sortable > thead > tr > th:not( .unsortable ) {
-               padding-right: 21px;
-       }
-}
index cd3f684..3e900f0 100644 (file)
@@ -15,6 +15,8 @@
         * @cfg {string} savedQueriesPreferenceName Where to save the saved queries
         * @cfg {string} daysPreferenceName Preference name for the days filter
         * @cfg {string} limitPreferenceName Preference name for the limit filter
+        * @cfg {string} collapsedPreferenceName Preference name for collapsing and showing
+        *  the active filters area
         * @cfg {boolean} [normalizeTarget] Dictates whether or not to go through the
         *  title normalization to separate title subpage/parts into the target= url
         *  parameter
@@ -26,6 +28,7 @@
                this.savedQueriesPreferenceName = config.savedQueriesPreferenceName;
                this.daysPreferenceName = config.daysPreferenceName;
                this.limitPreferenceName = config.limitPreferenceName;
+               this.collapsedPreferenceName = config.collapsedPreferenceName;
                this.normalizeTarget = !!config.normalizeTarget;
 
                this.requestCounter = {};
                this.updateNumericPreference( 'usenewrc', Number( newValue ) );
        };
 
+       /**
+        * Update the collapsed state value
+        *
+        * @param {boolean} isCollapsed Filter area is collapsed
+        */
+       mw.rcfilters.Controller.prototype.updateCollapsedState = function ( isCollapsed ) {
+               this.updateNumericPreference( this.collapsedPreferenceName, Number( isCollapsed ) );
+       };
+
        /**
         * Update a numeric preference with a new value
         *
index d181532..c918df8 100644 (file)
@@ -15,6 +15,8 @@
                                savedQueriesPreferenceName = mw.config.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
                                daysPreferenceName = mw.config.get( 'wgStructuredChangeFiltersDaysPreferenceName' ),
                                limitPreferenceName = mw.config.get( 'wgStructuredChangeFiltersLimitPreferenceName' ),
+                               activeFiltersCollapsedName = mw.config.get( 'wgStructuredChangeFiltersCollapsedPreferenceName' ),
+                               initialCollapsedState = mw.config.get( 'wgStructuredChangeFiltersCollapsedState' ),
                                filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
                                changesListModel = new mw.rcfilters.dm.ChangesListViewModel( $initialFieldset ),
                                savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
@@ -25,6 +27,7 @@
                                                savedQueriesPreferenceName: savedQueriesPreferenceName,
                                                daysPreferenceName: daysPreferenceName,
                                                limitPreferenceName: limitPreferenceName,
+                                               collapsedPreferenceName: activeFiltersCollapsedName,
                                                normalizeTarget: specialPage === 'Recentchangeslinked'
                                        }
                                );
                                savedQueriesModel,
                                changesListModel,
                                {
+                                       $wrapper: $( 'body' ),
                                        $topSection: $topSection,
                                        $filtersContainer: $( '.rcfilters-container' ),
                                        $changesListContainer: $( '.mw-changeslist, .mw-changeslist-empty' ),
-                                       $formContainer: $initialFieldset
+                                       $formContainer: $initialFieldset,
+                                       collapsed: initialCollapsedState
                                }
                        );
 
index 11972de..c6d8d17 100644 (file)
@@ -6,6 +6,8 @@
 @rcfilters-head-min-height: 210px;
 @rcfilters-head-margin-bottom: 20px;
 @rcfilters-wl-head-min-height: 270px;
+@rcfilters-head-min-height-collapsed: 130px;
+@rcfilters-wl-head-min-height-collapsed: 200px;
 
 // Corrections for the standard special page
 .client-js {
                min-height: @rcfilters-wl-head-min-height;
        }
 
+       .mw-rcfilters-collapsed {
+               .rcfilters-head {
+                       min-height: @rcfilters-head-min-height-collapsed;
+               }
+
+               // On the watchlist, reserve a bit more
+               &.mw-special-Watchlist .rcfilters-head {
+                       min-height: @rcfilters-wl-head-min-height-collapsed;
+               }
+       }
+
        .mw-recentchanges-toplinks {
                padding-left: 0.5em;
 
index 148e37b..a2b3eb7 100644 (file)
                border-bottom: 0;
                background-color: @colorGray15;
                border-radius: 2px 2px 0 0;
-               padding: 0.6em;
+               padding: 0 0.6em 0.6em 0.6em;
                margin-top: 1em;
                line-height: normal;
        }
 
+       .mw-rcfilters-collapsed & {
+               // Taking from the handle, since border-bottom is set on the
+               // filters view which is hidden when collapsed
+               border-bottom: 1px solid @colorGray10;
+
+               &.mw-rcfilters-ui-filterTagMultiselectWidget.oo-ui-widget-enabled .oo-ui-tagMultiselectWidget-handle {
+                       padding-bottom: 0;
+                       padding-top: 0;
+               }
+
+               .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-hideshow {
+                       border-left: 1px solid @colorGray10;
+               }
+
+               &.oo-ui-tagMultiselectWidget-outlined {
+                       width: unset;
+                       max-width: 100%;
+               }
+
+               // Hide inner elements
+               .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-filters,
+               .mw-rcfilters-ui-filterTagMultiselectWidget-views {
+                       display: none;
+               }
+       }
+
        .oo-ui-tagMultiselectWidget.oo-ui-widget-enabled &-animate.oo-ui-tagMultiselectWidget-handle {
                .transition( background-color 500ms ease-out );
        }
                background-color: @background-color-primary;
        }
 
+       &-hideshowButton.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+               // Override the OOUI default for buttons
+               font-weight: normal;
+       }
+
        &-wrapper {
-               .mw-rcfilters-ui-table {
-                       margin-top: 0.3em;
+               &-top {
+                       display: flex;
+                       flex-wrap: nowrap;
+                       justify-content: space-between;
+               }
+
+               &-title {
+                       padding: 0.6em 0; // Same top padding as the handle
+                       white-space: nowrap;
+                       min-width: 0; // This has to be here to enable the text truncation
+                       overflow: hidden;
+                       text-overflow: ellipsis;
+               }
+
+               &-hideshow {
+                       margin-left: 0.5em;
+                       padding-left: 0.5em;
                }
 
                &-content {
                        &-title {
                                font-weight: bold;
                                color: @colorGray5;
+                               white-space: nowrap;
                        }
 
                        &-savedQueryTitle {
                                color: @colorGray2;
+                               padding-left: 1em;
                                font-weight: bold;
                                vertical-align: top;
-                               margin-left: 1em;
-                               width: ~'calc( 100% - 10em )';
                                overflow: hidden;
                                text-overflow: ellipsis;
                                white-space: nowrap;
index e72fbda..6746237 100644 (file)
@@ -8,7 +8,12 @@
        &-placeholder {
                &-title {
                        font-weight: bold;
-                       margin-bottom: 1em;
+                       margin-bottom: 0.4375em; // 7px / 16
+                       margin-top: 0.1875em; // 3px / 16
+               }
+
+               &-description {
+                       line-height: 1.5em; // 24px / 16
                }
 
                // Extra specificity needed to override OOUI rule that sets white-space: nowrap;
index 953df5b..96f2f0b 100644 (file)
@@ -12,6 +12,9 @@
         * @param {mw.rcfilters.dm.SavedQueriesModel} savedQueriesModel Saved queries model
         * @param {Object} config Configuration object
         * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+        * @cfg {jQuery} [$wrapper] A jQuery object for the wrapper of the general
+        *  system. If not given, falls back to this widget's $element
+        * @cfg {boolean} [collapsed] Filter area is collapsed
         */
        mw.rcfilters.ui.FilterTagMultiselectWidget = function MwRcfiltersUiFilterTagMultiselectWidget( controller, model, savedQueriesModel, config ) {
                var rcFiltersRow,
                this.model = model;
                this.queriesModel = savedQueriesModel;
                this.$overlay = config.$overlay || this.$element;
+               this.$wrapper = config.$wrapper || this.$element;
                this.matchingQuery = null;
                this.currentView = this.model.getCurrentView();
+               this.collapsed = false;
 
                // Parent
                mw.rcfilters.ui.FilterTagMultiselectWidget.parent.call( this, $.extend( true, {
                        classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-resetButton' ]
                } );
 
+               this.hideShowButton = new OO.ui.ButtonWidget( {
+                       framed: false,
+                       flags: [ 'progressive' ],
+                       classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-hideshowButton' ]
+               } );
+               this.toggleCollapsed( !!config.collapsed );
+
                if ( !mw.user.isAnon() ) {
                        this.saveQueryButton = new mw.rcfilters.ui.SaveFiltersPopupButtonWidget(
                                this.controller,
 
                // Events
                this.resetButton.connect( this, { click: 'onResetButtonClick' } );
+               this.hideShowButton.connect( this, { click: 'onHideShowButtonClick' } );
                // Stop propagation for mousedown, so that the widget doesn't
                // trigger the focus on the input and scrolls up when we click the reset button
                this.resetButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+               this.hideShowButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
                this.model.connect( this, {
                        initialize: 'onModelInitialize',
                        update: 'onModelUpdate',
                                .append(
                                        $( '<div>' )
                                                .addClass( 'mw-rcfilters-ui-row' )
+                                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views' )
                                                .append(
                                                        $( '<div>' )
                                                                .addClass( 'mw-rcfilters-ui-cell' )
 
                // Build the content
                $contentWrapper.append(
-                       title.$element,
-                       this.savedQueryTitle.$element,
                        $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-table' )
+                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-top' )
                                .append(
-                                       rcFiltersRow
-                               )
+                                       $( '<div>' )
+                                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-title' )
+                                               .append(
+                                                       title.$element,
+                                                       this.savedQueryTitle.$element
+                                               ),
+                                       $( '<div>' )
+                                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-hideshow' )
+                                               .append(
+                                                       this.hideShowButton.$element
+                                               )
+                               ),
+                       $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-table' )
+                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-filters' )
+                               .append( rcFiltersRow )
                );
 
                // Initialize
         * @inheritdoc
         */
        mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onMouseDown = function ( e ) {
-               if ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {
+               if ( !this.collapsed && !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {
                        this.menu.toggle();
 
                        return false;
                }
        };
 
+       /**
+        * Respond to hide/show button click
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onHideShowButtonClick = function () {
+               this.toggleCollapsed();
+       };
+
+       /**
+        * Toggle the collapsed state of the filters widget
+        *
+        * @param {boolean} isCollapsed Widget is collapsed
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.toggleCollapsed = function ( isCollapsed ) {
+               isCollapsed = isCollapsed === undefined ? !this.collapsed : !!isCollapsed;
+
+               this.collapsed = isCollapsed;
+
+               if ( isCollapsed ) {
+                       // If we are collapsing, close the menu, in case it was open
+                       // We should make sure the menu closes before the rest of the elements
+                       // are hidden, otherwise there is an unknown error in jQuery as ooui
+                       // sets and unsets properties on the input (which is hidden at that point)
+                       this.menu.toggle( false );
+               }
+               this.input.setDisabled( isCollapsed );
+               this.hideShowButton.setLabel( mw.msg(
+                       isCollapsed ? 'rcfilters-activefilters-show' : 'rcfilters-activefilters-hide'
+               ) );
+               this.hideShowButton.setTitle( mw.msg(
+                       isCollapsed ? 'rcfilters-activefilters-show-tooltip' : 'rcfilters-activefilters-hide-tooltip'
+               ) );
+
+               // Toggle the wrapper class, so we have min height values correctly throughout
+               this.$wrapper.toggleClass( 'mw-rcfilters-collapsed', isCollapsed );
+
+               // Save the state
+               this.controller.updateCollapsedState( isCollapsed );
+       };
+
        /**
         * Reevaluate the restore state for the widget between setting to defaults and clearing all filters
         */
index dba24fc..a5a8187 100644 (file)
@@ -13,6 +13,9 @@
         * @param {Object} [config] Configuration object
         * @cfg {Object} [filters] A definition of the filter groups in this list
         * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+        * @cfg {jQuery} [$wrapper] A jQuery object for the wrapper of the general
+        *  system. If not given, falls back to this widget's $element
+        * @cfg {boolean} [collapsed] Filter area is collapsed
         */
        mw.rcfilters.ui.FilterWrapperWidget = function MwRcfiltersUiFilterWrapperWidget(
                controller, model, savedQueriesModel, changesListModel, config
                this.queriesModel = savedQueriesModel;
                this.changesListModel = changesListModel;
                this.$overlay = config.$overlay || this.$element;
+               this.$wrapper = config.$wrapper || this.$element;
 
                this.filterTagWidget = new mw.rcfilters.ui.FilterTagMultiselectWidget(
                        this.controller,
                        this.model,
                        this.queriesModel,
-                       { $overlay: this.$overlay }
+                       {
+                               $overlay: this.$overlay,
+                               collapsed: config.collapsed,
+                               $wrapper: this.$wrapper
+                       }
                );
 
                this.liveUpdateButton = new mw.rcfilters.ui.LiveUpdateButtonWidget(
index 8002045..eab8499 100644 (file)
@@ -14,6 +14,9 @@
         * @cfg {jQuery} $filtersContainer
         * @cfg {jQuery} $changesListContainer
         * @cfg {jQuery} $formContainer
+        * @cfg {boolean} [collapsed] Filter area is collapsed
+        * @cfg {jQuery} [$wrapper] A jQuery object for the wrapper of the general
+        *  system. If not given, falls back to this widget's $element
         */
        mw.rcfilters.ui.MainWrapperWidget = function MwRcfiltersUiMainWrapperWidget(
                controller, model, savedQueriesModel, changesListModel, config
@@ -31,6 +34,7 @@
                this.$changesListContainer = config.$changesListContainer;
                this.$formContainer = config.$formContainer;
                this.$overlay = $( '<div>' ).addClass( 'mw-rcfilters-ui-overlay' );
+               this.$wrapper = config.$wrapper || this.$element;
 
                this.savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
                        controller, savedQueriesModel, { $overlay: this.$overlay }
@@ -42,7 +46,9 @@
                        savedQueriesModel,
                        changesListModel,
                        {
-                               $overlay: this.$overlay
+                               $overlay: this.$overlay,
+                               $wrapper: this.$wrapper,
+                               collapsed: config.collapsed
                        }
                );
 
index f65a257..6558bda 100644 (file)
@@ -1,12 +1,38 @@
 ( function ( mw, $ ) {
+
+       // Return a promise that is resolved when the element is blurred (loses focus).
+       // If it already is blurred, resolved immediately.
+       function whenBlurred( $elem ) {
+               var deferred = $.Deferred();
+               if ( $elem.is( ':focus' ) ) {
+                       $elem.one( 'blur', deferred.resolve );
+               } else {
+                       deferred.resolve();
+               }
+               return deferred.promise();
+       }
+
        $( function () {
-               var startInput = mw.widgets.DateInputWidget.static.infuse( 'mw-date-start' ),
-                       endInput = mw.widgets.DateInputWidget.static.infuse( 'mw-date-end' );
+               var startReady, endReady;
+
+               // Do not infuse the date input while it has user focus.
+               // This is especially important on Firefox, where hiding the native date input while the native
+               // date picker is open will cause the date picker to remain visible (but non-functional), but
+               // not replacing the interface while the user is working with it is probably a good idea anyway.
+               startReady = whenBlurred( $( '#mw-date-start .oo-ui-inputWidget-input' ) ).then( function () {
+                       return mw.widgets.DateInputWidget.static.infuse( 'mw-date-start' );
+               } );
+               endReady = whenBlurred( $( '#mw-date-end .oo-ui-inputWidget-input' ) ).then( function () {
+                       return mw.widgets.DateInputWidget.static.infuse( 'mw-date-end' );
+               } );
 
-               startInput.on( 'deactivate', function ( userSelected ) {
-                       if ( userSelected ) {
-                               endInput.focus();
-                       }
+               $.when( startReady, endReady ).then( function ( startInput, endInput ) {
+                       startInput.on( 'deactivate', function ( userSelected ) {
+                               if ( userSelected ) {
+                                       endInput.focus();
+                               }
+                       } );
                } );
        } );
+
 }( mediaWiki, jQuery ) );
index 89b3902..5cec1bb 100644 (file)
@@ -21,7 +21,8 @@
        var slice = Array.prototype.slice,
                mwLoaderTrack = mw.track,
                trackCallbacks = $.Callbacks( 'memory' ),
-               trackHandlers = [];
+               trackHandlers = [],
+               hasOwn = Object.prototype.hasOwnProperty;
 
        /**
         * Object constructor for messages.
 
        // Fire events from before track() triggred fire()
        trackCallbacks.fire( mw.trackQueue );
+
+       /**
+        * Registry and firing of events.
+        *
+        * MediaWiki has various interface components that are extended, enhanced
+        * or manipulated in some other way by extensions, gadgets and even
+        * in core itself.
+        *
+        * This framework helps streamlining the timing of when these other
+        * code paths fire their plugins (instead of using document-ready,
+        * which can and should be limited to firing only once).
+        *
+        * Features like navigating to other wiki pages, previewing an edit
+        * and editing itself – without a refresh – can then retrigger these
+        * hooks accordingly to ensure everything still works as expected.
+        *
+        * Example usage:
+        *
+        *     mw.hook( 'wikipage.content' ).add( fn ).remove( fn );
+        *     mw.hook( 'wikipage.content' ).fire( $content );
+        *
+        * Handlers can be added and fired for arbitrary event names at any time. The same
+        * event can be fired multiple times. The last run of an event is memorized
+        * (similar to `$(document).ready` and `$.Deferred().done`).
+        * This means if an event is fired, and a handler added afterwards, the added
+        * function will be fired right away with the last given event data.
+        *
+        * Like Deferreds and Promises, the mw.hook object is both detachable and chainable.
+        * Thus allowing flexible use and optimal maintainability and authority control.
+        * You can pass around the `add` and/or `fire` method to another piece of code
+        * without it having to know the event name (or `mw.hook` for that matter).
+        *
+        *     var h = mw.hook( 'bar.ready' );
+        *     new mw.Foo( .. ).fetch( { callback: h.fire } );
+        *
+        * Note: Events are documented with an underscore instead of a dot in the event
+        * name due to jsduck not supporting dots in that position.
+        *
+        * @class mw.hook
+        */
+       mw.hook = ( function () {
+               var lists = {};
+
+               /**
+                * Create an instance of mw.hook.
+                *
+                * @method hook
+                * @member mw
+                * @param {string} name Name of hook.
+                * @return {mw.hook}
+                */
+               return function ( name ) {
+                       var list = hasOwn.call( lists, name ) ?
+                               lists[ name ] :
+                               lists[ name ] = $.Callbacks( 'memory' );
+
+                       return {
+                               /**
+                                * Register a hook handler
+                                *
+                                * @param {...Function} handler Function to bind.
+                                * @chainable
+                                */
+                               add: list.add,
+
+                               /**
+                                * Unregister a hook handler
+                                *
+                                * @param {...Function} handler Function to unbind.
+                                * @chainable
+                                */
+                               remove: list.remove,
+
+                               /**
+                                * Run a hook.
+                                *
+                                * @param {...Mixed} data
+                                * @return {mw.hook}
+                                * @chainable
+                                */
+                               fire: function () {
+                                       return list.fireWith.call( this, null, slice.call( arguments ) );
+                               }
+                       };
+               };
+       }() );
+
+       /**
+        * HTML construction helper functions
+        *
+        *     @example
+        *
+        *     var Html, output;
+        *
+        *     Html = mw.html;
+        *     output = Html.element( 'div', {}, new Html.Raw(
+        *         Html.element( 'img', { src: '<' } )
+        *     ) );
+        *     mw.log( output ); // <div><img src="&lt;"/></div>
+        *
+        * @class mw.html
+        * @singleton
+        */
+       mw.html = ( function () {
+               function escapeCallback( s ) {
+                       switch ( s ) {
+                               case '\'':
+                                       return '&#039;';
+                               case '"':
+                                       return '&quot;';
+                               case '<':
+                                       return '&lt;';
+                               case '>':
+                                       return '&gt;';
+                               case '&':
+                                       return '&amp;';
+                       }
+               }
+
+               return {
+                       /**
+                        * Escape a string for HTML.
+                        *
+                        * Converts special characters to HTML entities.
+                        *
+                        *     mw.html.escape( '< > \' & "' );
+                        *     // Returns &lt; &gt; &#039; &amp; &quot;
+                        *
+                        * @param {string} s The string to escape
+                        * @return {string} HTML
+                        */
+                       escape: function ( s ) {
+                               return s.replace( /['"<>&]/g, escapeCallback );
+                       },
+
+                       /**
+                        * Create an HTML element string, with safe escaping.
+                        *
+                        * @param {string} name The tag name.
+                        * @param {Object} [attrs] An object with members mapping element names to values
+                        * @param {string|mw.html.Raw|mw.html.Cdata|null} [contents=null] The contents of the element.
+                        *
+                        *  - string: Text to be escaped.
+                        *  - null: The element is treated as void with short closing form, e.g. `<br/>`.
+                        *  - this.Raw: The raw value is directly included.
+                        *  - this.Cdata: The raw value is directly included. An exception is
+                        *    thrown if it contains any illegal ETAGO delimiter.
+                        *    See <https://www.w3.org/TR/html401/appendix/notes.html#h-B.3.2>.
+                        * @return {string} HTML
+                        */
+                       element: function ( name, attrs, contents ) {
+                               var v, attrName, s = '<' + name;
+
+                               if ( attrs ) {
+                                       for ( attrName in attrs ) {
+                                               v = attrs[ attrName ];
+                                               // Convert name=true, to name=name
+                                               if ( v === true ) {
+                                                       v = attrName;
+                                                       // Skip name=false
+                                               } else if ( v === false ) {
+                                                       continue;
+                                               }
+                                               s += ' ' + attrName + '="' + this.escape( String( v ) ) + '"';
+                                       }
+                               }
+                               if ( contents === undefined || contents === null ) {
+                                       // Self close tag
+                                       s += '/>';
+                                       return s;
+                               }
+                               // Regular open tag
+                               s += '>';
+                               switch ( typeof contents ) {
+                                       case 'string':
+                                               // Escaped
+                                               s += this.escape( contents );
+                                               break;
+                                       case 'number':
+                                       case 'boolean':
+                                               // Convert to string
+                                               s += String( contents );
+                                               break;
+                                       default:
+                                               if ( contents instanceof this.Raw ) {
+                                                       // Raw HTML inclusion
+                                                       s += contents.value;
+                                               } else if ( contents instanceof this.Cdata ) {
+                                                       // CDATA
+                                                       if ( /<\/[a-zA-z]/.test( contents.value ) ) {
+                                                               throw new Error( 'mw.html.element: Illegal end tag found in CDATA' );
+                                                       }
+                                                       s += contents.value;
+                                               } else {
+                                                       throw new Error( 'mw.html.element: Invalid type of contents' );
+                                               }
+                               }
+                               s += '</' + name + '>';
+                               return s;
+                       },
+
+                       /**
+                        * Wrapper object for raw HTML passed to mw.html.element().
+                        *
+                        * @class mw.html.Raw
+                        * @constructor
+                        * @param {string} value
+                        */
+                       Raw: function ( value ) {
+                               this.value = value;
+                       },
+
+                       /**
+                        * Wrapper object for CDATA element contents passed to mw.html.element()
+                        *
+                        * @class mw.html.Cdata
+                        * @constructor
+                        * @param {string} value
+                        */
+                       Cdata: function ( value ) {
+                               this.value = value;
+                       }
+               };
+       }() );
+
+       // Alias $j to jQuery for backwards compatibility
+       // @deprecated since 1.23 Use $ or jQuery instead
+       mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
 }() );
index ad020b5..406f030 100644 (file)
@@ -13,7 +13,6 @@
 
        var mw, StringSet, log,
                hasOwn = Object.prototype.hasOwnProperty,
-               slice = Array.prototype.slice,
                trackQueue = [];
 
        /**
                                                } else if ( typeof script === 'function' ) {
                                                        // Pass jQuery twice so that the signature of the closure which wraps
                                                        // the script can bind both '$' and 'jQuery'.
-                                                       script( $, $, mw.loader.require, registry[ module ].module );
+                                                       script( window.$, window.$, mw.loader.require, registry[ module ].module );
                                                        markModuleReady();
 
                                                } else if ( typeof script === 'string' ) {
                        };
                }() ),
 
-               /**
-                * HTML construction helper functions
-                *
-                *     @example
-                *
-                *     var Html, output;
-                *
-                *     Html = mw.html;
-                *     output = Html.element( 'div', {}, new Html.Raw(
-                *         Html.element( 'img', { src: '<' } )
-                *     ) );
-                *     mw.log( output ); // <div><img src="&lt;"/></div>
-                *
-                * @class mw.html
-                * @singleton
-                */
-               html: ( function () {
-                       function escapeCallback( s ) {
-                               switch ( s ) {
-                                       case '\'':
-                                               return '&#039;';
-                                       case '"':
-                                               return '&quot;';
-                                       case '<':
-                                               return '&lt;';
-                                       case '>':
-                                               return '&gt;';
-                                       case '&':
-                                               return '&amp;';
-                               }
-                       }
-
-                       return {
-                               /**
-                                * Escape a string for HTML.
-                                *
-                                * Converts special characters to HTML entities.
-                                *
-                                *     mw.html.escape( '< > \' & "' );
-                                *     // Returns &lt; &gt; &#039; &amp; &quot;
-                                *
-                                * @param {string} s The string to escape
-                                * @return {string} HTML
-                                */
-                               escape: function ( s ) {
-                                       return s.replace( /['"<>&]/g, escapeCallback );
-                               },
-
-                               /**
-                                * Create an HTML element string, with safe escaping.
-                                *
-                                * @param {string} name The tag name.
-                                * @param {Object} [attrs] An object with members mapping element names to values
-                                * @param {string|mw.html.Raw|mw.html.Cdata|null} [contents=null] The contents of the element.
-                                *
-                                *  - string: Text to be escaped.
-                                *  - null: The element is treated as void with short closing form, e.g. `<br/>`.
-                                *  - this.Raw: The raw value is directly included.
-                                *  - this.Cdata: The raw value is directly included. An exception is
-                                *    thrown if it contains any illegal ETAGO delimiter.
-                                *    See <https://www.w3.org/TR/html401/appendix/notes.html#h-B.3.2>.
-                                * @return {string} HTML
-                                */
-                               element: function ( name, attrs, contents ) {
-                                       var v, attrName, s = '<' + name;
-
-                                       if ( attrs ) {
-                                               for ( attrName in attrs ) {
-                                                       v = attrs[ attrName ];
-                                                       // Convert name=true, to name=name
-                                                       if ( v === true ) {
-                                                               v = attrName;
-                                                       // Skip name=false
-                                                       } else if ( v === false ) {
-                                                               continue;
-                                                       }
-                                                       s += ' ' + attrName + '="' + this.escape( String( v ) ) + '"';
-                                               }
-                                       }
-                                       if ( contents === undefined || contents === null ) {
-                                               // Self close tag
-                                               s += '/>';
-                                               return s;
-                                       }
-                                       // Regular open tag
-                                       s += '>';
-                                       switch ( typeof contents ) {
-                                               case 'string':
-                                                       // Escaped
-                                                       s += this.escape( contents );
-                                                       break;
-                                               case 'number':
-                                               case 'boolean':
-                                                       // Convert to string
-                                                       s += String( contents );
-                                                       break;
-                                               default:
-                                                       if ( contents instanceof this.Raw ) {
-                                                               // Raw HTML inclusion
-                                                               s += contents.value;
-                                                       } else if ( contents instanceof this.Cdata ) {
-                                                               // CDATA
-                                                               if ( /<\/[a-zA-z]/.test( contents.value ) ) {
-                                                                       throw new Error( 'mw.html.element: Illegal end tag found in CDATA' );
-                                                               }
-                                                               s += contents.value;
-                                                       } else {
-                                                               throw new Error( 'mw.html.element: Invalid type of contents' );
-                                                       }
-                                       }
-                                       s += '</' + name + '>';
-                                       return s;
-                               },
-
-                               /**
-                                * Wrapper object for raw HTML passed to mw.html.element().
-                                *
-                                * @class mw.html.Raw
-                                * @constructor
-                                * @param {string} value
-                                */
-                               Raw: function ( value ) {
-                                       this.value = value;
-                               },
-
-                               /**
-                                * Wrapper object for CDATA element contents passed to mw.html.element()
-                                *
-                                * @class mw.html.Cdata
-                                * @constructor
-                                * @param {string} value
-                                */
-                               Cdata: function ( value ) {
-                                       this.value = value;
-                               }
-                       };
-               }() ),
-
                // Skeleton user object, extended by the 'mediawiki.user' module.
                /**
                 * @class mw.user
                },
 
                // OOUI widgets specific to MediaWiki
-               widgets: {},
-
-               /**
-                * Registry and firing of events.
-                *
-                * MediaWiki has various interface components that are extended, enhanced
-                * or manipulated in some other way by extensions, gadgets and even
-                * in core itself.
-                *
-                * This framework helps streamlining the timing of when these other
-                * code paths fire their plugins (instead of using document-ready,
-                * which can and should be limited to firing only once).
-                *
-                * Features like navigating to other wiki pages, previewing an edit
-                * and editing itself – without a refresh – can then retrigger these
-                * hooks accordingly to ensure everything still works as expected.
-                *
-                * Example usage:
-                *
-                *     mw.hook( 'wikipage.content' ).add( fn ).remove( fn );
-                *     mw.hook( 'wikipage.content' ).fire( $content );
-                *
-                * Handlers can be added and fired for arbitrary event names at any time. The same
-                * event can be fired multiple times. The last run of an event is memorized
-                * (similar to `$(document).ready` and `$.Deferred().done`).
-                * This means if an event is fired, and a handler added afterwards, the added
-                * function will be fired right away with the last given event data.
-                *
-                * Like Deferreds and Promises, the mw.hook object is both detachable and chainable.
-                * Thus allowing flexible use and optimal maintainability and authority control.
-                * You can pass around the `add` and/or `fire` method to another piece of code
-                * without it having to know the event name (or `mw.hook` for that matter).
-                *
-                *     var h = mw.hook( 'bar.ready' );
-                *     new mw.Foo( .. ).fetch( { callback: h.fire } );
-                *
-                * Note: Events are documented with an underscore instead of a dot in the event
-                * name due to jsduck not supporting dots in that position.
-                *
-                * @class mw.hook
-                */
-               hook: ( function () {
-                       var lists = {};
-
-                       /**
-                        * Create an instance of mw.hook.
-                        *
-                        * @method hook
-                        * @member mw
-                        * @param {string} name Name of hook.
-                        * @return {mw.hook}
-                        */
-                       return function ( name ) {
-                               var list = hasOwn.call( lists, name ) ?
-                                       lists[ name ] :
-                                       lists[ name ] = $.Callbacks( 'memory' );
-
-                               return {
-                                       /**
-                                        * Register a hook handler
-                                        *
-                                        * @param {...Function} handler Function to bind.
-                                        * @chainable
-                                        */
-                                       add: list.add,
+               widgets: {}
 
-                                       /**
-                                        * Unregister a hook handler
-                                        *
-                                        * @param {...Function} handler Function to unbind.
-                                        * @chainable
-                                        */
-                                       remove: list.remove,
-
-                                       /**
-                                        * Run a hook.
-                                        *
-                                        * @param {...Mixed} data
-                                        * @return {mw.hook}
-                                        * @chainable
-                                        */
-                                       fire: function () {
-                                               return list.fireWith.call( this, null, slice.call( arguments ) );
-                                       }
-                               };
-                       };
-               }() )
        };
 
-       // Alias $j to jQuery for backwards compatibility
-       // @deprecated since 1.23 Use $ or jQuery instead
-       mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
-
        // Attach to window and globally alias
        window.mw = window.mediaWiki = mw;
 }( jQuery ) );
index cf2c64a..6de37af 100644 (file)
@@ -443,6 +443,31 @@ class RevisionTest extends MediaWikiTestCase {
                $this->testGetRevisionText( $expected, $rowData );
        }
 
+       public function provideGetRevisionTextWithZlibExtension_badData() {
+               yield 'Generic gzip test' => [
+                       'This is a small goat of revision text.',
+                       [
+                               'old_flags' => 'gzip',
+                               'old_text' => 'DEAD BEEF',
+                       ],
+               ];
+       }
+
+       /**
+        * @covers Revision::getRevisionText
+        * @dataProvider provideGetRevisionTextWithZlibExtension_badData
+        */
+       public function testGetRevisionWithZlibExtension_badData( $expected, $rowData ) {
+               $this->checkPHPExtension( 'zlib' );
+               Wikimedia\suppressWarnings();
+               $this->assertFalse(
+                       Revision::getRevisionText(
+                               (object)$rowData
+                       )
+               );
+               Wikimedia\suppressWarnings( true );
+       }
+
        private function getWANObjectCache() {
                return new WANObjectCache( [ 'cache' => new HashBagOStuff() ] );
        }
@@ -809,6 +834,7 @@ class RevisionTest extends MediaWikiTestCase {
        public function testGetRevisionText_external_returnsFalseWhenNotEnoughUrlParts(
                $text
        ) {
+               Wikimedia\suppressWarnings();
                $this->assertFalse(
                        Revision::getRevisionText(
                                (object)[
@@ -817,6 +843,7 @@ class RevisionTest extends MediaWikiTestCase {
                                ]
                        )
                );
+               Wikimedia\suppressWarnings( true );
        }
 
        /**
index 763a3e7..110f032 100644 (file)
@@ -274,7 +274,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $this->assertEquals( $r1->getSha1(), $r2->getSha1() );
                $this->assertEquals( $r1->getSize(), $r2->getSize() );
                $this->assertEquals( $r1->getPageId(), $r2->getPageId() );
-               $this->assertEquals( $r1->getSlotRoles(), $r2->getSlotRoles() );
+               $this->assertArrayEqualsIgnoringIntKeyOrder( $r1->getSlotRoles(), $r2->getSlotRoles() );
                $this->assertEquals( $r1->getWikiId(), $r2->getWikiId() );
                $this->assertEquals( $r1->isMinor(), $r2->isMinor() );
                foreach ( $r1->getSlotRoles() as $role ) {
index 215cdfd..216228a 100644 (file)
@@ -421,7 +421,9 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
 
                $rcId = 124;
-               ChangeTags::updateTags( [ 'tag1', 'tag3' ], [], $rcId );
+               ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
+
+               ChangeTags::updateTags( [ 'tag3' ], [], $rcId );
 
                $dbr = wfGetDB( DB_REPLICA );
 
diff --git a/tests/phpunit/maintenance/populateChangeTagDefTest.php b/tests/phpunit/maintenance/populateChangeTagDefTest.php
new file mode 100644 (file)
index 0000000..719b46b
--- /dev/null
@@ -0,0 +1,286 @@
+<?php
+
+namespace MediaWiki\Tests\Maintenance;
+
+use PopulateChangeTagDef;
+
+/**
+ * @group Database
+ * @covers PopulateChangeTagDef
+ */
+class PopulateChangeTagDefTest extends MaintenanceBaseTestCase {
+
+       public function getMaintenanceClass() {
+               return PopulateChangeTagDef::class;
+       }
+
+       public function setUp() {
+               parent::setUp();
+               $this->tablesUsed = [ 'change_tag', 'change_tag_def' ];
+
+               $this->cleanChangeTagTables();
+               $this->insertChangeTagData();
+       }
+
+       private function cleanChangeTagTables() {
+               wfGetDB( DB_MASTER )->delete( 'change_tag', '*' );
+               wfGetDB( DB_MASTER )->delete( 'change_tag_def', '*' );
+       }
+
+       private function insertChangeTagData() {
+               $changeTags = [];
+
+               $changeTags[] = [
+                       'ct_rc_id' => 1234,
+                       'ct_tag' => 'One Tag',
+               ];
+
+               $changeTags[] = [
+                       'ct_rc_id' => 1235,
+                       'ct_tag' => 'Two Tags',
+               ];
+
+               $changeTags[] = [
+                       'ct_log_id' => 1236,
+                       'ct_tag' => 'Two Tags',
+               ];
+
+               $changeTags[] = [
+                       'ct_rev_id' => 1237,
+                       'ct_tag' => 'Three Tags',
+               ];
+
+               $changeTags[] = [
+                       'ct_rc_id' => 1238,
+                       'ct_tag' => 'Three Tags',
+               ];
+
+               $changeTags[] = [
+                       'ct_log_id' => 1239,
+                       'ct_tag' => 'Three Tags',
+               ];
+
+               wfGetDB( DB_MASTER )->insert( 'change_tag', $changeTags );
+       }
+
+       public function testRun() {
+               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+               $this->maintenance->loadWithArgv( [ '--sleep', '0' ] );
+
+               $this->maintenance->execute();
+
+               $changeTagDefRows = [
+                       (object)[
+                               'ctd_name' => 'One Tag',
+                               'ctd_count' => 1,
+                       ],
+                       (object)[
+                               'ctd_name' => 'Two Tags',
+                               'ctd_count' => 2,
+                       ],
+                       (object)[
+                               'ctd_name' => 'Three Tags',
+                               'ctd_count' => 3,
+                       ],
+               ];
+
+               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag_def' ],
+                       [ 'ctd_name', 'ctd_count' ],
+                       [],
+                       __METHOD__,
+                       [ 'ORDER BY' => 'ctd_count' ]
+               );
+
+               $this->assertEquals( $changeTagDefRows, iterator_to_array( $actualChangeTagDefs, false ) );
+
+               // Check if change_tag is also backpopulated
+               $actualChangeTags = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag', 'change_tag_def' ],
+                       [ 'ct_tag', 'ct_tag_id', 'ctd_count' ],
+                       [],
+                       __METHOD__,
+                       [],
+                       [ 'change_tag_def' => [ 'LEFT JOIN', 'ct_tag_id=ctd_id' ] ]
+               );
+               $mapping = [
+                       'One Tag' => 1,
+                       'Two Tags' => 2,
+                       'Three Tags' => 3
+               ];
+               foreach ( $actualChangeTags as $row ) {
+                       $this->assertNotNull( $row->ct_tag_id );
+                       $this->assertEquals( $row->ctd_count, $mapping[$row->ct_tag] );
+               }
+       }
+
+       public function testRunUpdateHitCountMigrationNew() {
+               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
+               $changeTagDefBadRows = [
+                       [
+                               'ctd_name' => 'One Tag',
+                               'ctd_user_defined' => 0,
+                               'ctd_count' => 50,
+                       ],
+                       [
+                               'ctd_name' => 'Two Tags',
+                               'ctd_user_defined' => 0,
+                               'ctd_count' => 4,
+                       ],
+                       [
+                               'ctd_name' => 'Three Tags',
+                               'ctd_user_defined' => 0,
+                               'ctd_count' => 3,
+                       ],
+               ];
+               wfGetDB( DB_MASTER )->insert(
+                       'change_tag_def',
+                       $changeTagDefBadRows
+               );
+
+               $mapping = [
+                       'One Tag' => 1,
+                       'Two Tags' => 2,
+                       'Three Tags' => 3
+               ];
+               foreach ( $mapping as $tagName => $tagId ) {
+                       wfGetDB( DB_MASTER )->update(
+                               'change_tag',
+                               [ 'ct_tag_id' => $tagId ],
+                               [ 'ct_tag' => $tagName ]
+                       );
+               }
+
+               $this->maintenance->loadWithArgv( [ '--sleep', '0' ] );
+
+               $this->maintenance->execute();
+
+               $changeTagDefRows = [
+                       (object)[
+                               'ctd_name' => 'One Tag',
+                               'ctd_count' => 1,
+                       ],
+                       (object)[
+                               'ctd_name' => 'Two Tags',
+                               'ctd_count' => 2,
+                       ],
+                       (object)[
+                               'ctd_name' => 'Three Tags',
+                               'ctd_count' => 3,
+                       ],
+               ];
+
+               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag_def' ],
+                       [ 'ctd_name', 'ctd_count' ],
+                       [],
+                       __METHOD__,
+                       [ 'ORDER BY' => 'ctd_count' ]
+               );
+
+               $this->assertEquals( $changeTagDefRows, iterator_to_array( $actualChangeTagDefs, false ) );
+       }
+
+       public function testRunUpdateHitCountMigrationWriteBoth() {
+               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+               $changeTagDefBadRows = [
+                       [
+                               'ctd_name' => 'One Tag',
+                               'ctd_user_defined' => 0,
+                               'ctd_count' => 50,
+                       ],
+                       [
+                               'ctd_name' => 'Two Tags',
+                               'ctd_user_defined' => 0,
+                               'ctd_count' => 4,
+                       ],
+                       [
+                               'ctd_name' => 'Three Tags',
+                               'ctd_user_defined' => 0,
+                               'ctd_count' => 3,
+                       ],
+               ];
+               wfGetDB( DB_MASTER )->insert(
+                       'change_tag_def',
+                       $changeTagDefBadRows
+               );
+
+               $this->maintenance->loadWithArgv( [ '--sleep', '0' ] );
+
+               $this->maintenance->execute();
+
+               $changeTagDefRows = [
+                       (object)[
+                               'ctd_name' => 'One Tag',
+                               'ctd_count' => 1,
+                       ],
+                       (object)[
+                               'ctd_name' => 'Two Tags',
+                               'ctd_count' => 2,
+                       ],
+                       (object)[
+                               'ctd_name' => 'Three Tags',
+                               'ctd_count' => 3,
+                       ],
+               ];
+
+               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag_def' ],
+                       [ 'ctd_name', 'ctd_count' ],
+                       [],
+                       __METHOD__,
+                       [ 'ORDER BY' => 'ctd_count' ]
+               );
+
+               $this->assertEquals( $changeTagDefRows, iterator_to_array( $actualChangeTagDefs, false ) );
+       }
+
+       public function testDryRunMigrationNew() {
+               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
+               $this->maintenance->loadWithArgv( [ '--dry-run', '--sleep', '0' ] );
+
+               $this->maintenance->execute();
+
+               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag_def' ],
+                       [ 'ctd_id', 'ctd_name' ]
+               );
+
+               $this->assertEquals( [], iterator_to_array( $actualChangeTagDefs, false ) );
+
+               $actualChangeTags = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag' ],
+                       [ 'ct_tag_id', 'ct_tag' ]
+               );
+
+               foreach ( $actualChangeTags as $row ) {
+                       $this->assertNull( $row->ct_tag_id );
+                       $this->assertNotNull( $row->ct_tag );
+               }
+       }
+
+       public function testDryRunMigrationWriteBoth() {
+               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+               $this->maintenance->loadWithArgv( [ '--dry-run', '--sleep', '0' ] );
+
+               $this->maintenance->execute();
+
+               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag_def' ],
+                       [ 'ctd_id', 'ctd_name' ]
+               );
+
+               $this->assertEquals( [], iterator_to_array( $actualChangeTagDefs, false ) );
+
+               $actualChangeTags = wfGetDB( DB_REPLICA )->select(
+                       [ 'change_tag' ],
+                       [ 'ct_tag_id', 'ct_tag' ]
+               );
+
+               foreach ( $actualChangeTags as $row ) {
+                       $this->assertNull( $row->ct_tag_id );
+                       $this->assertNotNull( $row->ct_tag );
+               }
+       }
+
+}
index 02d3843..edecc91 100644 (file)
@@ -2,12 +2,7 @@ const Page = require( 'wdio-mediawiki/Page' );
 
 class RecentChangesPage extends Page {
        get changesList() { return browser.element( '.mw-changeslist' ); }
-       get changesListTitles() { return this.changesList.$$( '.mw-changeslist-title' ); }
-       get titles() {
-               return this.changesListTitles.map( function ( element ) {
-                       return element.getText();
-               } );
-       }
+       get titles() { return this.changesList.$$( '.mw-changeslist-title' ); }
 
        open() {
                super.openTitle( 'Special:RecentChanges' );
index 418fbb1..d82f78f 100644 (file)
@@ -23,7 +23,7 @@ describe( 'Special:RecentChanges', function () {
 
                RecentChangesPage.open();
 
-               assert.strictEqual( name, RecentChangesPage.titles[ 0 ] );
+               assert.strictEqual( RecentChangesPage.titles[ 0 ].getText(), name );
        } );
 
 } );
index f785d36..8b47dff 100644 (file)
@@ -46,6 +46,7 @@ exports.config = {
                relPath( './tests/selenium/specs/**/*.js' ),
                relPath( './extensions/*/tests/selenium/specs/**/*.js' ),
                relPath( './extensions/VisualEditor/modules/ve-mw/tests/selenium/specs/**/*.js' ),
+               relPath( './extensions/Wikibase/repo/tests/selenium/specs/**/*.js' ),
                relPath( './skins/*/tests/selenium/specs/**/*.js' )
        ],
        // Patterns to exclude