Merge "New namespace MediaWiki\Tests\Maintenance"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 17 Jan 2018 10:14:40 +0000 (10:14 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 17 Jan 2018 10:14:41 +0000 (10:14 +0000)
47 files changed:
includes/CategoriesRdf.php
includes/DefaultSettings.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php
includes/specials/SpecialEmailuser.php
includes/user/User.php
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/be-tarask.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ja.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/mk.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sl.json
languages/i18n/sv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/zh-hans.json
maintenance/dumpCategoriesAsRdf.php
tests/phpunit/data/categoriesrdf/categoriesRdf-out.nt
tests/phpunit/includes/Storage/RevisionStoreDbTest.php
tests/phpunit/includes/db/LBFactoryTest.php
tests/phpunit/includes/jobqueue/JobQueueTest.php
tests/phpunit/maintenance/categoriesRdfTest.php

index e19dc2a..463f6e8 100644 (file)
@@ -37,7 +37,13 @@ class CategoriesRdf {
        /**
         * Current version of the dump format.
         */
-       const FORMAT_VERSION = "1.0";
+       const FORMAT_VERSION = "1.1";
+       /**
+        * Special page for Dump identification.
+        * Used as head URI for each wiki's category dump, e.g.:
+        * https://en.wikipedia.org/wiki/Special:CategoryDump
+        */
+       const SPECIAL_DUMP = 'Special:CategoryDump';
        /**
         * @var RdfWriter
         */
@@ -84,12 +90,30 @@ class CategoriesRdf {
                $this->rdfWriter->say( 'rdfs', 'label' )->value( $titletext );
        }
 
+       /**
+        * Make URL from title label
+        * @param string $titleLabel Short label (without namespace) of the category
+        * @return string URL for the category
+        */
+       public function labelToUrl( $titleLabel ) {
+               return $this->titleToUrl( Title::makeTitle( NS_CATEGORY, $titleLabel ) );
+       }
+
        /**
         * Convert Title to link to target page.
         * @param Title $title
-        * @return string
+        * @return string URL for the category
         */
        private function titleToUrl( Title $title ) {
                return $title->getFullURL( '', false, PROTO_CANONICAL );
        }
+
+       /**
+        * Get URI of the dump for this particular wiki.
+        * @return false|string
+        */
+       public function getDumpURI() {
+               return $this->titleToUrl( Title::makeTitle( NS_MAIN, self::SPECIAL_DUMP ) );
+       }
+
 }
index ee10a6d..ab01c5f 100644 (file)
@@ -5158,7 +5158,6 @@ $wgGroupPermissions['user']['sendemail'] = true;
 $wgGroupPermissions['user']['applychangetags'] = true;
 $wgGroupPermissions['user']['changetags'] = true;
 $wgGroupPermissions['user']['editcontentmodel'] = true;
-$wgGroupPermissions['user']['sendemail-new-users'] = true;
 
 // Implicit group for accounts that pass $wgAutoConfirmAge
 $wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true;
index e80b952..b01b23f 100644 (file)
@@ -146,17 +146,10 @@ class LoadBalancer implements ILoadBalancer {
                        }
                }
 
-               $this->localDomain = isset( $params['localDomain'] )
+               $localDomain = isset( $params['localDomain'] )
                        ? DatabaseDomain::newFromId( $params['localDomain'] )
                        : DatabaseDomain::newUnspecified();
-               // In case a caller assumes that the domain ID is simply <db>-<prefix>, which is almost
-               // always true, gracefully handle the case when they fail to account for escaping.
-               if ( $this->localDomain->getTablePrefix() != '' ) {
-                       $this->localDomainIdAlias =
-                               $this->localDomain->getDatabase() . '-' . $this->localDomain->getTablePrefix();
-               } else {
-                       $this->localDomainIdAlias = $this->localDomain->getDatabase();
-               }
+               $this->setLocalDomain( $localDomain );
 
                $this->mWaitTimeout = isset( $params['waitTimeout'] ) ? $params['waitTimeout'] : 10;
 
