From: jenkins-bot Date: Mon, 30 Sep 2019 18:34:21 +0000 (+0000) Subject: Merge "selenium: Remove "RunJobs" wait from specialrecentchanges test" X-Git-Tag: 1.34.0-rc.0~43 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=70987ee4c08d0c19468f67d7482d5bd150a0ad39;hp=4bd69c7536aa8b8aa7850748435761d5572b368c Merge "selenium: Remove "RunJobs" wait from specialrecentchanges test" --- diff --git a/RELEASE-NOTES-1.34 b/RELEASE-NOTES-1.34 index 0d6f1e11bd..48fcbafb97 100644 --- a/RELEASE-NOTES-1.34 +++ b/RELEASE-NOTES-1.34 @@ -600,6 +600,10 @@ because of Phabricator reports. ApiQueryBlockInfoTrait instead. === Other changes in 1.34 === +* Added option to specify "Various authors" as author in extension credits using + "..." as the only author name. If the "author" array contains more than one + entry and "..." is one of the entries in the array, "..." will be parsed as + "others" (version-poweredby-others i18n message) like previously. * … == Compatibility == diff --git a/includes/Revision/RevisionStore.php b/includes/Revision/RevisionStore.php index c444cc4e7d..b1370dc712 100644 --- a/includes/Revision/RevisionStore.php +++ b/includes/Revision/RevisionStore.php @@ -1653,6 +1653,11 @@ class RevisionStore = $this->emulateContentId( intval( $row->rev_text_id ) ); } + // We may have a fake blob_data field from getSlotRowsForBatch(), use it! + if ( isset( $row->blob_data ) ) { + $slotContents[$row->content_address] = $row->blob_data; + } + $contentCallback = function ( SlotRecord $slot ) use ( $slotContents, $queryFlags ) { $blob = null; if ( isset( $slotContents[$slot->getAddress()] ) ) { @@ -1897,7 +1902,8 @@ class RevisionStore * @param array $options Supports the following options: * 'slots' - whether metadata about revision slots should be * loaded immediately. Supports falsy or truthy value as well - * as an explicit list of slot role names. + * as an explicit list of slot role names. The main slot will + * always be loaded. * 'content'- whether the actual content of the slots should be * preloaded. * @param int $queryFlags @@ -1969,47 +1975,25 @@ class RevisionStore return $result; } - $slotQueryConds = [ 'slot_revision_id' => array_keys( $rowsByRevId ) ]; - if ( is_array( $options['slots'] ) ) { - $slotQueryConds['slot_role_id'] = array_map( function ( $slot_name ) { - return $this->slotRoleStore->getId( $slot_name ); - }, $options['slots'] ); - } - - // We need to set the `content` flag because newRevisionFromRowAndSlots requires content - // metadata to be loaded. - $slotQueryInfo = self::getSlotsQueryInfo( [ 'content' ] ); - $db = $this->getDBConnectionRefForQueryFlags( $queryFlags ); - $slotRows = $db->select( - $slotQueryInfo['tables'], - $slotQueryInfo['fields'], - $slotQueryConds, - __METHOD__, - [], - $slotQueryInfo['joins'] - ); + $slotRowOptions = [ + 'slots' => $options['slots'] ?? true, + 'blobs' => $options['content'] ?? false, + ]; - $slotRowsByRevId = []; - foreach ( $slotRows as $slotRow ) { - $slotRowsByRevId[$slotRow->slot_revision_id][] = $slotRow; + if ( is_array( $slotRowOptions['slots'] ) + && !in_array( SlotRecord::MAIN, $slotRowOptions['slots'] ) + ) { + // Make sure the main slot is always loaded, RevisionRecord requires this. + $slotRowOptions['slots'][] = SlotRecord::MAIN; } - $slotContents = null; - if ( $options['content'] ?? false ) { - $blobAddresses = []; - foreach ( $slotRows as $slotRow ) { - $blobAddresses[] = $slotRow->content_address; - } - $slotContentFetchStatus = $this->blobStore - ->getBlobBatch( $blobAddresses, $queryFlags ); - foreach ( $slotContentFetchStatus->getErrors() as $error ) { - $result->warning( $error['message'], ...$error['params'] ); - } - $slotContents = $slotContentFetchStatus->getValue(); - } + $slotRowsStatus = $this->getSlotRowsForBatch( $rowsByRevId, $slotRowOptions, $queryFlags ); + + $result->merge( $slotRowsStatus ); + $slotRowsByRevId = $slotRowsStatus->getValue(); $result->setResult( true, array_map( function ( $row ) use - ( $slotRowsByRevId, $queryFlags, $titlesByPageId, $slotContents, $result ) { + ( $slotRowsByRevId, $queryFlags, $titlesByPageId, $result ) { if ( !isset( $slotRowsByRevId[$row->rev_id] ) ) { $result->warning( 'internalerror', @@ -2025,8 +2009,7 @@ class RevisionStore $row->rev_id, $slotRowsByRevId[$row->rev_id], $queryFlags, - $titlesByPageId[$row->rev_page], - $slotContents + $titlesByPageId[$row->rev_page] ) ), $queryFlags, @@ -2040,6 +2023,174 @@ class RevisionStore return $result; } + /** + * Gets the slot rows associated with a batch of revisions. + * The serialized content of each slot can be included by setting the 'blobs' option. + * Callers are responsible for unserializing and interpreting the content blobs + * based on the model_name and role_name fields. + * + * @param Traversable|array $rowsOrIds list of revision ids, or revision rows from a db query. + * @param array $options Supports the following options: + * 'slots' - a list of slot role names to fetch. If omitted or true or null, + * all slots are fetched + * 'blobs'- whether the serialized content of each slot should be loaded. + * If true, the serialiezd content will be present in the slot row + * in the blob_data field. + * @param int $queryFlags + * + * @return StatusValue a status containing, if isOK() returns true, a two-level nested + * associative array, mapping from revision ID to an associative array that maps from + * role name to a database row object. The database row object will contain the fields + * defined by getSlotQueryInfo() with the 'content' flag set, plus the blob_data field + * if the 'blobs' is set in $options. The model_name and role_name fields will also be + * set. + */ + private function getSlotRowsForBatch( + $rowsOrIds, + array $options = [], + $queryFlags = 0 + ) { + $readNew = $this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_NEW ); + $result = new StatusValue(); + + $revIds = []; + foreach ( $rowsOrIds as $row ) { + $revIds[] = is_object( $row ) ? (int)$row->rev_id : (int)$row; + } + + // Nothing to do. + // Note that $rowsOrIds may not be "empty" even if $revIds is, e.g. if it's a ResultWrapper. + if ( empty( $revIds ) ) { + $result->setResult( true, [] ); + return $result; + } + + // We need to set the `content` flag to join in content meta-data + $slotQueryInfo = self::getSlotsQueryInfo( [ 'content' ] ); + $revIdField = $slotQueryInfo['keys']['rev_id']; + $slotQueryConds = [ $revIdField => $revIds ]; + + if ( $readNew && isset( $options['slots'] ) && is_array( $options['slots'] ) ) { + if ( empty( $options['slots'] ) ) { + // Degenerate case: return no slots for each revision. + $result->setResult( true, array_fill_keys( $revIds, [] ) ); + return $result; + } + + $roleIdField = $slotQueryInfo['keys']['role_id']; + $slotQueryConds[$roleIdField] = array_map( function ( $slot_name ) { + return $this->slotRoleStore->getId( $slot_name ); + }, $options['slots'] ); + } + + $db = $this->getDBConnectionRefForQueryFlags( $queryFlags ); + $slotRows = $db->select( + $slotQueryInfo['tables'], + $slotQueryInfo['fields'], + $slotQueryConds, + __METHOD__, + [], + $slotQueryInfo['joins'] + ); + + $slotContents = null; + if ( $options['blobs'] ?? false ) { + $blobAddresses = []; + foreach ( $slotRows as $slotRow ) { + $blobAddresses[] = $slotRow->content_address; + } + $slotContentFetchStatus = $this->blobStore + ->getBlobBatch( $blobAddresses, $queryFlags ); + foreach ( $slotContentFetchStatus->getErrors() as $error ) { + $result->warning( $error['message'], ...$error['params'] ); + } + $slotContents = $slotContentFetchStatus->getValue(); + } + + $slotRowsByRevId = []; + foreach ( $slotRows as $slotRow ) { + if ( $slotContents === null ) { + // nothing to do + } elseif ( isset( $slotContents[$slotRow->content_address] ) ) { + $slotRow->blob_data = $slotContents[$slotRow->content_address]; + } else { + $result->warning( + 'internalerror', + "Couldn't find blob data for rev {$slotRow->slot_revision_id}" + ); + $slotRow->blob_data = null; + } + + // conditional needed for SCHEMA_COMPAT_READ_OLD + if ( !isset( $slotRow->role_name ) && isset( $slotRow->slot_role_id ) ) { + $slotRow->role_name = $this->slotRoleStore->getName( (int)$slotRow->slot_role_id ); + } + + // conditional needed for SCHEMA_COMPAT_READ_OLD + if ( !isset( $slotRow->model_name ) && isset( $slotRow->content_model ) ) { + $slotRow->model_name = $this->contentModelStore->getName( (int)$slotRow->content_model ); + } + + $slotRowsByRevId[$slotRow->slot_revision_id][$slotRow->role_name] = $slotRow; + } + + $result->setResult( true, $slotRowsByRevId ); + return $result; + } + + /** + * Gets raw (serialized) content blobs for the given set of revisions. + * Callers are responsible for unserializing and interpreting the content blobs + * based on the model_name field and the slot role. + * + * This method is intended for bulk operations in maintenance scripts. + * It may be chosen over newRevisionsFromBatch by code that are only interested + * in raw content, as opposed to meta data. Code that needs to access meta data of revisions, + * slots, or content objects should use newRevisionsFromBatch() instead. + * + * @param Traversable|array $rowsOrIds list of revision ids, or revision rows from a db query. + * @param array|null $slots the role names for which to get slots. + * @param int $queryFlags + * + * @return StatusValue a status containing, if isOK() returns true, a two-level nested + * associative array, mapping from revision ID to an associative array that maps from + * role name to an anonymous object object containing two fields: + * - model_name: the name of the content's model + * - blob_data: serialized content data + */ + public function getContentBlobsForBatch( + $rowsOrIds, + $slots = null, + $queryFlags = 0 + ) { + $result = $this->getSlotRowsForBatch( + $rowsOrIds, + [ 'slots' => $slots, 'blobs' => true ], + $queryFlags + ); + + if ( $result->isOK() ) { + // strip out all internal meta data that we don't want to expose + foreach ( $result->value as $revId => $rowsByRole ) { + foreach ( $rowsByRole as $role => $slotRow ) { + if ( is_array( $slots ) && !in_array( $role, $slots ) ) { + // In SCHEMA_COMPAT_READ_OLD mode we may get the main slot even + // if we didn't ask for it. + unset( $result->value[$revId][$role] ); + continue; + } + + $result->value[$revId][$role] = (object)[ + 'blob_data' => $slotRow->blob_data, + 'model_name' => $slotRow->model_name, + ]; + } + } + } + + return $result; + } + /** * Constructs a new MutableRevisionRecord based on the given associative array following * the MW1.29 convention for the Revision constructor. @@ -2589,16 +2740,22 @@ class RevisionStore * - tables: (string[]) to include in the `$table` to `IDatabase->select()` * - fields: (string[]) to include in the `$vars` to `IDatabase->select()` * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` + * - keys: (associative array) to look up fields to match against. + * In particular, the field that can be used to find slots by rev_id + * can be found in ['keys']['rev_id']. */ public function getSlotsQueryInfo( $options = [] ) { $ret = [ 'tables' => [], 'fields' => [], 'joins' => [], + 'keys' => [], ]; if ( $this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_OLD ) ) { $db = $this->getDBConnectionRef( DB_REPLICA ); + $ret['keys']['rev_id'] = 'rev_id'; + $ret['tables'][] = 'revision'; $ret['fields']['slot_revision_id'] = 'rev_id'; @@ -2622,6 +2779,9 @@ class RevisionStore } } } else { + $ret['keys']['rev_id'] = 'slot_revision_id'; + $ret['keys']['role_id'] = 'slot_role_id'; + $ret['tables'][] = 'slots'; $ret['fields'] = array_merge( $ret['fields'], [ 'slot_revision_id', @@ -2639,6 +2799,8 @@ class RevisionStore } if ( in_array( 'content', $options, true ) ) { + $ret['keys']['model_id'] = 'content_model'; + $ret['tables'][] = 'content'; $ret['fields'] = array_merge( $ret['fields'], [ 'content_size', diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json index 12ece4c5e3..712033d122 100644 --- a/includes/api/i18n/fr.json +++ b/includes/api/i18n/fr.json @@ -79,7 +79,7 @@ "apihelp-checktoken-param-type": "Type de jeton testé", "apihelp-checktoken-param-token": "Jeton à tester.", "apihelp-checktoken-param-maxtokenage": "Temps maximum autorisé pour l'utilisation du jeton, en secondes", - "apihelp-checktoken-example-simple": "Tester la validité d'un jeton de csrf.", + "apihelp-checktoken-example-simple": "Tester la validité d’un jeton csrf.", "apihelp-clearhasmsg-summary": "Efface le drapeau hasmsg pour l’utilisateur courant.", "apihelp-clearhasmsg-example-1": "Effacer le drapeau hasmsg pour l’utilisateur courant", "apihelp-clientlogin-summary": "Se connecter au wiki en utilisant la procédure interactive.", diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php index a249ada699..5b0909f818 100644 --- a/includes/installer/MysqlUpdater.php +++ b/includes/installer/MysqlUpdater.php @@ -358,6 +358,14 @@ class MysqlUpdater extends DatabaseUpdater { [ 'addTable', 'content_models', 'patch-content_models.sql' ], [ 'migrateArchiveText' ], [ 'addTable', 'actor', 'patch-actor-table.sql' ], + [ 'addTable', 'revision_actor_temp', 'patch-revision_actor_temp-table.sql' ], + [ 'addField', 'archive', 'ar_actor', 'patch-archive-ar_actor.sql' ], + [ 'addField', 'ipblocks', 'ipb_by_actor', 'patch-ipblocks-ipb_by_actor.sql' ], + [ 'addField', 'image', 'img_actor', 'patch-image-img_actor.sql' ], + [ 'addField', 'oldimage', 'oi_actor', 'patch-oldimage-oi_actor.sql' ], + [ 'addField', 'filearchive', 'fa_actor', 'patch-filearchive-fa_actor.sql' ], + [ 'addField', 'recentchanges', 'rc_actor', 'patch-recentchanges-rc_actor.sql' ], + [ 'addField', 'logging', 'log_actor', 'patch-logging-log_actor.sql' ], [ 'migrateActors' ], [ 'modifyField', 'revision', 'rev_text_id', 'patch-rev_text_id-default.sql' ], [ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ], diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php index d7b14573c4..d0b16cb7fd 100644 --- a/includes/installer/PostgresUpdater.php +++ b/includes/installer/PostgresUpdater.php @@ -512,6 +512,7 @@ class PostgresUpdater extends DatabaseUpdater { [ 'addTable', 'slot_roles', 'patch-slot_roles-table.sql' ], [ 'migrateArchiveText' ], [ 'addTable', 'actor', 'patch-actor-table.sql' ], + [ 'addTable', 'revision_actor_temp', 'patch-revision_actor_temp-table.sql' ], [ 'setDefault', 'revision', 'rev_user', 0 ], [ 'setDefault', 'revision', 'rev_user_text', '' ], [ 'setDefault', 'archive', 'ar_user', 0 ], diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php index 15b3a5a2c1..eac07381fc 100644 --- a/includes/installer/SqliteUpdater.php +++ b/includes/installer/SqliteUpdater.php @@ -216,7 +216,14 @@ class SqliteUpdater extends DatabaseUpdater { [ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ], [ 'migrateArchiveText' ], [ 'addTable', 'actor', 'patch-actor-table.sql' ], + [ 'addField', 'archive', 'ar_actor', 'patch-archive-ar_actor.sql' ], + [ 'addTable', 'revision_actor_temp', 'patch-revision_actor_temp-table.sql' ], + [ 'addField', 'ipblocks', 'ipb_by_actor', 'patch-ipblocks-ipb_by_actor.sql' ], + [ 'addField', 'image', 'img_actor', 'patch-image-img_actor.sql' ], + [ 'addField', 'oldimage', 'oi_actor', 'patch-oldimage-oi_actor.sql' ], [ 'addField', 'filearchive', 'fa_actor', 'patch-filearchive-fa_actor.sql' ], + [ 'addField', 'recentchanges', 'rc_actor', 'patch-recentchanges-rc_actor.sql' ], + [ 'addField', 'logging', 'log_actor', 'patch-logging-log_actor.sql' ], [ 'migrateActors' ], [ 'modifyField', 'revision', 'rev_text_id', 'patch-rev_text_id-default.sql' ], [ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ], diff --git a/includes/installer/i18n/mni.json b/includes/installer/i18n/mni.json new file mode 100644 index 0000000000..5f6088a13b --- /dev/null +++ b/includes/installer/i18n/mni.json @@ -0,0 +1,46 @@ +{ + "@metadata": { + "authors": [ + "Awangba Mangang" + ] + }, + "config-your-language": "ꯅꯡꯒꯤ ꯂꯣꯟ", + "config-wiki-language": "ꯃꯤꯇꯩꯂꯣꯟ", + "config-wiki-language-help": "ꯃꯤꯇꯩꯂꯣꯟ", + "config-back": "ꯍꯟꯂꯨ", + "config-continue": "ꯃꯈꯥꯆꯠꯊꯧ", + "config-page-language": "ꯂꯣꯟ", + "config-page-welcome": "ꯋꯤꯀꯤꯃꯦꯗꯤꯌꯥꯗ ꯂꯦꯡꯁꯤꯟꯕꯤꯔꯛꯁꯤ", + "config-page-dbconnect": "ꯗꯥꯇꯥꯕꯦꯁꯇ ꯁꯝꯃꯨ", + "config-page-upgrade": "ꯋꯥꯡꯈꯠꯍꯜꯂꯨ ꯂꯩꯔꯤꯕꯥ ꯄꯣꯠꯇꯨ ꯍꯥꯞꯁꯤꯟꯗꯨꯅꯥ", + "config-page-dbsettings": "ꯗꯥꯇꯥꯕꯦꯁ ꯁꯦꯝꯐꯝ", + "config-page-name": "ꯃꯃꯤꯡ", + "config-page-options": "ꯃꯌꯥꯝꯒꯤꯃꯔꯛꯇꯥ", + "config-page-install": "ꯈꯤꯟꯀꯠꯂꯨ", + "config-page-complete": "ꯂꯣꯏꯁꯤꯟꯂꯦ", + "config-page-restart": "ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯈꯤꯟꯀꯠꯂꯨ", + "config-page-readme": "ꯄꯥꯕꯤꯌꯣ ꯑꯩꯕꯨ", + "config-page-releasenotes": "ꯑꯌꯤꯕꯥ ꯊꯥꯗꯣꯛ ꯎ", + "config-page-copying": "ꯁꯤꯟꯗꯣꯛ ꯏ", + "config-page-upgradedoc": "ꯋꯥꯡꯈꯠꯍꯜꯂꯤ", + "config-page-existingwiki": "ꯂꯩꯔꯤꯕꯥ ꯋꯤꯀꯤ", + "config-help-restart": "ꯅꯪ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯈꯤꯟꯀꯠ ꯄꯥꯒꯤ ꯊꯧꯑꯣꯡ ꯑꯃꯥꯗꯤ ꯍꯥꯟꯅꯅꯥ ꯌꯣꯛꯁꯤꯟꯗꯨꯅꯥ ꯊꯝꯕꯥ ꯗꯥꯇꯥ ꯁꯤ ꯃꯥꯡꯍꯟꯕꯥ ꯄꯥꯝꯕꯔꯥ?", + "config-restart": "ꯍꯣꯏ‌, ꯑꯃꯨꯛꯀꯥ ꯍꯧꯔꯦ ꯃꯥꯁꯤ", + "config-welcome": "===ꯑꯀꯣꯏꯕꯒꯤ ꯐꯤꯕꯝ ꯌꯦꯡꯁꯤꯟꯕ===\n\nꯇꯥꯉꯥꯏ ꯐꯥꯗꯅ ꯆꯡꯕꯔꯥ ꯌꯦꯡꯁꯤꯟꯕ ꯫ ꯃꯗꯨꯗꯤ ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ ꯈꯤꯟꯀꯠꯄꯥ/ꯂꯤꯡꯈꯠꯄ ꯁꯤ ꯑꯀꯣꯏꯕꯒꯤ ꯒꯥ ꯆꯥꯟꯅꯥꯕꯔꯥ ꯍꯥꯏꯅ ꯫\nꯀꯥꯎꯊꯣꯛꯇꯅ ꯃꯁꯤꯒꯤ ꯋꯥꯔꯣꯜꯁꯤ ꯍꯥꯞꯆꯤꯟꯂꯨ ꯅꯡꯅꯥ ꯀꯃꯥꯏ ꯇꯧꯔꯒ ꯈꯤꯟꯀꯠ ꯂꯣꯏꯁꯤꯟꯅꯕ ꯃꯥꯇꯦꯡ ꯊꯤꯔꯥꯗꯤ ꯫", + "config-sidebar-readme": "ꯄꯥꯕꯤꯌꯣ ꯑꯩꯕꯨ", + "config-sidebar-relnotes": "ꯑꯌꯤꯕꯥ ꯊꯥꯗꯣꯛ ꯎ", + "config-sidebar-license": "ꯁꯤꯟꯗꯣꯛ ꯏ", + "config-sidebar-upgrade": "ꯋꯥꯡꯈꯠꯍꯜꯂꯤ", + "config-db-type": "ꯗꯥꯇꯥ ꯃꯈꯜ:", + "config-db-wiki-settings": "ꯃꯁꯤꯒꯤ ꯋꯤꯀꯤ ꯁꯛꯈꯪꯗꯣꯛꯎ", + "config-site-name": "ꯋꯤꯀꯤ ꯃꯃꯤꯡ:", + "config-project-namespace": "ꯊꯧꯔꯥꯡ ꯃꯃꯤꯡ ꯏꯐꯝ:", + "config-ns-generic": "ꯊꯧꯔꯥꯡ", + "config-ns-site-name": "$1ꯒ:ꯃꯥꯟꯅꯅꯕ ꯋꯤꯀꯤ ꯃꯃꯤꯡ", + "config-ns-other-default": "ꯑꯩꯒꯤ ꯋꯤꯀꯤ", + "config-admin-name": "ꯅꯪꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯃꯃꯤꯡ:", + "config-admin-password": "ꯆꯪꯁꯤꯟꯅꯕ ꯋꯥꯍꯩ:", + "config-admin-password-confirm": "ꯆꯪꯁꯤꯟꯅꯕ ꯋꯥꯍꯩ ꯑꯃꯨꯛꯀꯥ:", + "config-profile-wiki": "ꯋꯤꯀꯤ ꯍꯥꯡꯗꯣꯛꯎ", + "config-profile-private": "ꯂꯅꯥꯏ ꯋꯤꯀꯤ" +} diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index c69d4ecb0c..54ab6a1242 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -1817,10 +1817,11 @@ MESSAGE; * Get global LESS variables. * * @since 1.27 - * @deprecated since 1.32 Use ResourceLoderModule::getLessVars() instead. + * @deprecated since 1.32 Use ResourceLoaderModule::getLessVars() instead. * @return array Map of variable names to string CSS values. */ public function getLessVars() { + wfDeprecated( __METHOD__, '1.32' ); return []; } } diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index fa78cbe7ba..6ad02f0026 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -988,7 +988,27 @@ class SpecialVersion extends SpecialPage { $linkRenderer = $this->getLinkRenderer(); $list = []; - foreach ( (array)$authors as $item ) { + $authors = (array)$authors; + + // Special case: if the authors array has only one item and it is "...", + // it should not be rendered as the "version-poweredby-others" i18n msg, + // but rather as "version-poweredby-various" i18n msg instead. + if ( count( $authors ) === 1 && $authors[0] === '...' ) { + // Link to the extension's or skin's AUTHORS or CREDITS file, if there is + // such a file; otherwise just return the i18n msg as-is + if ( $extName && $this->getExtAuthorsFileName( $extDir ) ) { + return $linkRenderer->makeLink( + $this->getPageTitle( "Credits/$extName" ), + $this->msg( 'version-poweredby-various' )->text() + ); + } else { + return $this->msg( 'version-poweredby-various' )->escaped(); + } + } + + // Otherwise, if we have an actual array that has more than one item, + // process each array item as usual + foreach ( $authors as $item ) { if ( $item == '...' ) { $hasOthers = true; diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index ce93ce2c06..d2ed7e522a 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -417,6 +417,7 @@ "perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.", "perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.", "querypage-no-updates": "تحديثات هذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.", + "querypage-updates-periodical": "يتم تشغيل تحديثات هذه الصفحة بشكل دوري.", "viewsource": "عرض المصدر", "viewsource-title": "عرض مصدر $1", "actionthrottled": "تم كبح الفعل", diff --git a/languages/i18n/awa.json b/languages/i18n/awa.json index 25e2ae9312..1d4d8b1691 100644 --- a/languages/i18n/awa.json +++ b/languages/i18n/awa.json @@ -54,6 +54,7 @@ "tog-useeditwarning": "जब हम कवनो सम्पादन पन्ना कय बिना सहेजे बदलाव कय साथे छोड दि तव हम्मै बतावो।", "tog-prefershttps": "सत्र आरम्भ करते समय सदैव सुरक्षित कनेक्शन का प्रयोग करें", "tog-showrollbackconfirmation": "रोलबैक लिंक पर क्लिक करते समय एक पुष्टिकरण संकेत दिखाएं", + "tog-requireemail": "पासवर्ड रीसेट के बरे ईमेल कय जरूरति होति है", "underline-always": "हमेशा", "underline-never": "कब्बो नाई", "underline-default": "देखावट या ब्राउज़र डिफ़ॉल्ट", @@ -342,6 +343,7 @@ "perfcached": "नीचे दिया हुआ डेटा कैशे मेमोरी से लिया हुआ है, अतः हो सकता है कि इसका पूर्ण अद्यतन न हुआ हो। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक नतीजा|$1 नतीजे}} उपलब्ध हैं।", "perfcachedts": "नीचे दिया हुआ डेटा कैशे मेमोरी से है, और इसका अंतिम अद्यतन $1 को हुआ था। कैशे मेमोरी में अधिकतम {{PLURAL:$4|एक नतीजा|$4 नतीजे}} उपलब्ध हैं।", "querypage-no-updates": "इस पृष्ठ का नवीनीकरण करना मना है। अभी यहाँ के डाटा को ताज़ा नहीं कर सकते।", + "querypage-updates-periodical": "एह पन्ना के बरे अपडेट समय-समय पय चलावा जात है।", "viewsource": "स्रोत देखा जाय", "viewsource-title": "$1 कय लिए स्रोत देखा जाय", "actionthrottled": "काम खतम कई दिहा है", @@ -427,7 +429,7 @@ "createaccountmail": "एकठु अस्थायी मनलागा (रैंडम) गुप्त कुंजी चुना जाय अउर ओका निर्दिष्ट ई-मेल ठहर पे भेजा जाय", "createaccountmail-help": "इसका उपयोग बिना पासवर्ड जाने किसी और के लिए खाता खोलने के लिए उपयोग किया जाता है।", "createacct-realname": "असली नावँ (वैकल्पिक)", - "createacct-reason": "कारण", + "createacct-reason": "कारण (सार्वजनिक रूप से लॉग इन)", "createacct-reason-ph": "आप दुसर खाता काहे बनावा जात है", "createacct-reason-help": "खाता निर्माण लॉग में यह सन्देश दिखाई देगा।", "createacct-submit": "आपन खाता बनावा जाय", @@ -735,6 +737,9 @@ "content-model-javascript": "जावास्क्रिप्ट", "content-json-empty-object": "खाली चिज", "content-json-empty-array": "खाली एरे", + "unsupported-content-model": "चेतावनी: सामग्री मॉडल $1 एह विकी पय समर्थित नहीं अहै।", + "unsupported-content-diff": "सामग्री मॉडल $1 के बरे Diffs कय समर्थन नही करत।", + "unsupported-content-diff2": "एह विकी पय सामग्री मॉडल $1 अउर $2 के बीच कय Diffs समर्थित नही अहै।", "deprecated-self-close-category": "अमान्य खुदै-बंद HTML टैग कय उपयोग करय वाले पृष्ठ", "deprecated-self-close-category-desc": "इस पृष्ठ में स्वयं-बंद ऍचटीएमएल चिप्पियाँ समाहित हैं जैसे <b/> अथवा <span/> आदि। इनका व्यवहार जल्दी ही ऍचटीएमएल५ विनिर्देशों के अनुरूप परिवर्तित हो जायेगा अतः विकि-पाठ में इनके प्रयोग को न करने की सलाह दी जाती है।", "duplicate-args-warning": "चेतावनी: [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।", @@ -770,6 +775,7 @@ "undo-norev": "ई बदलाव वापिस नाई भय काहे से या तो एका पहीलवे से पलटाई गा है या फिर पन्ना हटाई दिहा है।", "undo-nochange": "अईसन लागत है की ई सम्पादन कय पहिलवे पहिले जैसन कई दीहा है ।", "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]]) कय करल बदलाव $1 कय पहिले जईसन कई गय", + "undo-summary-anon": "[[Special:Contributions/$2|$2]] द्वारा $1 का पहिले जइसे करैं।", "undo-summary-username-hidden": "लुकुआवल सदस्यन् कय करल बदलाव $1 कय पहिले जईसन कई गय", "cantcreateaccount-text": "इ आइ॰पी ठहर ('''$1''') कय खाता बनावे कय [[User:$3|$3]] रोक लगाए हैँ।\n\nएकरे लिये $3 ''$2'' कारण दिहे हैं।", "cantcreateaccount-range-text": "$1 कय श्रेणी में आवे वाला आई॰पी ठहर से, जवनेमें आप कय आई॰पी ठहर ($4) शामिल है, नँवा खाता बनावे कय लिए [[User:$3|$3]] अवरोधित कई गा है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"", @@ -1067,6 +1073,7 @@ "prefs-help-email": "ई-मेल ठहर वैकल्पिक होय, लेकिन यदि आप आपन गुप्तकुंजी भूलाई गवा गय तव एकरे माध्यम से रीसेट कई सका जात है।", "prefs-help-email-others": "आप आपन पहिचान बिना देखाए, अउर सदस्यन् कय अपने सदस्य या बातचीत पन्ना से ,अपने आप से सम्पर्क कराय सका जात है।", "prefs-help-email-required": "ई-मेल ठहर जरुरी है।", + "prefs-help-requireemail": "अगर जांच करी गय, तौ केवल पासवर्ड रीसेट ईमेल भेजे अगर रीसेट करय वाला मनई एह खाता के बरे उपयोगकर्ता नाँव अउर ईमेल द्विनव व्यवस्था कीनि गयि अहै।", "prefs-info": "मूलभूत जानकारी", "prefs-i18n": "अंतर्राष्ट्रीयकरण", "prefs-signature": "हस्ताक्षर", @@ -1702,6 +1709,8 @@ "backend-fail-contenttype": "\"$1\" मा सहेजै खत्तिर फाइल कय प्रकार नाइ निश्चित कै मिला ।", "backend-fail-batchsize": "भंडारण बैकेंड कय $1 फ़ाइल {{PLURAL:$1|काम}} दिहा गा रहा; सीमा {{PLURAL:$2|$2 काम}} कय है।", "backend-fail-usable": "फ़ाइल \"$1\" कय पर्याप्त अनुमति या अनुपस्थित डायरेक्ट्रीज़/कंटेनरन् कय कारण पढ़ा या लिखा नाइ जाय सकत है।", + "backend-fail-stat": "फ़ाइल \"$1\" कय स्थिति नही पढ़ सकिस।", + "backend-fail-hash": "फ़ाइल \"$1\" कय क्रिप्टोग्राफ़िक हैश कय निर्धारण नही कइ सकिस।", "filejournal-fail-dbconnect": "भंडारण बैकेंड \"$1\" कय जर्नल डाटाबेस से सम्पर्क नाइ होइ पाय।", "filejournal-fail-dbquery": "भंडारण बैकेंड \"$1\" कय जर्नल डाटाबेस कय अद्यतन नाइ कै मिला ।", "lockmanager-notlocked": "\"$1\" कय अनलॉक नाइ कै मिला,इ बन्द नाइ है।", @@ -1781,6 +1790,7 @@ "listfiles-userdoesnotexist": "सदस्य \"$1\" पंजीकृत नाइ है।", "imgfile": "फ़ाइल", "listfiles": "फ़ाइल सूची", + "listfiles_subpage": "$1 द्वारा अपलोड कीन गा", "listfiles_thumb": "अंगूठाकार", "listfiles_date": "मिती", "listfiles_name": "नाँव", @@ -2275,6 +2285,7 @@ "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा किए गए [[:$1]] के पिछले संपादन को वापिस पुरानी स्थिति पर नहीं लाया जा सकता है;\nकिसी और ने इस बीच या तो इस पृष्ठ को फिर से संपादित कर दिया है या पहले ही पृष्ठ पुरानी स्थिति पर लाया जा चुका है।\n\nइस पृष्ठ का अन्तिम संपादन [[User:$3|$3]] ([[User talk:$3|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ने किया है।", "editcomment": "संपादन सारांश रहा: $1।", "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]])से [[User:$1|$1]] कय करल पिछला संशोधन उल्टाई कय पहिले जैसन कै गय", + "revertpage-anon": "[[Special:Contributions/$2|$2]] पहिले जइसा द्वारा पहिले जइसे करय वाला संपादन से [[User:$1|$1]] द्वारा अंतिम संशोधन", "revertpage-nouser": "(सदस्य नाँव हटाइ गा है) कय संपादन कय हटाइकए {{GENDER:$1|[[User:$1|$1]]}} कय अन्तिम अवतरण कय पहिले जैसन कै गय।", "rollback-success": "{{GENDER:$3|$1}} के संपादन हटाए;\n{{GENDER:$4|$2}} द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।", "sessionfailure-title": "सत्र विफलता", @@ -2283,7 +2294,7 @@ "changecontentmodel-legend": "पृष्ठ सामग्री का नमूना", "changecontentmodel-title-label": "पृष्ठ शीर्षक:", "changecontentmodel-current-label": "Current content model:", - "changecontentmodel-model-label": "नयि सामग्री कय नमूना:", + "changecontentmodel-model-label": "नयी सामग्री कय नमूना:", "changecontentmodel-reason-label": "कारण:", "changecontentmodel-submit": "बदला", "changecontentmodel-success-title": "सामगरि का नामुने मे बदलाव हुुुाा हेेे", @@ -2511,6 +2522,7 @@ "ipblocklist-legend": "अवरोधित सदस्य कय खोजा जाय", "blocklist-userblocks": "खाता कय अवरोध लुकुआवा जाए", "blocklist-tempblocks": "अस्थाई अवरोध लुकुआवा जाए", + "blocklist-indefblocks": "अनिश्चित ब्लॉक लुकुवावा", "blocklist-addressblocks": "एक्ठु आईपी अवरोध लुकुआवा जाए", "blocklist-type": "प्रकार:", "blocklist-type-opt-all": "सगरौ", @@ -3768,5 +3780,8 @@ "mycustomjsredirectprotected": "You do not have permission to edit this JavaScript page because it is a redirect and it does not point inside your userspace.", "easydeflate-invaliddeflate": "Content provided is not properly deflated", "unprotected-js": "सुरक्षा कारणों से जावास्क्रिप्ट असुरक्षित पन्नों से लोड नहीं किया जा सका। कृपया जावास्क्रिप्ट केवल मीडियाविकि में बनाये:नामस्थान या सदस्य उपपृष्ठ", - "userlogout-continue": "का आप लॉग आउट करा चाहत अहैं?" + "userlogout-continue": "का आप लॉग आउट करा चाहत अहैं?", + "rest-prefix-mismatch": "अनुरोधित पथ ($1) REST API रूट पथ ($2) के अंदर नही रहा।", + "rest-wrong-method": "अनुरोध विधि ($1) {{PLURAL:$3| एह पथ के बरे अनुमत विधि नही अहै। एह पथ के बरे अनुमत तरीकऽन् मा से एक}} ($2)", + "rest-no-match": "अनुरोधित सापेक्ष पथ ($1) कउनो भी ज्ञात हैंडलर से मेल नही खात" } diff --git a/languages/i18n/da.json b/languages/i18n/da.json index fac7ebda5e..d3fd00c1e3 100644 --- a/languages/i18n/da.json +++ b/languages/i18n/da.json @@ -1426,6 +1426,7 @@ "rcfilters-clear-all-filters": "Ryd alle filtre", "rcfilters-show-new-changes": "Vis seneste ændringer siden $1", "rcfilters-search-placeholder": "Filtrer ændringer (brug menuen eller søg på filternavn)", + "rcfilters-search-placeholder-mobile": "Filtre", "rcfilters-invalid-filter": "Ugyldigt filter", "rcfilters-empty-filter": "Ingen aktive filtre. All bidrag vises.", "rcfilters-filterlist-title": "Filtre", @@ -1519,6 +1520,7 @@ "rcfilters-filter-showlinkedto-option-label": "Sider som linker til den valgte side", "rcfilters-target-page-placeholder": "Indtast et sidenavn (eller en kategori)", "rcfilters-allcontents-label": "Alt indhold", + "rcfilters-alldiscussions-label": "Alle diskussioner", "rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.", "rclistfromreset": "Nulstil datovalg", "rclistfrom": "Vis nye ændringer startende fra den $3 kl. $2", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index 5c60cff615..4ae22c806d 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -437,6 +437,7 @@ "perfcached": "Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell. Maximal {{PLURAL:$1|ein Ergebnis ist|$1 Ergebnisse sind}} im Cache verfügbar.", "perfcachedts": "Diese Daten stammen aus dem Cache. Der Zeitpunkt der letzten Aktualisierung: $2, $3 Uhr. Maximal {{PLURAL:$4|ein Ergebnis ist|$4 Ergebnisse sind}} im Cache verfügbar.", "querypage-no-updates": "Die Aktualisierungsfunktion dieser Seite ist zurzeit deaktiviert.\nDie Daten werden bis auf Weiteres nicht erneuert.", + "querypage-updates-periodical": "Aktualisierungen für diese Seite werden periodisch erneuert.", "viewsource": "Quelltext anzeigen", "viewsource-title": "Quelltext der Seite $1", "actionthrottled": "Aktionsanzahl limitiert", @@ -3932,5 +3933,6 @@ "easydeflate-invaliddeflate": "Der angegebene Inhalt ist nicht ordnungsgemäß komprimiert", "unprotected-js": "Aus Sicherheitsgründen kann JavaScript-Code nicht mehr von ungeschützten Seiten geladen werden. Erstelle die JavaScript-Seite bitte ausschließlich im Namensraum „MediaWiki“ oder als Benutzerunterseite.", "userlogout-continue": "Möchtest du dich abmelden?", - "rest-prefix-mismatch": "Der angeforderte Pfad ($1) kannte nicht innerhalb des REST-API-Root-Pfades ($2) gefunden werden" + "rest-prefix-mismatch": "Der angeforderte Pfad ($1) kannte nicht innerhalb des REST-API-Root-Pfades ($2) gefunden werden", + "rest-wrong-method": "Die angeforderte Methode ($1) war keine {{PLURAL:$3|erlaubte Methode für diesen Pfad|der erlaubten Methoden für diesen Pfas}} ($2)" } diff --git a/languages/i18n/el.json b/languages/i18n/el.json index 266fdb4f7f..5ae517d4cd 100644 --- a/languages/i18n/el.json +++ b/languages/i18n/el.json @@ -480,7 +480,7 @@ "createaccountmail": "Χρήση τυχαίου προσωρινού κωδικού πρόσβασης και αποστολή του στην καθοριζόμενη διεύθυνση ηλεκτρονικού ταχυδρομείου", "createaccountmail-help": "Μπορεί να χρησιμοποιηθεί για την δημιουργία λογαριασμού τρίτων χωρίς την γνωστοποίηση των κωδικών πρόσβασής τους.", "createacct-realname": "Πραγματικό όνομα (προαιρετικό)", - "createacct-reason": "Λόγος", + "createacct-reason": "Αιτία (δημόσια καταγραφή)", "createacct-reason-ph": "Γιατί δημιουργείτε έναν άλλο λογαριασμό", "createacct-reason-help": "Εμφανιζόμενο μήνυμα στο μητρώο δημιουργίας λογαριασμών", "createacct-submit": "Δημιουργία λογαριασμού χρήστη", @@ -2263,8 +2263,8 @@ "sessionfailure": "Φαίνεται ότι υπάρχει κάποιο πρόβλημα με την περίοδο σύνδεσής σας.\nΑυτή η ενέργεια ακυρώθηκε ως προφύλαξη για την αντιμετώπιση τυχόν σφετερισμού της περιόδου σύνδεσης από κάποιον τρίτο (session hijacking).\nΠαρακαλούμε υποβάλετε ξανά τη φόρμα.", "changecontentmodel": "Αλλαγή μοντέλου περιεχομένου της σελίδας", "changecontentmodel-legend": "Μοντέλο περιεχομένου σελίδας", - "changecontentmodel-title-label": "Τίτλος σελίδας", - "changecontentmodel-model-label": "Νέο μοντέλο περιεχομένου", + "changecontentmodel-title-label": "Τίτλος σελίδας:", + "changecontentmodel-model-label": "Νέο μοντέλο περιεχομένου:", "changecontentmodel-reason-label": "Αιτία:", "changecontentmodel-submit": "Αλλαγή", "changecontentmodel-success-title": "Το περιεχόμενο πρότυπο άλλαξε", @@ -2492,7 +2492,7 @@ "blocklist-editing-page": "σελίδες", "blocklist-editing-ns": "ονοματοχώροι", "ipblocklist-empty": "Η λίστα φραγών είναι άδεια.", - "ipblocklist-no-results": "Η ζητούμενη διεύθυνση IP ή το όνομα χρήστη δεν είναι φραγμένα.", + "ipblocklist-no-results": "Δεν βρέθηκαν φραγές που να ταιριάζουν για τη ζητούμενη διεύθυνση IP ή όνομα χρήστη.", "blocklink": "φραγή", "unblocklink": "άρση φραγής", "change-blocklink": "αλλαγή φραγής", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 8092bf6b3d..54f55674ac 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -3564,6 +3564,7 @@ "version-poweredby-credits": "This wiki is powered by [https://www.mediawiki.org/ MediaWiki], copyright © 2001-$1 $2.", "version-poweredby-others": "others", "version-poweredby-translators": "translatewiki.net translators", + "version-poweredby-various": "Various authors", "version-credits-summary": "We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].", "version-license-info": "MediaWiki 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.\n\nMediaWiki 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.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING 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 or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].", "version-software": "Installed software", diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json index 35223c3e60..65669ecd70 100644 --- a/languages/i18n/eo.json +++ b/languages/i18n/eo.json @@ -477,7 +477,7 @@ "createaccountmail": "Uzi provizoran hazardan pasvorton kaj sendi ĝin al la retpoŝta adreso ĉi-suba", "createaccountmail-help": "Uzebla por krei konton de alia persono sen ekscii la pasvorton.", "createacct-realname": "Vera nomo (nedeviga)", - "createacct-reason": "Kialo", + "createacct-reason": "Kialo (publike protokolata)", "createacct-reason-ph": "Kial vi kreas plian konton", "createacct-reason-help": "Mesaĝo montrita en la protokolo pri kreado de konto", "createacct-submit": "Krei vian konton", @@ -2333,9 +2333,9 @@ "sessionfailure": "Ŝajnas, ke estas problemo kun via ensalutado;\nĈi ago estis nuligita por malhelpi fiensalutadon.\nBonvolu resendi la formularoj", "changecontentmodel": "Ŝanĝi la enhavomodelon de paĝo", "changecontentmodel-legend": "Ŝanĝi la enhavomodelon", - "changecontentmodel-title-label": "Titolo de paĝo", + "changecontentmodel-title-label": "Titolo de paĝo:", "changecontentmodel-current-label": "Aktuala enhavmodelo:", - "changecontentmodel-model-label": "Nova enhavomodelo", + "changecontentmodel-model-label": "Nova enhavomodelo:", "changecontentmodel-reason-label": "Kialo:", "changecontentmodel-submit": "Ŝanĝi", "changecontentmodel-success-title": "Enhavomodelo estis ŝanĝigita", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index bdf7e75b2c..a8bbaf11d9 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -192,7 +192,8 @@ "Waldyrious", "Johny Weissmuller Jr", "Dark Dragoon", - "Elisardojm" + "Elisardojm", + "Madamebiblio" ] }, "tog-underline": "Subrayar enlaces:", @@ -1992,6 +1993,7 @@ "listfiles-userdoesnotexist": "La cuenta de usuario «$1» no está registrada.", "imgfile": "archivo", "listfiles": "Lista de archivos", + "listfiles_subpage": "Subidas por $1", "listfiles_thumb": "Miniatura", "listfiles_date": "Fecha", "listfiles_name": "Nombre", diff --git a/languages/i18n/exif/de.json b/languages/i18n/exif/de.json index 136aafb90a..7528ef5e03 100644 --- a/languages/i18n/exif/de.json +++ b/languages/i18n/exif/de.json @@ -9,7 +9,8 @@ "Purodha", "Red Baron", "Umherirrender", - "W (aka Wuzur)" + "W (aka Wuzur)", + "Tobi 406" ] }, "exif-imagewidth": "Breite", @@ -274,6 +275,8 @@ "exif-scenetype-1": "Normal", "exif-customrendered-0": "Standard", "exif-customrendered-1": "Benutzerdefiniert", + "exif-customrendered-6": "Panorama", + "exif-customrendered-8": "Poträt", "exif-exposuremode-0": "Automatische Belichtung", "exif-exposuremode-1": "Manuelle Belichtung", "exif-exposuremode-2": "Belichtungsreihe", diff --git a/languages/i18n/exif/nds-nl.json b/languages/i18n/exif/nds-nl.json index 57fac843a1..005426ae46 100644 --- a/languages/i18n/exif/nds-nl.json +++ b/languages/i18n/exif/nds-nl.json @@ -166,8 +166,8 @@ "exif-originaldocumentid": "Unik ID van et originele dokument", "exif-licenseurl": "Webadres vöär autöörsrechtenlicensy", "exif-morepermissionsurl": "Alternative licensygegeavens", - "exif-attributionurl": "Bruuk de volgende verwysing as dit wark herbruked wördt", - "exif-preferredattributionname": "Bruuk de volgende makersvermelding as dit wark herbruked wördt", + "exif-attributionurl": "Gebruuk de volgende verwysing as dit wark hergebruked wördt", + "exif-preferredattributionname": "Gebruuk de volgende makersvermelding as dit wark hergebruked wördt", "exif-pngfilecomment": "Upmarking by PNG-bestand", "exif-disclaimer": "Vöärbehold", "exif-contentwarning": "Inholdswårsküwing", diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json index 66db5bdfa7..e5baac8072 100644 --- a/languages/i18n/fa.json +++ b/languages/i18n/fa.json @@ -497,7 +497,7 @@ "createaccountmail": "استفاده از رمز عبور موقت تصادفی و ارسال آن به آدرس ایمیل مشخص شده", "createaccountmail-help": "جهت ايجاد حساب برای شخص ديگری بدون دانستن گذرواژهٔ آن کاربرد دارد.", "createacct-realname": "نام واقعی (اختیاری)", - "createacct-reason": "دلیل", + "createacct-reason": "دلیل (به صورت عمومی ثبت می‌شود)", "createacct-reason-ph": "چرا شما حساب دیگری می‌سازید؟", "createacct-reason-help": "پیامی که در سياههٔ ایجاد حساب نمایش داده می‌شود", "createacct-submit": "حسابتان را بسازید", @@ -2348,8 +2348,8 @@ "sessionfailure": "به نظر می‌رسد مشکلی در مورد نشست کاربری شما وجود دارد؛\nعمل درخواست شده در اقدامی پیشگیرانه در برابر ربوده‌شدن اطلاعات نشست کاربری، لغو شد.\nلطفاً فرم را از نو بارگذاری کنید.", "changecontentmodel": "ویرایش مدل محتوای یک صفحه", "changecontentmodel-legend": "تغییر نوع محتوی", - "changecontentmodel-title-label": "عنوان صفحه", - "changecontentmodel-model-label": "مدل محتوای جدید", + "changecontentmodel-title-label": "عنوان صفحه:", + "changecontentmodel-model-label": "مدل محتوای جدید:", "changecontentmodel-reason-label": "دلیل:", "changecontentmodel-submit": "تغییر", "changecontentmodel-success-title": "نمونه محتوی تغییر یافت", @@ -3857,12 +3857,12 @@ "edit-error-short": "خطا: $1", "edit-error-long": "خطاها:\n\n$1", "specialmute": "بی‌صدا", - "specialmute-success": "تنظیمات بی‌صدا به روز شد. دیدن فهرست همهٔ کاربرانی که در [[Special:Preferences|ترجیحاتتان]] به عنوان بی‌صدا انتخاب کردید.", + "specialmute-success": "تنظیمات بی‌صدا به روز شد. دیدن فهرست همهٔ کاربرانی که در [[Special:Preferences|ترجیحات‌تان]] به عنوان بی‌صدا انتخاب کردید.", "specialmute-submit": "تأیید", "specialmute-label-mute-email": "بی‌صدا کردن ایمیل از این کاربر", - "specialmute-header": "لطفاً ترجیحات بی‌صدا برای {{BIDI:[[User:$1]]}} را انتخاب کنید.", + "specialmute-header": "لطفاً ترجیحات بی‌صدا برای {{BIDI:[[User:$1|$1]]}} را انتخاب کنید.", "specialmute-error-invalid-user": "نام کاربری درخواست شده یافت نشد.", - "specialmute-email-footer": "[$1 مدیریت ترجیحات ایمیل برای {{BIDI:$2}}.]", + "specialmute-email-footer": "برای مدیریت ترجیحات ایمیل برای {{BIDI:$2}} به <$1> مراجعه کنید.", "specialmute-login-required": "لطفاً برای تغییر ترجیحات بی‌صدا به سامانه وارد شوید.", "revid": "نسخهٔ $1", "pageid": "شناسهٔ صفحهٔ $1", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index 20d2991257..3f1ae4bf89 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -1851,6 +1851,7 @@ "listfiles-userdoesnotexist": "Käyttäjätunnusta ”$1” ei ole rekisteröity.", "imgfile": "tiedosto", "listfiles": "Tiedostoluettelo", + "listfiles_subpage": "Käyttäjän $1 tallennukset", "listfiles_thumb": "Pienoiskuva", "listfiles_date": "Päiväys", "listfiles_name": "Nimi", diff --git a/languages/i18n/fit.json b/languages/i18n/fit.json index 57f8978415..982b7d7fff 100644 --- a/languages/i18n/fit.json +++ b/languages/i18n/fit.json @@ -25,7 +25,7 @@ "tog-previewonfirst": "Näytä esitarkastelu kun mookkaus alethaan", "tog-enotifwatchlistpages": "Lähätä e-postipreivi mulle kun sivu tai fiili minun valvontalistala on muutettu", "tog-enotifusertalkpages": "Lähätä E-posti, kun käyttäjäsivun keskustelusivu muuttuu", - "tog-enotifminoredits": "Lähätä epostieto pienistäki muutoksista", + "tog-enotifminoredits": "Lähätä epostieto pienistäki muutoksista sivuissa ja fiileissä", "tog-enotifrevealaddr": "Näytä minun e-posti atressin muile lähetetyissä ilmoituksissa", "tog-shownumberswatching": "Näytä kuinka moni käyttäjä valvoo sivua", "tog-oldsig": "Sinun nykynen allekirjotus:", @@ -99,6 +99,7 @@ "mytalk": "Keskustelu", "anontalk": "Keskustelu", "navigation": "Navikeerinki", + "and": " ja", "faq": "Useasti kysytyt kysymykset", "actions": "Toiminat", "namespaces": "Nimityhjyyet", @@ -109,6 +110,7 @@ "help": "Apua", "search": "Haku", "searchbutton": "Hae", + "go": "Mene", "searcharticle": "Mene", "history": "Sivun histuuria", "history_short": "Histuuria", @@ -122,7 +124,7 @@ "protect_change": "muuta", "newpage": "Uusi sivu", "talkpagelinktext": "Keskustelu", - "specialpage": "Spesiaali sivu", + "specialpage": "Spesiaalisivu", "personaltools": "Henkilökohtaiset työneuvot", "talk": "Keskustelu", "views": "Näyttöjä", @@ -152,6 +154,7 @@ "portal-url": "Project: Kaikitten purthaali", "privacy": "Tietosuojakäytäntö", "privacypage": "Project: Intekriteettisääntö", + "ok": "OK", "retrievedfrom": "Nouettu osoitheesta $1", "youhavenewmessages": "{{PLURAL:$3|Sulla on}} $1 ($2).", "editsection": "mookkaa", @@ -161,17 +164,20 @@ "viewsourcelink": "näytä lähekooti", "editsectionhint": "Mookkaa seksuunia $1", "toc": "Sisältö", + "confirmable-yes": "Kyllä", + "confirmable-no": "Ei", "site-atom-feed": "$1-Atom-syöttö", "page-atom-feed": "$1 (Atom-syöttö)", "red-link-title": "$1 (sivua ei ole)", "nstab-main": "Sivu", "nstab-user": "Käyttäjäsivu", - "nstab-special": "Spesiaali sivut", + "nstab-special": "Spesiaalisivut", "nstab-project": "Prujektisivu", "nstab-image": "Fiili", "nstab-template": "Malli", "nstab-category": "Katekuuri", "mainpage-nstab": "Alkusivu", + "error": "Virhe", "missing-article": "Sivun sisältöä ei löytyny taattapaasista: $1 $2.\n\nUseimiten tämä johtuu vanhentuneesta vertailu- tai histuuriasivulinkistä poistethuun sivhuun.\n\nJos kysheessä ei ole poistettu sivu, olet piian löytäny virheen ohjelmassa.\nIlmota tämän sivun atressi wikin [[Special:ListUsers/sysop|atministratöörile]].", "missingarticle-rev": "(versuuni: $1)", "badtitle": "Virheelinen titteli", @@ -193,6 +199,7 @@ "createacct-emailrequired": "E-postin atressi", "createacct-another-submit": "Luo konttu", "createacct-benefit-body1": "{{PLURAL:$1|mookkaus|mookhausta}}", + "loginsuccesstitle": "Lokattu sisäle", "mailmypassword": "Uusi salasana", "loginlanguagelabel": "Kieli: $1", "pt-login": "Lokkaa sisäle", @@ -218,7 +225,7 @@ "anoneditwarning": "'''Varotus:''' Et ole lokanu sisäle.\nIP-atressi säästethään tämän sivun muutoshistuuriassa.", "loginreqlink": "lokkaa sisäle", "newarticle": "(Uusi)", - "newarticletext": "Linkki vei sinun sivule, joka ei vielä ole.\nSaatat luoa sivun kirjottamalla alla olehvaan kenthään (katto [$1 apusivu] lisää tietoja).\nJos et halua luoa sivua, käytä browserin takashii knappia.", + "newarticletext": "Linkki vei sinun sivule, joka ei vielä ole.\nSaatat luoa sivun kirjottamalla alla olehvaan kenthään (katto [$1 apusivu] lissää tietoja).\nJos et halua luoa sivua, käytä browserin takashii knappia.", "noarticletext": "Tällä hetkelä tällä sivula ei ole tekstiä.\nSaatat [[Special:Search/{{PAGENAME}}|hakea sivun nimelä]] muilta sivuilta,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheesheen liittyviä lokkia]\neli [{{fullurl:{{FULLPAGENAME}}|action=edit}} luoa tämä sivu].", "noarticletext-nopermission": "Tällä hetkelä tällä sivula ei ole tekstiä.\nSaatat [[Special:Search/{{PAGENAME}}|hakea sivun nimelä]] muilta sivuilta,\neli [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea relevantista lokista]\neli [{{fullurl:{{FULLPAGENAME}}|action=edit}} mookata tätä sivua].", "previewnote": "'''Tämä on vasta sivun etukattelu. Sivua ei ole vielä säästetty!'''", @@ -571,7 +578,7 @@ "redirect-submit": "Mene", "redirect-file": "Fiilinimi", "fileduplicatesearch-filename": "Fiilinimi:", - "specialpages": "Spesiaali sivut", + "specialpages": "Spesiaalisivut", "specialpages-group-pagetools": "Sivutyöneuvot", "external_image_whitelist": "#Älä muuta tätä riviä ollenkhaan.
\n#Kirjota rekyljääri frakmentitten meininkit (vain osa, joka mennee //-merkkitten välhiin) tähhään alle\n#Niitä verrathaan ulkoisitten (suoralinkitetyitten) kuvitten URLhin\n#Net jokka sopivat, näytethään kuvina, muuten kuvhiin näytethään vain linkit\n#Rivit, jokka alkavat #-merkilä on komentaaria\n#Tämä on riippumaton puukstavitten kokosta",
 	"tag-filter": "[[Special:Tags|Merkki]] filtteri:",
diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json
index 53d54a26c1..9faf2b17ef 100644
--- a/languages/i18n/fr.json
+++ b/languages/i18n/fr.json
@@ -513,6 +513,7 @@
 	"perfcached": "Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|1=un résultat|$1 résultats}} est disponible dans le cache.",
 	"perfcachedts": "Les données suivantes sont en cache et ont été mises à jour pour la dernière fois le $1. Un maximum de {{PLURAL:$4|1=un résultat est disponible|$4 résultats sont disponibles}} dans le cache.",
 	"querypage-no-updates": "Les mises à jour pour cette page sont actuellement désactivées.\nLes données ci-dessous ne seront pas mises à jour.",
+	"querypage-updates-periodical": "Les mises à jour pour cette page sont lancées régulièrement.",
 	"viewsource": "Voir le texte source",
 	"viewsource-title": "Voir la source de $1",
 	"actionthrottled": "Action limitée",
@@ -598,7 +599,7 @@
 	"createaccountmail": "Utiliser un mot de passe aléatoire temporaire et l’envoyer à l’adresse de courriel spécifiée",
 	"createaccountmail-help": "Peut être utilisé pour créer un compte pour une autre personne sans connaître le mot de passe.",
 	"createacct-realname": "Nom réel (facultatif)",
-	"createacct-reason": "Motif (connecté publiquement)",
+	"createacct-reason": "Motif (journalisé publiquement)",
 	"createacct-reason-ph": "Pourquoi créez-vous un autre compte",
 	"createacct-reason-help": "Message affiché dans le journal de création de compte",
 	"createacct-submit": "Créez votre compte",
@@ -612,7 +613,7 @@
 	"badretype": "Les mots de passe que vous avez saisis ne correspondent pas.",
 	"usernameinprogress": "Une création de compte pour ce nom d’utilisateur est déjà en cours.\nVeuillez patienter.",
 	"userexists": "Le nom d’utilisateur saisi est déjà utilisé.\nVeuillez choisir un nom différent.",
-	"createacct-normalization": "Votre nom d’utilisateur sera modifié en « $2 » à cause de restrictions techniques.",
+	"createacct-normalization": "Votre nom d’utilisateur sera modifié en « $2 » à cause de restrictions techniques.",
 	"loginerror": "Erreur de connexion",
 	"createacct-error": "Erreur lors de la création du compte",
 	"createaccounterror": "Impossible de créer le compte : $1",
@@ -624,7 +625,7 @@
 	"noname": "Vous n’avez pas saisi un nom d’utilisateur valide.",
 	"loginsuccesstitle": "Connecté",
 	"loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».",
-	"nosuchuser": "L’utilisateur « $1 » n’existe pas.\nLes noms d’utilisateur sont sensibles à la casse.\nVérifiez l’orthographe ou [[Special:CreateAccount|créez un nouveau compte]].",
+	"nosuchuser": "L’utilisateur « $1 » n’existe pas.\nLes noms d’utilisateur sont sensibles à la casse.\nVérifiez l’orthographe ou [[Special:CreateAccount|créez un nouveau compte]].",
 	"nosuchusershort": "Il n’y a pas de contributeur avec le nom « $1 ».\nVeuillez vérifier l’orthographe.",
 	"nouserspecified": "Vous devez saisir un nom d’utilisateur.",
 	"login-userblocked": "{{GENDER:$1|Cet utilisateur|Cette utilisatrice}} est bloqué{{GENDER:$1||e}}. La connexion n’est pas autorisée.",
@@ -638,7 +639,7 @@
 	"password-login-forbidden": "L’utilisation de ce nom d’utilisateur ou de ce mot de passe a été interdite.",
 	"mailmypassword": "Réinitialiser le mot de passe",
 	"passwordremindertitle": "Nouveau mot de passe temporaire pour {{SITENAME}}",
-	"passwordremindertext": "Quelqu’un (depuis l’adresse IP $1) a demandé un nouveau mot de passe\npour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et défini comme « $3 ». Si c’était bien votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande ou si vous vous avez retrouvé votre\nmot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message et\ncontinuer à utiliser votre ancien mot de passe.",
+	"passwordremindertext": "Quelqu’un (depuis l’adresse IP $1) a demandé un nouveau mot de passe\npour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et défini comme « $3 ». Si c’était bien votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande ou si vous vous avez retrouvé votre\nmot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message et\ncontinuer à utiliser votre ancien mot de passe.",
 	"noemail": "Aucune adresse de courriel n’a été enregistrée pour l’utilisat{{GENDER:$1|eur|rice}} « $1 ».",
 	"noemailcreate": "Vous devez fournir une adresse de courriel valide",
 	"passwordsent": "Un nouveau mot de passe a été envoyé à l’adresse de courriel de l’utilisat{{GENDER:$1|eur|rice}} « $1 ».\nVeuillez vous reconnecter après l’avoir reçu.",
@@ -700,8 +701,8 @@
 	"botpasswords-help-grants": "Les autorisations permettent d’accéder aux droits déjà accordés à votre compte utilisateur. Activer une autorisation ici ne fournit l’accès à aucun droit que votre compte utilisateur n’aurait pas par ailleurs. Voyez le [[Special:ListGrants|tableau des autorisations]] pour plus d’informations.",
 	"botpasswords-label-grants-column": "Accordé",
 	"botpasswords-bad-appid": "Le nom de robot « $1 » n’est pas valide.",
-	"botpasswords-insert-failed": "Échec de l’ajout du nom de robot « $1 ». A-t-il déjà été ajouté ?",
-	"botpasswords-update-failed": "Échec à la mise à jour du nom de robot « $1 ». A-t-il déjà été supprimé ?",
+	"botpasswords-insert-failed": "Échec de l’ajout du nom de robot « $1 ». A-t-il déjà été ajouté ?",
+	"botpasswords-update-failed": "Échec à la mise à jour du nom de robot « $1 ». A-t-il déjà été supprimé ?",
 	"botpasswords-created-title": "Mot de passe de robots créé",
 	"botpasswords-created-body": "Le mot de passe pour le robot « $1 » de l’{{GENDER:$2|utilisateur|utilisatrice}} « $2 » a été créé.",
 	"botpasswords-updated-title": "Mot de passe de robots mis à jour",
@@ -1298,7 +1299,7 @@
 	"userrights-expiry-none": "N'expire pas",
 	"userrights-expiry": "Date d’expiration :",
 	"userrights-expiry-existing": "Date d'expiration existante : $2 à $3",
