From: jenkins-bot Date: Wed, 1 Feb 2017 04:08:42 +0000 (+0000) Subject: Merge "EditPage: Factor stats collection into private methods" X-Git-Tag: 1.31.0-rc.0~4177 X-Git-Url: http://git.cyclocoop.org/%22.%24image2.%22?a=commitdiff_plain;h=73c06b729f5698934b9a664c7f63873885be316a;hp=630b89b1f0dcb58d6ee860ed79dc1fef6d654d25;p=lhc%2Fweb%2Fwiklou.git Merge "EditPage: Factor stats collection into private methods" --- diff --git a/.mailmap b/.mailmap index 7aa3257b64..232824d7cc 100644 --- a/.mailmap +++ b/.mailmap @@ -209,6 +209,7 @@ Jeff Hall Jeff Hall Jeff Hobson Jeff Janes +Jeremy Baron Jeremy Postlethwaite Jeroen De Dauw Jeroen De Dauw @@ -217,6 +218,7 @@ Jiabao Jimmy Collins Joel Sahleen John Du Hart +John Erling Blad Jon Harald Søby Jon Robson Jon Robson @@ -272,6 +274,7 @@ Markus Glaser Matt Johnston Matthew Britton Matthew Flaschen +Matthew Walker Matthias Mullie Matthias Mullie Matěj Grabovský @@ -288,7 +291,6 @@ Mormegil MrBlueSky MrBlueSky Mukunda Modell -Mwalker MZMcBride nadeesha Namit @@ -311,10 +313,12 @@ OverlordQ Owen Davis Owen Davis paladox +Patricio Molina Patrick Reilly Patrick Reilly Patrick Westerhoff Paul Copperman +Peter Coombe Peter Coti Peter Potrowl Petr Kadlec @@ -399,10 +403,10 @@ Stephane Bisson Stephen Liang Steve Sanbeg Steven Roddis +Steven Walling Subramanya Sastry Sucheta Ghoshal Sumit Asthana -Swalling Thalia Chan Thiemo Mättig (WMDE) Thiemo Mättig (WMDE) @@ -420,7 +424,6 @@ Timo Tijhof Timo Tijhof Timo Tijhof Tina Johnson -Tjones Tom Maaswinkel Tomasz Finc Tomasz W. Kozlowski @@ -431,9 +434,11 @@ Tpt Trevor Parscal Trevor Parscal Trevor Parscal +Trey Jones Tyler Cipriani Tyler Romeo Umherirrender +Victor Barbu Victor Vasiliev Victor Vasiliev Victor Vasiliev diff --git a/RELEASE-NOTES-1.29 b/RELEASE-NOTES-1.29 index 3bf50ac623..8fa29c1eee 100644 --- a/RELEASE-NOTES-1.29 +++ b/RELEASE-NOTES-1.29 @@ -28,6 +28,9 @@ production. $wgNamespacesWithSubpages[NS_TEMPLATE] to false to keep the old behavior. * $wgRunJobsAsync is now false by default (T142751). This change only affects wikis with $wgJobRunRate > 0. +* A temporary feature flag, $wgDisableUserGroupExpiry, is provided to disable + new features that rely on the schema changes to the user_groups table. This + feature flag will likely be removed before 1.29 is released. === New features in 1.29 === * (T5233) A cookie can now be set when a user is autoblocked, to track that user @@ -48,6 +51,7 @@ production. browsers had poor support for them, but modern browsers handle them fine. This might affect some forms that used them and only worked because the attributes were not actually being set. +* Expiry times can now be specified when users are added to user groups. === External library changes in 1.29 === @@ -130,7 +134,8 @@ changes to languages because of Phabricator reports. Some configurations (such as date formats and gender namespaces) have also been updated when using the fallback language's configuration was inadequate. The new or reinstated language fallbacks are (after cs ↔ sk in 1.28): - hsb ↔ dsb, io → eo, mdf → ru, pnt → el, roa-tara → it. + ca ↔ oc; hsb ↔ dsb; io → eo; mdf → ru; pnt → el; roa-tara → it; rup → ro; + sh → bs, sr-el, hr. ==== No fallback for Ukrainian ==== * (T39314) The fallback from Ukrainian to Russian was removed. The Ukrainian @@ -208,6 +213,24 @@ changes to languages because of Phabricator reports. * ContentHandler::runLegacyHooks() was removed. * refreshLinks.php now can be limited to a particular category with --category=... or a tracking category with --tracking-category=... +* User-like objects that are passed to SpecialUserRights and its subclasses are + now required to have a getGroupMemberships() method. See UserRightsProxy for + an example. +* User::$mGroups (instance variable) was marked private. Use User::getGroups() + instead. +* User::getGroupName(), User::getGroupMember(), User:getGroupPage(), + User::makeGroupLinkHTML(), and User::makeGroupLinkWiki() were deprecated. + Use equivalent methods on the UserGroupMembership class. +* Maintenance scripts and tests that call User::addGroup() must now ensure that + User objects have been added to the database prior to calling addGroup(). +* Protected function UsersPager::getGroups() was removed, and protected function + UsersPager::buildGroupLink() was changed from a static to an instance method. +* The third parameter ($cache) to the UsersPagerDoBatchLookups hook was changed; + see docs/hooks.txt. +* User::crypt() (deprecated in 1.24) was removed. +* User::comparePasswords() (deprecated in 1.24) was removed. +* ArchivedFile::getUserText() (deprecated in 1.23) was removed. +* HTMLFileCache::newFromTitle() (deprecated in 1.24) was removed. == Compatibility == diff --git a/autoload.php b/autoload.php index e7c97ad049..a6840b4fb7 100644 --- a/autoload.php +++ b/autoload.php @@ -247,7 +247,6 @@ $wgAutoloadLocalClasses = [ 'CheckStorage' => __DIR__ . '/maintenance/storage/checkStorage.php', 'CheckSyntax' => __DIR__ . '/maintenance/checkSyntax.php', 'CheckUsernames' => __DIR__ . '/maintenance/checkUsernames.php', - 'ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php', 'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php', 'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php', 'CleanupBlocks' => __DIR__ . '/maintenance/cleanupBlocks.php', @@ -1461,7 +1460,6 @@ $wgAutoloadLocalClasses = [ 'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php', 'TrackingCategories' => __DIR__ . '/includes/TrackingCategories.php', 'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php', - 'TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php', 'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php', 'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/MediaTransformOutput.php', 'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php', @@ -1524,6 +1522,7 @@ $wgAutoloadLocalClasses = [ 'UserBlockedError' => __DIR__ . '/includes/exception/UserBlockedError.php', 'UserCache' => __DIR__ . '/includes/cache/UserCache.php', 'UserDupes' => __DIR__ . '/maintenance/userDupes.inc', + 'UserGroupMembership' => __DIR__ . '/includes/user/UserGroupMembership.php', 'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php', 'UserNamePrefixSearch' => __DIR__ . '/includes/user/UserNamePrefixSearch.php', 'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php', @@ -1541,7 +1540,9 @@ $wgAutoloadLocalClasses = [ 'ViewCLI' => __DIR__ . '/maintenance/view.php', 'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php', 'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php', + 'WANCacheReapUpdate' => __DIR__ . '/includes/deferred/WANCacheReapUpdate.php', 'WANObjectCache' => __DIR__ . '/includes/libs/objectcache/WANObjectCache.php', + 'WANObjectCacheReaper' => __DIR__ . '/includes/libs/objectcache/WANObjectCacheReaper.php', 'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php', 'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php', 'WantedPagesPage' => __DIR__ . '/includes/specials/SpecialWantedpages.php', @@ -1586,8 +1587,10 @@ $wgAutoloadLocalClasses = [ 'WikiRevision' => __DIR__ . '/includes/import/WikiRevision.php', 'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php', 'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php', + 'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php', 'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php', 'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php', + 'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php', 'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php', 'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php', 'WinCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/WinCacheBagOStuff.php', diff --git a/composer.json b/composer.json index e8251528a1..3b72bfda54 100644 --- a/composer.json +++ b/composer.json @@ -50,6 +50,7 @@ "jakub-onderka/php-parallel-lint": "0.9.2", "justinrainbow/json-schema": "~3.0", "mediawiki/mediawiki-codesniffer": "0.7.2", + "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a", "monolog/monolog": "~1.18.2", "nikic/php-parser": "2.1.0", "nmred/kafka-php": "0.1.5", diff --git a/docs/extension.schema.v1.json b/docs/extension.schema.v1.json index 421ea5c732..3d6eda9ad9 100644 --- a/docs/extension.schema.v1.json +++ b/docs/extension.schema.v1.json @@ -55,11 +55,20 @@ }, "requires": { "type": "object", - "description": "Indicates what versions of MediaWiki core are required. This syntax may be extended in the future, for example to check dependencies between other extensions.", + "description": "Indicates what versions of MediaWiki core or extensions are required. This syntax may be extended in the future, for example to check dependencies between other services.", + "additionalProperties": false, "properties": { "MediaWiki": { "type": "string", "description": "Version constraint string against MediaWiki core." + }, + "extensions": { + "type": "object", + "description": "Set of version constraint strings against specific extensions." + }, + "skins": { + "type": "object", + "description": "Set of version constraint strings against specific skins." } } }, diff --git a/docs/extension.schema.v2.json b/docs/extension.schema.v2.json index a5543d12a6..b7ee1a7b84 100644 --- a/docs/extension.schema.v2.json +++ b/docs/extension.schema.v2.json @@ -56,6 +56,7 @@ "requires": { "type": "object", "description": "Indicates what versions of MediaWiki core or extensions are required. This syntax may be extended in the future, for example to check dependencies between other services.", + "additionalProperties": false, "properties": { "MediaWiki": { "type": "string", diff --git a/docs/hooks.txt b/docs/hooks.txt index 803c20da66..27773f6c9b 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -365,6 +365,11 @@ $user: Current user * 1.27+: IApiMessage, or a key or key+parameters in ApiBase::$messageMap. * Earlier: A key or key+parameters in ApiBase::$messageMap. +'ApiDeprecationHelp': Add messages to the 'deprecation-help' warning generated +from ApiBase::addDeprecation(). +&$msgs: Message[] Messages to include in the help. Multiple messages will be + joined with spaces. + 'APIEditBeforeSave': DEPRECATED! Use EditFilterMergedContent instead. Before saving a page with api.php?action=edit, after processing request parameters. Return false to let the request fail, returning @@ -3452,10 +3457,12 @@ temporary password &$ip: IP of the user who sent the message out &$u: the account whose new password will be set -'UserAddGroup': Called when adding a group; return false to override -stock group addition. +'UserAddGroup': Called when adding a group or changing a group's expiry; return +false to override stock group addition. $user: the user object that is to have a group added -&$group: the group to add, can be modified +&$group: the group to add; can be modified +&$expiry: the expiry time in TS_MW format, or null if the group is not to +expire; can be modified 'UserArrayFromResult': Called when creating an UserArray object from a database result. @@ -3698,7 +3705,8 @@ their data into the cache array so that things like global user groups are displayed correctly in Special:ListUsers. $dbr: Read-only database handle $userIds: Array of user IDs whose groups we should look up -&$cache: Array of user ID -> internal user group name (e.g. 'sysop') mappings +&$cache: Array of user ID -> (array of internal group name (e.g. 'sysop') -> +UserGroupMembership object) &$groups: Array of group name -> bool true mappings for members of a given user group diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 086b615e42..a7cbd96dd8 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2342,6 +2342,19 @@ $wgWANObjectCaches = [ */ ]; +/** + * Verify and enforce WAN cache purges using reliable DB sources as streams. + * + * These secondary cache purges are de-duplicated via simple cache mutexes. + * This improves consistency when cache purges are lost, which becomes more likely + * as more cache servers are added or if there are multiple datacenters. Only keys + * related to important mutable content will be checked. + * + * @var bool + * @since 1.29 + */ +$wgEnableWANCacheReaper = false; + /** * Main object stash type. This should be a fast storage system for storing * lightweight data like hit counters and user activity. Sites with multiple @@ -5870,6 +5883,15 @@ $wgBotPasswordsCluster = false; */ $wgBotPasswordsDatabase = false; +/** + * Whether to disable user group expiry. This is a transitional feature flag + * in accordance with WMF schema change policy, and will be removed later + * (hopefully before MW 1.29 release). + * + * @since 1.29 + */ +$wgDisableUserGroupExpiry = false; + /** @} */ # end of user rights settings /************************************************************************//** diff --git a/includes/EditPage.php b/includes/EditPage.php index 5193860ca1..34062c0621 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -501,7 +501,7 @@ class EditPage { /** * @deprecated since 1.29, call edit directly */ - function submit() { + public function submit() { $this->edit(); } @@ -516,7 +516,7 @@ class EditPage { * is made and all is well do we actually save and redirect to * the newly-edited page. */ - function edit() { + public function edit() { global $wgOut, $wgRequest, $wgUser; // Allow extensions to modify/prevent this form or submission if ( !Hooks::run( 'AlternateEdit', [ $this ] ) ) { @@ -840,7 +840,7 @@ class EditPage { * @param WebRequest $request * @throws ErrorPageError */ - function importFormData( &$request ) { + public function importFormData( &$request ) { global $wgContLang, $wgUser; # Section edit can come from either the form or a link @@ -1071,7 +1071,7 @@ class EditPage { * Called on the first invocation, e.g. when a user clicks an edit link * @return bool If the requested section is valid */ - function initialiseForm() { + public function initialiseForm() { global $wgUser; $this->edittime = $this->page->getTimestamp(); $this->editRevId = $this->page->getLatest(); @@ -1423,7 +1423,7 @@ class EditPage { * @return bool * @private */ - function tokenOk( &$request ) { + public function tokenOk( &$request ) { global $wgUser; $token = $request->getVal( 'wpEditToken' ); $this->mTokenOk = $wgUser->matchEditToken( $token ); @@ -1717,7 +1717,7 @@ class EditPage { * AS_BLOCKED_PAGE_FOR_USER. All that stuff needs to be cleaned up some * time. */ - function internalAttemptSave( &$result, $bot = false ) { + public function internalAttemptSave( &$result, $bot = false ) { global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize; global $wgContentHandlerUseDB; @@ -2273,7 +2273,7 @@ class EditPage { * one might think of X as the "base revision", which is NOT what this returns. * @return Revision Current version when the edit was started */ - function getBaseRevision() { + public function getBaseRevision() { if ( !$this->mBaseRevision ) { $db = wfGetDB( DB_MASTER ); $this->mBaseRevision = $this->editRevId @@ -2325,7 +2325,7 @@ class EditPage { return false; } - function setHeaders() { + public function setHeaders() { global $wgOut, $wgUser, $wgAjaxEditStash, $wgCookieSetOnAutoblock; $wgOut->addModules( 'mediawiki.action.edit' ); @@ -2585,7 +2585,7 @@ class EditPage { * The $formCallback parameter is deprecated since MediaWiki 1.25. Please * use the EditPage::showEditForm:fields hook instead. */ - function showEditForm( $formCallback = null ) { + public function showEditForm( $formCallback = null ) { global $wgOut, $wgUser; # need to parse the preview early so that we know which templates are used, @@ -3027,7 +3027,7 @@ class EditPage { * * @return array An array in the format [ $label, $input ] */ - function getSummaryInput( $summary = "", $labelText = null, + public function getSummaryInput( $summary = "", $labelText = null, $inputAttrs = null, $spanLabelAttrs = null ) { // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters. @@ -3282,14 +3282,14 @@ HTML */ protected function showPreview( $text ) { global $wgOut; - if ( $this->mTitle->getNamespace() == NS_CATEGORY ) { + if ( $this->mArticle instanceof CategoryPage ) { $this->mArticle->openShowCategory(); } # This hook seems slightly odd here, but makes things more # consistent for extensions. Hooks::run( 'OutputPageBeforeHTML', [ &$wgOut, &$text ] ); $wgOut->addHTML( $text ); - if ( $this->mTitle->getNamespace() == NS_CATEGORY ) { + if ( $this->mArticle instanceof CategoryPage ) { $this->mArticle->closeShowCategory(); } } @@ -3301,7 +3301,7 @@ HTML * If this is a section edit, we'll replace the section as for final * save and then make a comparison. */ - function showDiff() { + public function showDiff() { global $wgUser, $wgContLang, $wgOut; $oldtitlemsg = 'currentrev'; @@ -3683,7 +3683,7 @@ HTML * @throws MWException * @return string */ - function getPreviewText() { + public function getPreviewText() { global $wgOut, $wgRawHtml, $wgLang; global $wgAllowUserCss, $wgAllowUserJs; @@ -3862,7 +3862,7 @@ HTML /** * @return array */ - function getTemplates() { + public function getTemplates() { if ( $this->preview || $this->section != '' ) { $templates = []; if ( !isset( $this->mParserOutput ) ) { @@ -3886,7 +3886,7 @@ HTML * @param Title $title Title object for the page being edited (optional) * @return string */ - static function getEditToolbar( $title = null ) { + public static function getEditToolbar( $title = null ) { global $wgContLang, $wgOut; global $wgEnableUploads, $wgForeignFileRepos; @@ -4139,7 +4139,7 @@ HTML * Creates a basic error page which informs the user that * they have attempted to edit a nonexistent section. */ - function noSuchSectionPage() { + public function noSuchSectionPage() { global $wgOut; $wgOut->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) ); diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index faca533618..3e72d54100 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -22,6 +22,7 @@ use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\ChronologyProtector; /** * The MediaWiki class is the helper class for the index.php entry point. diff --git a/includes/OutputPage.php b/includes/OutputPage.php index fd28f4a1d3..91fc75c9bd 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -3259,9 +3259,11 @@ class OutputPage extends ContextSource { } foreach ( $this->mMetatags as $tag ) { - if ( 0 == strcasecmp( 'http:', substr( $tag[0], 0, 5 ) ) ) { + if ( strncasecmp( $tag[0], 'http:', 5 ) === 0 ) { $a = 'http-equiv'; $tag[0] = substr( $tag[0], 5 ); + } elseif ( strncasecmp( $tag[0], 'og:', 3 ) === 0 ) { + $a = 'property'; } else { $a = 'name'; } diff --git a/includes/Preferences.php b/includes/Preferences.php index a5e9d77344..6d15c1eec5 100644 --- a/includes/Preferences.php +++ b/includes/Preferences.php @@ -222,24 +222,48 @@ class Preferences { 'section' => 'personal/info', ]; + $lang = $context->getLanguage(); + # Get groups to which the user belongs $userEffectiveGroups = $user->getEffectiveGroups(); - $userGroups = $userMembers = []; + $userGroupMemberships = $user->getGroupMemberships(); + $userGroups = $userMembers = $userTempGroups = $userTempMembers = []; foreach ( $userEffectiveGroups as $ueg ) { if ( $ueg == '*' ) { // Skip the default * group, seems useless here continue; } - $groupName = User::getGroupName( $ueg ); - $userGroups[] = User::makeGroupLinkHTML( $ueg, $groupName ); - $memberName = User::getGroupMember( $ueg, $userName ); - $userMembers[] = User::makeGroupLinkHTML( $ueg, $memberName ); - } - asort( $userGroups ); - asort( $userMembers ); + if ( isset( $userGroupMemberships[$ueg] ) ) { + $groupStringOrObject = $userGroupMemberships[$ueg]; + } else { + $groupStringOrObject = $ueg; + } - $lang = $context->getLanguage(); + $userG = UserGroupMembership::getLink( $groupStringOrObject, $context, 'html' ); + $userM = UserGroupMembership::getLink( $groupStringOrObject, $context, 'html', + $userName ); + + // Store expiring groups separately, so we can place them before non-expiring + // groups in the list. This is to avoid the ambiguity of something like + // "administrator, bureaucrat (until X date)" -- users might wonder whether the + // expiry date applies to both groups, or just the last one + if ( $groupStringOrObject instanceof UserGroupMembership && + $groupStringOrObject->getExpiry() + ) { + $userTempGroups[] = $userG; + $userTempMembers[] = $userM; + } else { + $userGroups[] = $userG; + $userMembers[] = $userM; + } + } + sort( $userGroups ); + sort( $userMembers ); + sort( $userTempGroups ); + sort( $userTempMembers ); + $userGroups = array_merge( $userTempGroups, $userGroups ); + $userMembers = array_merge( $userTempMembers, $userMembers ); $defaultPreferences['usergroups'] = [ 'type' => 'info', diff --git a/includes/SiteStats.php b/includes/SiteStats.php index ff7875c948..105a581888 100644 --- a/includes/SiteStats.php +++ b/includes/SiteStats.php @@ -186,6 +186,7 @@ class SiteStats { wfMemcKey( 'SiteStats', 'groupcounts', $group ), $cache::TTL_HOUR, function ( $oldValue, &$ttl, array &$setOpts ) use ( $group ) { + global $wgDisableUserGroupExpiry; $dbr = wfGetDB( DB_REPLICA ); $setOpts += Database::getCacheSetOptions( $dbr ); @@ -193,7 +194,12 @@ class SiteStats { return $dbr->selectField( 'user_groups', 'COUNT(*)', - [ 'ug_group' => $group ], + [ + 'ug_group' => $group, + $wgDisableUserGroupExpiry ? + '1' : + 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ) + ], __METHOD__ ); }, diff --git a/includes/Title.php b/includes/Title.php index 5cf911f638..3ce775b8bc 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -2417,7 +2417,7 @@ class Title implements LinkTarget { * * @param string $action The action to check * @param bool $short Short circuit on first error - * @return array List of errors + * @return array Array containing an error message key and any parameters */ private function missingPermissionError( $action, $short ) { // We avoid expensive display logic for quickUserCan's and such @@ -2425,19 +2425,7 @@ class Title implements LinkTarget { return [ 'badaccess-group0' ]; } - $groups = array_map( [ 'User', 'makeGroupLinkWiki' ], - User::getGroupsWithPermission( $action ) ); - - if ( count( $groups ) ) { - global $wgLang; - return [ - 'badaccess-groups', - $wgLang->commaList( $groups ), - count( $groups ) - ]; - } else { - return [ 'badaccess-group0' ]; - } + return User::newFatalPermissionDeniedStatus( $action )->getErrorsArray()[0]; } /** diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index b8dd4641d9..e2498108e5 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -1718,6 +1718,18 @@ abstract class ApiBase extends ContextSource { $this->logFeatureUsage( $feature ); } $this->addWarning( $msg, 'deprecation', $data ); + + // No real need to deduplicate here, ApiErrorFormatter does that for + // us (assuming the hook is deterministic). + $msgs = [ $this->msg( 'api-usage-mailinglist-ref' ) ]; + Hooks::run( 'ApiDeprecationHelp', [ &$msgs ] ); + if ( count( $msgs ) > 1 ) { + $key = '$' . join( ' $', range( 1, count( $msgs ) ) ); + $msg = ( new RawMessage( $key ) )->params( $msgs ); + } else { + $msg = reset( $msgs ); + } + $this->getMain()->addWarning( $msg, 'deprecation-help' ); } /** diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php index 52f1d95830..59227d91e9 100644 --- a/includes/api/ApiMain.php +++ b/includes/api/ApiMain.php @@ -1109,7 +1109,11 @@ class ApiMain extends ApiBase { $result->addContentValue( $path, 'docref', - $this->msg( 'api-usage-docref', $link )->inLanguage( $formatter->getLanguage() )->text() + trim( + $this->msg( 'api-usage-docref', $link )->inLanguage( $formatter->getLanguage() )->text() + . ' ' + . $this->msg( 'api-usage-mailinglist-ref' )->inLanguage( $formatter->getLanguage() )->text() + ) ); } else { if ( $config->get( 'ShowExceptionDetails' ) ) { diff --git a/includes/api/ApiQueryAllImages.php b/includes/api/ApiQueryAllImages.php index e3e5ed6c9f..ef6bb6ad99 100644 --- a/includes/api/ApiQueryAllImages.php +++ b/includes/api/ApiQueryAllImages.php @@ -197,7 +197,10 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase { 'LEFT JOIN', [ 'ug_group' => User::getGroupsWithPermission( 'bot' ), - 'ug_user = img_user' + 'ug_user = img_user', + $this->getConfig()->get( 'DisableUserGroupExpiry' ) ? + '1' : + 'ug_expiry IS NULL OR ug_expiry >= ' . $db->addQuotes( $db->timestamp() ) ] ] ] ); $groupCond = ( $params['filterbots'] == 'nobots' ? 'NULL' : 'NOT NULL' ); diff --git a/includes/api/ApiQueryAllUsers.php b/includes/api/ApiQueryAllUsers.php index 2e2ac320fd..1c3b171fd4 100644 --- a/includes/api/ApiQueryAllUsers.php +++ b/includes/api/ApiQueryAllUsers.php @@ -116,8 +116,18 @@ class ApiQueryAllUsers extends ApiQueryBase { // Filter only users that belong to a given group. This might // produce as many rows-per-user as there are groups being checked. $this->addTables( 'user_groups', 'ug1' ); - $this->addJoinConds( [ 'ug1' => [ 'INNER JOIN', [ 'ug1.ug_user=user_id', - 'ug1.ug_group' => $params['group'] ] ] ] ); + $this->addJoinConds( [ + 'ug1' => [ + 'INNER JOIN', + [ + 'ug1.ug_user=user_id', + 'ug1.ug_group' => $params['group'], + $this->getConfig()->get( 'DisableUserGroupExpiry' ) ? + '1' : + 'ug1.ug_expiry IS NULL OR ug1.ug_expiry >= ' . $db->addQuotes( $db->timestamp() ) + ] + ] + ] ); $maxDuplicateRows *= count( $params['group'] ); } @@ -135,7 +145,10 @@ class ApiQueryAllUsers extends ApiQueryBase { ) ]; } $this->addJoinConds( [ 'ug1' => [ 'LEFT OUTER JOIN', - array_merge( [ 'ug1.ug_user=user_id' ], $exclude ) + array_merge( [ + 'ug1.ug_user=user_id', + 'ug1.ug_expiry IS NULL OR ug1.ug_expiry >= ' . $db->addQuotes( $db->timestamp() ) + ], $exclude ) ] ] ); $this->addWhere( 'ug1.ug_user IS NULL' ); } @@ -148,7 +161,10 @@ class ApiQueryAllUsers extends ApiQueryBase { if ( $fld_groups || $fld_rights ) { $this->addFields( [ 'groups' => - $db->buildGroupConcatField( '|', 'user_groups', 'ug_group', 'ug_user=user_id' ) + $db->buildGroupConcatField( '|', 'user_groups', 'ug_group', [ + 'ug_user=user_id', + 'ug_expiry IS NULL OR ug_expiry >= ' . $db->addQuotes( $db->timestamp() ) + ] ) ] ); } diff --git a/includes/api/ApiQueryContributors.php b/includes/api/ApiQueryContributors.php index ac5ccca84c..148e315a3d 100644 --- a/includes/api/ApiQueryContributors.php +++ b/includes/api/ApiQueryContributors.php @@ -160,7 +160,13 @@ class ApiQueryContributors extends ApiQueryBase { $this->addTables( 'user_groups' ); $this->addJoinConds( [ 'user_groups' => [ $excludeGroups ? 'LEFT OUTER JOIN' : 'INNER JOIN', - [ 'ug_user=rev_user', 'ug_group' => $limitGroups ] + [ + 'ug_user=rev_user', + 'ug_group' => $limitGroups, + $this->getConfig()->get( 'DisableUserGroupExpiry' ) ? + '1' : + 'ug_expiry IS NULL OR ug_expiry >= ' . $db->addQuotes( $db->timestamp() ) + ] ] ] ); $this->addWhereIf( 'ug_user IS NULL', $excludeGroups ); } diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php index 7bc00cb158..04b0facd57 100644 --- a/includes/api/ApiQueryUserInfo.php +++ b/includes/api/ApiQueryUserInfo.php @@ -143,6 +143,19 @@ class ApiQueryUserInfo extends ApiQueryBase { ApiResult::setIndexedTagName( $vals['groups'], 'g' ); // even if empty } + if ( isset( $this->prop['groupmemberships'] ) ) { + $ugms = $user->getGroupMemberships(); + $vals['groupmemberships'] = []; + foreach ( $ugms as $group => $ugm ) { + $vals['groupmemberships'][] = [ + 'group' => $group, + 'expiry' => ApiResult::formatExpiry( $ugm->getExpiry() ), + ]; + } + ApiResult::setArrayType( $vals['groupmemberships'], 'array' ); // even if empty + ApiResult::setIndexedTagName( $vals['groupmemberships'], 'groupmembership' ); // even if empty + } + if ( isset( $this->prop['implicitgroups'] ) ) { $vals['implicitgroups'] = $user->getAutomaticGroups(); ApiResult::setArrayType( $vals['implicitgroups'], 'array' ); // even if empty @@ -302,6 +315,7 @@ class ApiQueryUserInfo extends ApiQueryBase { 'blockinfo', 'hasmsg', 'groups', + 'groupmemberships', 'implicitgroups', 'rights', 'changeablegroups', diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php index 2d620a4e9e..3a814c4c49 100644 --- a/includes/api/ApiQueryUsers.php +++ b/includes/api/ApiQueryUsers.php @@ -42,6 +42,7 @@ class ApiQueryUsers extends ApiQueryBase { // everything except 'blockinfo' which might show hidden records if the user // making the request has the appropriate permissions 'groups', + 'groupmemberships', 'implicitgroups', 'rights', 'editcount', @@ -97,6 +98,8 @@ class ApiQueryUsers extends ApiQueryBase { } public function execute() { + $db = $this->getDB(); + $params = $this->extractRequestParams(); $this->requireMaxOneParameter( $params, 'userids', 'users' ); @@ -167,11 +170,16 @@ class ApiQueryUsers extends ApiQueryBase { $this->addTables( 'user_groups' ); $this->addJoinConds( [ 'user_groups' => [ 'INNER JOIN', 'ug_user=user_id' ] ] ); - $this->addFields( [ 'user_name', 'ug_group' ] ); + $this->addFields( [ 'user_name' ] ); + $this->addFields( UserGroupMembership::selectFields() ); + if ( !$this->getConfig()->get( 'DisableUserGroupExpiry' ) ) { + $this->addWhere( 'ug_expiry IS NULL OR ug_expiry >= ' . + $db->addQuotes( $db->timestamp() ) ); + } $userGroupsRes = $this->select( __METHOD__ ); foreach ( $userGroupsRes as $row ) { - $userGroups[$row->user_name][] = $row->ug_group; + $userGroups[$row->user_name][] = $row; } } @@ -207,6 +215,15 @@ class ApiQueryUsers extends ApiQueryBase { $data[$key]['groups'] = $user->getEffectiveGroups(); } + if ( isset( $this->prop['groupmemberships'] ) ) { + $data[$key]['groupmemberships'] = array_map( function( $ugm ) { + return [ + 'group' => $ugm->getGroup(), + 'expiry' => ApiResult::formatExpiry( $ugm->getExpiry() ), + ]; + }, $user->getGroupMemberships() ); + } + if ( isset( $this->prop['implicitgroups'] ) ) { $data[$key]['implicitgroups'] = $user->getAutomaticGroups(); } @@ -303,6 +320,10 @@ class ApiQueryUsers extends ApiQueryBase { ApiResult::setArrayType( $data[$u]['groups'], 'array' ); ApiResult::setIndexedTagName( $data[$u]['groups'], 'g' ); } + if ( isset( $this->prop['groupmemberships'] ) && isset( $data[$u]['groupmemberships'] ) ) { + ApiResult::setArrayType( $data[$u]['groupmemberships'], 'array' ); + ApiResult::setIndexedTagName( $data[$u]['groupmemberships'], 'groupmembership' ); + } if ( isset( $this->prop['implicitgroups'] ) && isset( $data[$u]['implicitgroups'] ) ) { ApiResult::setArrayType( $data[$u]['implicitgroups'], 'array' ); ApiResult::setIndexedTagName( $data[$u]['implicitgroups'], 'g' ); @@ -347,6 +368,7 @@ class ApiQueryUsers extends ApiQueryBase { ApiBase::PARAM_TYPE => [ 'blockinfo', 'groups', + 'groupmemberships', 'implicitgroups', 'rights', 'editcount', diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php index 6b38302c8f..af3fff6c56 100644 --- a/includes/api/ApiUpload.php +++ b/includes/api/ApiUpload.php @@ -494,6 +494,13 @@ class ApiUpload extends ApiBase { $this->mParams['filekey'], $this->mParams['filename'], !$this->mParams['async'] ); } elseif ( isset( $this->mParams['file'] ) ) { + // Can't async upload directly from a POSTed file, we'd have to + // stash the file and then queue the publish job. The user should + // just submit the two API queries to perform those two steps. + if ( $this->mParams['async'] ) { + $this->dieWithError( 'apierror-cannot-async-upload-file' ); + } + $this->mUpload = new UploadFromFile(); $this->mUpload->initialize( $this->mParams['filename'], diff --git a/includes/api/ApiUserrights.php b/includes/api/ApiUserrights.php index 4ef974cfce..262f072dda 100644 --- a/includes/api/ApiUserrights.php +++ b/includes/api/ApiUserrights.php @@ -1,9 +1,7 @@ .@gmail.com" * @@ -59,6 +57,41 @@ class ApiUserrights extends ApiBase { $params = $this->extractRequestParams(); + // Figure out expiry times from the input + // @todo Remove this isset check when removing $wgDisableUserGroupExpiry + if ( isset( $params['expiry'] ) ) { + $expiry = (array)$params['expiry']; + } else { + $expiry = [ 'infinity' ]; + } + if ( count( $expiry ) !== count( $params['add'] ) ) { + if ( count( $expiry ) === 1 ) { + $expiry = array_fill( 0, count( $params['add'] ), $expiry[0] ); + } else { + $this->dieWithError( [ + 'apierror-toofewexpiries', + count( $expiry ), + count( $params['add'] ) + ] ); + } + } + + // Validate the expiries + $groupExpiries = []; + foreach ( $expiry as $index => $expiryValue ) { + $group = $params['add'][$index]; + $groupExpiries[$group] = UserrightsPage::expiryToTimestamp( $expiryValue ); + + if ( $groupExpiries[$group] === false ) { + $this->dieWithError( [ 'apierror-invalidexpiry', wfEscapeWikiText( $expiryValue ) ] ); + } + + // not allowed to have things expiring in the past + if ( $groupExpiries[$group] && $groupExpiries[$group] < wfTimestampNow() ) { + $this->dieWithError( [ 'apierror-pastexpiry', wfEscapeWikiText( $expiryValue ) ] ); + } + } + $user = $this->getUrUser( $params ); $tags = $params['tags']; @@ -76,8 +109,8 @@ class ApiUserrights extends ApiBase { $r['user'] = $user->getName(); $r['userid'] = $user->getId(); list( $r['added'], $r['removed'] ) = $form->doSaveUserGroups( - $user, (array)$params['add'], - (array)$params['remove'], $params['reason'], $tags + $user, (array)$params['add'], (array)$params['remove'], + $params['reason'], $tags, $groupExpiries ); $result = $this->getResult(); @@ -120,7 +153,7 @@ class ApiUserrights extends ApiBase { } public function getAllowedParams() { - return [ + $a = [ 'user' => [ ApiBase::PARAM_TYPE => 'user', ], @@ -131,6 +164,11 @@ class ApiUserrights extends ApiBase { ApiBase::PARAM_TYPE => $this->getAllGroups(), ApiBase::PARAM_ISMULTI => true ], + 'expiry' => [ + ApiBase::PARAM_ISMULTI => true, + ApiBase::PARAM_ALLOW_DUPLICATES => true, + ApiBase::PARAM_DFLT => 'infinite', + ], 'remove' => [ ApiBase::PARAM_TYPE => $this->getAllGroups(), ApiBase::PARAM_ISMULTI => true @@ -147,6 +185,10 @@ class ApiUserrights extends ApiBase { ApiBase::PARAM_ISMULTI => true ], ]; + if ( !$this->getUserRightsPage()->canProcessExpiries() ) { + unset( $a['expiry'] ); + } + return $a; } public function needsToken() { @@ -158,12 +200,17 @@ class ApiUserrights extends ApiBase { } protected function getExamplesMessages() { - return [ + $a = [ 'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC' => 'apihelp-userrights-example-user', 'action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC' => 'apihelp-userrights-example-userid', ]; + if ( $this->getUserRightsPage()->canProcessExpiries() ) { + $a['action=userrights&user=SometimeSysop&add=sysop&expiry=1%20month&token=123ABC'] + = 'apihelp-userrights-example-expiry'; + } + return $a; } public function getHelpUrls() { diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json index 596c35e6a7..a6fceee37f 100644 --- a/includes/api/i18n/de.json +++ b/includes/api/i18n/de.json @@ -16,7 +16,8 @@ "Ljonka", "FriedhelmW", "Predatorix", - "Luke081515" + "Luke081515", + "Eddie" ] }, "apihelp-main-description": "
\n* [[mw:API:Main_page|Dokumentation]]\n* [[mw:API:FAQ|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n
\nStatus: Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\nFehlerhafte Anfragen: Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].\n\nTesten: Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].", @@ -36,6 +37,7 @@ "apihelp-main-param-errorsuselocal": "Falls angegeben, verwenden Fehlertexte lokalisierte Nachrichten aus dem {{ns:MediaWiki}}-Namensraum.", "apihelp-block-description": "Einen Benutzer sperren.", "apihelp-block-param-user": "Benutzername, IP-Adresse oder IP-Adressbereich, der gesperrt werden soll. Kann nicht zusammen mit $1userid verwendet werden.", + "apihelp-block-param-userid": "Die zu sperrende Benutzerkennung. Kann nicht zusammen mit $1user verwendet werden.", "apihelp-block-param-expiry": "Sperrdauer. Kann relativ (z. B. 5 months oder 2 weeks) oder absolut (z. B. 2014-09-18T12:34:56Z) sein. Wenn auf infinite, indefinite oder never gesetzt, ist die Sperre unbegrenzt.", "apihelp-block-param-reason": "Sperrbegründung.", "apihelp-block-param-anononly": "Nur anonyme Benutzer sperren (z. B. anonyme Bearbeitungen für diese IP deaktivieren).", @@ -49,6 +51,8 @@ "apihelp-block-param-tags": "Auf den Eintrag im Sperr-Logbuch anzuwendende Änderungsmarkierungen.", "apihelp-block-example-ip-simple": "IP 192.0.2.5 für drei Tage mit der Begründung „First strike“ (erste Verwarnung) sperren", "apihelp-block-example-user-complex": "Benutzer Vandal unbeschränkt sperren mit der Begründung „Vandalism“ (Vandalismus), Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.", + "apihelp-changeauthenticationdata-description": "Ändert die Authentifizierungsdaten für den aktuellen Benutzer.", + "apihelp-changeauthenticationdata-example-password": "Versucht, das Passwort des aktuellen Benutzers in ExamplePassword zu ändern.", "apihelp-checktoken-description": "Überprüft die Gültigkeit eines über [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] erhaltenen Tokens.", "apihelp-checktoken-param-type": "Typ des Tokens, das getestet werden soll.", "apihelp-checktoken-param-token": "Token, das getestet werden soll.", @@ -56,6 +60,7 @@ "apihelp-checktoken-example-simple": "Überprüft die Gültigkeit des csrf-Tokens.", "apihelp-clearhasmsg-description": "Löschen des hasmsg-Flags („hat Nachrichten“-Flag) für den aktuellen Benutzer.", "apihelp-clearhasmsg-example-1": "hasmsg-Flags für den aktuellen Benutzer löschen", + "apihelp-clientlogin-example-login": "Startet den Prozess der Anmeldung in dem Wiki als Benutzer Example mit dem Passwort ExamplePassword.", "apihelp-compare-description": "Abrufen des Unterschieds zwischen zwei Seiten.\n\nDu musst eine Versionsnummer, einen Seitentitel oder eine Seitennummer für „from“ als auch „to“ angeben.", "apihelp-compare-param-fromtitle": "Erster zu vergleichender Titel.", "apihelp-compare-param-fromid": "Erste zu vergleichende Seitennummer.", @@ -237,6 +242,8 @@ "apihelp-managetags-example-activate": "Aktiviert eine Markierung namens spam mit der Begründung For use in edit patrolling (für die Eingangskontrolle).", "apihelp-managetags-example-deactivate": "Deaktiviert eine Markierung namens spam mit der Begründung No longer required (nicht mehr benötigt).", "apihelp-mergehistory-description": "Führt Versionsgeschichten von Seiten zusammen.", + "apihelp-mergehistory-param-reason": "Grund für die Zusammenführung der Versionsgeschichten", + "apihelp-mergehistory-example-merge": "Fügt alle Versionen von Oldpage der Versionsgeschichte von Newpage hinzu.", "apihelp-move-description": "Eine Seite verschieben.", "apihelp-move-param-from": "Titel der zu verschiebenden Seite. Kann nicht zusammen mit $1fromid verwendet werden.", "apihelp-move-param-fromid": "Seitenkennung der zu verschiebenden Seite. Kann nicht zusammen mit $1from verwendet werden.", @@ -483,6 +490,7 @@ "apihelp-query+allrevisions-param-generatetitles": "Wenn als Generator verwendet, werden eher Titel als Bearbeitungs-IDs erzeugt.", "apihelp-query+allrevisions-example-user": "Liste die letzten 50 Beiträge, sortiert nach Benutzer Beispiel auf.", "apihelp-query+allrevisions-example-ns-main": "Liste die ersten 50 Bearbeitungen im Hauptnamensraum auf.", + "apihelp-query+mystashedfiles-param-prop": "Welche Eigenschaften für die Dateien abgerufen werden sollen.", "apihelp-query+mystashedfiles-paramvalue-prop-size": "Ruft die Dateigröße und Bildabmessungen ab.", "apihelp-query+mystashedfiles-param-limit": "Wie viele Dateien zurückgegeben werden sollen.", "apihelp-query+alltransclusions-description": "Liste alle Transklusionen auf (eingebettete Seiten die {{x}} benutzen), einschließlich nicht vorhandener.", @@ -677,6 +685,7 @@ "apihelp-query+imageinfo-paramvalue-prop-userid": "Füge die ID des Benutzers zu jeder hochgeladenen Dateiversion hinzu.", "apihelp-query+imageinfo-paramvalue-prop-comment": "Kommentar zu der Version.", "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analysiere den Kommentar zu dieser Version.", + "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Ergänzt den kanonischen Titel für die Datei.", "apihelp-query+imageinfo-paramvalue-prop-url": "Gibt die URL zur Datei- und Beschreibungsseite zurück.", "apihelp-query+imageinfo-paramvalue-prop-size": "Fügt die Größe der Datei in Bytes und (falls zutreffend) in Höhe, Breite und Seitenzahl hinzu.", "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias für die Größe.", @@ -764,6 +773,7 @@ "apihelp-query+recentchanges-param-user": "Listet nur Änderungen von diesem Benutzer auf.", "apihelp-query+recentchanges-param-excludeuser": "Listet keine Änderungen von diesem Benutzer auf.", "apihelp-query+recentchanges-param-tag": "Listet nur Änderungen auf, die mit dieser Markierung markiert sind.", + "apihelp-query+recentchanges-paramvalue-prop-comment": "Fügt den Kommentar für die Bearbeitung hinzu.", "apihelp-query+recentchanges-paramvalue-prop-flags": "Ergänzt Markierungen für die Bearbeitung.", "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel für die Bearbeitung.", "apihelp-query+recentchanges-paramvalue-prop-title": "Ergänzt den Seitentitel der Bearbeitung.", @@ -772,6 +782,7 @@ "apihelp-query+redirects-param-prop": "Zurückzugebende Eigenschaften:", "apihelp-query+redirects-paramvalue-prop-pageid": "Seitenkennung einer jeden Weiterleitung.", "apihelp-query+redirects-paramvalue-prop-title": "Titel einer jeden Weiterleitung.", + "apihelp-query+redirects-param-namespace": "Schließt nur Seiten in diesen Namensräumen ein.", "apihelp-query+redirects-param-limit": "Wie viele Weiterleitungen zurückgegeben werden sollen.", "apihelp-query+revisions-param-tag": "Listet nur Versionen auf, die mit dieser Markierung markiert sind.", "apihelp-query+revisions+base-param-prop": "Zurückzugebende Eigenschaften jeder Version:", @@ -794,13 +805,18 @@ "apihelp-query+search-example-simple": "Nach meaning suchen.", "apihelp-query+search-example-text": "Texte nach meaning durchsuchen.", "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen", + "apihelp-query+stashimageinfo-param-sessionkey": "Alias für $1filekey, für die Rückwärtskompatibilität.", + "apihelp-query+stashimageinfo-example-simple": "Gibt Informationen für eine gespeicherte Datei zurück.", + "apihelp-query+stashimageinfo-example-params": "Gibt Vorschaubilder für zwei gespeicherte Dateien zurück.", "apihelp-query+tags-description": "Änderungs-Tags auflisten.", "apihelp-query+tags-param-prop": "Zurückzugebende Eigenschaften:", "apihelp-query+tags-paramvalue-prop-name": "Ergänzt den Namen der Markierung.", "apihelp-query+tags-paramvalue-prop-displayname": "Ergänzt die Systemnachricht für die Markierung.", "apihelp-query+tags-paramvalue-prop-description": "Ergänzt die Beschreibung der Markierung.", "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten", + "apihelp-query+templates-param-limit": "Wie viele Vorlagen zurückgegeben werden sollen.", "apihelp-query+templates-param-dir": "Die Auflistungsrichtung.", + "apihelp-query+tokens-param-type": "Typen der Token, die abgerufen werden sollen.", "apihelp-query+transcludedin-param-prop": "Zurückzugebende Eigenschaften:", "apihelp-query+transcludedin-paramvalue-prop-pageid": "Seitenkennung jeder Seite.", "apihelp-query+usercontribs-description": "Alle Bearbeitungen von einem Benutzer abrufen.", @@ -898,7 +914,7 @@ "apihelp-userrights-description": "Ändert die Gruppenzugehörigkeit eines Benutzers.", "apihelp-userrights-param-user": "Benutzername.", "apihelp-userrights-param-userid": "Benutzerkennung.", - "apihelp-userrights-param-add": "Fügt den Benutzer zu diesen Gruppen hinzu.", + "apihelp-userrights-param-add": "Fügt den Benutzer zu diesen Gruppen hinzu oder falls er bereits Mitglied ist, aktualisiert den Ablauf seiner Mitgliedschaft in dieser Gruppe.", "apihelp-userrights-param-remove": "Entfernt den Benutzer von diesen Gruppen.", "apihelp-userrights-param-reason": "Grund für die Änderung.", "apihelp-userrights-param-tags": "Auf den Eintrag im Benutzerrechte-Logbuch anzuwendende Änderungsmarkierungen.", @@ -977,20 +993,31 @@ "api-help-right-apihighlimits": "Höhere Beschränkungen in API-Anfragen verwenden (langsame Anfragen: $1; schnelle Anfragen: $2). Die Beschränkungen für langsame Anfragen werden auch auf Mehrwertparameter angewandt.", "api-help-open-in-apisandbox": "[in Spielwiese öffnen]", "api-help-authmanagerhelper-messageformat": "Zu verwendendes Format zur Rückgabe von Nachrichten.", + "apierror-cannot-async-upload-file": "Die Parameter async und file können nicht kombiniert werden. Falls du eine asynchrone Verarbeitung deiner hochgeladenen Datei wünschst, lade sie zuerst mithilfe des Parameters stash auf den Speicher hoch. Veröffentliche anschließend die gespeicherte Datei asynchron mithilfe filekey und async.", "apierror-invaliduserid": "Die Benutzerkennung $1 ist nicht gültig.", "apierror-nosuchuserid": "Es gibt keinen Benutzer mit der Kennung $1.", "apierror-pagelang-disabled": "Das Ändern der Sprache von Seiten ist auf diesem Wiki nicht erlaubt.", + "apierror-protect-invalidaction": "Ungültiger Schutztyp „$1“.", + "apierror-readonly": "Das Wiki ist derzeit im schreibgeschützten Modus.", + "apierror-revwrongpage": "Die Version $1 ist keine Version von $2.", + "apierror-sectionreplacefailed": "Der aktualisierte Abschnitt konnte nicht zusammengeführt werden.", "apierror-stashinvalidfile": "Ungültige gespeicherte Datei.", "apierror-stashnosuchfilekey": "Kein derartiger Dateischlüssel: $1.", "apierror-stashwrongowner": "Falscher Besitzer: $1", "apierror-systemblocked": "Du wurdest von MediaWiki automatisch gesperrt.", "apierror-unknownerror-nocode": "Unbekannter Fehler.", "apierror-unknownerror": "Unbekannter Fehler: „$1“.", + "apierror-unknownformat": "Nicht erkanntes Format „$1“.", "apiwarn-invalidcategory": "„$1“ ist keine Kategorie.", "apiwarn-invalidtitle": "„$1“ ist kein gültiger Titel.", "apiwarn-notfile": "„$1“ ist keine Datei.", + "apiwarn-validationfailed-badpref": "Keine gültige Einstellung.", + "apiwarn-validationfailed-cannotset": "Kann nicht von diesem Modul festgelegt werden.", + "apiwarn-validationfailed-keytoolong": "Der Schlüssel ist zu lang. Es sind nicht mehr als $1 Bytes erlaubt.", + "apiwarn-validationfailed": "Validierungsfehler für $1: $2", "api-feed-error-title": "Fehler ($1)", "api-usage-docref": "Siehe $1 zur Verwendung der API.", + "api-usage-mailinglist-ref": "Abonniere die Mailingliste „mediawiki-api-announce“ auf <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> zum Feststellen von API-Veralterungen und „Breaking Changes“.", "api-credits-header": "Danksagungen", "api-credits": "API-Entwickler:\n* Roan Kattouw (Hauptentwickler von September 2007 bis 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Autor, Hauptentwickler von September 2006 bis September 2007)\n* Brad Jorsch (Hauptentwickler seit 2013)\n\nBitte sende deine Kommentare, Vorschläge und Fragen an mediawiki-api@lists.wikimedia.org\noder reiche einen Fehlerbericht auf https://phabricator.wikimedia.org/ ein." } diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json index c1fefd6c3f..d92d78b062 100644 --- a/includes/api/i18n/en.json +++ b/includes/api/i18n/en.json @@ -1228,6 +1228,7 @@ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Tags if the current user is blocked, by whom, and for what reason.", "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Adds a tag messages if the current user has pending messages.", "apihelp-query+userinfo-paramvalue-prop-groups": "Lists all the groups the current user belongs to.", + "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Lists groups that the current user has been explicitly assigned to, including the expiry date of each group membership.", "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lists all the groups the current user is automatically a member of.", "apihelp-query+userinfo-paramvalue-prop-rights": "Lists all the rights the current user has.", "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lists the groups the current user can add to and remove from.", @@ -1249,6 +1250,7 @@ "apihelp-query+users-param-prop": "Which pieces of information to include:", "apihelp-query+users-paramvalue-prop-blockinfo": "Tags if the user is blocked, by whom, and for what reason.", "apihelp-query+users-paramvalue-prop-groups": "Lists all the groups each user belongs to.", + "apihelp-query+users-paramvalue-prop-groupmemberships": "Lists groups that each user has been explicitly assigned to, including the expiry date of each group membership.", "apihelp-query+users-paramvalue-prop-implicitgroups": "Lists all the groups a user is automatically a member of.", "apihelp-query+users-paramvalue-prop-rights": "Lists all the rights each user has.", "apihelp-query+users-paramvalue-prop-editcount": "Adds the user's edit count.", @@ -1443,12 +1445,14 @@ "apihelp-userrights-description": "Change a user's group membership.", "apihelp-userrights-param-user": "User name.", "apihelp-userrights-param-userid": "User ID.", - "apihelp-userrights-param-add": "Add the user to these groups.", + "apihelp-userrights-param-add": "Add the user to these groups, or if they are already a member, update the expiry of their membership in that group.", + "apihelp-userrights-param-expiry": "Expiry timestamps. May be relative (e.g. 5 months or 2 weeks) or absolute (e.g. 2014-09-18T12:34:56Z). If only one timestamp is set, it will be used for all groups passed to the $1add parameter. Use infinite, indefinite, infinity, or never for a never-expiring user group.", "apihelp-userrights-param-remove": "Remove the user from these groups.", "apihelp-userrights-param-reason": "Reason for the change.", "apihelp-userrights-param-tags": "Change tags to apply to the entry in the user rights log.", "apihelp-userrights-example-user": "Add user FooBot to group bot, and remove from groups sysop and bureaucrat.", "apihelp-userrights-example-userid": "Add the user with ID 123 to group bot, and remove from groups sysop and bureaucrat.", + "apihelp-userrights-example-expiry": "Add user SometimeSysop to group sysop for 1 month.", "apihelp-validatepassword-description": "Validate a password against the wiki's password policies.\n\nValidity is reported as Good if the password is acceptable, Change if the password may be used for login but must be changed, or Invalid if the password is not usable.", "apihelp-validatepassword-param-password": "Password to validate.", @@ -1594,6 +1598,7 @@ "apierror-blockedfrommail": "You have been blocked from sending email.", "apierror-blocked": "You have been blocked from editing.", "apierror-botsnotsupported": "This interface is not supported for bots.", + "apierror-cannot-async-upload-file": "The parameters async and file cannot be combined. If you want asynchronous processing of your uploaded file, first upload it to stash (using the stash parameter) and then publish the stashed file asynchronously (using filekey and async).", "apierror-cannotreauthenticate": "This action is not available as your identity cannot be verified.", "apierror-cannotviewtitle": "You are not allowed to view $1.", "apierror-cantblock-email": "You don't have permission to block users from sending email through the wiki.", @@ -1799,6 +1804,7 @@ "api-feed-error-title": "Error ($1)", "api-usage-docref": "See $1 for API usage.", + "api-usage-mailinglist-ref": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes.", "api-exception-trace": "$1 at $2($3)\n$4", "api-credits-header": "Credits", "api-credits": "API developers:\n* Yuri Astrakhan (creator, lead developer Sep 2006–Sep 2007)\n* Roan Kattouw (lead developer Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (lead developer 2013–present)\n\nPlease send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org\nor file a bug report at https://phabricator.wikimedia.org/." diff --git a/includes/api/i18n/es.json b/includes/api/i18n/es.json index 534c359b9d..d411279adc 100644 --- a/includes/api/i18n/es.json +++ b/includes/api/i18n/es.json @@ -347,6 +347,8 @@ "apihelp-parse-param-pst": "Guardar previamente los cambios antes de transformar la entrada antes de analizarla. Sólo es válido cuando se utiliza con el texto.", "apihelp-parse-param-onlypst": "Guardar previamente los cambios antes de transformar (PST) en la entrada. Devuelve el mismo wikitexto, después de que un PST se ha aplicado. Sólo es válido cuando se utiliza con $1text.", "apihelp-parse-param-effectivelanglinks": "Incluye enlaces de idiomas proporcionados por las extensiones (para utilizar con $1prop=langlinks).", + "apihelp-parse-param-section": "Analizar solo el contenido de este número de sección.\n\nSi el valor es new, analiza $1text y $1sectiontitle como si se añadiera una nueva sección a la página.\n\nnew solo se permite cuando se especifique text.", + "apihelp-parse-param-sectiontitle": "Nuevo título de sección cuando section tiene el valor new.\n\nAl contrario que en la edición de páginas, no se sustituye por summary cuando se omite o su valor es vacío.", "apihelp-parse-param-disablelimitreport": "Omitir el informe de límite (\"NewPP limit report\") desde la salida del analizador.", "apihelp-parse-param-disablepp": "Usa $1disablelimitreport en su lugar.", "apihelp-parse-param-disableeditsection": "Omitir los enlaces de edición de sección de la salida del analizador.", @@ -419,6 +421,7 @@ "apihelp-query+alldeletedrevisions-param-user": "Listar solo las revisiones de este usuario.", "apihelp-query+alldeletedrevisions-param-excludeuser": "No listar las revisiones de este usuario.", "apihelp-query+alldeletedrevisions-param-namespace": "Listar solo las páginas en este espacio de nombres.", + "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "Nota: Debido al [[mw:Manual:$wgMiserMode|modo avaro]], usar juntos $1user y $1namespace puede dar lugar a que se devuelvan menos de $1limit antes de continuar. En casos extremos, podrían devolverse cero resultados.", "apihelp-query+alldeletedrevisions-param-generatetitles": "Cuando se utiliza como generador, generar títulos en lugar de identificadores de revisión.", "apihelp-query+alldeletedrevisions-example-user": "Listar las últimas 50 contribuciones borradas del usuario Example.", "apihelp-query+alldeletedrevisions-example-ns-main": "Listar las primeras 50 revisiones borradas en el espacio de nombres principal.", @@ -734,6 +737,7 @@ "apihelp-query+fileusage-param-prop": "Qué propiedades se obtendrán:", "apihelp-query+fileusage-paramvalue-prop-pageid": "Identificador de cada página.", "apihelp-query+fileusage-paramvalue-prop-title": "Título de cada página.", + "apihelp-query+fileusage-paramvalue-prop-redirect": "Marcar si la página es una redirección.", "apihelp-query+fileusage-param-namespace": "Incluir solo páginas de estos espacios de nombres.", "apihelp-query+fileusage-param-limit": "Cuántos se devolverán.", "apihelp-query+fileusage-param-show": "Muestra solo los elementos que cumplen estos criterios:\n;redirect: Muestra solamente redirecciones.\n;!redirect: Muestra solamente páginas que no son redirecciones.", @@ -897,6 +901,8 @@ "apihelp-query+protectedtitles-param-namespace": "Listar solo los títulos en estos espacios de nombres.", "apihelp-query+protectedtitles-param-level": "Listar solo títulos con estos niveles de protección.", "apihelp-query+protectedtitles-param-limit": "Cuántas páginas se devolverán.", + "apihelp-query+protectedtitles-param-start": "Empezar la enumeración en esta marca de tiempo de protección.", + "apihelp-query+protectedtitles-param-end": "Terminar la enumeración en esta marca de tiempo de protección.", "apihelp-query+protectedtitles-param-prop": "Qué propiedades se obtendrán:", "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Añade la marca de tiempo de cuando se añadió la protección.", "apihelp-query+protectedtitles-paramvalue-prop-user": "Agrega el usuario que agregó la protección.", @@ -910,6 +916,7 @@ "apihelp-query+querypage-param-page": "El nombre de la página especial. Recuerda, es sensible a mayúsculas y minúsculas.", "apihelp-query+querypage-param-limit": "Número de resultados que se devolverán.", "apihelp-query+querypage-example-ancientpages": "Devolver resultados de [[Special:Ancientpages]].", + "apihelp-query+random-description": "Obtener un conjunto de páginas aleatorias.\n\nLas páginas aparecen enumeradas en una secuencia fija, solo que el punto de partida es aleatorio. Esto quiere decir que, si, por ejemplo, Portada es la primera página aleatoria de la lista, Lista de monos ficticios siempre será la segunda, Lista de personas en sellos de Vanuatu la tercera, etc.", "apihelp-query+random-param-namespace": "Devolver solo las páginas de estos espacios de nombres.", "apihelp-query+random-param-limit": "Limita el número de páginas aleatorias que se devolverán.", "apihelp-query+random-param-redirect": "Usa $1filterredir=redirects en su lugar.", @@ -938,10 +945,12 @@ "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Añade información de registro (identificador de registro, tipo de registro, etc.) a las entradas de registro.", "apihelp-query+recentchanges-paramvalue-prop-tags": "Muestra las etiquetas de la entrada.", "apihelp-query+recentchanges-param-token": "Usa [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] en su lugar.", + "apihelp-query+recentchanges-param-show": "Muestra solo los elementos que cumplan estos criterios. Por ejemplo, para ver solo ediciones menores realizadas por usuarios conectados, introduce $1show=minor|!anon.", "apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.", "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.", "apihelp-query+recentchanges-param-toponly": "Enumerar solo las modificaciones que sean las últimas revisiones.", "apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.", + "apihelp-query+recentchanges-example-generator": "Obtener información de página de cambios recientes no patrullados.", "apihelp-query+redirects-description": "Devuelve todas las redirecciones a las páginas dadas.", "apihelp-query+redirects-param-prop": "Qué propiedades se obtendrán:", "apihelp-query+redirects-paramvalue-prop-pageid": "Identificador de página de cada redirección.", @@ -952,11 +961,19 @@ "apihelp-query+redirects-example-simple": "Mostrar una lista de las redirecciones a la [[Main Page|Portada]]", "apihelp-query+redirects-example-generator": "Obtener información sobre todas las redirecciones a la [[Main Page|Portada]].", "apihelp-query+revisions-paraminfo-singlepageonly": "Solo se puede usar con una sola página (modo n.º 2).", + "apihelp-query+revisions-param-startid": "Identificador de revisión a partir del cual empezar la enumeración.", + "apihelp-query+revisions-param-endid": "Identificador de revisión en el que detener la enumeración.", + "apihelp-query+revisions-param-start": "Marca de tiempo a partir de la cual empezar la enumeración.", "apihelp-query+revisions-param-end": "Enumerar hasta esta marca de tiempo.", "apihelp-query+revisions-param-user": "Incluir solo las revisiones realizadas por el usuario.", "apihelp-query+revisions-param-excludeuser": "Excluir las revisiones realizadas por el usuario.", "apihelp-query+revisions-param-tag": "Mostrar solo revisiones marcadas con esta etiqueta.", + "apihelp-query+revisions-example-content": "Obtener datos con el contenido de la última revisión de los títulos API y Main Page.", "apihelp-query+revisions-example-last5": "Mostrar las últimas 5 revisiones de la Main Page.", + "apihelp-query+revisions-example-first5": "Obtener las primeras 5 revisiones de Main Page.", + "apihelp-query+revisions-example-first5-after": "Obtener las primeras 5 revisiones de Main Page realizadas después de 2006-05-01.", + "apihelp-query+revisions-example-first5-not-localhost": "Obtener las primeras 5 revisiones de Main Page que no fueron realizadas por el usuario anónimo 127.0.0.1.", + "apihelp-query+revisions-example-first5-user": "Obtener las primeras 5 revisiones de Main Page que fueron realizadas por el usuario MediaWiki default.", "apihelp-query+revisions+base-param-prop": "Las propiedades que se obtendrán para cada revisión:", "apihelp-query+revisions+base-paramvalue-prop-ids": "El identificador de la revisión.", "apihelp-query+revisions+base-paramvalue-prop-flags": "Marcas de revisión (menor).", @@ -976,6 +993,7 @@ "apihelp-query+revisions+base-param-generatexml": "Generar el árbol de análisis sintáctico XML para el contenido de la revisión (requiere $1prop=content; reemplazado por $1prop=parsetree).", "apihelp-query+revisions+base-param-parse": "Analizar el contenido de la revisión (requiere $1prop=content). Por motivos de rendimiento, si se utiliza esta opción, el valor de $1limit es forzado a 1.", "apihelp-query+revisions+base-param-section": "Recuperar solamente el contenido de este número de sección.", + "apihelp-query+revisions+base-param-contentformat": "Formato de serialización utilizado para $1difftotext y esperado para la salida de contenido.", "apihelp-query+search-description": "Realizar una búsqueda de texto completa.", "apihelp-query+search-param-namespace": "Buscar sólo en estos espacios de nombres.", "apihelp-query+search-param-what": "Tipo de búsqueda que realizar.", @@ -1022,12 +1040,15 @@ "apihelp-query+siteinfo-paramvalue-prop-variables": "Devuelve una lista de identificadores variables.", "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devuelve una lista de los protocolos que se permiten en los enlaces externos.", "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devuelve los valores predeterminados de las preferencias del usuario.", + "apihelp-query+siteinfo-param-filteriw": "Devuelve solo entradas locales o solo entradas no locales del mapa interwiki.", "apihelp-query+siteinfo-param-numberingroup": "Muestra el número de usuarios en los grupos de usuarios.", "apihelp-query+siteinfo-example-simple": "Obtener información del sitio.", + "apihelp-query+siteinfo-example-interwiki": "Obtener una lista de prefijos interwiki locales.", "apihelp-query+stashimageinfo-description": "Devuelve información del archivo para archivos escondidos.", "apihelp-query+stashimageinfo-param-sessionkey": "Alias de $1filekey, para retrocompatibilidad.", "apihelp-query+stashimageinfo-example-simple": "Devuelve información para un archivo escondido.", "apihelp-query+stashimageinfo-example-params": "Devuelve las miniaturas de dos archivos escondidos.", + "apihelp-query+tags-description": "Enumerar las etiquetas de modificación.", "apihelp-query+tags-param-limit": "El número máximo de etiquetas para enumerar.", "apihelp-query+tags-param-prop": "Qué propiedades se obtendrán:", "apihelp-query+tags-paramvalue-prop-name": "Añade el nombre de la etiqueta.", @@ -1041,10 +1062,13 @@ "apihelp-query+templates-param-namespace": "Mostrar plantillas solamente en estos espacios de nombres.", "apihelp-query+templates-param-limit": "Cuántas plantillas se devolverán.", "apihelp-query+templates-param-dir": "La dirección en que ordenar la lista.", + "apihelp-query+templates-example-generator": "Obtener información sobre las páginas de las plantillas utilizadas en Main Page.", + "apihelp-query+templates-example-namespaces": "Obtener las páginas de los espacios de nombres {{ns:user}} y {{ns:template}} que están transcluidas en la página Main Page.", "apihelp-query+transcludedin-description": "Encuentra todas las páginas que transcluyan las páginas dadas.", "apihelp-query+transcludedin-param-prop": "Qué propiedades se obtendrán:", "apihelp-query+transcludedin-paramvalue-prop-pageid": "Identificador de cada página.", "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada página.", + "apihelp-query+transcludedin-paramvalue-prop-redirect": "Marcar si la página es una redirección.", "apihelp-query+transcludedin-param-namespace": "Incluir solo las páginas en estos espacios de nombres.", "apihelp-query+transcludedin-param-limit": "Cuántos se devolverán.", "apihelp-query+transcludedin-param-show": "Muestra solo los elementos que cumplen estos criterios:\n;redirect: Muestra solamente redirecciones.\n;!redirect: Muestra solamente páginas que no son redirecciones.", @@ -1061,6 +1085,7 @@ "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Añade el comentario analizado de la edición.", "apihelp-query+usercontribs-paramvalue-prop-size": "Añade el nuevo tamaño de la edición.", "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Añade la diferencia de tamaño de la edición respecto de su progenitora.", + "apihelp-query+usercontribs-paramvalue-prop-flags": "Añade las marcas de la edición.", "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta ediciones verificadas.", "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.", "apihelp-query+usercontribs-param-show": "Mostrar solo los elementos que coinciden con estos criterios. Por ejemplo, solo ediciones no menores: $2show=!minor.\n\nSi se establece $2show=patrolled o $2show=!patrolled, las revisiones más antiguas que [[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]] ($1 {{PLURAL:$1|segundo|segundos}}) no se mostrarán.", @@ -1094,7 +1119,12 @@ "apihelp-query+users-paramvalue-prop-rights": "Enumera todos los permisos que tiene cada usuario.", "apihelp-query+users-paramvalue-prop-editcount": "Añade el número de ediciones del usuario.", "apihelp-query+users-paramvalue-prop-registration": "Añade la marca de tiempo del registro del usuario.", + "apihelp-query+users-paramvalue-prop-emailable": "Marca si el usuario puede y quiere recibir correo electrónico a través de [[Special:Emailuser]].", "apihelp-query+users-paramvalue-prop-gender": "Etiqueta el género del usuario. Devuelve \"masculino\", \"femenino\" o \"desconocido\".", + "apihelp-query+users-paramvalue-prop-cancreate": "Indica si se puede crear una cuenta para nombres de usuario válidos pero no registrados.", + "apihelp-query+users-param-users": "Una lista de usuarios de los que obtener información.", + "apihelp-query+users-param-userids": "Una lista de identificadores de usuarios de los que obtener información.", + "apihelp-query+users-param-token": "Usa [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] en su lugar.", "apihelp-query+users-example-simple": "Devolver información del usuario Example.", "apihelp-query+watchlist-description": "Obtener los cambios recientes de las páginas de la lista de seguimiento del usuario actual.", "apihelp-query+watchlist-param-start": "El sello de tiempo para comenzar la enumeración", @@ -1124,6 +1154,7 @@ "apihelp-query+watchlist-paramvalue-type-log": "Entradas del registro.", "apihelp-query+watchlist-paramvalue-type-categorize": "Cambios de pertenencia a categorías.", "apihelp-query+watchlist-param-owner": "Utilizado junto con $1token para acceder a la lista de seguimiento de otro usuario.", + "apihelp-query+watchlist-example-simple": "Enumera la última revisión de las páginas con cambios recientes de la lista de seguimiento del usuario actual.", "apihelp-query+watchlist-example-props": "Obtener información adicional sobre la última revisión de páginas con cambios recientes en la lista de seguimiento del usuario actual.", "apihelp-query+watchlist-example-allrev": "Obtener información sobre todos los cambios recientes de páginas de la lista de seguimiento del usuario actual.", "apihelp-query+watchlist-example-generator": "Obtener información de página de las páginas con cambios recientes de la lista de seguimiento del usuario actual.", @@ -1140,9 +1171,13 @@ "apihelp-query+watchlistraw-param-fromtitle": "Título (con el prefijo de espacio de nombres) desde el que se empezará a enumerar.", "apihelp-query+watchlistraw-param-totitle": "Título (con el prefijo de espacio de nombres) desde el que se dejará de enumerar.", "apihelp-query+watchlistraw-example-simple": "Listar las páginas de la lista de seguimiento del usuario actual.", + "apihelp-query+watchlistraw-example-generator": "Obtener información de las páginas de la lista de seguimiento del usuario actual.", "apihelp-removeauthenticationdata-description": "Elimina los datos de autentificación del usuario actual.", + "apihelp-removeauthenticationdata-example-simple": "Trata de eliminar los datos del usuario actual para FooAuthenticationRequest.", "apihelp-resetpassword-description": "Enviar un email de reinicialización de la contraseña a un usuario.", "apihelp-revisiondelete-description": "Eliminar y restaurar revisiones", + "apihelp-revisiondelete-param-target": "Título de la página para el borrado de la revisión, en caso de ser necesario para ese tipo.", + "apihelp-revisiondelete-param-ids": "Identificadores de las revisiones para borrar.", "apihelp-revisiondelete-param-hide": "Qué ocultar en cada revisión.", "apihelp-revisiondelete-param-show": "Qué mostrar en cada revisión.", "apihelp-revisiondelete-param-reason": "Motivo de la eliminación o restauración.", @@ -1150,13 +1185,24 @@ "apihelp-revisiondelete-example-revision": "Ocultar el contenido de la revisión 12345 de la página Main Page.", "apihelp-revisiondelete-example-log": "Ocultar todos los datos de la entrada de registro 67890 con el motivo BLP violation.", "apihelp-rollback-description": "Deshacer la última edición de la página.\n\nSi el último usuario que editó la página hizo varias ediciones consecutivas, todas ellas serán revertidas.", + "apihelp-rollback-param-title": "Título de la página que revertir. No se puede usar junto con $1pageid.", + "apihelp-rollback-param-pageid": "Identificador de la página que revertir. No se puede usar junto con $1title.", + "apihelp-rollback-param-tags": "Etiquetas que aplicar a la reversión.", + "apihelp-rollback-param-user": "Nombre del usuario cuyas ediciones se van a revertir.", "apihelp-rollback-param-summary": "Resumen de edición personalizado. Si se deja vacío se utilizará el predeterminado.", "apihelp-rollback-param-markbot": "Marcar las acciones revertidas y la reversión como ediciones por bots.", "apihelp-rollback-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, usar preferencias o no cambiar seguimiento.", + "apihelp-rollback-example-simple": "Revertir las últimas ediciones de la página Main Page por el usuario Example.", + "apihelp-rollback-example-summary": "Revertir las últimas ediciones de la página Main Page por el usuario de IP 192.0.2.5 con resumen Reverting vandalism, y marcar esas ediciones y la reversión como ediciones realizadas por bots.", "apihelp-rsd-description": "Exportar un esquema RSD (Really Simple Discovery; Descubrimiento Muy Simple).", "apihelp-rsd-example-simple": "Exportar el esquema RSD.", + "apihelp-setnotificationtimestamp-description": "Actualizar la marca de tiempo de notificación de las páginas en la lista de seguimiento.\n\nEsto afecta a la función de resaltado de las páginas modificadas en la lista de seguimiento y al envío de correo electrónico cuando la preferencia \"{{int:tog-enotifwatchlistpages}}\" está habilitada.", + "apihelp-setnotificationtimestamp-param-timestamp": "Marca de tiempo en la que fijar la marca de tiempo de notificación.", + "apihelp-setnotificationtimestamp-param-torevid": "Revisión a la que fijar la marca de tiempo de notificación (una sola página).", + "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revisión a la que fijar la marca de tiempo de notificación más reciente (una sola página).", "apihelp-setnotificationtimestamp-example-all": "Restablecer el estado de notificación para la totalidad de la lista de seguimiento.", "apihelp-setnotificationtimestamp-example-page": "Restablecer el estado de notificación de Main page.", + "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fijar la marca de tiempo de notificación de Main page para que todas las ediciones posteriores al 1 de enero de 2012 estén consideradas como no vistas.", "apihelp-setnotificationtimestamp-example-allpages": "Restablecer el estado de notificación de las páginas del espacio de nombres {{ns:user}}.", "apihelp-setpagelanguage-description": "Cambiar el idioma de una página.", "apihelp-setpagelanguage-description-disabled": "En este wiki no se permite modificar el idioma de las páginas.\n\nActiva [[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]] para utilizar esta acción.", @@ -1176,8 +1222,13 @@ "apihelp-stashedit-param-baserevid": "Identificador de la revisión de base.", "apihelp-stashedit-param-summary": "Resumen de cambios.", "apihelp-tag-description": "Añadir o borrar etiquetas de modificación de revisiones individuales o entradas de registro.", + "apihelp-tag-param-rcid": "Uno o más identificadores de cambios recientes a los que añadir o borrar la etiqueta.", + "apihelp-tag-param-revid": "Uno o más identificadores de revisión a los que añadir o borrar la etiqueta.", "apihelp-tag-param-logid": "Uno o más identificadores de entradas del registro a los que agregar o eliminar la etiqueta.", + "apihelp-tag-param-add": "Etiquetas que añadir. Solo se pueden añadir etiquetas definidas manualmente.", + "apihelp-tag-param-remove": "Etiquetas que borrar. Solo se pueden borrar etiquetas definidas manualmente o completamente indefinidas.", "apihelp-tag-param-reason": "Motivo del cambio.", + "apihelp-tag-param-tags": "Etiquetas que aplicar a la entrada de registro que se generará como resultado de esta acción.", "apihelp-tag-example-rev": "Añadir la etiqueta vandalism al identificador de revisión 123 sin especificar un motivo", "apihelp-tag-example-log": "Eliminar la etiqueta spam de la entrada del registro con identificador 123 con el motivo Wrongly applied", "apihelp-unblock-description": "Desbloquear un usuario.", @@ -1278,6 +1329,8 @@ "api-help-param-multi-all": "Para especificar todos los valores, utiliza $1.", "api-help-param-default": "Predeterminado: $1", "api-help-param-default-empty": "Predeterminado: (vacío)", + "api-help-param-disabled-in-miser-mode": "Deshabilitado debido al [[mw:Manual:$wgMiserMode|modo avaro]].", + "api-help-param-limited-in-miser-mode": "Nota: Debido al [[mw:Manual:$wgMiserMode|modo avaro]], usar esto puede dar lugar a que se devuelvan menos de $1limit antes de continuar. En casos extremos, podrían devolverse cero resultados.", "api-help-param-continue": "Cuando haya más resultados disponibles, utiliza esto para continuar.", "api-help-param-no-description": "(sin descripción)", "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:", @@ -1352,6 +1405,8 @@ "apierror-invalidurlparam": "Valor no válido para $1urlparam ($2=$3).", "apierror-invaliduser": "Nombre de usuario «$1» no válido.", "apierror-invaliduserid": "El identificador de usuario $1 no es válido.", + "apierror-mimesearchdisabled": "La búsqueda MIME está deshabilitada en el modo avaro.", + "apierror-missingcontent-pageid": "Contenido faltante para la página con identificador $1.", "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|El parámetro|Al menos uno de los parámetros}} $1 es necesario.", "apierror-missingparam-one-of": "{{PLURAL:$2|El parámetro|Uno de los parámetros}} $1 es necesario.", "apierror-missingparam": "Se debe establecer el parámetro $1.", @@ -1382,10 +1437,13 @@ "apierror-nosuchsection-what": "No hay ninguna sección $1 en $2.", "apierror-nosuchuserid": "No hay ningún usuario con ID $1.", "apierror-notarget": "No has especificado un destino válido para esta acción.", + "apierror-notpatrollable": "La revisión r$1 no se puede patrullar por ser demasiado antigua.", "apierror-opensearch-json-warnings": "No se pueden representar los avisos en formato JSON de OpenSearch.", "apierror-pagecannotexist": "En este espacio de nombres no se permiten páginas reales.", + "apierror-pagedeleted": "La página ha sido borrada en algún momento desde que obtuviste su marca de tiempo.", "apierror-pagelang-disabled": "En este wiki no se puede cambiar el idioma de una página.", "apierror-paramempty": "El parámetro $1 no puede estar vacío.", + "apierror-parsetree-notwikitext-title": "prop=parsetree solo es compatible con el contenido en wikitexto. $1 usa el modelo de contenido $2.", "apierror-permissiondenied": "No tienes permiso para $1.", "apierror-permissiondenied-generic": "Permiso denegado.", "apierror-permissiondenied-unblock": "No tienes permiso para desbloquear usuarios.", @@ -1400,6 +1458,7 @@ "apierror-sectionsnotsupported": "Las secciones no son compatibles con el modelo de contenido $1.", "apierror-sectionsnotsupported-what": "Las secciones no son compatibles con $1.", "apierror-show": "Parámetro incorrecto: no se pueden proporcionar valores mutuamente excluyentes.", + "apierror-sizediffdisabled": "La diferencia de tamaño está deshabilitada en el modo avaro.", "apierror-spamdetected": "Tu edición fue rechazada por contener un fragmento de spam: $1.", "apierror-specialpage-cantexecute": "No tienes permiso para ver los resultados de esta página especial.", "apierror-stashwrongowner": "Propietario incorrecto: $1", diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json index 52a526d652..3f8fa9df6b 100644 --- a/includes/api/i18n/fr.json +++ b/includes/api/i18n/fr.json @@ -1160,6 +1160,7 @@ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.", "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Ajoute une balise messages si l’utilisateur actuel a des messages en cours.", "apihelp-query+userinfo-paramvalue-prop-groups": "Liste tous les groupes auxquels appartient l’utilisateur actuel.", + "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "Liste les groupes auxquels l’utilisateur actuel a été explicitement affecté, avec la date d’expiration de chaque appartenance au groupe.", "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Liste tous les groupes dont l’utilisateur actuel est automatiquement membre.", "apihelp-query+userinfo-paramvalue-prop-rights": "Liste tous les droits qu’a l’utilisateur actuel.", "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.", @@ -1180,6 +1181,7 @@ "apihelp-query+users-param-prop": "Quelles informations inclure :", "apihelp-query+users-paramvalue-prop-blockinfo": "Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.", "apihelp-query+users-paramvalue-prop-groups": "Liste tous les groupes auquel appartient chaque utilisateur.", + "apihelp-query+users-paramvalue-prop-groupmemberships": "Liste les groupes auxquels chaque utilisateur a été explicitement affecté, avec la date d’expiration de l’appartenance à chaque groupe.", "apihelp-query+users-paramvalue-prop-implicitgroups": "Liste tous les groupes dont un utilisateur est automatiquement membre.", "apihelp-query+users-paramvalue-prop-rights": "Liste tous les droits qu’a un utilisateur.", "apihelp-query+users-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur.", @@ -1357,12 +1359,14 @@ "apihelp-userrights-description": "Modifier l’appartenance d’un utilisateur à un groupe.", "apihelp-userrights-param-user": "Nom d’utilisateur.", "apihelp-userrights-param-userid": "ID de l’utilisateur.", - "apihelp-userrights-param-add": "Ajouter l’utilisateur à ces groupes.", + "apihelp-userrights-param-add": "Ajouter l’utilisateur à ces groupes, ou s’ils sont déjà membres, mettre à jour la date d’expiration de leur appartenance à ce groupe.", + "apihelp-userrights-param-expiry": "Horodatages d’expiration. Peuvent être relatifs (par ex. 5 mois ou 2 semaines) ou absolus (par ex. 2014-09-18T12:34:56Z). Si uniquement un horodatage est fixé, il sera utilisé pour tous les groupes passés au paramètre $1add. Utiliser infinite, indefinite, infinity, ou never pour une lien utilisateur-groupe qui n’expire jamais.", "apihelp-userrights-param-remove": "Supprimer l’utilisateur de ces groupes.", "apihelp-userrights-param-reason": "Motif pour la modification.", "apihelp-userrights-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal des droits utilisateur.", "apihelp-userrights-example-user": "Ajouter l’utilisateur FooBot au groupe bot, et le supprimer des groupes sysop et bureaucrat.", "apihelp-userrights-example-userid": "Ajouter l’utilisateur d’ID 123 au groupe robot, et le supprimer des groupes sysop et bureaucrate.", + "apihelp-userrights-example-expiry": "Ajouter l'utilisateur SometimeSysop au groupe sysop pour 1 mois.", "apihelp-validatepassword-description": "Valider un mot de passe en suivant les règles des mots de passe du wiki.\n\nLa validation est Good si le mot de passe est acceptable, Change s'il peut être utilisé pour se connecter et doit être changé, ou Invalid s'il n'est pas utilisable.", "apihelp-validatepassword-param-password": "Mot de passe à valider.", "apihelp-validatepassword-param-user": "Nom de l'utilisateur, pour tester la création de compte. L'utilisateur ne doit pas déja exister.", @@ -1494,6 +1498,7 @@ "apierror-blockedfrommail": "Vous avez été bloqué pour l’envoi de courriel.", "apierror-blocked": "Vous avez été bloqué pour modifier.", "apierror-botsnotsupported": "Cette interface n’est pas supportée pour les robots.", + "apierror-cannot-async-upload-file": "Les paramètres async et file ne peuvent pas être combinés. Si vous voulez un traitement asynchrone de votre fichier téléchargé, importez-le d’abord dans la réserve (en utilisant le paramètre stash) puis publiez le fichier importé de façon asynchrone (en utilisant filekey et async).", "apierror-cannotreauthenticate": "Cette action n’est pas disponible car votre identité ne peut pas être vérifiée.", "apierror-cannotviewtitle": "Vous n’êtes pas autorisé à voir $1.", "apierror-cantblock-email": "Vous n’avez pas le droit de bloquer des utilisateurs pour envoyer des courriels via ce wiki.", @@ -1696,6 +1701,7 @@ "apiwarn-wgDebugAPI": "Avertissement de sécurité: $wgDebugAPI est activé.", "api-feed-error-title": "Erreur ($1)", "api-usage-docref": "Voir $1 concernant l'utilisation de l'API.", + "api-usage-mailinglist-ref": "S’abonner à la liste de diffusion mediawiki-api-announce sur <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> pour les signalisations d’obsolescence de l’API ou de modifications en rupture.", "api-exception-trace": "$1 à $2($3)\n$4", "api-credits-header": "Remerciements", "api-credits": "Développeurs de l’API :\n* Roan Kattouw (développeur en chef Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (créateur, développeur en chef Sept. 2006–Sept. 2007)\n* Brad Jorsch (développeur en chef depuis 2013)\n\nVeuillez envoyer vos commentaires, suggestions et questions à mediawiki-api@lists.wikimedia.org\nou remplir un rapport de bogue sur https://phabricator.wikimedia.org/." diff --git a/includes/api/i18n/it.json b/includes/api/i18n/it.json index 8c76914f6d..727ce02f00 100644 --- a/includes/api/i18n/it.json +++ b/includes/api/i18n/it.json @@ -612,7 +612,7 @@ "apihelp-upload-example-url": "Carica da un URL.", "apihelp-userrights-param-user": "Nome utente.", "apihelp-userrights-param-userid": "ID utente.", - "apihelp-userrights-param-add": "Aggiungi l'utente a questi gruppi.", + "apihelp-userrights-param-add": "Aggiungere l'utente a questi gruppi, o se sono già membri, aggiornare la scadenza della loro appartenenza a quel gruppo.", "apihelp-userrights-param-remove": "Rimuovi l'utente da questi gruppi.", "apihelp-userrights-param-reason": "Motivo del cambiamento.", "apihelp-validatepassword-description": "Convalida una password seguendo le politiche del wiki sulle password.\n\nLa validità è riportata come Good se la password è accettabile, Change se la password può essere utilizzata per l'accesso ma deve essere modificata, o Invalid se la password non è utilizzabile.", diff --git a/includes/api/i18n/ko.json b/includes/api/i18n/ko.json index dfe77e3058..b91b8069da 100644 --- a/includes/api/i18n/ko.json +++ b/includes/api/i18n/ko.json @@ -48,6 +48,7 @@ "apihelp-block-param-allowusertalk": "자신의 토론 문서를 편집할 수 있도록 허용합니다. ([[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]] 값에 따라 다름)", "apihelp-block-param-reblock": "사용자가 이미 차단된 경우, 기존 차단 설정을 바꿉니다.", "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.", + "apihelp-block-param-tags": "차단 기록의 항목에 적용할 태그를 변경합니다.", "apihelp-block-example-ip-simple": "IP 192.0.2.5에 대해 First strike라는 이유로 3일 간 차단하기", "apihelp-block-example-user-complex": "사용자 Vandal을 Vandalism이라는 이유로 무기한 차단하며 계정 생성 및 이메일 발송을 막기", "apihelp-changeauthenticationdata-description": "현재 사용자의 인증 데이터를 변경합니다.", @@ -159,7 +160,7 @@ "apihelp-imagerotate-description": "하나 이상의 그림을 회전합니다.", "apihelp-imagerotate-param-rotation": "시계 방향으로 회전할 그림의 각도.", "apihelp-import-param-xml": "업로드한 XML 파일.", - "apihelp-login-param-name": "계정 이름.", + "apihelp-login-param-name": "사용자 이름.", "apihelp-login-param-password": "비밀번호.", "apihelp-login-param-domain": "도메인 (선택).", "apihelp-login-param-token": "처음 요청에서 로그인 토큰을 취득했습니다.", @@ -177,6 +178,7 @@ "apihelp-move-param-watch": "현재 사용자의 주시 문서에 이 문서와 넘겨주기 문서를 추가하기", "apihelp-move-param-unwatch": "현재 사용자의 주시 문서에 이 문서와 넘겨주기 문서를 제거하기", "apihelp-move-param-ignorewarnings": "모든 경고 무시하기", + "apihelp-move-example-move": "기존 제목에서 대상 제목으로 넘겨주기를 만들지 않고 이동하기.", "apihelp-opensearch-description": "OpenSearch 프로토콜을 이용하여 위키 검색하기", "apihelp-opensearch-param-search": "문자열 검색", "apihelp-opensearch-param-limit": "반환할 결과의 최대 수", @@ -215,6 +217,7 @@ "apihelp-parse-example-page": "페이지의 구문을 분석합니다.", "apihelp-parse-example-text": "위키텍스트의 구문을 분석합니다.", "apihelp-parse-example-summary": "요약을 구문 분석합니다.", + "apihelp-patrol-example-revid": "판을 점검합니다.", "apihelp-protect-description": "문서의 보호 수준을 변경합니다.", "apihelp-protect-param-reason": "보호 또는 보호 해제의 이유.", "apihelp-protect-example-protect": "문서 보호", @@ -489,6 +492,7 @@ "apihelp-unblock-param-user": "차단을 해제할 사용자 이름, IP 주소, IP 주소 대역입니다. $1id 또는 $1userid와(ê³¼) 함께 사용할 수 없습니다.", "apihelp-unblock-param-userid": "차단을 해제할 사용자 ID입니다. $1id 또는 $1user와(ê³¼) 함께 사용할 수 없습니다.", "apihelp-unblock-param-reason": "차단 해제 이유.", + "apihelp-unblock-param-tags": "차단 기록의 항목에 적용할 태그를 변경합니다.", "apihelp-upload-param-ignorewarnings": "모든 경고를 무시합니다.", "apihelp-userrights-param-user": "사용자 이름.", "apihelp-userrights-param-userid": "사용자 ID.", @@ -547,8 +551,13 @@ "api-help-permissions-granted-to": "{{PLURAL:$1|다음 그룹에 부여됨}}: $2", "api-help-right-apihighlimits": "API 쿼리에서 더 높은 제한 사용 (느린 쿼리: $1, 빠른 쿼리: $2) 느린 쿼리에 대한 제한은 다중값 매개변수에도 적용됩니다.", "api-help-open-in-apisandbox": "[연습장에서 열기]", + "api-help-authmanager-general-usage": "이 모듈을 사용하는 일반적인 절차는 다음과 같습니다:\n# amirequestsfor=$4와 함께 [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]에서 사용할 수 있는 필드와 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]의 토큰을 가져옵니다.\n# 사용자에게 필드를 제시하고 사용자의 제출 사항을 취득합니다.\n# $1returnurl 및 관련된 모든 필드를 제공, 이 모듈에 전달합니다.\n# 응답 시 status를 확인합니다.\n#* PASS 또는 FAIL을 수신한 경우 작업은 끝난 것입니다. 동작은 성공하였거나 그렇지 않은 경우입니다.\n#* UI를 수신한 경우 사용자에게 새로운 필드를 제시하고 사용자의 제출 사항을 취득합니다. ê·¸ 뒤 $1continue 및 관련된 모든 필드 집합과 함께 이 모듈에 전달하고 단계 4를 반복합니다.\n#* REDIRECT를 수신한 경우, 사용자를 redirecttarget으로 넘겨준 다음 $1returnurl로 반환될 때까지 기다립니다. ê·¸ 뒤 $1continue 및 반환 URL에 전달되는, 모든 관련 필드와 함께 이 모듈에 전달하고 단계 4를 반복합니다.\n#* RESTART를 수실한 경우 인증은 동작했으나 연결된 사용자 계정이 없다는 것을 의미합니다. UI나 FAIL로 간주할 수 있습니다.", + "api-help-authmanagerhelper-requests": "amirequestsfor=$1와(ê³¼) 함께 [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]에서 반환된 id를 통해, 또는 이 모듈의 과거 응답으로부터 이 인증 요청만을 사용합니다.", "api-help-authmanagerhelper-request": "amirequestsfor=$1을(를) 지정하여 [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]가 반환한 id를 통해 이 인증 요청을 사용합니다.", "api-help-authmanagerhelper-messageformat": "반환 메시지에 사용할 형식.", + "api-help-authmanagerhelper-mergerequestfields": "모든 인증 요청에 대한 필드 정보를 하나의 배열로 합칩니다.", + "api-help-authmanagerhelper-preservestate": "가능하면 과거에 실패한 로그인 시도의 상태를 보존합니다.", + "api-help-authmanagerhelper-continue": "이 요청은 초기 UI 또는 REDIRECT 응답 이후에 계속됩니다. 이것 또는 $1returnurl 중 하나가 필요합니다.", "api-help-authmanagerhelper-additional-params": "이 모듈은 사용 가능한 인증 요청에 따라 추가 변수를 허용합니다. 사용 가능한 요청 및 사용되는 필드를 결정하려면 amirequestsfor=$1(또는 해당되는 경우 이 모듈의 과거 응답)ê³¼ 함께 [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]을(를) 사용하십시오.", "apierror-articleexists": "작성하려는 문서가 이미 만들어져 있습니다.", "apierror-autoblocked": "사용자의 IP 주소는 차단된 사용자에 의해 사용되었으므로 자동으로 차단된 상태입니다.", diff --git a/includes/api/i18n/nl.json b/includes/api/i18n/nl.json index fc3fe7b490..de9f1a415c 100644 --- a/includes/api/i18n/nl.json +++ b/includes/api/i18n/nl.json @@ -29,13 +29,17 @@ "apihelp-main-param-servedby": "Voeg de hostnaam van de server die de aanvraag heeft afgehandeld toe aan het antwoord.", "apihelp-main-param-curtimestamp": "Huidige tijd aan het antwoord toevoegen.", "apihelp-main-param-responselanginfo": "Toon de talen gebruikt voor uselang en errorlang in het resultaat.", + "apihelp-main-param-errorlang": "De taal om te gebruiken voor waarschuwingen en fouten. [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] met siprop=languages toont een lijst van taalcodes, of stel inhoud in om gebruik te maken van de inhoudstaal van deze wiki, of stel uselang in om gebruik te maken van dezelfde waarde als de uselang parameter.", + "apihelp-main-param-errorsuselocal": "Indien ingesteld maken foutmeldingen gebruik van lokaal-aangepaste berichten in de {{ns:MediaWiki}} naamruimte.", "apihelp-block-description": "Gebruiker blokkeren.", "apihelp-block-param-user": "Gebruikersnaam, IP-adres of IP-range om te blokkeren. Kan niet samen worden gebruikt me $1userid", "apihelp-block-param-userid": "Gebruikers-ID om te blokkeren. Kan niet worden gebruikt in combinatie met $1user.", + "apihelp-block-param-expiry": "Vervaldatum. Kan relatief zijn (bijv. 5 months of 2 weeks) of absoluut (2014-09-18T12:34:56Z). Indien ingesteld op infinite, indefinite, of never verloopt de blokkade nooit.", "apihelp-block-param-reason": "Reden voor blokkade.", "apihelp-block-param-anononly": "Alleen anonieme gebruikers blokkeren (uitschakelen van anonieme bewerkingen via dit IP-adres)", "apihelp-block-param-nocreate": "Voorkom registeren van accounts.", "apihelp-block-param-autoblock": "Blokkeer automatisch het laatst gebruikte IP-adres en ieder volgend IP-adres van waaruit ze proberen aan te melden.", + "apihelp-block-param-noemail": "Gebruiker weerhouden van het sturen van e-mail. (Vereist het blockemail recht).", "apihelp-block-param-hidename": "Verberg de gebruikersnaam uit het blokkeerlogboek. (Vereist het hideuser recht).", "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.", "apihelp-block-param-watchuser": "De gebruikerspagina en overlegpagina van de gebruiker of het IP-adres volgen.", @@ -93,6 +97,7 @@ "apihelp-edit-param-prependtext": "Voeg deze tekst toe aan het begin van de pagina. Overschrijft $1text.", "apihelp-edit-param-appendtext": "Voeg deze tekst toe aan het begin van de pagina. Overschrijft $1text.\n\nGebruik $1section=new in plaats van deze parameter om een nieuw kopje toe te voegen.", "apihelp-edit-param-undo": "Maak deze versie ongedaan. Overschrijft $1text, $1prependtext en $1appendtext.", + "apihelp-edit-param-undoafter": "Maak alle versies vanaf $1undo to deze ongedaan maken. Indien niet ingesteld wordt slechts één versie ongedaan gemaakt.", "apihelp-edit-param-redirect": "Doorverwijzingen automatisch oplossen.", "apihelp-edit-param-contentmodel": "Inhoudsmodel van de nieuwe inhoud.", "apihelp-edit-param-token": "Het token moet altijd worden verzonden als de laatste parameter, of tenminste na de $1text parameter.", @@ -115,7 +120,11 @@ "apihelp-feedcontributions-param-year": "Van jaar (en eerder).", "apihelp-feedcontributions-param-month": "Van maand (en eerder).", "apihelp-feedcontributions-param-deletedonly": "Alleen verwijderde bijdragen weergeven.", + "apihelp-feedcontributions-param-toponly": "Alleen bewerkingen die de nieuwste versies zijn weergeven.", + "apihelp-feedcontributions-param-newonly": "Alleen bewerkingen die nieuwe pagina's aanmaken weergeven.", "apihelp-feedcontributions-param-hideminor": "Verberg kleine bewerkingen.", + "apihelp-feedcontributions-param-showsizediff": "Toon het verschil in grootte tussen versies.", + "apihelp-feedcontributions-example-simple": "Toon bijdragen voor gebruiker Example.", "apihelp-feedrecentchanges-param-feedformat": "De indeling van de feed.", "apihelp-feedrecentchanges-param-namespace": "Naamruimte om de resultaten tot te beperken.", "apihelp-feedrecentchanges-param-invert": "Alle naamruimten behalve de geselecteerde.", @@ -134,12 +143,16 @@ "apihelp-filerevert-description": "Een oude versie van een bestand terugplaatsen.", "apihelp-filerevert-param-filename": "Doel bestandsnaam, zonder het Bestand: voorvoegsel.", "apihelp-filerevert-param-comment": "Opmerking voor het uploaden.", + "apihelp-filerevert-example-revert": "Zet Wiki.png terug naar de versie van 2011-03-05T15:27:40Z.", + "apihelp-help-description": "Toon help voor de opgegeven modules.", "apihelp-help-param-helpformat": "Indeling van de help uitvoer.", "apihelp-help-example-main": "Hulp voor de hoofdmodule.", "apihelp-help-example-submodules": "Hulp voor action=query en alle submodules.", "apihelp-help-example-recursive": "Alle hulp op een pagina.", "apihelp-help-example-help": "Help voor de help-module zelf.", "apihelp-imagerotate-description": "Een of meerdere afbeeldingen draaien.", + "apihelp-imagerotate-param-rotation": "Aantal graden om de afbeelding met de klok mee te draaien.", + "apihelp-imagerotate-param-tags": "Labels om toe te voegen aan de regel in het uploadlogboek.", "apihelp-imagerotate-example-simple": "Roteer File:Example.png met 90 graden.", "apihelp-imagerotate-example-generator": "Roteer alle afbeeldingen in Category:Flip met 180 graden.", "apihelp-import-description": "Importeer een pagina van een andere wiki, of van een XML bestand.\n\nMerk op dat de HTTP POST moet worden uitgevoerd als bestandsupload (bijv. door middel van multipart/form-data) wanneer een bestand wordt verstuurd voor de xml parameter.", @@ -148,6 +161,7 @@ "apihelp-import-param-interwikisource": "Voor interwiki imports: wiki om van te importeren.", "apihelp-import-param-namespace": "Importeren in deze naamruimte. Can niet samen gebruikt worden met $1rootpage.", "apihelp-import-param-rootpage": "Importeren als subpagina van deze pagina. Kan niet samen met $1namespace gebruikt worden.", + "apihelp-import-example-import": "Importeer [[meta:Help:ParserFunctions]] in naamruimte 100 met de volledige geschiedenis.", "apihelp-login-param-name": "Gebruikersnaam.", "apihelp-login-param-password": "Wachtwoord.", "apihelp-login-param-domain": "Domein (optioneel).", @@ -155,9 +169,12 @@ "apihelp-logout-description": "Afmelden en sessiegegevens wissen.", "apihelp-logout-example-logout": "Meldt de huidige gebruiker af.", "apihelp-managetags-param-tag": "Label om aan te maken, te activeren of te deactiveren. Voor het aanmaken van een label, mag het niet bestaan. Voor het verwijderen van een label, moet het bestaan. Voor het activeren van een label, moet het bestaan en mag het niet gebruikt worden door een uitbreiding. Voor het deactiveren van een label, moet het gebruikt worden en handmatig gedefinieerd zijn.", + "apihelp-managetags-example-create": "Maak een label met de naam spam aan met als reden For use in edit patrolling", + "apihelp-managetags-example-delete": "Verwijder het vandlaism label met de reden Misspelt", "apihelp-move-description": "Pagina hernoemen.", "apihelp-move-param-to": "Nieuwe paginanaam.", "apihelp-move-param-reason": "Reden voor de naamswijziging.", + "apihelp-move-param-movetalk": "Hernoem de overlegpagina, indien deze bestaat.", "apihelp-move-param-noredirect": "Geen doorverwijzing achterlaten.", "apihelp-move-param-watch": "Pagina en de omleiding toevoegen aan de volglijst van de huidige gebruiker.", "apihelp-move-param-unwatch": "Verwijder de pagina en de doorverwijzing van de volglijst van de huidige gebruiker.", @@ -181,6 +198,7 @@ "apihelp-options-param-optionvalue": "De waarde voor de optie opgegeven door $1optionname.", "apihelp-options-example-reset": "Alle voorkeuren opnieuw instellen.", "apihelp-options-example-change": "Voorkeuren wijzigen voor skin en hideminor.", + "apihelp-paraminfo-description": "Verkrijg informatie over API-modules.", "apihelp-parse-paramvalue-prop-categorieshtml": "Vraagt een HTML-versie van de categorieën op.", "apihelp-parse-example-page": "Een pagina verwerken.", "apihelp-parse-example-text": "Wikitext verwerken.", @@ -190,12 +208,17 @@ "apihelp-patrol-example-revid": "Een versie markeren als gecontroleerd.", "apihelp-protect-param-reason": "Reden voor opheffen van de beveiliging.", "apihelp-protect-example-protect": "Een pagina beveiligen", + "apihelp-purge-param-forcelinkupdate": "Werk de koppelingstabellen bij.", + "apihelp-purge-param-forcerecursivelinkupdate": "Werk de koppelingentabel bij, en werk de koppelingstabellen bij voor alle pagina's die gebruik maken van deze pagina als sjabloon.", "apihelp-query+allcategories-param-dir": "Richting om in te sorteren.", "apihelp-query+allcategories-paramvalue-prop-size": "Voegt het aantal pagina's in de categorie toe.", "apihelp-query+allcategories-paramvalue-prop-hidden": "Markeert categorieën die verborgen zijn met __HIDDENCAT__", "apihelp-query+alldeletedrevisions-param-tag": "Alleen versies weergeven met dit label.", "apihelp-query+alldeletedrevisions-param-excludeuser": "Toon geen versies door deze gebruiker.", "apihelp-query+alldeletedrevisions-param-namespace": "Toon alleen pagina's in deze naamruimte.", + "apihelp-query+allfileusages-paramvalue-prop-title": "Voegt de titel van het bestand toe.", + "apihelp-query+allfileusages-param-limit": "Hoeveel items er in totaal moeten worden getoond.", + "apihelp-query+allimages-example-recent": "Toon een lijst van recentlijk geüploade bestanden, vergelijkbaar met [[Special:NewFiles]].", "apihelp-query+alllinks-param-namespace": "De naamruimte om door te lopen.", "apihelp-query+alllinks-param-limit": "Hoeveel items er in totaal moeten worden getoond.", "apihelp-query+allmessages-param-enableparser": "Stel in om de parser in te schakelen, zorgt voor het voorverwerken van de wikitekst van een bericht (vervangen van magische woorden, de afhandeling van sjablonen, enzovoort).", diff --git a/includes/api/i18n/qqq.json b/includes/api/i18n/qqq.json index ef2ba8fde6..297f7ed164 100644 --- a/includes/api/i18n/qqq.json +++ b/includes/api/i18n/qqq.json @@ -667,7 +667,7 @@ "apihelp-query+deletedrevs-param-excludeuser": "{{doc-apihelp-param|query+deletedrevs|excludeuser}}", "apihelp-query+deletedrevs-param-namespace": "{{doc-apihelp-param|query+deletedrevs|namespace}}", "apihelp-query+deletedrevs-param-limit": "{{doc-apihelp-param|query+deletedrevs|limit}}", - "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}", + "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}\n{{doc-important|You can translate the word \"Deprecated\", but please do not alter the class=\"apihelp-deprecated\" attribute}}", "apihelp-query+deletedrevs-example-mode1": "{{doc-apihelp-example|query+deletedrevs}}", "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}", "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}", @@ -1038,8 +1038,8 @@ "apihelp-query+search-paramvalue-prop-sectiontitle": "{{doc-apihelp-paramvalue|query+search|prop|sectiontitle}}", "apihelp-query+search-paramvalue-prop-categorysnippet": "{{doc-apihelp-paramvalue|query+search|prop|categorysnippet}}", "apihelp-query+search-paramvalue-prop-isfilematch": "{{doc-apihelp-paramvalue|query+search|prop|isfilematch}}", - "apihelp-query+search-paramvalue-prop-score": "{{doc-apihelp-paramvalue|query+search|prop|score}}", - "apihelp-query+search-paramvalue-prop-hasrelated": "{{doc-apihelp-paramvalue|query+search|prop|hasrelated}}", + "apihelp-query+search-paramvalue-prop-score": "{{doc-apihelp-paramvalue|query+search|prop|score}}\n{{doc-important|Please do not alter the class=\"apihelp-deprecated\" attribute}}", + "apihelp-query+search-paramvalue-prop-hasrelated": "{{doc-apihelp-paramvalue|query+search|prop|hasrelated}}\n{{doc-important|Please do not alter the class=\"apihelp-deprecated\" attribute}}", "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}", "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}", "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}", @@ -1146,11 +1146,12 @@ "apihelp-query+userinfo-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+userinfo|prop|blockinfo}}", "apihelp-query+userinfo-paramvalue-prop-hasmsg": "{{doc-apihelp-paramvalue|query+userinfo|prop|hasmsg}}", "apihelp-query+userinfo-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+userinfo|prop|groups}}", + "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "{{doc-apihelp-paramvalue|query+userinfo|prop|groupmemberships}}", "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+userinfo|prop|implicitgroups}}", "apihelp-query+userinfo-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+userinfo|prop|rights}}", "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "{{doc-apihelp-paramvalue|query+userinfo|prop|changeablegroups}}", "apihelp-query+userinfo-paramvalue-prop-options": "{{doc-apihelp-paramvalue|query+userinfo|prop|options}}", - "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "{{doc-apihelp-paramvalue|query+userinfo|prop|preferencestoken}}", + "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "{{doc-apihelp-paramvalue|query+userinfo|prop|preferencestoken}}\n{{doc-important|You can translate the word \"Deprecated\", but please do not alter the class=\"apihelp-deprecated\" attribute}}", "apihelp-query+userinfo-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+userinfo|prop|editcount}}", "apihelp-query+userinfo-paramvalue-prop-ratelimits": "{{doc-apihelp-paramvalue|query+userinfo|prop|ratelimits}}", "apihelp-query+userinfo-paramvalue-prop-realname": "{{doc-apihelp-paramvalue|query+userinfo|prop|realname}}", @@ -1166,6 +1167,7 @@ "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop|paramvalues=1}}", "apihelp-query+users-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+users|prop|blockinfo}}", "apihelp-query+users-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+users|prop|groups}}", + "apihelp-query+users-paramvalue-prop-groupmemberships": "{{doc-apihelp-paramvalue|query+users|prop|groupmemberships}}", "apihelp-query+users-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+users|prop|implicitgroups}}", "apihelp-query+users-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+users|prop|rights}}", "apihelp-query+users-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+users|prop|editcount}}", @@ -1344,11 +1346,13 @@ "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}", "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}\n{{Identical|User ID}}", "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}", + "apihelp-userrights-param-expiry": "{{doc-apihelp-param|userrights|expiry}}", "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}", "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}", "apihelp-userrights-param-tags": "{{doc-apihelp-param|userrights|tags}}", "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}", "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}", + "apihelp-userrights-example-expiry": "{{doc-apihelp-example|userrights}}", "apihelp-validatepassword-description": "{{doc-apihelp-description|validatepassword}}", "apihelp-validatepassword-param-password": "{{doc-apihelp-param|validatepassword|password}}", "apihelp-validatepassword-param-user": "{{doc-apihelp-param|validatepassword|user}}", @@ -1486,6 +1490,7 @@ "apierror-blockedfrommail": "{{doc-apierror}}", "apierror-blocked": "{{doc-apierror}}", "apierror-botsnotsupported": "{{doc-apierror}}", + "apierror-cannot-async-upload-file": "{{doc-apierror}}", "apierror-cannotreauthenticate": "{{doc-apierror}}", "apierror-cannotviewtitle": "{{doc-apierror}}\n\nParameters:\n* $1 - Title.", "apierror-cantblock-email": "{{doc-apierror}}", @@ -1689,6 +1694,7 @@ "apiwarn-wgDebugAPI": "{{doc-apierror}}", "api-feed-error-title": "Used as a feed item title when an error occurs in action=feedwatchlist.\n\nParameters:\n* $1 - API error code\n{{Identical|Error}}", "api-usage-docref": "\n\nParameters:\n* $1 - URL of the API auto-generated documentation.", + "api-usage-mailinglist-ref": "{{doc-apierror}} Also used in the error response.", "api-exception-trace": "\n\nParameters:\n* $1 - Exception class.\n* $2 - File from which the exception was thrown.\n* $3 - Line number from which the exception was thrown.\n* $4 - Exception backtrace.", "api-credits-header": "Header for the API credits section in the API help output\n{{Identical|Credit}}", "api-credits": "API credits text, displayed in the API help output" diff --git a/includes/api/i18n/ru.json b/includes/api/i18n/ru.json index 9eb4a2efa7..2b9fc8aa97 100644 --- a/includes/api/i18n/ru.json +++ b/includes/api/i18n/ru.json @@ -22,7 +22,8 @@ "MaxBioHazard", "Kareyac", "Mailman", - "Ping08" + "Ping08", + "Ivan-r" ] }, "apihelp-main-description": "
\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n
\nСтатус: Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\nОшибочные запросы: Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\nТестирование: для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].", @@ -240,7 +241,7 @@ "apihelp-protect-example-unprotect": "Снять защиту страницы, установив ограничения all (т. е. любой желающий может принять меры).", "apihelp-protect-example-unprotect2": "Бер ниндәй сикләүҙәр ҡуймай биттән һаҡлауҙы алырға.", "apihelp-purge-param-forcelinkupdate": "Обновление связей таблиц.", - "apihelp-purge-param-forcerecursivelinkupdate": "Һылтанманы һәм таблицаны яңыртығыҙ һәм был битте шаблон итеп ҡулланған башҡа биттәр өсөн һылтанмаларҙы ла яңыртығыҙ.", + "apihelp-purge-param-forcerecursivelinkupdate": "Обновить таблицу ссылок для данной страницы, а также всех страниц, использующих данную как шаблон.", "apihelp-purge-example-generator": "Продувка первые 10 страниц в основном пространстве имен.", "apihelp-query-param-list": "Какие списки использовать", "apihelp-query-param-meta": "Какие метаданные использовать", diff --git a/includes/api/i18n/zh-hans.json b/includes/api/i18n/zh-hans.json index b88e72fb5d..026b489ca3 100644 --- a/includes/api/i18n/zh-hans.json +++ b/includes/api/i18n/zh-hans.json @@ -1352,12 +1352,13 @@ "apihelp-userrights-description": "更改一位用户的组成员。", "apihelp-userrights-param-user": "用户名。", "apihelp-userrights-param-userid": "用户ID。", - "apihelp-userrights-param-add": "将用户加入至这些组中。", + "apihelp-userrights-param-add": "将用户加入至这些组中,或如果其已作为成员,更新其所在用户组成员资格的终止时间。", "apihelp-userrights-param-remove": "将用户从这些组中移除。", "apihelp-userrights-param-reason": "更改原因。", "apihelp-userrights-param-tags": "要在用户权限日志中应用到实体的更改标签。", "apihelp-userrights-example-user": "将用户FooBot添加至bot用户组,并从sysop和bureaucrat组移除。", "apihelp-userrights-example-userid": "将ID为123的用户加入至机器人组,并将其从管理员和行政员组移除。", + "apihelp-userrights-example-expiry": "添加用户SometimeSysop至用户组sysop,为期1个月。", "apihelp-validatepassword-description": "验证密码是否符合wiki的密码方针。\n\n如果密码可以接受,就报告有效性为Good,如果密码可用于登录但必须更改,则报告为Change,或如果密码不可使用,则报告为Invalid。", "apihelp-validatepassword-param-password": "要验证的密码。", "apihelp-validatepassword-param-user": "用户名,供测试账户创建时使用。命名的用户必须不存在。", @@ -1489,6 +1490,7 @@ "apierror-blockedfrommail": "您已被封禁,不能发送电子邮件。", "apierror-blocked": "您已被封禁,不能编辑。", "apierror-botsnotsupported": "此界面不支持机器人。", + "apierror-cannot-async-upload-file": "参数async和file不能结合。如果您希望对您上传的文件进行不同处理,请将其首先上传至暂存处(使用stash参数),然后异步发布暂存文件(使用filekey和async)。", "apierror-cannotreauthenticate": "由于您的身份不能被验证,此操作不可用。", "apierror-cannotviewtitle": "您不被允许查看$1。", "apierror-cantblock-email": "您没有权限封禁用户通过wiki发送电子邮件。", @@ -1649,6 +1651,7 @@ "apiwarn-badurlparam": "不能为$2解析$1urlparam。请只使用宽和高。", "apiwarn-badutf8": "$1通过的值包含无效或非标准化数据。正文数据应为有效的NFC标准化Unicode,没有除HT(\\t)、LF(\\n)和CR(\\r)以外的C0控制字符。", "apiwarn-deprecation-deletedrevs": "list=deletedrevs已被弃用。请改用prop=deletedrevisions或list=alldeletedrevisions。", + "apiwarn-deprecation-expandtemplates-prop": "因为没有为prop参数指定值,所以在输出上使用了遗留格式。这种格式已弃用,并且将来会为prop参数设置默认值,这会导致新格式总会被使用。", "apiwarn-deprecation-httpsexpected": "当应为HTTPS时,HTTP被使用。", "apiwarn-deprecation-login-botpw": "通过action=login的主账户登录已被弃用,并可能在未事先警告的情况下停止工作。要继续通过action=login登录,请参见[[Special:BotPasswords]]。要安全继续使用主账户登录,请参见action=clientlogin。", "apiwarn-deprecation-login-nobotpw": "通过action=login的主账户登录已被弃用,并可能在未事先警告的情况下停止工作。要安全登录,请参见action=clientlogin。", @@ -1672,6 +1675,7 @@ "apiwarn-parse-titlewithouttext": "title在没有text的情况下被使用,并且请求了已解析页面的属性。您是想用page而不是title么?", "apiwarn-tokennotallowed": "操作“$1”不允许当前用户使用。", "apiwarn-toomanyvalues": "参数$1指定了太多的值:上限为$2。", + "apiwarn-truncatedresult": "此结果被缩短,否则其将大于$1字节的限制。", "apiwarn-unclearnowtimestamp": "为时间戳参数$1传递“$2”已被弃用。如因某些原因您需要明确指定当前时间而不计算客户端,请使用now。", "apiwarn-unrecognizedvalues": "参数$1有无法识别的{{PLURAL:$3|值}}:$2。", "apiwarn-unsupportedarray": "参数$1使用未受支持的PHP数组语法。", @@ -1683,6 +1687,7 @@ "apiwarn-wgDebugAPI": "安全警告:$wgDebugAPI已启用。", "api-feed-error-title": "错误($1)", "api-usage-docref": "参见$1以获取API用法。", + "api-usage-mailinglist-ref": "在<https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce>订阅mediawiki-api-announce列表以获取API弃用和重大更新的通知。", "api-exception-trace": "$1在$2($3)\n$4", "api-credits-header": "制作人员", "api-credits": "API 开发人员:\n* Yuri Astrakhan(创建者,2006年9月~2007年9月的开发组领导)\n* Roan Kattouw(2007年9月~2009年的开发组领导)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch(2013年至今的开发组领导)\n\n请将您的评论、建议和问题发送至mediawiki-api@lists.wikimedia.org,或提交错误请求至https://phabricator.wikimedia.org/。" diff --git a/includes/cache/HTMLFileCache.php b/includes/cache/HTMLFileCache.php index ae8efa9c82..b0a3a1c262 100644 --- a/includes/cache/HTMLFileCache.php +++ b/includes/cache/HTMLFileCache.php @@ -35,19 +35,6 @@ class HTMLFileCache extends FileCacheBase { const MODE_OUTAGE = 1; // fallback cache for DB outages const MODE_REBUILD = 2; // background cache rebuild mode - /** - * Construct an HTMLFileCache object from a Title and an action - * - * @deprecated since 1.24, instantiate this class directly - * @param Title|string $title Title object or prefixed DB key string - * @param string $action - * @throws MWException - * @return HTMLFileCache - */ - public static function newFromTitle( $title, $action ) { - return new self( $title, $action ); - } - /** * @param Title|string $title Title object or prefixed DB key string * @param string $action diff --git a/includes/cache/LinkCache.php b/includes/cache/LinkCache.php index 23cc26d5e2..b720decb86 100644 --- a/includes/cache/LinkCache.php +++ b/includes/cache/LinkCache.php @@ -278,6 +278,20 @@ class LinkCache { return $id; } + /** + * @param WANObjectCache $cache + * @param TitleValue $t + * @return string[] + * @since 1.28 + */ + public function getMutableCacheKeys( WANObjectCache $cache, TitleValue $t ) { + if ( $this->isCacheable( $t ) ) { + return [ $cache->makeKey( 'page', $t->getNamespace(), sha1( $t->getDBkey() ) ) ]; + } + + return []; + } + private function isCacheable( LinkTarget $title ) { return ( $title->inNamespace( NS_TEMPLATE ) || $title->inNamespace( NS_FILE ) ); } diff --git a/includes/changes/RecentChange.php b/includes/changes/RecentChange.php index 81f64a8176..13a5fc7b80 100644 --- a/includes/changes/RecentChange.php +++ b/includes/changes/RecentChange.php @@ -451,6 +451,9 @@ class RecentChange { throw new MWException( __FUNCTION__ . ": Unknown stream logger URI scheme: $scheme" ); } + if ( defined( 'MW_PHPUNIT_TEST' ) && is_object( $wgRCEngines[$scheme] ) ) { + return $wgRCEngines[$scheme]; + } return new $wgRCEngines[$scheme]; } diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php index 5862bf1156..119144a550 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -1104,7 +1104,6 @@ abstract class ContentHandler { 'category', SearchIndexField::INDEX_TYPE_TEXT ); - $fields['category']->setFlag( SearchIndexField::FLAG_CASEFOLD ); $fields['external_link'] = $engine->makeSearchFieldMapping( @@ -1121,9 +1120,13 @@ abstract class ContentHandler { 'template', SearchIndexField::INDEX_TYPE_KEYWORD ); - $fields['template']->setFlag( SearchIndexField::FLAG_CASEFOLD ); + $fields['content_model'] = $engine->makeSearchFieldMapping( + 'content_model', + SearchIndexField::INDEX_TYPE_KEYWORD + ); + return $fields; } @@ -1170,6 +1173,7 @@ abstract class ContentHandler { $fieldData['text'] = $text; $fieldData['source_text'] = $text; $fieldData['text_bytes'] = $content->getSize(); + $fieldData['content_model'] = $content->getModel(); } Hooks::run( 'SearchDataForIndex', [ &$fieldData, $this, $page, $output, $engine ] ); diff --git a/includes/deferred/WANCacheReapUpdate.php b/includes/deferred/WANCacheReapUpdate.php new file mode 100644 index 0000000000..33ddc59cbd --- /dev/null +++ b/includes/deferred/WANCacheReapUpdate.php @@ -0,0 +1,126 @@ +db = $db; + $this->logger = $logger; + } + + function doUpdate() { + $reaper = new WANObjectCacheReaper( + ObjectCache::getMainWANInstance(), + ObjectCache::getLocalClusterInstance(), + [ $this, 'getTitleChangeEvents' ], + [ $this, 'getEventAffectedKeys' ], + [ + 'channel' => 'table:recentchanges:' . $this->db->getWikiID(), + 'logger' => $this->logger + ] + ); + + $reaper->invoke( 100 ); + } + + /** + * @see WANObjectCacheRepear + * + * @param int $start + * @param int $id + * @param int $end + * @param int $limit + * @return TitleValue[] + */ + public function getTitleChangeEvents( $start, $id, $end, $limit ) { + $db = $this->db; + $encStart = $db->addQuotes( $db->timestamp( $start ) ); + $encEnd = $db->addQuotes( $db->timestamp( $end ) ); + $id = (int)$id; // cast NULL => 0 since rc_id is an integer + + $res = $db->select( + 'recentchanges', + [ 'rc_namespace', 'rc_title', 'rc_timestamp', 'rc_id' ], + [ + $db->makeList( [ + "rc_timestamp > $encStart", + "rc_timestamp = $encStart AND rc_id > " . $db->addQuotes( $id ) + ], LIST_OR ), + "rc_timestamp < $encEnd" + ], + __METHOD__, + [ 'ORDER BY' => 'rc_timestamp ASC, rc_id ASC', 'LIMIT' => $limit ] + ); + + $events = []; + foreach ( $res as $row ) { + $events[] = [ + 'id' => (int)$row->rc_id, + 'pos' => (int)wfTimestamp( TS_UNIX, $row->rc_timestamp ), + 'item' => new TitleValue( (int)$row->rc_namespace, $row->rc_title ) + ]; + } + + return $events; + } + + /** + * Gets a list of important cache keys associated with a title + * + * @see WANObjectCacheRepear + * @param WANObjectCache $cache + * @param TitleValue $t + * @returns string[] + */ + public function getEventAffectedKeys( WANObjectCache $cache, TitleValue $t ) { + /** @var WikiPage[]|LocalFile[]|User[] $entities */ + $entities = []; + + $entities[] = WikiPage::factory( Title::newFromTitleValue( $t ) ); + if ( $t->inNamespace( NS_FILE ) ) { + $entities[] = wfLocalFile( $t->getText() ); + } + if ( $t->inNamespace( NS_USER ) ) { + $entities[] = User::newFromName( $t->getText(), false ); + } + + $keys = []; + foreach ( $entities as $entity ) { + if ( $entity ) { + $keys = array_merge( $keys, $entity->getMutableCacheKeys( $cache ) ); + } + } + if ( $keys ) { + $this->logger->debug( __CLASS__ . ': got key(s) ' . implode( ', ', $keys ) ); + } + + return $keys; + } +} diff --git a/includes/exception/PermissionsError.php b/includes/exception/PermissionsError.php index 5ecd237640..cc69a762c1 100644 --- a/includes/exception/PermissionsError.php +++ b/includes/exception/PermissionsError.php @@ -45,10 +45,10 @@ class PermissionsError extends ErrorPageError { $this->permission = $permission; if ( !count( $errors ) ) { - $groups = array_map( - [ 'User', 'makeGroupLinkWiki' ], - User::getGroupsWithPermission( $this->permission ) - ); + $groups = []; + foreach ( User::getGroupsWithPermission( $this->permission ) as $group ) { + $groups[] = UserGroupMembership::getLink( $group, RequestContext::getMain(), 'wiki' ); + } if ( $groups ) { $errors[] = [ 'badaccess-groups', $wgLang->commaList( $groups ), count( $groups ) ]; diff --git a/includes/filerepo/file/ArchivedFile.php b/includes/filerepo/file/ArchivedFile.php index 9a7a55be9e..6984d48c6d 100644 --- a/includes/filerepo/file/ArchivedFile.php +++ b/includes/filerepo/file/ArchivedFile.php @@ -492,22 +492,6 @@ class ArchivedFile { throw new MWException( "Unknown type '$type'." ); } - /** - * Return the user name of the uploader. - * - * @deprecated since 1.23 Use getUser( 'text' ) instead. - * @return string|int - */ - public function getUserText() { - wfDeprecated( __METHOD__, '1.23' ); - $this->load(); - if ( $this->isDeleted( File::DELETED_USER ) ) { - return 0; - } else { - return $this->user_text; - } - } - /** * Return upload description. * diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index 16fe72d37c..be0751ff9a 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -240,6 +240,15 @@ class LocalFile extends File { return $this->repo->getSharedCacheKey( 'file', sha1( $this->getName() ) ); } + /** + * @param WANObjectCache $cache + * @return string[] + * @since 1.28 + */ + public function getMutableCacheKeys( WANObjectCache $cache ) { + return [ $this->getCacheKey() ]; + } + /** * Try to load file metadata from memcached, falling back to the database */ diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php index d95222cbe1..7a27f5f2eb 100644 --- a/includes/installer/MysqlUpdater.php +++ b/includes/installer/MysqlUpdater.php @@ -294,6 +294,7 @@ class MysqlUpdater extends DatabaseUpdater { // 1.29 [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ], + [ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ], ]; } diff --git a/includes/installer/OracleUpdater.php b/includes/installer/OracleUpdater.php index 1f0e411af0..79ae175d53 100644 --- a/includes/installer/OracleUpdater.php +++ b/includes/installer/OracleUpdater.php @@ -121,6 +121,7 @@ class OracleUpdater extends DatabaseUpdater { // 1.29 [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ], + [ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ], // KEEP THIS AT THE BOTTOM!! [ 'doRebuildDuplicateFunction' ], diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php index 1eb3f41731..e041fddc33 100644 --- a/includes/installer/PostgresUpdater.php +++ b/includes/installer/PostgresUpdater.php @@ -448,6 +448,8 @@ class PostgresUpdater extends DatabaseUpdater { [ 'addPgField', 'externallinks', 'el_index_60', "BYTEA NOT NULL DEFAULT ''" ], [ 'addPgIndex', 'externallinks', 'el_index_60', '( el_index_60, el_id )' ], [ 'addPgIndex', 'externallinks', 'el_from_index_60', '( el_from, el_index_60, el_id )' ], + [ 'addPgField', 'user_groups', 'ug_expiry', "TIMESTAMPTZ NULL" ], + [ 'addPgIndex', 'user_groups', 'user_groups_expiry', '( ug_expiry )' ], ]; } diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php index 32068e65e8..cdbbfd0c51 100644 --- a/includes/installer/SqliteUpdater.php +++ b/includes/installer/SqliteUpdater.php @@ -161,6 +161,7 @@ class SqliteUpdater extends DatabaseUpdater { // 1.29 [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ], + [ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ], ]; } diff --git a/includes/installer/i18n/ast.json b/includes/installer/i18n/ast.json index c591f1eba9..d47334cca9 100644 --- a/includes/installer/i18n/ast.json +++ b/includes/installer/i18n/ast.json @@ -89,6 +89,7 @@ "config-db-name": "Nome de base de datos:", "config-db-name-help": "Escueye un nome qu'identifique la to wiki. Nun tien de contener espacios. \nSi tas utilizando agospiamientu web compartíu, el to provisor va date un nome específicu de base de datos por que lu utilices, o bien va dexate crear bases de datos al traviés d'un panel de control.", "config-db-name-oracle": "Esquema de la base de datos:", + "config-db-account-oracle-warn": "Hai tres escenarios compatibles pa la instalación de Oracle como motor de base de datos:\n\nSi desees crear una cuenta de base de datos como parte del procesu d'instalación, por favor apurre una cuenta con rol SYSDBA como cuenta de base de datos pa la instalación y especifica les credenciales que quies tener pal accesu a la web a la cuenta; d'otra miente, puedes crear manualmente la cuenta d'accesu a la web y suministrar namái esa cuenta (si tien los permisos necesarios pa crear los oxetos d'esquema) o dar dos cuentes distintos, una con privilexos de creación y otra con accesu acutáu a la web\n\nLa secuencia de comandos (script) pa crear una cuenta colos privilexos necesarios puede atopase nel direutoriu \"maintenance/oracle/\" d'esta instalación. Ten en cuenta qu'utilizar una cuenta acutada va desactivar toles capacidaes de caltenimientu cola cuenta predeterminada.", "config-db-install-account": "Cuenta d'usuariu pa la instalación", "config-db-username": "Nome d'usuariu de base de datos:", "config-db-password": "Contraseña de base de datos:", @@ -100,6 +101,12 @@ "config-db-wiki-help": "Escribe'l nome d'usuariu y la contraseña que se van utilizar p'aportar a la base de datos mientres la operación normal de la wiki.\nSi esta cuenta nun esiste y la cuenta d'instalación tien permisos bastante, va crease esta cuenta d'usuariu colos mínimos permisos necesarios pa operar normalmente la wiki.", "config-db-prefix": "Prefixu de tables de la base de datos:", "config-db-prefix-help": "Si precises compartir una base de datos ente múltiples wikis, o ente MediaWiki y otra aplicación web, puedes optar por amestar un prefixu a tolos nomes de tabla pa evitar conflictos.\nNun utilices espacios.\n\nDe normal déxase esti campu vacío.", + "config-mysql-old": "Precísase MySQL $1 o posterior. Tienes $2.", + "config-db-port": "Puertu de la base de datos:", + "config-db-schema": "Esquema pa MediaWiki:", + "config-db-schema-help": "Esti esquema de vezu va tar bien.\nCamúdalos solo si sabes que lo precises.", + "config-pg-test-error": "Nun puede coneutase cola base de datos $1: $2", + "config-sqlite-dir": "Direutoriu de datos SQLite:", "config-type-mysql": "MySQL (o compatible)", "config-type-mssql": "Microsoft SQL Server", "config-invalid-db-type": "Triba non válida de base de datos.", @@ -125,5 +132,5 @@ "config-help": "Ayuda", "config-nofile": "Nun pudo atopase'l ficheru \"$1\". ¿Desaniciose?", "mainpagetext": "Instalóse MediaWiki.", - "mainpagedocfooter": "Consulta [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents] pa saber cómo usar el software wiki.\n\n== Primeros pasos ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de les opciones de configuración]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ EMF de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de llanzamientos de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Depriende como combatir la puxarra na to wiki]" + "mainpagedocfooter": "Consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuariu] pa saber cómo usar el software wiki.\n\n== Primeros pasos ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de les opciones de configuración]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ EMF de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de llanzamientos de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Llocaliza MediaWiki na to llingua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Depriende como combatir la puxarra na to wiki]" } diff --git a/includes/installer/i18n/be-tarask.json b/includes/installer/i18n/be-tarask.json index c17de3f2eb..1335b9c528 100644 --- a/includes/installer/i18n/be-tarask.json +++ b/includes/installer/i18n/be-tarask.json @@ -306,6 +306,7 @@ "config-install-subscribe-fail": "Немагчыма падпісацца на «mediawiki-announce»: $1", "config-install-subscribe-notpossible": "cURL не ўсталяваны, allow_url_fopen недаступны.", "config-install-mainpage": "Стварэньне галоўнай старонкі са зьместам па змоўчваньні", + "config-install-mainpage-exists": "Галоўная старонка ўжо існуе, прапускаем", "config-install-extension-tables": "Стварэньне табліцаў для ўключаных пашырэньняў", "config-install-mainpage-failed": "Немагчыма ўставіць галоўную старонку: $1", "config-install-done": "Віншуем!\nВы ўсталявалі MediaWiki.\n\nПраграма ўсталяваньня стварыла файл LocalSettings.php.\nЁн утрымлівае ўсе Вашыя налады.\n\nВам неабходна загрузіць яго і захаваць у карэнную дырэкторыю Вашай вікі (у тую ж самую дырэкторыю, дзе знаходзіцца index.php). Загрузка павінна пачацца аўтаматычна.\n\nКалі загрузка не пачалася, ці Вы яе адмянілі, Вы можаце перазапусьціць яе націснуўшы на спасылку ніжэй:\n\n$3\n\nЗаўвага: калі Вы гэтага ня зробіце зараз, то створаны файл ня будзе даступны Вам потым, калі Вы выйдзеце з праграмы ўсталяваньня безь яго загрузкі.\n\nКалі Вы гэта зробіце, Вы можаце [$2 ўвайсьці ў Вашую вікі].", diff --git a/includes/installer/i18n/bn.json b/includes/installer/i18n/bn.json index f9a8da863e..b5a146d3ff 100644 --- a/includes/installer/i18n/bn.json +++ b/includes/installer/i18n/bn.json @@ -7,7 +7,8 @@ "Tauhid16", "Aftabuzzaman", "Hasive", - "আজিজ" + "আজিজ", + "Elias Ahmmad" ] }, "config-desc": "মিডিয়াউইকির জন্য ইন্সটলার", @@ -137,6 +138,7 @@ "config-install-user-alreadyexists": "ব্যবহারকারী \"$1\" ইতিমধ্যে বিদ্যমান আছে", "config-install-tables": "টেবিল তৈরি", "config-install-keys": "গোপন কি তৈরি", + "config-install-mainpage-exists": "মুখ্য পৃষ্ঠা ইতিমধ্যেই বিদ্যমান, skipping", "config-help": "সাহায্য", "config-help-tooltip": "প্রসারিত করতে ক্লিক করুন", "mainpagetext": "মিডিয়াউইকি ইনস্টল করা হয়েছে।", diff --git a/includes/installer/i18n/ca.json b/includes/installer/i18n/ca.json index 003583dce8..559e7dd9d9 100644 --- a/includes/installer/i18n/ca.json +++ b/includes/installer/i18n/ca.json @@ -20,7 +20,7 @@ "config-localsettings-upgrade": "S'ha detectat un fitxer LocalSettings.php. \nPer tal d'actualitzar la instal·lació, introduïu el valor de $wgUpgradeKey en el quadre a continuació. El trobareu a LocalSettings.php.", "config-localsettings-cli-upgrade": "S'ha detectat un fitxer LocalSettings.php.\nPer a actualitzar la instal·lació, executeu update.php.", "config-localsettings-key": "Clau d'actualització:", - "config-localsettings-badkey": "La clau que heu proporcionat no és correcta.", + "config-localsettings-badkey": "La clau d'actualització que heu proporcionat no és correcta.", "config-upgrade-key-missing": "S'ha detectat una instal·lació ja existent del MediaWiki.\nPer actualitzar-la, poseu la línia següent al final de LocalSettings.php:\n\n$1", "config-localsettings-incomplete": "El LocalSettings.php que hi ha sembla incomplet.\nLa variable $1 no està definida.\nCanvieu LocalSettings.php perquè la variable estigui definida i feu clic a «{{int:Config-continue}}».", "config-localsettings-connection-error": "S'ha trobat un error en connectar-se amb la base de dades fent servir els paràmetres especificats a LocalSettings.php. Corregiu aquests paràmetres i torneu-ho a provar.\n\n$1", @@ -52,7 +52,7 @@ "config-restart": "Sí, torna a començar", "config-welcome": "=== Comprovacions de l'entorn ===\nS'efectuaran comprovacions bàsiques per veure si l'entorn és adequat per a la instal·lació del MediaWiki.\nRecordeu d'incloure aquesta informació si heu de demanar ajuda sobre com completar la instal·lació.", "config-copyright": "=== Drets d'autor i condicions ===\n\n$1\n\nAquest programa és de programari lliure; podeu redistribuir-lo i/o modificar-lo sota les condicions de la Llicència Pública General GNU com es publicada per la Free Software Foundation; qualsevol versió 2 de la llicència, o (opcionalment) qualsevol versió posterior.\n\nAquest programa és distribueix amb l'esperança que serà útil, però sense cap garantia; sense ni tan sols la garantia implícita de \ncomerciabilitat o idoneïtat per a un propòsit particular.\nConsulteu la Llicència Pública General GNU, per a més detalls.\n\nHauríeu d'haver rebut una còpia de la Llicència Pública General GNU amb aquest programa; si no, escriviu a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA o [http://www.gnu.org/copyleft/gpl.html per llegir-lo en línia].", - "config-sidebar": "* [https://www.mediawiki.org la Pàgina d'inici]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guia de l'Usuari]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guia de l'Administrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* Llegeix-me\n* Notes de la versió\n* Còpia\n* Actualització", + "config-sidebar": "* [https://www.mediawiki.org la Pàgina d'inici]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guia de l'usuari]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guia de l'administrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ PMF]\n----\n* Llegeix-me\n* Notes de la versió\n* Còpia\n* Actualització", "config-env-good": "S'ha comprovat l'entorn.\nPodeu instal·lar el MediaWiki.", "config-env-bad": "S'ha comprovat l'entorn.\nNo podeu instal·lar el MediaWiki.", "config-env-php": "El PHP $1 està instal·lat.", @@ -163,6 +163,8 @@ "config-admin-error-user": "S'ha produït un error intern en crear un administrador amb el nom «$1».", "config-admin-error-password": "S'ha produït un error intern en definir una contrasenya per a l'administrador «$1»:
$2
", "config-admin-error-bademail": "Heu introduït una adreça electrònica no vàlida.", + "config-subscribe": "Subscriu a la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce llista de correu d'anunci de noves versions].", + "config-pingback": "Comparteix dades d'aquesta instal·lació amb els desenvolupadors de MediaWiki.", "config-almost-done": "Gairebé ja heu acabat!\nPodeu ometre el que queda de la configuració i procedir amb la instal·lació del wiki.", "config-optional-continue": "Fes-me més preguntes.", "config-optional-skip": "Ja estic avorrit. Simplement instal·leu el wiki.", @@ -242,12 +244,14 @@ "config-install-subscribe-fail": "No s'ha pogut subscriure a mediawiki-announce: $1", "config-install-subscribe-notpossible": "El cURL no està instal·lat i allow_url_fopen no està disponible.", "config-install-mainpage": "S'està creant la pàgina principal amb el contingut per defecte", + "config-install-mainpage-exists": "La pàgina principal ja existeix, per tant s'omet", "config-install-extension-tables": "S'estan creant taules de les extensions habilitades", "config-install-mainpage-failed": "No s'ha pogut inserir la pàgina principal: $1", + "config-install-done": "Enhorabona!\nHeu instal·lat MediaWiki.\n\nL'instal·lador a generat un fitxer LocalSettings.php.\nConté tota la configuració.\n\nCaldrà que el baixeu i el poseu al directori base on heu instal·lat al wiki (el mateix directori on es troba index.php). La baixada hauria d'haver començat automàticament.\n\nSi la baixada no comença, o si l'heu cancel·lat, podeu reiniciar-la fent clic a l'enllaç de sota:\n\n$3\n\nNota: Si no ho feu ara, no podreu accedir a aquest fitxer de configuració més endavant si no l'heu baixat abans.\n\nUna vegada tot això fet, podeu [$2 entrar al vostre wiki].", "config-download-localsettings": "Baixa LocalSettings.php", "config-help": "ajuda", "config-help-tooltip": "feu clic per ampliar", "config-nofile": "No s'ha pogut trobar el fitxer «$1». S'ha suprimit?", - "mainpagetext": "'''El MediaWiki s'ha instal·lat correctament.'''", + "mainpagetext": "MediaWiki s'ha instal·lat.", "mainpagedocfooter": "Consulteu la [https://meta.wikimedia.org/wiki/Help:Contents Guia d'Usuari] per a més informació sobre com utilitzar-lo.\n\n== Per a començar ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de característiques configurables]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ PMF del MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traduïu MediaWiki en la vostra llengua]" } diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json index 9f24ec6b6c..2d2f2072b7 100644 --- a/includes/installer/i18n/cs.json +++ b/includes/installer/i18n/cs.json @@ -308,6 +308,7 @@ "config-install-subscribe-fail": "Nelze se přihlásit k odběru mediawiki-announce: $1", "config-install-subscribe-notpossible": "Není nainstalován cURL a není dostupné allow_url_fopen.", "config-install-mainpage": "Vytváří se počáteční obsah hlavní strany", + "config-install-mainpage-exists": "Hlavní strana již existuje, přeskakuji.", "config-install-extension-tables": "Vytvářejí se tabulky pro zapnutá rozšíření", "config-install-mainpage-failed": "Nepodařilo se vložit hlavní stranu: $1", "config-install-done": "Gratulujeme!\nNainstalovali jste MediaWiki.\n\nInstalátor vytvořil soubor LocalSettings.php.\nTen obsahuje veškerou vaši konfiguraci.\n\nBudete si ho muset stáhnout a uložit do základního adresáře vaší instalace wiki (do stejného adresáře jako soubor index.php). Stažení souboru se mělo spustit automaticky.\n\nPokud se vám stažení nenabídlo nebo jste ho zrušili, můžete ho spustit znovu kliknutím na následující odkaz:\n\n$3\n\nPoznámka: Pokud to neuděláte hned, tento vygenerovaný konfigurační soubor nebude později dostupný, pokud instalaci opustíte, aniž byste si ho stáhli.\n\nAž to dokončíte, můžete [$2 vstoupit do své wiki].", diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json index c7690e2a78..3babc3f851 100644 --- a/includes/installer/i18n/de.json +++ b/includes/installer/i18n/de.json @@ -315,6 +315,7 @@ "config-install-subscribe-fail": "Abonnieren von „mediawiki-announce“ ist gescheitert: $1", "config-install-subscribe-notpossible": "cURL ist nicht installiert und allow_url_fopen ist nicht verfügbar.", "config-install-mainpage": "Erstellung der Hauptseite mit Standardinhalten", + "config-install-mainpage-exists": "Die Hauptseite ist bereits vorhanden. Überspringe.", "config-install-extension-tables": "Erstellung der Tabellen für die aktivierten Erweiterungen", "config-install-mainpage-failed": "Die Hauptseite konnte nicht erstellt werden: $1", "config-install-done": "'''Herzlichen Glückwunsch!'''\nMediaWiki wurde erfolgreich installiert.\n\nDas Installationsprogramm hat die Datei LocalSettings.php erzeugt.\nSie enthält alle vorgenommenen Konfigurationseinstellungen.\n\nDiese Datei muss nun heruntergeladen und anschließend in das Stammverzeichnis der MediaWiki-Installation hochgeladen werden. Dies ist dasselbe Verzeichnis, in dem sich auch die Datei index.php befindet. Das Herunterladen sollte inzwischen automatisch gestartet worden sein.\n\nSofern dies nicht der Fall war, oder das Herunterladen unterbrochen wurde, kann der Vorgang durch einen Klick auf den folgenden Link erneut gestartet werden:\n\n$3\n\n'''Hinweis:''' Die Konfigurationsdatei sollte jetzt unbedingt heruntergeladen werden. Sie wird nach Beenden des Installationsprogramms, nicht mehr zur Verfügung stehen.\n\nSobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wir wünschen viel Spaß und Erfolg mit dem Wiki.", diff --git a/includes/installer/i18n/el.json b/includes/installer/i18n/el.json index a11c301f5e..679c0a8cba 100644 --- a/includes/installer/i18n/el.json +++ b/includes/installer/i18n/el.json @@ -223,6 +223,7 @@ "config-install-subscribe-fail": "Ανίκανος να εγγραφείτε στο mediawiki-ανακοινώση: $1", "config-install-subscribe-notpossible": "Το cURL δεν είναι εγκατεστημένο και το allow_url_fopen δεν είναι διαθέσιμο.", "config-install-mainpage": "Γίνεται δημιουργία της αρχικής σελίδας με προεπιλεγμένο περιεχόμενο", + "config-install-mainpage-exists": "Κύρια σελίδα ήδη υπάρχει, παρακάμπτεται", "config-install-extension-tables": "Γίνεται δημιουργία πινάκων για τις εγκατεστημένες επεκτάσεις", "config-install-mainpage-failed": "Δεν ήταν δυνατή η εισαγωγή της αρχικής σελίδας: $1", "config-install-done": "Συγχαρητήρια!\nΈχετε εγκαταστήσει με επιτυχία το MediaWiki.\n\nΤο πρόγραμμα εγκατάστασης έχει δημιουργήσει το αρχείο LocalSettings.php.\nΠεριέχει όλες τις ρυθμίσεις παραμέτρων σας.\n\nΘα πρέπει να το κατεβάσετε και να το βάλετε στη βάση της εγκατάστασης του wiki σας (στον ίδιο κατάλογο όπως το index.php). Η λήψη θα αρχίσει αυτόματα.\n\nΑν η λήψη δεν προσφέφθηκε, ή αν την ακυρώσατε, μπορείτε να επανεκκινήσετε τη λήψη κάνοντας κλικ στο παρακάτω link:\n\n$3\n\nΣημείωση: Εάν δεν το κάνετε αυτό τώρα, αυτό το αρχείο ρύθμισης παραμέτρων δεν θα είναι διαθέσιμο για σας αργότερα, αν βγείτε από την εγκατάσταση, χωρίς να το κατεβάσετε!\n\nΌταν γίνει αυτό, μπορείτε να [$2 μπείτε στο wiki σας].", diff --git a/includes/installer/i18n/es.json b/includes/installer/i18n/es.json index c40183273f..8c4914c056 100644 --- a/includes/installer/i18n/es.json +++ b/includes/installer/i18n/es.json @@ -332,6 +332,7 @@ "config-install-subscribe-fail": "No se ha podido suscribir a mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL no está instalado y allow_url_fopen no está disponible.", "config-install-mainpage": "Creando página principal con contenido predeterminado", + "config-install-mainpage-exists": "La página principal ya existe, se omite", "config-install-extension-tables": "Creando las tablas para las extensiones habilitadas", "config-install-mainpage-failed": "No se pudo insertar la página principal: $1", "config-install-done": "¡Felicidades!\nHas instalado MediaWiki.\n\nEl instalador ha generado un archivo LocalSettings.php.\nEste contiene toda su configuración.\n\nDeberás descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). La descarga debería haber comenzado automáticamente.\n\nSi no comenzó la descarga, o si se ha cancelado, puedes reiniciar la descarga haciendo clic en el siguiente enlace:\n\n$3\n\nNota: si no haces esto ahora, este archivo de configuración generado no estará disponible más tarde si sales de la instalación sin descargarlo.\n\nCuando lo hayas hecho, podrás [$2 entrar en tu wiki].", diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json index 882ab92091..953d427feb 100644 --- a/includes/installer/i18n/fr.json +++ b/includes/installer/i18n/fr.json @@ -327,6 +327,7 @@ "config-install-subscribe-fail": "Impossible de s'abonner à mediawiki-announce : $1", "config-install-subscribe-notpossible": "cURL n’est pas installé et allow_url_fopen n’est pas disponible.", "config-install-mainpage": "Création de la page principale avec un contenu par défaut", + "config-install-mainpage-exists": "La page principale existe déjà, ignoré", "config-install-extension-tables": "Création de tables pour les extensions activées", "config-install-mainpage-failed": "Impossible d’insérer la page principale : $1", "config-install-done": "Félicitations!\nVous avez installé MediaWiki.\n\nLe programme d'installation a généré un fichier LocalSettings.php. Il contient tous les paramètres de votre configuration.\n\nVous devrez le télécharger et le mettre à la racine de votre installation wiki (dans le même répertoire que index.php). Le téléchargement devrait démarrer automatiquement.\n\nSi le téléchargement n'a pas été proposé, ou que vous l'avez annulé, vous pouvez redémarrer le téléchargement en cliquant ce lien :\n\n$3\n\nNote : Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.\n\nLorsque c'est fait, vous pouvez [$2 accéder à votre wiki] .", diff --git a/includes/installer/i18n/gl.json b/includes/installer/i18n/gl.json index ab1fd7d059..d4ac7e3a0b 100644 --- a/includes/installer/i18n/gl.json +++ b/includes/installer/i18n/gl.json @@ -306,6 +306,7 @@ "config-install-subscribe-fail": "Non se puido subscribir á lista mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL non está instalado e allow_url_fopen non está dispoñible.", "config-install-mainpage": "Creando a páxina principal co contido por defecto", + "config-install-mainpage-exists": "A páxina principal xa existe, saltando", "config-install-extension-tables": "Creando as táboas para as extensións activadas", "config-install-mainpage-failed": "Non se puido inserir a páxina principal: $1", "config-install-done": "Parabéns!\nInstalou MediaWiki.\n\nO programa de instalación xerou un ficheiro LocalSettings.php.\nEste ficheiro contén toda a súa configuración.\n\nTerá que descargalo e poñelo na base da instalación do seu wiki (no mesmo directorio ca index.php). A descarga debería comezar automaticamente.\n\nSe non comezou a descarga ou se a cancelou, pode facer que comece de novo premendo na ligazón que aparece a continuación:\n\n$3\n\nNota: Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo.\n\nCando faga todo isto, xa poderá [$2 entrar no seu wiki].", diff --git a/includes/installer/i18n/it.json b/includes/installer/i18n/it.json index b3b7850805..5453e4533b 100644 --- a/includes/installer/i18n/it.json +++ b/includes/installer/i18n/it.json @@ -316,6 +316,7 @@ "config-install-subscribe-fail": "Impossibile sottoscrivere mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL non è installato e allow_url_fopen non è disponibile.", "config-install-mainpage": "Creazione della pagina principale con contenuto predefinito", + "config-install-mainpage-exists": "La pagina principale già esiste, saltata", "config-install-extension-tables": "Creazione delle tabelle per le estensioni attivate", "config-install-mainpage-failed": "Impossibile inserire la pagina principale: $1", "config-install-done": "Complimenti!\nHai installato MediaWiki.\n\nIl programma di installazione ha generato un file LocalSettings.php che contiene tutte le impostazioni.\n\nDevi scaricarlo ed inserirlo nella directory base del tuo wiki (la stessa dove è presente index.php). Il download dovrebbe partire automaticamente.\n\nSe il download non si avvia, o se è stato annullato, puoi riavviarlo cliccando sul collegamento di seguito:\n\n$3\n\nNota: se esci ora dall'installazione senza scaricare il file di configurazione che è stato generato, questo poi non sarà più disponibile in seguito.\n\nQuando hai fatto, puoi [$2 entrare nel tuo wiki].", diff --git a/includes/installer/i18n/ko.json b/includes/installer/i18n/ko.json index 18acff0e8d..f029d0a800 100644 --- a/includes/installer/i18n/ko.json +++ b/includes/installer/i18n/ko.json @@ -11,7 +11,8 @@ "Hwangjy9", "Macofe", "Mooozi", - "Ykhwong" + "Ykhwong", + "Jerrykim306" ] }, "config-desc": "미디어위키를 위한 설치 관리자", @@ -308,6 +309,7 @@ "config-install-subscribe-fail": "미디어위키 알림을 구독할 수 없습니다: $1", "config-install-subscribe-notpossible": "cURL이 설치되어 있지 않고 allow_url_fopen을 사용할 수 없습니다.", "config-install-mainpage": "기본 내용으로 대문을 만드는 중", + "config-install-mainpage-exists": "대문은 이미 존재함, 건너뜀", "config-install-extension-tables": "활성화된 확장 기능을 위한 테이블을 만드는 중", "config-install-mainpage-failed": "대문을 삽입할 수 없습니다: $1", "config-install-done": "축하합니다!\n미디어위키를 설치했습니다.\n\n설치 관리자가 LocalSettings.php 파일을 만들었습니다.\n여기에 모든 설정이 포함되어 있습니다.\n\n파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.\n\n다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:\n\n$3\n\n참고: 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.\n\n완료되었으면 [$2 위키에 들어갈 수 있습니다].", diff --git a/includes/installer/i18n/lb.json b/includes/installer/i18n/lb.json index 10de248ce9..7859d7ae82 100644 --- a/includes/installer/i18n/lb.json +++ b/includes/installer/i18n/lb.json @@ -199,6 +199,7 @@ "config-install-updates": "Net néideg Aktualiséierungen net maachen", "config-install-sysop": "Administrateur Benotzerkont gëtt ugeluecht", "config-install-mainpage": "Haaptsäit mat Standard-Inhalt gëtt ugeluecht", + "config-install-mainpage-exists": "Haaptsäit gëtt et schonn, iwwersprangen", "config-install-extension-tables": "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht", "config-install-mainpage-failed": "D'Haaptsäit konnt net dragesat ginn: $1", "config-download-localsettings": "LocalSettings.php eroflueden", diff --git a/includes/installer/i18n/mk.json b/includes/installer/i18n/mk.json index b0b78db3ad..f34849b6d6 100644 --- a/includes/installer/i18n/mk.json +++ b/includes/installer/i18n/mk.json @@ -302,6 +302,7 @@ "config-install-subscribe-fail": "Не можам да ве претплатам на известувањето mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL не е воспоставен, а allow_url_fopen не е достапно.", "config-install-mainpage": "Создавам главна страница со стандардна содржина", + "config-install-mainpage-exists": "Главната страница веќе постои. Преоѓам на следно.", "config-install-extension-tables": "Изработка на табели за овозможени додатоци", "config-install-mainpage-failed": "Не можев да вметнам главна страница: $1", "config-install-done": "Честитаме!\nУспешно го воспоставивте МедијаВики.\n\nВоспоставувачот создаде податотека LocalSettings.php.\nТаму се содржат сите ваши нагодувања.\n\nЌе треба да ја преземете и да ја ставите во основата на воспоставката (истата папка во која се наоѓа index.php). Преземањето треба да е започнато автоматски.\n\nАко не ви е понудено преземање, или пак ако сте го откажале, можете да го почнете одново стискајќи на следнава врска:\n\n$3\n\nНапомена: Ако ова не го направите сега, податотеката со поставки повеќе нема да биде на достапна.\n\nОткога ќе завршите со тоа, можете да [$2 влезете на вашето вики].", diff --git a/includes/installer/i18n/nb.json b/includes/installer/i18n/nb.json index 46156b90d6..b7a7289a8a 100644 --- a/includes/installer/i18n/nb.json +++ b/includes/installer/i18n/nb.json @@ -308,6 +308,7 @@ "config-install-subscribe-fail": "Ikke mulig å abonnere på mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL er ikke installert og allow_url_fopen er ikke tilgjengelig.", "config-install-mainpage": "Oppretter hovedside med standard innhold", + "config-install-mainpage-exists": "Hovedsiden eksisterer allerede, hopper over", "config-install-extension-tables": "Oppretter tabeller for aktiviserte utvidelser", "config-install-mainpage-failed": "Kunne ikke sette inn hovedside: $1", "config-install-done": "Gratulrerer!\nDu har lykkes i å installere MediaWiki.\n\nInstallasjonsprogrammet har generert en LocalSettings.php-fil.\nDen inneholder alle dine konfigureringer.\n\nDu må laste den ned og legge den på hovedfolderen for din wiki-installasjon (der index.php ligger). Nedlastingen skulle ha startet automatisk.\n\nHvis ingen nedlasting ble tilbudt, eller du avbrøt den, kan du få den i gang ved å klikke på lenken under:\n\n$3\n\nOBS: Hvis du ikke gjør dette nå, vil den genererte konfigurasjonsfilen ikke være tilgjengelig for deg senere.\n\nNår dette er gjort, kan du [$2 gå inn i wikien].", diff --git a/includes/installer/i18n/nl.json b/includes/installer/i18n/nl.json index ac05471a25..f6b1d23b33 100644 --- a/includes/installer/i18n/nl.json +++ b/includes/installer/i18n/nl.json @@ -18,7 +18,8 @@ "JaapDeKleine", "Macofe", "Hex", - "Mainframe98" + "Mainframe98", + "Rcdeboer" ] }, "config-desc": "Het installatieprogramma voor MediaWiki", @@ -317,6 +318,7 @@ "config-install-subscribe-fail": "Het is niet mogelijk te abonneren op mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL is niet geïnstalleerd en allow_url_fopen is niet beschikbaar.", "config-install-mainpage": "Hoofdpagina aanmaken met standaard inhoud", + "config-install-mainpage-exists": "Hoofdpagina bestaat al, overslaan", "config-install-extension-tables": "Tabellen voor ingeschakelde uitbreidingen worden aangemaakt", "config-install-mainpage-failed": "Het was niet mogelijk de hoofdpagina in te voegen: $1", "config-install-done": "Gefeliciteerd!\nU hebt MediaWiki geïnstalleerd.\n\nHet installatieprogramma heeft het bestand LocalSettings.php aangemaakt.\nDit bevat al uw instellingen.\n\nU moet het bestand downloaden en in de hoofdmap van uw wiki-installatie plaatsen, in dezelfde map als index.php.\nDe download zou automatisch moeten zijn gestart.\n\nAls de download niet is gestart of als u de download hebt geannuleerd, dan kunt u de download opnieuw starten door op de onderstaande koppeling te klikken:\n\n$3\n\nLet op: als u dit niet nu doet, dan is het bestand als u later de installatieprocedure afsluit zonder het bestand te downloaden niet meer beschikbaar.\n\nNa het plaatsen van het bestand met instellingen kunt u [$2 uw wiki gebruiken].", diff --git a/includes/installer/i18n/pl.json b/includes/installer/i18n/pl.json index f224b5de23..d0004c4583 100644 --- a/includes/installer/i18n/pl.json +++ b/includes/installer/i18n/pl.json @@ -318,6 +318,7 @@ "config-install-subscribe-fail": "Nie można zapisać na listę „mediawiki-announce” – $1", "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc allow_url_fopen nie jest dostępne.", "config-install-mainpage": "Tworzenie strony głównej z domyślną zawartością", + "config-install-mainpage-exists": "Strona główna już istnieje, pomijanie", "config-install-extension-tables": "Tworzenie tabel dla aktywnych rozszerzeń", "config-install-mainpage-failed": "Nie udało się wstawić strony głównej: $1", "config-install-done": "'''Gratulacje!\nUdało Ci się zainstalować MediaWiki.\n\nInstalator wygenerował plik konfiguracyjny LocalSettings.php.\n\nMusisz go pobrać i umieścić w katalogu głównym Twojej instalacji wiki (tym samym katalogu co index.php). Pobieranie powinno zacząć się automatycznie.\n\nJeżeli pobieranie nie zostało zaproponowane lub jeśli użytkownik je anulował, można ponownie uruchomić pobranie klikając poniższe łącze:\n\n$3\n\nUwaga: Jeśli nie zrobisz tego teraz, wygenerowany plik konfiguracyjny nie będzie już dostępny po zakończeniu instalacji.\n\nPo załadowaniu pliku konfiguracyjnego możesz [$2 wejść na wiki].", diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json index 15d54b71a1..fc9984efa9 100644 --- a/includes/installer/i18n/ru.json +++ b/includes/installer/i18n/ru.json @@ -322,6 +322,7 @@ "config-install-subscribe-fail": "Не удаётся подписаться на mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL не установлен и не доступна опция allow_url_fopen.", "config-install-mainpage": "Создание главной страницы с содержимым по умолчанию", + "config-install-mainpage-exists": "Главная страница уже существует, пропускаем", "config-install-extension-tables": "Создание таблиц для включённых расширений", "config-install-mainpage-failed": "Не удаётся вставить главную страницу: $1", "config-install-done": "Поздравляем!\nВы установили MediaWiki.\n\nВо время установки был создан файл LocalSettings.php.\nОн содержит все ваши настройки.\n\nВам необходимо скачать его и положить в корневую директорию вашей вики (ту же директорию, где находится файл index.php). Его загрузка должна начаться автоматически.\n\nЕсли автоматическая загрузка не началась или вы её отменили, вы можете скачать по ссылке ниже:\n\n$3\n\nПримечание: Если вы не сделаете этого сейчас, то сгенерированный файл конфигурации не будет доступен вам в дальнейшем, если вы выйдете из установки, не скачивая его.\n\nПо окончании действий, описанных выше, вы сможете [$2 войти в вашу вики].", diff --git a/includes/installer/i18n/sr-ec.json b/includes/installer/i18n/sr-ec.json index f4343560ba..41884c640a 100644 --- a/includes/installer/i18n/sr-ec.json +++ b/includes/installer/i18n/sr-ec.json @@ -5,7 +5,8 @@ "Михајло Анђелковић", "Milicevic01", "Aktron", - "Сербијана" + "Сербијана", + "Zoranzoki21" ] }, "config-desc": "Инсталација за Медијавики", @@ -82,6 +83,7 @@ "config-skins": "Теме", "config-install-step-done": "готово", "config-install-step-failed": "није успело", + "config-install-mainpage-exists": "Главна страна већ постоји, прескакање", "config-help": "помоћ", "config-help-tooltip": "кликните да проширите", "mainpagetext": "Медијавики је успешно инсталиран.", diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json index 45c5a7d1e2..4f52403f37 100644 --- a/includes/installer/i18n/sv.json +++ b/includes/installer/i18n/sv.json @@ -119,7 +119,7 @@ "config-type-mssql": "Microsoft SQL Server", "config-support-info": "MediaWiki stöder följande databassystem:\n\n$1\n\nOm du inte ser det databassystem som du försöker använda nedanstående, följ då instruktionerna länkade ovan för aktivera stöd för det.", "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] är det primära målet för MediaWiki och det stöds bäst. MediaWiki fungerar även med [{{int:version-db-mariadb-url}} MariaDB] och [{{int:version-db-percona-url}} Percona Server], som är kompatibla med MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Hur man kompilerar PHP med stöd för MySQL])", - "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] är ett populärt databassystem med öppen källkod som ett alternativ till MySQL. Det kan finnas några mindre kvarvarande buggar, och den rekommenderas inte för användning i en produktionsmiljö. ([http://www.php.net/manual/en/pgsql.installation.php Hur man kompilerar PHP med PostgreSQL stöd])", + "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] är ett populärt databassystem med öppen källkod som ett alternativ till MySQL. ([http://www.php.net/manual/en/pgsql.installation.php Hur man kompilerar PHP med PostgreSQL stöd])", "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] är en lättviktsdatabassystem med väldigt bra stöd. ([http://www.php.net/manual/en/pdo.installation.php Hur man kompilerar PHP med SQLite stöd], använder PDO)", "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] är en kommersiellt databas för företag. ([http://www.php.net/manual/en/oci8.installation.php Hur man kompilerar PHP med OCI8 stöd])", "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] är en kommersiellt databas för företag för Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Hur man kompilerar PHP med SQLSRV stöd])", @@ -305,6 +305,7 @@ "config-install-subscribe-fail": "Det gick inte att prenumerera på mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL är inte installerad och allow_url_fopen är inte tillgänglig.", "config-install-mainpage": "Skapa huvudsida med standardinnehåll", + "config-install-mainpage-exists": "Huvudsidan finns redan, hoppar över", "config-install-extension-tables": "Skapar tabeller för aktiverade tillägg", "config-install-mainpage-failed": "Kunde inte infoga huvudsidan: $1", "config-install-done": "Grattis!\nDu har installerat MediaWiki.\n\nInstallationsprogrammet har genererat filen LocalSettings.php.\nDet innehåller alla dina konfigurationer.\n\nDu kommer att behöva ladda ner den och placera den i roten för din wiki-installation (samma katalog som index.php). Nedladdningen borde ha startats automatiskt.\n\nOm ingen nedladdning erbjöds, eller om du har avbrutit det kan du starta om nedladdningen genom att klicka på länken nedan:\n\n$3\n\nOBS: Om du inte gör detta nu, kommer denna genererade konfigurationsfil inte vara tillgänglig för dig senare om du avslutar installationen utan att ladda ned den.\n\nNär det är klart, kan du [$2 gå in på din wiki]", @@ -315,5 +316,5 @@ "config-nofile": "Filen \"$1\" kunde inte hittas. Har den raderats?", "config-extension-link": "Visste du att din wiki stödjer [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions tillägg]?\n\nDu kan bläddra [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category tillägg efter kategori].", "mainpagetext": "MediaWiki har installerats utan problem.", - "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [https://meta.wikimedia.org/wiki/Help:Contents användarguiden].\n\n== Att komma igång ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postlista för nya versioner av MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Läs om hur du bekämpar spam på din wiki]" + "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents användarguiden].\n\n== Att komma igång ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postlista för nya versioner av MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Läs om hur du bekämpar spam på din wiki]" } diff --git a/includes/installer/i18n/tl.json b/includes/installer/i18n/tl.json index 2ba2c27137..e078752f49 100644 --- a/includes/installer/i18n/tl.json +++ b/includes/installer/i18n/tl.json @@ -6,7 +6,8 @@ "아라", "Amire80", "Jojit fb", - "Macofe" + "Macofe", + "Emem.calist" ] }, "config-desc": "Ang tagapagluklok para sa MediaWiki", @@ -279,6 +280,7 @@ "config-install-subscribe-fail": "Hindi nagawang magpasipi mula sa mediawiki-announce: $1", "config-install-subscribe-notpossible": "Hindi nakalagak ang cURL at hindi makukuha ang allow_url_fopen", "config-install-mainpage": "Nililikha ang pangunahing pahina na may likas na nakatakdang nilalaman", + "config-install-mainpage-exists": "Ang pangunahing pahina ay nakasaad na, ipagpatuloy ang paglalathala", "config-install-extension-tables": "Nililikha ang mga talahanayan para sa pinagaganang mga dugtong", "config-install-mainpage-failed": "Hindi maisingit ang pangunahing pahina: $1", "config-install-done": "'''Maligayang bati!'''\nMatagumpay mong nailuklok ang MediaWiki.\n\nAng tagapagluklok ay nakagawa ng isang talaksan ng LocalSettings.php.\nNaglalaman ito ng lahat ng iyong mga pagsasaayos.\n\nKailangan mo itong ikargang paibaba at ilagay ito sa lipon ng iyong pagluluklok ng wiki (katulad ng direktoryo ng index.php). Ang pagkakargang paibaba ay dapat na kusang magsimula.\n\nKung ang pagkakargang paibaba ay hindi inialok, o kung hindi mo ito itinuloy, maaari mong muling simulan ang pagkakargang paibaba sa pamamagitan ng pagpindot sa kawing na nasa ibaba:\n\n$3\n\n'''Paunawa''': Kapag hindi mo ito ginawa ngayon, ang nagawang talaksang ito ng pagkakaayos ay hindi mo na makukuha mamaya kapag lumabas ka mula sa pagluluklok na hindi ikinakarga itong paibaba.\n\nKapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.", diff --git a/includes/installer/i18n/uk.json b/includes/installer/i18n/uk.json index 7644f417ab..78730351b6 100644 --- a/includes/installer/i18n/uk.json +++ b/includes/installer/i18n/uk.json @@ -308,6 +308,7 @@ "config-install-subscribe-fail": "Не можливо підписатись на mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL не встановлено і опція allow_url_fopen не доступна.", "config-install-mainpage": "Створення головної сторінки із вмістом за замовчуванням", + "config-install-mainpage-exists": "Головна сторінка вже існує, пропускаємо", "config-install-extension-tables": "Створення таблиць для увімкнених розширень", "config-install-mainpage-failed": "Не вдається вставити головну сторінку: $1", "config-install-done": "Вітаємо!\nВи успішно встановили MediaWiki.\n\nІнсталятор згенерував файл LocalSettings.php, який містить усі Ваші налаштування.\n\nВам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.\n\nЯкщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:\n\n$3\n\nПримітка: Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.\n\nПісля виконання дій, описаних вище, Ви зможете [$2 увійти у свою вікі].", diff --git a/includes/installer/i18n/zh-hans.json b/includes/installer/i18n/zh-hans.json index b6afa045f2..d0c0026a7c 100644 --- a/includes/installer/i18n/zh-hans.json +++ b/includes/installer/i18n/zh-hans.json @@ -318,6 +318,7 @@ "config-install-subscribe-fail": "无法订阅mediawiki-announce:$1", "config-install-subscribe-notpossible": "没有安装cURL,allow_url_fopen也不可用。", "config-install-mainpage": "正在创建显示默认内容的首页", + "config-install-mainpage-exists": "首页已存在,正在跳过", "config-install-extension-tables": "正在创建已启用扩展程序表", "config-install-mainpage-failed": "无法插入首页:$1", "config-install-done": "恭喜!\n您已经安装了MediaWiki。\n\n安装程序已经生成了LocalSettings.php文件,其中包含了您所有的配置。\n\n您需要下载该文件,并将其放在您wiki的根目录(index.php的同级目录)中。稍后下载将自动开始。\n\n如果浏览器没有提示您下载,或者您取消了下载,您可以点击下面的链接重新开始下载:\n\n$3\n\n注意:如果您现在不完成本步骤,而是没有下载便退出了安装过程,此后您将无法获得自动生成的配置文件。\n\n当本步骤完成后,您可以[$2 进入您的wiki]。", diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php index 171c291cf1..75c79a98fc 100644 --- a/includes/libs/objectcache/WANObjectCache.php +++ b/includes/libs/objectcache/WANObjectCache.php @@ -1127,6 +1127,65 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { return $values; } + /** + * Locally set a key to expire soon if it is stale based on $purgeTimestamp + * + * This sets stale keys' time-to-live at HOLDOFF_TTL seconds, which both avoids + * broadcasting in mcrouter setups and also avoids races with new tombstones. + * + * @param string $key Cache key + * @param int $purgeTimestamp UNIX timestamp of purge + * @param bool &$isStale Whether the key is stale + * @return bool Success + * @since 1.28 + */ + public function reap( $key, $purgeTimestamp, &$isStale = false ) { + $minAsOf = $purgeTimestamp + self::HOLDOFF_TTL; + $wrapped = $this->cache->get( self::VALUE_KEY_PREFIX . $key ); + if ( is_array( $wrapped ) && $wrapped[self::FLD_TIME] < $minAsOf ) { + $isStale = true; + $this->logger->warning( "Reaping stale value key '$key'." ); + $ttlReap = self::HOLDOFF_TTL; // avoids races with tombstone creation + $ok = $this->cache->changeTTL( self::VALUE_KEY_PREFIX . $key, $ttlReap ); + if ( !$ok ) { + $this->logger->error( "Could not complete reap of key '$key'." ); + } + + return $ok; + } + + $isStale = false; + + return true; + } + + /** + * Locally set a "check" key to expire soon if it is stale based on $purgeTimestamp + * + * @param string $key Cache key + * @param int $purgeTimestamp UNIX timestamp of purge + * @param bool &$isStale Whether the key is stale + * @return bool Success + * @since 1.28 + */ + public function reapCheckKey( $key, $purgeTimestamp, &$isStale = false ) { + $purge = $this->parsePurgeValue( $this->cache->get( self::TIME_KEY_PREFIX . $key ) ); + if ( $purge && $purge[self::FLD_TIME] < $purgeTimestamp ) { + $isStale = true; + $this->logger->warning( "Reaping stale check key '$key'." ); + $ok = $this->cache->changeTTL( self::TIME_KEY_PREFIX . $key, 1 ); + if ( !$ok ) { + $this->logger->error( "Could not complete reap of check key '$key'." ); + } + + return $ok; + } + + $isStale = false; + + return false; + } + /** * @see BagOStuff::makeKey() * @param string ... Key component diff --git a/includes/libs/objectcache/WANObjectCacheReaper.php b/includes/libs/objectcache/WANObjectCacheReaper.php new file mode 100644 index 0000000000..956a3a9c3a --- /dev/null +++ b/includes/libs/objectcache/WANObjectCacheReaper.php @@ -0,0 +1,205 @@ +cache = $cache; + $this->store = $store; + + $this->logChunkCallback = $logCallback; + $this->keyListCallback = $keyCallback; + if ( isset( $params['channel'] ) ) { + $this->channel = $params['channel']; + } else { + throw new UnexpectedValueException( "No channel specified." ); + } + + $this->initialStartWindow = isset( $params['initialStartWindow'] ) + ? $params['initialStartWindow'] + : 3600; + $this->logger = isset( $params['logger'] ) + ? $params['logger'] + : new NullLogger(); + } + + public function setLogger( LoggerInterface $logger ) { + $this->logger = $logger; + } + + /** + * Check and reap stale keys based on a chunk of events + * + * @param int $n Number of events + * @return int Number of keys checked + */ + final public function invoke( $n = 100 ) { + $posKey = $this->store->makeGlobalKey( 'WANCache', 'reaper', $this->channel ); + $scopeLock = $this->store->getScopedLock( "$posKey:busy", 0 ); + if ( !$scopeLock ) { + return 0; + } + + $now = time(); + $status = $this->store->get( $posKey ); + if ( !$status ) { + $status = [ 'pos' => $now - $this->initialStartWindow, 'id' => null ]; + } + + // Get events for entities who's keys tombstones/hold-off should have expired by now + $events = call_user_func_array( + $this->logChunkCallback, + [ $status['pos'], $status['id'], $now - WANObjectCache::HOLDOFF_TTL - 1, $n ] + ); + + $event = null; + $keyEvents = []; + foreach ( $events as $event ) { + $keys = call_user_func_array( + $this->keyListCallback, + [ $this->cache, $event['item'] ] + ); + foreach ( $keys as $key ) { + unset( $keyEvents[$key] ); // use only the latest per key + $keyEvents[$key] = [ + 'pos' => $event['pos'], + 'id' => $event['id'] + ]; + } + } + + $purgeCount = 0; + $lastOkEvent = null; + foreach ( $keyEvents as $key => $keyEvent ) { + if ( !$this->cache->reap( $key, $keyEvent['pos'] ) ) { + break; + } + ++$purgeCount; + $lastOkEvent = $event; + } + + if ( $lastOkEvent ) { + $ok = $this->store->merge( + $posKey, + function ( $bag, $key, $curValue ) use ( $lastOkEvent ) { + if ( !$curValue ) { + // Use new position + } else { + $curCoord = [ $curValue['pos'], $curValue['id'] ]; + $newCoord = [ $lastOkEvent['pos'], $lastOkEvent['id'] ]; + if ( $newCoord < $curCoord ) { + // Keep prior position instead of rolling it back + return $curValue; + } + } + + return [ + 'pos' => $lastOkEvent['pos'], + 'id' => $lastOkEvent['id'], + 'ctime' => $curValue ? $curValue['ctime'] : date( 'c' ) + ]; + }, + IExpiringStore::TTL_INDEFINITE + ); + + $pos = $lastOkEvent['pos']; + $id = $lastOkEvent['id']; + if ( $ok ) { + $this->logger->info( "Updated cache reap position ($pos, $id)." ); + } else { + $this->logger->error( "Could not update cache reap position ($pos, $id)." ); + } + } + + ScopedCallback::consume( $scopeLock ); + + return $purgeCount; + } + + /** + * @return array|bool Returns (pos, id) map or false if not set + */ + public function getState() { + $posKey = $this->store->makeGlobalKey( 'WANCache', 'reaper', $this->channel ); + + return $this->store->get( $posKey ); + } +} diff --git a/includes/libs/rdbms/ChronologyProtector.php b/includes/libs/rdbms/ChronologyProtector.php index 88af1dbdf8..dfe950e405 100644 --- a/includes/libs/rdbms/ChronologyProtector.php +++ b/includes/libs/rdbms/ChronologyProtector.php @@ -20,9 +20,16 @@ * @file * @ingroup Database */ + +namespace Wikimedia\Rdbms; + use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; use Wikimedia\WaitConditionLoop; +use BagOStuff; +use DBMasterPos; +use ILoadBalancer; /** * Class for ensuring a consistent ordering of events as seen by the user, despite replication. @@ -72,7 +79,7 @@ class ChronologyProtector implements LoggerAwareInterface { $this->clientId = md5( $client['ip'] . "\n" . $client['agent'] ); $this->key = $store->makeGlobalKey( __CLASS__, $this->clientId ); $this->waitForPosTime = $posTime; - $this->logger = new \Psr\Log\NullLogger(); + $this->logger = new NullLogger(); } public function setLogger( LoggerInterface $logger ) { diff --git a/includes/libs/rdbms/TransactionProfiler.php b/includes/libs/rdbms/TransactionProfiler.php index bf5e299865..5d3534ffaa 100644 --- a/includes/libs/rdbms/TransactionProfiler.php +++ b/includes/libs/rdbms/TransactionProfiler.php @@ -22,9 +22,12 @@ * @author Aaron Schulz */ +namespace Wikimedia\Rdbms; + use Psr\Log\LoggerInterface; use Psr\Log\LoggerAwareInterface; use Psr\Log\NullLogger; +use RuntimeException; /** * Helper class that detects high-contention DB queries via profiling calls diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index 69cf1ac356..68d500ba6c 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -26,6 +26,7 @@ use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerInterface; use Wikimedia\ScopedCallback; +use Wikimedia\Rdbms\TransactionProfiler; /** * Relational database abstraction object diff --git a/includes/libs/rdbms/lbfactory/LBFactory.php b/includes/libs/rdbms/lbfactory/LBFactory.php index 77d4aa993f..f580eeb006 100644 --- a/includes/libs/rdbms/lbfactory/LBFactory.php +++ b/includes/libs/rdbms/lbfactory/LBFactory.php @@ -23,6 +23,8 @@ use Psr\Log\LoggerInterface; use Wikimedia\ScopedCallback; +use Wikimedia\Rdbms\TransactionProfiler; +use Wikimedia\Rdbms\ChronologyProtector; /** * An interface for generating database load balancers diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php index 95f55b6a86..78f905c76b 100644 --- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php @@ -22,6 +22,7 @@ */ use Psr\Log\LoggerInterface; use Wikimedia\ScopedCallback; +use Wikimedia\Rdbms\TransactionProfiler; /** * Database connection, tracking, load balancing, and transaction manager for a cluster diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php index be73c86495..791330c160 100644 --- a/includes/logging/RightsLogFormatter.php +++ b/includes/logging/RightsLogFormatter.php @@ -70,7 +70,7 @@ class RightsLogFormatter extends LogFormatter { protected function getMessageParameters() { $params = parent::getMessageParameters(); - // Really old entries + // Really old entries that lack old/new groups if ( !isset( $params[3] ) && !isset( $params[4] ) ) { return $params; } @@ -81,25 +81,29 @@ class RightsLogFormatter extends LogFormatter { $userName = $this->entry->getTarget()->getText(); if ( !$this->plaintext && count( $oldGroups ) ) { foreach ( $oldGroups as &$group ) { - $group = User::getGroupMember( $group, $userName ); + $group = UserGroupMembership::getGroupMemberName( $group, $userName ); } } if ( !$this->plaintext && count( $newGroups ) ) { foreach ( $newGroups as &$group ) { - $group = User::getGroupMember( $group, $userName ); + $group = UserGroupMembership::getGroupMemberName( $group, $userName ); } } - $lang = $this->context->getLanguage(); + // fetch the metadata about each group membership + $allParams = $this->entry->getParameters(); + if ( count( $oldGroups ) ) { - $params[3] = $lang->listToText( $oldGroups ); + $params[3] = [ 'raw' => $this->formatRightsList( $oldGroups, + isset( $allParams['oldmetadata'] ) ? $allParams['oldmetadata'] : [] ) ]; } else { $params[3] = $this->msg( 'rightsnone' )->text(); } if ( count( $newGroups ) ) { // Array_values is used here because of T44211 // see use of array_unique in UserrightsPage::doSaveUserGroups on $newGroups. - $params[4] = $lang->listToText( array_values( $newGroups ) ); + $params[4] = [ 'raw' => $this->formatRightsList( array_values( $newGroups ), + isset( $allParams['newmetadata'] ) ? $allParams['newmetadata'] : [] ) ]; } else { $params[4] = $this->msg( 'rightsnone' )->text(); } @@ -109,6 +113,42 @@ class RightsLogFormatter extends LogFormatter { return $params; } + protected function formatRightsList( $groups, $serializedUGMs = [] ) { + $uiLanguage = $this->context->getLanguage(); + $uiUser = $this->context->getUser(); + // separate arrays of temporary and permanent memberships + $tempList = $permList = []; + + reset( $groups ); + reset( $serializedUGMs ); + while ( current( $groups ) ) { + $group = current( $groups ); + + if ( current( $serializedUGMs ) && + isset( current( $serializedUGMs )['expiry'] ) && + current( $serializedUGMs )['expiry'] + ) { + // there is an expiry date; format the group and expiry into a friendly string + $expiry = current( $serializedUGMs )['expiry']; + $expiryFormatted = $uiLanguage->userTimeAndDate( $expiry, $uiUser ); + $expiryFormattedD = $uiLanguage->userDate( $expiry, $uiUser ); + $expiryFormattedT = $uiLanguage->userTime( $expiry, $uiUser ); + $tempList[] = $this->msg( 'rightslogentry-temporary-group' )->params( $group, + $expiryFormatted, $expiryFormattedD, $expiryFormattedT )->parse(); + } else { + // the right does not expire; just insert the group name + $permList[] = $group; + } + + next( $groups ); + next( $serializedUGMs ); + } + + // place all temporary memberships first, to avoid the ambiguity of + // "adinistrator, bureaucrat and importer (temporary, until X time)" + return $uiLanguage->listToText( array_merge( $tempList, $permList ) ); + } + protected function getParametersForApi() { $entry = $this->entry; $params = $entry->getParameters(); @@ -126,12 +166,44 @@ class RightsLogFormatter extends LogFormatter { } } - // Really old entries does not have log params + // Really old entries do not have log params, so form them from whatever info + // we have. + // Also walk through the parallel arrays of groups and metadata, combining each + // metadata array with the name of the group it pertains to if ( isset( $params['4:array:oldgroups'] ) ) { $params['4:array:oldgroups'] = $this->makeGroupArray( $params['4:array:oldgroups'] ); + + $oldmetadata =& $params['oldmetadata']; + // unset old metadata entry to ensure metadata goes at the end of the params array + unset( $params['oldmetadata'] ); + $params['oldmetadata'] = array_map( function( $index ) use ( $params, $oldmetadata ) { + $result = [ 'group' => $params['4:array:oldgroups'][$index] ]; + if ( isset( $oldmetadata[$index] ) ) { + $result += $oldmetadata[$index]; + } + $result['expiry'] = ApiResult::formatExpiry( isset( $result['expiry'] ) ? + $result['expiry'] : null ); + + return $result; + }, array_keys( $params['4:array:oldgroups'] ) ); } + if ( isset( $params['5:array:newgroups'] ) ) { $params['5:array:newgroups'] = $this->makeGroupArray( $params['5:array:newgroups'] ); + + $newmetadata =& $params['newmetadata']; + // unset old metadata entry to ensure metadata goes at the end of the params array + unset( $params['newmetadata'] ); + $params['newmetadata'] = array_map( function( $index ) use ( $params, $newmetadata ) { + $result = [ 'group' => $params['5:array:newgroups'][$index] ]; + if ( isset( $newmetadata[$index] ) ) { + $result += $newmetadata[$index]; + } + $result['expiry'] = ApiResult::formatExpiry( isset( $result['expiry'] ) ? + $result['expiry'] : null ); + + return $result; + }, array_keys( $params['5:array:newgroups'] ) ); } return $params; @@ -145,6 +217,14 @@ class RightsLogFormatter extends LogFormatter { if ( isset( $ret['newgroups'] ) ) { ApiResult::setIndexedTagName( $ret['newgroups'], 'g' ); } + if ( isset( $ret['oldmetadata'] ) ) { + ApiResult::setArrayType( $ret['oldmetadata'], 'array' ); + ApiResult::setIndexedTagName( $ret['oldmetadata'], 'g' ); + } + if ( isset( $ret['newmetadata'] ) ) { + ApiResult::setArrayType( $ret['newmetadata'], 'array' ); + ApiResult::setIndexedTagName( $ret['newmetadata'], 'g' ); + } return $ret; } diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php index de49fc3458..5fd3348a8c 100644 --- a/includes/objectcache/SqlBagOStuff.php +++ b/includes/objectcache/SqlBagOStuff.php @@ -23,6 +23,7 @@ use \MediaWiki\MediaWikiServices; use \Wikimedia\WaitConditionLoop; +use \Wikimedia\Rdbms\TransactionProfiler; /** * Class to store objects in the database diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index ab95eea4e3..1c1412a81f 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -3652,4 +3652,15 @@ class WikiPage implements Page, IDBAccessObject { public function getSourceURL() { return $this->getTitle()->getCanonicalURL(); } + + /* + * @param WANObjectCache $cache + * @return string[] + * @since 1.28 + */ + public function getMutableCacheKeys( WANObjectCache $cache ) { + $linkCache = MediaWikiServices::getInstance()->getLinkCache(); + + return $linkCache->getMutableCacheKeys( $cache, $this->getTitle()->getTitleValue() ); + } } diff --git a/includes/profiler/Profiler.php b/includes/profiler/Profiler.php index 8b4f01a306..252a227a1d 100644 --- a/includes/profiler/Profiler.php +++ b/includes/profiler/Profiler.php @@ -22,6 +22,7 @@ * @defgroup Profiler Profiler */ use Wikimedia\ScopedCallback; +use Wikimedia\Rdbms\TransactionProfiler; /** * Profiler base class that defines the interface and some trivial diff --git a/includes/search/SearchEngine.php b/includes/search/SearchEngine.php index 0bcb07a5a6..9817b6cc99 100644 --- a/includes/search/SearchEngine.php +++ b/includes/search/SearchEngine.php @@ -109,6 +109,20 @@ abstract class SearchEngine { $this->features[$feature] = $data; } + /** + * Way to retrieve custom data set by setFeatureData + * or by the engine itself. + * @since 1.29 + * @param string $feature feature name + * @return mixed the feature value or null if unset + */ + public function getFeatureData( $feature ) { + if ( isset ( $this->features[$feature] ) ) { + return $this->features[$feature]; + } + return null; + } + /** * When overridden in derived class, performs database-specific conversions * on text to be used for searching or updating search index. @@ -706,8 +720,21 @@ abstract class SearchEngine { public function getSearchIndexFields() { $models = ContentHandler::getContentModels(); $fields = []; + $seenHandlers = new SplObjectStorage(); foreach ( $models as $model ) { - $handler = ContentHandler::getForModelID( $model ); + try { + $handler = ContentHandler::getForModelID( $model ); + } + catch ( MWUnknownContentModelException $e ) { + // If we can find no handler, ignore it + continue; + } + // Several models can have the same handler, so avoid processing it repeatedly + if ( $seenHandlers->contains( $handler ) ) { + // We already did this one + continue; + } + $seenHandlers->attach( $handler ); $handlerFields = $handler->getFieldsForSearchIndex( $this ); foreach ( $handlerFields as $fieldName => $fieldData ) { if ( empty( $fields[$fieldName] ) ) { diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index bf260aa464..bc6dfcaaf0 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -61,7 +61,7 @@ class SkinTemplate extends Skin { * * @param OutputPage $out */ - function setupSkinUserCss( OutputPage $out ) { + public function setupSkinUserCss( OutputPage $out ) { $moduleStyles = [ 'mediawiki.legacy.shared', 'mediawiki.legacy.commonPrint', @@ -1283,7 +1283,7 @@ class SkinTemplate extends Skin { 'href' => $this->getTitle()->getLocalURL( "action=info" ) ]; - if ( $this->getTitle()->exists() ) { + if ( $this->getTitle()->exists() || $this->getTitle()->inNamespace( NS_CATEGORY ) ) { $nav_urls['recentchangeslinked'] = [ 'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalURL() ]; diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php index 00efeae1e2..00439a12a4 100644 --- a/includes/specialpage/ChangesListSpecialPage.php +++ b/includes/specialpage/ChangesListSpecialPage.php @@ -20,6 +20,7 @@ * @file * @ingroup SpecialPage */ +use MediaWiki\Logger\LoggerFactory; /** * Special page which uses a ChangesList to show query results. @@ -77,6 +78,14 @@ abstract class ChangesListSpecialPage extends SpecialPage { $this->webOutput( $rows, $opts ); $rows->free(); + + if ( $this->getConfig()->get( 'EnableWANCacheReaper' ) ) { + // Clean up any bad page entries for titles showing up in RC + DeferredUpdates::addUpdate( new WANCacheReapUpdate( + $this->getDB(), + LoggerFactory::getInstance( 'objectcache' ) + ) ); + } } /** diff --git a/includes/specials/SpecialActiveusers.php b/includes/specials/SpecialActiveusers.php index a01e9b2675..e7030c56e5 100644 --- a/includes/specials/SpecialActiveusers.php +++ b/includes/specials/SpecialActiveusers.php @@ -86,7 +86,7 @@ class SpecialActiveUsers extends SpecialPage { $groups = User::getAllGroups(); foreach ( $groups as $group ) { - $msg = htmlspecialchars( User::getGroupName( $group ) ); + $msg = htmlspecialchars( UserGroupMembership::getGroupName( $group ) ); $options[$msg] = $group; } diff --git a/includes/specials/SpecialBlock.php b/includes/specials/SpecialBlock.php index 93cb3773bd..c18ae0e336 100644 --- a/includes/specials/SpecialBlock.php +++ b/includes/specials/SpecialBlock.php @@ -829,7 +829,7 @@ class SpecialBlock extends FormSpecialPage { $logEntry->setRelations( [ 'ipb_id' => $blockIds ] ); $logId = $logEntry->insert(); - if ( count( $data['Tags'] ) ) { + if ( !empty( $data['Tags'] ) ) { $logEntry->setTags( $data['Tags'] ); } diff --git a/includes/specials/SpecialListgrouprights.php b/includes/specials/SpecialListgrouprights.php index f3d3a776e6..7a25e55d58 100644 --- a/includes/specials/SpecialListgrouprights.php +++ b/includes/specials/SpecialListgrouprights.php @@ -273,12 +273,14 @@ class SpecialListGroupRights extends SpecialPage { } elseif ( is_array( $changeGroup ) ) { $changeGroup = array_intersect( array_values( array_unique( $changeGroup ) ), $allGroups ); if ( count( $changeGroup ) ) { + $groupLinks = []; + foreach ( $changeGroup as $group ) { + $groupLinks[] = UserGroupMembership::getLink( $group, $this->getContext(), 'wiki' ); + } // For grep: listgrouprights-addgroup, listgrouprights-removegroup, // listgrouprights-addgroup-self, listgrouprights-removegroup-self $r[] = $this->msg( 'listgrouprights-' . $messageKey, - $lang->listToText( array_map( [ 'User', 'makeGroupLinkWiki' ], $changeGroup ) ), - count( $changeGroup ) - )->parse(); + $lang->listToText( $groupLinks ), count( $changeGroup ) )->parse(); } } } diff --git a/includes/specials/SpecialUserrights.php b/includes/specials/SpecialUserrights.php index b1f8a178cf..b0808f6585 100644 --- a/includes/specials/SpecialUserrights.php +++ b/includes/specials/SpecialUserrights.php @@ -85,6 +85,8 @@ class UserrightsPage extends SpecialPage { $session = $request->getSession(); $out = $this->getOutput(); + $out->addModules( [ 'mediawiki.special.userrights' ] ); + if ( $par !== null ) { $this->mTarget = $par; } else { @@ -117,7 +119,6 @@ class UserrightsPage extends SpecialPage { // Remove session data for the success message $session->remove( 'specialUserrightsSaveSuccess' ); - $out->addModules( [ 'mediawiki.special.userrights' ] ); $out->addModuleStyles( 'mediawiki.notification.convertmessagebox.styles' ); $out->addHTML( Html::rawElement( @@ -178,18 +179,22 @@ class UserrightsPage extends SpecialPage { ) { $out->addWikiMsg( 'userrights-conflict' ); } else { - $this->saveUserGroups( + $status = $this->saveUserGroups( $this->mTarget, $request->getVal( 'user-reason' ), $targetUser ); - // Set session data for the success message - $session->set( 'specialUserrightsSaveSuccess', 1 ); - - $out->redirect( $this->getSuccessURL() ); + if ( $status->isOK() ) { + // Set session data for the success message + $session->set( 'specialUserrightsSaveSuccess', 1 ); - return; + $out->redirect( $this->getSuccessURL() ); + return; + } else { + // Print an error message and redisplay the form + $out->addWikiText( '
' . $status->getWikiText() . '
' ); + } } } @@ -203,6 +208,41 @@ class UserrightsPage extends SpecialPage { return $this->getPageTitle( $this->mTarget )->getFullURL(); } + /** + * Returns true if this user rights form can set and change user group expiries. + * Subclasses may wish to override this to return false. + * + * @return bool + */ + public function canProcessExpiries() { + return !$this->getConfig()->get( 'DisableUserGroupExpiry' ); + } + + /** + * Converts a user group membership expiry string into a timestamp. Words like + * 'existing' or 'other' should have been filtered out before calling this + * function. + * + * @param string $expiry + * @return string|null|false A string containing a valid timestamp, or null + * if the expiry is infinite, or false if the timestamp is not valid + */ + public static function expiryToTimestamp( $expiry ) { + if ( wfIsInfinity( $expiry ) ) { + return null; + } + + $unix = strtotime( $expiry ); + + if ( !$unix || $unix === -1 ) { + return false; + } + + // @todo FIXME: Non-qualified absolute times are not in users specified timezone + // and there isn't notice about it in the ui (see ProtectionForm::getExpiry) + return wfTimestamp( TS_MW, $unix ); + } + /** * Save user groups changes in the database. * Data comes from the editUserGroupsForm() form function @@ -210,11 +250,12 @@ class UserrightsPage extends SpecialPage { * @param string $username Username to apply changes to. * @param string $reason Reason for group change * @param User|UserRightsProxy $user Target user object. - * @return null + * @return Status */ - function saveUserGroups( $username, $reason, $user ) { + protected function saveUserGroups( $username, $reason, $user ) { $allgroups = $this->getAllGroups(); $addgroup = []; + $groupExpiries = []; // associative array of (group name => expiry) $removegroup = []; // This could possibly create a highly unlikely race condition if permissions are changed between @@ -224,12 +265,38 @@ class UserrightsPage extends SpecialPage { // Later on, this gets filtered for what can actually be removed if ( $this->getRequest()->getCheck( "wpGroup-$group" ) ) { $addgroup[] = $group; + + if ( $this->canProcessExpiries() ) { + // read the expiry information from the request + $expiryDropdown = $this->getRequest()->getVal( "wpExpiry-$group" ); + if ( $expiryDropdown === 'other' ) { + $expiryValue = $this->getRequest()->getVal( "wpExpiry-$group-other" ); + } elseif ( $expiryDropdown !== 'existing' ) { + $expiryValue = $expiryDropdown; + } else { + continue; + } + + // validate the expiry + $groupExpiries[$group] = self::expiryToTimestamp( $expiryValue ); + + if ( $groupExpiries[$group] === false ) { + return Status::newFatal( 'userrights-invalid-expiry', $group ); + } + + // not allowed to have things expiring in the past + if ( $groupExpiries[$group] && $groupExpiries[$group] < wfTimestampNow() ) { + return Status::newFatal( 'userrights-expiry-in-past', $group ); + } + } } else { $removegroup[] = $group; } } - $this->doSaveUserGroups( $user, $addgroup, $removegroup, $reason ); + $this->doSaveUserGroups( $user, $addgroup, $removegroup, $reason, [], $groupExpiries ); + + return Status::newGood(); } /** @@ -240,9 +307,13 @@ class UserrightsPage extends SpecialPage { * @param array $remove Array of groups to remove * @param string $reason Reason for group change * @param array $tags Array of change tags to add to the log entry + * @param array $groupExpiries Associative array of (group name => expiry), + * containing only those groups that are to have new expiry values set * @return array Tuple of added, then removed groups */ - function doSaveUserGroups( $user, $add, $remove, $reason = '', $tags = [] ) { + function doSaveUserGroups( $user, $add, $remove, $reason = '', $tags = [], + $groupExpiries = [] ) { + // Validate input set... $isself = $user->getName() == $this->getUser()->getName(); $groups = $user->getGroups(); @@ -252,17 +323,21 @@ class UserrightsPage extends SpecialPage { $remove = array_unique( array_intersect( (array)$remove, $removable, $groups ) ); - $add = array_unique( array_diff( - array_intersect( (array)$add, $addable ), - $groups ) - ); + $add = array_intersect( (array)$add, $addable ); + + // add only groups that are not already present or that need their expiry updated + $add = array_filter( $add, + function( $group ) use ( $groups, $groupExpiries ) { + return !in_array( $group, $groups ) || array_key_exists( $group, $groupExpiries ); + } ); Hooks::run( 'ChangeUserGroups', [ $this->getUser(), $user, &$add, &$remove ] ); - $oldGroups = $user->getGroups(); + $oldGroups = $groups; + $oldUGMs = $user->getGroupMemberships(); $newGroups = $oldGroups; - // Remove then add groups + // Remove groups, then add new ones/update expiries of existing ones if ( $remove ) { foreach ( $remove as $index => $group ) { if ( !$user->removeGroup( $group ) ) { @@ -273,13 +348,15 @@ class UserrightsPage extends SpecialPage { } if ( $add ) { foreach ( $add as $index => $group ) { - if ( !$user->addGroup( $group ) ) { + $expiry = isset( $groupExpiries[$group] ) ? $groupExpiries[$group] : null; + if ( !$user->addGroup( $group, $expiry ) ) { unset( $add[$index] ); } } $newGroups = array_merge( $newGroups, $add ); } $newGroups = array_unique( $newGroups ); + $newUGMs = $user->getGroupMemberships(); // Ensure that caches are cleared $user->invalidateCache(); @@ -292,25 +369,59 @@ class UserrightsPage extends SpecialPage { wfDebug( 'oldGroups: ' . print_r( $oldGroups, true ) . "\n" ); wfDebug( 'newGroups: ' . print_r( $newGroups, true ) . "\n" ); + wfDebug( 'oldUGMs: ' . print_r( $oldUGMs, true ) . "\n" ); + wfDebug( 'newUGMs: ' . print_r( $newUGMs, true ) . "\n" ); // Deprecated in favor of UserGroupsChanged hook Hooks::run( 'UserRights', [ &$user, $add, $remove ], '1.26' ); - if ( $newGroups != $oldGroups ) { - $this->addLogEntry( $user, $oldGroups, $newGroups, $reason, $tags ); + // Only add a log entry if something actually changed + if ( $newGroups != $oldGroups || $newUGMs != $oldUGMs ) { + $this->addLogEntry( $user, $oldGroups, $newGroups, $reason, $tags, $oldUGMs, $newUGMs ); } return [ $add, $remove ]; } + /** + * Serialise a UserGroupMembership object for storage in the log_params section + * of the logging table. Only keeps essential data, removing redundant fields. + * + * @param UserGroupMembership|null $ugm May be null if things get borked + * @return array + */ + protected static function serialiseUgmForLog( $ugm ) { + if ( !$ugm instanceof UserGroupMembership ) { + return null; + } + return [ 'expiry' => $ugm->getExpiry() ]; + } + /** * Add a rights log entry for an action. - * @param User $user + * @param User|UserRightsProxy $user * @param array $oldGroups * @param array $newGroups * @param array $reason - * @param array $tags + * @param array $tags Change tags for the log entry + * @param array $oldUGMs Associative array of (group name => UserGroupMembership) + * @param array $newUGMs Associative array of (group name => UserGroupMembership) */ - function addLogEntry( $user, $oldGroups, $newGroups, $reason, $tags ) { + protected function addLogEntry( $user, $oldGroups, $newGroups, $reason, $tags, + $oldUGMs, $newUGMs ) { + + // make sure $oldUGMs and $newUGMs are in the same order, and serialise + // each UGM object to a simplified array + $oldUGMs = array_map( function( $group ) use ( $oldUGMs ) { + return isset( $oldUGMs[$group] ) ? + self::serialiseUgmForLog( $oldUGMs[$group] ) : + null; + }, $oldGroups ); + $newUGMs = array_map( function( $group ) use ( $newUGMs ) { + return isset( $newUGMs[$group] ) ? + self::serialiseUgmForLog( $newUGMs[$group] ) : + null; + }, $newGroups ); + $logEntry = new ManualLogEntry( 'rights', 'rights' ); $logEntry->setPerformer( $this->getUser() ); $logEntry->setTarget( $user->getUserPage() ); @@ -318,6 +429,8 @@ class UserrightsPage extends SpecialPage { $logEntry->setParameters( [ '4::oldgroups' => $oldGroups, '5::newgroups' => $newGroups, + 'oldmetadata' => $oldUGMs, + 'newmetadata' => $newUGMs, ] ); $logid = $logEntry->insert(); if ( count( $tags ) ) { @@ -341,8 +454,8 @@ class UserrightsPage extends SpecialPage { } $groups = $user->getGroups(); - - $this->showEditUserGroupsForm( $user, $groups ); + $groupMemberships = $user->getGroupMemberships(); + $this->showEditUserGroupsForm( $user, $groups, $groupMemberships ); // This isn't really ideal logging behavior, but let's not hide the // interwiki logs if we're using them as is. @@ -475,35 +588,47 @@ class UserrightsPage extends SpecialPage { * Show the form to edit group memberships. * * @param User|UserRightsProxy $user User or UserRightsProxy you're editing - * @param array $groups Array of groups the user is in + * @param array $groups Array of groups the user is in. Not used by this implementation + * anymore, but kept for backward compatibility with subclasses + * @param array $groupMemberships Associative array of (group name => UserGroupMembership + * object) containing the groups the user is in */ - protected function showEditUserGroupsForm( $user, $groups ) { - $list = []; - $membersList = []; - foreach ( $groups as $group ) { - $list[] = self::buildGroupLink( $group ); - $membersList[] = self::buildGroupMemberLink( $group ); + protected function showEditUserGroupsForm( $user, $groups, $groupMemberships ) { + $list = $membersList = $tempList = $tempMembersList = []; + foreach ( $groupMemberships as $ugm ) { + $linkG = UserGroupMembership::getLink( $ugm, $this->getContext(), 'html' ); + $linkM = UserGroupMembership::getLink( $ugm, $this->getContext(), 'html', + $user->getName() ); + if ( $ugm->getExpiry() ) { + $tempList[] = $linkG; + $tempMembersList[] = $linkM; + } else { + $list[] = $linkG; + $membersList[] = $linkM; + + } } $autoList = []; $autoMembersList = []; if ( $user instanceof User ) { foreach ( Autopromote::getAutopromoteGroups( $user ) as $group ) { - $autoList[] = self::buildGroupLink( $group ); - $autoMembersList[] = self::buildGroupMemberLink( $group ); + $autoList[] = UserGroupMembership::getLink( $group, $this->getContext(), 'html' ); + $autoMembersList[] = UserGroupMembership::getLink( $group, $this->getContext(), + 'html', $user->getName() ); } } $language = $this->getLanguage(); $displayedList = $this->msg( 'userrights-groupsmember-type' ) ->rawParams( - $language->listToText( $list ), - $language->listToText( $membersList ) + $language->commaList( array_merge( $tempList, $list ) ), + $language->commaList( array_merge( $tempMembersList, $membersList ) ) )->escaped(); $displayedAutolist = $this->msg( 'userrights-groupsmember-type' ) ->rawParams( - $language->listToText( $autoList ), - $language->listToText( $autoMembersList ) + $language->commaList( $autoList ), + $language->commaList( $autoMembersList ) )->escaped(); $grouplist = ''; @@ -532,7 +657,8 @@ class UserrightsPage extends SpecialPage { Linker::TOOL_LINKS_EMAIL /* Add "send e-mail" link */ ); - list( $groupCheckboxes, $canChangeAny ) = $this->groupCheckboxes( $groups, $user ); + list( $groupCheckboxes, $canChangeAny ) = + $this->groupCheckboxes( $groupMemberships, $user ); $this->getOutput()->addHTML( Xml::openElement( 'form', @@ -598,26 +724,6 @@ class UserrightsPage extends SpecialPage { ); } - /** - * Format a link to a group description page - * - * @param string $group - * @return string - */ - private static function buildGroupLink( $group ) { - return User::makeGroupLinkHTML( $group, User::getGroupName( $group ) ); - } - - /** - * Format a link to a group member description page - * - * @param string $group - * @return string - */ - private static function buildGroupMemberLink( $group ) { - return User::makeGroupLinkHTML( $group, User::getGroupMember( $group ) ); - } - /** * Returns an array of all groups that may be edited * @return array Array of groups that may be edited. @@ -629,8 +735,8 @@ class UserrightsPage extends SpecialPage { /** * Adds a table with checkboxes where you can select what groups to add/remove * - * @todo Just pass the username string? - * @param array $usergroups Groups the user belongs to + * @param array $usergroups Associative array of (group name as string => + * UserGroupMembership object) for groups the user belongs to * @param User $user * @return Array with 2 elements: the XHTML table element with checkxboes, and * whether any groups are changeable @@ -639,12 +745,18 @@ class UserrightsPage extends SpecialPage { $allgroups = $this->getAllGroups(); $ret = ''; + // Get the list of preset expiry times from the system message + $expiryOptionsMsg = $this->msg( 'userrights-expiry-options' )->inContentLanguage(); + $expiryOptions = $expiryOptionsMsg->isDisabled() ? + [] : + explode( ',', $expiryOptionsMsg->text() ); + // Put all column info into an associative array so that extensions can // more easily manage it. $columns = [ 'unchangeable' => [], 'changeable' => [] ]; foreach ( $allgroups as $group ) { - $set = in_array( $group, $usergroups ); + $set = isset( $usergroups[$group] ); // Should the checkbox be disabled? $disabled = !( ( $set && $this->canRemove( $group ) ) || @@ -691,7 +803,7 @@ class UserrightsPage extends SpecialPage { foreach ( $column as $group => $checkbox ) { $attr = $checkbox['disabled'] ? [ 'disabled' => 'disabled' ] : []; - $member = User::getGroupMember( $group, $user->getName() ); + $member = UserGroupMembership::getGroupMemberName( $group, $user->getName() ); if ( $checkbox['irreversible'] ) { $text = $this->msg( 'userrights-irreversible-marker', $member )->text(); } else { @@ -700,9 +812,91 @@ class UserrightsPage extends SpecialPage { $checkboxHtml = Xml::checkLabel( $text, "wpGroup-" . $group, "wpGroup-" . $group, $checkbox['set'], $attr ); $ret .= "\t\t" . ( $checkbox['disabled'] - ? Xml::tags( 'span', [ 'class' => 'mw-userrights-disabled' ], $checkboxHtml ) - : $checkboxHtml - ) . "
\n"; + ? Xml::tags( 'div', [ 'class' => 'mw-userrights-disabled' ], $checkboxHtml ) + : Xml::tags( 'div', [], $checkboxHtml ) + ) . "\n"; + + if ( $this->canProcessExpiries() ) { + $uiUser = $this->getUser(); + $uiLanguage = $this->getLanguage(); + + $currentExpiry = isset( $usergroups[$group] ) ? + $usergroups[$group]->getExpiry() : + null; + + // If the user can't uncheck this checkbox, print the current expiry below + // it in plain text. Otherwise provide UI to set/change the expiry + if ( $checkbox['set'] && ( $checkbox['irreversible'] || $checkbox['disabled'] ) ) { + if ( $currentExpiry ) { + $expiryFormatted = $uiLanguage->userTimeAndDate( $currentExpiry, $uiUser ); + $expiryFormattedD = $uiLanguage->userDate( $currentExpiry, $uiUser ); + $expiryFormattedT = $uiLanguage->userTime( $currentExpiry, $uiUser ); + $expiryHtml = $this->msg( 'userrights-expiry-current' )->params( + $expiryFormatted, $expiryFormattedD, $expiryFormattedT )->text(); + } else { + $expiryHtml = $this->msg( 'userrights-expiry-none' )->text(); + } + $expiryHtml .= "
\n"; + } else { + $expiryHtml = Xml::element( 'span', null, + $this->msg( 'userrights-expiry' )->text() ); + $expiryHtml .= Xml::openElement( 'span' ); + + // add a form element to set the expiry date + $expiryFormOptions = new XmlSelect( + "wpExpiry-$group", + "mw-input-wpExpiry-$group", // forward compatibility with HTMLForm + $currentExpiry ? 'existing' : 'infinite' + ); + if ( $checkbox['disabled'] ) { + $expiryFormOptions->setAttribute( 'disabled', 'disabled' ); + } + + if ( $currentExpiry ) { + $timestamp = $uiLanguage->userTimeAndDate( $currentExpiry, $uiUser ); + $d = $uiLanguage->userDate( $currentExpiry, $uiUser ); + $t = $uiLanguage->userTime( $currentExpiry, $uiUser ); + $existingExpiryMessage = $this->msg( 'userrights-expiry-existing', + $timestamp, $d, $t ); + $expiryFormOptions->addOption( $existingExpiryMessage->text(), 'existing' ); + } + + $expiryFormOptions->addOption( + $this->msg( 'userrights-expiry-none' )->text(), + 'infinite' + ); + $expiryFormOptions->addOption( + $this->msg( 'userrights-expiry-othertime' )->text(), + 'other' + ); + foreach ( $expiryOptions as $option ) { + if ( strpos( $option, ":" ) === false ) { + $displayText = $value = $option; + } else { + list( $displayText, $value ) = explode( ":", $option ); + } + $expiryFormOptions->addOption( $displayText, htmlspecialchars( $value ) ); + } + + // Add expiry dropdown + $expiryHtml .= $expiryFormOptions->getHTML() . '
'; + + // Add custom expiry field + $attribs = [ 'id' => "mw-input-wpExpiry-$group-other" ]; + if ( $checkbox['disabled'] ) { + $attribs['disabled'] = 'disabled'; + } + $expiryHtml .= Xml::input( "wpExpiry-$group-other", 30, '', $attribs ); + + $expiryHtml .= Xml::closeElement( 'span' ); + } + + $divAttribs = [ + 'id' => "mw-userrights-nested-wpGroup-$group", + 'class' => 'mw-userrights-nested', + ]; + $ret .= "\t\t\t" . Xml::tags( 'div', $divAttribs, $expiryHtml ) . "\n"; + } } $ret .= "\t\n"; } diff --git a/includes/specials/pagers/ActiveUsersPager.php b/includes/specials/pagers/ActiveUsersPager.php index 645a115041..1fec05d39d 100644 --- a/includes/specials/pagers/ActiveUsersPager.php +++ b/includes/specials/pagers/ActiveUsersPager.php @@ -101,12 +101,19 @@ class ActiveUsersPager extends UsersPager { $tables[] = 'user_groups'; $conds[] = 'ug_user = user_id'; $conds['ug_group'] = $this->groups; + if ( !$this->getConfig()->get( 'DisableUserGroupExpiry' ) ) { + $conds[] = 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ); + } } if ( $this->excludegroups !== [] ) { foreach ( $this->excludegroups as $group ) { $conds[] = 'NOT EXISTS (' . $dbr->selectSQLText( - 'user_groups', '1', [ 'ug_user = user_id', 'ug_group' => $group ] - ) . ')'; + 'user_groups', '1', [ + 'ug_user = user_id', + 'ug_group' => $group, + 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ) + ] + ) . ')'; } } if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { @@ -165,9 +172,9 @@ class ActiveUsersPager extends UsersPager { $list = []; $user = User::newFromId( $row->user_id ); - $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache ); - foreach ( $groups_list as $group ) { - $list[] = self::buildGroupLink( $group, $userName ); + $ugms = self::getGroupMemberships( intval( $row->user_id ), $this->userGroupCache ); + foreach ( $ugms as $ugm ) { + $list[] = $this->buildGroupLink( $ugm, $userName ); } $groups = $lang->commaList( $list ); diff --git a/includes/specials/pagers/ContribsPager.php b/includes/specials/pagers/ContribsPager.php index 39c55c8a0c..367d07304f 100644 --- a/includes/specials/pagers/ContribsPager.php +++ b/includes/specials/pagers/ContribsPager.php @@ -222,7 +222,11 @@ class ContribsPager extends ReverseChronologicalPager { $join_conds['user_groups'] = [ 'LEFT JOIN', [ 'ug_user = rev_user', - 'ug_group' => $groupsWithBotPermission + 'ug_group' => $groupsWithBotPermission, + $this->getConfig()->get( 'DisableUserGroupExpiry' ) ? + '1' : + 'ug_expiry IS NULL OR ug_expiry >= ' . + $this->mDb->addQuotes( $this->mDb->timestamp() ) ] ]; } diff --git a/includes/specials/pagers/NewFilesPager.php b/includes/specials/pagers/NewFilesPager.php index e22b939fd6..4bf5dff667 100644 --- a/includes/specials/pagers/NewFilesPager.php +++ b/includes/specials/pagers/NewFilesPager.php @@ -59,13 +59,17 @@ class NewFilesPager extends ReverseChronologicalPager { $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' ); if ( count( $groupsWithBotPermission ) ) { + $dbr = wfGetDB( DB_REPLICA ); $tables[] = 'user_groups'; $conds[] = 'ug_group IS NULL'; $jconds['user_groups'] = [ 'LEFT JOIN', [ 'ug_group' => $groupsWithBotPermission, - 'ug_user = img_user' + 'ug_user = img_user', + $this->getConfig()->get( 'DisableUserGroupExpiry' ) ? + '1' : + 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ) ] ]; } diff --git a/includes/specials/pagers/UsersPager.php b/includes/specials/pagers/UsersPager.php index 901be38993..12039aa1e0 100644 --- a/includes/specials/pagers/UsersPager.php +++ b/includes/specials/pagers/UsersPager.php @@ -112,6 +112,9 @@ class UsersPager extends AlphabeticPager { if ( $this->requestedGroup != '' ) { $conds['ug_group'] = $this->requestedGroup; + if ( !$this->getConfig()->get( 'DisableUserGroupExpiry' ) ) { + $conds[] = 'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() ); + } } if ( $this->requestedUser != '' ) { @@ -177,12 +180,12 @@ class UsersPager extends AlphabeticPager { $lang = $this->getLanguage(); $groups = ''; - $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache ); + $ugms = self::getGroupMemberships( intval( $row->user_id ), $this->userGroupCache ); - if ( !$this->including && count( $groups_list ) > 0 ) { + if ( !$this->including && count( $ugms ) > 0 ) { $list = []; - foreach ( $groups_list as $group ) { - $list[] = self::buildGroupLink( $group, $userName ); + foreach ( $ugms as $ugm ) { + $list[] = $this->buildGroupLink( $ugm, $userName ); } $groups = $lang->commaList( $list ); } @@ -231,15 +234,18 @@ class UsersPager extends AlphabeticPager { $dbr = wfGetDB( DB_REPLICA ); $groupRes = $dbr->select( 'user_groups', - [ 'ug_user', 'ug_group' ], + UserGroupMembership::selectFields(), [ 'ug_user' => $userIds ], __METHOD__ ); $cache = []; $groups = []; foreach ( $groupRes as $row ) { - $cache[intval( $row->ug_user )][] = $row->ug_group; - $groups[$row->ug_group] = true; + $ugm = UserGroupMembership::newFromRow( $row ); + if ( !$ugm->isExpired() ) { + $cache[$row->ug_user][$row->ug_group] = $ugm; + $groups[$row->ug_group] = true; + } } // Give extensions a chance to add things like global user group data @@ -250,7 +256,7 @@ class UsersPager extends AlphabeticPager { // Add page of groups to link batch foreach ( $groups as $group => $unused ) { - $groupPage = User::getGroupPage( $group ); + $groupPage = UserGroupMembership::getGroupPage( $group ); if ( $groupPage ) { $batch->addObj( $groupPage ); } @@ -340,7 +346,7 @@ class UsersPager extends AlphabeticPager { function getAllGroups() { $result = []; foreach ( User::getAllGroups() as $group ) { - $result[$group] = User::getGroupName( $group ); + $result[$group] = UserGroupMembership::getGroupName( $group ); } asort( $result ); @@ -365,36 +371,30 @@ class UsersPager extends AlphabeticPager { } /** - * Get a list of groups the specified user belongs to + * Get an associative array containing groups the specified user belongs to, + * and the relevant UserGroupMembership objects * * @param int $uid User id * @param array|null $cache - * @return array + * @return array (group name => UserGroupMembership object) */ - protected static function getGroups( $uid, $cache = null ) { + protected static function getGroupMemberships( $uid, $cache = null ) { if ( $cache === null ) { $user = User::newFromId( $uid ); - $effectiveGroups = $user->getEffectiveGroups(); + return $user->getGroupMemberships(); } else { - $effectiveGroups = isset( $cache[$uid] ) ? $cache[$uid] : []; + return isset( $cache[$uid] ) ? $cache[$uid] : []; } - $groups = array_diff( $effectiveGroups, User::getImplicitGroups() ); - - return $groups; } /** * Format a link to a group description page * - * @param string $group Group name + * @param string|UserGroupMembership $group Group name or UserGroupMembership object * @param string $username Username * @return string */ - protected static function buildGroupLink( $group, $username ) { - return User::makeGroupLinkHTML( - $group, - User::getGroupMember( $group, $username ) - ); + protected function buildGroupLink( $group, $username ) { + return UserGroupMembership::getLink( $group, $this->getContext(), 'html', $username ); } - } diff --git a/includes/user/User.php b/includes/user/User.php index fed64c2a68..6804df272a 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -66,7 +66,7 @@ class User implements IDBAccessObject { /** * @const int Serialized record version. */ - const VERSION = 10; + const VERSION = 11; /** * Exclude user options that are set to their default value. @@ -104,7 +104,7 @@ class User implements IDBAccessObject { 'mRegistration', 'mEditCount', // user_groups table - 'mGroups', + 'mGroupMemberships', // user_properties table 'mOptionOverrides', ]; @@ -225,8 +225,13 @@ class User implements IDBAccessObject { protected $mRegistration; /** @var int */ protected $mEditCount; - /** @var array */ - public $mGroups; + /** + * @var array No longer used since 1.29; use User::getGroups() instead + * @deprecated since 1.29 + */ + private $mGroups; + /** @var array Associative array of (group name => UserGroupMembership object) */ + protected $mGroupMemberships; /** @var array */ protected $mOptionOverrides; // @} @@ -283,9 +288,7 @@ class User implements IDBAccessObject { /** @var array */ public $mOptions; - /** - * @var WebRequest - */ + /** @var WebRequest */ private $mRequest; /** @var Block */ @@ -468,6 +471,17 @@ class User implements IDBAccessObject { return $cache->makeGlobalKey( 'user', 'id', wfWikiID(), $this->mId ); } + /** + * @param WANObjectCache $cache + * @return string[] + * @since 1.28 + */ + public function getMutableCacheKeys( WANObjectCache $cache ) { + $id = $this->getId(); + + return $id ? [ $this->getCacheKey( $cache ) ] : []; + } + /** * Load user data from shared cache, given mId has already been set. * @@ -1138,7 +1152,7 @@ class User implements IDBAccessObject { $this->mEmailToken = ''; $this->mEmailTokenExpires = null; $this->mRegistration = wfTimestamp( TS_MW ); - $this->mGroups = []; + $this->mGroupMemberships = []; Hooks::run( 'UserLoadDefaults', [ $this, $name ] ); } @@ -1250,7 +1264,7 @@ class User implements IDBAccessObject { if ( $s !== false ) { // Initialise user table data $this->loadFromRow( $s ); - $this->mGroups = null; // deferred + $this->mGroupMemberships = null; // deferred $this->getEditCount(); // revalidation for nulls return true; } else { @@ -1267,13 +1281,16 @@ class User implements IDBAccessObject { * @param stdClass $row Row from the user table to load. * @param array $data Further user data to load into the object * - * user_groups Array with groups out of the user_groups table - * user_properties Array with properties out of the user_properties table + * user_groups Array of arrays or stdClass result rows out of the user_groups + * table. Previously you were supposed to pass an array of strings + * here, but we also need expiry info nowadays, so an array of + * strings is ignored. + * user_properties Array with properties out of the user_properties table */ protected function loadFromRow( $row, $data = null ) { $all = true; - $this->mGroups = null; // deferred + $this->mGroupMemberships = null; // deferred if ( isset( $row->user_name ) ) { $this->mName = $row->user_name; @@ -1342,7 +1359,18 @@ class User implements IDBAccessObject { if ( is_array( $data ) ) { if ( isset( $data['user_groups'] ) && is_array( $data['user_groups'] ) ) { - $this->mGroups = $data['user_groups']; + if ( !count( $data['user_groups'] ) ) { + $this->mGroupMemberships = []; + } else { + $firstGroup = reset( $data['user_groups'] ); + if ( is_array( $firstGroup ) || is_object( $firstGroup ) ) { + $this->mGroupMemberships = []; + foreach ( $data['user_groups'] as $row ) { + $ugm = UserGroupMembership::newFromRow( (object)$row ); + $this->mGroupMemberships[$ugm->getGroup()] = $ugm; + } + } + } } if ( isset( $data['user_properties'] ) && is_array( $data['user_properties'] ) ) { $this->loadOptions( $data['user_properties'] ); @@ -1366,18 +1394,12 @@ class User implements IDBAccessObject { * Load the groups from the database if they aren't already loaded. */ private function loadGroups() { - if ( is_null( $this->mGroups ) ) { + if ( is_null( $this->mGroupMemberships ) ) { $db = ( $this->queryFlagsUsed & self::READ_LATEST ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA ); - $res = $db->select( 'user_groups', - [ 'ug_group' ], - [ 'ug_user' => $this->mId ], - __METHOD__ ); - $this->mGroups = []; - foreach ( $res as $row ) { - $this->mGroups[] = $row->ug_group; - } + $this->mGroupMemberships = UserGroupMembership::getMembershipsForUser( + $this->mId, $db ); } } @@ -1509,7 +1531,7 @@ class User implements IDBAccessObject { $this->mRights = null; $this->mEffectiveGroups = null; $this->mImplicitGroups = null; - $this->mGroups = null; + $this->mGroupMemberships = null; $this->mOptions = null; $this->mOptionsLoaded = false; $this->mEditCount = null; @@ -3222,7 +3244,20 @@ class User implements IDBAccessObject { public function getGroups() { $this->load(); $this->loadGroups(); - return $this->mGroups; + return array_keys( $this->mGroupMemberships ); + } + + /** + * Get the list of explicit group memberships this user has, stored as + * UserGroupMembership objects. Implicit groups are not included. + * + * @return array Associative array of (group name as string => UserGroupMembership object) + * @since 1.29 + */ + public function getGroupMemberships() { + $this->load(); + $this->loadGroups(); + return $this->mGroupMemberships; } /** @@ -3333,34 +3368,35 @@ class User implements IDBAccessObject { } /** - * Add the user to the given group. - * This takes immediate effect. + * Add the user to the given group. This takes immediate effect. + * If the user is already in the group, the expiry time will be updated to the new + * expiry time. (If $expiry is omitted or null, the membership will be altered to + * never expire.) + * * @param string $group Name of the group to add + * @param string $expiry Optional expiry timestamp in any format acceptable to + * wfTimestamp(), or null if the group assignment should not expire * @return bool */ - public function addGroup( $group ) { + public function addGroup( $group, $expiry = null ) { $this->load(); + $this->loadGroups(); + + if ( $expiry ) { + $expiry = wfTimestamp( TS_MW, $expiry ); + } - if ( !Hooks::run( 'UserAddGroup', [ $this, &$group ] ) ) { + if ( !Hooks::run( 'UserAddGroup', [ $this, &$group, &$expiry ] ) ) { return false; } - $dbw = wfGetDB( DB_MASTER ); - if ( $this->getId() ) { - $dbw->insert( 'user_groups', - [ - 'ug_user' => $this->getId(), - 'ug_group' => $group, - ], - __METHOD__, - [ 'IGNORE' ] ); + // create the new UserGroupMembership and put it in the DB + $ugm = new UserGroupMembership( $this->mId, $group, $expiry ); + if ( !$ugm->insert( true ) ) { + return false; } - $this->loadGroups(); - $this->mGroups[] = $group; - // In case loadGroups was not called before, we now have the right twice. - // Get rid of the duplicate. - $this->mGroups = array_unique( $this->mGroups ); + $this->mGroupMemberships[$group] = $ugm; // Refresh the groups caches, and clear the rights cache so it will be // refreshed on the next call to $this->getRights(). @@ -3380,29 +3416,19 @@ class User implements IDBAccessObject { */ public function removeGroup( $group ) { $this->load(); + if ( !Hooks::run( 'UserRemoveGroup', [ $this, &$group ] ) ) { return false; } - $dbw = wfGetDB( DB_MASTER ); - $dbw->delete( 'user_groups', - [ - 'ug_user' => $this->getId(), - 'ug_group' => $group, - ], __METHOD__ - ); - // Remember that the user was in this group - $dbw->insert( 'user_former_groups', - [ - 'ufg_user' => $this->getId(), - 'ufg_group' => $group, - ], - __METHOD__, - [ 'IGNORE' ] - ); + $ugm = UserGroupMembership::getMembership( $this->mId, $group ); + // delete the membership entry + if ( !$ugm || !$ugm->delete() ) { + return false; + } $this->loadGroups(); - $this->mGroups = array_diff( $this->mGroups, [ $group ] ); + unset( $this->mGroupMemberships[$group] ); // Refresh the groups caches, and clear the rights cache so it will be // refreshed on the next call to $this->getRights(). @@ -4736,25 +4762,27 @@ class User implements IDBAccessObject { /** * Get the localized descriptive name for a group, if it exists + * @deprecated since 1.29 Use UserGroupMembership::getGroupName instead * * @param string $group Internal group name * @return string Localized descriptive group name */ public static function getGroupName( $group ) { - $msg = wfMessage( "group-$group" ); - return $msg->isBlank() ? $group : $msg->text(); + wfDeprecated( __METHOD__, '1.29' ); + return UserGroupMembership::getGroupName( $group ); } /** * Get the localized descriptive name for a member of a group, if it exists + * @deprecated since 1.29 Use UserGroupMembership::getGroupMemberName instead * * @param string $group Internal group name * @param string $username Username for gender (since 1.19) * @return string Localized name for group member */ public static function getGroupMember( $group, $username = '#' ) { - $msg = wfMessage( "group-$group-member", $username ); - return $msg->isBlank() ? $group : $msg->text(); + wfDeprecated( __METHOD__, '1.29' ); + return UserGroupMembership::getGroupMemberName( $group, $username ); } /** @@ -4804,34 +4832,33 @@ class User implements IDBAccessObject { /** * Get the title of a page describing a particular group + * @deprecated since 1.29 Use UserGroupMembership::getGroupPage instead * * @param string $group Internal group name * @return Title|bool Title of the page if it exists, false otherwise */ public static function getGroupPage( $group ) { - $msg = wfMessage( 'grouppage-' . $group )->inContentLanguage(); - if ( $msg->exists() ) { - $title = Title::newFromText( $msg->text() ); - if ( is_object( $title ) ) { - return $title; - } - } - return false; + wfDeprecated( __METHOD__, '1.29' ); + return UserGroupMembership::getGroupPage( $group ); } /** * Create a link to the group in HTML, if available; * else return the group name. + * @deprecated since 1.29 Use UserGroupMembership::getLink instead, or + * make the link yourself if you need custom text * * @param string $group Internal name of the group * @param string $text The text of the link * @return string HTML link to the group */ public static function makeGroupLinkHTML( $group, $text = '' ) { + wfDeprecated( __METHOD__, '1.29' ); + if ( $text == '' ) { - $text = self::getGroupName( $group ); + $text = UserGroupMembership::getGroupName( $group ); } - $title = self::getGroupPage( $group ); + $title = UserGroupMembership::getGroupPage( $group ); if ( $title ) { return Linker::link( $title, htmlspecialchars( $text ) ); } else { @@ -4842,16 +4869,20 @@ class User implements IDBAccessObject { /** * Create a link to the group in Wikitext, if available; * else return the group name. + * @deprecated since 1.29 Use UserGroupMembership::getLink instead, or + * make the link yourself if you need custom text * * @param string $group Internal name of the group * @param string $text The text of the link * @return string Wikilink to the group */ public static function makeGroupLinkWiki( $group, $text = '' ) { + wfDeprecated( __METHOD__, '1.29' ); + if ( $text == '' ) { - $text = self::getGroupName( $group ); + $text = UserGroupMembership::getGroupName( $group ); } - $title = self::getGroupPage( $group ); + $title = UserGroupMembership::getGroupPage( $group ); if ( $title ) { $page = $title->getFullText(); return "[[$page|$text]]"; @@ -5091,54 +5122,6 @@ class User implements IDBAccessObject { return $msg->isDisabled() ? $grant : $msg->text(); } - /** - * Make a new-style password hash - * - * @param string $password Plain-text password - * @param bool|string $salt Optional salt, may be random or the user ID. - * If unspecified or false, will generate one automatically - * @return string Password hash - * @deprecated since 1.24, use Password class - */ - public static function crypt( $password, $salt = false ) { - wfDeprecated( __METHOD__, '1.24' ); - $passwordFactory = new PasswordFactory(); - $passwordFactory->init( RequestContext::getMain()->getConfig() ); - $hash = $passwordFactory->newFromPlaintext( $password ); - return $hash->toString(); - } - - /** - * Compare a password hash with a plain-text password. Requires the user - * ID if there's a chance that the hash is an old-style hash. - * - * @param string $hash Password hash - * @param string $password Plain-text password to compare - * @param string|bool $userId User ID for old-style password salt - * - * @return bool - * @deprecated since 1.24, use Password class - */ - public static function comparePasswords( $hash, $password, $userId = false ) { - wfDeprecated( __METHOD__, '1.24' ); - - // Check for *really* old password hashes that don't even have a type - // The old hash format was just an md5 hex hash, with no type information - if ( preg_match( '/^[0-9a-f]{32}$/', $hash ) ) { - global $wgPasswordSalt; - if ( $wgPasswordSalt ) { - $password = ":B:{$userId}:{$hash}"; - } else { - $password = ":A:{$hash}"; - } - } - - $passwordFactory = new PasswordFactory(); - $passwordFactory->init( RequestContext::getMain()->getConfig() ); - $hash = $passwordFactory->newFromCiphertext( $hash ); - return $hash->equals( $password ); - } - /** * Add a newuser log entry for this user. * Before 1.19 the return value was always true. @@ -5411,10 +5394,10 @@ class User implements IDBAccessObject { static function newFatalPermissionDeniedStatus( $permission ) { global $wgLang; - $groups = array_map( - [ 'User', 'makeGroupLinkWiki' ], - User::getGroupsWithPermission( $permission ) - ); + $groups = []; + foreach ( User::getGroupsWithPermission( $permission ) as $group ) { + $groups[] = UserGroupMembership::getLink( $group, RequestContext::getMain(), 'wiki' ); + } if ( $groups ) { return Status::newFatal( 'badaccess-groups', $wgLang->commaList( $groups ), count( $groups ) ); diff --git a/includes/user/UserGroupMembership.php b/includes/user/UserGroupMembership.php new file mode 100644 index 0000000000..59ca31cbb2 --- /dev/null +++ b/includes/user/UserGroupMembership.php @@ -0,0 +1,475 @@ +userId = (int)$userId; + $this->group = $group; // TODO throw on invalid group? + $this->expiry = $expiry ?: null; + } + + /** + * @return int + */ + public function getUserId() { + return $this->userId; + } + + /** + * @return string + */ + public function getGroup() { + return $this->group; + } + + /** + * @return string|null Timestamp of expiry in TS_MW format, or null if no expiry + */ + public function getExpiry() { + global $wgDisableUserGroupExpiry; + if ( $wgDisableUserGroupExpiry ) { + return null; + } + + return $this->expiry; + } + + protected function initFromRow( $row ) { + global $wgDisableUserGroupExpiry; + + $this->userId = (int)$row->ug_user; + $this->group = $row->ug_group; + if ( $wgDisableUserGroupExpiry ) { + $this->expiry = null; + } else { + $this->expiry = $row->ug_expiry === null ? + null : + wfTimestamp( TS_MW, $row->ug_expiry ); + } + } + + /** + * Creates a new UserGroupMembership object from a database row. + * + * @param stdClass $row The row from the user_groups table + * @return UserGroupMembership + */ + public static function newFromRow( $row ) { + $ugm = new self; + $ugm->initFromRow( $row ); + return $ugm; + } + + /** + * Returns the list of user_groups fields that should be selected to create + * a new user group membership. + * @return array + */ + public static function selectFields() { + global $wgDisableUserGroupExpiry; + if ( $wgDisableUserGroupExpiry ) { + return [ + 'ug_user', + 'ug_group', + ]; + } else { + return [ + 'ug_user', + 'ug_group', + 'ug_expiry', + ]; + } + } + + /** + * Delete the row from the user_groups table. + * + * @throws MWException + * @param IDatabase|null $dbw Optional master database connection to use + * @return bool Whether or not anything was deleted + */ + public function delete( IDatabase $dbw = null ) { + global $wgDisableUserGroupExpiry; + if ( wfReadOnly() ) { + return false; + } + + if ( $dbw === null ) { + $dbw = wfGetDB( DB_MASTER ); + } + + if ( $wgDisableUserGroupExpiry ) { + $dbw->delete( 'user_groups', $this->getDatabaseArray( $dbw ), __METHOD__ ); + } else { + $dbw->delete( + 'user_groups', + [ 'ug_user' => $this->userId, 'ug_group' => $this->group ], + __METHOD__ ); + } + if ( !$dbw->affectedRows() ) { + return false; + } + + // Remember that the user was in this group + $dbw->insert( + 'user_former_groups', + [ 'ufg_user' => $this->userId, 'ufg_group' => $this->group ], + __METHOD__, + [ 'IGNORE' ] ); + + return true; + } + + /** + * Insert a user right membership into the database. When $allowUpdate is false, + * the function fails if there is a conflicting membership entry (same user and + * group) already in the table. + * + * @throws MWException + * @param bool $allowUpdate Whether to perform "upsert" instead of INSERT + * @param IDatabase|null $dbw If you have one available + * @return bool Whether or not anything was inserted + */ + public function insert( $allowUpdate = false, IDatabase $dbw = null ) { + global $wgDisableUserGroupExpiry; + if ( $dbw === null ) { + $dbw = wfGetDB( DB_MASTER ); + } + + // Purge old, expired memberships from the DB + self::purgeExpired( $dbw ); + + // Check that the values make sense + if ( $this->group === null ) { + throw new UnexpectedValueException( + 'Don\'t try inserting an uninitialized UserGroupMembership object' ); + } elseif ( $this->userId <= 0 ) { + throw new UnexpectedValueException( + 'UserGroupMembership::insert() needs a positive user ID. ' . + 'Did you forget to add your User object to the database before calling addGroup()?' ); + } + + $row = $this->getDatabaseArray( $dbw ); + $dbw->insert( 'user_groups', $row, __METHOD__, [ 'IGNORE' ] ); + $affected = $dbw->affectedRows(); + + // Don't collide with expired user group memberships + // Do this after trying to insert, in order to avoid locking + if ( !$wgDisableUserGroupExpiry && !$affected ) { + $conds = [ + 'ug_user' => $row['ug_user'], + 'ug_group' => $row['ug_group'], + ]; + // if we're unconditionally updating, check that the expiry is not already the + // same as what we are trying to update it to; otherwise, only update if + // the expiry date is in the past + if ( $allowUpdate ) { + if ( $this->expiry ) { + $conds[] = 'ug_expiry IS NULL OR ug_expiry != ' . + $dbw->addQuotes( $dbw->timestamp( $this->expiry ) ); + } else { + $conds[] = 'ug_expiry IS NOT NULL'; + } + } else { + $conds[] = 'ug_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ); + } + + $row = $dbw->selectRow( 'user_groups', $this::selectFields(), $conds, __METHOD__ ); + if ( $row ) { + $dbw->update( + 'user_groups', + [ 'ug_expiry' => $this->expiry ? $dbw->timestamp( $this->expiry ) : null ], + [ 'ug_user' => $row->ug_user, 'ug_group' => $row->ug_group ], + __METHOD__ ); + $affected = $dbw->affectedRows(); + } + } + + return $affected > 0; + } + + /** + * Get an array suitable for passing to $dbw->insert() or $dbw->update() + * @param IDatabase $db + * @return array + */ + protected function getDatabaseArray( IDatabase $db ) { + global $wgDisableUserGroupExpiry; + + $a = [ + 'ug_user' => $this->userId, + 'ug_group' => $this->group, + ]; + if ( !$wgDisableUserGroupExpiry ) { + $a['ug_expiry'] = $this->expiry ? $db->timestamp( $this->expiry ) : null; + } + return $a; + } + + /** + * Has the membership expired? + * @return bool + */ + public function isExpired() { + global $wgDisableUserGroupExpiry; + if ( $wgDisableUserGroupExpiry || !$this->expiry ) { + return false; + } else { + return wfTimestampNow() > $this->expiry; + } + } + + /** + * Purge expired memberships from the user_groups table + * + * @param IDatabase|null $dbw + */ + public static function purgeExpired( IDatabase $dbw = null ) { + global $wgDisableUserGroupExpiry; + if ( $wgDisableUserGroupExpiry || wfReadOnly() ) { + return; + } + + if ( $dbw === null ) { + $dbw = wfGetDB( DB_MASTER ); + } + + DeferredUpdates::addUpdate( new AtomicSectionUpdate( + $dbw, + __METHOD__, + function ( IDatabase $dbw, $fname ) { + $expiryCond = [ 'ug_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ]; + $res = $dbw->select( 'user_groups', self::selectFields(), $expiryCond, $fname ); + + // save an array of users/groups to insert to user_former_groups + $usersAndGroups = []; + foreach ( $res as $row ) { + $usersAndGroups[] = [ 'ufg_user' => $row->ug_user, 'ufg_group' => $row->ug_group ]; + } + + // delete 'em all + $dbw->delete( 'user_groups', $expiryCond, $fname ); + + // and push the groups to user_former_groups + $dbw->insert( 'user_former_groups', $usersAndGroups, __METHOD__, [ 'IGNORE' ] ); + } + ) ); + } + + /** + * Returns UserGroupMembership objects for all the groups a user currently + * belongs to. + * + * @param int $userId ID of the user to search for + * @param IDatabase|null $db Optional database connection + * @return array Associative array of (group name => UserGroupMembership object) + */ + public static function getMembershipsForUser( $userId, IDatabase $db = null ) { + if ( !$db ) { + $db = wfGetDB( DB_REPLICA ); + } + + $res = $db->select( 'user_groups', + self::selectFields(), + [ 'ug_user' => $userId ], + __METHOD__ ); + + $ugms = []; + foreach ( $res as $row ) { + $ugm = self::newFromRow( $row ); + if ( !$ugm->isExpired() ) { + $ugms[$ugm->group] = $ugm; + } + } + + return $ugms; + } + + /** + * Returns a UserGroupMembership object that pertains to the given user and group, + * or false if the user does not belong to that group (or the assignment has + * expired). + * + * @param int $userId ID of the user to search for + * @param string $group User group name + * @param IDatabase|null $db Optional database connection + * @return UserGroupMembership|false + */ + public static function getMembership( $userId, $group, IDatabase $db = null ) { + if ( !$db ) { + $db = wfGetDB( DB_REPLICA ); + } + + $row = $db->selectRow( 'user_groups', + self::selectFields(), + [ 'ug_user' => $userId, 'ug_group' => $group ], + __METHOD__ ); + if ( !$row ) { + return false; + } + + $ugm = self::newFromRow( $row ); + if ( !$ugm->isExpired() ) { + return $ugm; + } else { + return false; + } + } + + /** + * Gets a link for a user group, possibly including the expiry date if relevant. + * + * @param string|UserGroupMembership $ugm Either a group name as a string, or + * a UserGroupMembership object + * @param IContextSource $context + * @param string $format Either 'wiki' or 'html' + * @param string|null $userName If you want to use the group member message + * ("administrator"), pass the name of the user who belongs to the group; it + * is used for GENDER of the group member message. If you instead want the + * group name message ("Administrators"), omit this parameter. + * @return string + */ + public static function getLink( $ugm, IContextSource $context, $format, + $userName = null ) { + + if ( $format !== 'wiki' && $format !== 'html' ) { + throw new MWException( 'UserGroupMembership::getLink() $format parameter should be ' . + "'wiki' or 'html'" ); + } + + if ( $ugm instanceof UserGroupMembership ) { + $expiry = $ugm->getExpiry(); + $group = $ugm->getGroup(); + } else { + $expiry = null; + $group = $ugm; + } + + if ( $userName !== null ) { + $groupName = self::getGroupMemberName( $group, $userName ); + } else { + $groupName = self::getGroupName( $group ); + } + + // link to the group description page, if it exists + $linkTitle = self::getGroupPage( $group ); + if ( $linkTitle ) { + if ( $format === 'wiki' ) { + $linkPage = $linkTitle->getFullText(); + $groupLink = "[[$linkPage|$groupName]]"; + } else { + $groupLink = Linker::link( $linkTitle, htmlspecialchars( $groupName ) ); + } + } else { + $groupLink = htmlspecialchars( $groupName ); + } + + if ( $expiry ) { + // format the expiry to a nice string + $uiLanguage = $context->getLanguage(); + $uiUser = $context->getUser(); + $expiryDT = $uiLanguage->userTimeAndDate( $expiry, $uiUser ); + $expiryD = $uiLanguage->userDate( $expiry, $uiUser ); + $expiryT = $uiLanguage->userTime( $expiry, $uiUser ); + if ( $format === 'html' ) { + $groupLink = Message::rawParam( $groupLink ); + } + return $context->msg( 'group-membership-link-with-expiry' ) + ->params( $groupLink, $expiryDT, $expiryD, $expiryT )->text(); + } else { + return $groupLink; + } + } + + /** + * Gets the localized friendly name for a group, if it exists. For example, + * "Administrators" or "Bureaucrats" + * + * @param string $group Internal group name + * @return string Localized friendly group name + */ + public static function getGroupName( $group ) { + $msg = wfMessage( "group-$group" ); + return $msg->isBlank() ? $group : $msg->text(); + } + + /** + * Gets the localized name for a member of a group, if it exists. For example, + * "administrator" or "bureaucrat" + * + * @param string $group Internal group name + * @param string $username Username for gender + * @return string Localized name for group member + */ + public static function getGroupMemberName( $group, $username ) { + $msg = wfMessage( "group-$group-member", $username ); + return $msg->isBlank() ? $group : $msg->text(); + } + + /** + * Gets the title of a page describing a particular user group. When the name + * of the group appears in the UI, it can link to this page. + * + * @param string $group Internal group name + * @return Title|bool Title of the page if it exists, false otherwise + */ + public static function getGroupPage( $group ) { + $msg = wfMessage( "grouppage-$group" )->inContentLanguage(); + if ( $msg->exists() ) { + $title = Title::newFromText( $msg->text() ); + if ( is_object( $title ) ) { + return $title; + } + } + return false; + } +} diff --git a/includes/user/UserRightsProxy.php b/includes/user/UserRightsProxy.php index 69bc503b11..d801fa091b 100644 --- a/includes/user/UserRightsProxy.php +++ b/includes/user/UserRightsProxy.php @@ -198,50 +198,47 @@ class UserRightsProxy { * @return array */ function getGroups() { - $res = $this->db->select( 'user_groups', - [ 'ug_group' ], - [ 'ug_user' => $this->id ], - __METHOD__ ); - $groups = []; - foreach ( $res as $row ) { - $groups[] = $row->ug_group; - } - return $groups; + return array_keys( self::getGroupMemberships() ); } /** - * Replaces User::addUserGroup() - * @param string $group + * Replaces User::getGroupMemberships() + * + * @return array + * @since 1.29 + */ + function getGroupMemberships() { + return UserGroupMembership::getMembershipsForUser( $this->id, $this->db ); + } + + /** + * Replaces User::addGroup() * + * @param string $group + * @param string|null $expiry * @return bool */ - function addGroup( $group ) { - $this->db->insert( 'user_groups', - [ - 'ug_user' => $this->id, - 'ug_group' => $group, - ], - __METHOD__, - [ 'IGNORE' ] ); + function addGroup( $group, $expiry = null ) { + if ( $expiry ) { + $expiry = wfTimestamp( TS_MW, $expiry ); + } - return true; + $ugm = new UserGroupMembership( $this->id, $group, $expiry ); + return $ugm->insert( true, $this->db ); } /** - * Replaces User::removeUserGroup() - * @param string $group + * Replaces User::removeGroup() * + * @param string $group * @return bool */ function removeGroup( $group ) { - $this->db->delete( 'user_groups', - [ - 'ug_user' => $this->id, - 'ug_group' => $group, - ], - __METHOD__ ); - - return true; + $ugm = UserGroupMembership::getMembership( $this->id, $group, $this->db ); + if ( !$ugm ) { + return false; + } + return $ugm->delete( $this->db ); } /** diff --git a/includes/widget/DateInputWidget.php b/includes/widget/DateInputWidget.php index f011f0b8af..507dab6fac 100644 --- a/includes/widget/DateInputWidget.php +++ b/includes/widget/DateInputWidget.php @@ -19,6 +19,7 @@ class DateInputWidget extends \OOUI\TextInputWidget { protected $inputFormat = null; protected $displayFormat = null; + protected $longDisplayFormat = null; protected $placeholderLabel = null; protected $placeholderDateFormat = null; protected $precision = null; @@ -36,6 +37,9 @@ class DateInputWidget extends \OOUI\TextInputWidget { * while the widget is inactive. Should be as unambiguous as possible (for example, prefer * to spell out the month, rather than rely on the order), even if that makes it longer. * Applicable only if the widget is infused. (default: language-specific) + * @param string $config['longDisplayFormat'] If a custom displayFormat is not specified, use + * unabbreviated day of the week and month names in the default language-specific + * displayFormat. (default: false) * @param string $config['placeholderLabel'] Placeholder text shown when the widget is not * selected. Applicable only if the widget is infused. (default: taken from message * `mw-widgets-dateinput-no-date`) @@ -58,6 +62,7 @@ class DateInputWidget extends \OOUI\TextInputWidget { $config = array_merge( [ // Default config values 'precision' => 'day', + 'longDisplayFormat' => false, ], $config ); // Properties @@ -79,6 +84,9 @@ class DateInputWidget extends \OOUI\TextInputWidget { if ( isset( $config['displayFormat'] ) ) { $this->displayFormat = $config['displayFormat']; } + if ( isset( $config['longDisplayFormat'] ) ) { + $this->longDisplayFormat = $config['longDisplayFormat']; + } if ( isset( $config['placeholderLabel'] ) ) { $this->placeholderLabel = $config['placeholderLabel']; } @@ -134,6 +142,9 @@ class DateInputWidget extends \OOUI\TextInputWidget { if ( $this->displayFormat !== null ) { $config['displayFormat'] = $this->displayFormat; } + if ( $this->longDisplayFormat !== null ) { + $config['longDisplayFormat'] = $this->longDisplayFormat; + } if ( $this->placeholderLabel !== null ) { $config['placeholderLabel'] = $this->placeholderLabel; } diff --git a/languages/Language.php b/languages/Language.php index 8c7ce31629..68727bb233 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -4000,8 +4000,9 @@ class Language { if ( $time === false ) { // Unknown format. Return it as-is in case. return $str; } elseif ( $time !== strtotime( $str, $now + 1 ) ) { // It's a relative timestamp. - // The result differs based on current time, so it's a duration length. - return $this->formatDuration( $time ); + // The result differs based on current time, so the difference + // is a fixed duration length. + return $this->formatDuration( $time - $now ); } else { // It's an absolute timestamp. if ( $time === 0 ) { // wfTimestamp() handles 0 as current time instead of epoch. diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 156efdb7d9..c2befb1d4e 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -1097,6 +1097,7 @@ "youremail": "البريد:", "username": "{{GENDER:$1|اسم المستخدم|اسم المستخدمة}}:", "prefs-memberingroups": "{{GENDER:$2|عضو|عضوة}} في {{PLURAL:$1|مجموعة|مجموعة|مجموعتي|مجموعات}}:", + "group-membership-link-with-expiry": "$1 (حتى $2)", "prefs-registration": "وقت التسجيل:", "yourrealname": "الاسم الحقيقي:", "yourlanguage": "اللغة:", @@ -1152,6 +1153,14 @@ "userrights-nodatabase": "قاعدة البيانات $1 غير موجودة أو ليست محلية.", "userrights-changeable-col": "المجموعات التي يمكنك تغييرها", "userrights-unchangeable-col": "المجموعات التي لا يمكنك تغييرها", + "userrights-expiry-current": "تنتهي $1", + "userrights-expiry-none": "غير منتهية", + "userrights-expiry": "تنتهي:", + "userrights-expiry-existing": "وقت الانتهاء الموجود: $3، $2", + "userrights-expiry-othertime": "وقت آخر:", + "userrights-expiry-options": "1 يوم:1 day,1 أسبوع:1 week,1 شهر:1 month,3 شهور:3 months,6 شهور:6 months,1 سنة:1 year", + "userrights-invalid-expiry": "تاريخ انتهاء المجموعة \"$1\" غير صحيح.", + "userrights-expiry-in-past": "تاريخ انتهاء المجموعة \"$1\" هو في الماضي.", "userrights-conflict": "تضارب في تغيير صلاحيات المستخدم! الرجاء مراجعة تغييراتك مجدّدا وتأكيدها.", "group": "المجموعة:", "group-user": "مستخدمون", @@ -1906,7 +1915,10 @@ "apisandbox-sending-request": "إرسال طلب API ...", "apisandbox-loading-results": "استقبال طلبات API ...", "apisandbox-results-error": "حدث خطأ أثناء تحميل رد استعدلام الAPI: $1.", + "apisandbox-request-selectformat-label": "عرض بيانات الطلب ك:", + "apisandbox-request-format-url-label": "سلسلة حروف استعلام المسار", "apisandbox-request-url-label": "مسار الطلب:", + "apisandbox-request-json-label": "JSON الطلب:", "apisandbox-request-time": "وقت الطلب: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "رمز الصحيح وإعادة الموافقة", "apisandbox-results-fixtoken-fail": "فشل جلب توكين \"$1\"", @@ -2049,7 +2061,7 @@ "emailccsubject": "نسخة من رسالتك إلى $1: $2", "emailsent": "أُرسل البريد الإلكتروني", "emailsenttext": "أُرسلت رسالتك الإلكترونية.", - "emailuserfooter": "هذا البريد الإلكتروني {{GENDER:$1|تم إرساله}} بواسطة $1 إلى {{GENDER:$2|$2}} بواسطة وظيفة \"{{int:emailuser}}\" في {{SITENAME}}. عنوان البريد الخاص {{GENDER:$2|بك}} سيتم إرساله مباشرة {{GENDER:$1|للمرسل الأصلي|للمرسلة الأصلية}}، مما يكشف عنوان البريد الإلكتروني الخاص {{GENDER:$2|بك}} {{GENDER:$1|لهم}}.", + "emailuserfooter": "هذا البريد الإلكتروني {{GENDER:$1|تم إرساله}} بواسطة $1 إلى {{GENDER:$2|$2}} بواسطة وظيفة \"{{int:emailuser}}\" في {{SITENAME}}. لو {{GENDER:$2|أنك}} رددت على هذا البريد، فعنوان البريد الخاص {{GENDER:$2|بك}} سيتم إرساله مباشرة {{GENDER:$1|للمرسل الأصلي|للمرسلة الأصلية}}، مما يكشف عنوان البريد الإلكتروني الخاص {{GENDER:$2|بك}} {{GENDER:$1|لهم}}.", "usermessage-summary": "ترك رسالة نظام.", "usermessage-editor": "مراسل النظام", "watchlist": "قائمة مراقبتي", @@ -3687,6 +3699,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|حدث|حدثت}} الوسوم على مدخلة السجل $5 للصفحة $3 ({{PLURAL:$7|أضاف}} $6; {{PLURAL:$9|أزال}} $8)", "rightsnone": "(لا شيء)", "revdelete-summary": "ملخص التعديل", + "rightslogentry-temporary-group": "$1 (مؤقت، حتى $2)", "feedback-adding": "إضافة تعليقات إلى الصفحة...", "feedback-back": "رجوع", "feedback-bugcheck": "رائع! تحقق من أن هذه ليست إحدى [$1 العلل المعروفة].", diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index d8c3adf032..46722ee738 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -1042,6 +1042,7 @@ "youremail": "Corréu electrónicu:", "username": "Nome d'{{GENDER:$1|usuariu|usuaria}}:", "prefs-memberingroups": "{{GENDER:$2|Miembru}} {{PLURAL:$1|del grupu|de los grupos}}:", + "group-membership-link-with-expiry": "$1 (ata'l $2)", "prefs-registration": "Hora del rexistru:", "yourrealname": "Nome real:", "yourlanguage": "Llingua:", @@ -1097,6 +1098,14 @@ "userrights-nodatabase": "La base de datos $1 nun esiste o nun ye llocal.", "userrights-changeable-col": "Grupos que pues camudar", "userrights-unchangeable-col": "Grupos que nun pues camudar", + "userrights-expiry-current": "Caduca el $1", + "userrights-expiry-none": "Nun caduca", + "userrights-expiry": "Caduca:", + "userrights-expiry-existing": "Hora de caducidá actual: $3 del $2", + "userrights-expiry-othertime": "Otru periodu:", + "userrights-expiry-options": "1 día:1 day,1 selmana:1 week,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 añu:1 year", + "userrights-invalid-expiry": "La hora de caducidá del grupu «$1» nun ye válida.", + "userrights-expiry-in-past": "La hora de caducidá del grupu «$1» ta nel pasáu", "userrights-conflict": "¡Conflictu de cambiu de permisos d'usuariu! Por favor, revise y confirme los cambios.", "group": "Grupu:", "group-user": "Usuarios", @@ -1298,8 +1307,11 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Amosar", "rcfilters-activefilters": "Filtros activos", + "rcfilters-restore-default-filters": "Restaurar los filtros predeterminaos", + "rcfilters-clear-all-filters": "Borrar tolos filtros", "rcfilters-search-placeholder": "Filtriar los cambeos recién (restola o empieza a escribir)", "rcfilters-invalid-filter": "Filtru inválidu", + "rcfilters-empty-filter": "Nun hai filtros activos. Amuésense toles contribuciones.", "rcfilters-filterlist-title": "Filtros", "rcfilters-filterlist-noresults": "Nun s'alcontraron filtros", "rcfilters-filtergroup-registration": "Rexistru del usuariu", @@ -1848,7 +1860,10 @@ "apisandbox-sending-request": "Unviando solicitú a la API...", "apisandbox-loading-results": "Recibiendo los resultaos de la API...", "apisandbox-results-error": "Asocedió un error al cargar la respuesta de la consulta API: $1.", + "apisandbox-request-selectformat-label": "Amosar los datos de la solicitú como:", + "apisandbox-request-format-url-label": "Cadena de consulta como URL", "apisandbox-request-url-label": "URL de la solicitú:", + "apisandbox-request-json-label": "JSON de la solicitú:", "apisandbox-request-time": "Duración de la solicitú: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Igua'l token y vuelve a unviar", "apisandbox-results-fixtoken-fail": "Nun pudo recuperase'l token «$1».", @@ -1990,7 +2005,7 @@ "emailccsubject": "Copia del to mensaxe a $1: $2", "emailsent": "Corréu unviáu", "emailsenttext": "Unviose'l to mensaxe de corréu.", - "emailuserfooter": "Esti corréu electrónicu {{GENDER:$1|unviólu}} $1 a {{GENDER:$2|$2}} per aciu de la función «{{int:emailuser}}» de {{SITENAME}}. Unviaráse'l {{GENDER:$2|to}} corréu direutamente {{GENDER:$1|al remitente|a la remitente}} orixinal, {{GENDER:$1|revelando-y}} la {{GENDER:$2|to}} direición de corréu.", + "emailuserfooter": "Esti corréu electrónicu {{GENDER:$1|unviólu}} $1 a {{GENDER:$2|$2}} per aciu de la función «{{int:emailuser}}» de {{SITENAME}}. Si {{GENDER:$2|contestes}} a esti corréu, el {{GENDER:$2|to}} corréu unviaráse direutamente {{GENDER:$1|al remitente|a la remitente}} orixinal, {{GENDER:$1|revelando-y}} la {{GENDER:$2|to}} direición de corréu.", "usermessage-summary": "Dexar un mensaxe del sistema.", "usermessage-editor": "Mensaxería del sistema", "watchlist": "Llista de siguimientu", @@ -3516,6 +3531,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|anovó}} etiquetes na entrada del rexistru $5 de la páxina $3 ({{PLURAL:$7|amestó}} $6; {{PLURAL:$9|desanició}} $8)", "rightsnone": "(nengún)", "revdelete-summary": "editar resume", + "rightslogentry-temporary-group": "$1 (temporal, ata $2)", "feedback-adding": "Amestando el comentariu a la páxina...", "feedback-back": "Anterior", "feedback-bugcheck": "¡Perfeuto! Comprueba que nun tea yá ente los [$1 fallos conocíos].", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 1aa6e36e2b..f3d563ad08 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -796,7 +796,7 @@ "last": "папярэдняя", "page_first": "першая", "page_last": "апошняя", - "histlegend": "Параўнаньне: пазначце кропкамі дзьве вэрсіі для параўнаньня і націсьніце enter альбо кнопку ўнізе.
\nТлумачэньне: (цяп) = адрозьненьні ад цяперашняй вэрсіі, (папярэдняя) = адрозьненьні ад папярэдняй вэрсіі, д = дробная праўка.", + "histlegend": "Параўнаньне: пазначце кропкамі дзьве вэрсіі для параўнаньня і націсьніце «ўвод» альбо кнопку ўнізе.
\nТлумачэньне: ({{int:cur}}) = адрозьненьні ад цяперашняй вэрсіі, ({{int:last}}) = адрозьненьні ад папярэдняй вэрсіі, {{int:minoreditletter}} = дробная праўка.", "history-fieldset-title": "Пошук у гісторыі", "history-show-deleted": "Толькі выдаленыя", "histfirst": "найстарэйшыя", @@ -1043,6 +1043,7 @@ "youremail": "Адрас электроннай пошты:", "username": "Імя {{GENDER:$1|ўдзельніка|ўдзельніцы}}:", "prefs-memberingroups": "{{GENDER:$2|Удзельнік|Удзельніца}} {{PLURAL:$1|1=групы|групаў}}:", + "group-membership-link-with-expiry": "$1 (да $2)", "prefs-registration": "Час рэгістрацыі:", "yourrealname": "Сапраўднае імя:", "yourlanguage": "Мова інтэрфэйсу:", @@ -1098,6 +1099,11 @@ "userrights-nodatabase": "Базы зьвестак $1 не існуе альбо яна не зьяўляецца лякальнай.", "userrights-changeable-col": "Групы, якія Вы можаце мяняць", "userrights-unchangeable-col": "Групы, якія Вы ня можаце мяняць", + "userrights-expiry-current": "Сканчаецца $1", + "userrights-expiry-none": "Бестэрмінова", + "userrights-expiry": "Сканчаецца:", + "userrights-expiry-existing": "Цяперашні час сканчэньня: $3 $2", + "userrights-expiry-othertime": "Іншы час:", "userrights-conflict": "Канфлікт пры зьмене правоў удзельнікаў! Калі ласка, праверце і захавайце вашыя зьмены.", "group": "Група:", "group-user": "Удзельнікі", @@ -1299,8 +1305,10 @@ "recentchanges-submit": "Паказаць", "rcfilters-activefilters": "Актыўныя фільтры", "rcfilters-restore-default-filters": "Аднавіць фільтры па змоўчаньні", + "rcfilters-clear-all-filters": "Ачысьціць усе фільтры", "rcfilters-search-placeholder": "Фільтар апошніх зьменаў (праглядзець або пачніце друкаваць)", "rcfilters-invalid-filter": "Няслушны фільтар", + "rcfilters-empty-filter": "Няма актыўных фільтраў. Паказаны ўвесь унёсак.", "rcfilters-filterlist-title": "Фільтры", "rcfilters-filterlist-noresults": "Фільтры ня знойдзеныя", "rcfilters-filtergroup-registration": "Рэгістрацыя ўдзельнікаў", @@ -1324,6 +1332,8 @@ "rcfilters-filter-bots-label": "Робат", "rcfilters-filter-bots-description": "Праўкі, зробленыя з дапамогай аўтаматызаваных інструмэнтаў.", "rcfilters-filter-humans-label": "Чалавек (ня робат)", + "rcfilters-filter-humans-description": "Праўкі, зробленыя людзьмі.", + "rcfilters-filtergroup-significance": "Значэньне", "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з $4 $3 (да $1 на старонку).", "rclistfrom": "Паказаць зьмены з $2 $3", "rcshowhideminor": "$1 дробныя праўкі", @@ -1976,7 +1986,7 @@ "emailccsubject": "Копія Вашага ліста да $1: $2", "emailsent": "Ліст адасланы", "emailsenttext": "Ваш ліст быў адасланы.", - "emailuserfooter": "Гэты ліст быў дасланы {{GENDER:$1|ўдзельнікам|ўдзельніцай}} $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «{{int:emailuser}}» {{GRAMMAR:родны|{{SITENAME}}}}. {{GENDER:$2|Ваш}} ліст у адказ будзе дасланы {{GENDER:$1|адпраўніку|адпраўніцы}}, і {{GENDER:$1|яму|ёй}} будзе бачны {{GENDER:$2|ваш}} адрас электроннай пошты.", + "emailuserfooter": "Гэты ліст быў дасланы {{GENDER:$1|ўдзельнікам|ўдзельніцай}} $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «{{int:emailuser}}» {{GRAMMAR:родны|{{SITENAME}}}}. Калі вы адкажаце на гэты ліст, {{GENDER:$2|ваш}} ліст у адказ будзе дасланы непасрэдна {{GENDER:$1|адпраўніку|адпраўніцы}}, і {{GENDER:$1|яму|ёй}} будзе бачны {{GENDER:$2|ваш}} адрас электроннай пошты.", "usermessage-summary": "Паведамленьне пра выхад з сыстэмы.", "usermessage-editor": "Дастаўка сыстэмных паведамленьняў", "watchlist": "Сьпіс назіраньня", diff --git a/languages/i18n/be.json b/languages/i18n/be.json index e9301d83b0..03084d667f 100644 --- a/languages/i18n/be.json +++ b/languages/i18n/be.json @@ -1056,6 +1056,7 @@ "youremail": "Эл.пошта *", "username": "Імя {{GENDER:$1|ўдзельніка|ўдзельніцы}}:", "prefs-memberingroups": "Уваходзіць у {{PLURAL:$1|групу|групы}}:", + "group-membership-link-with-expiry": "$1 (да $2)", "prefs-registration": "Час рэгістрацыі:", "yourrealname": "Сапраўднае імя:", "yourlanguage": "Мова:", @@ -1111,6 +1112,11 @@ "userrights-nodatabase": "Не знойдзена тут, або не існуе база даных $1.", "userrights-changeable-col": "Групы, якія вам дазволена мяняць", "userrights-unchangeable-col": "Групы, якія вам не дазволена мяняць", + "userrights-expiry-current": "Канчаецца $1", + "userrights-expiry-none": "Бестэрмінова", + "userrights-expiry": "Канчаецца:", + "userrights-expiry-existing": "Цяперашні час сканчэння: $3, $2", + "userrights-expiry-othertime": "Іншы час:", "userrights-conflict": "Канфлікт змянення ўдзельніцкіх дазволаў! Калі ласка, праверце і пацвердзіце змены.", "group": "Група:", "group-user": "Удзельнікі", @@ -1312,6 +1318,7 @@ "recentchanges-submit": "Паказаць", "rcfilters-filter-userExpLevel-learner-description": "Болей дзён актыўнасці і правак, чым у «навічкоў», але меней чым у «дасведчаных удзельнікаў».", "rcfilters-filter-userExpLevel-experienced-description": "Больш за 30 дзён актыўнасці і 500 правак.", + "rcfilters-filter-bots-label": "Бот", "rcnotefrom": "Ніжэй {{PLURAL:$5|паказана змяненне|паказаны змены}} з $3, $4 (не больш за $1).", "rclistfrom": "Паказаць змены з $3 $2", "rcshowhideminor": "$1 дробныя праўкі", diff --git a/languages/i18n/bho.json b/languages/i18n/bho.json index 244ac7a0bb..f63d25e800 100644 --- a/languages/i18n/bho.json +++ b/languages/i18n/bho.json @@ -27,17 +27,17 @@ "tog-watchuploads": "हम नया फाइल अपलोड करीं त उनहना के हमार धियानसूची में जोड़ल जाय", "tog-watchrollback": "हमरा द्वारा रोलबैक कइल गइल पन्ना सभ के हमार धियानसूची में जोड़ल जाव", "tog-minordefault": "डिफाल्ट रूप से सगरी संपादन के छोट संपादन की रुप में चिन्हित कइल जाव", - "tog-previewontop": "झलक (प्रीव्यू) संपादन बक्सा से पहिले देखावल जाय", - "tog-previewonfirst": "पहिला संपादन पर झलक (प्रीव्यू) देखावल जाय", - "tog-enotifwatchlistpages": "हमार धियानसूची में दर्ज कौनो भी पन्ना या फाइल में बदलाव होखला पर हमके ईमेल कइल जाव", + "tog-previewontop": "झलक के संपादन बक्सा से पहिले देखावल जाय", + "tog-previewonfirst": "पहिला संपादन पर झलक देखावल जाय", + "tog-enotifwatchlistpages": "हमार धियानसूची में जुड़ल कौनो भी पन्ना या फाइल में बदलाव होखला पर हमके ईमेल कइल जाव", "tog-enotifusertalkpages": "अगर हमरे बातचीत पन्ना पर कौनो बदलाव होखे त हमके ईमेल कइल जाव", - "tog-enotifminoredits": "पन्ना आ फाइल पर छोटो बदलाव होखे त हमके ईमेल कइल जाव", + "tog-enotifminoredits": "पन्ना आ फाइल पर छोट बदलाव होखे तबो हमके ईमेल कइल जाव", "tog-enotifrevealaddr": "नोटिफिकेशन ईमेल में हमार ईमेल पता देखावल जाव", - "tog-shownumberswatching": "धियान रखे वालन सदस्यन के संख्या देखावल जाव", + "tog-shownumberswatching": "धियान रखे वाला प्रयोगकर्ता लोग के संख्या देखावल जाव", "tog-oldsig": "राउर वर्तमान दसखत:", "tog-fancysig": "दसखत के विकी पाठ के रुप में उपयोग करीं (बिना ऑटोमेटिक कड़ी के)", "tog-uselivepreview": "लगातार झलक (लाइव प्रीव्यू) इस्तेमाल कइल जाव", - "tog-forceeditsummary": "संपादन संछेप ना भरल गइल होखे त हमके सूचित कइल जाय", + "tog-forceeditsummary": "संपादन सारांश ना भरल गइल होखे त हमके सूचित कइल जाय", "tog-watchlisthideown": "धियानसूची से हमार खुद के संपादन छिपावल जाय", "tog-watchlisthidebots": "धियानसूची से बॉट संपादन छिपावल जाय", "tog-watchlisthideminor": "धियानसूची से छोट संपादन छिपावल जाय", @@ -48,13 +48,13 @@ "tog-watchlisthidecategorization": "पन्ना श्रेणीकरण छिपावल जाय", "tog-ccmeonemails": "हमरा द्वारा अन्य प्रयोगकर्ता लोग के भेजल गइल ईमेल के कॉपी हमके भेजल जाय", "tog-diffonly": "अंतर देखावत समय नीचे पन्ना के सामग्री न देखावल जाय", - "tog-showhiddencats": "छिपल श्रेणियन के भी देखावल जाय", + "tog-showhiddencats": "छिपल श्रेणी देखावल जाय", "tog-norollbackdiff": "रोलबैक कइला के बाद अंतर न देखावल जाय", - "tog-useeditwarning": "जो हम कौनों पन्ना पर संपादन करत घरी परिवर्तन के बिना सहेजले छोड़ देईं त हमके खबर कइल जाय", + "tog-useeditwarning": "कौनों संपादन करत घरी बदलाव के बिना सहेजले पन्ना छोड़ देईं त हमके खबर कइल जाय", "tog-prefershttps": "खाता में प्रवेश रहले पर हमेशा सुरक्षित कनेक्शन के प्रयोग कइल जाय", "underline-always": "हमेशा", "underline-never": "कभी ना", - "underline-default": "जिल्द (स्किन) या ब्राउजर डिफॉल्ट", + "underline-default": "स्किन या ब्राउजर डिफॉल्ट", "editfont-style": "संपादन क्षेत्र के फॉन्ट स्टाइल:", "editfont-default": "ब्राउजर डिफाल्ट", "editfont-monospace": "मोनोस्पेस्ड फोंट", @@ -140,7 +140,7 @@ "listingcontinuesabbrev": "जारी...", "index-category": "सूचीबद्ध पन्ना", "noindex-category": "बिनासूचीबद्ध पन्ना", - "broken-file-category": "टूटल फाइल कड़ियन वाला पन्ना", + "broken-file-category": "गायब फाइल वाला पन्ना", "about": "बारे में", "article": "सामग्री पन्ना", "newwindow": "(नया विंडो में खोलीं)", @@ -174,23 +174,24 @@ "searcharticle": "जाईं", "history": "पन्ना के इतिहास", "history_short": "इतिहास", + "history_small": "इतिहास", "updatedmarker": "हमरे अंतिम बेर देखले के बाद के बदलाव", "printableversion": "छापे लायक संस्करण", "permalink": "स्थायी कड़ी", "print": "छापीं", - "view": "व्यू", + "view": "देखीं", "view-foreign": "$1 पर देखीं", "edit": "संपादन", - "edit-local": "लोकल विवरण देखीं", + "edit-local": "लोकल विवरण संपादन", "create": "बनाईं", "create-local": "लोकल विवरण जोड़ीं", "editthispage": "ए पन्ना के संपादन करीं", "create-this-page": "ई पन्ना बनाईं", - "delete": "मिटाईं", - "deletethispage": "ई पन्ना के मिटाईं", - "undeletethispage": "ई पन्ना के फिर से स्थापित करीं", - "undelete_short": "{{PLURAL:$1|एक ठो हटावल गइल संपादन|$1 ठे हटावल गइल संपादन कुल}} बिनामेटावल करीं", - "viewdeleted_short": "{{PLURAL:$1|एक ठो हटावल गइल संपादन|$1 हटावल गइल संपादन कुल}} देखीं", + "delete": "हटाईं", + "deletethispage": "ए पन्ना के हटाईं", + "undeletethispage": "हटावल पन्ना वापस ले आईं", + "undelete_short": "{{PLURAL:$1|एक ठो हटावल गइल संपादन|$1 ठे हटावल गइल संपादन कुल}} वापस ले आईं", + "viewdeleted_short": "{{PLURAL:$1|एक ठो हटावल गइल संपादन|$1 हटावल गइल संपादन}} देखीं", "protect": "सुरक्षित करीं", "protect_change": "बदलीं", "protectthispage": "ए पन्ना के सुरक्षित करीं।", @@ -203,12 +204,13 @@ "personaltools": "निजी औजार", "articlepage": "सामग्री पन्ना देखीं", "talk": "बातचीत", - "views": "व्यू", + "views": "बिबिध रूप", "toolbox": "औजार", "tool-link-userrights": "{{GENDER:$1|प्रयोगकर्ता}} के मंडली बदलीं", + "tool-link-userrights-readonly": "{{GENDER:$1|प्रयोगकर्ता}} मंडली देखीं", "tool-link-emailuser": "{{GENDER:$1|प्रयोगकर्ता}} के ईमेल करीं", "userpage": "प्रयोगकर्ता पन्ना देखीं", - "projectpage": "परियोजना पन्ना देखीं", + "projectpage": "प्रोजेक्ट पन्ना देखीं", "imagepage": "फाइल पन्ना देखीं", "mediawikipage": "सनेसा पन्ना देखीं", "templatepage": "टेम्पलेट पन्ना देखीं", @@ -227,8 +229,8 @@ "jumptosearch": "खोजीं", "view-pool-error": "माफ करीं, ए समय सर्वर पर बहुत ज्यादा लोड बढ़ गइल बा।\nए पन्ना के बहुते प्रयोगकर्ता लोग देखे के कोशिश कर रहल बा।\nए पन्ना के फिर से देखे से पहिले कृपया कुछ देर तक इंतजार करीं।\n\n$1", "generic-pool-error": "माफ करीं, ए समय सर्वर पर बहुत ज्यादा लोड बढ़ गइल बा।\nए संसाधन के बहुते प्रयोगकर्ता लोग देखे के कोशिश कर रहल बा।\nए संसाधन तक पहुँच बनावे के कोशिश से पहिले कृपया कुछ देर तक इंतजार करीं।", - "pool-timeout": "तालाबन्दी खातिर इंतजार समय समाप्त", - "pool-queuefull": "पूल पंक्ति भर गइल", + "pool-timeout": "तालाबंदी खुले के इंतजार समय समाप्त", + "pool-queuefull": "पूल कतार भरल बा", "pool-errorunknown": "नामालूम खराबी", "pool-servererror": "पूल काउंटर सर्विस उपलब्ध नइखे ($1)।", "poolcounter-usage-error": "इस्तमाल खराबी: $1", @@ -252,12 +254,12 @@ "badaccess": "परमीशन खराबी", "badaccess-group0": "जवन कार्रवाई के माँग कइले बानी, ओकरा लागू करे के इजाजत रउआँ के नइखे।", "badaccess-groups": "रउआ जौन कारवाई के माँग कइले बानी ऊ {{PLURAL:$2|$1 मंडली|$1 मंडली सभ}} के सदस्य लोग भर कर सकत बा।", - "versionrequired": "मिडीयाविकी के संस्करण $1 के होखल जरुरी बा", + "versionrequired": "मिडीयाविकी के वर्शन $1 के होखल जरुरी बा", "versionrequiredtext": "ए पन्ना के प्रयोग करे खातिर मीडियाविकी के वर्शन $1 जरूरी बा।\n[[Special:Version|वर्शन पन्ना]] देखीं।", "ok": "ठीक", "retrievedfrom": "\"$1\" से लिहल गइल", - "youhavenewmessages": "रउआ लगे बा $1 ($2).", - "youhavenewmessagesfromusers": "{{PLURAL:$4|रउवाँ खातिर}}{{PLURAL:$3|अउरी प्रयोगकर्ता के|$3 प्रयोगकर्ता लोग}} के $1 बा ($2)।", + "youhavenewmessages": "{{PLURAL:$3|रउआँ खातिर}} $1 ($2) बा।", + "youhavenewmessagesfromusers": "{{PLURAL:$4|रउवाँ खातिर}}{{PLURAL:$3|केहू प्रयोगकर्ता के|$3 प्रयोगकर्ता लोग}} के $1 बा ($2)।", "youhavenewmessagesmanyusers": "रउवाँ खातिर कई प्रयोगकर्ता लोग के भेजल $1 बा ($2)।", "newmessageslinkplural": "{{PLURAL:$1|नया सनेसा|999=नया सनेसा सभ}}", "newmessagesdifflinkplural": "पिछला {{PLURAL:$1|बदलाव|999=बदलाव}}", @@ -280,13 +282,13 @@ "viewdeleted": "$1 देखावल जाय?", "restorelink": "{{PLURAL:$1|एक ठो हटावल संपादन|$1 ठे हटावल संपादन}}", "feedlinks": "फीड:", - "feed-invalid": "अवैध सबस्क्रिप्शन फीड प्रकार", + "feed-invalid": "अवैध सबस्क्रिप्शन फीड प्रकार।", "feed-unavailable": "सिंडिकेशन फीड उपलब्ध नइखें", "site-rss-feed": "$1 आरएसएस फीड", "site-atom-feed": "$1 एटम फीड", - "page-rss-feed": "\"$1\" आरएसएस फिड", + "page-rss-feed": "\"$1\" आरएसएस फीड", "page-atom-feed": "\"$1\" एटम फीड", - "red-link-title": "$1 (पन्ना मौजूद नइखे)।", + "red-link-title": "$1 (पन्ना मौजूद नइखे)", "sort-descending": "उतरत क्रम में", "sort-ascending": "चढ़त क्रम में", "nstab-main": "पन्ना", @@ -301,7 +303,7 @@ "nstab-category": "श्रेणी", "mainpage-nstab": "मुख्य पन्ना", "nosuchaction": "अइसन कौनो कार्रवाई नइखे", - "nosuchactiontext": "ए यू॰आर॰एल द्वारा बतावल कार्रवाई अवैध बा।\nरउवाँ यू॰आर॰एल गलत लिखले होखब, या कव्नो गलत कड़ी के इस्तेमाल कइले होखब।\n{{SITENAME}} में इस्तमाल हो रहल सॉफ्टवेयर में खराबी के लच्छन भी हो सकत बा।", + "nosuchactiontext": "ए यू॰आर॰एल द्वारा बतावल कार्रवाई अवैध बा।\nरउवाँ यू॰आर॰एल गलत लिखले होखब, या कौनों गलत कड़ी के इस्तेमाल कइले होखब।\n{{SITENAME}} में इस्तमाल हो रहल सॉफ्टवेयर में खराबी के लच्छन भी हो सकत बा।", "nosuchspecialpage": "अइसन कौनो खास पन्ना नइखे", "nospecialpagetext": "रउआँ एगो अवैध खास पन्ना के अनुरोध कइले बानी।\n\nबैध खास पन्नासभ के लिस्ट [[Special:SpecialPages|{{int:specialpages}}]] पर देखल जा सकत बा।", "error": "खराबी", @@ -313,7 +315,7 @@ "databaseerror-error": "खराबी: $1", "transaction-duration-limit-exceeded": "हाई रिप्लिकेशन लैग बनावे से बचे खातिर ई ट्रांजेक्शन निरस्त कर दिहल गइल, काहें से की राइट करे में लागे वाला समय ($1), $2 के सीमा से अधिक रहल ह।\nअगर आप कई ठो आइटम एकही साथ बदलत होखीं, तब कई टुकड़ा में ई काम करे के कोसिस करीं।", "laggedslavemode": "चेतावनी: अइसन भी हो सकेला कि पन्ना पर हाल के अपडेट न होखे।", - "readonly": "डेटाबेस तालाबंदी बा", + "readonly": "डेटाबेस तालाबंद बा", "enterlockreason": "तालाबंदी के कारण दीं, आ अनुमान बताईं कि कब तालाबंदी हटी", "readonlytext": "नया संपादन आ अन्य बदलाव खातिर डाटाबेस पर तालाबंदी बा, शायद रुटीन मेंटेनन्स के चलते, जेकरा बाद ए के सामान्य स्थिती में आ जाये के चाहीं।\n\nतालाबंदी करे वाला सिस्टम प्रबंधक के बतावल कारण: $1", "missing-article": "डेटाबास के ओ पन्ना के पाठ ना मिलल जवन मिले के चाहत रहल, एकर नाँव रहल \"$1\" $2।\nआमतौर पर अइसन तब होला पुरान हो चुकल अंतर या हटावल पन्ना के इतिहास के कड़ी के पीछा कइल जा रहल होखे।\n\nयदि ई बात नइखे, तब हो सकेला आपके कौनों सॉफ्टवेयर बग मिल गइल होखे।\n[[Special:ListUsers/sysop|प्रबंधक]] के ई यूआरएल दे के खबर करीं।", @@ -386,15 +388,15 @@ "cannotlogoutnow-text": "$1 के इस्तेमाल करत समय लॉगआउट नइखे संभव।", "welcomeuser": "राउर स्वागत बा, $1!", "welcomecreation-msg": "राउर खाता बना दिहल गईल बा।\nआपन [[Special:Preferences|{{SITENAME}} वरीयतां]] के बदले के ना भूलब।", - "yourname": "सदस्यनाम:", - "userlogin-yourname": "सदस्यनाँव", - "userlogin-yourname-ph": "आपन सदस्यनाँव लिखीं", - "createacct-another-username-ph": "सदस्यनाम लिखीं", - "yourpassword": "गुप्त शब्द", + "yourname": "प्रयोगकर्तानाँव:", + "userlogin-yourname": "प्रयोगकर्तानाँव", + "userlogin-yourname-ph": "आपन प्रयोगकर्तानाँव लिखीं", + "createacct-another-username-ph": "प्रयोगकर्तानाँव लिखीं", + "yourpassword": "गुप्तशब्द:", "userlogin-yourpassword": "गुप्तशब्द (पासवर्ड)", "userlogin-yourpassword-ph": "आपन गुप्तशब्द लिखीं", "createacct-yourpassword-ph": "एगो गुप्तशब्द (पासवर्ड) प्रवेश करीं", - "yourpasswordagain": "गुप्त-शब्द पुन:डालीं:", + "yourpasswordagain": "गुप्तशब्द दोबारा डालीं:", "createacct-yourpasswordagain": "गुप्तशब्द (पासवर्ड) के पुष्टि करीं", "createacct-yourpasswordagain-ph": "गुप्तशब्द (पासवर्ड) फेर से प्रवेश करीं", "userlogin-remembermypassword": "हमके लॉग इन रहे दीं", @@ -415,7 +417,7 @@ "userloginnocreate": "खाता में प्रवेश", "logout": "खाता से बाहर", "userlogout": "खाता से बाहर", - "notloggedin": "खाता में प्रवेश नईखीं भईल", + "notloggedin": "खाता में प्रवेश नइखीं भइल", "userlogin-noaccount": "का एगो खाता नइखे?", "userlogin-joinproject": "{{SITENAME}} से जुड़ीं", "nologin": "का एगो खाता नईखे? $1.", @@ -423,101 +425,102 @@ "createaccount": "खाता बनाईं", "gotaccount": "का पहिले से एगो खाता बा? $1.", "gotaccountlink": "खाता में प्रवेश", - "userlogin-resetlink": "का रउआ आपन प्रवेश जानकारी भूला गइल बानी?", - "userlogin-resetpassword-link": "आपन गुप्तशब्द भूला गईनी का?", - "userlogin-helplink2": "लॉग इन में मदद", - "userlogin-loggedin": "रउआ {{GENDER:$1|$1}} के रूप में पहिले से लॉग्ड इन बानीं।\nकौनो अन्य सदस्य के रूप में लॉग इन करे खातिर निम्नलिखित फ़ॉर्म के प्रयोग करीं।", - "userlogin-reauth": "आप के ई साबित करे खातिर की आपे {{GENDER:$1|$1}} बानी, दुबारा लॉगिन करे के पड़ी।", + "userlogin-resetlink": "का रउआ आपन खाता में प्रवेश वाली जानकारी भुला गइल बानी?", + "userlogin-resetpassword-link": "आपन गुप्तशब्द भुला गइनी का?", + "userlogin-helplink2": "खाता में प्रवेश में मदद", + "userlogin-loggedin": "रउआ {{GENDER:$1|$1}} के रूप में पहिले से खाता में प्रवेश क चुकल बानीं।\nकौनो अन्य सदस्य के रूप में खाता में प्रवेश करे खातिर नीचे दिहल फारम के प्रयोग करीं।", + "userlogin-reauth": "आप के ई साबित करे खातिर की आपे {{GENDER:$1|$1}} बानी, दुबारा खाता में प्रवेश करे के पड़ी।", "userlogin-createanother": "एगो दूसर खाता बनाईं", - "createacct-emailrequired": "ई-मेल पता", - "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)", - "createacct-email-ph": "आपन ई-मेल पता लिखीं", - "createacct-another-email-ph": "ई-मेल पता लिखीं", - "createaccountmail": "एगो अस्थायी यादृच्छिक (रैन्डम) गुप्तशब्द के प्रयोग करीं आ निर्दिष्ट ई-मेल पता पर भेजीं", + "createacct-emailrequired": "ईमेल पता", + "createacct-emailoptional": "ईमेल पता (वैकल्पिक)", + "createacct-email-ph": "आपन ईमेल पता लिखीं", + "createacct-another-email-ph": "ईमेल पता लिखीं", + "createaccountmail": "एगो अस्थायी यादृच्छिक (रैन्डम) गुप्तशब्द के प्रयोग करीं आ दिहल गइल ईमेल पता पर भेजीं", "createaccountmail-help": "एकर इस्तेमाल केहू दुसरा खातिर खाता बनावे में कइल जा सके ला, बिना पासवर्ड जनले।", "createacct-realname": "असली नाम (वैकल्पिक)", "createaccountreason": "कारण:", "createacct-reason": "कारण", - "createacct-reason-ph": "रउआ एगो अन्य खाता काहे बना रहल बानी", - "createacct-reason-help": "खाता बनवले के लॉग में देखाई पड़े वाला संदेस", + "createacct-reason-ph": "रउआ एगो अन्य खाता काहें बना रहल बानी", + "createacct-reason-help": "खाता बनवले के लॉग में देखाई पड़े वाला सनेसा", "createacct-submit": "आपन खाता बनाईं", "createacct-another-submit": "खाता बनाईं", "createacct-continue-submit": "खाता बनावल जारी राखीं", "createacct-another-continue-submit": "खाता बनावल जारी राखीं", - "createacct-benefit-heading": "{{SITENAME}} रउआ जइसन लोगन द्वारा बनावल गईल बा।", + "createacct-benefit-heading": "{{SITENAME}} रउआ जइसन लोगन द्वारा बनावल गइल बा।", "createacct-benefit-body1": "{{PLURAL:$1|संपादन}}", "createacct-benefit-body2": "{{PLURAL:$1|पन्ना}}", "createacct-benefit-body3": "हाल के {{PLURAL:$1|योगदानकर्ता}}", - "badretype": "रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।", - "usernameinprogress": "एही सदस्यनाँव खातिर खाता खोले के काम पहिलहीं चालू बा।\nइंतजार करीं।", - "userexists": "लिखल गईल सदस्य नाम पहिले से प्रयोग में बा। कृपया कौनो दोसर नाम चुनीं।", - "loginerror": "खाता प्रवेश में त्रुटि", - "createacct-error": "खाता निर्माण त्रुटि", - "createaccounterror": "ई खाता ना बन पाईल: $1", - "nocookiesnew": "प्रयोगकर्ता खाता त बन गईल, बाँकी रउआ प्रवेश नईखीं भईल।\n{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।\nराउर कुकिज असक्षम बा।\nकृपया उ के सक्षम करीं, उ के बाद राउर नया प्रयोगकर्ता नाम आ गुप्त शब्द के साथ प्रवेश करीं।", - "nocookieslogin": "{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकिज के प्रयोग करेला।\nराउर कुकिज असक्षम बा।\nकृपया उ के सक्षम करीं आ फिर से कोशिश करीं", - "nocookiesfornew": "स्रोत के पुष्टि ना हो पावे के कारण इ खाता निर्मित ना करल गइल। \nसुनिश्चित करीं कि रउआ कुकीज़ सक्षम कइले बानी, पृष्ठ के पुनः लोड करीं आ पुनः प्रयास करीं।", + "badretype": "रउआँ जौन गुप्तशब्द डालत बानी उ मेल नइखे खात।", + "usernameinprogress": "एही प्रयोगकर्तानाँव खातिर खाता खोले के काम पहिलहीं चालू बा।\nइंतजार करीं।", + "userexists": "लिखल गइल प्रयोगकर्तानाँव पहिले से प्रयोग में बा। कौनों दूसर नाम बीछीं।", + "loginerror": "खाता प्रवेश में खराबी", + "createacct-error": "खाता बनावे में खराबी", + "createaccounterror": "ई खाता ना बन पावल: $1", + "nocookiesnew": "प्रयोगकर्ता खाता त बन गइल, बाकी रउआ प्रवेश नइखीं भईल।\n{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकी सब के प्रयोग करे ला।\nराउर कुकीज असक्षम बा।\nकुकीज सक्षम करीं, एकरा बाद आपन नया प्रयोगकर्तानाँव आ गुप्तशब्द के साथ प्रवेश करीं।", + "nocookieslogin": "{{SITENAME}} प्रयोगकर्ता लोग के खाता में प्रवेश करावे खातिर कुकी सभ के प्रयोग करेला।\nराउर कुकीज असक्षम बा।\nकृपया कुकी के सक्षम करीं आ फिर से कोशिश करीं", + "nocookiesfornew": "स्रोत के पुष्टि ना हो पावे के कारण इ खाता ना बनावलल गइल। \nसुनिश्चित करीं कि रउआँ कुकीज सक्षम कइले बानी, पन्ना दोबारा लोड करीं आ फिर से कोसिस करीं।", "createacct-loginerror": "खाता बनावल सफल भइल बाकी रउआँ अपने-आप लॉगिन ना हो पवलीं। [[Special:UserLogin|मैनुअल लॉगिन]] करीं।", - "noname": "रउआ उपयुक्त प्रयोगकर्ता नाम नईखीं निर्दिष्ट कईले।", - "loginsuccesstitle": "लॉगिन पूरा", - "loginsuccess": "''' \"$1\" के रुप में रउआ {{SITENAME}} में अब प्रवेश कर चुकल बानी।'''", - "nosuchuser": "\"$1\" नाँव के कौनो प्रयोगकर्ता नइखन।\nप्रयोगकर्ता नाम संवेदनशील मामला बा।\nशब्द आ इस्पेलिंग के जाँच करीं, या [[Special:CreateAccount|एगो नया खाता बनाईं]]।", - "nosuchusershort": "ई नाम से कौनो प्रयोगकर्ता नईखन \"$1\".\nआपन शब्द-वर्तनी के जाँच करीं।", - "nouserspecified": "रउआ एगो प्रयोगकर्ता नाम निर्दिष्ट करे के बा।", - "login-userblocked": "ई प्रयोगकर्ता के खाता निष्क्रिय हो चुकल बा। प्रवेश के आज्ञा नईखे।", - "wrongpassword": "गलत गुप्त-शब्द डलले बानी।\nकृपया फिर से कोशिश करीं।", - "wrongpasswordempty": "गुप्त-शब्द खाली बा। कृपया फिर से कोशिश करीं।", - "passwordtooshort": "गुप्त-शब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।", - "passwordtoolong": "गुप्त-शब्द {{PLURAL:$1|$1 अक्षर}} से अधिक लमहर नइखे हो सकत।", - "passwordtoopopular": "अक्सरहा बीछल जाए वाला पासवर्ड ना इस्तेमाल होखी। कौनों अउरी खास अलग टाइप के पासवर्ड चुनीं।", - "password-name-match": "राउर गुप्त-शब्द राउर प्रयोगकर्ता नाम से अलग होवे के चाहीं।", - "password-login-forbidden": "इस सदस्यनाम आ गुप्तशब्द के प्रयोग वर्जित बा।", + "noname": "रउआ बैध प्रयोगकर्तानाँव नइखीं दिहले।", + "loginsuccesstitle": "खाता में प्रवेश हो गइल", + "loginsuccess": "''' \"$1\" के रुप में रउआँ {{SITENAME}} में अब प्रवेश कर चुकल बानी।'''", + "nosuchuser": "\"$1\" नाँव के कौनो प्रयोगकर्ता नइखन।\nप्रयोगकर्तानाँव संवेदनशील मामला बा।\nशब्द आ इस्पेलिंग के जाँच करीं, या [[Special:CreateAccount|एगो नया खाता बनाईं]]।", + "nosuchusershort": "\"$1\" नाँव के कौनो प्रयोगकर्ता नइखन।\nआपन इस्पेलिंग (हिज्जे) जाँचीं।", + "nouserspecified": "एगो प्रयोगकर्तानाँव देवे के परी।", + "login-userblocked": "ए प्रयोगकर्ता के खाता निष्क्रिय हो चुकल बा। प्रवेश के आज्ञा नईखे।", + "wrongpassword": "गलत गुप्तशब्द डलले बानी।\nकृपया फिर से कोसिस करीं।", + "wrongpasswordempty": "गुप्तशब्द खाली बा। कृपया फिर से कोसिस करीं।", + "passwordtooshort": "गुप्तशब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षर}} के होवे के चाहीं।", + "passwordtoolong": "गुप्तशब्द {{PLURAL:$1|$1 अक्षर}} से लमहर ना चाहीं।", + "passwordtoopopular": "अक्सरहा बीछल जाए वाला गुप्तशब्द ना इस्तेमाल हो सके ला। कौनों अउरी खास अलग किसिम के गुप्तशब्द चुनीं।", + "password-name-match": "राउर गुप्तशब्द राउर प्रयोगकर्तानाँव से अलग होखे के चाहीं।", + "password-login-forbidden": "इस प्रयोगकर्तानाँव आ गुप्तशब्द के प्रयोग वर्जित बा।", "mailmypassword": "गुप्तशब्द रिसेट करीं", - "passwordremindertitle": "{{SITENAME}} खातिर नया अस्थायी गुप्त-शब्द", - "passwordremindertext": "केहु (शायद रउए, $1 आइ॰पी पता से) {{SITENAME}} ($4) पर प्रयोग खातिर नया गुप्तशब्द के निवेदन कईले बानी। सदस्य \"$2\" खातिर एगो अस्थायी गुप्तशब्द बना दिहल गईल बा, आ ई अभी \"$3\" बा। यदि ई राउरे आशय रहल, त अब रउआ खाता प्रवेश खातिर एगो नया गुप्तशब्द चुने के पड़ी।\nराउर अस्थायी गुप्तशब्द के अवधि {{PLURAL:$5|एक दिन|$5 दिनं}} में समाप्त हो जाई।\n\nयदि इ निवेदन केहु अउर कइले रहल, या रउआ आपन पुरान गुप्तशब्द अब नइखी बदले के चाहत काहे कि रउआ राउर पुरनका गुप्तशब्द के स्मरण हो आइल बा, त रउआ इ संदेश के अनदेखा कर सकत बानी, आ आपन पुरान गुप्तशब्द के प्रयोग पहिले हि जइसन कर सकत बानी।", - "noemail": "\"$1\" सदस्य खातिर कउनो भी ई-मेल पता दर्ज नइखे करल गइल।", - "noemailcreate": "रउआ एगो जायज ई-मेल पता उपलब्ध करावे के पड़ी।", - "passwordsent": "\"$1\" के ई-मेल पता पर एगो नया गुप्तशब्द भेज दिहल गइल बा।\nई-मेल पावे के बाद कृपया दुबारा खाता में प्रवेश करब।", - "blocked-mailpassword": "राउर आइपी पता के संपादन करे से रोक दिहल गइल बा। दुरुपयोग रोके खातिर, ए आइपी से पासवर्ड रिकवरी के अनुमति नइखे।", - "eauthentsent": "दर्ज करावल गइल ई-मेल पता पर एगो पुष्टिकरण ई-मेल भेज दिहल गइल बा।\nउ खाता पर कौनो दुसर ईमेल भेजल जाओ उ से पहिले, रउआ भेजल गईल ई-मेल पर दिहल गइल निर्देश के अनुसरण कर के ई-मेल पता के पुष्टिकरण करावे के पड़ी ताकि पता चले की सही में उ राउरे खाता ह।", - "throttled-mailpassword": "पिछला {{PLURAL:$1|एक घंटा|$1 घंटा}} के अंदर एगो गुप्तशब्द पुनर्स्थापन ई-मेल भेजल जा चुकल बा।\nदुरुपयोग से बचावे खातिर {{PLURAL:$1|एक घंटा|$1 घंटा}} में सिर्फ एगो गुप्तशब्द पुनर्स्थापन ई-मेल भेजल जाई।", - "mailerror": "ई-मेल भेजे में त्रुटि: $1", + "passwordremindertitle": "{{SITENAME}} खातिर नया अस्थायी गुप्तशब्द", + "passwordremindertext": "केहू (शायद रउए, $1 आइपी पता से) {{SITENAME}} ($4) पर प्रयोग खातिर नया गुप्तशब्द के निवेदन कइले बा। प्रयोगकर्ता \"$2\" खातिर एगो अस्थायी गुप्तशब्द बना दिहल गइल बा, आ ई \"$3\" बा। यदि ई रउवें चाहत रहलीं, त अब रउआँ के खाता में प्रवेश क के एगो नया गुप्तशब्द चुने के पड़ी।\nराउर अस्थायी गुप्तशब्द के अवधि {{PLURAL:$5|एक दिन|$5 दिन}} में खतम हो जाई।\n\nयदि ई निवेदन केहु अउर कइले रहल, या रउआँ के आपन पुरनका गुप्तशब्द इयाद आ गइल बा आ बदलाव नइखीं चाहत, त रउआँ ए सनेसा के अनदेखा कर सकत बानी, आ आपन पुरनका गुप्तशब्द के प्रयोग पहिले नियर कर सकत बानी।", + "noemail": "\"$1\" प्रयोगकर्ता खातिर कौनों ईमेल पता रिकार्ड में नइखे।", + "noemailcreate": "रउआँ के एगो जायज ईमेल पता देवे के पड़ी।", + "passwordsent": "\"$1\" के ईमेल पता पर एगो नया गुप्तशब्द भेज दिहल गइल बा।\nईमेल पावे के बाद कृपया दुबारा खाता में प्रवेश करीं।", + "blocked-mailpassword": "राउर आइपी पता के संपादन करे से रोक दिहल गइल बा। दुरुपयोग रोके खातिर, ए आइपी से गुप्तशब्द दोबारा हासिल करे के इजाजत नइखे।", + "eauthentsent": "दर्ज करावल गइल ईमेल पता पर एगो पुष्टिकरण ईमेल भेज दिहल गइल बा।\nउ खाता पर कौनो दूसर ईमेल भेजल जाव ओ से पहिले, रउआँ भेजल गइल ईमेल पर दिहल गइल निर्देश के अनुसार ईमेल पता के पुष्टिकरण करावे के पड़ी ताकि पता चले की सही में ऊ राउरे खाता हऽ।", + "throttled-mailpassword": "पिछला {{PLURAL:$1|एक घंटा|$1 घंटा}} के अंदर एगो गुप्तशब्द बदलाव ईमेल भेजल जा चुकल बा।\nदुरुपयोग से बचावे खातिर {{PLURAL:$1|एक घंटा|$1 घंटा}} में सिर्फ एगो गुप्तशब्द बदलाव ईमेल भेजल जाई।", + "mailerror": "ईमेल भेजे में गड़बड़ी: $1", "acct_creation_throttle_hit": "राउर आइपी पता से आइल आगंतुक लोग पिछला $2 में एह विकि पर {{PLURAL:$1|एक ठो खाता|$1 खाता}} बना चुकल बा जवन एह समयअवधि में अधिकतम सीमा बा।\nएही कारण, एह आइपी पता के इस्तेमाल करे वाला आगंतुक अब कौनों अउरी खाता एह समय नइखें बना सकत।", - "emailauthenticated": "$2 के $3 पर राउर ई-मेल पता के पुष्टीकरण हो चुकल बा।", - "emailnotauthenticated": "राउर ई-मेल पता के अभी तक प्रमाणिकरण नइखे भईल।\nनिम्नलिखित कउनो भी सुविधा खातिर रउआ के कौनो भी ई-मेल ना भेजल जाई।", - "noemailprefs": "इ सुविधा के प्रयोग करे खातिर आपन वरियता में एगो ई-मेल पता दिहीं।", - "emailconfirmlink": "अपना ई-मेल पता कन्फर्म करीं", - "invalidemailaddress": "राउर ई-मेल पता स्वीकार करल नइखे जा सकत काहे कि ई-मेल के जउन रुप दिखाई दे रहल बा उ गलत लागत बा।\nकृपया एगो सहि ई-मेल पता उपलब्ध कराईं या उ जगह के खाली छोड़ दिहीं।", - "cannotchangeemail": "इ विकी पर ई-मेल पता बदलल नईखे जा सकत।", - "emaildisabled": "इ साईट से ई-मेल नईखे भेजल जा सकत।", - "accountcreated": "खाता बनावल गईल", - "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]]) खातिर खाता निर्मित कर दिहल गईल बा।", + "emailauthenticated": "$2 के $3 पर राउर ईमेल पता के पुष्टीकरण हो चुकल बा।", + "emailnotauthenticated": "राउर ईमेल पता के अभी तक प्रमाणिकरण नइखे भइल।\nनीचे लिखल कौनों भी सुविधा खातिर रउआ के कौनो भी ईमेल ना भेजल जाई।", + "noemailprefs": "ए सुविधा के प्रयोग करे खातिर आपन सेटिंग में एगो ईमेल पता देईं।", + "emailconfirmlink": "अपना ईमेल पता के पुष्टी करीं", + "invalidemailaddress": "राउर ईमेल पता अबैध फॉरमैट में बुझात बा आ स्वीकार नइखे हो सकत।\nसही-फॉरमैट में ईमेल पता देईं या जगह के खाली छोड़ देईं।", + "cannotchangeemail": "ए विकी पर ईमेल पता ना बदलल जा सकत बा।", + "emaildisabled": "इ साइट से ईमेल नइखे भेजल जा सकत।", + "accountcreated": "खाता बनावल गइल", + "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]]) खातिर खाता बना दिहल गइल।", "createaccount-title": "{{SITENAME}} खातिर खाता बनाईं", - "createaccount-text": "राउर ई-मेल पता खातिर {{SITENAME}} ($4) पर \"$2\" सदस्य नाम से \"$3\" गुप्तशब्द (पासवर्ड) सहित खाता खोलले बानी। रउआ खाता में प्रवेश कर के आपन गुप्तशब्द (पासवर्ड) तुरंत बदल लेवे के चाहीं।\n\nयदि इ खाता गलती से खोलल गईल बा, त रउआ इ संदेश के अनदेखा कर सकत बानी।", - "login-throttled": "रउआ हाले में कईयन बार खाता में प्रवेश करे के कोशिश कर चुकल बानी।\nकृपया $1 प्रतिक्षा करला के बाद फिर से प्रयास करब।", - "login-abort-generic": "राउर लॉगिन बिफल रहल - रद्द कइल गइल", - "login-migrated-generic": "आप के खाता माइग्रेट हो चुकल बा अउर आप के सदस्यनाम इ विकी पर अब मौजूद नइखे।", + "createaccount-text": "राउर ईमेल पता खातिर {{SITENAME}} ($4) पर \"$2\" प्रयोगकर्तानाँव से \"$3\" गुप्तशब्द के साथ केहू खाता खोलले बा।\nरउआँ के खाता में प्रवेश कर के आपन गुप्तशब्द तुरंत बदल लेवे के चाहीं।\n\nयदि ई खाता गलती से खोलल गइल बा, त रउआ ए सनेसा के अनदेखा कर सकत बानी।", + "login-throttled": "रउआ हाले में कइयन बेर खाता में प्रवेश करे के कोशिश क चुकल बानी।\nकृपया $1 इंतजार के बाद फिर से कोसिस करब।", + "login-abort-generic": "राउर खाता में प्रवेश बिफल रहल - रद्द कइल गइल", + "login-migrated-generic": "आप के खाता माइग्रेट हो चुकल बा अउर आप के प्रयोगकर्तानाँव ए विकी पर अब मौजूद नइखे।", "loginlanguagelabel": "भाषा: $1", - "suspicious-userlogout": "राउर खाता से बाहर जाये के अनुरोध अस्वीकृत कर दिहल गइल बा काहे कि अइसन लग रहल बा कि इ कउनो खराब ब्राउज़र या कैश करे वाली प्रॉक्सी द्वारा भेजल गईल रहल।", - "createacct-another-realname-tip": "असली नाम वैकल्पिक बा।\nयदि रउआ इ के उपलब्ध करावे के चुनत बानी त, एकर प्रयोग सदस्य के ओकरा काम के अधिकार देवे खातिर होखी।", + "suspicious-userlogout": "राउर खाता से बाहर जाये के अनुरोध अस्वीकृत कर दिहल गइल बा काहे कि अइसन बुझाता कि ई कौनों खराब ब्राउजर या कशे करे वाली प्रॉक्सी द्वारा भेजल गइल रहल।", + "createacct-another-realname-tip": "असली नाम वैकल्पिक बा।\nअगर रउआँ असली नाँव देवे के बिकल्प चुनब, एकर इस्तेमाल प्रयोगकर्ता के ओकरा काम के श्रेय देवे खातिर होखी।", "pt-login": "खाता में प्रवेश", - "pt-login-button": "लॉग इन", - "pt-login-continue-button": "लॉगिन जारी राखीं", + "pt-login-button": "खाता में प्रवेश", + "pt-login-continue-button": "खाता में प्रवेश जारी राखीं", "pt-createaccount": "खाता बनाईं", - "pt-userlogout": "लॉग आउट", - "php-mail-error-unknown": "PHP के mail() फ़ंक्शन में अज्ञात त्रुटि बा।", - "user-mail-no-addy": "बिना कउनो ई-मेल पता के ई-मेल भेजे के प्रयत्न भईल बा।", - "user-mail-no-body": "एगो खाली अथवा बहुत छोट ई-मेल भेजे के प्रयत्न भईल बा।", - "changepassword": "गुप्त शब्द बदलीं", - "resetpass_announce": "लॉग इन सम्पूर्ण करे खातिर रउआ एगो नया पासवर्ड देवे के होई।", + "pt-userlogout": "खाता से बाहर", + "php-mail-error-unknown": "PHP के mail() फंक्शन में नामालूम गड़बड़ी बा।", + "user-mail-no-addy": "बिना कौनो ईमेल पता के ईमेल भेजे के कोसिस भइल बा।", + "user-mail-no-body": "एगो खाली या बहुत छोट ईमेल भेजे के कोसिस भइल बा।", + "changepassword": "गुप्तशब्द बदलीं", + "resetpass_announce": "खाता में प्रवेश पूरा करे खातिर रउआँ के एगो नया पासवर्ड देवे के पड़ी।", "resetpass_header": "खाता के गुप्तशब्द बदलीं", - "oldpassword": "पुराना गुप्त-शब्द:", - "newpassword": "नया गुप्त-शब्द:", - "retypenew": "नया गुप्त-शब्द पुन: डालीं:", + "oldpassword": "पुरान गुप्तशब्द:", + "newpassword": "नया गुप्तशब्द:", + "retypenew": "नया गुप्तशब्द फिर डालीं:", "resetpass_submit": "गुप्तशब्द बनाईं आ खाता में प्रवेश करीं", - "changepassword-success": "राउर पासवर्ड बदल दिहल गइल बा!", - "changepassword-throttled": "रउआ हाले में कईयन बार खाता में प्रवेश करे के कोशिश कर चुकल बानी।\nकृपया $1 प्रतिक्षा करला के बाद फिर से प्रयास करब।", + "changepassword-success": "राउर गुप्तशब्द बदल दिहल गइल बा!", + "changepassword-throttled": "रउआँ हाले में कइयन बेर खाता में प्रवेश करे के कोसिस क चुकल बानी।\nकृपया $1 इंतजार के बाद फिर से कोसिस करब।", "botpasswords": "बॉट पासवर्ड", + "botpasswords-summary": "बॉट पासवर्ड खाता के मुख्य प्रवेश-पहिचान-जानकारी के बिना, सीधे एपीआई के माध्यम से खाता ले पहुँच देवे लें। बॉट पासवर्ड दे के खाता में प्रवेश के बाद खाता के प्रयोगकर्ता अधिकार कुछ सीमित हो सकेला।\n\nअगर आपके ई नइखे मालूम कि ई करे के आपके का जरूरत बा, साइद आपके ई ना करे के चाहीं। केहू भी रउवाँ से कबो ई पासवर्ड जनरेट करे के ना कही न आपसे ई पासवर्ड माँगी।", "botpasswords-disabled": "बॉट पासवर्ड अक्षम कइल गइल बा।", "botpasswords-no-central-id": "बॉट पासवर्ड के प्रयोग करे खातिर आपके सेंट्रलाइज्ड खाता से लॉगिन होखल जरूरी बा।", "botpasswords-existing": "मौजूद बॉट पासवर्ड", @@ -541,46 +544,54 @@ "botpasswords-deleted-title": "बॉट पासवर्ड मिटावल गइल", "botpasswords-deleted-body": "प्रयोगकर्ता \"$2\" के बॉट नाँव \"$1\" खातिर बॉट पासवर्ड मिटावल गइल।", "resetpass_forbidden": "गुप्तशब्द बदलल नइखे जा सकत", - "resetpass-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआ पहिले खाता में प्रवेश करे के पड़ी।", - "resetpass-submit-loggedin": "गुप्त शब्द बदलीं", + "resetpass_forbidden-reason": "गुप्तशब्द बदलल नइखे जा सकत:$1", + "resetpass-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआँ के पहिले खाता में प्रवेश करे के पड़ी।", + "resetpass-submit-loggedin": "गुप्तशब्द बदलीं", "resetpass-submit-cancel": "रद्द करीं", - "resetpass-wrong-oldpass": "अवैद्य अस्थायी या वर्तमान गुप्तशब्द।\nरउआ पहिले हिं सफलतापूर्वक आपन गुप्तशब्द बदल चुकल बानी, या रउआ एगो अस्थायी गुप्तशब्द के अनुरोध कइले होखब।", + "resetpass-wrong-oldpass": "अबैध अस्थायी या वर्तमान गुप्तशब्द।\nरउआ पहिलहीं आपन गुप्तशब्द बदल चुकल बानी, या रउआ एगो अस्थायी गुप्तशब्द के अनुरोध कइले हो सकत बानी।", "resetpass-recycled": "रीसेट करे खातिर नया पासवर्ड में कृपया आपन वर्तमान पासवर्ड के अलावा कौनो अन्य पासवर्ड के प्रयोग करीं।", - "resetpass-temp-emailed": "अस्थाई ईमेल कोड के द्वारा रउआ लॉग इन भइल बानी।\nलॉग इन पूरा करे खातिर, रउआ एगो नया पासवर्ड सेट करे के पड़ी:", + "resetpass-temp-emailed": "अस्थाई ईमेल कोड के द्वारा रउआ खाता में प्रवेश कइले बानी।\nखाता में प्रवेश पूरा करे खातिर एगो नया गुप्तशब्द सेट करे के पड़ी:", "resetpass-temp-password": "अस्थायी गुप्तशब्द:", - "resetpass-abort-generic": "कउनो एक्सटेंशन द्वारा गुप्तशब्द में बदलाव रोक दिहल गईल बा।", - "resetpass-expired": "राउर पासवर्ड की वैधता अवधि समाप्त हो चुकल बा। कृपया लॉग इन करे खातिर एगो नया पासवर्ड सेट करीं।", - "resetpass-expired-soft": "राउर गुप्तशब्द अमान्य हो चुकल बा इ के पुनः स्थापित करे के पड़ी। कृपया अभी एगो नया गुप्तशब्द चुनीं या \"{{int:authprovider-resetpass-skip-label}}\" पर बाद में पुनः स्थापित कर सकत बानी।", - "resetpass-validity-soft": "राउर पासवर्ड मान्य नईखे: $1 \n\nकृपया अब एक नया पासवर्ड चुनीं, या उ के बाद में पुनर्स्थापित करे खातिर \"{{int:authprovider-resetpass-skip-label}}\" पर क्लिक करीं।", - "passwordreset": "गुप्तशब्द (पासवर्ड) रिसेट करीं", - "passwordreset-text-one": "आपन गुप्तशब्द के पुनर्स्थापित करे खातिर इ फॉर्म भरीं।", - "passwordreset-text-many": "{{PLURAL:$1|ईमेल द्वारा अस्थाई पासवर्ड पावे खातिर निम्न में से कउनो एगो स्थान भरीं।}}", - "passwordreset-disabled": "इ विकी पर पासवर्ड पुनर्स्थापन अक्षम बा।", - "passwordreset-emaildisabled": "इ विकि पर ई-मेल सुविधा अक्षम कर दिहल गईल बा।", - "passwordreset-username": "प्रयोगकर्ता नाम", + "resetpass-abort-generic": "कउनो एक्सटेंशन द्वारा गुप्तशब्द में बदलाव रोक दिहल गइल बा।", + "resetpass-expired": "राउर गुप्तशब्द के वैधता समय खतम हो चुकल बा। खाता में प्रवेश करे खातिर एगो नया गुप्तशब्द सेट करीं।", + "resetpass-expired-soft": "राउर गुप्तशब्द के समय खतम हो चुकल बा आ बदले के जरूरत बा। अब्बे नया गुप्तशब्द चुनीं, या बाद में बदले के होखे त क्लिक करीं \"{{int:authprovider-resetpass-skip-label}}\"।", + "resetpass-validity-soft": "राउर गुप्तशब्द मान्य नइखे: $1 \n\nअब एगो नया गुप्तशब्द चुनीं, या \"{{int:authprovider-resetpass-skip-label}}\" पर क्लिक करीं अगर बाद में बदले के होखे।", + "passwordreset": "गुप्तशब्द रिसेट करीं", + "passwordreset-text-one": "ईमेल से अस्थायी गुप्तशब्द पावे खातिर ई फारम भरीं।", + "passwordreset-text-many": "{{PLURAL:$1|ईमेल द्वारा अस्थाई पासवर्ड पावे खातिर नीचे के कौनो एगो स्थान भरीं।}}", + "passwordreset-disabled": "ए विकि पर गुप्तशब्द बदलल अक्षम कइल गइल बा।", + "passwordreset-emaildisabled": "ए विकि पर ईमेल सुबिधा अक्षम कइल गइल बा।", + "passwordreset-username": "प्रयोगकर्तानाँव:", "passwordreset-domain": "डोमेन:", - "passwordreset-email": "ई-मेल पता:", + "passwordreset-email": "ईमेल पता:", "passwordreset-emailtitle": "{{SITENAME}} पर खाता विवरण", - "passwordreset-emailtext-ip": "केहु (शायद रउए, $1 आइ॰पी पता से) {{SITENAME}} ($4) पर आपन {{PLURAL:$3|गुप्तशब्द}} के रीसेट करे के अनुरोध कईले बानी। इ ई-मेल पता से निम्न {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी। रउआ खाता में प्रवेश करके एगो नया गुप्तशब्द अभी चुन लेवे के चाहीं। यदि इ अनुरोध केहु अउर कइले बा, या फिर रउआ आपन मूल गुप्तशब्द याद आ गईल बा, अउर आप {{PLURAL:$3|आपन}} गुप्तशब्द नइखी बदले के चाहत त, रउआ इ संदेश के अनदेखा कर के आपन पुरानका गुप्तशब्द के प्रयोग जारी रख सकत बानी।", - "passwordreset-emailtext-user": "{{SITENAME}} ($4) पर सदस्य $1 राउर {{PLURAL:$3|खाता}} के गुप्तशब्द के पुनर्स्थापित करे के अनुरोध कइले बानी। इ ई-मेल पता से निम्न {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी।\nरउआ खाता में प्रवेश करके एगो नया गुप्तशब्द अभीये चुन लेवे के चाहीं। यदि इ अनुरोध केहु अउर कइले बा, या फिर रउआ आपन मूल गुप्तशब्द याद आ गईल बा, अउर रउआ {{PLURAL:$3|आपन}} गुप्तशब्द नईखीं बदले के चाहत त, रउआ इ संदेश के अनदेखा कर के आपन पुरनका गुप्तशब्द के प्रयोग जारी रख सकत बानीं।", - "passwordreset-emailelement": "सदस्यनाम: \n$1\n\nअस्थायी गुप्तशब्द: \n$2", - "passwordreset-emailsentemail": "एगो गुप्तशब्द रिसेट ई-मेल भेजल जा चुकल बा।", + "passwordreset-emailtext-ip": "केहु (शायद रउए, $1 आइपी पता से) {{SITENAME}} ($4) पर आपन {{PLURAL:$3|गुप्तशब्द}} के रीसेट करे के अनुरोध कइले बा। ए ईमेल पता से नीचे दिहल {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी। रउआँ के खाता में प्रवेश क के एगो नया गुप्तशब्द अब्बे चुन लेवे के चाहीं। यदि ई अनुरोध केहु अउर कइले बा, या फिर रउआँ के आपन मूल गुप्तशब्द इयाद आ गइल बा, आ आप {{PLURAL:$3|आपन}} गुप्तशब्द नइखीं बदलल चाहत त ए सनेसा के अनदेखा क के आपन पुरानका गुप्तशब्द के प्रयोग जारी रख सकत बानी।", + "passwordreset-emailtext-user": "{{SITENAME}} ($4) पर सदस्य $1 राउर {{PLURAL:$3|खाता}} के गुप्तशब्द के पुनर्स्थापित करे के अनुरोध कइले बानी। ए ईमेल पता से नीचे दिहल {{PLURAL:$3|खाता जुड़ल बा}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्तशब्द {{PLURAL:$5|एक दिन|$5 दिन}} के बाद काम ना करी।\nरउआँ के खाता में प्रवेश करके एगो नया गुप्तशब्द अब्बे चुन लेवे के चाहीं। यदि ई अनुरोध केहु अउर कइले बा, या फिर रउआँ के आपन मूल गुप्तशब्द इयाद आ गइल बा, आ रउआँ {{PLURAL:$3|आपन}} गुप्तशब्द नइखीं बदलल चाहत त ए सनेसा के अनदेखा क के आपन पुरनका गुप्तशब्द के प्रयोग जारी रख सकत बानीं।", + "passwordreset-emailelement": "प्रयोगकर्तानाँव: \n$1\n\nअस्थायी गुप्तशब्द: \n$2", + "passwordreset-emailsentemail": "अगर दिहल गइल ईमेल पता आपके खाता के साथ जुड़ल होखी, गुप्तशब्द दुबारा सेट करे खातिर एक ठो ईमेल भेज दिहल जाई।", + "passwordreset-emailsentusername": "अगर एह प्रयोगकर्तानाँव के साथ कौनों ईमेल जुड़ल होखी, गुप्तशब्द बदले खातिर एक ठो ईमेल भेज दिहल जाई।", + "passwordreset-nocaller": "एक ठो काल करे वाला दिहल जरूरी बाटे", + "passwordreset-nosuchcaller": "काल करे वाला मौजूद नइखे:$1", + "passwordreset-ignored": "गुप्तशब्द दुबारा सेट कइले के हैंडिल ना कइल गइल। शाइत केहू उपलब्ध करावे वाला ना बुझाइल?", "passwordreset-invalidemail": "अवैध ईमेल पता", - "changeemail": "ई-मेल पता बदलीं", - "changeemail-header": "खाता के ई-मेल पता बदलीं", + "passwordreset-nodata": "प्रयोगकर्ता नाँव या ई मेल कुच्छू ना दिहल गइल रहल", + "changeemail": "ईमेल पता बदलीं या हटाईं", + "changeemail-header": "आपन ईमेल पता बदले खातिर ई फार्म भरीं। अगर आप अपना खाता से जुड़ल ईमेल हटावल चाहत बानी, तब नया ईमेल वाला बिकल्प के फार्म में खाली छोड़ देईं।", "changeemail-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआ पहिले खाता में प्रवेश करे के पड़ी।", "changeemail-oldemail": "वर्तमान ई-मेल पता:", - "changeemail-newemail": "नया ई-मेल पता:", - "changeemail-none": "(कउनो नाहीं)", + "changeemail-newemail": "नया ईमेल पता:", + "changeemail-newemail-help": "ई बिकल्प के खाली तबे छोड़ल जाय जब आप आपन ईमेल खाता से हटावल चाहत होखीं। एकरा बाद आपन भुलाइल पासवर्ड बदले खातिर ईमेल ना माँग पाइब, न एह विकि से कौनों ईमेल आपके भेजल जा पाई अगर आप आपन ईमेल पता इहाँ से हटा देइब।", + "changeemail-none": "(कौनो ना)", "changeemail-password": "राउर {{SITENAME}} गुप्तशब्द:", - "changeemail-submit": "ई-मेल बदलीं", - "changeemail-throttled": "रउआ हाले में कईयन बार खाता में प्रवेश करे के कोशिश कर चुकल बानी।\nकृपया $1 प्रतिक्षा करला के बाद फिर से प्रयास करब।", + "changeemail-submit": "ईमेल बदलीं", + "changeemail-throttled": "रउआँ हाले में कइयन बेर खाता में प्रवेश करे के कोसिस क चुकल बानी।\nकृपया $1 इंतजार के बाद फिर से कोसिस करब।", + "changeemail-nochange": "इहाँ एक ठो दूसर ईमेल भरीं।", "resettokens": "टोकन रीसेट करीं", - "resettokens-text": "जौन टोकन राउर खाता से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करेला, आप उ के अहिजा रीसेट कर सकत बानी।\n\nयदि रउआ ई के गलती से केहू के दिखा देले बानी या फिर राउर खाता हैक हो गईल बा त रउआ ई के रीसेट कर देवे के चाहीं।", + "resettokens-text": "जौन टोकन राउर खाता से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करेला, आप इनहन के एहिजा रीसेट कर सकत बानी।\n\nयदि रउआँ एकरा के गलती से केहू के देखा देले बानी या फिर राउर खाता हैक हो गइल बा त एकरा के रीसेट कर देवे के चाहीं।", "resettokens-no-tokens": "रीसेट करे खातिर कउनो टोकन नइखे।", "resettokens-tokens": "टोकन:", - "resettokens-token-label": "$1 (वर्तमान मूल्य: $2)", - "resettokens-watchlist-token": "[[Special:Watchlist|आपके ध्यानसूची के पन्नन में बदलावसभ]] के वेब फ़ीड (Atom/RSS) हेतु टोकन", + "resettokens-token-label": "$1 (वर्तमान वैल्यू: $2)", + "resettokens-watchlist-token": "[[Special:Watchlist|आपके धियानसूची के पन्नन में बदलावसभ]] के वेब फीड (एटम/आरऍसऍस) खातिर टोकन", "resettokens-done": "टोकन रीसेट हो चुकल बा।", "resettokens-resetbutton": "चुनल गइल टोकन रीसेट करीं", "bold_sample": "मोट अच्छर में", @@ -601,7 +612,7 @@ "media_tip": "फाइल कड़ी", "sig_tip": "समय मोहर की संघे राउर दस्खत", "hr_tip": "पड़ी लकीर (कम प्रयोग करीं)", - "summary": "छोट विवरण (सारांश):", + "summary": "सारांश:", "subject": "बिसय:", "minoredit": "छोट परिवर्तन", "watchthis": "धियानसूची में डालीं", @@ -609,22 +620,23 @@ "savechanges": "बदलाव सहेजीं", "publishpage": "पन्ना प्रकाशित करीं", "publishchanges": "बदलाव प्रकाशित करीं", - "preview": "पूर्वावलोकन", + "preview": "झलक", "showpreview": "झलक देखीं", "showdiff": "बदलाव देखीं", - "blankarticle": "चेतावनी: आप एगो खाली पन्ना के बनावे जा रहल बानी।\nयदि आप \"{{int:savearticle}}\" के फेर से दबायेब त पन्ना बिना कउनो सामग्री के बन जाई।", - "anoneditwarning": "चेतावनी: रउआ आपन खाता में प्रवेश नइखीं कइले। अगर रउआ कौनों बदलाव करत बानी त राउर आईपी पता दर्ज होई। अगर रउआ [$1 लॉग इन] या [$2 नया खाता बनाइब] त, अउरी सुबिधा सब की संघे राउर संपादन के श्रेय भी राउर सदस्य-नाँव से जुड़ जाई!", - "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"", - "missingsummary": "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।", - "selfredirect": "चेतावनी: आप खुद के इ पन्ना पर पुनः निर्देशित कर रहल बानी।\nआप अनुप्रेषित खातिर गलत लक्ष्य निर्दिष्ट हो सकत बानी, या आप के द्वारा गलत पन्ना के संपादन हो सकत बा।\nआप यदि फेर से \"{{int:savearticle}}\" क्लिक करत बानी त, पुन: निर्देषण ओइसहु बनावल जाई।", - "missingcommenttext": "कृपया निचे एगो टिप्पणी करीं।", + "blankarticle": "चेतावनी: आप एगो खाली पन्ना बनावे जा रहल बानी।\nयदि आप \"{{int:savearticle}}\" के फेर से दबायेब त पन्ना बिना कउनो सामग्री के बन जाई।", + "anoneditwarning": "चेतावनी: रउआँ आपन खाता में प्रवेश नइखीं कइले। अगर रउआँ कौनों बदलाव करब त राउर आईपी पता सभके लउकी। अगर रउआ [$1 खाता में प्रवेश करब] या [$2 नया खाता बनाइब] त, अउरी सुबिधा सब की संघे राउर संपादन के श्रेय भी राउर प्रयोगकर्तानाँव के मिली!", + "anonpreviewwarning": "''रउआँ खाता में प्रवेश नइखीं भइल। सहेजब तब ए पन्ना के संपादन इतिहास में राउर आईपी पता दर्ज हो जाई।\"", + "missingsummary": "'''याद दियावल जात बा:'''रउआँ एगो संपादन सारांश नइखीं दिहले। अगर फिर \"{{int:savearticle}}\" पर क्लिक करब, त राउर संपादन एकरे बिना सहेजा जाई।", + "selfredirect": "चेतावनी: आप ई पन्ना के खुदे एही पर अनुप्रेषण क रहल बानी।\nया त आप अनुप्रेषण खातिर गलत लक्ष्य देत बानी, या आप गलत पन्ना के संपादन करत बानी।\nएक बेर अउरी \"{{int:savearticle}}\" क्लिक करब त, ओइसहूँ ई अनुप्रेषण बना दिहल जाई।", + "missingcommenttext": "नीचे एगो टिप्पणी भरीं।", "missingcommentheader": "'''याद दियावल जात बा:''' रउआँ एह कमेंट खातिर कौनों बिसय नइखीं दिहले। अगर आप \"{{int:savearticle}}\" पर क्लिक करब तब राउर संपादन एकरे बिना सहेजा जाई।", - "summary-preview": "सारांश पूर्वावलोकन:", + "summary-preview": "सारांश झलक:", "subject-preview": "बिसय के झलक:", - "previewerrortext": "जब आप आपन बदलाव के पुर्वावलोकन देखे खातिर प्रयास कइनी ह तवने घड़ी एगो त्रुटी उत्पन्न हो गइल बा।", - "blockedtitle": "निष्क्रिय प्रयोगकर्ता", + "previewerrortext": "राउर बदलाव के झलक देखावे के कोसिस के समय कुछ गड़बड़ी हो गइल।", + "blockedtitle": "प्रयोगकर्ता रोक दिहल गइल बा", "blockedtext": "'''राउर सदस्यनाम अथवा आइ॰पी पता अवरोधित कर दिहल गईल बा ।'''\n\nअवरोध $1 द्वारा करल गईल रहल।\nअवरोध के कारण बा ''$2''\n\n* अवरोध के आरंभ: $8\n* अवरोध के समाप्ति: $6\n* अवरोधित इकाई: $7\n\nइ अवरोध के बारे में चर्चा करे खातिर रउआ $1 या केहु अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कर सकत बानी।\nअगर रउआ [[Special:Preferences|आपन वरीयता]] में वैद्य ई-मेल पता प्रविष्ट कइले होखब तबे 'इ प्रयोक्ता के ई-मेल भेजीं' वाला सुविधा के प्रयोग कर सकत बानी अउर रउआ एकर प्रयोग करे से ना रोकल गईल होखे।\nराउर हाल के आइ॰पी पता $3 ह अउर अवरोध क्रमांक #$5 ह।\nआपन कउनो भी प्रश्न में कृपया इ सब जानकारी भी शामिल करब।", "autoblockedtext": "राउर आइ॰पी पता अपने आप अवरुद्ध हो गईल बा काहे कि एकर प्रयोग केहु अन्य सदस्य द्वारा होत रहल,\nजे $1 द्वारा अवरोधित करल गईल रहलन। \nअवरोध करे के कारण बा:\n\n:''$2''\n\n* अवरोध प्रारंभ: $8\n* अवरोध समाप्ति: $6\n* अवरोधित सदस्य: $7\n\nअवरोध के चर्चा करे खातिर रउआ $1 या केहु अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कर सकत बानी।\n\nकृपया ध्यान रहे कि यदि रउआ \"इ सदस्य के ई-मेल भेजीं\" वाला सुविधा के प्रयोग करे के चाहत बानी त राउर [[Special:Preferences|वरीयता]] में वैद्य ई-मेल पता होखे के चाहीं अउर एकर प्रयोग रउआ खातिर अवरोधित ना भईल होखे।\n\nराउर हाल के आइ॰पी पता $3 ह अउर अवरोध क्रमांक #$5 ह।\nआपन कउनो भी प्रश्न में कृपया इ सब जानकारी शामिल करब।", + "systemblockedtext": "राउर खाता या आइपी पता के मीडियाविकि द्वारा ऑटोमेटिक रूप से रोक दिहल गइल बा।\nएकरा खातिर कारण दिहल गइल बा:\n\n\n:$2\n\n* रोक के सुरुआत: $8\n* रोक समाप्त होखी: $6\n* रोक लगावे वाला: $7\n\nराउर वर्तमान आइपी पता $3 बा।\nअगर कौनों सवाल करीं तब ऊपर बतावल सगरी जानकारी देईं।", "blockednoreason": "कउनो कारण उल्लेखित नईखे", "whitelistedittext": "रउआ पन्ना सम्पादन करे खातिर $1 करे के पड़ी।", "confirmedittext": "संपादन करे से पहिले आपके अापना ई-मेल पता प्रमाणित करावल जरुरी बा।\nकृपया आपन [[Special:Preferences|राउर पसन्द]] में जाके अापन ई-मेल पता दिहीं अउर उके प्रमाणित करीं।", @@ -637,14 +649,14 @@ "accmailtext": "[[User talk:$1|$1]] खातिर एगो यंत्र जनित गुप्तशब्द $2 के भेज दिहल गइल बा। खाता में प्रवेश कइला के बाद इ '''[[Special:ChangePassword|गुप्तशब्द बदल लीं]]'' वाला पन्ना पर बदलल जा सकत बा।", "newarticle": "(नया)", "newarticletext": "रउआ एगो अइसन कड़ी के पन्ना के अनुसरण कइले बानी जवन अभी तक उपलब्ध नइखे।\nपन्ना बनावे खातिर, नीचे के बाकस में टाइप करे के शुरु करीं (ज्यादा जानकारी खातिर देखीं [$1 मदद पन्ना])।\nयदि रउआ अहिजा गलती से आ गइल बानी त, आपन ब्राउजर के '''बैक''' (Back) बटन दबाईं!", - "anontalkpagetext": "----''इ वार्ता पन्ना उन अनाम सदस्यन खातिर बा जिन्हन के या त खाता नइखे खोलल गइल या खाता के प्रयोग नइखन करत।\nएहि खातिर उन्हन के पहिचान खातिर हमनी के उनकर आइ॰पी पता के प्रयोग करे के पड़ेला।\nआइ॰पी पता कई सदस्यन खातिर साझा हो सकत बा।\nयदि आप एगो अनाम सदस्य बानी अउर आपके लागत बा कि आपके बारे में अप्रासंगिक टीका टिप्पणी करल गइल बा त कृपया [[Special:CreateAccount|सदस्यता लिहीं]] या [[Special:UserLogin|सत्रारंभ करीं]] ताकि अन्य अनाम सदस्यन में से आपके अलग से पहिचानल जा सके।''", + "anontalkpagetext": "----\nई अइसन बेनाम प्रयोगकर्ता के बातचीत पन्ना बा जे या त अभी खाता नइखे बनवले या खाता के इस्तेमाल नइखे करत।\nएही कारन ओह ब्यक्ति के पहिचान खातिर ई अंक वाला आइपी पता इस्तेमाल करे के परत बा।\nअइसन आइपी पता कई लोग के सझिया भी हो सकत बा।\nअगर आप बेनाम प्रयोगकर्ता बानी आ ई बुझाता कि कौनों बिना बात के कमेंट आपके ओर बा, [[Special:CreateAccount|खाता बनाईं]] या [[Special:UserLogin|लॉग इन]] करीं जेवना से भबिस्य में केहू रउवाँ पर केहू दूसर बेनाम प्रयोगकर्ता होखे के भरम न होखे।", "noarticletext": "ए पन्ना मे अभी कौनों सामग्री नइखे।\nरउआँ दुसरा पन्ना में [[Special:Search/{{PAGENAME}}|ए टाइटिल के खोज]] कर सकत बानीं,\nया [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} या संबंधित लॉग खोज सकत बानी], बाकी रउआ के ई पन्ना बनावे के परमीशन नइखे।", "noarticletext-nopermission": "ए पन्ना मे अभी कौनों सामग्री नइखे।\nरउआँ दुसरा पन्ना में [[Special:Search/{{PAGENAME}}|ए टाइटिल के खोज]] कर सकत बानीं,\nया [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} या संबंधित लॉग खोज सकत बानी], बाकी रउआ के ई पन्ना बनावे के परमीशन नइखे।", "missing-revision": "\"{{FULLPAGENAME}}\" पन्ना के संशोधन #$1 उपलब्ध नइखे।\n\nसाधारण रुप से इ एगो हटावल गइल पन्ना के पुरान लिंक पर क्लिक कइला से होखेला।\nअधिक जानकारी खातिर आप [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे के लॉग] देख सकत बानी।", "userpage-userdoesnotexist": "सदस्य खाता \"$1\" पंजीकृत नइखे।\nकृपया जाँच लीं कि आप इ पन्ना संपादित अथवा निर्मित करे के चाहत बानी कि ना।", "userpage-userdoesnotexist-view": "सदस्य खाता \"$1\" पंजीकृत नईखे भईल।", "blocked-notice-logextract": "ई प्रयोगकर्ता के ई समय निष्क्रीय कर दिहल गईल बा।\nनविनतम नष्ट लौग प्रविष्टी उद्धरण खातिर निचे दिहल बा:", - "clearyourcache": "'''ध्यान दिं:''' पन्ना सुरक्षित कइला के बाद बदलाव देखे खातिर आपके आपन ब्राउज़र के कैश खाली करे के पड़ सकत बा।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबाते समय ''Shift'' (शिफ़्ट) दबा के रखीं, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबाईं (मैक पर ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबाईं (मैक पर ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाके ''Refresh'' (रिफ़्रेश) करीं या ''Ctrl-F5'' (कंट्रोल-F5) दबाईं\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → पसन्द) में कैश साफ़ करीं", + "clearyourcache": "नोट: सहेजे के बाद, बदलाव देखे खातिर आपके अपने ब्राउजर के कैशे खाली करे के पड़ सकत बा।\n* फायरफॉक्स / सफारी:शिफ्ट दबा के रीलोड पर क्लिक करीं, या फिर Ctrl-F5 या Ctrl-R दबाईं (मैक पर ⌘-R)\n* गूगल क्रोम: Ctrl-Shift-R दबाईं (मैक पर ⌘-Shift-R)\n* इंटरनेट एक्स्प्लोरर: Ctrl दबा के Refresh पर क्लिक करीं, या Ctrl-F5 दबईं\n* ओपेरा: Menu → Settings में जाईं (मैक में Opera → Preferences) आ एकरे बाद Privacy & security → Clear browsing data → Cached images and files क्लिक करीं।", "usercssyoucanpreview": "टिप: आपन नया CSS के टेस्ट करे खातिर सहेजे से पहिले \"{{int:showpreview}}\" बटन के प्रयोग करीं।", "userjsyoucanpreview": "टिप: आपन नया जावास्क्रिप्ट के टेस्ट करे खातिर सहेजे से पहिले \"{{int:showpreview}}\" बटन के प्रयोग करीं।", "usercsspreview": "याद रहे की आप अपनी सदस्य CSS के खाली नमूना भर देखत बानी।\nई अबहिन ले सहेजल ना गइल बाटे।", @@ -658,7 +670,7 @@ "continue-editing": "संपादन क्षेत्र में जाईं", "previewconflict": "ई नमूना ई देखावत बा की अगर रउआँ ए संपादन बक्सा में मौजूद पाठ के सहेजब त ऊ कइसन देखाई पड़ी।", "session_fail_preview": "माफ करीं! एह सत्र के आँकड़ा के गायब हो गइला के कारण आपके संपादन के प्रॉसेस करे में हमनी के असमर्थ बानी जा।\nहो सकेला आप लॉगआउट हो गइल होखीं।\nजाँच लेईं कि आप अभी लॉगिन बानी आ दुबारा कोसिस करीं।\nअगर तबो काम ना होखे तब [[Special:UserLogout|लॉगआउट कइके]] आ दोबारा लॉग इन कइ के कोसिस करी, आ जाँच करीं कि आपके ब्राउजर एह साइट से कुकीज सभ के मंजूर करत बा।", - "session_fail_preview_html": "माफ करीं! सत्र आँकड़ा के गायब होखला की कारन आपके संपादन सहेजल नइखे जा सकत।\n\nचूँकि, {{SITENAME}} में मूल HTML सक्षम कइल बाटे, जावास्क्रिप्ट हमला से बचाव की खातिर नमूना देखावे के छिपावल गइल बा।\n\nअगर ई एगो वैध संपादन बाटे तब एक बेर फिर से कोसिस करीं।\nअगर तबो पर काम नइखे हो पावत त [[Special:UserLogout|लॉग आउट करीं]] आ दुबारा लॉगिन क के कोसिस करीं।", + "session_fail_preview_html": "माफ करीं! सत्र आँकड़ा के गायब होखला की कारन आपके संपादन सहेजल नइखे जा सकत।\n\nचूँकि, {{SITENAME}} में मूल HTML सक्षम कइल बाटे, जावास्क्रिप्ट हमला से बचाव खातिर झलक छिपावल गइल बा।\n\nअगर ई एगो वैध संपादन बाटे तब एक बेर फिर से कोसिस करीं।\nअगर तबो पर काम नइखे हो पावत त [[Special:UserLogout|लॉग आउट करीं]] आ दुबारा लॉगिन क के कोसिस करीं, आ ईहो जाँच लेईं की आपके ब्राउजर एह साइट से कुकी सभ के एलाऊ करत बा कि ना।", "token_suffix_mismatch": "राउर संपादन रिजेक्ट कइल जात बा काहें से की राउर क्लायंट संपादन टोकन में विराम चीन्हा सब से गड़बड़ क दिहले बा।\nपन्ना के पाठ के तहस-नहस होखे से बचावे खाती ई संपादन रिजेक्ट कइल गइल बा।\nकबो-कबो अइसन एहू दसा में हो सकेला जब आप खराबी-युक्त वेबआधारित बेनाम प्रॉक्सी सर्वर के इस्तेमाल करत होखीं।", "edit_form_incomplete": "संपादन के कुछ हिस्सा सर्वर ले ना पहुँच पावल ह; दोहरा के चेक करीं की राउर संपादन बदलल न होखे आ एक बेर फिर से सहेजे के कोसिस करीं।", "editing": "$1 संपादन", @@ -676,7 +688,7 @@ "copyrightwarning2": "ई नोट कर लीं कि {{SITENAME}} पर सगरी योगदान के दुसरा योगदानकर्ता लोगन द्वारा संपादित कइल जा सकेला, बदलल या हटावल जा सकेला।\nअगर आप ई नइखीं चाहत की राउर लिखल चीज के केहू भी बे-मोहछोह के संपादित क दे, तब ए के इहाँ मत डालीं।
\nरउआँ इहो वादा करत बानी की आप ई खुद लिखले बानी या फिर पब्लिक पहुँच में मौजूद या अइसने कौनों फ्री स्रोत से नकल कइले बानी (ढेर जानकारी खातिर $1 देखीं)।\nबिना परमीशन के कॉपीराइट वाली चीज इहाँ कब्बो मत डालीं!", "editpage-cannot-use-custom-model": "ए पन्ना के सामग्री के मॉडल के ना बदलल जा सकत बा।", "longpageerror": "खराबी: आप जवन पाठ लिख के दिहले बानी ऊ {{PLURAL:$1|एक किलोबाइट|$1 किलोबाइट्स}} के बाटे, जेवन अधिकतम सीमा {{PLURAL:$2|एक किलोबाइट|$2 किलोबाइट्स}} से ढेर बा।\nई सहेजल ना जा सकेला।", - "readonlywarning": "चेतावनी: डेटाबेस ए समय मरम्मत खातिर लॉक कइल गइल बा, आ एही कारण आप तुरंते एही समय आपन सम्पादन ना सहेज पाइब।\nरउआँ अपनी पाठ (text) के कौनों पाठ फाइल (text file) में बाद खातिर सहेज के रख लीं।\n\nजे एडमिनिस्ट्रेटर एकरा के लॉक कइले बा ऊ नीचे लिखल कारण दिहले बा: $1", + "readonlywarning": "चेतावनी: एह समय मरम्मत खातिर डेटाबेस लॉक कइल गइल बा, एही कारन आप तुरंते एही समय आपन संपादन ना सहेज पाइब।\nरउआँ अपनी पाठ (टेक्स्ट) के कौनों पाठ फाइल (टेक्स्ट फाइल) में बाद खातिर सहेज के रख लीं।\n\nजे सिस्टम प्रबंधक एकरा के लॉक कइले बा ऊ नीचे लिखल कारण दिहले बा: $1", "protectedpagewarning": "चेतावनी: ई पन्ना सुरक्षित कइल गइल बा जेवना से कि एकरा के खाली प्रबंधक (Admin) विशेषाधिकार वाला सदस्य लोग संपादित क सकत बा।\nप्रसंग बूझे खातिर सबसे नया लॉग एंट्री नीचे दिहल जात बा:", "semiprotectedpagewarning": "नोट: ई पन्ना सुरक्षित कइल गइल बा कि एकरा के खाली रजिस्टर्ड सदस्य लोग संपादित क सकत बा।\nसभसे नया लॉग एंट्री नीचे प्रसंग बतावे खातिर दिहल जात बा:", "cascadeprotectedwarning": "चेतावनी: ई पन्ना सुरक्षित क दिहल गइल बा कि एकरा के खाली प्रबंधक (Admin) विशेषाधिकार वाला सदस्य लोग संपादित क सकेला काहें से की ई नीचे दिहल बिस्तारित(कैस्केडिंग)-सुरक्षा वाला {{PLURAL:$1|पन्ना|पन्नवन}} में समाइल बाटे:", @@ -855,22 +867,22 @@ "history-title": "''$1'' के संशोधन इतिहास", "difference-title": "\"$1\" की अवतरण में अंतर", "lineno": "लाइन $1:", - "compareselectedversions": "चुनल गईल संशोधन में अन्तर देखीं", - "showhideselectedversions": "चुनल गईल संशोधन दिखाईं/छुपाईं", + "compareselectedversions": "चुनल गइल संशोधन में अंतर देखीं", + "showhideselectedversions": "चुनल गइल संशोधन के दृश्यता बदलीं", "editundo": "वापस लीं", - "diff-multi-sameuser": "(एही सदस्य द्वारा कइल {{PLURAL:$1|बीच के एगो बदलाव|$1 बीच के बदलाव सब}} नइखे देखावल जात)", + "diff-multi-sameuser": "(एही सदस्य द्वारा कइल {{PLURAL:$1|बीच के एगो बदलाव|बीच के $1 बदलाव}} नइखे देखावल जात)", "searchresults": "खोज परिणाम", "searchresults-title": "$1 खातिर खोज परिणाम", - "titlematches": "पन्ना के शिर्षक मिलत बा।", - "textmatches": "पन्ना के पाठ्य मिलत बा", - "notextmatches": "पन्ना के पाठ्य नईखे मिलत", + "titlematches": "पन्ना टाइटिल मिलान", + "textmatches": "पन्ना पाठ मिलान", + "notextmatches": "कौनों पन्ना पाठ मिलान नइखे", "prevn": "पछिला {{PLURAL:$1|$1}}", "nextn": "अगिला {{PLURAL:$1|$1}}", "prev-page": "पिछलका पन्ना", "next-page": "अगला पन्ना", "prevn-title": "पिछला $1 {{PLURAL:$1|परिणाम}}", "nextn-title": "अगिला $1 {{PLURAL:$1|परिणाम}}", - "shown-title": "एक पन्ना पर $1 {{PLURAL:$1|परिणाम}} देखाईं", + "shown-title": "प्रति पन्ना $1 {{PLURAL:$1|परिणाम}} देखाईं", "viewprevnext": "देखीं ($1 {{int:pipe-separator}} $2) ($3)", "searchmenu-exists": "'''इ विकि पर ''[[:$1]]'' नाम से एगो पन्ना उपलब्ध बा'''", "searchmenu-new": " ए विकि पर \"[[:$1]]\" नाँव के पन्ना बनाईं ! {{PLURAL:$2|0=|अपनी खोज से मिलल पन्ना भी देखीं|खोज के परिणाम भी देखीं।}}", @@ -909,8 +921,8 @@ "skin-preview": "पूर्वावलोकन", "datedefault": "वरीयता नईखे", "prefs-user-pages": "सदस्य पन्ना", - "prefs-personal": "सदस्य प्रोफाईल", - "prefs-rc": "तुरंत भइल परिवर्तन", + "prefs-personal": "प्रयोगकर्ता प्रोफाइल", + "prefs-rc": "हाल के बदलाव", "prefs-watchlist": "धियानसूची", "prefs-editwatchlist": "धियानसूची संपादन", "prefs-editwatchlist-label": "अपनी धियानसूची के चीज संपादित करीं:", @@ -922,19 +934,17 @@ "prefs-watchlist-edits": "बिस्तारित धियानसूची में देखावे खातिर अधिकतम बदलाव संख्या:", "prefs-watchlist-edits-max": "अधिकतम संख्या:1000", "prefs-watchlist-token": "धियानसूची टोकन:", - "prefs-misc": "अउरी कुल", - "prefs-resetpass": "पासवर्ड बदलीं", + "prefs-misc": "बिबिध", + "prefs-resetpass": "गुप्तशब्द बदलीं", "prefs-changeemail": "ईमेल पता बदलीं", "prefs-setemail": "ईमेल पता सेट करीं", "prefs-email": "ईमेल बिकल्प", "prefs-rendering": "रंगरूप", - "saveprefs": "सुरक्षित करीं", + "saveprefs": "सहेजीं", "restoreprefs": "सगरी डिफाल्ट सेटिंग पहिले जइसन करीं (सगरी खंड में)", "prefs-editing": "संपादन", - "rows": "रो कुल:", - "columns": "कालम कुल:", "searchresultshead": "खोज", - "stub-threshold-disabled": "निरस्त", + "stub-threshold-disabled": "अक्षम", "recentchangesdays": "हाल में भइल परिवर्तन में देखावे खातिर दिन:", "recentchangesdays-max": "अधिकतम $1{{PLURAL:$1|दिन}}", "recentchangescount": "डिफाल्ट में देखावे खातिर संपादन संख्या:", @@ -967,6 +977,7 @@ "prefs-reset-intro": "रउआँ आपन पसंद बदल के डिफाल्ट करे खातिर ए पन्ना के इस्तेमाल नइखीं कर सकत।\n\nई फिर से वापस ना हो पाई।", "prefs-emailconfirm-label": "ईमेल जाँच:", "youremail": "ईमेल:", + "username": "{{GENDER:$1|प्रयोगकर्तानाँव}}:", "prefs-registration": "रजिस्ट्रेशन के समय:", "yourrealname": "असली नाम", "yourlanguage": "भाषा:", @@ -994,6 +1005,12 @@ "prefs-tokenwatchlist": "टोकन", "prefs-diffs": "अंतर", "prefs-help-prefershttps": "राउर ई पसंद के सेटिंग अगिला बेर लॉग इन कइले पर लागू होई।", + "userrights": "प्रयोगकर्ता अधिकार मैनेजमेंट", + "userrights-lookup-user": "प्रयोगकर्ता चुनीं", + "userrights-user-editname": "प्रयोगकर्ता नाँव लिखीं:", + "editusergroup": "प्रयोगकर्ता मंडली लोड करीं", + "editinguser": "अधिकार बदलाव {{GENDER:$1|प्रयोगकर्ता}}[[User:$1|$1]] $2", + "userrights-reason": "कारण:", "group": "मंडली (ग्रुप):", "group-user": "सदस्य", "group-autoconfirmed": "खुद परीक्षित सदस्य", @@ -1321,7 +1338,7 @@ "listusers-desc": "घटत क्रम से सरियाईं", "usereditcount": "$1 {{PLURAL:$1|संपादन|संपादन सभ}}", "newpages": "नया पन्ना", - "newpages-username": "सदस्यनाँव:", + "newpages-username": "प्रयोगकर्तानाँव:", "ancientpages": "पुरान पन्ना", "move": "स्थानांतरण", "movethispage": "एह पन्ना के स्थानांतरण करीं", @@ -1352,6 +1369,7 @@ "trackingcategories-msg": "निगरानी श्रेणी", "trackingcategories-name": "संदेस नाँव", "emailuser": "ई प्रयोगकर्ता के ईमेल करीं", + "emailusername": "प्रयोगकर्तानाँव:", "watchlist": "धियानसूची", "mywatchlist": "धियानसूची", "watch": "धियानसूची में डालीं", @@ -1565,7 +1583,6 @@ "logentry-newusers-create": "खाता $1 {{GENDER:$2|बनावल गइल}}", "revdelete-summary": "सारांश संपादन", "searchsuggest-search": "खोजीं", - "api-error-nomodule": "भितरी खराबी:कउनो अपलोड मॉड्युल सेट नइखे", "expandtemplates": "टेम्पलेट बिस्तार", "mediastatistics": "मीडिया सांख्यिकी" } diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 25ac4029d0..79558c173a 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -31,7 +31,8 @@ "Matma Rex", "আজিজ", "Kayser Ahmad", - "NahidSultan" + "NahidSultan", + "Elias Ahmmad" ] }, "tog-underline": "সংযোগগুলির নিচে দাগ দেখানো হোক:", @@ -198,6 +199,7 @@ "searcharticle": "চলো", "history": "পাতার ইতিহাস", "history_short": "ইতিহাস", + "history_small": "ইতিহাস", "updatedmarker": "আমার শেষ পরিদর্শনের পর থেকে হালনাগাদকৃত", "printableversion": "ছাপার যোগ্য সংস্করণ", "permalink": "স্থায়ী সংযোগ", @@ -1306,14 +1308,29 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (আরও দেখুন [[Special:NewPages|নতুন পাতার তালিকা]])", "recentchanges-legend-plusminus": "(''±১২৩'')", "recentchanges-submit": "দেখাও", + "rcfilters-activefilters": "সক্রিয় ফিল্টার", + "rcfilters-restore-default-filters": "ডিফল্ট ফিল্টার পুনরুদ্ধার", + "rcfilters-clear-all-filters": "সমস্ত ফিল্টার অপসারণ", + "rcfilters-search-placeholder": "ফিল্টারে সাম্প্রতিক পরিবর্তনসমূহ (ব্রাউজ বা টাইপ করা শুরু করুন)", + "rcfilters-invalid-filter": "অকার্যকর ফিল্টার", + "rcfilters-empty-filter": "কোনো সক্রিয় ফিল্টার নেই। সমস্ত অবদান দেখানো হয়েছে।", + "rcfilters-filterlist-title": "ছাকনী", + "rcfilters-filterlist-noresults": "কোনও ফিল্টার পাওয়া যায়নি", + "rcfilters-filtergroup-registration": "ব্যবহারকারী রেজিস্ট্রেশন", + "rcfilters-filter-registered-label": "নিবন্ধিত", + "rcfilters-filter-registered-description": "লগ-ইন সম্পাদকবৃন্দ।", + "rcfilters-filter-unregistered-label": "অনিবন্ধিত", + "rcfilters-filtergroup-authorship": "কৃতি সম্পাদনা", "rcfilters-filter-editsbyself-label": "আপনার নিজস্ব সম্পাদনা", "rcfilters-filter-editsbyself-description": "আপনার দ্বারা সম্পাদনা।", "rcfilters-filter-editsbyother-label": "অন্যদের দ্বারা সম্পাদনা", "rcfilters-filter-editsbyother-description": "অন্য ব্যবহারকারীদের দ্বারা করা সম্পাদনা (আপনার না)।", - "rcfilters-filtergroup-userExpLevel": "ব্যবহারকারীর অভিজ্ঞতা স্তর", + "rcfilters-filtergroup-userExpLevel": "অভিজ্ঞতার স্তর (শুধু মাত্র নিবন্ধিত ব্যবহারকারীর জন্য)", "rcfilters-filter-userExpLevel-newcomer-label": "নতুন আগত", "rcfilters-filter-userExpLevel-learner-label": "শিক্ষার্থী", "rcfilters-filter-userExpLevel-experienced-label": "অভিজ্ঞ ব্যবহারকারী", + "rcfilters-filter-bots-label": "বট", + "rcfilters-filter-pageedits-label": "পাতার সম্পাদনা", "rcnotefrom": "$2টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ $1টি দেখানো হয়েছে)।", "rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও", "rcshowhideminor": "অনুল্লেখ্য পরিবর্তনগুলো $1", @@ -1801,8 +1818,10 @@ "apisandbox-results": "ফলাফল", "apisandbox-sending-request": "API অনুরোধ পাঠানো হচ্ছে...", "apisandbox-loading-results": "API ফলাফল গ্রহণ করা হচ্ছে...", - "apisandbox-request-params-json": "JSON প্যারামিটার:", + "apisandbox-request-selectformat-label": "অনুরোধ ডেটা দেখান যেভাবে:", + "apisandbox-request-format-url-label": "URL কোয়েরি স্ট্রিং", "apisandbox-request-url-label": "অনুরোধের URL:", + "apisandbox-request-json-label": "অনুরোধ JSON:", "apisandbox-request-time": "অনুরোধের সময়: {{PLURAL:$1|$1 মি.সে.}}", "apisandbox-results-fixtoken": "টোকেন সংশোধন ও পুনরায় জমা", "apisandbox-alert-page": "এই পাতার ঘরগুলো বৈধ নয়।", @@ -1937,7 +1956,7 @@ "emailccsubject": "আপনার বার্তার অনুলিপি $1-কে: $2", "emailsent": "ই-মেইল প্রেরণ করা হয়েছে", "emailsenttext": "আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।", - "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailuser}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে {{GENDER:$2|$2}}-এর নিকট {{GENDER:$1|পাঠানো হয়েছে}}। {{GENDER:$2|আপনার}} উত্তরের ইমেইলটি সরাসরি {{GENDER:$1|মূল প্রেরকের}} কাছে পাঠানো হবে, সেই সাথে {{GENDER:$2|আপনার}} ইমেল ঠিকানা {{GENDER:$1|তাঁর}} কাছে প্রকাশ করা হবে।", + "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailuser}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে {{GENDER:$2|$2}}-এর নিকট {{GENDER:$1|পাঠানো হয়েছে}}। যদি {{GENDER:$2|আপনি}} এই ইমেইলটির উত্তর দেন, তাহলে {{GENDER:$2|আপনার}} উত্তরের ইমেইলটি সরাসরি {{GENDER:$1|মূল প্রেরকের}} কাছে পাঠানো হবে, সেই সাথে {{GENDER:$2|আপনার}} ইমেল ঠিকানা {{GENDER:$1|তাঁর}} কাছে প্রকাশ করা হবে।", "usermessage-summary": "বাদবাকি সিস্টেম বার্তা", "usermessage-editor": "সিস্টেম ম্যাসেঞ্জার", "usermessage-template": "MediaWiki:ব্যবহারকারী বার্তা", @@ -3540,6 +3559,7 @@ "pagelang-select-lang": "ভাষা নির্বাচন করুন", "pagelang-reason": "কারণ", "pagelang-submit": "জমা দাও", + "pagelang-db-failed": "ডাটাবেস পৃষ্ঠার ভাষা পরিবর্তন করতে ব্যর্থ হয়েছে।", "right-pagelang": "পাতার ভাষা পরিবর্তন করুন", "action-pagelang": "পাতার ভাষা পরিবর্তন করুন", "log-name-pagelang": "ভাষা পরিবর্তন লগ", @@ -3718,7 +3738,7 @@ "usercssispublic": "অনুগ্রহ করে লক্ষ্য করুন: সিএসএসের উপপাতাগুলিতে গোপনীয় তথ্য থাকা উচিত নয় যেহেতু অন্যান্য ব্যবহারকারীও এগুলি দেখতে পান।", "restrictionsfield-badip": "আইপি ঠিকানা অথবা পরিসীমা অবৈধ: $1", "restrictionsfield-label": "অনুমোদিত আইপি পরিসীমা:", - "restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে
0.0.0.0/0
::/0
ব্যবহার করুন", + "restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে,
0.0.0.0/0::/0
ব্যবহার করুন", "revid": "সংশোধন $1", "pageid": "পাতার আইডি $1" } diff --git a/languages/i18n/bqi.json b/languages/i18n/bqi.json index a0d4c0572e..e4c0ae10e3 100644 --- a/languages/i18n/bqi.json +++ b/languages/i18n/bqi.json @@ -104,6 +104,11 @@ "may-date": "مإی $1", "june-date": "جۈأن $1", "july-date": "جۈلای $1", + "august-date": "آگوست $1", + "september-date": "سپتامر $1", + "october-date": "اوکتوبر $1", + "november-date": "نوڤامر $1", + "december-date": "دسامر $1", "period-am": "دم سوڤ", "period-pm": "پسين", "pagecategories": "{{PLURAL:$1|دسته|دسته ها}}", @@ -121,6 +126,7 @@ "category-file-count-limited": "ذیل الذکر {{PLURAL:$1|فایل است|$1 فایلها هستند}} درآن دسته جریانی.", "listingcontinuesabbrev": "دنباله", "about": "درباره", + "article": "بلگه آ مینونه دار", "newwindow": "(پنجره تازه واز کن)", "cancel": "لغو", "moredotdotdot": "بيشدر", @@ -136,6 +142,7 @@ "qbmyoptions": "بألگإ آ مو", "faq": "اف ای کیو", "faqpage": "Project:اف ای کیو", + "actions": "کونئشتکاریا", "namespaces": "نوم ڤأرگأ آ", "variants": "آلشدگأرا", "navigation-heading": "نوم جاگأ ناڤگردي", @@ -149,6 +156,7 @@ "searcharticle": "برو", "history": "گزارش صفحه", "history_short": "گزارش تاریخی", + "history_small": "ڤیرگار", "printableversion": "نوسقئ پئلا ڤابیدٙئنی", "permalink": "لینک دایمی", "print": "چاپ گرهڌن", @@ -188,6 +196,7 @@ "jumpto": "پریدن به:", "jumptonavigation": "راندن یا هدایت کردن", "jumptosearch": "جستن", + "pool-errorunknown": "خطا نادیار", "aboutsite": "راجوڤ بئ {{SITENAME}}", "aboutpage": "Project:راجڤ بئ", "copyright": "محتوا باای شماره قابل دسترسیه\n $1.", @@ -224,6 +233,7 @@ "toc": "محتواها", "showtoc": "نمایش", "hidetoc": "قایم", + "collapsible-collapse": "جأم كردن", "collapsible-expand": "گأپ کلۈن کردن", "confirmable-yes": "هرإ", "confirmable-no": "نأ", @@ -242,10 +252,13 @@ "nstab-special": "بألگه ڤیجه", "nstab-project": "صفحه پروژه", "nstab-image": "فایل", + "nstab-mediawiki": "پیغوم", "nstab-template": "قالب یا الگو", + "nstab-help": "بألگإ هومیاری", "nstab-category": "دسته", "mainpage-nstab": "سأرآسوٙنە", "error": "خطا", + "databaseerror-query": "جوستکاری: $1", "badtitle": "عنوان بد", "badtitletext": "عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرسته\nو ممکنه دارای یک یا چند کاراکتر بوه که در عنوان مربوط نوا زش استفاده کنین", "viewsource": "مشاهده منبع", diff --git a/languages/i18n/br.json b/languages/i18n/br.json index 5e61cbce9d..cefa4a6646 100644 --- a/languages/i18n/br.json +++ b/languages/i18n/br.json @@ -1134,20 +1134,30 @@ "right-override-export-depth": "Ezporzhiañ ar pajennoù en ur lakaat e-barzh ar pajennoù liammet betek un donder a 5 live", "right-sendemail": "Kas ur postel d'an implijerien all", "grant-group-email": "Kas ur postel", + "grant-group-other": "Obererezh liesseurt", "grant-blockusers": "Stankañ ha distankañ implijerien", "grant-createaccount": "Krouiñ kontoù", "grant-createeditmovepage": "Krouiñ, aozañ ha dilec'hiañ pajennoù", + "grant-delete": "Diverkañ ar pajennoù, an adweladennoù hag an enmontoù er marilh", + "grant-editinterface": "Kemmañ esaouenn anvioù MediaWiki hag ar CSS/JavaScript implijer", + "grant-editmycssjs": "Kemmañ ho CSS/JavaScript implijer", "grant-editmyoptions": "Kemmañ ho penndibaboù implijer.", "grant-editmywatchlist": "Kemmañ ho roll evezhiañ", "grant-editpage": "Kemmañ pajennoù a zo anezho c'hoazh", "grant-editprotected": "Kemmañ pajennoù gwarezet", + "grant-highvolume": "Kemmañ kementadoù bras", + "grant-oversight": "Kuzhat an implijerien ha diverkañ an adweladennoù", + "grant-patrol": "Gwiriañ ar c'hemmoù graet d'ar pajennoù", + "grant-privateinfo": "Gwelet an titouroù prevez", "grant-protect": "Gwareziñ ha diwareziñ pajennoù", "grant-rollback": "Distreiñ war ar c'hemmoù er pajennoù", "grant-sendemail": "Kas ur postel d'an implijerien all", + "grant-uploadeditmovefile": "Enporzhiañ, erlec'hiañ hag adenvel restroù", "grant-uploadfile": "Enporzhiañ restroù nevez", "grant-basic": "Gwirioù diazez", "grant-viewdeleted": "Gwelet ar restroù ha pajennoù dilamet", "grant-viewmywatchlist": "Gwelet ho roll evezhiañ", + "grant-viewrestrictedlogs": "Diskouez an enmontoù marilh kuzh", "newuserlogpage": "Marilh ar c'hontoù krouet", "newuserlogpagetext": "Marilh krouiñ ar c'hontoù implijer.", "rightslog": "Marilh statud an implijerien", @@ -1155,8 +1165,9 @@ "action-read": "lenn ar bajenn-mañ", "action-edit": "kemmañ ar bajenn-mañ", "action-createpage": "krouiñ ar bajenn-mañ", - "action-createtalk": "krouiñ pajennoù kaozeal", + "action-createtalk": "krouiñ ar bajenn-gaozeal-mañ", "action-createaccount": "krouiñ ar gont implijer-mañ", + "action-autocreateaccount": "Krouiñ ent emgefre ar gont implijer diavaez-mañ", "action-history": "gwelet istor ar bajenn-mañ", "action-minoredit": "merkañ ar c'hemm-mañ evel dister", "action-move": "dilec'hiañ ar bajenn-mañ", @@ -1170,11 +1181,11 @@ "action-upload_by_url": "pellgargañ ar restr-mañ adal ur chomlec'h URL", "action-writeapi": "Ober gant an API skrivañ", "action-delete": "diverkañ ar bajenn-mañ", - "action-deleterevision": "diverkañ ar stumm-mañ", + "action-deleterevision": "diverkañ adweladennoù", "action-deletedhistory": "Gwelet istor diverket ar bajenn-mañ", "action-browsearchive": "Klask pajennoù bet diverket", - "action-undelete": "diziverkañ ar bajenn-mañ", - "action-suppressrevision": "gwelet hag assevel ar stumm diverket-mañ", + "action-undelete": "diziverkañ pajennoù", + "action-suppressrevision": "gwiriañ hag assevel an adweladennoù kuzh", "action-suppressionlog": "gwelet ar marilh prevez-mañ", "action-block": "mirout ouzh an impplijer-mañ da zegas kemmoù", "action-protect": "kemmañ liveoù gwareziñ ar bajenn-mañ", @@ -1213,6 +1224,7 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])", "recentchanges-submit": "Diskouez", "rcfilters-activefilters": "Siloù oberiant", + "rcfilters-clear-all-filters": "Riñsañ an holl siloù", "rcfilters-invalid-filter": "Sil direizh", "rcfilters-filterlist-title": "Siloù", "rcfilters-filterlist-noresults": "N'eus bet kavet sil ebet", @@ -1233,6 +1245,8 @@ "rcfilters-filter-humans-label": "Den (ket ur robot)", "rcfilters-filter-minor-label": "Kemmoù dister", "rcfilters-filtergroup-changetype": "Seurt kemm", + "rcfilters-filter-pageedits-label": "Kemmoù pajennoù", + "rcfilters-filter-newpages-label": "Krouidigezhioù pajennoù", "rcfilters-filter-categorization-label": "Kemmoù rummad", "rcnotefrom": "Setu aze {{PLURAL:$5|ar c'hemm|ar c'hemmoù}} c'hoarvezet abaoe an $3, $4 ($1 d'ar muiañ).", "rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2", @@ -1281,6 +1295,7 @@ "recentchangeslinked-to": "Diskouez ar c'hemmoù war-du ar pajennoù liammet kentoc'h eget re ar bajenn lakaet", "recentchanges-page-added-to-category": "[[:$1]] ouzhpennet d'ar rummad", "recentchanges-page-removed-from-category": "Diverket eo bet [[$1]] diouzh ar rummad", + "autochange-username": "Kemm emgefre gant MediaWiki", "upload": "Kargañ war ar servijer", "uploadbtn": "Kargañ ur restr", "reuploaddesc": "Distreiñ d'ar furmskrid.", @@ -1432,6 +1447,7 @@ "uploadstash-badtoken": "N'haller ket kas an ober-mañ da benn vat, marteze a-walc'h abalamour m'eo aet d'o zermen an titouroù kred ho poa roet. Klaskit en-dro.", "uploadstash-errclear": "N'eus ket bet gallet riñsañ ar restroù.", "uploadstash-refresh": "Freskaat roll ar restroù", + "uploadstash-thumbnail": "gwelet ar munud", "invalid-chunk-offset": "Direizh eo offset ar rannad", "img-auth-accessdenied": "Moned nac'het", "img-auth-nopathinfo": "Mankout a ra ar PATH_INFO.\nN'eo ket kefluniet ho servijer evit reiñ an titour-mañ.\nMarteze eo diazezet war CGI ha n'hall ket skorañ img_auth.\nGwelet https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization", @@ -1687,6 +1703,7 @@ "apisandbox-request-time": "Pad ar goulenn: $1", "apisandbox-continue": "Kenderc'hel", "apisandbox-continue-clear": "Riñsañ", + "apisandbox-multivalue-all-namespaces": "$1 (An holl esaouennoù anv)", "apisandbox-multivalue-all-values": "$1 (An holl dalvoudoù)", "booksources": "Oberennoù dave", "booksources-search-legend": "Klask en oberennoù dave", @@ -3082,7 +3099,8 @@ "tags-activate-submit": "Gweredekaat", "tags-deactivate-reason": "Abeg :", "tags-deactivate-submit": "Diweredekaat", - "tags-edit-existing-tags-none": "''Hini ebet''", + "tags-edit-existing-tags": "Tikedennoù zo anezho :", + "tags-edit-existing-tags-none": "Hini ebet", "tags-edit-new-tags": "Tikedennoù nevez :", "tags-edit-add": "Ouzhpennañ an tikedennoù-mañ :", "tags-edit-remove": "Dilemel an tikedennoù-mañ :", diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json index 2a17f15d11..4b000e2fee 100644 --- a/languages/i18n/bs.json +++ b/languages/i18n/bs.json @@ -1880,7 +1880,7 @@ "rollbacklink": "vrati", "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}", "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}", - "rollbackfailed": "Neuspešno vraćanje", + "rollbackfailed": "Neuspješno vraćanje", "cantrollback": "Ne mogu vratiti izmjenu;\nposljednji autor je ujedno i jedini.", "alreadyrolled": "Ne može se vratiti posljednja izmjena [[:$1]] od korisnika [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko je već izmijenio ili vratio članak na prethodnu provjerenu verziju.\n\nPosljednju izmjenu napravio je korisnik [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).", "editcomment": "Sažetak izmjene je bio: $1.", @@ -1894,6 +1894,7 @@ "changecontentmodel-title-label": "Naslov stranice", "changecontentmodel-model-label": "Novi model sadržaja", "changecontentmodel-reason-label": "Razlog:", + "changecontentmodel-submit": "Promijeni", "changecontentmodel-success-title": "Model sadržaja je promijenjen", "changecontentmodel-success-text": "Model sadržaja stranice [[:$1]] je promijenjen.", "changecontentmodel-cannot-convert": "Model sadržaja stranice [[:$1]] se ne može pretvoriti u vrstu $2.", @@ -3375,7 +3376,7 @@ "expand_templates_preview": "Pregled", "expand_templates_preview_fail_html": "Pošto stranica {{SITENAME}} ima uključen sirov HTML prikaz, te je bilo gubitka u podacima sesije, pregled je sakriven kao mjera predostrožnosti protiv JavaScript napada.\n\nAko je ovo ispravan pokušaj pretpregleda, molim da ponovo pokušate.\nAko i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]], pa ponovo prijaviti.", "expand_templates_preview_fail_html_anon": "Pošto stranica {{SITENAME}} ima uključen sirov HTML prikaz, a vi se niste prijavili, pregled je sakriven kao mjera predostrožnosti protiv JavaScript napada.\n\nAko je ovo ispravan pokušaj pretpregleda, molim da se [[Special:UserLogin|prijavite]] i pokušate ponovo.", - "pagelanguage": "Odabir jezika stranice", + "pagelanguage": "Promijeni jezik stranice", "pagelang-name": "Stranica", "pagelang-language": "Jezik", "pagelang-use-default": "Koristi podrazumijevani jezik", diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index d39368cd45..e89bd819af 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -599,9 +599,10 @@ "botpasswords-updated-body": "La contrasenya pel bot «$1» de l'usuari «$2» ha estat actualitzada.", "botpasswords-deleted-title": "S'ha eliminat la contrasenya del bot", "botpasswords-deleted-body": "La contrasenya del bot \"$1\", pertanyent a l'usuari \"$2\", ha estat eliminada.", - "botpasswords-newpassword": "La nova contrasenya per a iniciar sessió amb $1 és $2. Si us plau, guardeu-la de cara al futur.", + "botpasswords-newpassword": "La nova contrasenya per a iniciar sessió amb $1 és $2. Guardeu-la de cara al futur.
(Per a bots vells que necessiten que el nom per a iniciar sessió sigui el mateix que el nom d'usuari, també podeu usar $3 com a nom d'usuari i $4 com a contrasenya.)", "botpasswords-no-provider": "BotPasswordsSessionProvider no està disponible.", "botpasswords-restriction-failed": "Les restriccions de contrasenyes de bots impedeixen aquest inici de sessió.", + "botpasswords-invalid-name": "El nom d'usuari especificat no conté el separador de contrasenya de bot («$1»).", "botpasswords-not-exist": "L'usuari «$1» no té una contrasenya de bot anomenada «$2».", "resetpass_forbidden": "No poden canviar-se les contrasenyes", "resetpass_forbidden-reason": "Les contrasenyes no es poden canviar: $1", @@ -693,6 +694,7 @@ "blockedtitle": "L'usuari està blocat", "blockedtext": "'''S'ha procedit al blocatge del vostre compte d'usuari o la vostra adreça IP.'''\n\nEl blocatge l'ha dut a terme l'usuari $1.\nEl motiu donat és ''$2''.\n\n* Inici del blocatge: $8\n* Final del blocatge: $6\n* Compte blocat: $7\n\nPodeu contactar amb $1 o un dels [[{{MediaWiki:Grouppage-sysop}}|administradors]] per a discutir-ho.\n\nTingueu en compte que no podeu fer servir el formulari d'enviament de missatges de correu electrònic a cap usuari, a menys que tingueu una adreça de correu vàlida registrada a les vostres [[Special:Preferences|preferències d'usuari]] i no ho tingueu tampoc blocat.\n\nLa vostra adreça IP actual és $3, i el número d'identificació del blocatge és #$5.\nSi us plau, incloeu aquestes dades en totes les consultes que feu.", "autoblockedtext": "La vostra adreça IP ha estat blocada automàticament perquè va ser usada per un usuari actualment bloquejat. Aquest usuari va ser blocat per l'{{GENDER:$1|administrador|administradora}} $1. El motiu donat per al bloqueig ha estat:\n\n:''$2''\n\n* Inici del bloqueig: $8\n* Final del bloqueig: $6\n* Usuari bloquejat: $7\n\nPodeu contactar l'usuari $1 o algun altre dels [[{{MediaWiki:Grouppage-sysop}}|administradors]] per a discutir el bloqueig.\n\nRecordeu que per a poder usar l'opció «Envia un missatge de correu electrònic a aquest usuari» haureu d'haver validat una adreça de correu electrònic a les vostres [[Special:Preferences|preferències]].\n\nEl número d'identificació de la vostra adreça IP és $3, i l'ID del bloqueig és #$5. Si us plau, incloeu aquestes dades en totes les consultes que feu.", + "systemblockedtext": "El vostre nom d'usuari o adreça IP ha estat bloquejada automàticament pel MediaWiki.\nEl motiu donat és:\n\n:$2\n\n* Inici del bloqueig: $8\n* Caducitat del bloqueig: $6\n* Destinatari del bloqueig: $7\n\nLa vostra adreça IP actual és $3.\nAfegiu les dades de més amunt en qualsevol consulta que feu al respecte.", "blockednoreason": "no s'ha donat cap motiu", "whitelistedittext": "Heu de $1 per modificar pàgines.", "confirmedittext": "Heu de confirmar la vostra adreça electrònica abans de poder modificar les pàgines. Definiu i valideu la vostra adreça electrònica a través de les vostres [[Special:Preferences|preferències d'usuari]].", @@ -1086,6 +1088,7 @@ "username": "{{GENDER:$1|Nom d'usuari}}:", "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|del grup|dels grups}}:", "prefs-memberingroups-type": "$1", + "group-membership-link-with-expiry": "$1 (fins el $2)", "prefs-registration": "Hora de registre:", "prefs-registration-date-time": "$1", "yourrealname": "Nom real*:", @@ -1144,6 +1147,12 @@ "userrights-changeable-col": "Grups que podeu canviar", "userrights-unchangeable-col": "Grups que no podeu canviar", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "Venç el $1", + "userrights-expiry-none": "No venç", + "userrights-expiry": "Venciment:", + "userrights-expiry-existing": "Temps de venciment actual: $3, $2", + "userrights-expiry-othertime": "Altre temps:", + "userrights-expiry-options": "1 dia:1 day,1 setmana:1 week,1 mes:1 month,3 mesos:3 months,6 mesos:6 months,1 any:1 year", "userrights-conflict": "Conflicte de canvis dels permisos d'usuari. Reviseu i confirmeu els canvis.", "group": "Grup:", "group-user": "Usuaris", @@ -1344,22 +1353,48 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Mostra", "rcfilters-activefilters": "Filtres actius", + "rcfilters-restore-default-filters": "Restaura els filtres per defecte", + "rcfilters-clear-all-filters": "Esborra tots els filtres", "rcfilters-search-placeholder": "Canvis recents dels filtres (navegueu o comenceu a escriure)", "rcfilters-invalid-filter": "Filtre no vàlid", + "rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.", "rcfilters-filterlist-title": "Filtres", "rcfilters-filterlist-noresults": "No s'ha trobat cap filtre", + "rcfilters-filtergroup-registration": "Registre d'usuari", + "rcfilters-filter-registered-label": "Registrats", + "rcfilters-filter-registered-description": "Editors que han iniciat sessió", + "rcfilters-filter-unregistered-label": "No registrats", + "rcfilters-filter-unregistered-description": "Editors que no han iniciat una sessió.", "rcfilters-filtergroup-authorship": "Modifica l'autoria", "rcfilters-filter-editsbyself-label": "Les vostres modificacions", "rcfilters-filter-editsbyself-description": "Modificacions vostres.", "rcfilters-filter-editsbyother-label": "Modificacions d'altres", - "rcfilters-filter-editsbyother-description": "Modificacions creades per altres usuaris (no vostres)", - "rcfilters-filtergroup-userExpLevel": "Nivell d'experiència d'usuari", + "rcfilters-filter-editsbyother-description": "Modificacions creades per altres usuaris (no vostres).", + "rcfilters-filtergroup-userExpLevel": "Nivell d'experiència (només per a usuaris registrats)", "rcfilters-filter-userExpLevel-newcomer-label": "Novells", - "rcfilters-filter-userExpLevel-newcomer-description": "Editors novells: menys de 10 edicions i 4 dies d'activitat.", + "rcfilters-filter-userExpLevel-newcomer-description": "Menys de 10 edicions i 4 dies d'activitat.", "rcfilters-filter-userExpLevel-learner-label": "Aprenents", - "rcfilters-filter-userExpLevel-learner-description": "Més dies d'activitat i més edicions que els 'Novells' però menys que els 'Usuaris experimentats'.", + "rcfilters-filter-userExpLevel-learner-description": "Més dies d'activitat i més edicions que els 'novells' però menys que els 'usuaris experimentats'.", "rcfilters-filter-userExpLevel-experienced-label": "Usuaris experimentats", "rcfilters-filter-userExpLevel-experienced-description": "Més de 30 dies d'activitat i més de 500 edicions.", + "rcfilters-filtergroup-automated": "Contribucions automatitzades", + "rcfilters-filter-bots-label": "Bot", + "rcfilters-filter-bots-description": "Modificacions fetes per eines automatitzades.", + "rcfilters-filter-humans-label": "Humà (no bot)", + "rcfilters-filter-humans-description": "Modificacions fetes per editors humans.", + "rcfilters-filtergroup-significance": "Significació", + "rcfilters-filter-minor-label": "Modificacions menors", + "rcfilters-filter-minor-description": "Modificacions que l'autor va etiquetar com a menors.", + "rcfilters-filter-major-label": "Modificacions no menors", + "rcfilters-filter-major-description": "Modificacions no etiquetades com a menors.", + "rcfilters-filtergroup-changetype": "Tipus de canvi", + "rcfilters-filter-pageedits-label": "Modificacions de pàgina", + "rcfilters-filter-pageedits-description": "Modificacions al contingut del wiki, discussions, descripcions de categories...", + "rcfilters-filter-newpages-label": "Creacions de pàgines", + "rcfilters-filter-newpages-description": "Edicions que creen noves pàgines.", + "rcfilters-filter-categorization-label": "Canvis de categoria", + "rcfilters-filter-categorization-description": "Registres de pàgines afegides o suprimides de les categories.", + "rcfilters-filter-logactions-label": "Accions registrades", "rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de $3, $4 (fins a $1).", "rclistfrom": "Mostra els canvis nous des de $3, $2", "rcshowhideminor": "$1 edicions menors", @@ -1762,6 +1797,7 @@ "uncategorizedcategories": "Categories sense categoria", "uncategorizedimages": "Fitxers sense categoria", "uncategorizedtemplates": "Plantilles sense categoria", + "uncategorized-categories-exceptionlist": " # Conté una llista de categories no no s'haurien de mencionar a Special:UncategorizedCategories. Una per línia, començant amb «*». Les línies que comencin amb un altre caràcter (incloent l'espai en blanc) són ignorades. Utilitzeu «#» per a comentaris.", "unusedcategories": "Categories sense cap ús", "unusedimages": "Fitxers no utilitzats", "wantedcategories": "Categories demanades", @@ -1834,7 +1870,7 @@ "apisandbox": "Pàgina de proves de l'API", "apisandbox-jsonly": "Es necessita JavaScript per utilitzar l'espai de proves API.", "apisandbox-api-disabled": "L'API està desactivada en aquest lloc.", - "apisandbox-intro": "Utilitzeu aquesta pàgina per experimentar amb l''''API de web service de MediaWiki'''.\nVisiteu [https://www.mediawiki.org/wiki/API:Main_page la documentació de l'API] per a més informació sobre l'ús de l'API. Exemple: [https://www.mediawiki.org/wiki/API#A_simple_example recuperar el contingut d'una Pàgina Principal]. Seleccioneu una acció per veure més exemples.\n\nTingueu en compte que, encara que això és una pàgina de proves, les accions que feu en aquesta pàgina poden modificar la wiki.", + "apisandbox-intro": "Utilitzeu aquesta pàgina per experimentar amb l'API de servei web de MediaWiki.\nVegeu la [[mw:API:Main page|documentació de l'API]] per a més informació sobre l'ús de l'API. Exemple: [https://www.mediawiki.org/wiki/API#A_simple_example recuperar el contingut d'una Pàgina Principal]. Seleccioneu una acció per veure més exemples.\n\nTingueu en compte que, encara que això és una pàgina de proves, les accions que feu en aquesta pàgina poden modificar la wiki.", "apisandbox-fullscreen": "Expandeix el plafó", "apisandbox-fullscreen-tooltip": "Expandeix el plafó de l'entorn de proves per tal que ocupi la finestra del navegador.", "apisandbox-unfullscreen": "Mostra la pàgina", @@ -1857,6 +1893,7 @@ "apisandbox-loading-results": "S'estan reben els resultats de l'API...", "apisandbox-results-error": "S'ha produït un error en carregar la resposta de la consulta de l'API: $1.", "apisandbox-request-url-label": "Sol·licita URL:", + "apisandbox-request-json-label": "JSON de sol·licitud:", "apisandbox-request-time": "Temps de sol·licitud: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Corregeix el testimoni i torna-ho a enviar", "apisandbox-results-fixtoken-fail": "No s'ha pogut recuperar el testimoni «$1».", @@ -1998,7 +2035,7 @@ "emailccsubject": "Còpia del vostre missatge a $1: $2", "emailsent": "Correu electrònic enviat", "emailsenttext": "S'ha enviat el vostre correu electrònic.", - "emailuserfooter": "Aquest missatge de correu electrònic l'ha {{GENDER:$1|enviat}} $1 a {{GENDER:$2|$2}} amb la funció «{{int:emailuser}}» de {{SITENAME}}. {{GENDER:$2|El vostre}} correu electrònic serà enviat directament {{GENDER:$1|al remitent|a la remitent}} original, revelant-li {{GENDER:$2|la vostra}} adreça de correu.", + "emailuserfooter": "Aquest correu electrònic l'ha {{GENDER:$1|enviat}} $1 a {{GENDER:$2|$2}} amb la funció «{{int:emailuser}}» de {{SITENAME}}. Si {{GENDER:$2|responeu}} a aquest correu electrònic, {{GENDER:$2|la vostra resposta}} serà enviada directament {{GENDER:$1|al remitent|a la remitent}} original revelant-li {{GENDER:$2|la vostra}} adreça de correu.", "usermessage-summary": "Deixant missatges de sistema.", "usermessage-editor": "Missatger del sistema", "watchlist": "Llista de seguiment", @@ -2013,6 +2050,7 @@ "addedwatchtext-short": "S’ha afegit la pàgina «$1» a la vostra llista de seguiment.", "removewatch": "Treu de la llista de seguiment", "removedwatchtext": "S'ha tret «[[:$1]]» i la seva pàgina de discussió de la vostra [[Special:Watchlist|llista de seguiment]].", + "removedwatchtext-talk": "S'ha tret «[[:$1]]» i la seva pàgina associada de la vostra [[Special:Watchlist|llista de seguiment]].", "removedwatchtext-short": "S’ha tret la pàgina «$1» de la vostra llista de seguiment.", "watch": "Vigila", "watchthispage": "Vigila aquesta pàgina", @@ -2236,8 +2274,8 @@ "sp-contributions-newbies-sub": "Per a novells", "sp-contributions-newbies-title": "Contribucions dels comptes d'usuari més nous", "sp-contributions-blocklog": "Registre de bloquejos", - "sp-contributions-suppresslog": "contribucions suprimides de l'usuari", - "sp-contributions-deleted": "contribucions d'usuari esborrades", + "sp-contributions-suppresslog": "contribucions suprimides de {{GENDER:$1|l'usuari|la usuària}}", + "sp-contributions-deleted": "Contribucions de {{GENDER:$1|l’usuari|la usuària}} esborrades", "sp-contributions-uploads": "càrregues", "sp-contributions-logs": "registres", "sp-contributions-talk": "discussió", @@ -2395,8 +2433,8 @@ "move-page": "Reanomena $1", "move-page-legend": "Reanomena la pàgina", "movepagetext": "Amb el formulari següent reanomenareu una pàgina, movent tot el seu historial al nou nom.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol.\nPodeu actualitzar automàticament les redireccions que apuntin al títol original.\nSi no ho feu, assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nSerà de la vostra responsabilitat verificar que els enllaços segueixin apuntant cap a on se suposa que ho han de fer.\n\nTingueu en compte que la pàgina no serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció sense més historial.\nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n\nNota:\nAçò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; \nassegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.", - "movepagetext-noredirectfixer": "Amb el formulari següent podeu reanomenar una pàgina movent tot el seu historial al nom nou.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol. \nAssegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nÉs responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. \n\nTingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. \nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n \n'''Atenció!''' \nAixò pot ser un canvi dràstic i inesperat per una pàgina popular; \nassegureu-vos que sabeu el que feu abans de continuar.", - "movepagetalktext": "La pàgina de discussió associada també serà traslladada automàticament '''tret que''':\n* Ja existeixi una pàgina de discussió no buida amb el nou nom, o\n* Desactiveu l'opció de més avall.\n\nEn aquests casos, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.", + "movepagetext-noredirectfixer": "Amb el formulari següent podeu reanomenar una pàgina movent tot el seu historial al nom nou.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol. \nAssegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nÉs responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. \n\nTingueu en compte que la pàgina no serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. \nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n \nNota:\nAixò pot ser un canvi dràstic i inesperat per una pàgina popular; \nassegureu-vos que sabeu el que feu abans de continuar.", + "movepagetalktext": "Si marqueu aquesta casella, la pàgina de discussió associada també serà traslladada automàticament al nou títol, tret que ja existeixi allà una pàgina de discussió no buida.\n\nEn aquest cas, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.", "moveuserpage-warning": "'''Atenció:''' Esteu a punt de moure una pàgina d'usuari. Tingueu en compte que només la pàgina es desplaçarà i que el compte d'usuari ''no'' canviarà de nom.", "movecategorypage-warning": "Avís: Esteu a punt de moure una pàgina de categoria. Tingueu en compte que només es mourà aquesta pàgina, i que les pàgines dins la categoria antiga no es recategoritzaran automàticament en la nova.", "movenologintext": "Heu de ser un usuari registrat i estar [[Special:UserLogin|dintre d'una sessió]]\nper reanomenar una pàgina.", @@ -2406,6 +2444,7 @@ "cant-move-to-user-page": "No teniu permís per a moure una pàgina a una pàgina d'usuari (independentment de poder fer-ho cap a una subpàgina d'usuari).", "cant-move-category-page": "No teniu permisos per a moure pàgines de categoria.", "cant-move-to-category-page": "No teniu permisos per a moure una pàgina a una pàgina de categoria.", + "cant-move-subpages": "No teniu permís per a traslladar subpàgines.", "namespace-nosubpages": "L'espai de noms «$1» no permet subpàgines.", "newtitle": "Títol nou:", "move-watch": "Vigila aquesta pàgina", @@ -2427,10 +2466,11 @@ "movelogpagetext": "Vegeu la llista de les darreres pàgines reanomenades.", "movesubpage": "{{PLURAL:$1|Subpàgina|Subpàgines}}", "movesubpagetext": "Aquesta pàgina té {{PLURAL:$1|una subpàgina|$1 subpàgines}} que es mostren a continuació.", + "movesubpagetalktext": "La pàgina de discussió corresponent té $1 {{PLURAL:$1|subpàgina mostrada|subpàgines mostrades}} a continuació.", "movenosubpage": "Aquesta pàgina no té subpàgines.", "movereason": "Motiu:", "revertmove": "reverteix", - "delete_and_move_text": "==Cal l'eliminació==\n\nLa pàgina de destinació, «[[:$1]]», ja existeix. Voleu eliminar-la per a fer lloc al trasllat?", + "delete_and_move_text": "La pàgina de destinació, «[[:$1]]», ja existeix.\nVoleu eliminar-la per a fer lloc al trasllat?", "delete_and_move_confirm": "Sí, esborra la pàgina", "delete_and_move_reason": "S'ha eliminat per a permetre el reanomenament de \" [[$1]] \"", "selfmove": "Els títols d'origen i de destinació coincideixen: no és possible de reanomenar una pàgina a si mateixa.", @@ -2448,7 +2488,7 @@ "move-leave-redirect": "Deixa enrere una redirecció", "protectedpagemovewarning": "'''AVÍS: Aquesta pàgina està bloquejada i només els usuaris que tenen drets d'administrador la poden reanomenar.\nA continuació es mostra la darrera entrada del registre com a referència:", "semiprotectedpagemovewarning": "'''Nota:''' Aquesta pàgina està bloquejada i només els usuaris registrats la poden moure.\nA continuació es mostra la darrera entrada del registre com a referència:", - "move-over-sharedrepo": "== El fitxer ja existeix ==\n[[:$1]] ja existeix al dipòsit compartit. Moure un fitxer a aquest títol impedirà d'ús del fitxer compartit.", + "move-over-sharedrepo": "[[:$1]] ja existeix al repositori compartit. Traslladant un fitxer a aquest títol se substituirà el fitxer compartit.", "file-exists-sharedrepo": "El nom de fitxer escollit ja s'utilitza al dipòsit compartit. Escolliu un altre nom.", "export": "Exportació de pàgines", "exporttext": "Podeu exportar a XML el text i l'historial d'una pàgina en concret o d'un conjunt de pàgines; aleshores el resultat pot importar-se en un altre lloc web basat en wiki amb programari de MediaWiki mitjançant la [[Special:Import|pàgina d'importació]].\n\nPer a exportar pàgines, escriviu els títols que desitgeu al quadre de text de sota, un títol per línia, i seleccioneu si desitgeu o no la versió actual juntament amb totes les versions antigues, amb la pàgina d'historial, o només la pàgina actual amb la informació de la darrera modificació.\n\nEn el darrer cas, podeu fer servir un enllaç com ara [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] per a la pàgina «[[{{MediaWiki:Mainpage}}]]».", @@ -2528,7 +2568,7 @@ "import-nonewrevisions": "No s'ha importat cap revisió (ja hi eren abans o s'han omès a causa d'errors).", "xml-error-string": "$1 a la línia $2, columna $3 (byte $4): $5", "import-upload": "Carrega dades XML", - "import-token-mismatch": "Pèrdua de dades de sessió. Torneu-ho a intentar.", + "import-token-mismatch": "Pèrdua de dades de sessió.\n\nPotser heu finalitzat la sessió. Comproveu si encara teniu la sessió iniciada i torneu-ho a intentar.\nSi encara no funciona, proveu de [[Special:UserLogout|finalitzar la sessió]] i inicieu-la de nou, comprovant que el vostre navegador permeti les galetes per a aquest lloc.", "import-invalid-interwiki": "No es pot importar des del wiki especificat.", "import-error-edit": "La pàgina «$1» no s'ha importat perquè no teniu permís per modificar-la.", "import-error-create": "La pàgina «$1» no s'ha importat perquè no teniu permís per crear-la.", @@ -3590,6 +3630,7 @@ "pagelang-language": "Idioma", "pagelang-use-default": "Utilitza l'idioma per defecte", "pagelang-select-lang": "Selecciona un idioma", + "pagelang-reason": "Motiu", "pagelang-submit": "Envia", "pagelang-nonexistent-page": "La pàgina $1 no existeix.", "pagelang-unchanged-language": "La pàgina $1 ja està configurada en la llengua: $2.", @@ -3715,7 +3756,7 @@ "authmanager-authn-no-primary": "Les dades credencials no s'han pogut autenticar.", "authmanager-authn-autocreate-failed": "Ha fallat la creació automàtica d'un compte local: $1", "authmanager-create-disabled": "S'ha inhabilitat la creació de comptes.", - "authmanager-create-from-login": "Per crear un compte, ompliu els camps de sota.", + "authmanager-create-from-login": "Per crear un compte, ompliu els camps.", "authmanager-authplugin-setpass-failed-title": "El canvi de contrasenya ha fallat", "authmanager-authplugin-setpass-bad-domain": "Domini invàlid.", "authmanager-userdoesnotexist": "El compte d'usuari «$1» no està registrat.", diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json index 8771631de5..2ded5389f9 100644 --- a/languages/i18n/cs.json +++ b/languages/i18n/cs.json @@ -1731,6 +1731,7 @@ "uncategorizedcategories": "Nekategorizované kategorie", "uncategorizedimages": "Nekategorizované soubory", "uncategorizedtemplates": "Nekategorizované šablony", + "uncategorized-categories-exceptionlist": " # Obsahuje seznam kategorií, které se nemají objevovat na Speciální:Nekategorizované kategorie. Jedna kategorie na každém řádku, uvozená pomocí „*“. Řádky začínající jiným znakem (včetně bílých znaků) se ignorují. Komentáře vkládejte za „#“.", "unusedcategories": "Nepoužívané kategorie", "unusedimages": "Nepoužívané soubory", "wantedcategories": "Chybějící kategorie", @@ -1829,7 +1830,6 @@ "apisandbox-sending-request": "Odesílá se API požadavek…", "apisandbox-loading-results": "Přijímají se API výsledky…", "apisandbox-results-error": "Došlo k chybě při načítání odpovědi na API dotaz: $1.", - "apisandbox-request-params-json": "Parametry v JSON:", "apisandbox-request-url-label": "URL požadavku:", "apisandbox-request-time": "Trvání požadavku: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Opravit token a znovu odeslat", @@ -1972,7 +1972,7 @@ "emailccsubject": "Kopie Vaší zprávy pro uživatele $1: $2", "emailsent": "E-mail odeslán", "emailsenttext": "Váš e-mail byl odeslán.", - "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailuser}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2. Váš e-mail bude odeslán přímo {{GENDER:$1|původnímu odesílateli, čímž mu|původní odesílatelce, čímž jí}} prozradíte svou e-mailovou adresu.", + "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailuser}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2. Pokud na něj odpovíte, bude váš e-mail odeslán přímo {{GENDER:$1|původnímu odesílateli, čímž mu|původní odesílatelce, čímž jí}} prozradíte svou e-mailovou adresu.", "usermessage-summary": "Doručena zpráva od systému.", "usermessage-editor": "Systémový poslíček", "watchlist": "Sledované stránky", @@ -3836,7 +3836,7 @@ "usercssispublic": "Uvědomte si prosím, že podstránky s CSS by neměly obsahovat tajné údaje, protože jsou viditelné ostatním uživatelům.", "restrictionsfield-badip": "Neplatná IP adresa nebo rozsah: $1", "restrictionsfield-label": "Povolené rozsahy IP adres:", - "restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí
0.0.0.0/0
::/0", + "restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí:
0.0.0.0/0\n::/0
", "revid": "revize $1", "pageid": "Stránka s ID $1" } diff --git a/languages/i18n/csb.json b/languages/i18n/csb.json index 8877f738c8..a35bc23a7a 100644 --- a/languages/i18n/csb.json +++ b/languages/i18n/csb.json @@ -8,7 +8,8 @@ "MinuteElectron", "Warszk", "לערי ריינהארט", - "아라" + "아라", + "Kirsan" ] }, "tog-underline": "Pòdsztrëchiwùjë lënczi:", @@ -18,24 +19,24 @@ "tog-extendwatchlist": "Rozwinie lëstã ùzérónëch artiklów bë wëskrzënic wszëtczé zmianë, ni le blós slédné", "tog-usenewrc": "Ùżëjé rozwinãti wëzdrzatk slédnych zjinaków (nót je JavaScript)", "tog-numberheadings": "Aùtomatné numerowanié nôgłówków", - "tog-showtoolbar": "Wëskrzrni listwã nôrzãdzów edicëji (nót je JavaScript)", - "tog-editondblclick": "Editëjë starnë przez dëbeltné klëkniãcé (nót je JavaScript)", - "tog-editsectiononrightclick": "Włączë edicëjã sekcëji bez klëkniãcé prawą knąpą mëszë
na titlu sekcëji (JavaScript)", - "tog-watchcreations": "Dodôwôj starnë, chtërné ùsôdzã, do mòji lëstë ùzérónëch artiklów", - "tog-watchdefault": "Dodôwôj starnë, chtërné editëjã do mòji lëstë ùzérónëch artiklów", - "tog-watchmoves": "Dodôwôj starnë jaczé przenoszã do mòji lëstë ùzérónëch artiklów", - "tog-watchdeletion": "Dodôwôj starnë jaczé rëmóm do mòji lëstë ùzérónëch artiklów", + "tog-showtoolbar": "Wëskrzëni listwã nôrzãdzów edicje", + "tog-editondblclick": "Editëjë starnë przez dëbeltné klëkniãcé", + "tog-editsectiononrightclick": "Włączë edicjã sekcji bez klëkniãcé prawą knąpą mëszë na titlu sekcje", + "tog-watchcreations": "Dodôwôj do mòji lëstë ùzérónëch artiklów starnë, chtërné ùsôdzã, i lopczi, chtërné wladëjã", + "tog-watchdefault": "Dodôwôj do mòji lëstë ùzérónëch artiklów starnë i lopczi, chtërné editëjã.", + "tog-watchmoves": "Dodôwôj do mòji lëstë ùzérónëch artiklów starnë i lopczi, jaczé przenoszã.", + "tog-watchdeletion": "Dodôwôj do mòji lëstë ùzérónëch artiklów starnë i lopczi, jaczé rëmóm.", "tog-minordefault": "Zaznaczë wszëtczé edicëje domëslno jakno môłé", "tog-previewontop": "Pòkażë pòdzérk przed kastką edicëji", "tog-previewonfirst": "Pòkażë pòdzérk ju przed pierszą edicëją", - "tog-enotifwatchlistpages": "Wëslë mie e-mail czedë starna jaką ùzéróm je zmieniwónô", + "tog-enotifwatchlistpages": "Wësli mie e-mail czedë je zmieniwónô starna abò lopk, jaczi ùzéróm.", "tog-enotifusertalkpages": "Wëslë mie e-mail czedë zmieniwónô je mòja starna diskùsëji", - "tog-enotifminoredits": "Wëslë mie e-mail téż dlô môłich zmianów starnów", + "tog-enotifminoredits": "Wësli mie e-mail téż dlô môłich zmianów starnów i lopków.", "tog-enotifrevealaddr": "Pòkażë mòją adresã e-mail w òdkôzëwùjącym mailu", "tog-shownumberswatching": "Pòkażë lëczba ùzérającëch brëkòwników", - "tog-oldsig": "Pòdzérk wëzdrzatkù twòjegò pòdpisënka", + "tog-oldsig": "Wëzdrzatk twòjegò pòdpisënkù:", "tog-fancysig": "Wzérôj na pòdpisënk jakno na wikikòd (bez aùtomatnych lënków)", - "tog-uselivepreview": "Brëkùjë wtimczasnegò pòdzérkù (JavaScript) (eksperimentalné)", + "tog-uselivepreview": "Brëkùjë wtimczasnegò pòdzérkù", "tog-forceeditsummary": "Pëtôj przed wéńdzenim do pùstégò pòdrechòwania edicëji", "tog-watchlisthideown": "Zatacë mòjé edicëje z lëstë ùzérónëch artiklów", "tog-watchlisthidebots": "Zatacë edicëje botów z lëstë ùzérónëch artiklów", @@ -49,7 +50,7 @@ "tog-norollbackdiff": "Pòcësni wëskrzënianié zjinaków pò copniãcô sã", "underline-always": "Wiedno", "underline-never": "Nigdë", - "underline-default": "Domëslny przezérnik", + "underline-default": "Tak jak w domëslnym przezérnikù abò skórczi.", "editfont-style": "Sztél fònta w edicjowim pòlu:", "editfont-default": "Domëslny przezérnik", "editfont-monospace": "fònt ò stałi szérzé", @@ -121,9 +122,9 @@ "newwindow": "(òtmëkô sã w nowim òczenkù)", "cancel": "Anulujë", "moredotdotdot": "Wicy...", - "mypage": "Mòja starna", - "mytalk": "Diskùsëjô", - "anontalk": "Diskùsëjô dlô ti IP-adresë", + "mypage": "Starna", + "mytalk": "Diskùsjô", + "anontalk": "Diskùsjô", "navigation": "Nawigacëjô", "and": " ë", "qbfind": "Nalézë", @@ -136,6 +137,7 @@ "actions": "Dzéjania", "namespaces": "Rum mionów:", "variants": "Wariantë", + "navigation-heading": "Nawigacyjné menu", "errorpagetitle": "Fela", "returnto": "Nazôd do starnë $1.", "tagline": "Z {{SITENAME}}", @@ -190,7 +192,7 @@ "jumptosearch": "szëkbë", "aboutsite": "Ò {{SITENAME}}", "aboutpage": "Project:Ò_{{SITENAME}}", - "copyright": "Zamkłosc hewòtny starnë je ùżëczónô wedle reglów $1.", + "copyright": "Zamkłosc hewòtny starnë je ùżëczónô wedle reglów $1, jeżlë nie pòdóno jinaczi.", "copyrightpage": "{{ns:project}}:Ùsôdzkòwé_prawa", "currentevents": "Aktualné wëdarzenia", "currentevents-url": "Project:Aktualné wëdarzenia", @@ -280,27 +282,29 @@ "createaccount": "Założë nowé kònto", "gotaccount": "Masz ju kònto? '''$1'''.", "gotaccountlink": "Wlogùjë", - "createaccountmail": "òb e-mail", + "createaccountmail": "Ùżij timczasowégò hasła i wësli je na pòdóny adres e-mail.", "badretype": "Wprowadzone parole jinaczą sã midze sobą.", "userexists": "To miono brëkòwnika je ju w ùżëcym. Proszã wëbrac jiné miono.", "loginerror": "Fela logòwaniô", - "loginsuccesstitle": "ùdałé logòwanié", + "loginsuccesstitle": "Ùdałé logòwanié", "loginsuccess": "Të jes wlogòwóny do {{SITENAME}} jakno \"$1\".", - "nosuchuser": "Nie dô brëkòwnika ò mionie \"$1\".\nSprôwdzë pisënk abò [[Special:CreateAccount|ùsôdzë nowé kònto]].", + "nosuchuser": "Nie mô brëkòwnika ò mionie \"$1\".\nW pòzwie brëkòwnika mô znaczenié wiôlgòsc lëtrów.\nSprawdzë pisënk abò [[Special:CreateAccount|ùsadzë nowé kònto]].", "nouserspecified": "Mùszisz pòdac miono brëkòwnika.", "wrongpassword": "Lëchô parola.\nSpróbùjë znowa.", "wrongpasswordempty": "Wpisónô parola je pùstô\nSpróbùjë znowa.", "passwordtooshort": "Parola mùszi zamëkac w se co nômni $1 {{PLURAL:$1|céch|céchë|céchów}}.", - "mailmypassword": "Wëslë nową parolã e-mailą", + "mailmypassword": "Zetrzéc hasło.", "passwordremindertitle": "Nowô doczasnô parola dlô {{SITENAME}}", "passwordremindertext": "Chtos (gwës Të, z adresë $1) pòprosëł ò wësłanié nowi\nparolë dlô {{SITENAME}} ($4). Aktualnô parola dlô brëkòwnika\n\"$2\" òsta ùsôdzonô ë nastôwionô jakno \"$3\". Jeżlë to bëło twòją\njintencëją, mùszisz sã terô wlogòwac ë zmienic swòją parolã.\nNowô parola je wôznô {{PLURAL:$5|dzéń|$5 dni}}.\nJeżlë chto jinszi wësłôł to zapëtanié, abò pamiãtôsz swòją parolã\në chcesz jã dali bez zmianë brëkòwac, zjignorëje to wiadło ë\nrobi dali ze starną parolą.", "noemail": "W baze ni ma email-adresë dlô brëkòwnika \"$1\".", "acct_creation_throttle_hit": "Môsz ùsôdzoné ju {{PLURAL:$1|1 kònto|$1 kontów}}.\nNi mòżesz miec ju wicy.", - "emailauthenticated": "Twòjô adresa e-mail òsta pòcwierdzonô $2 ò $3.", + "emailauthenticated": "Twój adres e-mail òstôł pòcwierdzóny $2 ò $3.", "accountcreated": "Konto założone", - "accountcreatedtext": "Konto brëkòwnika dlô $1 je założone.", + "accountcreatedtext": "Kònto brëkòwnika dlô [[{{ns:User}}:$1|$1]], [[{{ns:User talk}}:$1|talk]] òstało ùsadzóné.", "createaccount-title": "Kònto ùsôdzoné dlô {{SITENAME}}", "loginlanguagelabel": "Jãzëk: $1", + "pt-login": "Wlogùj mie", + "pt-createaccount": "Ùsadzë kònto", "changepassword": "Zmiana parolë", "oldpassword": "Stôrô parola:", "newpassword": "Nowô parola", @@ -326,28 +330,28 @@ "sig_tip": "Twój pòdpisënk z datumã a czasã", "hr_tip": "Hòrizontalnô linijô (brëkùjë szpórowno)", "summary": "Pòdrechòwanié:", - "subject": "Téma/nagłówk:", + "subject": "Téma:", "minoredit": "To je drobnô edicëjô", "watchthis": "Ùzérôj", "savearticle": "Zapiszë artikel", "preview": "Pòdzérk", "showpreview": "Wëskrzëni pòdzérk", "showdiff": "Wëskrzëni zmianë", - "anoneditwarning": "'''Bôczë:''' Të nie je wlogòwóny. Twòjô adresa IP mdze zapisónô w historëji edicëji ti starnë.", + "anoneditwarning": "Bôczë: Të nie je wlogòwóny. Jeżlë wëkònôsz jakąs zmianã, twój adres IP mdze widoczny pùbliczno. Jeżlë [$1 wlogùjesz sã] abò [$2 ùsadzësz kònto]twòje zjinaczi òstóną przëpisóné do kònta, co wicy mającë kònto òtrzimôsz rozmajité ùdogòdnienia.", "summary-preview": "Pòdzérk òpisënka:", "blockedtitle": "Brëkòwnik je zascëgóny", "blockedtext": "'''Twòje kònto abò ë IP-adresa òstałë zablokòwóné.'''\n\nZablokòwôł je $1.\nPòdónô przëczëna to:''$2''.\n\n * Zôczątk blokadë: $8\n * Kùńc blokadë: $6\n * Cél blokadë: $7\n\n\nBë zgwësnic sprawã zablokòwaniô mòżesz skòntaktowac sã z $1 abò jińszim [[{{MediaWiki:Grouppage-sysop}}|administratorã]].\nBoczë, że të ni mòżesz stądka sélac e-mailów, jeżlë nié môsz jesz zaregisterowóné e-mailowé adresë w [[Special:Preferences|nastôwach]].\nTwòjô aktualnô adresa IP to $3, a zablokòwónô adresa ID to #$5.\nProszëmë pòdac wëższé pòdôłczi przë wszëtczich pëtaniach.", "loginreqlink": "Wlogùjë", "loginreqpagetext": "$1 sã, żebë przezérac jinszé starnë.", "accmailtitle": "Parola wësłónô.", - "accmailtext": "Przëtrôfkòwò wëgenerowónô parola dlô [[User talk:$1|$1]] òsta wësłónô do $2.\n\nParolã dlô negò nowégò kònta mòże zmienic pò wlogòwaniu na starnie ''[[Special:ChangePassword|zjinaka parolë]]''.", + "accmailtext": "Przëtrôfkòwò wëgenerowónô parola dlô [[User talk:$1|$1]] òsta wësłónô do $2. Parolã dlô negò nowégò kònta mòże zmienic pò wlogòwaniu na starnie [[Special:ChangePassword|zjinaka parolë]] .", "newarticle": "(Nowi)", "newarticletext": "Môsz przëszłi z lënkù do starnë jaka jesz nie òbstoji.\nBë ùsôdzëc artikel, naczni pisac w kastce niżi (òb. [$1 starnã pòmòcë]\ndlô wicy wëdowiédzë).\nJeżlë jes të tuwò bez zmiłkã, le klëkni w swòjim przezérnikù knąpã '''nazôd'''.", - "anontalkpagetext": "----''To je starna dyskùsëji anonimòwiégò brëkòwnika, chtëren nie ùsôdzëł jesz swòjegò kòntae, abò gò nie brëkùje.\nAbë gò rozpòznac, ùżëwómë adresów IP.\nTakô adresa IP, mòże bëc równak brëkòwónô przez wiele lëdzy.\nJeżlë jes anonimòwim brëkòwnikã ë ùwôżôsz, że ne wiadła nie są do ce sczerowóne, tedë [[Special:CreateAccount|ùsôdzë nowé kònto]] abò [[Special:UserLogin|wlogùjë sã]], bë niechac niezrozmeiniô z jinyma anonimòwima brëkòwnikama.''", - "noarticletext": "Felëje starna ò tim titlu.\nMòżesz [[Special:Search/{{PAGENAME}}|szëkac za {{PAGENAME}} na jinych starnach]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} szëkac w logù] abò [{{fullurl:{{FULLPAGENAME}}|action=edit}} ùsôdzëc nã starnã]", + "anontalkpagetext": "----\nTo je starna diskùsje anonimòwégò brëkòwnika, chtëren nie ùsadzëł jesz swòjegò kònta, abò gò nie brëkùje.\nAbë gò rozpòznac, ùżëwómë adresów IP.\nTakô adresa IP mòże bëc równak brëkòwónô przez wiele lëdzy.\nJeżlë jes anonimòwim brëkòwnikã i ùwôżôsz, że ne wiadła nie są do ce sczerowóné, tedë [[Special:CreateAccount|ùsadzë nowé kònto]] abò [[Special:UserLogin|wlogùj sã]], bë niechac niezrozmieniô z jinyma anonimòwima brëkòwnikama.''", + "noarticletext": "Felëje starna ò tim titlu.\nMòżesz [[Special:Search/{{PAGENAME}}|szëkac za {{PAGENAME}} na jinych starnach]],\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} szëkac w logù] abò [{{fullurl:{{FULLPAGENAME}}|action=edit}} ùsadzëc nã starnã]", "clearyourcache": "'''Bôczë: Pò zapisanim, mòże bãdzesz mùszôł òminąc pamiãc przezérnika bë òbaczëc zmianë.'''\n'''Mozilla / Firefox / Safari:''' przëtrzëmôj ''Shift'' òbczas klëkaniô na ''Zladëjë znowa'', abò wcësni ''Ctrl-F5'' abò ''Ctrl-R'' (''Command-R'' na kòmpùtrach Mac);\n'''Konqueror:''': klëkni na knąpã ''Zladëjë znowa'', abò wcësni ''F5'';\n'''Opera:''' wëczëszczë pòdrãczną pamiãc w ''Tools→Preferences'';\n'''Internet Explorer:'''przëtrzëmôj ''Ctrl'' òbczas klëkaniô na ''Zladëjë znowa'', abò wcësni ''Ctrl-F5''.", "updated": "(Zaktualnioné)", - "previewnote": "'''To je blós pòdzérk - artikel jesz nie je zapisóny!'''", + "previewnote": "To je blós pòdzérk.\n Artikel jesz nie je zapisóny!", "editing": "Edicëjô $1", "editingsection": "Edicëjô $1 (dzél)", "explainconflict": "Chtos sfórtowôł wprowadzëc swòją wersëjã artikla òbczôs Twòji edicëji.\nGórné pòle edicëji zamëkô w se tekst starnë aktualno zapisóny w pòdôwkòwi baze.\nTwòje zmianë są w dólnym pòlu edicëji.\nBë wprowadzëc swòje zmianë mùszisz zmòdifikòwac tekst z górnégò pòla.\n'''Blós''' tekst z górnégò pòla mdze zapisóny w baze czej wcësniesz \"{{int:savearticle}}\".", @@ -375,21 +379,21 @@ "page_last": "kùńc", "histlegend": "Legenda: (aktualnô) = różnice w przërównanim do aktualny wersëje,\n(wczasniészô) = różnice w przërównanim do wczasniészi wersëje, D = drobné edicëje", "history-fieldset-title": "Przezérôj historëjã", - "histfirst": "Stôrszé", - "histlast": "Nowszé", + "histfirst": "òd nôstarszich", + "histlast": "òd nônowszich", "history-feed-item-nocomment": "$1 ò $2", "rev-delundel": "pòkażë/zatacë", "rev-showdeleted": "pokôż", "revdelete-show-file-submit": "Jo", - "revdelete-radio-set": "Jo", - "revdelete-radio-unset": "Nié", + "revdelete-radio-set": "ùtacony", + "revdelete-radio-unset": "widzawny", "revdel-restore": "Zjinaczë widzawnotã", "pagehist": "Historëjô starnë", "deletedhist": "Rëmniãtô historëjô edicëji", "revdelete-hide-current": "Pòkôza sã fela przë taceniu wersëji datowóny na $2, $1. To je nônowszô wersëjô starnë, chtërnô ni mòże bëc zataconô.", "revdelete-show-no-access": "Pòkôza sã fela przë próbie wëskrzënieniô elementu datowónegò na $2, $1. Widzawnota negò elementu òsta ògrańczonô - ni môsz przëstãpù.", "revertmerge": "Rozdzélë", - "history-title": "Historëjô wersëji dlô \"$1\"", + "history-title": "Historiô zjinaków dlô \"$1\"", "lineno": "Lëniô $1:", "compareselectedversions": "Przërównôj wëbróné wersëje", "editundo": "doprowadzë nazôd", @@ -401,17 +405,17 @@ "viewprevnext": "Òbaczë ($1 {{int:pipe-separator}} $2) ($3).", "searchprofile-advanced": "Awansowóné", "search-result-size": "$1 ({{PLURAL:$2|1 słowò|$2 słowa|$2 słów}})", - "search-redirect": "(przeczérowanié $1)", + "search-redirect": "(przeczérowanié z $1)", "search-section": "(dzél $1)", "search-suggest": "Të mëszlôł ò: $1", "search-interwiki-caption": "Sosterné ùdbë", - "search-interwiki-default": "Skùtczi dlô $1:", + "search-interwiki-default": "Wëniczi òd $1:", "search-interwiki-more": "(wicy)", "searchall": "wszëtczé", "powersearch-legend": "Awansowónô szëkba", "powersearch-ns": "Szëkba w rumach mionów:", "preferences": "Preferencëje", - "mypreferences": "Mòje nastôwë", + "mypreferences": "Nastôwë", "prefs-edits": "Lëczba edicëjów:", "prefs-skin": "Wëzdrzatk", "skin-preview": "Pòdzérk", @@ -424,8 +428,6 @@ "prefs-misc": "Jine", "saveprefs": "Zapiszë", "prefs-editing": "Edicëjô", - "rows": "Régów:", - "columns": "Kòlumnów:", "searchresultshead": "Szëkba", "stub-threshold": "Greńca dlô fòrmatowaniô lënków stubów:", "recentchangesdays": "Kùli dni pòkazëwac w slédnëch edicëjach:", @@ -433,7 +435,7 @@ "savedprefs": "Twòjé nastôwë òstałë zapisóné.", "timezonelegend": "Czasowô cona:", "localtime": "Môlowi czas:", - "timezoneuseserverdefault": "Ùżëjë domëslnégò czasu serwera", + "timezoneuseserverdefault": "Ùżij domëslny dlô ti wiki ($1)", "timezoneuseoffset": "Jinô (specyfikùjë różnicã)", "servertime": "Czas serwera:", "guesstimezone": "Wezmi z przezérnika", @@ -448,7 +450,7 @@ "timezoneregion-indian": "Indijsczi Òcean", "timezoneregion-pacific": "Spòkójny Òcean", "allowemail": "Włączë mòżlewòtã sélaniô e-mailów òd jinëch brëkòwników", - "prefs-searchoptions": "Òptacëje szëkbë", + "prefs-searchoptions": "Szëkba", "prefs-namespaces": "Rum mionów", "default": "domëszlné", "prefs-files": "Lopczi", @@ -458,19 +460,19 @@ "prefs-reset-intro": "Na ti starnie mòże doprowôdzëc nazôd domëslné nastôwë dlô ti starnë.\nNegò dzéjaniô ni mòżé pòzdze ju copnąc.", "prefs-emailconfirm-label": "Pòcwierdzenié e-mailowi adresë:", "youremail": "E-mail:", - "username": "Miono brëkòwnika:", - "prefs-memberingroups": "Nôlëżnik {{PLURAL:$1|karna|karnów}}", + "username": "{{GENDER:$1|Miono brëkòwnika}}:", + "prefs-memberingroups": "{{GENDER:$2| Nôlëżnik}}{{PLURAL:$1|karna|karnów}}", "prefs-registration": "Czas registracëji:", "yourrealname": "Miono ë nôzwëskò:", "yourlanguage": "Jãzëk:", - "yourvariant": "Wariant:", + "yourvariant": "Wariant jãzëka zamkłoscë:", "yournick": "Pòdpisënk:", "badsig": "Òchëbny pòdpisënk, sprôwdzë tadżi HTML.", "badsiglength": "Pòdpisënk je za dłudżi.\nMô bëc mni jakno $1 {{PLURAL:$1|znak|znaczi/znaków}}.", "gender-male": "Chłop", "gender-female": "Białka", "email": "E-mail", - "prefs-help-realname": "Prôwdzewi miono je òptacjowé a czej je dôsz, òstanié ùżëté do pòdpisaniô Twòjégò wkłôdu", + "prefs-help-realname": "Prôwdzëwé miono je òptacjowé, a czej je dôsz, òstanié ùżëté do pòdpisaniô Twòjégò wkładu", "prefs-help-email": "Adresa e-mail je òptacëjnô, zezwôlô równak sélac do ce nową parolã jak tã zabëjesz.\nMòżesz zezwòlëc jinszim brëkòwniką na łączbã z Tobą przez Twòją starnã abò starnã diskùsëji, bez mùszebnotë wëskrzënianiô swòjich pòdôwków.", "editinguser": "Zmiana praw brëkòwnika '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])", "group": "Karno:", @@ -525,7 +527,7 @@ "rclistfrom": "Pòkażë nowé zmianë òd $3 $2", "rcshowhideminor": "$1 môłé zmianë", "rcshowhidebots": "$1 botë", - "rcshowhideliu": "$1 zalogòwónëch brëkòwników", + "rcshowhideliu": "$1 zaregistrowónëch brëkòwników", "rcshowhideanons": "$1 anonymòwëch brëkòwników", "rcshowhidepatr": "$1 òbzérónë edicëje", "rcshowhidemine": "$1 mòjé edicëje", @@ -574,7 +576,7 @@ "filehist-dimensions": "Miara", "filehist-filesize": "Miara lopka", "filehist-comment": "Òpisënk", - "imagelinks": "Lënczi lopka", + "imagelinks": "Wëkòrzëstanie lopka", "linkstoimage": "{{PLURAL:$1|Hewò je starna jakô òdwòłëje|Hewò są starnë jaczé òdwòłëją}} sã do negò lopka:", "nolinkstoimage": "Niżódnô starna nie òdwòłëje sã do negò lopka.", "sharedupload": "Nen lopk je na $1 ë mòże bëc brëkòwóny w jinych ùdbach.", @@ -704,9 +706,9 @@ "namespace": "Rum mionów:", "invert": "Òdwrócë zaznaczenié", "blanknamespace": "(Przédnô)", - "contributions": "Wkłôd brëkòwników", + "contributions": "Wkłôd {{GENDER:$1|brëkòwnika|brëkòwniczczi}}", "contributions-title": "Wkłôd brëkòwnika $1", - "mycontris": "Mòje edicëje", + "mycontris": "Mój wkłôd", "contribsub2": "Dlô brëkòwnika $1 ($2)", "uctop": "(slédnô)", "month": "Òd miesąca (ë wczasni):", @@ -725,11 +727,11 @@ "nolinkshere": "Niżódnô starna nie lënkùje do '''[[:$1]]'''.", "isredirect": "starna przeczerowaniô", "istemplate": "doparłãczony", - "isimage": "lënk òbrôzka", + "isimage": "lënk do lopka", "whatlinkshere-prev": "{{PLURAL:$1|wczasniészé|wczasniészé $1}}", "whatlinkshere-next": "{{PLURAL:$1|nôslédné|nôslédné $1}}", "whatlinkshere-links": "← lëkùjącé", - "whatlinkshere-hideredirs": "$1 przeczérownia", + "whatlinkshere-hideredirs": "$1 przeczérowania", "whatlinkshere-hidetrans": "$1 doparłãczenia", "whatlinkshere-hidelinks": "$1 lënczi", "whatlinkshere-filters": "Filtrë", @@ -776,15 +778,16 @@ "allmessagesnotsupportedDB": "'''{{ns:special}}:Allmessages''' nie mòże bëc brëkòwónô, temù że '''$wgUseDatabaseMessages''' je wëłączony.", "thumbnail-more": "Zwiszi", "import": "Impòrtëjë starnë", - "tooltip-pt-userpage": "Twòja starna brëkòwnika", - "tooltip-pt-mytalk": "Twòjô starna diskùsëji", - "tooltip-pt-preferences": "Mòje nastôwë", + "tooltip-pt-userpage": "{{GENDER:|Twòja}} starna brëkòwnika", + "tooltip-pt-mytalk": "{{GENDER:|Twòja}} starna diskùsje", + "tooltip-pt-preferences": "{{GENDER:|Mòje}}nastôwë", "tooltip-pt-watchlist": "Lësta artiklów jaczé òbzérôsz za zmianama", - "tooltip-pt-mycontris": "Lësta twòjich edicëjów", + "tooltip-pt-mycontris": "Lësta {{GENDER:|twòjich}} edicji", "tooltip-pt-login": "Rôczimë do wlogòwaniô sã, nie je to równak mùszebné.", "tooltip-pt-logout": "Wëlogòwanié", + "tooltip-pt-createaccount": "Zachãcëwómë do ùsadzeniô kònta i wlogòwaniô, chòc nie je to òbrzészk.", "tooltip-ca-talk": "Diskùsëjô zamkłoscë ti starnë", - "tooltip-ca-edit": "Mòżesz editowac nã starnã.\nProszã brëkòwac knąpë pòdzérkù przed zapisaniém.", + "tooltip-ca-edit": "Edituj nã starnã.", "tooltip-ca-addsection": "Zrëszë nowi dzél", "tooltip-ca-viewsource": "Na starna je zazychrowónô.\nMòżesz òbaczëc ji zdrój.", "tooltip-ca-history": "Stôrszé wersëje ti starnë", @@ -796,6 +799,7 @@ "tooltip-search": "Szëkba {{SITENAME}}", "tooltip-search-go": "Biéj do starnë z akùratno taczim mionã, jeżlë takô je", "tooltip-search-fulltext": "Szëkba za wpisónym tesktã na starnach", + "tooltip-p-logo": "Òbaczë przédną starnã", "tooltip-n-mainpage": "Òbôczë przédną starnã", "tooltip-n-mainpage-description": "Biéj do przédny starnë", "tooltip-n-portal": "Ò ti ùdbie, co mòżesz zrobic, co a gdze mòżesz nalezc.", @@ -807,7 +811,7 @@ "tooltip-t-recentchangeslinked": "Slédné zjinaczi na starnach, do chtërnëch na starna lënkùje", "tooltip-feed-rss": "Pòwrózk RSS dlô ti starnë", "tooltip-feed-atom": "Pòwrôzk Atom dlô ti starnë", - "tooltip-t-contributions": "Wëskrzëni lëstã edicëji negò brëkòwnika", + "tooltip-t-contributions": "Wëskrzëni lëstã edicji {{GENDER:$1|negò brëkòwnika|ti brëkòwniczczi}}", "tooltip-t-emailuser": "Wëslë e-mail do tegò brëkòwnika", "tooltip-t-upload": "Wladëjë lopczi", "tooltip-t-specialpages": "Lësta specjalnëch starnów", @@ -815,7 +819,7 @@ "tooltip-t-permalink": "Prosti lënk do ti wersëji starnë", "tooltip-ca-nstab-main": "Wëskrzëni starnã zamkłoscë", "tooltip-ca-nstab-user": "Wëskrzëni starnã brëkòwnika", - "tooltip-ca-nstab-special": "To je specjlanô starna, chtërny ni mòżesz editowac", + "tooltip-ca-nstab-special": "To je specjalnô starna, chtërny ni mòżesz editowac", "tooltip-ca-nstab-project": "Òbôczë starnã ùdbë", "tooltip-ca-nstab-image": "Wëskrzëni starnã lopka", "tooltip-ca-nstab-template": "Wëskrzëni szablónã", @@ -838,6 +842,7 @@ "othercontribs": "Òpiarté na prôcë $1.", "others": "jiné", "spamprotectiontitle": "Anti-spamòwi filter", + "pageinfo-toolboxlink": "Jinfòrmacje ò ti starnie.", "previousdiff": "← Pòprzédnô edicëjô", "nextdiff": "Nôslédnô edicëjô →", "imagemaxsize": "Ògrańczë na starnie òpisënkù òbrôzków jich miarã do:", @@ -845,7 +850,7 @@ "file-info-size": "$1 × $2 pikslów, miara lopka: $3, ôrt MIME: $4", "file-nohires": "Felëje wikszô miara.", "svg-long-desc": "Lopk SVG, nominalno $1 × $2 pikslów, miara lopka: $3", - "show-big-image": "Fùl miara", + "show-big-image": "Pierwòszny lopk", "newimages": "Galerëjô nowich lopków", "ilsubmit": "Szëkôj", "bydate": "wedle datumù", @@ -854,7 +859,7 @@ "metadata-help": "Nen lopk zamëkô w se dodôwną wëdowiédzã, prôwdopòdobno dodóné przez cyfrową kamerã abò skaner ùżëti do ùsôdzeniô abò digitalizacëji.\nJeżlë lopk bëł mòdifikòwóny, pòdôwczi mògą bëc w dzéłu nierówné z paramétrama przerôbionegò lopka.", "metadata-expand": "Wëskrzëni detale", "metadata-collapse": "Zatacë detale", - "metadata-fields": "Wëskrzënioné niżi pòla EXIF bãdą widzawné na starnie graficzi.\nJinszé pòla bãdą domëslno zataconé.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", + "metadata-fields": "Wëskrzënioné niżi pòla metadanëch bãdą widzawné na starnie graficzi.\nJinszé pòla bãdą domëslno zataconé.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", "exif-source": "Zdrój", "exif-languagecode": "Jãzëk", "exif-iimcategory-spo": "Szpòrt", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index ec0313e05c..a5546df0a0 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -1118,6 +1118,7 @@ "username": "{{GENDER:$1|Benutzername}}:", "prefs-memberingroups": "{{GENDER:$2|Mitglied}} der {{PLURAL:$1|Benutzergruppe|Benutzergruppen}}:", "prefs-memberingroups-type": "$2", + "group-membership-link-with-expiry": "$1 (bis $2)", "prefs-registration": "Anmeldezeitpunkt:", "prefs-registration-date-time": "$2, $3 Uhr", "yourrealname": "Bürgerlicher Name:", @@ -1175,6 +1176,14 @@ "userrights-nodatabase": "Die Datenbank $1 ist nicht vorhanden oder nicht lokal.", "userrights-changeable-col": "Gruppenzugehörigkeit, die du ändern kannst", "userrights-unchangeable-col": "Gruppenzugehörigkeit, die du nicht ändern kannst", + "userrights-expiry-current": "Ablauf: $1", + "userrights-expiry-none": "Kein Ablauf", + "userrights-expiry": "Ablauf:", + "userrights-expiry-existing": "Vorhandener Ablauf: $3, $2", + "userrights-expiry-othertime": "Andere Zeit:", + "userrights-expiry-options": "1 Tag:1 day,1 Woche:1 week,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year", + "userrights-invalid-expiry": "Die Ablaufzeit für die Gruppe „$1“ ist ungültig.", + "userrights-expiry-in-past": "Die Ablaufzeit für die Gruppe „$1“ liegt in der Vergangenheit.", "userrights-conflict": "Benutzerrechteänderungskonflikt! Bitte überprüfe und bestätige deine Änderungen.", "group": "Gruppe:", "group-user": "Benutzer", @@ -1930,7 +1939,10 @@ "apisandbox-sending-request": "Sende API-Anfrage …", "apisandbox-loading-results": "Rufe API-Ergebnisse ab …", "apisandbox-results-error": "Beim Laden der API-Anfragenantwort ist ein Fehler aufgetreten: $1.", + "apisandbox-request-selectformat-label": "Anfragedaten anzeigen als:", + "apisandbox-request-format-url-label": "URL-Abfrage-Zeichenfolge", "apisandbox-request-url-label": "Anforderungs-URL:", + "apisandbox-request-json-label": "Anfragen-JSON:", "apisandbox-request-time": "Dauer der Anfrage: {{PLURAL:$1|Eine Millisekunde|$1 Millisekunden}}", "apisandbox-results-fixtoken": "Token korrigieren und erneut übertragen", "apisandbox-results-fixtoken-fail": "Der „$1“-Token konnte nicht abgerufen werden.", @@ -2072,7 +2084,7 @@ "emailccsubject": "Kopie deiner Nachricht an $1: $2", "emailsent": "E-Mail verschickt", "emailsenttext": "Deine E-Mail wurde verschickt.", - "emailuserfooter": "Diese E-Mail wurde von „$1“ an „{{GENDER:$2|$2}}“ durch die Funktion „{{int:emailuser}}“ bei {{SITENAME}} {{GENDER:$1|gesendet}}. {{GENDER:$2|Deine}} E-Mail wird direkt an {{GENDER:$1|den Originalabsender|die Originalabsenderin}} gesendet mit der Preisgabe {{GENDER:$2|deiner}} E-Mail-Adresse an {{GENDER:$1|ihn|sie}}.", + "emailuserfooter": "Diese E-Mail wurde von „$1“ an „{{GENDER:$2|$2}}“ durch die Funktion „{{int:emailuser}}“ bei {{SITENAME}} {{GENDER:$1|gesendet}}. Falls {{GENDER:$2|du}} auf diese E-Mail antwortest, wird sie direkt an {{GENDER:$1|den Originalabsender|die Originalabsenderin}} gesendet. Dabei erfährt {{GENDER:$1|er|sie}} {{GENDER:$2|deine}} E-Mail-Adresse.", "usermessage-summary": "Systemnachricht gespeichert.", "usermessage-editor": "System-Messenger", "usermessage-template": "MediaWiki:Benutzernachricht", @@ -3625,6 +3637,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|aktualisierte}} Markierungen des Logbucheintrags $5 der Seite $3 ($6 {{PLURAL:$7|hinzugefügt}}; $8 {{PLURAL:$9|entfernt}})", "rightsnone": "(–)", "revdelete-summary": "Zusammenfassungskommentar", + "rightslogentry-temporary-group": "$1 (temporär, bis $2)", "feedback-adding": "Rückmeldung wird zur Seite hinzugefügt …", "feedback-back": "Zurück", "feedback-bugcheck": "Super! Bitte überprüfe noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.", diff --git a/languages/i18n/diq.json b/languages/i18n/diq.json index 096bbaf8ba..ba509d06f9 100644 --- a/languages/i18n/diq.json +++ b/languages/i18n/diq.json @@ -167,12 +167,12 @@ "about": "Heqa", "article": "Wesiqe", "newwindow": "(Teqaya newi de abena)", - "cancel": "Peyd kı", + "cancel": "Bıtexelne", "moredotdotdot": "Vêşi...", "morenotlisted": "Na lista qay kemi ya.", "mypage": "Per", - "mytalk": "Vaten", - "anontalk": "Vaten", + "mytalk": "Werênayış", + "anontalk": "Werênayış", "navigation": "Pusula", "and": " u", "qbfind": "Bıvin", @@ -221,10 +221,10 @@ "newpage": "Perra newi", "talkpage": "Na per dı vatan kew", "talkpagelinktext": "Mesac", - "specialpage": "Pera hısusi", + "specialpage": "Perra xısusiye", "personaltools": "Hacetê şexsiy", "articlepage": "Pera zerreki bıvin", - "talk": "Vaten", + "talk": "Werênayış", "views": "Asayışi", "toolbox": "Haceti", "tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë", @@ -240,7 +240,7 @@ "viewtalkpage": "Vaten bıvin", "otherlanguages": "Zıwananê binan dı", "redirectedfrom": "($1 ra kırışı yê)", - "redirectpagesub": "Pera kırıştışi", + "redirectpagesub": "Perra kırıştışi", "redirectto": "Kırışêno:", "lastmodifiedat": "Ena perre roca $1 de, saete $2 de arde ro cı.", "viewcount": "Ena pele {{PLURAL:$1|rae|$1 rey}} vêniya.", @@ -609,11 +609,11 @@ "minoredit": "No yew vurnayışo werdiyo", "watchthis": "Bewni ena per", "savearticle": "Perre qeyd ke", - "savechanges": "Vurnayışan qeyd kı", + "savechanges": "Vırnayışan qeyd ke", "publishpage": "Perer bıhesırne", "publishchanges": "Vurnayışa vıla ke", "preview": "Verqayt", - "showpreview": "Verasayışi bımotne", + "showpreview": "Verasayışi bımocne", "showdiff": "Vurnayışan bımotne", "anoneditwarning": "İqaz: Şıma be hesabê xo nêkewtê cı. \nAdresê şımayê IP tarixê vırnayışê na pele de do qeyd bo. Eke şıma [$1 cıkewê] ya zi [$2 hesab vırazê], vurnayışê şıma be zewbina kare ra nameyê şıma rê bar beno.", "anonpreviewwarning": "\"Şıma be hesabê xo nêkewtê cı. Eke qeyd kerê, adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.\"", @@ -1292,8 +1292,8 @@ "recentchanges-page-added-to-category": "[[:$1]] kerd kategoriye miyan", "recentchanges-page-removed-from-category": "[[:$1]] kategoriye ra vet", "autochange-username": "MediaWiki vurnayışo otomatik", - "upload": "Dosye bar kı", - "uploadbtn": "Dosye bar kı", + "upload": "Dosya bar ke", + "uploadbtn": "Dosya bar ke", "reuploaddesc": "Barkerdışi iptal ke u peyser şo formê barkerdışi", "upload-tryagain": "Deskripyonê dosyayî ke vurîya ey qeyd bike", "uploadnologin": "Şıma cıkewtış nêvıraşto", @@ -1898,7 +1898,7 @@ "delete-warning-toobig": "no pel wayirê tarixê vurnayiş ê derg o, $1 {{PLURAL:$1|revizyonê|revizyonê}} seri de.\nhewn a kerdışê ıney {{SITENAME}} şuxul bıne gırano;\nbı diqqet dewam kerê.", "deleteprotected": "Şıma nêşenê ena perer esternê, çıkı per starya ya.", "rollback": "vurnayişan tepiya bıger", - "rollbacklink": "peyser biyare", + "rollbacklink": "ageyrayış", "rollbacklinkcount": "$1 {{PLURAL:$1|vurnayış|vurnayışi}} peyd gıroti", "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|vurnayış|vuranyışi}} tewr peyd gırot", "rollbackfailed": "Peyserardış nêbi", @@ -3186,7 +3186,7 @@ "fileduplicatesearch-result-1": "Dosyayê ''$1î'' de hem-kopya çini yo.", "fileduplicatesearch-result-n": "Dosyayê ''$1î'' de {{PLURAL:$2|1 hem-kopya|$2 hem-kopyayî'}} esto.", "fileduplicatesearch-noresults": "Ebe namey \"$1\" ra dosya nêdiyayê.", - "specialpages": "Perrê hısusi", + "specialpages": "Perrê xısusiy", "specialpages-note-top": "Kıtabek", "specialpages-note": "* Pelê xasê normali.\n* Pelê xasê nımıtey.", "specialpages-group-maintenance": "Raporê pawıtışi", diff --git a/languages/i18n/egl.json b/languages/i18n/egl.json index 1d12d07fcc..e1efa5a049 100644 --- a/languages/i18n/egl.json +++ b/languages/i18n/egl.json @@ -14,6 +14,7 @@ "tog-hideminor": "Lōga 'l mudéfichi pió céchi int al j ûltmi mudéfichi.", "tog-hidepatrolled": "Lōga 'l mudéfichi verifichêdi int al j ûltmi mudéfichi", "tog-newpageshidepatrolled": "Lōga al pàgini verifichêdi da l'elèinch dal pàgini pió nōvi.", + "tog-hidecategorization": "Scònd al categoréi dal pàgini", "tog-extendwatchlist": "Fà vèder tót' al mudéfichi fât a i tgnû sòt ôc, mìa sōl l'ûltma.", "tog-usenewrc": "Unés al mudéfichi per pàgina int al j ûltmi mudéfichi e in quî tgnû sòt' ôc.", "tog-numberheadings": "Cûnta automâtica di tétol ed sesiòun.", @@ -24,6 +25,7 @@ "tog-watchdefault": "Zûnta al pàgini e i file mudifichê int i tgnû 'd ôc specêl.", "tog-watchmoves": "Zûnta al pàgini e i file spustê int i tgnû 'd ôc specêl.", "tog-watchdeletion": "Zûnta al pàgini e i file scanşlê int i tgnû 'd ôc specêl.", + "tog-watchuploads": "Zûnta i file nōv che câregh a quî che tègn adrē", "tog-watchrollback": "Zûta al pàgini in dóv' ó fât al ritōren a la pàgina 'd préma a i tgnû 'd ôc specêl", "tog-minordefault": "Sègna ògni mudéfica cme céca (sōl cme pre-stabilî)", "tog-previewontop": "Fà vèder còl ch' ò fât sōver la caşèla ed mudéfica e mìa sòta.", @@ -498,8 +500,6 @@ "passwordreset-emaildisabled": "In cla wiki ché è stê bluchê al funsiòun ed la pôsta eletrônica.", "passwordreset-username": "Nòm utèint:", "passwordreset-domain": "Proprietê:", - "passwordreset-capture": "Vōt vèder còl che dèinter int al mesâg ed pôsta eletrônica?", - "passwordreset-capture-help": "S' es sernés cla caşèla ché, l'indirés ed pôsta eletrônica (cun la cêva 'd ingrès pruvişôria), év vîn fâ vèder, d'ed là 'd èser spidî a l'utèint.", "passwordreset-email": "Indirés pôsta eletrônica", "passwordreset-emailtitle": "Particulêr ed l'utèint só {{SITENAME}}", "passwordreset-emailtext-ip": "Quelchidûn (prubabilmèint té, cun l'indirés IP $1) l'à dmandê de spidîregh 'na nōva cêva 'd ingrès per andêr dèinter a {{SITENAME}} ($4). {{PLURAL:$3|L'utèint inscrét| J utèint inscrét}} a sté indirés ed pôsta eletrônica în:\n \n$2 \n\n{{PLURAL:$3|Cla cêva 'd ingrès pruvişôria la scadrà| St' al cêvi 'd ingrès pruvişôri ché scadrân}} dôp {{PLURAL:$5|ûn dé|$5 dé}}. Ét duvrés andêr dèinter e sernîr 'na cêva 'd ingrès nōva adès. \n\nSe t'é mìa stê té a fêr la dmânda, o s' ét t'é ricurdê la cêva 'd ingrès uriginêla e an 't vō mia pió cambiêrla, ét pō scanşlêr cól mesâg ché e cuntinvêr a druvêr la tó cêva 'd ingrès vècia.", @@ -891,8 +891,6 @@ "saveprefs": "Sêlva", "restoreprefs": "Turnêr a mèter al j impustasiòun ed partèinsa (in tót al sesiòun)", "prefs-editing": "Caşèla 'd mudéfica", - "rows": "Rîghi", - "columns": "Clòuni:", "searchresultshead": "Sērca", "stub-threshold": "Pôrta per i colegamèint a j abòs ($1):", "stub-threshold-disabled": "Bluchê", @@ -970,9 +968,9 @@ "prefswarning-warning": "T'é fât dal mudéfichi al tō preferèinsi ch'în mìa stêdi salvêdi. S'ét vê fōra da cla pàgina ché sèinsa clichêr \"$1\" al preferèinsi a gnîran mìa arnuvêdi.", "prefs-tabs-navigation-hint": "Sugerimèint: è pusébil druvêr i tâst frècia a mansèina e a dréta per spustêres tr'al schēdi int l'elèinch dal schēdi.", "userrights": "Gestiòun di permès relatîv a j utèint", - "userrights-lookup-user": "Gestiòun di gróp utèint", + "userrights-lookup-user": "Sernîr 'n utèint", "userrights-user-editname": "Mèt dèinter al nòm utèint:", - "editusergroup": "Mudéfica i gróp {{GENDER:$1|utèint}}", + "editusergroup": "Mudéfica i gróp utèint.", "editinguser": "Mudéfica i dirét utèint ed j {{GENDER:$1|utèint}}[[User:$1|$1]] $2", "userrights-editusergroup": "Mudéfica gróp utèint", "saveusergroups": "Sêlva i gróp{{GENDER:$1|utèint}}", @@ -982,19 +980,16 @@ "userrights-reason": "Mutîv:", "userrights-no-interwiki": "An es gh'à mìa i permès necesâri per cambiêr i dirét ed j utèint in sém a êter sît.", "userrights-nodatabase": "Al databēş $1 al gh'é mìa o an n' mìa un databêş lochêl.", - "userrights-nologin": "Per dêr i dirét a j utèint l'é necesâri [[Special:UserLogin|fêr l'ingrès]] cme aministardōr.", - "userrights-notallowed": "An 't gh'ê mìa al permès per zuntêr o tōr via i permès utèint.", "userrights-changeable-col": "Gróp ch'es pōlen mudifichêr.", "userrights-unchangeable-col": "Gróp ch'an 's pōlen mìa mudifichêr.", "userrights-conflict": "Cuntrâst ed mudéfica di dirét utèint! Cuntròla e cunfērma al tó mudéfichi.", - "userrights-removed-self": "T'é tôt via i tō dirét. E dòunca, an 't prê pió andêr dèinter a cla pàgina ché.", "group": "Gróp:", "group-user": "Utèint", "group-autoconfirmed": "Utèint cunvalidê da per ló", "group-bot": "Bot", "group-sysop": "Aministradōr", "group-bureaucrat": "Funsionâri", - "group-suppress": "Oversight", + "group-suppress": "Soppressori", "group-all": "(tót)", "group-user-member": "{{GENDER:$1|utèint}}", "group-autoconfirmed-member": "{{GENDER:$1|utèint convalidê da per ló}}", @@ -1077,7 +1072,6 @@ "right-siteadmin": "Blōca e şblōca al databêş", "right-override-export-depth": "Pôrta fōra al pàgini cun insèm al pàgini coleghêdi per 'na larghèsa ed 5", "right-sendemail": "Spidés pôsta eletrônica a êter utèint", - "right-passwordreset": "A vèd i mesâg 'd arnōv ed la cêva 'ed ingrès", "right-managechangetags": "Fa e mèt in funsiòun/blôca al j [[Special:Tags|etichèti]]", "right-applychangetags": "Tâca dal [[Special:Tags|tichèti]] al tō mudéfichi", "right-changetags": "Zûta e tó via [[Special:Tags|tichèti]] precîşi só versiòun ónichi o vōş ed regéster", @@ -1103,11 +1097,11 @@ "action-upload_by_url": "carghêr cól file ché da 'n indirés URL", "action-writeapi": "drōva al j API in scritûra", "action-delete": "scanşlêr cla pàgina ché", - "action-deleterevision": "scanşlêr cla versiòun ché", - "action-deletedhistory": "guêrda la stòria scanşlêda de sté pàgina", + "action-deleterevision": "scanşlêr al versiòun", + "action-deletedhistory": "guêrda la stòria scanşlêda ed 'na pàgina", "action-browsearchive": "serchêr pàgini scanşlêdi", - "action-undelete": "tōr indrê cla pàgina ché", - "action-suppressrevision": "turnêr a vèder e mèter al mudéfichi lughêdi", + "action-undelete": "tōr indrê pàgini", + "action-suppressrevision": "turnêr a vèder e turnêr a mèter al versiòun lughêdi", "action-suppressionlog": "guardêr sté regéster privê", "action-block": "bluchê sté utèint in scritûra", "action-protect": "cambiêr i livē 'd prutesiòun per cla pàgina ché", @@ -1590,5 +1584,5 @@ "feedback-cancel": "Scanşela", "feedback-message": "Mesâg", "feedback-subject": "Argomèint:", - "searchsuggest-search": "Sèirca" + "searchsuggest-search": "Sērca dèinter ed {{SITENAME}}" } diff --git a/languages/i18n/el.json b/languages/i18n/el.json index b30ba0eaec..555b3a2e6a 100644 --- a/languages/i18n/el.json +++ b/languages/i18n/el.json @@ -668,7 +668,7 @@ "preview": "Προεπισκόπηση", "showpreview": "Εμφάνιση προεπισκόπησης", "showdiff": "Εμφάνιση αλλαγών", - "blankarticle": "Προειδοποίηση: Η σελίδα που δημιουργείτε είναι κενή.\nΕάν κάνετε κλικ στο κουμπί \"{{int:savearticle}}\" και πάλι, η σελίδα θα δημιουργηθεί χωρίς κανένα περιεχόμενο.", + "blankarticle": "Προειδοποίηση: Η σελίδα που πάτε να δημιουργήσετε είναι κενή.\nΕάν ξανακάνετε κλικ στο κουμπί «{{int:savearticle}}» η σελίδα θα δημιουργηθεί χωρίς περιεχόμενο.", "anoneditwarning": "Προειδοποίηση: Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα είναι ορατή δημόσια αν κάνετε κάποια επεξεργασία. Αν [$1 συνδεθείτε] ή [$2 δημιουργήσετε λογαριασμό], οι επεξεργασίες σας θα αποδοθούν στο όνομά χρήστη σας, μαζί με άλλα οφέλη.", "anonpreviewwarning": "''Δεν έχετε συνδεθεί. Η αποθήκευση θα καταγράψει την διεύθυνσή IP σας στο ιστορικό επεξεργασίας αυτής της σελίδας.''", "missingsummary": "'''Υπενθύμιση:''' Δεν έχετε συμπληρώσει τη σύνοψη επεξεργασίας. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς σύνοψη.", @@ -1312,6 +1312,9 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])", "recentchanges-legend-plusminus": "(±123)", "recentchanges-submit": "Προβολή", + "rcfilters-restore-default-filters": "Επαναφορά προεπιλεγμένων φίλτρων", + "rcfilters-clear-all-filters": "Εκκαθάριση όλων των φίλτρων", + "rcfilters-empty-filter": "Χωρίς ενεργά φίλτρα. Εμφανίζονται όλες οι συνεισφορές.", "rcnotefrom": "Παρακάτω {{PLURAL:$5|είναι η αλλαγή|είναι οι αλλαγές}} από $3, $4 (έως $1 που εμφανίζεται).", "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από τις $3 στις $2", "rcshowhideminor": "$1 μικρών τροποποιήσεων", @@ -1801,6 +1804,7 @@ "apisandbox-sending-request": "Αποστολή αιτήματος API...", "apisandbox-loading-results": "Λήψη αποτελεσμάτων API...", "apisandbox-request-url-label": "Αίτηση URL:", + "apisandbox-request-json-label": "Αίτημα JSON:", "apisandbox-request-time": "Χρόνος αιτήματος: {{PLURAL:$1|$1 ms}}", "booksources": "Πηγές βιβλίων", "booksources-search-legend": "Αναζήτηση για πηγές βιβλίων", @@ -1921,7 +1925,7 @@ "emailccsubject": "Αντίγραφο του μηνυματός σας στο $1: $2", "emailsent": "Το μήνυμα έχει σταλεί", "emailsenttext": "Το μήνυμά σας έχει σταλεί.", - "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|το χρήστη|τη χρήστρια}} $1 {{GENDER:$2|στο χρήστη|στη χρήστρια}} $2 μέσω της λειτουργίας «{{int:emailuser}}» στο {{SITENAME}}.", + "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|το χρήστη|τη χρήστρια}} $1 {{GENDER:$2|στο χρήστη|στη χρήστρια}} $2 μέσω της λειτουργίας «{{int:emailuser}}» στο {{SITENAME}}. Αν {{GENDER:$2|σας}} απαντήσετε σε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου, το e-mail {{GENDER:$2|σας}} θα αποσταλεί απευθείας {{GENDER:$1|στον|στην}} αρχικό αποστολέα, αποκαλύπτοντας τη διεύθυνση e-mail για {{GENDER:$2|σας}} σε {{GENDER:$1|αυτόν|αυτήν}}.", "usermessage-summary": "Φεύγετε από τις ειδοποιήσεις συστήματος.", "usermessage-editor": "Μηνύματα συστήματος", "usermessage-template": "MediaWiki:UserMessage", @@ -2051,7 +2055,7 @@ "protect-legend": "Επιβεβαίωση κλειδώματος", "protectcomment": "Αιτία:", "protectexpiry": "Λήξη", - "protect_expiry_invalid": "Ο χρόνος λήξης είναι άκυρος.", + "protect_expiry_invalid": "Ο χρόνος λήξης δεν είναι έγκυρος.", "protect_expiry_old": "Ο χρόνος λήξης αναφέρεται στο παρελθόν.", "protect-unchain-permissions": "Ξεκλείδωμα περαιτέρω επιλογών προστασίας", "protect-text": "Μπορείτε να δείτε και να αλλάξετε το επίπεδο προστασίας εδώ για τη σελίδα '''$1'''.", @@ -2268,7 +2272,7 @@ "block-log-flags-angry-autoblock": "ενισχυμένος αυτόματος αποκλεισμός ενεργοποιημένος", "block-log-flags-hiddenname": "όνομα χρήστη κρυμμένο", "range_block_disabled": "Η δυνατότητα του διαχειριστή να δημιουργεί περιοχές φραγής είναι απενεργοποιημένη.", - "ipb_expiry_invalid": "Άκυρος χρόνος λήξης", + "ipb_expiry_invalid": "Μη έγκυρος χρόνος λήξης", "ipb_expiry_old": "Ο χρόνος λήξης αναφέρεται στο παρελθόν.", "ipb_expiry_temp": "Οι κρυμμένες φραγές ονομάτων χρηστών πρέπει να είναι μόνιμες.", "ipb_hide_invalid": "Μη εφικτή καταστολή αυτού του λογαριασμού. Μπορεί να έχει περισσότερες από {{PLURAL:$1|μια επεξεργασία|$1 επεξεργασίες}}.", diff --git a/languages/i18n/en-gb.json b/languages/i18n/en-gb.json index 31bc41afc3..8957b4c992 100644 --- a/languages/i18n/en-gb.json +++ b/languages/i18n/en-gb.json @@ -25,7 +25,9 @@ "Lemondoge", "Paladox", "SamanthaNguyen", - "Usandaru555" + "Usandaru555", + "Aefgh39622", + "Anomie" ] }, "tog-underline": "Link underlining:", @@ -43,6 +45,7 @@ "tog-watchdefault": "Add pages and files I edit to my watchlist", "tog-watchmoves": "Add pages and files I move to my watchlist", "tog-watchdeletion": "Add pages and files I delete to my watchlist", + "tog-watchuploads": "Add new files I upload to my watchlist", "tog-watchrollback": "Add pages where I have performed a rollback to my watchlist", "tog-minordefault": "Mark all edits minor by default", "tog-previewontop": "Show preview before edit box", @@ -54,7 +57,7 @@ "tog-shownumberswatching": "Show the number of watching users", "tog-oldsig": "Your existing signature:", "tog-fancysig": "Treat signature as wikitext (without an automatic link)", - "tog-uselivepreview": "ක්‍රියාත්මකව අති පෙරහුරුවක් පෙන්වන්න", + "tog-uselivepreview": "Use live preview", "tog-forceeditsummary": "Prompt me when entering a blank edit summary", "tog-watchlisthideown": "Hide my edits from the watchlist", "tog-watchlisthidebots": "Hide bot edits from the watchlist", @@ -67,7 +70,7 @@ "tog-showhiddencats": "Show hidden categories", "tog-norollbackdiff": "Don't show diff after performing a rollback", "tog-useeditwarning": "Warn me when I leave an edit page with unsaved changes", - "tog-prefershttps": "Always use a secure connection when logged in", + "tog-prefershttps": "Always use a secure connection while logged in", "underline-always": "Always", "underline-never": "Never", "underline-default": "Skin or browser default", @@ -206,9 +209,9 @@ "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}", "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}", "protect": "Protect", - "protect_change": "ترميميو", + "protect_change": "change", "protectthispage": "Protect this page", - "unprotect": "تحفظ جي سطح بدلايو", + "unprotect": "Change protection", "unprotectthispage": "Change protection of this page", "newpage": "New page", "talkpage": "Discuss this page", @@ -227,7 +230,7 @@ "viewhelppage": "View help page", "categorypage": "View category page", "viewtalkpage": "View discussion", - "otherlanguages": "Muilla kielillä", + "otherlanguages": "In other languages", "redirectedfrom": "(Redirected from $1)", "redirectpagesub": "Redirect page", "redirectto": "Redirect to:", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 7370ceaccb..2db5f4c6fa 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -1095,6 +1095,7 @@ "username": "{{GENDER:$1|Username}}:", "prefs-memberingroups": "{{GENDER:$2|Member}} of {{PLURAL:$1|group|groups}}:", "prefs-memberingroups-type": "$1", + "group-membership-link-with-expiry": "$1 (until $2)", "prefs-registration": "Registration time:", "prefs-registration-date-time": "$1", "yourrealname": "Real name:", @@ -1141,8 +1142,8 @@ "editusergroup": "Load user groups", "editinguser": "Changing user rights of {{GENDER:$1|user}} [[User:$1|$1]] $2", "viewinguserrights": "Viewing user rights of {{GENDER:$1|user}} [[User:$1|$1]] $2", - "userrights-editusergroup": "Edit user groups", - "userrights-viewusergroup": "View user groups", + "userrights-editusergroup": "Edit {{GENDER:$1|user}} groups", + "userrights-viewusergroup": "View {{GENDER:$1|user}} groups", "saveusergroups": "Save {{GENDER:$1|user}} groups", "userrights-groupsmember": "Member of:", "userrights-groupsmember-auto": "Implicit member of:", @@ -1154,6 +1155,14 @@ "userrights-changeable-col": "Groups you can change", "userrights-unchangeable-col": "Groups you cannot change", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "Expires $1", + "userrights-expiry-none": "Does not expire", + "userrights-expiry": "Expires:", + "userrights-expiry-existing": "Existing expiration time: $3, $2", + "userrights-expiry-othertime": "Other time:", + "userrights-expiry-options": "1 day:1 day,1 week:1 week,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year", + "userrights-invalid-expiry": "The expiry time for group \"$1\" is invalid.", + "userrights-expiry-in-past": "The expiry time for group \"$1\" is in the past.", "userrights-conflict": "Conflict of user rights changes! Please review and confirm your changes.", "group": "Group:", "group-user": "Users", @@ -3972,6 +3981,7 @@ "newuserlog-autocreate-entry": "Account created automatically", "rightslogentry": "changed group membership for $1 from $2 to $3", "rightslogentry-autopromote": "was automatically promoted from $2 to $3", + "rightslogentry-temporary-group": "$1 (temporary, until $2)", "feedback-adding": "Adding feedback to page...", "feedback-back": "Back", "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].", diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json index 5eb0d21048..be9b811c58 100644 --- a/languages/i18n/eo.json +++ b/languages/i18n/eo.json @@ -50,7 +50,8 @@ "Orikrin1998", "Gamliel Fishkin", "Kastanoto", - "Rafaneta" + "Rafaneta", + "NMaia" ] }, "tog-underline": "Substrekado de ligiloj:", @@ -578,7 +579,7 @@ "botpasswords-label-delete": "Forigi", "botpasswords-label-resetpassword": "Rekomencigi la pasvorton", "botpasswords-label-grants": "Uzeblaj permesdonoj:", - "botpasswords-help-grants": "Rajtigiloj permesas aliron al rajtoj jam provizita al via uzantkonto. Ebligi rajtigilojn ĉi tie ne provizas aliron al ajnaj rajtoj ke via uzantkonto ne alie havus. Vidu la [[Special:MyLanguage/Special:ListGrants|tablo de rajtigiloj]] por pli da informo.", + "botpasswords-help-grants": "Rajtigiloj permesas aliron al rajtoj jam provizita al via uzantkonto. Ebligi rajtigilojn ĉi tie ne provizas aliron al ajnaj rajtoj ke via uzantkonto ne alie havus. Vidu la [[Special:ListGrants|tablo de rajtigiloj]] por pli da informo.", "botpasswords-label-grants-column": "Permeso donita", "botpasswords-bad-appid": "La robota nomo \"$1\" estas malvalida.", "botpasswords-insert-failed": "Aldono de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi jam estis aldonita?", @@ -1333,8 +1334,11 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])", "recentchanges-submit": "Montri", "rcfilters-activefilters": "Aktivaj filtriloj", + "rcfilters-restore-default-filters": "Restarigi defaŭltajn filtrilojn", + "rcfilters-clear-all-filters": "Nuligi ĉiujn filtrilojn", "rcfilters-search-placeholder": "Filtri lastajn ŝanĝojn (vi povas elekti aŭ ekskribi)", "rcfilters-invalid-filter": "Nevalida filtrilo", + "rcfilters-empty-filter": "Ekzistas neniuj aktivaj filtriloj. Ĉiuj kontribuaĵoj estas montritaj.", "rcfilters-filterlist-title": "Filtriloj", "rcfilters-filterlist-noresults": "Neniuj filtriloj troviĝis", "rcfilters-filtergroup-registration": "Registrado de uzanto", @@ -1359,6 +1363,20 @@ "rcfilters-filter-bots-description": "Redaktoj farita de aŭtomatigitaj iloj.", "rcfilters-filter-humans-label": "Homa (ne robota)", "rcfilters-filter-humans-description": "Redaktoj farita de homaj redaktantoj.", + "rcfilters-filtergroup-significance": "Signifo", + "rcfilters-filter-minor-label": "Etaj redaktoj", + "rcfilters-filter-minor-description": "Redaktoj kiujn la aŭtoro markis kiel \"redakteto\".", + "rcfilters-filter-major-label": "Redaktoj kiujn la aŭtoro ne markis kiel \"redakteto\".", + "rcfilters-filter-major-description": "Redaktoj kiujn la aŭtoro ne markis kiel \"redakteto\".", + "rcfilters-filtergroup-changetype": "Tipo de ŝanĝo", + "rcfilters-filter-pageedits-label": "Redaktoj de paĝoj", + "rcfilters-filter-pageedits-description": "Redaktoj al vikia enhavo, diskutoj, kategoriaj priskriboj...", + "rcfilters-filter-newpages-label": "Kreaĵoj de paĝo", + "rcfilters-filter-newpages-description": "Redaktoj kiuj faras novajn paĝojn.", + "rcfilters-filter-categorization-label": "Ŝanĝoj de kategorioj", + "rcfilters-filter-categorization-description": "Registroj de paĝoj aldonitaj aŭ forigitaj de kategorioj", + "rcfilters-filter-logactions-label": "Registritaj agoj", + "rcfilters-filter-logactions-description": "Administraciaj agoj, kontaj kreoj, paĝaj forigoj, alŝutoj....", "rcnotefrom": "Malsupre estas la {{PLURAL:$5|ŝanĝo|ŝanĝoj}} ekde $3, $4 (montrante ĝis $1).", "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"", "rcshowhideminor": "$1 etajn redaktojn", @@ -1768,6 +1786,7 @@ "uncategorizedcategories": "Neenkategoriitaj kategorioj", "uncategorizedimages": "Neenkategoriigitaj dosieroj", "uncategorizedtemplates": "Neenkategoriigitaj ŝablonoj", + "uncategorized-categories-exceptionlist": "# Enhavas liston de kategorioj, kiuj ne devus esti menciitaj en Specialaĵo:UncategorizedCategories. Unu po linio, komencante per \"*\". Linioj komencantaj kun alia karaktero (inkluzivante blankspaco) estas ignorata. Uzu \"#\" por rimarkoj.", "unusedcategories": "Neuzitaj kategorioj", "unusedimages": "Neuzataj bildoj", "wantedcategories": "Dezirataj kategorioj", @@ -2008,7 +2027,7 @@ "emailccsubject": "Kopio de via mesaĝo al $1: $2", "emailsent": "Retmesaĝo sendita", "emailsenttext": "Via retmesaĝo estas sendita.", - "emailuserfooter": "Ĉi tiu retpoŝtmesaĝo estis {{GENDER:$1|sendita}} de $1 al {{GENDER:$2|$2}} per la funkcio \"{{int:emailuser}}\" ĉe {{SITENAME}}. {{GENDER:$2|Via}} retpoŝto estos sendita rekte al la {{{{GENDER:$1|}}|originala sendinto}}, rivelanta {{GENDER:$2|via}} retpoŝta adreso al {{GENDER:$1|ili}}.", + "emailuserfooter": "Ĉi tiu retpoŝtmesaĝo estis {{GENDER:$1|sendita}} de $1 al {{GENDER:$2|$2}} per la funkcio \"{{int:emailuser}}\" ĉe {{SITENAME}}. Se {{GENDER:$2|vi}} respondas al ĉi tiu retpoŝto, {{GENDER:$2|via}} retpoŝto estos sendita rekte al la {{{{GENDER:$1|}}|originala sendinto}}, rivelanta {{GENDER:$2|via}} retpoŝta adreso al {{GENDER:$1|ili}}.", "usermessage-summary": "Lasanta sisteman mesaĝon.", "usermessage-editor": "Mesaĝanto de sistemo", "watchlist": "Mia atentaro", @@ -3865,7 +3884,7 @@ "usercssispublic": "Bonvolu noti: subpaĝoj en CSS ne enhavu konfidenciajn datumojn ĉar ili estas videblaj por aliaj uzantoj.", "restrictionsfield-badip": "Malvalida IP-adreso de la intervalo: $1", "restrictionsfield-label": "Permesita IP-intervalo:", - "restrictionsfield-help": "Unu IP-adreso aŭ CIDR-intervalo per linio. Por permesigi ĉion, uzu
0.0.0.0/0
::/0", + "restrictionsfield-help": "Unu IP-adreso aŭ CIDR-intervalo per linio. Por permesigi ĉion, uzu:
0.0.0.0/0\n::/0
", "revid": "revizio $1", "pageid": "Identigilo de paĝo $1" } diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 7b76946781..03ac0b5afc 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -1184,6 +1184,7 @@ "youremail": "Correo electrónico:", "username": "{{GENDER:$1|Nombre de usuario|Nombre de usuaria}}:", "prefs-memberingroups": "{{GENDER:$2|Miembro}} {{PLURAL:$1|del grupo|de los grupos}}:", + "group-membership-link-with-expiry": "$1 (hasta $2)", "prefs-registration": "Fecha y hora de registro:", "yourrealname": "Nombre real:", "yourlanguage": "Idioma:", @@ -1239,6 +1240,7 @@ "userrights-nodatabase": "La base de datos $1 no existe o no es local.", "userrights-changeable-col": "Grupos que puedes cambiar", "userrights-unchangeable-col": "Grupos que no puedes cambiar", + "userrights-expiry-options": "1 día:1 day,1 semana:1 week,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year", "userrights-conflict": "¡Conflicto de cambio de los permisos de usuario! Por favor, revisa y confirma tus cambios.", "group": "Grupo:", "group-user": "Usuarios", @@ -1992,6 +1994,8 @@ "apisandbox-sending-request": "Enviando pedido a la API...", "apisandbox-loading-results": "Recibiendo resultados de la API...", "apisandbox-results-error": "Ocurrió un error durante la carga de la respuesta a la consulta API: $1", + "apisandbox-request-selectformat-label": "Mostrar los datos de la petición como:", + "apisandbox-request-format-url-label": "Cadena de consulta de la URL", "apisandbox-request-url-label": "URL solicitante:", "apisandbox-request-time": "Tiempo de solicitud: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Corrige el token y vuelve a enviar", @@ -2134,7 +2138,7 @@ "emailccsubject": "Copia de tu mensaje a $1: $2", "emailsent": "Correo electrónico enviado", "emailsenttext": "Se ha enviado tu mensaje de correo electrónico.", - "emailuserfooter": "Este correo electrónico fue {{GENDER:$1|enviado}} por $1 a {{GENDER:$2|$2}} a través de la función «{{int:emailuser}}» en {{SITENAME}}. {{GENDER:$2|Tu}} correo electrónico se enviará directamente {{GENDER:$1|al emisor|a la emisora}} original, y {{GENDER:$1|le}} revelará {{GENDER:$2|tu}} dirección de correo electrónico.", + "emailuserfooter": "Este correo electrónico fue {{GENDER:$1|enviado}} por $1 a {{GENDER:$2|$2}} a través de la función «{{int:emailuser}}» en {{SITENAME}}. Si {{GENDER:$2|respondes}}, tu correo electrónico se enviará directamente {{GENDER:$1|al emisor|a la emisora}} original, y {{GENDER:$1|le}} revelará {{GENDER:$2|tu}} dirección de correo electrónico.", "usermessage-summary": "Dejando un mensaje de sistema.", "usermessage-editor": "Mensajero del sistema", "watchlist": "Lista de seguimiento", @@ -3489,7 +3493,7 @@ "tags-deactivate": "desactivar", "tags-hitcount": "$1 {{PLURAL:$1|cambio|cambios}}", "tags-manage-no-permission": "No tienes permiso para gestionar las etiquetas de cambios.", - "tags-manage-blocked": "No puedes gestionar etiquetas de cambio mientras estés {{GÉNERO:$1|bloqueado|bloqueada}}.", + "tags-manage-blocked": "No puedes gestionar etiquetas de cambio mientras estés {{GENDER:$1|bloqueado|bloqueada}}.", "tags-create-heading": "Crear una etiqueta", "tags-create-explanation": "De manera predeterminada, las etiquetas nuevas estarán disponibles para su uso por usuarios y bots.", "tags-create-tag-name": "Nombre de la etiqueta:", @@ -3674,6 +3678,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|actualizó}} etiquetas de la entrada del registro $5 de la página $3 ({{PLURAL:$7|agregó}} $6; {{PLURAL:$9|eliminó}} $8)", "rightsnone": "(ninguno)", "revdelete-summary": "resumen de edición", + "rightslogentry-temporary-group": "$1 (provisional, hasta $2)", "feedback-adding": "Añadiendo comentarios a la página...", "feedback-back": "Volver", "feedback-bugcheck": "¡Perfecto! Únicamente comprueba que no sea un [$1 fallo conocido].", diff --git a/languages/i18n/et.json b/languages/i18n/et.json index 0765249679..c93e9f901f 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -1174,6 +1174,7 @@ "right-applychangetags": "Rakendada [[Special:Tags|märgiseid]] enda muudatuste suhtes", "right-changetags": "Lisada ja eemaldada käsitsi rakendatavaid [[Special:Tags|märgiseid]] üksikute redaktsioonide ja logisissekannete juures", "right-deletechangetags": "Kustutada andmebaasist [[Special:Tags|märgiseid]]", + "grant-generic": "Volituse \"$1\" õiguste komplekt", "grant-group-page-interaction": "Interaktsioon lehekülgedega", "grant-group-file-interaction": "Interaktsioon meediafailidega", "grant-group-watchlist-interaction": "Interaktsioon sinu jälgimisloendiga", @@ -1181,6 +1182,7 @@ "grant-group-high-volume": "Suuremahuline tegevus", "grant-group-customization": "Kohandamine ja eelistused", "grant-group-administration": "Administraatori toimingud", + "grant-group-private-information": "Juurdepääs enda eraandmetele", "grant-group-other": "Mitmesugused toimingud", "grant-blockusers": "Kasutajate blokeerimine ja blokeeringute eemaldamine", "grant-createaccount": "Kontode loomine", @@ -1195,6 +1197,7 @@ "grant-highvolume": "Suuremahuline redigeerimine", "grant-oversight": "Kasutajate peitmine ja redaktsioonide varjamine", "grant-patrol": "Lehekülgede muudatuste kontroll", + "grant-privateinfo": "Juurdepääs erateabele", "grant-protect": "Lehekülgede kaitsmine ja kaitse eemaldamine", "grant-rollback": "Lehekülgede muudatuste tühistamine", "grant-sendemail": "Kasutajatele e-kirjade saatmine", @@ -1203,6 +1206,7 @@ "grant-basic": "Põhiõigused", "grant-viewdeleted": "Kustutatud failide ja lehekülgede vaatamine", "grant-viewmywatchlist": "Oma jälgimisloendi vaatamine", + "grant-viewrestrictedlogs": "Pääsupiiranguga andmete vaatamine", "newuserlogpage": "Konto loomise logi", "newuserlogpagetext": "Siin on logitud kasutajate registreerimine.", "rightslog": "Kasutajaõiguste logi", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index aba144ab7c..f51c6ede9d 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -920,7 +920,7 @@ "prefs-help-recentchangescount": "Honek azken aldaketak, orrialdeen historiak eta logak barne-biltzen ditu.", "prefs-help-watchlist-token2": "Hau da zure jarraipen zerrendako web jarioaren giltza sekretua.\nEzagutzen duen orok zure jarraipen zerrenda irakurtzeko aukera izango du, ez partekatu.\n[[Special:ResetTokens|Klik egin hemen berrezarri behar baduzu]]", "savedprefs": "Zure hobespenak gorde egin dira.", - "savedrights": "{{GENDER:$1|$1}} erabiltzailearen eskubideak gorde dira.", + "savedrights": "{{GENDER:$1|$1}} erabiltzailearen taldeak gorde dira.", "timezonelegend": "Ordu-eremua:", "localtime": "Ordu lokala:", "timezoneuseserverdefault": "Erabili lehenetsitako wikia ($1)", @@ -1162,6 +1162,10 @@ "recentchanges-legend-heading": "Azalpenak:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ikus, gainera, [[Special:NewPages|orri berrien zerrenda]])", "recentchanges-submit": "Erakutsi", + "rcfilters-filterlist-title": "Iragazkiak", + "rcfilters-filtergroup-authorship": "Edizioaren egiletza", + "rcfilters-filter-bots-label": "Bot", + "rcfilters-filter-minor-label": "Aldaketa txikiak", "rcnotefrom": "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: $2 (gehienez $1 erakusten dira).", "rclistfrom": "Erakutsi $3 $2 ondorengo aldaketa berriak", "rcshowhideminor": "$1 aldaketa txikiak", @@ -1588,6 +1592,8 @@ "apisandbox-dynamic-parameters-add-placeholder": "Parametroaren izena", "apisandbox-dynamic-error-exists": "$1 parametro izena dagoeneko existitzen da", "apisandbox-results": "Emaitzak", + "apisandbox-continue": "Jarraitu", + "apisandbox-continue-clear": "Garbitu", "booksources": "Iturri liburuak", "booksources-search-legend": "Liburuen bilaketa", "booksources-search": "Bilatu", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index df0c8a72db..cb8f742792 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -942,7 +942,7 @@ "last": "diff", "page_first": "première", "page_last": "dernière", - "histlegend": "Diff de sélection : cochez les boîtes radio des versions à comparer et appuyez sur entrée ou sur le bouton en bas.
\nLégende: ({{int:cur}}) = différence avec la dernière version, ({{int:last}}) = différence avec la précédente version, {{int:minoreditletter}} = modification mineure.", + "histlegend": "Sélection du diff : cochez les boutons radio des versions à comparer et appuyez sur entrée ou sur le bouton en bas.
\nLégende : ({{int:cur}}) = différence avec la dernière version, ({{int:last}}) = différence avec la version précédente, {{int:minoreditletter}} = modification mineure.", "history-fieldset-title": "Naviguer dans l’historique", "history-show-deleted": "Supprimés seulement", "histfirst": "les plus anciennes", @@ -1190,6 +1190,7 @@ "youremail": "Courriel :", "username": "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}} :", "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}} :", + "group-membership-link-with-expiry": "$1 (jusqu'à $2)", "prefs-registration": "Date d'inscription :", "yourrealname": "Nom réel :", "yourlanguage": "Langue :", @@ -1247,6 +1248,14 @@ "userrights-changeable-col": "Les groupes que vous pouvez modifier", "userrights-unchangeable-col": "Les groupes que vous ne pouvez pas modifier", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "Expire le $1", + "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-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.", "userrights-conflict": "Conflit de modification des droits utilisateur ! Veuillez relire et confirmer vos modifications.", "group": "Groupe :", "group-user": "Utilisateurs", @@ -2004,7 +2013,10 @@ "apisandbox-sending-request": "Envoi de la requête à l'API...", "apisandbox-loading-results": "Réception des résultats de l'API...", "apisandbox-results-error": "Une erreur s'est produite lors du chargement de la réponse à la requête de l'API: $1.", + "apisandbox-request-selectformat-label": "Afficher les données de la requête comme :", + "apisandbox-request-format-url-label": "Chaîne de requête de l’URL", "apisandbox-request-url-label": "Requête URL :", + "apisandbox-request-json-label": "Demander du JSON :", "apisandbox-request-time": "Durée de la demande: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Corrigez le jeton et renvoyez", "apisandbox-results-fixtoken-fail": "Impossible de récupérer le jeton \"$1\"", @@ -2147,7 +2159,7 @@ "emailccsubject": "Copie de votre message à $1 : $2", "emailsent": "Courriel envoyé", "emailsenttext": "Votre message a été envoyé par courriel.", - "emailuserfooter": "Ce courriel a été {{GENDER:$1|envoyé}} par « $1 » à « {{GENDER:$2|$2}} » par la fonction « {{int:emailuser}} » de {{SITENAME}}. {{GENDER:$2|Votre}} courriel sera envoyé directement à l'{{GENDER:$1|émetteur initial}}, en {{GENDER:$1|lui}} mentionnant {{GENDER:$2|votre}} adresse courriel .", + "emailuserfooter": "Ce courriel a été {{GENDER:$1|envoyé}} par « $1 » à « {{GENDER:$2|$2}} » par la fonction « {{int:emailuser}} » de {{SITENAME}}. Si {{GENDER:$2|vous}} répondez à ce courriel, {{GENDER:$2|votre}} courriel sera envoyé directement à l’{{GENDER:$1|émetteur initial}}, en {{GENDER:$1|lui}} mentionnant {{GENDER:$2|votre}} adresse courriel .", "usermessage-summary": "Laisser un message système.", "usermessage-editor": "Messager du système", "watchlist": "Liste de suivi", @@ -3769,6 +3781,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|a mis à jour}} les balises de l’entrée de journal $5 de la page $3 ($6 {{PLURAL:$7|ajoutée|ajoutées}} ; $8 {{PLURAL:$9|supprimée|supprimées}})", "rightsnone": "(aucun)", "revdelete-summary": "résumé de modification", + "rightslogentry-temporary-group": "$1 (temporaire, jusqu'au $2)", "feedback-adding": "Ajout de vos commentaires à la page...", "feedback-back": "Retour", "feedback-bugcheck": "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].", diff --git a/languages/i18n/frp.json b/languages/i18n/frp.json index 006492e5f6..f2eaec550a 100644 --- a/languages/i18n/frp.json +++ b/languages/i18n/frp.json @@ -554,8 +554,6 @@ "passwordreset-emaildisabled": "Les fonccionalitâts de mèssageria èlèctronica sont étâyes dèsactivâyes sur cél vouiqui.", "passwordreset-username": "Nom d’utilisator :", "passwordreset-domain": "Domêno :", - "passwordreset-capture": "Vos voléd vêre lo mèssâjo rèsultent ?", - "passwordreset-capture-help": "Se vos pouentâd cela câsa, lo mèssâjo (avouéc lo contresegno temporèro) vos serat montrâ quand serat mandâ a l’utilisator.", "passwordreset-email": "Adrèce èlèctronica :", "passwordreset-emailtitle": "Dètalys du comptio dessus {{SITENAME}}", "passwordreset-emailtext-ip": "Yon (de sûr vos, avouéc l’adrèce IP $1) at demandâ na remês’a zérô de voutron\ncontresegno por {{SITENAME}} ($4). {{PLURAL:$3|Ceti comptio utilisator est associyê|Cetos comptios utilisators sont associyês}}\na cel’adrèce èlèctronica :\n\n$2\n\n{{PLURAL:$3|Cél contresegno temporèro èxpirerat|Celos contresegnos temporèros èxpireront}} dens {{PLURAL:$5|un jorn|$5 jorns}}.\nOra vos vos dête branchiér et pués chouèsir un contresegno novél. Se cela demanda vint pas de vos\nou ben se vos vos éte rapelâ de voutron contresegno originâl et que vos en voléd pas més changiér,\nvos pouede ignorar cél mèssâjo et continuar a empleyér voutron viely contresegno.", @@ -967,8 +965,6 @@ "saveprefs": "Encartar", "restoreprefs": "Rètablir tota la configuracion per dèfôt (dedens totes les sèccions)", "prefs-editing": "Changement", - "rows": "Renches :", - "columns": "Colones :", "searchresultshead": "Rechèrche", "stub-threshold": "Lendâr por lo formatâjo des lims de vers los començons ($1) :", "stub-threshold-sample-link": "ègzemplo", @@ -1060,12 +1056,9 @@ "userrights-reason": "Rêson :", "userrights-no-interwiki": "Vos éd pas la pèrmission de changiér de drêts d’utilisator sur d’ôtros vouiquis.", "userrights-nodatabase": "La bâsa de balyês « $1 » ègziste pas ou ben est pas locâla.", - "userrights-nologin": "Vos vos dête [[Special:UserLogin|branchiér]] avouéc un comptio d’administrator por balyér de drêts d’utilisator.", - "userrights-notallowed": "Vos éd pas la pèrmission de balyér enlevar de drêts d’utilisator.", "userrights-changeable-col": "Les tropes que vos pouede changiér", "userrights-unchangeable-col": "Les tropes que vos pouede pas changiér", "userrights-conflict": "Disputa de changement de drêts d’utilisator ! Se vos plét, controlâd et pués confirmâd voutros changements.", - "userrights-removed-self": "Vos éd enlevâ los voutros drêts. Cen fât que vos pouede pas més arrevar a cela pâge.", "group": "Tropa :", "group-user": "Utilisators", "group-autoconfirmed": "Utilisators ôtoconfirmâs", @@ -1156,7 +1149,6 @@ "right-siteadmin": "Cotar et dècotar la bâsa de balyês", "right-override-export-depth": "Èxportar les pâges avouéc les pâges liyêes tant qu’a na provondior de 5 nivéls", "right-sendemail": "Mandar un mèssâjo ux ôtros utilisators", - "right-passwordreset": "Vêre los mèssâjos de remês’a zérô des contresegnos", "right-managechangetags": "Fâre et suprimar de [[Special:Tags|balises]] de la bâsa de balyês", "right-applychangetags": "Aplicar les [[Special:Tags|balises]] avouéc los sins changements", "right-changetags": "Apondre et enlevar de façon arbitrèra de [[Special:Tags|balises]] sur des vèrsions endividuèles et des entrês de jornâl", @@ -3337,43 +3329,13 @@ "feedback-subject": "Sujèt :", "feedback-submit": "Sometre", "feedback-thanks": "Grant-marci ! Voutron avis at étâ postâ sur la pâge « [$2 $1] ».", - "searchsuggest-search": "Rechèrchiér", + "searchsuggest-search": "Rechèrchiér dessus {{SITENAME}}", "searchsuggest-containing": "que contint...", - "api-error-badaccess-groups": "Vos éte pas ôtorisâ a tèlèchargiér des fichiérs sur ceti vouiqui.", "api-error-badtoken": "Èrror de dedens : crouyo « jeton ».", - "api-error-copyuploaddisabled": "Los tèlèchargements per URL sont dèsactivâs sur cél sèrvor.", - "api-error-duplicate": "Y at {{PLURAL:$1|un ôtro fichiér|d’ôtros fichiérs}} ja sur lo seto avouéc lo mémo contegnu.", - "api-error-duplicate-archive": "Y avéve {{PLURAL:$1|un ôtro fichiér|d’ôtros fichiérs}} ja sur lo seto avouéc lo mémo contegnu, mas {{PLURAL:$1|il at étâ suprimâ|ils ont étâ suprimâs}}.", - "api-error-empty-file": "Lo fichiér que vos éd somês ére vouedo.", "api-error-emptypage": "La crèacion de pâges novèles vouedes est pas ôtorisâ.", - "api-error-fetchfileerror": "Èrror de dedens : quârque-ren s’est mâl passâ pendent la rècupèracion du fichiér.", - "api-error-file-too-large": "Lo fichiér que vos éd somês ére trop grant.", - "api-error-filename-tooshort": "Lo nom du fichiér est trop côrt.", - "api-error-filetype-banned": "Cél tipo de fichiér est dèfendu.", - "api-error-filetype-banned-type": "$1 {{PLURAL:$4|est pas un tipo de fichiér ôtorisâ|sont pas des tipos de fichiérs ôtorisâs}}. {{PLURAL:$3|Lo tipo de fichiér ôtorisâ est|Los tipos de fichiérs ôtorisâs sont}} $2.", - "api-error-filetype-missing": "L’èxtension du fichiér est manquenta.", - "api-error-hookaborted": "Lo changement que vos éd tâchiê de fâre est étâ anulâ per n’èxtension.", - "api-error-http": "Èrror de dedens : sè pôt pas branchiér u sèrvor.", - "api-error-illegal-filename": "Lo nom du fichiér est pas ôtorisâ.", - "api-error-internal-error": "Èrror de dedens : quârque-ren s’est mâl passâ pendent lo trètament de voutron tèlèchargement sur lo vouiqui.", - "api-error-invalid-file-key": "Èrror de dedens : gins de fichiér trovâ dens lo stocâjo temporèro.", - "api-error-missingparam": "Èrror de dedens : manque des paramètres dens la requéta.", - "api-error-missingresult": "Èrror de dedens : nos ens pas possu dètèrmenar se la copia avéve reussia.", - "api-error-mustbeloggedin": "Vos dête étre branchiê por tèlèchargiér des fichiérs.", - "api-error-mustbeposted": "Èrror de dedens : la requéta at fôta d’HTTP POST.", - "api-error-noimageinfo": "Lo tèlèchargement at reussi, mas lo sèrvor at pas balyê d’enformacions sur lo fichiér.", - "api-error-nomodule": "Èrror de dedens : gins de modulo de tèlèchargement dèfeni.", - "api-error-ok-but-empty": "Èrror de dedens : lo sèrvor at pas rèpondu.", - "api-error-overwrite": "Ècllafar un fichiér ègzistent est pas ôtorisâ.", "api-error-stashfailed": "Èrror de dedens : lo sèrvor at pas possu encartar lo fichiér temporèro.", - "api-error-timeout": "Lo sèrvor at pas rèpondu dens lo dèlê atendu.", - "api-error-unclassified": "Una èrror encognua est arrevâ", - "api-error-unknown-code": "Èrror encognua : « $1 ».", - "api-error-unknown-error": "Èrror de dedens : quârque-ren s’est mâl passâ pendent lo tèlèchargement de voutron fichiér.", "api-error-unknown-warning": "Avèrtissement encognu : $1", "api-error-unknownerror": "Èrror encognua : « $1 ».", - "api-error-uploaddisabled": "Lo tèlèchargement est dèsactivâ sur ceti vouiqui.", - "api-error-verification-error": "Cél fichiér pôt étre corrompu, ou ben son èxtension est fôssa.", "duration-seconds": "$1 second{{PLURAL:$1|a|es}}", "duration-minutes": "$1 menut{{PLURAL:$1|a|es}}", "duration-hours": "$1 hor{{PLURAL:$1|a|es}}", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index 17ecd13425..489f99ab08 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -23,7 +23,8 @@ "Macofe", "Banjo", "Josep Maria Roca Peña", - "Luan" + "Luan", + "Hamilton Abreu" ] }, "tog-underline": "Subliñar as ligazóns:", @@ -1051,6 +1052,7 @@ "youremail": "Correo electrónico:", "username": "Nome de {{GENDER:$1|usuario|usuaria}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:", + "group-membership-link-with-expiry": "$1 (ata $2)", "prefs-registration": "Data e hora de rexistro:", "yourrealname": "Nome real:", "yourlanguage": "Lingua:", @@ -1106,6 +1108,14 @@ "userrights-nodatabase": "A base de datos \"$1\" non existe ou non é local.", "userrights-changeable-col": "Os grupos que pode cambiar", "userrights-unchangeable-col": "Os grupos que non pode cambiar", + "userrights-expiry-current": "Caduca o $1", + "userrights-expiry-none": "Non caduca", + "userrights-expiry": "Caduca:", + "userrights-expiry-existing": "Período de caducidade actual: $2 ás $3", + "userrights-expiry-othertime": "Outro tempoː", + "userrights-expiry-options": "1 día:1 día,1 semana:1 semana,1 mes:1 mes,3 meses:3 meses,6 meses:6 meses,1 ano:1 ano", + "userrights-invalid-expiry": "O tempo de caducidade para o grupo \"$1\" non é válido.", + "userrights-expiry-in-past": "O tempo de caducidade para o grupo \"$1\" está no pasado.", "userrights-conflict": "Hai un conflito na modificación dos dereitos de usuario! Por favor, revíseo e confirme os seus cambios.", "group": "Grupo:", "group-user": "Usuarios", @@ -1307,29 +1317,40 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Mostrar", "rcfilters-activefilters": "Filtros activos", + "rcfilters-restore-default-filters": "Restaurar os filtros por defecto", + "rcfilters-clear-all-filters": "Borrar todos os filtros", "rcfilters-search-placeholder": "Filtrar os cambios recentes (ollar ou comezar a escribir)", "rcfilters-invalid-filter": "Filtro no válido", + "rcfilters-empty-filter": "Non hai filtros activos. Móstranse tódalas contribucións.", "rcfilters-filterlist-title": "Filtros", "rcfilters-filterlist-noresults": "Non se atoparon filtros", + "rcfilters-filtergroup-registration": "Rexistro de usuario", "rcfilters-filter-registered-label": "Rexistrado", + "rcfilters-filter-registered-description": "Editores autenticados.", "rcfilters-filter-unregistered-label": "Non rexistrado", + "rcfilters-filter-unregistered-description": "Editores que non están autenticados.", "rcfilters-filtergroup-authorship": "Editar autoría", "rcfilters-filter-editsbyself-label": "As súas propias edicións", "rcfilters-filter-editsbyself-description": "Edicións súas.", "rcfilters-filter-editsbyother-label": "Edicións doutros.", - "rcfilters-filter-editsbyother-description": "Edicións creadas por outros usuarios.", - "rcfilters-filtergroup-userExpLevel": "Nivel de experiencia de usuario", + "rcfilters-filter-editsbyother-description": "Edicións creadas por outros usuarios (non por vostede).", + "rcfilters-filtergroup-userExpLevel": "Nivel de experiencia (só para usuarios rexistrados)", "rcfilters-filter-userExpLevel-newcomer-label": "Chegados recentemente", - "rcfilters-filter-userExpLevel-newcomer-description": "Editores moi novosː menos de 10 edicións e 4 días de actividade.", + "rcfilters-filter-userExpLevel-newcomer-description": "Menos de 10 edicións e 4 días de actividade.", "rcfilters-filter-userExpLevel-learner-label": "Aprendices", - "rcfilters-filter-userExpLevel-learner-description": "Máis días de actividade e edicións que 'novatos' pero menos que 'usuarios experimentados'.", + "rcfilters-filter-userExpLevel-learner-description": "Máis días de actividade e edicións que \"novatos\" pero menos que \"usuarios experimentados\".", "rcfilters-filter-userExpLevel-experienced-label": "Usuarios experimentados", "rcfilters-filter-userExpLevel-experienced-description": "Máis de 30 días de actividade e 500 edicións.", + "rcfilters-filtergroup-automated": "Contribucións automatizadas", "rcfilters-filter-bots-label": "Bot", + "rcfilters-filter-bots-description": "Edicións realizadas por ferramentas automatizadas.", "rcfilters-filter-humans-label": "Humano (non bot)", + "rcfilters-filter-humans-description": "Edicións realizadas por editores humanos.", "rcfilters-filter-minor-label": "Edicións menores", "rcfilters-filter-minor-description": "Edicións que o autor etiquetou como menores.", + "rcfilters-filter-major-label": "Edicións non menores", "rcfilters-filtergroup-changetype": "Tipo de cambio", + "rcfilters-filter-pageedits-label": "Edicións de páxinas", "rcnotefrom": "A continuación {{PLURAL:$5|móstrase o cambio feito|móstranse os cambios feitos}} desde o $3 ás $4 (móstranse $1 como máximo).", "rclistfrom": "Mostrar os cambios novos desde o $3 ás $2", "rcshowhideminor": "$1 as edicións pequenas", @@ -3510,6 +3531,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|actualizou}} etiquetas da entrada do rexistro $5 da páxina $3 ({{PLURAL:$7|engadiu}} $6; {{PLURAL:$9|eliminou}} $8)", "rightsnone": "(ningún)", "revdelete-summary": "o resumo de edición", + "rightslogentry-temporary-group": "$1 (temporal, ata $2)", "feedback-adding": "Enviando os comentarios...", "feedback-back": "Volver", "feedback-bugcheck": "Perfecto! Comprobe que aínda non está entre os [$1 erros coñecidos].", diff --git a/languages/i18n/gom-latn.json b/languages/i18n/gom-latn.json index a3d9b8377f..e52e9d45dd 100644 --- a/languages/i18n/gom-latn.json +++ b/languages/i18n/gom-latn.json @@ -17,7 +17,7 @@ "tog-previewonfirst": "Poileach bodolacher zolok dakhoi", "tog-enotifwatchlistpages": "Mhojea sadurvollerintlem pan vo fail bodol'li zalear mhaka email dhadd", "tog-shownumberswatching": "Nodor dovorpi vangdianche sonkhya dakhoi", - "tog-oldsig": "Sodheachi soy:", + "tog-oldsig": "Tujea sod'dheachi soy:", "tog-uselivepreview": "Boroitastana zolok dahkoi", "tog-watchlisthideown": "Sadurvollerint mhojeo bodlopam lipoi", "tog-watchlisthidebots": "Sadurvollerint robotani kel'lim bodlopam lipoi", @@ -107,7 +107,7 @@ "newwindow": "(novea zonelant uktem zata)", "cancel": "Rod'd kor", "moredotdotdot": "Anik...", - "morenotlisted": "Hi suchi purn na", + "morenotlisted": "Hi suchi purn nasonk xekta.", "mypage": "Pan", "mytalk": "Bhasabhas", "navigation": "Dixa-niontronn", @@ -350,7 +350,7 @@ "passwordreset-domain": "Domain:", "passwordreset-email": "Email potto:", "passwordreset-emailelement": "Vapurpeachem nanv: \n$1\n\nTatpurtem gupitutor: \n$2", - "passwordreset-emailsentemail": "Gupitutor portun tharaipacho email dhadla.", + "passwordreset-emailsentemail": "Ho email pot'to tujea kontak zodlelem asa zalear, gupitutor portun tharaipacho email dhadlelem zatelem.", "changeemail": "Email potto bodol vo kad", "changeemail-oldemail": "Sodhyacho email potto:", "changeemail-newemail": "Novo email potto:", @@ -470,7 +470,7 @@ "searchprofile-advanced-tooltip": "Khaxel'lea nanvthollanni sod", "search-result-size": "$1 {{PLURAL:$2|1 utor|$2 utram}}", "search-result-category-size": "{{PLURAL:$1|1 vangddi|$1 vangddi}} ({{PLURAL:$2|1 upvorg|$2 upvorg}}, {{PLURAL:$3|1 fichier|$3 fichieri}})", - "search-redirect": "(punornirdexon $1)", + "search-redirect": "($1 savn punornirdexit)", "search-section": "(vibhag $1)", "search-suggest": "Tu mhonnunk sodi: $1 ?", "search-rewritten": "$1 hachim porinamam dakhoilean. Hea vantteache $2 ak sod.", @@ -508,7 +508,7 @@ "recentchanges-label-plusminus": "Hea panacho akar itlea baitani bodol'lo", "recentchanges-legend-heading": "Kunji:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|nove pananchi suchi]]-ui polloi)", - "rcnotefrom": "Sokoil $3, $4 savnsavn {{PLURAL:$5|zalelem bodlop dilam|zalelim bodolpam dileant}} ($1 meren {{PLURAL:$5|dakhoilam|dakhoileant}}).", + "rcnotefrom": "Sokoil $3, $4 savn {{PLURAL:$5|zalelem bodlop dilam|zalelim bodolpam dileant}} ($1 meren {{PLURAL:$5|dakhoilam|dakhoileant}}).", "rclistfrom": "$3 $2 savn suru zatelim novim bodolpam dakhoi", "rcshowhideminor": "$1 dhaktteo bodlopam", "rcshowhideminor-show": "Dakhoi", @@ -550,6 +550,7 @@ "uploadlogpage": "Uploadachem sotr", "filedesc": "Sar", "fileuploadsummary": "Aapros", + "large-file": "Faylachem akar $1 akin odik naslear borem; hi fayl $2 -anchi asa.", "watchthisupload": "Hea faylar dixtt dovor", "license": "Porvangi", "license-header": "Porvangi", @@ -680,7 +681,7 @@ "whatlinkshere-hideredirs": "$1 punornirdexonam", "whatlinkshere-hidetrans": "$1 durasth-somaveso", "whatlinkshere-hidelinks": "$1 zoddnio", - "whatlinkshere-hideimages": "Failinchim zoddpam $1", + "whatlinkshere-hideimages": "$1 faylinchim zoddni", "whatlinkshere-filters": "Challnio", "ipboptions": "2 voram:2 hours,1 dis:1 day,3 dis:3 days,1 satollo:1 week,2 satolle:2 weeks,1 mhoino:1 month,3 mhoine:3 months,6 mhoine:6 months,1 voros:1 year,sasnnank:infinite", "ipblocklist": "Addhailele vaporpi", @@ -800,7 +801,7 @@ "logentry-move-move": "$1-an $3 panak $4 {{GENDER:$2|haloilea}}", "logentry-newusers-create": "Vapurpeacho kont $1 {{GENDER:$2|rochlam}}", "logentry-upload-upload": "$1-an $3 {{GENDER:$2|upload kela}}", - "searchsuggest-search": "Sod", + "searchsuggest-search": "{{SITENAME}} sod", "special-characters-group-latin": "Romi", "special-characters-group-latinextended": "Romi (anink-ui)", "special-characters-group-ipa": "IPA", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index b471859d58..4b6027e006 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -1064,6 +1064,7 @@ "youremail": "דואר אלקטרוני:", "username": "שם {{GENDER:$1|המשתמש|המשתמשת}}:", "prefs-memberingroups": "{{GENDER:$2|חבר|חברה}} {{PLURAL:$1|בקבוצה|בקבוצות}}:", + "group-membership-link-with-expiry": "$1 (עד $2)", "prefs-registration": "זמן ההרשמה:", "yourrealname": "שם אמיתי:", "yourlanguage": "שפת הממשק:", @@ -1108,8 +1109,8 @@ "editusergroup": "טעינת קבוצות המשתמש", "editinguser": "שינוי ההרשאות של {{GENDER:$1|המשתמש|המשתמשת}} [[User:$1|$1]] $2", "viewinguserrights": "צפייה בהרשאות של {{GENDER:$1|המשתמש|המשתמשת}} [[User:$1|$1]] $2", - "userrights-editusergroup": "עריכת קבוצות משתמש", - "userrights-viewusergroup": "צפייה בקבוצות משתמש", + "userrights-editusergroup": "עריכת קבוצות {{GENDER:$1|המשתמש|המשתמשת}}", + "userrights-viewusergroup": "צפייה בקבוצות {{GENDER:$1|המשתמש|המשתמשת}}", "saveusergroups": "שמירת הקבוצות של ה{{GENDER:$1|משתמש|משתמשת}}", "userrights-groupsmember": "{{GENDER:$2|חבר|חברה}} ב{{PLURAL:$1|קבוצה|קבוצות}}:", "userrights-groupsmember-auto": "{{GENDER:$2|חבר|חברה}} אוטומטית ב{{PLURAL:$1|קבוצה|קבוצות}}:", @@ -1119,6 +1120,14 @@ "userrights-nodatabase": "בסיס הנתונים $1 אינו קיים או אינו מקומי.", "userrights-changeable-col": "{{PLURAL:$1|קבוצה|קבוצות}} שבאפשרותך לשנות", "userrights-unchangeable-col": "{{PLURAL:$1|קבוצה|קבוצות}} שאין באפשרותך לשנות", + "userrights-expiry-current": "פוקעת ב־$1", + "userrights-expiry-none": "אינה פוקעת", + "userrights-expiry": "פקיעה:", + "userrights-expiry-existing": "זמן הפקיעה הנוכחי: $3, $2", + "userrights-expiry-othertime": "זמן אחר:", + "userrights-expiry-options": "יום:1 day,שבוע:1 week,חודש:1 month,שלושה חודשים:3 months,שישה חודשים:6 months,שנה:1 year", + "userrights-invalid-expiry": "זמן הפקיעה לקבוצה \"$1\" אינו תקין.", + "userrights-expiry-in-past": "זמן הפקיעה לקבוצה \"$1\" הוא בעבר.", "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בִּדקו את השינויים שלכם ואשרו אותם.", "group": "קבוצה:", "group-user": "משתמשים", @@ -1320,8 +1329,11 @@ "recentchanges-legend-plusminus": "(±123)", "recentchanges-submit": "הצגה", "rcfilters-activefilters": "מסננים פעילים", + "rcfilters-restore-default-filters": "שחזור למסנני ברירת המחדל", + "rcfilters-clear-all-filters": "מחיקת כל המסננים", "rcfilters-search-placeholder": "סינון שינויים אחרונים (עיינו או התחילו להקליד)", "rcfilters-invalid-filter": "מסנן בלתי־תקין", + "rcfilters-empty-filter": "אין מסננים פעילים. כל התרומות מוצגות.", "rcfilters-filterlist-title": "מסננים", "rcfilters-filterlist-noresults": "לא נמצאו מסננים", "rcfilters-filtergroup-registration": "רישום העורכים", @@ -1871,7 +1883,10 @@ "apisandbox-sending-request": "בקשת ה־API בשליחה...", "apisandbox-loading-results": "תוצאות ה־API בתהליך קבלה...", "apisandbox-results-error": "אירעה שגיאה בעת טעינת תשובת ה־API לבקשה: $1.", + "apisandbox-request-selectformat-label": "הצגת המידע שבבקשה כ:", + "apisandbox-request-format-url-label": "מחרוזת השאילתה (query string) של כתובת ה־URL", "apisandbox-request-url-label": "כתובת ה־URL של הבקשה:", + "apisandbox-request-json-label": "ייצוג הבקשה כ־JSON:", "apisandbox-request-time": "זמן הבקשה: {{PLURAL:$1|מילישנייה אחת|$1 מילישניות}}", "apisandbox-results-fixtoken": "אנא תקנו את האסימון ושלחו שוב", "apisandbox-results-fixtoken-fail": "קבלת האסימון \"$1\" נכשלה.", @@ -2015,7 +2030,7 @@ "emailccsubject": "העתק של הודעתך למשתמש $1: $2", "emailsent": "הדואר נשלח", "emailsenttext": "הודעת הדואר האלקטרוני שלך נשלחה.", - "emailuserfooter": "$1 {{GENDER:$1|שלח|שלחה}} את הדוא\"ל הזה ל{{GENDER:$2|משתמש|משתמשת}} $2 באמצעות התכונה \"{{int:emailuser}}\" באתר {{SITENAME}}. התשובה שלך תישלח ישירות {{GENDER:$1|לשולח המקורי|לשולחת המקורית}}, והיא תחשוף {{GENDER:$1|בפניו|בפניה}} את כתובת הדוא\"ל שלך.", + "emailuserfooter": "$1 {{GENDER:$1|שלח|שלחה}} את הדוא\"ל הזה ל{{GENDER:$2|משתמש|משתמשת}} $2 באמצעות התכונה \"{{int:emailuser}}\" באתר {{SITENAME}}. אם {{GENDER:$2|תגיב|תגיבי}} לדוא\"ל הזה, התשובה שלך תישלח ישירות {{GENDER:$1|לשולח המקורי|לשולחת המקורית}}, והיא תחשוף {{GENDER:$1|בפניו|בפניה}} את כתובת הדוא\"ל שלך.", "usermessage-summary": "השארת הודעת מערכת.", "usermessage-editor": "שולח הודעות המערכת", "watchlist": "רשימת המעקב", @@ -3627,6 +3642,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|עדכן|עדכנה}} את התגיות ברשומת היומן $5 של הדף $3 ({{PLURAL:$7|הוסיף|הוסיפה}} את $6; {{PLURAL:$9|הסיר|הסירה}} את $8)", "rightsnone": "(כלום)", "revdelete-summary": "תקציר העריכה", + "rightslogentry-temporary-group": "$1 (זמני, עד $2)", "feedback-adding": "הוספת משוב לדף...", "feedback-back": "חזרה", "feedback-bugcheck": "מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].", diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json index 456ba8de96..6ed288068d 100644 --- a/languages/i18n/hi.json +++ b/languages/i18n/hi.json @@ -75,7 +75,8 @@ "Nemo bis", "Wassan.anmol", "Ziyaurr", - "NehalDaveND" + "NehalDaveND", + "Susant purohit" ] }, "tog-underline": "कड़ियाँ अधोरेखन:", @@ -1056,8 +1057,6 @@ "saveprefs": "संजोएँ", "restoreprefs": "वापिस मूल जमावों पर आ जाएँ (सभी भागों में)", "prefs-editing": "संपादन", - "rows": "कतारें:", - "columns": "कॉलम:", "searchresultshead": "खोज", "stub-threshold": "आधार कड़ी हेतु प्रारूपण ($1):", "stub-threshold-sample-link": "उदाहरण", @@ -1152,6 +1151,7 @@ "userrights-nodatabase": "डाटाबेस $1 या तो मौजूद नहीं है या फिर स्थानीय नहीं है।", "userrights-changeable-col": "समूह जिन्हें आप बदल सकते हैं", "userrights-unchangeable-col": "समूह जिन्हें आप नहीं बदल सकते हैं", + "userrights-expiry-none": "समाप्त नहीं होता", "userrights-conflict": "सदस्य अधिकार बदलावों में अंतर्विरोध! कृपया अपने बदलाव जाँचें और पुनः सुनिश्चित करें।", "group": "समूह:", "group-user": "सदस्य", @@ -3549,55 +3549,12 @@ "feedback-useragent": "सदस्य कर्ता:", "searchsuggest-search": "खोजें {{SITENAME}}", "searchsuggest-containing": "...से युक्त", - "api-error-autoblocked": "आपका आईपी पता अपने आप अवरोधित हो गया, क्योंकि यह किसी अवरोधित सदस्य द्वारा उपयोग किया गया था।", - "api-error-badaccess-groups": "आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.", "api-error-badtoken": "आंतरिक त्रुटि: बुरी टोकन।", - "api-error-blocked": "आपको सम्पादन से अवरोधित किया गया है।", - "api-error-copyuploaddisabled": "URL द्वारा इस सर्वर पर अपलोड अक्षम है।", - "api-error-duplicate": "वहाँ {{PLURAL:$1| अन्य फ़ाइल | रहे हैं कुछ अन्य फ़ाइलों}} एक ही सामग्री के साथ साइट पर पहले से ही है.", - "api-error-duplicate-archive": "वहाँ {{PLURAL:$1|था कुछ अन्य फ़ाइल |were कुछ अन्य फ़ाइलें}}, पहले से ही {{PLURAL:$1|यह was|they थे}} परन्तु हटा दिये गये", - "api-error-empty-file": "प्रस्तुत फ़ाइल खाली था।", "api-error-emptypage": "नए खाली पृष्ठ बनाने की अनुमति नहीं है।", - "api-error-fetchfileerror": "आंतरिक त्रुटि: जब फ़ाइल लाया जा रहा तो कुछ गलत हो गया था।", - "api-error-fileexists-forbidden": "\"$1\" नाम की फ़ाइल पहले से मौजूद है और अधिलेखित नहीं की जा सकती।", - "api-error-fileexists-shared-forbidden": "\"$1\" नाम की फ़ाइल पहले से साझे फ़ाइल भण्डार में मौजूद है, और अधिलेखित नहीं की जा सकती।", - "api-error-file-too-large": "प्रस्तुत फ़ाइल बहुत बड़ी थी।", - "api-error-filename-tooshort": "फ़ाइल का नाम बहुत छोटा है।", - "api-error-filetype-banned": "इस प्रकार की फ़ाइल पर प्रतिबंध लगा दिया है।", - "api-error-filetype-banned-type": "$1 फ़ाइल {{PLURAL:$4|प्रकार|प्रकारों}} की अनुमति नहीं है। फ़ाइल प्रकार {{PLURAL:$3|जिसकी|जिनकी}} अनुमति है: $2।", - "api-error-filetype-missing": "फाईल की एक्सटेंशन लापता है.", - "api-error-hookaborted": "आपके द्वारा प्रयासरत संशोधन विस्तार हूक द्वारा निरस्त किया गया।", - "api-error-http": "आंतरिक त्रुटि: सर्वर से कनेक्ट करने में असमर्थ।", - "api-error-illegal-filename": "फ़ाइल नाम की अनुमति नहीं है।", - "api-error-internal-error": "आंतरिक त्रुटि: विकि पर अपने अपलोड प्रसंस्करण के साथ कुछ गलत हो गया था.", - "api-error-invalid-file-key": "आंतरिक त्रुटि: फ़ाइल अस्थायी भंडारण में नहीं पाया गया.", - "api-error-missingparam": "आंतरिक त्रुटि: अनुरोध पर पैरामीटर लापता", - "api-error-missingresult": "आन्तरिक त्रुटि: यह प्रतिलिपि सफल निर्धारित नहीं हो सकी", - "api-error-mustbeloggedin": "आप फ़ाइलों को अपलोड करने के लिये आपको लॉग इन होना चाहिए.", - "api-error-mustbeposted": "आंतरिक त्रुटि: HTTP POST अनुरोध की आवश्यकता है.", - "api-error-noimageinfo": "अपलोड सफल, लेकिन सर्वर ने फ़ाइल के बारे में हमें कोई जानकारी नहीं दी.", - "api-error-nomodule": "आंतरिक त्रुटि: कोई अपलोड मॉड्यूल सेट नहीं", - "api-error-ok-but-empty": "आंतरिक त्रुटि: सर्वर से कोई जवाब नहीं.", - "api-error-overwrite": "मौजूदा फ़ाइल को अधिलेखित करने की अनुमति नहीं है", - "api-error-stashfailed": "आंतरिक त्रुटि: सर्वर अस्थाई फ़ाइल को संग्रहीत करने में विफल।", "api-error-publishfailed": "आंतरिक त्रुटि: सर्वर अस्थाई फ़ाइल को प्रकासन करने में विफल।", - "api-error-stasherror": "फ़ाइल को स्टैश पर अपलोड करने के दौरान एक त्रुटि देखी गई है।", - "api-error-stashedfilenotfound": "स्टैश में डाली गई फ़ाइल वहाँ से अपलोड करने के प्रयास के दौरान नहीं मिली।", - "api-error-stashpathinvalid": "वह स्थान जहाँ स्टैश वाली फ़ाइल मिलना चाहिए था अवैध है।", - "api-error-stashfilestorage": "फ़ाइल को स्टैश में अपलोड करने के दौरान एक त्रुटि देखी गई है।", - "api-error-stashzerolength": "सरवर उस फ़ाइल को स्टैश नहीं कर सका, क्योंकि उसकी लम्बाई शून्य है।", - "api-error-stashnotloggedin": "आपको लॉग्ड इन होना चाहिए ताकि फ़ाइल को अपलोड स्टैश में सुरक्षित किया जा सके।", - "api-error-stashwrongowner": "स्टैश की जिस फ़ाइल तक आप पहुँचना चाहते हैं वह आपसे सम्बंधित नहीं है।", - "api-error-stashnosuchfilekey": "फ़ाइल की चाबी जिसे आप स्टैश में प्रयोग में लाने का प्रयास कर रहे थे, मौजूद नहीं है।", - "api-error-timeout": "सर्वर ने अपेक्षित समय के भीतर जवाब नहीं दिया", - "api-error-unclassified": "एक अज्ञात त्रुटि उत्पन्न हुई", - "api-error-unknown-code": "अज्ञात त्रुटि: \" $1 \"", - "api-error-unknown-error": "आंतरिक त्रुटि: आपकी फ़ाइल अपलोड करने का प्रयास करते समय कुछ गलत हो गया था।", + "api-error-stashfailed": "आंतरिक त्रुटि: सर्वर अस्थाई फ़ाइल को संग्रहीत करने में विफल।", "api-error-unknown-warning": "अज्ञात चेतावनी: $1", "api-error-unknownerror": "अज्ञात त्रुटि: \" $1 \"", - "api-error-uploaddisabled": "इस विकि पर अपलोड अक्षम है.", - "api-error-verification-error": "यह फ़ाइल दूषित हो सकती है, या गलत एक्सटेंशन है।", - "api-error-was-deleted": "इस नाम का फ़ाइल पहले अपलोड हुआ था और हट भी गया था।", "duration-seconds": "$1 {{PLURAL:$1|सॅकेंड}}", "duration-minutes": "$1 {{PLURAL:$1|मिनट}}", "duration-hours": "$1 {{PLURAL:$1|घंटा|घंटे}}", diff --git a/languages/i18n/hif-latn.json b/languages/i18n/hif-latn.json index ade5f1baf3..90543af702 100644 --- a/languages/i18n/hif-latn.json +++ b/languages/i18n/hif-latn.json @@ -1043,6 +1043,7 @@ "youremail": "E-mail:", "username": "{{GENDER:$1|Sadasya ke naam}}:", "prefs-memberingroups": "{{PLURAL:$1|group|groups}} ke {{GENDER:$2|Member}}:", + "group-membership-link-with-expiry": "$1 (until $2)", "prefs-registration": "Registration kare ke time:", "yourrealname": "Asli naam:", "yourlanguage": "Bhasa:", @@ -1098,6 +1099,14 @@ "userrights-nodatabase": "Database $1 abhi hai nai, nai to local nai hai.", "userrights-changeable-col": "Groups jiske aap badle sakta hai", "userrights-unchangeable-col": "Groups jiske aap badle nai sakta hai", + "userrights-expiry-current": "$1 khalaas hoe hai", + "userrights-expiry-none": "Khalaas nai hoe hai", + "userrights-expiry": "Khalas hoe hai:", + "userrights-expiry-existing": "Abhi ke khatam hoe waala time: $3, $2", + "userrights-expiry-othertime": "Duusra time:", + "userrights-expiry-options": "1 din:1 day,1 haptaa:1 week,1 mahina:1 month,3 mahina:3 months,6 mahina:6 months,1 saal:1 year", + "userrights-invalid-expiry": "Group ke expiry time \"$1\" invalid hai.", + "userrights-expiry-in-past": "Group ke expiry time \"$1\" biit gais hai.", "userrights-conflict": "User right me conflict hae! Meharbaani kar ke aapan badlao ke fir se review aur confirm karo.", "group": "Jhund:", "group-user": "Sadasya", @@ -1298,22 +1307,49 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])", "recentchanges-submit": "Dekhao", "rcfilters-activefilters": "Active filters", + "rcfilters-restore-default-filters": "Restore default filters", + "rcfilters-clear-all-filters": "Sab filter ke clear karo", "rcfilters-search-placeholder": "Filter recent changes (browse or start typing)", "rcfilters-invalid-filter": "Invalid filter", + "rcfilters-empty-filter": "No active filters. All contributions are shown.", "rcfilters-filterlist-title": "Filters", "rcfilters-filterlist-noresults": "Koi filter nai milaa", + "rcfilters-filtergroup-registration": "User registration", + "rcfilters-filter-registered-label": "Register kar dewa gais:", + "rcfilters-filter-registered-description": "Logged-in editors.", + "rcfilters-filter-unregistered-label": "Unregistered", + "rcfilters-filter-unregistered-description": " Editors who aren’t logged in.", "rcfilters-filtergroup-authorship": "Edit authorship", "rcfilters-filter-editsbyself-label": "Aapan badlao", "rcfilters-filter-editsbyself-description": "Aap ke karaa gais badlao.", "rcfilters-filter-editsbyother-label": "Duusra jan ke karaa gais badlao", "rcfilters-filter-editsbyother-description": "Badlao jiske duusraa jan karin hai (aap nai)", - "rcfilters-filtergroup-userExpLevel": "User experience level", + "rcfilters-filtergroup-userExpLevel": "User experience level (registered sadasya ke khaatir)", "rcfilters-filter-userExpLevel-newcomer-label": "Newcomers", - "rcfilters-filter-userExpLevel-newcomer-description": "Bahut nawaa editor: 10 se kamtii badlao aur 4 din se kamtii activity.", + "rcfilters-filter-userExpLevel-newcomer-description": "10 se kamtii badlao aur 4 din se kamtii activity.", "rcfilters-filter-userExpLevel-learner-label": "Sikhe waala", "rcfilters-filter-userExpLevel-learner-description": "More days of activity and edits than 'Newcomers' but fewer than 'Experienced users.'", "rcfilters-filter-userExpLevel-experienced-label": "Experienced users", "rcfilters-filter-userExpLevel-experienced-description": "30 din se jaada activity aur 500 se jaada badlao", + "rcfilters-filtergroup-automated": "Automated contributions", + "rcfilters-filter-bots-label": "Bot", + "rcfilters-filter-bots-description": "Edits made by automated tools.", + "rcfilters-filter-humans-label": "Human (not bot)", + "rcfilters-filter-humans-description": "Edit, jiske human editors karin hai.", + "rcfilters-filtergroup-significance": "Significance", + "rcfilters-filter-minor-label": "Chhotaa badlao", + "rcfilters-filter-minor-description": "Edits the author labeled as minor.", + "rcfilters-filter-major-label": "Non-minor edits", + "rcfilters-filter-major-description": "Edits not labeled as minor.", + "rcfilters-filtergroup-changetype": "Type of change", + "rcfilters-filter-pageedits-label": "Panna ke badlao", + "rcfilters-filter-pageedits-description": "Edits to wiki content, discussions, category descriptions....", + "rcfilters-filter-newpages-label": "Page creations", + "rcfilters-filter-newpages-description": "Edits that make new pages.", + "rcfilters-filter-categorization-label": "Category changes", + "rcfilters-filter-categorization-description": "Records of pages being added or removed from categories.", + "rcfilters-filter-logactions-label": "Logged actions", + "rcfilters-filter-logactions-description": "Administrative actions, account creations, page deletions, uploads....", "rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} $3, $4 ($1 talak dekhawa gais) talak.", "rclistfrom": "$3 $2 se suruu kar ke nawaa badlao dekhao", "rcshowhideminor": "$1 chhota badlao", @@ -1822,7 +1858,10 @@ "apisandbox-sending-request": "Sending API request...", "apisandbox-loading-results": "Receiving API results...", "apisandbox-results-error": "An error occurred while loading the API query response: $1.", + "apisandbox-request-selectformat-label": "Show request data as:", + "apisandbox-request-format-url-label": "URL query string", "apisandbox-request-url-label": "Request ke URL:", + "apisandbox-request-json-label": "Request JSON:", "apisandbox-request-time": "Request time: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Token ke sudhaar ke resubmit karo", "apisandbox-results-fixtoken-fail": "Failed to fetch \"$1\" token.", @@ -3472,6 +3511,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|updated}} tags on log entry $5 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)", "rightsnone": "(koi nai hai)", "revdelete-summary": "summary ke badlo", + "rightslogentry-temporary-group": "$1 (temporary, until $2)", "feedback-adding": "Panna me subject jorra jaawe hae...", "feedback-back": "Piichhe", "feedback-bugcheck": "Julum! Khaali ii check karna ki ii ek pahile se jaana waala bugs me se nai hae [$1 known bugs].", @@ -3752,7 +3792,7 @@ "usercssispublic": "Please note: CSS subpages should not contain confidential data as they are viewable by other users.", "restrictionsfield-badip": "IP ke range me galti hai: $1", "restrictionsfield-label": "Allowed IP ranges:", - "restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use
0.0.0.0/0
::/0", + "restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use:
0.0.0.0/0\n::/0
", "revid": "badlao $1", "pageid": "panna ID $1" } diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index 1d225151e7..11bcf00ab8 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -201,6 +201,7 @@ "searcharticle": "Kreni", "history": "Stare izmjene", "history_short": "Stare izmjene", + "history_small": "stare izmjene", "updatedmarker": "obnovljeno od posljednjeg posjeta", "printableversion": "Inačica za ispis", "permalink": "Trajna poveznica", @@ -233,6 +234,7 @@ "views": "Pogledi", "toolbox": "Pomagala", "tool-link-userrights": "Promijeni {{GENDER:$1|suradnikove|suradničine}} grupe", + "tool-link-userrights-readonly": "Vidi {{GENDER:$1|suradnikovu|suradničinu|suradničku}} pripadnost skupinama", "tool-link-emailuser": "Pošalji e-poštu {{GENDER:$1|suradniku|suradnici}}", "userpage": "Vidi suradnikovu stranicu", "projectpage": "Vidi stranicu o projektu", @@ -448,6 +450,7 @@ "userlogin-resetpassword-link": "Zaboravili ste zaporku?", "userlogin-helplink2": "Pomoć pri prijavi", "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nRabite donji obrazac da biste se prijavili kao drugi suradnik.", + "userlogin-reauth": "Morate se ponovno prijaviti da biste potvrdili da ste Vi {{GENDER:$1|$1}}.", "userlogin-createanother": "Stvori još jedan račun", "createacct-emailrequired": "Adresa e-pošte", "createacct-emailoptional": "Adresa e-pošte", @@ -494,7 +497,7 @@ "eauthentsent": "Na navedenu adresu poslana je e-poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, molimo Vas otvorite e-poruku i slijedite u njemu sadržana uputstva kako biste potvrdili da je adresa e-pošte zaista Vaša.", "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu zaporke, u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu zaporke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.", "mailerror": "Pogrješka pri slanju e-pošte: $1", - "acct_creation_throttle_hit": "Posjetitelji ovog wikija koji rabe Vašu IP adresu napravili su {{PLURAL:$1|1 račun|$1 računa}} u posljednjem danu, što je najveći dopušteni broj u tom vremenskom razdoblju.\nZbog toga posjetitelji s ove IP adrese trenutačno ne mogu otvoriti nove suradničke račune.", + "acct_creation_throttle_hit": "Posjetitelji ovog wikija koji rabe Vašu IP adresu napravili su {{PLURAL:$1|1 račun|$1 računa}} u posljednjih $2, što je najveći dopušteni broj u tom vremenskom razdoblju.\nZbog toga posjetitelji s ove IP adrese trenutačno ne mogu otvoriti nove suradničke račune.", "emailauthenticated": "Vaša adresa e-pošte potvrđena je $2 u $3.", "emailnotauthenticated": "Vaša adresa e-pošte još nije potvrđena.\nNe možemo poslati e-poruku ni u jednoj od sljedećih naredbi.", "noemailprefs": "Nije navedena adresa elektroničke pošte, stoga sljedeće naredbe ne će raditi.", @@ -514,6 +517,7 @@ "createacct-another-realname-tip": "Pravo ime nije obvezno. \nAko ga navedete, bit će korišteno za pripisivanje Vaših doprinosa.", "pt-login": "Prijavi se", "pt-login-button": "Prijavi se", + "pt-login-continue-button": "Nastavi prijavu", "pt-createaccount": "Otvori novi suradnički račun", "pt-userlogout": "Odjavi se", "php-mail-error-unknown": "Nepoznata pogrješka u funkciji PHP-poruke()", @@ -546,6 +550,7 @@ "botpasswords-bad-appid": "Ime bota \"$1\" nije valjano.", "botpasswords-insert-failed": "Nije moguće dodavanje imena bota \"$1\". Možda je već dodano?", "botpasswords-update-failed": "Nije moguće ažurirati bot s imenom \"$1\". Možda je izbrisan?", + "botpasswords-created-title": "Stvorena bot zaporka", "resetpass_forbidden": "Zaporka ne može biti promijenjena", "resetpass-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.", "resetpass-submit-loggedin": "Promijeni zaporku", @@ -571,14 +576,16 @@ "passwordreset-emailtext-user": "Suradnik $1 na {{SITENAME}} zatražio je podsjetnik o pojedinostima vašeg računa za {{SITENAME}}\n($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena zaporka|Ove privremene zaporke}} će isteći u {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu zaporku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše izvorne zaporke, a više je ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru zaporku.", "passwordreset-emailelement": "Suradničko ime: \n$1\n\nPrivremena zaporka: \n$2", "passwordreset-emailsentemail": "Ako je ova adresa povezana s Vašim suradničkim računom, na nju će biti poslan podsjetnik na zaporku.", + "passwordreset-invalidemail": "Nevaljala adresa e-pošte", "changeemail": "Promijeni ili izbriši e-mail adresu", "changeemail-header": "Promijeni adresu e-pošte računa", "changeemail-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.", "changeemail-oldemail": "Trenutačna adresa e-pošte:", "changeemail-newemail": "Nova adresa e-pošte:", + "changeemail-newemail-help": "Ako želite izbrisati adresu Vaše e-pošte, ostavite ovo polje praznim. U tom slučaju, nećete biti u mogućnosti ponovno postaviti zaboravljenu zaporku i nećete moći primati e-poštu s ovog wikija.", "changeemail-none": "(ništa)", "changeemail-password": "Zaporka za projekt {{SITENAME}}:", - "changeemail-submit": "Promijeni E-mail", + "changeemail-submit": "Promijeni e-mail", "changeemail-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.", "bold_sample": "Podebljani tekst", "bold_tip": "Podebljani tekst", @@ -1694,6 +1701,8 @@ "activeusers-intro": "Ovo je popis suradnika koji su napravili neku aktivnost u {{PLURAL:$1|posljednji $1 dan|posljednja $1 dana|posljednjih $1 dana}}.", "activeusers-count": "{{PLURAL:$1|nedavna $1 izmjena|nedavne $1 izmjene|nedavnih $1 izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}", "activeusers-from": "Prikaži suradnike počevši od:", + "activeusers-groups": "Prikaži suradnike koji pripadaju suradničkim skupinama:", + "activeusers-excludegroups": "Isključi iz prikaza suradnike koji pripadaju ovim suradničkim skupinama:", "activeusers-noresult": "Niti jedan suradnik nije nađen.", "activeusers-submit": "Prikaz aktivnih suradnika", "listgrouprights": "Prava suradničkih skupina", @@ -2190,6 +2199,7 @@ "export-download": "Ponudi opciju snimanja u datoteku", "export-templates": "Uključi predloške", "export-pagelinks": "Uključi povezane stranice do dubine od:", + "export-manual": "Ručno dodaj stranice u polje:", "allmessages": "Sve poruke sustava", "allmessagesname": "Ime", "allmessagesdefault": "Prvotni tekst", @@ -3289,6 +3299,12 @@ "log-action-filter-rights-autopromote": "automatska promjena", "log-action-filter-upload-upload": "novo postavljanje", "log-action-filter-upload-overwrite": "ponovno postavljanje", + "authmanager-provider-password": "Autorizacija zaporkom", + "authmanager-provider-temporarypassword": "Privremena zaporka", "changecredentials": "Promjena vjerodajnica", - "removecredentials": "Uklanjanje vjerodajnica" + "changecredentials-submit": "Promijeni vjerodajnice", + "removecredentials": "Uklanjanje vjerodajnica", + "removecredentials-submit": "Ukloni vjerodajnice", + "credentialsform-provider": "Vrsta vjerodajnica:", + "credentialsform-account": "Suradnički račun:" } diff --git a/languages/i18n/hsb.json b/languages/i18n/hsb.json index 558b1667e8..2c7883044e 100644 --- a/languages/i18n/hsb.json +++ b/languages/i18n/hsb.json @@ -508,8 +508,6 @@ "passwordreset-emaildisabled": "E-mejlowe funkcije su so na tutym wikiju znjemóžnili.", "passwordreset-username": "Wužiwarske mjeno:", "passwordreset-domain": "Domena:", - "passwordreset-capture": "E-mejlku sej wobhladać?", - "passwordreset-capture-help": "Jeli nakřižuješ tutón kašćik, budźe so e-mejlka z nachwilnym hesło pokazować a tež wužiwarjej pósłać.", "passwordreset-email": "E-mejlowa adresa:", "passwordreset-emailtitle": "Kontowe podrobnosće na {{GRAMMAR:lokatiw|{{SITENAME}}}}", "passwordreset-emailtext-ip": "Něchtó (najskerje ty, z IP-adresu $1) je anulowanje hesła za {{GRAMMAR:akuzatiw|{{SITENAME}}}} požadał ($4). {{PLURAL:$3|Slědowace wužiwarske konto je|Slědowacej wužiwarskej konće stej|Slědowace wužiwarske konta su}} z tutej e-mejlowej adresu {{PLURAL:$3|zwjazane|zwjazanej|zwjazane}}:\n\n$2\n\n{{PLURAL:$3|Tute nachwilne hesło spadnje|Tutej nachwilnej hesle spadnjetej|Tute nachwilne hesła spadnu}} za {{PLURAL:$5|jedyn dźeń|$5 dnjej|$5 dny|$5 dnjow}}.\nTy měł so nětko přizjewić a nowe hesło wubrać. Jeli něchtó druhi je tute naprašowanje pósłał, abo jeli sy so zaso na prěnjotne hesło dopomnił a wjace nochceš jo změnić, móžeš tutu zdźělenku ignorować a swoje stare hesło dale wužiwać.", @@ -900,8 +898,6 @@ "saveprefs": "Składować", "restoreprefs": "Wšě standardne nastajenja wobnowić (w druhich wotrězkach)", "prefs-editing": "Wobdźěłowanje", - "rows": "Rjadki:", - "columns": "Stołpiki:", "searchresultshead": "Pytać", "stub-threshold": "Wotkazowe formatowanje małych stronow ($1):", "stub-threshold-disabled": "Znjemóžnjeny", @@ -990,12 +986,9 @@ "userrights-reason": "Přičina:", "userrights-no-interwiki": "Nimaš prawo wužiwarske prawa w druhich wikijach změnić.", "userrights-nodatabase": "Datowa banka $1 njeeksistuje abo lokalna njeje.", - "userrights-nologin": "Dyrbiš so z admininstratorowym kontom [[Special:UserLogin|přizjewić]], zo by wužiwarske prawa změnił.", - "userrights-notallowed": "Nimaš trěbne prawa, zo by wužiwarske prawa přidźěliło abo zebrało.", "userrights-changeable-col": "Skupiny, kotrež móžeš změnić", "userrights-unchangeable-col": "Skupiny, kotrež njemóžeš změnić", "userrights-conflict": "Konflikt změnow wužiwarskich prawow! Prošu přepruwuj a wobkruć swoje změny.", - "userrights-removed-self": "Sy swoje prawa wotstronił. Tohodla nimaš hižo přistup na tutu stronu měć.", "group": "Skupina:", "group-user": "wužiwarjo", "group-autoconfirmed": "Awtomatisce potwjerdźeni wužiwarjo", @@ -1085,7 +1078,6 @@ "right-siteadmin": "Datowu banku zawrěć abo wotewrić", "right-override-export-depth": "Strony inkluziwnje wotkazanych stronow hač do hłubokosće 5 eksportować", "right-sendemail": "Druhim wužiwarjam e-mejl pósłać", - "right-passwordreset": "E-mejlki za wróćostajenje hesłow sej wobhladać", "right-managechangetags": "[[Special:Tags|Markěrowanja]] wutworić a z(nje)móžnić", "right-applychangetags": "[[Special:Tags|Markěrowanja]] hromadźe ze změnami nałožować", "newuserlogpage": "Protokol nowych wužiwarjow", @@ -1950,7 +1942,7 @@ "badipaddress": "Njepłaćiwa IP-adresa", "blockipsuccesssub": "Zablokowanje wuspěšne", "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bu {{GENDER:$1|zablokowany|zablokowana}}.
\nHlej [[Special:BlockList|lisćinu blokowanjow]], zo by zablokowanjow pruwował.", - "ipb-blockingself": "Chceš samoho blokować! Chceš to woprawdźe činić?", + "ipb-blockingself": "Chceš runje sebi sam blokować! Chceš to woprawdźe činić?", "ipb-confirmhideuser": "Chceš runje wužiwarja z nastajenjom \"wužiwarja schować\" blokować. To k tomu dowjedźe, zo mjeno wužiwarja so we wšch lisćinach a protokolowych zapiskach potłóči. Chceš to woprawdźe činić?", "ipb-confirmaction": "Jeli sy sej wěsty, zo chceš to woprawdźe činić, přepruwuj prošu deleka polo \"{{int:ipb-confirm}}\".", "ipb-edit-dropdown": "přičiny zablokowanjow wobdźěłać", @@ -3058,45 +3050,12 @@ "feedback-useragent": "Identifikator wobhladowaka:", "searchsuggest-search": "Pytać", "searchsuggest-containing": "wobsahuje...", - "api-error-badaccess-groups": "Nimaš prawo dataje do tutoho wikija nahrać.", "api-error-badtoken": "Nutřkowny zmylk: Wopačny token.", - "api-error-copyuploaddisabled": "Nahrawanje přez URL je na tutym serwerje znjemóžnjene.", - "api-error-duplicate": "{{PLURAL:$1|Je|Stej|Su}} hižo {{PLURAL:$1|druha dataja|druhej dataji|druhe dataje}} ze samsnym wobsahom na sydle.", - "api-error-duplicate-archive": "{{PLURAL:$1|Bě druha dataja|Běštej druhej dataji|Běchu druhe dataje|Bě druhich datajow}} hižo na websydle ze samsnym wobsahom, ale {{PLURAL:$1|je so zhašała|stej so zhašałoj|su so zhašeli|je so zhašało}}.", - "api-error-empty-file": "Dataja, kotruž sy nahrał, je prózdna.", "api-error-emptypage": "Wutworjenje nowych, prózdnych stronow njeje dowolene.", - "api-error-fetchfileerror": "Nutřkowny zmylk: při wobstarowanju dataje je so něšto nimokuliło.", - "api-error-fileexists-forbidden": "Dataja z mjenom \"$1\" hižo eksistuje, a njeda so přepisać.", - "api-error-fileexists-shared-forbidden": "Dataja z mjenom \"$1\" hižo eksistuje w zhromadnym datajowym repozitoriju a njeda so přepisać.", - "api-error-file-too-large": "Dataja, kotruž sy nahrał, bě přewulka.", - "api-error-filename-tooshort": "Datajowe mjeno překrótko", - "api-error-filetype-banned": "Tutón datajowy typ je zawrjeny.", - "api-error-filetype-banned-type": "$1 {{PLURAL:$4|dowoleny datajowy typ njeje|dowolenej datajowej typaj njejstej|dowolene datajowe typy njejsu|dowolene datajowe typy njejsu}}. {{PLURAL:$3|Dowoleny datajowy typ je|Dowolenej datajowej typaj stej|Dowolene datajowe typy su|Dowolene datajowe typy su}} $2.", - "api-error-filetype-missing": "Dataja nima datajowu kóncowku.", - "api-error-hookaborted": "Změna, kotruž pospytowaše přewjesć, bu přez rozšěrjensku hoku přetorhnjena.", - "api-error-http": "Nutřkowny zmylk: Zwisk ze serwerom njemóžno.", - "api-error-illegal-filename": "Datajowe mjeno njedowolene.", - "api-error-internal-error": "Nutřkowny zmylk: Při předźěłowanju twojeho nahraća na wiki je so něšto nimokuliło.", - "api-error-invalid-file-key": "Nutřkowny zmylk: dataja njeje so w nachwilnym składowaku namakała.", - "api-error-missingparam": "Nutřkowny zmylk: falowace parametry při naprašowanju.", - "api-error-missingresult": "Nutřkowny zmylk: njeda so zwěsćić, hač kopěrowanje je so poradźiło.", - "api-error-mustbeloggedin": "Dyrbiš přizjewjeny być, zo by dataje nahrał.", - "api-error-mustbeposted": "Nutřkowny zmylk: Naprašowanje wužaduje sej HTTP POST.", - "api-error-noimageinfo": "Nahraće je so poradźiło, ale serwer njeje nam žane informacije wo dataji dał.", - "api-error-nomodule": "Nutřkowny zmylk: Žadyn modul nastajeny.", - "api-error-ok-but-empty": "Nutřkowny zmylk: žana wotmołwa wot serwera.", - "api-error-overwrite": "Přepisowanje eksistowaceje dataje njeje dowolene.", - "api-error-stashfailed": "Nutřkowny zmylk: Serwer njemóžeše nachwilnu dataju składować.", "api-error-publishfailed": "Nutřkowny zmylk: Serwer njemóžeše nachwilnu dataju wozjewić.", - "api-error-stasherror": "Při nahrawanju dataje do chowanki je zmylk wusutpił.", - "api-error-timeout": "Serwer njeje znutřka wočakowaneho časa wotmołwił.", - "api-error-unclassified": "Njeznaty zmylk je wustupił.", - "api-error-unknown-code": "Njeznaty zmylk: \"$1\"", - "api-error-unknown-error": "Nutřkowny zmylk: Při nahrawanju twojeje dataje je so něšto nimokuliło.", + "api-error-stashfailed": "Nutřkowny zmylk: Serwer njemóžeše nachwilnu dataju składować.", "api-error-unknown-warning": "Njeznate warnowanje: $1", "api-error-unknownerror": "Njeznaty zmylk: \"$1\".", - "api-error-uploaddisabled": "Nahraća su na tutym wikiju znjemóžnjene.", - "api-error-verification-error": "Tuta dataja móhła wobkškodźena być abo wopačny sufiks měć.", "duration-seconds": "$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}", "duration-minutes": "$1 {{PLURAL:$1|mjeńšina|mjeńšinje|mjeńšiny|mjeńšin}}", "duration-hours": "$1 {{PLURAL:$1|hodźina|hodźinje|hodźiny|hodźin}}", diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json index c6398281c5..fae4caf30d 100644 --- a/languages/i18n/hu.json +++ b/languages/i18n/hu.json @@ -246,6 +246,7 @@ "views": "Nézetek", "toolbox": "Eszközök", "tool-link-userrights": "{{GENDER:$1|Felhasználócsoportok}} módosítása", + "tool-link-userrights-readonly": "{{GENDER:$1|Felhasználói}} csoportok megtekintése", "tool-link-emailuser": "E-mail küldése ennek a {{GENDER:$1|felhasználónak}}", "userpage": "Felhasználó lapjának megtekintése", "projectpage": "Projektlap megtekintése", @@ -679,8 +680,9 @@ "subject-preview": "Tárgy előnézete:", "previewerrortext": "Hiba történt a változások előnézete megjelenítése során.", "blockedtitle": "A szerkesztő blokkolva van", - "blockedtext": "'''A szerkesztőnevedet vagy az IP-címedet blokkoltuk.'''\n\nA blokkolást $1 végezte el.\nAz általa felhozott indok: ''$2''.\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n\nKapcsolatba léphetsz $1 szerkesztőnkkel, vagy egy másik [[{{MediaWiki:Grouppage-sysop}}|adminisztrátorral]], és megbeszélheted vele a blokkolást.\nAz 'E-mail küldése ennek a szerkesztőnek' funkciót csak akkor használhatod, ha érvényes e-mail címet adtál meg\n[[Special:Preferences|fiókbeállításaidban]], és nem blokkolták a használatát.\nJelenlegi IP-címed: $3, a blokkolás azonosítószáma: #$5.\nKérjük, hogy érdeklődés esetén mindkettőt add meg.", + "blockedtext": "A szerkesztőnevedet vagy az IP-címedet blokkoltuk.\n\nA blokkolást $1 végezte el.\nAz általa felhozott indok: $2.\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n\nKapcsolatba léphetsz $1 szerkesztőnkkel vagy egy másik [[{{MediaWiki:Grouppage-sysop}}|adminisztrátorral]], és megbeszélheted vele a blokkolást.\nAz „E-mail küldése ennek a szerkesztőnek” funkciót csak akkor használhatod, ha érvényes e-mail címet adtál meg [[Special:Preferences|fiókbeállításaidban]], és nem blokkolták a használatát.\nJelenlegi IP-címed: $3, a blokkolás azonosítószáma: #$5.\nKérjük, hogy érdeklődés esetén minden fenti részletet adj meg.", "autoblockedtext": "Az IP-címed automatikusan blokkolva lett, mert korábban egy olyan szerkesztő használta, akit $1 blokkolt, az alábbi indoklással:\n\n:''$2''\n\n*A blokk kezdete: '''$8'''\n*A blokk lejárata: '''$6'''\n*Blokkolt szerkesztő: '''$7'''\n\nKapcsolatba léphetsz $1 szerkesztőnkkel, vagy egy másik [[{{MediaWiki:Grouppage-sysop}}|adminisztrátorral]], és megbeszélheted vele a blokkolást.\n\nAz 'E-mail küldése ennek a szerkesztőnek' funkciót csak akkor használhatod, ha érvényes e-mail címet adtál meg\n[[Special:Preferences|fiókbeállításaidban]], és nem blokkolták a használatát.\n\nJelenlegi IP-címed: $3, a blokkolás azonosítószáma: #$5.\nKérjük, hogy érdeklődés esetén mindkettőt add meg.", + "systemblockedtext": "A felhasználónevedet vagy IP-címedet automatikusan blokkolta a MediaWiki.\nA blokkolás indoka:\n\n:$2\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n\nA jelenlegi IP-címed: $3.\nKérjük, hogy érdeklődés esetén minden fenti részletet adj meg.", "blockednoreason": "nem adott meg okot", "whitelistedittext": "Lapok szerkesztéséhez $1.", "confirmedittext": "Lapok szerkesztése előtt meg kell erősítened az e-mail címedet. Kérjük, hogy a [[Special:Preferences|szerkesztői beállításaidban]] add meg, majd erősítsd meg az e-mail címedet.", @@ -1070,6 +1072,7 @@ "youremail": "Az e-mail címed:", "username": "{{GENDER:$1|Szerkesztőnév}}:", "prefs-memberingroups": "{{GENDER:$2|{{PLURAL:$1|Csoporttagság|Csoporttagságok}}}}:", + "group-membership-link-with-expiry": "$1 (a következő időpontig: $2)", "prefs-registration": "Regisztráció ideje:", "yourrealname": "Valódi neved:", "yourlanguage": "A felület nyelve:", @@ -1113,7 +1116,9 @@ "userrights-user-editname": "Add meg a szerkesztő nevét:", "editusergroup": "Szerkesztőcsoportok betöltése", "editinguser": "[[User:$1|$1]] felhasználó jogainak megváltoztatása $2", + "viewinguserrights": "[[User:$1|$1]] felhasználói csoportjainak megtekintése $2", "userrights-editusergroup": "Szerkesztőcsoportok módosítása", + "userrights-viewusergroup": "Felhasználói csoportok megtekintése", "saveusergroups": "{{GENDER:$1|Szerkesztőcsoportok}} mentése", "userrights-groupsmember": "Csoporttag:", "userrights-groupsmember-auto": "Alapértelmezetten tagja:", @@ -1123,6 +1128,14 @@ "userrights-nodatabase": "$1 adatbázis nem létezik vagy nem helyi.", "userrights-changeable-col": "Megváltoztatható csoportok", "userrights-unchangeable-col": "Nem megváltoztatható csoportok", + "userrights-expiry-current": "Lejár ekkor: $1", + "userrights-expiry-none": "Nem jár le", + "userrights-expiry": "Lejárat:", + "userrights-expiry-existing": "Jelenleg érvényben lévő lejárati idő: $2, $3", + "userrights-expiry-othertime": "Más idő:", + "userrights-expiry-options": "1 nap:1 day,1 hét:1 week,1 hónap:1 month,3 hónap:3 months,6 hónap:6 months,1 év:1 year", + "userrights-invalid-expiry": "A(z) „$1” csoport lejárati ideje érvénytelen.", + "userrights-expiry-in-past": "A(z) „$1” csoport lejárati ideje már elmúlt.", "userrights-conflict": "Felhasználói jogok ütközése! Kérlek, végezd el újra a változtatásokat.", "group": "Csoport:", "group-user": "szerkesztők", @@ -1250,6 +1263,7 @@ "grant-basic": "alapvető jogosultságok", "grant-viewdeleted": "törölt fájlok és lapok megtekintése", "grant-viewmywatchlist": "figyelőlista megtekintése", + "grant-viewrestrictedlogs": "korlátozott naplóbejegyzések megtekintése", "newuserlogpage": "Új szerkesztők naplója", "newuserlogpagetext": "Ez a napló az újonnan regisztrált szerkesztők listáját tartalmazza.", "rightslog": "Szerkesztői jogosultságok naplója", @@ -1274,7 +1288,9 @@ "action-writeapi": "író API használata", "action-delete": "lap törlése", "action-deleterevision": "változatok törlése", + "action-deletelogentry": "naplóbejegyzések törlése", "action-deletedhistory": "lap törölt laptörténetének megtekintése", + "action-deletedtext": "törölt lapváltozat szövegének megtekintése", "action-browsearchive": "keresés a törölt lapok között", "action-undelete": "lapok helyreállítása", "action-suppressrevision": "rejtett változatok megtekintése és helyreállítása", @@ -1292,6 +1308,7 @@ "action-userrights-interwiki": "más wikik szerkesztői jogainak módosítása", "action-siteadmin": "adatbázis lezárása vagy felnyitása", "action-sendemail": "e-mailek küldése", + "action-editmyoptions": "saját beállításaid szerkesztése", "action-editmywatchlist": "saját figyelőlista szerkesztése", "action-viewmywatchlist": "saját figyelőlista megtekintése", "action-viewmyprivateinfo": "személyes adatok megtekintése", @@ -1318,11 +1335,30 @@ "recentchanges-legend-heading": "Jelmagyarázat:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lásd még: [[Special:NewPages|új lapok listája]])", "recentchanges-submit": "Megjelenítés", + "rcfilters-activefilters": "Aktív szűrők", + "rcfilters-restore-default-filters": "Alapértelmezett szűrők visszaállítása", + "rcfilters-clear-all-filters": "Összes szűrő kikapcsolása", + "rcfilters-search-placeholder": "Friss változtatások szűrése (böngészd vagy kezdj el gépelni)", + "rcfilters-invalid-filter": "Érvénytelen szűrő", + "rcfilters-empty-filter": "Nincs aktív szűrő. Minden közreműködés látható.", + "rcfilters-filterlist-title": "Szűrők", + "rcfilters-filterlist-noresults": "Nem található szűrő", "rcfilters-filter-registered-label": "Regisztrált", "rcfilters-filter-registered-description": "Bejelentkezett szerkesztők.", + "rcfilters-filter-unregistered-label": "Nem regisztrált", "rcfilters-filter-unregistered-description": "Nem bejelentkezett szerkesztők.", + "rcfilters-filtergroup-authorship": "Szerkesztő", "rcfilters-filter-editsbyself-label": "Saját szerkesztéseid", + "rcfilters-filter-editsbyself-description": "Saját szerkesztések", + "rcfilters-filter-editsbyother-label": "Mások szerkesztései", + "rcfilters-filter-editsbyother-description": "Más felhasználók által végzett szerkesztések (nem sajátok)", + "rcfilters-filter-userExpLevel-newcomer-label": "Újoncok", + "rcfilters-filter-userExpLevel-newcomer-description": "Kevesebb mint 10 szerkesztés és 4 nap aktivitás.", "rcfilters-filter-userExpLevel-learner-label": "Tanulók", + "rcfilters-filter-userExpLevel-learner-description": "Több aktív nap és szerkesztés, mint az „újoncok”, de kevesebb, mint a „tapasztalt szerkesztők”.", + "rcfilters-filter-userExpLevel-experienced-label": "Tapasztalt szerkesztők", + "rcfilters-filter-userExpLevel-experienced-description": "Több mint 30 nap aktivitás és 500 szerkesztés.", + "rcfilters-filtergroup-automated": "Automatikus szerkesztések", "rcfilters-filter-bots-label": "Bot", "rcfilters-filter-bots-description": "Automatizált eszközök szerkesztései.", "rcfilters-filter-humans-label": "Ember (nem bot)", @@ -1333,8 +1369,11 @@ "rcfilters-filter-major-description": "Nem aprónak jelölt szerkesztések.", "rcfilters-filtergroup-changetype": "Változtatás típusa", "rcfilters-filter-pageedits-label": "Lapszerkesztések", + "rcfilters-filter-newpages-label": "Laplétrehozások", "rcfilters-filter-newpages-description": "Új oldalt létrehozó szerkesztések.", "rcfilters-filter-categorization-label": "Kategóriaváltoztatások", + "rcfilters-filter-logactions-label": "Naplózott műveletek", + "rcfilters-filter-logactions-description": "Adminisztratív műveletek, fióklétrehozások, laptörlések, feltöltések…", "rcnotefrom": "Alább a $3 $4 óta történt változtatások láthatóak (legfeljebb $1 db).", "rclistfrom": "$3, $2 után történt változtatások megtekintése", "rcshowhideminor": "apró szerkesztések $1", @@ -1844,6 +1883,7 @@ "apisandbox-loading-results": "API-válaszok fogadása…", "apisandbox-results-error": "Hiba történt az API-lekérdezés válaszának betöltése közben: $1.", "apisandbox-request-url-label": "Kérő URL:", + "apisandbox-request-json-label": "JSON kérése:", "apisandbox-request-time": "Kérés hossza: $1 ms", "apisandbox-results-fixtoken": "Token javítása és újrapróbálkozás", "apisandbox-results-fixtoken-fail": "A(z) „$1” token lekérése sikertelen.", @@ -1852,6 +1892,9 @@ "apisandbox-continue": "Folytatás", "apisandbox-continue-clear": "Törlés", "apisandbox-continue-help": "A {{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries folytatja] az utolsó kérést; a {{int:apisandbox-continue-clear}} törli a folytatáshoz kapcsolódó paramétereket.", + "apisandbox-param-limit": "Használj max-ot a maximális értékhez.", + "apisandbox-multivalue-all-namespaces": "$1 (minden névtér)", + "apisandbox-multivalue-all-values": "$1 (minden érték)", "booksources": "Könyvforrások", "booksources-search-legend": "Könyvforrások keresése", "booksources-search": "Keresés", @@ -1908,6 +1951,8 @@ "activeusers-intro": "Ez a lap azon felhasználók listáját tartalmazza, akik végeztek valamilyen tevékenységet az elmúlt {{PLURAL:$1|egy|$1}} napban.", "activeusers-count": "$1 művelet az elmúlt $3 napban", "activeusers-from": "Szerkesztők listázása a következő névtől kezdve:", + "activeusers-groups": "A következő csoportokba tartozó felhasználók megjelenítése:", + "activeusers-excludegroups": "A következő csoportokba tartozó felhasználók kizárása:", "activeusers-noresult": "Nem található ilyen szerkesztő.", "activeusers-submit": "Aktív szerkesztők megjelenítése", "listgrouprights": "Szerkesztői csoportok jogai", @@ -1974,7 +2019,7 @@ "emailccsubject": "$1 szerkesztőnek küldött $2 tárgyú üzenet másolata", "emailsent": "E-mail elküldve", "emailsenttext": "E-mail üzenetedet elküldtük.", - "emailuserfooter": "Ezt az e-mailt $1 küldte $2 számára, az „{{int:emailuser}}” funkció használatával a(z) {{SITENAME}} wikin.", + "emailuserfooter": "Ezt az e-mailt $1 küldte $2 számára, az „{{int:emailuser}}” funkció használatával a(z) {{SITENAME}} wikin. Ha válaszolsz erre az üzenetre, az a választ közvetlenül az eredeti feladónak küldöd, felfedve az e-mail-címedet neki.", "usermessage-summary": "Rendszerüzenet megadása.", "usermessage-editor": "Rendszerüzenetek", "watchlist": "Figyelőlistám", @@ -2089,7 +2134,7 @@ "changecontentmodel-emptymodels-title": "Nincs elérhető tartalommodell", "changecontentmodel-emptymodels-text": "A(z) [[:$1]] lapon lévő tartalom nem alakítható át semmilyen típusúvá.", "log-name-contentmodel": "Tartalommodell-változások naplója", - "log-description-contentmodel": "Egy lap tartalommodelljéhez kapcsolódó események", + "log-description-contentmodel": "Ez a napló lapok tartalommodelljének változását és az alapértelmezettől eltérő tartalommodellel létrehozott lapokat listázza.", "logentry-contentmodel-new": "$1 {{GENDER:$2|létrehozta}} a(z) $3 lapot nem alapértelmezett „$5” tartalommodellel.", "logentry-contentmodel-change": "$1 {{GENDER:$2|megváltoztatta}} a(z) $3 lap tartalommodeljét erről: „$4” erre: „$5”", "logentry-contentmodel-change-revertlink": "visszaállítás", @@ -2100,6 +2145,9 @@ "modifiedarticleprotection": "megváltoztatta a(z) „[[$1]]” lap védelmi szintjét", "unprotectedarticle": "eltávolította a védelmet a(z) „[[$1]]” lapról", "movedarticleprotection": "áthelyezte „[[$2]]” védelmi beállításait „[[$1]]” cím alá", + "protectedarticle-comment": "„[[$1]]” {{GENDER:$2|levédve}}", + "modifiedarticleprotection-comment": "„[[$1]]” védelmi szintje {{GENDER:$2|módosítva}}", + "unprotectedarticle-comment": "„[[$1]]” lapvédelme {{GENDER:$2|feloldva}}", "protect-title": "„$1” levédése", "protect-title-notallowed": "„$1” védelmi szintjének megtekintése", "prot_1movedto2": "[[$1]] lapot átneveztem [[$2]] névre", @@ -2345,6 +2393,7 @@ "proxyblockreason": "Az IP-címeden ''nyílt proxy'' üzemel. Amennyiben nem használsz proxyt, vedd fel a kapcsolatot egy informatikussal vagy az internetszolgáltatóddal ezen súlyos biztonsági probléma ügyében.", "sorbsreason": "Az IP-címed nyitott proxyként szerepel e webhely által használt DNSBL listán.", "sorbs_create_account_reason": "Az IP-címed nyitott proxyként szerepel e webhely által használt DNSBL listán. Nem hozhatsz létre fiókot.", + "softblockrangesreason": "Az anonim szerkesztések nem engedélyezettek az IP-címedről ($1). Jelentkezz be a szerkesztéshez.", "xffblockreason": "Az X-Forwarded-For fejlécben lévő IP-cím, akár a tied, akár a használt proxy szerveré, blokkolva van. Az eredeti blokkolási ok: $1", "cant-see-hidden-user": "A felhasználó, akit blokkolni próbáltál már blokkolva és rejtve van. Mivel nincs felhasználó elrejtése jogosultságod, nem láthatod és nem szerkesztheted a felhasználó blokkját.", "ipbblocked": "Nem blokkolhatsz és nem oldhatod fel más felhasználók blokkjait, mert te magad is blokkolva vagy", @@ -2380,6 +2429,8 @@ "cant-move-to-user-page": "Nincs jogosultságod átnevezni egy lapot szerkesztői lapnak (kivéve annak allapjának).", "cant-move-category-page": "Nincs jogosultságod kategórialapok átnevezéséhez.", "cant-move-to-category-page": "Nincs jogosultságod átnevezni egy lapot kategórialapnak.", + "cant-move-subpages": "Nincs jogosultságod az allapok átnevezéséhez.", + "namespace-nosubpages": "A(z) „$1” névtérben nem használhatóak allapok.", "newtitle": "Az új cím:", "move-watch": "Figyeld a lapot", "movepagebtn": "Lap átnevezése", @@ -2633,6 +2684,7 @@ "pageinfo-length": "Lap hossza (bájtokban)", "pageinfo-article-id": "Lapazonosító", "pageinfo-language": "Laptartalom nyelve", + "pageinfo-language-change": "módosítás", "pageinfo-content-model": "Oldal tartalom modell", "pageinfo-content-model-change": "módosítás", "pageinfo-robot-policy": "Indexelés robottal", @@ -2688,6 +2740,7 @@ "log-show-hide-patrol": "járőrnapló $1", "log-show-hide-tag": "címkenapló $1", "confirm-markpatrolled-button": "OK", + "confirm-markpatrolled-top": "Ellenőrzöttnek jelölöd a(z) $2 lap $3 változatát?", "deletedrevision": "Régebbi változat törölve: $1", "filedeleteerror-short": "Hiba a fájl törlésekor: $1", "filedeleteerror-long": "Hibák merültek föl a következő fájl törlésekor:\n\n$1", @@ -3304,7 +3357,7 @@ "tags-deactivate": "deaktiválás", "tags-hitcount": "{{PLURAL:$1|Egy|$1}} változtatás", "tags-manage-no-permission": "Nincs engedélyed a változtatások címkéinek kezeléséhez.", - "tags-manage-blocked": "Nem tudja kezelni a változás kategóriát, amíg blokkolt.", + "tags-manage-blocked": "Nem kezelheted a módosításcímkéket, amíg blokkolva {{GENDER:$1|vagy}}.", "tags-create-heading": "Új címke létrehozása", "tags-create-explanation": "Alapértelmezés szerint az újonnan létrehozott címkék felhasználók és botok által manuálisan hozzáadhatók lesznek.", "tags-create-tag-name": "Címke neve:", @@ -3340,11 +3393,11 @@ "tags-deactivate-not-allowed": "Nem lehetséges a(z) „$1” címkét deaktiválni.", "tags-deactivate-submit": "Deaktiválás", "tags-apply-no-permission": "Nincs jogosultságod a szerkesztéseidet címkékkel ellátni.", - "tags-apply-blocked": "Nem módosíthatsz címkéket, amíg blokkolva vagy.", + "tags-apply-blocked": "Nem használhatsz módosításcímkéket a szerkesztéseidhez, amíg blokkolva {{GENDER:$1|vagy}}.", "tags-apply-not-allowed-one": "A(z) „$1” címke nem alkalmazható manuálisan.", "tags-apply-not-allowed-multi": "A következő {{PLURAL:$2|címke|címkék}} nem alkalmazhatók manuálisan: $1", "tags-update-no-permission": "Nincs jogosultságod egyedi változatok és naplóbejegyzések címkézésére és címkék eltávolítására.", - "tags-update-blocked": "Nem adhatsz hozzá vagy távolíthatsz el címkéket, amíg blokkolva vagy.", + "tags-update-blocked": "Nem adhatsz hozzá vagy távolíthatsz el címkéket, amíg blokkolva {{GENDER:$1|vagy}}.", "tags-update-add-not-allowed-one": "A(z) „$1” címke nem adható hozzá manuálisan.", "tags-update-add-not-allowed-multi": "A következő {{PLURAL:$2|címke|címkék}} nem adhatók hozzá manuálisan: $1", "tags-update-remove-not-allowed-one": "A „$1” címkét nem lehet törölni.", @@ -3421,6 +3474,7 @@ "htmlform-user-not-exists": "$1 nem létezik.", "htmlform-user-not-valid": "$1 nem egy érvényes felhasználónév.", "logentry-delete-delete": "$1 törölte a következő lapot: $3", + "logentry-delete-delete_redir": "$1 {{GENDER:$2|törölte}} a(z) $3 átirányítást felülírással", "logentry-delete-restore": "$1 helyreállította a következő lapot: $3", "logentry-delete-event": "$1 megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát a(z) $3 című lapon: $4", "logentry-delete-revision": "$1 {{GENDER:$2|módosította}} a(z) $3 című lap {{PLURAL:$5|egy|$5}} lapváltozatának láthatóságát: $4", @@ -3488,6 +3542,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|frissítette}} a címkéket a(z) $3 lap $5 napló bejegyzésénél ({{PLURAL:$7|hozzáadta}}: $6; {{PLURAL:$9|eltávolította}}: $8)", "rightsnone": "(semmi)", "revdelete-summary": "a szerkesztési összefoglalóját", + "rightslogentry-temporary-group": "$1 (ideiglenesen, a következő időpontig: $2)", "feedback-adding": "Visszajelzés elmentése...", "feedback-back": "Vissza", "feedback-bugcheck": "Nagyszerű! Ellenőrizd, hogy ez nem egy [$1 ismert hiba].", @@ -3562,8 +3617,11 @@ "pagelang-language": "Nyelv", "pagelang-use-default": "Alapértelmezett nyelv használata", "pagelang-select-lang": "Nyelv kiválasztása", + "pagelang-reason": "Indoklás", "pagelang-submit": "Küldés", "pagelang-nonexistent-page": "A(z) $1 lap nem létezik.", + "pagelang-unchanged-language": "A(z) $1 lap már $2 nyelvű.", + "pagelang-unchanged-language-default": "A(z) $1 lap már a wiki alapértelmezett tartalomnyelvére van állítva.", "right-pagelang": "oldal nyelvének megváltoztatása", "action-pagelang": "oldal nyelvének módosítása", "log-name-pagelang": "Nyelvváltoztatások naplója", @@ -3630,6 +3688,7 @@ "mw-widgets-dateinput-no-date": "Nincs kiválasztott dátum", "mw-widgets-dateinput-placeholder-day": "ÉÉÉÉ-HH-NN", "mw-widgets-dateinput-placeholder-month": "ÉÉÉÉ-HH", + "mw-widgets-mediasearch-input-placeholder": "Média keresése", "mw-widgets-mediasearch-noresults": "Nincs találat.", "mw-widgets-titleinput-description-new-page": "a lap még nem létezik", "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1", @@ -3657,6 +3716,7 @@ "log-action-filter-contentmodel-change": "Tartalommodell módosítása", "log-action-filter-contentmodel-new": "Lap létrehozása nem alapértelmezett tartalommodellel", "log-action-filter-delete-delete": "Laptörlés", + "log-action-filter-delete-delete_redir": "Átirányítás felülírása", "log-action-filter-delete-restore": "Visszaállítás", "log-action-filter-delete-event": "Naplótörlés", "log-action-filter-delete-revision": "Lapváltozat-törlés", @@ -3758,5 +3818,7 @@ "usercssispublic": "Figyelem: CSS-allapokon ne tárolj bizalmas adatokat, mivel minden felhasználó számára láthatóak.", "restrictionsfield-badip": "Érvénytelen IP-cím vagy -tartomány: $1", "restrictionsfield-label": "Engedélyezett IP-tartományok:", - "restrictionsfield-help": "Egy IP-cím vagy CIDR-tartomány soronként. Minden engedélyezéséhez használd a következő tartományokat:
0.0.0.0/0
::/0" + "restrictionsfield-help": "Egy IP-cím vagy CIDR-tartomány soronként. Minden engedélyezéséhez használd a következő tartományokat:\n
\n0.0.0.0/0\n::/0\n
", + "revid": "$1 változat", + "pageid": "$1 lapazonosító" } diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json index cf3c23b5db..96bb80c5c0 100644 --- a/languages/i18n/ia.json +++ b/languages/i18n/ia.json @@ -1044,6 +1044,7 @@ "youremail": "E-mail:", "username": "{{GENDER:$1|Nomine de usator}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} de {{PLURAL:$1|gruppo|gruppos}}:", + "group-membership-link-with-expiry": "$1 (usque a $2)", "prefs-registration": "Data de registration:", "yourrealname": "Nomine real:", "yourlanguage": "Lingua:", @@ -1099,6 +1100,14 @@ "userrights-nodatabase": "Le base de datos $1 non existe o non es local.", "userrights-changeable-col": "Gruppos que tu pote modificar", "userrights-unchangeable-col": "Gruppos que tu non pote modificar", + "userrights-expiry-current": "Expiration: $2", + "userrights-expiry-none": "Non expira", + "userrights-expiry": "Expiration:", + "userrights-expiry-existing": "Expiration existente: le $2 a $3", + "userrights-expiry-othertime": "Altere hora:", + "userrights-expiry-options": "1 die:1 day,1 septimana:1 week,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anno:1 year", + "userrights-invalid-expiry": "Le hora de expiration pro le gruppo \"$1\" es invalide.", + "userrights-expiry-in-past": "Le hora de expiration pro le gruppo \"$1\" es in le passato.", "userrights-conflict": "Conflicto inter cambiamentos de derectos de usator! Per favor revide e confirma tu cambiamentos.", "group": "Gruppo:", "group-user": "Usatores", @@ -1300,8 +1309,11 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Monstrar", "rcfilters-activefilters": "Filtros active", + "rcfilters-restore-default-filters": "Restaurar filtros predefinite", + "rcfilters-clear-all-filters": "Rader tote le filtros", "rcfilters-search-placeholder": "Filtrar le modificationes recente (naviga o comencia a scriber)", "rcfilters-invalid-filter": "Filtro non valide", + "rcfilters-empty-filter": "Nulle filtro active. Tote le contributiones es monstrate.", "rcfilters-filterlist-title": "Filtros", "rcfilters-filterlist-noresults": "Nulle filtro trovate", "rcfilters-filtergroup-registration": "Registration del usator", @@ -1849,7 +1861,10 @@ "apisandbox-sending-request": "Invia requesta API...", "apisandbox-loading-results": "Recipe resultatos API...", "apisandbox-results-error": "Un error ha occurrite durante le cargamento del responsa al consulta API: $1.", + "apisandbox-request-selectformat-label": "Monstrar datos del requesta como:", + "apisandbox-request-format-url-label": "Catena de requesta del URL", "apisandbox-request-url-label": "URL de requesta:", + "apisandbox-request-json-label": "JSON del requesta:", "apisandbox-request-time": "Duration del requesta: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Corrige le indicio e reinvia", "apisandbox-results-fixtoken-fail": "Impossibile recuperar indicio \"$1\".", @@ -1991,7 +2006,7 @@ "emailccsubject": "Copia de tu message a $1: $2", "emailsent": "E-mail inviate", "emailsenttext": "Tu message de e-mail ha essite inviate.", - "emailuserfooter": "Iste e-mail ha essite {{GENDER:$1|inviate}} per $1 a {{GENDER:$2|$2}} con le function \"{{int:emailuser}}\" in {{SITENAME}}.\n{{GENDER:$2|Le}} message ha essite inviate directemente al {{GENDER:$1|expeditor|expeditrice}} original, revelante {{GENDER:$2|tu}} adresse de e-mail a {{GENDER:$1|ille|illa}}.", + "emailuserfooter": "Iste e-mail ha essite {{GENDER:$1|inviate}} per $1 a {{GENDER:$2|$2}} con le function \"{{int:emailuser}}\" in {{SITENAME}}.\nSi {{GENDER:$2|tu}} responde a iste message, {{GENDER:$2|tu}} responsa essera inviate directemente al {{GENDER:$1|expeditor|expeditrice}} original, revelante {{GENDER:$2|tu}} adresse de e-mail a {{GENDER:$1|ille|illa}}.", "usermessage-summary": "Lassante un message de systema.", "usermessage-editor": "Messagero del systema", "watchlist": "Observatorio", @@ -3506,6 +3521,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|actualisava}} etiquettas sur le entrata de registro $5 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)", "rightsnone": "(nulle)", "revdelete-summary": "summario del modification", + "rightslogentry-temporary-group": "$1 (temporari, usque a $2)", "feedback-adding": "Le responsa es addite al pagina...", "feedback-back": "Retornar", "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].", diff --git a/languages/i18n/ie.json b/languages/i18n/ie.json index 62abac034c..c2201b1c41 100644 --- a/languages/i18n/ie.json +++ b/languages/i18n/ie.json @@ -13,7 +13,8 @@ "לערי ריינהארט", "아라", "Srdjan m", - "Macofe" + "Macofe", + "Stavanger7" ] }, "tog-underline": "Ultracatenun:", @@ -172,11 +173,13 @@ "searcharticle": "Ear", "history": "Historie", "history_short": "Historie de versiones", + "history_small": "diarium", "updatedmarker": "modernisat desde mi ultim visitation", "printableversion": "Version a printar", "permalink": "Permanent referentie", "print": "Printar", "view": "Leer", + "view-foreign": "Vider sur $1", "edit": "Redacter", "create": "Crear", "editthispage": "Redacter", @@ -211,6 +214,7 @@ "otherlanguages": "Altri lingues", "redirectedfrom": "(Redirectet de $1)", "redirectpagesub": "Págine de redirecterion", + "redirectto": "Redirection a:", "lastmodifiedat": "Ti-ci págine esset redactet in ultim li $1, clocca $2.", "viewcount": "Ti págine ha esset accesset {{PLURAL:$1|un vez|$1 vezes}}.", "protectedpage": "Un protectet págine", @@ -230,6 +234,7 @@ "disclaimers": "Advertimentes", "disclaimerpage": "Project:Advertimentes", "edithelp": "Redactori auxilie", + "helppage-top-gethelp": "Auxilie", "mainpage": "Principal págine", "mainpage-description": "Principal págine", "policy-url": "Project:Regulariumes", @@ -260,6 +265,8 @@ "hidetoc": "ocultar", "collapsible-collapse": "Celar", "collapsible-expand": "Monstrar", + "confirmable-yes": "Yes", + "confirmable-no": "No", "thisisdeleted": "Vider o restaurar $1?", "viewdeleted": "Vider $1?", "restorelink": "{{PLURAL:$1|un deleet version|$1 deleet versiones}}", @@ -289,21 +296,30 @@ "error": "Erra", "databaseerror": "Erra del data-base", "databaseerror-text": "Un erra in li questionada del database ha evenit. To posse indicar un erra in li software.", + "databaseerror-function": "Function: $1", + "databaseerror-error": "Errore: $1", "missing-article": "Li textu de «$1» $2 ne ha esset trovat in li data-base.\n\nIt es possibil, que ti págine ha esset deleet o movet.\n\n\nSi to ne es just, tu ha forsan trovat un erra in li programma.\nPles raporta it a un [[Special:ListUsers/sysop|administrator]], notante li URL.", "missingarticle-rev": "(revision#: $1)", + "missingarticle-diff": "(Diff: $1, $2)", + "internalerror": "Errore intern", + "internalerror_info": "Errore intern: $1", "unexpected": "Valor ínexpectat: \"$1\"=\"$2\".", "badtitle": "Titul mal", "badtitletext": "Li titul de págine solicitat esset ínvalid, vacui, o íncorectmen ligat inter-lingue o un titul inter-wiki.\nIt posse contene un o plu carácteres quel ne posse esser usat in titules.", "viewsource": "Vider fonte", - "viewsourcetext": "Vu posse vider e copiar li contenete de ti págine:", + "viewsource-title": "Vider li fonte de «$1»", + "viewsourcetext": "Vu posse vider e copiar li contenete de ti págine.", "titleprotected": "Ti titul ha esset gardat de creation per [[User:$1|$1]]. \nLi motive dat es $2.", "virus-badscanner": "Configuration maliciosi: virus desconosset examinat: ''$1''", "virus-scanfailed": "scandesion fallit (code $1)", "virus-unknownscanner": "antivírus desconosset:", "logouttext": "'''Tu ha terminat tui session.'''\n\nNota, que alcun págines posse continualmen esser monstrat quasi tu vell ancor esser inregistrat, til que tu vacua li cache de tui navigator.", + "welcomeuser": "Benevenit, $1!", "yourname": "Nómine de usator:", + "userlogin-yourname": "Nómine de usator", "yourpassword": "Parol-clave:", "yourpasswordagain": "Parol-clave denov:", + "userlogin-signwithsecure": "Usar un secur conexion", "yourdomainname": "Tui dominia:", "login": "Aperter session", "nav-login-createaccount": "Crear un conto o intrar", @@ -312,12 +328,17 @@ "logout": "Surtida", "userlogout": "Surtir", "notloggedin": "Vu ne ha intrat", + "userlogin-noaccount": "Ne have un conto?", + "userlogin-joinproject": "Adherer a {{SITENAME}}", "nologin": "Ne have un conto? $1.", "nologinlink": "Crear un conto", "createaccount": "Crear un conto", "gotaccount": "Ja have un conto? $1.", "gotaccountlink": "Intrar", "userlogin-resetlink": "Obliviat tui detallies de registre?", + "createacct-benefit-body1": "{{PLURAL:$1|redaction|redactiones}}", + "createacct-benefit-body2": "{{PLURAL:$1|págine|págines}}", + "createacct-benefit-body3": "recent {{PLURAL:$1|contributor|contributores}}", "badretype": "Li passa-paroles queles vu tippat ne es identic.", "userexists": "Nómine de usator ja in usu.\nPleser opta por un nómine diferent.", "loginerror": "Erra in initiation del session", @@ -331,10 +352,16 @@ "acct_creation_throttle_hit": "Vu ja ha creat $1 contos. Vu ne posse crear pli mult quam to.", "loginlanguagelabel": "Lingue: $1", "suspicious-userlogout": "Tui petition por surtir esset desaprobat pro que probabilmen esset inviat per un navigator ruptet o servitor de autorisation che caching.", + "pt-login-button": "Aperter session", + "pt-createaccount": "Crear un conto", "changepassword": "Modificar passa-parol", "oldpassword": "Anteyan passa-parol:", "newpassword": "Nov passa-parol:", "retypenew": "Confirmar nov passa-parol", + "botpasswords-label-create": "Crear", + "botpasswords-label-update": "Actualisar", + "botpasswords-label-cancel": "Anullar", + "botpasswords-label-delete": "Deleter", "passwordreset-username": "Vor nómine usatori", "bold_sample": "Nigri textu", "bold_tip": "Nigri textu", @@ -365,6 +392,7 @@ "subject-preview": "Prevision de Tema/Division:", "whitelistedittext": "Vu have que $1 por redacter págines.", "loginreqtitle": "Apertion de session obligatori", + "loginreqlink": "aperter session", "accmailtitle": "Li passa-parol es inviat.", "accmailtext": "Li passa-parol por '$1' ha esset inviat a $2.", "newarticle": "(Nov)", @@ -379,9 +407,11 @@ "userjspreview": "'''Memora que vu es solmen provant/monstrant tui JavaScript de usator.'''\n'''It ne ha esset conservat ancor!'''", "userinvalidcssjstitle": "'''Advertiment:''' Ne vi pelle \"$1\".\nMemora que hábitu .css e págines .js usa un titul plu bass, e.g. {{ns:user}}:Foo/vector.css quam oposit por {{ns:user}}:Foo/Vector.css.", "updated": "(Modernisat)", + "note": "Note:", "previewnote": "'''Memora se que ti es solmen un prevision.'''\nTui changes ancor ne ha esset conservat!", "token_suffix_mismatch": "'''Tui redaction ha esset rejectet pro que tui software de navigation multilat li carácteres de punctuation in li simbol de redaction.'''\nLi redaction ha esset rejectet por impedir corruption del textu de págine.\nTi quelcvez ocurre quande vu es usant un service de autorisation anonim mal executet in Internet.", "editing": "Redactent $1", + "creating": "Creation de «$1»", "editingsection": "Redactent $1 (division)", "editingcomment": "Redactent $1 (nov division)", "yourtext": "Tui textu", @@ -410,7 +440,7 @@ "currentrev": "Ultim revision", "currentrev-asof": "Actual version de $2, clocca $3", "revisionasof": "Revision de $1", - "revision-info": "Revision de $1 e il ha fabricat de $2", + "revision-info": "Revision de $1, fat de $2:$7", "previousrevision": "← Anteyan version", "nextrevision": "Revision sequent →", "currentrevisionlink": "Ultim revision", @@ -426,14 +456,24 @@ "histlast": "max nov", "history-feed-item-nocomment": "$1 in $2", "rev-delundel": "monstrar/ocultar", + "revdelete-show-file-submit": "Yes", "revdel-restore": "changer visibilitá", + "revdelete-offender": "Autor del version:", "suppressionlog": "Diarium de supression", - "suppressionlogtext": "Infra es un liste de deletiones e bloces involuent contenete ocultant de administratores. \nVider li [[Special:IPBlockList|liste de bloc de IP]] por li liste de bloces e bannimentes operational currentmen.", + "suppressionlogtext": "Infra es un liste de deletiones e blocs involuent contenete ocultat fro administratores. \nVider li [[Special:BlockList|liste de bloc de IP]] por li liste de blocs e bannimentes operational currentmen.", + "mergehistory-go": "Monstrar li coalescibil redactiones", + "mergehistory-submit": "Coalescer li redactiones", + "mergehistory-done": "$3 {{PLURAL:$3|revision|revisiones}} de $1 ha esset coalescet in [[:$2]].", + "mergehistory-reason": "Motive:", "revertmerge": "Desfar fusion", "history-title": "Historic del revision de \"$1\"", + "difference-title": "Differentie inter li versiones de «$1»", "lineno": "Linea $1:", "compareselectedversions": "Comparar revisiones selectet", "editundo": "anullar", + "diff-empty": "(Null differentie)", + "diff-multi-sameuser": "({{PLURAL:$1|Un intermediari version|$1 intermediari versiones}} del sam usator non es monstrat)", + "diff-multi-otherusers": "({{PLURAL:$1|Un intermediari version|$1 intermediari versiones}} de {{PLURAL:$2|un altri usator|$2 usatores}} non es monstrat)", "searchresults": "Serch-resultates", "searchresults-title": "Serch-resultates por «$1»", "titlematches": "Resultates in li titules de págines", @@ -458,22 +498,31 @@ "search-result-category-size": "{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})", "search-redirect": "(redirection de «$1»)", "search-section": "(section $1)", + "search-category": "(categorie $1)", "search-suggest": "Esque tu ha intentet: «$1»?", + "search-interwiki-more": "(plu)", "searchrelated": "relatet", "searchall": "omni", + "search-showingresults": "{{PLURAL:$4|Resultate $1 de $3|Resultates $1 – $2 de $3}}", "search-nonefound": "Tu sercha ne ha trovat un resultate.", "preferences": "Preferenties", "mypreferences": "Preferenties", + "prefs-skin": "Tema visual", "skin-preview": "Prevision", + "prefs-watchlist": "Vigilat págines", + "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|die|dies}}", "saveprefs": "Conservar", "searchresultshead": "Serchar", "stub-threshold": "Catenunes por págines de contenete va aparir de ti forme si ili have minu de (bytes):", "timezonelegend": "Zone de témpor:", + "localtime": "Hora local:", "timezoneuseserverdefault": "Usar wiki de contumacie ($1)", "timezoneuseoffset": "Altri (specificar compensation)", + "servertime": "Hora del servitor:", "timezoneregion-africa": "Africa", "timezoneregion-america": "America", "timezoneregion-antarctica": "Antarctica", + "timezoneregion-arctic": "Arctica", "timezoneregion-asia": "Asia", "timezoneregion-atlantic": "Ocean Atlantic", "timezoneregion-australia": "Australia", @@ -482,13 +531,20 @@ "timezoneregion-pacific": "Ocean Pacific", "youremail": "Adresa e-pošte:", "username": "Nómine de usator:", + "group-membership-link-with-expiry": "$1 (til $2)", "yourrealname": "Nómine real:", "yourlanguage": "Lingue:", "yourvariant": "Variante:", "yournick": "Nov signature:", "yourgender": "Génere:", + "gender-male": "Il redacte págines de wiki", + "gender-female": "Ella redacte págines de wiki", "prefs-help-email": "Adresse de e-mail es optional, ma es necessitá por recomensar parol-clave, deve vu obliviar tui parol-clave.", "prefs-help-email-others": "Vu posse anc optar por permisser altri contacter vu per e-mail complet che un catenun in tui págine de usator o págine de discussion.\nTui adresse de e-mail ne es revelat quande altri usatores contacter vu.", + "prefs-i18n": "Internationalisation", + "prefs-signature": "Signature", + "prefs-dateformat": "Formato del date", + "prefs-editor": "Redactor", "userrights": "Gerement de jures de usator", "userrights-lookup-user": "Gerer gruppes de usator", "userrights-user-editname": "Intrar un nómine de usator:", @@ -499,21 +555,30 @@ "userrights-reason": "Motive:", "userrights-no-interwiki": "Vu ne have permission por redacter jures de usator in altri wikis.", "userrights-nodatabase": "Funde de data $1 ne existe o ne es local.", - "userrights-nologin": "Vu deve [[Special:UserLogin|registrar]] che un conto de administrator por atribuer jures de usator.", - "userrights-notallowed": "Tui conto ne have permission por atribuer jures de usator.", "userrights-changeable-col": "Gruppes que vu posse changear", "userrights-unchangeable-col": "Gruppes que vu ne posse changear", + "userrights-expiry-options": "1 die:1 day,1 semane:1 week,1 mensu:1 month,3 mensus:3 months,6 mensus:6 months,1 annu:1 year", + "group": "Gruppe:", "group-user": "Usatores", "group-sysop": "Administratores", - "group-user-member": "Usator", + "group-bureaucrat": "Burocrates", + "group-all": "(omni)", + "group-user-member": "{{GENDER:$1|usator}}", + "group-bot-member": "{{GENDER:$1|bot}}", + "group-sysop-member": "{{GENDER:$1|administrator}}", + "group-bureaucrat-member": "{{GENDER:$1|burocrate}}", + "group-suppress-member": "{{GENDER:$1|supressor}}", "grouppage-user": "{{ns:project}}:Usatores", "grouppage-sysop": "{{ns:project}}:Administratores", "grouppage-bureaucrat": "{{ns:project}}:Burócrates", "grouppage-suppress": "{{ns:project}}:Vigilatores", + "right-writeapi": "Usage del API de scrition", + "grant-basic": "Basic jures", "newuserlogpage": "Diarium de creation de usator", "rightslog": "Diarium de jures de usator", "action-edit": "redacter ti págine", "nchanges": "$1 {{PLURAL:$1|change|changes}}", + "enhancedrc-history": "diarium", "recentchanges": "Nov changes", "recentchanges-legend": "Optiones de nov changes", "recentchanges-summary": "Seque sur ti-ci págine li ultim modificationes al wiki.", @@ -522,14 +587,23 @@ "recentchanges-label-minor": "Ti es un redaction minori", "recentchanges-label-bot": "Ti redaction esset efectuat per un machine", "recentchanges-label-unpatrolled": "Ti redaction ne have ancor esset protectet", + "recentchanges-legend-heading": "Legende:", + "rcfilters-filterlist-title": "Filtres", + "rcfilters-filter-registered-label": "Registrat", "rcnotefrom": "In infra es li changes desde '''$2''' (ad-supra por '''$1''' monstrat).", "rclistfrom": "Monstrar li nov modificationes desde $3 $2", "rcshowhideminor": "$1 redactiones minori", + "rcshowhideminor-show": "Monstrar", "rcshowhidebots": "$1 machines", + "rcshowhidebots-hide": "Ocultar", "rcshowhideliu": "$1 usatores registrat", + "rcshowhideliu-hide": "Ocultar", "rcshowhideanons": "$1 usatores anonim", + "rcshowhideanons-show": "Monstrar", "rcshowhidepatr": "$1 redactiones vigilat", + "rcshowhidepatr-hide": "Ocultar", "rcshowhidemine": "$1 mi redactiones", + "rcshowhidemine-show": "Monstrar", "rclinks": "Monstrar li $1 ultim modificationes fat durante li $2 ultim dies
$3.", "diff": "dif", "hist": "hist", @@ -538,6 +612,7 @@ "minoreditletter": "m", "newpageletter": "N", "boteditletter": "b", + "newsectionsummary": "/* $1 */ nov section", "rc-enhanced-expand": "Monstrar detaľes (per JavaScript)", "rc-enhanced-hide": "Ocultar detallies", "recentchangeslinked": "Changes referet", @@ -558,7 +633,9 @@ "upload-prohibited": "Tipes de file prohibit: $1.", "uploadlogpage": "Diarium de cargament", "uploadlogpagetext": "Infra es un liste de cargamentes de file max recent.\nVider li [[Special:NewFiles|galerie de nov files]] por posser vider it.", + "filename": "File-nómine", "filedesc": "Descrition", + "filesource": "Orígine:", "verification-error": "Ti file ne passat per li verification de file.", "unknown-error": "Un errore desconosset ocurret.", "tmp-create-error": "Ne posset crear file temporari.", @@ -579,6 +656,11 @@ "upload-misc-error": "Errore desconosset de cargament", "upload-misc-error-text": "Un errore desconosset ocurret durante li cargament.\nPleser verificar que li URL es valid e accessibil e prova denov.\nSi li problema persister, parla che un [[Special:ListUsers/sysop|administrator]].", "upload-http-error": "Un errore HTTP ocurret: $1", + "upload-dialog-title": "Cargar un file", + "upload-dialog-button-cancel": "Anullar", + "upload-form-label-infoform-name": "Nómine", + "upload-form-label-infoform-date": "Date", + "http-invalid-url": "Ínvalid URL: $1", "upload-curl-error6": "Ne esset possibil ear in li URL", "upload-curl-error6-text": "Li URL preferet ne esset visitat.\nPleser vide denov que li URL es corect e si li loc es disponibil.", "upload-curl-error28": "For de témpor por cargament de files", @@ -668,6 +750,7 @@ "suppress": "Perspective comun", "booksources": "Librari fontes", "booksources-search-legend": "Serchar por fontes de libre", + "booksources-search": "Serchar", "specialloguserlabel": "Executor:", "speciallogtitlelabel": "Cible (titul o usator):", "log": "Diariumes", @@ -715,6 +798,7 @@ "deleteotherreason": "Altri motive:", "deletereasonotherlist": "Altri motive", "rollbacklink": "desfar", + "rollbacklinkcount": "revocar $1 {{PLURAL:$1|redaction|redactiones}}", "protectlogpage": "Diarium de protection", "protectedarticle": "gardat \"[[$1]]\"", "prot_1movedto2": "[[$1]] hat movet por [[$2]]", @@ -766,6 +850,7 @@ "contributions": "Contributiones de {{GENDER:$1|usator|usatoressa}}", "contributions-title": "Contributiones de usator por $1", "mycontris": "Contributiones", + "anoncontribs": "Contributiones", "contribsub2": "De {{GENDER:$3|$1}} ($2)", "uctop": "(actual)", "month": "De mensu (e anterioris):", @@ -872,7 +957,7 @@ "tooltip-ca-nstab-main": "Vider li articul", "tooltip-ca-nstab-user": "Vider li págine de usator", "tooltip-ca-nstab-media": "Vider li págine de media", - "tooltip-ca-nstab-special": "Ti es un págine special, vu ne posse redacter it", + "tooltip-ca-nstab-special": "To es un págine special, on ne posse redacter it", "tooltip-ca-nstab-project": "Vider li págine de projecte", "tooltip-ca-nstab-image": "Vider li págine de figura", "tooltip-ca-nstab-mediawiki": "Vider li missage de sistema", @@ -891,6 +976,8 @@ "tooltip-undo": "«Desfar» reverte solmen ti-ci redaction e monstra li resultate in prevision, porque tu posse indicar un rason in li linea de resumé.", "tooltip-preferences-save": "Conservar preferenties", "tooltip-summary": "Ples intrar un curt resummation.", + "simpleantispam-label": "Control anti-spam.\nNe plena to ci!", + "pageinfo-toolboxlink": "Information pri li págine", "previousdiff": "← Redaction anteriori", "nextdiff": "Proxim redaction →", "thumbsize": "Mesura de miniatura:", @@ -899,6 +986,8 @@ "file-nohires": "Nequant resolution max alt disponibil.", "svg-long-desc": "(file SVG, nominalmen $1 × $2 pixeles, mesura de file: $3)", "show-big-image": "Original file", + "show-big-image-preview": "Dimension de ci prevision: $1.", + "show-big-image-other": "Altri {{PLURAL:$2|resolution|resolutiones}}: $1.", "newimages": "Galerie de nov images", "ilsubmit": "Serchar", "video-dims": "$1, $2×$3", @@ -906,6 +995,15 @@ "metadata": "Metadata", "metadata-help": "Ti file contene information additional, probabilmen adjuntet de li cámera digitale o scandetor usat por crear o digitalizar it. Si li file ha esset redactet de tui statu original, alcun detallies posse ne reflecter completmen li file redactet.", "metadata-fields": "Campes metadata de figura listat in ti missage va esser includet in págine de figura monstra quande li tabelle metadata es crulat.\nAltri va esser ocultat per contumacie.\n* fabrication\n* modelle\n* origine de figura\n* témpor de exposition\n* númere\n* percentages de velocitá\n* longore focal\n* artist\n* jure editorial\n* descrition de figura\n* latitúdine\n* longitúdine\n* altitudine", + "exif-orientation": "Orientation", + "exif-xresolution": "Resolution horizontal", + "exif-yresolution": "Resolution vertical", + "exif-datetime": "Date e hora de modification del file", + "exif-make": "Fabricante del cámera", + "exif-model": "Modelle del cámera", + "exif-exifversion": "Version de Exif", + "exif-colorspace": "Spacie del colores", + "exif-orientation-1": "Normal", "namespacesall": "omni", "monthsall": "omni", "imgmultigo": "Ear!", @@ -977,5 +1075,10 @@ "tags-hitcount-header": "Changes nómiat", "tags-edit": "redacter", "tags-hitcount": "$1 {{PLURAL:$1|change|changes}}", - "rightsnone": "(null)" + "logentry-delete-delete": "$1 ha removet li págine $3", + "logentry-move-move": "$1 ha movet li págine $3 a $4", + "logentry-newusers-create": "Conto de usator $1 ha esset creat", + "logentry-upload-upload": "$1 ha cargat $3", + "rightsnone": "(null)", + "searchsuggest-search": "Serchar {{SITENAME}}" } diff --git a/languages/i18n/io.json b/languages/i18n/io.json index c9fc595b13..66762ee53d 100644 --- a/languages/i18n/io.json +++ b/languages/i18n/io.json @@ -63,7 +63,9 @@ "tog-prefershttps": "Sempre uzar sekura konekto kande facar log in", "underline-always": "Sempre", "underline-never": "Nulatempe", + "underline-default": "Pre-ajustaji pri sub-strekizar ligili", "editfont-style": "Stilo di fonto uzata por editar la texto:", + "editfont-default": "Preajustaji di navigilo", "editfont-monospace": "Tipo por redaktar kun singla spaco", "editfont-sansserif": "tipo Sans-serif", "editfont-serif": "tipo di fonto Serif", @@ -290,6 +292,7 @@ "restorelink": "{{PLURAL:$1|1 redakto efacita|$1 redakti efacita}}", "feedlinks": "Fonto RSS:", "feed-invalid": "Tipo di fonto RSS nevalida", + "feed-unavailable": "Abonata publikaji ne esas disponebla", "site-rss-feed": "$1 RSS Provizajo", "site-atom-feed": "$1 Atom Provizajo", "page-rss-feed": "\"$1\" RSS Provizajo", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index ce3d5e7922..045b17ea58 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -103,7 +103,8 @@ "Anto", "Saracrovetto", "Tosky", - "Selven" + "Selven", + "Margherita.mignanelli" ] }, "tog-underline": "Sottolinea i collegamenti:", @@ -1131,6 +1132,7 @@ "youremail": "Indirizzo email:", "username": "{{GENDER:$1|Nome utente}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|del gruppo|dei gruppi}}:", + "group-membership-link-with-expiry": "$1 (fino a $2)", "prefs-registration": "Data di registrazione:", "yourrealname": "Nome vero:", "yourlanguage": "Lingua dell'interfaccia:", @@ -1186,6 +1188,10 @@ "userrights-nodatabase": "Il database $1 non esiste o non è un database locale.", "userrights-changeable-col": "Gruppi modificabili", "userrights-unchangeable-col": "Gruppi non modificabili", + "userrights-expiry-current": "Scade il $1", + "userrights-expiry-none": "Non ha scadenza", + "userrights-expiry": "Scadenza:", + "userrights-expiry-options": "1 giorno:1 day,1 settimana:1 week,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 anno:1 year", "userrights-conflict": "Conflitto di modifica dei diritti utente! Controlla e conferma le tue modifiche.", "group": "Gruppo:", "group-user": "Utenti", @@ -1914,6 +1920,7 @@ "apisandbox-sending-request": "Invio richiesta di API...", "apisandbox-loading-results": "Ricezione dei risultati di API in corso...", "apisandbox-results-error": "Si è verificato un errore durante il caricamento della risposta all'interrogazione API: $1", + "apisandbox-request-selectformat-label": "Mostra i dati richiesti come:", "apisandbox-request-url-label": "URL di richiesta:", "apisandbox-request-time": "Tempo richiesto: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Correggi token e reinvia", @@ -2056,7 +2063,7 @@ "emailccsubject": "Copia del messaggio inviato a $1: $2", "emailsent": "Messaggio inviato", "emailsenttext": "Il messaggio e-mail è stato inviato.", - "emailuserfooter": "Questa email è stata {{GENDER:$1|inviata}} da $1 a {{GENDER:$2|$2}} attraverso la funzione \"{{int:emailuser}}\" su {{SITENAME}}. La {{GENDER:$2|tua}} eventuale email di risposta sarà inviata direttamente al {{GENDER:$1|mittente originale}}, rivelando il {{GENDER:$2|tuo}} indirizzo di posta elettronica a {{GENDER:$1|lui|lei}}.", + "emailuserfooter": "Questa email è stata inviata da $1 a $2 attraverso la funzione \"{{int:emailuser}}\" su {{SITENAME}}. Se {{GENDER:$2|risponderai}}, la tua email di risposta sarà inviata direttamente {{GENDER:$1|al|alla}} mittente originale, rivelando{{GENDER:$1|gli|le}} il {{GENDER:$2|tuo}} indirizzo di posta elettronica.", "usermessage-summary": "Messaggio di sistema", "usermessage-editor": "Messaggero di sistema", "usermessage-template": "MediaWiki:MessaggioUtente", diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json index 7280e51bcc..fb0d58ceb8 100644 --- a/languages/i18n/ja.json +++ b/languages/i18n/ja.json @@ -77,7 +77,9 @@ "ネイ", "Mirinano", "Suchichi02", - "にょきにょき" + "にょきにょき", + "おはぐろ蜻蛉", + "Aefgh39622" ] }, "tog-underline": "リンクの下線:", @@ -245,6 +247,7 @@ "searcharticle": "表示", "history": "ページの履歴", "history_short": "履歴", + "history_small": "履歴", "updatedmarker": "前回の閲覧以降に更新されました", "printableversion": "印刷用バージョン", "permalink": "この版への固定リンク", @@ -799,6 +802,7 @@ "invalid-content-data": "本文データが無効です", "content-not-allowed-here": "ページ [[$2]] では、「$1」コンテンツは許可されていません", "editwarning-warning": "このページを離れると、あなたが行なった変更がすべて失われてしまうかもしれません。\nログインしている場合、個人設定の「{{int:prefs-editing}}」タブでこの警告を表示しないようにすることができます。", + "editpage-invalidcontentmodel-title": "対応していないコンテンツ形式", "editpage-notsupportedcontentformat-title": "対応していないコンテンツ形式", "editpage-notsupportedcontentformat-text": "コンテンツ モデル $2 は、コンテンツ形式 $1 に対応していません。", "content-model-wikitext": "ウィキテキスト", @@ -1155,6 +1159,10 @@ "userrights-changeable-col": "変更できるグループ", "userrights-unchangeable-col": "変更できないグループ", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "期限 $1", + "userrights-expiry-none": "有効期限切れではありません", + "userrights-expiry": "有効期限:", + "userrights-expiry-othertime": "その他の期間:", "userrights-conflict": "利用者権限の変更が競合しています! 変更内容を確認してください。", "group": "グループ:", "group-user": "登録利用者", @@ -1319,6 +1327,7 @@ "action-userrights-interwiki": "他のウィキの利用者の利用者権限変更", "action-siteadmin": "データベースのロックまたはロック解除", "action-sendemail": "メールの送信", + "action-editmyoptions": "あなたの個人設定を編集", "action-editmywatchlist": "自身のウォッチリストの編集", "action-viewmywatchlist": "自身のウォッチリストの閲覧", "action-viewmyprivateinfo": "自分の非公開情報の閲覧", @@ -1345,6 +1354,16 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|新しいページ一覧]]も参照)", "recentchanges-legend-plusminus": "(±123)", "recentchanges-submit": "表示", + "rcfilters-clear-all-filters": "すべてのフィルターをクリア", + "rcfilters-invalid-filter": "無効なフィルター", + "rcfilters-filterlist-title": "フィルター", + "rcfilters-filterlist-noresults": "フィルターが見つかりませんでした", + "rcfilters-filtergroup-registration": "利用者登録", + "rcfilters-filter-registered-label": "登録済み", + "rcfilters-filter-registered-description": "ログイン済みの編集者。", + "rcfilters-filter-unregistered-label": "未登録", + "rcfilters-filter-bots-label": "ボット", + "rcfilters-filter-humans-label": "人間(ボットではない)", "rcnotefrom": "以下は$3 $4以降の{{PLURAL:$5|更新です}} (最大 $1 件)。", "rclistfrom": "$3の$2以降の更新を表示する", "rcshowhideminor": "細部の編集を$1", @@ -1419,7 +1438,7 @@ "fileuploadsummary": "概要:", "filereuploadsummary": "ファイルの変更:", "filestatus": "著作権情報:", - "filesource": "出典:", + "filesource": "情報源:", "ignorewarning": "警告を無視してファイルを保存", "ignorewarnings": "警告を無視", "minlength1": "ファイル名には少なくとも1文字必要です。", @@ -3656,56 +3675,12 @@ "feedback-useragent": "ユーザーエージェント:", "searchsuggest-search": "{{SITENAME}}内を検索", "searchsuggest-containing": "この語句を全文検索", - "api-error-autoblocked": "あなたの IP アドレスは、過去にブロックされた利用者によって使用されていたため、自動的にブロックされました。", - "api-error-badaccess-groups": "このウィキへのファイルのアップロードが許可されていません。", "api-error-badtoken": "内部エラー: トークンが正しくありません。", - "api-error-blocked": "あなたは編集ブロックされています。", - "api-error-copyuploaddisabled": "URLによるアップロードはこのサーバーでは無効になっています。", - "api-error-duplicate": "当ウェブサイト上には、既に同じ内容の{{PLURAL:$1|他のファイルが|他のファイルがいくつか}}存在しています。", - "api-error-duplicate-archive": "サイト上に同じ内容の{{PLURAL:$1|別のファイルが|他のファイルがいくつか}}既にありましたが、{{PLURAL:$1|それは|それらは}}削除されました。", - "api-error-empty-file": "送信されたファイルは空でした。", "api-error-emptypage": "内容がないページの新規作成は許可されていません。", - "api-error-fetchfileerror": "内部エラー: ファイルを取得する際に問題が発生しました。", - "api-error-fileexists-forbidden": "「$1」という名前のファイルは存在しており、上書きはできません。", - "api-error-fileexists-shared-forbidden": "「$1」という名前のファイルは共有ファイルリポジトリに存在しており、上書きはできません。", - "api-error-file-too-large": "送信されたファイルは大きすぎます。", - "api-error-filename-tooshort": "ファイル名が短すぎます。", - "api-error-filetype-banned": "この形式のファイルは禁止されています。", - "api-error-filetype-banned-type": "$1{{PLURAL:$4|は許可されていないファイル形式です}}。許可されている{{PLURAL:$3|ファイル形式}}は$2です。", - "api-error-filetype-missing": "ファイルに拡張子がありません。", - "api-error-hookaborted": "拡張機能のフックによって、修正が中断されました。", - "api-error-http": "内部エラー: サーバーに接続できませんでした。", - "api-error-illegal-filename": "ファイル名が許可されていません。", - "api-error-internal-error": "内部エラー: ウィキ上でアップロードを処理する際に問題が発生しました。", - "api-error-invalid-file-key": "内部エラー: 一時格納場所にファイルが見つかりませんでした。", - "api-error-missingparam": "内部エラー: リクエストのパラメーターが足りません。", - "api-error-missingresult": "内部エラー: 複製に成功したかどうか判断できませんでした。", - "api-error-mustbeloggedin": "ファイルをアップロードするにはログインする必要があります。", - "api-error-mustbeposted": "内部エラー: リクエストは HTTP の POST メソッドである必要があります。", - "api-error-noimageinfo": "アップロードには成功しましたが、サーバーはファイルに関する情報を返しませんでした。", - "api-error-nomodule": "内部エラー: アップロードを処理するモジュールが設定されていません。", - "api-error-ok-but-empty": "内部エラー: サーバーからの応答がありません。", - "api-error-overwrite": "既存のファイルへの上書きは許可されていません。", - "api-error-ratelimited": "あなたは短時間の間に、このウィキで許容されている数より多くのファイルをアップロードしようとしています。\n数分後にもう一度お試しください。", - "api-error-stashfailed": "内部エラー: サーバーは一時ファイルを格納できませんでした。", "api-error-publishfailed": "内部エラー: サーバーは一時ファイルを発行できませんでした。", - "api-error-stasherror": "ファイルを未公開アップロードする際にエラーが発生しました。", - "api-error-stashedfilenotfound": "未公開場所からアップロードしようとしましたが、隠しファイルが見つかりませんでした。", - "api-error-stashpathinvalid": "隠しファイルのパスが無効です。", - "api-error-stashfilestorage": "未公開ファイルを格納する際にエラーが発生しました。", - "api-error-stashzerolength": "長さが0であるため、サーバーはファイルを隠しておくことができませんでした。", - "api-error-stashnotloggedin": "未公開ファイルを保存するにはログインが必要です。", - "api-error-stashwrongowner": "未公開場所にアクセスしようとしていたファイルは、あなたに属していません。", - "api-error-stashnosuchfilekey": "未公開場所にアクセスしようとしていたファイルのキーが存在しません。", - "api-error-timeout": "サーバーが決められた時間内に応答しませんでした。", - "api-error-unclassified": "不明なエラーが発生しました。", - "api-error-unknown-code": "不明なエラー:「$1」", - "api-error-unknown-error": "内部エラー: ファイルをアップロードする際に問題が発生しました。", + "api-error-stashfailed": "内部エラー: サーバーは一時ファイルを格納できませんでした。", "api-error-unknown-warning": "不明な警告:「$1」", "api-error-unknownerror": "不明なエラー:「$1」", - "api-error-uploaddisabled": "このウィキではアップロードは無効になっています。", - "api-error-verification-error": "このファイルは壊れているか、間違った拡張子になっています。", - "api-error-was-deleted": "この名前のファイルは、以前にアップロードされており、その後削除されています。", "duration-seconds": "$1 {{PLURAL:$1|秒}}", "duration-minutes": "$1 {{PLURAL:$1|分}}", "duration-hours": "$1 {{PLURAL:$1|時間}}", diff --git a/languages/i18n/jv.json b/languages/i18n/jv.json index aedb81178b..f3279376c0 100644 --- a/languages/i18n/jv.json +++ b/languages/i18n/jv.json @@ -905,8 +905,6 @@ "saveprefs": "Simpen", "restoreprefs": "Balèkna kabèh setèlan baku", "prefs-editing": "Pambesut", - "rows": "Larikan:", - "columns": "Kolom:", "searchresultshead": "Panggolèkan", "stub-threshold": "Ambang wates kanggo format pranala rintisan:", "stub-threshold-sample-link": "pralampita", @@ -2930,7 +2928,7 @@ "logentry-newusers-create2": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1", "logentry-newusers-byemail": "Akun panganggo $3 {{GENDER:$2|digawé}} déning $1 lan tembung sandhine dikirim lewat layang elektronik", "logentry-newusers-autocreate": "Akun $1 {{GENDER:$2|digawé}} otomatis", - "logentry-protect-unprotect": "$1 {{GENDER:$2|ngilangi}} rereksan saka $3", + "logentry-protect-unprotect": "$1 {{GENDER:$2|njabud}} payomané $3", "logentry-rights-rights": "$1 {{GENDER:$2|ngganti}} golongané {{GENDER:$6|$3}} saka $4 dadi $5", "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ngganti}} golongané $3", "logentry-rights-autopromote": "$1 otomatis {{GENDER:$2|dipromosikne}} saka $4 nèng $5", @@ -2952,45 +2950,12 @@ "feedback-thanks": "Nuwun! Lebon saran Sampéyan wis dipasang nèng kacané \"[$2 $1]\".", "searchsuggest-search": "Golèk {{SITENAME}}", "searchsuggest-containing": "ngemu...", - "api-error-badaccess-groups": "Sampéyan ora dililakaké ngunggah berkas nèng wiki iki.", "api-error-badtoken": "Kasalahan njero: Token èlèk.", - "api-error-copyuploaddisabled": "Ngunggah saka URL dipatèni nèng sasana iki.", - "api-error-duplicate": "Wis ana {{PLURAL:$1|barkas liya|barkas-barkas liya}} mawa isi sing padha sajeroning sana jaringan iki.", - "api-error-duplicate-archive": "Ana {{PLURAL:$1|berkas liya|pirang-pirang berkas liya}} sing wis ana nèng situsé saha isiné padha, nanging {{PLURAL:$1|kuwi|kuwi kabèh}} wis dibusak.", - "api-error-empty-file": "Berkas sing Sampéyan kirim kosong.", "api-error-emptypage": "Nggawé kaca kosong anyar ora dilikaké.", - "api-error-fetchfileerror": "Kasalahan njero: Ana sing salah nalika ngètukaké berkas iki.", - "api-error-fileexists-forbidden": "Berkas mawa jeneng \"$1\" wis ana, lan ora bisa diganti.", - "api-error-fileexists-shared-forbidden": "Berkas mawa jeneng \"$1\" wis ana nèng gudhang berkas bebarengan, lan ora bisa diganti.", - "api-error-file-too-large": "Berkas sing Sampéyan kirim kagedhèn.", - "api-error-filename-tooshort": "Jeneng berkas kacendhèken.", - "api-error-filetype-banned": "Jinis berkas iki dilarang.", - "api-error-filetype-banned-type": "$1 {{PLURAL:$4|dudu jinis berkas sing dililakaké|dudu jinis berkas sing dililakaké}}. {{PLURAL:$3|Jinis berkas|Jinis berkas}} sing dililakaké $2.", - "api-error-filetype-missing": "Jeneng berkas ora nduwèni èkstènsi.", - "api-error-hookaborted": "Pangowahan sing Sampéyan coba dibatalaké déning èkstènsi.", - "api-error-http": "Kasalahan njero: Ora bisa ngubungi sasana.", - "api-error-illegal-filename": "Jeneng berkas ora dililakaké.", - "api-error-internal-error": "Kasalahan njero: Ana sing salah saka pamrosèsan unggahan Sampéyan nèng wiki.", - "api-error-invalid-file-key": "Kasalahan njero: Berkas ora ditemokaké nèng panyimpenan sawetara.", - "api-error-missingparam": "Kasalahan njero: Paramètèr panjalukan ilang.", - "api-error-missingresult": "Kasalahan njero: Ora bisa mesthèkaké yèn nyaliné suksès.", - "api-error-mustbeloggedin": "Sampéyan kudu mlebu log kanggo ngunggah berkas.", - "api-error-mustbeposted": "Kasalahan njero: Panjalukan mbutuhaké HTTP POST.", - "api-error-noimageinfo": "Ngunggah suksès. nanging sasana ora ngawèhi awak dhéwé katrangan bab berkas kuwi.", - "api-error-nomodule": "Kasalahan njero: Ora ana modul ngunggah sing dipatrapaké.", - "api-error-ok-but-empty": "Kasalahan njero: Ora ana tanggepan saka sasana.", - "api-error-overwrite": "Nibani berkas sing wis ana ora dililakaké.", - "api-error-stashfailed": "Kasalahan njero: Sasana gagal nyèlèhaké berkas sawetara.", "api-error-publishfailed": "Kasalahan njero: Sasana gagal nyèlèhaké berkas sawetara.", - "api-error-stasherror": "Ana kasalahan wektu ngunggah berkas.", - "api-error-timeout": "Sasana ora nanggepi nèng wektu sing karepaké.", - "api-error-unclassified": "Ana masalah sing ora dingertèni.", - "api-error-unknown-code": "Kasalahan ora dingertèni: \"$1\".", - "api-error-unknown-error": "Kasalahan njero: Ana sing salah nalika njajal ngunggah berkas Sampéyan.", + "api-error-stashfailed": "Kasalahan njero: Sasana gagal nyèlèhaké berkas sawetara.", "api-error-unknown-warning": "Pèngetan ora dingertèni: \"$1\".", "api-error-unknownerror": "Kasalahan ora dingertèni: \"$1\".", - "api-error-uploaddisabled": "Piranti ngunggah dipatèni nèng wiki iki.", - "api-error-verification-error": "Berkas iki mungkin rusak, utawa nduwéni èkstènsi salah.", "duration-seconds": "$1 {{PLURAL:$1|detik|detik}}", "duration-minutes": "$1 {{PLURAL:$1|menit|menit}}", "duration-hours": "$1 {{PLURAL:$1|jam|jam}}", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index 3f45d64d5b..7b5400dfba 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -1146,6 +1146,14 @@ "userrights-nodatabase": "데이터베이스 $1이 존재하지 않거나 로컬에 있지 않습니다.", "userrights-changeable-col": "바꿀 수 있는 권한", "userrights-unchangeable-col": "바꿀 수 없는 권한", + "userrights-expiry-current": "$1에 만료", + "userrights-expiry-none": "만료하지 않음", + "userrights-expiry": "기한:", + "userrights-expiry-existing": "현재 만료 시간: $2 $3", + "userrights-expiry-othertime": "다른 시간:", + "userrights-expiry-options": "1일:1 day,1주일:1 week,1개월:1 month,3개월:3 months,6개월:6 months,1년:1 year", + "userrights-invalid-expiry": "그룹 \"$1\"의 만료 시간이 유효하지 않습니다.", + "userrights-expiry-in-past": "그룹 \"$1\"의 만료 시간이 과거입니다.", "userrights-conflict": "사용자 권한 바꾸기가 충돌합니다! 바뀜을 검토하고 확인하세요.", "group": "그룹:", "group-user": "사용자", @@ -1351,14 +1359,14 @@ "rcfilters-clear-all-filters": "필터 모두 지우기", "rcfilters-search-placeholder": "필터 최근 바뀜 (찾아보거나 입력을 시작하십시오)", "rcfilters-invalid-filter": "유효하지 않은 필터", - "rcfilters-empty-filter": "활발한 필터 없음. 모든 기여 내역을 보여줍니다.", + "rcfilters-empty-filter": "활성화된 필터가 없습니다. 모든 기여가 표시됩니다.", "rcfilters-filterlist-title": "필터", "rcfilters-filterlist-noresults": "필터를 찾을 수 없습니다", "rcfilters-filtergroup-registration": "사용자 등록", "rcfilters-filter-registered-label": "등록됨", "rcfilters-filter-registered-description": "로그인된 편집자.", - "rcfilters-filter-unregistered-label": "등록 안됨", - "rcfilters-filter-unregistered-description": "로그인 하지 않은 편집자.", + "rcfilters-filter-unregistered-label": "등록 안 됨", + "rcfilters-filter-unregistered-description": "로그인하지 않은 편집자.", "rcfilters-filtergroup-authorship": "원작자 편집", "rcfilters-filter-editsbyself-label": "자신의 편집", "rcfilters-filter-editsbyself-description": "당신의 편집.", @@ -1366,7 +1374,7 @@ "rcfilters-filter-editsbyother-description": "다른 사용자에 의한 편집 (당신의 편집이 아님).", "rcfilters-filtergroup-userExpLevel": "경험 수준 (등록된 사용자 전용)", "rcfilters-filter-userExpLevel-newcomer-label": "신규 사용자", - "rcfilters-filter-userExpLevel-newcomer-description": "편집 10회 미만의 편집 및 4일 미만의 활동.", + "rcfilters-filter-userExpLevel-newcomer-description": "10회 미만의 편집 및 4일 미만의 활동.", "rcfilters-filter-userExpLevel-learner-label": "학습자", "rcfilters-filter-userExpLevel-learner-description": "\"신규 사용자\" 보다 활동일 및 편집 수가 더 많지만 \"능숙한 사용자\" 보다는 적습니다.", "rcfilters-filter-userExpLevel-experienced-label": "능숙한 사용자", @@ -1376,6 +1384,7 @@ "rcfilters-filter-bots-description": "자동 도구를 이용한 편집.", "rcfilters-filter-humans-label": "사람 (봇이 아님)", "rcfilters-filter-humans-description": "수동으로 한 편집.", + "rcfilters-filtergroup-significance": "의미", "rcfilters-filter-minor-label": "사소한 편집", "rcfilters-filter-major-label": "사소하지 않은 편집", "rcfilters-filter-major-description": "사소한 편집으로 표시되지 않은 편집.", @@ -1384,6 +1393,7 @@ "rcfilters-filter-newpages-label": "문서 생성", "rcfilters-filter-newpages-description": "새 문서를 만드는 편집.", "rcfilters-filter-categorization-label": "분류 차이", + "rcfilters-filter-categorization-description": "분류에서 추가되거나 제거되는 페이지의 기록.", "rcnotefrom": "아래는 $3, $4부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 $1개가 표시됨)", "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기", "rcshowhideminor": "사소한 편집 $1", @@ -1894,7 +1904,9 @@ "apisandbox-sending-request": "API 요청을 보내는 중...", "apisandbox-loading-results": "API 결과를 받는 중...", "apisandbox-results-error": "API 질의 응답을 불러오는 도중 오류 발생: $1.", + "apisandbox-request-format-url-label": "URL 쿼리 문자열", "apisandbox-request-url-label": "요청 URL:", + "apisandbox-request-json-label": "JSON 요청:", "apisandbox-request-time": "요청 처리 시간: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "토큰 수정 후 다시 제출", "apisandbox-results-fixtoken-fail": "\"$1\" 토크을 가져오는데 실패했습니다.", diff --git a/languages/i18n/ku-latn.json b/languages/i18n/ku-latn.json index 16ddbcd4ea..9317066f9b 100644 --- a/languages/i18n/ku-latn.json +++ b/languages/i18n/ku-latn.json @@ -554,7 +554,7 @@ "continue-editing": "Here qada sazandinê", "editing": "\"$1\" tê guherandin", "creating": "\"$1\" tê çêkirin", - "editingsection": "Tê guherandin: $1 (beş)", + "editingsection": "\"$1\" (beş) tê guherandin", "editingcomment": "$1 (beşek nû) tê guherandin.", "editconflict": "Têkçûna guherandinan: $1", "explainconflict": "Ji dema te dest bi guherandinê kir heta niha kesekê/î din ev rûpel guherand.\nLi jor guhertoya heyî tê dîtîn.\nGuherandinên te li jêr tên nîşandan.\nDivê tu wan bikî yek.\nHeke niha tomar bikî, '''bi tenê''' nivîsara qutiya jor wê bê tomarkirin.", @@ -1292,7 +1292,7 @@ "protectedarticle": "parastî [[$1]]", "modifiedarticleprotection": "parastina \"[[$1]]\" guherand", "unprotectedarticle": "parastina \"[[$1]]\" rakir", - "protect-title": "parastina \"$1\" biguherîne", + "protect-title": "Parastina \"$1\" biguherîne", "prot_1movedto2": "Navê [[$1]] weke [[$2]] hate guhertin", "protect-norestrictiontypes-title": "Rûpela neparastbar", "protect-legend": "Parastinê bipesinîne", @@ -1663,7 +1663,7 @@ "hours-ago": "berî $1 {{PLURAL:$1|demjimêr|demjimêran}}", "variantname-ku-arab": "Tîpên erebî", "variantname-ku-latn": "Tîpên latînî", - "variantname-ku": "disable", + "variantname-ku": "Kurdî/کوردی", "metadata": "Daneyên meta", "metadata-expand": "Detayên dirêj nîşan bide", "metadata-collapse": "Detayên dirêj veşêre", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index 70ba002da2..18d958d2ef 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -1024,6 +1024,7 @@ "youremail": "E-Mail-Adress:", "username": "{{GENDER:$1|Benotzernumm}}:", "prefs-memberingroups": "{{GENDER:$2|Member}} vun {{PLURAL:$1|der Benotzergrupp|de Benotzergruppen}}:", + "group-membership-link-with-expiry": "$1 (bis $2)", "prefs-registration": "Zäitpunkt vum Opmaache vum Benotzerkont:", "yourrealname": "Richtegen Numm:", "yourlanguage": "Sprooch:", @@ -1078,6 +1079,8 @@ "userrights-nodatabase": "D'Datebank $1 gëtt et net oder se ass net lokal.", "userrights-changeable-col": "Gruppen déi Dir ännere kënnt", "userrights-unchangeable-col": "Gruppen déi Dir net ännere kënnt", + "userrights-expiry-none": "Leeft net of", + "userrights-expiry": "Valabel bis:", "userrights-conflict": "Konflikt bei de Benotzerrechter! Kuckt Är Ännerunge w.e.g. no a maacht se w.e.g. nach eng Kéier.", "group": "Grupp:", "group-user": "Benotzer", @@ -1268,6 +1271,8 @@ "recentchanges-legend-plusminus": "''(±123)''", "recentchanges-submit": "Weisen", "rcfilters-activefilters": "Aktiv Filteren", + "rcfilters-restore-default-filters": "Standardfiltere restauréieren", + "rcfilters-clear-all-filters": "All Filteren eidelmaachen", "rcfilters-search-placeholder": "Rezent Ännerunge filteren (duerchsichen oder ufänke mat tippen)", "rcfilters-invalid-filter": "Net valabele Filter", "rcfilters-filterlist-title": "Filteren", @@ -1902,7 +1907,7 @@ "emailccsubject": "Kopie vun denger Noriicht un $1: $2", "emailsent": "E-Mail geschéckt", "emailsenttext": "Är E-Mail gouf fortgeschéckt.", - "emailuserfooter": "Dës E-Mail gouf {{GENDER:$1|vum}} $1 {{GENDER:$2|dem}} $2 geschéckt dobäi gouf d'Funktioun \"{{int:emailuser}}\" op {{SITENAME}} benotzt. {{GENDER:$2|Är}} E-Mail gëtt direkt un den {{GENDER:$1|originalen Absender}} geschéckt do bäi gesäit {{GENDER:$1|deen}} {{GENDER:$2|Är}} E-Mail-Adress.", + "emailuserfooter": "Dës E-Mail gouf {{GENDER:$1|vum}} $1 {{GENDER:$2|dem}} $2 geschéckt dobäi gouf d'Funktioun \"{{int:emailuser}}\" op {{SITENAME}} benotzt.Wann {{GENDER:$2|Dir}} op dës E-Mail äntwert, gëtt {{GENDER:$2|Är}} E-Mail direkt un den {{GENDER:$1|originalen Absender}} geschéckt dobäi gesäit {{GENDER:$1|deen}} {{GENDER:$2|Är}} E-Mail-Adress.", "usermessage-summary": "Benoriichtegung hannerloossen.", "usermessage-editor": "Benoriichtegungs-System", "watchlist": "Iwwerwaachungslëscht", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index 54bd07e94a..d5033a878e 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -180,6 +180,7 @@ "searcharticle": "Vanni", "history": "Stöia da pàgina", "history_short": "Stöia", + "history_small": "Stoia", "updatedmarker": "modificâ da-a mæ urtima vixita", "printableversion": "Verscion da stanpâ", "permalink": "Ingancio fisso", @@ -647,6 +648,7 @@ "blockedtitle": "L'utente o l'é bloccòu", "blockedtext": "''''O to nomme utente ò adresso IP o l'è stæto bloccòu.'''\n\nO blòcco o l'è stæto fæto da $1. A raxon dæta a l'è ''$2''.\n\n* Prinçippio do blocco: $8\n* Fin do blocco: $6\n* Utente blocou: $7\n\nL'è poscibbile contattâ $1 ò un atro [[{{MediaWiki:Grouppage-sysop}}|amministratô]] pe discûtte inscio blòcco.\nNo ti poeu doeuviâ o comando \"Manda un'e-mail a st'utente\" se no ti g'hæ 'n adreçço e-mail registròu inte to [[Special:Preferences|preferençe]] e se no t'ê stæto bloccòu ascì.\nO to adreçço IP o l'è $3, e o to blòcco ID o l'è #$5.\nPe piaxei, pe domandâ de informaçioin, speçifficali tutti doî.", "autoblockedtext": "O teu addresso IP o l'è stæto bloccòu outomaticamente perché o l'ea za usòu da 'n âtro utente, bloccòu da $1.\nA raxon dæta a l'è stæta:\n\n:''$2''\n\n* Prinsippio do blòcco: $8\n* Fin do blòcco: $6\n\nTi peu contattâ $1 ò un âtro\n[[{{MediaWiki:Grouppage-sysop}}|amministratô]] pe discutte o blòcco.\n\nDanni a mente a che no ti pêu ûsâ o comando \"manda 'na e-mail a sto utente\" se non ti g'hæ 'n addresso de posta elettronega registròu in te têu [[Special:Preferences|preferense]] e se ti no t'ê stæto bloccòu ascì.\n\nO to adresso IP o l'è $3, e o to blòcco ID o l'è #$5. Pe piaxei, pe domandâ informaçioin, speçifficali tutti doî.", + "systemblockedtext": "O to nomme utente ò l'adresso IP o l'è stæto blocou aotomaticamente da MediaWiki.\nA raxon do blocco a l'è:\n\n:''$2''\n\n* Començo do blocco: $8\n* Scadença do blocco: $6\n* Intervallo de blocco: $7\n\nL'adresso IP attoale o l'è $3.\nSe prega de specificâ tutti i dettalli chì incluxi into compilâ qualunque recesta de ciarimenti.", "blockednoreason": "nisciun-a motivaçion dæta", "whitelistedittext": "Pe modificâ e paggine l'è necessaio $1.", "confirmedittext": "Pe ese abilitæ a-a modiffica de paggine bezeugna confermâ o proppio addresso e-mail. Pe impostâ e confermâ l'adresso servîse de [[Special:Preferences|preferençe]].", @@ -995,8 +997,6 @@ "saveprefs": "Sarva", "restoreprefs": "Ripristina e impostaçioin predefinie (in tutte e seçioin)", "prefs-editing": "Cangia", - "rows": "Righe:", - "columns": "Colonne:", "searchresultshead": "Çerca", "stub-threshold": "Limmite pe-i collegamenti a-i sboççi ($1):", "stub-threshold-sample-link": "esempio", @@ -1080,7 +1080,9 @@ "userrights-user-editname": "Scrivi o teu nomme utente:", "editusergroup": "Carrega groppi utente", "editinguser": "Apreuvo a cangiâ i driti de l'{{GENDER:$1|utente}} [[User:$1|$1]] $2", + "viewinguserrights": "Vixualizaçion di driti de l'{{GENDER:$1|utente}} [[User:$1|$1]] $2", "userrights-editusergroup": "Modiffica i gruppi di utenti", + "userrights-viewusergroup": "Vixualizza groppi utente", "saveusergroups": "Sarva groppi {{GENDER:$1|utente}}", "userrights-groupsmember": "Membro de:", "userrights-groupsmember-auto": "Membro impliçito de:", @@ -1090,6 +1092,9 @@ "userrights-nodatabase": "O database $1 o no l'esiste ò o no l'è un database locale.", "userrights-changeable-col": "Gruppi che ti peu modificâ", "userrights-unchangeable-col": "Gruppi che no ti peu modificâ", + "userrights-expiry-current": "O descazze o $1", + "userrights-expiry-none": "O no descazze", + "userrights-expiry": "O descazze:", "userrights-conflict": "Conflito de modiffica di driti utente! Pe piaxei controlla e conferma e teu modiffiche.", "group": "Gruppo:", "group-user": "Ûtenti", @@ -3450,56 +3455,12 @@ "feedback-useragent": "Agente utente:", "searchsuggest-search": "Çerca in {{SITENAME}}", "searchsuggest-containing": "ch'o conten...", - "api-error-autoblocked": "O to adreçço IP o l'è stæto bloccou aotomaticamente, perché o l'è stæto doeuviou da un utente bloccou.", - "api-error-badaccess-groups": "No t'ê aotorizzou a caregâ di file insce questa wiki.", "api-error-badtoken": "Errô interno: token errou.", - "api-error-blocked": "T'ê stæto bloccou, no ti poeu fâ modiffiche.", - "api-error-copyuploaddisabled": "O caregamento trammite URL o l'è disabilitou insce questo server.", - "api-error-duplicate": "Gh'è za {{PLURAL:$1|un atro file|di atri files}} into scito co-o mæximo contegnuo.", - "api-error-duplicate-archive": "Gh'ea za {{PLURAL:$1|un atro file|di ltri file}} into scito co-o mæximo contegnuo, ma {{PLURAL:$1|o l'è stæto scassou|son stæti scassæ}}.", - "api-error-empty-file": "O file che t'hæ inviou o l'è voeuo.", "api-error-emptypage": "A creaçion de noeuve pagine voeue a no l'è consentia.", - "api-error-fetchfileerror": "Errô interno: s'è verificou un problema durante o recuppero do file.", - "api-error-fileexists-forbidden": "Un file de nomme \"$1\" o l'existe za e o no poeu ese sorvescrito.", - "api-error-fileexists-shared-forbidden": "Un file de nomme \"$1\" o l'existe za into repository condiviso e o no poeu ese sorvescrito.", - "api-error-file-too-large": "O file che t'hæ inviou o l'ea troppo grande.", - "api-error-filename-tooshort": "O nomme do file o l'è troppo curto.", - "api-error-filetype-banned": "Questo tipo de file o l'è proibio.", - "api-error-filetype-banned-type": "\"$1\" {{PLURAL:$4|o no l'è un tipo de file consentio|no son di tipi de file consentii}}. {{PLURAL:$3|O tipo de file consentio o l'è|I tipi de file consentii son}} $2.", - "api-error-filetype-missing": "A-o file gh'amanca l'estenscion.", - "api-error-hookaborted": "A modiffica che t'hæ çercou de fâ a l'è stæta interrotta da un'estenscion.", - "api-error-http": "Errô interno: imposcibbile connettise a-o server.", - "api-error-illegal-filename": "O nomme do file o no l'è ammisso.", - "api-error-internal-error": "Errô interno: quarcosa o l'è anæto storto con l'elaboaçion do to caregamento in sciâ wiki.", - "api-error-invalid-file-key": "Errô interno: file non presente inta cartella di file temporannei.", - "api-error-missingparam": "Errô interno: parammetri da recesta mancanti.", - "api-error-missingresult": "Errô interno: imposcibbile determinâ se a coppia a l'è ariescîa.", - "api-error-mustbeloggedin": "Pe caregâ di file ti devi primma intrâ.", - "api-error-mustbeposted": "Errô interno: a recesta a richiede HTTP POST.", - "api-error-noimageinfo": "O caregamento o l'è ariescio, ma o server o no n'ha dæto arcun-a informaçion in sciô file.", - "api-error-nomodule": "Errô interno: no l'è stæto impostou o moddulo de caregamento.", - "api-error-ok-but-empty": "Errô interno: nisciun-a risposta da-o server.", - "api-error-overwrite": "No l'è permisso soviascrive un file existente.", - "api-error-ratelimited": "Ti çerchi de caregâ ciù file in meno tempo de quante questo wiki o permette.\nRiproeuva tra pochi menuti.", - "api-error-stashfailed": "Errô interno: o server o no l'è ariescio a memorizzâ o documento temporannio.", "api-error-publishfailed": "Errô interno: o server o no l'è ariescio a pubbricâ o documento temporannio.", - "api-error-stasherror": "S'è veificou un errô durante o caregamento do file inta stash.", - "api-error-stashedfilenotfound": "O file inta stash o no l'è stæto trovou durante o tentativo de caregâ da-a stash.", - "api-error-stashpathinvalid": "O percorso ch'o l'aviæ dovuo portâ a-o file inta stash o no l'ea vallido.", - "api-error-stashfilestorage": "S'è veificou un errô durante a memorizzaçion do file inta stash.", - "api-error-stashzerolength": "O server o no poeu insei o file inta stash, perché o g'ha longheçça zero.", - "api-error-stashnotloggedin": "Pe poei sarvâ di file inta stash de caregamento ti devi primma intrâ.", - "api-error-stashwrongowner": "O file a-o quæ ti çercavi d'accede inta stash o no t'apparten.", - "api-error-stashnosuchfilekey": "A ciave do file a-a quæ ti çercavi d'accede inta stash a no l'existe.", - "api-error-timeout": "O server o no l'ha risposto entro o tempo previsto.", - "api-error-unclassified": "Gh'è stæto un aro sconosciuo.", - "api-error-unknown-code": "Errô sconosciuo: \"$1\"", - "api-error-unknown-error": "Errô interno: quarcosa l'è anæto storto provando a caregâ o file.", + "api-error-stashfailed": "Errô interno: o server o no l'è ariescio a memorizzâ o documento temporannio.", "api-error-unknown-warning": "Avviso sconosciuo: $1", "api-error-unknownerror": "Errô sconosciuo: \"$1\"", - "api-error-uploaddisabled": "O caregamento o l'è disabilitou insce questa wiki.", - "api-error-verification-error": "Questo file o poriæ ese dannezou, o aveighe l'estenscion sbaliâ.", - "api-error-was-deleted": "Un file co-o mæximo nomme o l'è stæto precedentemente caregou e succescivamente eliminou.", "duration-seconds": "$1 {{PLURAL:$1|segondo|segondi}}", "duration-minutes": "$1 {{PLURAL:$1|menuto|menuti}}", "duration-hours": "$1 {{PLURAL:$1|oa|oe}}", diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json index 905d05e42c..1def888848 100644 --- a/languages/i18n/lt.json +++ b/languages/i18n/lt.json @@ -1109,6 +1109,10 @@ "userrights-nodatabase": "Duomenų bazė $1 neegzistuoja arba yra ne vietinė.", "userrights-changeable-col": "Grupės, kurias galite keisti", "userrights-unchangeable-col": "Grupės, kurių negalite keisti", + "userrights-expiry-current": "Baigiasi $1", + "userrights-expiry-none": "Nesibaigia", + "userrights-expiry": "Baigiasi:", + "userrights-expiry-othertime": "Kitas laikas:", "userrights-conflict": "Naudotojo teisių konfliktas! Prašome dar kartą taikyti savo keitimus.", "group": "Grupė:", "group-user": "Naudotojai", @@ -1307,6 +1311,7 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taip pat žiūrėkite [[Special:NewPages|naujausių straipsnių sąrašą]])", "recentchanges-submit": "Rodyti", "rcfilters-activefilters": "Aktyvūs filtrai", + "rcfilters-clear-all-filters": "Valyti visus filtrus", "rcfilters-invalid-filter": "Negalimas filtras", "rcfilters-filterlist-title": "Filtrai", "rcfilters-filterlist-noresults": "Nerastas toks filtras", @@ -3471,6 +3476,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|atnaujino}} žymes $3 puslapio žurnalo įraše $5 ({{PLURAL:$7|pridėtas}} $6; {{PLURAL:$9|pašalintas}} $8)", "rightsnone": "(jokių)", "revdelete-summary": "keitimo paaiškinimas", + "rightslogentry-temporary-group": "$1 (laikinai, iki $2)", "feedback-adding": "Pridedamas atsiliepimas į puslapį ...", "feedback-back": "Atgal", "feedback-bugcheck": "Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].", diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json index 64d015ab4d..06536c9169 100644 --- a/languages/i18n/lv.json +++ b/languages/i18n/lv.json @@ -2129,7 +2129,7 @@ "monday-at": "Pirmdiena $1", "bad_image_list": "Formāts:\n\nTiek ņemti vērā tikai ieraksti rindiņā kas sākas ar *\nPirmajai saitei rindiņā ir jābūt uz attiecīgo failu\nJebkuras sekojošas saites tiks uzskatītas par izņēmumiem t.i. lapām kurās fails drīkt tikt izmantots", "metadata": "Metadati", - "metadata-help": "Šis fails satur papildu informāciju, kuru visticamk ir pievienojis digitālais fotoaparāts vai skeneris, kas šo failu izveidoja. Ja šis fails pēc tam ir ticis modificēts, šie dati var neatbilst izmaiņām (var būt novecojuši).", + "metadata-help": "Šis fails satur papildu informāciju, kuru visticamāk ir pievienojis digitālais fotoaparāts vai skeneris, kas šo failu izveidoja. Ja šis fails pēc tam ir ticis modificēts, šie dati var neatbilst izmaiņām (var būt novecojuši).", "metadata-expand": "Parādīt papildu detaļas", "metadata-collapse": "Paslēpt papildu detaļas", "metadata-fields": "Šajā paziņojumā esošie metadatu lauki būs redzami attēla lapā arī tad, kad metadatu tabula būs sakļauta.\nPārējie lauki, pēc noklusējuma, būs paslēpti.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index 3e1e0dc8f6..1755524e7b 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -1053,6 +1053,7 @@ "youremail": "Е-пошта:", "username": "{{GENDER:$1|Корисничко име}}:", "prefs-memberingroups": "{{GENDER:$2|Член}} на {{PLURAL:$1|групата|групите}}:", + "group-membership-link-with-expiry": "$1 (до $2)", "prefs-registration": "Време на регистрација:", "yourrealname": "Вистинско име:", "yourlanguage": "Јазик:", @@ -1109,6 +1110,14 @@ "userrights-changeable-col": "Групи кои може да ги промените", "userrights-unchangeable-col": "Групи кои не може да ги промените", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "Истекува $1", + "userrights-expiry-none": "Не истекува", + "userrights-expiry": "Истекува:", + "userrights-expiry-existing": "Постоечки рок на истекување: $3, $2", + "userrights-expiry-othertime": "Друго време:", + "userrights-expiry-options": "1 ден:1 day,1 недела:1 week,1 месец:1 month,3 месеци:3 months,6 месеци:6 months,1 година:1 year", + "userrights-invalid-expiry": "Истекот за групата „$1“ е неважечки.", + "userrights-expiry-in-past": "Истекот за групата „$1“ е во минатото.", "userrights-conflict": "Спротиставеност во измените на корисничките права. Прегледајте ги и потврдете ги.", "group": "Група:", "group-user": "Корисници", @@ -1865,7 +1874,10 @@ "apisandbox-sending-request": "Испраќам барање до извршникот...", "apisandbox-loading-results": "Добивам исход од извршникот...", "apisandbox-results-error": "Се појави грешка при вчитувањето на одговорот од барањето до извршникот: $1.", + "apisandbox-request-selectformat-label": "Прикажи ги побараните податоци како:", + "apisandbox-request-format-url-label": "URL-низа на барањето", "apisandbox-request-url-label": "URL на барањето:", + "apisandbox-request-json-label": "Побарај JSON:", "apisandbox-request-time": "Време за барањето: {{PLURAL:$1|$1 милисекунда|$1 милисекунди}}", "apisandbox-results-fixtoken": "Исправи ја шифрата и поднеси одново", "apisandbox-results-fixtoken-fail": "Не успеав да ја добијам шифрата „$1“.", @@ -2008,7 +2020,7 @@ "emailccsubject": "Копија од вашата порака до $1: $2", "emailsent": "Писмото е испратено", "emailsenttext": "Писмото е испратено.", - "emailuserfooter": "$1 го испрати писмово на {{GENDER:$2|$2}} со помош на функцијата „{{int:emailuser}}“ на {{SITENAME}}. {{GENDER:$2|Вашата}} е-пошта ќе му биде испратена право на {{GENDER:$1|изворниот испраќач}}, откривајќи {{GENDER:$1|му}} ја {{GENDER:$2|вашата}} адреса.", + "emailuserfooter": "$1 го испрати писмово на {{GENDER:$2|$2}} со помош на функцијата „{{int:emailuser}}“ на {{SITENAME}}. Ако {{GENDER:$2|одговорите}} на ова писмо, {{GENDER:$2|Вашата}} е-пошта ќе му биде испратена право на {{GENDER:$1|изворниот испраќач}}, откривајќи {{GENDER:$1|му}} ја {{GENDER:$2|вашата}} адреса.", "usermessage-summary": "Оставете системска порака.", "usermessage-editor": "Системски гласник", "usermessage-template": "MediaWiki:КорисникПорака", @@ -3678,6 +3690,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|поднови}} ознаки во дневничкиот запис $5 на страницата $3 ({{PLURAL:$7|додадена|додадени}} $6; {{PLURAL:$9|отстранета|отстранети}} $8)", "rightsnone": "(нема)", "revdelete-summary": "опис на уредување", + "rightslogentry-temporary-group": "$1 (привремено, до $2)", "feedback-adding": "Го додавам искажаното мислење во страницата...", "feedback-back": "Назад", "feedback-bugcheck": "Одлично! Само проверете да не е една од [$1 веќе познатите грешки].", diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json index 887d754de9..dc267a812d 100644 --- a/languages/i18n/ml.json +++ b/languages/i18n/ml.json @@ -30,7 +30,8 @@ "아라", "Viswaprabha", "Nesi", - "Macofe" + "Macofe", + "Jameela P." ] }, "tog-underline": "കണ്ണികൾക്ക് അടിവരയിടുക:", @@ -1237,6 +1238,10 @@ "recentchanges-legend-heading": "സൂചന:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)", "recentchanges-submit": "പ്രദർശിപ്പിക്കുക", + "rcfilters-filterlist-title": "അരിപ്പകൾ", + "rcfilters-filter-userExpLevel-newcomer-label": "പുതിയ അംഗങ്ങളുടെ തിരുത്തലുകൾ", + "rcfilters-filter-bots-label": "യന്ത്രം", + "rcfilters-filter-minor-label": "ചെറുതിരുത്തുകൾ", "rcnotefrom": "$3, $4 മുതലുള്ള {{PLURAL:$5|മാറ്റം|മാറ്റങ്ങൾ}} ആണ് താഴെയുള്ളത് ($1 എണ്ണം വരെ കൊടുക്കുന്നതാണ്).", "rclistfrom": "$3 $2 മുതലുള്ള മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക", "rcshowhideminor": "ചെറുതിരുത്തലുകൾ $1", @@ -3327,45 +3332,12 @@ "feedback-useragent": "യൂസർ ഏജന്റ്:", "searchsuggest-search": "തിരയുക", "searchsuggest-containing": "ഉൾപ്പെടുന്നവ...", - "api-error-badaccess-groups": "ഈ വിക്കിയിൽ പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ താങ്കൾക്കനുവാദമില്ല.", "api-error-badtoken": "ആന്തരിക പിഴവ്: ഗുണകരമല്ലാത്ത ചീട്ട്.", - "api-error-copyuploaddisabled": "യൂ.ആർ.എൽ. ഉപയോഗിച്ചുള്ള അപ്‌ലോഡ് ഈ സെർവറിൽ പ്രവർത്തനസജ്ജമാക്കിയിട്ടില്ല.", - "api-error-duplicate": "വിക്കിയിൽ ഇതേ ഉള്ളടക്കമുള്ള {{PLURAL:$1|മറ്റൊരു പ്രമാണം|മറ്റ് പ്രമാണങ്ങൾ}} മുമ്പേയുണ്ട്.", - "api-error-duplicate-archive": "സൈറ്റിൽ ഇതേ ഉള്ളടക്കമുള്ള {{PLURAL:$1|മറ്റൊരു പ്രമാണം|മറ്റ് പ്രമാണങ്ങൾ}} ഉണ്ടായിരുന്നു, പക്ഷേ {{PLURAL:$1|അത്|അവ}} മായ്ക്കപ്പെട്ടിട്ടുണ്ട്.", - "api-error-empty-file": "താങ്കൾ സമർപ്പിച്ച പ്രമാണം ശൂന്യമാണ്.", "api-error-emptypage": "ശൂന്യമായ പുതിയ താളുകൾ സൃഷ്ടിക്കുന്നത് അനുവദിക്കുന്നില്ല.", - "api-error-fetchfileerror": "ആന്തരിക പിഴവ്: പ്രമാണം ശേഖരിച്ചുകൊണ്ടിരുന്നപ്പോൾ എന്തോ പിഴവുണ്ടായി.", - "api-error-fileexists-forbidden": "\"$1\" എന്ന പേരിൽ ഒരു പ്രമാണം മുമ്പേയുണ്ട്, അതിന്റെ മുകളിലായി സൃഷ്ടിക്കാനാകില്ല.", - "api-error-fileexists-shared-forbidden": "\"$1\" എന്ന പേരിൽ ഒരു പ്രമാണം പങ്ക് വെച്ചുപയോഗിക്കുന്ന ശേഖരത്തിൽ മുമ്പേയുണ്ട്, അതിനു മുകളിലായി സൃഷ്ടിക്കാനാകില്ല.", - "api-error-file-too-large": "താങ്കൾ സമർപ്പിച്ച പ്രമാണം വളരെ വലുതാണ്.", - "api-error-filename-tooshort": "പ്രമാണത്തിന്റെ പേര് വളരെച്ചെറുതാണ്.", - "api-error-filetype-banned": "ഈ തരത്തിലുള്ള പ്രമാണങ്ങൾ നിരോധിച്ചിരിക്കുന്നു.", - "api-error-filetype-banned-type": "$1 {{PLURAL:$4|അനുവദനീയമല്ലാത്ത തരം പ്രമാണമാണ്‌|അനുവദനീയമല്ലാത്ത തരങ്ങളിലുള്ള പ്രമാണങ്ങളാണ്}}. $2 {{PLURAL:$3|തരത്തിലുള്ള പ്രമാണം|തരങ്ങളിലുള്ള പ്രമാണങ്ങൾ}} ആണ് അഭിലഷണീയം.", - "api-error-filetype-missing": "പ്രമാണത്തിന് എക്സ്‌റ്റെൻഷൻ ഇല്ല.", - "api-error-hookaborted": "താങ്കൾ വരുത്താൻ ശ്രമിച്ച മാറ്റം ഒരു അനുബന്ധത്തിന്റെ കൊളുത്തിനാൽ റദ്ദാക്കപ്പെട്ടു.", - "api-error-http": "ആന്തരിക പിഴവ്: സെർവറുമായി ബന്ധപ്പെടാൻ കഴിയുന്നില്ല.", - "api-error-illegal-filename": "പ്രമാണത്തിന്റെ പേര് അനുവദനീയമല്ല.", - "api-error-internal-error": "ആന്തരിക പിഴവ്: താങ്കളുടെ അപ്‌ലോഡ് കൈകാര്യം ചെയ്തപ്പോൾ എന്തോ കുഴപ്പണ്ടായി.", - "api-error-invalid-file-key": "ആന്തരിക പിഴവ്: താത്കാലിക സംഭരണിയിൽ നിന്ന് പ്രമാണം കണ്ടെത്താനായില്ല.", - "api-error-missingparam": "ആന്തരിക പിഴവ്: ഈ അഭ്യർത്ഥനയിൽ ആവശ്യമായ ചരങ്ങൾ ലഭിച്ചില്ല.", - "api-error-missingresult": "ആന്തരിക പിഴവ്: പകർത്തൽ വിജയകരമായിരുന്നോ എന്ന് നിർണ്ണയിക്കാനാവുന്നില്ല.", - "api-error-mustbeloggedin": "പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.", - "api-error-mustbeposted": "ഈ സോഫ്റ്റ്‌വേറിൽ ബഗ് ഉണ്ട്; ഉപയോഗിക്കുന്നത് ശരിയായ എച്ച്.റ്റി.റ്റി.പി. രീതിയല്ല.", - "api-error-noimageinfo": "അപ്‌ലോഡ് വിജയകരമായിരുന്നു, പക്ഷേ സെർവർ പ്രമാണത്തെക്കുറിച്ച് യാതൊരു വിവരവും ഇവിടെ തന്നിട്ടില്ല.", - "api-error-nomodule": "ആന്തരിക പിഴവ്: അപ്‌ലോഡ് ഘടകം സജ്ജമാക്കിയിട്ടില്ല.", - "api-error-ok-but-empty": "ആന്തരിക പിഴവ്: സെർവറിൽ നിന്ന് പ്രതികരണമൊന്നും ലഭിക്കുന്നില്ല.", - "api-error-overwrite": "നിലവിലുള്ള പ്രമാണത്തിന്റെ മുകളിൽ സ്ഥാപിക്കൽ അനുവദിച്ചിട്ടില്ല.", - "api-error-stashfailed": "ആന്തരിക പിഴവ്: പ്രമാണം താത്കാലികമായി സംഭരിക്കുന്നതിൽ സെർവർ പരാജയപ്പെട്ടു.", "api-error-publishfailed": "ആന്തരിക പിഴവ്: താത്കാലിക പ്രമാണം പ്രസിദ്ധീകരിക്കുന്നതിൽ സെർവർ പരാജയപ്പെട്ടു.", - "api-error-stasherror": "പ്രമാണം സ്റ്റാഷിലേയ്ക്ക് അപ്‌ലോഡ് ചെയ്യുന്നതിനിടെ പിഴവുണ്ടായി.", - "api-error-timeout": "പ്രതീക്ഷിക്കപ്പെട്ട കാലാവധിക്കുള്ളിൽ സെർവർ പ്രതികരിച്ചില്ല.", - "api-error-unclassified": "അപരിചിതമായ പിഴവ് സംഭവിച്ചിരിക്കുന്നു", - "api-error-unknown-code": "അപരിചിതമായ പിഴവ്: \"$1\"", - "api-error-unknown-error": "ആന്തരിക പിഴവ്: പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ ശ്രമിക്കുമ്പോൾ എന്തോ കുഴപ്പമുണ്ടായി.", + "api-error-stashfailed": "ആന്തരിക പിഴവ്: പ്രമാണം താത്കാലികമായി സംഭരിക്കുന്നതിൽ സെർവർ പരാജയപ്പെട്ടു.", "api-error-unknown-warning": "അപരിചിതമായ മുന്നറിയിപ്പ്: $1", "api-error-unknownerror": "അപരിചിതമായ പിഴവ്: \"$1\".", - "api-error-uploaddisabled": "ഈ വിക്കിയിൽ അപ്‌ലോഡിങ് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുകയാണ്.", - "api-error-verification-error": "ഈ പ്രമാണത്തിൽ പിഴവുണ്ട്, അല്ലെങ്കിൽ തെറ്റായ എക്സ്‌റ്റെൻഷനാണുള്ളത്.", "duration-seconds": "{{PLURAL:$1|ഒരു സെക്കന്റ്|$1 സെക്കന്റ്}}", "duration-minutes": "{{PLURAL:$1|ഒരു മിനിറ്റ്|$1 മിനിറ്റ്}}", "duration-hours": "{{PLURAL:$1|ഒരു മണിക്കൂർ|$1 മണിക്കൂർ}}", @@ -3410,6 +3382,7 @@ "pagelang-language": "ഭാഷ", "pagelang-use-default": "സ്വതേയുള്ള ഭാഷ ഉപയോഗിക്കുക", "pagelang-select-lang": "ഭാഷ തിരഞ്ഞെടുക്കുക", + "pagelang-reason": "കാരണം", "pagelang-submit": "സമർപ്പിക്കുക", "right-pagelang": "താളിന്റെ ഭാഷ മാറ്റുക", "action-pagelang": "താളിന്റെ ഭാഷ മാറ്റുക", diff --git a/languages/i18n/my.json b/languages/i18n/my.json index 802933ec35..b9f669c826 100644 --- a/languages/i18n/my.json +++ b/languages/i18n/my.json @@ -253,7 +253,7 @@ "edithelp": "တည်းဖြတ်ခြင်း အကူအညီ", "helppage-top-gethelp": "အကူအညီ", "mainpage": "ဗဟိုစာမျက်နှာ", - "mainpage-description": "ဗ​ဟို​စာ​မျက်​နှာ​", + "mainpage-description": "ဗဟိုစာမျက်နှာ", "policy-url": "Project:မူဝါဒ", "portal": "ပေါင်းကူးနေရာ", "portal-url": "Project:ပေါင်းကူးနေရာ", @@ -628,6 +628,7 @@ "showhideselectedversions": "ရွေးချယ်ထားသော မူများကို ပြရန်/ဝှက်ရန်", "editundo": "နောက်ပြန် ပြန်ပြင်ရန်", "diff-empty": "(ကွဲပြားမှု မရှိ)", + "diff-multi-sameuser": "(တူညီသော အသုံးပြုသူ၏ {{PLURAL:$1|အလယ်ကြား မူတစ်ခု|အလယ်ကြား မူများ $1 ခု}} အား ပြသမထားပါ)", "searchresults": "ရှာဖွေမှု ရလဒ်များ", "searchresults-title": "\"$1\" အတွက် ရှာတွေ့သည့် ရလဒ်များ", "titlematches": "စာမျက်နှာခေါင်းစဉ်ကိုက်ညီသည်", @@ -1052,7 +1053,7 @@ "listduplicatedfiles": "ထပ်တူပုံပွားဖိုင်များ စာရင်း", "unusedtemplates": "မသုံးသော တမ်းပလိတ်များ", "unusedtemplateswlh": "အခြားလိပ်စာများ", - "randompage": "ကျ​ပန်း​စာ​မျက်​နှာ​", + "randompage": "ကျပန်းစာမျက်နှာ", "randomincategory": "ကဏ္ဍတွင်းရှိ ကျပန်း စာမျက်နှာ", "randomincategory-category": "ကဏ္ဍ:", "randomredirect": "ကျပန်းပြန်ညွှန်း", @@ -1401,13 +1402,13 @@ "ipb_already_blocked": "\"$1\" ကို ပိတ်ပင်ထားပြီး ဖြစ်သည်။", "ipb-needreblock": "$1 ကို ပိတ်ပင်ထားပြီး ဖြစ်သည်။ အပြင်အဆင်များကို ပြောင်းလဲလိုပါသလား?", "move-page": "$1 ကို ရွှေ့ရန်", - "move-page-legend": "စာ​မျက်​နှာ​ကို ရွှေ့ပြောင်းရန်", + "move-page-legend": "စာမျက်နှာကို ရွှေ့ပြောင်းရန်", "movepagetext": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\nအမည်ဟောင်းသည် အမည်သစ်သို့ ပြန်ညွှန်းစာမျက်နှာ ဖြစ်လာမည်။\nသင်သည် မူလခေါင်းစဉ်သို့ ပြန်ညွှန်းများကို အလိုအလျောက် အပ်ဒိတ် update လုပ်နိုင်သည်။\nအကယ်၍ မပြုလုပ်လိုပါက [[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို မှတ်သားရန် မမေ့ပါနှင့်။\nလင့်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနှင့်ပြီး ဖြစ်ပါက (သို့) ယင်းစာမျက်နှာသည် အလွတ်မဖြစ်ပါက (သို့) ပြန်ညွှန်းတစ်ခု မရှိပါက (သို့) ယခင်က ပြုပြင်ထားသော မှတ်တမ်း မရှိပါက စာမျက်နှာသည် ရွေ့မည်မဟုတ် သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\nမှတ်ချက်။\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။", "movepagetext-noredirectfixer": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\n[[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို စစ်ဆေးရန် မမေ့ပါနှင့်။\nလင့်ခ်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနေနှင့်ပြီး ပြန်ညွှန်းတစ်ခု မရှိပါက သို့မဟုတ် ယခင်က ပြုပြင်ထားသော မှတ်တမ်း ရှိနေပါက စာမျက်နှာသည် ရွေ့မည်မဟုတ် သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\nမှတ်ချက်။\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။", "movepagetalktext": "ဤအကွက်ကို အမှန်ခြစ်လိုက်ခြင်းဖြင့် ဗလာမဟုတ်သော ဆွေးနွေးချက်စာမျက်နှာသည် ရှိနှင့်ပြီး မဟုတ်လျှင် ဆက်နွယ်နေသော ဆွေးနွေးချက် စာမျက်နှာကို ခေါင်းစဉ်အသစ်သို့ အလိုအလျောက် ရွှေ့ပစ်မည် ဖြစ်သည်။\n\nဤကိစ္စရပ်တွင် သင် ဆန္ဒရှိလျှင် စာမျက်နှာကို မိမိကိုယ်တိုင် သွားရောက်ရွှေ့ပြောင်း ပေါင်းစပ်နိုင်သည်။", "newtitle": "ခေါင်းစဉ်အသစ်:", "move-watch": "မူရင်းစာမျက်နှာနှင့် ဦးတည်ထားသော စာမျက်နှာတို့ကို စောင့်ကြည့်ရန်", - "movepagebtn": "စာ​မျက်​နှာ​ကို ရွှေ့ပြောင်းရန်", + "movepagebtn": "စာမျက်နှာကို ရွှေ့ပြောင်းရန်", "pagemovedsub": "ပြောင်းရွှေ့ခြင်းအောင်မြင်သည်", "movepage-moved": "'''\"$1\" ကို \"$2\" သို့ ရွှေ့ပြီးဖြစ်သည်'''", "movepage-moved-redirect": "ပြန်ညွှန်းတစ်ခုကို ဖန်တီးပြီးဖြစ်သည်။", @@ -1516,6 +1517,7 @@ "tooltip-preferences-save": "ရေးချယ်စရာများကို သိမ်းရန်", "tooltip-summary": "အတိုချုပ်ထည့်ရန်", "others": "အခြား", + "simpleantispam-label": "Anti-spam စစ်ဆေးခြင်း။\nဤအရာအား မဖြည့်ပါနှင့်!", "pageinfo-language": "စာမျက်နှာ စာကိုယ် ဘာသာစကား", "pageinfo-toolboxlink": "စာမျက်နှာ အချက်အလက်များ", "markaspatrolleddiff": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်", @@ -1546,6 +1548,7 @@ "exif-imagewidth": "အကျယ်", "exif-imagelength": "အမြင့်", "exif-bitspersample": "အစိတ်အပိုင်းတစ်ခုတွင်ပါဝင်သော အပိုင်းငယ်များ", + "exif-orientation": "မျက်နှာပြင် အသားကျမှု", "exif-xresolution": "အလျားလိုက် ပုံရိပ်ပြတ်သားမှု", "exif-yresolution": "ဒေါင်လိုက် ပုံရိပ်ပြတ်သားမှု", "exif-datetime": "ဖိုင်အပြောင်းအလဲ ရက်စွဲနှင့် အချိန်", @@ -1632,7 +1635,7 @@ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ဆွေးနွေး]])", "duplicate-defaultsort": "'''သတိပေးချက် -''' ပုံမှန် sort key \"$2\" oသည် ယခင်ပုံမှန်ဖြစ်သော sort key \"$1\" ကို override ထပ်ရေးမည်ဖြစ်သည်.", "version": "ဗားရှင်း", - "version-specialpages": "အ​ထူး ​စာ​မျက်​နှာ​များ", + "version-specialpages": "အထူး စာမျက်နှာများ", "version-other": "အခြား", "version-license": "မီဒီယာဝီကီ လိုင်စင်", "version-software": "သွင်းထားသော ဆော့ဝဲ", @@ -1641,7 +1644,7 @@ "fileduplicatesearch": "နှစ်ခုထပ်နေသောဖိုင်များကို ရှာရန်", "fileduplicatesearch-filename": "ဖိုင်အမည် -", "fileduplicatesearch-submit": "ရှာဖွေရန်", - "specialpages": "အ​ထူး ​စာ​မျက်​နှာ​များ", + "specialpages": "အထူး စာမျက်နှာများ", "specialpages-note": "* ပုံမှန် အထူးစာမျက်နှာများ။\n* ကန့်သတ်ထားသော အထူးစာမျက်နှာများ။", "specialpages-group-maintenance": "ထိန်းသိမ်းမှု အစီရင်ခံချက်များ", "specialpages-group-other": "အခြားအထူးစာမျက်နှာများ", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index ca6ace520c..de4ad4458e 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -1079,6 +1079,7 @@ "youremail": "E-post:", "username": "{{GENDER:$1|Brukernavn}}:", "prefs-memberingroups": "{{GENDER:$2|Medlem}} i følgende {{PLURAL:$1|gruppe|grupper}}:", + "group-membership-link-with-expiry": "$1 (til $2)", "prefs-registration": "Registreringstidspunkt:", "yourrealname": "Virkelig navn:", "yourlanguage": "Språk:", @@ -1135,6 +1136,14 @@ "userrights-changeable-col": "Grupper du kan endre", "userrights-unchangeable-col": "Grupper du ikke kan endre", "userrights-irreversible-marker": "$1 *", + "userrights-expiry-current": "Løper ut $1", + "userrights-expiry-none": "Utløper ikke", + "userrights-expiry": "Utløper:", + "userrights-expiry-existing": "Gjeldende utløpstid: $2 $3", + "userrights-expiry-othertime": "Annen tid:", + "userrights-expiry-options": "1 dag:1 day,1 uke:1 week,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year", + "userrights-invalid-expiry": "Utløpstiden for gruppa «$1» er ugyldig.", + "userrights-expiry-in-past": "Utløpstiden for gruppa «$1» har vært.", "userrights-conflict": "En konflikt med endringen av brukerrettigheter! Vær vennlig å sjekke og på nytt bekrefte endringene dine.", "group": "Gruppe:", "group-user": "Brukere", @@ -1336,8 +1345,11 @@ "recentchanges-legend-plusminus": "«(±123)»", "recentchanges-submit": "Vis", "rcfilters-activefilters": "Aktive filtre", + "rcfilters-restore-default-filters": "Gjenopprett standardfiltre", + "rcfilters-clear-all-filters": "Nullstill alle filtre", "rcfilters-search-placeholder": "Filtrer siste endringer (søk eller begyn å skrive)", "rcfilters-invalid-filter": "Ugyldig filter", + "rcfilters-empty-filter": "Ingen aktive filtre. Alle bidrag vises.", "rcfilters-filterlist-title": "Filtre", "rcfilters-filterlist-noresults": "Ingen filtre funnet", "rcfilters-filtergroup-registration": "Brukerregistrering", @@ -1886,7 +1898,10 @@ "apisandbox-sending-request": "Sender API-forespørsel...", "apisandbox-loading-results": "Mottar API-resultater...", "apisandbox-results-error": "En feil oppsto under lasting av API-spørringssvaret: $1.", + "apisandbox-request-selectformat-label": "Vis forespørselsdata som:", + "apisandbox-request-format-url-label": "URL-spørringsstreng", "apisandbox-request-url-label": "Forespurt URL:", + "apisandbox-request-json-label": "Spør om JSON:", "apisandbox-request-time": "Forespørselstid: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Fiks nøkkelen og send på nytt", "apisandbox-results-fixtoken-fail": "Henting av nøkkelen «$1» mislyktes.", @@ -2028,7 +2043,7 @@ "emailccsubject": "Kopi av din beskjed til $1: $2", "emailsent": "E-post sendt", "emailsenttext": "E-postbeskjeden er sendt", - "emailuserfooter": "Denne e-posten ble {{GENDER:$1|sendt}} av $1 til {{GENDER:$2|$2}} via funksjonen «{{int:emailuser}}» på {{SITENAME}}. {{GENDER:$2|Din}} epost vil bli sendt direkte til {{GENDER:$1|opprinnelig avsender}} og avsløre {{GENDER:$2|din}} epost-addresse til {{GENDER:$1|dem}}.", + "emailuserfooter": "Denne e-posten ble {{GENDER:$1|sendt}} av $1 til {{GENDER:$2|$2}} via funksjonen «{{int:emailuser}}» på {{SITENAME}}. Om {{GENDER:$2|du}} svarer på denne eposten vil den sendes direkte til {{GENDER:$1|opprinnelig avsender}} og avsløre {{GENDER:$2|din}} epostadresse for {{GENDER:$1|ham|henne|dem}}.", "usermessage-summary": "Etterlater en systembeskjed.", "usermessage-editor": "Systembudbringer", "watchlist": "Overvåkningsliste", @@ -3595,6 +3610,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|oppdaterte}} merker på loggposten $5 til siden $3\n({{PLURAL:$7|la til}} $6; {{PLURAL:$9|fjernet}} $8)", "rightsnone": "(ingen)", "revdelete-summary": "redigeringssammendrag", + "rightslogentry-temporary-group": "$1 (midlertidig, til $2)", "feedback-adding": "Tilføyer tilbakmelding til side ...", "feedback-back": "Tilbake", "feedback-bugcheck": "Suprert! Bare sjekk at den ikke er en av de [$1 kjente feilene]", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index 9bcc007859..d964eab009 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -1110,6 +1110,7 @@ "youremail": "E-mailadres:", "username": "{{GENDER:$1|Gebruikersnaam}}:", "prefs-memberingroups": "{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepen}}:", + "group-membership-link-with-expiry": "$1 (tot $2)", "prefs-registration": "Registratiedatum:", "yourrealname": "Echte naam:", "yourlanguage": "Taal:", @@ -1165,6 +1166,14 @@ "userrights-nodatabase": "De database $1 bestaat niet of is geen lokale database.", "userrights-changeable-col": "Groepen die u kunt beheren", "userrights-unchangeable-col": "Groepen die u niet kunt beheren", + "userrights-expiry-current": "Vervalt op $1", + "userrights-expiry-none": "Vervalt niet", + "userrights-expiry": "Vervalt:", + "userrights-expiry-existing": "Bestaande vervaldatum: $2 om $3", + "userrights-expiry-othertime": "Andere tijd:", + "userrights-expiry-options": "1 dag:1 day,1 week:1 week,1 maand:1 month,3 maanden:3 months,6 maanden:6 months,1 jaar:1 year", + "userrights-invalid-expiry": "De vervaltijd voor de groep \"$1\" is ongeldig.", + "userrights-expiry-in-past": "De vervaltijd voor de groep \"$1\" is in het verleden.", "userrights-conflict": "Er is een probleem opgetreden tijdens het instellen van de gebruikersrechten! Controleer en bevestig uw wijzigingen.", "group": "Groep:", "group-user": "gebruikers", @@ -1366,8 +1375,11 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Weergeven", "rcfilters-activefilters": "Actieve filters", + "rcfilters-restore-default-filters": "Standaard filters terugzetten", + "rcfilters-clear-all-filters": "Alle filters verwijderen", "rcfilters-search-placeholder": "Filter recente wijzigingen (blader of begin met intypen)", "rcfilters-invalid-filter": "Ongeldig filter", + "rcfilters-empty-filter": "Geen actieve filters. Alle bijdragen worden weergeven.", "rcfilters-filterlist-title": "Filters", "rcfilters-filterlist-noresults": "Geen filters gevonden", "rcfilters-filtergroup-registration": "Gebruikers-registratie", @@ -1915,7 +1927,9 @@ "apisandbox-sending-request": "API-verzoek verzenden...", "apisandbox-loading-results": "API-resultaten ontvangen...", "apisandbox-results-error": "Er is een fout opgetreden tijdens het laden van het antwoord op het API-verzoek: $1.", + "apisandbox-request-selectformat-label": "Toon resultaat als:", "apisandbox-request-url-label": "Verzoek-URL:", + "apisandbox-request-json-label": "Verzoek JSON:", "apisandbox-request-time": "Doorlooptijd verzoek: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Token corrigeren en opnieuw verzenden", "apisandbox-results-fixtoken-fail": "Het ophalen van het token van type \"$1\" is mislukt.", @@ -2057,7 +2071,7 @@ "emailccsubject": "Kopie van uw bericht aan $1: $2", "emailsent": "E-mail verzonden", "emailsenttext": "Uw e-mail is verzonden.", - "emailuserfooter": "Deze e-mail is door $1 aan {{GENDER:$2|$2}} {{GENDER:$1|verstuurd}} middels de functie \"{{int:emailuser}}\" van {{SITENAME}}. {{GENDER:$2|Uw}} e-mail wordt direct naar de {{GENDER:$1|oorspronkelijke afzender}} verstuurd, waardoor {{GENDER:$2|uw}} e-mailadres aan {{GENDER:$1|hem|haar|hem of haar}} onthuld wordt.", + "emailuserfooter": "Deze e-mail is door $1 aan {{GENDER:$2|$2}} {{GENDER:$1|verstuurd}} middels de functie \"{{int:emailuser}}\" van {{SITENAME}}. Indien {{GENDER:$2|uw}} reageert op deze e-mail, wordt uw e-mail direct naar de {{GENDER:$1|oorspronkelijke afzender}} verstuurd, waardoor {{GENDER:$2|uw}} e-mailadres aan {{GENDER:$1|hem|haar|hem of haar}} onthuld wordt.", "usermessage-summary": "Systeembericht achtergelaten", "usermessage-editor": "Systeembericht", "watchlist": "Volglijst", @@ -3597,6 +3611,7 @@ "logentry-tag-update-logentry": "$1 heeft de labels van logboekregel $5 van pagina $3 {{GENDER:$2|bijgewerkt}} ($6 {{PLURAL:$7|toegevoegd}}; $8 {{PLURAL:$9|verwijderd}})", "rightsnone": "(geen)", "revdelete-summary": "bewerkingssamenvatting", + "rightslogentry-temporary-group": "$1 (tijdelijk, tot $2)", "feedback-adding": "Uw terugkoppeling wordt aan de pagina toegevoegd...", "feedback-back": "Terug", "feedback-bugcheck": "Geweldig! Controleer even of het niet al één van de [$1 bekende problemen] is.", diff --git a/languages/i18n/or.json b/languages/i18n/or.json index 545ff6205b..2268dcfa65 100644 --- a/languages/i18n/or.json +++ b/languages/i18n/or.json @@ -14,7 +14,8 @@ "아라", "Macofe", "Nistha.aslp", - "Matma Rex" + "Matma Rex", + "Susant purohit" ] }, "tog-underline": "ଲିଙ୍କତଳେଗାର ଟାଣିବା:", @@ -58,7 +59,7 @@ "tog-showhiddencats": "ଲୁଚାଯାଇଥିବା ଶ୍ରେଣୀଗୁଡ଼ିକ ଦେଖାଇବେ", "tog-norollbackdiff": "ପଛକୁ ଫେରାଇଲାପରେ ତୁଳନା ଦେଖାନ୍ତୁ ନାହିଁ", "tog-useeditwarning": "ଯେତେବେଳେ ମୁଁ ଗୋଟିଏ ସାଇତାଯାଇନଥିବା ପୃଷ୍ଠାକୁ ବନ୍ଦ କରିଦିଏ ମୋତେ ଚେତାବନୀ ଦେବେ", - "tog-prefershttps": "ଲଗ ଇନ କଲାପରେ ସର୍ବଦା ସୁରକ୍ଷିତ କନେକ୍ସନ ବ୍ୟବହାର କରିବେ", + "tog-prefershttps": "ଲଗ ଇନ ହେଲା ପରେ ସର୍ବଦା ସୁରକ୍ଷିତ ସଂଯୋଗ ବ୍ୟବହାର କରିବେ", "underline-always": "ସବୁବେଳେ", "underline-never": "କେବେନୁହେଁ", "underline-default": "ବ୍ରାଉଜର କିମ୍ବା ସ୍କିନରେ ଆଗରୁ ଥିବା ସୁବିଧା", @@ -153,7 +154,7 @@ "newwindow": "(ଏହା ନୂଆ ଉଇଣ୍ଡୋରେ ଖୋଲିବ)", "cancel": "ନାକଚ", "moredotdotdot": "ଅଧିକ...", - "morenotlisted": "ଏହି ତାଲିକା ପୂରା ହୋଇ ନାହିଁ", + "morenotlisted": "ହୁଏତ ଏହି ତାଲିକା ଅସମ୍ପୂର୍ଣ.", "mypage": "ପୃଷ୍ଠା", "mytalk": "ଆଲୋଚନା", "anontalk": "ଆଲୋଚନା", @@ -180,6 +181,7 @@ "searcharticle": "ଯାଆନ୍ତୁ", "history": "ଫାଇଲ ଇତିହାସ", "history_short": "ଇତିହାସ", + "history_small": "ଇତିହାସ", "updatedmarker": "ମୋ ଶେଷ ଆସିବା ପରେ ଅପଡେଟ କରାଯାଇଅଛି", "printableversion": "ଛପାହୋଇପାରିବା ପୃଷ୍ଠା", "permalink": "ସବୁଦିନିଆ ଲିଙ୍କ", @@ -211,6 +213,7 @@ "talk": "ଆଲୋଚନା", "views": "ଦେଖା", "toolbox": "ଉପକରଣ", + "tool-link-emailuser": "{{GENDER:$1|user}}ଙ୍କୁ ଇ-ମେଲ କରନ୍ତୁ", "userpage": "ବ୍ୟବହାରକାରୀଙ୍କ ପୃଷ୍ଠା ଦେଖନ୍ତୁ", "projectpage": "ପ୍ରକଳ୍ପ ପୃଷ୍ଠାଟି ଦେଖାଇବା", "imagepage": "ଫାଇଲ ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖନ୍ତୁ", @@ -344,6 +347,11 @@ "badtitletext": "ଆପଣ ଅନୁରୋଧ କରିଥିବା ପୃଷ୍ଠାଟି ଭୁଲ, ଖାଲି ଅଛି ବା ବାକି ଭାଷା ସାଙ୍ଗରେ ଭୁଲରେ ଯୋଡ଼ା ଯାଇଛି ବା ଭୁଲ ଇଣ୍ଟର ଉଇକି ନାମ ଦିଆଯାଇଛି ।\nଏଥିରେ ଥିବା ଗୋଟିଏ ବା ଦୁଇଟି ଅକ୍ଷର ଶିରୋନାମା ଭାବରେ ବ୍ୟବହାର କରାଯାଇ ପାରିବ ନାହିଁ ।", "title-invalid-empty": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠାର ଶର୍ଷକଟି ଖାଲି ଅଛି କିମ୍ବା ନେମସ୍ପସର ନାମ ଅଛି ।", "title-invalid-utf8": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠାର ଶର୍ଷକରେ ଅବୈଧ UTF-8 ଧାରା ଅଛି ।", + "title-invalid-interwiki": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠା ଶିରୋନାମା ରେ ଇଣ୍ଟରଉଇକି ଲିଙ୍କ ରହିଥିବାରୁ ଏହି ଶିରୋନାମା ରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ।", + "title-invalid-talk-namespace": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠା ଶିରୋନାମା ଏକ ଟକ ପୃଷ୍ଠା କୁ ଆଧାର କରେ ଯାହା ଉପଲବ୍ଧ ନୁହେଁ।", + "title-invalid-characters": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠା ଶିରୋନାମା ଏକ ଅଗ୍ରହଣୀୟ ଚରିତ୍ର \"$1\" ରହିଛି।", + "title-invalid-magic-tilde": "ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷା ଶିରୋନାମା ରେ ଅଗ୍ରହଣୀୟ ମେଜିକ ଟିଲଡ଼େ ଅନୁକ୍ରମ (~~~)ରହିଛି।", + "title-invalid-leading-colon": "ଅନୁରୋଧ କରାଯାଇଥିବା ପ୍ରୁଷ୍ଠା ଶିରୋନାମାର ଆରମ୍ଭ ରେ ଏକ ଅଗ୍ରହଣୀୟ କୋଲନ ରହିଛି।", "perfcached": "ତଳଲିଖିତ ତଥ୍ୟଗୁଡିକୁ ଅସ୍ଥାୟୀ ଭାବେ ରଖାଗଲା ଏବଂ ଏହା ଅପଡେଟ ନ ହୋଇପାରେ । ଅତିବେଶିରେ {{PLURAL:$1|ଫଳ|$1ଫଳଗୁଡିକ }} ଅସ୍ଥାୟୀ ରୂପେ ରହି ପାରିବ ।", "perfcachedts": "ତଳଲିଖିତ ତଥ୍ୟଗୁଡିକୁ ଅସ୍ଥାୟୀ ଭାବେ ରଖାଗଲା ଏବଂ $1ରେ ଶେଷଥର ଅପଡେଟ ହୋଇଥିଲା । ଅତିବେଶିରେ {{PLURAL:$1|ଫଳ|$1ଫଳଗୁଡିକ }} ଅସ୍ଥାୟୀ ରୂପେ ରହି ପାରିବ ।", "querypage-no-updates": "ଏହି ପୃଷ୍ଠାଟି ପାଇଁ ଅପଡେଟସବୁ ଏବେ ଅଚଳ କରାଯାଇଅଛି ।\nଏଠାରେ ଥିବା ତଥ୍ୟ ସବୁ ଏବେ ସତେଜ ହୋଇପାରିବ ନାହିଁ ।", @@ -394,12 +402,17 @@ "createacct-yourpasswordagain-ph": "ଆଉଥରେ ପାସୱାର୍ଡ଼ ଦିଅନ୍ତୁ", "userlogin-remembermypassword": "ମୋତେ ଲଗ-ଇନ କରି ରଖିଥାନ୍ତୁ", "userlogin-signwithsecure": "ନିରାପଦ କନେକସନ ବ୍ୟବ‌ହାର କରନ୍ତୁ", + "cannotlogin-title": "ଲଗ ଇନ ହୋଇପାରିବ ନାହିଁ", + "cannotlogin-text": "ଲଗିଂ ଇନ ସମ୍ଭବ ନୁହେଁ।", "cannotloginnow-title": "ଏବେ ଲଗ ଇନ ହୋଇପାରିବ ନାହିଁ", "cannotloginnow-text": "$1ବ୍ୟବହାର କରୁଥିବା ବେଳେ ଲଗ ଇନ ହେଇପାରିବ ନାହିଁ ।", + "cannotcreateaccount-title": "ଖାତା ତିଆରି କରାଯାଇପାରିବ ନାହିଁ", + "cannotcreateaccount-text": "ସିଧାସଳଖ ଖାତା ଖୋଲିବା ଏହି ଉଇକି ରେ ସମର୍ଥ କରାଯାଇ ନାହିଁ।", "yourdomainname": "ଆପଣଙ୍କ ଡୋମେନ:", "password-change-forbidden": "ଆପଣ ଏହି ଉଇକିରେ ପାସୱାର୍ଡ ବଦଳାଇ ପାରିବେ ନାହିଁ ।", "externaldberror": "ବୋଧ ହୁଏ ଚିହ୍ନଟ ଡାଟାବେସ ଭୁଲଟିଏ ହୋଇଥିଲା ବା ଆପଣଙ୍କୁ ନିଜର ବାହାର ଖାତା ଅପଡେଟ କରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।", "login": "ଲଗ-ଇନ (Log in)", + "login-security": "ଆପଣଙ୍କ ପରିଚୟ ଯାଞ୍ଚ କରନ୍ତୁ", "nav-login-createaccount": "ଲଗ ଇନ /ନୂଆ ଖାତା ଖୋଲନ୍ତୁ", "userlogin": "ଲଗ ଇନ /ନୂଆ ଖାତା ଖୋଲନ୍ତୁ", "userloginnocreate": "ଲଗ-ଇନ (Log in)", @@ -417,18 +430,23 @@ "userlogin-resetpassword-link": "ପାସୱାର୍ଡ଼ ମନେପଡୁନାହିଁ?", "userlogin-helplink2": "ଲଗ ଇନ ପାଇଁ ସହଯୋଗ କରନ୍ତୁ", "userlogin-loggedin": "ଆପଣ {{GENDER:$1|$1}} ନାମରେ ଲଗ ଇନ କରିଛନ୍ତି । ତଳ ଫର୍ମଟି ବ୍ୟବହାର କରି ଆଉ ଜଣେ ସଭ୍ୟ ଭାବେ ଲଗ ଇନ କରନ୍ତୁ ।", + "userlogin-reauth": "ଆପଣ {{GENDER:$1|$1}} ବୋଲି ଯାଞ୍ଚ କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଆଉଥରେ ଲଗ ଇନ କରିବାକୁ ହେବ।", "userlogin-createanother": "ଆଉ ଏକ ଖାତା ତିଆରି କରନ୍ତୁ", "createacct-emailrequired": "ଇମେଲ ଠିକଣା", "createacct-emailoptional": "ଇମେଲ ଠିକଣା (ଇଚ୍ଛାଧୀନ)", "createacct-email-ph": "ଆପଣଙ୍କ ଇମେଲ ଠିକଣା ଦିଅନ୍ତୁ", "createacct-another-email-ph": "ଆପଣଙ୍କ ଇ-ମେଲ ଠିକଣା ଦିଅନ୍ତୁ", "createaccountmail": "ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରନ୍ତୁ ଏବଂ ଏହାକୁ ତଳେ ଦିଆଯାଇଥିବା ଇ-ମେଲ ଠିକଣାକୁ ପଠାଇଦିଅନ୍ତୁ", + "createaccountmail-help": "ପାସୱାର୍ଡ ନ ଜାଣି ମଧ୍ୟ ଆଉ ଜଣେ ବ୍ୟକ୍ତି ଙ୍କ ପାଇଁ ଖାତା ଖୋଲିବାକୁ ବ୍ୟବହାର କରାଯାଇପାରିବ।", "createacct-realname": "ପ୍ରକୃତ ନାମ (ଇଚ୍ଛାଧୀନ)", "createaccountreason": "କାରଣ:", "createacct-reason": "କାରଣ", "createacct-reason-ph": "ଆପଣ ଅନ୍ୟଏକ ଖାତା କାହିଁକି ତିଆରି କରୁଛନ୍ତି", + "createacct-reason-help": "ଖାତା ଖୋଲିବା ଲଗ ରେ ବାର୍ତା ଦେଖାଯାଇଛି", "createacct-submit": "ନିଜର ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ", "createacct-another-submit": "ଆଉ ଏକ ଖାତା ଖୋଲନ୍ତୁ", + "createacct-continue-submit": "ଖାତା ଖୋଲିବା ଜାରି ରଖନ୍ତୁ", + "createacct-another-continue-submit": "ଖାତା ଖୋଲିବା ଜାରି ରଖନ୍ତୁ", "createacct-benefit-heading": "{{SITENAME}} ଆପଣଙ୍କ ଭଳି ଲୋକମାନଙ୍କ ଦ୍ୱାରା ଗଢ଼ା ।", "createacct-benefit-body1": "{{PLURAL:$1|ସମ୍ପାଦନା|ସମ୍ପାଦନାମାନ}}", "createacct-benefit-body2": "{{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠାମାନ}}", @@ -442,6 +460,7 @@ "nocookiesnew": "ଇଉଜର ନାମଟି ତିଆରି କରିଦିଆଗଲା, ହେଲେ ଆପଣ ଲଗ ଇନ କରିନାହାନ୍ତି ।\n{{SITENAME}} ସଭ୍ୟମାନଙ୍କୁ ଲଗ ଇନ କରିବା ନିମନ୍ତେ କୁକି ବ୍ୟବହାର କରିଥାଏ । ଆପଣଙ୍କ କୁକି ଅଚଳ କରାଯାଇଅଛି ।\nଦୟାକରି ତାହାକୁ ସଚଳ କରନ୍ତୁ ଓ ତାହା ପରେ ଆପଣଙ୍କ ନୂଆ ଇଉଜର ନାମ ଓ ପାସୱାର୍ଡ଼ ସହିତ ଲଗ ଇନ କରନ୍ତୁ ।", "nocookieslogin": "{{SITENAME}} ସଭ୍ୟ ମାନଙ୍କୁ ଲଗ ଇନ କରାଇବା ପାଇଁ କୁକି ବ୍ୟବହାର କରିଥାଏ ।\nଆପଣଙ୍କର କୁକି ଅଚଳ ହୋଇଅଛି ।\nଦୟାକରି ତାହାକୁ ସଚଳ କରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।", "nocookiesfornew": "ଯେହେତୁ ଆମ୍ଭେ ଏହାର ମୂଳାଧାର ଜାଣିପାରିଲୁ ନାହିଁ ଏହି ଇଉଜର ଖାତାଟି ତିଆରି କରାଗଲା ନାହିଁ ।\nଥୟ କରନ୍ତୁ କି ଆପଣ କୁକି ସଚଳ କରିଅଛନ୍ତି, ପୃଷ୍ଠାଟିକୁ ଆଉଥରେ ଲୋଡ଼ କରି ଚେଷ୍ଟା କରନ୍ତୁ ।", + "createacct-loginerror": "ଖାତା ସଫଳ ଭାବରେ ଖୋଲା ଗଲା କିନ୍ତୁ ଆପଣଙ୍କୁ ସ୍ଵତଃ ଲଗ ଇନ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି [[Special:UserLogin|manual login]] କୁ ଦେଖନ୍ତୁ।", "noname": "ଆପଣ ଗୋଟିଏ ବୈଧ ଇଉଜର ନାମ ଦେଇନାହାନ୍ତି ।", "loginsuccesstitle": "ଠିକଭାବେ ଲଗ-ଇନ ହେଲା", "loginsuccess": "'''ଆପଣ {{SITENAME}}ରେ \"$1\" ନାମରେ ଲଗ-ଇନ କରିଛନ୍ତି ।'''", @@ -453,6 +472,7 @@ "wrongpasswordempty": "ଦିଆଯାଇଥିବା ପାସବାର୍ଡ଼ଟି ଖାଲି ଛଡ଼ାଯାଇଛି ।\nଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।", "passwordtooshort": "ପାସୱାର୍ଡ଼ଟି ଅତି କମରେ {{PLURAL:$1|ଗୋଟିଏ ଅକ୍ଷର|$1ଟି ଅକ୍ଷର}}ର ହୋଇଥିବା ଲୋଡ଼ା ।", "passwordtoolong": "ପସସ୍ୱାର୍ଡଟି {{PLURAL:$1|1 ଅକ୍ଷର|$1 ଅକ୍ଷରଗୁଡିକ}}ଠାରୁ ଅଧିକ ହୋଇ ପାରିବ ନାହିଁ ।", + "passwordtoopopular": "ସାଧାରଣ ଭାବରେ ବଛାଯାଇଥିବା ପାସୱାର୍ଡ ବ୍ୟବହାର କରିହେବ ନାହିଁ। ଦୟାକରି ଏକ ଅଦ୍ଵିତୀୟ ପାସୱାର୍ଡ ବାଛନ୍ତୁ।", "password-name-match": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ଟି ଆପଣଙ୍କ ଇଉଜର ନାମ ଠାରୁ ଅଲଗା ହେବା ଉଚିତ ।", "password-login-forbidden": "ଏହି ଇଉଜର ନାମ ଓ ପାସୱାର୍ଡ଼ର ବ୍ୟବହାରକୁ ବାରଣ କରାଯାଇଅଛି ।", "mailmypassword": "ପାସୱାର୍ଡ଼ଟି ରିସେଟ କରିବେ", @@ -465,7 +485,7 @@ "eauthentsent": "ଆପଣ ଦେଇଥିବା ଇ-ମେଲ ଠିକଣାକୁ ଏକ ମେଲଟିଏ ପଠାଗଲା ।\nଆହୁରି ଅଧିକ ଇ-ମେଲ ଆପଣଙ୍କ ଖାତାକୁ ପଠାହେବା ଆଗରୁ, ଏହି ଖାତାଟି ନିଜର ବୋଲି ଥୟ କରିବା ପାଇଁ ପଠାଯାଇଥିବା ଇ-ମେଲରେ ଥିବା ସୂଚନା ଅନୁସାରେ କାମ କରନ୍ତୁ ।", "throttled-mailpassword": "ଗତ {{PLURAL:$1|ଏକ ଘଣ୍ଟାରେ|$1 ଘଣ୍ଟାରେ}} ଆପଣଙ୍କୁ ଏକ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଯାଇଛି ।\nଅବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ, {{PLURAL:$1|ଏକ ଘଣ୍ଟାରେ|$1 ଘଣ୍ଟାରେ}} କେବଳ ଗୋଟିଏ ଇମେଲ ହିଁ ପଠାହେବ ।", "mailerror": "ମେଲ ପଠାଇବାରେ ଭୁଲ : $1", - "acct_creation_throttle_hit": "ଏହି ଉଇକିର ଦେଖଣାହାରୀ ମାନେ ଆପଣଙ୍କ IP ଠିକଣା ବ୍ୟବହାର କରି ବିଗତ ଦିନରେ {{PLURAL:$1|ଖାତାଟିଏ|$1 ଗୋଟି ଖାତା}} ତିଆରି କରିଛନ୍ତି ଯାହା ସେହି ସମୟସୀମା ଭିତରେ ସବୁଠାରୁ ଅଧିକ ଥିଲା ।\nତେଣୁ, ଏହି IP ଠିକଣାର ଦେଖଣାହାରୀ ଗଣ ଏବେ ଆଉ ଅଧିକ ଖାତା ଖୋଲିପାରିବେ ନାହିଁ ।", + "acct_creation_throttle_hit": "ଏହି ଉଇକିର ଦେଖଣାହାରୀ ମାନେ ଆପଣଙ୍କ IP ଠିକଣା ବ୍ୟବହାର କରି ବିଗତ $2 ରେ {{PLURAL:$1|ଖାତାଟିଏ|$1 ଗୋଟି ଖାତା}} ତିଆରି କରିଛନ୍ତି ଯାହା ସେହି ସମୟସୀମା ଭିତରେ ସବୁଠାରୁ ଅଧିକ ଥିଲା ।\nତେଣୁ, ଏହି IP ଠିକଣାର ଦେଖଣାହାରୀ ଗଣ ଏବେ ଆଉ ଅଧିକ ଖାତା ଖୋଲିପାରିବେ ନାହିଁ ।", "emailauthenticated": "$2 ତାରିଖ $3 ଘଟିକା ସମୟରେ ଆପଣଙ୍କ ଇ-ମେଲ ଠିକଣାଟି ଥୟ ହେଲା ।", "emailnotauthenticated": "ଆପଣଙ୍କ ଇ-ମେଲ ଠିକଣାଟି ଏ ଯାଏ ଥୟ ହୋଇନାହିଁ ।\nଏହି ସବୁ ସୁବିଧାକୁ ନେଇ ଆପଣଙ୍କୁ କୌଣସି ଇ-ମେଲ ପଠାଯିବ ନାହିଁ ।", "noemailprefs": "ଆପଣଙ୍କ ପସନ୍ଦ ଭିତରେ ଏକ ଇ-ମେଲ ଠିକଣା ଦିଅନ୍ତୁ ଯାହା ଏହି ସବୁ ସୁବିଧାକୁ ସଚଳ କରାଇବ ।", @@ -485,6 +505,7 @@ "createacct-another-realname-tip": "ପ୍ରକୃତ ନାମ ଦେବା ଆପଣଙ୍କ ଉପରେ ନିର୍ଭର କରେ ।\nଯଦି ଆପଣ ଏହା ଦିଅନ୍ତି, ତେବେ ଏହା ଆପଣଙ୍କ କାମ ପାଇଁ ଶ୍ରେୟ ଦେବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।", "pt-login": "ଲଗ-ଇନ", "pt-login-button": "ଲଗ-ଇନ", + "pt-login-continue-button": "ଲଗଇନ ଜାରି ରଖନ୍ତୁ", "pt-createaccount": "ଖାତାଟିଏ ଖୋଲନ୍ତୁ", "pt-userlogout": "ଲଗ-ଆଉଟ", "php-mail-error-unknown": "PHP ର ମେଲ() କାମରେ ଅଜଣା ଅସୁବିଧା ।", @@ -500,12 +521,18 @@ "changepassword-success": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ଟି ସଫଳତା ପୂର୍ବକ ବଦଳାଇ ଦିଆଗଲା !", "changepassword-throttled": "ଆପଣ ନିକଟରେ ଖୁବ ଅଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଛନ୍ତି ।\nଆଉ ଅଧିକ ଥର ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ ।", "botpasswords": "ବଟ ପାସୱାର୍ଡ଼", + "botpasswords-disabled": "Bot ପାସୱାର୍ଡ ଅକାମି କରାଯାଇଛି।", + "botpasswords-no-central-id": "Bot ପାସୱାର୍ଡ ବ୍ୟବହାର କରିବାକୁ ଆପଣ ନିଶ୍ଚୟ ଏକ କେନ୍ଦ୍ରୀକୃତ ଖାତା ରେ ଲଗ ଇନ ହେଇଥିବାକୁ ହେବ।", "botpasswords-label-appid": "ବଟ ନାମ:", "botpasswords-label-create": "ତିଆରି କରିବେ", "botpasswords-label-update": "ଅପଡେଟ କରିବେ", "botpasswords-label-cancel": "ବାତିଲ", "botpasswords-label-delete": "ଲିଭାଇବେ", "botpasswords-label-resetpassword": "ପାସୱାର୍ଡ଼ଟି ରିସେଟ କରିବେ", + "botpasswords-bad-appid": "Bot ନାମ \"$1\"ବୈଧ ନୁହେଁ।", + "botpasswords-insert-failed": "Bot ନାମ \"$1\" ଯୋଗ କରାଯାଇ ପାରିଲା ନାହିଁ। ଏହା ଆଗରୁ ଯୋଗ ହେଇଥିଲା କି?", + "botpasswords-update-failed": "ବୋଟ ନାମ \"$1\" ଅଧୁନାତନ ହେଇପାରିଲା ନାହିଁ। ଏହା ଲିଭାଇ ଦିଆଯାଇଥିଲା କି ?", + "botpasswords-created-title": "Bot ପାସୱାର୍ଡ ତିଆରି ହେଲା", "resetpass_forbidden": "ପାସୱାର୍ଡ଼ମାନ ବଦଳା ଯାଇପାରିବ ନାହିଁ", "resetpass-no-info": "ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।", "resetpass-submit-loggedin": "ପାସୱାର୍ଡ଼ ବଦଳାନ୍ତୁ", @@ -3038,45 +3065,12 @@ "feedback-thanks-title": "ସାଧୁବାଦ!", "searchsuggest-search": "ଖୋଜନ୍ତୁ", "searchsuggest-containing": "ଖୋଜୁଛି...", - "api-error-badaccess-groups": "ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଅପଲୋଡ଼ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।", "api-error-badtoken": "ଭିତର ଅସୁବିଧା: ଖରାପ ଟୋକନ ।", - "api-error-copyuploaddisabled": "URL ଦେଇ ଅପଲୋଡ଼ କରିବା ଏହି ସର୍ଭରରେ ଅଚଳ କରାଯାଇଅଛି ।", - "api-error-duplicate": "ଏହି ସାଇଟରେ ସେହି ଏକା ତଥ୍ୟ ଥିବା {{PLURAL:$1| ଆଉ ଏକ ଫାଇଲ ରହିଅଛି|ଆଉ କିଛି ଫାଇଲ ରହି ଅଛନ୍ତି}} ।", - "api-error-duplicate-archive": "ସେହି ସାଇଟରେ ସେହି ଏକା ଭିତର ଭାଗ ସହିତ ଆଗରୁ {{PLURAL:$1|ଆଉ ଫାଇଲଟିଏ ଥିଲା|ଆଉ କେତେକ ଫାଇଲ ଥିଲା}}, କିନ୍ତୁ {{PLURAL:$1|ତାହାକୁ|ସେସବୁକୁ}} ଲିଭାଇ ଦିଆଯାଇଅଛି ।", - "api-error-empty-file": "ଆପଣ ପଠାଇଥିବା ଫାଇଲଟି ଖାଲି ଅଟେ ।", "api-error-emptypage": "ନୂଆ, ଖାଲି ପୃଷ୍ଠ ତିଆରି କରିବାର ଅନୁମତି ନାହି ।", - "api-error-fetchfileerror": "ଭିତର ଅସୁବିଧା: ଏହି ଫାଇଲଟି ପାଖରେ ପହଞ୍ଚିବା ବେଳେ କିଛି ଅସୁବିଧା ହେଲା ।", - "api-error-fileexists-forbidden": "\"$1\" ନାମରେ ଗୋଟିଏ ଫାଇଲ ଆଗରୁ ଅଛି, ଏବଂ ଏହା ଉପରେ ଲେଖି ହେବନି ।", - "api-error-fileexists-shared-forbidden": "\"$1\" ନାମରେ ଗୋଟିଏ ଫାଇଲ ବଣ୍ଟାଯାଇଥିବା ସାଇତାଗୃହରେ ଅଛି, ଏବଂ ଏହା ବାଲାଯାଇପାରିବ ନାହିଁ ।", - "api-error-file-too-large": "ଆପଣ ପଠାଇଥିବା ଫାଇଲଟି ବିରାଟ ଅଟେ ।", - "api-error-filename-tooshort": "ଫାଇଲ ନାମଟି ଖୁବ ଛୋଟ ।", - "api-error-filetype-banned": "ଏହି ପ୍ରକାରର ଫାଇଲ ବାରଣ କରାଯାଇଅଛି ।", - "api-error-filetype-banned-type": "$1 {{PLURAL:$4|ଏକ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହେଁ|ମାନ ଅନୁମୋଦିତ ଫାଇଲ ପ୍ରକାର ନୁହଁନ୍ତି}} ।\nଅନୁମୋଦିତ {{PLURAL:$3|ଫାଇଲ ପ୍ରକାର ହେଲା|ଫାଇଲଗୁଡିକର ପ୍ରକାର ହେଲା}} $2 ।", - "api-error-filetype-missing": "ଫାଇଲଟିର ଏକ୍ସଟେନସନ ନାହିଁ ।", - "api-error-hookaborted": "ଏକ ଏକ୍ସଟେନସନ ହୁକ ଦେଇ ଆପଣ କରୁଥିବା ବଦଳଟି ବନ୍ଦ କରିଦିଆଗଲା ।", - "api-error-http": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ସହ ଯୋଡ଼ି ହେଉନାହିଁ ।", - "api-error-illegal-filename": "ଏହି ଫାଇଲ ନାମଟି ଅନୁମୋଦିତ ନୁହେଁ ।", - "api-error-internal-error": "ଆଭ୍ୟନ୍ତରୀଣ ଅସୁବିଧା: ଏହି ଉଇକିରେ ଆପଣଙ୍କ ଅପଲୋଡ଼ କରିବା କାଳରେ କିଛି ଅସୁବିଧା ଘଟିଲା ।", - "api-error-invalid-file-key": "ଭିତର ଅସୁବିଧା: ଫାଇଲଟି ଅସ୍ଥାୟୀ ସାଇତାଘର ଭିତରୁ ମିଳିଲାନାହିଁ ।", - "api-error-missingparam": "ଭିତର ଅସୁବିଧା: ହଜିଯାଇଥିବା ପାରାମିଟର ସବୁକୁ ଅନୁରୋଧ କ୍ରମେ ଦେଖାଇଦିଆଗଲା ।", - "api-error-missingresult": "ଭିତର ଅସୁବିଧା: ନକଲ କରିବା ଠିକରେ ହେଲାକି ନାହିଁ ଜାଣି ପାରିଲା ନାହିଁ ।", - "api-error-mustbeloggedin": "ଫାଇଲ ଅପଲୋଡ଼ କରିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।", - "api-error-mustbeposted": "ଭିତର ଅସୁବିଧା: କରାଯାଇଥିବା ଅନୁରୋଧ ପାଇଁ HTTP POST ଦରକାର ।", - "api-error-noimageinfo": "ଅପଲୋଡ଼ ସଫଳ ହେଲା, କିନ୍ତୁ ସର୍ଭରଟି ଆମ୍ଭଙ୍କୁ ଫାଇଲଟୀ ବାବଦରେ କିଛି ବିବରଣୀ ଦେଲା ନାହିଁ ।", - "api-error-nomodule": "ଭିତର ଅସୁବିଧା: ଅପଲୋଡ଼ ମୋଡୁଲ ଠିକ କରାଯାଇନାହିଁ ।", - "api-error-ok-but-empty": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଠାରୁ କିଛି ଖବର ନାହିଁ ।", - "api-error-overwrite": "ଆଗରୁଥିବା ଏକ ଫାଇଲ ଉପରେ ମଡ଼ାଇବା ଅନୁମୋଦିତ ନୁହେଁ ।", - "api-error-stashfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ସାଇତି ପାରିଲା ନାହିଁ ।", "api-error-publishfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ପ୍ରକାଶ କରିପାରିଲା ନାହିଁ ।", - "api-error-stasherror": "ଫାଇଲଟିକୁ ଷ୍ଟାସରେ ଅପଲୋଡ଼ କଲାବେଳେ ତ୍ରୁଟିଟିଏ ପରିଲକ୍ଷିତ ହେଲା ।", - "api-error-timeout": "ସର୍ଭର ଏକ ସୀମିତ କାଳ ଭିତରେ ଉତ୍ତର ଦେଲାନାହିଁ ।", - "api-error-unclassified": "ଏକ ଅଜଣା ଅସୁବିଧା ଘଟିଲା ।", - "api-error-unknown-code": "ଅଜଣା ତୃଟି: \"$1\"", - "api-error-unknown-error": "ଆଭ୍ୟନ୍ତରୀଣ ଅସୁବିଧା: ଫାଇଲଟି ଅପଲୋଡ଼ କରିବା କାଳରେ କିଛି ଅସୁବିଧା ଘଟିଲା ।", + "api-error-stashfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ସାଇତି ପାରିଲା ନାହିଁ ।", "api-error-unknown-warning": "ଅଜଣା ଚେତାବନୀ: $1", "api-error-unknownerror": "ଅଜଣା ତୃଟି: \"$1\"", - "api-error-uploaddisabled": "ଉଇକିରେ ଅପଲୋଡ଼ କରିବା ଅଚଳ କରାଯାଇଅଛି ।", - "api-error-verification-error": "ଏହି ଫାଇଲଟି ବୋଧ ହୁଏ ନଷ୍ଟ ହୋଇଯାଇଅଛି କିମ୍ବା ଭୁଲ ଏକ୍ସଟେନସନ ଦିଆଯାଇଅଛି ।", "duration-seconds": "$1 {{PLURAL:$1|ସେକଣ୍ଡ|ସେକେଣ୍ଡ}}", "duration-minutes": "$1 {{PLURAL:$1|ମିନିଟ|ମିନିଟ}}", "duration-hours": "$1 {{PLURAL:$1|ଘଣ୍ଟା|ଘଣ୍ଟା}}", diff --git a/languages/i18n/pcd.json b/languages/i18n/pcd.json index d96cf90376..8f3f530755 100644 --- a/languages/i18n/pcd.json +++ b/languages/i18n/pcd.json @@ -25,6 +25,7 @@ "tog-enotifusertalkpages": "Éspédier un imèle su em bouéte quante m'pache \"Dvise Uzeu\" est candgée.", "tog-enotifminoredits": "M'éspédier étou un imèle pou chés tiots canjemints d'chés paches o d'chés fichiés", "tog-shownumberswatching": "Aficher ch'nombe ed gins qu'ont vu.", + "tog-uselivepreview": "Implouéyer ch'rade intrévir", "tog-watchlisthideown": "Muche ems édicions dseur el lisse à suire", "tog-watchlisthidebots": "Muche chés édicions des robots su el lisse à suire", "tog-watchlisthideminor": "Muche chés tiotes édicions su el lisse à suire.", @@ -87,6 +88,20 @@ "oct": "Oct", "nov": "Nov", "dec": "Déc", + "january-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} jinvié", + "february-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} févrié", + "march-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} marche", + "april-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} avri", + "may-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} moai", + "june-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} join", + "july-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} juilet", + "august-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} eut", + "september-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} siétimbe", + "october-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} octobe", + "november-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} novimbe", + "december-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} déchimbe", + "period-am": "AM", + "period-pm": "PM", "pagecategories": "{{PLURAL:$1|Catégorie|Catégories}}", "category_header": "Paches in catégorie \"$1\"", "subcategories": "Dsoucatégories", @@ -96,11 +111,12 @@ "hidden-category-category": "Catégouries muchées", "category-subcat-count": "{{PLURAL:$2|Chol catégorie ale o seulemint el dsou-catégorie-lo:|Chol catégorie ale o {{PLURAL:$1|l'dsou-catégorie-lo|chés $1 dsou-catégories suivantes}}, pou un total éd $2.}}", "category-subcat-count-limited": "L'catégorie-lo ale o {{PLURAL:$1|el dsous-catégorie|chés $1 dsous-catégories}} -lo:", - "category-article-count": "Chol catégorie ale o {{PLURAL:$2|seulemint l'pache-lo:|$2 paches, dont{{PLURAL:$1|chelle-chi:|chés $1 paches chi:}} }}", + "category-article-count": "Chol catégorie ale o {{PLURAL:$2|0= autchune pache|1=seulemint l'pache-lo:|$2 paches, dont{{PLURAL:$1|0=autchune|1=chelle-chi|chés $1 paches in-dsous}} }}:", "category-article-count-limited": "{{PLURAL:$1|L' pache d'apré ale est|Chés $1 paches d'apré sont}} dins l'catégorie-lo.", "category-file-count": "Chol catégorie ale o {{PLURAL:$2|seulemint ech fichié-lo:|$2 fichiés dont chés $1 fichiés suivants:}}", "category-file-count-limited": "{{PLURAL:$1|Ech fichié d'apré est|Chés $1 fichiés d'apré sont}} dins l'catégorie-lo.", "listingcontinuesabbrev": "cont.", + "index-category": "Paches indécsées", "noindex-category": "Paches nin indécsées", "broken-file-category": "Paches aveuc des loïens d'fichiés bérzillés", "about": "À pérpos", @@ -108,9 +124,10 @@ "newwindow": "(ouvrir din eune nouvèle fernéte)", "cancel": "Canchler", "moredotdotdot": "Plu...", + "morenotlisted": "Chol lisse peut ète incomplète.", "mypage": "Pache", "mytalk": "Min bavouér", - "anontalk": "Bavouér pou chl'IP-lo", + "anontalk": "Bavouér", "navigation": "Navigachon", "and": " pi", "qbfind": "Trouvoèr", @@ -123,6 +140,7 @@ "actions": "Acchons", "namespaces": "Éspaces d'chés noms", "variants": "Ércanjantes", + "navigation-heading": "Menu éd navigacion", "errorpagetitle": "Bérlure", "returnto": "Értrouve $1.", "tagline": "Cha vient éd {{SITENAME}}", @@ -133,17 +151,22 @@ "searcharticle": "Aller", "history": "Historique deul pache", "history_short": "Histoère", + "history_small": "Histoère", "updatedmarker": "Cangé édpui em darinne visite", "printableversion": "Imprimabe vérchon", "permalink": "Loïen pérmanint", "print": "Imprimer", "view": "Vir", + "view-foreign": "Vir su $1", "edit": "Éditer", + "edit-local": "Modifier el déscripcion locale", "create": "Créer", + "create-local": "Ajouter ène déscripcion locale", "editthispage": "Éditer chl'pache-lo", "create-this-page": "Créer chl'pache lo", "delete": "Défacer", "deletethispage": "Défacer chl'pache lo", + "undeletethispage": "n'poin défacer chol pache", "undelete_short": "Déface poin {{PLURAL:$1|un édite|$1 édites}}", "viewdeleted_short": "{{PLURAL:$1|eune édition défacée|$1 éditions défacées}}", "protect": "Garantir", @@ -160,6 +183,9 @@ "talk": "distchuter", "views": "Vues", "toolbox": "Boéte à otis", + "tool-link-userrights": "Modifier chés groupes éd {{GENDER:$1|l’uzeu|l’uzeuse}}", + "tool-link-userrights-readonly": "Vir chés {{GENDER:$1|groupes d'uzeu}}", + "tool-link-emailuser": "Invouéyer un courriel à {{GENDER:$1|l’uzeu|l’uzeuse}}", "userpage": "Vir el pache dech uzeu", "projectpage": "Vir l'pache dech prodjé", "imagepage": "Vir el pache dech fichié", @@ -171,23 +197,28 @@ "otherlanguages": "Din d'eutes langaches", "redirectedfrom": "(Érdirection édpis $1)", "redirectpagesub": "Pache érdérivée", + "redirectto": "Ardiriger vers :", "lastmodifiedat": "L'pache-lo ale o té modifiée l'fouos darin l' $1, à $2.", "viewcount": "L' page-lo ale o té vue {{PLURAL:$1|1 foués|$1 foués}}.", "protectedpage": "Pache défènnée", "jumpto": "Aler à:", "jumptonavigation": "navigachon", "jumptosearch": "tracher", + "pool-errorunknown": "Bérlurage inconnu", + "poolcounter-usage-error": "Bérlurage d’utilisacion : $1", "aboutsite": "à pérpos éd {{SITENAME}}", "aboutpage": "Project:à pérpos", - "copyright": "Ch'contnu, il est disponipe dsou $1.", + "copyright": "Ch'contnu, il est disponipe dsou licince $1 sauf mincion invérse.", "copyrightpage": "{{ns:project}}:Copyrights", "currentevents": "Darinnetés picardes", "currentevents-url": "Project:Darinnetés picardes", "disclaimers": "Démintis", "disclaimerpage": "Project:Déminti général", "edithelp": "Éditer el aiyude", + "helppage-top-gethelp": "Aïude", "mainpage": "Moaite Pache", "mainpage-description": "Moaite Pache", + "policy-url": "Project:Régues", "portal": "Portal del conmeunauté", "portal-url": "Project:Accueul del conminnité", "privacy": "Politique d'éscrè", @@ -197,6 +228,8 @@ "ok": "OK", "retrievedfrom": "Érprind din \"$1\"", "youhavenewmessages": "Os avez $1 ($2).", + "youhavenewmessagesmanyusers": "Os avez $1 granmint d'uzeus ($2).", + "newmessagesdifflinkplural": "$1 {{PLURAL:$1|darin cangemint|darins cangemints}}", "youhavenewmessagesmulti": "Os avez des nouvieus messaches su $1", "editsection": "éditer", "editold": "éditer", @@ -207,6 +240,11 @@ "toc": "Étnus", "showtoc": "Aficher", "hidetoc": "muche", + "collapsible-collapse": "Érplier", + "collapsible-expand": "diswalper", + "confirmable-confirm": "Ètes-vos seur{{GENDER:$1||e}} ?", + "confirmable-yes": "Oui", + "confirmable-no": "Non", "thisisdeleted": "Vir ou érfoaire $1?", "viewdeleted": "Vir $1?", "restorelink": "{{PLURAL:$1|eune édition défacée|$1 chés éditions défacées}}", @@ -229,6 +267,7 @@ "nstab-template": "Modéle", "nstab-help": "Pache d'aiyude", "nstab-category": "Catégorie", + "mainpage-nstab": "Moaite Pache", "nosuchspecialpage": "I n'y o poin chot éspéchiale pache-lo", "error": "Bérlurache", "databaseerror": "Bérlurache din l'database", @@ -259,19 +298,51 @@ "login": "Intrer", "nav-login-createaccount": "Intrer / créer vote conpte", "userlogin": "Intrer / créer vote conpte", + "userloginnocreate": "Intrer", "logout": "Sortir", "userlogout": "Sortir", "notloggedin": "Poin connékté", + "userlogin-noaccount": "os n'avez mie un conpte ?", + "userlogin-joinproject": "Érgaingnez {{SITENAME}}", "nologin": "os n'avez mie un conpte? '''$1'''.", "nologinlink": "Créer un conpte", "createaccount": "Créer un conpte", "gotaccount": "Jou qu'os avez piécha un conpte? '''$1'''.", "gotaccountlink": "Intrer", "userlogin-resetlink": "Vos avez oblié vous détals d'connécsion ?", - "createaccountmail": "par imèle", + "userlogin-resetpassword-link": "Mot d'passe obliè ?", + "userlogin-helplink2": "Éyude pour s' connécter", + "userlogin-loggedin": "Os ètes déjo connécté{{GENDER:$1||e|(e)}} conme $1.\nImplouéyez ch' formuloére in-d'sous pour vous connécter aveuc un eute compte d'uzeu.", + "userlogin-reauth": "Os d'vez vous arconnécter pour vérifier éq vos ètes {{GENDER:$1|$1}}.", + "userlogin-createanother": "Créer un eute compte", + "createacct-emailrequired": "Adrèche courriel", + "createacct-emailoptional": "Adrèche courriel (facultative)", + "createacct-email-ph": "Intrez vote adrèche courriel", + "createacct-another-email-ph": "Intrez l' adrèche courriel", + "createaccountmail": "Uzer un mot d' passe aléatoére timporoére pi l’invouéyer à l’adrèche ed courriel éspécifiée", + "createaccountmail-help": "Peut ète implouèyé pour créer un compte pour eune eute parsonne sans connouaite ch' mot d'passe.", + "createacct-realname": "Nom réél (facultatif)", + "createaccountreason": "Motif :", + "createacct-reason": "Motif", + "createacct-reason-ph": "Porquoé os créez un eute compte ?", + "createacct-reason-help": "Mot d'billet affiché dins ch' jornal éd créachon d'compte", + "createacct-submit": "Créez vote compte", + "createacct-another-submit": "Créer un compte", + "createacct-continue-submit": "Continuer el créachon du compte", + "createacct-another-continue-submit": "Continuer el créachon du compte", + "createacct-benefit-heading": "{{SITENAME}} est foait pèr des gins conme vous.", + "createacct-benefit-body1": "modificacion{{PLURAL:$1||s}}", + "createacct-benefit-body2": "pache{{PLURAL:$1||s}}", + "createacct-benefit-body3": "{{PLURAL:$1|contributeu nouvieu|contributeus nouvieus}}", "badretype": "Chés mots d'passe intrés, is sont poin bon.", + "usernameinprogress": "Ène créachon d' compte pour ch' nom d’uzeu est déjo in cours.\nVoulez attènne.", "userexists": "Nom d’utilisateur entré déjà utilisé.\nNom d’uzeu intré déjo donné.\ni feut prinde un eute nom.\nj'm'escuse mais i feut prinde un aute nom.", "loginerror": "Bérlurache del intrée", + "createacct-error": "Bérlurage pour l'créachon du compte", + "createaccounterror": "Impossibe ed créer ch' compte : $1", + "nocookiesnew": "Ch' compte d'uzeu il o té créé, mais os n’ètes poin connecté{{GENDER:||e|(e)}}.\n{{SITENAME}} doét implouéyer des ''cookies'' pour warder el connecsion mais os les avez désactivés.\nVoulez les activer pi vos arconnecter aveuc ch' meume nom et pi ch' meume mot d'passe.", + "nocookieslogin": "{{SITENAME}} doét implouéyer des ''cookies'' pour warder el connecsion mais os les avez désactivés.\nVoulez les activer pi vos arconnecter.", + "nocookiesfornew": "Ch' compte d'uzeu il n'o poin té créé, pasqué os n’avons poin pu idintifier esn origine.\n{{SITENAME}} doét implouéyer des ''cookies'', vérifiez qu'ils sont activés, arquétchez l' pache pi érquérminchez.", "noname": "Os n'avez poin donné un nom d'uzeu valabe.", "loginsuccess": "'''Achteur os ètes intré{{GENDER:||e|(e)}} din {{SITENAME}} conme \"$1\".'''", "nouserspecified": "Os dvez intrer un nom d'uzeu.", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index 8ad40e4ff2..48acf7c3d7 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -2038,7 +2038,7 @@ "emailccsubject": "Kopia Twojej wiadomości do $1: $2", "emailsent": "Wiadomość została wysłana", "emailsenttext": "Twoja wiadomość została wysłana.", - "emailuserfooter": "Ten e-mail został {{GENDER:$1|wysłany}} z {{GRAMMAR:D.lp|{{SITENAME}}}} do {{GENDER:$2|$2}} przez $1 przy użyciu funkcji „{{int:emailuser}}”. {{GENDER:$2|Twoja}} odpowiedź na ten e-mail zostanie wysłana do {{GENDER:$1|oryginalnego nadawcy}}, a {{GENDER:$2|Twój}} adres e-mail zostanie {{GENDER:$1|mu|jej}} ujawniony.", + "emailuserfooter": "Ten e-mail został {{GENDER:$1|wysłany}} z {{GRAMMAR:D.lp|{{SITENAME}}}} do {{GENDER:$2|$2}} przez $1 przy użyciu funkcji „{{int:emailuser}}”. Jeśli wyślesz odpowiedź na ten e-mail do {{GENDER:$1|oryginalnego nadawcy}}, wówczas {{GENDER:$2|Twój}} adres e-mail zostanie {{GENDER:$1|mu|jej}} ujawniony.", "usermessage-summary": "Pozostawianie komunikatu systemowego.", "usermessage-editor": "Nadawca komunikatów systemowych", "watchlist": "Obserwowane", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 73eb495965..8903fd9e95 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -105,7 +105,8 @@ "Bruno.S.Alves 270", "!Silent", "Joao Xavier", - "Nahime2015" + "Nahime2015", + "Alex Great" ] }, "tog-underline": "Sublinhar links:", @@ -766,7 +767,7 @@ "userpage-userdoesnotexist": "A conta \"$1\" não se encontra registrada.\nVerifique se deseja mesmo criar/editar esta página.", "userpage-userdoesnotexist-view": "A conta de usuário \"$1\" não está registrada.", "blocked-notice-logextract": "Este usuário está atualmente bloqueado.\nO registro de bloqueio mais recente é fornecido abaixo, para referência:", - "clearyourcache": "Nota: Após salvar, você pode ter que limpar o \"cache\" do seu navegador para ver as alterações.\n*Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)\n*Google Chorme: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)\n* Internet Explorer: PressioneCtrl enquanto clica Recarregar, ou Pressione Ctrl-F5\n* Opera: Vá para Menu → Configurações (Opera → Preferencias no Mac) e depois para Privacidade e Segurança → Limpar dados de navegação → Imagens e arquivos em cache.", + "clearyourcache": "Nota: Após salvar, você pode ter que limpar o \"cache\" do seu navegador para ver as alterações.\n*Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)\n*Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)\n* Internet Explorer: PressioneCtrl enquanto clica Recarregar, ou Pressione Ctrl-F5\n* Opera: Vá para Menu → Configurações (Opera → Preferencias no Mac) e depois para Privacidade e Segurança → Limpar dados de navegação → Imagens e arquivos em cache.", "usercssyoucanpreview": "'''Dica:''' Utilize o botão \"{{int:showpreview}}\" para testar seu novo CSS antes de salvar.", "userjsyoucanpreview": "'''Dica:''' Utilize o botão \"{{int:showpreview}}\" para testar seu novo JavaScript antes de salvar.", "usercsspreview": "'''Lembre-se de que você está apenas previsualizando o seu CSS particular.'''\n'''Ele ainda não foi salvo!'''", @@ -1137,6 +1138,7 @@ "youremail": "Seu e-mail:", "username": "Nome de {{GENDER:$1|usuário|usuária|usuário(a)}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:", + "group-membership-link-with-expiry": "$1 (até $2)", "prefs-registration": "Hora de registro:", "yourrealname": "Nome verdadeiro:", "yourlanguage": "Língua:", @@ -1192,6 +1194,14 @@ "userrights-nodatabase": "O banco de dados $1 não existe ou não é um banco de dados local.", "userrights-changeable-col": "Grupos que pode alterar", "userrights-unchangeable-col": "Grupos que não pode alterar", + "userrights-expiry-current": "Expira a $1", + "userrights-expiry-none": "Não expira", + "userrights-expiry": "Expira em:", + "userrights-expiry-existing": "A proteção atual expirará às $3 de $2", + "userrights-expiry-othertime": "Outra duração:", + "userrights-expiry-options": "1 dia:1 day,1 semana:1 week,1 mês:1 month,3 meses:3 months,6 meses:6 months,1 ano:1 year", + "userrights-invalid-expiry": "O tempo de expiração para o grupo \"$1\" é inválido.", + "userrights-expiry-in-past": "O tempo de expiração para o grupo \"$1\" está no passado.", "userrights-conflict": "Há um comflito de permissões de usuário! Por favor, revise e confirme as alterações novamente.", "group": "Grupo:", "group-user": "Usuários", @@ -1393,8 +1403,11 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Exibir", "rcfilters-activefilters": "Filtros ativos", + "rcfilters-restore-default-filters": "Restaurar filtros padrão", + "rcfilters-clear-all-filters": "Limpar todos os filtros", "rcfilters-search-placeholder": "Filtrar alterações recentes (procurar ou começar a digitar)", "rcfilters-invalid-filter": "Filtro inválido", + "rcfilters-empty-filter": "Nenhum filtro ativo. Todas as contribuições são mostradas.", "rcfilters-filterlist-title": "Filtros", "rcfilters-filterlist-noresults": "Nenhum filtro encontrado", "rcfilters-filtergroup-registration": "Registro de usuário", @@ -1943,7 +1956,10 @@ "apisandbox-sending-request": "Enviando solicitação de API ...", "apisandbox-loading-results": "Recebendo resultados da API ...", "apisandbox-results-error": "Ocorreu um erro ao carregar a resposta de consulta da API: $1.", + "apisandbox-request-selectformat-label": "Mostrar dados do pedido como:", + "apisandbox-request-format-url-label": "Sequência de consulta de URL", "apisandbox-request-url-label": "URL solicitante:", + "apisandbox-request-json-label": "Pedido JSON:", "apisandbox-request-time": "Tempo do pedido: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Corrigir token e reenviar", "apisandbox-results-fixtoken-fail": "Falha ao buscar token \"$1\".", @@ -3602,6 +3618,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|atualizou}} etiquetas na entrada de registro $5 da página $3 ({{PLURAL:$7|adicionou}} $6; {{PLURAL:$9|removeu}} $8)", "rightsnone": "(nenhum)", "revdelete-summary": "resumo da edição", + "rightslogentry-temporary-group": "$1 (temporário, até $2)", "feedback-adding": "Adicionando os comentários na página...", "feedback-back": "Voltar", "feedback-bugcheck": "Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].", diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json index bf967dc634..1fdcc8e2a0 100644 --- a/languages/i18n/pt.json +++ b/languages/i18n/pt.json @@ -1101,6 +1101,7 @@ "youremail": "Correio eletrónico:", "username": "Nome de {{GENDER:$1|utilizador|utilizadora|utilizador(a)}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:", + "group-membership-link-with-expiry": "$1 (até $2)", "prefs-registration": "Hora de registo:", "yourrealname": "Nome verdadeiro:", "yourlanguage": "Língua:", @@ -1156,6 +1157,14 @@ "userrights-nodatabase": "A base de dados $1 não existe ou não é uma base de dados local.", "userrights-changeable-col": "Grupos que pode alterar", "userrights-unchangeable-col": "Grupos que não pode alterar", + "userrights-expiry-current": "Expira a $1", + "userrights-expiry-none": "Não expira", + "userrights-expiry": "Expira a:", + "userrights-expiry-existing": "Prazo de expiração: $3, $2", + "userrights-expiry-othertime": "Outra duração:", + "userrights-expiry-options": "1 dia:1 day,1 semana:1 week,1 mês:1 month,3 meses:3 months,6 meses:6 months,1 ano:1 year", + "userrights-invalid-expiry": "O prazo de expiração para o grupo \"$1\" é inválido.", + "userrights-expiry-in-past": "O prazo de expiração para o grupo \"$1\" está no passado.", "userrights-conflict": "Conflito entre alterações de privilégios de utilizador! Por favor, reveja e confirme as suas mudanças.", "group": "Grupo:", "group-user": "Utilizadores", @@ -1357,11 +1366,18 @@ "recentchanges-legend-plusminus": "(±123)", "recentchanges-submit": "Mostrar", "rcfilters-activefilters": "Filtros ativos", + "rcfilters-restore-default-filters": "Restaurar os filtros padrão", + "rcfilters-clear-all-filters": "Limpar todos os filtros", "rcfilters-search-placeholder": "Filtrar mudanças recentes (navegue ou começe a escrever)", "rcfilters-invalid-filter": "Filtro inválido", + "rcfilters-empty-filter": "Não há filtros ativos. São mostradas todas as contribuições.", "rcfilters-filterlist-title": "Filtros", "rcfilters-filterlist-noresults": "Não foram encontrados filtros", "rcfilters-filtergroup-registration": "Registo de utilizador", + "rcfilters-filter-registered-label": "Registado", + "rcfilters-filter-registered-description": "Editores autenticados.", + "rcfilters-filter-unregistered-label": "Não registado", + "rcfilters-filter-unregistered-description": " Editores que não estão autenticados.", "rcfilters-filtergroup-authorship": "Editar autoria", "rcfilters-filter-editsbyself-label": "As suas próprias edições", "rcfilters-filter-editsbyself-description": "Edições suas.", @@ -1374,6 +1390,25 @@ "rcfilters-filter-userExpLevel-learner-description": "Mais dias de atividade e edições do que \"Novatos\", mas menos do que \"Utilizadores experientes\".", "rcfilters-filter-userExpLevel-experienced-label": "Utilizadores experientes", "rcfilters-filter-userExpLevel-experienced-description": "Mais de 30 dias de atividade e 500 edições.", + "rcfilters-filtergroup-automated": "Contribuições automatizadas", + "rcfilters-filter-bots-label": "Robô", + "rcfilters-filter-bots-description": "Edições efectuadas por ferramentas automatizadas.", + "rcfilters-filter-humans-label": "Ser humano (não robô)", + "rcfilters-filter-humans-description": "Edições efectuadas por editores humanos.", + "rcfilters-filtergroup-significance": "Significado", + "rcfilters-filter-minor-label": "Edições menores", + "rcfilters-filter-minor-description": "Edições marcadas pelo autor como menores.", + "rcfilters-filter-major-label": "Edições não-menores", + "rcfilters-filter-major-description": "Edições não marcadas como menores.", + "rcfilters-filtergroup-changetype": "Tipo de alteração", + "rcfilters-filter-pageedits-label": "Edições da página", + "rcfilters-filter-pageedits-description": "Edições do conteúdo da wiki, de discussões, de descrições de categorias....", + "rcfilters-filter-newpages-label": "Criações de páginas", + "rcfilters-filter-newpages-description": "Edições que criam novas páginas.", + "rcfilters-filter-categorization-label": "Alterações de categoria", + "rcfilters-filter-categorization-description": "Registos de páginas que estão a ser adicionadas ou removidas das categorias.", + "rcfilters-filter-logactions-label": "Ações registadas", + "rcfilters-filter-logactions-description": "Ações administrativas, criação de contas, eliminação de páginas, carregamentos....", "rcnotefrom": "Abaixo {{PLURAL:$5|está a mudança|estão as mudanças}} desde $2 (mostradas até $1).", "rclistfrom": "Mostrar as novas mudanças a partir das $2 de $3", "rcshowhideminor": "$1 edições menores", @@ -1883,7 +1918,10 @@ "apisandbox-sending-request": "A enviar solicitação de API...", "apisandbox-loading-results": "A receber resultados da API...", "apisandbox-results-error": "Ocorreu um erro ao carregar a resposta à consulta por API: $1", + "apisandbox-request-selectformat-label": "Mostrar dados do pedido como:", + "apisandbox-request-format-url-label": "Sequência de consulta da URL", "apisandbox-request-url-label": "URL do pedido:", + "apisandbox-request-json-label": "Pedido JSON:", "apisandbox-request-time": "Tempo de processamento: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Corrija o identificador e volte a submete-lo", "apisandbox-results-fixtoken-fail": "Não foi possível obter o identificador \"$1\".", @@ -2025,7 +2063,7 @@ "emailccsubject": "Cópia da sua mensagem para $1: $2", "emailsent": "Mensagem enviada", "emailsenttext": "A sua mensagem foi enviada.", - "emailuserfooter": "Esta mensagem foi enviada {{GENDER:$1|pelo utilizador|pela utilizadora}} $1 para {{GENDER:$2|$2}} através da opção \"{{int:emailuser}}\" da wiki {{SITENAME}}. {{GENDER:$2|A sua}} resposta será enviada diretamente para {{GENDER:$1|o|a}} remetente original, e irá revelar-lhe {{GENDER:$2|o seu}} endereço de correio eletrónico.", + "emailuserfooter": "Esta mensagem foi enviada {{GENDER:$1|pelo utilizador|pela utilizadora}} $1 para {{GENDER:$2|$2}} através da opção \"{{int:emailuser}}\" da wiki {{SITENAME}}. Se {{GENDER:$2|responder}} a esta mensagem, {{GENDER:$2|a sua}} resposta será enviada diretamente para {{GENDER:$1|o|a}} remetente original, e irá revelar-lhe {{GENDER:$2|o seu}} endereço de correio eletrónico.", "usermessage-summary": "Deixar mensagem de sistema.", "usermessage-editor": "Editor de mensagens de sistema", "watchlist": "Páginas vigiadas", @@ -3546,6 +3584,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|atualizou}} as etiquetas na entrada de registo $5 da página $3 ($6 {{PLURAL:$7|adicionadas}}; $8 {{PLURAL:$9|removidas}})", "rightsnone": "(nenhum)", "revdelete-summary": "editar resumo", + "rightslogentry-temporary-group": "$1 (temporário, até $2)", "feedback-adding": "A acrescentar os comentários à página...", "feedback-back": "Retroceder", "feedback-bugcheck": "Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index 2f5b925cd4..b141ffc00d 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -1281,6 +1281,7 @@ "username": "Username field in [[Special:Preferences]]. $1 is the current user name for GENDER distinction (depends on sex setting).\n\n{{Identical|Username}}", "prefs-memberingroups": "This message is shown on [[Special:Preferences]], first tab.\n\nParameters:\n* $1 - number of user groups\n* $2 - the username for GENDER\nSee also:\n* {{msg-mw|Prefs-memberingroups-type}}", "prefs-memberingroups-type": "{{optional}}\nParameters:\n* $1 - list of group names\n* $2 - list of group member names. Label for these is {{msg-mw|Prefs-memberingroups}}", + "group-membership-link-with-expiry": "Used as part of a list of user groups, to show the time and date when a user's membership of a group expires. That is, they are a member of that group \"until\" the specified date and time.\n\nParameters:\n* $1 - group name\n* $2 - time and date of expiry\n* $3 - date of expiry\n* $4 - time of expiry", "prefs-registration": "Used in [[Special:Preferences]].", "prefs-registration-date-time": "{{optional}}\nUsed in [[Special:Preferences]]. Parameters are:\n* $1 date and time of registration\n* $2 date of registration\n* $3 time of registration", "yourrealname": "Used in [[Special:Preferences]], first tab.\n{{Identical|Real name}}", @@ -1340,6 +1341,14 @@ "userrights-changeable-col": "Used when editing user groups in [[Special:Userrights]].\n\nThe message is the head of a column of group assignments.\n\nParameters:\n* $1 - (Optional) for PLURAL use, the number of items in the column following the message. Avoid PLURAL, if your language can do without.", "userrights-unchangeable-col": "Used when editing user groups in [[Special:Userrights]]. The message is the head of a column of group assignments.\n\nParameters:\n* $1 - (Optional) for PLURAL use, the number of items in the column following the message. Avoid PLURAL, if your language allows that.", "userrights-irreversible-marker": "{{optional}}\nParameters:\n* $1 - group member", + "userrights-expiry-current": "Indicates when a user's membership of a user group expires.\n\nParameters:\n* $1 - time and date of expiry\n* $2 - date of expiry\n* $3 - time of expiry\n{{Identical|Expire}}", + "userrights-expiry-none": "Indicates that a user's membership of a user group lasts indefinitely, and does not expire.", + "userrights-expiry": "Used as a label for a form element which can be used to select an expiry date/time.\n{{Identical|Expire}}", + "userrights-expiry-existing": "Shows the existing expiry time in the drop down menu underneath the individual user right on Special:UserRights.\n\nParameters:\n* $1 - Date and time of the existing expiry\n* $2 - date of the existing expiry\n* $3 - time of the existing expiry\n\nSee also:\n* {{msg-mw|protect-existing-expiry}}", + "userrights-expiry-othertime": "{{Identical|Other time}}", + "userrights-expiry-options": "{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}\nOptions for the duration of the user group membership. Example: See e.g. [[MediaWiki:Userrights-expiry-options/nl]] if you still don't know how to do it.\n\nSee also {{msg-mw|protect-expiry-options}}.", + "userrights-invalid-expiry": "Error message on [[Special:UserRights]].\n\nParameters:\n* $1 - group name", + "userrights-expiry-in-past": "Error message on [[Special:UserRights]] when the user types an expiry date that has already passed.\n\nParameters:\n* $1 - group name", "userrights-conflict": "Shown on [[Special:UserRights]] if the target's rights have been changed since the form was loaded.", "group": "{{Identical|Group}}", "group-user": "{{doc-group|user}}\n{{Identical|User}}", @@ -1780,31 +1789,31 @@ "upload-form-label-own-work-message-generic-foreign": "Message shown by default when a user affirms that they are allowed to upload a file to a remote wiki.", "upload-form-label-not-own-work-message-generic-foreign": "Message shown by default when a user cannot upload a file to a remote wiki.", "upload-form-label-not-own-work-local-generic-foreign": "Suggests uploading a file locally instead of to a remote wiki.", - "backend-fail-stream": "Parameters:\n* $1 - a filename", - "backend-fail-backup": "Parameters:\n* $1 - a filename", - "backend-fail-notexists": "Parameters:\n* $1 - a filename", - "backend-fail-hashes": "Definition of \"[[w:en:Hash_function|hashes]]\".", - "backend-fail-notsame": "Parametreler:\n* $1 bir dosya ismi.", - "backend-fail-invalidpath": "Parameters:\n* $1 - a storage path", - "backend-fail-delete": "Parameters:\n* $1 - a file path", - "backend-fail-describe": "Parameters:\n* $1 - a file path", - "backend-fail-alreadyexists": "Parameters:\n* $1 - a filename", - "backend-fail-store": "Parameters:\n* $1 - a filename\n* $2 - a storage path", - "backend-fail-copy": "Parameters:\n* $1 - a file path\n* $2 - a file path", - "backend-fail-move": "Parameters:\n* $1 - a file path\n* $2 - a file path", + "backend-fail-stream": "Parameters:\n* $1 - a filename\n{{Related|Backend-fail}}", + "backend-fail-backup": "Parameters:\n* $1 - a filename\n{{Related|Backend-fail}}", + "backend-fail-notexists": "Parameters:\n* $1 - a filename\n{{Related|Backend-fail}}", + "backend-fail-hashes": "Definition of \"[[w:en:Hash_function|hashes]]\".\n{{Related|Backend-fail}}", + "backend-fail-notsame": "Parameters:\n* $1 is a filename.\n{{Related|Backend-fail}}", + "backend-fail-invalidpath": "Parameters:\n* $1 - a storage path\n{{Related|Backend-fail}}", + "backend-fail-delete": "Parameters:\n* $1 - a file path\n{{Related|Backend-fail}}", + "backend-fail-describe": "Parameters:\n* $1 - a file path\n{{Related|Backend-fail}}", + "backend-fail-alreadyexists": "Parameters:\n* $1 - a filename\n{{Related|Backend-fail}}", + "backend-fail-store": "Parameters:\n* $1 - a filename\n* $2 - a storage path\n{{Related|Backend-fail}}", + "backend-fail-copy": "Parameters:\n* $1 - a file path\n* $2 - a file path\n{{Related|Backend-fail}}", + "backend-fail-move": "Parameters:\n* $1 - a file path\n* $2 - a file path\n{{Related|Backend-fail}}", "backend-fail-opentemp": "Used as error message.\n{{Related|Backend-fail}}", "backend-fail-writetemp": "Used as error message.\n{{Related|Backend-fail}}", "backend-fail-closetemp": "Used as error message.\n{{Related|Backend-fail}}", "backend-fail-read": "Used as error message. Parameters:\n* $1 - filename\n{{Related|Backend-fail}}", - "backend-fail-create": "Parameters:\n* $1 - a filename", - "backend-fail-maxsize": "Parameters:\n* $1 - destination storage path\n* $2 - max file size (in bytes)", - "backend-fail-readonly": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.\n\nParameters:\n* $1 - name\n* $2 - reason for being read-only", - "backend-fail-synced": "Used as fatal error message.\n\nParameters:\n* $1 - file path\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.", - "backend-fail-connect": "Used as fatal error message. Parameters:\n* $1 - backend name\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.", - "backend-fail-internal": "Used as fatal error message. Parameters:\n* $1 - backend name\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.", - "backend-fail-contenttype": "Used as fatal error message. Parameters:\n* $1 - a storage (file) path", - "backend-fail-batchsize": "Error message when the limit of operations to be done at once in the file backend was reached.\nParameters:\n* $1 - the number of operations attempted at once in this case\n* $2 - the maximum number of operations that can be attempted at once\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.", - "backend-fail-usable": "Parameters:\n* $1 - the file name, including the path, formatted for the storage backend used", + "backend-fail-create": "Parameters:\n* $1 - a filename\n{{Related|Backend-fail}}", + "backend-fail-maxsize": "Parameters:\n* $1 - destination storage path\n* $2 - max file size (in bytes)\n{{Related|Backend-fail}}", + "backend-fail-readonly": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.\n\nParameters:\n* $1 - name\n* $2 - reason for being read-only\n{{Related|Backend-fail}}", + "backend-fail-synced": "Used as fatal error message.\n\nParameters:\n* $1 - file path\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.\n{{Related|Backend-fail}}", + "backend-fail-connect": "Used as fatal error message. Parameters:\n* $1 - backend name\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.\n{{Related|Backend-fail}}", + "backend-fail-internal": "Used as fatal error message. Parameters:\n* $1 - backend name\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.\n{{Related|Backend-fail}}", + "backend-fail-contenttype": "Used as fatal error message. Parameters:\n* $1 - a storage (file) path\n{{Related|Backend-fail}}", + "backend-fail-batchsize": "Error message when the limit of operations to be done at once in the file backend was reached.\nParameters:\n* $1 - the number of operations attempted at once in this case\n* $2 - the maximum number of operations that can be attempted at once\nBoth parameters are PLURAL supported\n\nA \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.\n{{Related|Backend-fail}}", + "backend-fail-usable": "Parameters:\n* $1 - the file name, including the path, formatted for the storage backend used\n{{Related|Backend-fail}}", "filejournal-fail-dbconnect": "Parameters:\n* $1 is the name of the \"[[:wikipedia:Front and back ends|backend]]\" that the file journal logs changes for.", "filejournal-fail-dbquery": "Parameters:\n* $1 is the name of the \"[[:wikipedia:Front and back ends|backend]]\" that the file journal logs changes for.", "lockmanager-notlocked": "Parameters:\n* $1 is a resource path (e.g. \"mwstore://media-public/a/ab/file.jpg\").", @@ -4158,6 +4167,7 @@ "newuserlog-autocreate-entry": "This message is used in the [[:mw:Extension:Newuserlog|new user log]] to mark an account that was created by MediaWiki as part of a [[:mw:Extension:CentralAuth|CentralAuth]] global account.", "rightslogentry": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a bureaucrat changes the user groups for a user.\n\nParameters:\n* $1 - the username\n* $2 - list of user groups or {{msg-mw|Rightsnone}}\n* $3 - list of user groups or {{msg-mw|Rightsnone}}\n\nThe name of the bureaucrat who did this task appears before this message.\n\nSimilar to {{msg-mw|Gur-rightslog-entry}}", "rightslogentry-autopromote": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a user is automatically promoted to a user group.\n\nParameters:\n* $1 - (Unused)\n* $2 - a comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $3 - a comma separated list of new user groups", + "rightslogentry-temporary-group": "This message is displayed in the [[Special:Log/rights|User Rights Log]] to show that a user group has been allocated temporarily.\n\nParameters:\n* $1 - group name\n* $2 - date and time of expiry\n* $3 - date of expiry\n* $4 - time of expiry", "feedback-adding": "Progress notice", "feedback-back": "Button to go back to the previous action in the feedback dialog.\n{{Identical|Back}}", "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index 6011dfbcfb..338954f4d0 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -561,7 +561,7 @@ "nosuchuser": "Участника с именем «$1» не существует.\nИмена участников чувствительны к регистру букв.\nПроверьте правильность написания имени или [[Special:CreateAccount|создайте новую учётную запись]].", "nosuchusershort": "Не существует участника с именем «$1». Проверьте написание имени.", "nouserspecified": "Вы должны указать имя участника.", - "login-userblocked": "Этот участник заблокирован. Вход в систему не разрешён.", + "login-userblocked": "Участник заблокирован. Вход в систему запрещен.", "wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.", "wrongpasswordempty": "Пожалуйста, введите непустой пароль.", "passwordtooshort": "Пароль должен состоять не менее чем из $1 {{PLURAL:$1|символа|символов}}.", @@ -734,7 +734,7 @@ "subject-preview": "Заголовок будет выглядеть так:", "previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.", "blockedtitle": "Участник заблокирован", - "blockedtext": "'''Ваша учётная запись или IP-адрес заблокированы.'''\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «''$2''».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.", + "blockedtext": "Ваша учётная запись или IP-адрес заблокированы.\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «$2».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.", "autoblockedtext": "Ваш IP-адрес автоматически заблокирован в связи с тем, что он ранее использовался кем-то из участников, заблокированных {{GENDER:$4|участником|участницей}} $1. \nБыла указана следующая причина блокировки:\n\n: «$2».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\n\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\n\nВаш IP-адрес — $3, идентификатор блокировки — #$5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.", "systemblockedtext": "Ваше имя участника или IP-адрес были автоматически заблокированы MediaWiki.\nУказана следующая причина:\n\n:$2\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВаш текущий IP-адрес $3.\nПожалуйста, указывайте все эти сведения в любых своих обращениях.", "blockednoreason": "причина не указана", @@ -864,8 +864,8 @@ "undo-nochange": "Правка, похоже, уже была отменена.", "undo-summary": "Отмена правки $1, сделанной [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]])", "undo-summary-username-hidden": "Отмена правки $1, сделанной участником, чьё имя скрыто", - "cantcreateaccount-text": "Создание учётных записей с этого IP-адреса ('''$1''') было заблокировано {{GENDER:$3|участником|участницей|}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|указал|указала}} следующую причину: ''$2''.", - "cantcreateaccount-range-text": "{{GENDER:$3|Участник|Участница}} [[User:$3|$3]] {{GENDER:$3|установил|установила}} запрет на создание учётных записей из диапазона IP-адресов $1, включающего ваш IP-адрес ($4). \n\nБыла указана следующая причина: $2.", + "cantcreateaccount-text": "Создание учётных записей с этого IP-адреса ($1) было заблокировано {{GENDER:$3|участником|участницей|}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|указал|указала}} следующую причину: $2.", + "cantcreateaccount-range-text": "{{GENDER:$3|Участник|Участница}} [[User:$3|$3]] {{GENDER:$3|установил|установила}} запрет на создание учётных записей для диапазона IP-адресов $1, включающего ваш IP-адрес ($4). \n\nБыла указана следующая причина: $2.", "viewpagelogs": "Показать журналы для этой страницы", "nohistory": "Для этой страницы история изменений отсутствует.", "currentrev": "Текущая версия", @@ -1127,6 +1127,7 @@ "youremail": "Электронная почта:", "username": "{{GENDER:$1|Имя участника|Имя участницы}}:", "prefs-memberingroups": "{{GENDER:$2|Член|Член}} {{PLURAL:$1|1=группы|групп}}:", + "group-membership-link-with-expiry": "$1 (до $2)", "prefs-registration": "Время регистрации:", "yourrealname": "Настоящее имя:", "yourlanguage": "Язык интерфейса:", @@ -1137,7 +1138,7 @@ "badsig": "Неверная подпись. Проверьте корректность HTML-тегов.", "badsiglength": "Слишком длинная подпись.\nПодпись не должна превышать $1 {{PLURAL:$1|символа|символа|символов}}.", "yourgender": "Какое описание вам более подходит?", - "gender-unknown": "При упоминании вас программное обеспечение, когда это возможно, будет использовать гендерно-нейтральные слова", + "gender-unknown": "При упоминании вас, программное обеспечение, когда это возможно, будет использовать гендерно-нейтральные слова", "gender-male": "Он редактирует страницы вики", "gender-female": "Онa редактирует страницы вики", "prefs-help-gender": "Этот параметр задавать необязательно.\nДвижок использует это значение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.", @@ -1176,12 +1177,20 @@ "saveusergroups": "Сохранить группы {{GENDER:$1|участника|участницы}}", "userrights-groupsmember": "Состоит в группах:", "userrights-groupsmember-auto": "Неявно состоит в группах:", - "userrights-groups-help": "Вы можете изменить группы, в которые входит этот участник.\n* Если около названия группы стоит отметка, значит участник входит в эту группу.\n* Если отметка не стоит — участник не относится к соответствующей группе.\n* Знак * отмечает, что вы не сможете удалить участника из группы, если добавите его в неё, или наоборот.", + "userrights-groups-help": "Вы можете изменить группы, в которые входит этот участник.\n* Если около названия группы стоит отметка — участник входит в эту группу.\n* Если отметка не стоит — участник не входит в эту группу.\n* Знак * отмечает, что вы не сможете удалить участника из группы, если добавите его в неё, или наоборот.", "userrights-reason": "Причина:", "userrights-no-interwiki": "У вас нет разрешения изменять права участников в других вики.", "userrights-nodatabase": "База данных $1 не существует или расположена не локально.", "userrights-changeable-col": "Группы, которые вы можете изменять", "userrights-unchangeable-col": "Группы, которые вы не можете изменять", + "userrights-expiry-current": "Истекает $1", + "userrights-expiry-none": "Никогда", + "userrights-expiry": "Права истекают:", + "userrights-expiry-existing": "$2, $3", + "userrights-expiry-othertime": "Другое время:", + "userrights-expiry-options": "1 день:1 day,1 неделя:1 week,1 месяц:1 mopnth,3 месяца:3 months,6 месяцев:6 months,1 год:1 year", + "userrights-invalid-expiry": "Время истечения для группы «$1» задано неверно.", + "userrights-expiry-in-past": "Время истечения для группы «$1» задано в прошлом.", "userrights-conflict": "Конфликт изменения прав участника! Пожалуйста, проверьте и примените изменения заново.", "group": "Группа:", "group-user": "Участники", @@ -1487,8 +1496,8 @@ "upload_directory_missing": "Директория для загрузок ($1) отсутствует и не может быть создана веб-сервером.", "upload_directory_read_only": "Веб-сервер не имеет прав записи в папку ($1), в которой предполагается хранить загружаемые файлы.", "uploaderror": "Ошибка загрузки файла", - "upload-recreate-warning": "'''Внимание: файл с таким именем был удален или переименован.'''\n\nНиже представлены журналы удалений и переименований этой страницы:", - "uploadtext": "Воспользуйтесь этой формой для загрузки файлов на сервер.\nЧтобы просмотреть ранее загруженные файлы, обратитесь к [[Special:FileList|списку загруженных файлов]]. Загрузка файлов также записывается в [[Special:Log/upload|журнал загрузок]], данные об удалённых файлах можно найти в [[Special:Log/delete|журнале удалений]].\n\nДля включения файла в статью вы можете использовать строки вида:\n* '''[[{{ns:file}}:File.jpg]]''' для вставки полной версии файла;\n* '''[[{{ns:file}}:File.png|200px|thumb|left|описание]]''' для вставки слева от текста уменьшенной до 200 пикселей по ширине версии файла с выводом под ним указанного описания;\n* '''[[{{ns:media}}:File.ogg]]''' для вставки ссылки на файл, без отображения его содержимого на странице.", + "upload-recreate-warning": "Внимание: файл с таким именем был удален или переименован.\n\nНиже представлены журналы удалений и переименований этой страницы:", + "uploadtext": "Воспользуйтесь этой формой для загрузки файлов на сервер.\nЧтобы просмотреть ранее загруженные файлы, обратитесь к [[Special:FileList|списку загруженных файлов]]. Загрузка файлов также записывается в [[Special:Log/upload|журнал загрузок]]; данные об удалённых файлах можно найти в [[Special:Log/delete|журнале удалений]].\n\nДля включения файла в статью вы можете использовать строки вида:\n* [[{{ns:file}}:File.jpg]] для вставки полной версии файла;\n* [[{{ns:file}}:File.png|200px|thumb|left|описание]] для вставки слева от текста уменьшенной до 200 пикселей по ширине версии файла с выводом под ним указанного описания;\n* [[{{ns:media}}:File.ogg]] для вставки ссылки на файл, без отображения его содержимого на странице.", "upload-permitted": "{{PLURAL:$2|Разрешённый тип|Разрешённые типы}} файлов: $1.", "upload-preferred": "{{PLURAL:$2|Предпочтительный тип|Предпочтительные типы}} файлов: $1.", "upload-prohibited": "{{PLURAL:$2|Запрещённый тип|Запрещённые типы}} файлов: $1.", @@ -1642,7 +1651,7 @@ "lockmanager-fail-deletelock": "Не удалось удалить файл блокировки для «$1».", "lockmanager-fail-acquirelock": "Не удалось добиться блокировки «$1».", "lockmanager-fail-openlock": "Не удалось открыть файл блокировки для «$1».", - "lockmanager-fail-releaselock": "Не удалось разблокировать \"$1\".", + "lockmanager-fail-releaselock": "Не удалось разблокировать «$1».", "lockmanager-fail-db-bucket": "Не удалось связаться с достаточным количеством баз блокировок в сегменте $1.", "lockmanager-fail-db-release": "Не удалось снять блокировку базы данных $1 .", "lockmanager-fail-svr-acquire": "Не удалось получить блокировку на сервере $1.", @@ -1681,7 +1690,7 @@ "upload-curl-error6": "Невозможно обратить по указанному адресу.", "upload-curl-error6-text": "Невозможно обратить по указанному адресу. Пожалуйста, проверьте, что адрес верен, а сайт доступен.", "upload-curl-error28": "Время, отведённое на загрузку, истекло", - "upload-curl-error28-text": "Сайт слишком долго не отвечает. Пожалуйста, проверьте что сайт работоспособен и после небольшого перерыва попробуйте ещё раз. Возможно, операцию следует провести в другое время, когда сайт менее нагружен.", + "upload-curl-error28-text": "Сайт слишком долго не отвечает. \nПожалуйста, проверьте что сайт работоспособен и после небольшого перерыва попробуйте ещё раз. Возможно, операцию следует провести в другое время, когда сайт менее нагружен.", "license": "Лицензирование:", "license-header": "Лицензирование", "nolicense": "Ничего не выбрано", @@ -1938,7 +1947,10 @@ "apisandbox-sending-request": "Отправка API-запроса…", "apisandbox-loading-results": "Получение API-результатов…", "apisandbox-results-error": "Произошла ошибка при загрузке API-ответа на запрос: $1.", + "apisandbox-request-selectformat-label": "Показать данные запроса, как:", + "apisandbox-request-format-url-label": "Строка URL-запроса", "apisandbox-request-url-label": "URL-адрес запроса:", + "apisandbox-request-json-label": "Запросить JSON:", "apisandbox-request-time": "Время запроса: {{PLURAL:$1|$1 мс}}", "apisandbox-results-fixtoken": "Исправьте токен и повторите отправку", "apisandbox-results-fixtoken-fail": "Не удалось вызвать токен «$1».", @@ -2083,7 +2095,7 @@ "emailccsubject": "Копия вашего сообщения для $1: $2", "emailsent": "Письмо отправлено", "emailsenttext": "Ваше электронное сообщение отправлено.", - "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailuser}}» проекта {{SITENAME}}.\n{{GENDER:$2|Письмо}} будет отослано напрямую {{GENDER:$1|отправителю}}, так что {{GENDER:$2|ваш}} адрес электронной почты станет известен {{GENDER:$1|ему|ей}}.", + "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailuser}}» проекта {{SITENAME}}. Если {{GENDER:$2|вы}} ответите на это письмо, оно будет отослано напрямую {{GENDER:$1|отправителю}}, так что {{GENDER:$2|ваш}} адрес электронной почты станет известен {{GENDER:$1|ему|ей}}.", "usermessage-summary": "Оставить системное сообщение.", "usermessage-editor": "Системная доставка", "watchlist": "Список наблюдения", @@ -2163,7 +2175,7 @@ "deletecomment": "Причина:", "deleteotherreason": "Другая причина/дополнение:", "deletereasonotherlist": "Другая причина", - "deletereason-dropdown": "* Типовые причины удаления\n** спам\n** вандализм\n** нарушение авторских прав\n** по запросу автора\n** неработающее перенаправление", + "deletereason-dropdown": "* Типовые причины удаления\n** Спам\n** Вандализм\n** Нарушение авторских прав\n** По запросу автора\n** Неработающее перенаправление", "delete-edit-reasonlist": "Править список причин", "delete-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nУдаление таких страниц было запрещено во избежание нарушений в работе сайта «{{SITENAME}}».", "delete-warning-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nЕё удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;\nдействуйте с осторожностью.", @@ -2459,7 +2471,7 @@ "sorbs_create_account_reason": "Ваш IP-адрес числится как открытый прокси в DNSBL. Вы не можете создать учётную запись.", "softblockrangesreason": "Анонимные правки не разрешены с вашего IP-адреса ($1). Пожалуйста, войдите в систему.", "xffblockreason": "Был заблокирован IP-адрес, присутствующий в заголовке X-Forwarded-For и принадлежащий либо вам, либо используемому вами прокси-серверу. Первоначальная причина блокировки была следующей: $1", - "cant-see-hidden-user": "Участник, которого вы пытаетесь заблокировать, уже заблокирован и скрыт. Поскольку у вас нет разрешения на работу по сокрытию участников, вы не можете просмотреть или изменить данную блокировку.", + "cant-see-hidden-user": "Участник, которого вы пытаетесь заблокировать, уже заблокирован и скрыт. Поскольку у вас недостаточно прав, вы не можете просмотреть детали.", "ipbblocked": "Вы не можете блокировать или разблокировать других участников, так как вы сами заблокированы", "ipbnounblockself": "Вы не можете разблокировать самого себя", "lockdb": "Сделать базу данных доступной только для чтения", @@ -2484,7 +2496,7 @@ "movepagetext": "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое.\nВы можете автоматически обновить перенаправления, которые вели на старое название.\nЕсли вы этого не сделаете, пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница не будет переименована, если уже существует страница с названием, идентичным выбранному, кроме случаев, когда такая страница пуста или представляет собой перенаправление, и при этом не имеет истории правок.\nЭто означает, что сделав ошибочное переименование, вы можете переименовать страницу обратно в то название, которое у неё только что было, но не можете случайно затереть существующую страницу.\n\nПримечание:\nПереименование популярных страниц может привести к масштабным и неожиданным изменениям.\nПожалуйста, прежде чем продолжать, убедитесь, что понимаете все возможные последствия.", "movepagetext-noredirectfixer": "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое название.\nПожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница не будет переименована, если страница с новым названием уже существует, кроме случаев, если она пуста или представляет собой перенаправление, и при этом не имеет истории правок.\nЭто означает, что сделав ошибочное переименование, вы сможете переименовать страницу обратно в то название, которое у неё только что было, но не сможете случайно затереть существующую страницу.\n\nПримечание:\nПереименование может привести к масштабным и неожиданным изменениям для популярных страниц.\nПожалуйста, прежде чем продолжить, убедитесь, что понимаете все возможные последствия.", "movepagetalktext": "Если вы отметите этот пункт, связанная с ней страница обсуждения будет также автоматически переименована, если только уже не существует непустая страница обсуждения с таким же названием.\n\nВ этом случае вам нужно будет переименовать или объединить страницы вручную, если это необходимо.", - "moveuserpage-warning": "'''Внимание.''' Вы собираетесь переименовать страницу участника. Пожалуйста, обратите внимание, что переименована будет только страница, участник '''не''' будет переименован.", + "moveuserpage-warning": "Внимание: вы собираетесь переименовать страницу участника. Пожалуйста, обратите внимание, что переименована будет только страница, участник не будет переименован.", "movecategorypage-warning": "Предупреждение: Вы собираетесь переименовать страницу категории. Пожалуйста, обратите внимание, что будет переименована только эта страница, а все страницы старой категории не будут перекатегоризованы в новую.", "movenologintext": "Вы должны [[Special:UserLogin|представиться системе]],\nчтобы иметь возможность переименовать страницы.", "movenotallowed": "У вас нет разрешения переименовывать страницы.", @@ -2839,8 +2851,8 @@ "file-info-png-looped": "закольцованный", "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раза|раз}}", "file-info-png-frames": "$1 {{PLURAL:$1|кадр|кадра|кадров}}", - "file-no-thumb-animation": "'''Примечание. По техническим причинам миниатюры этого файла не будет анимироваться.'''", - "file-no-thumb-animation-gif": "'''Примечание. По техническим причинам миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''", + "file-no-thumb-animation": "Примечание: по техническим причинам миниатюры этого файла не будет анимироваться.", + "file-no-thumb-animation-gif": "Примечание: По техническим причинам миниатюры подобных GIF-изображений высокого разрешения не анимируются.", "newimages": "Галерея новых файлов", "imagelisttext": "Ниже представлен список из '''$1''' {{PLURAL:$1|файла|файлов}}, отсортированных $2.", "newimages-summary": "На этой служебной странице показаны недавно загруженные файлы.", @@ -3308,7 +3320,7 @@ "bitrate-gigabits": "$1 Гб/с", "bitrate-terabits": "$1 Тб/с", "lag-warn-normal": "Изменения, сделанные менее {{PLURAL:$1|$1 секунды|$1 секунд|1=секунды}} назад, могут не отображаться в этом списке.", - "lag-warn-high": "Из-за большого отставания в синхронизации серверов баз данных изменения, сделанные менее {{PLURAL:$1|$1 секунды|$1 секунд|1=секунды}} назад, могут не отображаться в этом списке.", + "lag-warn-high": "Из-за большого отставания в синхронизации серверов, изменения, сделанные менее {{PLURAL:$1|$1 секунды|$1 секунд|1=секунды}} назад, могут не отображаться в этом списке.", "watchlistedit-normal-title": "Изменение списка наблюдения", "watchlistedit-normal-legend": "Удаление записей из списка наблюдения", "watchlistedit-normal-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения.\nДля удаления записей отметьте соответствующие позиции и нажмите кнопку «{{int:Watchlistedit-normal-submit}}».\nВы также можете [[Special:EditWatchlist/raw|править список как текст]].", @@ -3688,6 +3700,7 @@ "logentry-tag-update-logentry": "$1 обновил{{GENDER:$2||а}} метки у записи журнала $5 страницы $3 (добавлен{{PLURAL:$7|а|ы}} $6; удален{{PLURAL:$9|а|ы}} $8)", "rightsnone": "(нет)", "revdelete-summary": "описание изменений", + "rightslogentry-temporary-group": "$1 (временно, до $2)", "feedback-adding": "Добавление отзыва на страницу…", "feedback-back": "Назад", "feedback-bugcheck": "Прекрасно! Только проверьте, что в списке [$1 известных ошибок] нет подобной записи.", diff --git a/languages/i18n/sd.json b/languages/i18n/sd.json index 037258d3a5..ba5685a5c4 100644 --- a/languages/i18n/sd.json +++ b/languages/i18n/sd.json @@ -738,8 +738,6 @@ "prefs-rendering": "حليو", "saveprefs": "سانڍيو", "prefs-editing": "سنوارڻ", - "rows": "قطارون:", - "columns": "ڪالمَ:", "searchresultshead": "ڳولا", "stub-threshold-sample-link": "نمونو", "stub-threshold-disabled": "غيرفعال", @@ -1072,6 +1070,7 @@ "sharedupload-desc-here": "ھي فائيل $1 مان آھي ۽ ٻين رٿائن پاران پڻ استعمال ٿي سگھي ٿو. تشريح انجي [[$2 جو تشريحي صفحو]] ھيٺان ڏنل آھي.", "uploadnewversion-linktext": "هن فائيل جو نئون پرت چاڙهيو", "shared-repo-from": "$1 کان", + "shared-repo-name-wikimediacommons": "وڪيميڊيا ڪامنز", "upload-disallowed-here": "توھان ھن فائيل مٿان لکي نہ ٿا سگھو.", "filerevert-comment": "سبب:", "filerevert-submit": "واپس ورايو", @@ -1762,9 +1761,6 @@ "feedback-submit": "جمع ڪرايو", "feedback-thanks-title": "توهان جي مهرباني!", "searchsuggest-search": "ڳوليو {{SITENAME}}", - "api-error-filename-tooshort": "فائيل‌نانءَُ هيڪاندو ننڍو آهي.", - "api-error-unclassified": "ڪا اڻجاتل چُڪَ واقع ٿي.", - "api-error-unknown-code": "اڻڄاتل چُڪَ: \"$1\".", "api-error-unknown-warning": "اڻڄاتل چتاءُ: \"$1\".", "api-error-unknownerror": "اڻڄاتل چُڪَ: \"$1\".", "expand_templates_output": "نتيجو", diff --git a/languages/i18n/shn.json b/languages/i18n/shn.json index eafaea62c2..1204519c6e 100644 --- a/languages/i18n/shn.json +++ b/languages/i18n/shn.json @@ -536,8 +536,6 @@ "passwordreset-emaildisabled": "ၽၢင်ႁဵတ်းၵၢၼ် ဢီးမေးလ် ထုၵ်ႇဢိုတ်းဝႆႉ ၵႃႈတီႈ ဝီႇၶီႇၼႆႉ။", "passwordreset-username": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း", "passwordreset-domain": "တူဝ်ႇမဵင်း :", - "passwordreset-capture": "တေတူၺ်း ဢီးမေးလ်ၽွၼ်းလႆႈ?", - "passwordreset-capture-help": "ပေႃးၸဝ်ႈၵဝ်ႇ ၶိုၼ်ႇလွၵ်ႈၼႆႉၼႆ ဢီးမေးလ် (ဢၼ်ၸႂ်ႉၶေႃႈလပ်ႉၸူဝ်ႈၵႅပ်ႉ) တေၼႄဝႆႉဝႃႈ မၼ်းသူင်ႇၸူး ၽူႈၸႂ်ႉတိုဝ်း ဝႆႉယဝ်ႉ ၼႆဢေႃႈ.", "passwordreset-email": "ႁဵင်းလိၵ်ႈ ဢီးမေးလ် :", "passwordreset-emailtitle": "လွင်ႈႁူဝ်ယွႆႈ ဢၶွင်ႉ ၵႃႈတီႈ {{SITENAME}}", "passwordreset-emailelement": "ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း:\n$1\n\nၶေႃႈလပ်ႉ ၸူဝ်ႈၵႅပ်ႉ:\n$2", @@ -797,7 +795,7 @@ "searchprofile-everything-tooltip": "သွၵ်ႈႁႃလမ်းၼႂ်းတင်းမူတ်း (ဢိၵ်ႇပႃးၼႃႈလိၵ်ႈ ဢုပ်ႇဢူဝ်း)", "searchprofile-advanced-tooltip": "သွၵ်ႈႁႃတီႈၼႂ်း ဢွင်ႈတီႈၸိုဝ်ႈႁင်းတူဝ်", "search-result-size": "$1 ({{PLURAL:$2|1 ၶေႃႈ|$2 ၶေႃႈ}})", - "search-redirect": "(ပိၼ်ႇသဵၼ်ႈတၢင်းၸူး $1)", + "search-redirect": "(ပိၼ်ႇဝၢႆႇမႃးတီႈ $1)", "search-section": "(တွၼ်ႈၵၼ် $1)", "search-category": "(တွၼ်ႈၵၼ် $1)", "search-suggest": "ၶႂ်ႈဝႃႈ $1 - ၼႆႁႃႉ", @@ -847,8 +845,6 @@ "saveprefs": "ၵဵပ်းသိမ်း", "restoreprefs": "ၶိုၼ်းတမ်း ၵၢၼ်တင်ႈတင်းမူတ်း ႁႂ်ႈမိူၼ်ၵဝ်ႇၶိုၼ်း (ၵႃႈတီႈ တွၼ်ႈၵၼ်ၵူႈဢၼ်)", "prefs-editing": "တိုၵ်ႉမႄးထတ်းယူႇ", - "rows": "သၢႆတမ်း :", - "columns": "သၢႆၸုၵ်း :", "searchresultshead": "ၶူၼ်ႉႁႃ", "stub-threshold-sample-link": "တူဝ်ယၢင်ႇ", "stub-threshold-disabled": "ဢိုတ်းဝႆႉ", @@ -926,11 +922,9 @@ "userrights-reason": "လွင်ႈတၢင်း :", "userrights-no-interwiki": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇၶႂၢင်းပၼ် တွၼ်ႈတႃႇ မႄးထတ်း သုၼ်ႇၽူႈၸႂ်ႉတိုဝ်းၵႃႈတီႈဝီႇၶီႇ တၢင်ႇဢၼ်။", "userrights-nodatabase": "ယွင်ၶေႃႈမုၼ်း $1 ၼႆႉဢမ်ႇမီး ဢမ်ႇၼၼ် မၼ်းဢမ်ႇၸႂ်ႈ လူဝ်ႇၵႄႇ။", - "userrights-notallowed": "ၸဝ်ႈၵဝ်ႇဢမ်ႇလႆႈမီးသုၼ်ႇၶႂၢင်းပၼ် တွၼ်ႈတႃႇ တေထႅမ်သႂ်ႇ ဢမ်ႇၼၼ် ထွၼ်ပႅတ်ႈ သုၼ်ႇလႆႈ ၽူႈၸႂ်ႉတိုဝ်း", "userrights-changeable-col": "ၸုမ်း ၸိူဝ်းၸဝ်ႈၵဝ်ႇ ၸၢင်ႈလႅၵ်ႈလၢႆႈ", "userrights-unchangeable-col": "ၸုမ်း ၸိူဝ်းၸဝ်ႈၵဝ်ႇ ဢမ်ႇၸၢင်ႈလႅၵ်ႈလၢႆႈ", "userrights-conflict": "လွင်ႈလႅၵ်ႈလၢႆႈ သုၼ်ႇၽူႈၸႂ်ႉတိုဝ်းၼၼ်ႉ မီးလွင်ႈယုင်ႈယၢင်ႈဝႆႉ။ ၶႅၼ်းတေႃႈ ၶိုၼ်းထတ်းတူၺ်းပၼ် သေ ၶိုၼ်းၼႄႉၼွၼ်းပၼ် လွင်ႈလႅၵ်ႈလၢႆႈၸဝ်ႈၵဝ်ႇလႄႈ။", - "userrights-removed-self": "ၸဝ်ႈၵဝ်ႇထွၼ်ပႅတ်ႇ သုၼ်ႇလႆႈတူဝ်ၸဝ်ႈၵဝ်ႇ။ ယွၼ်ႉၼၼ်လႄႈ ၸဝ်ႈၵဝ်ႇ တေဢမ်ႇၸၢင်ႈၶဝ်ႈၸႂ်ႉ ၼႃႈလိၵ်ႈၼႆႉလႆႈယဝ်ႉ။", "group": "ၸုမ်း :", "group-user": "ၽူႈၸႂ်ႉတိုဝ်း", "group-autoconfirmed": "ၽူႈၸႂ်ႉတိုဝ်း ၸိူဝ်းၼႄႉၼွၼ်းတူဝ်ႁင်းၵူၺ်း", @@ -1007,7 +1001,6 @@ "right-userrights-interwiki": "မႄးထတ်း သုၼ်ႇလႆႈ ၽူႈၸႂ်ႉတိုဝ်း ၸိူဝ်းပဵၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်မီးဝႆႉယူႇ ၵႃႈတီႈၼိူဝ် ဝီႇၶီႇတၢင်ႇၸိူဝ်း", "right-siteadmin": "ၶတ်းသေႃး လႄႈ ဢမ်ႇၶတ်းသေႃး ယွင်ၶေႃႈမုၼ်း", "right-sendemail": "သူင်ႇဢီးမေးလ်ၸူး ၽူႈၸႂ်ႉတိုဝ်း တၢင်ႇၸိူဝ်း", - "right-passwordreset": "တူၺ်း ဢီးမေး တင်ႈၶိုၼ်း ၶေႃႈလပ်ႉ", "right-managechangetags": "ၵေႃႇသၢင်ႈ လႄႈ (ဢမ်ႇ) တူင်ႉတိုၼ်ႇ [[Special:Tags|tags]]", "right-deletechangetags": "မွတ်ႇပႅတ်ႈ [[Special:Tags|tags]] ၵႃႈတီႈ ယွင်ၶေႃႈမုၼ်း", "grant-generic": "\"$1\" ထုပ်ႉႁေႃႇ သုၼ်ႇလႆႈ", @@ -1655,6 +1648,6 @@ "logentry-move-move": "$1 {{GENDER:$2|ၶၢႆႉယဝ်ႉ}} ၼႃႈလိၵ်ႈ $3 တေႃႇ $4", "logentry-newusers-create": "ဢၶွင်ႉၽူႈၸႂ်ႉတိုဝ်း $1 ၼႆႉ လႆႈ {{GENDER:$2|ၵေႃႇသၢင်ႈယဝ်ႉ}}", "logentry-upload-upload": "$1 {{GENDER:$2|လူတ်ႇၶိုၼ်ႈၵႂႃႇယဝ်ႉ}} $3", - "searchsuggest-search": "ၶူၼ်ႉႁႃ", + "searchsuggest-search": "ၶူၼ်ႉႁႃ {{SITENAME}}", "mw-widgets-dateinput-no-date": "ပႆႇလိူၵ်ႈဝၼ်းယၢမ်း" } diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index fae2cb6868..d1e2cca992 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -1043,6 +1043,7 @@ "username": "{{GENDER:$1|Uporabniško|Uporabničino}} ime:", "prefs-memberingroups": "{{GENDER:$2|Član|Članica}} {{PLURAL:$1|naslednje skupine|naslednjih skupin}}:", "prefs-memberingroups-type": "$1", + "group-membership-link-with-expiry": "$1 (do $2)", "prefs-registration": "Registriran od:", "yourrealname": "Pravo ime:", "yourlanguage": "Jezik:", @@ -1098,6 +1099,14 @@ "userrights-nodatabase": "Podatkovna baza $1 ne obstaja ali ni lokalna.", "userrights-changeable-col": "Skupine, ki jih lahko spremenite", "userrights-unchangeable-col": "Skupine, ki jih ne morete spremeniti", + "userrights-expiry-current": "Poteče $1", + "userrights-expiry-none": "Ne poteče", + "userrights-expiry": "Poteče:", + "userrights-expiry-existing": "Obstoječ čas poteka: $3, $2", + "userrights-expiry-othertime": "Drug čas:", + "userrights-expiry-options": "1 dan:1 day,1 teden:1 week,1 mesec:1 month,3 mesece:3 months,6 mesecev:6 months,1 leto:1 year", + "userrights-invalid-expiry": "Čas poteka skupine »$1« ni veljaven.", + "userrights-expiry-in-past": "Čas poteka skupine »$1« je v preteklosti.", "userrights-conflict": "Spor sprememb uporabniških pravic! Prosimo, da pregledate in potrdite svoje spremembe.", "group": "Skupina:", "group-user": "Uporabniki", @@ -1289,11 +1298,11 @@ "recentchanges-summary": "Na tej strani lahko spremljate najnovejše spremembe wikija.", "recentchanges-noresult": "V podanem obdobju nobena sprememba ne ustreza tem merilom.", "recentchanges-feed-description": "Spremljajte zadnje spremembe wikija prek tega vira.", - "recentchanges-label-newpage": "s tem urejanjem je uporabnik ustvaril novo stran", - "recentchanges-label-minor": "manjše urejanje", - "recentchanges-label-bot": "urejanje je izvedel bot", + "recentchanges-label-newpage": "To urejanje je ustvarilo novo stran", + "recentchanges-label-minor": "To je manjše urejanje", + "recentchanges-label-bot": "Urejanje je izvedel bot", "recentchanges-label-unpatrolled": "Urejanje še ni bilo pregledano", - "recentchanges-label-plusminus": "uporabnik je velikost strani spremenil za tolikšno število bajtov", + "recentchanges-label-plusminus": "Uporabnik je velikost strani spremenil za tolikšno število bajtov", "recentchanges-legend-heading": "Legenda:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (glej tudi [[Special:NewPages|seznam novih strani]])", "recentchanges-submit": "Prikaži", @@ -1851,7 +1860,10 @@ "apisandbox-sending-request": "Pošiljanje zahteve API ...", "apisandbox-loading-results": "Prejemanje zahteve API ...", "apisandbox-results-error": "Med nalaganjem odgovora poizvedbe API je prišlo do napake: $1.", + "apisandbox-request-selectformat-label": "Prikaži zahtevane podatke kot:", + "apisandbox-request-format-url-label": "Niz poizvedbe URL", "apisandbox-request-url-label": "URL zahteve:", + "apisandbox-request-json-label": "Zahteva JSON:", "apisandbox-request-time": "Trajanje zahteve: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Popravite žeton in ponovno pošljite", "apisandbox-results-fixtoken-fail": "Pridobivanje žetona »$1« je spodletelo.", @@ -1993,7 +2005,7 @@ "emailccsubject": "Kopija tvojega sporočila iz $1: $2", "emailsent": "E-pismo je poslano!", "emailsenttext": "E-pismo je poslano.", - "emailuserfooter": "To e-poštno sporočilo je {{GENDER:$1|poslal|poslala|poslal(-a)}} $1 uporabniku {{GENDER:$2|$2}} s funkcijo »{{int:emailuser}}« na {{GRAMMAR:dative|{{SITENAME}}}}. {{GENDER:$2|Vaše}} e-poštno sporočilo bo poslano neposredno {{GENDER:$1|izvornemu pošiljatelju|izvorni pošiljateljici}}, kar {{GENDER:$1|mu|ji}} bo razkrilo {{GENDER:$2|vaš}} e-poštni naslov.", + "emailuserfooter": "To e-poštno sporočilo je {{GENDER:$1|poslal|poslala|poslal(-a)}} $1 uporabniku {{GENDER:$2|$2}} s funkcijo »{{int:emailuser}}« na {{GRAMMAR:dative|{{SITENAME}}}}. Če odgovorite na to sporočilo, bo {{GENDER:$2|vaše}} e-poštno sporočilo poslano neposredno {{GENDER:$1|izvornemu pošiljatelju|izvorni pošiljateljici}}, kar {{GENDER:$1|mu|ji}} bo razkrilo {{GENDER:$2|vaš}} e-poštni naslov.", "usermessage-summary": "Pusti sistemsko sporočilo.", "usermessage-editor": "Sistemski sporočevalec", "watchlist": "Spisek nadzorov", @@ -3515,6 +3527,7 @@ "logentry-tag-update-logentry": "$1 je {{GENDER:$2|posodobil|posodobila|posodobil(-a)}} oznake dnevniškega vnosa $5 strani $3 ({{PLURAL:$7|dodano}} $6; {{PLURAL:$9|odstranjeno}} $8)", "rightsnone": "(nobeno)", "revdelete-summary": "povzetek urejanja", + "rightslogentry-temporary-group": "$1 (začasno, do $2)", "feedback-adding": "Dodajanje povratne informacije na stran ...", "feedback-back": "Nazaj", "feedback-bugcheck": "Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index 54de80afad..6e457e02c6 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -31,7 +31,8 @@ "Macofe", "Сербијана", "Xð", - "Matma Rex" + "Matma Rex", + "Zoranzoki21" ] }, "tog-underline": "Подвлачење веза:", @@ -1248,6 +1249,9 @@ "recentchanges-legend-heading": "Легенда:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])", "recentchanges-submit": "Прикажи", + "rcfilters-restore-default-filters": "Враћање подразумеваних филтера", + "rcfilters-clear-all-filters": "Уклони све филтере", + "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.", "rcfilters-filter-userExpLevel-newcomer-label": "Новајлије", "rcfilters-filter-userExpLevel-experienced-label": "Искусни корисници", "rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од $3, $4 (до $1 приказано).", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index d1b7ee6859..bff2aab2a0 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -1103,6 +1103,7 @@ "youremail": "E-post:", "username": "{{GENDER:$1|Användarnamn}}:", "prefs-memberingroups": "{{GENDER:$2|Medlem}} av {{PLURAL:$1|gruppen|grupperna}}:", + "group-membership-link-with-expiry": "$1 (tills $2)", "prefs-registration": "Registreringstid:", "yourrealname": "Riktigt namn:", "yourlanguage": "Språk:", @@ -1158,6 +1159,14 @@ "userrights-nodatabase": "Databasen $1 finns inte eller så är den inte lokal.", "userrights-changeable-col": "Grupper du kan ändra", "userrights-unchangeable-col": "Grupper du inte kan ändra", + "userrights-expiry-current": "Förfaller $1", + "userrights-expiry-none": "Förfaller inte", + "userrights-expiry": "Förfaller:", + "userrights-expiry-existing": "Befintlig förfallotid: $3, $2", + "userrights-expiry-othertime": "Annan tid:", + "userrights-expiry-options": "1 dag:1 dag,1 vecka:1 vecka,1 månad:1 månad,3 månader:3 månader,6 månader:6 månader,1 år:1 år", + "userrights-invalid-expiry": "Förfallotiden för gruppen \"$1\" är ogiltig.", + "userrights-expiry-in-past": "Förfallotiden för gruppen \"$1\" är i det förflutna.", "userrights-conflict": "Konflikt vid ändringar av användarrättigheter! Var god granska och bekräfta dina ändringar.", "group": "Grupp:", "group-user": "Användare", @@ -1359,8 +1368,11 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Visa", "rcfilters-activefilters": "Aktiva filter", + "rcfilters-restore-default-filters": "Återställ standardfilter", + "rcfilters-clear-all-filters": "Rensa alla filter", "rcfilters-search-placeholder": "Filtrera senaste ändringar (bläddra eller börja skriva)", "rcfilters-invalid-filter": "Ogiltigt filter", + "rcfilters-empty-filter": "Inga aktiva filter. Alla bidrag visas.", "rcfilters-filterlist-title": "Filter", "rcfilters-filterlist-noresults": "Inga filter hittades", "rcfilters-filtergroup-registration": "Användarregistrering", @@ -1910,7 +1922,10 @@ "apisandbox-sending-request": "Skickar API-begäran...", "apisandbox-loading-results": "Hämtar API-resultat...", "apisandbox-results-error": "Ett fel uppstod när API-förfrågans svar lästes in: $1.", + "apisandbox-request-selectformat-label": "Visa begärd data som:", + "apisandbox-request-format-url-label": "URL-frågesträng", "apisandbox-request-url-label": "Begärd URL:", + "apisandbox-request-json-label": "Begär JSON:", "apisandbox-request-time": "Tid för begäran: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Korrigera nyckeln och skicka igen", "apisandbox-results-fixtoken-fail": "Misslyckades att hämta nyckeln \"$1\".", @@ -2052,7 +2067,7 @@ "emailccsubject": "Kopia av ditt meddelande till $1: $2", "emailsent": "E-post har nu skickats", "emailsenttext": "Ditt e-postmeddelande har skickats", - "emailuserfooter": "Detta e-postmeddelande {{GENDER:$1|skickades}} av $1 till {{GENDER:$2|$2}} med funktionen \"{{int:emailuser}}\" på {{SITENAME}}. {{GENDER:$2|Ditt}} e-postmeddelande kommer att skickas direkt till {{GENDER:$1|den ursprungliga avsändaren}}, vilket kommer avslöja {{GENDER:$2|din}} e-postadress för {{GENDER:$1|honom|henne|hen}}.", + "emailuserfooter": "Detta e-postmeddelande {{GENDER:$1|skickades}} av $1 till {{GENDER:$2|$2}} med funktionen \"{{int:emailuser}}\" på {{SITENAME}}. Om {{GENDER:$2|du}} svarar på detta e-postmeddelande kommer {{GENDER:$2|ditt}} e-postmeddelande att skickas direkt till {{GENDER:$1|den ursprungliga avsändaren}}, vilket kommer avslöja {{GENDER:$2|din}} e-postadress för {{GENDER:$1|honom|henne|hen}}.", "usermessage-summary": "Lämnar systemmeddelande.", "usermessage-editor": "Systemmeddelare", "watchlist": "Bevakningslista", @@ -3583,6 +3598,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|uppdaterade}} märken på loggposten $5 för sidan $3 ({{PLURAL:$7|lade till}} $6; {{PLURAL:$9|tog bort}} $8)", "rightsnone": "(inga)", "revdelete-summary": "sammanfattning", + "rightslogentry-temporary-group": "$1 (temporärt, tills $2)", "feedback-adding": "Ge feedback till sida...", "feedback-back": "Tillbaka", "feedback-bugcheck": "Jättebra! Bara kontrollera att det inte är en av de [$1 kända buggarna].", diff --git a/languages/i18n/te.json b/languages/i18n/te.json index 2ab4a982ad..8eb77904fb 100644 --- a/languages/i18n/te.json +++ b/languages/i18n/te.json @@ -100,7 +100,7 @@ "may_long": "మే", "june": "జూన్", "july": "జూలై", - "august": "ఆగష్టు", + "august": "ఆగస్టు", "september": "సెప్టెంబరు", "october": "అక్టోబరు", "november": "నవంబరు", @@ -162,7 +162,7 @@ "broken-file-category": "తెగిపోయిన ఫైలులింకులు గల పేజీలు", "about": "గురించి", "article": "విషయపు పేజీ", - "newwindow": "(కొత్త కిటికీలో వస్తుంది)", + "newwindow": "(కొత్త విండోలో వస్తుంది)", "cancel": "రద్దుచేయి", "moredotdotdot": "ఇంకా...", "morenotlisted": "బహుశా ఈ జాబితా అసంపూర్ణం.", @@ -193,6 +193,7 @@ "searcharticle": "వెళ్లు", "history": "పేజీ చరిత్ర", "history_short": "చరిత్ర", + "history_small": "చరిత్ర", "updatedmarker": "నేను కిందటిసారి వచ్చిన తరువాత జరిగిన మార్పులు", "printableversion": "అచ్చుతీయదగ్గ కూర్పు", "permalink": "శాశ్వత లంకె", @@ -200,7 +201,7 @@ "view": "చూపు", "view-foreign": "$1 లో చూడండి", "edit": "సవరించు", - "edit-local": "ప్రాంతీయ వివరణని మార్చు", + "edit-local": "స్థానిక వివరణని మార్చు", "create": "సృష్టించు", "create-local": "ప్రాంతీయ వివరణని చేర్చు", "editthispage": "ఈ పేజీని సవరించండి", @@ -208,7 +209,7 @@ "delete": "తొలగించు", "deletethispage": "ఈ పేజీని తొలగించండి", "undeletethispage": "ఈ పేజీ తొలగింపును ఆపు", - "undelete_short": "{{PLURAL:$1|ఒక్క రచన|$1 రచనల}} తొలగింపును రద్దుచెయ్యి", + "undelete_short": "{{PLURAL:$1|ఒక మార్పు|$1 మార్పుల}} తొలగింపును రద్దుచెయ్యి", "viewdeleted_short": "{{PLURAL:$1|తొలగించిన ఒక మార్పు|$1 తొలగించిన మార్పుల}}ను చూడండి", "protect": "సంరక్షించు", "protect_change": "మార్చు", @@ -228,13 +229,13 @@ "tool-link-userrights-readonly": "{{GENDER:$1|వాడుకరి}} గుంపులను చూడండి", "tool-link-emailuser": "ఈ {{GENDER:$1|వాడుకరికి}} ఈమెయిలు పంపు", "userpage": "వాడుకరి పేజీని చూడండి", - "projectpage": "ప్రాజెక్టు పేజీని చూడు", + "projectpage": "ప్రాజెక్టు పేజీని చూడండి", "imagepage": "ఫైలు పేజీని చూడండి", - "mediawikipage": "సందేశం పేజీని చూడు", - "templatepage": "మూస పేజీని చూడు", - "viewhelppage": "సహాయం పేజీని చూడు", - "categorypage": "వర్గం పేజీని చూడు", - "viewtalkpage": "చర్చను చూడు", + "mediawikipage": "సందేశం పేజీని చూడండి", + "templatepage": "మూస పేజీని చూడండి", + "viewhelppage": "సహాయం పేజీని చూడండి", + "categorypage": "వర్గపు పేజీ చూడండి", + "viewtalkpage": "చర్చను చూడండి", "otherlanguages": "ఇతర భాషలలో", "redirectedfrom": "($1 నుండి మళ్ళించబడింది)", "redirectpagesub": "దారిమార్పు పేజీ", @@ -270,7 +271,7 @@ "privacy": "గోప్యతా విధానం", "privacypage": "Project:గోప్యతా విధానం", "badaccess": "అనుమతి లోపం", - "badaccess-group0": "మీరు చేయతలపెట్టిన పనికి మీకు హక్కులు లేవు.", + "badaccess-group0": "మీరడిగిన పని చేసేందుకు మీకు అనుమతి లేదు.", "badaccess-groups": "మీరు చేయతలపెట్టిన పని ఈ {{PLURAL:$2|గుంపు|గుంపులలో ఒకదాని}} లోని వాడుకర్లకు మాత్రమే పరిమితం: $1.", "versionrequired": "మీడియావికీ సాఫ్టువేరు వెర్షను $1 కావాలి", "versionrequiredtext": "ఈ పేజీని వాడటానికి మీకు మీడియావికీ సాఫ్టువేరు వెర్షను $1 కావాలి. [[Special:Version|వెర్షను పేజీ]]ని చూడండి.", @@ -390,7 +391,7 @@ "myprivateinfoprotected": "మీ అంతరంగిక సమాచారాన్ని సవరించేందుకు మీకు అనుమతి లేదు.", "mypreferencesprotected": "మీ అభీష్టాలను సవరించేందుకు మీకు అనుమతి లేదు.", "ns-specialprotected": "ప్రత్యేక పేజీలపై దిద్దుబాట్లు చేయలేరు.", - "titleprotected": "[[User:$1|$1]] ఈ శీర్షికని సృష్టించకుండా ఇది సంరక్షించబడింది.\nఅందుకు ఇచ్చిన కారణం: $2.", + "titleprotected": "ఈ శీర్షికను [[User:$1|$1]] సృష్టించకుండా సంరక్షించబడింది.\nఅందుకు ఇచ్చిన కారణం: $2.", "filereadonlyerror": "ఫైలు ఖజానా \"$2\" రీడ్-ఓన్లీ స్థితిలో ఉండటం చేత \"$1\" ఫైలులో మార్పులు చెయ్యలేకపోయాం.\n\nదానికి తాళం వేసిన సిస్టము నిర్వాహకుడు ఇచ్చిన వివరణ ఇది: \"$3\".", "invalidtitle-knownnamespace": "పేరుబరి \"$2\", పాఠ్యము \"$3\" తో కూడిన ఈ శీర్షిక చెల్లనిది", "invalidtitle-unknownnamespace": "అపరిచితమైన పేరుబరి సంఖ్య \"$1\", పాఠ్యము \"$2\" తో కూడిన ఈ శీర్షిక చెల్లనిది", @@ -452,6 +453,7 @@ "createacct-email-ph": "మీ ఈమెయిలు చిరునామాను ఇవ్వండి", "createacct-another-email-ph": "ఈమెయిలు చిరునామాను ఇవ్వండి", "createaccountmail": "ఏదో ఒక తాత్కాలిక సంకేతపదాన్ని వాడి దాన్ని పేర్కొన్న ఈమెయిలు చిరునామాకు పంపించు", + "createaccountmail-help": "సంకేతపదం తెలుసుకోనవసరం లేకుండా వేరొకరి కోసం ఖాతా సృష్టించేందుకు వాడవచ్చు.", "createacct-realname": "అసలు పేరు (ఐచ్చికం)", "createaccountreason": "కారణం:", "createacct-reason": "కారణం", @@ -533,6 +535,7 @@ "resetpass_submit": "సంకేతపదాన్ని మార్చి లాగినవండి", "changepassword-success": "మీ సంకేతపదం మార్చబడింది!", "changepassword-throttled": "కొద్దిసేపటిగా మీరు చాలా లాగిన్ ప్రయత్నాలు చేసారు.\nమళ్ళీ ప్రయత్నించే ముందు $1 ఆగండి.", + "botpasswords": "బాట్ సంకేతపదాలు", "botpasswords-label-appid": "బాట్ పేరు:", "botpasswords-label-create": "సృష్టించు", "botpasswords-label-update": "తాజాకరించు", @@ -550,7 +553,7 @@ "botpasswords-updated-body": "వాడుకరి \"$2\" కు చెందిన \"$1\" అనే బాట్‌ యొక్క బాట్ సంకేతపదాన్ని తాజాకరించాం.", "botpasswords-deleted-title": "బాట్ సంకేతపదాన్ని తొలగించాం", "botpasswords-deleted-body": "వాడుకరి \"$2\" కు చెందిన \"$1\" అనే బాట్‌ యొక్క బాట్ సంకేతపదాన్ని తొలగించాం.", - "botpasswords-newpassword": "$1 తో లాగినయేందుకు కొత్త సంకేతపదం $2. భావి ఉపయోగం కోసం దీన్ని జాగ్రత్త చేసుకోండి.", + "botpasswords-newpassword": "$1 తో లాగినయేందుకు కొత్త సంకేతపదం $2. భావి ఉపయోగం కోసం దీన్ని జాగ్రత్త చేసుకోండి.
(లాగిన్ పేరుగా వాడుకరిపేరే ఉండాల్సిన పాత బాట్‌ల విషయంలో $3 ను వాడుకరిపేరుగాను, $4 ను సంకేతపదంగానూ వాడుకోవచ్చు.)", "botpasswords-not-exist": "వాడుకరి \"$1\" కి \"$2\" అనే బాట్ సంకేతపదం లేదు.", "resetpass_forbidden": "సంకేతపదాలను మార్చటం కుదరదు", "resetpass_forbidden-reason": "సంకేతపదాలు మార్చజాలరు: $1", @@ -1184,13 +1187,13 @@ "action-upload_by_url": "ఈ ఫైలుని URL చిరునామా నుండి ఎగుమతి చేసే", "action-writeapi": "వ్రాసే APIని ఉపయోగించే", "action-delete": "ఈ పేజీని తొలగించే", - "action-deleterevision": "ఈ కూర్పుని తొలగించే", + "action-deleterevision": "కూర్పులను తొలగించే", "action-deletelogentry": "చిట్టా పద్దులను తొలగించే", "action-deletedhistory": "పేజీల తొలగించిన చరిత్రని చూసే", "action-deletedtext": "తొలగించిన కూర్పుల పాఠ్యాన్ని చూసే", "action-browsearchive": "తొలగించిన పేజీలలో వెతికే", "action-undelete": "పేజీలను పునఃస్థాపించే", - "action-suppressrevision": "ఈ దాచిన కూర్పుని సమీక్షించి పునఃస్థాపించే", + "action-suppressrevision": "దాచిన కూర్పులను సమీక్షించి, పునఃస్థాపించే", "action-suppressionlog": "ఈ అంతరంగిక చిట్టాను చూసే", "action-block": "ఈ వాడుకరిని మార్పులు చేయడం నుండి నిరోధించే", "action-protect": "ఈ పేజీకి సంరక్షణా స్థాయిని మార్చే", @@ -1230,6 +1233,28 @@ "recentchanges-legend-heading": "సూచిక :", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)", "recentchanges-submit": "చూపించు", + "rcfilters-filter-editsbyself-label": "మీ స్వంత దిద్దుబాట్లు", + "rcfilters-filter-editsbyself-description": "మీ దిద్దుబాట్లు.", + "rcfilters-filter-editsbyother-label": "ఇతరుల దిద్దుబాట్లు", + "rcfilters-filter-editsbyother-description": "ఇతరులు (మీరు కాదు) చేసిన దిద్దుబాట్లు.", + "rcfilters-filtergroup-userExpLevel": "అనుభవ స్థాయి (నమోదైన వాడుకరులకు మాత్రమే)", + "rcfilters-filter-userExpLevel-newcomer-label": "కొత్తవారు", + "rcfilters-filter-userExpLevel-newcomer-description": "10 కంటే తక్కువ దిద్దుబాట్లు, 4 రోజుల కంటే తక్కువ పని.", + "rcfilters-filter-userExpLevel-learner-label": "నేర్చుకుంటున్నవారు", + "rcfilters-filter-userExpLevel-learner-description": "\"కొత్తవారి\" కంటే ఎక్కువ, \"అనుభవజ్ఞులైన వాడుకరుల\" కంటే తక్కువ పనిరోజులు.", + "rcfilters-filter-userExpLevel-experienced-label": "అనుభవజ్ఞులైన వాడుకరులు", + "rcfilters-filter-userExpLevel-experienced-description": "30 రోజుల కంటే ఎక్కువ పని, 500 పైచిలుకు దిద్దుబాట్లు.", + "rcfilters-filtergroup-significance": "ప్రాముఖ్యం", + "rcfilters-filter-minor-label": "చిన్న మార్పులు", + "rcfilters-filter-minor-description": "రచయిత చిన్నవిగా గుర్తు పెట్టిన దిద్దుబాట్లు.", + "rcfilters-filter-major-label": "చిన్నవి కాని దిద్దుబాట్లు", + "rcfilters-filter-major-description": "చిన్నవిగా గుర్తు పెట్టని దిద్దుబాట్లు.", + "rcfilters-filtergroup-changetype": "దిద్దుబాటు రకం", + "rcfilters-filter-pageedits-label": "పేజీ దిద్దుబాట్లు", + "rcfilters-filter-newpages-label": "పేజీల సృష్టి", + "rcfilters-filter-newpages-description": "కొత్త పేజీలను సృష్టించే దిద్దుబాట్లు.", + "rcfilters-filter-categorization-label": "వర్గాల దిద్దుబాట్లు", + "rcfilters-filter-logactions-description": "నిర్వాహక పనులు, ఖాతా పనులు, పేజీ తొలగింపులు, ఎక్కింపులు....", "rcnotefrom": "$3, $4 తరువాత జరిగిన {{PLURAL:$5|మార్పు|మార్పులు}} కింద ఇచ్చాం ($1 దాకా చూపించాం).", "rclistfrom": "$3, $2 కు ముందు జరిగిన మార్పులను చూపించు", "rcshowhideminor": "చిన్న మార్పులను $1", @@ -1292,7 +1317,7 @@ "upload-recreate-warning": "హెచ్చరిక: ఆ పేరుతో ఉన్న దస్త్రాన్ని తరలించడం లేదా తొలగించడం జరిగింది.\n\nమీ సౌకర్యం కోసం ఈ పేజీ యొక్క తొలగింపు మరియు తరలింపు చిట్టాని ఇక్కడ ఇస్తున్నాం:", "uploadtext": "దస్త్రాలను ఎక్కించడానికి ఈ కింది ఫారాన్ని ఉపయోగించండి.\nగతంలో ఎక్కించిన దస్త్రాలను చూడడానికి లేదా వెతకడానికి [[Special:FileList|ఎక్కించిన దస్త్రాల యొక్క జాబితా]]కు వెళ్ళండి, (పునః)ఎక్కింపులు [[Special:Log/upload|ఎక్కింపుల చిట్టా]] లోనూ తొలగింపులు [[Special:Log/delete|తొలగింపుల చిట్టా]] లోనూ కూడా నమోదవుతాయి.\n\nఒక దస్త్రాన్ని ఏదైనా పుటలో చేర్చడానికి, కింద చూపిన వాటిలో ఏదేనీ విధంగా లింకుని వాడండి:\n* దస్త్రపు పూర్తి కూర్పుని వాడడానికి '''[[{{ns:file}}:File.jpg]]'''\n* ఎడమ వైపు మార్జినులో 200 పిక్సెళ్ళ వెడల్పుగల బొమ్మ మరియు 'ప్రత్యామ్నాయ పాఠ్యం' అన్న వివరణతో గల పెట్టె కోసం '''[[{{ns:file}}:File.png|200px|thumb|left|ప్రత్యామ్నాయ పాఠ్యం]]'''\n* దస్త్రాన్ని చూపించకుండా నేరుగా లింకు ఇవ్వడానికి '''[[{{ns:media}}:File.ogg]]'''", "upload-permitted": "అనుమతించబడిన ఫైలు {{PLURAL:$2|రకం|రకాలు}}: $1.", - "upload-preferred": "అనుమతించే ఫైలు రకాలు: $1.", + "upload-preferred": "అనుమతించే ఫైలు {{PLURAL:$2|రకం|రకాలు}}: $1.", "upload-prohibited": "నిషేధించబడిన ఫైలు {{PLURAL:$2|రకం|రకాలు}}: $1.", "uploadlogpage": "ఎక్కింపుల చిట్టా", "uploadlogpagetext": "ఇటీవల జరిగిన ఫైలు అప్‌లోడుల జాబితా ఇది.\nమరింత దృశ్యాత్మకంగా చూడటం కోసం [[Special:NewFiles|కొత్త ఫైళ్ళ కొలువు]]కు వెళ్ళండి.", @@ -1336,6 +1361,8 @@ "file-thumbnail-no": "ఫైలు పేరు $1 తో మొదలవుతోంది.\nఅది పరిమాణం తగ్గించిన ''(నఖచిత్రం)'' లాగా అనిపిస్తోంది.\nఈ బొమ్మ యొక్క పూర్తి స్పష్టత కూర్పు ఉంటే, దాన్ని ఎగుమతి చెయ్యండి. లేదా ఫైలు పేరును మార్చండి.", "fileexists-forbidden": "ఈ పేరుతో ఇప్పటికే ఒక ఫైలు ఉంది, దాన్ని తిరగరాయలేరు.\nమీరు ఇప్పటికీ ఈ ఫైలుని ఎగుమతి చేయాలనుకుంటే, వెనక్కి వెళ్ళి మరో పేరుతో ఎగుమతి చేయండి. [[File:$1|thumb|center|$1]]", "fileexists-shared-forbidden": "ఈ పేరుతో ఇప్పటికే ఒక ఫైలు అందరి ఫైళ్ళ ఖజానాలో ఉంది.\nఇప్పటికీ మీ ఫైలుని ఎగుమతి చేయాలనుకుంటే, వెనక్కివెళ్ళి మరో పేరు వాడండి. [[File:$1|thumb|center|$1]]", + "fileexists-no-change": "ఈ ఎక్కింపు, [[:$1]] యొక్క ప్రస్తుత కూర్పుకు సరిగ్గా సరిపోలిన కచ్చితమైన నకలు.", + "fileexists-duplicate-version": "ఈ ఎక్కింపు, [[:$1]] యొక్క {{PLURAL:$2|పాత కూర్పు ఒకదానికి|పాత కూర్పులకు}} సరిగ్గా సరిపోలిన కచ్చితమైన నకలు.", "file-exists-duplicate": "ఈ ఫైలు క్రింద పేర్కొన్న {{PLURAL:$1|ఫైలుకు|ఫైళ్ళకు}} నకలు:", "file-deleted-duplicate": "గతంలో ఈ ఫైలు లాంటిదే ఒక ఫైలుని ([[:$1]]) తొలగించివున్నారు. మీరు దీన్ని తిరిగి ఎక్కించే ముందు ఆ ఫైలు యొక్క తొలగింపు చరిత్రను చూడండి.", "file-deleted-duplicate-notitle": "సరిగ్గా ఈ ఫైలునే పోలిన మరో ఫైలును గతంలో తొలగించాం. దాని పేరును అణచిపెట్టాం.\nదాన్ని తిరిగి ఎక్కించే ముందు, పరిస్థితిని సమీక్షించేందుకు గాను, అణచబడిన ఫైళ్ళ డేటాను చూడగలిగే వారిని అడగండి.", @@ -2128,7 +2155,7 @@ "reblock-logentry": "[[$1]] కై నిరోధపు అమరికలను $2 $3 గడువుతో మార్చారు", "blocklogtext": "వాడుకరుల నిరోధాలు, పునస్థాపనల చిట్టా ఇది. \nఆటోమాటిక్‌గా నిరోధానికి గురైన ఐ.పి. చిరునామాలు ఈ జాబితాలో ఉండవు. \nప్రస్తుతం అమల్లో ఉన్న నిరోధాలు, నిషేధాల కొరకు [[Special:BlockList|నిరోధాల జాబితా]]ను చూడండి.", "unblocklogentry": "$1పై నిరోధం తొలగించబడింది", - "block-log-flags-anononly": "అజ్ఞాత వాడుకర్లు మాత్రమే", + "block-log-flags-anononly": "అజ్ఞాత వాడుకరులు మాత్రమే", "block-log-flags-nocreate": "ఖాతా సృష్టించడాన్ని అశక్తం చేసాం", "block-log-flags-noautoblock": "ఆటోమాటిక్ నిరోధాన్ని అశక్తం చేసాం", "block-log-flags-noemail": "ఈ-మెయిలుని నిరోధించాం", @@ -2184,6 +2211,8 @@ "cant-move-to-user-page": "మీకు ఒక పేజీని వాడుకరి పేజీగా (వాడుకరి ఉపపేజీగా తప్ప) తరలించే అనుమతి లేదు.", "cant-move-category-page": "వర్గాల పేజీలను తరలించే అనుమతి మీకు లేదు.", "cant-move-to-category-page": "పేజీలను వర్గాల పేజీలుగా మార్చే అనుమతి మీకు లేదు.", + "cant-move-subpages": "ఉపపేజీలను తరలించడానికి మీకు అనుమతి లేదు.", + "namespace-nosubpages": "పేరుబరి \"$1\", ఉపపేజీలను అనుమతించదు.", "newtitle": "కొత్త శీర్షిక:", "move-watch": "ఈ పేజీని గమనించు", "movepagebtn": "పేజీని తరలించు", @@ -2204,10 +2233,11 @@ "movelogpagetext": "కింద తరలించిన పేజీల జాబితా ఉన్నది.", "movesubpage": "{{PLURAL:$1|ఉపపేజీ|ఉపపేజీలు}}", "movesubpagetext": "ఈ పేజీకి క్రింద చూపించిన $1 {{PLURAL:$1|ఉపపేజీ ఉంది|ఉపపేజీలు ఉన్నాయి}}.", + "movesubpagetalktext": "సంబంధిత చర్చా పేజీకి కింద చూపిన $1 {{PLURAL:$1|ఉపపేజీ ఉంది|ఉపపేజీలున్నాయి}}.", "movenosubpage": "ఈ పేజీకి ఉపపేజీలు ఏమీ లేవు.", "movereason": "కారణం:", "revertmove": "వెనక్కు తిప్పు", - "delete_and_move_text": "==తొలగింపు అవసరం==\n\nఉద్దేశించిన వ్యాసం \"[[:$1]]\" ఇప్పటికే ఉనికిలో ఉంది. ప్రస్తుత తరలింపుకు వీలుగా దాన్ని తొలగించేయమంటారా?", + "delete_and_move_text": "గమ్యపు పేజీ \"[[:$1]]\" ఇప్పటికే ఉనికిలో ఉంది. \nప్రస్తుత తరలింపుకు వీలుగా దాన్ని తొలగించేయమంటారా?", "delete_and_move_confirm": "అవును, పేజీని తొలగించు", "delete_and_move_reason": "\"[[$1]]\"ను తరలించడానికి వీలుగా తొలగించారు", "selfmove": "మూలం, గమ్యం పేర్లు ఒకటే; పేజీని దాని పైకే తరలించడం కుదరదు.", @@ -2225,7 +2255,7 @@ "move-leave-redirect": "పాత పేజీని దారిమార్పుగా ఉంచు", "protectedpagemovewarning": "'''హెచ్చరిక:''' ఈ పేజీని సంరక్షించారు కనుక నిర్వాహక హక్కులు కలిగిన వాడుకరులు మాత్రమే దీన్ని తరలించగలరు.\nమీ సమాచారం కోసం చివరి చిట్టా పద్దుని ఇక్కడ ఇస్తున్నాం:", "semiprotectedpagemovewarning": "'''గమనిక:''' ఈ పేజీని సంరక్షించారు కనుక నమోదైన వాడుకరులు మాత్రమే దీన్ని తరలించగలరు.\nమీ సమాచారం కోసం చివరి చిట్టా పద్దుని ఇక్కడ ఇస్తున్నాం:", - "move-over-sharedrepo": "== ఫైలు ఉంది ==\n[[:$1]] సామూహిక నిక్షేపంలో ఉంది. ఈ పేరుతో మరొక ఫైలును తరలిస్తే అది ఆ సామూహిక ఫైలును ఓవర్‌రైడు చేస్తుంది.", + "move-over-sharedrepo": "[[:$1]] సామూహిక నిక్షేపంలో ఉంది. ఈ పేరుకు మరొక ఫైలును తరలిస్తే అది ఆ సామూహిక ఫైలును ఓవర్‌రైడు చేస్తుంది.", "file-exists-sharedrepo": "ఎంచుకున్న ఫైలు పేరు ఇప్పటికే సామాన్య భాండాగారంలో వాడుకలో ఉంది.\nదయచేసి మరొక పేరుని ఎంచుకోండి.", "export": "పేజీల ఎగుమతి", "exporttext": "ఎంచుకున్న పేజీ లేదా పేజీలలోని వ్యాసం మరియు పేజీ చరితం లను XML లో ఎగుమతి చేసుకోవచ్చు. MediaWiki ని ఉపయోగించి Special:Import page ద్వారా దీన్ని వేరే వికీ లోకి దిగుమతి చేసుకోవచ్చు.\n\nపేజీలను ఎగుమతి చేసందుకు, కింద ఇచ్చిన టెక్స్టు బాక్సులో పేజీ పేర్లను లైనుకో పేరు చొప్పున ఇవ్వండి. ప్రస్తుత కూర్పుతో పాటు పాత కూర్పులు కూడా కావాలా, లేక ప్రస్తుత కూర్పు మాత్రమే చాలా అనే విషయం కూడా ఇవ్వవచ్చు.\n\nరెండో పద్ధతిలో అయితే, పేజీ యొక్క లింకును కూడా వాడవచ్చు. ఉదాహరణకు, \"[[{{MediaWiki:Mainpage}}]]\" కోసమైతే [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] అని ఇవ్వవచ్చు.", @@ -2241,6 +2271,7 @@ "export-download": "ఫైలుగా భద్రపరచు", "export-templates": "మూసలను కలుపు", "export-pagelinks": "ఈ లోతు వరకు లింకై ఉన్న పేజీలను చేర్చు:", + "export-manual": "పేజీలను మానవికంగా చేర్చండి:", "allmessages": "అన్ని సిస్టం సందేశాలు", "allmessagesname": "పేరు", "allmessagesdefault": "అప్రమేయ సందేశపు పాఠ్యం", @@ -2305,8 +2336,8 @@ "import-upload": "XML డేటాను అప్‌లోడు చెయ్యి", "import-token-mismatch": "సెషను భోగట్టా పోయింది. దయచేసి మళ్ళీ ప్రయత్నించండి.", "import-invalid-interwiki": "మీరు చెప్పిన వికీనుండి దిగుమతి చేయలేము.", - "import-error-edit": "పేజీ \"$1\" లో మార్పుచేర్పులు చేసే అనుమతి మీకు లేదు కాబట్టి దాన్ని దిగుమతి చెయ్యలేదు.", - "import-error-create": "పేజీ \"$1\" ను సృష్టించే అనుమతి మీకు లేదు కాబట్టి దాన్ని దిగుమతి చెయ్యలేదు.", + "import-error-edit": "\"$1\" పేజీలో మార్పుచేర్పులు చేసే అనుమతి మీకు లేదు కాబట్టి, దాన్ని దిగుమతి చెయ్యలేదు.", + "import-error-create": "\"$1\" పేజీని సృష్టించే అనుమతి మీకు లేదు కాబట్టి దాన్ని దిగుమతి చెయ్యలేదు.", "import-error-interwiki": "పేజీ \"$1\" యొక్క పేరు బయటి లింకుల (అంతరవికీ) కోసం అట్టేపెట్టబడింది కాబట్టి దాన్ని దిగుమతి చెయ్యలేదు.", "import-error-special": "పేజీ \"$1\" ప్రత్యేక పేరుబరికి చెందినది. ఈ పేరుబరిలో పేజీలు సృష్టించే అనుమతి లేదు. అందుచేత దాన్ని దిగుమతి చెయ్యలేదు.", "import-error-invalid": "పేజీ \"$1\" పేరు సరైనది కాదు కాబట్టి దాన్ని దిగుమతి చెయ్యలేదు.", @@ -2316,8 +2347,8 @@ "import-rootpage-nosubpage": "మూలపేజీ యొక్క పేరుబరి \"$1\" ఉపపేజీలను అనుమతించదు.", "importlogpage": "దిగుమతుల చిట్టా", "importlogpagetext": "ఇతర వికీల నుండీ మార్పుల చరిత్రతోసహా తెచ్చిన నిర్వహణా దిగుమతులు.", - "import-logentry-upload-detail": "$1 {{PLURAL:$1|కూర్పు|కూర్పులు}}", - "import-logentry-interwiki-detail": "$2 నుండి {{PLURAL:$1|ఒక కూర్పు|$1 కూర్పులు}}", + "import-logentry-upload-detail": "$1 {{PLURAL:$1|కూర్పును|కూర్పులను}} దిగుమతి చేసాం", + "import-logentry-interwiki-detail": "$2 నుండి {{PLURAL:$1|కూర్పును|కూర్పులను}} దిగుమతి చేసాం", "javascripttest": "జావాస్క్రిప్ట్ పరీక్ష", "javascripttest-pagetext-unknownaction": "తెలియని చర్య \"$1\".", "javascripttest-qunit-intro": "mediawiki.org లోని [$1 పరీక్షా డాక్యుమెంటేషన్] చూడండి.", @@ -2327,7 +2358,8 @@ "tooltip-pt-anontalk": "ఈ ఐపీ చిరునామా నుండి చేసిన మార్పుల గురించి చర్చ", "tooltip-pt-preferences": "{{GENDER:|మీ}} అభిరుచులు", "tooltip-pt-watchlist": "మీరు మార్పుల కొరకు గమనిస్తున్న పేజీల జాబితా", - "tooltip-pt-mycontris": "{{GENDER:|మీ}} యోగదానములు", + "tooltip-pt-mycontris": "{{GENDER:|మీ}} మార్పుచేర్పుల జాబితా", + "tooltip-pt-anoncontribs": "ఈ IP అడ్రసు నుండి చేసిన దిద్దుబాట్ల జాబితా", "tooltip-pt-login": "మిమ్మల్ని లాగినవమని ప్రోత్సహిస్తున్నాం; కానీ అది తప్పనిసరేమీ కాదు.", "tooltip-pt-logout": "లాగౌటవండి", "tooltip-pt-createaccount": "మీరొక ఖాతాని సృష్టించుకొని ప్రవేశించటాన్ని సమర్ధిస్తున్నాము; కానీ, అది అవసరం కాదు, ఐచ్ఛికం మాత్రమే.", @@ -2358,8 +2390,8 @@ "tooltip-t-recentchangeslinked": "ఈ పేజీకి లింకై ఉన్న పేజీల్లో జరిగిన ఇటీవలి మార్పులు", "tooltip-feed-rss": "ఈ పేజీకి RSS ఫీడు", "tooltip-feed-atom": "ఈ పేజీకి Atom ఫీడు", - "tooltip-t-contributions": "యోగదానములు జాబితా‌ {{GENDER:$1|ఈ వాడుకరి}}", - "tooltip-t-emailuser": "ఈ వాడుకరికి ఓ ఈమెయిలు పంపండి", + "tooltip-t-contributions": "{{GENDER:$1|ఈ వాడుకరి}} మార్పుచేర్పుల జాబితా‌", + "tooltip-t-emailuser": "ఈ {{GENDER:$1|వాడుకరికి}} ఓ ఈమెయిలు పంపండి", "tooltip-t-info": "ఈ పేజీ గురించి మరింత సమాచారం", "tooltip-t-upload": "దస్త్రాలను ఎక్కించండి", "tooltip-t-specialpages": "అన్ని ప్రత్యేక పుటల జాబితా", @@ -2377,6 +2409,7 @@ "tooltip-ca-nstab-category": "వర్గపు పేజీ చూడండి", "tooltip-minoredit": "దీన్ని చిన్న మార్పుగా గుర్తించు", "tooltip-save": "మీ మార్పులను భద్రపరచండి", + "tooltip-publish": "మీ మార్పులను ప్రచురించండి", "tooltip-preview": "మీ మార్పులను మునుజూడండి, భద్రపరిచేముందు ఇది వాడండి!", "tooltip-diff": "పాఠానికి మీరు ఏ మార్పులు చేసారో చూపిస్తుంది", "tooltip-compareselectedversions": "ఈ పేజీలో ఎంచుకున్న రెండు కూర్పులకు మధ్య తేడాలను చూడండి", @@ -2395,7 +2428,7 @@ "lastmodifiedatby": "ఈ పేజీకి $3 $2, $1న చివరి మార్పు చేసారు.", "othercontribs": "$1 యొక్క కృతిపై ఆధారితం.", "others": "ఇతరాలు", - "siteusers": "{{SITENAME}} {{PLURAL:$2|వాడుకరి|వాడుకరులు}} $1", + "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|వాడుకరి}}|వాడుకరులు}} $1", "anonusers": "{{SITENAME}} అజ్ఞాత {{PLURAL:$2|వాడుకరి|వాడుకరులు}} $1", "creditspage": "పేజీ క్రెడిట్లు", "nocredits": "ఈ పేజీకి క్రెడిట్ల సమాచారం అందుబాటులో లేదు.", @@ -2419,6 +2452,7 @@ "pageinfo-language": "పేజీ విషయపు భాష", "pageinfo-language-change": "మార్చు", "pageinfo-content-model": "పేజీ కంటెంటు మోడల్", + "pageinfo-content-model-change": "మార్చు", "pageinfo-robot-policy": "రోబోట్లచే ఇండెక్సింగు", "pageinfo-robot-index": "అనుమతించబడింది", "pageinfo-robot-noindex": "అనుమతించబడలేదు", @@ -2549,7 +2583,7 @@ "exif-xresolution": "క్షితిజసమాంతర స్పష్టత", "exif-yresolution": "లంబ స్పష్టత", "exif-stripoffsets": "బొమ్మ డేటా ఉన్న స్థలం", - "exif-rowsperstrip": "ఒక్కో పట్టికి ఉన్న అడ్డువరుసలు", + "exif-rowsperstrip": "ఒక్కో పట్టీకి ఉన్న అడ్డువరుసలు", "exif-stripbytecounts": "ఒక్కో కుదించిన పట్టీలో ఉన్న బైట్లు", "exif-jpeginterchangeformat": "JPEG SOI కి ఆఫ్‌సెట్", "exif-jpeginterchangeformatlength": "JPEG డాటా యొక్క బైట్లు", @@ -2940,10 +2974,12 @@ "watchlistedit-raw-removed": "{{PLURAL:$1|1 శీర్షికను|$1 శీర్షికలను}} తీసివేశాం:", "watchlistedit-clear-title": "వీక్షణజాబితా చెరిపివేయి", "watchlistedit-clear-legend": "వీక్షణజాబితా చెరిపివేయి", + "watchlistedit-clear-explain": "ఈ శీర్షికలన్నిటినీ మీ వీక్షణ జాబితా నుండి తీసేస్తాం", "watchlistedit-clear-titles": "శీర్షికలు:", "watchlistedit-clear-submit": "వీక్షణ జాబితా శుభ్రం చేయి (ఇది శాశ్వతం!)", "watchlistedit-clear-done": "మీ వీక్షణ జాబితాను శుభ్రం చేశాం.", "watchlistedit-clear-removed": "{{PLURAL:$1|1 శీర్షికను|$1 శీర్షికలను}} తీసివేశాం:", + "watchlistedit-too-many": "ఇక్కడ చూపించలేనన్ని పేజీలున్నాయి.", "watchlisttools-clear": "వీక్షణజాబితాను శుభ్రం చేయి", "watchlisttools-view": "సంబంధిత మార్పులను చూడండి", "watchlisttools-edit": "వీక్షణ జాబితాను చూడండి లేదా మార్చండి", @@ -3020,7 +3056,7 @@ "specialpages-group-login": "ప్రవేశించండి / ఖాతాను సృష్టించుకోండి", "specialpages-group-changes": "ఇటీవలి మార్పులు మరియు దినచర్యలు", "specialpages-group-media": "మాధ్యమ నివేదికలు మరియు ఎగుమతులు", - "specialpages-group-users": "వాడుకర్లు మరియు హక్కులు", + "specialpages-group-users": "వాడుకరులు, హక్కులు", "specialpages-group-highuse": "అధిక వాడుక పేజీలు", "specialpages-group-pages": "పేజీల యొక్క జాబితాలు", "specialpages-group-pagetools": "పేజీ పనిముట్లు", @@ -3177,45 +3213,12 @@ "feedback-useragent": "వాడుకరి ఏజెంటు:", "searchsuggest-search": "{{SITENAME}}‌లో వెతకండి", "searchsuggest-containing": "కలిగియున్న...", - "api-error-badaccess-groups": "ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.", "api-error-badtoken": "అంతర్గత లోపం: చెడు టోకెన్.", - "api-error-copyuploaddisabled": "URL ద్వారా ఎక్కించడం ఈ సర్వరులో అశక్తం చెయ్యబడింది.", - "api-error-duplicate": "ఇదే విషయ పాఠ్యంతో ఈ సైటులో ఈసరికే {{PLURAL:$1|మరో ఫైలు ఉంది|ఇతర ఫైళ్ళు ఉన్నాయి}}.", - "api-error-duplicate-archive": "ఇదే విషయ పాఠ్యంతో ఈ సైటులో ఈసరికే {{PLURAL:$1|మరో ఫైలు ఉండేది|ఇతర ఫైళ్ళు ఉండేవి}}. అయితే {{PLURAL:$1|అది తొలగించబడింది|అవి తొలగించబడ్డాయి}}.", - "api-error-empty-file": "మీరు దాఖలుచేసిన ఫైల్ ఖాళీది.", "api-error-emptypage": "కొత్త మరియు ఖాళీ పేజీలను సృష్టించడానికి అనుమతి లేదు.", - "api-error-fetchfileerror": "అంతర్గత లోపం: ఈ ఫైలును తేవడంలో ఏదో తప్పు జరిగింది.", - "api-error-fileexists-forbidden": "\"$1\" పేరుతో ఓ ఫైలు ఈసరికే ఉంది. దాన్ని తిరగరాయడం కుదరదు.", - "api-error-fileexists-shared-forbidden": "\"$1\" పేరుతో ఓ ఫైలు ఈసరికే ఈ సహ ఫైలు ఖజానా (షేర్‍డ్ ఫైల్ రిపాజిటరీ)లో ఉంది. దాన్ని తిరగరాయడం కుదరదు.", - "api-error-file-too-large": "మీరు సమర్పించిన దస్త్రం చాలా పెద్దగా ఉంది.", - "api-error-filename-tooshort": "దస్త్రపు పేరు మరీ చిన్నగా ఉంది.", - "api-error-filetype-banned": "ఈ రకపు దస్త్రాలని నిషేధించారు.", - "api-error-filetype-banned-type": "$1, అనుమతించబడిన {{PLURAL:$4|ఫైలు రకం కాదు|ఫైలు రకాలు కాదు}}. అనుమతించబడిన {{PLURAL:$3|ఫైలు రకం|ఫైలు రకాలు}}: $2.", - "api-error-filetype-missing": "ఫైలుపేరులో ఓ ఎక్స్టెన్షను లేదు.", - "api-error-hookaborted": "మీరు చేయ ప్రయత్నించిన మార్పును ఓ పొడిగింత అడ్డుకుంది.", - "api-error-http": "అంతర్గత దోషము: సేవకానికి అనుసంధానమవలేకపోతున్నది.", - "api-error-illegal-filename": "ఆ పైల్ పేరు అనుమతించబడదు.", - "api-error-internal-error": "అంతర్గత లోపం: ఈ వికీలో మీ ఎక్కింపును ప్రాసెసు చెయ్యడంలో ఎదో తప్పు జరిగింది.", - "api-error-invalid-file-key": "అంతర్గత దోషము: తాత్కాలిక నిల్వలో ఫైల్ కనపడలేదు.", - "api-error-missingparam": "అంతర్గత దోషం: అభ్యర్ధనలో పరామితులు అన్నీ లేవు.", - "api-error-missingresult": "అంతర్గత లోపం: నకలు తీయడం సఫలమైందో లేదో తెలియడం లేదు.", - "api-error-mustbeloggedin": "దస్త్రాలను ఎక్కించడానికి మీరు ప్రవేశించివుండాలి.", - "api-error-mustbeposted": "అంతర్గత లోపం: అభ్యర్థనకు HTTP POST అవసరం.", - "api-error-noimageinfo": "ఎక్కింపు జయప్రదమైంది. కానీ సర్వరు, ఆ ఫైలు గురించిన సమాచారమేమీ ఇవ్వలేదు.", - "api-error-nomodule": "అంతర్గత దోషము: ఎక్కింపు పర్వికము అమర్చబడలేదు.", - "api-error-ok-but-empty": "అంతర్గత దోషము: సేవకము నుండి ఎటువంటి స్పందనా లేదు.", - "api-error-overwrite": "ఈసరికే ఉన్న ఫైలును తిరగరాయడానికి అనుమతి లేదు.", - "api-error-stashfailed": "అంతర్గత లోపం: తాత్కాలిక దస్త్రాన్ని భద్రపరచడంలో సేవకి విఫలమైంది.", "api-error-publishfailed": "అంతర్గత లోపం: తాత్కాలిక ఫైలును ప్రచురించడంలో సర్వరు విఫలమైంది.", - "api-error-stasherror": "ఫైలును ఖాజానాకు ఎక్కించడంలో లోపం దొర్లింది.", - "api-error-timeout": "సర్వరు ఆశించిన సమయం లోపు స్పందించలేదు.", - "api-error-unclassified": "ఒక తెలియని దోషము సంభవించినది", - "api-error-unknown-code": "తెలియని పొరపాటు: \"$1\".", - "api-error-unknown-error": "అంతర్గత పొరపాటు: మీ దస్త్రాన్ని ఎక్కించేప్పుడు ఏదో పొరపాటు జరిగింది.", + "api-error-stashfailed": "అంతర్గత లోపం: తాత్కాలిక దస్త్రాన్ని భద్రపరచడంలో సేవకి విఫలమైంది.", "api-error-unknown-warning": "తెలియని హెచ్చరిక: $1", "api-error-unknownerror": "తెలియని పొరపాటు: \"$1\".", - "api-error-uploaddisabled": "ఈ వికీలో ఎక్కింపులని అచేతనం చేసారు.", - "api-error-verification-error": "ఈ ఫైల్ పాడైవుండవచ్చు, లేదా తప్పుడు పొడిగింతను కలిగివుండవచ్చు.", "duration-seconds": "$1 {{PLURAL:$1|క్షణం|క్షణాలు}}", "duration-minutes": "$1 {{PLURAL:$1|నిమిషం|నిమిషాలు}}", "duration-hours": "$1 {{PLURAL:$1|గంట|గంటలు}}", diff --git a/languages/i18n/tet.json b/languages/i18n/tet.json index 15341c85d1..fb73ae753d 100644 --- a/languages/i18n/tet.json +++ b/languages/i18n/tet.json @@ -188,6 +188,7 @@ "nstab-mediawiki": "Mensajen", "nstab-help": "Pájina ajuda", "nstab-category": "Kategoria", + "mainpage-nstab": "Pájina Mahuluk", "nosuchspecialpage": "Pájina espesiál ne'e la iha", "nospecialpagetext": "Pájina espesiál ne'e la iha.\n\nLista ida pájina espesiál nian [[Special:SpecialPages|iha ne'e]].", "error": "Sala", @@ -227,13 +228,13 @@ "watchthis": "Hateke pájina ne'e", "savearticle": "Muda pájina", "showdiff": "Hatudu diferensa sira", - "anoneditwarning": "Ó lá'os \"log-in\" iha momentu.", + "anoneditwarning": "Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you [$1 log in] or [$2 create an account], your edits will be attributed to your username, along with other benefits.", "blockedtitle": "Uza-na'in la bele edita (blokeiu)", "blockednoreason": "laiha motivu", "whitelistedittext": "Ó tenke $1 ba edita pájina sira.", "loginreqpagetext": "Ó tenke $1 ba haree pájina seluk.", "newarticle": "(Foun)", - "noarticletext": "Iha momentu lá'os testu iha pájina ne'e, bele [[Special:Search/{{PAGENAME}}|buka naran pájina nian]] iha pájina seluk, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs], ka [{{fullurl:{{FULLPAGENAME}}|action=edit}} edita pájina ne'e].", + "noarticletext": "Iha momentu lá'os testu iha pájina ne'e, bele [[Special:Search/{{PAGENAME}}|buka naran pájina nian]] iha pájina seluk, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs], ka [{{fullurl:{{FULLPAGENAME}}|action=edit}} kria pájina ne'e].", "previewnote": "'''Ne'e de'it pájina ba kontrola.'''\nIta-nia mudansa la armazenadu seidauk!", "editing": "Edita $1", "editingsection": "Edita $1 (seksaun)", @@ -248,8 +249,9 @@ "permissionserrorstext": "Ó la bele halo ne'e; {{PLURAL:$1|motivu|motivu sira}}:", "permissionserrorstext-withaction": "Ita la bele $2. {{PLURAL:$1|Razaun|Razaun sira}}:", "currentrev": "Versaun atuál", + "currentrev-asof": "Versaun atuál $1 nian", "revisionasof": "Versaun $1 nian", - "revision-info": "Revisaun loron $4, tempu $5, husi $2", + "revision-info": "Revisaun loron $4, tempu $5, husi {{GENDER:$6|$2}}$7", "previousrevision": "←Versaun tuan liu", "nextrevision": "Versaun foun liu→", "currentrevisionlink": "Versaun atuál", @@ -582,14 +584,14 @@ "import-comment": "Komentáriu:", "import-revision-count": "{{PLURAL:$1|versaun ida|versaun $1}}", "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versaun|versaun}} husi $2", - "tooltip-pt-userpage": "Ó-nia pájina uza-na'in", - "tooltip-pt-mytalk": "Ó-nia pájina diskusaun", - "tooltip-pt-preferences": "Ha'u-nia preferénsia", - "tooltip-pt-mycontris": "Ó-nia kontribuisaun (lista)", + "tooltip-pt-userpage": "{{GENDER:|Ó-nia}} pájina uza-na'in", + "tooltip-pt-mytalk": "{{GENDER:|Ó-nia}} pájina diskusaun", + "tooltip-pt-preferences": "{{GENDER:|Ó}}-nia preferénsia", + "tooltip-pt-mycontris": "{{GENDER:|Ó-nia}} kontribuisaun (lista)", "tooltip-pt-login": "Ami rekomenda identifikasaun (\"log in\"), maibé Ita-Boot la presiza halo ne'e", "tooltip-pt-logout": "Husik", "tooltip-ca-talk": "Diskusaun kona-ba konteúdu pájina nian", - "tooltip-ca-edit": "Ita bele edita pájina ne'e. Please use the preview button before saving.", + "tooltip-ca-edit": "Edita pájina ne'e", "tooltip-ca-addsection": "Tau tan seksaun foun ida.", "tooltip-ca-viewsource": "Ema ruma proteje tiha pájina ne'e.\nÓ bele lee testu.", "tooltip-ca-history": "Versaun tuan pájina nian", @@ -609,7 +611,7 @@ "tooltip-n-randompage": "Hola pájina ruma", "tooltip-n-help": "Hatudu pájina ajuda.", "tooltip-t-whatlinkshere": "Lista pájina nian ne'ebé bá iha ne'e", - "tooltip-t-contributions": "Haree lista kontribuisaun uza-na'in ne'e nian", + "tooltip-t-contributions": "Haree lista kontribuisaun {{GENDER:$1|uza-na'in ne'e nian}}", "tooltip-t-emailuser": "Haruka korreiu eletróniku", "tooltip-t-upload": "Tau iha arkivu laran", "tooltip-t-specialpages": "Lista pájina espesiál hotu nian", @@ -626,7 +628,7 @@ "siteusers": "{{PLURAL:$2|uza-na'in|uza-na'in}} {{SITENAME}} nian $1", "previousdiff": "←Versaun molok", "nextdiff": "Versaun oinmai→", - "show-big-image": "Boot liu", + "show-big-image": "Fixeiru original", "ilsubmit": "Buka", "bad_image_list": "Formatu:\n\nLiña hotu tenke komesa ho *\nLigasaun uluk iha liña tenke ligasaun bá imajen aat.\nLigasaun seluk iha liña - ne'e pájina sira iha ne'ebé bele inklui imajen aat.", "exif-make": "Fabrikante kámara nian", @@ -693,6 +695,6 @@ "compare-rev2": "Versaun 2", "compare-submit": "Halo komparasaun", "rightsnone": "(mamuk)", - "searchsuggest-search": "Buka", + "searchsuggest-search": "Buka iha {{SITENAME}}", "expand_templates_ok": "OK" } diff --git a/languages/i18n/th.json b/languages/i18n/th.json index a1eb2aeeeb..7e77d4d48a 100644 --- a/languages/i18n/th.json +++ b/languages/i18n/th.json @@ -539,6 +539,7 @@ "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ!", "changepassword-throttled": "ล่าสุดคุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง", "botpasswords": "รหัสผ่านบอต", + "botpasswords-summary": "รหัสผ่านบอตอนุญาตการเข้าถึงให้กับบัญชีผู้ใช้ผ่านทาง API โดยไม่ต้องใช้ใบรับรองการล็อกอินหลักของบัญชีนี้ สิทธิผู้ใช้เมื่อล็อกอินด้วยรหัสผ่านบอตอาจถูกจำกัด\n\nถ้าคุณไม่ทราบว่าทำไมคุณอาจต้องการดำเนินการนี้ คุณไม่ควรดำเนินการนี้ และไม่ควรให้ผู้ใดขอให้คุณสร้างรหัสผ่านไว้ให้พวกเขาเหล่านั้น", "botpasswords-disabled": "รหัสผ่านสำหรับบอตถูกปิดใช้", "botpasswords-no-central-id": "หากต้องการใช้รหัสผ่านบอต คุณต้องล็อกอินในชื่อบัญชีผู้ใช้ที่เป็นกลาง", "botpasswords-existing": "รหัสผ่านบอตที่มีอยู่", @@ -555,7 +556,18 @@ "botpasswords-bad-appid": "ชื่อบอต \"$1\" ไม่ถูกต้อง", "botpasswords-insert-failed": "การเพิ่มชื่อบอต \"$1\" ล้มเหลว คุณได้เพิ่มมันไว้แล้วหรือเปล่า?", "botpasswords-update-failed": "การอัปเดตชื่อบอต \"$1\" ล้มเหลว คุณลบมันออกไปหรือเปล่า?", + "botpasswords-created-title": "สร้างรหัสผ่านบอตแล้ว", + "botpasswords-created-body": "รหัสผ่านบอตสำหรับชื่อบอต \"$1\" ของผู้ใช้ชื่อ \"$2\" ถูกสร้างขึ้นแล้ว", + "botpasswords-updated-title": "อัปเดตรหัสผ่านบอตแล้ว", + "botpasswords-updated-body": "รหัสผานบอตสำหรับชื่อบอต \"$1\" ของผู้ใช้ \"$2\" ถูกอัปเดตแล้ว", + "botpasswords-deleted-title": "ลบรหัสผ่านบอตแล้ว", + "botpasswords-deleted-body": "รหัสผ่านบอตสำหรับชื่อบอต \"$1\" ของผู้ใช้ชื่อ \"$2\" ถูกลบออกแล้ว", + "botpasswords-no-provider": "BotPasswordsSessionProvider ไม่พร้อมใช้งาน", + "botpasswords-restriction-failed": "ข้อจำกัดของรหัสผ่านบอตห้ามไม่ให้ล็อกอินครั้งนี้", + "botpasswords-invalid-name": "ชื่อผู้ใช้ที่ระบุไม่มีเครื่องหมายคั่นในรหัสผ่านบอต (\"$1\")", + "botpasswords-not-exist": "ผู้ใช้ \"$1\" ไม่มีรหัสผ่านบอต \"$2\".", "resetpass_forbidden": "ไม่สามารถเปลี่ยนรหัสผ่านได้", + "resetpass_forbidden-reason": "ไม่สามารถเปลี่ยนรหัสผ่านได้: $1", "resetpass-no-info": "คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง", "resetpass-submit-loggedin": "เปลี่ยนรหัสผ่าน", "resetpass-submit-cancel": "ยกเลิก", @@ -581,6 +593,8 @@ "passwordreset-emailelement": "ชื่อผู้ใช้: \n$1\n\nรหัสผ่านชั่วคราว: \n$2", "passwordreset-emailsentemail": "หากที่อยู่อีเมลนี้สัมพันธ์กับบัญชีของคุณ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่", "passwordreset-emailsentusername": "หากมีที่อยู่อีเมลที่ลงทะเบียนไว้ด้วยกับชื่อผู้ใช้นี้ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่", + "passwordreset-invalidemail": "ที่อยู่อีเมลไม่ถูกต้อง", + "passwordreset-nodata": "ไม่ได้ระบุชื่อผู้ใช้และรหัสผ่านไว้", "changeemail": "เปลี่ยนหรือลบที่อยู่อีเมล", "changeemail-header": "กรอกแบบนี้เพื่อเปลี่ยนที่อยู่อีเมลของคุณ หากคุณต้องการลบการเชื่อมโยงของที่อยู่อีเมลใด ๆ จากบัญชีของคุณ ให้เว้นที่อยู่อีเมลใหม่ว่างเมื่อส่งแบบ", "changeemail-no-info": "คุณจำต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง", @@ -625,6 +639,7 @@ "savearticle": "บันทึกหน้า", "savechanges": "บันทึกการเปลี่ยนแปลง", "publishpage": "เผยแพร่หน้า", + "publishchanges": "เผยแพร่การเปลี่ยนแปลง", "preview": "ตัวอย่าง", "showpreview": "แสดงตัวอย่าง", "showdiff": "แสดงการเปลี่ยนแปลง", @@ -641,6 +656,7 @@ "blockedtitle": "ผู้ใช้ถูกบล็อก", "blockedtext": "ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก\n\nการบล็อกนี้ดำเนินการโดย $1\nซึ่งให้เหตุผลว่า ''$2''\n\n* เริ่มการบล็อก: $8\n* หมดเขตการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ได้\nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลให้ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้ความสามารถนี้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดแสดงรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ", "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะเคยมีผู้ใช้อื่นใช้ ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:$2\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ", + "systemblockedtext": "ชื่อผู้ใช้หรือที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติโดยมีเดียวิกิ\nเหตุผลสำหรับการบล็อกคือ:\n\n:$2\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ดำเนินการบล็อก: $7\n\nไอพีแอดเดรสปัจจุบันของคุณคือ $3\nโปรดแจ้งรายละเอียดทั้งหมดข้างต้น ถ้าคุณมีข้อสงสัยใด ๆ", "blockednoreason": "ไม่ได้ให้เหตุผล", "whitelistedittext": "คุณต้อง$1เพื่อแก้ไขหน้า", "confirmedittext": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า \nโปรดตั้งและตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]", @@ -734,6 +750,8 @@ "content-model-text": "ข้อความธรรมดา", "content-model-javascript": "จาวาสคริปต์", "content-model-css": "CSS", + "content-json-empty-object": "วัตถุเปล่า", + "content-json-empty-array": "แถวเปล่า", "duplicate-args-category": "หน้าที่ใช้อาร์กิวเมนต์ซ้ำในการเรียกแม่แบบ", "expensive-parserfunction-warning": "คำเตือน: หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2 ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง", "expensive-parserfunction-category": "หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป", @@ -865,6 +883,12 @@ "mergehistory-empty": "ไม่มีรุ่นปรับปรุงที่รวมได้", "mergehistory-done": "รวม $3 รุ่นปรับปรุงของ $1 เข้ากับ [[:$2]] แล้ว", "mergehistory-fail": "ไม่สามารถรวมประวัติได้ โปรดตรวจสอบตัวแปรเสริมหน้าและเวลาอีกครั้ง", + "mergehistory-fail-bad-timestamp": "สแตมป์เวลาไม่ถูกต้อง", + "mergehistory-fail-invalid-source": "หน้าต้นทางไม่ถูกต้อง", + "mergehistory-fail-invalid-dest": "หน้าปลายทางไม่ถูกต้อง", + "mergehistory-fail-permission": "มีสิทธิไม่เพียงพอที่จะผสานประวัติ", + "mergehistory-fail-self-merge": "หน้าต้นทางและปลายทางเป็นหน้าเดียวกัน", + "mergehistory-fail-toobig": "ไม่สามารถผสานประวัติได้ เนื่องจาก $1 รุ่นแก้ไขเก่าที่เกินขีดจำกัดสูงสุดจะต้องถูกย้ายไปก่อน", "mergehistory-no-source": "ไม่มีหน้าต้นทาง $1", "mergehistory-no-destination": "ไม่มีหน้าปลายทาง $1", "mergehistory-invalid-source": "ชื่อเรื่องหน้าต้นทางต้องสมเหตุสมผล", @@ -940,6 +964,7 @@ "search-external": "ค้นหาภายนอก", "searchdisabled": "การค้นหา {{SITENAME}} ถูกปิดใช้งาน \nคุณสามารถค้นหาโดยทางกูเกิลในระหว่างนั้น\nโปรดทราบว่าดัชนีเนื้อหา {{SITENAME} อาจล้าสมัย", "search-error": "มีข้อผิดพลาดขณะค้นหา: $1", + "search-warning": "มีคำเตือนขณะค้นหา: $1", "preferences": "การตั้งค่า", "mypreferences": "การตั้งค่า", "prefs-edits": "จำนวนการแก้ไข:", @@ -1054,7 +1079,9 @@ "userrights-user-editname": "ใส่ชื่อผู้ใช้:", "editusergroup": "โหลดกลุ่มผู้ใช้", "editinguser": "กำลังเปลี่ยนสิทธิผู้ใช้ของผู้ใช้ [[User:$1|$1]] $2", + "viewinguserrights": "กำลังดูสิทธิผู้ใช้ของผู้ใช้ [[User:$1|$1]] $2", "userrights-editusergroup": "แก้ไขกลุ่มผู้ใช้", + "userrights-viewusergroup": "ดูกลุ่มผู้ใช้", "saveusergroups": "บันทึกกลุ่ม{{GENDER:$1|ผู้ใช้}}", "userrights-groupsmember": "สมาชิกของ:", "userrights-groupsmember-auto": "สมาชิกโดยปริยายของ:", @@ -1090,6 +1117,7 @@ "right-createpage": "สร้างหน้า (ที่ไม่ใช่หน้าอภิปราย)", "right-createtalk": "สร้างหน้าอภิปราย", "right-createaccount": "สร้างบัญชีผู้ใช้ใหม่", + "right-autocreateaccount": "ล็อกอินโดยใช้บัญชีผู้ใช้ภายนอกอัตโนมัติ", "right-minoredit": "ทำเครื่องหมายการแก้ไขเป็นการแก้ไขเล็กน้อย", "right-move": "ย้ายหน้า", "right-move-subpages": "ย้ายหน้าพร้อมหน้าย่อย", @@ -1154,14 +1182,36 @@ "right-siteadmin": "ล็อกและปลดล็อกฐานข้อมูล", "right-override-export-depth": "ส่งออกหน้า รวมหน้าที่เชื่อมโยงกับหน้านี้สูงสุด 5 ลำดับชั้น", "right-sendemail": "ส่งอีเมลหาผู้ใช้อื่น", + "right-managechangetags": "สร้างและเปิด/ปิดใช้งาน[[Special:Tags|ป้ายชื่อ]]", + "right-deletechangetags": "ลบ[[Special:Tags|ป้ายชื่อ]]ออกจากฐานข้อมูล", + "grant-group-page-interaction": "โต้ตอบกับหน้า", + "grant-group-file-interaction": "โต้ตอบกับสื่อ", + "grant-group-watchlist-interaction": "โต้ตอบกับรายการเฝ้าดูของคุณ", "grant-group-email": "ส่งอีเมล", + "grant-group-customization": "การปรับแต่งและการตั้งค่า", + "grant-group-other": "กิจกรรมเบ็ดเตล็ด", + "grant-blockusers": "บล็อกและปลดบล็อกผู้ใช้ต่าง ๆ", "grant-createaccount": "สร้างบัญชี", "grant-createeditmovepage": "สร้าง แก้ไข และย้ายหน้า", + "grant-delete": "ลบหน้า รุ่นแก้ไขเก่า และรายการบันทึก", + "grant-editinterface": "แก้ไขเนมสเปซของมีเดียวิกิและ CSS/JavaScript ของผู้ใช้", + "grant-editmycssjs": "แก้ไข CSS/JavaScript ผู้ใช้ของคุณ", + "grant-editmyoptions": "แก้ไขการตั้งค่าผู้ใช้ของคุณ", "grant-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ", "grant-editpage": "แก้ไขหน้านี้", + "grant-editprotected": "แก้ไขหน้าที่ถูกล็อก", + "grant-highvolume": "การแก้ไขในปริมาณสูง", + "grant-patrol": "ลาดตระเวนตรวจการเปลี่ยนแปลงหน้าต่าง ๆ", + "grant-privateinfo": "เข้าถึงข้อมูลส่วนบุคคล", + "grant-protect": "ล็อกและปลดล็อกหน้าต่าง ๆ", + "grant-rollback": "ทำกลับการเปลี่ยนแปลงในหน้า", + "grant-sendemail": "ส่งอีเมลหาผู้ใช้อื่น", "grant-uploadeditmovefile": "อัปโหลด แทนที่ และย้ายไฟล์", "grant-uploadfile": "อัปโหลดไฟล์ใหม่", + "grant-basic": "สิทธิพื้นฐาน", + "grant-viewdeleted": "ดูไฟล์และหน้าที่ถูกลบ", "grant-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ", + "grant-viewrestrictedlogs": "ดูรายการบันทึกที่ถูกจำกัดไว้", "newuserlogpage": "ปูมการสร้างผู้ใช้", "newuserlogpagetext": "นี่คือปูมการสร้างผู้ใช้", "rightslog": "ปูมสิทธิผู้ใช้", @@ -1171,6 +1221,7 @@ "action-createpage": "สร้างหน้านี้", "action-createtalk": "สร้างหน้าอภิปรายนี้", "action-createaccount": "สร้างบัญชีผู้ใช้นี้", + "action-autocreateaccount": "สร้างบัญชีผู้ใช้ภายนอกนี้อัตโนมัติ", "action-history": "ดูประวัติหน้านี้", "action-minoredit": "ทำเครื่องหมายการแก้ไขนี้เป็นการแก้ไขเล็กน้อย", "action-move": "ย้ายหน้านี้", @@ -1185,7 +1236,9 @@ "action-writeapi": "ใช้การเขียนเอพีไอ", "action-delete": "ลบหน้านี้", "action-deleterevision": "ลบรุ่นปรับปรุง", + "action-deletelogentry": "ลบรายการบันทึก", "action-deletedhistory": "ดูประวัติที่ถูกลบของหน้าใดหน้าหนึ่ง", + "action-deletedtext": "ดูข้อความรุ่นแก้ไขเก่าที่ถูกลบ", "action-browsearchive": "ค้นหาหน้าที่ถูกลบ", "action-undelete": "กู้คืนหน้า", "action-suppressrevision": "ตรวจทานและกู้คืนรุ่นปรับปรุงที่ซ่อนอยู่", @@ -1203,11 +1256,14 @@ "action-userrights-interwiki": "แก้ไขสิทธิผู้ใช้ของผู้ใช้บนวิกิอื่น", "action-siteadmin": "ล็อกหรือปลดล็อกฐานข้อมูล", "action-sendemail": "ส่งอีเมล", + "action-editmyoptions": "แก้ไขการตั้งค่าของคุณ", "action-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ", "action-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ", "action-viewmyprivateinfo": "ดูสารสนเทศส่วนตัวของคุณ", "action-editmyprivateinfo": "แก้ไขสารสนเทศส่วนตัวของคุณ", "action-editcontentmodel": "แก้ไขตัวแบบเนื้อหาของหน้า", + "action-deletechangetags": "ลบป้ายชื่อออกจากฐานข้อมูล", + "action-purge": "ล้างหน้านี้", "nchanges": "$1 การเปลี่ยนแปลง", "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ตั้งแต่การเยี่ยมชมครั้งสุดท้าย}}", "enhancedrc-history": "ประวัติ", @@ -1224,6 +1280,24 @@ "recentchanges-legend-heading": "คำอธิบายสัญลักษณ์:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่ [[Special:NewPages|รายชื่อหน้าใหม่]])", "recentchanges-submit": "แสดง", + "rcfilters-activefilters": "ตัวกรองที่ทำงาน", + "rcfilters-restore-default-filters": "คืนค่าตัวกรองปริยาย", + "rcfilters-clear-all-filters": "ล้างตัวกรองทั้งหมด", + "rcfilters-invalid-filter": "ตัวกรองไม่ถูกต้อง", + "rcfilters-filterlist-title": "ตัวกรอง", + "rcfilters-filterlist-noresults": "ไม่พบตัวกรองใด ๆ", + "rcfilters-filtergroup-registration": "การลงทะเบียนผู้ใช้", + "rcfilters-filter-registered-label": "ลงทะเบียน", + "rcfilters-filter-registered-description": "ผู้แก้ไขที่ล็อกอินแล้ว", + "rcfilters-filter-unregistered-label": "ไม่ได้ลงทะเบียน", + "rcfilters-filter-unregistered-description": "ผู้แก้ไขที่ไม่ได้ล็อกอิน", + "rcfilters-filter-editsbyself-label": "การแก้ไขของคุณเอง", + "rcfilters-filter-editsbyself-description": "การแก้ไขต่าง ๆ ที่คุณทำ", + "rcfilters-filter-editsbyother-label": "การแก้ไขต่าง ๆ ที่ผู้อื่นทำ", + "rcfilters-filter-editsbyother-description": "การแก้ไขต่าง ๆ ที่ผู้ใช้อื่นทำ (ไม่ใช่คุณ)", + "rcfilters-filtergroup-userExpLevel": "ระดับผู้เชี่ยวชาญ (สำหรับผู้ใช้ที่ลงทะเบียนเท่านั้น)", + "rcfilters-filter-userExpLevel-newcomer-label": "ผู้ที่มาใหม่", + "rcfilters-filter-userExpLevel-experienced-label": "ผู้ใช้ที่มีความเชี่ยวชาญ", "rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ $3, $4 (แสดงมากสุด $1)", "rclistfrom": "แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $2, $3", "rcshowhideminor": "$1การแก้ไขเล็กน้อย", diff --git a/languages/i18n/tl.json b/languages/i18n/tl.json index 405d823817..30fe744e3b 100644 --- a/languages/i18n/tl.json +++ b/languages/i18n/tl.json @@ -405,7 +405,7 @@ "userloginnocreate": "Lumagda", "logout": "Umalis sa pagkaka-login", "userlogout": "Umalis sa pagkaka-login", - "notloggedin": "Hindi nakalagda", + "notloggedin": "Hindi naka-login", "userlogin-noaccount": "Wala ka pa bang account?", "userlogin-joinproject": "Sumali sa {{SITENAME}}", "nologin": "Wala ka pang account? $1.", @@ -521,8 +521,6 @@ "passwordreset-emaildisabled": "Hindi pinagana ang email features sa wiking ito.", "passwordreset-username": "Pangalan ng tagagamit:", "passwordreset-domain": "Nasasakupan:", - "passwordreset-capture": "Tingnan ang lumabas na e-liham?", - "passwordreset-capture-help": "Kapag tsetsekan mo ang kahong ito, ang email (may pansamantalang password) ay ipapakita sa iyo at ipapadala rin sa tagagamit.", "passwordreset-email": "Direksiyong e-liham:", "passwordreset-emailtitle": "Mga detalye ng account sa {{SITENAME}}", "passwordreset-emailtext-ip": "Isang tao (marahil ay ikaw, mula sa IP address na $1) ang humiling ng isang paalala sa iyong mga detalye ng account para sa {{SITENAME}} ($4). Ang sumusunod na {{PLURAL:$3|account ng tagagamit ay|mga account ng tagagamit ay}} may kaugnayan sa email address na ito:\n\n$2\n\n{{PLURAL:$3|Ang pansamantalang password na ito|Ang mga pansamantalang password na ito}} ay mawawalan ng bisa sa loob ng {{PLURAL:$5|isang araw|$5 araw}}.\nDapat kang mag-login at pumili ng isang bagong password ngayon. Kung ibang tao ang gumawa ng kahilingang ito, o kung naalala mo na ang orihinal mong password, at hindi mo na nais palitan ito, maaari mong huwag nang pansinin ang mensaheng ito at magpatuloy sa paggamit ng luma mong password.", @@ -866,8 +864,6 @@ "saveprefs": "Itala", "restoreprefs": "Ibalik ang lahat ng likas na mga pagtatakda", "prefs-editing": "May binabago", - "rows": "Mga pahalang na hanay:", - "columns": "Mga pahabang hanay:", "searchresultshead": "Hanapin", "stub-threshold": "Kakayanan para sa pagpopormat ng kawing ng usbong (mga ''byte''):", "stub-threshold-disabled": "Hindi pinagagana", @@ -906,6 +902,7 @@ "username": "{{GENDER:$1|Bansag}}:", "prefs-memberingroups": "{{GENDER:$2|Kasapi}} ng {{PLURAL:$1|na pangkat|na mga pangkat}}:", "prefs-memberingroups-type": "$1", + "group-membership-link-with-expiry": "$1 (hanggang $2)", "prefs-registration": "Oras ng pagtatala:", "prefs-registration-date-time": "$1", "yourrealname": "Tunay na pangalan:", @@ -954,11 +951,16 @@ "userrights-reason": "Dahilan:", "userrights-no-interwiki": "Wala kang pahintulot na baguhin ang mga karapatan ng tagagamit sa ibang mga wiki.", "userrights-nodatabase": "Hindi umiiral o hindi lokal ang kalipunan ng datos na $1", - "userrights-nologin": "Kailangang [[Special:UserLogin|nakalagda ka]] bilang tagapangasiwa upang maitalaga ang mga karapatan ng tagagamit.", - "userrights-notallowed": "Wala kang pahintulot na magdagdag o magtanggal ng mga karapatan ng tagagamit.", "userrights-changeable-col": "Mga pangkat na maaari mong baguhin", "userrights-unchangeable-col": "Mga pangkat na hindi mo mababago", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "Mapapaso sa $1", + "userrights-expiry-none": "Hindi napapaso", + "userrights-expiry": "Mapapaso ng:", + "userrights-expiry-existing": "Sa kaunting oras na: $3, $2", + "userrights-expiry-options": "Isang araw:1 day,Isang linggo:1 week,Isang buwan:1 month,Tatlong buwan:3 months,Anim na buwan:6 months,Isang taon:1 year", + "userrights-invalid-expiry": "Sa oras na mapaso ang grupong \"$1\" ay hindi na magagamit.", + "userrights-expiry-in-past": "Sa oras na mapaso ang grupong \"$1\" ay hindi na magagamit.", "group": "Pangkat:", "group-user": "Mga tagagamit", "group-autoconfirmed": "Mga tagagamit na nakompirma sa kusang paraan (autokompirmasyon)", @@ -1037,7 +1039,6 @@ "right-siteadmin": "Ikandado at alisin ang pagkakakandado ng kalipunan ng dato", "right-override-export-depth": "Iluwas ang mga pahina na kabilang ang mga pahinang nakakawing magpahanggang sa isang lalim na 5", "right-sendemail": "Magpadala ng e-liham sa ibang mga tagagamit", - "right-passwordreset": "Tingnan ang mga email ng muling pagtatakda ng password", "newuserlogpage": "Talaan ng paglikha ng tagagamit", "newuserlogpagetext": "Isa itong talaan ng mga paglikha ng tagagamit.", "rightslog": "Tala ng mga karapatan ng tagagamit", @@ -1090,6 +1091,9 @@ "recentchanges-label-plusminus": "Nagbago ang laki ng pahina sa ganitong bilang ng mga byte", "recentchanges-legend-heading": "Gabay:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tingnan din [[Special:NewPages|ang talaan ng mga bagong pahina]])", + "rcfilters-restore-default-filters": "Ibalik ang mga napagkaukulang 'filters'", + "rcfilters-clear-all-filters": "Burahin lahat ng mga 'filters'", + "rcfilters-empty-filter": "Walang aktibong panangga. Lahat ay ipinamalas.", "rcnotefrom": "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').", "rclistfrom": "Ipakita ang bagong mga pagbabago simula sa $3 $2", "rcshowhideminor": "$1 ang mga maliliit na pagbabago", @@ -1487,6 +1491,7 @@ "apisandbox-reset": "Hawiin", "apisandbox-examples": "Halimbawa", "apisandbox-results": "Kinalabasan", + "apisandbox-request-selectformat-label": "Pakitang inihinging-datos gamit ang:", "apisandbox-request-url-label": "Hilingin ang URL:", "apisandbox-request-time": "Oras ng paghiling: $1", "apisandbox-continue": "Ipagpatuloy", @@ -2967,43 +2972,11 @@ "feedback-useragent": "Ahente ng tagagamit:", "searchsuggest-search": "Maghanap", "searchsuggest-containing": "naglalaman ng ...", - "api-error-badaccess-groups": "Hindi ka pinapayagang makapagkarga ng mga talaksan papunta sa wiking ito.", "api-error-badtoken": "Panloob na kamalian: masamang kahalip.", - "api-error-copyuploaddisabled": "Ang pagkakarga ng URL ay hindi pinagagana sa tagapaghaing ito.", - "api-error-duplicate": "May {{PLURAL:$1|ibang talaksang|ibang ilang mga talaksang}} nasa wiki na na may katulad na nilalaman", - "api-error-duplicate-archive": "Nagkaroon {{PLURAL:$1|dati ng iba pang talaksan|dati ng mga ilang iba pang mga talaksan}} na umiiral na sa sityo na may katulad na nilalaman, ngunit {{PLURAL:$1|ito ay|ito ay mga}} nabura na.", - "api-error-empty-file": "Walang laman ang ipinasa mong talaksan.", "api-error-emptypage": "Lumilikha ng bago, hindi pinapayagan ang mga pahinang walang laman.", - "api-error-fetchfileerror": "Panloob na kamalian: may naganap na pagkakamali habang kinukuha ang talaksan.", - "api-error-fileexists-forbidden": "Isang talaksan na may pangalang \"$1\" ang umiiral na, at hindi maaaring patungan ng muling pagsusulat.", - "api-error-fileexists-shared-forbidden": "Isang talaksang may pangalang \"$1\" ang umiiral na sa loob ng repository ng pinagsasaluhang talaksan, at hindi maaaring patungan ng muling pagsusulat.", - "api-error-file-too-large": "Napakalaki ng talaksang ipinasa mo.", - "api-error-filename-tooshort": "Napakaiksi ng pangalan ng talaksan.", - "api-error-filetype-banned": "Ipinagbabawal ang ganitong uri ng talaksan.", - "api-error-filetype-banned-type": "Ang $1 {{PLURAL:$4|ay isang hindi pinapahintulutang uri ng talaksan|ay hindi pinapahintulutang mga uri ng talaksan}}. Ang pinapayagang {{PLURAL:$3|uri ng talaksan ay ang|mga uri ng talaksan ay ang mga}} $2.", - "api-error-filetype-missing": "Kulang ng karugtong ang talaksan.", - "api-error-hookaborted": "Ang pagbabagong sinubok mong gawin ay hindi itinuloy ng isang kawil ng dugtong.", - "api-error-http": "Panloob na kamalian: hindi makaugnay sa tagahain.", - "api-error-illegal-filename": "Hindi pinapayagan ang pangalan ng talaksan.", - "api-error-internal-error": "Panloob na kamalian: may naganap na kamalian habang pinoproseso ang pagkakarga mo sa wiki.", - "api-error-invalid-file-key": "Panloob na kamalian: hindi matagpuan ang talaksan sa loob ng pansamantalang taguan.", - "api-error-missingparam": "Panloob na kamalian: nawawala ang mga parametro ng kahilingan.", - "api-error-missingresult": "Panloob na kamalian: hindi matukoy kung nagtagumpay ang kopya.", - "api-error-mustbeloggedin": "Dapat na nakalagda ka upang makapagkarga ng mga talaksan.", - "api-error-mustbeposted": "Panloob na kamalian: ang kahilingan ay nangangailangan ng HTTP POST.", - "api-error-noimageinfo": "Nagtagumpay ang pagkakarga, subalit hindi nakapagbigay ng anumang kabatiran ang tagapaghain hinggil sa talaksan.", - "api-error-nomodule": "Panloob na kamalian: walang pangkat ng modyul na pangkarga.", - "api-error-ok-but-empty": "Panloob na kamalian: walang tugon mula sa tagapaghain.", - "api-error-overwrite": "Hindi pinapayagan ang pagsusulat sa ibabaw ng isang umiiral na talaksan.", "api-error-stashfailed": "Panloob na kamalian: nabigo ang tagapaghain na magtabi ng pansamantalang talaksan.", - "api-error-timeout": "Hindi tumugon ang tagapaghain sa loob ng inaasahang panahon.", - "api-error-unclassified": "Naganap ang isang hindi nalalamang kamalian", - "api-error-unknown-code": "Hindi malamang kamalian: \"$1\"", - "api-error-unknown-error": "Panloob na kamalian: may nangyaring kamalian habang sinusubok mong ikarga ang talaksan mo.", "api-error-unknown-warning": "Hindi nalalamang babala: $1", "api-error-unknownerror": "Hindi malamang kamalian: \"$1\".", - "api-error-uploaddisabled": "Hindi pinapagana ang pagkakargang paitaas sa wiking ito.", - "api-error-verification-error": "Maaaring sira ang talaksang ito, o may maling karugtong.", "duration-seconds": "$1 {{PLURAL:$1|segundo|mga segundo}}", "duration-minutes": "$1 {{PLURAL:$1|minuto|mga minuto}}", "duration-hours": "$1 {{PLURAL:$1|oras|mga oras}}", @@ -3045,6 +3018,5 @@ "special-characters-group-khmer": "Khmer", "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA", "mw-widgets-dateinput-placeholder-month": "TTTT-BB", - "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina", - "edit-error-long": "Mga kamalian:" + "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina" } diff --git a/languages/i18n/udm.json b/languages/i18n/udm.json index 8a61fb515b..673c0306dc 100644 --- a/languages/i18n/udm.json +++ b/languages/i18n/udm.json @@ -140,7 +140,7 @@ "cancel": "Берытсконо", "mypage": "Бам", "mytalk": "Викиавтор сярысь вераськон", - "anontalk": "Сярысь вераськон", + "anontalk": "Вераськон", "navigation": "Навигация", "and": " но", "qbfind": "Утчан", @@ -270,19 +270,19 @@ "protectedinterface": "Та бам возе интерфейс текстэз та викилэн программной обеспечениезлы. Вандализмез палэнтон понна со утемын воштонъёслэсь.\nВань викиослы берыктэмъёсты ватсалляны яке вошъяны вылысь, тауна, MediaWiki локализацияя сайтэ выжелэ — [https://translatewiki.net/ translatewiki.net].", "editinginterface": "Сак луэ: Тӥ тупатӥськоды бамез, кудӥз возе программной обеспеченилэсь интерфейс текстсэ.\nТа бамез тупатон воштоз интерфейсэз возьматонэз мукет викиавторъёслы та викиын.", "namespaceprotected": "Тон дорын редактировать карыны бам ӧвӧл юаське <кужмо>$1
инты нимъёс.", - "exception-nologin": "Тон эн тусбуяськыны сӧзнэтэз", + "exception-nologin": "Ӧд пыре системае", "logouttext": "Тӥ ужан сеансэз йылпумъяды.\n\nКуд-огез бамъёс возьматӥськыны на быгато озьы, тӥ авторизовать каремын на кадь. Талы пумит нюръяськон понна бушатэ браузерлэсь кэшсэ.", "welcomeuser": "Гажаса ӧтиськом, $1!", "welcomecreation-msg": "Тӥляд учётной записьты кылдытэмын.\nТӥ быгатӥськоды воштыны асьтэлэсь [[Special:Preferences|настройкаостэс]] {{SITENAME}} сайтлы, потэ ке.", "yourname": "Учётной записьлэн нимыз:", "userlogin-yourname": "Викиавтор ним", "userlogin-yourname-ph": "Гожтэ учётной записьтылэсь нимзэ", - "createacct-another-username-ph": "Вики-авторлэн нимъёс пыртэмын", + "createacct-another-username-ph": "Гожтэ учётной записьлэсь нимзэ", "yourpassword": "Лушкемкыл:", "userlogin-yourpassword": "Лушкемкыл", "userlogin-yourpassword-ph": "Гожтэ асьтэлэсь парольдэс", "createacct-yourpassword-ph": "Гожтэ паролез", - "createacct-yourpasswordagain": "Пароль юнматэ", + "createacct-yourpasswordagain": "Юнматэ паролез", "createacct-yourpasswordagain-ph": "Гожтэ паролез эшшо одӥг пол", "userlogin-remembermypassword": "Кылем сӧзнэтэз", "cannotcreateaccount-title": "Учётной записьёсты кылдытыны уг луы", @@ -293,19 +293,19 @@ "userloginnocreate": "Пырыны", "logout": "Кошкыны", "userlogout": "Потыны", - "notloggedin": "Тон эн тусбуяськыны сӧзнэтэз", + "notloggedin": "Ӧд пыре системае", "userlogin-noaccount": "Ас учётной записьты ӧвӧл?", "userlogin-joinproject": "Проектэ пыриськоно", "nologin": "Учётной запись ӧвӧл? $1.", "nologinlink": "Учётной записез кылдытыны", - "createaccount": "Выль вики-авторлэн регистрациез", + "createaccount": "Выль викиавторлэн регистрациез", "gotaccountlink": "Пырелэ", "userlogin-resetpassword-link": "Тӥлесьтыд парольдэс куштыны?", "userlogin-helplink2": "Пыронъя юрттэт", "createacct-emailrequired": "Электрон почталэн адресэз", - "createacct-emailoptional": "Электронной почтаезлэн адресэз (необязательное)", + "createacct-emailoptional": "Электрон почталэн адресэз (одно ик ӧвӧл)", "createacct-email-ph": "Гожтэ асьтэлэн электрон почтадылэсь адрессэ", - "createaccountmail": "Адрес электронной почта огдырлы кутӥ вылын возьматэм образъёсыныз но соослэн случайной сгенерировать пароль ыстыны", + "createaccountmail": "Эрказ малпаськытэк кылдытыны огдырлы паролез но ыстыны сое электрон почталэн гожтэм адресаз", "createacct-submit": "Учётной записьтэс кылдытоно", "createacct-another-submit": "Учётной записез кылдытоно", "createacct-benefit-heading": "{{SITENAME}} — тӥ выллем адямиослэн валче ужамзы.", @@ -321,7 +321,7 @@ "loginlanguagelabel": "Кыл: $1", "pt-login": "Пырыны", "pt-login-button": "Пырыны", - "pt-createaccount": "Выль вики-авторлэн регистрациез", + "pt-createaccount": "Выль викиавторлэн регистрациез", "pt-userlogout": "Потыны", "oldpassword": "Вуж лушкемкыл:", "newpassword": "Выль лушкемкыл:", @@ -355,11 +355,11 @@ "blockedtext": "Тӥляд учётной записьты яке IP-адресты заблокировать каремын вал.\n\nБлокировкаез лэсьтӥз $1.\nПусъем мугез: $2.\n\n* Блокировка кутскиз: $8\n* Блокировка йылпумъяськоз: $6\n* Блокировкалэн ужпумез: $7\n\nТӥ блокировка сярысь вераськыны быгатӥськоды $1 яке котькин мукет [[{{MediaWiki:Grouppage-sysop}}|администратор]] доры герӟаськыса.\n[[Special:Preferences|Настройкаосады]] электрон почталэн ужась адресэз ӧвӧл дыръя, тӥ «Викиавторлы гожтэт» функциез уже кутыны уд быгатӥське, сое тӥленыды уже кутон дугдытэмын ӧвӧл ке.\nТӥляд али IP-адресты луэ $3, но блокировка идентификатор — #$5.\nТауна пыртэ вань та пыр-поч сведениосыз асьтэлэн куронъёсады.", "autoblockedtext": "Тӥляд IP-адресты автоматически заблокировать каремын вал, малы ке шуоно со кутӥськиз вал мукет викиавторен, кинзэ $1 заблокировать кариз.\nБлокировкалэн пусъем мугез:\n\n:$2\n\n* Блокировка кутскиз: $8\n* Блокировка йылпумъяськоз: $6\n* Блокировкалэн ужпумез: $7\n\nТӥ блокировка сярысь вераськыны быгатӥськоды $1 яке мукет [[{{MediaWiki:Grouppage-sysop}}|администраторъёс]] пӧлысь огез доры герӟаськыса.\n\nСак луэ, тӥ «Викиавторлы гожтэт» функциез уже кутыны уд быгатӥське [[Special:Preferences|асьтэлэн настройкаосады]] электрон почталэсь шонер адрессэ гожтытозь яке юнматытозь, либо блокировкады сыӵе амалэн гожтэтъёсыз ыстыны уг лэзьы ке.\n\nТӥляд али IP-адресты луэ $3, но блокировка идентификатор — #$5.\nТауна пыртэ вань та пыр-поч сведениосыз асьтэлэн куронъёсады.", "blockednoreason": "пуктэм муг ӧвӧл", - "whitelistedittext": "Тон кулэ $1 бам воштон понна.", - "loginreqtitle": "Авторизация кулэ", + "whitelistedittext": "Бамъёсты вошъяны вылысь $1 кулэ.", + "loginreqtitle": "Системае пыроно", "loginreqlink": "пырыны", - "loginreqpagetext": "Тон кулэ $1-ысь, сое мукет бамез учкыны шуыса.", - "newarticletext": "Тон бам ссылкаос вылэ выжыса, со кема уз улы.\nСоос мед кылдозы, текст бичась укноос, улазы интыяськемын (умой-умой см. [$1 бам справочной]).\nЯнгыш-а тон татын луысалыд ке, кнопказэ зӥбиз гинэ берлань асьтэлэсь браузеръёстэс.", + "loginreqpagetext": "Мукет бамъёсты учкыны вылысь $1 кулэ.", + "newarticletext": "Тӥ чӧлсконэтӥ ортчиды баме, кудӥз ӧвӧл на.\nСое кылдытыны вылысь, печатлалэ текст улӥ возьматэм укное (пыр-почгес учке [$1 юрттэт бамын]).\nТӥ вуиды татчы янгыш луэмен ке, зӥбе тӥляд браузердылэсь берлань кнопказэ.", "noarticletext": "Али дыре та бамын текст ӧвӧл. \nТӥ быгатоды [[Special:Search/{{PAGENAME}}|шедьтыны со сярысь кыӵе ке ивор]] мукет бамъёсысь,\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} шедьтыны журналъёсысь гожъямъёсыз], \nяке [{{fullurl:{{FULLPAGENAME}}|action=edit}} сыӵе нимын бам кылдытыны].", "noarticletext-nopermission": "Али дыре та бамын текст ӧвӧл.\nТӥ быгатоды [[Special:Search/{{PAGENAME}}|шедьтыны со сярысь кыӵе ке ивор]] мукет бамъёсысь, яке [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} шедьтыны журналъёсысь гожъямъёсыз], нош та бамез кылдытыны тӥляд лэзёнды ӧвӧл.", "blocked-notice-logextract": "Та викиавтор али заблокировать каремын.\nБлокировкаосын журналысь берпум гожъям улӥ возьматэмын:", @@ -371,7 +371,7 @@ "template-protected": "(утемын)", "template-semiprotected": "(ӧжытак утемын)", "hiddencategories": "Та бам пыре {{PLURAL:$1|$1 ватэм категорие}}:", - "nocreatetext": "Та сайтлэн бамаз выль сюбегатэм луонлыкъёсын кылдытон.\nТон улыса, берлань вуэ быгатэ бам отредактировать, [[Special:UserLogin|тусбуяськыны книгае яке выль система кылдыто учётной]].", + "nocreatetext": "{{SITENAME}} сюбегомытӥз луонлыкез выль бамъёсты кылдытъяны.\nТӥ быгатӥськоды берытскыны но азьло кылдытэм бам тупатыны, [[Special:UserLogin|системае пырыны яке выль аккаунт кылдытыны]].", "nocreate-loggedin": "Выль бамъёсты кылдытъяны тӥляд лэзёнды ӧвӧл.", "permissionserrors": "Лэзён янгыш", "permissionserrorstext": "Тӥляд тае быдэстыны лэзёнды ӧвӧл та {{PLURAL:$1|1=муген|мугъёсын}} сэрен:", @@ -503,12 +503,12 @@ "recentchangeslinked-page": "Бамлэн нимыз:", "recentchangeslinked-to": "Мыддоринтыны: та бамез чӧлскись бамъёсыз воштонъёсыз возьматыны", "upload": "Файл поныны", - "uploadnologin": "Тон эн тусбуяськыны сӧзнэтэз", - "uploadnologintext": "Тон кулэ $1, медаз загрузка файл сервер.", + "uploadnologin": "Ӧд пыре системае", + "uploadnologintext": "Файлъёсты сервере поныны вылысь $1 кулэ.", "filedesc": "Вакчияк описаниез", - "uploaddisabled": "Загрузка алӥзы", - "copyuploaddisabled": "Загрузка URL disconnect.", - "uploaddisabledtext": "Загрузка файл disconnect.", + "uploaddisabled": "Файлъёсыз ватсан уг лэзиськы.", + "copyuploaddisabled": "Файлъёсыз ватсан URL пыр уг лэзиськы.", + "uploaddisabledtext": "Файл поныны луонлык ӧвӧл.", "upload-dialog-button-cancel": "Берытсконо", "license-header": "Лицензия", "nolicense": "Ӧвӧл", @@ -613,7 +613,7 @@ "blockip": "{{GENDER:$1|Викиавторез}} заблокировать карыны", "blockip-legend": "Блокировка пыриськисьёс", "blockiptext": "Формазэ уже кутыса, кулэ луэмезъя мед заблокировать гожъян IP-адрес яке пыриськисьёслэн нимъёссы.\nТа понна гинэ но соя гинэ лэсьтэмын луыны быгатоз вандализм предотвращение с [[{{MediaWiki:Policy-url}}|правилоосты]].\nМугез возьматись улӥзы членъёсын (кылсярысь, куд-ог тодметъёссэ вандализм цитировать кароно бам).\nТӥ быгатӥськоды диапазонэз заблокировать IP-адрес, уже кутыны [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]-синтаксис. Максимально диапазонэз допустимый — /$1 протокол понна IPv4 но /$2 протокол понна IPv6.", - "ipbreason-dropdown": "* Блокировка мугез кабес\n** Полы информациез оскизы\n** Вордскем палэнэ бам\n** Спам-сайтъя педпал чӧлскон\n** Текстлэсь визьем ватсан/жуг-жаг\n** Кышкытлыклэсь, пыриськыны уйиськон\n** Злоупотребление кӧня ке книга учётной\n** Пыриськисьёслэн нимъёссы пыриськисьёс", + "ipbreason-dropdown": "*Блокировкаослэн огшоры мугъёссы\n** Ӧрекчась информациез ватсан\n** Бамъёслэсь текстсэс быдтон\n** Спам-чӧлсконъёс педпал сайтъёс вылэ\n** Валантэм/жаг текстэз бамъёсы ватсан\n** Викиавторъёсыз кышкатъян/ултӥяллян\n** Лэзёнтэм ужан трос аккаунтъёсын\n** Викиавторлэн ярантэм нимыз", "ipbsubmit": "Адресъёсын та заблокировать/пыриськисьёс", "ipboptions": "2 час:2 hours,1 нунал:1 day,3 нунал:3 days,1 арня:1 week,2 арня:2 weeks,1 толэзь:1 month,3 толэзь:3 months,6 толэзь:6 months,1 ар:1 year,пырак азелы:infinite", "ipb-blocklist-contribs": "{{GENDER:$1|$1}} гожтэмъёсы", diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index de199034de..d012feb33b 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -1104,6 +1104,7 @@ "username": "{{GENDER:$1|Ім'я користувача|Ім'я користувачки}}:", "prefs-memberingroups": "{{GENDER:$2|Член}} {{PLURAL:$1|1=групи|груп}}:", "prefs-memberingroups-type": "$1", + "group-membership-link-with-expiry": "$1 (до $2)", "prefs-registration": "Час реєстрації:", "prefs-registration-date-time": "$1", "yourrealname": "Справжнє ім'я:", @@ -1161,6 +1162,14 @@ "userrights-changeable-col": "Групи, які ви можете змінити", "userrights-unchangeable-col": "Групи, які ви не можете змінити", "userrights-irreversible-marker": "$1*", + "userrights-expiry-current": "Закінчується $1", + "userrights-expiry-none": "Не має терміну дії", + "userrights-expiry": "Минає:", + "userrights-expiry-existing": "Поточний час закінчення: $3, $2", + "userrights-expiry-othertime": "Інший термін/строк:", + "userrights-expiry-options": "1 день:1 day,1 тиждень:1 week,1 місяць:1 month,3 місяці:3 months,6 місяців:6 months,1 рік:1 year", + "userrights-invalid-expiry": "Для групи «$1» задано неправильний час закінчення прав.", + "userrights-expiry-in-past": "Для групи «$1» задано минулий час закінчення прав.", "userrights-conflict": "Конфлікт зміни прав користувача! Будь ласка, перевірте та підтвердіть зміни знову.", "group": "Група:", "group-user": "Користувачі", @@ -1362,22 +1371,49 @@ "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Показати", "rcfilters-activefilters": "Активні фільтри", + "rcfilters-restore-default-filters": "Відновити стандартні фільтри", + "rcfilters-clear-all-filters": "Очистити фільтри", "rcfilters-search-placeholder": "Фільтруйте нові редагування (переглядайте або почніть вводити)", "rcfilters-invalid-filter": "Недійсний фільтр", + "rcfilters-empty-filter": "Без фільтрів. Показано всі зміни.", "rcfilters-filterlist-title": "Фільтри", "rcfilters-filterlist-noresults": "Фільтри не знайдено", + "rcfilters-filtergroup-registration": "Реєстрація користувача", + "rcfilters-filter-registered-label": "Зареєстровані", + "rcfilters-filter-registered-description": "Користувачі, що увійшли в систему.", + "rcfilters-filter-unregistered-label": "Незареєстровані", + "rcfilters-filter-unregistered-description": "Користувачі, які не ввійшли в систему.", "rcfilters-filtergroup-authorship": "Авторство редагувань", "rcfilters-filter-editsbyself-label": "Ваші власні редагування", "rcfilters-filter-editsbyself-description": "Редагування, зроблені Вами.", "rcfilters-filter-editsbyother-label": "Редагування, зроблені іншими", - "rcfilters-filter-editsbyother-description": "Редагування, виконані іншими користувачами (не Вами)", - "rcfilters-filtergroup-userExpLevel": "Рівень досвіду користувачів", + "rcfilters-filter-editsbyother-description": "Редагування, виконані іншими користувачами (не Вами).", + "rcfilters-filtergroup-userExpLevel": "Рівень досвіду (тільки для зареєстрованих користувачів)", "rcfilters-filter-userExpLevel-newcomer-label": "Новачки", - "rcfilters-filter-userExpLevel-newcomer-description": "Дуже нові редактори: менш ніж 10 редагувань і 4 дні активності.", + "rcfilters-filter-userExpLevel-newcomer-description": "Менше ніж 10 редагувань і 4 дні активності.", "rcfilters-filter-userExpLevel-learner-label": "Учні", "rcfilters-filter-userExpLevel-learner-description": "Більше днів активності та більше редагувань, ніж у «новачків», але менше, ніж у «досвідчених користувачів».", "rcfilters-filter-userExpLevel-experienced-label": "Досвідчені користувачі", "rcfilters-filter-userExpLevel-experienced-description": "Більше 30 днів активності і понад 500 редагувань.", + "rcfilters-filtergroup-automated": "Автоматизовані редагування", + "rcfilters-filter-bots-label": "Бот", + "rcfilters-filter-bots-description": "Редагування, зроблені з допомогою автоматизованих засобів.", + "rcfilters-filter-humans-label": "Людина (не бот)", + "rcfilters-filter-humans-description": "Редагування, зроблені людиною.", + "rcfilters-filtergroup-significance": "Важливість", + "rcfilters-filter-minor-label": "Незначні редагування", + "rcfilters-filter-minor-description": "Редагування, позначені авторами як незначні.", + "rcfilters-filter-major-label": "Звичайні редагування", + "rcfilters-filter-major-description": "Редагування, не позначені як незначні.", + "rcfilters-filtergroup-changetype": "Вид зміни", + "rcfilters-filter-pageedits-label": "Редагування сторінок", + "rcfilters-filter-pageedits-description": "Редагування вікі-вмісту, обговорень, опису категорій тощо.", + "rcfilters-filter-newpages-label": "Створення сторінок", + "rcfilters-filter-newpages-description": "Редагування, якими створено нові сторінки.", + "rcfilters-filter-categorization-label": "Зміна категорій", + "rcfilters-filter-categorization-description": "Записи про додавання або вилучення сторінок з категорій.", + "rcfilters-filter-logactions-label": "Журнальні дії", + "rcfilters-filter-logactions-description": "Адміністративні дії, створення облікових записів, видалення сторінок, завантаження файлів тощо.", "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з $3, $4 (відображено до $1).", "rclistfrom": "Показати редагування починаючи з $3 $2.", "rcshowhideminor": "$1 незначні редагування", @@ -1891,7 +1927,10 @@ "apisandbox-sending-request": "Надсилання запиту API…", "apisandbox-loading-results": "Отримання результатів API…", "apisandbox-results-error": "Сталася помилка при завантаженні відповіді на запит API: $1.", + "apisandbox-request-selectformat-label": "Показати запрошені дані як:", + "apisandbox-request-format-url-label": "URL-рядок", "apisandbox-request-url-label": "URL-адреса запиту:", + "apisandbox-request-json-label": "JSON запиту:", "apisandbox-request-time": "Час запиту: {{PLURAL:$1|$1 мс}}", "apisandbox-results-fixtoken": "Виправте токен і надішліть ще раз", "apisandbox-results-fixtoken-fail": "Не вдалося викликати токен «$1».", @@ -2036,7 +2075,7 @@ "emailccsubject": "Копія вашого повідомлення до $1: $2", "emailsent": "Електронне повідомлення надіслано", "emailsenttext": "Ваше електронне повідомлення надіслано.", - "emailuserfooter": "Цей лист був надісланий {{GENDER:$2|користувачеві|користувачці}} $2 від {{GENDER:$1|користувача|користувачки}} $1 за допомогою функції «{{int:emailuser}}» проекту {{SITENAME}}. {{GENDER:$2|Ваш}} електронний лист потрапить безпосередньо до {{GENDER:$1|початковго відправника|початкової відправниці}}, відкривши {{GENDER:$1|йому|їй}} {{GENDER:$2|Вашу}} електронну адресу.", + "emailuserfooter": "Цей лист був надісланий {{GENDER:$2|користувачеві|користувачці}} $2 від {{GENDER:$1|користувача|користувачки}} $1 за допомогою функції «{{int:emailuser}}» проекту {{SITENAME}}. Якщо Ви відповісте на цей лист, Ваш електронний лист буде надіслано безпосередньо до {{GENDER:$1|початковго відправника|початкової відправниці}}, відкривши {{GENDER:$1|йому|їй}} {{GENDER:$2|Вашу}} електронну адресу.", "usermessage-summary": "Залишити системне повідомлення.", "usermessage-editor": "Системний вісник", "usermessage-template": "MediaWiki:UserMessage", @@ -3697,6 +3736,7 @@ "logentry-tag-update-logentry": "$1 {{GENDER:$2|оновив|оновила}} мітки запису журналу $5 сторінки $3 ({{PLURAL:$7|додано}} $6; {{PLURAL:$9|вилучено}} $8)", "rightsnone": "(нема)", "revdelete-summary": "коментар до редагування", + "rightslogentry-temporary-group": "$1 (тимчасово, до $2)", "feedback-adding": "Додавання відгуку на сторінку ...", "feedback-back": "Назад", "feedback-bugcheck": "Чудово! Просто перевірте, що це не одна з вже [$1 відомих помилок].", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index 55fc024aca..03a882efd4 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -765,8 +765,8 @@ "previewnote": "请记住这只是预览。您的更改尚未保存!", "continue-editing": "前往编辑区", "previewconflict": "该预览反映了上面文字编辑区中的文字在你保存后的显示状况。", - "session_fail_preview": "对不起!由于会话数据丢失,我们无法处理您的编辑。\n\n您可能已经退出。请核实您是否仍在登录,并重试。\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", - "session_fail_preview_html": "对不起!由于会话数据丢失,我们无法处理您的编辑,\n\n因为{{SITENAME}}已启用原始HTML,为了预防JavaScript攻击,预览被隐藏。\n\n如果该编辑尝试合法,请重试。\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", + "session_fail_preview": "对不起!由于会话数据丢失,我们无法处理您的编辑。\n\n您可能已经退出。请核实您是否仍在登录,并重试。如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", + "session_fail_preview_html": "对不起!由于会话数据丢失,我们无法处理您的编辑,\n\n因为{{SITENAME}}已启用原始HTML,为了预防JavaScript攻击,预览被隐藏。\n\n如果该编辑尝试合法,请重试。如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", "token_suffix_mismatch": "由于您客户端中的编辑令牌毁损了一些标点符号字符,您的编辑已经被拒绝。\n此次编辑被拒绝以防止页面文本损坏。\n这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。", "edit_form_incomplete": "编辑表格的某些部分没有到达服务器,请检查您的编辑是否完整并重试。", "editing": "编辑“$1”", @@ -1123,6 +1123,7 @@ "youremail": "电子邮件:", "username": "{{GENDER:$1|用户名}}:", "prefs-memberingroups": "{{GENDER:$2|用户}}{{PLURAL:$1|组}}:", + "group-membership-link-with-expiry": "$1(直到$2)", "prefs-registration": "注册时间:", "yourrealname": "真实姓名:", "yourlanguage": "界面语言:", @@ -1178,6 +1179,14 @@ "userrights-nodatabase": "数据库$1不存在或并非为本地的。", "userrights-changeable-col": "您可以更改的用户组", "userrights-unchangeable-col": "您不能更改的用户组", + "userrights-expiry-current": "终止于$1", + "userrights-expiry-none": "不会终止", + "userrights-expiry": "终止时间:", + "userrights-expiry-existing": "现有的终止时间:$2 $3", + "userrights-expiry-othertime": "其它时间:", + "userrights-expiry-options": "1天:1 day,1周:1 week,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year", + "userrights-invalid-expiry": "组“$1”的终止时间无效。", + "userrights-expiry-in-past": "组“$1”的终止时间是在过去。", "userrights-conflict": "用户权限的更改存在冲突!请检查并确认您的更改。", "group": "用户组:", "group-user": "用户", @@ -1379,8 +1388,11 @@ "recentchanges-legend-plusminus": "(±123)", "recentchanges-submit": "显示", "rcfilters-activefilters": "活跃的过滤器", + "rcfilters-restore-default-filters": "恢复默认过滤器", + "rcfilters-clear-all-filters": "清空所有过滤器", "rcfilters-search-placeholder": "过滤器最近更改(浏览或开始输入)", "rcfilters-invalid-filter": "无效过滤器", + "rcfilters-empty-filter": "没有活跃的过滤器。已显示所有贡献。", "rcfilters-filterlist-title": "过滤器", "rcfilters-filterlist-noresults": "找不到过滤器", "rcfilters-filtergroup-registration": "用户注册", @@ -1522,7 +1534,7 @@ "fileexists": "已存在相同名称的文件,如果您无法确定您是否要改变它,请检查[[:$1]]。 [[$1|thumb]]", "filepageexists": "该文件的说明页面已经创建于[[:$1]],但是目前没有名称为此的文件存在。您输入的摘要不会显示在说明页面上。要使你的摘要在那里显示,您需要手工编辑它。[[$1|thumb]]", "fileexists-extension": "一个相似名称的文件已经存在: [[$2|thumb]]\n* 上传文件的文件名:[[:$1]]\n* 现有文件的文件名:[[:$2]]\n请选择一个不同的名字。", - "fileexists-thumbnail-yes": "此文件可能是另一幅图像的缩小版本(缩略图)。 [[$1|thumb]]\n请仔细检查该文件[[:$1]]。\n如果被检查文件与原始大小的图像是同一幅图像,您无需上传多余的缩略图。", + "fileexists-thumbnail-yes": "此文件可能是另一幅图像的缩小版本(缩略图)。[[$1|thumb]]请仔细检查该文件[[:$1]]。如果被检查文件与原始大小的图像是同一幅图像,您无需上传多余的缩略图。", "file-thumbnail-no": "文件名以$1开始。它似乎是缩小的图像(缩略图)。如果您有完整分辨率的该图像,请上传它,否则请更改文件名。", "fileexists-forbidden": "已存在相同名称的文件,且不能覆盖;请返回并用一个新的名称来上传此文件。[[File:$1|thumb|center|$1]]", "fileexists-shared-forbidden": "共享文件库中存在该名称的文件。如果您仍想上传你的文件,请返回使用其他名称。[[File:$1|thumb|center|$1]]", @@ -1602,26 +1614,26 @@ "upload-form-label-own-work-message-generic-foreign": "我知道我正在上传此文件至一个共享的存储库。我确认我依据这里的服务条款和许可方针做此事。", "upload-form-label-not-own-work-message-generic-foreign": "如果您无法依据分享存储库的方针上传此文件,请关闭此对话框并尝试其他方法。", "upload-form-label-not-own-work-local-generic-foreign": "如果此文件可以依据他们的方针上传的话,您也可以尝试使用[[Special:Upload|{{SITENAME}}上的上传页面]]。", - "backend-fail-stream": "无法流传送文件$1。", - "backend-fail-backup": "无法备份文件$1。", - "backend-fail-notexists": "条目$1不存在。", - "backend-fail-hashes": "比较无法获取文件hashes", - "backend-fail-notsame": "$1已存在不同的文件。", - "backend-fail-invalidpath": "$1不是有效的存储路径。", + "backend-fail-stream": "无法流传送文件“$1”。", + "backend-fail-backup": "无法备份文件“$1”。", + "backend-fail-notexists": "文件$1不存在。", + "backend-fail-hashes": "无法获取文件哈希用于比较。", + "backend-fail-notsame": "“$1”已存在不同的文件。", + "backend-fail-invalidpath": "“$1”不是有效的存储路径。", "backend-fail-delete": "无法删除文件“$1”。", "backend-fail-describe": "无法修改文件“$1”的元数据。", - "backend-fail-alreadyexists": "“$1”页面已存在", - "backend-fail-store": "无法在$2存储文件$1。", - "backend-fail-copy": "无法复制文件$1到$2。", - "backend-fail-move": "无法移动文件$1到$2。", + "backend-fail-alreadyexists": "“$1”文件已存在。", + "backend-fail-store": "无法在“$2”存储文件“$1”。", + "backend-fail-copy": "无法复制文件“$1”到“$2”。", + "backend-fail-move": "无法移动文件“$1”到“$2”。", "backend-fail-opentemp": "无法打开临时文件。", "backend-fail-writetemp": "无法写临时文件。", - "backend-fail-closetemp": "无法创建临时文件。", + "backend-fail-closetemp": "无法关闭临时文件。", "backend-fail-read": "找不到文件“$1”。", - "backend-fail-create": "无法写入文件 $1 。", + "backend-fail-create": "无法写入文件“$1”。", "backend-fail-maxsize": "无法写入文件“$1”,因为它大于$2字节。", "backend-fail-readonly": "“$1”存储后端目前在只读模式,因为:$2", - "backend-fail-synced": "文件\"$1\"在内部存储后端之中处于不一致状态", + "backend-fail-synced": "文件“$1”在内部存储后端之中处于不一致状态", "backend-fail-connect": "无法连接到存储后端“$1。", "backend-fail-internal": "存储后端“$1”发生了一个未知错误。", "backend-fail-contenttype": "无法判断文件的内容类型来储存于“$1”。", @@ -1930,7 +1942,10 @@ "apisandbox-sending-request": "正在发送API请求...", "apisandbox-loading-results": "正在接收API请求...", "apisandbox-results-error": "加载API查询响应时出错:$1。", + "apisandbox-request-selectformat-label": "显示请求数据为:", + "apisandbox-request-format-url-label": "URL查询字符串", "apisandbox-request-url-label": "请求的URL:", + "apisandbox-request-json-label": "请求JSON:", "apisandbox-request-time": "请求时间:{{PLURAL:$1|$1毫秒}}", "apisandbox-results-fixtoken": "改正令牌并重新提交", "apisandbox-results-fixtoken-fail": "检索“$1”令牌失败。", @@ -2073,7 +2088,7 @@ "emailccsubject": "您发送给$1的消息的副本:$2", "emailsent": "电子邮件已发送", "emailsenttext": "您的电子邮件已经发出。", - "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“{{int:emailuser}}”功能被$1{{GENDER:$1|发送}}至{{GENDER:$2|$2}}的。{{GENDER:$2|您}}的电子邮件将直接发送至{{GENDER:$1|原始发送者}},并向{{GENDER:$1|其}}显示{{GENDER:$2|您}}的电子邮件地址。", + "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“{{int:emailuser}}”功能被$1{{GENDER:$1|发送}}至{{GENDER:$2|$2}}的。如果{{GENDER:$2|您}}回复该电子邮件的话,{{GENDER:$2|您}}的电子邮件将直接发送至{{GENDER:$1|原始发送者}},并向{{GENDER:$1|其}}显示{{GENDER:$2|您}}的电子邮件地址。", "usermessage-summary": "留下系统消息。", "usermessage-editor": "系统信息编辑器", "watchlist": "监视列表", @@ -2608,7 +2623,7 @@ "import-nonewrevisions": "没有导入版本(所有都已存在或因错误跳过)。", "xml-error-string": "$1于行$2,列$3($4字节):$5", "import-upload": "上传XML数据", - "import-token-mismatch": "会话数据丢失。\n\n您可能已经退出。请核实您是否仍在登录,并重试。\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", + "import-token-mismatch": "会话数据丢失。\n\n您可能已经退出。请核实您是否仍在登录,并重试。如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", "import-invalid-interwiki": "不能从指定的wiki导入。", "import-error-edit": "页面“$1”未导入,因为您不被允许编辑它。", "import-error-create": "页面“$1”未导入,因为您不被允许创建它。", @@ -2809,7 +2824,7 @@ "previousdiff": "←上一编辑", "nextdiff": "下一编辑→", "mediawarning": "警告:该文件类型可能含有恶意代码。执行后您的系统可能受损。", - "imagemaxsize": "图像尺寸限制:
''(文件说明页面)''", + "imagemaxsize": "图像尺寸限制:
(文件说明页面)", "thumbsize": "缩略图尺寸:", "widthheightpage": "$1×$2,$3页", "file-info": "文件大小:$1,MIME类型:$2", @@ -3625,6 +3640,7 @@ "logentry-tag-update-logentry": "$1在页面$3的日志记录$5中{{GENDER:$2|更新了}}标签({{PLURAL:$7|添加了}}$6;并{{PLURAL:$9|移除了}}$8)", "rightsnone": "(无)", "revdelete-summary": "编辑摘要", + "rightslogentry-temporary-group": "$1(临时,直到$2)", "feedback-adding": "正在添加反馈至页面...", "feedback-back": "返回", "feedback-bugcheck": "请检查本bug是否为[$1 已知bug]。", @@ -3691,7 +3707,7 @@ "expand_templates_generate_xml": "显示XML语法树", "expand_templates_generate_rawhtml": "显示原始HTML", "expand_templates_preview": "预览", - "expand_templates_preview_fail_html": "因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。\n\n如果这是合法的预览尝试,请再次重试。\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", + "expand_templates_preview_fail_html": "因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。\n\n如果这是合法的预览尝试,请再次重试。如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录,并检查您的浏览器是否允许来自该网站的cookie。", "expand_templates_preview_fail_html_anon": "因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。\n\n如果这是合法的预览尝试,请尝试[[Special:UserLogin|登录]]并重试。", "expand_templates_input_missing": "您需要提供至少一些输入文本。", "pagelanguage": "更改页面语言", @@ -3886,9 +3902,9 @@ "changecredentials": "更改凭据", "changecredentials-submit": "更改凭据", "changecredentials-invalidsubpage": "$1不是有效的凭据类型。", - "changecredentials-success": "您的证书已被更改。", + "changecredentials-success": "您的凭据已被更改。", "removecredentials": "移除凭据", - "removecredentials-submit": "移除证书", + "removecredentials-submit": "移除凭据", "removecredentials-invalidsubpage": "$1不是有效的凭据类型。", "removecredentials-success": "您的证书已被移除。", "credentialsform-provider": "凭据类型:", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index eaa41c204a..e15367ac85 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -3437,7 +3437,7 @@ "tags-edit-revision-legend": "加入或移除此標籤自{{PLURAL:$1|此修訂|全部 $1 筆修訂}}", "tags-edit-logentry-legend": "加入或移除此標籤自{{PLURAL:$1|此日誌項目|全部 $1 筆日誌項目}}", "tags-edit-existing-tags": "已存在的標籤:", - "tags-edit-existing-tags-none": "''無''", + "tags-edit-existing-tags-none": "無", "tags-edit-new-tags": "新標籤:", "tags-edit-add": "加入這些標籤:", "tags-edit-remove": "移除這些標籤:", @@ -3779,7 +3779,7 @@ "authmanager-authn-no-local-user": "提供的憑證沒有與任何在此 wiki 上的使用者相關聯。", "authmanager-authn-no-local-user-link": "提供的憑證有效但沒有與任何在此 wiki 上的使用者相關聯。請採用其他方式登入,或建立新使用者,您將會有選項可以連結您先前的憑證到新帳號。", "authmanager-authn-autocreate-failed": "自動建立本地帳號失敗:$1", - "authmanager-change-not-supported": "提供的憑證無法變更,因為尚無法使用。", + "authmanager-change-not-supported": "提供的認證無法變更,因為尚無法使用。", "authmanager-create-disabled": "已關閉帳號自動建立。", "authmanager-create-from-login": "要建立您的帳號,請先填寫此欄位。", "authmanager-create-not-in-progress": "帳號建立尚未進行或連線階段資料已遺失,請重頭再開始。", @@ -3828,15 +3828,15 @@ "authpage-cannot-link-continue": "無法繼續帳號連結,您的連線階段似乎已逾時。", "cannotauth-not-allowed-title": "權限不足", "cannotauth-not-allowed": "您不被允許使用此頁面", - "changecredentials": "更改憑證", - "changecredentials-submit": "更改憑證", + "changecredentials": "變更認證", + "changecredentials-submit": "變更認證", "changecredentials-invalidsubpage": "$1 不是有效的憑証類型。", - "changecredentials-success": "已更改您的憑證。", - "removecredentials": "移除憑證", - "removecredentials-submit": "移除憑證", + "changecredentials-success": "已變更您的認證。", + "removecredentials": "移除認證", + "removecredentials-submit": "移除認證", "removecredentials-invalidsubpage": "$1 不是有效的憑証類型。", "removecredentials-success": "已移除您的憑證。", - "credentialsform-provider": "憑證類型:", + "credentialsform-provider": "認證類型:", "credentialsform-account": "帳號名稱:", "cannotlink-no-provider-title": "沒有可連結的帳號", "cannotlink-no-provider": "沒有可連結的帳號。", diff --git a/maintenance/archives/patch-user_groups-ug_expiry.sql b/maintenance/archives/patch-user_groups-ug_expiry.sql new file mode 100644 index 0000000000..2ce2c9e84d --- /dev/null +++ b/maintenance/archives/patch-user_groups-ug_expiry.sql @@ -0,0 +1,7 @@ +-- Primary key and expiry column in user_groups table + +ALTER TABLE /*$wgDBprefix*/user_groups + DROP INDEX ug_user_group, + ADD PRIMARY KEY (ug_user, ug_group), + ADD COLUMN ug_expiry varbinary(14) NULL default NULL, + ADD INDEX ug_expiry (ug_expiry); diff --git a/maintenance/mssql/archives/patch-user_groups-ug_expiry.sql b/maintenance/mssql/archives/patch-user_groups-ug_expiry.sql new file mode 100644 index 0000000000..371d80b2ea --- /dev/null +++ b/maintenance/mssql/archives/patch-user_groups-ug_expiry.sql @@ -0,0 +1,6 @@ +-- Primary key and expiry column in user_groups table + +DROP INDEX IF EXISTS /*i*/ug_user_group ON /*_*/user_groups; +ALTER TABLE /*_*/tag_summary ADD CONSTRAINT pk_user_groups PRIMARY KEY(ug_user, ug_group); +ALTER TABLE /*_*/tag_summary ADD ug_expiry varchar(14) DEFAULT NULL; +CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups(ug_expiry); diff --git a/maintenance/mssql/tables.sql b/maintenance/mssql/tables.sql index ba1f752b72..1c633beb77 100644 --- a/maintenance/mssql/tables.sql +++ b/maintenance/mssql/tables.sql @@ -64,9 +64,11 @@ INSERT INTO /*_*/mwuser (user_name) VALUES ('##Anonymous##'); CREATE TABLE /*_*/user_groups ( ug_user INT NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE, ug_group NVARCHAR(255) NOT NULL DEFAULT '', + ug_expiry varchar(14) DEFAULT NULL, + PRIMARY KEY(ug_user, ug_group) ); -CREATE UNIQUE clustered INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user, ug_group); CREATE INDEX /*i*/ug_group ON /*_*/user_groups(ug_group); +CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups(ug_expiry); -- Stores the groups the user has once belonged to. -- The user may still belong to these groups (check user_groups). diff --git a/maintenance/oracle/archives/patch-user_groups-ug_expiry.sql b/maintenance/oracle/archives/patch-user_groups-ug_expiry.sql new file mode 100644 index 0000000000..d5376a318b --- /dev/null +++ b/maintenance/oracle/archives/patch-user_groups-ug_expiry.sql @@ -0,0 +1,8 @@ +define mw_prefix='{$wgDBprefix}'; + +ALTER TABLE &mw_prefix.user_groups ADD ( +ug_expiry TIMESTAMP(6) WITH TIME ZONE NULL +); +DROP INDEX IF EXISTS &mw_prefix.user_groups_u01; +ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_pk PRIMARY KEY (ug_user,ug_group); +CREATE INDEX &mw_prefix.user_groups_i02 ON &mw_prefix.user_groups (ug_expiry); diff --git a/maintenance/oracle/tables.sql b/maintenance/oracle/tables.sql index edb3398a64..fc3c696a6c 100644 --- a/maintenance/oracle/tables.sql +++ b/maintenance/oracle/tables.sql @@ -33,11 +33,13 @@ INSERT INTO &mw_prefix.mwuser CREATE TABLE &mw_prefix.user_groups ( ug_user NUMBER DEFAULT 0 NOT NULL, - ug_group VARCHAR2(255) NOT NULL + ug_group VARCHAR2(255) NOT NULL, + ug_expiry TIMESTAMP(6) WITH TIME ZONE NULL ); +ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_pk PRIMARY KEY (ug_user,ug_group); ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; -CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group); CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group); +CREATE INDEX &mw_prefix.user_groups_i02 ON &mw_prefix.user_groups (ug_expiry); CREATE TABLE &mw_prefix.user_former_groups ( ufg_user NUMBER DEFAULT 0 NOT NULL, diff --git a/maintenance/postgres/tables.sql b/maintenance/postgres/tables.sql index 61ad075b5b..e19c447a65 100644 --- a/maintenance/postgres/tables.sql +++ b/maintenance/postgres/tables.sql @@ -58,10 +58,13 @@ INSERT INTO mwuser VALUES (DEFAULT,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,now(),now()); CREATE TABLE user_groups ( - ug_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, - ug_group TEXT NOT NULL + ug_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + ug_group TEXT NOT NULL, + ug_expiry TIMESTAMPTZ NULL, + PRIMARY KEY(ug_user, ug_group) ); -CREATE UNIQUE INDEX user_groups_unique ON user_groups (ug_user, ug_group); +CREATE INDEX user_groups_group ON user_groups (ug_group); +CREATE INDEX user_groups_expiry ON user_groups (ug_expiry); CREATE TABLE user_former_groups ( ufg_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, diff --git a/maintenance/sqlite/archives/patch-user_groups-ug_expiry.sql b/maintenance/sqlite/archives/patch-user_groups-ug_expiry.sql new file mode 100644 index 0000000000..7fc8941609 --- /dev/null +++ b/maintenance/sqlite/archives/patch-user_groups-ug_expiry.sql @@ -0,0 +1,21 @@ +DROP TABLE IF EXISTS /*_*/user_groups_tmp; + +CREATE TABLE /*$wgDBprefix*/user_groups_tmp ( + ug_user int unsigned NOT NULL default 0, + ug_group varbinary(255) NOT NULL default '', + ug_expiry varbinary(14) NULL default NULL, + PRIMARY KEY (ug_user, ug_group) +); + +INSERT OR IGNORE INTO /*_*/user_groups_tmp ( + ug_user, ug_group ) + SELECT + ug_user, ug_group + FROM /*_*/user_groups; + +DROP TABLE /*_*/user_groups; + +ALTER TABLE /*_*/user_groups_tmp RENAME TO /*_*/user_groups; + +CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group); +CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups (ug_expiry); diff --git a/maintenance/tables.sql b/maintenance/tables.sql index 2b6ea03cc6..892f799d54 100644 --- a/maintenance/tables.sql +++ b/maintenance/tables.sql @@ -160,11 +160,17 @@ CREATE TABLE /*_*/user_groups ( -- with particular permissions. A user will have the combined -- permissions of any group they're explicitly in, plus -- the implicit '*' and 'user' groups. - ug_group varbinary(255) NOT NULL default '' + ug_group varbinary(255) NOT NULL default '', + + -- Time at which the user group membership will expire. Set to + -- NULL for a non-expiring (infinite) membership. + ug_expiry varbinary(14) NULL default NULL, + + PRIMARY KEY (ug_user, ug_group) ) /*$wgDBTableOptions*/; -CREATE UNIQUE INDEX /*i*/ug_user_group ON /*_*/user_groups (ug_user,ug_group); CREATE INDEX /*i*/ug_group ON /*_*/user_groups (ug_group); +CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups (ug_expiry); -- Stores the groups the user has once belonged to. -- The user may still belong to these groups (check user_groups). diff --git a/resources/Resources.php b/resources/Resources.php index 8283792e2e..f14787f815 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1956,6 +1956,7 @@ return [ ], ], 'mediawiki.special.userrights' => [ + 'styles' => 'resources/src/mediawiki.special/mediawiki.special.userrights.css', 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userrights.js', 'dependencies' => [ 'mediawiki.notification.convertmessagebox', diff --git a/resources/lib/jquery.ui/jquery.ui.draggable.js b/resources/lib/jquery.ui/jquery.ui.draggable.js index 37680224cf..723dbd4915 100644 --- a/resources/lib/jquery.ui/jquery.ui.draggable.js +++ b/resources/lib/jquery.ui/jquery.ui.draggable.js @@ -133,9 +133,13 @@ $.widget("ui.draggable", $.ui.mouse, { }); //Generate the original position - this.originalPosition = this.position = this._generatePosition(event); this.originalPageX = event.pageX; this.originalPageY = event.pageY; + this.originalPosition = this.position = this._generatePosition(event); + // These lines where moved up to fix an issue with with draggable, revert and grid + // See: https://bugs.jqueryui.com/ticket/4696 and https://gerrit.wikimedia.org/r/#/c/333224 + // this.originalPageX = event.pageX; + // this.originalPageY = event.pageY; //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); diff --git a/resources/src/mediawiki.special/mediawiki.special.userrights.css b/resources/src/mediawiki.special/mediawiki.special.userrights.css new file mode 100644 index 0000000000..a4b4087d8e --- /dev/null +++ b/resources/src/mediawiki.special/mediawiki.special.userrights.css @@ -0,0 +1,12 @@ +/*! + * Styling for Special:UserRights + */ +.mw-userrights-nested { + margin-left: 1.2em; +} + +.mw-userrights-nested span { + margin-left: 0.3em; + display: inline-block; + vertical-align: middle; +} diff --git a/resources/src/mediawiki.special/mediawiki.special.userrights.js b/resources/src/mediawiki.special/mediawiki.special.userrights.js index 064398851b..3f864dd53d 100644 --- a/resources/src/mediawiki.special/mediawiki.special.userrights.js +++ b/resources/src/mediawiki.special/mediawiki.special.userrights.js @@ -1,8 +1,18 @@ /*! * JavaScript for Special:UserRights */ -( function () { +( function ( $ ) { var convertmessagebox = require( 'mediawiki.notification.convertmessagebox' ); // Replace successbox with notifications convertmessagebox(); -}() ); + + // Dynamically show/hide the expiry selection underneath each checkbox + $( '#mw-userrights-form2 input[type=checkbox]' ).on( 'change', function ( e ) { + $( '#mw-userrights-nested-' + e.target.id ).toggle( e.target.checked ); + } ).trigger( 'change' ); + + // Also dynamically show/hide the "other time" input under each dropdown + $( '.mw-userrights-nested select' ).on( 'change', function ( e ) { + $( e.target.parentNode ).find( 'input' ).toggle( $( e.target ).val() === 'other' ); + } ).trigger( 'change' ); +}( jQuery ) ); diff --git a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js index 7f5e608f91..0ec6a4c518 100644 --- a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js +++ b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js @@ -72,6 +72,8 @@ * while the widget is inactive. Should be as unambiguous as possible (for example, prefer to * spell out the month, rather than rely on the order), even if that makes it longer. When not * given, the default is language-specific. + * @cfg {boolean} [longDisplayFormat=false] If a custom displayFormat is not specified, use + * unabbreviated day of the week and month names in the default language-specific displayFormat. * @cfg {string} [placeholderLabel=No date selected] Placeholder text shown when the widget is not * selected. Default text taken from message `mw-widgets-dateinput-no-date`. * @cfg {string} [placeholderDateFormat] User-visible date format string displayed in the textual input @@ -92,6 +94,7 @@ // Config initialization config = $.extend( { precision: 'day', + longDisplayFormat: false, required: false, placeholderLabel: mw.msg( 'mw-widgets-dateinput-no-date' ) }, config ); @@ -129,6 +132,7 @@ this.inTextInput = 0; this.inputFormat = config.inputFormat; this.displayFormat = config.displayFormat; + this.longDisplayFormat = config.longDisplayFormat; this.required = config.required; this.placeholderLabel = config.placeholderLabel; @@ -439,6 +443,10 @@ ll = localeData.longDateFormat( 'll' ); format = llll.replace( lll.replace( ll, '' ), '' ); + if ( this.longDisplayFormat ) { + format = format.replace( 'MMM', 'MMMM' ).replace( 'ddd', 'dddd' ); + } + return format; } }; diff --git a/tests/parser/TestFileEditor.php b/tests/parser/TestFileEditor.php index 05b1216fe6..7f646710ed 100644 --- a/tests/parser/TestFileEditor.php +++ b/tests/parser/TestFileEditor.php @@ -125,7 +125,7 @@ class TestFileEditor { $line = $this->lines[$this->pos++]; $heading = $this->getHeading( $line ); $expectedEnd = 'end' . $heading; - $contents = $line; + $contents = "$line\n"; do { $line = $this->lines[$this->pos++]; diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt index 1563525f94..46e10123be 100644 --- a/tests/parser/parserTests.txt +++ b/tests/parser/parserTests.txt @@ -16242,13 +16242,13 @@ HTML tag with leading space is parsed as text # This test case is fixed in Parsoid by domino 1.0.12. (bug 50604) # Note that html2wt is considerably more difficult if we use in -# the test case, instead of +# the test case, instead of !! test Ensure that HTML adoption agency algorithm is properly implemented. !! wikitext -XYZ +XYZ !! html -

XYZ +

XYZ

!! end diff --git a/tests/phan/config.php b/tests/phan/config.php index 19469d93e1..c561f8174a 100644 --- a/tests/phan/config.php +++ b/tests/phan/config.php @@ -37,7 +37,9 @@ return [ 'file_list' => array_merge( function_exists( 'register_postsend_function' ) ? [] : [ 'tests/phan/stubs/hhvm.php' ], function_exists( 'wikidiff2_do_diff' ) ? [] : [ 'tests/phan/stubs/wikidiff.php' ], + function_exists( 'tideways_enable' ) ? [] : [ 'tests/phan/stubs/tideways.php' ], class_exists( PEAR::class ) ? [] : [ 'tests/phan/stubs/mail.php' ], + class_exists( Memcached::class ) ? [] : [ 'tests/phan/stubs/memcached.php' ], [ 'maintenance/7zip.inc', 'maintenance/backupPrefetch.inc', @@ -79,10 +81,7 @@ return [ * This is useful for excluding hopelessly unanalyzable * files that can't be removed for whatever reason. */ - 'exclude_file_list' => function_exists( 'xcache_get' ) ? [] : [ - // References xcache which probably isn't installed - 'includes/libs/objectcache/XCacheBagOStuff.php' - ], + 'exclude_file_list' => [], /** * A list of directories holding code that we want diff --git a/tests/phan/stubs/memcached.php b/tests/phan/stubs/memcached.php new file mode 100644 index 0000000000..ee47937a76 --- /dev/null +++ b/tests/phan/stubs/memcached.php @@ -0,0 +1,16 @@ +addMeta( 'http:expires', '0' ); $outputPage->addMeta( 'keywords', 'first' ); $outputPage->addMeta( 'keywords', 'second' ); + $outputPage->addMeta( 'og:title', 'Ta-duh' ); $expected = [ [ 'http:expires', '0' ], [ 'keywords', 'first' ], [ 'keywords', 'second' ], + [ 'og:title', 'Ta-duh' ], ]; $this->assertSame( $expected, $outputPage->getMetaTags() ); @@ -34,6 +36,7 @@ class OutputPageTest extends MediaWikiTestCase { $this->assertContains( '', $links ); $this->assertContains( '', $links ); $this->assertContains( '', $links ); + $this->assertContains( '', $links ); $this->assertArrayNotHasKey( 'meta-robots', $links ); } diff --git a/tests/phpunit/includes/TestLogger.php b/tests/phpunit/includes/TestLogger.php index 7086a926be..84a6adf2ac 100644 --- a/tests/phpunit/includes/TestLogger.php +++ b/tests/phpunit/includes/TestLogger.php @@ -38,9 +38,11 @@ class TestLogger extends \Psr\Log\AbstractLogger { private $filter = null; /** - * @param bool $collect Whether to collect logs + * @param bool $collect Whether to collect logs. @see setCollect() * @param callable $filter Filter logs before collecting/printing. Signature is * string|null function ( string $message, string $level, array $context ); + * @param bool $collectContext Whether to keep the context passed to log. + * @since 1.29 @see setCollectContext() */ public function __construct( $collect = false, $filter = null, $collectContext = false ) { $this->collect = $collect; @@ -51,9 +53,23 @@ class TestLogger extends \Psr\Log\AbstractLogger { /** * Set the "collect" flag * @param bool $collect + * @return TestLogger $this */ public function setCollect( $collect ) { $this->collect = $collect; + return $this; + } + + /** + * Set the collectContext flag + * + * @param bool $collectContext + * @since 1.29 + * @return TestLogger $this + */ + public function setCollectContext( $collectContext ) { + $this->collectContext = $collectContext; + return $this; } /** diff --git a/tests/phpunit/includes/api/ApiMainTest.php b/tests/phpunit/includes/api/ApiMainTest.php index 71dafceb5a..eff41e3492 100644 --- a/tests/phpunit/includes/api/ApiMainTest.php +++ b/tests/phpunit/includes/api/ApiMainTest.php @@ -546,7 +546,9 @@ class ApiMainTest extends ApiTestCase { [ 'code' => 'existing-error', 'text' => 'existing error', 'module' => 'main' ], [ 'code' => 'ue', 'text' => "Usage exception!", 'data' => [ 'foo' => 'bar' ] ] ], - 'docref' => "See $doclink for API usage.", + 'docref' => "See $doclink for API usage. Subscribe to the mediawiki-api-announce mailing " . + "list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> " . + "for notice of API deprecations and breaking changes.", 'servedby' => wfHostname(), ] ], @@ -564,7 +566,9 @@ class ApiMainTest extends ApiTestCase { [ 'code' => 'sv-error1', 'text' => 'An error', 'module' => 'foo+bar' ], [ 'code' => 'sv-error2', 'text' => 'Another error', 'module' => 'foo+bar' ], ], - 'docref' => "See $doclink for API usage.", + 'docref' => "See $doclink for API usage. Subscribe to the mediawiki-api-announce mailing " . + "list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> " . + "for notice of API deprecations and breaking changes.", 'servedby' => wfHostname(), ] ], diff --git a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php index ccabab68a9..4ff1eb8e76 100644 --- a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php +++ b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php @@ -69,19 +69,12 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase { $diff = [ 'curid' => 5, 'diff' => 191, 'oldid' => 190 ]; $cur = [ 'curid' => 5, 'diff' => 0, 'oldid' => 191 ]; - $this->assertQueryLink( 'cur', $cur, $cacheEntry->curlink, 'cur link' ); - $this->assertQueryLink( 'prev', $diff, $cacheEntry->lastlink, 'prev link' ); - $this->assertQueryLink( 'diff', $diff, $cacheEntry->difflink, 'diff link' ); + $this->assertQueryLink( 'cur', $cur, $cacheEntry->curlink ); + $this->assertQueryLink( 'prev', $diff, $cacheEntry->lastlink ); + $this->assertQueryLink( 'diff', $diff, $cacheEntry->difflink ); } public function testNewForDeleteChange() { - $expected = [ - 'title' => 'Abc', - 'user' => 'TestRecentChangesUser', - 'timestamp' => '21:21', - 'numberofWatchingusers' => 0, - 'unpatrolled' => false - ]; $user = $this->getMutableTestUser()->getUser(); $recentChange = $this->testRecentChangesHelper->makeLogRecentChange( 'delete', diff --git a/tests/phpunit/includes/content/ContentHandlerTest.php b/tests/phpunit/includes/content/ContentHandlerTest.php index 91d2297d8a..efd60e5fb8 100644 --- a/tests/phpunit/includes/content/ContentHandlerTest.php +++ b/tests/phpunit/includes/content/ContentHandlerTest.php @@ -409,6 +409,7 @@ class ContentHandlerTest extends MediaWikiTestCase { $this->assertArrayHasKey( 'external_link', $fields ); $this->assertArrayHasKey( 'outgoing_link', $fields ); $this->assertArrayHasKey( 'template', $fields ); + $this->assertArrayHasKey( 'content_model', $fields ); } private function newSearchEngine() { @@ -445,6 +446,7 @@ class ContentHandlerTest extends MediaWikiTestCase { $this->assertArrayHasKey( 'language', $data ); $this->assertArrayHasKey( 'testDataField', $data ); $this->assertEquals( 'test content', $data['testDataField'] ); + $this->assertEquals( 'wikitext', $data['content_model'] ); } /** diff --git a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php index 81b75dea17..3b69590878 100644 --- a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php +++ b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php @@ -25,6 +25,8 @@ * @copyright © 2013 Wikimedia Foundation Inc. */ +use Wikimedia\Rdbms\TransactionProfiler; + /** * Fake class around abstract class so we can call concrete methods. */ diff --git a/tests/phpunit/includes/db/DatabaseTestHelper.php b/tests/phpunit/includes/db/DatabaseTestHelper.php index c5603c4093..d689d50a42 100644 --- a/tests/phpunit/includes/db/DatabaseTestHelper.php +++ b/tests/phpunit/includes/db/DatabaseTestHelper.php @@ -1,5 +1,7 @@ assertGreaterThan( -5.1, $curTTL, "Correct CTL" ); } + /** + * @covers WANObjectCache::reap() + * @covers WANObjectCache::reapCheckKey() + */ + public function testReap() { + $vKey1 = wfRandomString(); + $vKey2 = wfRandomString(); + $tKey1 = wfRandomString(); + $tKey2 = wfRandomString(); + $value = 'moo'; + + $knownPurge = time() - 60; + $goodTime = microtime( true ) - 5; + $badTime = microtime( true ) - 300; + + $this->internalCache->set( + WANObjectCache::VALUE_KEY_PREFIX . $vKey1, + [ + WANObjectCache::FLD_VERSION => WANObjectCache::VERSION, + WANObjectCache::FLD_VALUE => $value, + WANObjectCache::FLD_TTL => 3600, + WANObjectCache::FLD_TIME => $goodTime + ] + ); + $this->internalCache->set( + WANObjectCache::VALUE_KEY_PREFIX . $vKey2, + [ + WANObjectCache::FLD_VERSION => WANObjectCache::VERSION, + WANObjectCache::FLD_VALUE => $value, + WANObjectCache::FLD_TTL => 3600, + WANObjectCache::FLD_TIME => $badTime + ] + ); + $this->internalCache->set( + WANObjectCache::TIME_KEY_PREFIX . $tKey1, + WANObjectCache::PURGE_VAL_PREFIX . $goodTime + ); + $this->internalCache->set( + WANObjectCache::TIME_KEY_PREFIX . $tKey2, + WANObjectCache::PURGE_VAL_PREFIX . $badTime + ); + + $this->assertEquals( $value, $this->cache->get( $vKey1 ) ); + $this->assertEquals( $value, $this->cache->get( $vKey2 ) ); + $this->cache->reap( $vKey1, $knownPurge, $bad1 ); + $this->cache->reap( $vKey2, $knownPurge, $bad2 ); + + $this->assertFalse( $bad1 ); + $this->assertTrue( $bad2 ); + + $this->cache->reapCheckKey( $tKey1, $knownPurge, $tBad1 ); + $this->cache->reapCheckKey( $tKey2, $knownPurge, $tBad2 ); + $this->assertFalse( $tBad1 ); + $this->assertTrue( $tBad2 ); + } + /** * @covers WANObjectCache::set() */ @@ -926,6 +982,8 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $wanCache->getMulti( [ 'x', 'y' ], $ctls, [ 'check2' ] ); $wanCache->getWithSetCallback( 'p', 30, $valFunc ); $wanCache->getCheckKeyTime( 'zzz' ); + $wanCache->reap( 'x', time() - 300 ); + $wanCache->reap( 'zzz', time() - 300 ); } /** diff --git a/tests/phpunit/includes/logging/RightsLogFormatterTest.php b/tests/phpunit/includes/logging/RightsLogFormatterTest.php index a81e7ec30b..f48507d8ab 100644 --- a/tests/phpunit/includes/logging/RightsLogFormatterTest.php +++ b/tests/phpunit/includes/logging/RightsLogFormatterTest.php @@ -10,6 +10,41 @@ class RightsLogFormatterTest extends LogFormatterTestCase { public static function provideRightsLogDatabaseRows() { return [ // Current format + [ + [ + 'type' => 'rights', + 'action' => 'rights', + 'comment' => 'rights comment', + 'user' => 0, + 'user_text' => 'Sysop', + 'namespace' => NS_USER, + 'title' => 'User', + 'params' => [ + '4::oldgroups' => [], + '5::newgroups' => [ 'sysop', 'bureaucrat' ], + 'oldmetadata' => [], + 'newmetadata' => [ + [ 'expiry' => null ], + [ 'expiry' => '20160101123456' ] + ], + ], + ], + [ + 'text' => 'Sysop changed group membership for User from (none) to ' + . 'bureaucrat (temporary, until 12:34, 1 January 2016) and administrator', + 'api' => [ + 'oldgroups' => [], + 'newgroups' => [ 'sysop', 'bureaucrat' ], + 'oldmetadata' => [], + 'newmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + [ 'group' => 'bureaucrat', 'expiry' => '2016-01-01T12:34:56Z' ], + ], + ], + ], + ], + + // Previous format (oldgroups and newgroups as arrays, no metadata) [ [ 'type' => 'rights', @@ -30,11 +65,16 @@ class RightsLogFormatterTest extends LogFormatterTestCase { 'api' => [ 'oldgroups' => [], 'newgroups' => [ 'sysop', 'bureaucrat' ], + 'oldmetadata' => [], + 'newmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ], + ], ], ], ], - // Legacy format + // Legacy format (oldgroups and newgroups as numeric-keyed strings) [ [ 'type' => 'rights', @@ -56,6 +96,11 @@ class RightsLogFormatterTest extends LogFormatterTestCase { 'api' => [ 'oldgroups' => [], 'newgroups' => [ 'sysop', 'bureaucrat' ], + 'oldmetadata' => [], + 'newmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ], + ], ], ], ], @@ -116,6 +161,13 @@ class RightsLogFormatterTest extends LogFormatterTestCase { 'api' => [ 'oldgroups' => [ 'sysop' ], 'newgroups' => [ 'sysop', 'bureaucrat' ], + 'oldmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + ], + 'newmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ], + ], ], ], ], @@ -142,6 +194,13 @@ class RightsLogFormatterTest extends LogFormatterTestCase { 'api' => [ 'oldgroups' => [ 'sysop' ], 'newgroups' => [ 'sysop', 'bureaucrat' ], + 'oldmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + ], + 'newmetadata' => [ + [ 'group' => 'sysop', 'expiry' => 'infinity' ], + [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ], + ], ], ], ], diff --git a/tests/phpunit/includes/page/WikiPageTest.php b/tests/phpunit/includes/page/WikiPageTest.php index e7782704aa..d32915b464 100644 --- a/tests/phpunit/includes/page/WikiPageTest.php +++ b/tests/phpunit/includes/page/WikiPageTest.php @@ -796,6 +796,7 @@ more stuff $this->assertEquals( 'Admin', $rev1->getUserText() ); # now, try the actual rollback + $admin->addToDatabase(); $admin->addGroup( "sysop" ); # XXX: make the test user a sysop... $token = $admin->getEditToken( [ $page->getTitle()->getPrefixedText(), $user2->getName() ], @@ -828,6 +829,7 @@ more stuff public function testDoRollback() { $admin = new User(); $admin->setName( "Admin" ); + $admin->addToDatabase(); $text = "one"; $page = $this->newPage( "WikiPageTest_testDoRollback" ); @@ -854,10 +856,7 @@ more stuff # now, try the rollback $admin->addGroup( "sysop" ); # XXX: make the test user a sysop... - $token = $admin->getEditToken( - [ $page->getTitle()->getPrefixedText(), $user1->getName() ], - null - ); + $token = $admin->getEditToken( 'rollback' ); $errors = $page->doRollback( $user1->getName(), "testing revert", @@ -884,6 +883,7 @@ more stuff public function testDoRollbackFailureSameContent() { $admin = new User(); $admin->setName( "Admin" ); + $admin->addToDatabase(); $admin->addGroup( "sysop" ); # XXX: make the test user a sysop... $text = "one"; @@ -899,6 +899,7 @@ more stuff $user1 = new User(); $user1->setName( "127.0.1.11" ); + $user1->addToDatabase(); $user1->addGroup( "sysop" ); # XXX: make the test user a sysop... $text .= "\n\ntwo"; $page = new WikiPage( $page->getTitle() ); @@ -912,10 +913,7 @@ more stuff # now, do a the rollback from the same user was doing the edit before $resultDetails = []; - $token = $user1->getEditToken( - [ $page->getTitle()->getPrefixedText(), $user1->getName() ], - null - ); + $token = $user1->getEditToken( 'rollback' ); $errors = $page->doRollback( $user1->getName(), "testing revert same user", @@ -929,10 +927,7 @@ more stuff # now, try the rollback $resultDetails = []; - $token = $admin->getEditToken( - [ $page->getTitle()->getPrefixedText(), $user1->getName() ], - null - ); + $token = $admin->getEditToken( 'rollback' ); $errors = $page->doRollback( $user1->getName(), "testing revert", diff --git a/tests/phpunit/includes/password/UserPasswordPolicyTest.php b/tests/phpunit/includes/password/UserPasswordPolicyTest.php index d16200beb6..5ea7b1d2a9 100644 --- a/tests/phpunit/includes/password/UserPasswordPolicyTest.php +++ b/tests/phpunit/includes/password/UserPasswordPolicyTest.php @@ -61,6 +61,7 @@ class UserPasswordPolicyTest extends MediaWikiTestCase { $upp = $this->getUserPasswordPolicy(); $user = User::newFromName( 'TestUserPolicy' ); + $user->addToDatabase(); $user->addGroup( 'sysop' ); $this->assertArrayEquals( @@ -106,6 +107,7 @@ class UserPasswordPolicyTest extends MediaWikiTestCase { $upp = $this->getUserPasswordPolicy(); $user = User::newFromName( $username ); + $user->addToDatabase(); foreach ( $groups as $group ) { $user->addGroup( $group ); } diff --git a/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php b/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php new file mode 100644 index 0000000000..97ea23cd8a --- /dev/null +++ b/tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php @@ -0,0 +1,96 @@ +setMwGlobals( [ + 'wgCanonicalServer' => 'https://example.org', + 'wgServerName' => 'example.org', + 'wgScriptPath' => '/w', + 'wgDBname' => 'example', + 'wgDBprefix' => '', + 'wgRCFeeds' => [], + 'wgRCEngines' => [], + ] ); + } + + /** + * @covers RecentChange::notifyRCFeeds + * @covers RecentChange::getEngine + * @covers RCFeedEngine + * @covers JSONRCFeedFormatter::formatArray + * @covers MachineReadableRCFeedFormatter::getLine + */ + public function testNotify() { + $feed = $this->getMockBuilder( 'RCFeedEngine' ) + ->setConstructorArgs( [ [ 'formatter' => 'JSONRCFeedFormatter' ] ] ) + ->setMethods( [ 'send' ] ) + ->getMock(); + + $feed->method( 'send' ) + ->willReturn( true ); + + $feed->expects( $this->once() ) + ->method( 'send' ) + ->with( $this->anything(), $this->callback( function ( $line ) { + $this->assertJsonStringEqualsJsonString( + json_encode( [ + 'id' => null, + 'type' => 'log', + 'namespace' => 0, + 'title' => 'Example', + 'comment' => '', + 'timestamp' => 1301644800, + 'user' => 'UTSysop', + 'bot' => false, + 'log_id' => 0, + 'log_type' => 'move', + 'log_action' => 'move', + 'log_params' => [ + 'color' => 'green', + 'nr' => 42, + 'pet' => 'cat', + ], + 'log_action_comment' => '', + 'server_url' => 'https://example.org', + 'server_name' => 'example.org', + 'server_script_path' => '/w', + 'wiki' => 'example', + ] ), + $line + ); + return true; + } ) ); + + $this->setMwGlobals( [ + 'wgRCFeeds' => [ + 'myfeed' => [ + 'uri' => 'test://localhost:1234', + 'formatter' => 'JSONRCFeedFormatter', + ], + ], + 'wgRCEngines' => [ + 'test' => $feed, + ], + ] ); + $logpage = SpecialPage::getTitleFor( 'Log', 'move' ); + $user = $this->getTestSysop()->getUser(); + $rc = RecentChange::newLogEntry( + '20110401080000', + $logpage, // &$title + $user, // &$user + '', // $actionComment + '127.0.0.1', // $ip + 'move', // $type + 'move', // $action + Title::makeTitle( 0, 'Example' ), // $target + '', // $logComment + LogEntryBase::makeParamBlob( [ + '4::color' => 'green', + '5:number:nr' => 42, + 'pet' => 'cat', + ] ) + ); + $rc->notifyRCFeeds(); + } +} diff --git a/tests/phpunit/includes/skins/SkinTemplateTest.php b/tests/phpunit/includes/skins/SkinTemplateTest.php index ff544cd23d..b843d17fbd 100644 --- a/tests/phpunit/includes/skins/SkinTemplateTest.php +++ b/tests/phpunit/includes/skins/SkinTemplateTest.php @@ -39,4 +39,62 @@ class SkinTemplateTest extends MediaWikiTestCase { ] ]; } + + /** + * @return PHPUnit_Framework_MockObject_MockObject|OutputPage + */ + private function getMockOutputPage( $isSyndicated, $html ) { + $mock = $this->getMock( OutputPage::class ); + $mock->expects( $this->once() ) + ->method( 'isSyndicated' ) + ->will( $this->returnValue( $isSyndicated ) ); + $mock->expects( $this->once() ) + ->method( 'getHTML' ) + ->will( $this->returnValue( $html ) ); + return $mock; + } + + public function provideSetupSkinUserCss() { + $defaultStyles = [ + 'mediawiki.legacy.shared', + 'mediawiki.legacy.commonPrint', + 'mediawiki.sectionAnchor', + ]; + $buttonStyle = 'mediawiki.ui.button'; + $feedStyle = 'mediawiki.feedlink'; + return [ + [ + $this->getMockOutputPage( false, '' ), + $defaultStyles + ], + [ + $this->getMockOutputPage( true, '' ), + array_merge( $defaultStyles, [ $feedStyle ] ) + ], + [ + $this->getMockOutputPage( false, 'FOO mw-ui-button BAR' ), + array_merge( $defaultStyles, [ $buttonStyle ] ) + ], + [ + $this->getMockOutputPage( true, 'FOO mw-ui-button BAR' ), + array_merge( $defaultStyles, [ $feedStyle, $buttonStyle ] ) + ], + ]; + } + + /** + * @param PHPUnit_Framework_MockObject_MockObject|OutputPage $outputPageMock + * @param string[] $expectedModuleStyles + * + * @covers SkinTemplate::setupSkinUserCss + * @dataProvider provideSetupSkinUserCss + */ + public function testSetupSkinUserCss( $outputPageMock, $expectedModuleStyles ) { + $outputPageMock->expects( $this->once() ) + ->method( 'addModuleStyles' ) + ->with( $expectedModuleStyles ); + + $skinTemplate = new SkinTemplate(); + $skinTemplate->setupSkinUserCss( $outputPageMock ); + } } diff --git a/tests/phpunit/includes/specials/SpecialSearchTest.php b/tests/phpunit/includes/specials/SpecialSearchTest.php index e9cf6a3516..13c21c01b7 100644 --- a/tests/phpunit/includes/specials/SpecialSearchTest.php +++ b/tests/phpunit/includes/specials/SpecialSearchTest.php @@ -205,6 +205,27 @@ class SpecialSearchTest extends MediaWikiTestCase { return $mock; } + + public function testSubPageRedirect() { + $this->setMwGlobals( [ + 'wgScript' => '/w/index.php', + ] ); + + $ctx = new RequestContext; + $sp = Title::newFromText( 'Special:Search/foo_bar' ); + SpecialPageFactory::executePath( $sp, $ctx ); + $url = $ctx->getOutput()->getRedirect(); + // some older versions of hhvm have a bug that doesn't parse relative + // urls with a port, so help it out a little bit. + // https://github.com/facebook/hhvm/issues/7136 + $url = wfExpandUrl( $url, PROTO_CURRENT ); + + $parts = parse_url( $url ); + $this->assertEquals( '/w/index.php', $parts['path'] ); + parse_str( $parts['query'], $query ); + $this->assertEquals( 'Special:Search', $query['title'] ); + $this->assertEquals( 'foo bar', $query['search'] ); + } } class SpecialSearchTestMockResultSet extends SearchResultSet { diff --git a/tests/phpunit/includes/user/UserGroupMembershipTest.php b/tests/phpunit/includes/user/UserGroupMembershipTest.php new file mode 100644 index 0000000000..a297f2970c --- /dev/null +++ b/tests/phpunit/includes/user/UserGroupMembershipTest.php @@ -0,0 +1,151 @@ +setMwGlobals( [ + 'wgGroupPermissions' => [ + 'unittesters' => [ + 'runtest' => true, + ], + 'testwriters' => [ + 'writetest' => true, + ] + ] + ] ); + + $this->userNoGroups = new User; + $this->userNoGroups->setName( 'NoGroups' ); + $this->userNoGroups->addToDatabase(); + + $this->userTester = new User; + $this->userTester->setName( 'Tester' ); + $this->userTester->addToDatabase(); + $this->userTester->addGroup( 'unittesters' ); + $this->expiryTime = wfTimestamp( TS_MW, time() + 100500 ); + $this->userTester->addGroup( 'testwriters', $this->expiryTime ); + } + + /** + * @covers UserGroupMembership::insert + * @covers UserGroupMembership::delete + */ + public function testAddAndRemoveGroups() { + $user = new User; + $user->addToDatabase(); + + // basic tests + $ugm = new UserGroupMembership( $user->getId(), 'unittesters' ); + $this->assertTrue( $ugm->insert() ); + $user->clearInstanceCache(); + $this->assertContains( 'unittesters', $user->getGroups() ); + $this->assertArrayHasKey( 'unittesters', $user->getGroupMemberships() ); + $this->assertTrue( $user->isAllowed( 'runtest' ) ); + + // try updating without allowUpdate. Should fail + $ugm = new UserGroupMembership( $user->getId(), 'unittesters', $this->expiryTime ); + $this->assertFalse( $ugm->insert() ); + + // now try updating with allowUpdate + $this->assertTrue( $ugm->insert( 2 ) ); + $user->clearInstanceCache(); + $this->assertContains( 'unittesters', $user->getGroups() ); + $this->assertArrayHasKey( 'unittesters', $user->getGroupMemberships() ); + $this->assertTrue( $user->isAllowed( 'runtest' ) ); + + // try removing the group + $ugm->delete(); + $user->clearInstanceCache(); + $this->assertThat( $user->getGroups(), + $this->logicalNot( $this->contains( 'unittesters' ) ) ); + $this->assertThat( $user->getGroupMemberships(), + $this->logicalNot( $this->arrayHasKey( 'unittesters' ) ) ); + $this->assertFalse( $user->isAllowed( 'runtest' ) ); + + // check that the user group is now in user_former_groups + $this->assertContains( 'unittesters', $user->getFormerGroups() ); + } + + private function addUserTesterToExpiredGroup() { + // put $userTester in a group with expiry in the past + $ugm = new UserGroupMembership( $this->userTester->getId(), 'sysop', '20010102030405' ); + $ugm->insert(); + } + + /** + * @covers UserGroupMembership::getMembershipsForUser + */ + public function testGetMembershipsForUser() { + $this->addUserTesterToExpiredGroup(); + + // check that the user in no groups has no group memberships + $ugms = UserGroupMembership::getMembershipsForUser( $this->userNoGroups->getId() ); + $this->assertEmpty( $ugms ); + + // check that the user in 2 groups has 2 group memberships + $testerUserId = $this->userTester->getId(); + $ugms = UserGroupMembership::getMembershipsForUser( $testerUserId ); + $this->assertCount( 2, $ugms ); + + // check that the required group memberships are present on $userTester, + // with the correct user IDs and expiries + $expectedGroups = [ 'unittesters', 'testwriters' ]; + + foreach ( $expectedGroups as $group ) { + $this->assertArrayHasKey( $group, $ugms ); + $this->assertEquals( $ugms[$group]->getUserId(), $testerUserId ); + $this->assertEquals( $ugms[$group]->getGroup(), $group ); + + if ( $group === 'unittesters' ) { + $this->assertNull( $ugms[$group]->getExpiry() ); + } elseif ( $group === 'testwriters' ) { + $this->assertEquals( $ugms[$group]->getExpiry(), $this->expiryTime ); + } + } + } + + /** + * @covers UserGroupMembership::getMembership + */ + public function testGetMembership() { + $this->addUserTesterToExpiredGroup(); + + // groups that the user doesn't belong to shouldn't be returned + $ugm = UserGroupMembership::getMembership( $this->userNoGroups->getId(), 'sysop' ); + $this->assertFalse( $ugm ); + + // implicit groups shouldn't be returned + $ugm = UserGroupMembership::getMembership( $this->userNoGroups->getId(), 'user' ); + $this->assertFalse( $ugm ); + + // expired groups shouldn't be returned + $ugm = UserGroupMembership::getMembership( $this->userTester->getId(), 'sysop' ); + $this->assertFalse( $ugm ); + + // groups that the user does belong to should be returned with correct properties + $ugm = UserGroupMembership::getMembership( $this->userTester->getId(), 'unittesters' ); + $this->assertInstanceOf( UserGroupMembership::class, $ugm ); + $this->assertEquals( $ugm->getUserId(), $this->userTester->getId() ); + $this->assertEquals( $ugm->getGroup(), 'unittesters' ); + $this->assertNull( $ugm->getExpiry() ); + } +} diff --git a/tests/phpunit/includes/user/UserTest.php b/tests/phpunit/includes/user/UserTest.php index fe56d27c93..26e5d89041 100644 --- a/tests/phpunit/includes/user/UserTest.php +++ b/tests/phpunit/includes/user/UserTest.php @@ -25,6 +25,7 @@ class UserTest extends MediaWikiTestCase { $this->setUpPermissionGlobals(); $this->user = new User; + $this->user->addToDatabase(); $this->user->addGroup( 'unittesters' ); } @@ -99,6 +100,7 @@ class UserTest extends MediaWikiTestCase { */ public function testUserGetRightsHooks() { $user = new User; + $user->addToDatabase(); $user->addGroup( 'unittesters' ); $user->addGroup( 'testwriters' ); $userWrapper = TestingAccessWrapper::newFromObject( $user ); diff --git a/tests/phpunit/languages/LanguageTest.php b/tests/phpunit/languages/LanguageTest.php index e2e64920ef..88bab90799 100644 --- a/tests/phpunit/languages/LanguageTest.php +++ b/tests/phpunit/languages/LanguageTest.php @@ -1585,7 +1585,7 @@ class LanguageTest extends LanguageClassesTestCase { * @covers Language::translateBlockExpiry() * @dataProvider provideTranslateBlockExpiry */ - public function testTranslateBlockExpiry( $expectedData, $str, $desc ) { + public function testTranslateBlockExpiry( $expectedData, $str, $now, $desc ) { $lang = $this->getLang(); if ( is_array( $expectedData ) ) { list( $func, $arg ) = $expectedData; @@ -1593,27 +1593,40 @@ class LanguageTest extends LanguageClassesTestCase { } else { $expected = $expectedData; } - $this->assertEquals( $expected, $lang->translateBlockExpiry( $str ), $desc ); + $this->assertEquals( $expected, $lang->translateBlockExpiry( $str, null, $now ), $desc ); } public static function provideTranslateBlockExpiry() { return [ - [ '2 hours', '2 hours', 'simple data from ipboptions' ], - [ 'indefinite', 'infinite', 'infinite from ipboptions' ], - [ 'indefinite', 'infinity', 'alternative infinite from ipboptions' ], - [ 'indefinite', 'indefinite', 'another alternative infinite from ipboptions' ], - [ [ 'formatDuration', 1023 * 60 * 60 ], '1023 hours', 'relative' ], - [ [ 'formatDuration', -1023 ], '-1023 seconds', 'negative relative' ], - [ [ 'formatDuration', 0 ], 'now', 'now' ], + [ '2 hours', '2 hours', 0, 'simple data from ipboptions' ], + [ 'indefinite', 'infinite', 0, 'infinite from ipboptions' ], + [ 'indefinite', 'infinity', 0, 'alternative infinite from ipboptions' ], + [ 'indefinite', 'indefinite', 0, 'another alternative infinite from ipboptions' ], + [ [ 'formatDuration', 1023 * 60 * 60 ], '1023 hours', 0, 'relative' ], + [ [ 'formatDuration', -1023 ], '-1023 seconds', 0, 'negative relative' ], + [ + [ 'formatDuration', 1023 * 60 * 60 ], + '1023 hours', + wfTimestamp( TS_UNIX, '19910203040506' ), + 'relative with initial timestamp' + ], + [ [ 'formatDuration', 0 ], 'now', 0, 'now' ], [ [ 'timeanddate', '20120102070000' ], '2012-1-1 7:00 +1 day', + 0, 'mixed, handled as absolute' ], - [ [ 'timeanddate', '19910203040506' ], '1991-2-3 4:05:06', 'absolute' ], - [ [ 'timeanddate', '19700101000000' ], '1970-1-1 0:00:00', 'absolute at epoch' ], - [ [ 'timeanddate', '19691231235959' ], '1969-12-31 23:59:59', 'time before epoch' ], - [ 'dummy', 'dummy', 'return garbage as is' ], + [ [ 'timeanddate', '19910203040506' ], '1991-2-3 4:05:06', 0, 'absolute' ], + [ [ 'timeanddate', '19700101000000' ], '1970-1-1 0:00:00', 0, 'absolute at epoch' ], + [ [ 'timeanddate', '19691231235959' ], '1969-12-31 23:59:59', 0, 'time before epoch' ], + [ + [ 'timeanddate', '19910910000000' ], + '10 september', + wfTimestamp( TS_UNIX, '19910203040506' ), + 'partial' + ], + [ 'dummy', 'dummy', 0, 'return garbage as is' ], ]; } diff --git a/tests/phpunit/specials/SpecialSearchTest.php b/tests/phpunit/specials/SpecialSearchTest.php deleted file mode 100644 index 20e88f5a5b..0000000000 --- a/tests/phpunit/specials/SpecialSearchTest.php +++ /dev/null @@ -1,23 +0,0 @@ -getOutput()->getRedirect(); - // some older versions of hhvm have a bug that doesn't parse relative - // urls with a port, so help it out a little bit. - // https://github.com/facebook/hhvm/issues/7136 - $url = wfExpandUrl( $url, PROTO_CURRENT ); - - $parts = parse_url( $url ); - $this->assertEquals( '/w/index.php', $parts['path'] ); - parse_str( $parts['query'], $query ); - $this->assertEquals( 'Special:Search', $query['title'] ); - $this->assertEquals( 'foo bar', $query['search'] ); - } -}