@@ -821,7 +814,11 @@ class LoadBalancer implements ILoadBalancer {
                                $server = $this->mServers[$i];
                                $server['serverIndex'] = $i;
                                $server['autoCommitOnly'] = $autoCommit;
-                               $conn = $this->reallyOpenConnection( $server, false );
+                               if ( $this->localDomain->getDatabase() !== null ) {
+                                       // Use the local domain table prefix if the local domain is specified
+                                       $server['tablePrefix'] = $this->localDomain->getTablePrefix();
+                               }
+                               $conn = $this->reallyOpenConnection( $server, $this->localDomain->getDatabase() );
                                $host = $this->getServerName( $i );
                                if ( $conn->isOpen() ) {
                                        $this->connLogger->debug( "Connected to database $i at '$host'." );
@@ -899,8 +896,6 @@ class LoadBalancer implements ILoadBalancer {
                        // Reuse a free connection from another domain
                        $conn = reset( $this->mConns[$connFreeKey][$i] );
                        $oldDomain = key( $this->mConns[$connFreeKey][$i] );
-                       // The empty string as a DB name means "don't care".
-                       // DatabaseMysqlBase::open() already handle this on connection.
                        if ( strlen( $dbName ) && !$conn->selectDB( $dbName ) ) {
                                $this->mLastError = "Error selecting database '$dbName' on server " .
                                        $conn->getServer() . " from client host {$this->host}";
@@ -909,7 +904,8 @@ class LoadBalancer implements ILoadBalancer {
                        } else {
                                $conn->tablePrefix( $prefix );
                                unset( $this->mConns[$connFreeKey][$i][$oldDomain] );
-                               $this->mConns[$connInUseKey][$i][$domain] = $conn;
+                               // Note that if $domain is an empty string, getDomainID() might not match it
+                               $this->mConns[$connInUseKey][$i][$conn->getDomainId()] = $conn;
                                $this->connLogger->debug( __METHOD__ .
                                        ": reusing free connection from $oldDomain for $domain" );
                        }
@@ -929,8 +925,9 @@ class LoadBalancer implements ILoadBalancer {
                                $this->errorConnection = $conn;
                                $conn = false;
                        } else {
-                               $conn->tablePrefix( $prefix );
-                               $this->mConns[$connInUseKey][$i][$domain] = $conn;
+                               $conn->tablePrefix( $prefix ); // as specified
+                               // Note that if $domain is an empty string, getDomainID() might not match it
+                               $this->mConns[$connInUseKey][$i][$conn->getDomainID()] = $conn;
                                $this->connLogger->debug( __METHOD__ . ": opened new connection for $i/$domain" );
                        }
                }
@@ -960,22 +957,22 @@ class LoadBalancer implements ILoadBalancer {
        }
 
        /**
-        * Really opens a connection. Uncached.
+        * Open a new network connection to a server (uncached)
+        *
         * Returns a Database object whether or not the connection was successful.
-        * @access private
         *
         * @param array $server
-        * @param string|bool $dbNameOverride Use "" to not select any database
+        * @param string|null $dbNameOverride Use "" to not select any database
         * @return Database
         * @throws DBAccessError
         * @throws InvalidArgumentException
         */
-       protected function reallyOpenConnection( array $server, $dbNameOverride = false ) {
+       protected function reallyOpenConnection( array $server, $dbNameOverride ) {
                if ( $this->disabled ) {
                        throw new DBAccessError();
                }
 
-               if ( $dbNameOverride !== false ) {
+               if ( $dbNameOverride !== null ) {
                        $server['dbname'] = $dbNameOverride;
                }
 
@@ -1691,17 +1688,35 @@ class LoadBalancer implements ILoadBalancer {
                                "Foreign domain connections are still in use ($domains)." );
                }
 
-               $this->localDomain = new DatabaseDomain(
+               $oldDomain = $this->localDomain->getId();
+               $this->setLocalDomain( new DatabaseDomain(
                        $this->localDomain->getDatabase(),
                        null,
                        $prefix
-               );
+               ) );
 
-               $this->forEachOpenConnection( function ( IDatabase $db ) use ( $prefix ) {
-                       $db->tablePrefix( $prefix );
+               $this->forEachOpenConnection( function ( IDatabase $db ) use ( $prefix, $oldDomain ) {
+                       if ( !$db->getLBInfo( 'foreign' ) ) {
+                               $db->tablePrefix( $prefix );
+                       }
                } );
        }
 
+       /**
+        * @param DatabaseDomain $domain
+        */
+       private function setLocalDomain( DatabaseDomain $domain ) {
+               $this->localDomain = $domain;
+               // In case a caller assumes that the domain ID is simply <db>-<prefix>, which is almost
+               // always true, gracefully handle the case when they fail to account for escaping.
+               if ( $this->localDomain->getTablePrefix() != '' ) {
+                       $this->localDomainIdAlias =
+                               $this->localDomain->getDatabase() . '-' . $this->localDomain->getTablePrefix();
+               } else {
+                       $this->localDomainIdAlias = $this->localDomain->getDatabase();
+               }
+       }
+
        /**
         * Make PHP ignore user aborts/disconnects until the returned
         * value leaves scope. This returns null and does nothing in CLI mode.
index 79d250f..c737563 100644 (file)
@@ -72,7 +72,7 @@ class LoadBalancerSingle extends LoadBalancer {
                return new static( [ 'connection' => $db ] + $params );
        }
 
-       protected function reallyOpenConnection( array $server, $dbNameOverride = false ) {
+       protected function reallyOpenConnection( array $server, $dbNameOverride ) {
                return $this->db;
        }
 }
index 06ca04f..f322ac4 100644 (file)
@@ -238,35 +238,12 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        return 'nowikiemail';
                }
 
-               if ( $target->getEditCount() === 0 &&
-                       ( $sender === null || !$sender->isAllowed( 'sendemail-new-users' ) )
-               ) {
-                       // Determine if target has any other logged actions.
-                       $dbr = wfGetDB( DB_REPLICA );
-                       $log_id = $dbr->selectField(
-                               'logging',
-                               'log_id',
-                               [
-                                       'log_user' => $target->getId(),
-                                       "NOT (log_type = 'newusers' AND log_action = 'autocreate')",
-                               ],
-                               __METHOD__,
-                               [ 'LIMIT' => 1 ]
-                       );
-
-                       if ( !$log_id ) {
-                               wfDebug( "User has no logged actions on this wiki.\n" );
-
-                               return 'nowikiemail';
-                       }
-               }
-
                if ( $sender !== null && !$target->getOption( 'email-allow-new-users' ) &&
                        $sender->isNewbie()
                ) {
-                               wfDebug( "User does not allow user emails from new users.\n" );
+                       wfDebug( "User does not allow user emails from new users.\n" );
 
-                               return 'nowikiemail';
+                       return 'nowikiemail';
                }
 
                if ( $sender !== null ) {
index a9fe5f8..7684d2e 100644 (file)
@@ -179,7 +179,6 @@ class User implements IDBAccessObject, UserIdentity {
                'reupload-shared',
                'rollback',
                'sendemail',
-               'sendemail-new-users',
                'siteadmin',
                'suppressionlog',
                'suppressredirect',
index af6126b..8f537c2 100644 (file)
        "category-subcat-count-limited": "هذا التصنيف يحوي {{PLURAL:$1||التصنيف الفرعي التالي|التصنيفين الفرعيين التاليين|التصنيفات الفرعية $1  التالية}}.",
        "category-article-count": "{{PLURAL:$2|لا صفحات بهذا التصنيف سوى التالية.|{{PLURAL:$1||الصفحة التالية مصنّفة|الصفحتان التاليتان مصنّفتان|الصفحات $1 التالية مصنّفة}} بهذا التصنيف، من إجمالي $2.}}",
        "category-article-count-limited": "{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|الصفحات $1 التالية}} مصنّفة بهذا التصنيف.",
-       "category-file-count": "هذا التصنيف مصنّف عليه الملف{{PLURAL:$2| التالي.|{{PLURAL:$1|| التالي|ان التاليان|ات $1 التالية}}، من إجمالي $2.}}",
+       "category-file-count": "{{PLURAL:$2||هذا التصنيف يحتوي الملف التالي فقط.|{{PLURAL:$1||الملف التالي|الملفان التاليان|الملفات ال$1 التالية}} في هذا التصنيف من إجمالي $2.}}",
        "category-file-count-limited": "{{PLURAL:$1|الملف التالي مصنّف|الملفان التاليان مصنّفان|الملفات $1 التالية مصنّفة}} بهذا التصنيف.",
        "listingcontinuesabbrev": "(تابع)",
        "index-category": "صفحات مفهرسة",
        "permalink": "رابط دائم",
        "print": "اطبع",
        "view": "مطالعة",
-       "view-foreign": "استعرضÙ\87 في $1",
+       "view-foreign": "اعرض في $1",
        "edit": "عدل",
        "edit-local": "تعديل الوصف المحلي",
        "create": "أنشئ",
        "aboutsite": "عن {{SITENAME}}",
        "aboutpage": "Project:عن",
        "copyright": "المحتوى منشور وفق $1 إن لم يرد خلاف ذلك.",
-       "copyrightpage": "{{ns:project}}:حقوق التأليف و&nbsp;الطبع",
+       "copyrightpage": "{{ns:project}}:حقوق التأليف والنشر",
        "currentevents": "الأحداث الجارية",
        "currentevents-url": "Project:الأحداث الجارية",
        "disclaimers": "إخلاء مسؤولية",
        "image_tip": "ملف مدرج",
        "media_tip": "وصلة ملف",
        "sig_tip": "توقيعك مع الساعة والتاريخ",
-       "hr_tip": "خط Ø£Ù\81Ù\82Ù\8a (تجÙ\86ب Ø§Ù\84Ø¥Ù\81راط)",
+       "hr_tip": "خط Ø£Ù\81Ù\82Ù\8a (تجÙ\86ب Ø§Ù\84استخداÙ\85 Ø¨Ù\83ثرة)",
        "summary": "ملخص:",
        "subject": "موضوع/عنوان:",
        "minoredit": "هذا تعديل طفيف",
        "publishchanges": "نشر التغييرات",
        "preview": "عرض مسبق",
        "showpreview": "أظهر معاينة",
-       "showdiff": "استعرض Ø§Ù\84تغÙ\8aÙ\8aرات",
+       "showdiff": "عرض التغييرات",
        "blankarticle": "<strong>تنبيه:</strong> الصفحة التي تريد إنشاءها فارغة. إذا نقرت \"$1\" ثانية فستنشأ الصفحة بدون محتوى.",
        "anoneditwarning": "<strong>تحذير:</strong> أنت غير مسجل الدخول. عنوان الأيبي الخاص بك سيكون معروضا بشكل علني لو قمت بأي تعديلات. لو أنك <strong>[$1 سجلت الدخول]</strong> أو <strong>[$2 أنشأت حسابا]</strong>، فتعديلاتك ستنسب لاسم المستخدم الخاص بك، بالإضافة إلى فوائد أخرى.",
        "anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
        "newarticletext": "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.\nلإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [$1 صفحة المساعدة] للمزيد من المعلومات).\nإذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
        "anontalkpagetext": "----\n<em>هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.</em>\nلذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:CreateAccount|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.",
        "noarticletext": "هذه الصفحة خالية حاليا. يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوانها]] في الصفحات الأخرى أو\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات] (لتعرف إن كانت قد حُذِفَت)،\nأو '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} إنشاؤها]'''</span>.",
-       "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.\nيمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى، أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات]</span>، لكن ليست لك صلاحية إنشاء هذه الصفحة.",
+       "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.\nيمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى، أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات المتعلقة بها]</span>، لكن ليست لك صلاحية إنشاء هذه الصفحة.",
        "missing-revision": "المراجعة #$1 من الصفحة المسماة \"{{FULLPAGENAME}}\" غير موجودة.\n\nهذا يحدث عادة عن طريق اتباع وصلة تاريخ قديمة لصفحة تم حذفها.\nالتفاصيل يمكن إيجادها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
        "userpage-userdoesnotexist": "حساب المستخدم \"<nowiki>$1</nowiki>\" غير مسجل.\nمن فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.",
        "userpage-userdoesnotexist-view": "حساب المستخدم \"$1\" غير مسجل.",
        "template-protected": "(محميّة)",
        "template-semiprotected": "(محمية جزئيا)",
        "hiddencategories": "{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:",
-       "edittools": "<!-- هذا النص سيظهر تحت حقل تحرير المتن و&nbsp;استمارة رفع الملفات. -->",
+       "edittools": "<!-- النص هنا سيظهر تحت صندوق التحرير واستمارة رفع الصور. -->",
        "nocreatetext": "قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.\nيمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].",
        "nocreate-loggedin": "أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.",
        "sectioneditnotsupported-title": "تعديل الأقسام غير مدعوم",
        "right-siteadmin": "غلق ورفع غلق قاعدة البيانات",
        "right-override-export-depth": "تصدير الصفحات متضمنة الصفحات الموصولة حتى عمق 5",
        "right-sendemail": "إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين",
-       "right-sendemail-new-users": "إرسال رسالة بريد إلكتروني للمستخدمين الذين ليس لديهم أفعال في السجلات",
        "right-managechangetags": "إنشاء وتعطيل [[Special:Tags|الوسوم]]",
        "right-applychangetags": "تطبيق [[Special:Tags|الوسوم]]  مع التغييرات التي أجريتها.",
        "right-changetags": "إضافة وإزالة [[Special:Tags|وسوم]] في مراجعات ومدخلات سجل فردية",
        "recentchangeslinked-feed": "تغييرات ذات علاقة",
        "recentchangeslinked-toolbox": "تغييرات ذات علاقة",
        "recentchangeslinked-title": "التغييرات المرتبطة بصفحة «$1»",
-       "recentchangeslinked-summary": "أدخل اسم صفحة لمطالعة التغييرات في الصفحات التي تربط إلى أو من هذه الصفحة. (لمطالعة أعضاء تصنيف، أدخل تصنيف:اسم التصنيف). التغييرات في الصفحات ضمن [[Special:Watchlist|قائمة مراقبتك]] <strong>بخط داكن</strong>.",
+       "recentchangeslinked-summary": "أدخل اسم صفحة لرؤية التغييرات في الصفحات الموصولة من أو إلى تلك الصفحة. (لرؤية أعضاء تصنيف، أدخل تصنيف:الاسم الخاص بالتصنيف). التغييرات في الصفحات في [[Special:Watchlist|قائمة مراقبتك]] <strong>عريضة</strong>.",
        "recentchangeslinked-page": "اسم الصفحة:",
        "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضاً عن ذلك",
        "recentchanges-page-added-to-category": "[[:$1]] أضيفت إلى التصنيف",
        "duplicatesoffile": "{{PLURAL:$1|الملف التالي مكرر|ال$1 ملف التالي مكررات}} لهذا الملف\n([[Special:FileDuplicateSearch/$2|المزيد من التفاصيل]]):",
        "sharedupload": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.",
        "sharedupload-desc-there": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nمن فضلك انظر [$2 صفحة وصف الملف] لمزيد من المعلومات.",
-       "sharedupload-desc-here": "هذا الملف من $1 ويمكن للمشروعات الأخرى استعماله.\nالوصف من [$2 صفحة وصف الملف] هناك معروض فيما يلي.",
+       "sharedupload-desc-here": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nالوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.",
        "sharedupload-desc-edit": "هذا ملف من $1 وقد يكون مستخدما في مشاريع أخرى.\nيمكن لك أن تعدل وصف الملف في [$2  صفحته] هناك.",
        "sharedupload-desc-create": "هذا ملف من $1 وقد يكون مستخدما في مشاريع أخرى.\nيمكن لك أن تعدل وصف الملف في [$2  صفحته] هناك.",
        "filepage-nofile": "لا ملف موجود بهذا الاسم.",
        "nopagetitle": "لا توجد صفحة هدف كهذه",
        "nopagetext": "صفحة الهدف التي حددتها غير موجودة.",
        "pager-newer-n": "{{PLURAL:$1|أجدد 1|أجدد $1}}",
-       "pager-older-n": "{{PLURAL:$1|$1 أقدم}}",
+       "pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
        "suppress": "أوفرسايت",
        "querypage-disabled": "تم تعطيل هذه الصفحة الخاصة لأسباب تتعلق بالأداء.",
        "apihelp": "مساعدة API",
        "tooltip-p-logo": "زُر الصفحة الرئيسية",
        "tooltip-n-mainpage": "زر الصفحة الرئيسية",
        "tooltip-n-mainpage-description": "زر الصفحة الرئيسية",
-       "tooltip-n-portal": "Ø­Ù\88Ù\84 Ø§Ù\84Ù\85شرÙ\88عØ\8c Ù\88&nbsp;Ù\85ا Ù\8aÙ\85Ù\83Ù\86 Ù\81عÙ\84Ù\87Ø\8c Ù\88&nbsp;Ø£Ù\8aن تجد ما تحتاجه",
+       "tooltip-n-portal": "Ø­Ù\88Ù\84 Ø§Ù\84Ù\85شرÙ\88عØ\8c Ù\85اذا Ù\8aÙ\85Ù\83Ù\86 Ø£Ù\86 ØªÙ\81عÙ\84Ø\8c Ø£Ù\8aÙ\86 Ù\8aÙ\85Ù\83Ù\86 Ø£ن تجد ما تحتاجه",
        "tooltip-n-currentevents": "مطالعة سريعة لأهم الأحداث الجارية",
        "tooltip-n-recentchanges": "قائمة أحدث التغييرات في الويكي.",
        "tooltip-n-randompage": "حمل صفحة عشوائية",
        "tooltip-save": "احفظ تغييراتك",
        "tooltip-publish": "انشر تغييراتك",
        "tooltip-preview": "اعرض تغييراتك، من فضلك استخدم هذا قبل الحفظ!",
-       "tooltip-diff": "استعرض Ø§Ù\84تغÙ\8aÙ\8aرات Ø§Ù\84تÙ\8a Ø£Ø¬Ø±Ù\8aتÙ\87ا Ø¹Ù\84Ù\89 Ø§Ù\84Ù\86ص.",
+       "tooltip-diff": "اعرض التغييرات التي أجريتها على النص.",
        "tooltip-compareselectedversions": "شاهد الفروق بين النسختين المختارتين من هذه الصفحة.",
        "tooltip-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
        "tooltip-watchlistedit-normal-submit": "أزل العناوين",
        "exif-usercomment": "تعليقات المستخدم",
        "exif-relatedsoundfile": "ملف صوتي مرتبط",
        "exif-datetimeoriginal": "تاريخ ووقت توليد البيانات",
-       "exif-datetimedigitized": "تاريخ و&nbsp;وقت الرَّقمنة",
+       "exif-datetimedigitized": "تاريخ ووقت التحويل الرقمي",
        "exif-subsectime": "وقت تاريخ ثواني فرعية",
        "exif-subsectimeoriginal": "وقت تاريخ أصلي ثواني فرعية",
        "exif-subsectimedigitized": "وقت تاريخ رقمي ثواني فرعية",
index a3bea65..75fa204 100644 (file)
        "right-siteadmin": "Candar y descandar la base de datos",
        "right-override-export-depth": "Esportar páxines, incluyendo páxines enllazaes fasta una fondura de 5",
        "right-sendemail": "Unviar corréu a otros usuarios",
-       "right-sendemail-new-users": "Unviar corréu electrónicu a usuarios ensin aiciones rexistraes",
        "right-managechangetags": "Crear y (des)activar [[Special:Tags|etiquetes]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetes]] xunto colos cambios propios",
        "right-changetags": "Amestar y desaniciar [[Special:Tags|etiquetes]] arbitraries en revisiones individuales y entraes del rexistru",
index bce3a7a..f649d99 100644 (file)
        "right-siteadmin": "блякаваньне і разблякаваньне базы зьвестак",
        "right-override-export-depth": "экспартаваньне старонак, уключаючы зьвязаныя старонкі з глыбінёй да 5",
        "right-sendemail": "адпраўка электронных лістоў іншым удзельнікам",
-       "right-sendemail-new-users": "Дасылаць лісты электроннай пошты ўдзельнікам без зафіксаваных дзеяньняў",
        "right-managechangetags": "стварэньне і (дэ)актывацыя [[Special:Tags|метак]]",
        "right-applychangetags": "дадаваць [[Special:Tags|меткі]] пры рэдагаваньні",
        "right-changetags": "дадаваць і выдаляць адвольныя [[Special:Tags|меткі]] да асобных вэрсіяў і запісаў у журнале падзеяў",
index 023e5f2..c1bcb29 100644 (file)
        "right-siteadmin": "Blocar i desblocar la base de dades",
        "right-override-export-depth": "Exportar pàgines incloent aquelles enllaçades fins a una fondària de 5",
        "right-sendemail": "Enviar missatges de correu electrònic a altres usuaris",
-       "right-sendemail-new-users": "Envia un correu electrònic als usuaris amb cap acció registrada",
        "right-managechangetags": "Crear, activar i desactivar [[Special:Tags|etiquetes]]",
        "right-applychangetags": "Aplica les [[Special:Tags|etiquetes]] juntament amb els canvis propis",
        "right-changetags": "Afegeix i suprimeix [[Special:Tags|etiquetes]] en revisions individuals i entrades de registre",
index 08e9d1e..74fccaa 100644 (file)
        "right-siteadmin": "Zamykání a odemykání databáze",
        "right-override-export-depth": "Exportovat stránky včetně odkazovaných stránek až do hloubky 5",
        "right-sendemail": "Odesílání e-mailů ostatním uživatelům",
-       "right-sendemail-new-users": "Posílání e-mailů uživatelům bez zaznamenaných činností",
        "right-managechangetags": "Vytváření a (de)aktivace [[Special:Tags|značek]]",
        "right-applychangetags": "Přidávání [[Special:Tags|značek]] k vlastním změnám",
        "right-changetags": "Přidávání libovolných [[Special:Tags|značek]] na jednotlivé revize a protokolovací záznamy a jejich odebírání",
index 4ddffc6..29fe73c 100644 (file)
        "right-siteadmin": "Datenbank sperren und entsperren",
        "right-override-export-depth": "Exportiere Seiten einschließlich verlinkter Seiten bis zu einer Tiefe von 5",
        "right-sendemail": "E-Mails an andere Benutzer senden",
-       "right-sendemail-new-users": "E-Mails an Benutzer ohne Eintrag im Logbuch senden",
        "right-managechangetags": "[[Special:Tags|Markierungen]] erstellen und (de)aktivieren",
        "right-applychangetags": "[[Special:Tags|Markierungen]] zusammen mit den Änderungen anwenden",
        "right-changetags": "Beliebige [[Special:Tags|Markierungen]] zu einzelnen Versionen und Logbucheinträgen hinzufügen und entfernen",
index 2b48338..42ea35c 100644 (file)
        "right-siteadmin": "Lock and unlock the database",
        "right-override-export-depth": "Export pages including linked pages up to a depth of 5",
        "right-sendemail": "Send email to other users",
-       "right-sendemail-new-users": "Send email to users with no logged actions",
        "right-managechangetags": "Create and (de)activate [[Special:Tags|tags]]",
        "right-applychangetags": "Apply [[Special:Tags|tags]] along with one's changes",
        "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries",
index 7047aeb..dee0b9a 100644 (file)
        "right-siteadmin": "Bloquear y desbloquear la base de datos",
        "right-override-export-depth": "Exportar páginas, incluidas aquellas enlazadas hasta una profundidad de 5",
        "right-sendemail": "Enviar mensajes de correo a otros usuarios",
-       "right-sendemail-new-users": "Enviar correo electrónico a usuarios sin acciones en el registro",
        "right-managechangetags": "Crear y (des)activar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] junto con los cambios propios",
        "right-changetags": "Agregar y quitar [[Special:Tags|etiquetas]] arbitrarias a revisiones individuales y entradas del registro",
index 383848a..3210396 100644 (file)
        "right-siteadmin": "Panna lukku ja lukust lahti teha andmebaasi",
        "right-override-export-depth": "Eksportida lehekülgi, kaasates viidatud leheküljed kuni viienda tasemeni",
        "right-sendemail": "Saata teistele kasutajatele e-kirju",
-       "right-sendemail-new-users": "Saata e-kirju logitud toiminguteta kasutajatele",
        "right-managechangetags": "Koostada ja (in)aktiveerida [[Special:Tags|märgiseid]]",
        "right-applychangetags": "Rakendada [[Special:Tags|märgiseid]] enda muudatuste suhtes",
        "right-changetags": "Lisada ja eemaldada käsitsi rakendatavaid [[Special:Tags|märgiseid]] üksikute redaktsioonide ja logisissekannete juures",
index 7b57dba..2e407ae 100644 (file)
        "right-siteadmin": "Blokeatu eta desblokeatu datu basea blokeatu",
        "right-override-export-depth": "5eko sakonerararteko loturiko orrialdeak barne esportatu",
        "right-sendemail": "Beste erabiltzaileei e-posta bidali",
-       "right-sendemail-new-users": "Bidali mezu elektronikoa ekintzarik gabe dauden erabiltzaileei",
        "right-managechangetags": "Sortu eta (des)aktibatzeko  [[Special:Tags|tags]]",
        "right-applychangetags": "Aplikatu [[Special:Tags|tags]] bakoitzaren aldaketekin batera",
        "right-changetags": "[[Special:Tags|tags]] arbitrarioak gehitu edo kendu berrikusketa eta sarrera indibidualetan",
index 68eafd7..152b609 100644 (file)
        "right-siteadmin": "Verrouiller ou déverrouiller la base de données",
        "right-override-export-depth": "Exporter les pages en incluant les pages liées jusqu'à une profondeur de 5 niveaux",
        "right-sendemail": "Envoyer un courriel aux autres utilisateurs",
-       "right-sendemail-new-users": "Envoyer un courriel aux utilisateurs dont le journal ne comporte pas d'enregistrement de connexion",
        "right-managechangetags": "Créer et (dés)activer des [[Special:Tags|balises]]",
        "right-applychangetags": "Appliquer [[Special:Tags|les balises]] avec ses propres modifications",
        "right-changetags": "Ajouter et supprimer de façon arbitraire [[Special:Tags|des balises]] sur des révisions individuelles et des entrées de journal",
index e3d0bae..048526e 100644 (file)
        "historysize": "($1 octèt{{PLURAL:$1||s}})",
        "historyempty": "(voueda)",
        "history-feed-title": "Historico de les vèrsions",
-       "history-feed-description": "Historico de les vèrsions por cela pâge sur lo vouiqui",
+       "history-feed-description": "Historico de les vèrsions por cela pâge dessus lo vouiqui",
        "history-feed-item-nocomment": "$1 lo $2",
        "history-feed-empty": "La pâge demandâye ègziste pas.\nPôt-étre el est étâye suprimâye du vouiqui ou ben renomâye.\nÈprovâd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar de pâges novèles que vant avouéc.",
        "history-edit-tags": "Changiér les balises de les vèrsions chouèsies",
        "tooltip-ca-nstab-template": "Vêre lo modèlo",
        "tooltip-ca-nstab-help": "Vêre la pâge d’éde",
        "tooltip-ca-nstab-category": "Vêre la pâge de la catègoria",
-       "tooltip-minoredit": "Marcar mos changements coment petiôts",
+       "tooltip-minoredit": "Marcar cen coment un petiôt changement",
        "tooltip-save": "Encartar voutros changements",
        "tooltip-publish": "Publeyér voutros changements",
        "tooltip-preview": "Prèvêde voutros changements. Se vos plét, empleyéd-lo devant qu’encartar.",
        "pageinfo-display-title": "Titro montrâ",
        "pageinfo-default-sort": "Cllâf de chouèx per dèfôt",
        "pageinfo-length": "Talye de la pâge (en octèts)",
-       "pageinfo-article-id": "Identifient de la pâge",
+       "pageinfo-article-id": "ID de la pâge",
        "pageinfo-language": "Lengoua du contegnu de la pâge",
        "pageinfo-content-model": "Modèlo de contegnu de la pâge",
        "pageinfo-robot-policy": "Endèxacion per robots",
index c7b5f33..4d190c3 100644 (file)
        "right-siteadmin": "Pechar e abrir a base de datos",
        "right-override-export-depth": "Exportar páxinas incluíndo as páxinas ligadas ata unha profundidade de 5",
        "right-sendemail": "Enviar correos electrónicos a outros usuarios",
-       "right-sendemail-new-users": "Enviar correo electrónico a usuarios sen accións rexistradas",
        "right-managechangetags": "Crear e (des)activar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] xunto coas modificacións propias",
        "right-changetags": "Engadir e quitar [[Special:Tags|etiquetas]] arbitrarias a revisións individuais e entradas do rexistro",
index d23a0d7..6f345bf 100644 (file)
        "right-siteadmin": "נעילה וביטול נעילה של בסיס הנתונים",
        "right-override-export-depth": "ייצוא דפים כולל הדפים המקושרים (עד עומק של 5 דפים)",
        "right-sendemail": "שליחת דואר אלקטרוני למשתמשים אחרים",
-       "right-sendemail-new-users": "שליחת דואר אלקטרוני למשתמשים שלא ביצעו פעולות מתועדות",
        "right-managechangetags": "יצירה, הפעלה וביטול של [[Special:Tags|תגיות]]",
        "right-applychangetags": "החלת [[Special:Tags|תגיות]] יחד עם שינויים",
        "right-changetags": "הוספה והסרה של [[Special:Tags|תגיות]] לגרסאות ולרשומות יומן",
index 74acf20..4463c05 100644 (file)
        "right-siteadmin": "डाटाबेस को ताला लगायें या खोलें",
        "right-override-export-depth": "पृष्ठ निर्यात करें, पाँच स्तर की गहराई तक जुड़े हुए पृष्ठों समेत",
        "right-sendemail": "अन्य सदस्यों को ई-मेल भेजें",
-       "right-sendemail-new-users": "एक भी लॉग इन क्रिया नहीं करने वाले उपयोगकर्ताओं को ईमेल भेजें",
        "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें",
        "right-applychangetags": "प्रयोग में लाइये [[Special:Tags|tags]] किसी के बदलाव के साथ।",
        "right-changetags": "जमा करो और हटाओ स्वतंत्र [[Special:Tags|टैग]] व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर",
index 8c1fb80..601bd4d 100644 (file)
        "right-siteadmin": "Zaključavanje i otključavanje baze podataka",
        "right-override-export-depth": "Izvezi stranice uključujući i povezane stranice do dubine od 5",
        "right-sendemail": "Slanje e-pošte drugim suradnicima",
-       "right-sendemail-new-users": "Pošalji e-poruku suradnicima bez radnji zabilježenih u evidencijama",
        "right-managechangetags": "Stvaranje i (de)aktiviranje [[Special:Tags|oznaka]]",
        "grant-generic": "Snop prava »$1«",
        "grant-group-email": "Pošalji e-mail",
index 50bf660..5dd1e4e 100644 (file)
        "right-siteadmin": "adatbázis lezárása, felnyitása",
        "right-override-export-depth": "Lapok exportálása a hivatkozott lapokkal együtt, legfeljebb 5-ös mélységig",
        "right-sendemail": "e-mail küldése más felhasználóknak",
-       "right-sendemail-new-users": "e-mail küldése olyan felhasználóknak, akiknek nincs naplózott művelete",
        "right-managechangetags": "[[Special:Tags|címkék]] létrehozása és (de)aktiválása",
        "right-applychangetags": "[[Special:Tags|címkék]] alkalmazása saját változatokra",
        "right-changetags": "egyedi lapváltozatokon és naplóbejegyzéseken tetszőleges [[Special:Tags|címkék]] hozzáadása és törlése",
index f71620b..e9f23a4 100644 (file)
        "right-siteadmin": "Blocar e disblocar le base de datos",
        "right-override-export-depth": "Exportar paginas includente paginas ligate usque a un profunditate de 5",
        "right-sendemail": "Inviar e-mail a altere usatores",
-       "right-sendemail-new-users": "Inviar e-mail a usatores sin actiones in registro",
        "right-managechangetags": "Crear e (de)activar [[Special:Tags|etiquettas]]",
        "right-applychangetags": "Applicar [[Special:Tags|etiquettas]] al proprie modificationes",
        "right-changetags": "Adder e remover qualcunque [[Special:Tags|etiquettas]] sur individual versiones e entratas de registro",
        "rcfilters-activefilters": "Filtros active",
        "rcfilters-advancedfilters": "Filtros avantiate",
        "rcfilters-limit-title": "Resultatos a monstrar",
-       "rcfilters-limit-and-date-label": "{{PLURAL:$1|cambiamento|$1 cambiamentos}}, $2",
+       "rcfilters-limit-and-date-label": "$1 modification{{PLURAL:$1||es}}, $2",
        "rcfilters-date-popup-title": "Periodo de tempore in le qual cercar",
        "rcfilters-days-title": "Dies recente",
        "rcfilters-hours-title": "Horas recente",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Paginas ligate ab</strong> le pagina seligite",
        "rcfilters-filter-showlinkedto-label": "Monstrar modificationes sur paginas que liga a",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Paginas que liga verso</strong> le pagina seligite",
-       "rcfilters-target-page-placeholder": "Entra un nomine de pagina",
+       "rcfilters-target-page-placeholder": "Entra le nomine de un pagina (o categoria)",
        "rcnotefrom": "Ecce le {{PLURAL:$5|modification|modificationes}} a partir del <strong>$3 a $4</strong> (usque a <strong>$1</strong> entratas monstrate).",
        "rclistfromreset": "Reinitialisar selection de data",
        "rclistfrom": "Monstrar nove modificationes a partir del $3 a $2",
index 8c2f4aa..1d3b47c 100644 (file)
        "right-siteadmin": "Mengunci dan membuka kunci basis data",
        "right-override-export-depth": "Ekspor halaman termasuk halaman-halaman terkait hingga kedalaman 5",
        "right-sendemail": "Mengirim surel ke pengguna lain",
-       "right-sendemail-new-users": "Kirim email ke pengguna yang tidak melakukan login",
        "right-managechangetags": "Buat dan matikan [[Special:Tags|tag]]",
        "right-applychangetags": "Terapkan [[Special:Tags|tags]] bersamaan dengan perubahan pengguna",
        "right-changetags": "Tambah dan hapus [[Special:Tags|tag]] arbitrari pada revisi masing-masing dan entri log",
index 9fb8ee7..39dc919 100644 (file)
        "right-siteadmin": "データベースをロックおよびロック解除",
        "right-override-export-depth": "リンク先ページを5階層まで含めて書き出す",
        "right-sendemail": "他の利用者にメールを送信",
-       "right-sendemail-new-users": "ログに記録されていないユーザーにメールを送信する",
        "right-managechangetags": "[[Special:Tags|タグ]]の作成、有効化および無効化",
        "right-applychangetags": "自分の編集に[[Special:Tags|タグ]]を適用する",
        "right-changetags": "個々の版と記録項目の任意の[[Special:Tags|タグ]]の追加と削除",
        "version-poweredby-others": "その他",
        "version-poweredby-translators": "translatewiki.net の翻訳者たち",
        "version-credits-summary": "[[Special:Version|MediaWiki]] に貢献した以下の人たちに感謝します。",
-       "version-license-info": "MediaWikiはフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License) (バージョン2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。\n\nMediaWikiは、有用であることを期待して配布されていますが、商用あるいは特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。詳しくは、GNU一般公衆利用許諾書をご覧ください。\n\nあなたはこのプログラムと共に、[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU一般公衆利用許諾契約書の複製]を受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA) まで請求するか、[//www.gnu.org/licenses/old-licenses/gpl-2.0.html オンラインで閲覧]してください。",
+       "version-license-info": "MediaWikiはフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License) (バージョン2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。\n\nMediaWikiは、有用であることを期待して配布されていますが、<strong>商用</strong>あるいは<strong>特定の目的に適する</strong>かどうかも含めて、暗黙的にも、<em>一切保証されません</em>。詳しくは、GNU一般公衆利用許諾書をご覧ください。\n\nあなたはこのプログラムと共に、[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU一般公衆利用許諾契約書の複製]を受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA) まで請求するか、[//www.gnu.org/licenses/old-licenses/gpl-2.0.html オンラインで閲覧]してください。",
        "version-software": "インストール済みソフトウェア",
        "version-software-product": "製品",
        "version-software-version": "バージョン",
index 606c475..84055dc 100644 (file)
        "right-siteadmin": "데이터베이스를 잠그거나 잠금 해제",
        "right-override-export-depth": "5단계로 링크된 문서를 포함하여 문서를 내보내기",
        "right-sendemail": "다른 사용자에게 이메일 보내기",
-       "right-sendemail-new-users": "기록된 동작이 없는 사용자에게 이메일 보내기",
        "right-managechangetags": "데이터베이스에서 [[Special:Tags|태그]]를 만들거나 지우기",
        "right-applychangetags": "자신이 편집할 때 [[Special:Tags|태그]]를 적용하기",
        "right-changetags": "문서의 특정 판과 특정 기록 항목에 임의의 [[Special:Tags|태그]]를 추가하거나 제거하기",
index ce195f2..340eb1b 100644 (file)
        "right-siteadmin": "Datebank spären an d'Spär ophiewen",
        "right-override-export-depth": "Säiten exportéieren inklusiv de verlinkte Säite bis zu enger Déift vu 5",
        "right-sendemail": "Anere Benotzer E-Maile schécken",
-       "right-sendemail-new-users": "E-Mailen u Benotzer ouni geloggt Aktioune schécken",
        "grant-group-page-interaction": "Mat Säiten interagéieren",
        "grant-group-watchlist-interaction": "Mat Ärer Iwwerwaachungslëscht interagéieren",
        "grant-group-email": "E-Mail schécken",
index 7204309..96ce45e 100644 (file)
        "right-siteadmin": "Заклучување и отклучување на базата на податоци",
        "right-override-export-depth": "Извезување на страници вклучувајќи поврзани страници со продорност до 5",
        "right-sendemail": "Испраќање на е-пошта до други корисници",
-       "right-sendemail-new-users": "Испраќање е-пошта на корисници без заведени дејства",
        "right-managechangetags": "Создавање и (де)активирање на [[Special:Tags|ознаки]]",
        "right-applychangetags": "Задавање на [[Special:Tags|ознаки]] заедно со направените измени",
        "right-changetags": "Додавате и отстранување на произволни [[Special:Tags|ознаки]] во поединечни преработки и дневнички записи",
index a1e7e8f..67108a7 100644 (file)
        "right-siteadmin": "Låse og låse opp databasen",
        "right-override-export-depth": "Eksporter sider inkludert lenkede sider til en dypde på 5",
        "right-sendemail": "Sende e-post til andre brukere",
-       "right-sendemail-new-users": "Sende epost til brukere som ikke har loggførte handlinger",
        "right-managechangetags": "Opprette og (de)aktivere [[Special:Tags|tagger]]",
        "right-applychangetags": "Legge til [[Special:Tags|tagger]] sammen med ens endringer",
        "right-changetags": "Legge til og fjerne vilkårlige [[Special:Tags|tagger]] på individuelle revisjoner og loggoppføringer",
index 4fc3f59..7b82d47 100644 (file)
        "right-siteadmin": "De database blokkeren en weer vrijgeven",
        "right-override-export-depth": "Pagina's exporteren inclusief pagina's waarnaar verwezen wordt tot een diepte van vijf",
        "right-sendemail": "E-mail versturen aan andere gebruikers",
-       "right-sendemail-new-users": "Emails versturen naar gebruikers zonder geregistreerde handelingen",
        "right-managechangetags": "[[Special:Tags|Labels]] aanmaken en (de)activeren",
        "right-applychangetags": "[[Special:Tags|Labels]] aan bewerkingen toewijzen",
        "right-changetags": "Willekeurige [[Special:Tags|labels]] toevoegen aan en verwijderen van versies en logboekregels",
index bdfe6c6..82524e3 100644 (file)
        "rcfilters-activefilters": "Aktywne filtry",
        "rcfilters-advancedfilters": "Zaawansowane filtry",
        "rcfilters-limit-title": "Wyników do pokazania",
-       "rcfilters-limit-and-date-label": "{{PLURAL:$1|zmiana|$1 zmiany|$1 zmian}}, $2",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}, $2",
        "rcfilters-date-popup-title": "Przeszukiwany okres",
        "rcfilters-days-title": "Ostatnich dni",
        "rcfilters-hours-title": "Ostatnich godzin",
        "tag-mw-replace-description": "Edycja, która usuwa ponad 90% zawartości strony",
        "tag-mw-rollback": "Wycofanie zmian",
        "tag-mw-rollback-description": "Edycja, która przywraca poprzednią wersję przy użyciu funkcji cofania zmian (rollback)",
-       "tag-mw-undo": "Cofnij",
+       "tag-mw-undo": "Anulowanie edycji",
        "tag-mw-undo-description": "Edycje, które są wycofaniem poprzednich edycji przy użyciu linku \"anuluj edycję\"",
        "tags-title": "Znaczniki",
        "tags-intro": "Na tej stronie znajduje się lista znaczników, którymi oprogramowanie może oznaczyć edycje, oraz ich opisy.",
index bb950d7..2620fd0 100644 (file)
        "right-siteadmin": "Bloquear e desbloquear o banco de dados",
        "right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
        "right-sendemail": "Enviar email a outros usuários",
-       "right-sendemail-new-users": "Enviar e-mail para usuários sem ações registradas",
        "right-managechangetags": "Criar e (des)ativar [[Special:Tags|tags]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações de alguém",
        "right-changetags": "Adicionar e remover [[Special:Tags|etiquetas]] arbitrárias em revisões e ''logs'' individuais",
index b7f719a..1e4fd61 100644 (file)
        "right-siteadmin": "Bloquear e desbloquear a base de dados",
        "right-override-export-depth": "Exportar páginas incluindo páginas hiperligadas até uma profundidade de 5",
        "right-sendemail": "Enviar correio eletrónico a outros utilizadores",
-       "right-sendemail-new-users": "Enviar correio eletrónico a utilizadores sem ações registadas",
        "right-managechangetags": "Criar e (des)ativar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações",
        "right-changetags": "Adicionar ou remover [[Special:Tags|etiquetas]] arbitrárias em revisões e entradas de registo individuais",
index 8f8d871..6621e72 100644 (file)
        "right-siteadmin": "{{doc-right|siteadmin}}",
        "right-override-export-depth": "{{doc-right|override-export-depth}}",
        "right-sendemail": "{{doc-right|sendemail}}",
-       "right-sendemail-new-users": "{{doc-right|sendemail-new-users}}",
        "right-managechangetags": "{{doc-right|managechangetags}}",
        "right-applychangetags": "{{doc-right|applychangetags}}",
        "right-changetags": "{{doc-right|changetags}}",
index 45c205a..22fe686 100644 (file)
        "right-siteadmin": "блокировка и разблокировка базы данных",
        "right-override-export-depth": "экспортирование страниц, включая связанные страницы с глубиной до 5",
        "right-sendemail": "отправка электронной почты другим участникам",
-       "right-sendemail-new-users": "отправка электронной почты участникам без записей журналов",
        "right-managechangetags": "создание и (де)активация [[Special:Tags|меток]]",
        "right-applychangetags": "применение [[Special:Tags|меток]] вместе со своими правками",
        "right-changetags": "добавление и удаление произвольных [[Special:Tags|меток]] на отдельных правках и записях в журнале",
index c8bd6fd..db5e3d7 100644 (file)
        "right-siteadmin": "Zaklepanje in odklepanje baze podatkov",
        "right-override-export-depth": "Izvoz strani, vključno s povezaimi straneh do globine 5",
        "right-sendemail": "Pošiljanje e-pošte drugim uporabnikom",
-       "right-sendemail-new-users": "Pošlji e-pošto uporabnikom brez zabeleženih dejanj",
        "right-managechangetags": "Ustvarjanje in (dez)aktivacijo [[Special:Tags|oznak]]",
        "right-applychangetags": "Uveljavitev [[Special:Tags|oznak]] skupaj s spremembami",
        "right-changetags": "Dodajanje in odstranjevanje poljubnih [[Special:Tags|oznak]] na posameznih redakcijah in dnevniških vnosih",
index 6a46a1b..14007bf 100644 (file)
        "right-siteadmin": "Lås och öppna databasen",
        "right-override-export-depth": "Exportera sidor inklusive länkade sidor till ett djup på 5",
        "right-sendemail": "Skicka e-post till andra användare",
-       "right-sendemail-new-users": "Skicka e-post till användare utan loggade handlingar",
        "right-managechangetags": "Skapa och (in)aktivera [[Special:Tags|märken]]",
        "right-applychangetags": "Tillämpa [[Special:Tags|märken]] tillsammans med ens ändringar",
        "right-changetags": "Lägg till och ta bort godtyckliga [[Special:Tags|märken]] på individuella sidversioner och loggposter.",
index eea1502..19e6ab2 100644 (file)
        "right-siteadmin": "Блокування і розблокування бази даних",
        "right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5",
        "right-sendemail": "надсилання електронної пошти іншим користувачам",
-       "right-sendemail-new-users": "надсилати електронні листи до користувачів без логованих дій",
        "right-managechangetags": "створення та (де)активування [[Special:Tags|міток]]",
        "right-applychangetags": "додавання [[Special:Tags|міток]] разом зі змінами",
        "right-changetags": "додавання або вилучення будь-яких [[Special:Tags|міток]] для певних версій сторінок або записів журналів",
index 9f3b3dd..c5d050c 100644 (file)
        "right-siteadmin": "ڈیٹابیس کو مقفل یا غیر مقفل کرنا",
        "right-override-export-depth": "پانچویں سطح کی گہرائی تک مربوط صفحات پر مشتمل صفحات کی برآمد",
        "right-sendemail": "دیگر صارفین کو برقی ڈاک بھیجیں",
-       "right-sendemail-new-users": "لاگ ان ہوئے بغیر صارفین کو ای میل بھیجیں",
        "right-managechangetags": "[[Special:Tags|ٹیگوں]] کی تخلیق اور (غیر)فعالی",
        "right-applychangetags": "کسی کی تبدیلیوں کے ساتھ [[Special:Tags|ٹیگوں]] کا اطلاق",
        "right-changetags": "انفرادی نسخوں اور نوشتہ کے اندراج پر [[Special:Tags|ٹیگوں]] کا حذف و اضافہ",
index 10f875e..b45b3bb 100644 (file)
        "right-siteadmin": "锁定和解锁数据库",
        "right-override-export-depth": "导出页面,包括最多5层链接",
        "right-sendemail": "发送电子邮件给其他用户",
-       "right-sendemail-new-users": "发送电子邮件至没有日志记载操作的用户",
        "right-managechangetags": "创建和(取消)激活[[Special:Tags|标签]]",
        "right-applychangetags": "连同某人的更改一起应用[[Special:Tags|标签]]",
        "right-changetags": "在个别修订和日志记录中添加和移除任意[[Special:Tags|标签]]",
index 282a04b..c1835d0 100644 (file)
@@ -96,7 +96,7 @@ class DumpCategoriesAsRdf extends Maintenance {
                if ( substr( $licenseUrl, 0, 2 ) == '//' ) {
                        $licenseUrl = 'https:' . $licenseUrl;
                }
-               $this->rdfWriter->about( wfExpandUrl( '/categoriesDump', PROTO_CANONICAL ) )
+               $this->rdfWriter->about( $this->categoriesRdf->getDumpURI() )
                        ->a( 'schema', 'Dataset' )
                        ->a( 'owl', 'Ontology' )
                        ->say( 'cc', 'license' )->is( $licenseUrl )
index d2d7ea8..b8bd8e0 100644 (file)
@@ -1,10 +1,10 @@
-<http://acme.test/categoriesDump> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Dataset> .
-<http://acme.test/categoriesDump> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Ontology> .
-<http://acme.test/categoriesDump> <http://creativecommons.org/ns#license> <https://creativecommons.org/licenses/by-sa/3.0/> .
-<http://acme.test/categoriesDump> <http://schema.org/softwareVersion> "1.0" .
-<http://acme.test/categoriesDump> <http://schema.org/dateModified> "{DATE}"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
-<http://acme.test/categoriesDump> <http://schema.org/isPartOf> <http://acme.test/> .
-<http://acme.test/categoriesDump> <http://www.w3.org/2002/07/owl#imports> <https://www.mediawiki.org/ontology/ontology.owl> .
+<http://acme.test/wiki/Special:CategoryDump> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Dataset> .
+<http://acme.test/wiki/Special:CategoryDump> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Ontology> .
+<http://acme.test/wiki/Special:CategoryDump> <http://creativecommons.org/ns#license> <https://creativecommons.org/licenses/by-sa/3.0/> .
+<http://acme.test/wiki/Special:CategoryDump> <http://schema.org/softwareVersion> "1.1" .
+<http://acme.test/wiki/Special:CategoryDump> <http://schema.org/dateModified> "{DATE}"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
+<http://acme.test/wiki/Special:CategoryDump> <http://schema.org/isPartOf> <http://acme.test/> .
+<http://acme.test/wiki/Special:CategoryDump> <http://www.w3.org/2002/07/owl#imports> <https://www.mediawiki.org/ontology/ontology.owl> .
 <http://acme.test/wiki/Category:Category_One> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.mediawiki.org/ontology#Category> .
 <http://acme.test/wiki/Category:Category_One> <http://www.w3.org/2000/01/rdf-schema#label> "Category One" .
 <http://acme.test/wiki/Category:2_Category_Two> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.mediawiki.org/ontology#Category> .
index e33de20..8185670 100644 (file)
@@ -44,7 +44,7 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
                        ->getMock();
 
                $lb->method( 'reallyOpenConnection' )->willReturnCallback(
-                       function ( array $server, $dbNameOverride = false ) {
+                       function ( array $server, $dbNameOverride ) {
                                return $this->getDatabaseMock( $server );
                        }
                );
index e46a0dd..e52dac6 100644 (file)
@@ -27,6 +27,7 @@ use Wikimedia\Rdbms\LBFactorySimple;
 use Wikimedia\Rdbms\LBFactoryMulti;
 use Wikimedia\Rdbms\ChronologyProtector;
 use Wikimedia\Rdbms\MySQLMasterPos;
+use Wikimedia\Rdbms\DatabaseDomain;
 
 /**
  * @group Database
@@ -314,7 +315,8 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        private function newLBFactoryMulti( array $baseOverride = [], array $serverOverride = [] ) {
-               global $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, $wgDBtype, $wgSQLiteDataDir;
+               global $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, $wgDBprefix, $wgDBtype;
+               global $wgSQLiteDataDir;
 
                return new LBFactoryMulti( $baseOverride + [
                        'sectionsByDB' => [],
@@ -325,6 +327,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                        ],
                        'serverTemplate' => $serverOverride + [
                                'dbname' => $wgDBname,
+                               'tablePrefix' => $wgDBprefix,
                                'user' => $wgDBuser,
                                'password' => $wgDBpassword,
                                'type' => $wgDBtype,
@@ -335,7 +338,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                                'test-db1' => $wgDBserver,
                        ],
                        'loadMonitorClass' => 'LoadMonitorNull',
-                       'localDomain' => wfWikiID()
+                       'localDomain' => new DatabaseDomain( $wgDBname, null, $wgDBprefix )
                ] );
        }
 
@@ -361,7 +364,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                if ( $wgDBtype !== 'sqlite' ) {
                        $db = $lb->getConnectionRef( DB_MASTER );
                        $this->assertEquals(
-                               $wgDBname,
+                               wfWikiID(),
                                $db->getDomainID()
                        );
                        unset( $db );
@@ -369,34 +372,45 @@ class LBFactoryTest extends MediaWikiTestCase {
 
                /** @var Database $db */
                $db = $lb->getConnection( DB_MASTER, [], '' );
-               $lb->reuseConnection( $db ); // don't care
 
+               $this->assertEquals(
+                       $wgDBname,
+                       $db->getDomainId(),
+                       'Main domain ID handle used; same DB name'
+               );
+               $this->assertEquals(
+                       $wgDBname,
+                       $db->getDBname(),
+                       'Main domain ID handle used; same DB name'
+               );
                $this->assertEquals(
                        '',
-                       $db->getDomainID()
+                       $db->tablePrefix(),
+                       'Main domain ID handle used; prefix is empty though'
                );
-
                $this->assertEquals(
                        $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'page' ),
                        "Correct full table name"
                );
-
                $this->assertEquals(
                        $this->quoteTable( $db, $wgDBname ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( "$wgDBname.page" ),
                        "Correct full table name"
                );
-
                $this->assertEquals(
                        $this->quoteTable( $db, 'nice_db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'nice_db.page' ),
                        "Correct full table name"
                );
 
+               $lb->reuseConnection( $db ); // don't care
+
+               $db = $lb->getConnection( DB_MASTER ); // local domain connection
                $factory->setDomainPrefix( 'my_' );
+
                $this->assertEquals(
-                       '',
+                       "$wgDBname-my_",
                        $db->getDomainID()
                );
                $this->assertEquals(
@@ -415,7 +429,7 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        public function testTrickyDomain() {
-               global $wgDBtype;
+               global $wgDBtype, $wgDBname;
 
                if ( $wgDBtype === 'sqlite' ) {
                        $tmpDir = $this->getNewTempDirectory();
@@ -427,18 +441,17 @@ class LBFactoryTest extends MediaWikiTestCase {
                        $dbPath = null;
                }
 
-               $dbname = 'unittest-domain';
+               $dbname = 'unittest-domain'; // explodes if DB is selected
                $factory = $this->newLBFactoryMulti(
-                       [ 'localDomain' => $dbname ],
-                       [ 'dbname' => $dbname, 'dbFilePath' => $dbPath ]
+                       [ 'localDomain' => ( new DatabaseDomain( $dbname, null, '' ) )->getId() ],
+                       [ 'dbFilePath' => $dbPath ]
                );
                $lb = $factory->getMainLB();
                /** @var Database $db */
                $db = $lb->getConnection( DB_MASTER, [], '' );
-               $lb->reuseConnection( $db ); // don't care
 
                $this->assertEquals(
-                       '',
+                       $wgDBname,
                        $db->getDomainID()
                );
 
@@ -460,7 +473,10 @@ class LBFactoryTest extends MediaWikiTestCase {
                        "Correct full table name"
                );
 
+               $lb->reuseConnection( $db ); // don't care
+
                $factory->setDomainPrefix( 'my_' );
+               $db = $lb->getConnection( DB_MASTER, [], "$wgDBname-my_" );
 
                $this->assertEquals(
                        $this->quoteTable( $db, 'my_page' ),
@@ -472,7 +488,6 @@ class LBFactoryTest extends MediaWikiTestCase {
                        $db->tableName( 'other_nice_db.page' ),
                        "Correct full table name"
                );
-
                $this->assertEquals(
                        $this->quoteTable( $db, 'garbage-db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'garbage-db.page' ),
@@ -494,6 +509,8 @@ class LBFactoryTest extends MediaWikiTestCase {
                        \MediaWiki\restoreWarnings();
                }
 
+               $lb->reuseConnection( $db ); // don't care
+
                $factory->closeAll();
                $factory->destroy();
        }
index 7b34b59..bd21dc8 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group JobQueue
  * @group medium
@@ -26,7 +28,7 @@ class JobQueueTest extends MediaWikiTestCase {
                        }
                        $baseConfig = $wgJobTypeConf[$name];
                } else {
-                       $baseConfig = [ 'class' => 'JobQueueDB' ];
+                       $baseConfig = [ 'class' => 'JobQueueDBSingle' ];
                }
                $baseConfig['type'] = 'null';
                $baseConfig['wiki'] = wfWikiID();
@@ -381,3 +383,11 @@ class JobQueueTest extends MediaWikiTestCase {
                        [ 'lives' => 0, 'usleep' => 0, 'removeDuplicates' => 1, 'i' => $i ] + $rootJob );
        }
 }
+
+class JobQueueDBSingle extends JobQueueDB {
+       protected function getDB( $index ) {
+               $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
+               // Override to not use CONN_TRX_AUTO so that we see the same temporary `job` table
+               return $lb->getConnection( $index, [], $this->wiki );
+       }
+}
index f03a201..48935c3 100644 (file)
@@ -69,8 +69,8 @@ class CategoriesRdfTest extends MediaWikiLangTestCase {
                $dumpScript->execute();
                $actualOut = file_get_contents( $outFileName );
                $actualOut = preg_replace(
-                       '|<http://acme.test/categoriesDump> <http://schema.org/dateModified> "[^"]+?"|',
-                       '<http://acme.test/categoriesDump> <http://schema.org/dateModified> "{DATE}"',
+                       '|<http://acme.test/wiki/Special:CategoryDump> <http://schema.org/dateModified> "[^"]+?"|',
+                       '<http://acme.test/wiki/Special:CategoryDump> <http://schema.org/dateModified> "{DATE}"',
                        $actualOut
                );