-	"userrights-expiry-othertime": "Autre temps :",
+	"userrights-expiry-othertime": "Autre durée :",
 	"userrights-expiry-options": "1 jour:1 day,1 semaine:1 week,1 mois:1 month,3 mois:3 montghs,6 mois:6 month,1 an:1 year",
 	"userrights-invalid-expiry": "La date d'expiration pour le groupe « $1 » n'est pas valide.",
 	"userrights-expiry-in-past": "La date d'expiration pour le groupe « $1 » est dépassée.",
diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json
index 6f1c119680..62bae7d85d 100644
--- a/languages/i18n/fy.json
+++ b/languages/i18n/fy.json
@@ -477,11 +477,12 @@
 	"minoredit": "Dit is fan lytse betsjutting",
 	"watchthis": "Dizze side folgje",
 	"savearticle": "Side bewarje",
+	"savechanges": "Feroarings bewarje",
 	"publishpage": "Side fêstlizze",
 	"publishchanges": "Feroarings publisearje",
 	"preview": "Oerlêze",
 	"showpreview": "Earst oerlêze",
-	"showdiff": "Wizigings",
+	"showdiff": "Ferskillen besjen",
 	"anoneditwarning": "Warskôging: Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternet-adres opnaam yn de sideskiednis. At jo [$1 oanmelde] of [$2 in akkount oanmeitsje] ferskine jo bewurkingen ûnder jo meidochnamme, njonken oare foardielen.",
 	"missingsummary": "Tink derom: Jo hawwe gjin gearfetting jûn foar jo bewurking.\nAs jo nochris op ''Side opslaan'' klikke wurdt de bewurking sûnder gearfetting opslein.",
 	"missingcommenttext": "Set jo opmerking beleaven hjir ûnder.",
@@ -1826,18 +1827,20 @@
 	"tooltip-ca-nstab-template": "It berjocht sjen litte",
 	"tooltip-ca-nstab-help": "Helpside sjen litte",
 	"tooltip-ca-nstab-category": "De kategoryside sjen litte",
-	"tooltip-minoredit": "Markearje dizze feroaring as fan lytse betsjutting",
+	"tooltip-minoredit": "Dizze feroaring as fan lytse betsjutting markearje",
 	"tooltip-save": "Jo feroarings bewarje",
-	"tooltip-preview": "Oerlêze foar't de side fêstlein is!",
-	"tooltip-diff": "Sjen litte hokker feroarings jo yn'e tekst makke hawwe.",
+	"tooltip-publish": "Jo feroarings publisearje",
+	"tooltip-preview": "Graach oerlêze foar't de side fêstlein wurdt.",
+	"tooltip-diff": "De ferskillen mei jo tekstbewurking besjen",
 	"tooltip-compareselectedversions": "Sjoch de ferskillen tusken de twa keazen ferzjes fan dizze side",
-	"tooltip-watch": "Foegje dizze side ta oan jo folchlist [alt-w]",
+	"tooltip-watch": "Dizze side oan jo folchlist tafoegje",
 	"tooltip-watchlistedit-normal-submit": "Titels wiskje",
 	"tooltip-watchlistedit-raw-submit": "Folchlist bywurkje",
 	"tooltip-upload": "Opladen starte",
 	"tooltip-rollback": "\"Weromdraaie\" set dizze side yn ien klik werom nei hoe't er wie foar't de lêste bydrager syn bewurkings trochfierde",
 	"tooltip-undo": "\"Weromsette\" makket dizze wiziging ûngedien, en iepenet it bewurkingsformulier. Hjirtroch kin yn 'e gearfetting in reden tafoege wurde.",
 	"tooltip-preferences-save": "Foarkarren bewarje",
+	"tooltip-summary": "Jou in koarte gearfetting",
 	"interlanguage-link-title": "$1 – $2",
 	"interlanguage-link-title-nonlang": "$1 – $2",
 	"common.js": "/* Alles wat hjir oan JavaScript delset wurdt, wurdt foar alle meidoggers laden foar eltse side! */",
diff --git a/languages/i18n/he.json b/languages/i18n/he.json
index 714f258037..2a4d7ed4d2 100644
--- a/languages/i18n/he.json
+++ b/languages/i18n/he.json
@@ -377,6 +377,7 @@
 	"perfcached": "המידע הבא הוא עותק שמור בזיכרון המטמון, ועשוי שלא להיות מעודכן. לכל היותר {{PLURAL:$1|תוצאה אחת נשמרת|$1 תוצאות נשמרות}} בזיכרון המטמון.",
 	"perfcachedts": "המידע הבא הוא עותק שמור בזיכרון המטמון, שעודכן לאחרונה ב־$1. לכל היותר {{PLURAL:$4|תוצאה אחת נשמרת|$4 תוצאות נשמרות}} בזיכרון המטמון.",
 	"querypage-no-updates": "העדכונים לדף הזה מופסקים כרגע.\nהמידע לא יעודכן באופן שוטף.",
+	"querypage-updates-periodical": "הדף הזה מעודכן מפעם לפעם.",
 	"viewsource": "הצגת מקור",
 	"viewsource-title": "הצגת המקור של הדף \"$1\"",
 	"actionthrottled": "הפעולה הוגבלה",
diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json
index 0ecff4fda4..ad1299dc48 100644
--- a/languages/i18n/hu.json
+++ b/languages/i18n/hu.json
@@ -271,7 +271,7 @@
 	"copyright": "A tartalom további jelölés hiányában a(z) $1 feltételei szerint használható fel.",
 	"copyrightpage": "{{ns:project}}:Szerzői jogok",
 	"currentevents": "Aktuális események",
-	"currentevents-url": "Project:Friss események",
+	"currentevents-url": "Project:Aktuális események",
 	"disclaimers": "Jogi nyilatkozat",
 	"disclaimerpage": "Project:Jogi nyilatkozat",
 	"edithelp": "Szerkesztési segítség",
diff --git a/languages/i18n/it.json b/languages/i18n/it.json
index 50ef0926ea..cdbb2f4fe9 100644
--- a/languages/i18n/it.json
+++ b/languages/i18n/it.json
@@ -463,6 +463,7 @@
 	"perfcached": "I dati che seguono sono estratti da una copia ''cache'' del database, e potrebbero non essere aggiornati. Un massimo di {{PLURAL:$1|un risultato è disponibile|$1 risultati sono disponibili}} in cache.",
 	"perfcachedts": "I dati che seguono sono estratti da una copia ''cache'' del database, il cui ultimo aggiornamento risale al $1. Un massimo di {{PLURAL:$4|un risultato è disponibile|$4 risultati è disponibile}} in cache.",
 	"querypage-no-updates": "Gli aggiornamenti della pagina sono temporaneamente sospesi. I dati in essa contenuti non verranno aggiornati.",
+	"querypage-updates-periodical": "Gli aggiornamenti per questa pagina sono eseguiti periodicamente.",
 	"viewsource": "Visualizza wikitesto",
 	"viewsource-title": "Visualizza wikitesto di $1",
 	"actionthrottled": "Azione ritardata",
diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json
index ff33e2e8c7..187a7ef72b 100644
--- a/languages/i18n/ja.json
+++ b/languages/i18n/ja.json
@@ -441,6 +441,7 @@
 	"perfcached": "以下のデータはキャッシュされており、最新ではない可能性があります。最大 $1 {{PLURAL:$1|件の結果}}がキャッシュされます。",
 	"perfcachedts": "以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。",
 	"querypage-no-updates": "このページの更新は現在無効化されています。\n以下のデータは当分更新されません。",
+	"querypage-updates-periodical": "このページの更新は定期的に実行されます。",
 	"viewsource": "ソースを表示",
 	"viewsource-title": "$1のソースを表示",
 	"actionthrottled": "操作が速度規制されました",
@@ -526,7 +527,7 @@
 	"createaccountmail": "無作為な仮パスワードを生成し、指定のメールアドレスに送信",
 	"createaccountmail-help": "パスワードを知ることなく他人のアカウントを作成することができます。",
 	"createacct-realname": "本名 (省略可能)",
-	"createacct-reason": "理由",
+	"createacct-reason": "理由(公開ログが残ります)",
 	"createacct-reason-ph": "アカウントを作成する理由",
 	"createacct-reason-help": "アカウント作成記録に表示されるメッセージ",
 	"createacct-submit": "アカウントを作成",
diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json
index f293d565fe..7a7b9d5d9c 100644
--- a/languages/i18n/ko.json
+++ b/languages/i18n/ko.json
@@ -413,6 +413,7 @@
 	"perfcached": "다음 자료는 캐시된 것이며 최신이 아닐 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 한 개|결과 $1개}}가 있습니다.",
 	"perfcachedts": "다음 자료는 캐시된 것으로, $1에 마지막으로 업데이트되었습니다. 캐시에 최대 {{PLURAL:$4|결과 한 개|결과 $4개}}가 있습니다.",
 	"querypage-no-updates": "이 문서의 갱신이 현재 중지되어 있습니다.\n지금은 자료가 갱신되지 않을 것입니다.",
+	"querypage-updates-periodical": "이 문서의 갱신은 주기적으로 수행됩니다.",
 	"viewsource": "원본 보기",
 	"viewsource-title": "$1 문서 원본 보기",
 	"actionthrottled": "동작 중지",
diff --git a/languages/i18n/la.json b/languages/i18n/la.json
index b128eaf703..00722723ea 100644
--- a/languages/i18n/la.json
+++ b/languages/i18n/la.json
@@ -30,7 +30,8 @@
 			"Guillermo2149",
 			"Fitoschido",
 			"LittlePuppers",
-			"Vlad5250"
+			"Vlad5250",
+			"1233qwer1234qwer4"
 		]
 	},
 	"tog-underline": "Versores linea denotandi:",
@@ -326,6 +327,7 @@
 	"virus-scanfailed": "scrutinium fefellit (codex $1)",
 	"virus-unknownscanner": "antivirus incognitus:",
 	"logouttext": "Secessisti a {{grammar:ablative|{{SITENAME}}}}.\n\nNota bene, paginae fortasse videantur quasi nomen tuum dedisses, priusquam navigatrum purgaveris.",
+	"cannotlogoutnow-title": "Nequitur secedere",
 	"welcomeuser": "Salve, $1!",
 	"welcomecreation-msg": "Tibi nomen impositum est.\nCura, ut [[Special:Preferences|modos tuos]] deligas.",
 	"yourname": "Nomen usoris:",
@@ -811,6 +813,7 @@
 	"recentchanges-legend-heading": "Legenda:",
 	"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam [[Special:NewPages|indicem paginarum novarum]])",
 	"rcfilters-tag-prefix-namespace-inverted": ":non $1",
+	"rcfilters-alldiscussions-label": "Cunctae disputationes",
 	"rcnotefrom": "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
 	"rclistfrom": "Monstrare mutata nova incipiens ab $3 $2",
 	"rcshowhideminor": "$1 recensiones minores",
diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json
index f33e981a32..dc132bbd80 100644
--- a/languages/i18n/mk.json
+++ b/languages/i18n/mk.json
@@ -363,6 +363,7 @@
 	"perfcached": "Следните податоци се меѓускладирани и може да не се тековни. Во меѓускладот {{PLURAL:$1|е достапен највеќе еден запис|се достапни највеќе $1 записи}}.",
 	"perfcachedts": "Следните податоци се меѓускладирани, последен пат подновени во $1. Во меѓускладот {{PLURAL:$4|е достапен највеќе еден запис|се достапни највеќе $4 записи}}.",
 	"querypage-no-updates": "Подновите на оваа страница моментално се оневозможени.\nПодатоците овде во моментов нема да се подновуваат.",
+	"querypage-updates-periodical": "Подновите на оваа страница се вршат повремено.",
 	"viewsource": "Преглед",
 	"viewsource-title": "Преглед на кодот на $1",
 	"actionthrottled": "Дејството е успорено",
@@ -1409,7 +1410,7 @@
 	"rcfilters-highlighted-filters-list": "Истакнато: $1",
 	"rcfilters-quickfilters": "Зачувани филтри",
 	"rcfilters-quickfilters-placeholder-title": "Засега нема зачувани филтри",
-	"rcfilters-quickfilters-placeholder-description": "За да ги зачувате вашите филтерски псотавки за да ги употребите другпат, стиснете на иконката за бележник во подрачјето „Активен филтер“ подолу.",
+	"rcfilters-quickfilters-placeholder-description": "За да ги зачувате вашите филтерски поставки за да ги употребите другпат, стиснете на иконката за бележник во подрачјето „Активен филтер“ подолу.",
 	"rcfilters-savedqueries-defaultlabel": "Зачувани филтри",
 	"rcfilters-savedqueries-rename": "Преименувај",
 	"rcfilters-savedqueries-setdefault": "Задај како основно",
diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json
index e2ff083ed2..69a3d87f37 100644
--- a/languages/i18n/nb.json
+++ b/languages/i18n/nb.json
@@ -389,6 +389,7 @@
 	"perfcached": "Følgende data er en tidligere kopi og ikke nødvendigvis den siste versjonen i databasen. Maksimalt {{PLURAL:$1|ett resultat|$1 resultater}} er {{PLURAL:$1|tilgjengelig|tilgjengelige}} som tidligere kopier.",
 	"perfcachedts": "Listen ble sist oppdatert $1. Maksimalt {{PLURAL:$4|ett resultat|$4 resultater}} vises.",
 	"querypage-no-updates": "Oppdateringer for denne siden er slått av. Data her blir ikke gjenoppfrisket.",
+	"querypage-updates-periodical": "Oppdateringer for denne siden kjøres periodisk.",
 	"viewsource": "Vis kilde",
 	"viewsource-title": "Vis kilden til $1",
 	"actionthrottled": "Handlingsgrense overskredet",
diff --git a/languages/i18n/nds-nl.json b/languages/i18n/nds-nl.json
index 91f6f1ee28..76e678e076 100644
--- a/languages/i18n/nds-nl.json
+++ b/languages/i18n/nds-nl.json
@@ -181,7 +181,7 @@
 	"view-foreign": "Bekyken up $1",
 	"edit": "Bewarken",
 	"edit-local": "Lokale beschrieving bewarken",
-	"create": "Anmaken",
+	"create": "Upstellen",
 	"create-local": "Lokale beskryving tovogen",
 	"delete": "Vordsmyten",
 	"undelete_short": "$1 {{PLURAL:$1|versy|versys}} weaderümmeplaatsen",
@@ -335,7 +335,7 @@
 	"protectedpagetext": "Disse syde is beveiligd. Bewarken of andere handelingen binnet neet möägelik.",
 	"viewsourcetext": "Jy künnet de brontekst van disse syde bewarken en bekyken.",
 	"viewyourtext": "Jy künnet juw bewarkingen an de brontekst van disse syde bekyken en kopieren.",
-	"protectedinterface": "Up disse syde steyt tekst dee gebruked wördt vöär systeemteksten van disse wiki, en is beveiligd üm misbruuk te vöärkommen. Bruuk [https://translatewiki.net/ translatewiki.net], et lokaliseringsprojekt vöär MediaWiki, üm oaversetingen vöär alle wikis to te vogen of te wysigen.",
+	"protectedinterface": "Up disse syde steyt tekst dee gebruked wördt vöär systeemteksten van disse wiki, en is beveiligd üm misbruuk te vöärkommen. Gebruuk [https://translatewiki.net/ translatewiki.net], et lokaliseringsprojekt vöär MediaWiki, üm oaversetingen vöär alle wikis to te vogen of te wysigen.",
 	"editinginterface": "Wårsküwing: jy bewarket een syde dee teksten gebruukt vöär de gebrukersümgeaving van de programmatuur. \nWat jy up disse syde wysigen is van invlööd up de gebrukersümgeaving van andere gebrukers van disse wiki.",
 	"translateinterface": "Üm oaversettingen vöär alle wikis to te vogen of te wysigen, kün jy [https://translatewiki.net/ translatewiki.net] gebruken, et lokaliseringsprojekt vöär MediaWiki.",
 	"cascadeprotected": "Disse syde is beveiligd ümdat et vöärkümt in de volgende {{PLURAL:$1|syde|syden}}, dee beveiligd {{PLURAL:$1|is|binnet}} mid de \"kaskade\"-opty:\n$2",
@@ -502,14 +502,14 @@
 	"resettokens-done": "Tokens ongedaonmaken.",
 	"resettokens-resetbutton": "Ekeuzen tokens ongedaonmaken",
 	"summary": "Samenvatting:",
-	"subject": "Onderwarp:",
+	"subject": "Underwarp:",
 	"minoredit": "kleine wysiging",
 	"watchthis": "Volg disse syde",
 	"savearticle": "Syde uutgeaven",
 	"savechanges": "Wysigingen uutgeaven",
 	"publishpage": "Zied uutbrengen",
 	"publishchanges": "Wysigingen uutgeaven",
-	"preview": "Naokieken",
+	"preview": "NÃ¥kyken",
 	"showpreview": "Bewarking nåkyken",
 	"showdiff": "Verskil bekyken",
 	"blankarticle": "Waorschuwing: de zied die'j anmaken willen is leeg.\nA'j noen weer op \"$1\" klikken, dan wördt de zied an-emaakt zonder enige inhoud.",
@@ -534,13 +534,13 @@
 	"accmailtitle": "Wachtwoord is verstuurd.",
 	"accmailtext": "Der is n willekeurig wachtwoord veur [[User talk:$1|$1]] verstuurd naor $2. t Kan ewiezigd wörden op de zied ''[[Special:ChangePassword|wachtwoord wiezigen]]'' naoda'j an-emeld bin.",
 	"newarticle": "(Niej)",
-	"newarticletext": "Disse syde besteyt noch neet.\nIn et veld hyrunder kün jy wat skryven üm disse syde an te maken (meyr informaty vind jy up de [$1 hülpsyde]).\nAs jy hyr per ungelük terechtekommen binnet bruuk dan de knoppe '''vöärige''' üm terügge te gån.",
+	"newarticletext": "Disse syde besteyt noch neet.\nIn et veld hyrunder kün jy wat skryven üm disse syde an te maken (meyr informaty vind jy up de [$1 hülpsyde]).\nAs jy hyr per ungelük terechtekommen binnet gebruuk dan de knoppe '''vöärige''' üm terügge te gån.",
 	"anontalkpagetext": "----\nDisse oaverlegsyde höyrt by een anonyme gebruker dee noch geen gebrukersname hevt, of et neet bruukt.\nDårümme gebruken wy et IP-adresse ter identifikaty. Een IP-adresse kan döär meyrere lüde gebruked wörden. As jy een anonyme gebruker binnet, en et gevööl hebbet dat jy berichten kryget dee neet vöär ju bedoold binnet [[Special:CreateAccount|skryv ju eigen dan in]] of [[Special:UserLogin|meld ju eigen an]] üm verwarring mid andere anonyme gebrukers in de tokumst te vöärkommen.''",
 	"noarticletext": "Der steyt nun geen tekst up disse syde.\nJy künnet [[Special:Search/{{PAGENAME}}|de titel upsöken]] in andere syden,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söken in de logboken],\nof [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse syde anmaken].",
 	"noarticletext-nopermission": "Up disse syde steyt geen tekst.\nJy künnet [[Special:Search/{{PAGENAME}}|söken nå disse term]] in andere syden of\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboken döärsöken], mär jy hebbet geen rechten üm disse syde an te maken.",
 	"missing-revision": "De versie #$1 van de zied \"{{FULLPAGENAME}} besteet niet.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
 	"userpage-userdoesnotexist": "Je bewarken n gebrukerszied van n gebruker die niet besteet (gebruker \"$1\"). Kiek effen nao o'j disse zied wel anmaken/bewarken willen.",
-	"userpage-userdoesnotexist-view": "Gebruker \"$1\" steet hier niet in-eschreven",
+	"userpage-userdoesnotexist-view": "Gebruker \"$1\" steyt hyr neet inskreaven",
 	"blocked-notice-logextract": "Disse gebruker is op t moment eblokkeerd.\nDe leste regel uut t blokkeerlogboek steet hieronder as referensie:",
 	"clearyourcache": "Upmarking: nå et seakeren, sül jy lichtkans et tüskengehöägen van juw webkyker mütten leadigen üm de wysigingen te seen.\n* Firefox / Safari: hold Shift indrükked terwyl jy up Herladen klikket, of drük up Ctrl-F5 of Ctrl-R (⌘-R up een Mac)\n* Google Chrome: drük up Ctrl-Shift-R (⌘-Shift-R up een Mac)\n* Internet Explorer: hold Ctrl indrükked terwyl jy up Herladen klikket, of drük up Ctrl-F5\n* Opera: gå nå Menü → Instellingen (Opera → Vöärköären up een Mac) en dan nå Privaatheid & beveiliging → Söökgeskydenisse wisken → Tydelike afbealdingen en bestanden.",
 	"usercssyoucanpreview": "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
@@ -552,7 +552,7 @@
 	"userinvalidconfigtitle": "'''Waorschuwing:''' der is gien uutvoering mit de naam \"$1\". Vergeet niet dat joew eigen .css- en .js-ziejen beginnen mit n kleine letter, bv. \"{{ns:user}}:Naam/'''v'''ector\" in plaotse van \"{{ns:user}}:Naam/'''V'''ector.css\".",
 	"updated": "(Bewark)",
 	"note": "'''Opmarking:'''",
-	"previewnote": "Denk derüm dat dit allinnig een nåkyksyde is.\nJuw wysigingen binnet noch neet seakerd!",
+	"previewnote": "Denk derümme dat dit allinnig een nåkyksyde is.\nJuw wysigingen binnet noch neet vastlegd!",
 	"continue-editing": "Gå nå et bewarkingsveld",
 	"previewconflict": "Disse versie löt zien hoe de tekste in t bovenste veld deruut kömp te zien a'j de tekste opslaon.",
 	"session_fail_preview": "'''De bewarking kan niet verwarkt wörden wegens n verlies an data.'''\nProbeer t laoter weer.\nAs t probleem dan nog steeds veurkömp, probeer dan [[Special:UserLogout|opniej an te melden]].",
@@ -562,7 +562,7 @@
 	"editing": "Bewarken: $1",
 	"creating": "Anmaken: $1",
 	"editingsection": "Bewarken: $1 (deylsyde)",
-	"editingcomment": "Bewarken: $1 (niej onderwarp)",
+	"editingcomment": "Bewarken: $1 (ny underwarp)",
 	"editconflict": "Tegelieke bewörken: $1",
 	"explainconflict": "'''NB:''' n aander hef disse zied ewiezigd naoda'j an disse bewarking begunnen bin.\nt Bovenste bewarkingsveld löt de zied zien zo as t noen is.\nDaoronder (bie \"Wiezigingen\") staon de verschillen tussen joew versie en de op-esleugen zied.\nHelemaole onderan (bie \"Joew tekste\") steet nog n bewarkingsveld mit joew versie.\nJe zullen je eigen wiezigingen in de nieje tekste in mutten passen.\n'''Allinnig''' de tekste in t bovenste veld wörden beweerd a'j noen kiezen veur \"$1\".",
 	"yourtext": "Joew tekste",
@@ -592,7 +592,7 @@
 	"permissionserrorstext": "Je maggen of kunnen dit niet doon. De {{PLURAL:$1|reden|redens}} daorveur {{PLURAL:$1|is|bin}}:",
 	"permissionserrorstext-withaction": "Jy hebbet geen rechten üm $2, mid de volgende {{PLURAL:$1|readen|readenen}}:",
 	"recreate-moveddeleted-warn": "'''Waorschuwing: je maken n zied an die eerder al vortedaon is.'''\n\nBedenk eerst of t neudig is um disse zied veerder te bewarken.\nVeur de dudelikheid steet hieronder  t vortdologboek en t herneumlogboek veur disse zied:",
-	"moveddeleted-notice": "Disse syde is vorddån.\nHyrunder steyt de informaty uut et vortsmytlogbook, et beveiligingslogbook, en et hernöömlogbook.",
+	"moveddeleted-notice": "Disse syde is vordsmeaten.\nHyrunder steyt de informaty uut et vortsmytlogbook, et beveiligingslogbook, en et hernöömlogbook.",
 	"log-fulllog": "t Hele logboek bekieken",
 	"edit-hook-aborted": "De bewarking is aofebreuken deur n hook.\nDer is gien reden op-egeven.",
 	"edit-gone-missing": "De zied kon niet bie-ewörken wörden.\nt Lik derop as of t vortedaon is.",
@@ -630,7 +630,8 @@
 	"undo-success": "De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de zied op um de bewarking weerumme te dreien.",
 	"undo-failure": "De wieziging kon niet weerummedreid wörden umdat t ondertussen awweer ewiezigd is.",
 	"undo-norev": "De bewarking kon niet weerummedreid wörden, umdat t niet besteet of vortedaon is.",
-	"undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) weerummedreid",
+	"undo-nochange": "Et likt derup dat de bewarking al weaderümmedraid is.",
+	"undo-summary": "Versy $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|oaverleg]]) weaderümmedraid",
 	"undo-summary-username-hidden": "Versie $1 deur n verbörgen gebruker weerummedreid",
 	"cantcreateaccount-text": "t Anmaken van gebrukers van dit IP-adres ($1) is eblokkeerd deur [[User:$3|$3]].\n\nDe deur $3 op-egeven reden is ''$2''",
 	"viewpagelogs": "Bekyk logboken vöär disse syde",
@@ -647,11 +648,11 @@
 	"last": "lätste",
 	"page_first": "eerste",
 	"page_last": "leste",
-	"histlegend": "Verklaoring aofkortingen: (noen) = verschil mit de op-esleugen versie, (veurige) = verschil mit de veurige versie, K = kleine wieziging",
+	"histlegend": "Verskillenselekty: selekteer de te vergelyken versys en drük up ENTER of up de knoppe underan.
\nVerklåring afkortingen: ({{int:cur}}) = verskil mid de aktuele versy, ({{int:last}}) = verskil mid de vöärgånde versy, {{int:minoreditletter}} = kleine wysiging.", "history-fieldset-title": "Versys filteren", "history-show-deleted": "Allinnig vortedaon", - "histfirst": "Eerste", - "histlast": "Leste", + "histfirst": "oldste", + "histlast": "nyste", "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})", "historyempty": "leadig", "history-feed-title": "Wiezigingsoverzichte", @@ -675,7 +676,7 @@ "rev-suppressed-diff-view": "Eén van de bewarkingen veur de verschillen die'j op-evreugen hebben, is '''onderdrokt'''.\nJe kunnen disse verschillen bekieken. Misschien steet der over in t [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek mit onderdrokten versies].", "rev-delundel": "bekyken/verbargen", "rev-showdeleted": "bekiek", - "revisiondelete": "Wiezigingen vortdoon/herstellen", + "revisiondelete": "Versys vordsmyten en weaderümmesetten", "revdelete-nooldid-title": "Gien doelversie", "revdelete-nooldid-text": "Je hebben gien versie an-egeven waor disse aksie op uutevoerd mut wörden.", "revdelete-no-file": "t Op-egeven bestaand besteet niet.", @@ -750,7 +751,7 @@ "difference-title-multipage": "Verschil tussen ziejen \"$1\" en \"$2\"", "difference-multipage": "(Verschil tussen ziejen)", "lineno": "Regel $1:", - "compareselectedversions": "Vergeliek de ekeuzen versies", + "compareselectedversions": "Vergelyk de köäsen versys", "showhideselectedversions": "Ekeuzen versies bekieken/verbargen", "editundo": "weaderümmedraien", "diff-empty": "(Gien verschil)", @@ -760,7 +761,7 @@ "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van disse verschillen ($1) {{PLURAL:$2|is|bin}} niet evunnen.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].", "searchresults": "Söökresultaten", "searchresults-title": "Söökresultaten vöär \"$1\"", - "titlematches": "Overeenkomst mit t onderwarp", + "titlematches": "Oavereynkumst mid et underwarp", "textmatches": "Overeenkomst mit teksten", "notextmatches": "Gien overeenstemming", "prevn": "vöärige {{PLURAL:$1|$1}}", @@ -769,7 +770,7 @@ "nextn-title": "{{PLURAL:$1|Volgend resultaat|Volgende $1 resultaten}}", "shown-title": "Låt $1 {{PLURAL:$1|resultaat|resultaten}} per syde seen", "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) bekyken.", - "searchmenu-exists": "'''Der is n zied mit de naam \"[[:$1]]\" op disse wiki.'''", + "searchmenu-exists": "Der is een syde mid de name \"[[:$1]]\" up disse wiki. {{PLURAL:$2|0=|See ouk de andere söökresultaten.}}", "searchmenu-new": "De syde \"[[:$1]]\" up disse wiki anmaken! \n{{PLURAL:$2|0=|See ouk de syde mid juw söökresultaten.|See ouk de lyste mid vünden söökresultaten.}}", "searchprofile-articles": "Artikels", "searchprofile-images": "Multimedia", @@ -780,7 +781,7 @@ "searchprofile-everything-tooltip": "Alle inhold döärsöken (ouk oaverlegsyden)", "searchprofile-advanced-tooltip": "Söken in de angeaven naamruumden", "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woorden}})", - "search-result-category-size": "{{PLURAL:$1|1 kategorielid|$1 kategorielejen}} ({{PLURAL:$2|1 onderkategorie|$2 onderkategorieën}}, {{PLURAL:$3|1 bestaand|$3 bestaanden}})", + "search-result-category-size": "{{PLURAL:$1|1 kategorylid|$1 kategoryleaden}} ({{PLURAL:$2|1 underkategory|$2 underkategoryen}}, {{PLURAL:$3|1 bestand|$3 bestanden}})", "search-redirect": "(döärverwysing vanaf $1)", "search-section": "(underwarp $1)", "search-file-match": "(kümt oavereyne mid de inhold van et bestand)", @@ -822,7 +823,7 @@ "prefs-watchlist-edits-max": "Maximale antal: 1.000", "prefs-watchlist-token": "Volgliestesleutel", "prefs-misc": "Overig", - "prefs-resetpass": "Wachtwoord wiezigen", + "prefs-resetpass": "Wachtwoord wysigen", "prefs-changeemail": "Netpostadres wiezigen of vorthaolen", "prefs-setemail": "Stel n netpostadres in", "prefs-email": "Instellingen veur netpost", @@ -874,7 +875,7 @@ "yourlanguage": "Taal / språke:", "yourvariant": "Taalvariaant veur inhoud:", "prefs-help-variant": "Joew veurkeursvariaant of -spelling um de inhoudsziejen van disse wiki in weer te geven.", - "yournick": "Alias veur ondertekeningen", + "yournick": "Nye handteykening:", "prefs-help-signature": "Reaksies op de overlegziejen mutten ondertekend wörden mit \"~~~~\", dit wörden dan ummezet in joew ondertekening mit daorbie de daotum en tied van de bewarking.", "badsig": "Ongeldige haandtekening; HTML naokieken.", "badsiglength": "Joew haandtekening is te lang.\nt Mut minder as {{PLURAL:$1|letter|letters}} hebben.", @@ -890,7 +891,7 @@ "prefs-help-email-required": "Hier he'w n netpostadres veur neudig.", "prefs-info": "Basisinformaty", "prefs-i18n": "Språkinstellingen", - "prefs-signature": "Ondertekening", + "prefs-signature": "Handteykening", "prefs-dateformat": "Daotumopmaak:", "prefs-timeoffset": "Tiedsverschil", "prefs-advancedediting": "Algemene opsies", @@ -923,22 +924,25 @@ "userrights-conflict": "Konflikt bie t wiezigen van gebrukersrechten! Kiek joew wiezigingen nao en bevestig t.", "group": "Groep:", "group-user": "gebrukers", - "group-autoconfirmed": "an-emelde gebrukers", + "group-autoconfirmed": "bevästigde gebrukers", "group-bot": "bots", "group-sysop": "beheerders", - "group-bureaucrat": "burokraoten", + "group-interface-admin": "tüskenvlakbeheyrders", + "group-bureaucrat": "bürokraten", "group-suppress": "toezichthouwers", "group-all": "(alles)", "group-user-member": "{{GENDER:$1|gebruker}}", "group-autoconfirmed-member": "{{GENDER:$1|autobevestigden gebruker}}", "group-bot-member": "{{GENDER:$1|bot}}", "group-sysop-member": "{{GENDER:$1|beheerder}}", + "group-interface-admin-member": "{{GENDER:$1|tüskenvlakbeheyrder}}", "group-bureaucrat-member": "{{GENDER:$1|burokraot}}", "group-suppress-member": "{{GENDER:$1|toezichthouwer}}", "grouppage-user": "{{ns:project}}:Gebrukers", "grouppage-autoconfirmed": "{{ns:project}}:An-emelde gebrukers", "grouppage-bot": "{{ns:project}}:Bots", "grouppage-sysop": "{{ns:project}}:Beheerder", + "grouppage-interface-admin": "{{ns:project}}:Tüskenvlakbeheyrder", "grouppage-bureaucrat": "{{ns:project}}:Beheerder", "grouppage-suppress": "{{ns:project}}:Toezicht", "right-read": "Ziejen bekieken", @@ -964,9 +968,9 @@ "right-nominornewtalk": "Kleine bewarkingen an n overlegzied leien niet tot n melding 'nieje berichten'", "right-apihighlimits": "Hoge API-limieten gebruken", "right-writeapi": "Bewarken via de API", - "right-delete": "Ziejen vortdoon", + "right-delete": "Syden vordsmyten", "right-bigdelete": "Ziejen mit n grote geschiedenisse vortdoon", - "right-deletelogentry": "Bepaolde logboekregels vortdoon en weerummeplaotsen", + "right-deletelogentry": "Bepålde logbookregels vordsmyten en weaderümmeplaatsen", "right-deleterevision": "Versies van ziejen verbargen", "right-deletedhistory": "Vortedaone versies bekieken, zonder te kunnen zien wat der vortedaon is", "right-deletedtext": "Bekiek vortedaone tekste en wiezigingen tussen vortedaone versies", @@ -1014,7 +1018,7 @@ "rightslog": "Gebrukersrechtenlogboek", "rightslogtext": "Dit is n logboek mit veraanderingen van gebrukersrechten", "action-read": "disse zied lezen", - "action-edit": "disse zied bewarken", + "action-edit": "disse syde bewarken", "action-createpage": "disse zied anmaken", "action-createtalk": "disse overlegzied anmaken", "action-createaccount": "disse gebrukerskonto anmaken", @@ -1028,8 +1032,8 @@ "action-reupload-shared": "n aander bestaand over dit bestaand uut de edeelden mediadatabanke hinne zetten.", "action-upload_by_url": "dit bestaand vanaof n webadres oplaojen", "action-writeapi": "de schrief-API bewarken", - "action-delete": "disse zied vortdoon", - "action-deleterevision": "disse versie vortdoon", + "action-delete": "disse syde vordsmyten", + "action-deleterevision": "vord te smyten versys", "action-deletedhistory": "de vortedaone versies van disse zied bekieken", "action-browsearchive": "vortedaone ziejen zeuken", "action-undelete": "disse zied weerummeplaotsen", @@ -1058,7 +1062,7 @@ "recentchanges": "Lätste wysigingen", "recentchanges-legend": "Optys vöär lätste wysigingen", "recentchanges-summary": "Up disse syde kün jy de lätste wysigingen van disse wiki bekyken.", - "recentchanges-noresult": "Der waren in disse periode gien wiezigingen die an de kriteria voldoon.", + "recentchanges-noresult": "Der waren in disse periode geen wysigingen dee an de kriteria voldoot.", "recentchanges-feed-description": "Zeuk naor de alderleste wiezingen op disse wiki in disse voer.", "recentchanges-label-newpage": "Mid disse bewarking is een nye syde maked", "recentchanges-label-minor": "Dit is een kleine wysiging", @@ -1091,7 +1095,7 @@ "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 (bruuk et menü of söök up filtername)", + "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": "Resultaten markeren", "rcfilters-highlightmenu-title": "Kies n kleur", @@ -1150,7 +1154,7 @@ "rcshowhidebots-show": "bekyken", "rcshowhidebots-hide": "verbargen", "rcshowhideliu": "$1 registreerde gebrukers", - "rcshowhideliu-show": "Bekiek", + "rcshowhideliu-show": "Bekyk", "rcshowhideliu-hide": "verbargen", "rcshowhideanons": "$1 anonyme gebrukers", "rcshowhideanons-show": "bekyken", @@ -1204,7 +1208,7 @@ "upload-permitted": "Toe-estaone bestaandstypes: $1.", "upload-preferred": "An-ewezen bestaandstypes: $1.", "upload-prohibited": "Verbeujen bestaandstypes: $1.", - "uploadlogpage": "Logboek mit nieje bestaanden", + "uploadlogpage": "Logbook mid nye bestanden", "uploadlogpagetext": "Hieronder steet n lieste mit bestaanden die net niej bin.\nZie de [[Special:NewFiles|uutstalling mit media]] veur n overzicht.", "filename": "Bestaandsnaam", "filedesc": "Beskryving", @@ -1332,7 +1336,7 @@ "zip-unsupported": "t Bestaand is n ZIP-bestaand dat gebruukmaak van ZIP-meugelikheen die MediaWiki niet ondersteunt.\nDe veiligheid kan niet nao-ekeken wörden.", "uploadstash": "Verbörgen bestaanden", "uploadstash-summary": "Disse zied gif toegang tot bestaanden die op-estuurd bin of nog op-estuurd wörden mer nog niet beschikbaor emaakt bin op de wiki. Disse bestaanden bin allinnig zichtbaor veur de gebruker die ze opstuurt.", - "uploadstash-clear": "Verbörgen bestaanden vortdoon", + "uploadstash-clear": "Verbörgen bestanden vordsmyten", "uploadstash-nofiles": "Der bin gien verbörgen bestaanden.", "uploadstash-badtoken": "t Uutvoeren van de haandeling is mislokt. Dit kömp waorschienlik deurdat joew bewarkingsreferensies verleupen bin. Probeer t opniej.", "uploadstash-errclear": "t Vortdoon van de bestaanden is mislokt.", @@ -1382,9 +1386,9 @@ "file-anchor-link": "Bestand", "filehist": "Bestandsgeskydenisse", "filehist-help": "Klik up een dåtum/tyd üm et bestand te seen so as et destyds was.", - "filehist-deleteall": "alles vortdoon", - "filehist-deleteone": "disse vortdoon", - "filehist-revert": "weerummedreien", + "filehist-deleteall": "alles vordsmyten", + "filehist-deleteone": "vordsmyten", + "filehist-revert": "weaderümmedraien", "filehist-current": "aktueel", "filehist-datetime": "Dåtum/tyd", "filehist-thumb": "Miniatuurafbealding", @@ -1420,20 +1424,20 @@ "filerevert-submit": "Weerummedreien", "filerevert-success": "'''[[Media:$1|$1]]''' is weerummedreid naor de [$4 versie op $2, $3].", "filerevert-badversion": "Der is gien veurige lokale versie van dit bestaand mit de op-egeven tied.", - "filedelete": "$1 vortdoon", - "filedelete-legend": "Bestaand vortdoon", + "filedelete": "$1 vordsmyten", + "filedelete-legend": "Bestand vordsmyten", "filedelete-intro": "Je doon t bestaand '''[[Media:$1|$1]]''' noen vort samen mit de geschiedenisse dervan.", "filedelete-intro-old": "Je bin de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] vort an t doon.", "filedelete-comment": "Reden:", - "filedelete-submit": "Vortdoon", + "filedelete-submit": "Vordsmyten", "filedelete-success": "'''$1''' is vortedaon.", "filedelete-success-old": "De versie van '''[[Media:$1|$1]]''' van $3, $2 is vortedaon.", "filedelete-nofile": "'''$1''' besteet niet.", "filedelete-nofile-old": "Der is gien versie van '''$1''' in t archief mit de an-egeven eigenschappen.", "filedelete-otherreason": "Aandere reden:", "filedelete-reason-otherlist": "Aandere reden", - "filedelete-reason-dropdown": "*Veulveurkoemende redens veur t vortdoon van ziejen\n** Auteursrechtenschending\n** Dit bestaand he'w dubbel", - "filedelete-edit-reasonlist": "Reden veur t vortdoon bewarken", + "filedelete-reason-dropdown": "*Algemeyne readenen vöär vordsmyten\n** Autöörsrechtenschending\n** Dubbel bestand", + "filedelete-edit-reasonlist": "Readenen vöär et vordsmyten bewarken", "filedelete-maintenance": "t Vortdoon en weerummeplaotsen kan noen effen niet umda-w bezig bin mit onderhoud.", "filedelete-maintenance-title": "Kan bestaand niet vortdoon", "mimesearch": "Zeuken op MIME-type", @@ -1482,7 +1486,7 @@ "brokenredirects": "Ebreuken deurverwiezingen", "brokenredirectstext": "Disse deurverwiezingen verwiezen naor n niet-bestaonde zied.", "brokenredirects-edit": "bewark", - "brokenredirects-delete": "vortdoon", + "brokenredirects-delete": "vordsmyten", "withoutinterwiki": "Ziejen zonder verwiezingen naor aandere talen", "withoutinterwiki-summary": "De volgende ziejen verwiezen niet naor versies in n aandere taal.", "withoutinterwiki-legend": "Veurvoegsel", @@ -1551,7 +1555,7 @@ "notargettext": "Je hebben niet op-egeven veur welke zied je disse funksie bekieken willen.", "nopagetitle": "Doelzied besteet niet", "nopagetext": "De zied die'j herneumen willen besteet niet.", - "pager-newer-n": "{{PLURAL:$1|1 niejere|$1 niejere}}", + "pager-newer-n": "{{PLURAL:$1|1 nyere|$1 nyere}}", "pager-older-n": "{{PLURAL:$1|1 oldere|$1 oldere}}", "suppress": "Toezicht", "querypage-disabled": "Disse spesiale zied is uutezet um prestasieredens.", @@ -1565,12 +1569,12 @@ "specialloguserlabel": "Uutvoerende gebruker:", "speciallogtitlelabel": "Dool (sydname of {{ns:user}}:gebrükersname vöär gebrüker):", "log": "Logboken", - "all-logs-page": "Alle publieke logboeken", + "all-logs-page": "Alle publike logboken", "alllogstext": "Dit is t kombinasielogboek van {{SITENAME}}.\nJe kunnen oek kiezen veur bepaolde logboeken en filteren op gebruker (heufdlettergeveulig) en titel (heufdlettergeveulig).", "logempty": "Der steet gien passende informasie in t logboek.", "log-title-wildcard": "Zeuk naor titels die beginnen mit disse tekste:", "showhideselectedlogentries": "Ekeuzen logboekregels laoten zien of verbargen", - "allpages": "Alle ziejen", + "allpages": "Alle syden", "nextpage": "Volgende zied ($1)", "prevpage": "Veurige zied ($1)", "allpagesfrom": "Laot ziejen zien vanaof:", @@ -1620,7 +1624,7 @@ "listgrouprights-addgroup-all": "Kan gebrukers bie alle groepen zetten", "listgrouprights-removegroup-all": "Kan gebrukers uut alle groepen haolen", "listgrouprights-addgroup-self": "Kan {{PLURAL:$2|groep|groepen}} bie de eigen gebruker doon: $1", - "listgrouprights-removegroup-self": "Kan {{PLURAL:$2|groep|groepen}} vortdoon van eigen gebruker: $1", + "listgrouprights-removegroup-self": "{{PLURAL:$2|Grup|Gruppen}} vordsmyten uut de eigen gebrukerskonto: $1", "listgrouprights-addgroup-self-all": "Kan alle groepen bie de eigen gebruker doon", "listgrouprights-removegroup-self-all": "Kan alle groepen vortdoon van eigen gebruker", "trackingcategories": "Volgkategorieën", @@ -1643,7 +1647,7 @@ "email-legend": "n Bericht sturen naor n aandere gebruker van {{SITENAME}}", "emailfrom": "Van:", "emailto": "An:", - "emailsubject": "Onderwarp:", + "emailsubject": "Underwarp:", "emailmessage": "Bericht:", "emailsend": "Versturen", "emailccme": "Stuur mien n kopie van dit bericht.", @@ -1665,7 +1669,7 @@ "removedwatchtext": "De zied \"[[:$1]]\" is van [[Special:Watchlist|joew volglieste]] aofehaold.", "watch": "Volgen", "watchthispage": "Volg disse zied", - "unwatch": "Niet volgen", + "unwatch": "Neet volgen", "unwatchthispage": "Niet volgen", "notanarticle": "Gien artikel", "notvisiblerev": "Bewarking is vortedaon", @@ -1697,14 +1701,14 @@ "enotif_body": "Huj $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSamenvatting van de wieziging: $PAGESUMMARY $PAGEMINOREDIT\n\nKontaktgevevens van de auteur:\nNetpost: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nJe kriegen veerder gien berichten, behalven a'j disse zied bezeuken terwiel je an-emeld bin. Op joew volglieste ku'j veur alle ziejen die'j volgen de waorschuwingsinstellingen deraof haolen.\n\nGroeten van t {{SITENAME}}-waorschuwingssysteem.\n\n--\nJe kunnen joew netpostinstellingen wiezigen op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nJe kunnen de volgliestinstellingen wiezigen op:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nJe kunnen de zied van joew volglieste aofhaolen deur op de volgende verwiezing te klikken:\n$UNWATCHURL\n\nOpmarkingen en veerdere hulpe:\n$HELPPAGE", "created": "an-emaakt", "changed": "ewiezigd", - "deletepage": "Vortdoon", + "deletepage": "Syde vordsmyten", "confirm": "Bevestigen", "excontent": "De tekste was: '$1'", "excontentauthor": "De tekste was: '$1' (zied an-emaakt deur: [[Special:Contributions/$2|$2]])", "exbeforeblank": "vöärdat disse syde leadigmaked wördde stünd hyr: '$1'", - "delete-confirm": "\"$1\" vortdoon", - "delete-legend": "Vortdoon", - "historywarning": "'''Waorschuwing''': de zied die'j vortdoon willen, hef $1 {{PLURAL:$1|versie|versies}}:", + "delete-confirm": "\"$1\" vordsmyten", + "delete-legend": "Vordsmyten", + "historywarning": "Wårsküwing: de syde dee jy vordsmyten willet, hevt $1 {{PLURAL:$1|versy|versys}}:", "historyaction-submit": "Bekiek", "confirmdeletetext": "Je staon op t punt n zied en de geschiedenisse dervan vort te doon.\nBevestig hieronder dat dit inderdaod de bedoeling is, da'j de gevolgen begriepen en dat t akkedeert mit t [[{{MediaWiki:Policy-url}}|beleid]].", "actioncomplete": "Uutevoerd", @@ -1717,7 +1721,7 @@ "deletecomment": "Reden:", "deleteotherreason": "Aandere/extra reden:", "deletereasonotherlist": "Aandere reden", - "deletereason-dropdown": "* Redens veur t vortdoon van ziejen\n** Spam\n** Vandalisme\n** Schending van auteursrechten\n** Op verzeuk van de auteur\n** Ebreuken deurverwiezing", + "deletereason-dropdown": "* Algemeyne readenen vöär vordsmyten\n** Späm\n** Vandalisme\n** Auteursrechtenschending\n** Up versöök van de autöör\n** Bröäken döärverwysing", "delete-edit-reasonlist": "Redens veur t vortdoon bewarken", "delete-toobig": "Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.\nt Vortdoon van dit soort ziejen is mit rechten bepark um t per ongelok versteuren van de warking van {{SITENAME}} te veurkoemen.", "delete-warning-toobig": "Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.\nWoart je: t vortdoon van disse zied kan de warking van de databanke van {{SITENAME}} versteuren.\nWees veurzichtig", @@ -1730,14 +1734,14 @@ "cantrollback": "De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.", "alreadyrolled": "Kan de leste wieziging van de zied [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.\nn Aander hef disse zied al bewarkt of hersteld naor n eerdere versie.\n\nDe leste bewarking op disse zied is edaon deur [[User:$3|$3]] ([[User talk:$3|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).", "editcomment": "De bewarkingssamenvatting was: $1.", - "revertpage": "Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur [[User:$1|$1]]", + "revertpage": "Wysigingen döär [[Special:Contributions/$2|$2]] ([[User talk:$2|oaverleg]]) weaderümmedraid tot de lätste versy van [[User:$1|$1]]", "revertpage-nouser": "Wiezigingen deur n verbörgen gebruker weerummedreid naor de leste versie deur {{GENDER:$1|[[User:$1|$1]]}}", "rollback-success": "Wiezigingen van $1; weerummedreid naor de leste versie van $2.", "sessionfailure-title": "Sessiefout", "sessionfailure": "Der is n probleem mit joew anmeldsessie. De aksie is stop-ezet uut veurzörg tegen n beveiligingsrisico (dat besteet uut t meugelike \"kraken\" van disse sessie). Gao weerumme naor de veurige zied, laoj disse zied opniej en probeer t nog es.", "protectlogpage": "Beveiligingslogbook", "protectlogtext": "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.\nZie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzicht.", - "protectedarticle": "[[$1]] is beveiligd", + "protectedarticle": "hevt [[$1]] beveiligd", "modifiedarticleprotection": "beveiligingsnivo van \"[[$1]]\" ewiezigd", "unprotectedarticle": "hef de beveiliging van \"[[$1]]\" deraof ehaold", "movedarticleprotection": "hef de beveiligingsinstellingen over-ezet van \"[[$2]]\" naor \"[[$1]]\"", @@ -1759,7 +1763,7 @@ "protect-locked-dblock": "Beveiligingsnivo's kunnen effen niet ewiezigd wörden umdat de databanke noen beveiligd is.\nHier staon de instellingen zo as ze noen bin veur de zied '''$1''':", "protect-locked-access": "Je hebben gien rechten um t beveilingsnivo van ziejen te wiezigen.\nHier staon de instellingen zo as ze noen bin veur de zied '''$1''':", "protect-cascadeon": "Disse zied wördt beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|zied|ziejen}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Wiezigingen in t beveiligingsnivo van disse zied hebben gien invleud op de kaskadebeveiliging.", - "protect-default": "Veur alle gebrukers", + "protect-default": "Alle gebrukers tostån", "protect-fallback": "Allinnig gebrukers mit t recht \"$1\" toestaon", "protect-level-autoconfirmed": "Allinnig automaties bevestigden gebrukers toestaon", "protect-level-sysop": "Allinnig beheerders toestaon", @@ -1784,7 +1788,7 @@ "pagesize": "(byte)", "restriction-edit": "Bewark", "restriction-move": "Herneum", - "restriction-create": "Anmaken", + "restriction-create": "Upstellen", "restriction-upload": "Bestaand opsturen", "restriction-level-sysop": "helemaole beveiligd", "restriction-level-autoconfirmed": "semibeveiligd", @@ -1832,32 +1836,32 @@ "tooltip-namespace_association": "Vink dit vakjen an um ouk de oaverleg- en underwarpnaamruumde in te slüten dee by de selekteerde naamruumde höyret.", "blanknamespace": "(Höyvdnaamruumde)", "contributions": "{{GENDER:$1|Brukersbydragen}}", - "contributions-title": "Biedragen van $1", + "contributions-title": "Bydragen van $1", "mycontris": "Bydragen", "anoncontribs": "Bydragen", - "contribsub2": "Veur {{GENDER:$3|$1}} ($2)", + "contribsub2": "Vöär {{GENDER:$3|$1}} ($2)", "nocontribs": "Gien wiezigingen evunnen die an de estelde criteria voldoon.", - "uctop": "leste wieziging", + "uctop": "lätste wysiging", "month": "Månd:", "year": "Vanaf jår (en eyrer):", - "sp-contributions-blocklog": "blokkeerlogboek", + "sp-contributions-blocklog": "blokkeerlogbook", "sp-contributions-deleted": "vortedaone gebrukersbiedragen", - "sp-contributions-uploads": "nieje bestaanden", - "sp-contributions-logs": "logboeken", + "sp-contributions-uploads": "nye bestanden", + "sp-contributions-logs": "logboken", "sp-contributions-talk": "oaverleg", "sp-contributions-userrights": "gebrukersrechtenbeheer", "sp-contributions-blocked-notice": "Disse gebruker is op t moment eblokkeerd.\nDe leste regel uut t blokkeerlogboek steet hieronder as referensie:", "sp-contributions-blocked-notice-anon": "Dit IP-adres is eblokkeerd.\nDe leste regel uut t blokkeerlogboek steet as referensie", - "sp-contributions-search": "Zeuken naor biedragen", - "sp-contributions-username": "IP-adres of gebrukersnaam:", - "sp-contributions-toponly": "Allinnig de niejste versie laoten zien", - "sp-contributions-newonly": "Allinnig nieje ziejen laoten zien", - "sp-contributions-submit": "Zeuk", + "sp-contributions-search": "Söken nå bydragen", + "sp-contributions-username": "IP-adres of gebrukersname:", + "sp-contributions-toponly": "Allinnig de nyste versy låten seen", + "sp-contributions-newonly": "Allinnig nye syden låten seen", + "sp-contributions-submit": "Söken", "whatlinkshere": "Verwysingen hyrhinne", "whatlinkshere-title": "Syden dee nå \"$1\" verwyset", "whatlinkshere-page": "Syde:", "linkshere": "De volgende syden verwysen nå $2:", - "nolinkshere": "Gien enkele zied verwis naor '''$2'''.", + "nolinkshere": "Geen enkele syde verwist nå '''$2'''.", "nolinkshere-ns": "Gien enkele zied verwis naor '''$2''' in de ekeuzen naamruumte.", "isredirect": "döärverwysing", "istemplate": "invoogd as mal", @@ -1884,7 +1888,7 @@ "ipbenableautoblock": "De IP-adressen van disse gebruker vanzelf blokkeren", "ipbsubmit": "adres blokkeren", "ipbother": "Aandere tied", - "ipboptions": "2 uren:2 hours,1 dag:1 day,3 dagen:3 days,1 weke:1 week,2 weken:2 weeks,1 maond:1 month,3 maonden:3 months,6 maonden:6 months,1 jaor:1 year,onbeparkt:infinite", + "ipboptions": "2 üren:2 hours,1 dag:1 day,3 dagen:3 days,1 weake:1 week,2 weaken:2 weeks,1 månd:1 month,3 månden:3 months,6 månden:6 months,1 jår:1 year,unbegrensed:infinite", "ipbhidename": "Verbarg de gebrukersnaam in bewarkingen en liesten", "ipbwatchuser": "Gebrukerszied en overlegzied op volglieste zetten", "ipb-disableusertalk": "Veurkoemen dat disse gebruker tiejens de blokkering de eigen overlegzied kan bewarken", @@ -1906,7 +1910,7 @@ "ipusubmit": "Blokkering deraof haolen", "unblocked": "[[User:$1|$1]] is edeblokeerd", "unblocked-range": "$1 is edeblokkeerd", - "unblocked-id": "Blokkering $1 is op-eheven", + "unblocked-id": "Blokkade $1 is upheaven", "blocklist": "Gebrukers die eblokkeerd bin", "ipblocklist": "Gebrukers die eblokkeerd bin", "ipblocklist-legend": "n Eblokkeerden gebruker zeuken", @@ -1938,10 +1942,10 @@ "contribslink": "bydragen", "emaillink": "netpostbericht sturen", "autoblocker": "Vanzelf eblokkeerd umdat t IP-adres overenekömp mit t IP-adres van [[User:$1|$1]], die eblokkeerd is mit as reden: \"$2\"", - "blocklogpage": "Blokkeerlogboek", + "blocklogpage": "Blokkeerlogbook", "blocklog-showlog": "Disse gebruker is al eerder eblokkeerd.\nt Blokkeerlogboek steet hieronder as referensie:", "blocklog-showsuppresslog": "Disse gebruker is al eerder eblokkeerd en wele bewarkingen van disse gebruker bin verbörgen.\nt Logboek mit onderdrokten versies steet hieronder as referensie:", - "blocklogentry": "hef \"[[$1]]\" eblokkeerd veur $2 $3", + "blocklogentry": "hevt \"[[$1]]\" blokkeerd mid as vervaltyd $2 $3", "reblock-logentry": "hef de instellingen veur de blokkering van [[$1]] ewiezigd t Löp noen of over $2 $3", "blocklogtext": "Hier zie'j n lieste van de leste blokkeringen en deblokkeringen. Automatiese blokkeringen en deblokkeringen koemen niet in t logboek te staon. Zie de [[Special:BlockList|blokkeerlieste]] veur de lieste van adressen die noen eblokkeerd bin.", "unblocklogentry": "blokkering van $1 is op-eheven", @@ -2151,7 +2155,7 @@ "tooltip-ca-undelete": "Haal n inhoald van disse ziede oet n emmer", "tooltip-ca-move": "Disse syde hernömen", "tooltip-ca-watch": "Voog disse syde to an juw volglyste", - "tooltip-ca-unwatch": "Smiet disse ziede van oewe voalglieste", + "tooltip-ca-unwatch": "Smyt disse syde van juw volglyste", "tooltip-search": "{{SITENAME}} döärsöken", "tooltip-search-go": "Gå nå een syde mid eksakt disse name as et besteyt", "tooltip-search-fulltext": "Söök nå syden wår disse tekst in steyt", @@ -2184,18 +2188,18 @@ "tooltip-ca-nstab-template": "Mal bekyken", "tooltip-ca-nstab-help": "Loat de hölpbladziede zeen", "tooltip-ca-nstab-category": "Låt de kategorysyde seen", - "tooltip-minoredit": "Markeer as n klaene wieziging", + "tooltip-minoredit": "Markeer as een kleine wysiging", "tooltip-save": "Wysigingen seakeren", - "tooltip-preview": "Bekyk juw wysigingen. Bruuk dit vöärdat jy seakeret.", + "tooltip-preview": "Bekyk een vöärbeald van juw wysigingen. Gebruuk dit vöärdat jy seakeret.", "tooltip-diff": "Låt seen welke wysigingen jy in de tekst maked hebbet.", - "tooltip-compareselectedversions": "Bekiek de verschillen tussen de ekeuzen versies.", - "tooltip-watch": "Voog disse ziede to an oew volglieste", + "tooltip-compareselectedversions": "De verskillen tüsken de twey köäsen versys van disse syde bekyken.", + "tooltip-watch": "Voog disse syde to an juw volglyste", "tooltip-watchlistedit-normal-submit": "Ziejen vortdoon", "tooltip-watchlistedit-raw-submit": "Volglieste biewarken", "tooltip-recreate": "Disse ziede opniej anmaken, ondanks t feit dat t vortdoan is.", "tooltip-upload": "Bestaanden opsturen", "tooltip-rollback": "\"Weaderümmedraien\" drait mid eyn klik de bewarking(en) van de lätste gebruker up disse syde terügge.", - "tooltip-undo": "As jy up \"weaderümmedraien\" klikket geyt et bewarkingsveld lös en kün jy een vöärige versy weaderümmesetten. Jy künnet in de bewarkingssamenvatting een readen upgeaven.", + "tooltip-undo": "\"Weaderümmedraien\" maakt disse bewarking ungedån en oapent et bewarkingsveld. Hyr kan in de bewarkingssamenvatting een readen upgeaven wörden.", "tooltip-preferences-save": "Vuurkeuren opsloan", "tooltip-summary": "Voor een korte samenvatting in", "interlanguage-link-title": "$1 – $2", @@ -2217,24 +2221,24 @@ "spam_blanking": "Alle wiezigingen mit n verwiezing naor $1 wörden vortehaold", "spam_deleting": "In alle versies staon verwiezingen naor $1. Zied vortedaon", "simpleantispam-label": "Antispamkontrole.\nHyr niks invüllen!", - "pageinfo-title": "Informasie over \"$1\"", + "pageinfo-title": "Informaty oaver \"$1\"", "pageinfo-not-current": "Disse gegevens bin allinnig beschikbaor veur disse versie.", "pageinfo-header-basic": "Basisinformaty", "pageinfo-header-edits": "Bewarkingsgeschiedenisse", - "pageinfo-header-restrictions": "Ziedbeveiliging", + "pageinfo-header-restrictions": "Sydbeveiliging", "pageinfo-header-properties": "Ziedeigenschappen", "pageinfo-display-title": "Weeregeven ziednaam", "pageinfo-default-sort": "Standard sorteerwieze", - "pageinfo-length": "Ziedlengte (in bytes)", + "pageinfo-length": "Sydlängde (in bytes)", "pageinfo-article-id": "Zied-ID", - "pageinfo-language": "Taal veur de zied", + "pageinfo-language": "Språke vöär de syde", "pageinfo-content-model": "Ziedinhoudsmodel", - "pageinfo-robot-policy": "Indexering deur bots", + "pageinfo-robot-policy": "Indeksering döär bots", "pageinfo-robot-index": "Toe-estaon", "pageinfo-robot-noindex": "Niet toe-estaon", - "pageinfo-watchers": "Antal ziedvolgers", + "pageinfo-watchers": "Antal sydvolgers", "pageinfo-few-watchers": "Minder as {{PLURAL:$1|één volger|$1 volgers}}", - "pageinfo-redirects-name": "t Antal deurverwiezingen naor disse zied", + "pageinfo-redirects-name": "Antal döärverwysingen nå disse syde", "pageinfo-subpages-name": "Onderziejen van disse zied", "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|deurverwiezing|deurverwiezingen}}; $3 {{PLURAL:$3|niet-deurverwiezing|niet-deurverwiezingen}})", "pageinfo-firstuser": "Gebruker die de zied an-emaakt hef", @@ -2275,7 +2279,7 @@ "patrol-log-page": "Markeerlogboek", "patrol-log-header": "In dit logboek staon de versies die op nao-ekeken ezet bin.", "deletedrevision": "Vortedaone ouwe versie $1.", - "filedeleteerror-short": "Fout bie t vortdoon van bestaand: $1", + "filedeleteerror-short": "Faut by et vordsmyten van bestand: $1", "filedeleteerror-long": "Der waren fouten bie t vortdoon van t bestaand:\n\n$1", "filedelete-missing": "t Bestaand \"$1\" kan niet vortedaon wörden, umdat t niet besteet.", "filedelete-old-unregistered": "De an-egeven bestaandsversie \"$1\" steet niet in de databanke.", @@ -2493,6 +2497,7 @@ "tag-mw-removed-redirect": "Döärverwysing vordedån", "tag-mw-changed-redirect-target": "Döärverwysingsdool ewysigd", "tag-mw-blank": "Leadigmaked", + "tag-mw-undo": "Weaderümmedraid", "tags-title": "Etiket", "tags-intro": "Op disse zied staon de etiketten waormee de programmatuur elke bewarking kan markeren, en de betekenisse dervan.", "tags-tag": "Etiketnaam", @@ -2504,6 +2509,7 @@ "tags-active-no": "Nee", "tags-edit": "bewarking", "tags-hitcount": "$1 {{PLURAL:$1|wieziging|wiezigingen}}", + "tags-create-submit": "Upstellen", "comparepages": "Ziejen vergelieken", "compare-page1": "Zied 1", "compare-page2": "Zied 2", @@ -2531,7 +2537,8 @@ "htmlform-no": "Nee", "htmlform-yes": "Ja", "htmlform-chosen-placeholder": "Kies n opsie", - "logentry-delete-delete": "$1 hevt de syde $3 {{GENDER:$2|vorddån}}", + "logentry-delete-delete": "$1 hevt de syde $3 {{GENDER:$2|vordsmeaten}}", + "logentry-delete-delete_redir": "$1 hevt de döärverwysing $3 {{GENDER:$2|vordsmeaten}} döär et te oaverskryven", "logentry-delete-restore": "$1 {{GENDER:$2|hevt}} de syde $3 ($4) weaderümmesetted", "logentry-delete-event": "$1 hef de zichtbaorheid van {{PLURAL:$5|n logboekregel|$5 logboekregels}} van $3 {{GENDER:$2|ewiezigd}}: $4", "logentry-delete-revision": "$1 hef de zichtbaorheid van {{PLURAL:$5|een versie|$5 versies}} van de zied $3 {{GENDER:$2|ewiezigd}}: $4", @@ -2557,7 +2564,7 @@ "logentry-move-move_redir": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} nå $4 oaver een döärverwysing hinne", "logentry-move-move_redir-noredirect": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} nå $4 oaver een döärverwysing hinne sunder een döärverwysing achter te låten", "logentry-patrol-patrol": "$1 hef versie $4 van de zied $3 op {{GENDER:$2|nao-ekeken}} ezet", - "logentry-patrol-patrol-auto": "$1 hef versie $4 van de zied $3 automaties op {{GENDER:$2|nao-ekeken}} ezet", + "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|hevt}} versy $4 van de syde $3 automatisk up {{GENDER:$2|nåkeaken}} setted", "logentry-newusers-newusers": "Gebruker $1 is {{GENDER:$2|an-emaakt}}", "logentry-newusers-create": "Brukerskonto $1 is {{GENDER:$2|anmaked}}", "logentry-newusers-create2": "Gebruker $3 is {{GENDER:$2|an-emaakt}} an-emaakt deur $1", @@ -2579,7 +2586,7 @@ "feedback-error2": "Fout: de bewarking is mislokt", "feedback-error3": "Fout: gien reaksie van de API", "feedback-message": "Bericht:", - "feedback-subject": "Onderwarp:", + "feedback-subject": "Underwarp:", "feedback-submit": "Opslaon", "feedback-thanks": "Bedankt! Joew kommentaar is op de zied \"[$2 $1]\" ezet.", "searchsuggest-search": "{{SITENAME}} döärsöken", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index c67bab321e..6594f9365f 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -1218,7 +1218,7 @@ "group-user": "gebruikers", "group-autoconfirmed": "autobevestigde gebruikers", "group-bot": "bots", - "group-sysop": "beheerders", + "group-sysop": "beheyrders", "group-interface-admin": "interfacemoderatoren", "group-bureaucrat": "bureaucraten", "group-suppress": "toezichthouders", diff --git a/languages/i18n/nqo.json b/languages/i18n/nqo.json index 41bccb322b..0642995b82 100644 --- a/languages/i18n/nqo.json +++ b/languages/i18n/nqo.json @@ -963,6 +963,7 @@ "group-autoconfirmed": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߬ ߞߍߒߖߘߍߦߋ߫ ߟߊߛߙߋߦߊߣߍ߲", "group-bot": "ߓߏߕ", "group-sysop": "ߞߎ߲߬ߠߊ߬ߛߌ߰ߟߊ", + "group-interface-admin": "ߢߐ߲߯ߕߍߞߣߍ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߠߎ߬", "group-bureaucrat": "ߛߓߍߘߟߊߡߐ߮", "group-suppress": "ߛߎ߬ߔߙߋߛߐ߬", "group-all": "(ߊ߬ ߓߍ߯)", @@ -970,6 +971,7 @@ "group-autoconfirmed-member": "{{GENDER:$1|ߞߍߒߖߘߍߦߋ߫ ߟߊߛߙߋߦߊߟߌ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}}", "group-bot-member": "{{GENDER:$1|ߓߏߕ}}", "group-sysop-member": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}}", + "group-interface-admin-member": "{{GENDER:$1|ߢߐ߲߯ߕߍߞߣߍ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}}", "group-bureaucrat-member": "{{GENDER:$1|ߛߓߍߘߟߊߡߐ߮}}", "group-suppress-member": "{{GENDER:$1|ߖߏ߰ߛߟߌ߬ ߣߐ}}", "grouppage-user": "{{ns:project}}: ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ", @@ -2456,8 +2458,6 @@ "confirm-mcrundo-title": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߐ߫ ߊ߬ ߡߊ߬", "mcrundofailed": "ߓߐߒߡߊߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫", "mcrundo-missingparam": "ߢߌ߬ߣߊ߬ ߓߘߊ߫ ߞߍ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߊߢߌ߬ߣߌ߲߬ߞߊ߬ߣߍ߲ ߞߐ߫ ߡߞߊ߬ߛߌ߬ߟߌ ߘߐ߫", - "parentheses-start": "⸜", - "parentheses-end": "⸝", "quotation-marks": "\"$1\"", "imgmultipageprev": "ߞߐߜߍ ߢߍߕߊ", "imgmultipagenext": "ߞߐߜߍ ߣߊ߬ߕߐ ←", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index d235fecb21..5d631a776c 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -440,6 +440,7 @@ "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.", "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się o $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.", "querypage-no-updates": "Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.", + "querypage-updates-periodical": "Aktualizacje tej strony wykonywane są cyklicznie.", "viewsource": "Tekst źródłowy", "viewsource-title": "Tekst źródłowy strony $1", "actionthrottled": "Akcja wstrzymana", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 55ab67baff..5e47a9959c 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -462,6 +462,7 @@ "perfcached": "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. No máximo {{PLURAL:$1|um resultado está disponível|$1 resultados estão disponíveis}} na ''cache''.", "perfcachedts": "Os seguintes dados encontram-se armazenados no ''cache'' e foram atualizados as $1. No máximo {{PLURAL:$4|um resultado está disponível|$4 resultados estão disponíveis}} no ''cache''.", "querypage-no-updates": "Momentaneamente as atualizações para esta página estão desativadas. Por enquanto, os dados aqui presentes não poderão ser atualizados.", + "querypage-updates-periodical": "As atualizações para esta página são executadas periodicamente.", "viewsource": "Ver código-fonte", "viewsource-title": "Exibir código-fonte para $1", "actionthrottled": "Ação controlada", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index 6b141f909e..4fa60a27ab 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -1641,7 +1641,7 @@ "recentchanges-label-unpatrolled": "Tooltip for {{msg-mw|unpatrolledletter}}", "recentchanges-label-plusminus": "Legend item for plus/minus.\n\nPreceded by legend example {{msg-mw|Recentchanges-legend-plusminus}}.", "recentchanges-legend-heading": "Used as a heading for legend box on [[Special:RecentChanges]] and [[Special:Watchlist]].\n{{Identical|Legend}}", - "recentchanges-legend-newpage": "{{doc-important|Do not translate Special:NewPages.}}\nUsed as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-newpage}}.", + "recentchanges-legend-newpage": "{{doc-important|Do not translate Special:NewPages.}} (But ''do'' translate \"list of new pages\".)\n\nUsed as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-newpage}}.", "recentchanges-legend-minor": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-minor}}.", "recentchanges-legend-bot": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-bot}}.", "recentchanges-legend-unpatrolled": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-unpatrolled}}.", @@ -3774,6 +3774,7 @@ "version-poweredby-credits": "Message shown on [[Special:Version]]. Parameters:\n* $1 - the current year\n* $2 - a list of selected MediaWiki authors", "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.\n{{Identical|Other}}", "version-poweredby-translators": "Used as label for a link to [[Translating:MediaWiki/Credits]].\n\nPreceded by {{msg-mw|version-poweredby-others}} and {{msg-mw|and}}.\n\nUsed at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]].", + "version-poweredby-various": "Shown on [[Special:Version]] as an author name if the extension or skin (etc.) credits contain only ... which is used to indicate various (unknown or unspecified) authors. See also {{msg-mw|version-poweredby-others}}, which is used when an extension or a skin contains code by various named and unnamed contributors.", "version-credits-summary": "Summary of the [[Special:Version/Credits]] sub page, which lists all developers etc. who contributed to MediaWiki. Shown at the top.", "version-license-info": "[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.", "version-software": "Message shown on [[Special:Version]].\nThis message is followed by the list of installed software (MediaWiki, PHP and MySQL).", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index d3475a505b..256a9f2af7 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -487,6 +487,7 @@ "perfcached": "Следующие данные были взяты из кэша и могут быть устаревшими. В кэше хранится не более $1 {{PLURAL:$1|записи|записей}}.", "perfcachedts": "Данные взяты из кэша; последний раз он обновлялся в $1. В кэше хранится не более {{PLURAL:$4|1=одной записи|$4 записи|$4 записей}}.", "querypage-no-updates": "Обновление этой страницы сейчас отключено.\nПредставленные здесь данные не будут обновляться.", + "querypage-updates-periodical": "Обновления для этой страницы выполняются периодически.", "viewsource": "Просмотр кода", "viewsource-title": "Просмотр кода страницы $1", "actionthrottled": "Ограничение по скорости", diff --git a/languages/i18n/sh.json b/languages/i18n/sh.json index 756ee8a72d..c065f9921e 100644 --- a/languages/i18n/sh.json +++ b/languages/i18n/sh.json @@ -359,6 +359,7 @@ "perfcached": "Sledeći podaci su keširani i mogu biti zastareli. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata|$1 rezultata}}.", "perfcachedts": "Sledeći podaci su keširani, a poslednji put su ažurirani $2 u $3. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata|$4 rezultata}}.", "querypage-no-updates": "Ažuriranje ove stranice je isključeno.\nPodaci koji se ovdje nalaze neće biti biti ažurirani.", + "querypage-updates-periodical": "Podnove na ovu stranicu se pokretaju povremeno.", "viewsource": "Izvor/Извор", "viewsource-title": "Prikaz izvora stranice $1", "actionthrottled": "Akcija je usporena", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index d9be5c25d0..8370f01f27 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -353,6 +353,7 @@ "perfcached": "Navedeni podatki so shranjeni v predpomnilniku in morda niso popolnoma posodobljeni. V predpomnilniku {{PLURAL:$1|je|sta|so|je}} na razpolago največ $1 {{PLURAL:$1|rezultat|rezultata|rezultate|rezultatov}}.", "perfcachedts": "Prikazani podatki so shranjeni v predpomnilniku in so bili zadnjič osveženi $1. V predpomnilniku {{PLURAL:$4|je|sta|so|je}} na razpolago največ $4 {{PLURAL:$4|rezultat|rezultata|rezultate|rezultatov}}.", "querypage-no-updates": "Posodobitve za to stran so trenutno onemogočene. Tukajšnji podatki se v kratkem ne bodo osvežili.", + "querypage-updates-periodical": "Posodobitve za to stran se poganjajo periodično.", "viewsource": "Izvorno besedilo", "viewsource-title": "Ogled vira $1", "actionthrottled": "Dejanje zaustavljeno", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index 9c65b81737..f28ce2dc63 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -466,7 +466,7 @@ "createaccountmail": "Користи привремену, насумичну лозинку и пошаљи је на наведену е-адресу", "createaccountmail-help": "Може се користити да се некоме отвори налог без сазнања лозинке.", "createacct-realname": "Право име (опционално)", - "createacct-reason": "Разлог", + "createacct-reason": "Разлог (јавно се бележи)", "createacct-reason-ph": "Зашто отварате још један налог", "createacct-reason-help": "Порука која се приказује у дневнику отварања налога", "createacct-submit": "Отвори налог", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index af8170c854..3dacfeeca1 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -503,7 +503,7 @@ "createaccountmail": "Använd ett tillfälligt slumpvis valt lösenord och skicka det till den angivna e-postadressen", "createaccountmail-help": "Kan användas för att skapa ett konto åt en annan person utan att kunna lösenordet.", "createacct-realname": "Riktigt namn (valfritt)", - "createacct-reason": "Orsak", + "createacct-reason": "Orsak (loggas offentligt)", "createacct-reason-ph": "Varför du skapar ett annat konto", "createacct-reason-help": "Meddelande som visas i loggen för skapade konton", "createacct-submit": "Skapa ditt konto", @@ -1870,6 +1870,7 @@ "listfiles-userdoesnotexist": "Användarkontot \"$1\" är inte registrerat.", "imgfile": "fil", "listfiles": "Fillista", + "listfiles_subpage": "Uppladdningar av $1", "listfiles_thumb": "Miniatyrbild", "listfiles_date": "Datum", "listfiles_name": "Namn", @@ -3891,5 +3892,8 @@ "mycustomjsredirectprotected": "Du har inte behörighet att redigera denna JavaScript-sida eftersom det är en omdirigering och leder inte någonstans inom din användarnamnrymd.", "easydeflate-invaliddeflate": "Innehåll som tillhandahålls är inte helt komprimerat", "unprotected-js": "Av säkerhetsskäl kan inte JavaScript läsas in från oskyddade sidor. Skapa endast JavaScript i namnrymden MediaWiki: eller som en användarundersida.", - "userlogout-continue": "Vill du logga ut?" + "userlogout-continue": "Vill du logga ut?", + "rest-prefix-mismatch": "Den begärda sökvägen ($1) fanns inte inuti rotsökvägen för REST API ($2)", + "rest-wrong-method": "Den begärda metoden ($1) var inte {{PLURAL:$3|den tillåtna metoden för denna sökväg|en av de tillåtna metoderna för denna sökväg}} ($2)", + "rest-no-match": "Den begärda relativa sökvägen ($1) matchade inte några kända hanterare" } diff --git a/languages/i18n/szl.json b/languages/i18n/szl.json index 14aba572af..d0f0c1d0ef 100644 --- a/languages/i18n/szl.json +++ b/languages/i18n/szl.json @@ -25,8 +25,8 @@ "Vlad5250" ] }, - "tog-underline": "Podsztrychniyniy linkōw:", - "tog-hideminor": "Schŏw drobne pōmiany we niydŏwno pōmiynianych", + "tog-underline": "Podkryślynie linkōw:", + "tog-hideminor": "Skryj małe edycyje we ôstatnich zmianach", "tog-hidepatrolled": "Schŏw przichwŏlōne pōmiany we niydŏwno pōmiynianych", "tog-newpageshidepatrolled": "Schŏw przichwŏlōne zajty na wykŏzie nowych zajtōw", "tog-extendwatchlist": "We ôbserwowanych pokazuj wszyjske zmiany, a niy ino ôstatnie", @@ -183,7 +183,7 @@ "create-local": "Wkludź lokalny ôpis", "delete": "Skasuj", "undelete_short": "Wćep nazod {{PLURAL:$1|jedna wersyjo|$1 wersyje|$1 wersyji}}", - "viewdeleted_short": "{{PLURAL:$1|jedna wyćepano wersyjo|$1 wyćepane wersyje|$1 wyćepanych wersyjůw}}", + "viewdeleted_short": "{{PLURAL:$1|jednã skasowanõ wersyjõ|$1 skasowane wersyje|$1 skasowanych wersyji}}", "protect": "Zawrzij", "protect_change": "půmjyń", "unprotect": "Uodymkńij", @@ -258,7 +258,7 @@ "collapsible-expand": "Pokŏż", "thisisdeleted": "Pokŏzać abo stworzić zaś $1?", "viewdeleted": "Uobejrzij $1", - "restorelink": "{{PLURAL:$1|jedna wyćepano wersyjo|$1 wyćepane wersyje|$1 wyćepanych wersyjůw}}", + "restorelink": "{{PLURAL:$1|jednã skasowanõ wersyjõ|$1 skasowane wersyje|$1 skasowanych wersyji}}", "feedlinks": "Kanały:", "feed-invalid": "Ńywłaściwy typ kanałů informacyjnygo.", "feed-unavailable": "Kanoły informacyjne ńy sům dostympne", @@ -326,7 +326,7 @@ "viewsourcetext": "Możesz ôglōndać i kopiować zdrzōdło tyj strōny.", "viewyourtext": "We tekst zdrzůduowy tyj zajty możno dali filować, idźe go tyż kopjować.", "protectedinterface": "Na tyj zajće znojduje śe tekst interfejsu uoprogramowańo, bestůż uůna je zawarto uod sprowjańo. Coby doćepnůńć abo sprowjić tůmaczyńa wszyskich serwerůw, użyj [https://translatewiki.net/ translatewiki.net], průjyktu lokalizacyji MediaWiki.", - "editinginterface": "''''Dej pozůr:''' Sprowjosz zajta, na keryj je tekst interfejsu uoprogramowańo. Pomjyńyńa na tyj zajće zmjyńům wyglůnd interfejsu lo inkszych użytkowńikůw. Coby doćepnůńć abo sprowjić tůmaczyńa, użyj [https://translatewiki.net/wiki/Main_Page?setlang=szl translatewiki.net].", + "editinginterface": "Pozōr: Edytujesz strōnã, co je używanŏ do definiowaniŏ interfejsu ôprogramowaniŏ. Zmiany na tyj strōnie bydōm mieć wpływ na wyglōnd interfesu używŏcza u wszyjskich inkszych używŏczōw na tyj wiki.", "cascadeprotected": "Ta zajta je chrōniōnŏ ôd edycyje, skuli tego co je ôna wkludzōnŏ do {{PLURAL:$1|nastympujōncyj zajty, kerŏ ôstała ôchrōniōnŏ|nastympujōncych zajtach, kere ôstały ôchrōniōne}} ze załōnczōnōm ôpcyjōm erbowaniŏ:\n$2", "namespaceprotected": "Ńy mosz uprowńyń, coby sprowjać zajty we raumje mjan '''$1'''.", "customcssprotected": "Ńy mosz uprawńyń do sprowjańo tyj zajty, bo na ńij sům uosobiste sztalowańo inkszego użytkowńika.", @@ -408,8 +408,8 @@ "nouserspecified": "Musisz podać miano ôd używŏcza.", "login-userblocked": "Tyn sprowjorz mo zawarte sprowjyńa. Ńy idźe śe zalogować.", "wrongpassword": "Wkludzōny login abo hasło sōm felerne.\nSprōbuj zaś.", - "wrongpasswordempty": "Hasło kere żeś podou je uostawjůne blank. Naszkryflej je jeszcze roz.", - "passwordtooshort": "Hasło kere żeś podoł je felerne abo za krůtke.\nHasło muśi mjeć przinojmńij {{PLURAL:$1|1 buchsztaba|$1 buchsztabůw}} a być inksze uod mjana użytkowńika.", + "wrongpasswordempty": "Wkludzōne hasło je prōzne.\nSprōbuj zaś.", + "passwordtooshort": "Hasło musi mieć aby {{PLURAL:$1|znak|znaki|znakōw}}.", "password-name-match": "Hasło mo być inksze atoli mjano używocza.", "password-login-forbidden": "Używanie tego miana ôd używŏcza i hasła było zakŏzane.", "mailmypassword": "Wyczyść hasło", @@ -426,7 +426,7 @@ "emailauthenticated": "Twůj ausdruk e-brifa zostoł powjerzitelńůny $2 uo $3.", "emailnotauthenticated": "Twůj adres e-brifa ńy je powjerzitelńůny. Půniższe funkcyje poczty ńy dźołajům.", "noemailprefs": "Muśisz podać adres e-brifa, coby te funkcyje dźołały.", - "emailconfirmlink": "Potwjyrdź swůj adres e-brifa", + "emailconfirmlink": "Potwiyrdź swoja adresa e-mail", "invalidemailaddress": "E-brif ńy bydźe zaakceptůwany skiż tygo co jigo format ńy spełńo formalnych wymagań. Prosza naszkryflać poprowny adres e-brifa abo wyczyśćić pole.", "cannotchangeemail": "Ńy możno pomjyńyc ausdruku e-mail.", "emaildisabled": "Ta zajta ńy je mogebna posyłać e-brify.", @@ -441,6 +441,7 @@ "createacct-another-realname-tip": "Wszkryflańy twojigo mjana a nazwiska ńy je końyczne.\nKej bydźesz chćoł je podoć, bydům użyte, coby dokůmyntowoć Twoje autorstwo.", "pt-login": "Wloguj sie", "pt-login-button": "Wloguj sie", + "pt-login-continue-button": "Kōntynuuj logowanie", "pt-createaccount": "Twōrz nowe kōnto", "pt-userlogout": "Ôdloguj sie", "php-mail-error-unknown": "Ńyznany feler we funkcyji mail()", @@ -451,7 +452,7 @@ "resetpass_header": "Zmiyń hasło kōnta", "oldpassword": "Stare hasło", "newpassword": "Nowe hasło", - "retypenew": "Naszkryflej jeszcze roz nowe hasło:", + "retypenew": "Wkludź hasło na nowo:", "resetpass_submit": "Nasztaluj hasło a zaloguj", "changepassword-success": "Twoje hasło zostoło půmyślńy půmjyńone!", "botpasswords": "Hasła bota", @@ -462,6 +463,7 @@ "resetpass-wrong-oldpass": "Felerne tymczasowe abo aktualne hasło.\nMożliwe co właśńy zmjyńiłżeś swoje hasło abo poprosiłżeś uo nowe tymczasowe hasło.", "resetpass-temp-password": "Tymczasowe hasło:", "resetpass-abort-generic": "Půmjyńańe hasła uostoła zatrzimane bez rozszyrzyńe.", + "resetpass-validity": "Twoje hasło je niynŏleżne: $1\n\nNasztaluj nowe hasło, żeby sie zalogować.", "passwordreset": "Wysnŏż hasło", "passwordreset-disabled": "No tyj wiki zamkńynto resytowańy hasył.", "passwordreset-username": "Miano ôd używŏcza:", @@ -657,7 +659,7 @@ "revdelete-concurrent-change": "Feler przi modyfikacyji elymyntu ze $2 $1: Wyglōndŏ na to, że jego status bōł zmiyniōny ôd kogoś w czasie Twojij roboty.\nWejzdrzij do regestu.", "revdelete-only-restricted": "Ńy do śe ukryć tajli $2, $1 przed administracyjom. Wybjer jydnom ze uopcyji.", "revdelete-reason-dropdown": "* Kůmyntorze lo wyćepańa\n** NPA\n** Prywatność", - "revdelete-otherreason": "Inkszy/dodatkowy powůd:", + "revdelete-otherreason": "Inkszy/ekstra powōd:", "revdelete-reasonotherlist": "Inkszy powůd", "revdelete-edit-reasonlist": "Sprowjańe powodůw wyćepańo zajty", "revdelete-offender": "Autor wersyji:", @@ -1121,9 +1123,9 @@ "filerevert-badversion": "Ńy ma sam popředńij lokalnyj wersyji tygo plika s podanům datům.", "filedelete": "Wyćepańe $1", "filedelete-legend": "Wyćep plik", - "filedelete-intro": "Wyćepuješ '''[[Media:$1|$1]]'''.", + "filedelete-intro": "Chcesz skasować zbiōr '''[[Media:$1|$1]]''' społym ze jego cołkōm historyjōm.", "filedelete-intro-old": "Wyćepuješ wersyja plika '''[[Media:$1|$1]]''' s datům [$4 $3, $2].", - "filedelete-comment": "Čymu:", + "filedelete-comment": "Powōd:", "filedelete-submit": "Wyćep", "filedelete-success": "Wyćepano plik '''$1'''.", "filedelete-success-old": "Wyćepano plik '''[[Media:$1|$1]]''' we wersyje ze $3, $2.", @@ -1339,8 +1341,8 @@ "enotif_body": "Drogi/o $WATCHINGUSERNAME,\n\nzajta $PAGETITLE we {{GRAMMAR:MS.lp|{{SITENAME}}}} zostoua $CHANGEDORCREATED $PAGEEDITDATE bez užytkowńika $PAGEEDITOR. Uobejřij na zajće $PAGETITLE_URL aktualno wersja.\n\n$NEWPAGE\n\nOpis pomjyńeńa: $PAGESUMMARY $PAGEMINOREDIT\n\nSkůntaktuj śe s autorym:\ne-brif: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nW připadku kolejnych půmjyńań nowe powjadůmjyńo ńy bydům wysuane, dopůki ńy uodwjydziš tyi zajty.\nMožeš tyž zresetować wšyjstke flagi powjadůmjyń na swojej liśće zajtůw, na kere dowoš pozůr.\n\n\tWjadůmość systymu powjadůmjyń {{GRAMMAR:D.lp|{{SITENAME}}}}\n\n--\nKejbyś chćou půmjyńić štalowańo swojej listy zajtůw, na kere dowoš pozůr, uodwjydź\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPomoc:\n$HELPPAGE", "created": "utwořono", "changed": "pomjyńono", - "deletepage": "Wyćep artikel", - "confirm": "Potwjyrdź", + "deletepage": "Skasuj artykuł", + "confirm": "Potwiyrdź", "excontent": "zawartość zajty „$1”", "excontentauthor": "treść: „$1” (jedyny aůtor: [[Special:Contributions/$2|$2]])", "exbeforeblank": "zawartość przed ôprōzniyniym: „$1”", @@ -1355,13 +1357,13 @@ "dellogpagetext": "To je lista uostatńo wykůnanych wyćepań.", "deletionlog": "regest skasowań", "reverted": "Prziwrōcōnŏ poprzedniõ wersyjõ", - "deletecomment": "Čymu:", + "deletecomment": "Powōd:", "deleteotherreason": "Inkšy powůd:", - "deletereasonotherlist": "Inkszy powůd", + "deletereasonotherlist": "Inkszy powōd", "deletereason-dropdown": "* Nojczynstsze prziczyny wyćepańa\n** Prośba autora\n** Naruszyńy praw autorskych\n** Wandalizm", "delete-edit-reasonlist": "Sprowjańe listy powodůw wyćepańo zajty", - "delete-toobig": "Ta zajta mo fest dugo historyja sprowjyń, wjyncyj jak $1 {{PLURAL:$1|půmjyńańy|půmjyńańo|půmjyńań}}.\nJeij wyćepańy mogło by spowodować zakłucyńo we dźołańu {{GRAMMAR:D.lp|{{SITENAME}}}} a bez tůż zostało uograńiczůne.", - "delete-warning-toobig": "Ta zajta mo fest dugo historia sprowjyń, wjyncy kej $1 {{PLURAL:$1|půmjyńeńe|půmjyńańo|půmjyńań}}.\nDej pozůr, bo jei wyćepańe może spowodować zakłůcyńo w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.", + "delete-toobig": "Te strōna mŏ dugõ historyjõ edycyji, bez $1 {{PLURAL:$1|wersyjõ|wersyje|wersyji}}.\nKasowanie takich strōn je ôgraniczōne, żeby ôchrōnić {{GRAMMAR:D.lp|{{SITENAME}}}} przed przipadkowym zeszterowaniym.", + "delete-warning-toobig": "Ta strōna mŏ dugõ historyjõ edycyji, bez $1 {{PLURAL:$1|wersyjŏ|wersyje|wersyji}}.\nSkasowanie jij może zeszterować ôperacyje bazy danych {{GRAMMAR:D.lp|{{SITENAME}}}}; postympuj pozornie.", "rollback": "Wycofej sprowjyńe", "rollbacklink": "cŏfej", "rollbacklinkcount": "cŏfnij $1 {{PLURAL:$1|edycyjõ|edycyje|edycyji}}", @@ -1380,10 +1382,10 @@ "movedarticleprotection": "przekludzůno sztalowańa zabezpjeczyńo s „[[$2]]” ku „[[$1]]”", "protect-title": "Zmiana poziōmu zawarciŏ „$1”", "prot_1movedto2": "[[$1]] přećepano do [[$2]]", - "protect-legend": "Potwjyrdź zawarće", - "protectcomment": "Čymu:", + "protect-legend": "Potwiyrdź zawarcie", + "protectcomment": "Powōd:", "protectexpiry": "Wygasŏ:", - "protect_expiry_invalid": "Čas wygaśńjyńćo je zuy.", + "protect_expiry_invalid": "Czas wygaśniyńciŏ je niynŏleżny.", "protect_expiry_old": "Čas wygaśńjyńćo je w downiej ńiž terozki.", "protect-text": "Sam możesz ôbejzdrzeć i zmiynić poziōmy zawarciŏ strōny $1.", "protect-locked-blocked": "Ńy možeš půmjyńać poźůmůw zawarćo kej žeś sům je zawarty uod sprowjyń. Terozki štalowańa dla zajty '''$1''' to:", @@ -1392,22 +1394,22 @@ "protect-cascadeon": "Ta zajta je zawarto od pomjyńań, po takjymu, co jei užywo {{PLURAL:$1|ta zajta, kero je zawarto|nastympůjůnce zajty, kere zostauy zawarte}} a opcyjo dźedźičyńo je zaůončono. Možeš pomjyńyć poziům zawarcia tyi zajty, ale dlo dźedźičyńo zawarcia to ńy mo wpuywu.", "protect-default": "Przizwolōne wszyjskim", "protect-fallback": "Wymago pozwolynjo \"$1\"", - "protect-level-autoconfirmed": "Blokuj nowe a ńyregistrowane używocze", - "protect-level-sysop": "Ino admini", - "protect-summary-cascade": "dźedźičyńy", + "protect-level-autoconfirmed": "Przizwōl ino autōmatycznie potwiyrdzōnym używŏczōm", + "protect-level-sysop": "Przizwōl ino administratorōm", + "protect-summary-cascade": "erbowanie", "protect-expiring": "wygaso $1 (UTC)", - "protect-expiry-indefinite": "na zowdy", + "protect-expiry-indefinite": "na dycki", "protect-cascade": "Zawrzij strōny, co sōm wrażōne do tyj strōny (erbowanie zawarciŏ)", "protect-cantedit": "Ńy možeš pomjyńyć poziůmu zawarća tyi zajty, po takiymu, co uona je dlo Ćebje zawarto uod pomjyńańa.", - "protect-othertime": "Inkszy uokres:", - "protect-othertime-op": "inkszy uokres", + "protect-othertime": "Inkszy czas:", + "protect-othertime-op": "inkszy czas", "protect-existing-expiry": "Czas wygaśńyńćo nasztalowany terozki: $2 uo $3", "protect-existing-expiry-infinity": "Czas wygaśniyńciŏ: niyskōńczōny", - "protect-otherreason": "Inkszy/dodatkowy powůd:", + "protect-otherreason": "Inkszy/ekstra powōd:", "protect-otherreason-op": "inkszy/dodatkowy powůd", "protect-dropdown": "*Nojczynstsze powody zawarćo uod sprowjyń\n** Czynste wandalizmy\n** Czynste spamowańy\n** Wojna edycyjno\n** Wygupy", "protect-edit-reasonlist": "Edytuj powody zawarciŏ", - "protect-expiry-options": "2 godźiny:2 hours,1 dźyń:1 day,3 dńi:3 days,1 tydźyń:1 week,2 tygodńy:2 weeks,1 mjeśůnc:1 month,3 mjeśůnce:3 months,6 mjeśency:6 months,1 rok:1 year,ńyskůńčůny:infińite", + "protect-expiry-options": "1 godzina:1 hour,1 dziyń:1 day,1 tydziyń:1 week,2 tydnie:2 weeks,1 miesiōnc:1 month,3 miesiōnce:3 months,6 miesiyncy:6 months,1 rok:1 year,do ôdwołaniŏ:infinite", "restriction-type": "Pozwolyńy:", "restriction-level": "Poziōm:", "minimum-size": "Minimalnŏ srogość", @@ -1424,7 +1426,7 @@ "undeletepage": "Pokož a odtwůř wyćepńjynte zajty", "undeletepagetitle": "'''Půńižej znojdujům śe wyćepane wersyje zajty [[:$1]]'''.", "viewdeletedpage": "Pokož wyćepńjynte zajty", - "undeletepagetext": "{{PLURAL:$1|Nastympujůnco zajta uosroła wyćepano, nale jeij|Nastympujůnce $1 zajty uostoły wyćepane, nale jejich}} kopja dalij znojdujy śe we archiwum. Aechiwum roz za kedy trza uoczyszczać.", + "undeletepagetext": "{{PLURAL:$1|Ta strōna była skasowanŏ, ale jeji kopijõ duch je|Te $1 strōny były skasowane, ale jejich kopije durch sōm|Te $1 strōn było skasowanych, ale jejich kopije durch sōm}} we archiwum i idzie {{PLURAL:$1|jã|je}} prziwrōcić. Archiwum trzeba czas ôd czasu ôprōzniać.", "undelete-fieldset-title": "Wćepywańy nazod wersyji", "undeleteextrahelp": "Jak chcesz wćepać nazod couko zajta, pozostaw wszyjstke pola ńyzaznaczůne a naćiś '''Uodtwůrz'''.\nAby wybrać tajlowe uodtworzyńy noleży zaznaczyć '''Uodtwůrz'''.\nNaćiśńyńće '''Wyczyść''' usůńy wszyjstke zaznaczyńo a wyczyśći pole kůmyntorza.", "undeleterevisions": "$1 {{PLURAL:$1|zarchiwizowano wersyja|zarchiwizowane wersyje|zarchiwizowanych wersyji}}", @@ -1445,7 +1447,7 @@ "undelete-search-box": "Šnupej za wyćepńjyntymi zajtami", "undelete-search-prefix": "Strōny, co sie zaczynajōm ôd:", "undelete-search-submit": "Šnupej", - "undelete-no-results": "Ńy znejdźono wskazanych zajtůw we archiwum wyćepanych.", + "undelete-no-results": "Żŏdne strōny we archiwum skasowanych niy ôdpowiadajōm zapytaniu.", "undelete-filename-mismatch": "Ńy idźe wćepać nazod wersyji plika z datům $1: ńyzgodność mjana plika", "undelete-bad-store-key": "Ńy idźe wćepać nazod wersyji plika z datům $1: před wyćepańem brakowouo plika.", "undelete-cleanup-error": "Wystůmpiu feler při wyćepywańu ńyužywanygo archiwalnygo plika „$1”.", @@ -1500,13 +1502,13 @@ "blockip": "Zawrzij sprowjorza", "blockiptext": "Tyn formularz służy do zawjerańo sprowjyń spod uokreślůnygo adresu IP abo kůnkretnymu użytkowńikowi.\nZawjerać noleży jydyńy po to, by zapobjec wandalizmům, zgodńy ze [[{{MediaWiki:Policy-url}}|przijyntymi reglůma]].\nPodej powůd (np. umjeszczajůnc mjana zajtůw, na kerych dopuszczůno śe wandalizmu).", "ipaddressorusername": "Adres IP abo mjano użytkowńika", - "ipbreason": "Čymu:", + "ipbreason": "Powōd:", "ipbreason-dropdown": "*Nojczynstsze powody zawjerańo uod sprawjyń\n** Ataki na inkszych użytkowńikůw\n** Naruszyńy praw autorskych\n** Ńydozwolůne mjano użytkowńika\n** Open proxy/Tor\n** Spamowańy\n** Ůsuwańy treśći zajtůw\n** Wprowadzańy fołszywych informacyji\n** Wulgaryzmy\n** Wypisywańy gůpot na zajtach", "ipbcreateaccount": "Ńy dozwůl utwožyć kůnta", "ipbemailban": "Zawrzij mogebność wysůłańo e-brifůw", "ipbenableautoblock": "Zawřij uostatńi adres IP tygo užytkowńika i autůmatyčńy wšyjstke kolejne, s kerych bydźe průbowou sprowjać zajty", "ipbsubmit": "Zablokuj tego używŏcza", - "ipbother": "Ikszy czas", + "ipbother": "Inkszy czas", "ipboptions": "2 godziny:2 hours,1 dziyń:1 day,3 dni:3 days,1 tydziyń:1 week,2 tydnie:2 weeks,1 miesiōnc:1 month,3 miesiōnce:3 months,6 miesiyncy:6 months,1 rok:1 year,na dycki:infinite", "ipbhidename": "Schrůń mjano użytkowńika/adres IP w rejerze zawarć, na liśće aktywnych zawarć i liśće użytkowńikůw", "ipbwatchuser": "Ôbserwuj włŏsnõ strōnã i strōnã dyskusyje ôd tego używŏcza", @@ -1583,7 +1585,7 @@ "lockfilenotwritable": "Ńy idźe naškreflać plika zawarća bazy danych.\nZawjerańy i uodmykańy bazy danych wymogo coby plik můgu być naškreflany bez web serwer.", "databasenotlocked": "Baza danych ńy je zawarto.", "move-page": "Przećep $1", - "move-page-legend": "Przećiś artikel", + "move-page-legend": "Przeniyś artykuł", "movepagetext": "Przi půmocy formularza půńiżej możesz půmjyńyć mjano zajty i przećepnůńć jej gyszichta. Pod downym mjanym uostańe śa zajta przekerowujůnca. Zajty adresowane na stare mjano uostanům jak bůły.\n\nJak śe na to decydujesz, sprowdź, eli ńy je to [[Special:DoubleRedirects|podwůjne]] abo [[Special:BrokenRedirects|złomane przekerowańy]].\nUodpowjadosz za to, coby linki wjodły ku prawym artiklům!\n\nZajta '''ńy''' bydźe przećepano, jak:\n*je pusto i ńy bůła sprowjano\n*je zajtům przekerowujůncą\n*zajta uo takym mjane już sam je\n\n'''DEJ POZŮR!'''\nTo może być drastyczno abo ńyprzewidywalno zmjano, jak przećepńysz jako popularno zajta. Bydź pewny, aże wjesz co robiysz, ńim klikńysz knefel \"przećep\"!", "movepagetalktext": "Uodpowiednio zajta godki, jeśli jest, bydzie přećepano automatyčńe, pod warůnkiem, že:\n*ńy přećepuješ zajty do inkšy přestřeńy mjan\n*ńy ma sam zajty godki o takiym mjańe\nW takiych razach tekst godki třa přećepać, a jak třeba to i pouůnčyć z tym co juž sam jest, rynčńe. Abo možeš sie namyślić i nie přećepywać wcale (\"checkbox\" půnižyi).", "movenologintext": "Muśyš być zarejerowanym i [[Special:UserLogin|zalůgowanym]] užytkowńikym coby můc přećepnůńć zajta.", @@ -1592,7 +1594,7 @@ "cant-move-to-user-page": "Ńy mosz uprowńyń coby przekludźić zajta na plac kaj je zajta użytkowńika (wyjůntkym sům podzajty użytkowńika).", "newtitle": "Nowy titel:", "move-watch": "Dej pozůr", - "movepagebtn": "Przećiś artikel", + "movepagebtn": "Przeniyś artykuł", "pagemovedsub": "Przećiśńyńće je fertig", "movepage-moved": "'''\"$1\" przećiśńjynto ku \"$2\"'''", "articleexists": "Artikel ze takym mjanym już je, abo mjano je złe.\nWybjer inksze mjano.", @@ -1621,7 +1623,7 @@ "imagetypemismatch": "Nowe rozšeřyńe mjana plika je inkšego typu kej jygo zawartość", "imageinvalidfilename": "Mjano plika docelowygo je felerne", "fix-double-redirects": "Poprow przekerowańa kere adresujům ku uoryginalnymu titlowi zajty", - "move-leave-redirect": "Uostow przekerowańy pode dotychczasowym titlem", + "move-leave-redirect": "Ôstŏw przekerowanie", "export": "Eksport strōn", "exporttext": "Možeš wyeksportować treść i historja sprowjyń jednyj zajty abo zestawu zajtůw we formaće XML.\nWyeksportowane informacyje možna půźńij zaimportować do inkšej wiki, dźouajůncyj na uoprůgramowańu MediaWiki, kořistajůnc ze [[Special:Import|zajty importu]].\n\nWyeksportowańy wjelu zajtůw wymogo wpisańo půńižej titli zajtůw, po jednym titlu we wjeršu a uokreślyńo čy mo zostać wyeksportowano bježůnco čy wšyjstke wersyje zajty s uopisůma sprawjyń abo tyž ino bježůnca wersyjo s uopisym uostatńygo sprawjyńo.\n\nMožeš tyž užyć linku, np.[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] do zajty „[[{{MediaWiki:Mainpage}}]]”.", "exportcuronly": "Ino bježůnco wersyjo, bes historji", @@ -1787,8 +1789,8 @@ "pageinfo-toolboxlink": "Informacyjŏ ô strōnie", "pageinfo-contentpage": "Rachowanŏ za strōna zawartości", "pageinfo-contentpage-yes": "Ja", - "markaspatrolleddiff": "uoznoč sprawjyńy kej „sprawdzůne”", - "markaspatrolledtext": "Uoznoč tyn artikel kej „sprawdzůny”", + "markaspatrolleddiff": "ôznŏcz za sprawdzōne", + "markaspatrolledtext": "Ôznŏcz tã strōnã za sprawdzōnõ", "markedaspatrolled": "Sprawdzůne", "markedaspatrolledtext": "Ta wersyjo zostoua uoznačůna kej „sprawdzůno”.", "rcpatroldisabled": "Wůuůnčůno fůnkcjůnalność patrolowańo we půmjyńanych na uostatku", @@ -1882,7 +1884,7 @@ "watchlistedit-normal-title": "Sprowjej lista zajtůw na kere dowom pozůr", "watchlistedit-normal-legend": "Wyćep zajty s listy artikli na kere dowoš pozůr", "watchlistedit-normal-explain": "Půńiżyj mosz lista artikli na kere dowosz pozůr.\nCoby wyćepać z ńij jako zajta, zaznocz pole przi ńij i naćiś knefel „{{int:Watchlistedit-normal-submit}}”.\nMożesz tyż skorzistać ze [[Special:EditWatchlist/raw|tekstowygo sprowjorza listy artikli na kere dowosz pozůr]].", - "watchlistedit-normal-submit": "Wyćep s listy", + "watchlistedit-normal-submit": "Skasuj tytuły", "watchlistedit-normal-done": "{{PLURAL:$1|Była skasowanŏ jedna strōna|Były skasowane $1 strōny|Było skasowanych $1 strōn}} ze twojij listy ôbserwowanych:", "watchlistedit-raw-title": "Tekstowy edytor listy artikli na kere dowosz pozůr", "watchlistedit-raw-legend": "Tekstowy edytor listy artikli na kere dowoš pozůr", @@ -1901,7 +1903,7 @@ "version": "Wersjo", "version-extensions": "Zainstalowane rozšeřyńa", "version-specialpages": "Szpecjalne zajty", - "version-parserhooks": "Haki analizatora składńi (yng. parser hooks)", + "version-parserhooks": "Hŏki syntaktycznego analizatora", "version-variables": "Zmjynne", "version-other": "Inksze", "version-mediahandlers": "Wtyčki uobsůgi medjůw", diff --git a/languages/i18n/tcy.json b/languages/i18n/tcy.json index ced033dfc7..b4e4623e6a 100644 --- a/languages/i18n/tcy.json +++ b/languages/i18n/tcy.json @@ -160,7 +160,7 @@ "faq": "ಸಾಮಾನ್ಯವಾದ್ ಕೇನುನ ಪ್ರಶ್ನೆಲು", "actions": "ಕ್ರಿಯೆಲು", "namespaces": "ಪುದರ್-ಜಾಗೆಲು", - "variants": "ವಿವಿಧ ರೂಪೊಲು", + "variants": "ಬೇತೆ ಬೇತೆ ರೂಪೊಲು", "navigation-heading": "ಸಂಚಾರೊದ ಮೆನು", "errorpagetitle": "ದೋಷ", "returnto": "$1ಗ್ ಪಿರಪೋಲೆ.", @@ -238,7 +238,7 @@ "mainpage-description": "ಮುಖ್ಯ ಪುಟ", "policy-url": "Project:ಕಾರ್ಯನೀತಿ", "portal": "ಸಮುದಾಯೊ ಪುಟೊ", - "portal-url": "Project:ಸಮುದಾಯ ಪುಟೊ", + "portal-url": "Project:ಸಮುದಾಯೊ ಪುಟೊ", "privacy": "ಕಾಸಗಿ ಕಾರ್ಯೊನೀತಿ", "privacypage": "Project:ಕಾಸಗಿ ಕಾರ್ಯೊನೀತಿ", "badaccess": "ಅನುಮತಿ ದೋಷ", @@ -290,7 +290,7 @@ "nstab-project": "ಯೋಜನೆ ಪುಟೊ", "nstab-image": "ಫೈಲ್", "nstab-mediawiki": "ಸಂದೇಶ", - "nstab-template": "ಟೆಂಪ್ಲೆಟ್", + "nstab-template": "ಟೆಂಪ್ಲೇಟ್", "nstab-help": "ಸಹಾಯ ಪುಟ", "nstab-category": "ವರ್ಗೊ", "mainpage-nstab": "ಮುಖ್ಯ ಪುಟ", @@ -417,7 +417,7 @@ "notloggedin": "ಲಾಗಿನ್ ಆತ್‘ಜ್ಜರ್", "userlogin-noaccount": "ಈರೆನ ಖಾತೆ ಇಜ್ಜೇ?", "userlogin-joinproject": "{{SITENAME}}ಗ್ ಸೇರ್ಲೆ", - "createaccount": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ", + "createaccount": "ಪೊಸ ಕಾತೆ ಸುರು ಮಲ್ಪುಲೆ", "userlogin-resetpassword-link": "ಇರೆನೆ ಪ್ರವೇಸೊ ಪದೊನು ಮರತ್ತ್‌‌ದರೆ?", "userlogin-helplink2": "ಲಾಗಿನ್ ಆಯೆರೆ ಸಹಾಯೊ", "userlogin-loggedin": "ಈರ್ ಅದಗನೆ {{GENDER:$1|$1}}ಆದ್ ಉಳಪ್ರವೇಶ ಮಲ್ದರ್.ಬೇತೆ ಬಳಕೆದಾರೆ ಆದ್ ಉಳಪ್ರವೇಶೊಗು ತಿರ್ತುದ ಪ್ರಪತ್ರೊನು ಬಳಸುಲೆ.", @@ -1495,7 +1495,7 @@ "rc-old-title": "ಸುರುಟು \"$1\" ಪನ್ಪಿ ಪುದರ್‌ಡ್ ಉಂಡಾತ್ಂಡ್", "recentchangeslinked": "ಸಂಬಂದೊ ಉಪ್ಪುನಂಚಿನ ಬದಲಾವಣೆಲು", "recentchangeslinked-feed": "ಸಂಬಂಧ ಉಪ್ಪುನಂಚಿನ ಬದಲಾವಣೆಲು", - "recentchangeslinked-toolbox": "ಸಂಬಂದೊ ಉಪ್ಪುನಂಚಿನ ಬದಲಾವಣೆಲು", + "recentchangeslinked-toolbox": "ಸಮ್ಮಂದೊ ಇಪ್ಪುನಂಚಿನ ಬದಲಾವಣೆಲು", "recentchangeslinked-title": "\"$1\" ಪುಟೊಕು ಸಂಬಂದಿತಿನ ಬದಲಾವಣೆಲು", "recentchangeslinked-summary": "ಒಂಜಿ ನಿರ್ದಿಸ್ಟೊ ಪುಟೊರ್ದು ಸಂಪರ್ಕೊ ಉಪ್ಪುನ ಪುಟೊಕುಲೆಗ್ (ಅತ್ತಂಡ ನಿರ್ದಿಸ್ಟೊ ವರ್ಗೊಗು ಸೇರ್ದಿನ ಸದಸ್ಯೆರೆಗ್) ಇಂಚಿಪ ಮಲ್ತಿನಂಚಿನ ಬದಲಾವಣೆಲೆನ್ ತಿರ್ತ್ ಪಟ್ಟಿ ಮಲ್ತ್‌ದ್ಂಡ್.\n[[Special:Watchlist|ಇರೆನ ವೀಕ್ಷಣೆ ಪಟ್ಟಿಡ್]] ಉಪ್ಪುನ ಪುಟೊಕುಲು ''ದಪ್ಪ ಅಕ್ಷರೊಡು\" ಉಂಡು.", "recentchangeslinked-page": "ಪುಟೊತ ಪುದರ್:", @@ -1858,7 +1858,7 @@ "tooltip-invert": "ಆಯ್ತಿ ಪುದರ್-ಜಾಗೆದುಲಯಿದ (ಬೊಕ್ಕ ಆಯ್ತಿತ್ತ್ಂಡ, ಸಂಬಂಧ ಪಟ್ಟಿನ ಪುದರ್-ಜಾಗೆದಲಾ) ಪುಟೊಕುಲೆನ ಬದಲಾವಣೆನ್ ದೆಂಗಾಯೆರೆ ಈ ಪೆಟ್ಟಿಗೆನ್ ಆಯ್ಪುಲೆ", "namespace_association": "ಸಂಬಂದೊ ಪಟ್ಟಿನ ಪುದರ್-ಜಾಗೆ", "tooltip-namespace_association": "ಆಯ್ತಿ ಪುದರ್-ಜಾಗೆಗ್ ಸಂಬಂಧ ಪಟ್ಟಿನ ಪಾತೆರ ಅತ್ತಾಂಡ ವಿಸಯದ ಪುದರ್-ಜಾಗೆನ್ಲಾ ಒಟ್ಟುಗು ಸೇರಾಯೆರೆ ಈ ಪೆಟ್ಟಿಗೆನ್ ಆಯ್ಪುಲೆ", - "blanknamespace": "(ಮುಖ್ಯ)", + "blanknamespace": "(ಮುಕ್ಯೊ)", "contributions": "{{GENDER:$1|ಸದಸ್ಯೆರ್ನ}} ಕಾಣಿಕೆಲು", "contributions-title": "$1 ಗ್ ಸದಸ್ಯೆರ್ನ ಕಾಣಿಕೆ", "mycontris": "ಎನ್ನ ಕಾನಿಕೆಲು", @@ -1944,7 +1944,7 @@ "importlogpage": "ಆಮದು ದಾಕಲೆ", "tooltip-pt-userpage": "{{GENDER:|ಇರೆನ ಸದಸ್ಯ}} ಪುಟೊ", "tooltip-pt-mytalk": "{{GENDER:|ಎನ್ನ}} ಚರ್ಚೆತಾ ಪುಟೊ", - "tooltip-pt-preferences": "{{GENDER:|ಇರೆನ}} ಇಷ್ಟೊಲು", + "tooltip-pt-preferences": "{{GENDER:|ಇರೆನ}} ಆಯ್ಕೆಲು", "tooltip-pt-watchlist": "ಈರ್ ಬದಲಾವಣೆಗಾದ್ ನಿಗಾ ದೀತಿನಂಚಿನ ಪುಟೊಲೆನ ಪಟ್ಟಿ", "tooltip-pt-mycontris": "{{GENDER:|ಎನ್ನ}} ಕಾನಿಕೆಲೆನ ಪಟ್ಟಿ", "tooltip-pt-login": "ಈರ್ ಲಾಗಿನ್ ಆವೊಡುಂದು ಕೇನೊಂದುಲ್ಲೊ, ಆಂಡ ಉಂದು ದಾಲ ಕಡ್ಡಾಯ ಅತ್ತ್.", @@ -1970,7 +1970,7 @@ "tooltip-n-currentevents": "ಇತ್ತೆದ ಆಪುಪೋಪುನ ಬಗೆಟ್ ದುಂಬುದ ಮಾಹಿತಿ ದೆತೊನ್ಲೆ", "tooltip-n-recentchanges": "ವಿಕಿಡ್ ದುಂಬುದ ಒಂತೆ ಸಮಯೊಡ್ ಆತಿನಂಚಿನ ಬದಲಾವಣೆಲೆನ ಪಟ್ಟಿ", "tooltip-n-randompage": "ಇಚ್ಚೆದ ಪುಟೊ ಒಂಜೆನ್ ತೋಜಾವು", - "tooltip-n-help": "ಇಂದೆತ ಬಗೆಟ್ ತೆರೆಯೊನುನ ಜಾಗೆ", + "tooltip-n-help": "ಇಂದೆತ ಬಗೆಟ್ ತೆರಿಯೊನುನ ಜಾಗೆ", "tooltip-t-whatlinkshere": "ಇಡೆಗ್ ಕೊಂಡಿ ಕೊರ್ಪುನಂಚಿನ ಪೂರ ವಿಕಿ ಪುಟೊಕುಲೆನ ಪಟ್ಟಿ", "tooltip-t-recentchangeslinked": "ಈ ಪುಟೊಡ್ದ್ ಸಂಪರ್ಕೊ ಉಪ್ಪುನಂಚಿನ ಪುಟೊಟು ಇಂಚಿಪೊದ ಬದಲಾವಣೆಲು", "tooltip-feed-rss": "ಈ ಪುಟೊಗು ಆರ್.ಎಸ್.ಎಸ್ ಫೀಡ್", @@ -2039,7 +2039,7 @@ "pageinfo-protect-cascading-yes": "ಅಂದ್", "pageinfo-category-pages": "ಪುಟೊಕುಲೆ ಸಂಕ್ಯೆ", "patrol-log-page": "ಪರೀಕ್ಷಣಾ ದಾಕಲೆ", - "previousdiff": "← ದುಂಬುದ ಸಂಪದನೆ", + "previousdiff": "← ದುಂಬುದ ಸಂಪಾದನೆ", "nextdiff": "ಬುಕ್ಕೊದ ಸಂಪದನೆ →", "thumbsize": "ಕಿರುನೋಟದ ಗಾತ್ರೊ:", "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ಪುಟೊ|ಪುಟೊಕುಲು}}", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index ec025df723..15b89816fe 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -151,6 +151,7 @@ "tog-useeditwarning": "Bir düzenleme sayfasından değişiklikleri kaydetmeden ayrılırken beni uyar", "tog-prefershttps": "Oturum açıkken her zaman güvenli bir bağlantı kullan", "tog-showrollbackconfirmation": "Geri alma bağlantısına tıkladığınızda bir onay istemi gösterin", + "tog-requireemail": "Şifre sıfırlamaları için e-posta iste", "underline-always": "Her zaman", "underline-never": "Hiçbir zaman", "underline-default": "Görünüm ya da tarayıcı varsayılanı", @@ -443,6 +444,7 @@ "perfcached": "Aşağıdaki veriler önbellekten alınmıştır ve güncel olmayabilir. Önbellekte en fazla {{PLURAL:$1|bir sonuç|$1 sonuç}} mevcut.", "perfcachedts": "Aşağıdaki veri önbelleklenmiştir, son güncelleme tarihi: $1. Önbellekte en fazla {{PLURAL:$1|bir sonuç|$4 sonuç}} mevcut.", "querypage-no-updates": "Şu an bu sayfa için güncellemeler devre dışı bırakıldı. Buradaki veri hemen yenilenmeyecektir.", + "querypage-updates-periodical": "Bu sayfa için güncellemeler periyodik olarak yürütülmektedir.", "viewsource": "Kaynağı gör", "viewsource-title": "$1 sayfasının kaynağını görüntüle", "actionthrottled": "Eylem kısılmıştır", @@ -528,7 +530,7 @@ "createaccountmail": "Geçici bir rastgele parola kullanabilir ve bu parolayı belirtilen e-posta adresine gönderebilirsiniz", "createaccountmail-help": "Parolayı öğrenmeden başka bir kişi için hesap oluşturmak amacıyla kullanılabilir.", "createacct-realname": "Gerçek adı (isteğe bağlı)", - "createacct-reason": "Gerekçe", + "createacct-reason": "Sebep (halk açık)", "createacct-reason-ph": "Neden başka bir hesap oluşturuyorsunuz", "createacct-reason-help": "Hesap oluşturma günlüğünde gösterilen mesaj", "createacct-submit": "Hesabınızı oluşturun", @@ -802,6 +804,7 @@ "sectioneditnotsupported-title": "Bölüm değiştirmesi desteklenmiyor", "sectioneditnotsupported-text": "Bölüm değiştirmesi bu sayfada desteklenmiyor.", "modeleditnotsupported-title": "Düzenleme desteklenmemektedir", + "modeleditnotsupported-text": "$1 içerik modeli için düzenleme desteklenmiyor.", "permissionserrors": "İzin hatası", "permissionserrorstext": "Aşağıdaki {{PLURAL:$1|sebep|sebepler}}den dolayı, bunu yapmaya yetkiniz yok:", "permissionserrorstext-withaction": "Aşağıdaki {{PLURAL:$1|neden|nedenler}}den dolayı $2 yetkiniz yok:", @@ -1177,6 +1180,7 @@ "prefs-help-email": "E-posta adresi isteğe bağlıdır; ancak parolanızı unutmanız durumunda parola sıfırlamak için gerekecektir.", "prefs-help-email-others": "Ayrıca kullanıcı sayfanızdaki bir bağlantı yoluyla diğer kullanıcıların size e-posta atmasına izin vermeyi seçebilirsiniz.\nDiğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz açıklanmaz.", "prefs-help-email-required": "E-posta adresi gerekmektedir.", + "prefs-help-requireemail": "İşaretliyse, yalnızca sıfırlama yapan kişi bu hesap için hem kullanıcı adı hem de e-posta sağladıysa, şifre sıfırlama e-postaları gönderir.", "prefs-info": "Temel bilgiler", "prefs-i18n": "Uluslararasılaştırma", "prefs-signature": "İmza", @@ -1895,6 +1899,7 @@ "listfiles-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.", "imgfile": "dosya", "listfiles": "Dosya listesi", + "listfiles_subpage": "$1 tarafından yüklendi", "listfiles_thumb": "Küçük resim", "listfiles_date": "Tarih", "listfiles_name": "Ad", diff --git a/languages/i18n/xal.json b/languages/i18n/xal.json index 8d9092cda0..7a188a9794 100644 --- a/languages/i18n/xal.json +++ b/languages/i18n/xal.json @@ -5,7 +5,8 @@ "ОйЛ", "לערי ריינהארט", "아라", - "Fitoschido" + "Fitoschido", + "Amire80" ] }, "tog-underline": "Заалһиг татасллһн:", diff --git a/languages/i18n/yue.json b/languages/i18n/yue.json index 6709950810..3e98c653e5 100644 --- a/languages/i18n/yue.json +++ b/languages/i18n/yue.json @@ -911,7 +911,7 @@ "diff-multi-manyusers": "(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)", "searchresults": "搵嘢結果", "search-filter-title-prefix": "只喺標題係「$1」開頭嘅版度搜索", - "search-filter-title-prefix-reset": "搵嘥所有版", + "search-filter-title-prefix-reset": "搵晒所有版", "searchresults-title": "對\"$1\"嘅搵嘢結果", "titlematches": "頁面標題符合", "textmatches": "頁面文字符合", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index 5d7538140b..fa877cf216 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -726,7 +726,7 @@ "showdiff": "显示更改", "blankarticle": "警告:您创建的页面是空白的。如果您再次点击“$1”,您将真的创建没有任何内容的页面。", "anoneditwarning": "警告:您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您[$1 登录]或[$2 创建]一个账户,您的编辑将归属于您的用户名,且将享受其他好处。", - "anonpreviewwarning": "您没有登录。保存将您的IP地址记录至此页面的编辑历史中。", + "anonpreviewwarning": "您没有登录。保存将您的IP地址记录至此页面的编辑历史中。", "missingsummary": "提示:您没有提供编辑摘要。如果您再次点击“$1”,您的编辑将不带摘要保存。", "selfredirect": "警告:您正在将此页面重定向至它自己。您可能指定了错误的重定向目标,或者您正在编辑错误的页面。如果您再次点击“$1”,重定向仍将被创建。", "missingcommenttext": "请输入一段评论。", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 49b362fbc3..db7a0fa968 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -441,6 +441,7 @@ "perfcached": "以下為快取資料,可能不是最新的。 快取資料最多可儲存 {{PLURAL:$1|1 筆結果|$1 筆結果}}。", "perfcachedts": "以下為快取資料,最後更新時間為 $1。快取資料最多可儲存 {{PLURAL:$4|1 筆結果|$4 筆結果}}。", "querypage-no-updates": "目前已停用此頁面的更新功能。\n在此頁面的資料不會被立即更新。", + "querypage-updates-periodical": "此頁面的更新為定期運作。", "viewsource": "檢視原始碼", "viewsource-title": "檢視 $1 的原始碼", "actionthrottled": "已限制動作", @@ -711,7 +712,7 @@ "showdiff": "顯示變更", "blankarticle": "警告:您正在建立的頁面是空白的。\n如果您再按一下\"$1\",將建立沒有任何內容的頁面。", "anoneditwarning": "警告:您尚未登入。 若您進行任何的編輯您的 IP 位置將會被公開。 若您 [$1 登入] 或 [$2 建立帳號],您的編輯將會以您的使用者名稱標示,擁有其他優點。", - "anonpreviewwarning": "您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。", + "anonpreviewwarning": "您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。", "missingsummary": "提醒:您未填寫編輯摘要。\n若您再點選 \"$1\" 一次,將略過摘要直接儲存您的編輯。", "selfredirect": "警告: 您正建立連結至自己的重新導向。\n您可能指定錯要重新導向的目標頁面或者編輯錯頁面。\n若您再點選 \"$1\" 一次,將會繼續建立重新導向。", "missingcommenttext": "請輸入一段評論。", @@ -779,8 +780,8 @@ "editingold": "警告:您目前正編輯頁面的舊修訂版本。若您儲存,在此修訂之後變更的任何內容將會遺失。", "unicode-support-fail": "看起來您的瀏覽器不支援Unicode。需要Unicode才能編輯頁面,所以您的編輯無法儲存。", "yourdiff": "差異", - "copyrightwarning": "請注意,所有於 {{SITENAME}} 所做的貢獻會依據 $2 授權條款發佈 (詳情請見 $1)。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。
\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源。\n請勿在未經授權的情況下發表文章!", - "copyrightwarning2": "請注意,所有於{{SITENAME}}所做的貢獻可能會被其他貢獻者編輯,修改或刪除。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。
\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源(詳情請見 $1)。\n請勿在未經授權的情況下發表文章!", + "copyrightwarning": "請注意,所有於{{SITENAME}}所做的貢獻會依據$2授權條款發佈(詳情請見$1)。若您不希望您的著作被任意修改與散佈,請勿在此發表文章。
\n您同時向我們保證在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源。請勿在未經授權的情況下發表文章!", + "copyrightwarning2": "請注意,所有於{{SITENAME}}所做的貢獻可能會被其他貢獻者編輯,修改或刪除。若您不希望您的著作被任意修改與散佈,請勿在此發表文章。
\n您同時向我們保證在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源(詳情請見 $1)。請勿在未經授權的情況下發表文章!", "editpage-cannot-use-custom-model": "此頁面的內容模型不能被修改。", "longpageerror": "錯誤:您所送出的文字內容共有 {{PLURAL:$1|1 KB|$1 KB}},已超出系統上限 {{PLURAL:$2|1 KB|$2 KB}}。\n\n無法儲存。", "readonlywarning": "警告:資料庫已被鎖定以進行維護,因此無法儲存您目前所做的編輯動作。\n您可先複製您的文字並貼上到文字檔案中儲存,稍後再儲存您編輯。\n\n鎖定資料庫的系統管理員有以下說明:$1", @@ -1085,7 +1086,7 @@ "datedefault": "預設值", "prefs-labs": "實驗中的功能", "prefs-user-pages": "使用者頁面", - "prefs-personal": "用戶資料", + "prefs-personal": "使用者基本資料", "prefs-rc": "近期變更", "prefs-watchlist": "監視清單", "prefs-editwatchlist": "編輯監視清單", diff --git a/maintenance/archives/patch-actor-table.sql b/maintenance/archives/patch-actor-table.sql index fdd95e8014..62c8ef7cf3 100644 --- a/maintenance/archives/patch-actor-table.sql +++ b/maintenance/archives/patch-actor-table.sql @@ -1,7 +1,7 @@ -- -- patch-actor-table.sql -- --- T167246. Add an `actor` table and various columns (and temporary tables) to reference it. +-- T167246. Add an `actor` table. CREATE TABLE /*_*/actor ( actor_id bigint unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, @@ -10,48 +10,3 @@ CREATE TABLE /*_*/actor ( ) /*$wgDBTableOptions*/; CREATE UNIQUE INDEX /*i*/actor_user ON /*_*/actor (actor_user); CREATE UNIQUE INDEX /*i*/actor_name ON /*_*/actor (actor_name); - -CREATE TABLE /*_*/revision_actor_temp ( - revactor_rev int unsigned NOT NULL, - revactor_actor bigint unsigned NOT NULL, - revactor_timestamp binary(14) NOT NULL default '', - revactor_page int unsigned NOT NULL, - PRIMARY KEY (revactor_rev, revactor_actor) -) /*$wgDBTableOptions*/; -CREATE UNIQUE INDEX /*i*/revactor_rev ON /*_*/revision_actor_temp (revactor_rev); -CREATE INDEX /*i*/actor_timestamp ON /*_*/revision_actor_temp (revactor_actor,revactor_timestamp); -CREATE INDEX /*i*/page_actor_timestamp ON /*_*/revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp); - -ALTER TABLE /*_*/archive - ALTER COLUMN ar_user_text SET DEFAULT '', - ADD COLUMN ar_actor bigint unsigned NOT NULL DEFAULT 0 AFTER ar_user_text; -CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp); - -ALTER TABLE /*_*/ipblocks - ADD COLUMN ipb_by_actor bigint unsigned NOT NULL DEFAULT 0 AFTER ipb_by_text; - -ALTER TABLE /*_*/image - ALTER COLUMN img_user_text SET DEFAULT '', - ADD COLUMN img_actor bigint unsigned NOT NULL DEFAULT 0 AFTER img_user_text; -CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor, img_timestamp); - -ALTER TABLE /*_*/oldimage - ALTER COLUMN oi_user_text SET DEFAULT '', - ADD COLUMN oi_actor bigint unsigned NOT NULL DEFAULT 0 AFTER oi_user_text; -CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp); - -ALTER TABLE /*_*/filearchive - ALTER COLUMN fa_user_text SET DEFAULT '', - ADD COLUMN fa_actor bigint unsigned NOT NULL DEFAULT 0 AFTER fa_user_text; -CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp); - -ALTER TABLE /*_*/recentchanges - ALTER COLUMN rc_user_text SET DEFAULT '', - ADD COLUMN rc_actor bigint unsigned NOT NULL DEFAULT 0 AFTER rc_user_text; -CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor); -CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp); - -ALTER TABLE /*_*/logging - ADD COLUMN log_actor bigint unsigned NOT NULL DEFAULT 0 AFTER log_user_text; -CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp); -CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp); diff --git a/maintenance/archives/patch-archive-ar_actor.sql b/maintenance/archives/patch-archive-ar_actor.sql new file mode 100644 index 0000000000..0e5837ff95 --- /dev/null +++ b/maintenance/archives/patch-archive-ar_actor.sql @@ -0,0 +1,4 @@ +ALTER TABLE /*_*/archive + ALTER COLUMN ar_user_text SET DEFAULT '', + ADD COLUMN ar_actor bigint unsigned NOT NULL DEFAULT 0 AFTER ar_user_text; +CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp); diff --git a/maintenance/archives/patch-filearchive-fa_actor.sql b/maintenance/archives/patch-filearchive-fa_actor.sql new file mode 100644 index 0000000000..c2e879bcc6 --- /dev/null +++ b/maintenance/archives/patch-filearchive-fa_actor.sql @@ -0,0 +1,4 @@ +ALTER TABLE /*_*/filearchive + ALTER COLUMN fa_user_text SET DEFAULT '', + ADD COLUMN fa_actor bigint unsigned NOT NULL DEFAULT 0 AFTER fa_user_text; +CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp); diff --git a/maintenance/archives/patch-image-img_actor.sql b/maintenance/archives/patch-image-img_actor.sql new file mode 100644 index 0000000000..7042a02f8b --- /dev/null +++ b/maintenance/archives/patch-image-img_actor.sql @@ -0,0 +1,4 @@ +ALTER TABLE /*_*/image + ALTER COLUMN img_user_text SET DEFAULT '', + ADD COLUMN img_actor bigint unsigned NOT NULL DEFAULT 0 AFTER img_user_text; +CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor, img_timestamp); diff --git a/maintenance/archives/patch-ipblocks-ipb_by_actor.sql b/maintenance/archives/patch-ipblocks-ipb_by_actor.sql new file mode 100644 index 0000000000..c2c0f8a4fd --- /dev/null +++ b/maintenance/archives/patch-ipblocks-ipb_by_actor.sql @@ -0,0 +1,2 @@ +ALTER TABLE /*_*/ipblocks + ADD COLUMN ipb_by_actor bigint unsigned NOT NULL DEFAULT 0 AFTER ipb_by_text; diff --git a/maintenance/archives/patch-logging-log_actor.sql b/maintenance/archives/patch-logging-log_actor.sql new file mode 100644 index 0000000000..d348698a82 --- /dev/null +++ b/maintenance/archives/patch-logging-log_actor.sql @@ -0,0 +1,4 @@ +ALTER TABLE /*_*/logging + ADD COLUMN log_actor bigint unsigned NOT NULL DEFAULT 0 AFTER log_user_text; +CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp); +CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp); diff --git a/maintenance/archives/patch-oldimage-oi_actor.sql b/maintenance/archives/patch-oldimage-oi_actor.sql new file mode 100644 index 0000000000..1fefb7b812 --- /dev/null +++ b/maintenance/archives/patch-oldimage-oi_actor.sql @@ -0,0 +1,4 @@ +ALTER TABLE /*_*/oldimage + ALTER COLUMN oi_user_text SET DEFAULT '', + ADD COLUMN oi_actor bigint unsigned NOT NULL DEFAULT 0 AFTER oi_user_text; +CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp); diff --git a/maintenance/archives/patch-recentchanges-rc_actor.sql b/maintenance/archives/patch-recentchanges-rc_actor.sql new file mode 100644 index 0000000000..70c7b7f8ac --- /dev/null +++ b/maintenance/archives/patch-recentchanges-rc_actor.sql @@ -0,0 +1,5 @@ +ALTER TABLE /*_*/recentchanges + ALTER COLUMN rc_user_text SET DEFAULT '', + ADD COLUMN rc_actor bigint unsigned NOT NULL DEFAULT 0 AFTER rc_user_text; +CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor); +CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp); diff --git a/maintenance/archives/patch-revision_actor_temp-table.sql b/maintenance/archives/patch-revision_actor_temp-table.sql new file mode 100644 index 0000000000..ff08d452b2 --- /dev/null +++ b/maintenance/archives/patch-revision_actor_temp-table.sql @@ -0,0 +1,10 @@ +CREATE TABLE /*_*/revision_actor_temp ( + revactor_rev int unsigned NOT NULL, + revactor_actor bigint unsigned NOT NULL, + revactor_timestamp binary(14) NOT NULL default '', + revactor_page int unsigned NOT NULL, + PRIMARY KEY (revactor_rev, revactor_actor) +) /*$wgDBTableOptions*/; +CREATE UNIQUE INDEX /*i*/revactor_rev ON /*_*/revision_actor_temp (revactor_rev); +CREATE INDEX /*i*/actor_timestamp ON /*_*/revision_actor_temp (revactor_actor,revactor_timestamp); +CREATE INDEX /*i*/page_actor_timestamp ON /*_*/revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp); diff --git a/maintenance/dev/includes/router.php b/maintenance/dev/includes/router.php index d767df0d8b..bb600bf92f 100644 --- a/maintenance/dev/includes/router.php +++ b/maintenance/dev/includes/router.php @@ -74,10 +74,22 @@ if ( $ext == 'php' ) { } else { header( "Content-Type: $mime" ); } - header( "Content-Length: " . filesize( $file ) ); - // Stream that out to the browser - $f = fopen( $file, 'rb' ); - fpassthru( $f ); + + $content = file_get_contents( $file ); + + header( 'Vary: Accept-Encoding' ); + $acceptGzip = preg_match( '/\bgzip\b/', $_SERVER['HTTP_ACCEPT_ENCODING'] ?? '' ); + if ( $acceptGzip && + // Don't compress binary static files (e.g. png) + preg_match( '/text|javascript|json|css|xml|svg/', $mime ) && + // Tiny files tend to grow instead of shrink. – + strlen( $content ) > 150 + ) { + $content = gzencode( $content, 9 ); + header( 'Content-Encoding: gzip' ); + } + header( "Content-Length: " . strlen( $content ) ); + echo $content; return true; } diff --git a/maintenance/postgres/archives/patch-actor-table.sql b/maintenance/postgres/archives/patch-actor-table.sql index 68e5d26b89..78f990fcc7 100644 --- a/maintenance/postgres/archives/patch-actor-table.sql +++ b/maintenance/postgres/archives/patch-actor-table.sql @@ -1,7 +1,7 @@ -- -- patch-actor-table.sql -- --- T167246. Add an `actor` table and various columns (and temporary tables) to reference it. +-- T167246. Add an `actor` table. CREATE SEQUENCE actor_actor_id_seq; CREATE TABLE actor ( @@ -11,14 +11,3 @@ CREATE TABLE actor ( ); CREATE UNIQUE INDEX actor_user ON actor (actor_user); CREATE UNIQUE INDEX actor_name ON actor (actor_name); - -CREATE TABLE revision_actor_temp ( - revactor_rev INTEGER NOT NULL, - revactor_actor INTEGER NOT NULL, - revactor_timestamp TIMESTAMPTZ NOT NULL, - revactor_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, - PRIMARY KEY (revactor_rev, revactor_actor) -); -CREATE UNIQUE INDEX revactor_rev ON revision_actor_temp (revactor_rev); -CREATE INDEX rev_actor_timestamp ON revision_actor_temp (revactor_actor,revactor_timestamp); -CREATE INDEX rev_page_actor_timestamp ON revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp); diff --git a/maintenance/postgres/archives/patch-revision_actor_temp-table.sql b/maintenance/postgres/archives/patch-revision_actor_temp-table.sql new file mode 100644 index 0000000000..34cd71ccf1 --- /dev/null +++ b/maintenance/postgres/archives/patch-revision_actor_temp-table.sql @@ -0,0 +1,10 @@ +CREATE TABLE revision_actor_temp ( + revactor_rev INTEGER NOT NULL, + revactor_actor INTEGER NOT NULL, + revactor_timestamp TIMESTAMPTZ NOT NULL, + revactor_page INTEGER NULL REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + PRIMARY KEY (revactor_rev, revactor_actor) +); +CREATE UNIQUE INDEX revactor_rev ON revision_actor_temp (revactor_rev); +CREATE INDEX rev_actor_timestamp ON revision_actor_temp (revactor_actor,revactor_timestamp); +CREATE INDEX rev_page_actor_timestamp ON revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp); diff --git a/maintenance/sqlite/archives/patch-actor-table.sql b/maintenance/sqlite/archives/patch-actor-table.sql deleted file mode 100644 index 8350cfab33..0000000000 --- a/maintenance/sqlite/archives/patch-actor-table.sql +++ /dev/null @@ -1,314 +0,0 @@ --- --- patch-actor-table.sql --- --- T167246. Add an `actor` table and various columns (and temporary tables) to reference it. --- Sigh, sqlite, such trouble just to change the default value of a column. - -CREATE TABLE /*_*/actor ( - actor_id bigint unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - actor_user int unsigned, - actor_name varchar(255) binary NOT NULL -) /*$wgDBTableOptions*/; -CREATE UNIQUE INDEX /*i*/actor_user ON /*_*/actor (actor_user); -CREATE UNIQUE INDEX /*i*/actor_name ON /*_*/actor (actor_name); - -CREATE TABLE /*_*/revision_actor_temp ( - revactor_rev int unsigned NOT NULL, - revactor_actor bigint unsigned NOT NULL, - revactor_timestamp binary(14) NOT NULL default '', - revactor_page int unsigned NOT NULL, - PRIMARY KEY (revactor_rev, revactor_actor) -) /*$wgDBTableOptions*/; -CREATE UNIQUE INDEX /*i*/revactor_rev ON /*_*/revision_actor_temp (revactor_rev); -CREATE INDEX /*i*/actor_timestamp ON /*_*/revision_actor_temp (revactor_actor,revactor_timestamp); -CREATE INDEX /*i*/page_actor_timestamp ON /*_*/revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp); - -BEGIN; - -DROP TABLE IF EXISTS /*_*/archive_tmp; -CREATE TABLE /*_*/archive_tmp ( - ar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - ar_namespace int NOT NULL default 0, - ar_title varchar(255) binary NOT NULL default '', - ar_comment varbinary(767) NOT NULL default '', - ar_comment_id bigint unsigned NOT NULL DEFAULT 0, - ar_user int unsigned NOT NULL default 0, - ar_user_text varchar(255) binary NOT NULL DEFAULT '', - ar_actor bigint unsigned NOT NULL DEFAULT 0, - ar_timestamp binary(14) NOT NULL default '', - ar_minor_edit tinyint NOT NULL default 0, - ar_rev_id int unsigned, - ar_text_id int unsigned NOT NULL default 0, - ar_deleted tinyint unsigned NOT NULL default 0, - ar_len int unsigned, - ar_page_id int unsigned, - ar_parent_id int unsigned default NULL, - ar_sha1 varbinary(32) NOT NULL default '', - ar_content_model varbinary(32) DEFAULT NULL, - ar_content_format varbinary(64) DEFAULT NULL -) /*$wgDBTableOptions*/; - -INSERT OR IGNORE INTO /*_*/archive_tmp ( - ar_id, ar_namespace, ar_title, ar_comment, ar_user, ar_user_text, - ar_timestamp, ar_minor_edit, ar_rev_id, ar_text_id, ar_deleted, ar_len, - ar_page_id, ar_parent_id, ar_sha1, ar_content_model, ar_content_format) - SELECT - ar_id, ar_namespace, ar_title, ar_comment, ar_user, ar_user_text, - ar_timestamp, ar_minor_edit, ar_rev_id, ar_text_id, ar_deleted, ar_len, - ar_page_id, ar_parent_id, ar_sha1, ar_content_model, ar_content_format - FROM /*_*/archive; - -DROP TABLE /*_*/archive; -ALTER TABLE /*_*/archive_tmp RENAME TO /*_*/archive; -CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp); -CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp); -CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id); -CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp); - -COMMIT; - -BEGIN; - -DROP TABLE IF EXISTS ipblocks_tmp; -CREATE TABLE /*_*/ipblocks_tmp ( - ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, - ipb_address tinyblob NOT NULL, - ipb_user int unsigned NOT NULL default 0, - ipb_by int unsigned NOT NULL default 0, - ipb_by_text varchar(255) binary NOT NULL default '', - ipb_by_actor bigint unsigned NOT NULL DEFAULT 0, - ipb_reason varbinary(767) NOT NULL default '', - ipb_reason_id bigint unsigned NOT NULL DEFAULT 0, - ipb_timestamp binary(14) NOT NULL default '', - ipb_auto bool NOT NULL default 0, - ipb_anon_only bool NOT NULL default 0, - ipb_create_account bool NOT NULL default 1, - ipb_enable_autoblock bool NOT NULL default '1', - ipb_expiry varbinary(14) NOT NULL default '', - ipb_range_start tinyblob NOT NULL, - ipb_range_end tinyblob NOT NULL, - ipb_deleted bool NOT NULL default 0, - ipb_block_email bool NOT NULL default 0, - ipb_allow_usertalk bool NOT NULL default 0, - ipb_parent_block_id int default NULL -) /*$wgDBTableOptions*/; - -INSERT OR IGNORE INTO /*_*/ipblocks_tmp ( - ipb_id, ipb_address, ipb_user, ipb_by, ipb_by_text, ipb_reason, - ipb_timestamp, ipb_auto, ipb_anon_only, ipb_create_account, - ipb_enable_autoblock, ipb_expiry, ipb_range_start, ipb_range_end, - ipb_deleted, ipb_block_email, ipb_allow_usertalk, ipb_parent_block_id) - SELECT - ipb_id, ipb_address, ipb_user, ipb_by, ipb_by_text, ipb_reason, - ipb_timestamp, ipb_auto, ipb_anon_only, ipb_create_account, - ipb_enable_autoblock, ipb_expiry, ipb_range_start, ipb_range_end, - ipb_deleted, ipb_block_email, ipb_allow_usertalk, ipb_parent_block_id - FROM /*_*/ipblocks; - -DROP TABLE /*_*/ipblocks; -ALTER TABLE /*_*/ipblocks_tmp RENAME TO /*_*/ipblocks; -CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only); -CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user); -CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8)); -CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp); -CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry); -CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id); - -COMMIT; - -BEGIN; - -DROP TABLE IF EXISTS /*_*/image_tmp; -CREATE TABLE /*_*/image_tmp ( - img_name varchar(255) binary NOT NULL default '' PRIMARY KEY, - img_size int unsigned NOT NULL default 0, - img_width int NOT NULL default 0, - img_height int NOT NULL default 0, - img_metadata mediumblob NOT NULL, - img_bits int NOT NULL default 0, - img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL, - img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown", - img_minor_mime varbinary(100) NOT NULL default "unknown", - img_description varbinary(767) NOT NULL default '', - img_description_id bigint unsigned NOT NULL DEFAULT 0, - img_user int unsigned NOT NULL default 0, - img_user_text varchar(255) binary NOT NULL DEFAULT '', - img_actor bigint unsigned NOT NULL DEFAULT 0, - img_timestamp varbinary(14) NOT NULL default '', - img_sha1 varbinary(32) NOT NULL default '' -) /*$wgDBTableOptions*/; - -INSERT OR IGNORE INTO /*_*/image_tmp ( - img_name, img_size, img_width, img_height, img_metadata, img_bits, - img_media_type, img_major_mime, img_minor_mime, img_description, - img_description_id, img_user, img_user_text, img_timestamp, img_sha1) - SELECT - img_name, img_size, img_width, img_height, img_metadata, img_bits, - img_media_type, img_major_mime, img_minor_mime, img_description, - img_description_id, img_user, img_user_text, img_timestamp, img_sha1 - FROM /*_*/image; - -DROP TABLE /*_*/image; -ALTER TABLE /*_*/image_tmp RENAME TO /*_*/image; -CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp); -CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp); -CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor,img_timestamp); -CREATE INDEX /*i*/img_size ON /*_*/image (img_size); -CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp); -CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10)); -CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime); - -COMMIT; - -BEGIN; - -DROP TABLE IF EXISTS /*_*/oldimage_tmp; -CREATE TABLE /*_*/oldimage_tmp ( - oi_name varchar(255) binary NOT NULL default '', - oi_archive_name varchar(255) binary NOT NULL default '', - oi_size int unsigned NOT NULL default 0, - oi_width int NOT NULL default 0, - oi_height int NOT NULL default 0, - oi_bits int NOT NULL default 0, - oi_description varbinary(767) NOT NULL default '', - oi_description_id bigint unsigned NOT NULL DEFAULT 0, - oi_user int unsigned NOT NULL default 0, - oi_user_text varchar(255) binary NOT NULL DEFAULT '', - oi_actor bigint unsigned NOT NULL DEFAULT 0, - oi_timestamp binary(14) NOT NULL default '', - oi_metadata mediumblob NOT NULL, - oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL, - oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown", - oi_minor_mime varbinary(100) NOT NULL default "unknown", - oi_deleted tinyint unsigned NOT NULL default 0, - oi_sha1 varbinary(32) NOT NULL default '' -) /*$wgDBTableOptions*/; - -INSERT OR IGNORE INTO /*_*/oldimage_tmp ( - oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits, - oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata, - oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1) - SELECT - oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits, - oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata, - oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1 - FROM /*_*/oldimage; - -DROP TABLE /*_*/oldimage; -ALTER TABLE /*_*/oldimage_tmp RENAME TO /*_*/oldimage; -CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp); -CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp); -CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14)); -CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10)); -CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp); - -COMMIT; - --- filearchive is done in patch-filearchive-fa_actor.sql - -BEGIN; - -DROP TABLE IF EXISTS /*_*/logging_tmp; -CREATE TABLE /*_*/logging_tmp ( - log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - log_type varbinary(32) NOT NULL default '', - log_action varbinary(32) NOT NULL default '', - log_timestamp binary(14) NOT NULL default '19700101000000', - log_user int unsigned NOT NULL default 0, - log_user_text varchar(255) binary NOT NULL default '', - log_actor bigint unsigned NOT NULL DEFAULT 0, - log_namespace int NOT NULL default 0, - log_title varchar(255) binary NOT NULL default '', - log_page int unsigned NULL, - log_comment varbinary(767) NOT NULL default '', - log_comment_id bigint unsigned NOT NULL DEFAULT 0, - log_params blob NOT NULL, - log_deleted tinyint unsigned NOT NULL default 0 -) /*$wgDBTableOptions*/; - -INSERT OR IGNORE INTO /*_*/logging_tmp ( - log_id, log_type, log_action, log_timestamp, log_user, log_user_text, - log_namespace, log_title, log_page, log_comment, log_comment_id, - log_params, log_deleted) - SELECT - log_id, log_type, log_action, log_timestamp, log_user, log_user_text, - log_namespace, log_title, log_page, log_comment, log_comment_id, - log_params, log_deleted - FROM /*_*/logging; - -DROP TABLE /*_*/logging; -ALTER TABLE /*_*/logging_tmp RENAME TO /*_*/logging; -CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp); -CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp); -CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp); -CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp); -CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp); -CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp); -CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp); -CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp); -CREATE INDEX /*i*/log_type_action ON /*_*/logging (log_type, log_action, log_timestamp); -CREATE INDEX /*i*/log_user_text_type_time ON /*_*/logging (log_user_text, log_type, log_timestamp); -CREATE INDEX /*i*/log_user_text_time ON /*_*/logging (log_user_text, log_timestamp); - -COMMIT; - -BEGIN; - -DROP TABLE IF EXISTS /*_*/recentchanges_tmp; -CREATE TABLE /*_*/recentchanges_tmp ( - rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, - rc_timestamp varbinary(14) NOT NULL default '', - rc_user int unsigned NOT NULL default 0, - rc_user_text varchar(255) binary NOT NULL DEFAULT '', - rc_actor bigint unsigned NOT NULL DEFAULT 0, - rc_namespace int NOT NULL default 0, - rc_title varchar(255) binary NOT NULL default '', - rc_comment varbinary(767) NOT NULL default '', - rc_comment_id bigint unsigned NOT NULL DEFAULT 0, - rc_minor tinyint unsigned NOT NULL default 0, - rc_bot tinyint unsigned NOT NULL default 0, - rc_new tinyint unsigned NOT NULL default 0, - rc_cur_id int unsigned NOT NULL default 0, - rc_this_oldid int unsigned NOT NULL default 0, - rc_last_oldid int unsigned NOT NULL default 0, - rc_type tinyint unsigned NOT NULL default 0, - rc_source varchar(16) binary not null default '', - rc_patrolled tinyint unsigned NOT NULL default 0, - rc_ip varbinary(40) NOT NULL default '', - rc_old_len int, - rc_new_len int, - rc_deleted tinyint unsigned NOT NULL default 0, - rc_logid int unsigned NOT NULL default 0, - rc_log_type varbinary(255) NULL default NULL, - rc_log_action varbinary(255) NULL default NULL, - rc_params blob NULL -) /*$wgDBTableOptions*/; - -INSERT OR IGNORE INTO /*_*/recentchanges_tmp ( - rc_id, rc_timestamp, rc_user, rc_user_text, rc_namespace, rc_title, - rc_comment, rc_comment_id, rc_minor, rc_bot, rc_new, rc_cur_id, - rc_this_oldid, rc_last_oldid, rc_type, rc_source, rc_patrolled, rc_ip, - rc_old_len, rc_new_len, rc_deleted, rc_logid, rc_log_type, rc_log_action, - rc_params) - SELECT - rc_id, rc_timestamp, rc_user, rc_user_text, rc_namespace, rc_title, - rc_comment, rc_comment_id, rc_minor, rc_bot, rc_new, rc_cur_id, - rc_this_oldid, rc_last_oldid, rc_type, rc_source, rc_patrolled, rc_ip, - rc_old_len, rc_new_len, rc_deleted, rc_logid, rc_log_type, rc_log_action, - rc_params - FROM /*_*/recentchanges; - -DROP TABLE /*_*/recentchanges; -ALTER TABLE /*_*/recentchanges_tmp RENAME TO /*_*/recentchanges; -CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp); -CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title); -CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id); -CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp); -CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip); -CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text); -CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor); -CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp); -CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp); -CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp); - -COMMIT; diff --git a/maintenance/sqlite/archives/patch-archive-ar_actor.sql b/maintenance/sqlite/archives/patch-archive-ar_actor.sql new file mode 100644 index 0000000000..936e48fd22 --- /dev/null +++ b/maintenance/sqlite/archives/patch-archive-ar_actor.sql @@ -0,0 +1,43 @@ +BEGIN; + +DROP TABLE IF EXISTS /*_*/archive_tmp; +CREATE TABLE /*_*/archive_tmp ( + ar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, + ar_namespace int NOT NULL default 0, + ar_title varchar(255) binary NOT NULL default '', + ar_comment varbinary(767) NOT NULL default '', + ar_comment_id bigint unsigned NOT NULL DEFAULT 0, + ar_user int unsigned NOT NULL default 0, + ar_user_text varchar(255) binary NOT NULL DEFAULT '', + ar_actor bigint unsigned NOT NULL DEFAULT 0, + ar_timestamp binary(14) NOT NULL default '', + ar_minor_edit tinyint NOT NULL default 0, + ar_rev_id int unsigned, + ar_text_id int unsigned NOT NULL default 0, + ar_deleted tinyint unsigned NOT NULL default 0, + ar_len int unsigned, + ar_page_id int unsigned, + ar_parent_id int unsigned default NULL, + ar_sha1 varbinary(32) NOT NULL default '', + ar_content_model varbinary(32) DEFAULT NULL, + ar_content_format varbinary(64) DEFAULT NULL +) /*$wgDBTableOptions*/; + +INSERT OR IGNORE INTO /*_*/archive_tmp ( + ar_id, ar_namespace, ar_title, ar_comment, ar_user, ar_user_text, + ar_timestamp, ar_minor_edit, ar_rev_id, ar_text_id, ar_deleted, ar_len, + ar_page_id, ar_parent_id, ar_sha1, ar_content_model, ar_content_format) + SELECT + ar_id, ar_namespace, ar_title, ar_comment, ar_user, ar_user_text, + ar_timestamp, ar_minor_edit, ar_rev_id, ar_text_id, ar_deleted, ar_len, + ar_page_id, ar_parent_id, ar_sha1, ar_content_model, ar_content_format + FROM /*_*/archive; + +DROP TABLE /*_*/archive; +ALTER TABLE /*_*/archive_tmp RENAME TO /*_*/archive; +CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp); +CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp); +CREATE INDEX /*i*/ar_revid ON /*_*/archive (ar_rev_id); +CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp); + +COMMIT; diff --git a/maintenance/sqlite/archives/patch-image-img_actor.sql b/maintenance/sqlite/archives/patch-image-img_actor.sql new file mode 100644 index 0000000000..a2506f648d --- /dev/null +++ b/maintenance/sqlite/archives/patch-image-img_actor.sql @@ -0,0 +1,43 @@ +BEGIN; + +DROP TABLE IF EXISTS /*_*/image_tmp; +CREATE TABLE /*_*/image_tmp ( + img_name varchar(255) binary NOT NULL default '' PRIMARY KEY, + img_size int unsigned NOT NULL default 0, + img_width int NOT NULL default 0, + img_height int NOT NULL default 0, + img_metadata mediumblob NOT NULL, + img_bits int NOT NULL default 0, + img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL, + img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown", + img_minor_mime varbinary(100) NOT NULL default "unknown", + img_description varbinary(767) NOT NULL default '', + img_description_id bigint unsigned NOT NULL DEFAULT 0, + img_user int unsigned NOT NULL default 0, + img_user_text varchar(255) binary NOT NULL DEFAULT '', + img_actor bigint unsigned NOT NULL DEFAULT 0, + img_timestamp varbinary(14) NOT NULL default '', + img_sha1 varbinary(32) NOT NULL default '' +) /*$wgDBTableOptions*/; + +INSERT OR IGNORE INTO /*_*/image_tmp ( + img_name, img_size, img_width, img_height, img_metadata, img_bits, + img_media_type, img_major_mime, img_minor_mime, img_description, + img_description_id, img_user, img_user_text, img_timestamp, img_sha1) + SELECT + img_name, img_size, img_width, img_height, img_metadata, img_bits, + img_media_type, img_major_mime, img_minor_mime, img_description, + img_description_id, img_user, img_user_text, img_timestamp, img_sha1 + FROM /*_*/image; + +DROP TABLE /*_*/image; +ALTER TABLE /*_*/image_tmp RENAME TO /*_*/image; +CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp); +CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp); +CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor,img_timestamp); +CREATE INDEX /*i*/img_size ON /*_*/image (img_size); +CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp); +CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10)); +CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime); + +COMMIT; diff --git a/maintenance/sqlite/archives/patch-ipblocks-ipb_by_actor.sql b/maintenance/sqlite/archives/patch-ipblocks-ipb_by_actor.sql new file mode 100644 index 0000000000..5bf7c11a6a --- /dev/null +++ b/maintenance/sqlite/archives/patch-ipblocks-ipb_by_actor.sql @@ -0,0 +1,48 @@ +BEGIN; + +DROP TABLE IF EXISTS ipblocks_tmp; +CREATE TABLE /*_*/ipblocks_tmp ( + ipb_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, + ipb_address tinyblob NOT NULL, + ipb_user int unsigned NOT NULL default 0, + ipb_by int unsigned NOT NULL default 0, + ipb_by_text varchar(255) binary NOT NULL default '', + ipb_by_actor bigint unsigned NOT NULL DEFAULT 0, + ipb_reason varbinary(767) NOT NULL default '', + ipb_reason_id bigint unsigned NOT NULL DEFAULT 0, + ipb_timestamp binary(14) NOT NULL default '', + ipb_auto bool NOT NULL default 0, + ipb_anon_only bool NOT NULL default 0, + ipb_create_account bool NOT NULL default 1, + ipb_enable_autoblock bool NOT NULL default '1', + ipb_expiry varbinary(14) NOT NULL default '', + ipb_range_start tinyblob NOT NULL, + ipb_range_end tinyblob NOT NULL, + ipb_deleted bool NOT NULL default 0, + ipb_block_email bool NOT NULL default 0, + ipb_allow_usertalk bool NOT NULL default 0, + ipb_parent_block_id int default NULL +) /*$wgDBTableOptions*/; + +INSERT OR IGNORE INTO /*_*/ipblocks_tmp ( + ipb_id, ipb_address, ipb_user, ipb_by, ipb_by_text, ipb_reason, + ipb_timestamp, ipb_auto, ipb_anon_only, ipb_create_account, + ipb_enable_autoblock, ipb_expiry, ipb_range_start, ipb_range_end, + ipb_deleted, ipb_block_email, ipb_allow_usertalk, ipb_parent_block_id) + SELECT + ipb_id, ipb_address, ipb_user, ipb_by, ipb_by_text, ipb_reason, + ipb_timestamp, ipb_auto, ipb_anon_only, ipb_create_account, + ipb_enable_autoblock, ipb_expiry, ipb_range_start, ipb_range_end, + ipb_deleted, ipb_block_email, ipb_allow_usertalk, ipb_parent_block_id + FROM /*_*/ipblocks; + +DROP TABLE /*_*/ipblocks; +ALTER TABLE /*_*/ipblocks_tmp RENAME TO /*_*/ipblocks; +CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only); +CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user); +CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start(8), ipb_range_end(8)); +CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp); +CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry); +CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id); + +COMMIT; diff --git a/maintenance/sqlite/archives/patch-logging-log_actor.sql b/maintenance/sqlite/archives/patch-logging-log_actor.sql new file mode 100644 index 0000000000..01f55529b1 --- /dev/null +++ b/maintenance/sqlite/archives/patch-logging-log_actor.sql @@ -0,0 +1,45 @@ +BEGIN; + +DROP TABLE IF EXISTS /*_*/logging_tmp; +CREATE TABLE /*_*/logging_tmp ( + log_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, + log_type varbinary(32) NOT NULL default '', + log_action varbinary(32) NOT NULL default '', + log_timestamp binary(14) NOT NULL default '19700101000000', + log_user int unsigned NOT NULL default 0, + log_user_text varchar(255) binary NOT NULL default '', + log_actor bigint unsigned NOT NULL DEFAULT 0, + log_namespace int NOT NULL default 0, + log_title varchar(255) binary NOT NULL default '', + log_page int unsigned NULL, + log_comment varbinary(767) NOT NULL default '', + log_comment_id bigint unsigned NOT NULL DEFAULT 0, + log_params blob NOT NULL, + log_deleted tinyint unsigned NOT NULL default 0 +) /*$wgDBTableOptions*/; + +INSERT OR IGNORE INTO /*_*/logging_tmp ( + log_id, log_type, log_action, log_timestamp, log_user, log_user_text, + log_namespace, log_title, log_page, log_comment, log_comment_id, + log_params, log_deleted) + SELECT + log_id, log_type, log_action, log_timestamp, log_user, log_user_text, + log_namespace, log_title, log_page, log_comment, log_comment_id, + log_params, log_deleted + FROM /*_*/logging; + +DROP TABLE /*_*/logging; +ALTER TABLE /*_*/logging_tmp RENAME TO /*_*/logging; +CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp); +CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp); +CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp); +CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp); +CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp); +CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp); +CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp); +CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp); +CREATE INDEX /*i*/log_type_action ON /*_*/logging (log_type, log_action, log_timestamp); +CREATE INDEX /*i*/log_user_text_type_time ON /*_*/logging (log_user_text, log_type, log_timestamp); +CREATE INDEX /*i*/log_user_text_time ON /*_*/logging (log_user_text, log_timestamp); + +COMMIT; diff --git a/maintenance/sqlite/archives/patch-oldimage-oi_actor.sql b/maintenance/sqlite/archives/patch-oldimage-oi_actor.sql new file mode 100644 index 0000000000..ab1b7db09f --- /dev/null +++ b/maintenance/sqlite/archives/patch-oldimage-oi_actor.sql @@ -0,0 +1,43 @@ +BEGIN; + +DROP TABLE IF EXISTS /*_*/oldimage_tmp; +CREATE TABLE /*_*/oldimage_tmp ( + oi_name varchar(255) binary NOT NULL default '', + oi_archive_name varchar(255) binary NOT NULL default '', + oi_size int unsigned NOT NULL default 0, + oi_width int NOT NULL default 0, + oi_height int NOT NULL default 0, + oi_bits int NOT NULL default 0, + oi_description varbinary(767) NOT NULL default '', + oi_description_id bigint unsigned NOT NULL DEFAULT 0, + oi_user int unsigned NOT NULL default 0, + oi_user_text varchar(255) binary NOT NULL DEFAULT '', + oi_actor bigint unsigned NOT NULL DEFAULT 0, + oi_timestamp binary(14) NOT NULL default '', + oi_metadata mediumblob NOT NULL, + oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL, + oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown", + oi_minor_mime varbinary(100) NOT NULL default "unknown", + oi_deleted tinyint unsigned NOT NULL default 0, + oi_sha1 varbinary(32) NOT NULL default '' +) /*$wgDBTableOptions*/; + +INSERT OR IGNORE INTO /*_*/oldimage_tmp ( + oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits, + oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata, + oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1) + SELECT + oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits, + oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata, + oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1 + FROM /*_*/oldimage; + +DROP TABLE /*_*/oldimage; +ALTER TABLE /*_*/oldimage_tmp RENAME TO /*_*/oldimage; +CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp); +CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp); +CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14)); +CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10)); +CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp); + +COMMIT; diff --git a/maintenance/sqlite/archives/patch-recentchanges-rc_actor.sql b/maintenance/sqlite/archives/patch-recentchanges-rc_actor.sql new file mode 100644 index 0000000000..079dac2e89 --- /dev/null +++ b/maintenance/sqlite/archives/patch-recentchanges-rc_actor.sql @@ -0,0 +1,61 @@ +BEGIN; + +DROP TABLE IF EXISTS /*_*/recentchanges_tmp; +CREATE TABLE /*_*/recentchanges_tmp ( + rc_id int NOT NULL PRIMARY KEY AUTO_INCREMENT, + rc_timestamp varbinary(14) NOT NULL default '', + rc_user int unsigned NOT NULL default 0, + rc_user_text varchar(255) binary NOT NULL DEFAULT '', + rc_actor bigint unsigned NOT NULL DEFAULT 0, + rc_namespace int NOT NULL default 0, + rc_title varchar(255) binary NOT NULL default '', + rc_comment varbinary(767) NOT NULL default '', + rc_comment_id bigint unsigned NOT NULL DEFAULT 0, + rc_minor tinyint unsigned NOT NULL default 0, + rc_bot tinyint unsigned NOT NULL default 0, + rc_new tinyint unsigned NOT NULL default 0, + rc_cur_id int unsigned NOT NULL default 0, + rc_this_oldid int unsigned NOT NULL default 0, + rc_last_oldid int unsigned NOT NULL default 0, + rc_type tinyint unsigned NOT NULL default 0, + rc_source varchar(16) binary not null default '', + rc_patrolled tinyint unsigned NOT NULL default 0, + rc_ip varbinary(40) NOT NULL default '', + rc_old_len int, + rc_new_len int, + rc_deleted tinyint unsigned NOT NULL default 0, + rc_logid int unsigned NOT NULL default 0, + rc_log_type varbinary(255) NULL default NULL, + rc_log_action varbinary(255) NULL default NULL, + rc_params blob NULL +) /*$wgDBTableOptions*/; + +INSERT OR IGNORE INTO /*_*/recentchanges_tmp ( + rc_id, rc_timestamp, rc_user, rc_user_text, rc_namespace, rc_title, + rc_comment, rc_comment_id, rc_minor, rc_bot, rc_new, rc_cur_id, + rc_this_oldid, rc_last_oldid, rc_type, rc_source, rc_patrolled, rc_ip, + rc_old_len, rc_new_len, rc_deleted, rc_logid, rc_log_type, rc_log_action, + rc_params) + SELECT + rc_id, rc_timestamp, rc_user, rc_user_text, rc_namespace, rc_title, + rc_comment, rc_comment_id, rc_minor, rc_bot, rc_new, rc_cur_id, + rc_this_oldid, rc_last_oldid, rc_type, rc_source, rc_patrolled, rc_ip, + rc_old_len, rc_new_len, rc_deleted, rc_logid, rc_log_type, rc_log_action, + rc_params + FROM /*_*/recentchanges; + +DROP TABLE /*_*/recentchanges; +ALTER TABLE /*_*/recentchanges_tmp RENAME TO /*_*/recentchanges; +CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp); +CREATE INDEX /*i*/rc_namespace_title ON /*_*/recentchanges (rc_namespace, rc_title); +CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id); +CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp); +CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip); +CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text); +CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor); +CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp); +CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp); +CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp); + +COMMIT; + diff --git a/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php b/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php index e4d6b54105..3eab26f435 100644 --- a/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php +++ b/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php @@ -8,6 +8,7 @@ use MediaWiki\MediaWikiServices; use MediaWiki\Revision\MutableRevisionRecord; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\SlotRecord; +use MediaWiki\Storage\BlobStore; use MediaWiki\Storage\SqlBlobStore; use Revision; use StatusValue; @@ -202,6 +203,101 @@ class McrRevisionStoreDbTest extends RevisionStoreDbTestBase { return [ 'slot_revision_id' => $revId ]; } + /** + * @covers \MediaWiki\Revision\RevisionStore::getContentBlobsForBatch + * @throws \MWException + */ + public function testGetContentBlobsForBatch_error() { + $page1 = $this->getTestPage(); + $text = __METHOD__ . 'b-ä'; + $editStatus = $this->editPage( $page1->getTitle()->getPrefixedDBkey(), $text . '1' ); + $this->assertTrue( $editStatus->isGood(), 'Sanity: must create revision 1' ); + /** @var Revision $rev1 */ + $rev1 = $editStatus->getValue()['revision']; + + $contentAddress = $rev1->getRevisionRecord()->getSlot( SlotRecord::MAIN )->getAddress(); + $blobStatus = StatusValue::newGood( [] ); + $blobStatus->warning( 'internalerror', 'oops!' ); + + $mockBlobStore = $this->getMock( BlobStore::class ); + $mockBlobStore->method( 'getBlobBatch' ) + ->willReturn( $blobStatus ); + + $revStore = MediaWikiServices::getInstance() + ->getRevisionStoreFactory() + ->getRevisionStore(); + $wrappedRevStore = TestingAccessWrapper::newFromObject( $revStore ); + $wrappedRevStore->blobStore = $mockBlobStore; + + $result = $revStore->getContentBlobsForBatch( [ $rev1->getId() ] ); + $this->assertTrue( $result->isOK() ); + $this->assertFalse( $result->isGood() ); + $this->assertNotEmpty( $result->getErrors() ); + + $records = $result->getValue(); + $this->assertArrayHasKey( $rev1->getId(), $records ); + + $mainRow = $records[$rev1->getId()][SlotRecord::MAIN]; + $this->assertNull( $mainRow->blob_data ); + $this->assertSame( [ + [ + 'type' => 'warning', + 'message' => 'internalerror', + 'params' => [ + "oops!" + ] + ], + [ + 'type' => 'warning', + 'message' => 'internalerror', + 'params' => [ + "Couldn't find blob data for rev " . $rev1->getId() + ] + ] + ], $result->getErrors() ); + } + + /** + * @covers \MediaWiki\Revision\RevisionStore::getContentBlobsForBatch + */ + public function testGetContentBlobsForBatchUsesGetBlobBatch() { + $page1 = $this->getTestPage(); + $text = __METHOD__ . 'b-ä'; + $editStatus = $this->editPage( $page1->getTitle()->getPrefixedDBkey(), $text . '1' ); + $this->assertTrue( $editStatus->isGood(), 'Sanity: must create revision 1' ); + /** @var Revision $rev1 */ + $rev1 = $editStatus->getValue()['revision']; + + $contentAddress = $rev1->getRevisionRecord()->getSlot( SlotRecord::MAIN )->getAddress(); + $mockBlobStore = $this->getMockBuilder( SqlBlobStore::class ) + ->disableOriginalConstructor() + ->getMock(); + $mockBlobStore + ->expects( $this->once() ) + ->method( 'getBlobBatch' ) + ->with( [ $contentAddress ], $this->anything() ) + ->willReturn( StatusValue::newGood( [ + $contentAddress => 'Content_From_Mock' + ] ) ); + $mockBlobStore + ->expects( $this->never() ) + ->method( 'getBlob' ); + + $revStore = MediaWikiServices::getInstance() + ->getRevisionStoreFactory() + ->getRevisionStore(); + $wrappedRevStore = TestingAccessWrapper::newFromObject( $revStore ); + $wrappedRevStore->blobStore = $mockBlobStore; + + $result = $revStore->getContentBlobsForBatch( + [ $rev1->getId() ], + [ SlotRecord::MAIN ] + ); + $this->assertTrue( $result->isGood() ); + $this->assertSame( 'Content_From_Mock', + $result->getValue()[$rev1->getId()][SlotRecord::MAIN]->blob_data ); + } + /** * @covers \MediaWiki\Revision\RevisionStore::newRevisionsFromBatch * @throws \MWException diff --git a/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php b/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php index 0196c5da8c..4a0d9becb5 100644 --- a/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php +++ b/tests/phpunit/includes/Revision/RevisionQueryInfoTest.php @@ -393,6 +393,10 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { 'slot_role_id', ], 'joins' => [], + 'keys' => [ + 'rev_id' => 'slot_revision_id', + 'role_id' => 'slot_role_id' + ], ] ]; yield 'MCR, role option' => [ @@ -415,6 +419,10 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { 'joins' => [ 'slot_roles' => [ 'LEFT JOIN', [ 'slot_role_id = role_id' ] ], ], + 'keys' => [ + 'rev_id' => 'slot_revision_id', + 'role_id' => 'slot_role_id' + ], ] ]; yield 'MCR read-new, content option' => [ @@ -441,6 +449,11 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { 'joins' => [ 'content' => [ 'JOIN', [ 'slot_content_id = content_id' ] ], ], + 'keys' => [ + 'rev_id' => 'slot_revision_id', + 'role_id' => 'slot_role_id', + 'model_id' => 'content_model', + ], ] ]; yield 'MCR read-new, content and model options' => [ @@ -470,6 +483,11 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { 'content' => [ 'JOIN', [ 'slot_content_id = content_id' ] ], 'content_models' => [ 'LEFT JOIN', [ 'content_model = model_id' ] ], ], + 'keys' => [ + 'rev_id' => 'slot_revision_id', + 'role_id' => 'slot_role_id', + 'model_id' => 'content_model', + ], ] ]; @@ -494,6 +512,9 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { ] ), 'joins' => [], + 'keys' => [ + 'rev_id' => 'rev_id' + ], ] ]; yield 'MCR write-both/read-old, content' => [ @@ -521,6 +542,9 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { ] ), 'joins' => [], + 'keys' => [ + 'rev_id' => 'rev_id' + ], ] ]; yield 'MCR write-both/read-old, content, model, role' => [ @@ -548,6 +572,9 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { ] ), 'joins' => [], + 'keys' => [ + 'rev_id' => 'rev_id' + ], ] ]; } @@ -633,6 +660,13 @@ class RevisionQueryInfoTest extends MediaWikiTestCase { $queryInfo['joins'], 'joins' ); + if ( isset( $expected['keys'] ) ) { + $this->assertArrayEqualsIgnoringIntKeyOrder( + $expected['keys'], + $queryInfo['keys'], + 'keys' + ); + } } /** diff --git a/tests/phpunit/includes/Revision/RevisionStoreDbTestBase.php b/tests/phpunit/includes/Revision/RevisionStoreDbTestBase.php index 6bf219dc7b..daec8a2fd0 100644 --- a/tests/phpunit/includes/Revision/RevisionStoreDbTestBase.php +++ b/tests/phpunit/includes/Revision/RevisionStoreDbTestBase.php @@ -1956,6 +1956,76 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase { $this->assertSame( RevisionRecord::DELETED_TEXT, $deletedAfter ); } + public function provideGetContentBlobsForBatchOptions() { + yield 'all slots' => [ null ]; + yield 'no slots' => [ [] ]; + yield 'main slot' => [ [ SlotRecord::MAIN ] ]; + } + + /** + * @dataProvider provideGetContentBlobsForBatchOptions + * @covers \MediaWiki\Revision\RevisionStore::newRevisionsFromBatch + * @param array|null $slots + * @throws \MWException + */ + public function testGetContentBlobsForBatch( $slots ) { + $page1 = $this->getTestPage(); + $text = __METHOD__ . 'b-ä'; + $editStatus = $this->editPage( $page1->getTitle()->getPrefixedDBkey(), $text . '1' ); + $this->assertTrue( $editStatus->isGood(), 'Sanity: must create revision 1' ); + /** @var Revision $rev1 */ + $rev1 = $editStatus->getValue()['revision']; + + $page2 = $this->getTestPage( $page1->getTitle()->getPrefixedText() . '_other' ); + $editStatus = $this->editPage( $page2->getTitle()->getPrefixedDBkey(), $text . '2' ); + $this->assertTrue( $editStatus->isGood(), 'Sanity: must create revision 2' ); + /** @var Revision $rev2 */ + $rev2 = $editStatus->getValue()['revision']; + + $store = MediaWikiServices::getInstance()->getRevisionStore(); + $result = $store->getContentBlobsForBatch( [ $rev1->getId(), $rev2->getId() ], $slots ); + $this->assertTrue( $result->isGood() ); + $this->assertEmpty( $result->getErrors() ); + + $rowSetsByRevId = $result->getValue(); + $this->assertArrayHasKey( $rev1->getId(), $rowSetsByRevId ); + $this->assertArrayHasKey( $rev2->getId(), $rowSetsByRevId ); + + $rev1rows = $rowSetsByRevId[$rev1->getId()]; + $rev2rows = $rowSetsByRevId[$rev2->getId()]; + + if ( is_array( $slots ) && !in_array( SlotRecord::MAIN, $slots ) ) { + $this->assertArrayNotHasKey( SlotRecord::MAIN, $rev1rows ); + $this->assertArrayNotHasKey( SlotRecord::MAIN, $rev2rows ); + } else { + $this->assertArrayHasKey( SlotRecord::MAIN, $rev1rows ); + $this->assertArrayHasKey( SlotRecord::MAIN, $rev2rows ); + + $mainSlotRow1 = $rev1rows[ SlotRecord::MAIN ]; + $mainSlotRow2 = $rev2rows[ SlotRecord::MAIN ]; + + if ( $mainSlotRow1->model_name ) { + $this->assertSame( $rev1->getContentModel(), $mainSlotRow1->model_name ); + $this->assertSame( $rev2->getContentModel(), $mainSlotRow2->model_name ); + } + + $this->assertSame( $text . '1', $mainSlotRow1->blob_data ); + $this->assertSame( $text . '2', $mainSlotRow2->blob_data ); + } + } + + /** + * @covers \MediaWiki\Revision\RevisionStore::newRevisionsFromBatch + */ + public function testGetContentBlobsForBatch_emptyBatch() { + $rows = new FakeResultWrapper( [] ); + $result = MediaWikiServices::getInstance()->getRevisionStore() + ->getContentBlobsForBatch( $rows ); + $this->assertTrue( $result->isGood() ); + $this->assertEmpty( $result->getValue() ); + $this->assertEmpty( $result->getErrors() ); + } + public function provideNewRevisionsFromBatchOptions() { yield 'No preload slots or content, single page' => [ null, @@ -1968,6 +2038,10 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase { 'content' => true ] ]; + yield 'Ask for no slots' => [ + null, + [ 'slots' => [] ] + ]; yield 'No preload slots or content, multiple pages' => [ 'Other_Page', [] @@ -2031,9 +2105,10 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase { * @covers \MediaWiki\Revision\RevisionStore::newRevisionsFromBatch */ public function testNewRevisionsFromBatch_emptyBatch() { + $rows = new FakeResultWrapper( [] ); $result = MediaWikiServices::getInstance()->getRevisionStore() ->newRevisionsFromBatch( - [], + $rows, [ 'slots' => [ SlotRecord::MAIN ], 'content' => true @@ -2082,4 +2157,5 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase { $this->assertFalse( $status->isGood() ); $this->assertTrue( $status->hasMessage( 'internalerror' ) ); } + } diff --git a/tests/phpunit/includes/api/ApiWatchTest.php b/tests/phpunit/includes/api/ApiWatchTest.php index 24d016e697..e76126fbb0 100644 --- a/tests/phpunit/includes/api/ApiWatchTest.php +++ b/tests/phpunit/includes/api/ApiWatchTest.php @@ -64,7 +64,7 @@ class ApiWatchTest extends ApiTestCase { unset( $data[0]['query']['watchlist'][$index] ); } } - $this->assertSame( 0, count( $data[0]['query']['watchlist'] ) ); + $this->assertSame( [], $data[0]['query']['watchlist'] ); return $data; } diff --git a/tests/phpunit/includes/filebackend/FileBackendTest.php b/tests/phpunit/includes/filebackend/FileBackendTest.php index afa82834b2..9a7b1e264e 100644 --- a/tests/phpunit/includes/filebackend/FileBackendTest.php +++ b/tests/phpunit/includes/filebackend/FileBackendTest.php @@ -923,32 +923,129 @@ class FileBackendTest extends MediaWikiTestCase { return $cases; } - public function testDoQuickOperations() { + /** + * @dataProvider provider_quickOperations + */ + public function testDoQuickOperations( + $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, $batchSize + ) { $this->backend = $this->singleBackend; - $this->doTestDoQuickOperations(); + $this->doTestDoQuickOperations( + $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, $batchSize + ); $this->tearDownFiles(); $this->backend = $this->multiBackend; - $this->doTestDoQuickOperations(); + $this->doTestDoQuickOperations( + $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, $batchSize + ); $this->tearDownFiles(); } - private function doTestDoQuickOperations() { + private function doTestDoQuickOperations( + $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, $batchSize + ) { $backendName = $this->backendClass(); + foreach ( $files as $path ) { + $status = $this->prepare( [ 'dir' => dirname( $path ) ] ); + $this->assertGoodStatus( $status, + "Preparing $path succeeded without warnings ($backendName)." ); + } + + foreach ( array_chunk( $createOps, $batchSize ) as $batchOps ) { + $this->assertGoodStatus( + $this->backend->doQuickOperations( $batchOps ), + "Creation of source files succeeded ($backendName)." + ); + } + foreach ( $files as $file ) { + $this->assertTrue( + $this->backend->fileExists( [ 'src' => $file ] ), + "File $file exists." + ); + } + + foreach ( array_chunk( $copyOps, $batchSize ) as $batchOps ) { + $this->assertGoodStatus( + $this->backend->doQuickOperations( $batchOps ), + "Quick copy of source files succeeded ($backendName)." + ); + } + foreach ( $files as $file ) { + $this->assertTrue( + $this->backend->fileExists( [ 'src' => "$file-2" ] ), + "File $file-2 exists." + ); + } + + foreach ( array_chunk( $moveOps, $batchSize ) as $batchOps ) { + $this->assertGoodStatus( + $this->backend->doQuickOperations( $batchOps ), + "Quick move of source files succeeded ($backendName)." + ); + } + foreach ( $files as $file ) { + $this->assertTrue( + $this->backend->fileExists( [ 'src' => "$file-3" ] ), + "File $file-3 move in." + ); + $this->assertFalse( + $this->backend->fileExists( [ 'src' => "$file-2" ] ), + "File $file-2 moved away." + ); + } + + foreach ( array_chunk( $overSelfOps, $batchSize ) as $batchOps ) { + $this->assertGoodStatus( + $this->backend->doQuickOperations( $batchOps ), + "Quick copy/move of source files over themselves succeeded ($backendName)." + ); + } + foreach ( $files as $file ) { + $this->assertTrue( + $this->backend->fileExists( [ 'src' => $file ] ), + "File $file still exists after copy/move over self." + ); + } + + foreach ( array_chunk( $deleteOps, $batchSize ) as $batchOps ) { + $this->assertGoodStatus( + $this->backend->doQuickOperations( $batchOps ), + "Quick deletion of source files succeeded ($backendName)." + ); + } + foreach ( $files as $file ) { + $this->assertFalse( $this->backend->fileExists( [ 'src' => $file ] ), + "File $file purged." ); + $this->assertFalse( $this->backend->fileExists( [ 'src' => "$file-3" ] ), + "File $file-3 purged." ); + } + } + + function provider_quickOperations() { $base = self::baseStorePath(); $files = [ "$base/unittest-cont1/e/fileA.a", "$base/unittest-cont1/e/fileB.a", "$base/unittest-cont1/e/fileC.a" ]; - $createOps = $copyOps = $moveOps = $deleteOps = []; + + $createOps = $copyOps = $moveOps = $overSelfOps = $deleteOps = []; foreach ( $files as $path ) { - $status = $this->prepare( [ 'dir' => dirname( $path ) ] ); - $this->assertGoodStatus( $status, - "Preparing $path succeeded without warnings ($backendName)." ); - $createOps[] = [ 'op' => 'create', 'dst' => $path, 'content' => mt_rand( 0, 50000 ) ]; + $createOps[] = [ 'op' => 'create', 'dst' => $path, 'content' => 52525 ]; + $createOps[] = [ 'op' => 'create', 'dst' => "$path-x", 'content' => 832 ]; + $createOps[] = [ 'op' => 'null' ]; + $copyOps[] = [ 'op' => 'copy', 'src' => $path, 'dst' => "$path-2" ]; + $copyOps[] = [ + 'op' => 'copy', + 'src' => "$path-nothing", + 'dst' => "$path-nowhere", + 'ignoreMissingSource' => true + ]; + $copyOps[] = [ 'op' => 'null' ]; + $moveOps[] = [ 'op' => 'move', 'src' => "$path-2", 'dst' => "$path-3" ]; $moveOps[] = [ 'op' => 'move', @@ -956,6 +1053,11 @@ class FileBackendTest extends MediaWikiTestCase { 'dst' => "$path-nowhere", 'ignoreMissingSource' => true ]; + $moveOps[] = [ 'op' => 'null' ]; + + $overSelfOps[] = [ 'op' => 'copy', 'src' => $path, 'dst' => $path ]; + $overSelfOps[] = [ 'op' => 'move', 'src' => $path, 'dst' => $path ]; + $deleteOps[] = [ 'op' => 'delete', 'src' => $path ]; $deleteOps[] = [ 'op' => 'delete', 'src' => "$path-3" ]; $deleteOps[] = [ @@ -963,56 +1065,14 @@ class FileBackendTest extends MediaWikiTestCase { 'src' => "$path-gone", 'ignoreMissingSource' => true ]; - } - $deleteOps[] = [ 'op' => 'null' ]; - - $this->assertGoodStatus( - $this->backend->doQuickOperations( $createOps ), - "Creation of source files succeeded ($backendName)." ); - foreach ( $files as $file ) { - $this->assertTrue( $this->backend->fileExists( [ 'src' => $file ] ), - "File $file exists." ); - } - - $this->assertGoodStatus( - $this->backend->doQuickOperations( $copyOps ), - "Quick copy of source files succeeded ($backendName)." ); - foreach ( $files as $file ) { - $this->assertTrue( $this->backend->fileExists( [ 'src' => "$file-2" ] ), - "File $file-2 exists." ); + $deleteOps[] = [ 'op' => 'null' ]; } - $this->assertGoodStatus( - $this->backend->doQuickOperations( $moveOps ), - "Quick move of source files succeeded ($backendName)." ); - foreach ( $files as $file ) { - $this->assertTrue( $this->backend->fileExists( [ 'src' => "$file-3" ] ), - "File $file-3 move in." ); - $this->assertFalse( $this->backend->fileExists( [ 'src' => "$file-2" ] ), - "File $file-2 moved away." ); - } - - $this->assertGoodStatus( - $this->backend->quickCopy( [ 'src' => $files[0], 'dst' => $files[0] ] ), - "Copy of file {$files[0]} over itself succeeded ($backendName)." ); - $this->assertTrue( $this->backend->fileExists( [ 'src' => $files[0] ] ), - "File {$files[0]} still exists." ); - - $this->assertGoodStatus( - $this->backend->quickMove( [ 'src' => $files[0], 'dst' => $files[0] ] ), - "Move of file {$files[0]} over itself succeeded ($backendName)." ); - $this->assertTrue( $this->backend->fileExists( [ 'src' => $files[0] ] ), - "File {$files[0]} still exists." ); - - $this->assertGoodStatus( - $this->backend->doQuickOperations( $deleteOps ), - "Quick deletion of source files succeeded ($backendName)." ); - foreach ( $files as $file ) { - $this->assertFalse( $this->backend->fileExists( [ 'src' => $file ] ), - "File $file purged." ); - $this->assertFalse( $this->backend->fileExists( [ 'src' => "$file-3" ] ), - "File $file-3 purged." ); - } + return [ + [ $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, 1 ], + [ $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, 2 ], + [ $files, $createOps, $copyOps, $moveOps, $overSelfOps, $deleteOps, 100 ] + ]; } /** diff --git a/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php b/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php index 0c084e058a..5586fa1bec 100644 --- a/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php +++ b/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php @@ -610,7 +610,7 @@ class WANObjectCacheTest extends PHPUnit\Framework\TestCase { $asycList[0](); // run the refresh callback $asycList = []; $this->assertEquals( 2, $wasSet, "Value calculated at later time" ); - $this->assertSame( 0, count( $asycList ), "No deferred refreshes added." ); + $this->assertSame( [], $asycList, "No deferred refreshes added." ); $v = $cache->getWithSetCallback( $key, 300, $func, $opts ); $this->assertEquals( $value, $v, "New value stored" ); diff --git a/tests/phpunit/includes/session/SessionBackendTest.php b/tests/phpunit/includes/session/SessionBackendTest.php index a1fdf8a3a6..eba1bcb35d 100644 --- a/tests/phpunit/includes/session/SessionBackendTest.php +++ b/tests/phpunit/includes/session/SessionBackendTest.php @@ -224,7 +224,7 @@ class SessionBackendTest extends MediaWikiTestCase { } $session2 = null; - $this->assertSame( 0, count( $priv->requests ) ); + $this->assertSame( [], $priv->requests ); $this->assertArrayNotHasKey( $backend->getId(), $manager->allSessionBackends ); $this->assertArrayHasKey( $backend->getId(), $manager->allSessionIds ); } diff --git a/tests/selenium/pageobjects/createaccount.page.js b/tests/selenium/pageobjects/createaccount.page.js index 99281bd202..a81511fc53 100644 --- a/tests/selenium/pageobjects/createaccount.page.js +++ b/tests/selenium/pageobjects/createaccount.page.js @@ -1,5 +1,4 @@ -const Page = require( 'wdio-mediawiki/Page' ), - Api = require( 'wdio-mediawiki/Api' ); +const Page = require( 'wdio-mediawiki/Page' ); class CreateAccountPage extends Page { get username() { return $( '#wpName2' ); } @@ -19,11 +18,6 @@ class CreateAccountPage extends Page { this.confirmPassword.setValue( password ); this.create.click(); } - - // @deprecated Use wdio-mediawiki/Api#createAccount() instead. - apiCreateAccount( username, password ) { - return Api.createAccount( username, password ); - } } module.exports = new CreateAccountPage(); diff --git a/tests/selenium/pageobjects/delete.page.js b/tests/selenium/pageobjects/delete.page.js index 72e2d04578..754c0d2a91 100644 --- a/tests/selenium/pageobjects/delete.page.js +++ b/tests/selenium/pageobjects/delete.page.js @@ -1,5 +1,4 @@ -const Page = require( 'wdio-mediawiki/Page' ), - Api = require( 'wdio-mediawiki/Api' ); +const Page = require( 'wdio-mediawiki/Page' ); class DeletePage extends Page { get reason() { return $( '#wpReason' ); } @@ -16,11 +15,6 @@ class DeletePage extends Page { this.reason.setValue( reason ); this.submit.click(); } - - // @deprecated Use wdio-mediawiki/Api#delete() instead. - apiDelete( name, reason ) { - return Api.delete( name, reason ); - } } module.exports = new DeletePage(); diff --git a/tests/selenium/pageobjects/edit.page.js b/tests/selenium/pageobjects/edit.page.js index 8036f2053e..4302e8f36f 100644 --- a/tests/selenium/pageobjects/edit.page.js +++ b/tests/selenium/pageobjects/edit.page.js @@ -1,5 +1,4 @@ -const Page = require( 'wdio-mediawiki/Page' ), - Api = require( 'wdio-mediawiki/Api' ); +const Page = require( 'wdio-mediawiki/Page' ); class EditPage extends Page { get content() { return $( '#wpTextbox1' ); } @@ -24,11 +23,6 @@ class EditPage extends Page { this.content.setValue( content ); this.save.click(); } - - // @deprecated Use wdio-mediawiki/Api#edit() instead. - apiEdit( name, content ) { - return Api.edit( name, content ); - } } module.exports = new EditPage(); diff --git a/tests/selenium/pageobjects/page.js b/tests/selenium/pageobjects/page.js deleted file mode 100644 index f159990eae..0000000000 --- a/tests/selenium/pageobjects/page.js +++ /dev/null @@ -1,12 +0,0 @@ -const Page = require( 'wdio-mediawiki/Page' ); - -/** - * @deprecated Use wdio-mediawiki/Page and openTitle() instead. - */ -class LegacyPage extends Page { - open( path ) { - browser.url( browser.options.baseUrl + '/index.php?title=' + path ); - } -} - -module.exports = LegacyPage; diff --git a/tests/selenium/pageobjects/userlogin.page.js b/tests/selenium/pageobjects/userlogin.page.js deleted file mode 100644 index 971e21bd4e..0000000000 --- a/tests/selenium/pageobjects/userlogin.page.js +++ /dev/null @@ -1,6 +0,0 @@ -const LoginPage = require( 'wdio-mediawiki/LoginPage' ); - -/** - * @deprecated Use wdio-mediawiki/LoginPage instead. - */ -module.exports = LoginPage;